From 793ae8098f69062291490c4bbc33ee5202188743 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 26 Jan 2026 10:25:03 +0000 Subject: [PATCH] More peabody -> domain mapping --- backend/condition/domain/element.py | 8 +- .../domain/mapping/lbwf/lbwf_element_map.py | 4 +- .../mapping/peabody/peabody_element_map.py | 101 +++++++++++++----- 3 files changed, 84 insertions(+), 29 deletions(-) diff --git a/backend/condition/domain/element.py b/backend/condition/domain/element.py index fed5ab3b..5fbd35dc 100644 --- a/backend/condition/domain/element.py +++ b/backend/condition/domain/element.py @@ -15,6 +15,7 @@ class Element(str, Enum): ACCESSIBLE_HOUSING_REGISTER = "accessible_housing_register" ASBESTOS = "asbestos" QUALITY_STANDARD = "quality_standard" + CCU = "ccu" # ====================== # EXTERNAL – ROOF @@ -94,18 +95,22 @@ class Element(str, Enum): 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" # ====================== # INTERNAL – HEATING / WATER # ====================== + CENTRAL_HEATING = "central_heating" HEATING_BOILER = "heating_boiler" HEATING_DISTRIBUTION = "heating_distribution" - HEATING_EXTENT = "heating_extent" SECONDARY_HEATING = "secondary_heating" HOT_WATER_SYSTEM = "hot_water_system" COLD_WATER_STORAGE = "cold_water_storage" @@ -113,6 +118,7 @@ class Element(str, Enum): HEATING_SYSTEM = "heating_system" BOILER_FUEL = "boiler_fuel" WATER_HEATING = "water_heating" + PROGRAMMABLE_HEATING = "programmable_heating" # ====================== # INTERNAL – ELECTRICS / FIRE diff --git a/backend/condition/domain/mapping/lbwf/lbwf_element_map.py b/backend/condition/domain/mapping/lbwf/lbwf_element_map.py index 047013f4..be8a50b2 100644 --- a/backend/condition/domain/mapping/lbwf/lbwf_element_map.py +++ b/backend/condition/domain/mapping/lbwf/lbwf_element_map.py @@ -61,8 +61,8 @@ LBWF_ELEMENT_MAP: dict[str, ElementMapping] = { # INTERNAL – HEATING # ========================================================== "INTCHEXTNT": ElementMapping( - element=Element.HEATING_EXTENT, - aspect_type=AspectType.CONFIGURATION, + element=Element.CENTRAL_HEATING, + aspect_type=AspectType.EXTENT, ), "INTCHDIST": ElementMapping( element=Element.HEATING_DISTRIBUTION, diff --git a/backend/condition/domain/mapping/peabody/peabody_element_map.py b/backend/condition/domain/mapping/peabody/peabody_element_map.py index 81aa8b9e..8c29c60b 100644 --- a/backend/condition/domain/mapping/peabody/peabody_element_map.py +++ b/backend/condition/domain/mapping/peabody/peabody_element_map.py @@ -10,6 +10,16 @@ PEABODY_ELEMENT_MAP = { (100, 1): ElementMapping(element=Element.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 + ), + (50, 3): ElementMapping(element=Element.CCU, aspect_type=AspectType.TYPE), + (50, 11): ElementMapping( + element=Element.HEAT_DETECTION, aspect_type=AspectType.TYPE + ), + (50, 21): ElementMapping( + element=Element.SMOKE_DETECTION, aspect_type=AspectType.TYPE + ), # ========================================================== # EXTERNAL – WALLS # ========================================================== @@ -47,6 +57,9 @@ PEABODY_ELEMENT_MAP = { (120, 2): ElementMapping( element=Element.EXTERNAL_WALL, aspect_type=AspectType.FINISH ), + (120, 3): ElementMapping( + element=Element.PRIMARY_WALL, aspect_type=AspectType.INSULATION + ), # This code element code is actually "WALL" not "external wall" - correct? # ========================================================== # EXTERNAL – ROOFS # ========================================================== @@ -194,10 +207,36 @@ PEABODY_ELEMENT_MAP = { # ========================================================== # INTERNAL – BATHROOMS & KITCHENS # ========================================================== + (50, 1): ElementMapping( + element=Element.SECONDARY_TOILET, aspect_type=AspectType.PRESENCE + ), + (50, 9): ElementMapping( + element=Element.BATHROOM_EXTRACTOR_FAN, aspect_type=AspectType.PRESENCE + ), + (50, 9): ElementMapping(element=Element.KITCHEN, aspect_type=AspectType.TYPE), + (50, 10): ElementMapping( + element=Element.KITCHEN_EXTRACTOR_FAN, aspect_type=AspectType.PRESENCE + ), + (50, 13): ElementMapping( + element=Element.KITCHEN_SPACE_LAYOUT, aspect_type=AspectType.ADEQUACY + ), + (50, 17): ElementMapping(element=Element.BATHRROM, aspect_type=AspectType.LOCATION), + (50, 18): ElementMapping( + element=Element.BATHROOM, aspect_type=AspectType.TYPE + ), # Actually "Primary bathroom type" - ok like this? + (50, 20): ElementMapping( + element=Element.BATHROOM, aspect_type=AspectType.TYPE, element_instance=2 + ), # Actually "Secondary bathroom type" - ok like this? (160, 1): ElementMapping(element=Element.KITCHEN, aspect_type=AspectType.CONDITION), + (160, 2): ElementMapping( + element=Element.KITCHEN_SPACE_LAYOUT, aspect_type=AspectType.ADEQUACY + ), (190, 1): ElementMapping( element=Element.BATHROOM, aspect_type=AspectType.CONDITION ), + (190, 2): ElementMapping( + element=Element.SECONDARY_TOILET, aspect_type=AspectType.TYPE + ), # ========================================================== # COMMUNAL SYSTEMS # ========================================================== @@ -220,6 +259,42 @@ PEABODY_ELEMENT_MAP = { element=Element.COMMUNAL_FLOOR_COVERING, aspect_type=AspectType.MATERIAL ), # ========================================================== + # INTERNAL – HEATING + # ========================================================== + (50, 4): ElementMapping( + element=Element.HEATING_BOILER, aspect_type=AspectType.PRESENCE + ), # This is actually "Central heating boiler" - ok like this? + (50, 5): ElementMapping( + element=Element.CENTRAL_HEATING, aspect_type=AspectType.EXTENT + ), + (50, 6): ElementMapping( + element=Element.COLD_WATER_STORAGE, aspect_type=AspectType.PRESENCE + ), + (50, 12): ElementMapping( + element=Element.HEATING_DISTRIBUTION, aspect_type=AspectType.TYPE + ), + (50, 19): ElementMapping( + element=Element.PROGRAMMABLE_HEATING, aspect_type=AspectType.TYPE + ), + (50, 25): ElementMapping( + element=Element.HEATING_BOILER, aspect_type=AspectType.TYPE + ), + (170, 1): ElementMapping( + element=Element.HEATING_BOILER, aspect_type=AspectType.TYPE + ), # Duplicate of (50,25) - correct? + (170, 2): ElementMapping( + element=Element.HEATING_DISTRIBUTION, aspect_type=AspectType.TYPE + ), # Duplicate of (50,12) - correct? + (170, 3): ElementMapping( + element=Element.SECONDARY_HEATING, aspect_type=AspectType.TYPE + ), + (170, 4): ElementMapping( + element=Element.COLD_WATER_STORAGE, aspect_type=AspectType.TYPE + ), + (170, 5): ElementMapping( + element=Element.HOT_WATER_SYSTEM, aspect_type=AspectType.TYPE + ), + # ========================================================== # HHSRS # ========================================================== (54, 1): ElementMapping( @@ -238,36 +313,16 @@ PEABODY_ELEMENT_MAP = { # unhandled -# 'Element: HEATING - Code: 170, Sub-Element: Boiler - Code: 1', -# 'Element: HEATING - Code: 170, Sub-Element: Heating Distribution - Code: 2', # 'Element: ELECTRICS - Code: 180, Sub-Element: Wiring - Code: 1', # 'Element: ELECTRICS - Code: 180, Sub-Element: Consumer Unit - Code: 2', # 'Element: ELECTRICS - Code: 180, Sub-Element: Smoke Detectors - Code: 3', -# 'Element: KITCHEN - Code: 160, Sub-Element: Kitchen space and layout - Code: 2', -# 'Element: HEATING - Code: 170, Sub-Element: Secondary Heating - Code: 3', -# 'Element: BATHROOM - Code: 190, Sub-Element: Secondary Toilet - Code: 2', # 'Element: ELECTRICS - Code: 180, Sub-Element: Carbon Monoxide Alarms - Code: 4', -# 'Element: HEATING - Code: 170, Sub-Element: Hot Water - Code: 5', -# 'Element: HEATING - Code: 170, Sub-Element: Cold Water - Code: 4', -# 'Element: WALLS - Code: 120, Sub-Element: Wall Insulation - Code: 3', -# 'Element: Internal - Code: 50, Sub-Element: Additional WC - Code: 1', -# 'Element: Internal - Code: 50, Sub-Element: Carbon Monoxide Detector Type - Code: 2', -# 'Element: Internal - Code: 50, Sub-Element: CCU - Code: 3', -# 'Element: Internal - Code: 50, Sub-Element: Central Heating Boiler - Code: 4', -# 'Element: Internal - Code: 50, Sub-Element: Extractor Fan Bathroom - Code: 9', -# 'Element: Internal - Code: 50, Sub-Element: Extractor Fan Kitchen - Code: 10', -# 'Element: Internal - Code: 50, Sub-Element: Heat Detector Type - Code: 11', -# 'Element: Internal - Code: 50, Sub-Element: Kitchen Type - Code: 14', -# 'Element: Internal - Code: 50, Sub-Element: Primary Bathroom Type - Code: 18', -# 'Element: Internal - Code: 50, Sub-Element: Smoke Detector Type - Code: 21', # 'Element: COMMUNAL - Code: 200, Sub-Element: Communal Lifts - Code: 5', # 'Element: COMMUNAL - Code: 200, Sub-Element: Communal Kitchen - Code: 7', # 'Element: COMMUNAL - Code: 200, Sub-Element: Communal Bathroom - Code: 8', # 'Element: COMMUNAL - Code: 200, Sub-Element: Communal Toilets - Code: 9', # 'Element: Internal - Code: 50, Sub-Element: Wiring - Code: 24', # 'Element: PASSENGER LIFTS - Code: 210, Sub-Element: Lift - Code: 2', -# 'Element: Internal - Code: 50, Sub-Element: Heating Distribution Type - Code: 12', -# 'Element: Internal - Code: 50, Sub-Element: Secondary Bathroom Type - Code: 20', # 'Element: COMMUNAL - Code: 200, Sub-Element: Communal Gates - Code: 10', # 'Element: GENERAL - Code: 100, Sub-Element: Property Age Band - Code: 3', # 'Element: GENERAL - Code: 100, Sub-Element: Construction Type - Code: 14', @@ -311,15 +366,9 @@ PEABODY_ELEMENT_MAP = { # 'Element: Communal - Code: 51, Sub-Element: Common Wet Riser - Code: 39', # 'Element: Communal - Code: 51, Sub-Element: Common Refuse Chute - Code: 29', # 'Element: Internal - Code: 50, Sub-Element: Party Wall Fire Break - Code: 16', -# 'Element: Internal - Code: 50, Sub-Element: Boiler Type - Code: 25', # 'Element: Communal - Code: 51, Sub-Element: Common Cirulation Space - Code: 12', # 'Element: Internal - Code: 50, Sub-Element: Door Entry Handset - Code: 8', -# 'Element: Internal - Code: 50, Sub-Element: Cold Water Storage Tank - Code: 6', -# 'Element: Internal - Code: 50, Sub-Element: Programmable Heating - Code: 19', -# 'Element: Internal - Code: 50, Sub-Element: Central Heating Extent - Code: 5', -# 'Element: Internal - Code: 50, Sub-Element: Kitchen Space & Layout - Code: 13', # 'Element: Internal - Code: 50, Sub-Element: Loft Insulation - Code: 15', # 'Element: Internal - Code: 50, Sub-Element: Stairlift - Code: 22', -# 'Element: Internal - Code: 50, Sub-Element: Primary Bathroom Location - Code: 17', # 'Element: Internal - Code: 50, Sub-Element: Disabled Hoist Tracking - Code: 7', # 'Element: Internal - Code: 50, Sub-Element: Disabled Facilities - Code: 26'