mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
PE-side mirror of S0380.103 (cost) + S0380.105 (CO2). Completes the
MEV cascade trifecta for off-peak tariff certs. Cert 000565
worksheet line (281):
Pumps, fans and electric keep-hot 252.5159 1.5239 383.3796 (281)
The displayed factor (1.5239) is the ALL_OTHER_USES Table 12e Σ
days-weighted blend; the displayed product (383.3796) is the kWh-
weighted blend across the two Grid 2 categories:
F_FANS = 0.58 × F_code34 + 0.42 × F_code33 = 1.51268 kWh/kWh
F_OTHER = 0.80 × F_code34 + 0.20 × F_code33 = 1.52391 kWh/kWh
F_eff = (127.5159 × 1.51268 + 125.0 × 1.52391) / 252.5159
= 1.51824 kWh/kWh
PE = 252.5159 × 1.51824 = 383.3796 kWh/yr ✓
Pre-slice the cascade applied 1.52391 to ALL 252.5159 kWh →
384.81 → +1.43 over ws.
SAP 10.2 Table 12a Grid 2 (PDF p.191) — same dispatch as Slice
S0380.105 — splits the off-peak high-rate fraction by end-use
between `FANS_FOR_MECH_VENT` and `ALL_OTHER_USES`.
SAP 10.2 Table 12e (PDF p.195) verbatim header:
"Where electricity is the fuel used, the relevant set of factors
in the table below should be used to calculate the monthly
primary energy instead the annual average factor given in
Table 12."
The Grid 2 high-rate fraction blends Table 12e high-rate × low-
rate codes per `F_blended = high_frac × F_high + (1 − high_frac)
× F_low`. MEV fans bill at the lower 0.58 high_frac → lower PE
factor on the higher-PE high-rate code 34. Identical structural
fix as the .105 CO2 slice; the only delta is the underlying Table
12 column.
2-layer fix:
1. New helper `_pumps_fans_primary_factor` in cert_to_inputs.py
— mirror of `_pumps_fans_co2_factor_kg_per_kwh`. Returns kWh-
weighted blend of FANS_FOR_MECH_VENT + ALL_OTHER_USES factors.
Falls back to ALL_OTHER_USES rate on STANDARD / no-MEV certs.
2. Call site at line 4640 wires `mev_kwh_for_cost_split` +
`pumps_fans_kwh` through the helper.
Movement at HEAD `8a3aaf7a` → post-slice (cert 000565):
| Pin | Pre | Post |
|--------------------------------|-----------:|-----------:|
| pumps_fans_primary_factor | 1.52391 | 1.51824 |
| pumps_fans_pe_kwh_per_yr | 384.8122 | 383.3797 | ✓ EXACT vs ws (281)
| primary_energy_kwh_per_yr | 62228.4896 | 62227.0570 |
| primary_energy_kwh_per_m2 | 194.5187 | 194.5143 |
No effect on sap_score_continuous (ECF is cost-based, not PE-based),
ecf, or any of the 7 currently-failing 000565 pins. The total PE
residual remains dominated by an unrelated SH cascade PE factor
gap (cascade 170 kWh/m² vs ws 135.6 — separate slice).
Cohort safety: STANDARD-tariff and no-MEV certs return the existing
ALL_OTHER_USES rate (helper falls through). No-MEV certs return
the same rate (mev_kwh_per_yr=0 short-circuit). Pyright net-zero
per touched file (45 baseline → 45 post-change).
Test count: 605 pass + 7 expected 000565 fails → **606 pass + 7
expected 000565 fails** (new
test_summary_000565_mev_fans_pe_factor_uses_table_12a_grid_2_
fans_for_mech_vent_split GREEN; 7 known 000565 fails set unchanged).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| addresses | ||
| sap10_calculator | ||
| sap10_ml | ||
| tasks | ||
| postcode.py | ||