mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
SAP 10.2 Appendix M1 §3a (PDF p.93, lines 5470-5476): "E_space,m = (211)m + (213)m + (215)m, where (211), (213) and/or (215) should be included only where the fuel code applied to them in Section 10a of the SAP worksheet is 30, 32, 34, 35 or 38 (i.e. electricity not at the low-rate)." The PV-eligible demand D_PV,m was adding 100% of the main space-heating fuel (211)m whenever the main's Table-12 code was in the eligible set (30, …), ignoring the off-peak high/low split that §10a already bills via `_space_heating_fuel_cost_gbp_per_kwh`. Electric STORAGE heaters on a 7-hour tariff are charged wholly at the low rate (Table 12a Grid 1 SH fraction 0.00; worksheet (240) high-rate cost = 0), so none of (211) may enter D_PV — but the cascade counted it all, inflating R_PV,m = E_PV,m / D_PV,m and therefore the β onsite-PV split in the heating months. Fix mirrors the cost-side rate split: `_main_space_heating_high_rate_ fraction(main, tariff)` returns the high-rate portion (1.0 for non-electric / STANDARD, the published Grid 1 SH fraction otherwise, 0.0 when the Grid 1 SH row is unwired → 100% low rate), and `_pv_eligible_demand_monthly_kwh` scales the (211)m contribution by it. Backward-compatible: STANDARD-tariff electric mains and the gas-main / electric-secondary PV cohort are unchanged (fraction 1.0). On simulated case 19 (electric storage heaters, 7-hour, PV) this takes β_Jan 0.894 → 0.792, matching the worksheet 0.791, and the summer months (no main heating) already pinned exactly. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| applications | ||
| domain | ||
| infrastructure | ||
| orchestration | ||
| repositories | ||
| utilities | ||
| __init__.py | ||
| conftest.py | ||
| test_lambda_packaging.py | ||