Model/backend/documents_parser/tests
Khalim Conn-Kowlessar ccef01bf27 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-06-01 16:28:45 +00:00
..
fixtures chore: stage cert 9501 fixtures (second boiler validation cert) 2026-06-01 16:28:45 +00:00
__init__.py Map to RdSapSiteNotes from site notes JSON 🟥 2026-04-16 13:54:03 +00:00
test_elmhurst_end_to_end.py fix: address 22 project-wide test failures from previous sweep 2026-05-26 13:34:51 +00:00
test_elmhurst_extractor.py extract window frame details from elmhurst site notes 🟥 2026-04-27 15:50:25 +00:00
test_end_to_end.py P6.1 follow-on: unbox BuildingPartIdentifier at backend boundaries 2026-05-20 09:58:23 +00:00
test_extractor.py Handle wall thickness "Unmeasurable" 🟩 2026-04-30 16:41:16 +00:00
test_pdf.py rename example site notes to PasHub_ and add Elmhurst example 2026-04-24 13:01:51 +00:00
test_summary_pdf_mapper_chain.py Slice 99c: Elmhurst mapper — RR gables external for flats + SO wall code 2026-06-01 16:28:45 +00:00