diff --git a/backend/condition/domain/asset_condition.py b/backend/condition/domain/aspect_condition.py similarity index 57% rename from backend/condition/domain/asset_condition.py rename to backend/condition/domain/aspect_condition.py index 8b054f45..75b46b09 100644 --- a/backend/condition/domain/asset_condition.py +++ b/backend/condition/domain/aspect_condition.py @@ -1,26 +1,17 @@ from dataclasses import dataclass -from datetime import date from typing import Optional -from xml.dom.minidom import Element +from datetime import date from backend.condition.domain.aspect_type import AspectType -from backend.condition.domain.element import Element @dataclass -class AssetCondition: - uprn: int - - element: Element +class AspectCondition: aspect_type: AspectType - element_instance: Optional[int] = None - aspect_instance: Optional[int] = None + aspect_instance: int value: Optional[str] = None - quantity: Optional[int] = None install_date: Optional[date] = None renewal_year: Optional[int] = None - - source_system: Optional[str] = None comments: Optional[str] = None diff --git a/backend/condition/domain/element.py b/backend/condition/domain/element.py index 2f6bac42..7aca11fd 100644 --- a/backend/condition/domain/element.py +++ b/backend/condition/domain/element.py @@ -1,261 +1,12 @@ -from enum import Enum +from dataclasses import dataclass +from typing import List + +from backend.condition.domain.aspect_condition import AspectCondition +from backend.condition.domain.element_type import ElementType -class Element(str, Enum): - - # ====================== - # PROPERTY / GENERAL - # ====================== - PROPERTY = "property" - PROPERTY_CONSTRUCTION_TYPE = "property_construction_type" - PROPERTY_CLASSIFICATION = "property_classification" - PROPERTY_AGE_BAND = "property_age_band" - STOREY_COUNT = "storey_count" - FLOOR_LEVEL = "floor_level" - FLOOR_LEVEL_FRONT_DOOR = "floor_level_front_door" - ACCESSIBLE_HOUSING_REGISTER = "accessible_housing_register" - ASBESTOS = "asbestos" - QUALITY_STANDARD = "quality_standard" - CCU = "ccu" - PASSENGER_LIFT = "passenger_lift" - STAIRLIFT = "stairlift" - DISABLED_HOIST_TRACKING = "disabled_hoist_tracking" - DISABLED_FACILITIES = "disabled_facilities" - STEPS_TO_FRONT_DOOR = "steps_to_front_door" - - # ====================== - # EXTERNAL – ROOF - # ====================== - ROOF = "roof" - PITCHED_ROOF_COVERING = "pitched_roof_covering" - FLAT_ROOF_COVERING = "flat_roof_covering" - RAINWATER_GOODS = "rainwater_goods" - LOFT_INSULATION = "loft_insulation" - PORCH_CANOPY = "porch_canopy" - CHIMNEY = "chimney" - FASCIA = "fascia" - SOFFIT = "soffit" - FASCIA_SOFFIT_BARGEBOARDS = "fascia_soffit_bargeboards" - GUTTERS = "gutters" - STORE_ROOF = "store_roof" - GARAGE_ROOF = "garage_roof" - GARAGE_AND_STORE_ROOF = "garage_and_store_roof" - - # ====================== - # EXTERNAL – WALLS - # ====================== - EXTERNAL_WALL = "external_wall" - EXTERNAL_NOISE_INSULATION = "external_noise_insulation" - PRIMARY_WALL = "primary_wall" - SECONDARY_WALL = "secondary_wall" - DOWNPIPES = "downpipes" - EXTERNAL_DECORATION = "external_decoration" - CLADDING = "cladding" - SPANDREL_PANELS = "spandrel_panels" - GARAGE_WALLS = "garage_walls" - PARTY_WALL_FIRE_BREAK = "party_wall_fire_break" - EXTERNAL_BRICKWORK_POINTING = "external_brickwork_pointing" - INTERNAL_DOWNPIPES_EXTERNAL_AREA = "internal_downpipes_external_area" - - # ====================== - # EXTERNAL – WINDOWS - # ====================== - EXTERNAL_WINDOWS = "external_windows" - COMMUNAL_WINDOWS = "communal_windows" - SECONDARY_GLAZING = "secondary_glazing" - STORE_WINDOWS = "store_windows" - GARAGE_WINDOWS = "garage_windows" - GARAGE_AND_STORE_WINDOWS = "garage_and_store_windows" - - # ====================== - # EXTERNAL – DOORS - # ====================== - EXTERNAL_DOOR = "external_door" - FRONT_DOOR = "front_door" - REAR_DOOR = "rear_door" - STORE_DOOR = "store_door" - GARAGE_DOOR = "garage_door" - GARAGE_AND_STORE_DOOR = "garage_and_store_door" - COMMUNAL_ENTRANCE_DOOR = "communal_entrance_door" - MAIN_DOOR = "main_door" - BLOCK_ENTRANCE_DOOR = "block_entrance_door" - LINTEL = "lintel" - PATIO_FRENCH_DOOR = "patio_french_door" - DOOR_ENTRY_HANDSET = "door_entry_handset" - - # ====================== - # EXTERNAL – AREAS - # ====================== - PATHS_AND_HARDSTANDINGS = "paths_and_hardstandings" - PARKING_AREAS = "parking_areas" - BOUNDARY_WALLS = "boundary_walls" - FRONT_FENCING = "front_fencing" - REAR_FENCING = "rear_fencing" - SIDE_FENCING = "side_fencing" - REAR_GATE = "rear_gate" - FRONT_GATE = "front_gate" - GATES = "gates" - RETAINING_WALLS = "retaining_walls" - PRIVATE_BALCONY = "private_balcony" - BALCONY_BALUSTRADE = "balcony_balustrade" - OUTBUILDINGS = "outbuildings" - GARAGE_STRUCTURE = "garage_structure" - PAVING = "paving" - ROADS = "roads" - SOIL_AND_VENT = "soil_and_vent" - SOLAR_THERMALS = "solar_thermals" - DROP_KERB = "drop_kerb" - OUTBUILDING_OVERHAUL = "outbuilding_overhaul" - EXTERNAL_STRUCTURAL_DEFECTS = "external_structural_defects" - ACCESS_RAMP = "access_ramp" - - # ====================== - # INTERNAL – KITCHEN - # ====================== - KITCHEN = "kitchen" - KITCHEN_SPACE_LAYOUT = "kitchen_space_layout" - TENANT_INSTALLED_KITCHEN = "tenant_installed_kitchen" - KITCHEN_EXTRACTOR_FAN = "kitchen_extractor_fan" - - # ====================== - # INTERNAL – BATHROOM - # ====================== - BATHROOM = "bathroom" - SECONDARY_BATHROOM = "secondary_bathroom" - SECONDARY_TOILET = "secondary_toilet" - BATHROOM_EXTRACTOR_FAN = "bathroom_extractor_fan" - ADDITIONAL_WC_OR_WHB = "additional_wc_or_whb" - BATHROOM_REMAINING_LIFE_SOURCE = "bathroom_remaining_life_source" - KITCHEN_REMAINING_LIFE_SOURCE = "kitchen_remaining_life_source" - - # ====================== - # INTERNAL – HEATING / WATER - # ====================== - CENTRAL_HEATING = "central_heating" - HEATING_BOILER = "heating_boiler" - HEATING_DISTRIBUTION = "heating_distribution" - SECONDARY_HEATING = "secondary_heating" - HOT_WATER_SYSTEM = "hot_water_system" - COLD_WATER_STORAGE = "cold_water_storage" - HEATING_SYSTEM = "heating_system" - BOILER_FUEL = "boiler_fuel" - WATER_HEATING = "water_heating" - PROGRAMMABLE_HEATING = "programmable_heating" - COMMUNITY_HEATING = ( - "community_heating" # Is this definitely different from COMMUNAL_HEATING? - ) - GAS_AVAILABLE = "gas_available" - HEAT_RECOVERY_UNITS = "heat_recovery_units" - HEATING_IMPROVEMENTS = "heating_improvements" - - # ====================== - # INTERNAL – ELECTRICS / FIRE - # ====================== - ELECTRICAL_WIRING = "electrical_wiring" - CONSUMER_UNIT = "consumer_unit" - SMOKE_DETECTION = "smoke_detection" - HEAT_DETECTION = "heat_detection" - CARBON_MONOXIDE_DETECTION = "carbon_monoxide_detection" - FIRE_DOOR_RATING = "fire_door_rating" - FIRE_RISK_ASSESSMENT = "fire_risk_assessment" - INTERNAL_WIRING = ( - "internal_wiring" # Is this definitely different from ELECTRICAL_WIRING? - ) - ELECTRICS = "electrics" - - # ====================== - # COMMUNAL - # ====================== - COMMUNAL_HEATING = "communal_heating" - COMMUNAL_BOILER = "communal_boiler" - COMMUNAL_ELECTRICS = "communal_electrics" - COMMUNAL_FIRE_ALARM = "communal_fire_alarm" - COMMUNAL_EMERGENCY_LIGHTING = "communal_emergency_lighting" - COMMUNAL_DOOR_ENTRY = "communal_door_entry" - COMMUNAL_CCTV = "communal_cctv" - COMMUNAL_BIN_STORE = "communal_bin_store" - COMMUNAL_BIN_STORE_DOORS = "communal_bin_store_doors" - COMMUNAL_BIN_STORE_WALLS = "communal_bin_store_walls" - COMMUNAL_BIN_STORE_ROOF = "communal_bin_store_roof" - COMMUNAL_REFUSE_CHUTE = "communal_refuse_chute" - COMMUNAL_FLOOR_COVERING = "communal_floor_covering" - COMMUNAL_KITCHEN = "communal_kitchen" - COMMUNAL_BATHROOM = "communal_bathroom" - COMMUNAL_TOILETS = "communal_toilets" - COMMUNAL_GATES = "communal_gates" - COMMUNAL_LIFT = "communal_lift" - COMMUNAL_PASSENGER_LIFT = "communal_passenger_lift" - COMMUNAL_BALCONY_WALKWAY = "communal_balcony_walkway" - COMMUNAL_ENTRANCE = "communal_entrance" - COMMUNAL_INTERNAL_DECORATIONS = "communal_internal_decorations" - COMMUNAL_INTERNAL_FLOOR = "communal_internal_floor" - COMMUNAL_WALKWAYS = "communal_walkways" - COMMUNAL_EXTERNAL_DOORS = "communal_external_doors" - COMMUNAL_STAIRS = "communal_stairs" - COMMUNAL_AERIAL = "communal_aerial" - COMMUNAL_AOV = "communal_aov" - COMMUNAL_INTERNAL_DOORS = "communal_internal_doors" - COMMUNAL_LATERAL_MAINS = "communal_lateral_mains" - COMMUNAL_LIGHTING = "communal_lighting" - COMMUNAL_LIGHTING_CONDUCTOR = "communal_lighting_conductor" - COMMUNAL_STORE_ROOF = "communal_store_roof" - COMMUNAL_STORE_WALLS = "communal_store_walls" - COMMUNAL_STORE_DOORS = "communal_store_doors" - COMMUNAL_WARDEN_CALL_SYSTEM = "communal_warden_call_system" - COMMUNAL_BMS = "communal_bms" - COMMUNAL_BOOSTER_PUMP = "communal_booster_pump" - COMMUNAL_DRY_RISER = "communal_dry_riser" - COMMUNAL_WET_RISER = "communal_wet_riser" - COMMUNAL_COLD_WATER_STORAGE = "communal_cold_water_storage" - COMMUNAL_SPRINKLER = "communal_sprinkler" - COMMUNAL_PLUG_SOCKETS = "communal_plug_sockets" - COMMUNAL_CIRCULATION_SPACE = "communal_circulation_space" - - # ====================== - # FITNESS FOR HUMAN HABITATION - # ====================== - FFHH_DAMP = "ffhh_damp" - FFHH_HOT_AND_COLD_WATER = "ffhh_hold_and_cold_water" - FFHH_DRAINAGE_LAVATORIES = "ffhh_drainage_lavatories" - FFHH_NEGLECTED = "ffhh_neglected" - FFHH_NATURAL_LIGHT = "ffhh_natural_light" - FFHH_VENTILATION = "ffhh_ventilation" - FFHH_FOOD_PREP_AND_WASHUP = "ffhh_food_prep_and_washup" - FFHH_UNSAFE_LAYOUT = "ffhh_unsafe_layout" - FFHH_UNSTABLE_BUILDING = "ffhh_unstable_building" - - # ========================================================== - # HHSRS – ALL 29 HAZARDS - # ========================================================== - - HHSRS_DAMP_AND_MOULD = "hhsrs_damp_and_mould" - HHSRS_EXCESS_COLD = "hhsrs_excess_cold" - HHSRS_EXCESS_HEAT = "hhsrs_excess_heat" - HHSRS_ASBESTOS_AND_MMF = "hhsrs_asbestos_and_mmf" - HHSRS_BIOCIDES = "hhsrs_biocides" - HHSRS_CARBON_MONOXIDE = "hhsrs_carbon_monoxide" - HHSRS_LEAD = "hhsrs_lead" - HHSRS_RADIATION = "hhsrs_radiation" - HHSRS_UNCOMBUSTED_FUEL_GAS = "hhsrs_uncombusted_fuel_gas" - HHSRS_VOLATILE_ORGANIC_COMPOUNDS = "hhsrs_volatile_organic_compounds" - HHSRS_CROWDING_AND_SPACE = "hhsrs_crowding_and_space" - HHSRS_ENTRY_BY_INTRUDERS = "hhsrs_entry_by_intruders" - HHSRS_LIGHTING = "hhsrs_lighting" - HHSRS_NOISE = "hhsrs_noise" - HHSRS_DOMESTIC_HYGIENE_PESTS_REFUSE = "hhsrs_domestic_hygiene_pests_refuse" - HHSRS_FOOD_SAFETY = "hhsrs_food_safety" - HHSRS_PERSONAL_HYGIENE_SANITATION = "hhsrs_personal_hygiene_sanitation" - HHSRS_WATER_SUPPLY = "hhsrs_water_supply" - HHSRS_FALLS_ASSOCIATED_WITH_BATHS = "hhsrs_falls_associated_with_baths" - HHSRS_FALLS_ON_LEVEL_SURFACES = "hhsrs_falls_on_level_surfaces" - HHSRS_FALLS_ON_STAIRS = "hhsrs_falls_on_stairs" - HHSRS_FALLS_BETWEEN_LEVELS = "hhsrs_falls_between_levels" - HHSRS_ELECTRICAL_HAZARDS = "hhsrs_electrical_hazards" - HHSRS_FIRE = "hhsrs_fire" - HHSRS_FLAMES_HOT_SURFACES = "hhsrs_flames_hot_surfaces" - HHSRS_COLLISION_AND_ENTRAPMENT = "hhsrs_collision_and_entrapment" - HHSRS_COLLISION_HAZARDS_LOW_HEADROOM = "hhsrs_collision_hazards_low_headroom" - HHSRS_EXPLOSIONS = "hhsrs_explosions" - HHSRS_ERGONOMICS = "hhsrs_ergonomics" - HHSRS_STRUCTURAL_COLLAPSE = "hhsrs_structural_collapse" - HHSRS_AMENITIES = "hhsrs_amenities" +@dataclass +class Element: + element: ElementType + element_instance: int + aspect_conditions: List[AspectCondition] diff --git a/backend/condition/domain/element_type.py b/backend/condition/domain/element_type.py new file mode 100644 index 00000000..32897895 --- /dev/null +++ b/backend/condition/domain/element_type.py @@ -0,0 +1,261 @@ +from enum import Enum + + +class ElementType(str, Enum): + + # ====================== + # PROPERTY / GENERAL + # ====================== + PROPERTY = "property" + PROPERTY_CONSTRUCTION_TYPE = "property_construction_type" + PROPERTY_CLASSIFICATION = "property_classification" + PROPERTY_AGE_BAND = "property_age_band" + STOREY_COUNT = "storey_count" + FLOOR_LEVEL = "floor_level" + FLOOR_LEVEL_FRONT_DOOR = "floor_level_front_door" + ACCESSIBLE_HOUSING_REGISTER = "accessible_housing_register" + ASBESTOS = "asbestos" + QUALITY_STANDARD = "quality_standard" + CCU = "ccu" + PASSENGER_LIFT = "passenger_lift" + STAIRLIFT = "stairlift" + DISABLED_HOIST_TRACKING = "disabled_hoist_tracking" + DISABLED_FACILITIES = "disabled_facilities" + STEPS_TO_FRONT_DOOR = "steps_to_front_door" + + # ====================== + # EXTERNAL – ROOF + # ====================== + ROOF = "roof" + PITCHED_ROOF_COVERING = "pitched_roof_covering" + FLAT_ROOF_COVERING = "flat_roof_covering" + RAINWATER_GOODS = "rainwater_goods" + LOFT_INSULATION = "loft_insulation" + PORCH_CANOPY = "porch_canopy" + CHIMNEY = "chimney" + FASCIA = "fascia" + SOFFIT = "soffit" + FASCIA_SOFFIT_BARGEBOARDS = "fascia_soffit_bargeboards" + GUTTERS = "gutters" + STORE_ROOF = "store_roof" + GARAGE_ROOF = "garage_roof" + GARAGE_AND_STORE_ROOF = "garage_and_store_roof" + + # ====================== + # EXTERNAL – WALLS + # ====================== + EXTERNAL_WALL = "external_wall" + EXTERNAL_NOISE_INSULATION = "external_noise_insulation" + PRIMARY_WALL = "primary_wall" + SECONDARY_WALL = "secondary_wall" + DOWNPIPES = "downpipes" + EXTERNAL_DECORATION = "external_decoration" + CLADDING = "cladding" + SPANDREL_PANELS = "spandrel_panels" + GARAGE_WALLS = "garage_walls" + PARTY_WALL_FIRE_BREAK = "party_wall_fire_break" + EXTERNAL_BRICKWORK_POINTING = "external_brickwork_pointing" + INTERNAL_DOWNPIPES_EXTERNAL_AREA = "internal_downpipes_external_area" + + # ====================== + # EXTERNAL – WINDOWS + # ====================== + EXTERNAL_WINDOWS = "external_windows" + COMMUNAL_WINDOWS = "communal_windows" + SECONDARY_GLAZING = "secondary_glazing" + STORE_WINDOWS = "store_windows" + GARAGE_WINDOWS = "garage_windows" + GARAGE_AND_STORE_WINDOWS = "garage_and_store_windows" + + # ====================== + # EXTERNAL – DOORS + # ====================== + EXTERNAL_DOOR = "external_door" + FRONT_DOOR = "front_door" + REAR_DOOR = "rear_door" + STORE_DOOR = "store_door" + GARAGE_DOOR = "garage_door" + GARAGE_AND_STORE_DOOR = "garage_and_store_door" + COMMUNAL_ENTRANCE_DOOR = "communal_entrance_door" + MAIN_DOOR = "main_door" + BLOCK_ENTRANCE_DOOR = "block_entrance_door" + LINTEL = "lintel" + PATIO_FRENCH_DOOR = "patio_french_door" + DOOR_ENTRY_HANDSET = "door_entry_handset" + + # ====================== + # EXTERNAL – AREAS + # ====================== + PATHS_AND_HARDSTANDINGS = "paths_and_hardstandings" + PARKING_AREAS = "parking_areas" + BOUNDARY_WALLS = "boundary_walls" + FRONT_FENCING = "front_fencing" + REAR_FENCING = "rear_fencing" + SIDE_FENCING = "side_fencing" + REAR_GATE = "rear_gate" + FRONT_GATE = "front_gate" + GATES = "gates" + RETAINING_WALLS = "retaining_walls" + PRIVATE_BALCONY = "private_balcony" + BALCONY_BALUSTRADE = "balcony_balustrade" + OUTBUILDINGS = "outbuildings" + GARAGE_STRUCTURE = "garage_structure" + PAVING = "paving" + ROADS = "roads" + SOIL_AND_VENT = "soil_and_vent" + SOLAR_THERMALS = "solar_thermals" + DROP_KERB = "drop_kerb" + OUTBUILDING_OVERHAUL = "outbuilding_overhaul" + EXTERNAL_STRUCTURAL_DEFECTS = "external_structural_defects" + ACCESS_RAMP = "access_ramp" + + # ====================== + # INTERNAL – KITCHEN + # ====================== + KITCHEN = "kitchen" + KITCHEN_SPACE_LAYOUT = "kitchen_space_layout" + TENANT_INSTALLED_KITCHEN = "tenant_installed_kitchen" + KITCHEN_EXTRACTOR_FAN = "kitchen_extractor_fan" + + # ====================== + # INTERNAL – BATHROOM + # ====================== + BATHROOM = "bathroom" + SECONDARY_BATHROOM = "secondary_bathroom" + SECONDARY_TOILET = "secondary_toilet" + BATHROOM_EXTRACTOR_FAN = "bathroom_extractor_fan" + ADDITIONAL_WC_OR_WHB = "additional_wc_or_whb" + BATHROOM_REMAINING_LIFE_SOURCE = "bathroom_remaining_life_source" + KITCHEN_REMAINING_LIFE_SOURCE = "kitchen_remaining_life_source" + + # ====================== + # INTERNAL – HEATING / WATER + # ====================== + CENTRAL_HEATING = "central_heating" + HEATING_BOILER = "heating_boiler" + HEATING_DISTRIBUTION = "heating_distribution" + SECONDARY_HEATING = "secondary_heating" + HOT_WATER_SYSTEM = "hot_water_system" + COLD_WATER_STORAGE = "cold_water_storage" + HEATING_SYSTEM = "heating_system" + BOILER_FUEL = "boiler_fuel" + WATER_HEATING = "water_heating" + PROGRAMMABLE_HEATING = "programmable_heating" + COMMUNITY_HEATING = ( + "community_heating" # Is this definitely different from COMMUNAL_HEATING? + ) + GAS_AVAILABLE = "gas_available" + HEAT_RECOVERY_UNITS = "heat_recovery_units" + HEATING_IMPROVEMENTS = "heating_improvements" + + # ====================== + # INTERNAL – ELECTRICS / FIRE + # ====================== + ELECTRICAL_WIRING = "electrical_wiring" + CONSUMER_UNIT = "consumer_unit" + SMOKE_DETECTION = "smoke_detection" + HEAT_DETECTION = "heat_detection" + CARBON_MONOXIDE_DETECTION = "carbon_monoxide_detection" + FIRE_DOOR_RATING = "fire_door_rating" + FIRE_RISK_ASSESSMENT = "fire_risk_assessment" + INTERNAL_WIRING = ( + "internal_wiring" # Is this definitely different from ELECTRICAL_WIRING? + ) + ELECTRICS = "electrics" + + # ====================== + # COMMUNAL + # ====================== + COMMUNAL_HEATING = "communal_heating" + COMMUNAL_BOILER = "communal_boiler" + COMMUNAL_ELECTRICS = "communal_electrics" + COMMUNAL_FIRE_ALARM = "communal_fire_alarm" + COMMUNAL_EMERGENCY_LIGHTING = "communal_emergency_lighting" + COMMUNAL_DOOR_ENTRY = "communal_door_entry" + COMMUNAL_CCTV = "communal_cctv" + COMMUNAL_BIN_STORE = "communal_bin_store" + COMMUNAL_BIN_STORE_DOORS = "communal_bin_store_doors" + COMMUNAL_BIN_STORE_WALLS = "communal_bin_store_walls" + COMMUNAL_BIN_STORE_ROOF = "communal_bin_store_roof" + COMMUNAL_REFUSE_CHUTE = "communal_refuse_chute" + COMMUNAL_FLOOR_COVERING = "communal_floor_covering" + COMMUNAL_KITCHEN = "communal_kitchen" + COMMUNAL_BATHROOM = "communal_bathroom" + COMMUNAL_TOILETS = "communal_toilets" + COMMUNAL_GATES = "communal_gates" + COMMUNAL_LIFT = "communal_lift" + COMMUNAL_PASSENGER_LIFT = "communal_passenger_lift" + COMMUNAL_BALCONY_WALKWAY = "communal_balcony_walkway" + COMMUNAL_ENTRANCE = "communal_entrance" + COMMUNAL_INTERNAL_DECORATIONS = "communal_internal_decorations" + COMMUNAL_INTERNAL_FLOOR = "communal_internal_floor" + COMMUNAL_WALKWAYS = "communal_walkways" + COMMUNAL_EXTERNAL_DOORS = "communal_external_doors" + COMMUNAL_STAIRS = "communal_stairs" + COMMUNAL_AERIAL = "communal_aerial" + COMMUNAL_AOV = "communal_aov" + COMMUNAL_INTERNAL_DOORS = "communal_internal_doors" + COMMUNAL_LATERAL_MAINS = "communal_lateral_mains" + COMMUNAL_LIGHTING = "communal_lighting" + COMMUNAL_LIGHTING_CONDUCTOR = "communal_lighting_conductor" + COMMUNAL_STORE_ROOF = "communal_store_roof" + COMMUNAL_STORE_WALLS = "communal_store_walls" + COMMUNAL_STORE_DOORS = "communal_store_doors" + COMMUNAL_WARDEN_CALL_SYSTEM = "communal_warden_call_system" + COMMUNAL_BMS = "communal_bms" + COMMUNAL_BOOSTER_PUMP = "communal_booster_pump" + COMMUNAL_DRY_RISER = "communal_dry_riser" + COMMUNAL_WET_RISER = "communal_wet_riser" + COMMUNAL_COLD_WATER_STORAGE = "communal_cold_water_storage" + COMMUNAL_SPRINKLER = "communal_sprinkler" + COMMUNAL_PLUG_SOCKETS = "communal_plug_sockets" + COMMUNAL_CIRCULATION_SPACE = "communal_circulation_space" + + # ====================== + # FITNESS FOR HUMAN HABITATION + # ====================== + FFHH_DAMP = "ffhh_damp" + FFHH_HOT_AND_COLD_WATER = "ffhh_hold_and_cold_water" + FFHH_DRAINAGE_LAVATORIES = "ffhh_drainage_lavatories" + FFHH_NEGLECTED = "ffhh_neglected" + FFHH_NATURAL_LIGHT = "ffhh_natural_light" + FFHH_VENTILATION = "ffhh_ventilation" + FFHH_FOOD_PREP_AND_WASHUP = "ffhh_food_prep_and_washup" + FFHH_UNSAFE_LAYOUT = "ffhh_unsafe_layout" + FFHH_UNSTABLE_BUILDING = "ffhh_unstable_building" + + # ========================================================== + # HHSRS – ALL 29 HAZARDS + # ========================================================== + + HHSRS_DAMP_AND_MOULD = "hhsrs_damp_and_mould" + HHSRS_EXCESS_COLD = "hhsrs_excess_cold" + HHSRS_EXCESS_HEAT = "hhsrs_excess_heat" + HHSRS_ASBESTOS_AND_MMF = "hhsrs_asbestos_and_mmf" + HHSRS_BIOCIDES = "hhsrs_biocides" + HHSRS_CARBON_MONOXIDE = "hhsrs_carbon_monoxide" + HHSRS_LEAD = "hhsrs_lead" + HHSRS_RADIATION = "hhsrs_radiation" + HHSRS_UNCOMBUSTED_FUEL_GAS = "hhsrs_uncombusted_fuel_gas" + HHSRS_VOLATILE_ORGANIC_COMPOUNDS = "hhsrs_volatile_organic_compounds" + HHSRS_CROWDING_AND_SPACE = "hhsrs_crowding_and_space" + HHSRS_ENTRY_BY_INTRUDERS = "hhsrs_entry_by_intruders" + HHSRS_LIGHTING = "hhsrs_lighting" + HHSRS_NOISE = "hhsrs_noise" + HHSRS_DOMESTIC_HYGIENE_PESTS_REFUSE = "hhsrs_domestic_hygiene_pests_refuse" + HHSRS_FOOD_SAFETY = "hhsrs_food_safety" + HHSRS_PERSONAL_HYGIENE_SANITATION = "hhsrs_personal_hygiene_sanitation" + HHSRS_WATER_SUPPLY = "hhsrs_water_supply" + HHSRS_FALLS_ASSOCIATED_WITH_BATHS = "hhsrs_falls_associated_with_baths" + HHSRS_FALLS_ON_LEVEL_SURFACES = "hhsrs_falls_on_level_surfaces" + HHSRS_FALLS_ON_STAIRS = "hhsrs_falls_on_stairs" + HHSRS_FALLS_BETWEEN_LEVELS = "hhsrs_falls_between_levels" + HHSRS_ELECTRICAL_HAZARDS = "hhsrs_electrical_hazards" + HHSRS_FIRE = "hhsrs_fire" + HHSRS_FLAMES_HOT_SURFACES = "hhsrs_flames_hot_surfaces" + HHSRS_COLLISION_AND_ENTRAPMENT = "hhsrs_collision_and_entrapment" + HHSRS_COLLISION_HAZARDS_LOW_HEADROOM = "hhsrs_collision_hazards_low_headroom" + HHSRS_EXPLOSIONS = "hhsrs_explosions" + HHSRS_ERGONOMICS = "hhsrs_ergonomics" + HHSRS_STRUCTURAL_COLLAPSE = "hhsrs_structural_collapse" + HHSRS_AMENITIES = "hhsrs_amenities" diff --git a/backend/condition/domain/mapping/lbwf/lbwf_element_map.py b/backend/condition/domain/mapping/lbwf/lbwf_element_map.py index 8d6ea858..dfd9ca4e 100644 --- a/backend/condition/domain/mapping/lbwf/lbwf_element_map.py +++ b/backend/condition/domain/mapping/lbwf/lbwf_element_map.py @@ -1,4 +1,4 @@ -from backend.condition.domain.element import Element +from backend.condition.domain.element_type import ElementType from backend.condition.domain.aspect_type import AspectType from backend.condition.domain.mapping.element_mapping import ElementMapping @@ -8,11 +8,11 @@ LBWF_ELEMENT_MAP: dict[str, ElementMapping] = { # PROPERTY / GENERAL # ========================================================== "AHR_CAT": ElementMapping( - element=Element.ACCESSIBLE_HOUSING_REGISTER, + element=ElementType.ACCESSIBLE_HOUSING_REGISTER, aspect_type=AspectType.CATEGORY, ), "ASSETSAREA": ElementMapping( - element=Element.PROPERTY, + element=ElementType.PROPERTY, aspect_type=AspectType.AREA, ), # "DECNTHMINC": ElementMapping( @@ -20,301 +20,301 @@ LBWF_ELEMENT_MAP: dict[str, ElementMapping] = { # aspect_type=AspectType.INCLUSION, # ), # Ignore this one "QUALITYSTD": ElementMapping( - element=Element.QUALITY_STANDARD, + element=ElementType.QUALITY_STANDARD, aspect_type=AspectType.TYPE, ), "EXTSTOREY": ElementMapping( - element=Element.PROPERTY, + element=ElementType.PROPERTY, aspect_type=AspectType.CONFIGURATION, ), "FLVL": ElementMapping( - element=Element.FLOOR_LEVEL_FRONT_DOOR, + element=ElementType.FLOOR_LEVEL_FRONT_DOOR, aspect_type=AspectType.LOCATION, ), "INTFLRLVL": ElementMapping( - element=Element.FLOOR_LEVEL, + element=ElementType.FLOOR_LEVEL, aspect_type=AspectType.LOCATION, ), "INTNSEINSL": ElementMapping( - element=Element.EXTERNAL_NOISE_INSULATION, # Maybe this shouldn't be "EXTERNAL_" + element=ElementType.EXTERNAL_NOISE_INSULATION, # Maybe this shouldn't be "EXTERNAL_" aspect_type=AspectType.ADEQUACY, ), "INTSTEPSFD": ElementMapping( - element=Element.STEPS_TO_FRONT_DOOR, + element=ElementType.STEPS_TO_FRONT_DOOR, aspect_type=AspectType.QUANTITY, ), # ========================================================== # ASBESTOS (NON-HHSRS RECORD) # ========================================================== "ASBESTOS": ElementMapping( - element=Element.ASBESTOS, + element=ElementType.ASBESTOS, aspect_type=AspectType.PRESENCE, ), # ========================================================== # INTERNAL – BATHROOMS & KITCHENS # ========================================================== "INTBTHRLOC": ElementMapping( - element=Element.BATHROOM, + element=ElementType.BATHROOM, aspect_type=AspectType.LOCATION, ), "INTBTHADEQ": ElementMapping( - element=Element.BATHROOM, + element=ElementType.BATHROOM, aspect_type=AspectType.ADEQUACY, ), "INTKITADEQ": ElementMapping( - element=Element.KITCHEN, + element=ElementType.KITCHEN, aspect_type=AspectType.ADEQUACY, ), "INTCKRLOC": ElementMapping( - element=Element.KITCHEN, + element=ElementType.KITCHEN, aspect_type=AspectType.LOCATION, ), "INTADDWCW": ElementMapping( - element=Element.ADDITIONAL_WC_OR_WHB, + element=ElementType.ADDITIONAL_WC_OR_WHB, aspect_type=AspectType.PRESENCE, ), "INTBTHREML": ElementMapping( - element=Element.BATHROOM_REMAINING_LIFE_SOURCE, + element=ElementType.BATHROOM_REMAINING_LIFE_SOURCE, aspect_type=AspectType.TYPE, ), "INTKITREML": ElementMapping( - element=Element.KITCHEN_REMAINING_LIFE_SOURCE, + element=ElementType.KITCHEN_REMAINING_LIFE_SOURCE, aspect_type=AspectType.TYPE, ), "INTTNTINST": ElementMapping( - element=Element.TENANT_INSTALLED_KITCHEN, + element=ElementType.TENANT_INSTALLED_KITCHEN, aspect_type=AspectType.TYPE, # Not certain about this aspect type - need more data ), # ========================================================== # INTERNAL – FIRE # ========================================================== "FRARISKRTG": ElementMapping( - element=Element.FIRE_RISK_ASSESSMENT, + element=ElementType.FIRE_RISK_ASSESSMENT, aspect_type=AspectType.RATING, ), "FRATYPE": ElementMapping( - element=Element.FIRE_RISK_ASSESSMENT, + element=ElementType.FIRE_RISK_ASSESSMENT, aspect_type=AspectType.TYPE, ), "FRAEVACSTR": ElementMapping( - element=Element.FIRE_RISK_ASSESSMENT, + element=ElementType.FIRE_RISK_ASSESSMENT, aspect_type=AspectType.STRATEGY, ), "INTSMKDET": ElementMapping( - element=Element.SMOKE_DETECTION, + element=ElementType.SMOKE_DETECTION, aspect_type=AspectType.PRESENCE, ), "INTCHEXTNT": ElementMapping( - element=Element.HEATING_SYSTEM, + element=ElementType.HEATING_SYSTEM, aspect_type=AspectType.EXTENT, ), # ========================================================== # HEATING & SERVICES # ========================================================== "INTCHEXTNT": ElementMapping( - element=Element.CENTRAL_HEATING, + element=ElementType.CENTRAL_HEATING, aspect_type=AspectType.EXTENT, ), "INTCHDIST": ElementMapping( - element=Element.HEATING_DISTRIBUTION, + element=ElementType.HEATING_DISTRIBUTION, aspect_type=AspectType.TYPE, ), "INTCHBLR": ElementMapping( - element=Element.HEATING_BOILER, + element=ElementType.HEATING_BOILER, aspect_type=AspectType.TYPE, ), "INTBOILERF": ElementMapping( - element=Element.BOILER_FUEL, + element=ElementType.BOILER_FUEL, aspect_type=AspectType.TYPE, ), "INTHTDISYS": ElementMapping( - element=Element.HEATING_SYSTEM, + element=ElementType.HEATING_SYSTEM, aspect_type=AspectType.DISTRIBUTION, ), "INTWTRHTNG": ElementMapping( - element=Element.WATER_HEATING, + element=ElementType.WATER_HEATING, aspect_type=AspectType.TYPE, ), "INTCOMHTG": ElementMapping( - element=Element.COMMUNITY_HEATING, + element=ElementType.COMMUNITY_HEATING, aspect_type=AspectType.TYPE, ), "INTELECTRC": ElementMapping( - element=Element.ELECTRICS, + element=ElementType.ELECTRICS, aspect_type=AspectType.WORK_REQUIRED, # Not certain about this aspect type - need more data ), "INTGASAVAI": ElementMapping( - element=Element.GAS_AVAILABLE, + element=ElementType.GAS_AVAILABLE, aspect_type=AspectType.PRESENCE, # Maybe should be AspectType.TYPE ? ), "INTHEATREC": ElementMapping( - element=Element.HEAT_RECOVERY_UNITS, + element=ElementType.HEAT_RECOVERY_UNITS, aspect_type=AspectType.PRESENCE, ), "INTHTIMP": ElementMapping( - element=Element.GAS_AVAILABLE, + element=ElementType.GAS_AVAILABLE, aspect_type=AspectType.WORK_REQUIRED, ), "INTPROGHTG": ElementMapping( - element=Element.PROGRAMMABLE_HEATING, + element=ElementType.PROGRAMMABLE_HEATING, aspect_type=AspectType.TYPE, # Should maybe be PRESENCE, but set to TYPE for consistency with Peabody data ), # ========================================================== # EXTERNAL – WALLS (INSTANCED) # ========================================================== "EXTWALLSTR": ElementMapping( - element=Element.EXTERNAL_WALL, + element=ElementType.EXTERNAL_WALL, aspect_type=AspectType.STRUCTURE, element_instance=1, ), "EXTWALLFN1": ElementMapping( - element=Element.EXTERNAL_WALL, + element=ElementType.EXTERNAL_WALL, aspect_type=AspectType.FINISH, element_instance=1, ), "EXTWALLFN2": ElementMapping( - element=Element.EXTERNAL_WALL, + element=ElementType.EXTERNAL_WALL, aspect_type=AspectType.FINISH, element_instance=2, ), "EXTWALLINS": ElementMapping( - element=Element.EXTERNAL_WALL, + element=ElementType.EXTERNAL_WALL, aspect_type=AspectType.INSULATION, ), "EXTWALLSPL": ElementMapping( - element=Element.EXTERNAL_WALL, + element=ElementType.EXTERNAL_WALL, aspect_type=AspectType.CONDITION, ), "EXTDWNPTYP": ElementMapping( - element=Element.DOWNPIPES, + element=ElementType.DOWNPIPES, aspect_type=AspectType.MATERIAL, ), "EXTGUTRTYP": ElementMapping( - element=Element.GUTTERS, + element=ElementType.GUTTERS, aspect_type=AspectType.MATERIAL, ), # ========================================================== # EXTERNAL – ROOFS (INSTANCED) # ========================================================== "EXTRFSTR1": ElementMapping( - element=Element.ROOF, + element=ElementType.ROOF, aspect_type=AspectType.STRUCTURE, element_instance=1, ), "EXTRFSTR2": ElementMapping( - element=Element.ROOF, + element=ElementType.ROOF, aspect_type=AspectType.STRUCTURE, element_instance=2, ), "EXTRFSTR3": ElementMapping( - element=Element.ROOF, + element=ElementType.ROOF, aspect_type=AspectType.STRUCTURE, element_instance=3, ), "EXTROOF1": ElementMapping( - element=Element.ROOF, + element=ElementType.ROOF, aspect_type=AspectType.COVERING, element_instance=1, ), "EXTROOF2": ElementMapping( - element=Element.ROOF, + element=ElementType.ROOF, aspect_type=AspectType.COVERING, element_instance=2, ), "EXTROOF3": ElementMapping( - element=Element.ROOF, + element=ElementType.ROOF, aspect_type=AspectType.COVERING, element_instance=3, ), "EXTCHIMNEY": ElementMapping( - element=Element.CHIMNEY, + element=ElementType.CHIMNEY, aspect_type=AspectType.WORK_REQUIRED, ), "EXTFASOFBR": ElementMapping( - element=Element.FASCIA_SOFFIT_BARGEBOARDS, + element=ElementType.FASCIA_SOFFIT_BARGEBOARDS, aspect_type=AspectType.MATERIAL, ), "EXTGARROOF": ElementMapping( - element=Element.GARAGE_ROOF, + element=ElementType.GARAGE_ROOF, aspect_type=AspectType.MATERIAL, ), "EXTGARSTRF": ElementMapping( - element=Element.GARAGE_AND_STORE_ROOF, + element=ElementType.GARAGE_AND_STORE_ROOF, aspect_type=AspectType.MATERIAL, ), "EXTSTRROOF": ElementMapping( - element=Element.STORE_ROOF, + element=ElementType.STORE_ROOF, aspect_type=AspectType.MATERIAL, ), "INTLOFTINS": ElementMapping( - element=Element.LOFT_INSULATION, + element=ElementType.LOFT_INSULATION, aspect_type=AspectType.TYPE, ), # ========================================================== # EXTERNAL – DOORS & WINDOWS # ========================================================== "INTFRDOOR": ElementMapping( - element=Element.EXTERNAL_DOOR, + element=ElementType.EXTERNAL_DOOR, aspect_type=AspectType.TYPE, ), "INTFRDRFRR": ElementMapping( - element=Element.EXTERNAL_DOOR, + element=ElementType.EXTERNAL_DOOR, aspect_type=AspectType.FIRE_RATING, ), "EXTBKSDDR1": ElementMapping( - element=Element.EXTERNAL_DOOR, + element=ElementType.EXTERNAL_DOOR, aspect_type=AspectType.TYPE, element_instance=1, ), "EXTBKSDDR2": ElementMapping( - element=Element.EXTERNAL_DOOR, + element=ElementType.EXTERNAL_DOOR, aspect_type=AspectType.TYPE, element_instance=2, ), "INTWDWTYPE": ElementMapping( - element=Element.EXTERNAL_WINDOWS, + element=ElementType.EXTERNAL_WINDOWS, aspect_type=AspectType.TYPE, ), "EXTWNDWS1": ElementMapping( - element=Element.EXTERNAL_WINDOWS, + element=ElementType.EXTERNAL_WINDOWS, aspect_type=AspectType.TYPE, element_instance=1, ), "EXTWNDWS2": ElementMapping( - element=Element.EXTERNAL_WINDOWS, + element=ElementType.EXTERNAL_WINDOWS, aspect_type=AspectType.TYPE, element_instance=2, ), "EXTGARDOOR": ElementMapping( - element=Element.GARAGE_DOOR, + element=ElementType.GARAGE_DOOR, aspect_type=AspectType.MATERIAL, ), "EXTGARSTDR": ElementMapping( - element=Element.GARAGE_AND_STORE_DOOR, + element=ElementType.GARAGE_AND_STORE_DOOR, aspect_type=AspectType.MATERIAL, ), "EXTSTRDOOR": ElementMapping( - element=Element.STORE_DOOR, + element=ElementType.STORE_DOOR, aspect_type=AspectType.MATERIAL, ), "EXTGARWDWS": ElementMapping( - element=Element.GARAGE_WINDOWS, + element=ElementType.GARAGE_WINDOWS, aspect_type=AspectType.MATERIAL, ), "EXTSTRWDWS": ElementMapping( - element=Element.STORE_WINDOWS, + element=ElementType.STORE_WINDOWS, aspect_type=AspectType.MATERIAL, ), "EXTGARSTWD": ElementMapping( - element=Element.GARAGE_AND_STORE_WINDOWS, + element=ElementType.GARAGE_AND_STORE_WINDOWS, aspect_type=AspectType.MATERIAL, ), "EXTLINTELS": ElementMapping( - element=Element.LINTEL, + element=ElementType.LINTEL, aspect_type=AspectType.PRESENCE, ), "EXTPTFRDR1": ElementMapping( - element=Element.PATIO_FRENCH_DOOR, + element=ElementType.PATIO_FRENCH_DOOR, aspect_type=AspectType.MATERIAL, element_instance=1, ), @@ -322,217 +322,217 @@ LBWF_ELEMENT_MAP: dict[str, ElementMapping] = { # EXTERNAL AREAS # ========================================================== "EXTBALCONY": ElementMapping( - element=Element.PRIVATE_BALCONY, + element=ElementType.PRIVATE_BALCONY, aspect_type=AspectType.PRESENCE, ), "EXTBPOINTG": ElementMapping( - element=Element.EXTERNAL_BRICKWORK_POINTING, + element=ElementType.EXTERNAL_BRICKWORK_POINTING, aspect_type=AspectType.PRESENCE, ), "EXTDRPKERB": ElementMapping( - element=Element.DROP_KERB, + element=ElementType.DROP_KERB, aspect_type=AspectType.PRESENCE, ), "EXTEXTDECS": ElementMapping( - element=Element.EXTERNAL_DECORATION, + element=ElementType.EXTERNAL_DECORATION, aspect_type=AspectType.PRESENCE, ), "EXTHARDSTD": ElementMapping( - element=Element.PATHS_AND_HARDSTANDINGS, + element=ElementType.PATHS_AND_HARDSTANDINGS, aspect_type=AspectType.MATERIAL, ), "EXTINTDWNP": ElementMapping( - element=Element.INTERNAL_DOWNPIPES_EXTERNAL_AREA, + element=ElementType.INTERNAL_DOWNPIPES_EXTERNAL_AREA, aspect_type=AspectType.MATERIAL, ), "EXTOUTBOH": ElementMapping( - element=Element.OUTBUILDING_OVERHAUL, + element=ElementType.OUTBUILDING_OVERHAUL, aspect_type=AspectType.TYPE, ), "EXTPARKING": ElementMapping( - element=Element.PARKING_AREAS, + element=ElementType.PARKING_AREAS, aspect_type=AspectType.PRESENCE, ), "EXTPCHCNPY": ElementMapping( - element=Element.PORCH_CANOPY, + element=ElementType.PORCH_CANOPY, aspect_type=AspectType.TYPE, ), "EXTSTRINSP": ElementMapping( - element=Element.EXTERNAL_STRUCTURAL_DEFECTS, + element=ElementType.EXTERNAL_STRUCTURAL_DEFECTS, aspect_type=AspectType.TYPE, # Need more sample data to know whether this is the correct aspect type ), "INTACCRAMP": ElementMapping( - element=Element.ACCESS_RAMP, + element=ElementType.ACCESS_RAMP, aspect_type=AspectType.TYPE, # # Need more sample data to know whether this is the correct aspect type ), # ====================== # FITNESS FOR HUMAN HABITATION # ====================== "FFHHDAMP": ElementMapping( - element=Element.FFHH_DAMP, + element=ElementType.FFHH_DAMP, aspect_type=AspectType.RISK, ), "FFHHHCWAT": ElementMapping( - element=Element.FFHH_HOT_AND_COLD_WATER, + element=ElementType.FFHH_HOT_AND_COLD_WATER, aspect_type=AspectType.RISK, ), "FFHHDRNWC": ElementMapping( - element=Element.FFHH_DRAINAGE_LAVATORIES, + element=ElementType.FFHH_DRAINAGE_LAVATORIES, aspect_type=AspectType.RISK, ), "FFHHNEGLC": ElementMapping( - element=Element.FFHH_NEGLECTED, + element=ElementType.FFHH_NEGLECTED, aspect_type=AspectType.RISK, ), "FFHHNONAT": ElementMapping( - element=Element.FFHH_NATURAL_LIGHT, + element=ElementType.FFHH_NATURAL_LIGHT, aspect_type=AspectType.RISK, ), "FFHHNOVEN": ElementMapping( - element=Element.FFHH_VENTILATION, + element=ElementType.FFHH_VENTILATION, aspect_type=AspectType.RISK, ), "FFHHPRPCK": ElementMapping( - element=Element.FFHH_FOOD_PREP_AND_WASHUP, + element=ElementType.FFHH_FOOD_PREP_AND_WASHUP, aspect_type=AspectType.RISK, ), "FFHHUNLAY": ElementMapping( - element=Element.FFHH_UNSAFE_LAYOUT, + element=ElementType.FFHH_UNSAFE_LAYOUT, aspect_type=AspectType.RISK, ), "FFHHUNSTA": ElementMapping( - element=Element.FFHH_UNSTABLE_BUILDING, + element=ElementType.FFHH_UNSTABLE_BUILDING, aspect_type=AspectType.RISK, ), # ========================================================== # HHSRS # ========================================================== "HHSRSDAMP": ElementMapping( - element=Element.HHSRS_DAMP_AND_MOULD, + element=ElementType.HHSRS_DAMP_AND_MOULD, aspect_type=AspectType.RISK, ), "HHSRSCOLD": ElementMapping( - element=Element.HHSRS_EXCESS_COLD, + element=ElementType.HHSRS_EXCESS_COLD, aspect_type=AspectType.RISK, ), "HHSRSHEAT": ElementMapping( - element=Element.HHSRS_EXCESS_HEAT, + element=ElementType.HHSRS_EXCESS_HEAT, aspect_type=AspectType.RISK, ), "HHSRSASB": ElementMapping( - element=Element.HHSRS_ASBESTOS_AND_MMF, + element=ElementType.HHSRS_ASBESTOS_AND_MMF, aspect_type=AspectType.RISK, ), "HHSRSBIOC": ElementMapping( - element=Element.HHSRS_BIOCIDES, + element=ElementType.HHSRS_BIOCIDES, aspect_type=AspectType.RISK, ), "HHSRSCO": ElementMapping( - element=Element.HHSRS_CARBON_MONOXIDE, + element=ElementType.HHSRS_CARBON_MONOXIDE, aspect_type=AspectType.RISK, ), "HHSRSNO2": ElementMapping( - element=Element.HHSRS_CARBON_MONOXIDE, + element=ElementType.HHSRS_CARBON_MONOXIDE, aspect_type=AspectType.RISK, ), # Duplicate of HHSRSCO; I think they relate to the same HHSRS hazard "HHSRSSO2": ElementMapping( - element=Element.HHSRS_CARBON_MONOXIDE, + element=ElementType.HHSRS_CARBON_MONOXIDE, aspect_type=AspectType.RISK, ), # Duplicate of HHSRSCO; I think they relate to the same HHSRS hazard "HHSRSLEAD": ElementMapping( - element=Element.HHSRS_LEAD, + element=ElementType.HHSRS_LEAD, aspect_type=AspectType.RISK, ), "HHSRSRADIA": ElementMapping( - element=Element.HHSRS_RADIATION, + element=ElementType.HHSRS_RADIATION, aspect_type=AspectType.RISK, ), "HHSRSFUEL": ElementMapping( - element=Element.HHSRS_UNCOMBUSTED_FUEL_GAS, + element=ElementType.HHSRS_UNCOMBUSTED_FUEL_GAS, aspect_type=AspectType.RISK, ), "HHSRSORGAN": ElementMapping( - element=Element.HHSRS_VOLATILE_ORGANIC_COMPOUNDS, + element=ElementType.HHSRS_VOLATILE_ORGANIC_COMPOUNDS, aspect_type=AspectType.RISK, ), "HHSRSCROWD": ElementMapping( - element=Element.HHSRS_CROWDING_AND_SPACE, + element=ElementType.HHSRS_CROWDING_AND_SPACE, aspect_type=AspectType.RISK, ), "HHSRSENTRY": ElementMapping( - element=Element.HHSRS_ENTRY_BY_INTRUDERS, + element=ElementType.HHSRS_ENTRY_BY_INTRUDERS, aspect_type=AspectType.RISK, ), "HHSRSLIGHT": ElementMapping( - element=Element.HHSRS_LIGHTING, + element=ElementType.HHSRS_LIGHTING, aspect_type=AspectType.RISK, ), "HHSRSNOISE": ElementMapping( - element=Element.HHSRS_NOISE, + element=ElementType.HHSRS_NOISE, aspect_type=AspectType.RISK, ), "HHSRSDOMES": ElementMapping( - element=Element.HHSRS_DOMESTIC_HYGIENE_PESTS_REFUSE, + element=ElementType.HHSRS_DOMESTIC_HYGIENE_PESTS_REFUSE, aspect_type=AspectType.RISK, ), "HHSRSFOOD": ElementMapping( - element=Element.HHSRS_FOOD_SAFETY, + element=ElementType.HHSRS_FOOD_SAFETY, aspect_type=AspectType.RISK, ), "HHSRSPERS": ElementMapping( - element=Element.HHSRS_PERSONAL_HYGIENE_SANITATION, + element=ElementType.HHSRS_PERSONAL_HYGIENE_SANITATION, aspect_type=AspectType.RISK, ), "HHSRSWATER": ElementMapping( - element=Element.HHSRS_WATER_SUPPLY, + element=ElementType.HHSRS_WATER_SUPPLY, aspect_type=AspectType.RISK, ), "HHSRSFBATH": ElementMapping( - element=Element.HHSRS_FALLS_ASSOCIATED_WITH_BATHS, + element=ElementType.HHSRS_FALLS_ASSOCIATED_WITH_BATHS, aspect_type=AspectType.RISK, ), "HHSRSFLEVE": ElementMapping( - element=Element.HHSRS_FALLS_ON_LEVEL_SURFACES, + element=ElementType.HHSRS_FALLS_ON_LEVEL_SURFACES, aspect_type=AspectType.RISK, ), "HHSRSFSTAI": ElementMapping( - element=Element.HHSRS_FALLS_ON_STAIRS, + element=ElementType.HHSRS_FALLS_ON_STAIRS, aspect_type=AspectType.RISK, ), "HHSRSFBETW": ElementMapping( - element=Element.HHSRS_FALLS_BETWEEN_LEVELS, + element=ElementType.HHSRS_FALLS_BETWEEN_LEVELS, aspect_type=AspectType.RISK, ), "HHSRSELEC": ElementMapping( - element=Element.HHSRS_ELECTRICAL_HAZARDS, + element=ElementType.HHSRS_ELECTRICAL_HAZARDS, aspect_type=AspectType.RISK, ), "HHSRSFIRE": ElementMapping( - element=Element.HHSRS_FIRE, + element=ElementType.HHSRS_FIRE, aspect_type=AspectType.RISK, ), "HHSRSFLAME": ElementMapping( - element=Element.HHSRS_FLAMES_HOT_SURFACES, + element=ElementType.HHSRS_FLAMES_HOT_SURFACES, aspect_type=AspectType.RISK, ), "HHSRSENTRP": ElementMapping( - element=Element.HHSRS_COLLISION_AND_ENTRAPMENT, + element=ElementType.HHSRS_COLLISION_AND_ENTRAPMENT, aspect_type=AspectType.RISK, ), "HHSRSEXPLO": ElementMapping( - element=Element.HHSRS_EXPLOSIONS, + element=ElementType.HHSRS_EXPLOSIONS, aspect_type=AspectType.RISK, ), "HHSRSSTRUC": ElementMapping( - element=Element.HHSRS_STRUCTURAL_COLLAPSE, + element=ElementType.HHSRS_STRUCTURAL_COLLAPSE, aspect_type=AspectType.RISK, ), "HHSRSCLOW": ElementMapping( - element=Element.HHSRS_COLLISION_AND_ENTRAPMENT, + element=ElementType.HHSRS_COLLISION_AND_ENTRAPMENT, aspect_type=AspectType.RISK, ), "HHSRSPOSI": ElementMapping( - element=Element.HHSRS_AMENITIES, + element=ElementType.HHSRS_AMENITIES, aspect_type=AspectType.RISK, ), } diff --git a/backend/condition/domain/mapping/lbwf/lbwf_mapper.py b/backend/condition/domain/mapping/lbwf/lbwf_mapper.py index 3d7b7349..bb5f777d 100644 --- a/backend/condition/domain/mapping/lbwf/lbwf_mapper.py +++ b/backend/condition/domain/mapping/lbwf/lbwf_mapper.py @@ -1,6 +1,5 @@ from typing import Any, List, Optional -from backend.condition.domain.asset_condition import AssetCondition from backend.condition.domain.element import Element from backend.condition.domain.mapping.element_mapping import ElementMapping from backend.condition.domain.mapping.lbwf.lbwf_element_map import LBWF_ELEMENT_MAP @@ -18,12 +17,12 @@ class LbwfMapper(Mapper): def map_asset_conditions_for_property( self, client_data: Any, survey_year: Optional[int] = None - ) -> List[AssetCondition]: + ) -> List[Element]: assert isinstance( client_data, LbwfHouse ) # TODO: think of a better way to do this - mapped_assets: List[AssetCondition] = [] + mapped_assets: List[Element] = [] uprn: int = client_data.uprn for raw_asset in client_data.assets: @@ -40,7 +39,7 @@ class LbwfMapper(Mapper): continue mapped_assets.append( - AssetCondition( + Element( uprn=uprn, element=element_mapping.element, aspect_type=element_mapping.aspect_type, diff --git a/backend/condition/domain/mapping/mapper.py b/backend/condition/domain/mapping/mapper.py index c0b07184..ace6ad73 100644 --- a/backend/condition/domain/mapping/mapper.py +++ b/backend/condition/domain/mapping/mapper.py @@ -1,7 +1,7 @@ from abc import ABC, abstractmethod from typing import Any, List, Optional -from backend.condition.domain.asset_condition import AssetCondition +from backend.condition.domain.element import Element class Mapper(ABC): @@ -9,6 +9,6 @@ class Mapper(ABC): @abstractmethod def map_asset_conditions_for_property( self, client_data: Any, survey_year: Optional[int] = None - ) -> List[AssetCondition]: + ) -> List[Element]: # TODO: client_data should be properly typed pass diff --git a/backend/condition/domain/mapping/peabody/peabody_element_map.py b/backend/condition/domain/mapping/peabody/peabody_element_map.py index 1f9cceee..508b8968 100644 --- a/backend/condition/domain/mapping/peabody/peabody_element_map.py +++ b/backend/condition/domain/mapping/peabody/peabody_element_map.py @@ -1,5 +1,5 @@ from backend.condition.domain.aspect_type import AspectType -from backend.condition.domain.element import Element +from backend.condition.domain.element_type import ElementType from backend.condition.domain.mapping.element_mapping import ElementMapping @@ -7,654 +7,658 @@ PEABODY_ELEMENT_MAP = { # ========================================================== # PROPERTY / GENERAL # ========================================================== - (100, 1): ElementMapping(element=Element.PROPERTY, aspect_type=AspectType.TYPE), + (100, 1): ElementMapping(element=ElementType.PROPERTY, aspect_type=AspectType.TYPE), # (100, 3): ElementMapping(element=Element.PROPERTY, aspect_type=AspectType.AGE), # (100, 14): ElementMapping(element="property", aspect_type="construction_type"), (50, 2): ElementMapping( - element=Element.CARBON_MONOXIDE_DETECTION, aspect_type=AspectType.TYPE + element=ElementType.CARBON_MONOXIDE_DETECTION, aspect_type=AspectType.TYPE ), - (50, 3): ElementMapping(element=Element.CCU, aspect_type=AspectType.TYPE), + (50, 3): ElementMapping(element=ElementType.CCU, aspect_type=AspectType.TYPE), (50, 7): ElementMapping( - element=Element.DISABLED_HOIST_TRACKING, aspect_type=AspectType.PRESENCE + element=ElementType.DISABLED_HOIST_TRACKING, aspect_type=AspectType.PRESENCE ), (50, 11): ElementMapping( - element=Element.HEAT_DETECTION, aspect_type=AspectType.TYPE + element=ElementType.HEAT_DETECTION, aspect_type=AspectType.TYPE ), (50, 21): ElementMapping( - element=Element.SMOKE_DETECTION, aspect_type=AspectType.TYPE + element=ElementType.SMOKE_DETECTION, aspect_type=AspectType.TYPE ), (50, 22): ElementMapping( - element=Element.STAIRLIFT, aspect_type=AspectType.PRESENCE + element=ElementType.STAIRLIFT, aspect_type=AspectType.PRESENCE ), (50, 26): ElementMapping( - element=Element.DISABLED_FACILITIES, aspect_type=AspectType.TYPE + element=ElementType.DISABLED_FACILITIES, aspect_type=AspectType.TYPE + ), + (100, 3): ElementMapping( + element=ElementType.PROPERTY, aspect_type=AspectType.AGE_BAND ), - (100, 3): ElementMapping(element=Element.PROPERTY, aspect_type=AspectType.AGE_BAND), (100, 14): ElementMapping( - element=Element.PROPERTY, aspect_type=AspectType.CONSTRUCTION_TYPE + element=ElementType.PROPERTY, aspect_type=AspectType.CONSTRUCTION_TYPE ), (100, 16): ElementMapping( - element=Element.PROPERTY, aspect_type=AspectType.CLASSIFICATION + element=ElementType.PROPERTY, aspect_type=AspectType.CLASSIFICATION ), (210, 2): ElementMapping( - element=Element.PASSENGER_LIFT, aspect_type=AspectType.TYPE + element=ElementType.PASSENGER_LIFT, aspect_type=AspectType.TYPE ), # ========================================================== # EXTERNAL – WALLS # ========================================================== (50, 16): ElementMapping( - element=Element.PARTY_WALL_FIRE_BREAK, aspect_type=AspectType.PRESENCE + element=ElementType.PARTY_WALL_FIRE_BREAK, aspect_type=AspectType.PRESENCE ), (53, 1): ElementMapping( - element=Element.BOUNDARY_WALLS, aspect_type=AspectType.PRESENCE + element=ElementType.BOUNDARY_WALLS, aspect_type=AspectType.PRESENCE ), (53, 4): ElementMapping( - element=Element.EXTERNAL_DECORATION, aspect_type=AspectType.PRESENCE + element=ElementType.EXTERNAL_DECORATION, aspect_type=AspectType.PRESENCE ), (53, 5): ElementMapping( - element=Element.EXTERNAL_NOISE_INSULATION, aspect_type=AspectType.ADEQUACY + element=ElementType.EXTERNAL_NOISE_INSULATION, aspect_type=AspectType.ADEQUACY ), (53, 14): ElementMapping( - element=Element.GARAGE_WALLS, aspect_type=AspectType.MATERIAL + element=ElementType.GARAGE_WALLS, aspect_type=AspectType.MATERIAL ), (53, 23): ElementMapping( - element=Element.EXTERNAL_WALL, aspect_type=AspectType.FINISH + element=ElementType.EXTERNAL_WALL, aspect_type=AspectType.FINISH ), (53, 30): ElementMapping( - element=Element.SECONDARY_WALL, aspect_type=AspectType.FINISH + element=ElementType.SECONDARY_WALL, aspect_type=AspectType.FINISH ), # Should this be combined with primary wall, with different instance value? (53, 36): ElementMapping( - element=Element.EXTERNAL_WALL, aspect_type=AspectType.INSULATION + element=ElementType.EXTERNAL_WALL, aspect_type=AspectType.INSULATION ), (53, 40): ElementMapping( - element=Element.SPANDREL_PANELS, aspect_type=AspectType.MATERIAL + element=ElementType.SPANDREL_PANELS, aspect_type=AspectType.MATERIAL + ), + (53, 41): ElementMapping( + element=ElementType.CLADDING, aspect_type=AspectType.MATERIAL ), - (53, 41): ElementMapping(element=Element.CLADDING, aspect_type=AspectType.MATERIAL), (100, 15): ElementMapping( - element=Element.EXTERNAL_DECORATION, aspect_type=AspectType.CONDITION + element=ElementType.EXTERNAL_DECORATION, aspect_type=AspectType.CONDITION ), (120, 1): ElementMapping( - element=Element.EXTERNAL_WALL, aspect_type=AspectType.STRUCTURE + element=ElementType.EXTERNAL_WALL, aspect_type=AspectType.STRUCTURE ), (120, 2): ElementMapping( - element=Element.EXTERNAL_WALL, aspect_type=AspectType.FINISH + element=ElementType.EXTERNAL_WALL, aspect_type=AspectType.FINISH ), (120, 3): ElementMapping( - element=Element.PRIMARY_WALL, aspect_type=AspectType.INSULATION + element=ElementType.PRIMARY_WALL, aspect_type=AspectType.INSULATION ), # This code element code is actually "WALL" not "external wall" - correct? # ========================================================== # EXTERNAL – ROOFS # ========================================================== (50, 15): ElementMapping( - element=Element.LOFT_INSULATION, + element=ElementType.LOFT_INSULATION, aspect_type=AspectType.TYPE, ), (53, 2): ElementMapping( - element=Element.CHIMNEY, + element=ElementType.CHIMNEY, aspect_type=AspectType.PRESENCE, ), (53, 6): ElementMapping( - element=Element.FASCIA_SOFFIT_BARGEBOARDS, + element=ElementType.FASCIA_SOFFIT_BARGEBOARDS, aspect_type=AspectType.MATERIAL, ), (53, 7): ElementMapping( - element=Element.FLAT_ROOF_COVERING, + element=ElementType.FLAT_ROOF_COVERING, aspect_type=AspectType.MATERIAL, ), (53, 13): ElementMapping( - element=Element.GARAGE_ROOF, + element=ElementType.GARAGE_ROOF, aspect_type=AspectType.MATERIAL, ), (53, 15): ElementMapping( - element=Element.GUTTERS, + element=ElementType.GUTTERS, aspect_type=AspectType.MATERIAL, ), (53, 21): ElementMapping( - element=Element.PITCHED_ROOF_COVERING, + element=ElementType.PITCHED_ROOF_COVERING, aspect_type=AspectType.MATERIAL, ), (53, 22): ElementMapping( - element=Element.PORCH_CANOPY, + element=ElementType.PORCH_CANOPY, aspect_type=AspectType.TYPE, ), (53, 47): ElementMapping( - element=Element.ROOF, + element=ElementType.ROOF, aspect_type=AspectType.STRUCTURE, ), (110, 1): ElementMapping( - element=Element.ROOF, + element=ElementType.ROOF, aspect_type=AspectType.MATERIAL, element_instance=1, ), (110, 2): ElementMapping( - element=Element.ROOF, + element=ElementType.ROOF, aspect_type=AspectType.MATERIAL, element_instance=1, ), (110, 3): ElementMapping( - element=Element.CHIMNEY, + element=ElementType.CHIMNEY, aspect_type=AspectType.WORK_REQUIRED, ), (110, 4): ElementMapping( - element=Element.FASCIA, + element=ElementType.FASCIA, aspect_type=AspectType.MATERIAL, ), (110, 5): ElementMapping( - element=Element.SOFFIT, + element=ElementType.SOFFIT, aspect_type=AspectType.MATERIAL, ), (110, 6): ElementMapping( - element=Element.RAINWATER_GOODS, + element=ElementType.RAINWATER_GOODS, aspect_type=AspectType.MATERIAL, ), (110, 7): ElementMapping( - element=Element.LOFT_INSULATION, + element=ElementType.LOFT_INSULATION, aspect_type=AspectType.WORK_REQUIRED, # possibly not the right aspect type ), (110, 8): ElementMapping( - element=Element.PORCH_CANOPY, + element=ElementType.PORCH_CANOPY, aspect_type=AspectType.MATERIAL, ), # ========================================================== # EXTERNAL – DOORS & WINDOWS # ========================================================== (50, 8): ElementMapping( - element=Element.DOOR_ENTRY_HANDSET, + element=ElementType.DOOR_ENTRY_HANDSET, aspect_type=AspectType.PRESENCE, ), (53, 8): ElementMapping( - element=Element.FRONT_DOOR, + element=ElementType.FRONT_DOOR, aspect_type=AspectType.MATERIAL, ), (53, 12): ElementMapping( - element=Element.GARAGE_DOOR, + element=ElementType.GARAGE_DOOR, aspect_type=AspectType.MATERIAL, ), (53, 16): ElementMapping( - element=Element.LINTEL, + element=ElementType.LINTEL, aspect_type=AspectType.PRESENCE, ), (53, 19): ElementMapping( - element=Element.PATIO_FRENCH_DOOR, + element=ElementType.PATIO_FRENCH_DOOR, aspect_type=AspectType.MATERIAL, ), (53, 25): ElementMapping( - element=Element.REAR_DOOR, + element=ElementType.REAR_DOOR, aspect_type=AspectType.MATERIAL, ), (53, 29): ElementMapping( - element=Element.SECONDARY_GLAZING, + element=ElementType.SECONDARY_GLAZING, aspect_type=AspectType.PRESENCE, ), (53, 35): ElementMapping( - element=Element.STORE_DOOR, + element=ElementType.STORE_DOOR, aspect_type=AspectType.MATERIAL, ), (53, 38): ElementMapping( - element=Element.EXTERNAL_WINDOWS, + element=ElementType.EXTERNAL_WINDOWS, aspect_type=AspectType.TYPE, element_instance=1, ), (53, 39): ElementMapping( - element=Element.EXTERNAL_WINDOWS, + element=ElementType.EXTERNAL_WINDOWS, aspect_type=AspectType.TYPE, element_instance=2, ), (53, 43): ElementMapping( - element=Element.FRONT_DOOR, + element=ElementType.FRONT_DOOR, aspect_type=AspectType.TYPE, ), (130, 1): ElementMapping( - element=Element.EXTERNAL_WINDOWS, + element=ElementType.EXTERNAL_WINDOWS, aspect_type=AspectType.MATERIAL, ), (130, 2): ElementMapping( - element=Element.COMMUNAL_WINDOWS, + element=ElementType.COMMUNAL_WINDOWS, aspect_type=AspectType.MATERIAL, ), (140, 1): ElementMapping( - element=Element.MAIN_DOOR, + element=ElementType.MAIN_DOOR, aspect_type=AspectType.MATERIAL, ), (140, 2): ElementMapping( - element=Element.STORE_DOOR, + element=ElementType.STORE_DOOR, aspect_type=AspectType.MATERIAL, ), # Duplicate of (53, 35) (140, 3): ElementMapping( - element=Element.GARAGE_DOOR, + element=ElementType.GARAGE_DOOR, aspect_type=AspectType.MATERIAL, ), # Duplicate of (53, 12) (140, 4): ElementMapping( - element=Element.BLOCK_ENTRANCE_DOOR, + element=ElementType.BLOCK_ENTRANCE_DOOR, aspect_type=AspectType.MATERIAL, ), # ========================================================== # EXTERNAL AREAS # ========================================================== (53, 3): ElementMapping( - element=Element.DOWNPIPES, + element=ElementType.DOWNPIPES, aspect_type=AspectType.MATERIAL, ), (53, 9): ElementMapping( - element=Element.FRONT_FENCING, + element=ElementType.FRONT_FENCING, aspect_type=AspectType.MATERIAL, ), (53, 10): ElementMapping( - element=Element.FRONT_GATE, + element=ElementType.FRONT_GATE, aspect_type=AspectType.TYPE, ), (53, 17): ElementMapping( - element=Element.PARKING_AREAS, + element=ElementType.PARKING_AREAS, aspect_type=AspectType.MATERIAL, ), (53, 18): ElementMapping( - element=Element.PATHS_AND_HARDSTANDINGS, + element=ElementType.PATHS_AND_HARDSTANDINGS, aspect_type=AspectType.MATERIAL, ), (53, 24): ElementMapping( - element=Element.PRIVATE_BALCONY, + element=ElementType.PRIVATE_BALCONY, aspect_type=AspectType.PRESENCE, ), (53, 26): ElementMapping( - element=Element.REAR_FENCING, + element=ElementType.REAR_FENCING, aspect_type=AspectType.MATERIAL, ), (53, 27): ElementMapping( - element=Element.REAR_GATE, + element=ElementType.REAR_GATE, aspect_type=AspectType.TYPE, ), (53, 28): ElementMapping( - element=Element.RETAINING_WALLS, + element=ElementType.RETAINING_WALLS, aspect_type=AspectType.PRESENCE, ), (53, 31): ElementMapping( - element=Element.SIDE_FENCING, + element=ElementType.SIDE_FENCING, aspect_type=AspectType.MATERIAL, ), (53, 32): ElementMapping( - element=Element.SOIL_AND_VENT, + element=ElementType.SOIL_AND_VENT, aspect_type=AspectType.MATERIAL, ), (53, 34): ElementMapping( - element=Element.SOLAR_THERMALS, + element=ElementType.SOLAR_THERMALS, aspect_type=AspectType.PRESENCE, ), (53, 44): ElementMapping( - element=Element.GARAGE_STRUCTURE, + element=ElementType.GARAGE_STRUCTURE, aspect_type=AspectType.TYPE, ), (53, 45): ElementMapping( - element=Element.BALCONY_BALUSTRADE, + element=ElementType.BALCONY_BALUSTRADE, aspect_type=AspectType.MATERIAL, ), (150, 1): ElementMapping( - element=Element.BLOCK_ENTRANCE_DOOR, + element=ElementType.BLOCK_ENTRANCE_DOOR, aspect_type=AspectType.MATERIAL, ), (150, 2): ElementMapping( - element=Element.PATHS_AND_HARDSTANDINGS, + element=ElementType.PATHS_AND_HARDSTANDINGS, aspect_type=AspectType.MATERIAL, ), # Duplicate of (53, 18) - correct? (150, 3): ElementMapping( - element=Element.ROADS, + element=ElementType.ROADS, aspect_type=AspectType.MATERIAL, ), (150, 4): ElementMapping( - element=Element.BOUNDARY_WALLS, + element=ElementType.BOUNDARY_WALLS, aspect_type=AspectType.MATERIAL, ), (150, 5): ElementMapping( - element=Element.OUTBUILDINGS, + element=ElementType.OUTBUILDINGS, aspect_type=AspectType.TYPE, ), (150, 6): ElementMapping( - element=Element.GARAGE_STRUCTURE, + element=ElementType.GARAGE_STRUCTURE, aspect_type=AspectType.TYPE, ), # ========================================================== # INTERNAL – BATHROOMS & KITCHENS # ========================================================== (50, 1): ElementMapping( - element=Element.SECONDARY_TOILET, + element=ElementType.SECONDARY_TOILET, aspect_type=AspectType.PRESENCE, ), (50, 9): ElementMapping( - element=Element.BATHROOM_EXTRACTOR_FAN, + element=ElementType.BATHROOM_EXTRACTOR_FAN, aspect_type=AspectType.PRESENCE, ), (50, 9): ElementMapping( - element=Element.KITCHEN, + element=ElementType.KITCHEN, aspect_type=AspectType.TYPE, ), (50, 10): ElementMapping( - element=Element.KITCHEN_EXTRACTOR_FAN, + element=ElementType.KITCHEN_EXTRACTOR_FAN, aspect_type=AspectType.PRESENCE, ), (50, 13): ElementMapping( - element=Element.KITCHEN_SPACE_LAYOUT, + element=ElementType.KITCHEN_SPACE_LAYOUT, aspect_type=AspectType.ADEQUACY, ), (50, 14): ElementMapping( - element=Element.KITCHEN, + element=ElementType.KITCHEN, aspect_type=AspectType.TYPE, ), (50, 17): ElementMapping( - element=Element.BATHROOM, + element=ElementType.BATHROOM, aspect_type=AspectType.LOCATION, ), (50, 18): ElementMapping( - element=Element.BATHROOM, + element=ElementType.BATHROOM, aspect_type=AspectType.TYPE, ), # Actually "Primary bathroom type" - ok like this? (50, 20): ElementMapping( - element=Element.BATHROOM, + element=ElementType.BATHROOM, aspect_type=AspectType.TYPE, element_instance=2, ), # Actually "Secondary bathroom type" - ok like this? (160, 1): ElementMapping( - element=Element.KITCHEN, + element=ElementType.KITCHEN, aspect_type=AspectType.CONDITION, ), (160, 2): ElementMapping( - element=Element.KITCHEN_SPACE_LAYOUT, + element=ElementType.KITCHEN_SPACE_LAYOUT, aspect_type=AspectType.ADEQUACY, ), (190, 1): ElementMapping( - element=Element.BATHROOM, + element=ElementType.BATHROOM, aspect_type=AspectType.CONDITION, ), (190, 2): ElementMapping( - element=Element.SECONDARY_TOILET, + element=ElementType.SECONDARY_TOILET, aspect_type=AspectType.TYPE, ), # ========================================================== # COMMUNAL # ========================================================== (51, 1): ElementMapping( - element=Element.COMMUNAL_AERIAL, + element=ElementType.COMMUNAL_AERIAL, aspect_type=AspectType.PRESENCE, ), (51, 2): ElementMapping( - element=Element.COMMUNAL_AOV, + element=ElementType.COMMUNAL_AOV, aspect_type=AspectType.PRESENCE, ), (51, 3): ElementMapping( - element=Element.COMMUNAL_BALCONY_WALKWAY, + element=ElementType.COMMUNAL_BALCONY_WALKWAY, aspect_type=AspectType.PRESENCE, ), (51, 4): ElementMapping( - element=Element.COMMUNAL_BATHROOM, + element=ElementType.COMMUNAL_BATHROOM, aspect_type=AspectType.TYPE, ), (51, 5): ElementMapping( - element=Element.COMMUNAL_BIN_STORE_DOORS, + element=ElementType.COMMUNAL_BIN_STORE_DOORS, aspect_type=AspectType.PRESENCE, ), (51, 6): ElementMapping( - element=Element.COMMUNAL_BIN_STORE_ROOF, + element=ElementType.COMMUNAL_BIN_STORE_ROOF, aspect_type=AspectType.PRESENCE, ), (51, 7): ElementMapping( - element=Element.COMMUNAL_BIN_STORE_WALLS, + element=ElementType.COMMUNAL_BIN_STORE_WALLS, aspect_type=AspectType.MATERIAL, ), (51, 8): ElementMapping( - element=Element.COMMUNAL_BMS, + element=ElementType.COMMUNAL_BMS, aspect_type=AspectType.PRESENCE, ), (51, 9): ElementMapping( - element=Element.COMMUNAL_BOILER, + element=ElementType.COMMUNAL_BOILER, aspect_type=AspectType.TYPE, ), (51, 10): ElementMapping( - element=Element.COMMUNAL_BOOSTER_PUMP, + element=ElementType.COMMUNAL_BOOSTER_PUMP, aspect_type=AspectType.PRESENCE, ), (51, 11): ElementMapping( - element=Element.COMMUNAL_CCTV, + element=ElementType.COMMUNAL_CCTV, aspect_type=AspectType.PRESENCE, ), (51, 12): ElementMapping( - element=Element.COMMUNAL_CIRCULATION_SPACE, + element=ElementType.COMMUNAL_CIRCULATION_SPACE, aspect_type=AspectType.ADEQUACY, ), (51, 13): ElementMapping( - element=Element.COMMUNAL_COLD_WATER_STORAGE, + element=ElementType.COMMUNAL_COLD_WATER_STORAGE, aspect_type=AspectType.PRESENCE, ), (51, 14): ElementMapping( - element=Element.COMMUNAL_DOOR_ENTRY, + element=ElementType.COMMUNAL_DOOR_ENTRY, aspect_type=AspectType.SYSTEM, ), (51, 15): ElementMapping( - element=Element.COMMUNAL_DRY_RISER, + element=ElementType.COMMUNAL_DRY_RISER, aspect_type=AspectType.PRESENCE, ), (51, 16): ElementMapping( - element=Element.COMMUNAL_EMERGENCY_LIGHTING, + element=ElementType.COMMUNAL_EMERGENCY_LIGHTING, aspect_type=AspectType.PRESENCE, ), (51, 17): ElementMapping( - element=Element.COMMUNAL_EXTERNAL_DOORS, + element=ElementType.COMMUNAL_EXTERNAL_DOORS, aspect_type=AspectType.MATERIAL, ), (51, 19): ElementMapping( - element=Element.COMMUNAL_FIRE_ALARM, + element=ElementType.COMMUNAL_FIRE_ALARM, aspect_type=AspectType.TYPE, ), (51, 20): ElementMapping( - element=Element.COMMUNAL_INTERNAL_DECORATIONS, + element=ElementType.COMMUNAL_INTERNAL_DECORATIONS, aspect_type=AspectType.PRESENCE, ), (51, 21): ElementMapping( - element=Element.COMMUNAL_INTERNAL_DOORS, + element=ElementType.COMMUNAL_INTERNAL_DOORS, aspect_type=AspectType.MATERIAL, ), (51, 22): ElementMapping( - element=Element.COMMUNAL_INTERNAL_FLOOR, + element=ElementType.COMMUNAL_INTERNAL_FLOOR, aspect_type=AspectType.FINISH, ), (51, 23): ElementMapping( - element=Element.COMMUNAL_KITCHEN, + element=ElementType.COMMUNAL_KITCHEN, aspect_type=AspectType.TYPE, ), (51, 24): ElementMapping( - element=Element.COMMUNAL_LATERAL_MAINS, + element=ElementType.COMMUNAL_LATERAL_MAINS, aspect_type=AspectType.PRESENCE, ), (51, 25): ElementMapping( - element=Element.COMMUNAL_LIGHTING, + element=ElementType.COMMUNAL_LIGHTING, aspect_type=AspectType.PRESENCE, ), (51, 26): ElementMapping( - element=Element.COMMUNAL_LIGHTING_CONDUCTOR, + element=ElementType.COMMUNAL_LIGHTING_CONDUCTOR, aspect_type=AspectType.PRESENCE, ), (51, 27): ElementMapping( - element=Element.COMMUNAL_PASSENGER_LIFT, + element=ElementType.COMMUNAL_PASSENGER_LIFT, aspect_type=AspectType.TYPE, ), (51, 28): ElementMapping( - element=Element.COMMUNAL_ENTRANCE, + element=ElementType.COMMUNAL_ENTRANCE, aspect_type=AspectType.MATERIAL, element_instance=1, ), (51, 30): ElementMapping( - element=Element.COMMUNAL_ENTRANCE, + element=ElementType.COMMUNAL_ENTRANCE, aspect_type=AspectType.FINISH, element_instance=2, ), (51, 31): ElementMapping( - element=Element.COMMUNAL_SPRINKLER, + element=ElementType.COMMUNAL_SPRINKLER, aspect_type=AspectType.PRESENCE, ), (51, 29): ElementMapping( - element=Element.COMMUNAL_REFUSE_CHUTE, + element=ElementType.COMMUNAL_REFUSE_CHUTE, aspect_type=AspectType.PRESENCE, ), (51, 32): ElementMapping( - element=Element.COMMUNAL_STAIRS, + element=ElementType.COMMUNAL_STAIRS, aspect_type=AspectType.FINISH, ), (51, 33): ElementMapping( - element=Element.COMMUNAL_STORE_DOORS, + element=ElementType.COMMUNAL_STORE_DOORS, aspect_type=AspectType.MATERIAL, ), (51, 34): ElementMapping( - element=Element.COMMUNAL_STORE_ROOF, + element=ElementType.COMMUNAL_STORE_ROOF, aspect_type=AspectType.MATERIAL, ), (51, 35): ElementMapping( - element=Element.COMMUNAL_STORE_WALLS, + element=ElementType.COMMUNAL_STORE_WALLS, aspect_type=AspectType.MATERIAL, ), (51, 36): ElementMapping( - element=Element.COMMUNAL_WALKWAYS, + element=ElementType.COMMUNAL_WALKWAYS, aspect_type=AspectType.FINISH, ), (51, 37): ElementMapping( - element=Element.COMMUNAL_WARDEN_CALL_SYSTEM, + element=ElementType.COMMUNAL_WARDEN_CALL_SYSTEM, aspect_type=AspectType.PRESENCE, ), (51, 38): ElementMapping( - element=Element.COMMUNAL_TOILETS, + element=ElementType.COMMUNAL_TOILETS, aspect_type=AspectType.TYPE, ), (51, 39): ElementMapping( - element=Element.COMMUNAL_WET_RISER, + element=ElementType.COMMUNAL_WET_RISER, aspect_type=AspectType.PRESENCE, ), (51, 40): ElementMapping( - element=Element.COMMUNAL_PLUG_SOCKETS, + element=ElementType.COMMUNAL_PLUG_SOCKETS, aspect_type=AspectType.PRESENCE, ), (200, 1): ElementMapping( - element=Element.COMMUNAL_BOILER, + element=ElementType.COMMUNAL_BOILER, aspect_type=AspectType.TYPE, ), # Duplicate of (51, 9) - correct? (200, 2): ElementMapping( - element=Element.COMMUNAL_HEATING, + element=ElementType.COMMUNAL_HEATING, aspect_type=AspectType.TYPE, ), (200, 3): ElementMapping( - element=Element.COMMUNAL_ELECTRICS, + element=ElementType.COMMUNAL_ELECTRICS, aspect_type=AspectType.TYPE, ), (200, 4): ElementMapping( - element=Element.COMMUNAL_FIRE_ALARM, + element=ElementType.COMMUNAL_FIRE_ALARM, aspect_type=AspectType.TYPE, ), (200, 5): ElementMapping( - element=Element.COMMUNAL_LIFT, + element=ElementType.COMMUNAL_LIFT, aspect_type=AspectType.TYPE, ), (200, 6): ElementMapping( - element=Element.COMMUNAL_FLOOR_COVERING, + element=ElementType.COMMUNAL_FLOOR_COVERING, aspect_type=AspectType.MATERIAL, ), (200, 7): ElementMapping( - element=Element.COMMUNAL_KITCHEN, + element=ElementType.COMMUNAL_KITCHEN, aspect_type=AspectType.TYPE, ), (200, 8): ElementMapping( - element=Element.COMMUNAL_BATHROOM, + element=ElementType.COMMUNAL_BATHROOM, aspect_type=AspectType.TYPE, ), # Duplicate of (51, 4) - correct? (200, 9): ElementMapping( - element=Element.COMMUNAL_TOILETS, + element=ElementType.COMMUNAL_TOILETS, aspect_type=AspectType.TYPE, ), # Duplicate of (51, 38) - correct? (200, 10): ElementMapping( - element=Element.COMMUNAL_GATES, + element=ElementType.COMMUNAL_GATES, aspect_type=AspectType.TYPE, ), # ========================================================== # INTERNAL – HEATING # ========================================================== (50, 4): ElementMapping( - element=Element.HEATING_BOILER, + element=ElementType.HEATING_BOILER, aspect_type=AspectType.PRESENCE, ), # This is actually "Central heating boiler" - ok like this? (50, 5): ElementMapping( - element=Element.CENTRAL_HEATING, + element=ElementType.CENTRAL_HEATING, aspect_type=AspectType.EXTENT, ), (50, 6): ElementMapping( - element=Element.COLD_WATER_STORAGE, + element=ElementType.COLD_WATER_STORAGE, aspect_type=AspectType.PRESENCE, ), (50, 12): ElementMapping( - element=Element.HEATING_DISTRIBUTION, + element=ElementType.HEATING_DISTRIBUTION, aspect_type=AspectType.TYPE, ), (50, 19): ElementMapping( - element=Element.PROGRAMMABLE_HEATING, + element=ElementType.PROGRAMMABLE_HEATING, aspect_type=AspectType.TYPE, ), (50, 25): ElementMapping( - element=Element.HEATING_BOILER, + element=ElementType.HEATING_BOILER, aspect_type=AspectType.TYPE, ), (170, 1): ElementMapping( - element=Element.HEATING_BOILER, + element=ElementType.HEATING_BOILER, aspect_type=AspectType.TYPE, ), # Duplicate of (50,25) - correct? (170, 2): ElementMapping( - element=Element.HEATING_DISTRIBUTION, + element=ElementType.HEATING_DISTRIBUTION, aspect_type=AspectType.TYPE, ), # Duplicate of (50,12) - correct? (170, 3): ElementMapping( - element=Element.SECONDARY_HEATING, + element=ElementType.SECONDARY_HEATING, aspect_type=AspectType.TYPE, ), (170, 4): ElementMapping( - element=Element.COLD_WATER_STORAGE, + element=ElementType.COLD_WATER_STORAGE, aspect_type=AspectType.TYPE, ), (170, 5): ElementMapping( - element=Element.HOT_WATER_SYSTEM, + element=ElementType.HOT_WATER_SYSTEM, aspect_type=AspectType.TYPE, ), # ========================================================== # ELECTRICS # ========================================================== (50, 24): ElementMapping( - element=Element.INTERNAL_WIRING, + element=ElementType.INTERNAL_WIRING, aspect_type=AspectType.MATERIAL, ), (180, 1): ElementMapping( - element=Element.ELECTRICAL_WIRING, + element=ElementType.ELECTRICAL_WIRING, aspect_type=AspectType.WORK_REQUIRED, ), # Not certain about the AspectType - only example in the sample data is "Full Rewire" (180, 2): ElementMapping( - element=Element.CONSUMER_UNIT, + element=ElementType.CONSUMER_UNIT, aspect_type=AspectType.TYPE, ), (180, 3): ElementMapping( - element=Element.SMOKE_DETECTION, + element=ElementType.SMOKE_DETECTION, aspect_type=AspectType.TYPE, ), # Duplicate of (50, 21) - correct? (180, 4): ElementMapping( - element=Element.CARBON_MONOXIDE_DETECTION, + element=ElementType.CARBON_MONOXIDE_DETECTION, aspect_type=AspectType.TYPE, ), # Duplicate of (50, 2) - correct? # ========================================================== # HHSRS # ========================================================== (54, 1): ElementMapping( - element=Element.HHSRS_DAMP_AND_MOULD, + element=ElementType.HHSRS_DAMP_AND_MOULD, aspect_type=AspectType.RISK, ), (54, 4): ElementMapping( - element=Element.HHSRS_ASBESTOS_AND_MMF, + element=ElementType.HHSRS_ASBESTOS_AND_MMF, aspect_type=AspectType.RISK, ), (54, 15): ElementMapping( - element=Element.HHSRS_DOMESTIC_HYGIENE_PESTS_REFUSE, + element=ElementType.HHSRS_DOMESTIC_HYGIENE_PESTS_REFUSE, aspect_type=AspectType.RISK, ), (54, 29): ElementMapping( - element=Element.HHSRS_STRUCTURAL_COLLAPSE, + element=ElementType.HHSRS_STRUCTURAL_COLLAPSE, aspect_type=AspectType.RISK, ), } diff --git a/backend/condition/domain/mapping/peabody/peabody_mapper.py b/backend/condition/domain/mapping/peabody/peabody_mapper.py index dea07756..8c8a103b 100644 --- a/backend/condition/domain/mapping/peabody/peabody_mapper.py +++ b/backend/condition/domain/mapping/peabody/peabody_mapper.py @@ -1,6 +1,6 @@ from typing import Any, List, Optional -from backend.condition.domain.asset_condition import AssetCondition +from backend.condition.domain.element import Element from backend.condition.domain.mapping.element_mapping import ElementMapping from backend.condition.domain.mapping.peabody.peabody_element_map import ( PEABODY_ELEMENT_MAP, @@ -15,12 +15,12 @@ logger = setup_logger() class PeabodyMapper(Mapper): def map_asset_conditions_for_property( self, client_data: Any, survey_year: Optional[int] = None - ) -> List[AssetCondition]: + ) -> List[Element]: assert isinstance( client_data, PeabodyProperty ) # TODO: think of a better way to do this - mapped_assets: List[AssetCondition] = [] + mapped_assets: List[Element] = [] uprn: int = client_data.uprn for raw_asset in client_data.assets: @@ -36,7 +36,7 @@ class PeabodyMapper(Mapper): continue mapped_assets.append( - AssetCondition( + Element( uprn=uprn, element=element_mapping.element, aspect_type=element_mapping.aspect_type, diff --git a/backend/condition/domain/property_condition_survey.py b/backend/condition/domain/property_condition_survey.py new file mode 100644 index 00000000..6955e5fa --- /dev/null +++ b/backend/condition/domain/property_condition_survey.py @@ -0,0 +1,14 @@ +from dataclasses import dataclass +from typing import List +from datetime import date + +from backend.condition.domain.element import Element + + +@dataclass +class PropertyConditionSurvey: + uprn: int + elements: List[Element] + + date: date + source: str # TODO: make enum diff --git a/backend/condition/processor.py b/backend/condition/processor.py index 903c9f23..3ed0904a 100644 --- a/backend/condition/processor.py +++ b/backend/condition/processor.py @@ -1,7 +1,7 @@ from typing import Any, BinaryIO, List from datetime import datetime -from backend.condition.domain.asset_condition import AssetCondition +from backend.condition.domain.element import Element from backend.condition.domain.mapping.mapper import Mapper from backend.condition.parsing.parser import Parser from utils.logger import setup_logger @@ -22,7 +22,7 @@ def process_file(file_stream: BinaryIO, source_key: str) -> None: survey_year = datetime.now().year # TODO: get this from filepath or elsewhere - assets: List[AssetCondition] = [] + assets: List[Element] = [] for p in raw_properties: assets.extend(mapper.map_asset_conditions_for_property(p, survey_year)) diff --git a/backend/condition/tests/mapping/test_lbwf_mapper.py b/backend/condition/tests/mapping/test_lbwf_mapper.py index 907bd250..dab9c7a1 100644 --- a/backend/condition/tests/mapping/test_lbwf_mapper.py +++ b/backend/condition/tests/mapping/test_lbwf_mapper.py @@ -4,13 +4,13 @@ import pytest from datetime import date from backend.condition.domain.aspect_type import AspectType -from backend.condition.domain.element import Element +from backend.condition.domain.element_type import ElementType from backend.condition.domain.mapping.lbwf.lbwf_mapper import LbwfMapper from backend.condition.parsing.records.lbwf.lbwf_house import LbwfHouse from backend.condition.parsing.records.lbwf.lbwf_asset_condition import ( LbwfAssetCondition, ) -from backend.condition.domain.asset_condition import AssetCondition +from backend.condition.domain.element import Element def test_lbwf_mapper_maps_house(): @@ -219,10 +219,10 @@ def test_lbwf_mapper_maps_house(): survey_year = 2026 - expected_assets: List[AssetCondition] = [ - AssetCondition( + expected_assets: List[Element] = [ + Element( uprn=1, - element=Element.ACCESSIBLE_HOUSING_REGISTER, + element=ElementType.ACCESSIBLE_HOUSING_REGISTER, aspect_type=AspectType.CATEGORY, element_instance=None, value="General Needs", @@ -231,9 +231,9 @@ def test_lbwf_mapper_maps_house(): install_date=None, comments=None, ), - AssetCondition( + Element( uprn=1, - element=Element.FLOOR_LEVEL_FRONT_DOOR, + element=ElementType.FLOOR_LEVEL_FRONT_DOOR, aspect_type=AspectType.LOCATION, element_instance=None, value="Ground Floor", @@ -242,9 +242,9 @@ def test_lbwf_mapper_maps_house(): install_date=None, comments=None, ), - AssetCondition( + Element( uprn=1, - element=Element.ASBESTOS, + element=ElementType.ASBESTOS, aspect_type=AspectType.PRESENCE, element_instance=None, value="Yes", @@ -253,9 +253,9 @@ def test_lbwf_mapper_maps_house(): install_date=None, comments="Source of Data = ACT", ), - AssetCondition( + Element( uprn=1, - element=Element.HHSRS_ASBESTOS_AND_MMF, + element=ElementType.HHSRS_ASBESTOS_AND_MMF, aspect_type=AspectType.RISK, element_instance=None, value="Category 4 - Typical Risk", @@ -264,9 +264,9 @@ def test_lbwf_mapper_maps_house(): install_date=None, comments="Source of Data = ACT", ), - AssetCondition( + Element( uprn=1, - element=Element.BATHROOM, + element=ElementType.BATHROOM, aspect_type=AspectType.LOCATION, element_instance=None, value="Bathroom on Entrance Level in Property", @@ -275,9 +275,9 @@ def test_lbwf_mapper_maps_house(): install_date=None, comments="Source of Data = Codeman", ), - AssetCondition( + Element( uprn=1, - element=Element.CENTRAL_HEATING, + element=ElementType.CENTRAL_HEATING, aspect_type=AspectType.EXTENT, element_instance=None, value="No Central Heating in Property", @@ -286,9 +286,9 @@ def test_lbwf_mapper_maps_house(): install_date=None, comments="Source of Data = Codeman", ), - AssetCondition( + Element( uprn=1, - element=Element.HHSRS_FIRE, + element=ElementType.HHSRS_FIRE, aspect_type=AspectType.RISK, element_instance=None, value="Category 4 - Typical Risk", @@ -297,9 +297,9 @@ def test_lbwf_mapper_maps_house(): install_date=None, comments="Source of Data = Morgan Sindall", ), - AssetCondition( + Element( uprn=1, - element=Element.EXTERNAL_WALL, + element=ElementType.EXTERNAL_WALL, aspect_type=AspectType.FINISH, element_instance=1, value="Render or Pebbledash in External Area", @@ -308,9 +308,9 @@ def test_lbwf_mapper_maps_house(): install_date=date(2009, 4, 1), comments="Source of Data = Codeman", ), - AssetCondition( + Element( uprn=1, - element=Element.EXTERNAL_WALL, + element=ElementType.EXTERNAL_WALL, aspect_type=AspectType.FINISH, element_instance=2, value="Smooth Render Wall Finish 2 in External Area", @@ -322,7 +322,7 @@ def test_lbwf_mapper_maps_house(): ] # act - actual_assets: List[AssetCondition] = mapper.map_asset_conditions_for_property( + actual_assets: List[Element] = mapper.map_asset_conditions_for_property( lbwf_house, survey_year ) diff --git a/backend/condition/tests/mapping/test_peabody_mapper.py b/backend/condition/tests/mapping/test_peabody_mapper.py index 9997dfa8..75e03016 100644 --- a/backend/condition/tests/mapping/test_peabody_mapper.py +++ b/backend/condition/tests/mapping/test_peabody_mapper.py @@ -2,13 +2,13 @@ from datetime import datetime from typing import List from backend.condition.domain.aspect_type import AspectType -from backend.condition.domain.element import Element +from backend.condition.domain.element_type import ElementType from backend.condition.domain.mapping.peabody.peabody_mapper import PeabodyMapper from backend.condition.parsing.records.peabody.peabody_asset_condition import ( PeabodyAssetCondition, ) from backend.condition.parsing.records.peabody.peabody_property import PeabodyProperty -from backend.condition.domain.asset_condition import AssetCondition +from backend.condition.domain.element import Element def test_peabody_mapper_maps_property(): @@ -56,10 +56,10 @@ def test_peabody_mapper_maps_property(): ) mapper = PeabodyMapper() - expected_assets: List[AssetCondition] = [ - AssetCondition( + expected_assets: List[Element] = [ + Element( uprn=1, - element=Element.EXTERNAL_WINDOWS, + element=ElementType.EXTERNAL_WINDOWS, aspect_type=AspectType.MATERIAL, value="UPVC Double Glazed", quantity=8, @@ -69,9 +69,9 @@ def test_peabody_mapper_maps_property(): source_system=None, comments=None, ), - AssetCondition( + Element( uprn=1, - element=Element.EXTERNAL_DECORATION, + element=ElementType.EXTERNAL_DECORATION, aspect_type=AspectType.CONDITION, value="Normal", quantity=1, @@ -155,10 +155,10 @@ def test_wall_primary_and_secondary_wall_finish_map_correctly(): ) mapper = PeabodyMapper() - expected_assets: List[AssetCondition] = [ - AssetCondition( + expected_assets: List[Element] = [ + Element( uprn=1, - element=Element.EXTERNAL_WALLS, + element=ElementType.EXTERNAL_WALLS, aspect_type=AspectType.FINISH, value="Pointed", element_instance=1, @@ -169,9 +169,9 @@ def test_wall_primary_and_secondary_wall_finish_map_correctly(): source_system=None, comments=None, ), - AssetCondition( + Element( uprn=1, - element=Element.EXTERNAL_WALLS, + element=ElementType.EXTERNAL_WALLS, aspect_type=AspectType.FINISH, value="Pointing", element_instance=1, @@ -182,9 +182,9 @@ def test_wall_primary_and_secondary_wall_finish_map_correctly(): source_system=None, comments=None, ), - AssetCondition( + Element( uprn=1, - element=Element.EXTERNAL_WALLS, + element=ElementType.EXTERNAL_WALLS, aspect_type=AspectType.FINISH, value="Tile Hung", element_instance=1,