mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +00:00
The deduplicated `epc.roofs[]` list cannot be indexed 1:1 against the building parts (190/329 multi-part certs have len(roofs) != len(parts)), so every part's `u_roof` consumed a SINGLE join of all roof descriptions. That leaked one part's insulation state onto another: a "Flat, no insulation" extension dragged a "Pitched, insulated (assumed)" main roof to the uninsulated 2.30, ~3x over-stating its heat loss. 3-part certs systematically under-rated (56% within-0.5, mean -0.79 SAP). Partition the non-RR roof descriptions into flat vs pitched/sloping and match each part to its own kind (`_main_roof_descriptions_by_kind`), falling back to the global join when a part's kind has no matching entry. Corpus cert 100010129331: roof 110.5 -> 31.3 W/K, +13.10 -> -0.05 SAP. RdSAP-21.0.1 within-0.5 68.8% -> 69.5% (MAE 0.888 -> 0.859; PE 13.9 -> 13.6); 3-part cohort 56% -> 61%. Floors/ceilings ratcheted. Pinned in test_heat_transmission (by_kind split + mixed-roof no-contamination). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| addresses | ||
| billing | ||
| epc_prediction | ||
| fuel_rates | ||
| magicplan | ||
| modelling | ||
| property | ||
| property_baseline | ||
| sap10_calculator | ||
| tasks | ||
| __init__.py | ||
| test_building_geometry.py | ||
| test_postcode.py | ||