mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
65 lines
2.7 KiB
Python
65 lines
2.7 KiB
Python
from dataclasses import dataclass
|
|
import datatypes.epc as epc_datatypes
|
|
from typing import Optional, Union
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class Address:
|
|
# address: Optional[str]
|
|
# full_address: Optional[str]
|
|
# property_type: Optional[str]
|
|
# built_form: Optional[str]
|
|
# estimated: bool
|
|
|
|
# New fields
|
|
uprn: Optional[int]
|
|
landlord_property_id: Optional[str]
|
|
address_1: str
|
|
address_2: Optional[str]
|
|
address_3: Optional[str]
|
|
full_address: str
|
|
postcode: str
|
|
landlord_total_floor_area_m2: Union[float, None]
|
|
# Property components
|
|
landlord_property_type: Optional[epc_datatypes.property_type_built_form.PropertyType]
|
|
landlord_built_form: Optional[epc_datatypes.property_type_built_form.BuiltForm]
|
|
landlord_wall_construction: Optional[epc_datatypes.walls.EpcWallDescriptions]
|
|
landlord_roof_construction: Optional[epc_datatypes.roof.EpcRoofDescriptions]
|
|
landlord_floor_construction: Optional[epc_datatypes.floor.EpcFloorDescriptions]
|
|
landlord_windows_type: Optional[epc_datatypes.windows.EpcWindowDescriptions]
|
|
landlord_heating_system: Optional[epc_datatypes.main_heating.EpcHeatingSystems]
|
|
landlord_fuel_type: Optional[epc_datatypes.fuel.EpcFuel]
|
|
landlord_heating_controls: Optional[epc_datatypes.heating_controls.EpcHeatingControls]
|
|
landlord_hot_water_system: Optional[epc_datatypes.hotwater.EpcHotWaterSystems]
|
|
# Efficiency
|
|
landlord_wall_efficiency: Optional[epc_datatypes.efficiency.EpcEfficiency]
|
|
landlord_roof_efficiency: Optional[epc_datatypes.efficiency.EpcEfficiency]
|
|
landlord_windows_efficiency: Optional[epc_datatypes.efficiency.EpcEfficiency]
|
|
landlord_heating_efficiency: Optional[epc_datatypes.efficiency.EpcEfficiency]
|
|
landlord_heating_controls_efficiency: Optional[epc_datatypes.efficiency.EpcEfficiency]
|
|
landlord_hot_water_efficiency: Optional[epc_datatypes.efficiency.EpcEfficiency]
|
|
|
|
# Additionals
|
|
landlord_has_sloping_ceiling: Optional[bool]
|
|
landlord_multi_glaze_proportion: Optional[float]
|
|
landlord_construction_age_band: Optional[epc_datatypes.construction_age_band.EpcConstructionAgeBand]
|
|
|
|
# Additional address data, associated to a standardised asset list
|
|
# domna_full_address: Optional[str]
|
|
# domna_address_1: Optional[str]
|
|
|
|
@property
|
|
def request_data(self) -> dict[str, Optional[str]]:
|
|
"""
|
|
Canonical request payload for downstream services.
|
|
"""
|
|
data = {
|
|
"uprn": self.uprn,
|
|
"landlord_property_id": self.landlord_property_id,
|
|
"postcode": self.postcode,
|
|
"address1": self.address_1,
|
|
"full_address": self.full_address,
|
|
}
|
|
|
|
# Drop nulls
|
|
return {k: v for k, v in data.items() if v is not None}
|