mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
Get building part roof insulation information from Roof Space section 🟩
This commit is contained in:
parent
b9bb580ebd
commit
857ab52815
1 changed files with 24 additions and 5 deletions
|
|
@ -1,5 +1,5 @@
|
|||
from datetime import date
|
||||
from typing import List, Sequence, Union
|
||||
from typing import List, Optional, Sequence, Union
|
||||
|
||||
from datatypes.epc.domain.epc_property_data import (
|
||||
EnergyElement,
|
||||
|
|
@ -55,9 +55,11 @@ from datatypes.epc.surveys.pashub_rdsap_site_notes import (
|
|||
BuildingMeasurements,
|
||||
ExtensionConstruction,
|
||||
ExtensionMeasurements,
|
||||
ExtensionRoofSpace,
|
||||
FloorMeasurement,
|
||||
HeatingAndHotWater,
|
||||
PasHubRdSapSiteNotes,
|
||||
RoofSpaceDetail,
|
||||
Ventilation,
|
||||
Window,
|
||||
)
|
||||
|
|
@ -91,13 +93,15 @@ class EpcPropertyDataMapper:
|
|||
renewables = survey.renewables
|
||||
room_counts = survey.room_count_elements
|
||||
|
||||
sap_building_parts = [_map_main_building_part(construction, measurements)]
|
||||
roof_space = survey.roof_space
|
||||
sap_building_parts = [_map_main_building_part(construction, measurements, roof_space.main_building)]
|
||||
if construction.extensions and measurements.extensions:
|
||||
for ext_c in construction.extensions:
|
||||
matching = [m for m in measurements.extensions if m.id == ext_c.id]
|
||||
if matching:
|
||||
matching_m = [m for m in measurements.extensions if m.id == ext_c.id]
|
||||
matching_r = [r for r in (roof_space.extensions or []) if r.id == ext_c.id]
|
||||
if matching_m:
|
||||
sap_building_parts.append(
|
||||
_map_extension_building_part(ext_c, matching[0])
|
||||
_map_extension_building_part(ext_c, matching_m[0], matching_r[0] if matching_r else None)
|
||||
)
|
||||
|
||||
total_floor_area = round(
|
||||
|
|
@ -1428,11 +1432,20 @@ def _map_floor_dimensions(floors: List[FloorMeasurement]) -> List[SapFloorDimens
|
|||
]
|
||||
|
||||
|
||||
def _map_roof(roof: Optional[Union[RoofSpaceDetail, ExtensionRoofSpace]]) -> tuple[Optional[str], Optional[Union[str, int]]]:
|
||||
if roof is None:
|
||||
return None, None
|
||||
thickness: Optional[Union[str, int]] = roof.insulation_thickness_mm if roof.insulation_thickness_mm is not None else roof.insulation_thickness
|
||||
return roof.insulation_at or None, thickness
|
||||
|
||||
|
||||
def _map_main_building_part(
|
||||
construction: BuildingConstruction,
|
||||
measurements: BuildingMeasurements,
|
||||
roof: RoofSpaceDetail,
|
||||
) -> SapBuildingPart:
|
||||
main = construction.main_building
|
||||
roof_location, roof_thickness = _map_roof(roof)
|
||||
return SapBuildingPart(
|
||||
identifier="main",
|
||||
construction_age_band=_extract_age_band(main.age_range),
|
||||
|
|
@ -1442,13 +1455,17 @@ def _map_main_building_part(
|
|||
party_wall_construction=main.party_wall_construction_type,
|
||||
sap_floor_dimensions=_map_floor_dimensions(measurements.main_building.floors),
|
||||
wall_thickness_mm=main.wall_thickness_mm,
|
||||
roof_insulation_location=roof_location,
|
||||
roof_insulation_thickness=roof_thickness,
|
||||
)
|
||||
|
||||
|
||||
def _map_extension_building_part(
|
||||
ext_c: ExtensionConstruction,
|
||||
ext_m: ExtensionMeasurements,
|
||||
roof: Optional[ExtensionRoofSpace],
|
||||
) -> SapBuildingPart:
|
||||
roof_location, roof_thickness = _map_roof(roof)
|
||||
return SapBuildingPart(
|
||||
identifier=f"extension_{ext_c.id}",
|
||||
construction_age_band=_extract_age_band(ext_c.age_range),
|
||||
|
|
@ -1458,6 +1475,8 @@ def _map_extension_building_part(
|
|||
party_wall_construction=ext_c.party_wall_construction_type,
|
||||
sap_floor_dimensions=_map_floor_dimensions(ext_m.floors),
|
||||
wall_thickness_mm=ext_c.wall_thickness_mm,
|
||||
roof_insulation_location=roof_location,
|
||||
roof_insulation_thickness=roof_thickness,
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue