From 7a039d30bc7959de7d54694737a9fc12b6062fde Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Fri, 3 Jul 2026 11:41:33 +0000 Subject: [PATCH] =?UTF-8?q?Cavity=20fill=20is=20withheld=20when=20it=20can?= =?UTF-8?q?not=20lower=20the=20derived=20wall=20U=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 --- domain/modelling/generators/wall_recommendation.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/domain/modelling/generators/wall_recommendation.py b/domain/modelling/generators/wall_recommendation.py index 2c5622413..b3182ba28 100644 --- a/domain/modelling/generators/wall_recommendation.py +++ b/domain/modelling/generators/wall_recommendation.py @@ -12,6 +12,7 @@ from datatypes.epc.domain.epc_property_data import ( EpcPropertyData, ) from domain.building_geometry import gross_heat_loss_wall_area +from domain.modelling.generators.wall_u_value_gate import wall_insulation_lowers_u from domain.modelling.measure_type import MeasureType from domain.modelling.recommendation import Cost, MeasureOption, Recommendation from domain.modelling.simulation import BuildingPartOverlay, EpcSimulation @@ -46,6 +47,14 @@ def recommend_cavity_wall( ): return None + # Wall U-Value Gate (ADR-0051): withhold the fill when it cannot lower the + # wall's derived U — e.g. an at-regs modern age band, where the as-built and + # filled-cavity cascades resolve to the same (or a no-better) value. + if not wall_insulation_lowers_u( + main, epc.country_code, insulation_type=_FILLED_CAVITY + ): + return None + product = products.get(_CAVITY_MEASURE_TYPE) wall_area: float = gross_heat_loss_wall_area(epc, BuildingPartIdentifier.MAIN) cost = Cost(