Model/infrastructure/postgres
Khalim Conn-Kowlessar 846a3238b3 Persist room-in-roof geometry via child tables 🟩
SapRoomInRoof.detailed_surfaces (+ the gable/common-wall scalars) had no columns,
so 107 corpus certs lost their whole §3.9/§3.10 room-in-roof geometry on the DB
round-trip and fell back to the Simplified all-elements age-band default —
worst case -15.21 SAP (#1665 / #1664).

Add EpcRoomInRoofModel (0..1 per building part, unique FK) + EpcRoomInRoofSurface
Model (0..n, surface_index order). Save nests via RETURNING (building part -> RIR
-> surfaces); delete clears bottom-up (surfaces -> room_in_roof -> parts) since
the FE FKs are ON DELETE no action; both read paths group + reconstruct in a new
_to_room_in_roof / _to_rir_surface, replacing the two-field flat rebuild in
_to_building_part. The flat room_in_roof_* columns on epc_building_part are
superseded and dropped in a follow-up (#1664). Nullable is preserved on
insulation_thickness_mm / u_value (null vs 0 is the Table 17-vs-18 branch); area
is unconstrained (a §3.9.2 absent-gable adjustment is signed). Drop the 8
_UNPERSISTED_ALLOWLIST entries. Verified: worst RIR cert 10012119141 round-trip
-15.21 -> 0.0000 with detailed_surfaces at deep equality.

Companion FE migration: assessment-model#443 (epc_room_in_roof +
epc_room_in_roof_surface). Deploy gate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 09:17:10 +00:00
..
modelling Scenario carries its Fabric First flag from the scenario table 🟩 2026-07-09 11:44:31 +00:00
__init__.py added postcode splitter rewrite to ddd 2026-05-19 16:35:09 +00:00
bulk_address_upload_table.py tests files 2026-06-04 11:47:42 +00:00
config.py added postcode splitter rewrite to ddd 2026-05-19 16:35:09 +00:00
engine.py fix db issues 2026-06-23 16:36:59 +00:00
epc_property_table.py Persist room-in-roof geometry via child tables 🟩 2026-07-23 09:17:10 +00:00
landlord_built_form_type_override_table.py Group landlord property-override enums under domain/epc/property_overrides 🟪 2026-06-19 14:49:58 +00:00
landlord_construction_age_band_override_table.py Group landlord property-override enums under domain/epc/property_overrides 🟪 2026-06-19 14:49:58 +00:00
landlord_glazing_override_table.py Group landlord property-override enums under domain/epc/property_overrides 🟪 2026-06-19 14:49:58 +00:00
landlord_main_fuel_override_table.py Group landlord property-override enums under domain/epc/property_overrides 🟪 2026-06-19 14:49:58 +00:00
landlord_main_heating_system_override_table.py Group landlord property-override enums under domain/epc/property_overrides 🟪 2026-06-19 14:49:58 +00:00
landlord_override_enums.py landlord overrid orchestration 2026-05-26 15:27:45 +00:00
landlord_property_type_override_table.py Group landlord property-override enums under domain/epc/property_overrides 🟪 2026-06-19 14:49:58 +00:00
landlord_roof_type_override_table.py Group landlord property-override enums under domain/epc/property_overrides 🟪 2026-06-19 14:49:58 +00:00
landlord_wall_type_override_table.py Group landlord property-override enums under domain/epc/property_overrides 🟪 2026-06-19 14:49:58 +00:00
landlord_water_heating_override_table.py Group landlord property-override enums under domain/epc/property_overrides 🟪 2026-06-19 14:49:58 +00:00
magic_plan_tables.py Window carries no opening_type — ventilation table is the sole persistence point 🟩 2026-06-08 09:45:15 +00:00
product_table.py feat(modelling): ProductRepository + Postgres materials-table source 2026-06-03 08:32:38 +00:00
property_baseline_performance_table.py Round-trip a null Lodged Performance through persistence 🟩 2026-06-30 22:13:04 +00:00
property_details_spatial_table.py feat(spatial): per-UPRN cache repo for the OS spatial reference 2026-06-04 17:15:51 +00:00
property_override_table.py Add the 5 new components to the override_component pgEnum mirror 🟩 2026-06-19 18:18:12 +00:00
property_table.py Legacy property columns no longer resolve type or built form 🟩 2026-07-07 12:52:11 +00:00
solar_table.py 17.1 and 18 done by claude 2026-06-12 12:52:36 +00:00
subtask_table.py added postcode splitter rewrite to ddd 2026-05-19 16:35:09 +00:00
task_table.py Read the property selection from task.inputs; route takes only task_id 🟩 2026-07-08 10:41:14 +00:00
uploaded_file_table.py UploadedFile, FileTypeEnum, FileSourceEnum importable from infrastructure.postgres.uploaded_file_table 🟩 2026-06-09 11:50:51 +00:00