mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-27 23:35:01 +00:00
EpcPropertyData.sap_roof_windows (List[SapRoofWindow]) had no table, so 55 corpus certs lost their rooflights on the DB round-trip and were re-scored without them (§3 (27a) heat transmission + §6 solar gain). Add EpcRoofWindowModel (mirrors EpcPhotovoltaicArrayModel) with a roof_window_index order column and the resolved SapRoofWindow fields; wire save (batch insert), delete (both delete paths), both read paths (get + get_many) and _compose reconstruction; drop the two _UNPERSISTED_ALLOWLIST entries. u_value_raw / g_perpendicular / frame_factor are stored resolved, not re-derived: the Table 24 lookup is keyed on glazing_type AND glazing_gap, and glazing_gap is not retained on SapRoofWindow, so they can't be reconstructed from the persisted fields. window_location is JSONB (int on API / str on site-notes). Verified: a roof-window cert round-trips sap_roof_windows to deep equality. Companion FE migration: assessment-model#443 (epc_roof_window). Deploy gate. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| modelling | ||
| __init__.py | ||
| bulk_address_upload_table.py | ||
| config.py | ||
| engine.py | ||
| epc_property_table.py | ||
| landlord_built_form_type_override_table.py | ||
| landlord_construction_age_band_override_table.py | ||
| landlord_glazing_override_table.py | ||
| landlord_main_fuel_override_table.py | ||
| landlord_main_heating_system_override_table.py | ||
| landlord_override_enums.py | ||
| landlord_property_type_override_table.py | ||
| landlord_roof_type_override_table.py | ||
| landlord_wall_type_override_table.py | ||
| landlord_water_heating_override_table.py | ||
| magic_plan_tables.py | ||
| product_table.py | ||
| property_baseline_performance_table.py | ||
| property_details_spatial_table.py | ||
| property_override_table.py | ||
| property_table.py | ||
| solar_table.py | ||
| subtask_table.py | ||
| task_table.py | ||
| uploaded_file_table.py | ||