Add aspect instance to asset condition and modify how peabody walls are mapped 🟥

This commit is contained in:
Daniel Roth 2026-01-27 13:08:35 +00:00
parent 5ab07d6903
commit 9509306e3d
4 changed files with 118 additions and 3 deletions

View file

@ -13,6 +13,8 @@ class AssetCondition:
element: Element
aspect_type: AspectType
element_instance: Optional[int] = None
aspect_instance: Optional[int] = None
value: Optional[str] = None
@ -20,7 +22,5 @@ class AssetCondition:
install_date: Optional[date] = None
renewal_year: Optional[int] = None
element_instance: Optional[int] = None
source_system: Optional[str] = None
comments: Optional[str] = None

View file

@ -10,3 +10,4 @@ class ElementMapping:
element: Element
aspect_type: AspectType
element_instance: Optional[int] = None
aspect_instance: Optional[int] = None

View file

@ -58,7 +58,7 @@ PEABODY_ELEMENT_MAP = {
element=Element.GARAGE_WALLS, aspect_type=AspectType.MATERIAL
),
(53, 23): ElementMapping(
element=Element.PRIMARY_WALL, aspect_type=AspectType.FINISH
element=Element.EXTERNAL_WALL, aspect_type=AspectType.FINISH
),
(53, 30): ElementMapping(
element=Element.SECONDARY_WALL, aspect_type=AspectType.FINISH

View file

@ -90,3 +90,117 @@ def test_peabody_mapper_maps_property():
for i, (actual, expected) in enumerate(zip(actual_assets, expected_assets)):
assert actual == expected, f"Mismatch at index {i}"
def test_wall_primary_and_secondary_wall_finish_map_correctly():
# arrange
peabody_property = PeabodyProperty(
uprn=1,
assets=[
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=53,
element="External",
sub_element_code=23,
sub_element="Primary Wall Finish",
material_code=4,
material_or_answer="Pointed",
renewal_quantity=65,
renewal_year=2045,
renewal_cost=3835,
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=120,
element="WALLS",
sub_element_code=2,
sub_element="Wall Finish",
material_code=1,
material_or_answer="Pointing",
renewal_quantity=1,
renewal_year=2069,
renewal_cost=2450,
cloned="N",
lo_type_code=1,
condition_survey_date=datetime(2014, 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=53,
element="External",
sub_element_code=30,
sub_element="Secondary Wall Finish",
material_code=8,
material_or_answer="Tile Hung",
renewal_quantity=8,
renewal_year=2049,
renewal_cost=472,
cloned="N",
lo_type_code=1,
condition_survey_date=datetime(2014, 2, 15, 12, 47, 0),
),
],
)
mapper = PeabodyMapper()
expected_assets: List[AssetCondition] = [
AssetCondition(
uprn=1,
element=Element.EXTERNAL_WALLS,
aspect_type=AspectType.FINISH,
value="Pointed",
element_instance=1,
aspect_instance=1,
quantity=65,
install_date=None,
renewal_year=2045,
source_system=None,
comments=None,
),
AssetCondition(
uprn=1,
element=Element.EXTERNAL_WALLS,
aspect_type=AspectType.FINISH,
value="Pointing",
element_instance=1,
aspect_instance=1,
quantity=1,
install_date=None,
renewal_year=2069,
source_system=None,
comments=None,
),
AssetCondition(
uprn=1,
element=Element.EXTERNAL_WALLS,
aspect_type=AspectType.FINISH,
value="Tile Hung",
element_instance=1,
aspect_instance=2,
quantity=8,
install_date=None,
renewal_year=2049,
source_system=None,
comments=None,
),
]
# act
actual_assets = mapper.map_asset_conditions_for_property(peabody_property)
# assert
assert len(actual_assets) == len(expected_assets)
for i, (actual, expected) in enumerate(zip(actual_assets, expected_assets)):
assert actual == expected, f"Mismatch at index {i}"