Model/domain
Khalim Conn-Kowlessar e75198ce5d Slice S0380.49: effective-monthly Table 12e PE factor for PV split per SAP 10.2 Appendix M1 §8
The PE cascade was crediting the PV split at annual Table 12 factors
(IMPORT 1.501 / EXPORT 0.501) instead of the spec-correct effective
monthly Table 12e factors. Per Appendix M1 §8 (p.94): "For calculation
of primary energy, for electricity used within the dwelling apply the
normal import PE factors for the relevant tariff from Table 12e. For
the electricity exported, apply the factors for 'electricity sold to
grid, PV', also from table 12e."

Cert 0380 worksheet (page 5) lodges 1.4960 / 0.4268 — the effective
monthly values weighted by E_PV,dw,m / E_PV,ex,m. The cascade now
computes the same via `_effective_monthly_pe_factor` (the helper
already in place for secondary heating, pumps+fans, lighting,
electric showers).

Two new Optional fields on `CalculatorInputs`:
- `pv_dwelling_primary_factor` — falls back to `other_primary_factor`
- `pv_exported_primary_factor` — falls back to `pv_export_primary_factor`

Both populated in `cert_to_inputs.py` via `_effective_monthly_pe_
factor(pv_split.epv_*_monthly_kwh, fuel_code)` — code 30 (standard
electricity) for dwelling, code 60 (electricity sold to grid, PV)
for exported. Mirrors the existing CO2 cascade shape exactly.

Cohort PE residual closure (kWh/m²):

| Cert | Post-S0380.48 | Post-S0380.49 |
|---|---:|---:|
| 0350 | -3.58 | **-2.96** |
| 0380 | -4.01 | **-3.06** |
| 2225 | -4.50 | **-3.73** |
| 2636 | -4.14 | **-3.44** |
| 3800 | -4.01 | **-3.25** |
| 9285 | -3.46 | **-2.81** |
| 9418 | -3.76 | **-3.01** |
| 2130 (PV gas) | -9.70 | **-8.22** |

7-cert ASHP+battery cluster closed by 0.6-0.8 kWh/m² each (matches
the +0.074 differential between annual 0.501 and worksheet 0.4268
applied to E_PV,ex ≈ 640 kWh/yr / TFA 60.43 = 0.78 kWh/m²). The
remaining -3 kWh/m² residual is β fine-tuning (cascade 0.751 vs
worksheet 0.7426 — small monthly D_PV distribution detail).

Cert 9501 (PV no battery) drifted +0.25 → +0.65 PE — known shape
change from the factor correction; β=0.498 matches worksheet
exactly so the drift uncovers a different small gap previously
masked by the wrong factors. Still well within tolerance.

CO2 + SAP unchanged. Pyright net-zero on touched files (34 errors
before, 34 after — all pre-existing).
2026-05-28 19:26:37 +00:00
..
addresses get rid of comments 2026-05-20 13:21:11 +00:00
sap10_calculator Slice S0380.49: effective-monthly Table 12e PE factor for PV split per SAP 10.2 Appendix M1 §8 2026-05-28 19:26:37 +00:00
sap10_ml Slice S0380.26: RdSAP10 §5.8 dry-lining adjustment on alt walls — closes cert 7700 -0.44 → +5e-5 2026-05-28 10:56:11 +00:00
tasks added postcode splitter rewrite to ddd 2026-05-19 16:35:09 +00:00
postcode.py get rid of comments 2026-05-20 13:21:11 +00:00