diff --git a/backend/app/modelling/property_filters.py b/backend/app/modelling/property_filters.py index 8a1428867..b4ea91ddf 100644 --- a/backend/app/modelling/property_filters.py +++ b/backend/app/modelling/property_filters.py @@ -60,9 +60,7 @@ def resolve_filtered_property_ids( if filters.property_types is not None: wanted = set(filters.property_types) - types = _resolved_property_types( - session, [row.id for row in candidates if row.id is not None] - ) + types = _resolved_property_types(session, candidates) candidates = [ row for row in candidates @@ -88,10 +86,16 @@ _PROPERTY_TYPE_CODES: dict[str, str] = { def _resolved_property_types( - session: Session, property_ids: list[int] + session: Session, candidates: list[PropertyRow] ) -> dict[int, str]: """Each property's effective property_type per the ADR-0056 precedence: - override (building_part 0) → lodged EPC.""" + override (building_part 0) → lodged EPC → predicted EPC → legacy column.""" + property_ids = [row.id for row in candidates if row.id is not None] + by_legacy_column = { + row.id: row.property_type + for row in candidates + if row.id is not None and row.property_type is not None + } overrides = session.exec( select(PropertyOverrideRow) .where(col(PropertyOverrideRow.property_id).in_(property_ids)) @@ -119,6 +123,7 @@ def _resolved_property_types( by_override.get(pid) or by_epc_source["lodged"].get(pid) or by_epc_source["predicted"].get(pid) + or by_legacy_column.get(pid) ) if value is not None: resolved[pid] = value