diff --git a/backend/condition/domain/aspect_type.py b/backend/condition/domain/aspect_type.py index 0f9a406a..d4db10bc 100644 --- a/backend/condition/domain/aspect_type.py +++ b/backend/condition/domain/aspect_type.py @@ -27,3 +27,4 @@ class AspectType(str, Enum): STRUCTURE = "structure" COVERING = "covering" FIRE_RATING = "fire_rating" + EXTERNAL_DECORATION = "external_decoration" diff --git a/backend/condition/domain/mapping/peabody/peabody_element_map.py b/backend/condition/domain/mapping/peabody/peabody_element_map.py index 5b89c578..80b3aa70 100644 --- a/backend/condition/domain/mapping/peabody/peabody_element_map.py +++ b/backend/condition/domain/mapping/peabody/peabody_element_map.py @@ -8,6 +8,9 @@ PEABODY_ELEMENT_MAP = { # PROPERTY / GENERAL # ========================================================== (100, 1): ElementMapping(element=Element.PROPERTY, aspect_type=AspectType.TYPE), + (100, 15): ElementMapping( + element=Element.PROPERTY, aspect_type=AspectType.EXTERNAL_DECORATION + ), # (100, 3): ElementMapping(element=Element.PROPERTY, aspect_type=AspectType.AGE), # (100, 14): ElementMapping(element="property", aspect_type="construction_type"), # ========================================================== @@ -52,3 +55,155 @@ PEABODY_ELEMENT_MAP = { element=Element.HHSRS_STRUCTURAL_COLLAPSE, aspect_type=AspectType.RISK ), } + + +# unhandled +# 'Element: ROOFS - Code: 110, Sub-Element: Chimney - Code: 3', +# 'Element: ROOFS - Code: 110, Sub-Element: Fascia - Code: 4', +# 'Element: ROOFS - Code: 110, Sub-Element: Rainwater Goods - Code: 6', +# 'Element: WINDOWS - Code: 130, Sub-Element: Communal Windows - Code: 2', +# 'Element: DOORS - Code: 140, Sub-Element: Main Doors - Code: 1', +# 'Element: DOORS - Code: 140, Sub-Element: Block Entrance Doors - Code: 4', +# 'Element: EXTERNAL AREAS - Code: 150, Sub-Element: Paving - Code: 1', +# 'Element: EXTERNAL AREAS - Code: 150, Sub-Element: Boundaries - Code: 4', +# 'Element: COMMUNAL - Code: 200, Sub-Element: Communal Boiler - Code: 1', +# 'Element: COMMUNAL - Code: 200, Sub-Element: Communal Heating - Code: 2', +# 'Element: COMMUNAL - Code: 200, Sub-Element: Communal Electrics - Code: 3', +# 'Element: COMMUNAL - Code: 200, Sub-Element: Communal Fire Detection - Code: 4', +# 'Element: COMMUNAL - Code: 200, Sub-Element: Communal Floor Covering - Code: 6', +# 'Element: ROOFS - Code: 110, Sub-Element: Soffit - Code: 5', +# 'Element: External - Code: 53, Sub-Element: Window Type 01 - Code: 38', +# 'Element: ROOFS - Code: 110, Sub-Element: Secondary Roof - Code: 2', +# '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: ROOFS - Code: 110, Sub-Element: Porch/Bay/Canopy - Code: 8', +# 'Element: HEATING - Code: 170, Sub-Element: Hot Water - Code: 5', +# 'Element: DOORS - Code: 140, Sub-Element: Garage Doors - Code: 3', +# 'Element: HEATING - Code: 170, Sub-Element: Cold Water - Code: 4', +# 'Element: DOORS - Code: 140, Sub-Element: Store Doors - Code: 2', +# 'Element: EXTERNAL AREAS - Code: 150, Sub-Element: Hardstanding - Code: 2', +# 'Element: WALLS - Code: 120, Sub-Element: Wall Insulation - Code: 3', +# 'Element: EXTERNAL AREAS - Code: 150, Sub-Element: Roads - Code: 3', +# 'Element: ROOFS - Code: 110, Sub-Element: Loft Insulation - Code: 7', +# 'Element: EXTERNAL AREAS - Code: 150, Sub-Element: Outbuilding - Code: 5', +# '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: EXTERNAL AREAS - Code: 150, Sub-Element: Garage - Code: 6', +# '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: External - Code: 53, Sub-Element: Front Door Material - Code: 8', +# 'Element: External - Code: 53, Sub-Element: Primary Wall Finish - Code: 23', +# 'Element: PASSENGER LIFTS - Code: 210, Sub-Element: Lift - Code: 2', +# 'Element: Internal - Code: 50, Sub-Element: Heating Distribution Type - Code: 12', +# 'Element: External - Code: 53, Sub-Element: Downpipes - Code: 3', +# 'Element: External - Code: 53, Sub-Element: Fascia/Soffits/Bargeboards - Code: 6', +# 'Element: External - Code: 53, Sub-Element: Gutters - Code: 15', +# 'Element: External - Code: 53, Sub-Element: Paths & Hardstandings - Code: 18', +# 'Element: External - Code: 53, Sub-Element: Pitched Roof Covering Material - Code: 21', +# 'Element: Internal - Code: 50, Sub-Element: Secondary Bathroom Type - Code: 20', +# 'Element: External - Code: 53, Sub-Element: Chimney - Code: 2', +# 'Element: External - Code: 53, Sub-Element: External Decoration - Code: 4', +# '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', +# 'Element: GENERAL - Code: 100, Sub-Element: Classification - Code: 16', +# 'Element: Communal - Code: 51, Sub-Element: Common Balcony/Walkway - Code: 3', +# 'Element: Communal - Code: 51, Sub-Element: Common Bin Store Doors - Code: 5', +# 'Element: Communal - Code: 51, Sub-Element: Common Bin Store Walls - Code: 7', +# 'Element: Communal - Code: 51, Sub-Element: Common Primary Entrance Material - Code: 28', +# 'Element: External - Code: 53, Sub-Element: Parking Areas - Code: 17', +# 'Element: External - Code: 53, Sub-Element: Front Fencing - Code: 9', +# 'Element: External - Code: 53, Sub-Element: Retaining Walls - Code: 28', +# 'Element: Communal - Code: 51, Sub-Element: Common Internal Decorations - Code: 20', +# 'Element: Communal - Code: 51, Sub-Element: Common Internal Floor Finish - Code: 22', +# 'Element: Communal - Code: 51, Sub-Element: Common Walkways Finish - Code: 36', +# 'Element: External - Code: 53, Sub-Element: Boundary Walls - Code: 1', +# 'Element: External - Code: 53, Sub-Element: Flat Roof Covering Material - Code: 7', +# 'Element: External - Code: 53, Sub-Element: Porch/Canopy - Code: 22', +# 'Element: External - Code: 53, Sub-Element: Private Balcony - Code: 24', +# 'Element: External - Code: 53, Sub-Element: Rear Gate - Code: 27', +# 'Element: Communal - Code: 51, Sub-Element: Common External Doors Other - Code: 17', +# 'Element: Communal - Code: 51, Sub-Element: Common Stair Finish - Code: 32', +# 'Element: External - Code: 53, Sub-Element: Front Gate - Code: 10', +# 'Element: External - Code: 53, Sub-Element: Rear Fencing - Code: 26', +# 'Element: External - Code: 53, Sub-Element: Side Fencing - Code: 31', +# 'Element: Communal - Code: 51, Sub-Element: Common Aerial - Code: 1', +# 'Element: Communal - Code: 51, Sub-Element: Common AOV - Code: 2', +# 'Element: Communal - Code: 51, Sub-Element: Common Door Entry System - Code: 14', +# 'Element: Communal - Code: 51, Sub-Element: Common Fire Alarm - Code: 19', +# 'Element: Communal - Code: 51, Sub-Element: Common Internal Doors - Code: 21', +# 'Element: External - Code: 53, Sub-Element: Store Door Material - Code: 35', +# 'Element: External - Code: 53, Sub-Element: Secondary Wall Finish - Code: 30', +# 'Element: Communal - Code: 51, Sub-Element: Common Emergency Lighting - Code: 16', +# 'Element: Communal - Code: 51, Sub-Element: Common Lateral Mains - Code: 24', +# 'Element: Communal - Code: 51, Sub-Element: Common Lighting - Code: 25', +# 'Element: Communal - Code: 51, Sub-Element: Common Store Roof - Code: 34', +# 'Element: Communal - Code: 51, Sub-Element: Common Store Walls - Code: 35', +# 'Element: External - Code: 53, Sub-Element: Cladding Material - Code: 41', +# 'Element: External - Code: 53, Sub-Element: Spandrel Panels - Code: 40', +# 'Element: Communal - Code: 51, Sub-Element: Common CCTV - Code: 11', +# 'Element: Communal - Code: 51, Sub-Element: Common Kitchen - Code: 23', +# 'Element: Communal - Code: 51, Sub-Element: Common Secondary Entrance Material - Code: 30', +# 'Element: Communal - Code: 51, Sub-Element: Common Warden Call System - Code: 37', +# 'Element: External - Code: 53, Sub-Element: Lintels - Code: 16', +# 'Element: Communal - Code: 51, Sub-Element: Common Boiler - Code: 9', +# 'Element: External - Code: 53, Sub-Element: Soil & Vent Material - Code: 32', +# 'Element: Communal - Code: 51, Sub-Element: Common Passenger Lift - Code: 27', +# 'Element: Communal - Code: 51, Sub-Element: Common Store Doors - Code: 33', +# 'Element: External - Code: 53, Sub-Element: Window Type 02 - Code: 39', +# 'Element: Communal - Code: 51, Sub-Element: Common BMS - Code: 8', +# 'Element: Communal - Code: 51, Sub-Element: Common Booster Pump - Code: 10', +# 'Element: Communal - Code: 51, Sub-Element: Common Dry Riser - Code: 15', +# 'Element: Communal - Code: 51, Sub-Element: Common Lightning Conductor - Code: 26', +# 'Element: Communal - Code: 51, Sub-Element: Common Bin Store Roof - Code: 6', +# 'Element: Communal - Code: 51, Sub-Element: Common Bathroom - Code: 4', +# 'Element: Communal - Code: 51, Sub-Element: Common WC - Code: 38', +# 'Element: External - Code: 53, Sub-Element: Wall Insulation - Code: 36', +# 'Element: External - Code: 53, Sub-Element: Garage Door - Code: 12', +# 'Element: Communal - Code: 51, Sub-Element: Common Cold Water Storage Tank - Code: 13', +# 'Element: Communal - Code: 51, Sub-Element: Common Sprinker - Code: 31', +# 'Element: External - Code: 53, Sub-Element: Garage Walls - Code: 14', +# 'Element: Communal - Code: 51, Sub-Element: Communal Plug Sockets - Code: 40', +# 'Element: Communal - Code: 51, Sub-Element: Common Wet Riser - Code: 39', +# 'Element: Communal - Code: 51, Sub-Element: Common Refuse Chute - Code: 29', +# 'Element: External - Code: 53, Sub-Element: Secondary Glazing - Code: 29', +# 'Element: External - Code: 53, Sub-Element: Solar Thermals - Code: 34', +# 'Element: External - Code: 53, Sub-Element: Garage Roof - Code: 13', +# 'Element: External - Code: 53, Sub-Element: Patio/French Door - Code: 19', +# 'Element: External - Code: 53, Sub-Element: Rear Door Material - Code: 25', +# 'Element: Internal - Code: 50, Sub-Element: Party Wall Fire Break - Code: 16', +# 'Element: Internal - Code: 50, Sub-Element: Boiler Type - Code: 25', +# 'Element: External - Code: 53, Sub-Element: Roof Structure - Code: 47', +# 'Element: External - Code: 53, Sub-Element: Front Door Type - Code: 43', +# 'Element: Communal - Code: 51, Sub-Element: Common Cirulation Space - Code: 12', +# 'Element: External - Code: 53, Sub-Element: External Noise Insulation - Code: 5', +# '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: External - Code: 53, Sub-Element: Garage Type - Code: 44', +# 'Element: External - Code: 53, Sub-Element: Private Balcony Balustrade Material - Code: 45', +# 'Element: Internal - Code: 50, Sub-Element: Disabled Facilities - Code: 26' diff --git a/backend/condition/domain/mapping/peabody/peabody_mapper.py b/backend/condition/domain/mapping/peabody/peabody_mapper.py index 44dbd56e..dea07756 100644 --- a/backend/condition/domain/mapping/peabody/peabody_mapper.py +++ b/backend/condition/domain/mapping/peabody/peabody_mapper.py @@ -6,9 +6,6 @@ from backend.condition.domain.mapping.peabody.peabody_element_map import ( PEABODY_ELEMENT_MAP, ) from backend.condition.domain.mapping.mapper import Mapper -from backend.condition.parsing.records.peabody.peabody_asset_condition import ( - PeabodyAssetCondition, -) from backend.condition.parsing.records.peabody.peabody_property import PeabodyProperty from utils.logger import setup_logger diff --git a/backend/condition/tests/mapping/test_peabody_mapper.py b/backend/condition/tests/mapping/test_peabody_mapper.py index ca3f78a4..7fad77f7 100644 --- a/backend/condition/tests/mapping/test_peabody_mapper.py +++ b/backend/condition/tests/mapping/test_peabody_mapper.py @@ -33,7 +33,25 @@ def test_peabody_mapper_maps_property(): cloned="N", lo_type_code=1, condition_survey_date=datetime(2024, 2, 15, 12, 47, 0), - ) + ), + PeabodyAssetCondition( + lo_reference="1000RAND0000", + full_address="FLAT 1 RANDOM SQUARE FAKE STREET LONDON E1 1EE", + location_type_code=1, + parent_lo_reference="RAND1000", + element_code=100, + element="GENERAL", + sub_element_code=15, + sub_element="External Decoration", + material_code=2, + material_or_answer="Normal", + renewal_quantity=1, + renewal_year=2029, + renewal_cost=1500, + cloned="N", + lo_type_code=1, + condition_survey_date=datetime(2024, 2, 15, 12, 47, 0), + ), ], ) mapper = PeabodyMapper() @@ -50,7 +68,19 @@ def test_peabody_mapper_maps_property(): element_instance=None, source_system=None, comments=None, - ) + ), + AssetCondition( + uprn=1, + element=Element.PROPERTY, + aspect_type=AspectType.EXTERNAL_DECORATION, + value="Normal", + quantity=1, + install_date=None, + renewal_year=2029, + element_instance=None, + source_system=None, + comments=None, + ), ] # act actual_assets = mapper.map_asset_conditions_for_property(peabody_property)