Model/datatypes/epc/domain
Khalim Conn-Kowlessar 71d9738749 docs: flag deferred HP-on-E7 Table 12a + Table 4f pumps_fans cascade gap
Cert 000565 reveals a coupling between two SAP 10.2 cascade gaps
that prevents an isolated fix to either:

1. `_space_heating_fuel_cost_gbp_per_kwh` applies the E7 low-rate
   override to any electric main on a Dual meter. Per Table 12a,
   heat pumps on E7 use a ~33% high / 67% low split (cert 000565
   empirically) — NOT 100% low. The current binary all-low/all-high
   biases space-heating cost £-1.1k / £+1.3k respectively.

2. `_PUMPS_FANS_KWH_BY_MAIN_CATEGORY[4] = 0` for HPs (Table 4f says
   the circulation pump is in the COP). But certs with MEV / flue
   fans / solar HW pumps have those components added on top — cert
   000565's worksheet pin = 127.5 MEV + 45 flue + 80 solar = 252.5
   kWh, none of which the cascade currently sums.

Probed a fix that derives `main_heating_category=4` from
`sap_main_heating_code in {211-227, 521-527}` (the Table 4a HP
rows) and exempts category=4 from the off-peak override. The
mapper change is architecturally correct but coupling to (1) +
(2) leaves residuals worse at HEAD than at the prior commit — so
both edits are reverted and the spec rationale is folded into
TODO docstrings on the two helpers:

- `_elmhurst_main_heating_category` (mapper) — flags the deferred
  HP SAP code route + the two cascade prerequisites
- `_space_heating_fuel_cost_gbp_per_kwh` (cascade) — flags the
  Table 12a high/low split as a future cascade slice

Cohort regression check: 192 pass + 10 expected 000565 fails —
identical baseline to S0380.59. Docs-only, pyright net-zero.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 16:28:47 +00:00
..
tests fix: address 22 project-wide test failures from previous sweep 2026-05-26 13:34:51 +00:00
__init__.py fix broken imports and rename mapper class 2026-04-13 16:36:13 +00:00
epc.py added ucl corrected peui 2026-05-16 14:39:24 +00:00
epc_codes.csv slice 8a: window physics and orientation aggregates 2026-05-16 15:32:45 +00:00
epc_property_data.py Slice 90: API mapper translates party_wall_construction → SAP10 enum 2026-05-25 21:21:52 +00:00
field_mappings.py insulation thickness can be string 🟥 2026-04-15 14:26:09 +00:00
historic_epc.py demo generated for use in address2uprn 2026-05-08 14:48:15 +00:00
historic_epc_matching.py rank address similiarity 2026-05-12 16:02:01 +00:00
mapper.py docs: flag deferred HP-on-E7 Table 12a + Table 4f pumps_fans cascade gap 2026-06-01 16:28:47 +00:00