mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
Three mapper extensions, validated by 000516 closing to 1e-4: 1. Roof-window separation by U-value threshold. Elmhurst Summary PDFs pool roof windows into the §11 vertical-window table with no type marker. The U-value is the only reliable signal — vertical glazing in the cohort tops out at 2.80 W/m²K, while Table 24 roof windows start at 3.0+. `_is_elmhurst_roof_window` filters U > 3.0 into `sap_roof_windows`; the rest flow through the `sap_windows` path. 2. Table-24 roof-window U-value lookup. The cohort lodges Manufacturer U=3.10 for the 000516 roof window, but the worksheet's (27a) line (U_eff=2.99) reverse-engineers to a raw U=3.40 — the RdSAP10 Table 24 "Double pre 2002" roof-window default. `_elmhurst_roof_ window_u_value` keyed on glazing-type captures the +0.3 W/m²K step; falls back to the lodged U for glazing types not yet in the table. 3. `SapWindow.window_width × window_height = lodged Area` convention. The Elmhurst Summary PDF carries lodged W (2 d.p.) × lodged H (2 d.p.) AND a precomputed Area (2 d.p., not always equal to product after rounding). The cascade reads only the W×H product across §3 / §5 / §6, so flattening to `(area, 1.0)` keeps the downstream area aligned with the worksheet's rounded value rather than reconstructing W×H with its own rounding drift (e.g. 1.22 × 1.76 = 2.1472 m² vs lodged 2.15 m²). The existing `test_first_window_*` tests pinning literal W/H were updated to pin the area product (the cascade-relevant invariant). Cohort state after this slice: 000474 0.0000 ✓ Slice 47 000477 +1.1161 Elmhurst floor_ach quirk 000480 0.0000 ✓ Slice 50 000487 +1.1844 extractor still drops most §11 windows 000490 0.0000 ✓ Slice 49 000516 0.0000 ✓ THIS SLICE 4/6 closed at 1e-4. 756 tests pass; pyright net-zero (35 baseline). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| epc | ||
| magicplan | ||
| __init__.py | ||
| datatypes.py | ||
| enums.py | ||