Model/datatypes/epc
Khalim Conn-Kowlessar e9575b529f Slice 99c: Elmhurst mapper — RR gables external for flats + SO wall code
Cert 9501 worksheet line (29a) lodges both RR gable walls (13.50 +
15.95 m²) as EXTERNAL walls at U=1.7 (the main-wall U for age B
Solid Brick), contributing +50.07 W/K on top of the 168.74 W/K main-
wall HLC for a (29a) total of 218.81 W/K. Two mapper gaps blocked
this:

1. The Summary mapper defaulted un-typed RR gable walls
   (`surface.gable_type=None`) to `gable_wall` (party, U=0.25 per
   RdSAP Table 4 row 2). For flats with RR — top-floor dwellings
   that sit at the end of a building block with no neighbour above
   — the gable walls are exposed external, not party. Threading
   `is_flat=property_type.lower()=='flat'` through
   `_map_elmhurst_building_parts` → `_map_elmhurst_room_in_roof` →
   `_map_elmhurst_rir_surface` switches the default for un-typed
   gables on flats to `gable_wall_external` (cascade falls through
   to main-wall U `uw`).

2. The Elmhurst wall-construction code map was missing "SO Solid
   Brick" (newer Elmhurst PDF variant; the cohort certs lodge "SB
   Solid Brick"). Cert 9501's main wall fell through to
   wall_construction=None → cascade uw=1.5 (Table-18 unknown-cons
   age-B default) instead of 1.7 (Table-18 solid-brick age-B).
   Added "SO": 3 alongside "SB": 3 — same SAP10 mapping.

Joint effect on cert 9501 Summary path:
- walls HLC 148.89 → 218.81 (exact worksheet match)
- party_walls HLC 7.36 → 0.00 (gables no longer route to party)
- (37) total HLC 229.71 → 296.68 (exact worksheet match)

Cohort regression check: 259/0 mapper-chain + extractor + golden
tests pass. Houses keep the historical un-typed-gable → party
default. Houses lodging "SO" instead of "SB" now also pick up the
correct solid-brick U-value.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 21:28:57 +00:00
..
domain Slice 99c: Elmhurst mapper — RR gables external for flats + SO wall code 2026-05-26 21:28:57 +00:00
loaders demo generated for use in address2uprn 2026-05-08 14:48:15 +00:00
schema Slice 98: API path shower-counts + window-rounding → cert 0330 1e-4 2026-05-26 18:51:44 +00:00
search bolstering testing 2026-04-28 13:46:09 +00:00
surveys Slice 53: Summary_000487 chain pins SAP at 1e-4 — last cohort cert closed 2026-05-24 21:42:42 +00:00
__init__.py testing out rebaselining 2026-02-12 22:25:03 +00:00
construction_age_band.py testing out rebaselining 2026-02-12 22:25:03 +00:00
efficiency.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
floor.py preparing partiy class 2026-02-05 08:54:27 +00:00
fuel.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
heating_controls.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
hotwater.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
main_heating.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
property_type_built_form.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
roof.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
walls.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
windows.py testing out rebaselining 2026-02-12 22:25:03 +00:00