Fase C — chronologische kalibratie

Het kalibratierapport waarin de capturefactor uur voor uur is nagerekend in plaats van uit maandtotalen afgeleid.

Dit is het onderzoeksdocument zoals het is vastgelegd, ongewijzigd overgenomen uit docs/calibration/phase-c-report.md. Het is in het Engels geschreven.

Run: 2026-07-27 · bun scripts/calibration/harness.ts · 81 grid cells · max energy-balance residual 5.2e-11 kWh. Full per-cell output: scripts/calibration/results.json.

Method

A full year rebuilt at hourly resolution from measured, committed data, compared against the production engine's monthly model:

ComponentSource
Load chronologyOfficial MFFBAS E1A 2026 profile, quarter-hours summed to 8,760 hours (scripts/calibration/data/e1a-2026-hourly.json)
Day-to-day solar volatilityKNMI De Bilt daily global radiation, 2024 — measured, 365 days (scripts/calibration/data/knmi-2024-daily-q.json)
Monthly PV totalsThe register's verified PVGIS monthly energy per orientation
Intra-day shapeClear-sky solar-geometry proxy (scripts/calibration/solar.ts) — distributes a day's known energy only

Grid (per the assumption-verification pack): loads 2,500/3,500/5,000 kWh · PV-to-load ratios 0.5/1.0/1.5 · zuid/oost-west/noord · batteries 2.7 kWh@0.8 kW, 5.2@2.2, 10.4@4.4 (RTE 0.85).

Two capture measures per cell:

  • captureShiftSolved (the calibration target): the capture factor at which the monthly model's annual shifted energy (using its own deficit heuristic) equals the chronological simulation's shifted energy. This is the value-relevant measure — the engine's economics run on shifted kWh.
  • captureCharge (diagnostic): chronologically charged ÷ monthly theoretical charge; conflates deficit-limited cycling, lower bound only.

Results

Distribution of captureShiftSolved (80 solvable cells): p10 0.52 · p25 0.63 · p50 0.79 · p75 0.86 · p90 0.90 (min 0.34, max 1.00; 1 cell unsolvable — the monthly deficit heuristic binds below chronological reality for a large battery at low PV ratio, i.e. the heuristic is slightly conservative there).

The spread is systematic, not noise — it tracks battery size relative to surplus:

Batteryratio 0.5 (med)ratio 1.0 (med)ratio 1.5 (med)
2.7 kWh / 0.8 kW0.780.860.86
5.2 kWh / 2.2 kW0.890.680.68
10.4 kWh / 4.4 kW0.960.530.52

Typical NL cell (3,500 kWh, ratio 1.0, 5.2 kWh): zuid 0.80, oost-west 0.65, noord 0.66.

Secondary findings:

  • Oversizing guardrail confirmed empirically: a 10.4 kWh battery at PV≈load captures only ~53% of its monthly-model theoretical — "te groot gekocht" is measurable, not editorial.
  • Self-use vs PV-to-load ratio (P1.5 direction confirmed): observed battery-free self-use falls 0.72 → 0.45 → 0.32 across ratios 0.5/1.0/1.5. Levels are an UPPER bound (the aggregate E1A profile is smoother than any single household), so this does NOT override the verified 0.35/0.28/0.19 occupancy triple from measured field data — it validates the ratio dependence for a future s0-as-function refinement.

Recommendation (for founder approval)

The current triple 0.80 / 0.88 / 0.95 is too optimistic: its conservative value equals the grid's median. Proposed calibrated triple, mapped to the distribution and the typical-cell range:

ScenarioCurrentProposedBasis
conservative0.800.55large-battery/typical-ratio medians (p10–p25 band)
base0.880.70typical NL cell (5.2 kWh, ratio 1.0, oost-west/zuid ≈ 0.65–0.80)
favourable0.950.85small-battery and low-ratio cells (p75–p90 band)

Engine v2 should replace the scenario constant with a function of usable capacity ÷ median daily surplus — this harness provides the curve. The methodology page must keep disclosing the capture-factor concept either way (spec §3.4).

Limitations (disclose alongside any use)

Single weather year (2024); aggregate E1A load chronology rather than individual household behaviour; clear-sky intra-day shape applied to cloudy days (flatter reality → slightly understates capture, conservative direction); no curtailment, no inverter clipping; distribution of daily energy by global horizontal radiation treats all orientations alike within a day.