Extra test case, and note unhandled elements

This commit is contained in:
Daniel Roth 2026-01-23 14:52:52 +00:00
parent 4c16632b2f
commit 42cfcf604c
4 changed files with 188 additions and 5 deletions

View file

@ -27,3 +27,4 @@ class AspectType(str, Enum):
STRUCTURE = "structure"
COVERING = "covering"
FIRE_RATING = "fire_rating"
EXTERNAL_DECORATION = "external_decoration"

View file

@ -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'

View file

@ -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

View file

@ -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)