mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
Schema-21.0.0/0.1's SapRoomInRoof dataclass declared only floor_area and construction_age_band. Real certs lodge gable wall lengths under sap_room_in_roof.room_in_roof_type_1 (RdSAP §3.9.1 Simplified Type 1). from_dict silently dropped the whole block at deserialization, so the mapper never had a chance to surface the lengths on EpcPropertyData. Fix: add RoomInRoofType1 dataclass to both schema-21 variants; extend SapRoomInRoof with `room_in_roof_type_1: Optional[...]`; update the mapper to populate EpcPropertyData.SapRoomInRoof gable_1_length_m / gable_2_length_m from the new field. Calculator behaviour unchanged this slice: heat_transmission.py:243 requires BOTH length AND height to contribute gable area, and the cert lodges length only (RdSAP §3.9.1 uses a default 2.45 m storey height — not yet plumbed). Cert 0240's −12 SAP residual unchanged. Schema scope: both 21.0.0 and 21.0.1 schemas (identical SapBuildingPart mapper code, kept consistent). Older schemas (17/18/19/20) don't carry this RR shape on their dataclasses and are out of scope per the prior cohort scope decision. Unblocks the follow-up slices that close the RR cascade: default H_gable in calculator or mapper, parse "Roof room(s), insulated (assumed)" description for the U-value override, etc. 930/930 Elmhurst cascade green. 14/14 golden cohort green at pinned residuals (no shift, as expected). 76/76 mapper tests green. Pyright net-zero (32 errors before and after). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| epc | ||
| magicplan | ||
| __init__.py | ||
| datatypes.py | ||
| enums.py | ||