From 9cccf830008980af848388ca3d335372aa2005f3 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Thu, 23 Jul 2026 13:25:37 +0000 Subject: [PATCH] =?UTF-8?q?Defer=20an=20as-built=20sloping-ceiling=20overr?= =?UTF-8?q?ide=20to=20the=20age-band=20default=20=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- domain/epc/property_overlays/roof_type_overlay.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/domain/epc/property_overlays/roof_type_overlay.py b/domain/epc/property_overlays/roof_type_overlay.py index a2ba1811b..bf47c67cd 100644 --- a/domain/epc/property_overlays/roof_type_overlay.py +++ b/domain/epc/property_overlays/roof_type_overlay.py @@ -50,6 +50,12 @@ def _overlay_for(roof_type_value: str) -> Optional[BuildingPartOverlay]: match = _LOFT_MM.search(roof_type_value) if match is not None: return BuildingPartOverlay(roof_insulation_thickness=int(match.group(1))) + if roof_type_value.startswith("Pitched, sloping ceiling"): + # ADR-0066: a slope-following ceiling (gov-API roof_construction 8) has no + # loft void. Assert the sloping-ceiling shape so the calculator's + # `is_pitched_sloping_ceiling` drives the Table 18 col (3) age-band default + # ("as built"), never the loft ladder. Leave thickness None here. + return BuildingPartOverlay(roof_construction_type="Pitched, sloping ceiling") if roof_type_value.startswith("Flat,"): flat_depth = _FLAT_MM.search(roof_type_value) if flat_depth is not None: