Slice 68: party-wall "U Unable" + central_heating_pump_age_str → 1 diff left

Closes 4 of 5 remaining cohort 000474 diffs (5 → 1):

**Mapper:** Add "U" → 0 to `_ELMHURST_PARTY_WALL_CODE_TO_SAP10`. The
modal cohort lodgement Summary §7 "Party Wall Type: U Unable to
determine" was previously falling through to None; the cohort hand-
built convention uses 0 as the explicit "unknown" sentinel. The
cascade resolves both 0 and None to the same `u_party_wall` default
(0.25), so cascade output is unchanged. Closes 3 diffs (one per bp).

**Hand-built:** Set `central_heating_pump_age_str="Unknown"` on cohort
000474 Main heating detail (post-construction since the helper
doesn't expose the kwarg). Matches the Elmhurst mapper's surfaced
value from Summary §14 "Heat pump age: Unknown" — the str dual-
encoding internal_gains.py reads. Closes 1 diff.

All 66 cohort cascade pins remain GREEN at 1e-4. Pyright 35-error
baseline preserved on mapper.py; 0 errors on the hand-built file.

Remaining 1 diff on cohort 000474:
- `sap_windows: LEN 7 vs 5` — the cohort hand-built collapsed §11
  by glazing-type × orientation × bp group (preserving total area,
  cascade-equivalent but not field-equal); the mapper extracts 1:1
  with the worksheet's 7 §11 table rows. Next slice will expand the
  hand-built to 7 individual SapWindow entries matching the mapper.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-05-25 17:02:04 +00:00
parent ca39d072be
commit 6baf66cdde
2 changed files with 11 additions and 0 deletions

View file

@ -1867,6 +1867,12 @@ _ELMHURST_PARTY_WALL_CODE_TO_SAP10: Dict[str, int] = {
"CU": 4, # Cavity masonry unfilled — same U=0.5 cascade; Elmhurst
# encodes party-wall cavity type with the masonry sub-code
# (CU vs CF filled) — observed first on cert 001479 Main.
# "U Unable to determine" — the cohort's modal lodgement. The cohort
# hand-built convention uses 0 as the explicit "unknown" sentinel
# (rather than None) so cross-mapper field parity is preserved; the
# cascade resolves 0 to the same `u_party_wall` default (0.25) as
# None, so cascade output is unchanged for cohort-style certs.
"U": 0,
}

View file

@ -221,6 +221,11 @@ def build_epc() -> EpcPropertyData:
epc.sap_heating.shower_outlets = ShowerOutlets(
shower_outlet=ShowerOutlet(shower_outlet_type="Non-electric shower"),
)
# Summary §14 "Heat pump age: Unknown" — surfaced by the Elmhurst
# mapper as the str dual-encoding that internal_gains.py reads.
# `make_main_heating_detail` doesn't expose the str kwarg, so set
# here post-construction for cross-mapper field parity.
epc.sap_heating.main_heating_details[0].central_heating_pump_age_str = "Unknown"
return epc