From 31c74ab5009fa466b33ded186f3ba2a0988390f3 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 9 Jun 2026 16:16:46 +0000 Subject: [PATCH 1/6] feat(modelling): gas-boiler-upgrade-with-cylinder option in the heating rec Add the first boiler-upgrade option to the single "Heating & Hot Water" Recommendation (ADR-0024 expansion): a dwelling whose existing wet boiler heats a hot-water cylinder is offered a new gas condensing boiler, with the cylinder jacketed when under-insulated and given a thermostat when absent. One competing Option (the Optimiser picks <=1), folded into one composite Plan line. The end-state is read from the Elmhurst before/after re-lodgements (cert 001431, gas boiler upgrade - with cylinder), which REVISE ADR-0024: - Target is always a gas condensing boiler, not fuel-preserving: every after lodges fuel 26. Gas->gas always; a non-gas wet boiler ->gas only with a mains-gas connection; electric boilers are left alone (electrification is the upgrade path). Eligibility = wet-boiler SAP code (Table 4a/4b 101-141 / 151-161 / 191-196) + not an electric boiler + mains gas present. - End-state is a Table 4b SAP code, not a PCDB index: code 102 (regular boiler + cylinder). The calculator derives the condensing seasonal efficiency from the code, so no efficiency input exists or is needed. - A modern condensing boiler has a fanned flue: the after flips `fan_flue_present` False->True on every cert (SAP 10.2 Table 4f flue-fan + the Table 4b condensing-efficiency basis). Added as a new HeatingOverlay field, routed to main_heating_details[0]. - Cylinder thermostat is always added when absent (user-locked); the jacket is the 80 mm `cylinder_insulation_type=2` end-state, applied only when the cylinder is below 80 mm (never downgrading a better one). Both are conditional per-dwelling components, not a frozen overlay. Cascade-pinned delta-0 (SAP/CO2/PE) against the relodged after via `_assert_overlay_reproduces_after`. NB the absolute SAP on this dwelling is subject to a separate Summary-path mapper roof-fidelity gap (we read the roof better-insulated than Elmhurst, scoring ~75 vs the printed 56); the gap is identical on before+after (the boiler measure never touches the roof) so it cancels and the pin still proves the exact heating field-delta. Tracked on the calculator branch. Wires the new `gas_boiler_upgrade` MeasureType through contingencies (0.26), the offline sample catalogue, the catalogue-coverage list, and the ARA first-run integration seed (the option fires on any mains-gas boiler+cylinder dwelling). Co-Authored-By: Claude Opus 4.8 --- domain/modelling/contingencies.py | 1 + .../generators/heating_recommendation.py | 123 +++++++++++++++++ domain/modelling/measure_type.py | 1 + .../modelling/scoring/overlay_applicator.py | 1 + domain/modelling/simulation.py | 4 + harness/sample_catalogue.json | 1 + .../fixtures/boiler_cyl_gas_001431_after.pdf | Bin 0 -> 77066 bytes .../fixtures/boiler_cyl_gas_001431_before.pdf | Bin 0 -> 78820 bytes .../modelling/test_elmhurst_cascade_pins.py | 30 +++++ .../modelling/test_heating_recommendation.py | 126 ++++++++++++++++++ tests/domain/modelling/test_measure_type.py | 1 + tests/harness/test_console.py | 1 + ...test_ara_first_run_pipeline_integration.py | 8 ++ 13 files changed, 297 insertions(+) create mode 100644 tests/domain/modelling/fixtures/boiler_cyl_gas_001431_after.pdf create mode 100644 tests/domain/modelling/fixtures/boiler_cyl_gas_001431_before.pdf diff --git a/domain/modelling/contingencies.py b/domain/modelling/contingencies.py index b4308ed6..ea2f3c4c 100644 --- a/domain/modelling/contingencies.py +++ b/domain/modelling/contingencies.py @@ -20,6 +20,7 @@ _CONTINGENCY_RATES: dict[str, float] = { "low_energy_lighting": 0.26, "high_heat_retention_storage_heaters": 0.10, "air_source_heat_pump": 0.25, + "gas_boiler_upgrade": 0.26, "solar_pv": 0.15, } diff --git a/domain/modelling/generators/heating_recommendation.py b/domain/modelling/generators/heating_recommendation.py index 1c851541..88fea108 100644 --- a/domain/modelling/generators/heating_recommendation.py +++ b/domain/modelling/generators/heating_recommendation.py @@ -27,6 +27,7 @@ _HEATING_SURFACE = "Heating & Hot Water" _HHR_STORAGE_MEASURE_TYPE = MeasureType.HIGH_HEAT_RETENTION_STORAGE_HEATERS _ASHP_MEASURE_TYPE = MeasureType.AIR_SOURCE_HEAT_PUMP +_GAS_BOILER_UPGRADE_MEASURE_TYPE = MeasureType.GAS_BOILER_UPGRADE # Electricity main-fuel code (Elmhurst → SAP10 Table 12). _ELECTRICITY_FUEL = 30 @@ -111,6 +112,45 @@ _ASHP_OVERLAY = HeatingOverlay( ) +# --- Gas boiler upgrade (Heating/HW expansion): replace an existing wet boiler +# with a modern gas condensing boiler. Validated against Elmhurst before/after +# re-lodgements (cert 001431): the upgrade always targets mains gas — gas->gas +# directly, and a non-gas wet boiler (oil/LPG/solid) ->gas ONLY where a mains-gas +# connection is present (electric boilers are left alone; electrification is the +# national target). The end-state is a Table 4b SAP code (not a PCDB index): code +# 102 for a regular boiler heating a hot-water cylinder, code 104 for a combi +# (no cylinder, a later slice). The calculator derives the condensing-boiler +# seasonal efficiency from the code, so no efficiency input is needed. --- + +# Mains-gas main/water fuel code (Elmhurst -> SAP10 Table 12). +_MAINS_GAS_FUEL = 26 +# Table 4a heat-emitter code for radiators (the wet-distribution end-state). +_RADIATOR_EMITTER = 1 +# Table 4b SAP main-heating code for a regular gas boiler heating a cylinder. +_REGULAR_GAS_BOILER_SAP_CODE = 102 +# Water-heating code 901 — hot water from the main heating system. +_WATER_FROM_MAIN_SYSTEM_CODE = 901 + +# Wet-boiler SAP main_heating_code ranges (SAP 10.2 Table 4a + 4b): gas/oil +# boilers 101-141, solid-fuel boilers 151-161, electric boilers 191-196 (held +# locally so the generator does not depend on the calculator's internals, +# mirroring `domain/sap10_calculator/rdsap/cert_to_inputs.py`). Electric boilers +# are a wet system but are deliberately not upgraded to gas. +_WET_BOILER_SAP_CODE_RANGES: tuple[range, ...] = ( + range(101, 142), + range(151, 162), + range(191, 197), +) +_ELECTRIC_BOILER_SAP_CODE_RANGE = range(191, 197) + +# Cylinder jacket end-state (from the after-cert): an 80 mm jacket +# (`cylinder_insulation_type=2`). The jacket is added only when the existing +# cylinder is below this thickness — bringing every cylinder up to 80 mm and +# never downgrading a better-insulated one. +_CYLINDER_JACKET_INSULATION_TYPE = 2 +_MIN_CYLINDER_INSULATION_MM = 80 + + # --- ASHP cost interpretation (ADR-0025): read the dwelling into the typed # inputs the catalogue math needs. The modelling-layer half of the split; the # pricing itself lives on `Products`. --- @@ -201,11 +241,94 @@ def recommend_heating( if ashp_option is not None: options.append(ashp_option) + boiler_option = _boiler_upgrade_with_cylinder_option(epc, products) + if boiler_option is not None: + options.append(boiler_option) + if not options: return None return Recommendation(surface=_HEATING_SURFACE, options=tuple(options)) +def _boiler_upgrade_with_cylinder_option( + epc: EpcPropertyData, products: ProductRepository +) -> Optional[MeasureOption]: + """The gas-condensing-boiler-with-cylinder bundle: a new regular gas boiler + (Table 4b code 102, fanned flue) for a dwelling whose existing wet boiler + heats a hot-water cylinder, plus the conditional cylinder fixes (a jacket + when under-insulated, a thermostat when absent). Offered only where a + mains-gas connection makes the gas end-state installable (ADR-0024 revised).""" + if not _boiler_upgrade_eligible(epc): + return None + if not epc.has_hot_water_cylinder: + return None + product = products.get(_GAS_BOILER_UPGRADE_MEASURE_TYPE) + return MeasureOption( + measure_type=_GAS_BOILER_UPGRADE_MEASURE_TYPE, + description=( + "Replace the boiler with a gas condensing boiler and insulate and " + "thermostat the hot-water cylinder" + ), + overlay=EpcSimulation(heating=_boiler_cylinder_overlay(epc)), + cost=Cost( + total=product.unit_cost_per_m2, contingency_rate=product.contingency_rate + ), + material_id=product.id, + ) + + +def _boiler_upgrade_eligible(epc: EpcPropertyData) -> bool: + """Whether a dwelling's existing wet boiler can be upgraded to a gas + condensing boiler. The gas end-state is installable only with a mains-gas + connection, so gas dwellings always qualify and a non-gas wet boiler + (oil/LPG/solid) qualifies only where mains gas is present. Electric boilers + are left alone — electrification, not a gas swap, is their upgrade path.""" + main: MainHeatingDetail = epc.sap_heating.main_heating_details[0] + code: Optional[int] = main.sap_main_heating_code + if code is None: + return False + if not any(code in r for r in _WET_BOILER_SAP_CODE_RANGES): + return False + if code in _ELECTRIC_BOILER_SAP_CODE_RANGE: + return False + return epc.sap_energy_source.mains_gas + + +def _boiler_cylinder_overlay(epc: EpcPropertyData) -> HeatingOverlay: + """Build the per-dwelling boiler-with-cylinder end-state: a regular gas + condensing boiler on radiators, hot water from the main system, and the + conditional cylinder fixes — an 80 mm jacket only when the cylinder is + under-insulated, a thermostat only when one is absent. The existing cylinder + size, heating controls, and meter are left unchanged.""" + sap_heating = epc.sap_heating + jacket_type: Optional[int] = None + jacket_thickness_mm: Optional[int] = None + if _cylinder_under_insulated(sap_heating.cylinder_insulation_thickness_mm): + jacket_type = _CYLINDER_JACKET_INSULATION_TYPE + jacket_thickness_mm = _MIN_CYLINDER_INSULATION_MM + thermostat: Optional[str] = ( + "Y" if sap_heating.cylinder_thermostat != "Y" else None + ) + return HeatingOverlay( + main_fuel_type=_MAINS_GAS_FUEL, + heat_emitter_type=_RADIATOR_EMITTER, + sap_main_heating_code=_REGULAR_GAS_BOILER_SAP_CODE, + fan_flue_present=True, + water_heating_code=_WATER_FROM_MAIN_SYSTEM_CODE, + water_heating_fuel=_MAINS_GAS_FUEL, + cylinder_insulation_type=jacket_type, + cylinder_insulation_thickness_mm=jacket_thickness_mm, + cylinder_thermostat=thermostat, + has_hot_water_cylinder=True, + ) + + +def _cylinder_under_insulated(thickness_mm: Optional[int]) -> bool: + """Whether a hot-water cylinder is below the 80 mm jacket end-state (an + un-jacketed cylinder lodges no thickness).""" + return thickness_mm is None or thickness_mm < _MIN_CYLINDER_INSULATION_MM + + def _ashp_option( epc: EpcPropertyData, products: ProductRepository, diff --git a/domain/modelling/measure_type.py b/domain/modelling/measure_type.py index d28bff39..b1c4bd9c 100644 --- a/domain/modelling/measure_type.py +++ b/domain/modelling/measure_type.py @@ -32,4 +32,5 @@ class MeasureType(StrEnum): MECHANICAL_VENTILATION = "mechanical_ventilation" HIGH_HEAT_RETENTION_STORAGE_HEATERS = "high_heat_retention_storage_heaters" AIR_SOURCE_HEAT_PUMP = "air_source_heat_pump" + GAS_BOILER_UPGRADE = "gas_boiler_upgrade" SOLAR_PV = "solar_pv" diff --git a/domain/modelling/scoring/overlay_applicator.py b/domain/modelling/scoring/overlay_applicator.py index 60caed17..2696d7ab 100644 --- a/domain/modelling/scoring/overlay_applicator.py +++ b/domain/modelling/scoring/overlay_applicator.py @@ -70,6 +70,7 @@ _MAIN_HEATING_FIELDS: tuple[str, ...] = ( "sap_main_heating_code", "main_heating_index_number", "main_heating_category", + "fan_flue_present", ) _SAP_HEATING_FIELDS: tuple[str, ...] = ( "water_heating_code", diff --git a/domain/modelling/simulation.py b/domain/modelling/simulation.py index 8fdb1205..40d6fc95 100644 --- a/domain/modelling/simulation.py +++ b/domain/modelling/simulation.py @@ -118,6 +118,10 @@ class HeatingOverlay: sap_main_heating_code: Optional[int] = None main_heating_index_number: Optional[int] = None main_heating_category: Optional[int] = None + # A modern condensing boiler has a fanned (room-sealed) flue; the boiler + # upgrade sets this True (SAP 10.2 Table 4f flue-fan electricity + the + # Table 4b condensing-boiler seasonal-efficiency basis depend on it). + fan_flue_present: Optional[bool] = None # sap_heating (top-level) water_heating_code: Optional[int] = None water_heating_fuel: Optional[int] = None diff --git a/harness/sample_catalogue.json b/harness/sample_catalogue.json index ef21d58f..e15e4537 100644 --- a/harness/sample_catalogue.json +++ b/harness/sample_catalogue.json @@ -13,5 +13,6 @@ "low_energy_lighting": { "unit_cost_per_m2": 8.0 }, "high_heat_retention_storage_heaters": { "unit_cost_per_m2": 3500.0 }, "air_source_heat_pump": { "unit_cost_per_m2": 12000.0 }, + "gas_boiler_upgrade": { "unit_cost_per_m2": 3000.0 }, "solar_pv": { "unit_cost_per_m2": 0.0 } } diff --git a/tests/domain/modelling/fixtures/boiler_cyl_gas_001431_after.pdf b/tests/domain/modelling/fixtures/boiler_cyl_gas_001431_after.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e61f3466a02fe2e390858a38b4a9f1ee04e34c77 GIT binary patch literal 77066 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 Z9)O~hQjnjjjil@FNAVHUp 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 literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/test_elmhurst_cascade_pins.py b/tests/domain/modelling/test_elmhurst_cascade_pins.py index 77981ab2..63ffb141 100644 --- a/tests/domain/modelling/test_elmhurst_cascade_pins.py +++ b/tests/domain/modelling/test_elmhurst_cascade_pins.py @@ -755,6 +755,36 @@ def test_gas_boiler_instant_hw_before_baselines() -> None: assert result.sap_score_continuous > 0.0 +def test_boiler_with_cylinder_overlay_reproduces_the_relodged_after() -> None: + # Arrange — a mains-gas wet boiler (SAP code 114) heating an uninsulated + # hot-water cylinder (no insulation, no thermostat) re-lodged as a new gas + # condensing boiler with a cylinder (SAP code 102, fanned flue), the cylinder + # jacketed (insulation type 2 / 80 mm) and given a thermostat. The boiler + # upgrade leaves the (already adequate) controls + cylinder size + meter + # unchanged. Validates the boiler-with-cylinder option end-state at delta 0. + # + # NB the absolute SAP on this dwelling is subject to a separate Summary-path + # mapper roof-fidelity gap (our calculator reads the roof better-insulated + # than Elmhurst, so it scores ~75 where Elmhurst prints 56); the gap is + # identical on before + after (the boiler measure never touches the roof), so + # it cancels and this pin still proves the overlay applies Elmhurst's exact + # heating field-delta. Tracked on the calculator branch, not here. + before: EpcPropertyData = parse_recommendation_summary( + "boiler_cyl_gas_001431_before.pdf" + ) + after: EpcPropertyData = parse_recommendation_summary( + "boiler_cyl_gas_001431_after.pdf" + ) + recommendation: Recommendation | None = recommend_heating(before, _AnyProduct()) + assert recommendation is not None + option = next( + o for o in recommendation.options if o.measure_type == "gas_boiler_upgrade" + ) + + # Act / Assert + _assert_overlay_reproduces_after(before, after, option.overlay) + + # --- Solar PV cascade pins (ADR-0026) ------------------------------------- # # The solar before/after Summaries lodge *synthetic* PV arrays (each 1.00 kWp, diff --git a/tests/domain/modelling/test_heating_recommendation.py b/tests/domain/modelling/test_heating_recommendation.py index 9a0cf285..ad6392d5 100644 --- a/tests/domain/modelling/test_heating_recommendation.py +++ b/tests/domain/modelling/test_heating_recommendation.py @@ -250,3 +250,129 @@ def test_existing_heat_pump_yields_no_ashp_bundle() -> None: assert "air_source_heat_pump" not in { o.measure_type for o in recommendation.options } + + +# --- Gas boiler upgrade (Heating/HW expansion) ---------------------------- + + +def _gas_boiler_with_cylinder_baseline() -> EpcPropertyData: + """A mains-gas wet boiler (Table 4b code 114) heating an uninsulated, un- + thermostatted hot-water cylinder — the boiler-with-cylinder dwelling.""" + return parse_recommendation_summary("boiler_cyl_gas_001431_before.pdf") + + +def test_gas_boiler_with_cylinder_dwelling_yields_a_boiler_upgrade_bundle() -> None: + # Arrange — a mains-gas wet boiler with an uninsulated, un-thermostatted + # cylinder: the upgrade fires both conditional cylinder fixes. + baseline: EpcPropertyData = _gas_boiler_with_cylinder_baseline() + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert — the absolute boiler end-state (code 102, fanned flue) with the + # cylinder jacketed (type 2 / 80 mm) and thermostatted; controls, cylinder + # size, and meter are left unchanged. + assert recommendation is not None + options = {o.measure_type.value: o for o in recommendation.options} + assert "gas_boiler_upgrade" in options + assert options["gas_boiler_upgrade"].overlay.heating == HeatingOverlay( + main_fuel_type=26, + heat_emitter_type=1, + sap_main_heating_code=102, + fan_flue_present=True, + water_heating_code=901, + water_heating_fuel=26, + cylinder_insulation_type=2, + cylinder_insulation_thickness_mm=80, + cylinder_thermostat="Y", + has_hot_water_cylinder=True, + ) + + +def test_boiler_upgrade_skips_jacket_when_cylinder_already_insulated() -> None: + # Arrange — the same dwelling but with an already well-insulated cylinder + # (100 mm > the 80 mm jacket end-state): the jacket must not be re-applied + # (and must never downgrade it). + baseline: EpcPropertyData = _gas_boiler_with_cylinder_baseline() + baseline.sap_heating.cylinder_insulation_thickness_mm = 100 + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert — no jacket fields, but the thermostat still added (absent before). + assert recommendation is not None + overlay = next( + o for o in recommendation.options if o.measure_type == "gas_boiler_upgrade" + ).overlay.heating + assert overlay is not None + assert overlay.cylinder_insulation_type is None + assert overlay.cylinder_insulation_thickness_mm is None + assert overlay.cylinder_thermostat == "Y" + + +def test_boiler_upgrade_skips_thermostat_when_already_present() -> None: + # Arrange — the same dwelling but the cylinder already has a thermostat. + baseline: EpcPropertyData = _gas_boiler_with_cylinder_baseline() + baseline.sap_heating.cylinder_thermostat = "Y" + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert — no thermostat field, but the jacket still added (uninsulated). + assert recommendation is not None + overlay = next( + o for o in recommendation.options if o.measure_type == "gas_boiler_upgrade" + ).overlay.heating + assert overlay is not None + assert overlay.cylinder_thermostat is None + assert overlay.cylinder_insulation_type == 2 + + +def test_no_cylinder_dwelling_yields_no_boiler_with_cylinder_bundle() -> None: + # Arrange — a wet gas boiler with no hot-water cylinder (a combi); the with- + # cylinder option does not apply (the combi option lands in a later slice). + baseline: EpcPropertyData = _gas_boiler_with_cylinder_baseline() + baseline.has_hot_water_cylinder = False + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert + if recommendation is not None: + assert "gas_boiler_upgrade" not in { + o.measure_type for o in recommendation.options + } + + +def test_electric_boiler_dwelling_yields_no_gas_boiler_upgrade() -> None: + # Arrange — an electric boiler (Table 4a code 191) is left alone: + # electrification, not a gas swap, is its upgrade path. + baseline: EpcPropertyData = _gas_boiler_with_cylinder_baseline() + baseline.sap_heating.main_heating_details[0].sap_main_heating_code = 191 + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert + if recommendation is not None: + assert "gas_boiler_upgrade" not in { + o.measure_type for o in recommendation.options + } + + +def test_off_gas_boiler_yields_no_gas_boiler_upgrade() -> None: + # Arrange — an oil boiler (Table 4b code 130) with no mains-gas connection: + # a gas boiler cannot be installed, so no upgrade is offered (the gas end- + # state is gated on a mains-gas connection). + baseline: EpcPropertyData = _gas_boiler_with_cylinder_baseline() + baseline.sap_heating.main_heating_details[0].sap_main_heating_code = 130 + baseline.sap_energy_source.mains_gas = False + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert + if recommendation is not None: + assert "gas_boiler_upgrade" not in { + o.measure_type for o in recommendation.options + } diff --git a/tests/domain/modelling/test_measure_type.py b/tests/domain/modelling/test_measure_type.py index 60c1a816..56fd5a4c 100644 --- a/tests/domain/modelling/test_measure_type.py +++ b/tests/domain/modelling/test_measure_type.py @@ -26,6 +26,7 @@ _EXPECTED_VALUES = { "mechanical_ventilation", "high_heat_retention_storage_heaters", "air_source_heat_pump", + "gas_boiler_upgrade", "solar_pv", } diff --git a/tests/harness/test_console.py b/tests/harness/test_console.py index 8b95e455..1adc9951 100644 --- a/tests/harness/test_console.py +++ b/tests/harness/test_console.py @@ -38,6 +38,7 @@ _GENERATOR_MEASURE_TYPES = ( "low_energy_lighting", "high_heat_retention_storage_heaters", "air_source_heat_pump", + "gas_boiler_upgrade", ) diff --git a/tests/orchestration/test_ara_first_run_pipeline_integration.py b/tests/orchestration/test_ara_first_run_pipeline_integration.py index 8ef68627..3b72ba13 100644 --- a/tests/orchestration/test_ara_first_run_pipeline_integration.py +++ b/tests/orchestration/test_ara_first_run_pipeline_integration.py @@ -168,6 +168,14 @@ def test_first_run_baselines_through_repos_and_is_idempotent_on_rerun( is_active=True, description="LED bulb", ), + MaterialRow( + id=6, + type="gas_boiler_upgrade", + total_cost=3000.0, + cost_unit="gbp_per_unit", + is_active=True, + description="Gas condensing boiler", + ), ] ) session.commit() From 63dd69ff8b25d6b7187a48b499525b723b5c41ea Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 9 Jun 2026 16:28:00 +0000 Subject: [PATCH 2/6] feat(modelling): gas combi boiler upgrade + controls-when-inadequate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extend the gas-boiler-upgrade Option to combi (no-cylinder) dwellings and add the controls upgrade shared by both boiler shapes. A dwelling has a cylinder or it does not, so the one `gas_boiler_upgrade` Option is shaped per dwelling: - no cylinder -> a gas condensing combi (Table 4b code 104), no cylinder fields touched; - a cylinder -> a regular boiler (code 102) heating it, with the conditional cylinder jacket/thermostat (slice 1). Controls: bring an inadequate boiler control up to full programmer + room thermostat + TRVs (SAP 10.2 Table 4e Group 1 code 2106). "Inadequate" = the Group-1 codes with NO room thermostat (2101, 2102, 2107, 2108, 2109, 2111) — these lack boiler interlock (Table 4c(2) / footnote c) p.171), so adding a room thermostat genuinely improves SAP. Room-thermostatted (2103/2104/2105/2106/2113) or better zone controls (2110/2112) are left unchanged — never downgraded, so no phantom uplift. The with-cylinder cert (control 2106) is therefore untouched and its pin still holds at delta 0. Validated by the combi before/after re-lodgement (cert 001431, gas boiler upgrade - no cylinder): control 2111 "TRVs and bypass" -> 2106, fan flue False->True, SAP code 112 -> 104. Cascade-pinned delta 0 (SAP/CO2/PE). Removed the slice-1 placeholder test asserting no boiler Option fires without a cylinder (the combi Option now correctly fires there). Co-Authored-By: Claude Opus 4.8 --- .../generators/heating_recommendation.py | 95 ++++++++++++++---- .../boiler_combi_gas_001431_after.pdf | Bin 0 -> 76968 bytes .../boiler_combi_gas_001431_before.pdf | Bin 0 -> 78686 bytes .../modelling/test_elmhurst_cascade_pins.py | 24 +++++ .../modelling/test_heating_recommendation.py | 65 +++++++++--- 5 files changed, 149 insertions(+), 35 deletions(-) create mode 100644 tests/domain/modelling/fixtures/boiler_combi_gas_001431_after.pdf create mode 100644 tests/domain/modelling/fixtures/boiler_combi_gas_001431_before.pdf diff --git a/domain/modelling/generators/heating_recommendation.py b/domain/modelling/generators/heating_recommendation.py index 88fea108..fcbe0e0c 100644 --- a/domain/modelling/generators/heating_recommendation.py +++ b/domain/modelling/generators/heating_recommendation.py @@ -126,11 +126,26 @@ _ASHP_OVERLAY = HeatingOverlay( _MAINS_GAS_FUEL = 26 # Table 4a heat-emitter code for radiators (the wet-distribution end-state). _RADIATOR_EMITTER = 1 -# Table 4b SAP main-heating code for a regular gas boiler heating a cylinder. +# Table 4b SAP main-heating codes for the new gas condensing boiler: code 102 +# for a regular boiler heating a cylinder, code 104 for a combi (no cylinder). _REGULAR_GAS_BOILER_SAP_CODE = 102 +_COMBI_GAS_BOILER_SAP_CODE = 104 # Water-heating code 901 — hot water from the main heating system. _WATER_FROM_MAIN_SYSTEM_CODE = 901 +# Controls upgrade (SAP 10.2 Table 4e Group 1, PDF p.172): bring an inadequate +# boiler control up to full programmer + room thermostat + TRVs (code 2106). +# "Inadequate" = the Group-1 codes whose description carries NO room thermostat +# (2101 no control, 2102 programmer-only, 2107/2108/2109 programmer+TRVs without +# a room thermostat, 2111 TRVs and bypass) — these lack boiler interlock (Table +# 4c(2) / footnote c)), so adding a room thermostat is a genuine improvement. +# Controls with a room thermostat (2103/2104/2105/2106/2113) or better time-and- +# temperature zone control (2110/2112) are left unchanged — never downgraded. +_FULL_BOILER_CONTROL = 2106 +_INADEQUATE_BOILER_CONTROL_CODES: frozenset[int] = frozenset( + {2101, 2102, 2107, 2108, 2109, 2111} +) + # Wet-boiler SAP main_heating_code ranges (SAP 10.2 Table 4a + 4b): gas/oil # boilers 101-141, solid-fuel boilers 151-161, electric boilers 191-196 (held # locally so the generator does not depend on the calculator's internals, @@ -241,7 +256,7 @@ def recommend_heating( if ashp_option is not None: options.append(ashp_option) - boiler_option = _boiler_upgrade_with_cylinder_option(epc, products) + boiler_option = _boiler_upgrade_option(epc, products) if boiler_option is not None: options.append(boiler_option) @@ -250,26 +265,34 @@ def recommend_heating( return Recommendation(surface=_HEATING_SURFACE, options=tuple(options)) -def _boiler_upgrade_with_cylinder_option( +def _boiler_upgrade_option( epc: EpcPropertyData, products: ProductRepository ) -> Optional[MeasureOption]: - """The gas-condensing-boiler-with-cylinder bundle: a new regular gas boiler - (Table 4b code 102, fanned flue) for a dwelling whose existing wet boiler - heats a hot-water cylinder, plus the conditional cylinder fixes (a jacket - when under-insulated, a thermostat when absent). Offered only where a - mains-gas connection makes the gas end-state installable (ADR-0024 revised).""" + """The gas-condensing-boiler upgrade for a dwelling with an existing wet + boiler: a combi (Table 4b code 104) where there is no cylinder, or a regular + boiler (code 102) heating the existing cylinder where there is one. Both + upgrade inadequate controls and the cylinder variant adds the conditional + cylinder fixes (a jacket when under-insulated, a thermostat when absent). One + Option per dwelling — a dwelling has a cylinder or it does not — offered only + where a mains-gas connection makes the gas end-state installable (ADR-0024 + revised).""" if not _boiler_upgrade_eligible(epc): return None - if not epc.has_hot_water_cylinder: - return None + has_cylinder: bool = epc.has_hot_water_cylinder + overlay: HeatingOverlay = ( + _boiler_cylinder_overlay(epc) if has_cylinder else _boiler_combi_overlay(epc) + ) + description: str = ( + "Replace the boiler with a gas condensing boiler and insulate and " + "thermostat the hot-water cylinder" + if has_cylinder + else "Replace the boiler with a gas condensing combi boiler" + ) product = products.get(_GAS_BOILER_UPGRADE_MEASURE_TYPE) return MeasureOption( measure_type=_GAS_BOILER_UPGRADE_MEASURE_TYPE, - description=( - "Replace the boiler with a gas condensing boiler and insulate and " - "thermostat the hot-water cylinder" - ), - overlay=EpcSimulation(heating=_boiler_cylinder_overlay(epc)), + description=description, + overlay=EpcSimulation(heating=overlay), cost=Cost( total=product.unit_cost_per_m2, contingency_rate=product.contingency_rate ), @@ -294,13 +317,32 @@ def _boiler_upgrade_eligible(epc: EpcPropertyData) -> bool: return epc.sap_energy_source.mains_gas +def _boiler_combi_overlay(epc: EpcPropertyData) -> HeatingOverlay: + """Build the per-dwelling combi end-state: a gas condensing combi (Table 4b + code 104, fanned flue) on radiators with hot water from the boiler, plus a + controls upgrade when the existing controls are inadequate. No cylinder, so + no cylinder fields are touched.""" + main: MainHeatingDetail = epc.sap_heating.main_heating_details[0] + return HeatingOverlay( + main_fuel_type=_MAINS_GAS_FUEL, + heat_emitter_type=_RADIATOR_EMITTER, + sap_main_heating_code=_COMBI_GAS_BOILER_SAP_CODE, + fan_flue_present=True, + main_heating_control=_upgraded_boiler_control(main), + water_heating_code=_WATER_FROM_MAIN_SYSTEM_CODE, + water_heating_fuel=_MAINS_GAS_FUEL, + ) + + def _boiler_cylinder_overlay(epc: EpcPropertyData) -> HeatingOverlay: """Build the per-dwelling boiler-with-cylinder end-state: a regular gas - condensing boiler on radiators, hot water from the main system, and the - conditional cylinder fixes — an 80 mm jacket only when the cylinder is - under-insulated, a thermostat only when one is absent. The existing cylinder - size, heating controls, and meter are left unchanged.""" + condensing boiler on radiators, hot water from the main system, a controls + upgrade when the existing controls are inadequate, and the conditional + cylinder fixes — an 80 mm jacket only when the cylinder is under-insulated, a + thermostat only when one is absent. The existing cylinder size and meter are + left unchanged.""" sap_heating = epc.sap_heating + main: MainHeatingDetail = sap_heating.main_heating_details[0] jacket_type: Optional[int] = None jacket_thickness_mm: Optional[int] = None if _cylinder_under_insulated(sap_heating.cylinder_insulation_thickness_mm): @@ -314,6 +356,7 @@ def _boiler_cylinder_overlay(epc: EpcPropertyData) -> HeatingOverlay: heat_emitter_type=_RADIATOR_EMITTER, sap_main_heating_code=_REGULAR_GAS_BOILER_SAP_CODE, fan_flue_present=True, + main_heating_control=_upgraded_boiler_control(main), water_heating_code=_WATER_FROM_MAIN_SYSTEM_CODE, water_heating_fuel=_MAINS_GAS_FUEL, cylinder_insulation_type=jacket_type, @@ -329,6 +372,20 @@ def _cylinder_under_insulated(thickness_mm: Optional[int]) -> bool: return thickness_mm is None or thickness_mm < _MIN_CYLINDER_INSULATION_MM +def _upgraded_boiler_control(main: MainHeatingDetail) -> Optional[int]: + """The full-controls code (2106) when the existing boiler control is + inadequate (lacks a room thermostat — SAP 10.2 Table 4e Group 1), else + ``None`` to leave a room-thermostatted or better control unchanged. So the + overlay only ever moves controls where it genuinely improves them.""" + control = main.main_heating_control + code: Optional[int] = control if isinstance(control, int) else None + if code is None and isinstance(control, str) and control.isdigit(): + code = int(control) + if code in _INADEQUATE_BOILER_CONTROL_CODES: + return _FULL_BOILER_CONTROL + return None + + def _ashp_option( epc: EpcPropertyData, products: ProductRepository, diff --git a/tests/domain/modelling/fixtures/boiler_combi_gas_001431_after.pdf b/tests/domain/modelling/fixtures/boiler_combi_gas_001431_after.pdf new file mode 100644 index 0000000000000000000000000000000000000000..784ab1ca04b487ee718cae48e22cba4e885a5fe7 GIT binary patch literal 76968 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 L6g)h4)#U#N&|^IA literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/test_elmhurst_cascade_pins.py b/tests/domain/modelling/test_elmhurst_cascade_pins.py index 63ffb141..9d8ce4ff 100644 --- a/tests/domain/modelling/test_elmhurst_cascade_pins.py +++ b/tests/domain/modelling/test_elmhurst_cascade_pins.py @@ -785,6 +785,30 @@ def test_boiler_with_cylinder_overlay_reproduces_the_relodged_after() -> None: _assert_overlay_reproduces_after(before, after, option.overlay) +def test_boiler_combi_overlay_reproduces_the_relodged_after() -> None: + # Arrange — a mains-gas combi (SAP code 112, no cylinder) with inadequate + # controls (2111 "TRVs and bypass" — no room thermostat, so no boiler + # interlock) re-lodged as a new gas condensing combi (code 104, fanned flue) + # with full programmer + room thermostat + TRV controls (2106). No cylinder, + # so no cylinder components. Validates the combi end-state + the controls- + # when-inadequate upgrade at delta 0. (Same Summary-path roof gap as the + # with-cylinder pin — it cancels across before/after.) + before: EpcPropertyData = parse_recommendation_summary( + "boiler_combi_gas_001431_before.pdf" + ) + after: EpcPropertyData = parse_recommendation_summary( + "boiler_combi_gas_001431_after.pdf" + ) + recommendation: Recommendation | None = recommend_heating(before, _AnyProduct()) + assert recommendation is not None + option = next( + o for o in recommendation.options if o.measure_type == "gas_boiler_upgrade" + ) + + # Act / Assert + _assert_overlay_reproduces_after(before, after, option.overlay) + + # --- Solar PV cascade pins (ADR-0026) ------------------------------------- # # The solar before/after Summaries lodge *synthetic* PV arrays (each 1.00 kWp, diff --git a/tests/domain/modelling/test_heating_recommendation.py b/tests/domain/modelling/test_heating_recommendation.py index ad6392d5..9b011437 100644 --- a/tests/domain/modelling/test_heating_recommendation.py +++ b/tests/domain/modelling/test_heating_recommendation.py @@ -328,22 +328,6 @@ def test_boiler_upgrade_skips_thermostat_when_already_present() -> None: assert overlay.cylinder_insulation_type == 2 -def test_no_cylinder_dwelling_yields_no_boiler_with_cylinder_bundle() -> None: - # Arrange — a wet gas boiler with no hot-water cylinder (a combi); the with- - # cylinder option does not apply (the combi option lands in a later slice). - baseline: EpcPropertyData = _gas_boiler_with_cylinder_baseline() - baseline.has_hot_water_cylinder = False - - # Act - recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) - - # Assert - if recommendation is not None: - assert "gas_boiler_upgrade" not in { - o.measure_type for o in recommendation.options - } - - def test_electric_boiler_dwelling_yields_no_gas_boiler_upgrade() -> None: # Arrange — an electric boiler (Table 4a code 191) is left alone: # electrification, not a gas swap, is its upgrade path. @@ -376,3 +360,52 @@ def test_off_gas_boiler_yields_no_gas_boiler_upgrade() -> None: assert "gas_boiler_upgrade" not in { o.measure_type for o in recommendation.options } + + +def _gas_combi_baseline() -> EpcPropertyData: + """A mains-gas combi (Table 4b code 112, no cylinder) with inadequate + controls (2111 "TRVs and bypass" — no room thermostat).""" + return parse_recommendation_summary("boiler_combi_gas_001431_before.pdf") + + +def test_gas_combi_dwelling_yields_a_combi_boiler_upgrade_bundle() -> None: + # Arrange — a mains-gas combi with no cylinder and inadequate controls: + # the upgrade replaces it with a condensing combi (code 104) and upgrades + # the controls to 2106, touching no cylinder fields. + baseline: EpcPropertyData = _gas_combi_baseline() + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert + assert recommendation is not None + options = {o.measure_type.value: o for o in recommendation.options} + assert "gas_boiler_upgrade" in options + assert options["gas_boiler_upgrade"].overlay.heating == HeatingOverlay( + main_fuel_type=26, + heat_emitter_type=1, + sap_main_heating_code=104, + fan_flue_present=True, + main_heating_control=2106, + water_heating_code=901, + water_heating_fuel=26, + ) + + +def test_boiler_upgrade_leaves_adequate_controls_unchanged() -> None: + # Arrange — the same combi but with already-adequate controls (2113, room + # thermostat and TRVs): the upgrade must not move the controls (and must + # never downgrade a better control). + baseline: EpcPropertyData = _gas_combi_baseline() + baseline.sap_heating.main_heating_details[0].main_heating_control = 2113 + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert + assert recommendation is not None + overlay = next( + o for o in recommendation.options if o.measure_type == "gas_boiler_upgrade" + ).overlay.heating + assert overlay is not None + assert overlay.main_heating_control is None From 7bc9797a26c1ffdf96cfdfdb22a9d1b04372f3e3 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 9 Jun 2026 16:37:32 +0000 Subject: [PATCH 3/6] test(modelling): pin non-gas->gas + already-insulated-cylinder boiler upgrades MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two more boiler-upgrade cascade pins, validating the existing generator across fuels and cylinder states (no source change): - oil combi: an oil boiler (fuel 28, code 130) on a mains-gas street converts to a gas condensing combi (fuel 28->26, code 104). Proves the non-gas -> gas conversion gated on a mains-gas connection (ADR-0024 revised). - already-insulated cylinder: a gas boiler heating a pre-jacketed cylinder (type 2 / 80 mm, no thermostat) gets a new boiler + a thermostat, with the jacket NOT re-applied. Proves the cylinder path's skip-jacket branch against a real cert. (Sourced from an LPG re-lodgement whose fuel the Summary mapper reads as mains gas 26 — a separate LPG fuel-mapping gap, noted in the test.) Both pin delta 0 (SAP/CO2/PE) against the relodged after. Co-Authored-By: Claude Opus 4.8 --- .../boiler_combi_oil_001431_after.pdf | Bin 0 -> 76968 bytes .../boiler_combi_oil_001431_before.pdf | Bin 0 -> 76966 bytes .../fixtures/boiler_cyl_lpg_001431_after.pdf | Bin 0 -> 77060 bytes .../fixtures/boiler_cyl_lpg_001431_before.pdf | Bin 0 -> 78774 bytes .../modelling/test_elmhurst_cascade_pins.py | 47 ++++++++++++++++++ 5 files changed, 47 insertions(+) create mode 100644 tests/domain/modelling/fixtures/boiler_combi_oil_001431_after.pdf create mode 100644 tests/domain/modelling/fixtures/boiler_combi_oil_001431_before.pdf create mode 100644 tests/domain/modelling/fixtures/boiler_cyl_lpg_001431_after.pdf create mode 100644 tests/domain/modelling/fixtures/boiler_cyl_lpg_001431_before.pdf diff --git a/tests/domain/modelling/fixtures/boiler_combi_oil_001431_after.pdf b/tests/domain/modelling/fixtures/boiler_combi_oil_001431_after.pdf new file mode 100644 index 0000000000000000000000000000000000000000..67894d886a07c7ed429eb865291edeed51a18df5 GIT binary patch literal 76968 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 literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/fixtures/boiler_combi_oil_001431_before.pdf b/tests/domain/modelling/fixtures/boiler_combi_oil_001431_before.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9f7a6994c493f95db0de351a92d1fd9425cb9cd9 GIT binary patch literal 76966 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 literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/fixtures/boiler_cyl_lpg_001431_after.pdf b/tests/domain/modelling/fixtures/boiler_cyl_lpg_001431_after.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6dc4fdf8f74fddf9585b831b7a98460bb49b5cf9 GIT binary patch literal 77060 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 P6e0)~#A9ZbRh9cMD3hoW literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/fixtures/boiler_cyl_lpg_001431_before.pdf b/tests/domain/modelling/fixtures/boiler_cyl_lpg_001431_before.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2b7a72872eff91ad1e1c95760ba210dddb1b713e GIT binary patch literal 78774 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 s_w2l^e&1JOI%xD+LGE0QbyFIsgCw literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/test_elmhurst_cascade_pins.py b/tests/domain/modelling/test_elmhurst_cascade_pins.py index 9d8ce4ff..a5cec154 100644 --- a/tests/domain/modelling/test_elmhurst_cascade_pins.py +++ b/tests/domain/modelling/test_elmhurst_cascade_pins.py @@ -809,6 +809,53 @@ def test_boiler_combi_overlay_reproduces_the_relodged_after() -> None: _assert_overlay_reproduces_after(before, after, option.overlay) +def test_oil_combi_overlay_reproduces_the_relodged_after() -> None: + # Arrange — an OIL combi (fuel 28, SAP code 130, no cylinder) on a mains-gas + # street re-lodged as a gas condensing combi (fuel 28->26, code 104, fanned + # flue). Validates the non-gas -> gas conversion: the upgrade targets gas + # because a mains-gas connection is present (ADR-0024 revised). Controls are + # already adequate (2106), so they are unchanged. + before: EpcPropertyData = parse_recommendation_summary( + "boiler_combi_oil_001431_before.pdf" + ) + after: EpcPropertyData = parse_recommendation_summary( + "boiler_combi_oil_001431_after.pdf" + ) + recommendation: Recommendation | None = recommend_heating(before, _AnyProduct()) + assert recommendation is not None + option = next( + o for o in recommendation.options if o.measure_type == "gas_boiler_upgrade" + ) + + # Act / Assert + _assert_overlay_reproduces_after(before, after, option.overlay) + + +def test_boiler_with_already_insulated_cylinder_overlay_reproduces_the_relodged_after() -> None: + # Arrange — a gas boiler heating an ALREADY-jacketed cylinder (insulation + # type 2 / 80 mm) with no thermostat, re-lodged as a new gas condensing + # boiler (code 102) with a cylinder thermostat added. Validates the cylinder + # path's skip-jacket branch (the 80 mm jacket is not re-applied) while the + # thermostat is still added. (Sourced from an LPG re-lodgement; the Summary + # mapper reads its fuel as mains gas — fuel 26 — so this exercises the gas + # cylinder path, not a true LPG conversion. The LPG fuel-mapping gap is a + # separate mapper-front concern.) + before: EpcPropertyData = parse_recommendation_summary( + "boiler_cyl_lpg_001431_before.pdf" + ) + after: EpcPropertyData = parse_recommendation_summary( + "boiler_cyl_lpg_001431_after.pdf" + ) + recommendation: Recommendation | None = recommend_heating(before, _AnyProduct()) + assert recommendation is not None + option = next( + o for o in recommendation.options if o.measure_type == "gas_boiler_upgrade" + ) + + # Act / Assert + _assert_overlay_reproduces_after(before, after, option.overlay) + + # --- Solar PV cascade pins (ADR-0026) ------------------------------------- # # The solar before/after Summaries lodge *synthetic* PV arrays (each 1.00 kWp, From 2413bc87dae44564e92ce3cab02fbb544448c19e Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Wed, 10 Jun 2026 08:27:07 +0000 Subject: [PATCH 4/6] feat(modelling): solid-fuel(coal)->gas boiler upgrade + boiler_flue_type end-state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pin the coal-boiler-with-cylinder upgrade and add the `boiler_flue_type` end-state field. A solid-fuel (coal) boiler (fuel 11, SAP code 153) on a mains-gas street converts to a gas condensing boiler (fuel 11->26, code 102) — the non-gas->gas path for a solid-fuel system, eligible because code 153 is in the wet-boiler solid-fuel range 151-161 and mains gas is present. New `boiler_flue_type` HeatingOverlay field, routed to main_heating_details[0] and set to 2 (room-sealed/balanced) on both boiler shapes: every relodged after lodges flue type 2, but coal's before lodged none. The field is SAP-inert (the cascade score is unchanged by it), so it is written purely for end-state fidelity — the overlay now represents the installed condensing boiler's flue. Validated via the overlay-equality unit tests. The coal after predates the user-locked "always add a cylinder thermostat when absent" rule, so it stale-lodged thermostat 'N'; the pin corrects it to the rule's end-state 'Y' in-test (the gas with-cylinder after got the same correction by re-lodging). The cylinder is already 80 mm insulated, so the jacket is skipped and only the thermostat is added; controls (2106) are unchanged. Cascade-pinned delta 0 (SAP/CO2/PE). Co-Authored-By: Claude Opus 4.8 --- .../generators/heating_recommendation.py | 5 +++ .../modelling/scoring/overlay_applicator.py | 1 + domain/modelling/simulation.py | 4 +++ .../fixtures/boiler_cyl_coal_001431_after.pdf | Bin 0 -> 77977 bytes .../boiler_cyl_coal_001431_before.pdf | Bin 0 -> 78622 bytes .../modelling/test_elmhurst_cascade_pins.py | 31 ++++++++++++++++++ .../modelling/test_heating_recommendation.py | 2 ++ 7 files changed, 43 insertions(+) create mode 100644 tests/domain/modelling/fixtures/boiler_cyl_coal_001431_after.pdf create mode 100644 tests/domain/modelling/fixtures/boiler_cyl_coal_001431_before.pdf diff --git a/domain/modelling/generators/heating_recommendation.py b/domain/modelling/generators/heating_recommendation.py index fcbe0e0c..c6eb0247 100644 --- a/domain/modelling/generators/heating_recommendation.py +++ b/domain/modelling/generators/heating_recommendation.py @@ -132,6 +132,9 @@ _REGULAR_GAS_BOILER_SAP_CODE = 102 _COMBI_GAS_BOILER_SAP_CODE = 104 # Water-heating code 901 — hot water from the main heating system. _WATER_FROM_MAIN_SYSTEM_CODE = 901 +# Elmhurst boiler flue type for the new condensing boiler (room-sealed/balanced); +# every relodged after lodges type 2. SAP-inert, written for end-state fidelity. +_CONDENSING_BOILER_FLUE_TYPE = 2 # Controls upgrade (SAP 10.2 Table 4e Group 1, PDF p.172): bring an inadequate # boiler control up to full programmer + room thermostat + TRVs (code 2106). @@ -328,6 +331,7 @@ def _boiler_combi_overlay(epc: EpcPropertyData) -> HeatingOverlay: heat_emitter_type=_RADIATOR_EMITTER, sap_main_heating_code=_COMBI_GAS_BOILER_SAP_CODE, fan_flue_present=True, + boiler_flue_type=_CONDENSING_BOILER_FLUE_TYPE, main_heating_control=_upgraded_boiler_control(main), water_heating_code=_WATER_FROM_MAIN_SYSTEM_CODE, water_heating_fuel=_MAINS_GAS_FUEL, @@ -356,6 +360,7 @@ def _boiler_cylinder_overlay(epc: EpcPropertyData) -> HeatingOverlay: heat_emitter_type=_RADIATOR_EMITTER, sap_main_heating_code=_REGULAR_GAS_BOILER_SAP_CODE, fan_flue_present=True, + boiler_flue_type=_CONDENSING_BOILER_FLUE_TYPE, main_heating_control=_upgraded_boiler_control(main), water_heating_code=_WATER_FROM_MAIN_SYSTEM_CODE, water_heating_fuel=_MAINS_GAS_FUEL, diff --git a/domain/modelling/scoring/overlay_applicator.py b/domain/modelling/scoring/overlay_applicator.py index 2696d7ab..f15ff102 100644 --- a/domain/modelling/scoring/overlay_applicator.py +++ b/domain/modelling/scoring/overlay_applicator.py @@ -71,6 +71,7 @@ _MAIN_HEATING_FIELDS: tuple[str, ...] = ( "main_heating_index_number", "main_heating_category", "fan_flue_present", + "boiler_flue_type", ) _SAP_HEATING_FIELDS: tuple[str, ...] = ( "water_heating_code", diff --git a/domain/modelling/simulation.py b/domain/modelling/simulation.py index 40d6fc95..abf192e9 100644 --- a/domain/modelling/simulation.py +++ b/domain/modelling/simulation.py @@ -122,6 +122,10 @@ class HeatingOverlay: # upgrade sets this True (SAP 10.2 Table 4f flue-fan electricity + the # Table 4b condensing-boiler seasonal-efficiency basis depend on it). fan_flue_present: Optional[bool] = None + # The boiler's flue type (Elmhurst enum) — a new condensing boiler lodges + # type 2 (room-sealed/balanced). SAP-inert, but written for fidelity so the + # end-state matches the installed boiler. + boiler_flue_type: Optional[int] = None # sap_heating (top-level) water_heating_code: Optional[int] = None water_heating_fuel: Optional[int] = None diff --git a/tests/domain/modelling/fixtures/boiler_cyl_coal_001431_after.pdf b/tests/domain/modelling/fixtures/boiler_cyl_coal_001431_after.pdf new file mode 100644 index 0000000000000000000000000000000000000000..53e1c8d41c024376e42e289b13123a2bf0d3f8f6 GIT binary patch literal 77977 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 Chn5Zi literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/fixtures/boiler_cyl_coal_001431_before.pdf b/tests/domain/modelling/fixtures/boiler_cyl_coal_001431_before.pdf new file mode 100644 index 0000000000000000000000000000000000000000..de84ab54c3145628b17649487b17f5173fdc2d84 GIT binary patch literal 78622 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 literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/test_elmhurst_cascade_pins.py b/tests/domain/modelling/test_elmhurst_cascade_pins.py index a5cec154..a83a7c89 100644 --- a/tests/domain/modelling/test_elmhurst_cascade_pins.py +++ b/tests/domain/modelling/test_elmhurst_cascade_pins.py @@ -856,6 +856,37 @@ def test_boiler_with_already_insulated_cylinder_overlay_reproduces_the_relodged_ _assert_overlay_reproduces_after(before, after, option.overlay) +def test_coal_boiler_with_cylinder_overlay_reproduces_the_relodged_after() -> None: + # Arrange — a SOLID-FUEL (coal) boiler (fuel 11, SAP code 153) heating a + # cylinder, on a mains-gas street, re-lodged as a gas condensing boiler + # (fuel 11->26, code 102, fanned flue + boiler flue type 2). Exercises the + # non-gas -> gas conversion for a solid-fuel boiler AND the new + # `boiler_flue_type` end-state (coal's before lodged none; every other cert + # already lodged flue type 2). The cylinder is already 80 mm insulated so the + # jacket is skipped; only the thermostat is added. + # + # The relodged after predates the user-locked "always add a cylinder + # thermostat when absent" rule, so it stale-lodged thermostat 'N'; the test + # corrects it to the rule's end-state 'Y' (the same correction the gas + # with-cylinder after received by re-lodging). Controls are already adequate + # (2106), so they are unchanged. + before: EpcPropertyData = parse_recommendation_summary( + "boiler_cyl_coal_001431_before.pdf" + ) + after: EpcPropertyData = parse_recommendation_summary( + "boiler_cyl_coal_001431_after.pdf" + ) + after.sap_heating.cylinder_thermostat = "Y" + recommendation: Recommendation | None = recommend_heating(before, _AnyProduct()) + assert recommendation is not None + option = next( + o for o in recommendation.options if o.measure_type == "gas_boiler_upgrade" + ) + + # Act / Assert + _assert_overlay_reproduces_after(before, after, option.overlay) + + # --- Solar PV cascade pins (ADR-0026) ------------------------------------- # # The solar before/after Summaries lodge *synthetic* PV arrays (each 1.00 kWp, diff --git a/tests/domain/modelling/test_heating_recommendation.py b/tests/domain/modelling/test_heating_recommendation.py index 9b011437..297b1f8e 100644 --- a/tests/domain/modelling/test_heating_recommendation.py +++ b/tests/domain/modelling/test_heating_recommendation.py @@ -280,6 +280,7 @@ def test_gas_boiler_with_cylinder_dwelling_yields_a_boiler_upgrade_bundle() -> N heat_emitter_type=1, sap_main_heating_code=102, fan_flue_present=True, + boiler_flue_type=2, water_heating_code=901, water_heating_fuel=26, cylinder_insulation_type=2, @@ -386,6 +387,7 @@ def test_gas_combi_dwelling_yields_a_combi_boiler_upgrade_bundle() -> None: heat_emitter_type=1, sap_main_heating_code=104, fan_flue_present=True, + boiler_flue_type=2, main_heating_control=2106, water_heating_code=901, water_heating_fuel=26, From 3d108a9d9e64c8b74e3e042c5ca12f706b2e9f6f Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Wed, 10 Jun 2026 08:44:37 +0000 Subject: [PATCH 5/6] feat(harness): explain gas_boiler_upgrade in the report triggers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the `gas_boiler_upgrade` branch to `report._triggers_for`, mirroring the generator's eligibility guard so a cohort report explains why the boiler upgrade fired: the wet-boiler SAP code, the mains-gas connection that makes the gas end-state installable, and the cylinder presence that shapes the bundle (combi vs regular + cylinder fixes). No golden API cert selects the boiler upgrade (it competes with — and on houses loses to — the ASHP bundle within the one heating Recommendation), so the branch is covered by a direct `_triggers_for` unit test, following the repo pattern for testing internal helpers (cert_to_inputs). Co-Authored-By: Claude Opus 4.8 --- harness/report.py | 11 +++++++++++ tests/harness/test_report.py | 26 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/harness/report.py b/harness/report.py index c93f0d02..002cbd22 100644 --- a/harness/report.py +++ b/harness/report.py @@ -153,6 +153,17 @@ def _triggers_for(epc: EpcPropertyData, measure_type: str) -> dict[str, Any]: epc.sap_heating.main_heating_details[0].main_heating_category ), } + if measure_type == "gas_boiler_upgrade": + # heating_recommendation.py offers a gas condensing boiler to a dwelling + # with an existing (non-electric) wet boiler and a mains-gas connection; + # the cylinder presence shapes it (combi vs regular + cylinder fixes). + return { + "sap_main_heating_code": ( + epc.sap_heating.main_heating_details[0].sap_main_heating_code + ), + "mains_gas": epc.sap_energy_source.mains_gas, + "has_hot_water_cylinder": epc.has_hot_water_cylinder, + } return {} diff --git a/tests/harness/test_report.py b/tests/harness/test_report.py index 4357b4f7..1dcf9123 100644 --- a/tests/harness/test_report.py +++ b/tests/harness/test_report.py @@ -15,6 +15,9 @@ from harness.report import ( format_report_markdown, parity_report_for, ) +from tests.domain.modelling._elmhurst_recommendation import ( + parse_recommendation_summary, +) _GOLDEN = ( Path(__file__).resolve().parents[1] @@ -99,6 +102,29 @@ def test_each_fired_measure_carries_the_attributes_that_triggered_it() -> None: } +def test_gas_boiler_upgrade_surfaces_its_eligibility_triggers() -> None: + # No golden API cert selects the boiler upgrade (it competes with — and on + # houses loses to — the ASHP bundle within the one heating Recommendation), + # so the trigger branch is exercised directly, like the cert_to_inputs unit + # tests of internal helpers. + from harness.report import _triggers_for # pyright: ignore[reportPrivateUsage] + + # Arrange — a mains-gas wet boiler (SAP code 114) with a hot-water cylinder: + # the boiler-upgrade eligibility attributes the report should explain. + epc = parse_recommendation_summary("boiler_cyl_gas_001431_before.pdf") + + # Act + triggers = _triggers_for(epc, "gas_boiler_upgrade") + + # Assert — the wet-boiler SAP code, the mains-gas connection that makes the + # gas end-state installable, and the cylinder that shapes the bundle. + assert triggers == { + "sap_main_heating_code": 114, + "mains_gas": True, + "has_hot_water_cylinder": True, + } + + def test_few_measure_cert_surfaces_only_its_fired_measures_triggers() -> None: # Arrange path: Path = _GOLDEN / f"{_WITHIN_TOLERANCE}.json" From 07f534ee11e0209618c564a4a37008b6b7bca627 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Wed, 10 Jun 2026 10:20:46 +0000 Subject: [PATCH 6/6] feat(modelling): system tune-up options (standard + zone controls) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the system tune-up to the heating Recommendation: keep the existing wet boiler but install better heating controls and fix the cylinder. Two competing Options (the Optimiser picks <=1 across the whole heating rec) per the user's two best control end-states: - system_tune_up — standard controls (programmer + room thermostat + TRVs, SAP 10.2 Table 4e code 2106) - system_tune_up_zoned — time-and-temperature zone control (code 2110, type 3): more SAP uplift for more cost Both keep the boiler (no fuel / SAP code / flue change), set the control ABSOLUTELY to their end-state, and apply the conditional cylinder fixes (an 80 mm jacket when under-insulated, a thermostat when absent — only when a cylinder exists). Each control option is offered only when it genuinely improves the existing control — standard is skipped when the control is already 2106 / 2110 / 2112, zone when already 2110 / 2112 — so neither is ever a downgrade or a no-op. Validated against the Elmhurst "system tune up" re-lodgements (cert 001431): nine befores spanning controls 2101-2113 all converge to the two common afters, proving the control overlay is absolute. The cascade pin is parametrised over two starting controls (2101 "no control" + 2113 "room thermostat and TRVs") x both afters, delta 0 (SAP/CO2/PE). Wires the two MeasureTypes through contingencies (0.15), the offline catalogue (500 / 900), the catalogue-coverage list, the report triggers, and the ARA first-run seed. Co-Authored-By: Claude Opus 4.8 --- domain/modelling/contingencies.py | 2 + .../generators/heating_recommendation.py | 109 ++++++++++++++++++ domain/modelling/measure_type.py | 2 + harness/report.py | 12 ++ harness/sample_catalogue.json | 2 + .../tune_up_from_2101_001431_before.pdf | Bin 0 -> 67150 bytes .../tune_up_from_2113_001431_before.pdf | Bin 0 -> 67143 bytes .../tune_up_standard_001431_after.pdf | Bin 0 -> 65379 bytes .../fixtures/tune_up_zoned_001431_after.pdf | Bin 0 -> 65381 bytes .../modelling/test_elmhurst_cascade_pins.py | 47 ++++++++ .../modelling/test_heating_recommendation.py | 65 +++++++++++ tests/domain/modelling/test_measure_type.py | 2 + tests/harness/test_console.py | 2 + tests/harness/test_report.py | 15 +++ ...test_ara_first_run_pipeline_integration.py | 16 +++ 15 files changed, 274 insertions(+) create mode 100644 tests/domain/modelling/fixtures/tune_up_from_2101_001431_before.pdf create mode 100644 tests/domain/modelling/fixtures/tune_up_from_2113_001431_before.pdf create mode 100644 tests/domain/modelling/fixtures/tune_up_standard_001431_after.pdf create mode 100644 tests/domain/modelling/fixtures/tune_up_zoned_001431_after.pdf diff --git a/domain/modelling/contingencies.py b/domain/modelling/contingencies.py index ea2f3c4c..464d72bf 100644 --- a/domain/modelling/contingencies.py +++ b/domain/modelling/contingencies.py @@ -21,6 +21,8 @@ _CONTINGENCY_RATES: dict[str, float] = { "high_heat_retention_storage_heaters": 0.10, "air_source_heat_pump": 0.25, "gas_boiler_upgrade": 0.26, + "system_tune_up": 0.15, + "system_tune_up_zoned": 0.15, "solar_pv": 0.15, } diff --git a/domain/modelling/generators/heating_recommendation.py b/domain/modelling/generators/heating_recommendation.py index c6eb0247..2a6e908a 100644 --- a/domain/modelling/generators/heating_recommendation.py +++ b/domain/modelling/generators/heating_recommendation.py @@ -28,6 +28,8 @@ _HEATING_SURFACE = "Heating & Hot Water" _HHR_STORAGE_MEASURE_TYPE = MeasureType.HIGH_HEAT_RETENTION_STORAGE_HEATERS _ASHP_MEASURE_TYPE = MeasureType.AIR_SOURCE_HEAT_PUMP _GAS_BOILER_UPGRADE_MEASURE_TYPE = MeasureType.GAS_BOILER_UPGRADE +_SYSTEM_TUNE_UP_MEASURE_TYPE = MeasureType.SYSTEM_TUNE_UP +_SYSTEM_TUNE_UP_ZONED_MEASURE_TYPE = MeasureType.SYSTEM_TUNE_UP_ZONED # Electricity main-fuel code (Elmhurst → SAP10 Table 12). _ELECTRICITY_FUEL = 30 @@ -149,6 +151,21 @@ _INADEQUATE_BOILER_CONTROL_CODES: frozenset[int] = frozenset( {2101, 2102, 2107, 2108, 2109, 2111} ) +# System tune-up control end-states (SAP 10.2 Table 4e Group 1): the two best +# competing control upgrades offered while KEEPING the existing boiler — +# "standard" (programmer + room thermostat + TRVs, code 2106) and "zone" +# (time-and-temperature zone control, code 2110, type 3). Zone gives more SAP +# uplift for more cost, so the Optimiser steps to it when its extra SAP is +# needed (ADR-0024). +_STANDARD_CONTROL = _FULL_BOILER_CONTROL # 2106 +_ZONE_CONTROL = 2110 +# Controls already providing standard (2106) or better — a standard tune-up +# would be a no-op or a downgrade, so it is not offered to these. +_STANDARD_OR_BETTER_CONTROL_CODES: frozenset[int] = frozenset({2106, 2110, 2112}) +# Controls already providing zone control (type 3) — a zone tune-up is not +# offered to these. +_ZONE_CONTROL_CODES: frozenset[int] = frozenset({2110, 2112}) + # Wet-boiler SAP main_heating_code ranges (SAP 10.2 Table 4a + 4b): gas/oil # boilers 101-141, solid-fuel boilers 151-161, electric boilers 191-196 (held # locally so the generator does not depend on the calculator's internals, @@ -263,11 +280,103 @@ def recommend_heating( if boiler_option is not None: options.append(boiler_option) + options.extend(_system_tune_up_options(epc, products)) + if not options: return None return Recommendation(surface=_HEATING_SURFACE, options=tuple(options)) +def _system_tune_up_options( + epc: EpcPropertyData, products: ProductRepository +) -> list[MeasureOption]: + """The system tune-up options: keep the existing wet boiler but install + better heating controls (standard 2106 and/or zone 2110, as competing + options) and fix the cylinder (jacket when under-insulated, thermostat when + absent). Each control option is offered only when it genuinely improves the + existing controls — never a downgrade or a no-op (ADR-0024).""" + main: MainHeatingDetail = epc.sap_heating.main_heating_details[0] + code: Optional[int] = main.sap_main_heating_code + if code is None or not any(code in r for r in _WET_BOILER_SAP_CODE_RANGES): + return [] + control = main.main_heating_control + control_code: Optional[int] = control if isinstance(control, int) else None + + options: list[MeasureOption] = [] + if control_code not in _STANDARD_OR_BETTER_CONTROL_CODES: + options.append( + _tune_up_option( + epc, + products, + measure_type=_SYSTEM_TUNE_UP_MEASURE_TYPE, + control=_STANDARD_CONTROL, + description=( + "Tune up the heating: install a programmer, room thermostat " + "and TRVs and insulate and thermostat the hot-water cylinder" + ), + ) + ) + if control_code not in _ZONE_CONTROL_CODES: + options.append( + _tune_up_option( + epc, + products, + measure_type=_SYSTEM_TUNE_UP_ZONED_MEASURE_TYPE, + control=_ZONE_CONTROL, + description=( + "Tune up the heating: install time-and-temperature zone " + "control and insulate and thermostat the hot-water cylinder" + ), + ) + ) + return options + + +def _tune_up_option( + epc: EpcPropertyData, + products: ProductRepository, + *, + measure_type: MeasureType, + control: int, + description: str, +) -> MeasureOption: + """One tune-up Option: the existing boiler is kept; only the heating control + and the conditional cylinder fixes change.""" + product = products.get(measure_type) + return MeasureOption( + measure_type=measure_type, + description=description, + overlay=EpcSimulation(heating=_tune_up_overlay(epc, control)), + cost=Cost( + total=product.unit_cost_per_m2, contingency_rate=product.contingency_rate + ), + material_id=product.id, + ) + + +def _tune_up_overlay(epc: EpcPropertyData, control: int) -> HeatingOverlay: + """Build a tune-up end-state: set the heating control to ``control`` and + apply the conditional cylinder fixes (an 80 mm jacket when under-insulated, a + thermostat when absent) — only when the dwelling has a cylinder. The boiler, + fuel and meter are left unchanged (the boiler is kept).""" + sap_heating = epc.sap_heating + jacket_type: Optional[int] = None + jacket_thickness_mm: Optional[int] = None + thermostat: Optional[str] = None + if epc.has_hot_water_cylinder: + if _cylinder_under_insulated(sap_heating.cylinder_insulation_thickness_mm): + jacket_type = _CYLINDER_JACKET_INSULATION_TYPE + jacket_thickness_mm = _MIN_CYLINDER_INSULATION_MM + if sap_heating.cylinder_thermostat != "Y": + thermostat = "Y" + return HeatingOverlay( + main_heating_control=control, + cylinder_insulation_type=jacket_type, + cylinder_insulation_thickness_mm=jacket_thickness_mm, + cylinder_thermostat=thermostat, + ) + + def _boiler_upgrade_option( epc: EpcPropertyData, products: ProductRepository ) -> Optional[MeasureOption]: diff --git a/domain/modelling/measure_type.py b/domain/modelling/measure_type.py index b1c4bd9c..70a52c90 100644 --- a/domain/modelling/measure_type.py +++ b/domain/modelling/measure_type.py @@ -33,4 +33,6 @@ class MeasureType(StrEnum): HIGH_HEAT_RETENTION_STORAGE_HEATERS = "high_heat_retention_storage_heaters" AIR_SOURCE_HEAT_PUMP = "air_source_heat_pump" GAS_BOILER_UPGRADE = "gas_boiler_upgrade" + SYSTEM_TUNE_UP = "system_tune_up" + SYSTEM_TUNE_UP_ZONED = "system_tune_up_zoned" SOLAR_PV = "solar_pv" diff --git a/harness/report.py b/harness/report.py index 002cbd22..632c2b30 100644 --- a/harness/report.py +++ b/harness/report.py @@ -164,6 +164,18 @@ def _triggers_for(epc: EpcPropertyData, measure_type: str) -> dict[str, Any]: "mains_gas": epc.sap_energy_source.mains_gas, "has_hot_water_cylinder": epc.has_hot_water_cylinder, } + if measure_type in ("system_tune_up", "system_tune_up_zoned"): + # heating_recommendation.py offers a tune-up (keep the boiler, upgrade + # the controls + fix the cylinder) to a wet-boiler dwelling whose + # existing control can still be improved. + return { + "sap_main_heating_code": ( + epc.sap_heating.main_heating_details[0].sap_main_heating_code + ), + "main_heating_control": ( + epc.sap_heating.main_heating_details[0].main_heating_control + ), + } return {} diff --git a/harness/sample_catalogue.json b/harness/sample_catalogue.json index e15e4537..02eb24eb 100644 --- a/harness/sample_catalogue.json +++ b/harness/sample_catalogue.json @@ -14,5 +14,7 @@ "high_heat_retention_storage_heaters": { "unit_cost_per_m2": 3500.0 }, "air_source_heat_pump": { "unit_cost_per_m2": 12000.0 }, "gas_boiler_upgrade": { "unit_cost_per_m2": 3000.0 }, + "system_tune_up": { "unit_cost_per_m2": 500.0 }, + "system_tune_up_zoned": { "unit_cost_per_m2": 900.0 }, "solar_pv": { "unit_cost_per_m2": 0.0 } } diff --git a/tests/domain/modelling/fixtures/tune_up_from_2101_001431_before.pdf b/tests/domain/modelling/fixtures/tune_up_from_2101_001431_before.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2d2095939521b99efefe8c3eb16ed4d8182ed35a GIT binary patch literal 67150 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

Jh;0gnrqME~A zygGC)`T#{i9hDY`@gD!J9nsD0q>tKFg!94*^Gwy7RzgW?o!i;9w$yl?W}QcZ?9j+Kr=j~8N-!n>o#1IT32_ihN4Kqx*>Rs?sqnC` zNtrF&SN`su9sKUMVXudVS>mIFWB;2s~Q^-iFZxRvN2MskmUT;TI02L z>F*;P&rK&L#`!-waB3BG2^9an$cY>n=qD2wc$DY6FKjHaC|yXvGKQrH|6xXe|B-fg zQ^4qhG))zYv1Mrqujb-`sgwF1PGM_6D`BsZfy7t&n}ZyAyhGg4xD(b3$BQteu;z!` zTu|c37Ois(k|5?sZD?6D+e^%@1B6_D)SKzD9T<$VD)4U<1{;lT(ob9Z(5hS8_Sm|Dof7r$WVrk>Iq zVWnl6zVT)dyEpO*I=Hwr+tkuDAPIS@sMy}}>PBIXNBO{c~-@_+H_hLftf|uX|R9 zMNe7B28 zmgn8l`r)N+*1qzpiV{gdi)+d!0+a6BX#30ae#t5$kXh!nsp}R;!pLt5;IeXQE9?!S zstTrB;9wYH_>VmvVx~!ULJEYk3PxazpG0G@e^4s7 z#aoO32`Z3Gcv$=eONS_NM^~>zC88$%^sgDH5Or{AeEr0B{TWr?d}Xy)`azQjl8CTK z1`skTXL`J$MVnXDvc%(osuUw?JKDxPLuMTzo2q*UcnEDjf)1`Y+vc^3y6t%|qCoyg z;HkQOEttGYtx8441>H>$oz+mx4J1%&9}s=jCL;AfxMVHOvU}lv0^j})6iF-09aa!r zgb1>cB~vCH7Ro4;JqwA>pdX~sm|_~82oe@2B`z(>t+;z2R0K>& zP*F?ytcd!t+dz~e0p88#ow6Jj5uuI5yQFrxp`7lO(c2Rw!yMbPU z3Y@LlF@d_9(1R84rr}ij>HPI`Wu@J;e-yhAX(i$t&|sLMYk#^^v5sefz$~8<=OTch!2hlSC3yy zbVr%1qX7c;_V!IKx%qWPlA>mptl^k!ooW^Mw%@%}qbuEHNVZ;tO$y#_LxI35;HtWf zl0BQKTqN(Qm0pqk$;ITINJB_XIjoC{!izvcQX=kviB_NMnu1wRY~b78ks%g#MtCIT zXxyTrqOpmw#jW3nl&rCBg+*mBpjP@54`HC~2iMZ@Lq0ax6169?4w}gB0>RSj^oaYR zD`{V45x3bDdG_fvl_C@gw3Y2hPA$o&ctk8LtYK)VQM`0#IuLa~&B_A$8hWo>oeket zBmMo2m77IZG7NaFv|aqNBlLCWoZhJf)ptx1s?56H{4YL|k&$m180W~gz4c?KE;ldr zyD%$lwovYMYm2;|N#3c+4abc3GCso|Ley!Z7B681vYJja^z;W+P`z-8D7+?dmGhZ^+zM*0`_`a%MN0 z8m4s^t`#1Rbi~$DWB4GY2fBBO^mgApe6Z_=-*qg$=DX%$s^P4$4LHiKEu0x&5PB#{ zNewkW7)s@u<$526c+xXIcz;kd@v_;=Bq?UF@OyFvoW-l9^iCfb7^pQ}Cuhf4%r*&q z5Bmeo8PSB7wBwvP`0ufZw4&yUSQ3fjO+|T_=-9$X5s1cN_xJV$*d@fRQAYf0Z#Hr_ z%10SrYk68C(fM*wNm5ZndMjyl#iYfgCEZ_Etmk#XJ8=h;tUbCC0fTj8b60@q@4+lpx>O{Zy`#NAr6Uf| zm;R6tL>S=|fQauT@r;VPq7dz5TWlRRdzoa(U?3{XR3x1K=KR$S$LjGB2QQIzNz~Q6 zht14pXocx4ob`7dTU|j;%7fh_AMu7#6A|H8GgozWT$8W+4tw_c=TzS@W;gLRDXj?> z9!Dha?)p4>X`<7a*y^qiUA=wZ#$er{F8%YZ1g$Gjat2xj#ZOgHbFi$)Czs+Q*+-na z*)--I8k~Jwf+O@P=$41#$!5f8-@T_H1L1)Gc77IXpA8(M<^;R zkJ^bd**>e+5EGgar~B@Guz2<>5u1-w=PF!CKj6Z+*g4WAJxx289me%*`OlyJjHvY1 z!e&Hob@g=xUlxD2%W{nv+c2NMM-kfvHJP4X-pPq$#+cFJvwGica1C)2n`uM^As`_k z6|F77s1%av0#v+|fQG)}^9&9#Pbb)+pgxI!i|>6e)5|T@uS9jPbqowhdFhZ8r9^>? z@jx!E^SeyT)YM=MU^gXY?J6(UqbTx z_npi3KYj$m16#PO{;kn#dnH=zP(*2M4EAP4}^_<7;bO zy}eUY4G8=+{r$X)ycdoR!DL=gP_G0fY~BoYPlX@t?QX4_9Ivd&Py~jMlamvZ5Q}x$ zYpSWJ)cy+mWoB;PV8dsUV&L@%e5tIeE+s`D3vQ?3&)^4=s<6$LSwL8z~(}o6X--FL{4KpleqMFUdnfA+DY1X6+CS^nieGq^)UDW z4qLx}yGq-Ks$b0|T zMOp(b_y`|w^7AZ|-$+B-I_BxvOE+0{ckb-(P-%8TVe1>|g-nxro|q}KlF;EX3_RRN36Y_%M4M)ev^>VFe=FhLySZyn8r^|q%6J=5A zLG*s-+pnUPCMT2S zN-j|sQ?CeXjrTX+5@4gS$9OhuGlF|PB7kzPs;!kM5T7M$)9|5Wd#UmxJza%P$qE#k za2UJFOAc(ndwWt89-CdbD7EBd@N|)ibYC7WH$OKcu@a?2xWlMBA88|}p7?ZxY(`zp z9_L7%>s{g3avOVemfySA;3+I;nTK%dMy>&P8UqJ0iO)E8XAN(#80pDn_C>FD3q2%%GhUbJiY2MHBHm(~(S#8HLVH1Ra85sWU{ zozcfWpbAB|un)OnSikddA z#pR3k3z@<*c!7$JslGv2^iWEM*J2c1$bPuRLRZ5Tvyiw`h=y-w6p?lSxMonLizL3KRGDJU0CP_M6F_4 z0P<^VSJ6=3aqN*GU%Um8qaW zGZxkN09_)Y58XJtyu5PA5ofA9_jTvvv8!!{B1K3a94&d@eOd5bC00G6Gyq`!V9TBv zsrXINPD<529I6bF6OS!Ns1XtZ!>|g6*QXm`u%^z@DVf%qS z2;2yoOVj+0$^{$#_OzHiSrhyGYZjHeu2>0;=4uxXN=i05MRr{4UZztU;df--4JN0y zJca%areM_$rXtd!FMwj1U{S?N=ub==&_`%AGqYf2XT>2r=8FkJ1G3q1=693(NnIbx z$V=C-YD|w1z7)cgT;>zeBLA&Qib9>`0k)RGBfu-h#wsZ(>NFoA?QA5na7CwexVc6) zXI&;(C3Pi)evJ(MQC+TRTb|U4z4EuOA-9=aIo56qN^T-b&sO9(Ps+fXzi%Q~OTLKp!+5vps_Z zc3M)52xekh4~4N?LR2^(V{dJ5O^buP-q3#Q4c+HHElQzx(~hQpV4(7Y-VfiBS^kd) zPX+bt<9YqxUyQt0>}(qbRw7E_)N#qsIS$p&wL~t6Y6ZtE5y%rsNl#sBzg=Oqu_-zk zEuVcqTQ)p9t2Wx&{!6p6r6Awj zETdca+KjeoVr(t{BNiVSW*8O*23AYKOV9`zT_m1A0{ifA7kbkVFd|{RvAt=`$gBe_ zp`-ou^J3=u{=Ts&I`|^+=h@EgE)1_lX^HI+*Z{tSpK)R?QpoAFpAgET#h8@@5Ed5h zh6((z)Fm8RU$nv@blrtvrI$lQCeRVI5U}_Lo+r{6*}JE#C_1wm%CBy<_9;uJJUhd| z?-h`n;mC-#5ISTH-Fv`Vx}mbNz09citQZRwZqsn{O)>RUWKycJ9}Z202u{e5k=R!-;|NIVu2$97qU9?cU~GmgFegT4n8 zcUVg-M2~H_sQ1l`?&7HGx=c)D#r_0Fv~+Z{v!mmZ>`p7yc0;m5)vL~2*B?3k$b5q{ z(#yK4^}s7TebzBT-6Up&siQ|ndsz7SdkJGGED5Sui2(dEf@yqw9H&a>MjXt=wsl!K zx#8hKu!#vFpdD=2vWWh$XsBqG6FDBEh-Gd`@S!uw=W!eLs$X6pPe73L%E8dku+w^0 zAX8YXZd{A73p_m9@Jtyi6OiTpuNENx%aUZ^6D)CZrvHCkyk-067H|Jywut%fEZ#!cA_!abe-t-@ zutgBI2*MUY*dhp91YwIHY!QSlg0Mvpwg|!&LD(V)TLfW?AZ!tYErPH`5Vi=y7X9DI z7CrwG*1v)+V);AfX$V^cVT&Ma5ri#*utgBI2*MUY*dhp91YwIHY!QSlg0Mvpwg|!& zLD(V)TLfW?AZ!tYErPH`5Vi=y7D3n|2wMbUiy&+fgf03X&lYj~bBnkCFk8g>cNT9U zY!QSlg0MvpzeNzgMfMQCMG(J55WhtbzeNzgMG(J55WhtbzeRuZ3;)lj5WhtbzeNzg zMG(J55WhtbzeNzgMG(J5|4;iZ;{4~#)BmvFBDTL{o`$eR5Vi=y7D3n|2wMbUiy&+f zge`)wMG&?K!WKc;A_!XqVT&Ma5ri#*utgBI2*MUY*dhp91YwIHY!QSlg0Mvpwg|!& zLD-`I@oW*-Keu@M53@z=e`oO)!WKc;A_!XqVT&Ma5ri%J24RaJY!QSlg0Mvpwg|!& zLD(V)TLgF9|5REAbhufM#xB`c=ZSOQg|I~swg|!&LD(V)TLfW?AZ*e9(`*qF<3DGg z{)gcrj=y7{hQLJ-xCjClLEs_?Tm*rOAaD@`E`q>C5V!~e7eU}62wVh#iy&|j1TKQW zMG&|M0vAExA_!arfr}t;5dn-l(;|cZo#Q?=) zjzf9qCO5oH;8gJ^_hJhI3)8s8r}`f|mOoy*lay_>6R&TRSY=#Y z6g1lm3>E6`S))&|Igir_yCd9ALZz}lC=>V^}@WryDrU?a6|e|g@kawaMdpbKF&z(eY0I+10*)=wug}$`kskE z#{r*Gxj&;Z;}$RM@;vlG!+TVd6tXSLnC6pl>%jp8VYRKNfGirm|sM~iuCsc z-kW*8%^OuLJT!#Lk5?XGO5@8uBA9@}mNh|a-^Z0nx{nCzLUds&^5On{e~(;cUiq$5 z3KcE`F4|~TQ=x%C*#6X+c`pA{NzGdi4a}9@*ToTbARZ{r?Y5a=G zyb{q|;27cUX4~gWk57+}PgJ+}H$SE_baEv`BRN!3`L%O|jS9s~io}hJ#C3Cpm6G|S zW4U8G?RPKM9-q7y_Qzd*Xo*L1Dkbx3Web5Ntw2(Cl`^&!(yl)>{A#QellV0lbqF?!mftH@Y_TDUpcRIA3mLqe~}8TqcfND_wSG z=hxicgjWsFxk{mEJmTW^`M&5FHk;#8<;ItJyC3!`w9HaGSPyy6IIu@*B8IfwoX@X?{BBK zCT)s!)H1+H@hBwm=;lbb&DHx|mdlx&+3p7>J_&+7_NJVq0 zrU@A3D$Q(9f(5iPrIb?m_=DM05@jleK@}rHWjdLP3h~d+EfK{j8N;QWBN9~Yd3}3z zaDL!aVx^NSDjv|#-zI=LchsWLr_UC*D9e0pnIH$zJ= zPyBO+AhWQN2u!qP{|~;2l`-Sr}*UY#%fT@+@;#Pf<}xk~hmWN@-1*+MEI>a`W`R zs8lTfl1jzI2&q+&TJ=AtRbR7);b3X+cg+WGP|0hOaZ2ub7 zW`?LXWP+mBZH8xz2P4c{~<$BEAU*z)XJCvU}`03WpDb|b1_ppdk0|?UAyPf$msqh z%*4zLmNalMvDaYc;3RzBS=iVJ+1S|s*f}}52-(>=2${H;2w7NI{%r?eW8-A~H(Btt zKjZxw=l}2cS9x$6&*}WJgY#ozWMcaxv*!#sn3@0BpTq26lLZI3V9(c{BeO9w{vr3A z5hu6+f5?Kb{}Jyma(|5nj`JMmVrBhn+Ry3zS%~K&D?9jsz-c`{;9m<5&g0MUA9?=e zg)l#t0lYt#;raNS|DSSy9{)(^`TlcRpW}hU&t-f*{$T_26&( zcRYXPf0zCnP5XzH>~DTw=I<#P)88l=!(a93zo}mw>=6C>*XtKpm%$a3o$-(3a|L@w zHvaeiJ!|uSsv&>Y2yiaXTK;^GgN1{Th2t+Z2b}Al*Vx#Y30WB#|EtzNtNFicJ@emy zB?`L6h71b2cF%UjXWNbr#y|tsAzM(x2&mWcM`2cQnpIcc)1~DdZyY?L7<74yU*KS8t6aL1sj{56Ed}MFa)>y|8-=|#Kp+=R};|ZfOPc%r+H4a#eJG` znaqj&(=~H;`?cxL38y)In%J%jT2%NL&U^`2(!;6iL9<6Y_*@a8YSK8*82cE;T1Nzx z!cb~beu}qbS3$WiDSTr%k^D#{(PK*GKvZ>wmoYdE!Jy;@+NFRbh-2zsO-C#*}tSN$dxsD_Wc5h=`cD z2&ahn5`QeRPp9Yb%QE%KC-r3H-c+;dQ5p@o>s#a054;`G+~m!w@8qI6vw^<^Y6K{z z+kgq7Lh&q!B+d@|M`;U%c4Ob6nQQ6aQJ%X6XB+6}c{VgWh2+=?yhFzMXs67f#wKjl z_tGm;!p$i_2SI5!A1Rdyn_WwY0}$)|{oANHq9HSUU*h-DY{H7eEQC$Cy54=5I7Q*} zJ3Mt^Z;CfqdXFiM?Vq>>j+!)Sl{S8AhmX~_opP2(9x&v}?HXs{4B_C3~`KAC41h@&jT7t-N6nK1Lf$%q&_A7p7=Q$(-f$CHfwc%7)28cRJeSD>jMN9#a; zQuN8Nl$pCLdiNHt@915v%GM_iH!(966R0{F@!4AXeTqeU?LwHI!!=hIsT?Ia*RMo! zxgXACrrDCS)$kZ|K1{voz==e&YyLG$;!~8|Dj<20sbHn$r=UwME0#l87}JX6Z@;iA zu2sV90G0hJ`>@Z=IoPb^_#KN~$#DU7kXKeptjzl#f%u8arB$)|A07L8h^K5uvCY5j z;lvoHB5J-#!&?<#nhY~ zj8HZ{o7~far-l24CyK~p56Q~{2~rOaZr}H$xr_+79s+xdkuTmm^=2cq&}YtVeO?QK z6YxL9+CzNdXmnPvWwO2kB`>CdPMc-GIH40i%(RjtZClLIt!rhM=uM>M{ACq&wSlvH z6FWCGvyyBt236C_2Ulnsg{ddEKYZ?M*MW)V!>F9W%z#zvmr$KP-Fc!Q~Cn_*h6HhGMr;wH7_0;guAbu_X{Ux^GM$)}#2$t`IXU z6ZtBwTzM2dq5m*dH}YL3w97(b)j4(f!-glu%9sMv_z@$l;Nemvqh4!A1xB?%B$`Dl z?UJB&VmNyqHDj7$GsAZh5(#Gvbb5oZQ^D`;lTKMm06*~tIiB#RI#f3)FHPVRV>OEzW;D)?Y)3u;8{w!F%Hr;2dE%8OtKD4vZ> zS;Dg6o0fvv+BLOWlCh#@;%+T7^x|VBJw~f9VLyYQYZ|Jq&vft-82Q|7_BlzGs{2@a zJ(B!7nm$kKr48=nVFJ)QN%VFPR-n-=w9Ph0em(75v0(8*Stin;MwPm}uHk%rvB*DY zN)1(^Wx!bI5IU_BMzU}8f;5I=#k_UKZuaTiDfjvhkg(2>aBS28klJegcGuaNk)*~Q+jD&MwmOS%VSPLeN2aY|^wcwDct^?Z0(zmrL> z08c#+OCq%qixrJ-6@>#bJrx0(ZXx1Qq-S)iuNC)v`tPulk}Haet9?(P&IMl zEBwPTwUU(!S$ETe2c68U8Gz;|F8Tn01f_>BB?DK|I zY27?F=L?r)qNaE}zxJ>(+?yBhN74R${q*1Pia)r)Kj9Ua1;8J?0tEOM+5aoA__NLa zpLqozA5icwydqzJ7PbPW^q_{)Ug&(YHr_CUYJR(-yU01MbKQi?3@k52Jk&~SJn`Rm|=jR1DFm9 zLBw?^CeuM}icT*sT5`9)Pm(~L z6d5&{NjZG8fC_y3)`NsFt>XBwL#Vel=Su3L$M>E{_)++<^t23`139o4-{Q2(3*No! zD_=ao9v$1`=a&*^y@6m>R8P9~n60CLncO1tt^`_5R>56*8d9y%Y2>ZZjZ`Sp+)Rpq z-f9x2$OYI{*4Z!9dq+1i3Fg~JvNCb*R1+05lBopZJhWD>N$#LLY#9W*Z9eMF6|@$X zHI9#p?0?DSMWKyqNQ+%lgQjp#4?-8pXieyxF@7(pt(SFLp&4QABPh>Zq?<42c%^(l)GPjIC_dC*rv4LhG z)kBU`xN*R=>BTDZw^uH&4So1z(@G!7~-SkGb_%$reTET-bwZ>dtAi~Ema^2O)K<{Di z2hFdCLTJ`wd6*p!3$eb}E?tubLFQAe<#(WmqOFB4(O$LATlzCZRb}2{Xy#^~6l0nx z@`iP@N8~f)4O<@gy9XB&FFj<2Hh8HTE2FhQL#*k2X9~U8=tsOg+_#0kSex49DC67q z2(9%uLpr7=H_LUvsIo{8{H>00!sjHE^KbN#DB|uDod_qa?F&S=8z&enc0F^_fzDco zsUk|II^=9F$!4aHg+E$siip*^|E-61NNDDgDfqhq!U7__hq9$NoeRtpI6wwHZ7Y*^ zuMpMJeF^=I=7l%KN*j3x4Y^mM1RsY#v6&dlG{cn|x1Mq}shiDhYhGCUOt?auzv?31 zr6aYpxA?G2X9u)>pmoh4I|bKVG9b*zv{oXQHIPk5ac$#=405eR!2OMwzww(|KzE18 z?5)FTkqI%N(=i*)C(C24L8>n;^Y{r^)Y1~lL!^iPa;lGvqUKX`^b=&t9-P`GCx2`x zo^R(@ac1pNs#EbV1SBp=v$*l;=sBlu4&Jn!?m-Cc#zid07EM;&bKtO-Q;oM`Q_cCD z&vs<^8wBTjd=kn!!xp*E>ZILDE~sa;eMI%GhWqv7#ANol(*$w03xIb|3zb%~f5Ix! zexoZhok~XYrT*F4nZxJYLQlIr*=S;6ilZ`b<*IV>nQ3jVyc&BmMa!IXG%N*CiKq%F zUO&1h4@e^kW+Z$~M;+g;zDt>Bq-Ct_oqeB;s@dPVbYCpSHOyw!rd~IS*+9}ODDnex z*k{zv>{Y@F{gW}py-Dt@3~u`!(D!%?3+T!!GpE^3m|rM5bgmDyLvqJyyhHJ!>B3gc zmV}9nl3@74+ZPc$*!S^s<^^Z=`CBoU+2Y(XWlY(hB~Bc5nph8@jy|9KkaIorX~#xd_IW)Ozu!RB@?x$bP_(09P{2JR16O>tK1;BUqS}lqQR9+IMSK`5 z!(G?al4Fl#r_`5uGK`C{R7(kDp`_AJux&LMiHp+JCQ9wFm5Yt8={ZrCMe}aKSc49@&jncO7iu&=F1U7uS7f93Zl2U{ z<3u1_5pJ`NwU5LaNGO7Ztsqd=o*~c1h%`?Hi4iXaLzivSrTlK()vS{!z<&Nb*p`_P zhDBnLzo++@-lZSVWIz$yNHVCaJ)OJ2B&l4qX3eSeT9v}kHX%9i$4&jUma`#?VXaKm z_!iK=Toao5!0UlxcQ`^5dFs(aFI;13F10_zm1tQ;2FVyTX?A%ILl^@SxBaS} z6+at(RT57ZhZhP`9Y0eOk($q5%}wzkkhrMQx2kaUWv{xEg7mV~Mr4mS6n0x_v~^ww z!!)1)0dme>CTH22dgaU11T;>s^pT`w`t1Jr-f7P=DoPf2vsjnU4WMLVxY^)acGSuYk!he5_w7`1X{C{MLmgzn%@k z98r)!Ed@Q6sv<$|6p8+78?aOu2@=bQYSv}II@yS)#d#UT z*ia3?$I-R6nI!ci|5*N!n$wm6yX&iUzt@KgxbwN`dD5J2ElKmnWJ@D@BxG52PM?GQEX-kBCRdvu;Y zfX`jl99P5@wZ>3(R1>dfc%S*w?BI=nNfYU#Tk(f`RWlOOYBsXV_f=r;KjFu_Oc8`i zVwslsJ*&OuMa{^)486yZ`ebO*@X)VE4rm)A1&82c-7E*&ksRMe`Z2VH>8ATkNIv!( z-S@~IQT1Af2#}k9O1f_3U2k~U6fH=PI$N6W&JCAbYRpwo%~r%)Ej;dreULpL(6^U) zqqQ2QVj@G$+*c&V@l`o~aGY)K@KCRt4QIjFv@Sw9gZg_WG}>dXGv*6k*ex}W@P{@XAy*I>T(O@xladQ7Y!(!F0 za`pEZx=NHE`c5BywWb~((e6DSwP9Jh;U(v==Yi|BHyBqw4Fm|JecY2&h$cxMFHz=v z?%5O90Kz7#oLPmQ-1iD|_bIV)$Vhe%Eq*47lkH3%dm8;I^R2<%d-ujsrHs+={6rsa`ZhcQc|9ozGVwCsvyPE@Kk9L=yV z2f5-G<}d{P8_}F?YzBt1U6!edY3z!#RD)QPj@UlfWiFJSU-B{IzOhjiUuOaTM$Q8j zHq%TlH}|Sz`C3uEjNn+yD4gkFHiZ51F!waa?kndL!S|(Aa_-eB%y9Ubjw`K1XGh+a z-f$N&K2t4$k*KAJ5&Cktre^!lWMl%^#a%zIsiFLJXC`mgsodeWO~LVVA46xNh$E^; z1_zGA8k}1*YkCoUDs&%(*zfK?MwP7-IO!lzG6FP^v?nPeJYA4nx%5`~%vAh;+2&-O>{KAoP2q)#` zxzz`i6ne|4hVAuJ8NRAFy&GBZ>@>s^% zl40iLmrE>z{EvM9rk-5UW&fLc@<&bhC-npj_+3okQNYNhKjjH^j0qa>yW1LbBnk#{Gfrff?W_2TskU#gb#tI+up zCmrD@-_^t3*GaoN@yq~QXY@PrDY`0#0>wcaW+!b-SMb5iCI7bZEh)v(3m?i-acMtP z)3=$eWon+Fk4JL%2F&;6XlIsGh0sV+thad=#-Yyz)0w&-*LyQU&d5=`FQ1y-if-qX z@wF3)lxC!k@)|2BD%5Xt5>GA43GX{|L{Btk?ZgFK2hEkT6V;(YY?Dsy&=#KQtkg`U zLSMuZCUE+!v??1u<8KP&?q$LkXum>8R$`7aGw7CToF8qF#O*;8aNO%}iM>$`5zo2{ zfA((Dn~?%9De0&Vel|;-U$Ss?c77S6)Y*39Yhv@0>W~z|gF9$xcG;+8BmUEPsxBs* ziyJ-NAGkt}~_HWBacKY5y+N+d&cLp718 zU{Go-vaQL?{E2H~CEc}D)>7*J1A)-btM#?cjhoUfhE8!Jw~ zw_>#Eh%nqn_P+VF$Q#aW)tAIzJTn#ZoO61qxm9|&#Z|0kim%Ea=gDd~%1OeJ{9S9p z8`Ujwoy2%YB}xWpVtf;KPgRm^v%DGmkePzR{p0xd>&``fZ6w%Zg>1&v!7tGBLGLeb z62?-2pC$R?b27+@>Z*>@aHg86rEjBo%H6*dOxnHJuj@uJnczPvqxc%uw%Ju6Jws?uSfAeCyuS5*5m81WkU8>vy_Wv3hK^5Oc0_i8ZP!c^B- zz#TlC*rv*CblH4*oy*SCq9?iK?+3%iW6UL#=x85JPqq0a($vc7>*v+2-KO{wAf1C% zFLQ6(s8l|xy$FW1`pVLEB zOpGUqSJNj?I)&>mKqE1!qBUQDJ?UUc#ByvI`Gz_%N@C*d>1XjAHTwHWYF4hKgf;#p( z=2k{@aymu^b_9&zn+iNU2A29@5%}k`{~-E@2%VsngQYzIGo7S~zMVQF{c{8Y#y{c_ zFf#w!8SC>w^RLM;{pV!9$m*IJ=-JaLI_TOzmq6SCoHZT5MBm<+fRUb_PRzi>$k?8M zfr%NMm${X#qP32m0iBS6qlun@f~WwUfQh}GoPn*Nm4&sHr2)7s>~u0Z7T|Q~=|oJ- z?G0?{M9g*U4TKEztn>}&qzo*LzzMUkGP3jV*xB0}=vcsi@jujrvr`g{e#}9-8Z2l1 zao`-_fNGAqZgUWdH`vp4;N1H~n@>QX5?LP)SJ(c909GI|0$%28yqy-cS6Ne&rbUy@ z89=p71?8!ISC1Erm%{$9c_)j@zF#Y=7~&=M<@)}It#h?UhU?K~^U_F>$*PeExfM4w zFhO9OR=&X<#1bXebcn-&Yxz|G`?%_jLJ$TpsOj)K2d>IsD=@0w{vu^SH1~(^0N zydc3>`aG05eFe>id7nUZNxIFz))s367msxdz|^Ys%I4f0tjljkuYm2&HPHO&O$Mde zX6w@4o<~Tv13O0H;Xypd`SgD6`e|KysfWGPuw!uU-h4sp9dOtSWOWiYIkhU6d1}%+7|E;htIP2nLtc)7wwULsk~qmt{QlhMrn@f@ z-H&ogq;{|EG|JIxYUok=N$kVJwsXsn1EETNI~nnLXv)OY=YBbG$A#S5O@>*>FxcI6 zueYDSO@g~@_IQs~*HlCMA-b1NYe<3{4;kA}#^GSTBQ9*HBsNKmRPqYDMb2EM-=1Bg z?#}${o6&_Qu8?j^i(__R^9X8_>3i!Y+n+e8;6Ko~AY9v*y;Ol3ZKwT&*w5Ghg_kG= z4@l8cDrWY!4E32BDlkKik6I3Kn$ewKH^Gald~m(v?Cnv^PY)`3+^s)78SjwLH!~s& zxn$6>c0_KyGdB%TxZ8Q>xwzGR`Q@PfJgQY`5z%B7O(sEQ$$6Zq{=$^aHxifN`?$#s zhnE(JG*dDoRQen1Z9&WKEcR+%f|=R-9(0%2O`oT&0mtqs_W3379?{)u6nwo8w;h<9 zqE8wQolm8grKNP=tyEdF@^eBQNYc>EzoO)3^7QjXpp0PWPCr2pm4evDF9zv;Q{YH| zps-X|F-hEStJJqqPWITAzc=~3IdjQtDWD4@Wxj?ze~Y)c#ER*_o5@LWvIp2b3m#wI z$8lWqCUa^p9uGWBbS3(bLe*lzP}yK-{lc<$JtT^S1Ev4{Jj!@12Z(%Az#4i}8MxkD zwg1!?H;!l4KFP^pL0wSJJbM3pU-(tOcsteIFT#2W&*qBV3=Z`sfn?8W+(MJ0JFYh% z%6ZSh^2gCV8Y;({n&ARma^9D7i6lV6QuS$k#pCb{wLIsJreSd?96~! zlC!t&_7!g$CdT*Fm}{Efhpgh$&t6=8 zpgs_aY9J%!>?Qrq+3j(i&O>Jg$KHWC`JnPrOgmsv8 z#B2PL7<5|J77ef)pfWeO@^QnF2++V>BoWCbd9**|<13B<473)i0GJF*lwZXI5{2$L zPd%UPYWm8vDrcUc#^j&UwTQgJtBr%dNOFM`{Nq!YrMS;QfXYcCNg&Gwm-EFX zhpJN9Jt~dg9v0CljYHD=6H~|E)l1feLrK*N{)1G7J6Dz57Qi9v!-m_=oLD*m@t%#m zF7NCMu*OZb>wIrw0hR4<@=4a3w{T}(QMJBm{OYQjpa*V>XJV7!Kx?O(&8u=1l^+;^ zC-C2eGi@if;?UHR6>RqPo@!(174n5_`D#7vf&9GFS|~WjgD?&G^0%2`kGYD&3WkOq zR4X@|#ka?XPSt^GY11>f7u{7Z-DNn7?&Es>5j^*mJ&xPRyLUCiPm~Wpm%{UYAtg!7 z0krZT;U*pEXmN9XW9*re7tbooP6j&yApQ>b|Uv$N?+gjVlG zgLH<@D0P<;pIlVPxF>S{CNxB_qBBUXI)RJI%YLnz_Bj&8Gu2qck6Y zCC;h4JRv~Vfw&Mf7>e32>l%E!zFoHwZ+&Du(F0 zrxN(-gjQ7ELtOP2{ehHnmu{r_FoxToMS7oV%LtKx7QO2faI-g6ycVC{+KSW3&7wdH z^0X-BZiv^vNQVPG9y`VWsR{*ms~Ps+G%SV7u=c@DwAb*eDE;_-I&ljF&+MoPINeqr z=QK`;Ruj{jWZ^G|I?NvPF9*f~?KCTTe;sSt&Nc02q#JzrMu=PG!0~FJxW5LU!9%-F z-W316FTKh8cW1M?tcPv_UWVs)2P3-C+{(5zsG#U2(?k@)P5a71jlu<1^13HJikA}& z=`>9p<`;Jv7m^WxYs5QtW6yXe8%DmGVWtw19P{5Lh7L7XHD0AtwKYCx!PX$F(aH{b zyX^TQBau;MFDLgX4&)&j|3|V1#JgeWk$l4*Y%S#B;Sgr7R(g6S*bl0_f>a8}`k!I5 z?EFejOc^Tsv4+d!Kg~*suyJ70l7OP!_RCJ!rh4O9@KdF2h~CCDp7lrh#%Fq^5juP5 zi(!rQ&0Gwo2n96VmSoR~;)nMnerha`aJ~fc>oX;bAA4)oHfGE*uYx<#4BN-DBs3m3 z>jSll5rTdq(9)nZmYaSD)r4u>i((DcIqHKdGvt3*NMAo7;3un(E?4p*g7A~Ty|-+u8td#ULM!#K zw7DIPylAkRuw7hD+uQFJotivZohu{XrCzwHUz0Aq_yWvY)@Ja=jMX;<xiJZg+d! zRblk;z+zRwf`w6#renLmGo}KLyVW+B?y#yHO=mv_4s^0ARXlq9>R=kwb8U4>ZZh9Q zm`BxYl>lh#Q91agvqHt8vufzCMA+FNG~QN>a(1R8>==5q=n$v4zjD%<6$S1G!JXjo zWA`E7{^3EKY+-MH2dv@t#r=rU_C%SwN=dr4e%!-tzn^ZaeiWlOlWBndS4Vg!lE82P&u@fe_1VD^?zl5r zF7IZQR2pDKL5+TK@S-S>yxf_p@a68f#J#Wd%|y}}Wqf2w*t#=GrpDDME@n~ zv6n)XHQ71u00I1k?r?=e4!cy}s*$D@=uV1BR!5fiIg9}uq$OB;sh|&j7xQAo?c#N$ zujF;5Z~H+X+QCb1D?c&o*#C-2;yUMKmfPXyMj zfhEi?@j$6C^}?=cyh4xtVIZAd7lrkv;K#HTHgmCBJP!)3b;0hdyznubdcG-atx@sF z7n}lg5-mE1&fVD-8_;)o+4J+RTh-)VN)gg>ebEawELJE-NBM_J(j1&frN9xpds`dV z1P%KA-Mqds>}59K@5aoxUu7Q0gnMdk8&+vkct1wWYY=wn^WSORF7jnKjKzgXtMDX_ z7j$FZGUDhbq%$23yg5)J&%iQ#2zg|529ITsIFZ-W#-}fxhGUgyGq$}0KDEk_WbV6{ zvHO22_G(le@ie=yGEZoq@@)wljFrKPOTcT=%zF(39m;cM+bo8ioGcBCXv*0ro1n7A z!us?pKA>@Qh9-{4^p*QKi~IxyO==g;liUn(AstMxi^+q!ZH%zq*U5l% zP*CREZ9MZ8X9Ik=Ier41c}x8FRF)p@%|F~MlTNey&fra(tZ`u<^qf6c_fR6hO$y3L zAf|)<<0X7Lb`4h-Xr~|?6L?69w!WH|U+^&W;L8MxcNl`HzB~;_rsCt!YpuXU#}e%* z4qcvfUW1~qd_quKE+bwl$62P<&=whlbzwGiuI`qtGfX>1cC zNq5Zifsdsp0eDO90C(K~R9XhKzgdsMF4Pff30dpbC;$s7_-=N5uIoQQ_q zqgX+;@~@b5_82CX9vTF2QxC&$oXBc58UX^+gfUBGSl8|b$K)%y3O|GH(GbPY4EbCr z=dW-P5~Un&tsCgDZ74o=N;nUqzD?Z(^_}fWxlD>C1be>2g?HgE$z0Cvl()0x^tB0m z%FD)5A%Z(*g5&k9{FS}OFEXYz@Uc3Fcm0$-*ykS6q@Ax1I}!yn8g>?=NHWa>Dj~VN zGY0aA6n^{6-;Q9(wadRv)^ulV?;u}?h2eDnBtQMedx7of{o0#d7~Ic7au_V45&pS_-=Nke(-nQQrEbfQTroQ7oi{uvnYlw-8yC1_pM z3Ic1HTtpN`_-^4o=X*>nnv_DD-RNtR#|V;RC$k31PLr)Tnx}?>6Vbd_s^yVJ>EJQ7 zY+RwY;f~oJ;ioY|;tVgRJSDE&rKv@}vFhs)%I|U8%tTT-5q`Oeb*jK9Hgne8eCx3y zDV;u#AI(|UMwGNijSu>G^E@fZaCr9q7_oqj6@!u8q4wWYN0);fotkqQR8p>u_Uf~+ z7*yL8gz4DA#%jxeCzUHf^2&6;*nF0+W!g^)++f|tYDE}TqBfHztC;5{! zX8}tp`|IgQKWCmy|HB)}%b`dPwU^T3x~LURM3_EE1_C_F-|My4y3Wm_bF|muc14(m z2rA7gFPyvQQgS748aLp(sG>jI8WV-m(e`x)I+Kv%L2nSqm!w3E>)Mth@)gH^kXb{1 zt-p7J$iSM*#_df?Rqf&kNq zN>SCf8=ky!`%)x1m}?I3n7I+Irs3k*(Gn&01n(8klx+&B`g1?=u@oI11Pn*y_rVce zI9@C640ibGyEru1k4RIgbE8F1y*hGqnQLfc!)MQ=e+Q%n{d}NHX`NrkG|NbKp49t-ofj#>2y&l#Z(Qd= zRFnqf1|{tk-J`nf`&30aMDy)ucj*lL{Mm&YBb<2>e9M1Yy79Ua)}cV3IU`y3`oILI`5_tUW z2ZKnf0?WtNKNpJv>T<2Cgd&{c{sN53S#h^g9rVKfh$l=NLU@%WEGL^yiopVB8nB~& zE9?%M9FjhzCjoUhHo?Pg#La{g%BP+R}y(6VMxo`$APIkd0 z&ec6mNSf2^78RjTfq*Ag;|N^mChz;DsqJIELQSkA2P7ep{klWDCe@+XZGx$E6~5nD zoLlvX!ucxx?QPf;iFOIU%{TxvI(?5sN*(XPywTEJL_Ejw0PYV~<7V)GdD|2u_|j!>$2MQ)U+@H4g%!!s{TA{JS|EFD z>fp*dhi@Yvl|*(~)i7{t&j5(i0YldU!p+guSPZnlrUhNz0W$9PH-b5XoVL$X7G__; zzQ9u=A4|d9k@o`MbXOt*6P#m)VrDAI6sqv_W~&6uZmD=^bK!d^_7JCnc0X2kyoj|s z;y#6QNEYLJTe`dB0|QOfC%U;5)GLopeiHwZWDE|Kz&`SI)h{PUKHv6PjtL@4*O6@y z0#(%Q5>G5*41V=^qw7dLF5AF0{>=!6S%PY^imAD z@dZ5Cw*40~@L#Ol&qnM2VCDYrny0~*>VM2U&G2{3(`?Kv^#92`4Qu~lI&L!EVm4N~ z(yfUj$Z5KnQzlhEB4$S6fZZ~Bfn*?_M%BOh8eXN`NgksSzDS^gt=zjAo%l-|3>p+C zfBCoEna1*jcW^IXBEA{N3Sqv!_Z38b9DHK3dvd#efQkC{3K|}RTrQK(`@aS{e1nqm z)I*AyI5iRAQE=EFW>vXW5UAEUHQ&OcAgd$@y?!lNVPPu1NY+Ru>DcfY<0I-qdJ{Jb zG39YkL;DkRx|a_NMrBh&`9xfH`8ES1BO^D_+6C6a&P{{ZN^Bc%(xe${%V_n)Wp;UB zMR_?rJ3ISlMjl4y^e(31or!_{TFJw4iH(dk*{wtSL-GSGPrk2Ml3{?86`H>n1RB%gGo%f2PEM4-5?4?h!)bhQ?OsrTl1bc%{01HM_=C zww{vxa=IJyJAzLKX?b1U8!~ok7>(7L6D6gAzKxF#bpnPNND7v`G!^H}8&enKqcVW_ zj`a46i>ev8G96=QV+VmQ< zfB$WEt8bcFVa(Oz4ffHWN05hDkL}|q4jfCsTT)RLAsk3Vw1-p_yMsei@1{2xW=fu_ zb~${kG~*{PO=8jFZm{CaWMW1}0;`H26~-b~UQNRdYl|AkM#_W{jb!P^PNByl{$MqX zpEjUC9X!Kcp&<{0qiPWST`9?)X0RHwNNszvU}_F75p;LtTL6?ufYne$kk1}Z=tc{G zb*E3ms`5>7+*E18cpgK|X#Io}pU$+7gM+e&MyZ{@1~%E1-lhQEdj;{rxVgNzF+KJl z%uN&5{5nqj4cihhOtnWRus8>*vbpwV*l;`WMbOwu3q=9E@qlfoTNUyHqQRk|z7NHX z@>w&Ox6>`_%Qs$_0{AWf=V{Z+F@=U-l2A*Aza8dVzS`F>=Liy%H5a=Nu7Kftn9SD$5Jd3bopoZ8tbM6AxYD!qVr zVa0s1OS_J%JJy`i-@H%-ylGzly+@kIJ3%ow%@|+(Q2PSVQeJMoJ?z1jFq(aSel95~ zdEJ=V9KN}^8Naoq#@g6Y7Cy4Q+~9yvv3gr*ZEvH2@x|>M@DAhVlPu*-h0jaT>13@5 z$_#p%yQ0_oMYEe0X`P4){xE^g4Q`>~p-ab=bsA;WdCCGB_YbtjAU#Jzm{8LV>&QJ* zGj(;f%xdjA5fPDGO&vnsj`D*HCbvQT+odSVK=;lRl%#|wAK(MgOrC1pG5mFx&7 z+TWuC`MgrJL!IZVYr;kI_Jvxz4~dhhI)H1h&9$fg7MfUe>c^b_-ApH2?IBiMaobnB z;c%Hxou957OX9b%&;{2MKd>D+@h^WmQ5y=C{=vvp`(u)ekD(Tv?t`7*=*wTz!DY-2FAy)$1zazbW{cF7yym>H0f>aPCNetrFB&|y7v zFrZ(4pp4sX&t5@y+z|`Dz9k%RjaE3h@QWDrO&5>NyR!1!^GcDi7N{1|Uz}plj_r=n zEG;xwU+LcF5=Bc6fmq)U-^#1@w_c+EJl#< zv|N*EjkHpJEY#{WGw7&hNb4tT-9OY)kA3PWy5%rY2$~3~>hIOAhB0KHw?@DK#p;PV z`@chN&lCU>zSV6B8}MhskPe|`^DNf7jgUKL>D-=ZM6#fKnl9TD4}t|(7~mAe9QNYX zp;OTZC^E{()L4x7AK%&%-rP=_`9u4oqgNiqg#yZ-e)2NeIju1-xH_s#ZH6RRSI;D- z#9_uUDqsPIM+PEV&@kU(d9Kf0Y8cYu#7e22HSO)~^=s>Egax-?xG-$phG~#0K9(FE z9fe*Xx>MHAUe#O;hDxnw%Gu`nPJ2_Kz{3Q2k&%%}N=l#xpUt^MbG<3HwM(4N24xQy za{Qc_8>js3=x&ZU2GHU6&Z`$*7@8T2ifUO}lHt)}XD`epT}GIjpKHTq1d6*81x}RH zQ|n$X%TX;kxS zXyv@}bL;Blb-N9HJv1CABWj38W5L!ywd8ZblIK$0)PzX1Yiyc@kz9==xfMD-NB1bO5EAv1==z7NRM6f054Qg|J;(b3=<$*SPUE;j>%dD33gBOTDrzRF(BfOAsb8}tA z=wpEc=H=(ESXs$hRZke5#_O2&ScXZ5%APoLVFa7Hxj1KI^r_OP6f*I|E!euMCAWlI zYFeaiycxv)8F2+2R9u>6VqxN+h&)wPY-e%xrZK=GvpBF3=2W|1&d5ERv^@1E;zuGB zYIT0gk2kv;E6$tao57W5YaQ7KgVZ&@CK~a-r~*mZb5a4*nw|MFu=AzYijY2|l(Y;Cbb4>ScG?Dkvw@B&GO|X!`|QuQa>=p)MMXvI zVc6B;%5lcNcAE44!7dC@S}5o&@1JkJj;^5Uz3#-}2xzOnzPb_+5DQoO@m;6u-7X?Y zo>yzzhnG5;`%0_Iik}KvU6SSTjeBmR>@Lsy#j6cLrWw~JE?aEzBfrUj%Sxqfur~xM z%9yGFgQ19FKlV5{IHDWnep0>pIDgOG=BT<->@WT~2vl^B>m49&&Q_bVs9JbKqcO3Nx^3)LjRZ!InX zM6Y}422Df5QON={@CG;{%Xt{&_6#UrW#F5Wc>E5TRs?APC7C=-)Aced*@Q`qK1<^t2#?mK@W`f6>AFe3ryiO ze~aNSMgfuv3yr&A>J%pG?EWcMiKsz4{c8p)SPfhnA77DOKYEon-ELll1?OwQ@z<0a@MNkWJh86@B zA%d)>NtB3(1=0(p&w``UX-B9&d32_*>Hd@vmysHum|_^62ow}0CMqq;t+;z2PykGb zQIJgrTuS!t74$i8syvmrbu!_*d7i~@p88&VYGvZEW)+j|rtI$R_NI^g;;iyUX9K+i z6*ybHV+?gSp$jY8L&dIG<@D`KWu@)3UnHvlaV6p#&|s*6i@)aZE-6XoLEueI*m24ndm5;Y*Fry}P(q8r1v<6+P~di(-?hh50&*18n(nwf+Na zQN^CK6z5|Yo0Nc@&!kO7r?j-%6cC3=$eT+9^F16(#GiD~f(oaOk(HimJW+ z!%v)Vn*_efDJV(Bdxrx0@8)ZJioqRHfGZ4RQ-`W@T%5!((TkA}_#XmAay_?7s1~6; zg>UB%w=t`1+|*O{JWtZ8Qp1XK+A%*<+4>))8fnao;M@K_ut)*%QRZH!@jO+pW+32* zYh^H_LYbJEGW@VpY7OCTE53h)k?RNecI@+NL_JxRd=1k?gWC7>)TSIE{DVXM)#JAk zol(Y`C;*?Gon5nYZhn1{xUlIZa~LK|mukgFo9~_~QI)PzpSE6vPV(PwLxI35;G(jP zk~N#4R3z)6nO2b{?`-@|s4=*<9M)M`?nM9rF(Ie_M4R_@ZNaPuHt_Awks&5ldUzz{ zDBPl=qOpmw#jW3nYLmn2`64fV?PO6BW0{+tLwD9|( zD@h+EA=lXzS=Q-PsWSBpC3TskzNF9GqCCyF2LCoKGYi?`@!%$jCUU5WM)viTYnOs;R5}be^2I=d67UhTb>w${_A^ zZU3=ra(9-nT>Z3$H^*S2K-g?}dd2pLQ|zRoT!Pv4H9mk;o2x<7qW0{|$1J4uDZ3^nzg=8}`VAP{%bFGzg3oM6 zQ$jTl!!*Ofkd9bdYYiSGbV2vd5ngV)hYz+r@VgGh*F4u;47KdFHvUIhb%itI3jz-% z$tfXb2SX_wvmEb35l?!@2k#GxCSJC98Ye~%7Jg5vfHQx!l-A`90|T|Do z=WchvJ|i6el6ssy=i_@ULe0pzBBlhQI1^zm1{#*IQ3S$q*!{gdK2|YNE0htxx|@yM zjq*|Y*P0#{NHjhi6yg+Q5nhU#-O;JhsfqWO73+E3@Q$2;rQr>>&|$AS;0`3jW!g1~ zd&u~*ObUwx(>ekqx3x4ih4ti0oAr?h0m3uzv)q?W3@>!MHvaHEzScZBh z2KpB|#FpE-M&Do|suad+Qi1l~7OhDqr6k5Je>iD=Z#OZ~sYpP8cS%b_kvBX3MFFG$ zqnV~jYmeQ;()adb#P-2Ps2W8P>#(hzO$f`x!?t>S#Kui%RT6nM z?`}P_8B$>~3upCR+eU|O2kJb8MJi}8-C1L(2l=LLO&qBP&V4i?XTC1CTgYhQ&4==on56+1;Zr=@D;vckB0E3c~ZqerE+ z5;P@ztD~pG|FZbIZKg~3*oN8sJ&MRKsM+N7@=it+Guo8qBeU1t2FDO5k*RuQAOaE+ zQqkHHjB+7~4nWyc5oq8eI!|XG{d9sI0_qd>dcyp9Ue;`08%Nxn`y_hzt~RYj5}xzx*_myCl4yKz5oG~QrNB_l zu2w`k=Y9O9jejmtzP4t6YmE&FIhXa$@i71mGx{vJFO25QX7xet@YegaAsNQm9(Td> zvZe@!lij)o+Th^eg}sy0$>#vSj!9)@w}XU)c&OK})7(A1w3dC~$7;nEX20Ewt=l5J z==-XTr_<;@$iu=iIk7k~Im^PuXpbQe*+aq@<)opNK@d z?KD)CmFs>5{4zB&YqaJuPS*E)1in;KQIn9MjRCjQ@MrJ?iPhMq%S<5G4T6WCoR09s zQ&b|L{eUFP8b*pfiiWw*(;(pf-hp4A!02bkeH9y>sH}8PXX8Yvtrdj!F8)Lo1Vy{@ z?6NXTdwUErnNV3JWtH9C9bikL_6c+X5+b{iu5oNy95?y9RINmoI+ zX#FzA&iKZG8Go+=c;_WY@FG4S3eZAM5>@%s|lJU4Q?H^fb0gBR^ zo`<1gTy)a|of9LyY|QLRl?orZU@b6~Ti<0C*9V!nsW(P*xj|cR5=`bd=|KOW$UDjA zJl@`801Zf%w9b0nCwI?VysqRChTAjSAC1ooj58P=AJ@&bnwdYpR%N!Su$e9c3Qv?p zss+;eo^QX3621Kyw$HXg6gMa#fNod*Bjz3f2sQ_O9k0XKp^16_cy!A$J_99ya5OoY zBvW#Ux|niBP-nEi@fIH&g*Dovaho38>k$H!a#d_Bg@GTLGB*t#O176OKhx4wXqT)& zu?U8;D!*jI2E4Z;M&YvFg^N^8N&-(8DTw!F;d1kH(-SIDIt4ood-9PsavF$EM@VMW zRPAt%)HvQ1ek-@OLudNEdkvn#vX{9FrflTugQqcYpcnXb$2WEC{zWd8Vpe(2gcc7+J@ zS^{`xWojGjpHzS5K@b8T^6LJc*|SEq znV>seUP?oqXI0u%f*Xv05j~=zq7b}Iux^U~qOE@2<-17f!uQmx88oNfDSXfO_bs{W z51Hptys9mB-#qOVC-g=IcEg9ijW)V9aEiU)N1pIIkv^NzSte+W(|X@8nhY3|A0x!} zA?*7p;e91y9fj@&RmF(+Aebw+%%C2xkZf7AEPIN0#>3 zPS^l{ILhwszV|u_`VxrtZm|nJc#JPVxq4JW$@XMM8q(tYH~mXfv{dIu!>gGuWhf}A zV_TiSYQ2yuJcH+}=$z^sghdY_r%OuhS|S~H)8W>x<7Q|d?DJk#+gBhk0_Xs3Y%C3| zCp@{g*1f7#_q#vuxL<(BHA|J8T#WVg%^-O!C5ELHaLY;zXBonqmnLto6nkN=;~%+- zX%5J*Qw%AIb@N}0mooLSgk>=Oj(M=-Ph}MbV1EPeP_isQymz*V;2m5`4Sp>_q(qPKC473N96hd%pWXS zGb0th$$EX3yavuvrm2@ar%xyPW~F6=N(`pw)Mm*Sb_L*S+KT<^oQ(^l~sqf2PVrT%3arQyfUjJv_4 zl-8$^-$7)|T0sS{sRMclO{S*i%&g2f1jjtlfoMP$TlV}OQeTPd zLn&FwT4wd>5rUTjnBvPkLYkz%Rfth2Gu^?~GI#`dg_sycMFs7aBcz>;1SXEC)J|8I zh?dODc+14@_>gZAAwO!$6>Q2A+pwHT(5(0T$)!SQp8K~`uaxzMm}{o}E=4ZR_}@QCae?$!ADsntTgWPFXdtDBp&G(N;)8=<@Qi9jl$bWBc~^ zO>`+|NLW4G8uZO=buI6k*FMXiRIr36))BDhw79L0VBc>pUpnn!Z(*a7B)v~r(Ih4# z-P|mrS@_n1wrOl+CHo`hBQne|EDQ{+rkp3gAu_s99B(-G;o&ayrY~Sb%xGhK(}9x zZtwdF$Vqo(NL>gWyoT;IU?tgDS=mu$SbSEDg$lQ6u=ysnShb|jZ3`JwuA{hG1|Vv* znd?zkksWtR^>h$OuAuT34-anzQxzM&_ir&;CK5 z1F}1;B__hhc3jl^7J4^PR5cw229jbwd_!s)n%UXWadB41l^WY2>7klcCywjS?7k#E zLFs8_-8H)4m7PATXn~$jrUWUYM@M^DAM^L($55E!Rj?8OAItEkKYqk_=&IV4Gavr ztY-N#1SRUnH3_=G!=nwaH1O){0Qp~*Bm{_El`%Rjex`wz24jDKhG7Qz-m*rNZV zxDkXcg0Mvpwg|!&LD(V)TLfW?AZ!tYErPH`5Vi=y7D3n|2wMbUiy&+fge`)wMG&^= z|3JgH-!V@^*dhp91YwIHY!QSlg0Mvpwg|!&LD(V)TLfW?AZ!tYErPH` z5Vi=y7D3n|2wMbUiy&+fge`)wMG&?K!WKc;A_!XqVT&Ma(f@e1i0z+Sy#0sSBIdud zcne{RAZ!tYErR$hg7_`6gZM3i_$`9?ErR$hg7__h_$`9?ErR$h`kP<)e?EoyErR$h zg7__h_$`9?ErR$hg7__h_$~T>+HVp2KWCo)hy50@{2lW&ge`)wMG&?K!WKc;A_!Xq zVT&Ma5ri#*utgBI2*MUY*dhp91YwIHY!QSlg0Mvpwg|!&LD(V)TLfW?AZ!tYErPH` z5Vi=y7X6QBi#Yzd#oK?FEn@vUi?KU7D3n|2wMbUiy&+fge`)wMgLE;MGW-+ zoPGKqhKtz#j(r*e7eU}62wVh#iy&|j1TKQWMG&|M0vAExA_!arfr}t;5dQ^b3=IGM)msJ@IxzziBV&64 za7fU~+{#wbT1U@-PRPK~M9)A$RDe#v#NJNMz*f-8!rIExz|x+8olZu_!hlYk{qL;Z zvaoXS@Yvbg8t7QSfAJTN9+5@o$LM_`xixFFxYQ9_p+UxA`v?R83Ly!3$_M`*L%8ctR&gJ6?wfRMV zg=4luS?Fe0ybRz}vAkQcIlj3`?BY|yj~$C2uiZYCZFLZ>Z-25(zX)c)*MH59KQ>fF zXfjki9JRS&%**iPW!%|%RNJFK-)zqgTtz9FUUL2{foKx&*ROetvo zwd^hVvgGPBiHo9@Aq(Zgyq}v6)s$dk+D?U-V83AXFF79e2(5k7T_SxX7VP$iksI3H zi2#QI?^30oIG6U?pwzw2=KP66ZS|pyw=sm1YLSwF*}?>*di{s|IhT=vw?0|+Xsz5% z)RA9HKdan96{*z|nql80CSZ@4>_=)S;G1zR7psMY$7GiRrHdL1tXYW>^4%FnpSL z@2SRlsCIS51vffm$kFjKs0cNY;BJ8fF-$VFQ-oYNexY#CzDDjC@KKR$N=YjOp(&M7 z|}JOkrDrP-|ipk{OYso4q+mQn_mM)t-+26|Td z26X>+Lcq$-{#WgOe0Y3(e89ecxZk^6pV;f{SSfB>&L7yUT|Jq)zPr2x-y{I=0A3EN63n+i#nDs|slONB&U^$elv zsjP>`hy0;PrDR@-Xm&svpH8ljd6~F#t*m>4f=7eO@J7ep`Br$dr%W8DSGE4``G)Hc zU72`Jso2lXvVE?>yV4$_pzer~ZycJXKqtsJ4i8jtJS ztAq0c#}Z5JTw&2D4&Go^*%&doSP}4x7l~jK3}Y3EWY^9WQcaQSUF?4TjHJ_B(>m#z zx_P2s()q#V`5ef^8OX#F%p#x2t(z|*8_!oZRQCJs_p|ILa53k1<}LC}zNCt2<%nqI z3Tx&F=@f{nr3>q3s2BAWf(7rug3rP@duRKgL6Aq8n_9B6a-ythu3>Up^3>)OIFXyD z|3#%@`j=EH26{-Xg4C-2Ikk%UpQ=^==pc-N;m=wnVy-y zt%HHmbKs9mMCj=RbnFcNkoXT73R{BbA|{qbbN~}eeoH%(zn+Vj*xK0(8td3TmqtqG zFJT5oMzEy5y|JA-BO5!x^UlP=Lcqep`p3@B&OyM+%0|Gz!9c*o#Pn}F_!pr z{#7PybE*Vq=Bq*S}uBz`6{spse(N9G@%L zGqUl&_wQMo|5FY5vqpe(dDimhdu&W>1WasysX5?W|GdV+!breOPyb)F{#nicUF#YD z1}u@&F*2Z&)3JTFD?ZzH6zHT4^i6c0ThV7p77i9#MmBKP?92?b;FgMA6Ku(`v4D75NZ1oK6xVZkPG|vZcoBQ0#D$t2AfZMg_5DyRC7g=3X13i22eR1$h z`{TAa1Htoq1K)k#{?b7IkuKQS^qi21xxE3n)&H*}YX%N_mcN>SzWAr9&D+kiqj^jN zRu~jn@@>{Fv})GodpI3?%&1ZV(>(ad#nzIE@FJ^3mw(9KCCn3$pjDD&9ZGzUrf2uK z_2Drl_{|YSUcpO@#Qrw6%j6xgcygqJ`VyfYAg!`- zUZ0RM@imBjmVtFBrQ_Hq(k-)=^h92w|4MGp$K3+JTg5w~Kx%c$9InGAN%1XIL8?RN z$AL=X!hSt#!(e2e6Cz(&-bsRsSoP~>50v9Xj@}L{N#%{=7?J5AnAQn>R+aRNVn7W2 zT+PXqI)e*)Iyn}K(st=f(GO=Qzr)|{~XY*lW{sba*7WScb40@S1(U5>D_xdwc4l5#JlPbIQZXfE`& z^rkKIZKlTdr!;yeavc!w{?jo*w-U-=jil=DZ2TU9+%mEqtLR_ zGyt*hrDuegtE0a*g5qvGk~#x6t7Zo?Aja!^_NW=60V8~0!uQfF!ix1wgiW~mpZhSe z3Y{l+cp`#N#BZ>4ACsFpf?ju>e3Qq| zpG2^oegjD8f4`TFb|#NITwK%Dv))EeeS}-Xy_nx%j$~`}`DR&5!b0XdwONL3n0)0Z zM_YkNTy_5eO}Nywte9hOTPb5i!x)o7vB0OF2A}(T98`IC)9(aW*e$U~Iu&u!Z2OyE zmy^ikrkqJlvm|Ay;?d`Pn0nKR6M<&i@@w{!w>pzI0?C+{K%>KJ0smd*_hCMn60gWm zhiwA!9m@Mh-}=G()sXEkl6+lw>woxv*Kup1_O2-*a1?ZMy!yl z2ddsg^b_DVO?|AlF*myKKoNTE{q(X?jM&|s(}z<`Y?apfnBciWzn1# z+UxCGr^#ZxTXm6$g@X0#H))lk=?-oGU+LBX)YQ6l=|L1}(gY!NkX{l%DI&dt(yR0i z8bU`}=tWAT3W7B0NC~}3?>%%W5~T^!tH2-cegAv+>i_1SdGDLa%$b$%oNwnlXZBua zuN9(Lm`EkzhNoZ7fb6P&DZb=aekcVjLP8~H2(&HRkutjty~ezk_cGP!CQ$Zp*YJ~0 zH4c#oyzh2Ghr%i@s}DQFv|ld%iH010mStr!7Ny8wML9B&g^wpxalL-=|W&(?=`lf20FiM7WA*T|oC9Ol}MN7aU`n zOOr?!)JSUd;8&Fs&@49!-NR$*?g~KEI(>IvZA>{BK^cj!iSTsy7`%2fq`iJ`kUS=3 z63=LJ7bewAr-EaqpuDfW!obf}p)&}3o6gN!*&N&H|s;7_P+hx-O zEAOjFuc}*d^@XKWQa*5ezox`GJ(7gzmn4;9Znu8pJtNv`7%NU&Kou_xj~pYYTBuI9 zzaMzLwF_r<$y)JeAtF5UL2x-xxoV;M}5Akf29m+>D9jEhz)Dv)J zQ8-dV(Uv&lk8D3%|3MeMkj%YwQK4@8XeXJeyRb*^)=pPNPbv`+<&x@~BZJo?D2ocM zF9wsT_gh-8N7gs5+@xE;xo6Tfs{pbH039cy#7`_x<#t;@O`EB#PMl&PxUwYENiSt7 zC4~F<%8SW|0Sb5*5s{i6uc$Mk3z53|QPwZZU3}t}G_X1HeTjrWbD)S3!B}rF#j`k? zh4@iXkoMycWtK_2A1HPw^X3uMe#%fT)1!{QCA=vfl?>NYiEOL2kL4RzmG4=4kMzDH z7iK9THXuJSp-95Qp+rywH#a5;uNZzs@57$M{2<#gbCzS3r-=i#BBEOaRqA9XSWFMs zjH{lZ0eRdO>o$gOJppwE#pNB(h9vgDCYIXb?4CMVRs{SguR2nB5MQ|-qyH-2235jX z#X4XdOg_ewpA6whYht~CdVH3BUXZmAGDft>!*y$iTn9C=$|WgQW$l%6&W(G-FvOct zNh?Ruox%KFn;Qa|U+*PDEKt9oW&pPvDdg}BJ#2V+{AjbcN@M193 zc$YmS^-`RZVzaL>C|C+(gFOH4MdS8m9L;zC56wgaLVnjJuiNnypJGEYqFSpy$ES0V zUzt@}wB^$+sdv@gaZpUxFj~W_n#vUq);z|`<}PBo8|CFxo)Z1W;=y1TSs7C!1q~-7 zICc2lD0g~+In16>$>AkR2%PO`?035^g}QF3Uxfl;qg!>O@ebnDtSAlQOz1{@W@0-y z0CRhc6=%`^ZdSGm(y&V(Fv>s5o`shwj)AFFBfJ-)(U`->4?nBCGqhS%QyD68@Z{6L z>P+$|Q(s7Pw1({`YGF?{(g!D4?RGYy?g8fuRNtYn2T>_sBKv04e@9Kf2QWe z`5g;WwoD$!a3}ID;ugva9RYZfDyfv(-SYcRiGMVL@CkQm= zN@JN^%NH9nq02HueKcX`x7abXVNqBoxout53KB&z9jZ;nVn<&{8<0ufN}+U&k^wYo zhajktL3?Dp*<4iFRM?+csc~K)Z+)SQWxV3f9;4~!y8(#8^V%x9i}NChuw7&e&n)yN z049rUO|V#@QfrYFm0J%}=t&>PoReyk`Ya_Pe}tpB8DfWO@(%D;!LJ<#6!Zi$7fNpe z?3VXNV_T)frLbsX1M;Miux2+cqR_e`fQ1nf#t%bU1l&VfJUGKUdWH>~JTO=KgoFi3 zPr_c5ZAQGiR%55hro;Z6|MT-!Jj)2%5lNM?l7)QWm;1O^^@d#?8Cq;~)cAuGcIuh1d7jNROACgL?yRGN@0$VZKXaWSZ0F7kLFbmT!v*{0yw~5Igp@d@*oC z#r^S83;O%v%ypx^>4REH^HvQ{fNSbFHUZQi$+Jta{^BnqYg$qiSMPMP$|+p70Ai;XR2jma682;qD!H7UG0(5{AB ztd|x=oH9NO0?xh6A&kXdkf@3UKf?U_A$Z9$?zM9iY@YOG8MOvC`A7)9%Z84zOF%J86{AI>X3OQ+-Uz?c%t>weshifwz|r!^q{+ zDi=o=3)mpqz58PZ2qD25RA>6A$=8w;>1ZpEhkkSos#oug5ihRHss$!uqy#IQgj53q zYi{xDDMsmy@B)9`a6DRftP~@oS0{uN^>AhV{?DDsJYpJ_owfcR;~td_lRb3s;$jZ2 zz?;H4mZ%@+3n58>@(HyO)}88J{3GKs9F3{GR%>S6`K122ht9La$7);xnwbp}0U{iN zqQXPo(w#Z;#3U(augSC%epuEFk$ir}0su8`eM%F{wa*K(CF{3V+&*ta4BR;7%dX0?k^rQ3Fe;oi zZj*~=pFkY6kwB8>prxgk5JfDywD>v=;>&E(_hr_=OyUI&{1Q%4GW|_l{MRMZ%;Fqs zoP1^amjHn<>01kfW6m58c6NqZT5OuLndiE=ZJZY2=-MfCh{c-Ws@>ObLOLcl+}KZ+pW zKe|tU|de%16 zw|$AH%BLtfZRxOjPOJw#ny+Bam(MO=FX+_}wyaIJHXe@!t*9>;&}TMW+iH5&^bQ_i z1A4jIY<6KG!S{%tb4qxTuPi(;1@=C!xfW8l>(sew@q9jo?R^&q{p5YA`$~ z>3LQ(nK_c5k4ziw`}WE6+r~)2B=9lG%E5Mohxa;s={|<&rFtPBsrZiXx@C^3dwi7u z5u1O0jbrRtZ?xYOElk^azWk{-C-l*BV~(PFrV;>Ea5xBQmb)A>u$O(WjS5jSm8E1H zC=%m1QH>j(WLwzZ*Y9P+UNm`D8?Ks8d6A(R?KW>1e?Zc2@(AzsJi@Nuq~NLb^A2U6 zC=UDn@$K7|Z}+V@;CYc+`50M33>zn!5^L)9o)T_LhD)!OrgvHCmMV8tt1e<_Dms0S z?+)NsY3T!Q?lALejLOlBE<1-r_Jb9o=^CM=D&Z7-#%*_Fzi$klB)S|H!{a>TF9A#mFF z53{$h=;+FJm}Zc(SRc-l4PTjdy&8aA=V;OjJyN0HH8HLf=*|~f%f7G1_AGC(HRrxURHP9$J;e2!oyLzMz)u?#kWNAMLq?&roy2 z_@U(k#6F=_FV3cQ@I28hVbO2myz?$@B?xg!#&5*r<|K} zU-ZKT)M%ze*zfJCbe6(W2CZw{sZHuSn$p*14%MbhVHP$iit0x-U~t~s?a<9Lq9(n5 zOPeQOY-fZs>Pn7|O=hSLp3Hal!RfZUkCYKZc6cIn&1*gNn2|7IR%y{-syCN<3V;Ns zX;zkjpt8H87%V=iI<%9o_qxS~s?El$Q(Z5tbF?G87US%zz^cgYTt(?z?^^P_)BEEB z-LCZ=-(IKfx;8+sc`>T3rR7J5k8+f6D-^LvYQZDTFo{&PR!Dj6Sk!Mz-V0ySc9tVopm@J=VN0D8 zU3SbVddBluc5o}Q;EKnx!<7g59J^Ig+;QYsEXkh=SG_~}V>Hrg^Y#{`F~41y9hIxw z-lq`F;Te{}9@2P3(u z^XC}aBDHKt+S zl)(Q{PkxbO|C@U9XHED|>IoS5hlaqbh*n8|suEAo-e=$+CTsMODDV$cD*6ch9smF8 z3TWNo4`l(33ZR|Uzl#h%qxpYD20j7sUqpsd-2wM`F!84YPHXDSRd(N?$??j>IdSJr z1Es1xJXQu04uxI}Te-`eD=PrAtYVD0AT*YOwC`iaL)gRQQMk0xhs@E8Q{p;e^&G_n z6*7e=B4M1e+=H+K6mugG-$Gz-HJldE?evT$Z%U2$k;>;|uRBmqU*FDjZA!Q6s8y-$ zIx;J4od`3yK^f15a;Jjk#SD{kz#D#hpWJO_$IM;^KD)w zyIv|N7}~Rb(Ph#|CR25nZt-OT-nuoDrxHD`j|fdrSoOoE*l=v6 ze&oE=r_$11Wm z$>j@FTm%x&FO8m^@Nqt2N=9UEMkJ-H$I1|eLgA~4O(ho%AQvq0<>~X#6Yp7CEsr)P z=bjW9MRkh@0dkbDgvu%=)9&U2KM}mLyXx4`x}tp7;R$$|XNwpnbSwdS*3-3Gh&e614sSSX(3Tf;H2J{NIk!hP914$UxP6=CSZ-iWMB-=T&JLlE4yVA6haL!%t zXQo!N%r2M~3piQE%tF}pn{D`gKj+MRD(>|$mTf$paxU1+cbd-4)YZJBN~B%QTM3WU ze)6%^>~_XL8i%-_L&qX(nPte!Ktz^*jyO`}R;3^I^U*h*st#cMw0B=NrbGPfm3=Fh zNd4QAPEnr9;Ci8beFAAO0vZE>cRh~L(-&Qoj>IWS;`<3PlhyM+U7s@JUM!d$Bs?)~ zCwTu6bBYPn-ET#!HICNInC_j(f!hlg#KksNcyZd3@vjD#*GAOLCJozv7-BQG_>2hi z#MOjF)zayAGR3o>ayOw zJ^pohe)!~`_RKnG*;59$ycq{8CKxdFm@kt#-zgqUvEhWk#o-Q!dnV(AsW_LXldEs7 zUB3!BRqtVa@$Na}I7=Jn3YXfHGFLSvaID~R9yWU2W^~6ZuR74nXIWq9s%#~Ra-nAB zZK>#@=IOx+GV=W`iR6U<`C&7&W!==|yVm3_PSiytjn~tn3p(z{4uvYOC~r;cVPv>= zExYe@5u1$6nP1@+tt|}xo*q3RR@MY)7lH@@-#-Ts3<3#)fY!i&Vd(7ja{!(Hg`w5j zUon0Gbn^Q9Jdo(mEcQ2yUl1gK&Ru`ULrNC>S&|AK)8fBPLEFu(AxF{7=Ke80vF5(W$Yx>q3KpNjV{ zYlsMde#Znszr`Z@)9>=jxuX1NmHqD++O6{2xnO?5pT*?o_~(5C3xY&{T>~sA4Ek*z zNPzFx{R4x9{<<$vh?$+E6@)-cjDYv4owwD`XNdQSiwpX1KtF30frJEsE7S}E{o@G( PgF*bl1S~AF>T>@BCSN@S literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/fixtures/tune_up_standard_001431_after.pdf b/tests/domain/modelling/fixtures/tune_up_standard_001431_after.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e6c37477d6f8451b69ed0ec0f98743702b4d0ec2 GIT binary patch literal 65379 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 literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/fixtures/tune_up_zoned_001431_after.pdf b/tests/domain/modelling/fixtures/tune_up_zoned_001431_after.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ebc431d81c3424d543db33418be03a0a1c803518 GIT binary patch literal 65381 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 HSM`4Y)%u4M literal 0 HcmV?d00001 diff --git a/tests/domain/modelling/test_elmhurst_cascade_pins.py b/tests/domain/modelling/test_elmhurst_cascade_pins.py index a83a7c89..a124c5c4 100644 --- a/tests/domain/modelling/test_elmhurst_cascade_pins.py +++ b/tests/domain/modelling/test_elmhurst_cascade_pins.py @@ -887,6 +887,53 @@ def test_coal_boiler_with_cylinder_overlay_reproduces_the_relodged_after() -> No _assert_overlay_reproduces_after(before, after, option.overlay) +@pytest.mark.parametrize( + "before_fixture, after_fixture, measure_type", + [ + # The system tune-up keeps the existing boiler and forces the heating + # controls to a fixed end-state (standard 2106 / zone 2110) ABSOLUTELY — + # proven by reproducing each common after from two different starting + # controls (2101 "no control" and 2113 "room thermostat and TRVs") — plus + # the conditional cylinder jacket + thermostat (both befores are + # uninsulated / un-thermostatted, so both fire). + ( + "tune_up_from_2101_001431_before.pdf", + "tune_up_standard_001431_after.pdf", + "system_tune_up", + ), + ( + "tune_up_from_2113_001431_before.pdf", + "tune_up_standard_001431_after.pdf", + "system_tune_up", + ), + ( + "tune_up_from_2101_001431_before.pdf", + "tune_up_zoned_001431_after.pdf", + "system_tune_up_zoned", + ), + ( + "tune_up_from_2113_001431_before.pdf", + "tune_up_zoned_001431_after.pdf", + "system_tune_up_zoned", + ), + ], +) +def test_system_tune_up_overlay_reproduces_the_relodged_after( + before_fixture: str, after_fixture: str, measure_type: str +) -> None: + # Arrange + before: EpcPropertyData = parse_recommendation_summary(before_fixture) + after: EpcPropertyData = parse_recommendation_summary(after_fixture) + recommendation: Recommendation | None = recommend_heating(before, _AnyProduct()) + assert recommendation is not None + option = next( + o for o in recommendation.options if o.measure_type == measure_type + ) + + # Act / Assert + _assert_overlay_reproduces_after(before, after, option.overlay) + + # --- Solar PV cascade pins (ADR-0026) ------------------------------------- # # The solar before/after Summaries lodge *synthetic* PV arrays (each 1.00 kWp, diff --git a/tests/domain/modelling/test_heating_recommendation.py b/tests/domain/modelling/test_heating_recommendation.py index 297b1f8e..b0f86edf 100644 --- a/tests/domain/modelling/test_heating_recommendation.py +++ b/tests/domain/modelling/test_heating_recommendation.py @@ -394,6 +394,71 @@ def test_gas_combi_dwelling_yields_a_combi_boiler_upgrade_bundle() -> None: ) +def _tune_up_baseline() -> EpcPropertyData: + """A mains-gas wet boiler (kept) with "no control" (2101) and an uninsulated, + un-thermostatted cylinder — the system tune-up dwelling.""" + return parse_recommendation_summary("tune_up_from_2101_001431_before.pdf") + + +def test_wet_boiler_dwelling_yields_both_tune_up_options() -> None: + # Arrange — a wet boiler whose controls can be improved: both the standard + # (2106) and zone (2110) control tune-ups are offered as competing options, + # each keeping the boiler and fixing the cylinder. + baseline: EpcPropertyData = _tune_up_baseline() + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert — both options carry the control end-state + the cylinder fixes, and + # leave the boiler untouched (no fuel / sap code / flue fields). + assert recommendation is not None + options = {o.measure_type.value: o for o in recommendation.options} + assert options["system_tune_up"].overlay.heating == HeatingOverlay( + main_heating_control=2106, + cylinder_insulation_type=2, + cylinder_insulation_thickness_mm=80, + cylinder_thermostat="Y", + ) + assert options["system_tune_up_zoned"].overlay.heating == HeatingOverlay( + main_heating_control=2110, + cylinder_insulation_type=2, + cylinder_insulation_thickness_mm=80, + cylinder_thermostat="Y", + ) + + +def test_tune_up_standard_not_offered_when_controls_already_standard() -> None: + # Arrange — controls are already standard (2106): the standard tune-up would + # be a control no-op, so only the zone tune-up is offered. + baseline: EpcPropertyData = _tune_up_baseline() + baseline.sap_heating.main_heating_details[0].main_heating_control = 2106 + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert + assert recommendation is not None + measure_types = {o.measure_type for o in recommendation.options} + assert "system_tune_up" not in measure_types + assert "system_tune_up_zoned" in measure_types + + +def test_tune_up_neither_offered_when_controls_already_zoned() -> None: + # Arrange — controls are already zone control (2110): neither tune-up would + # improve them, so neither is offered. + baseline: EpcPropertyData = _tune_up_baseline() + baseline.sap_heating.main_heating_details[0].main_heating_control = 2110 + + # Act + recommendation: Recommendation | None = recommend_heating(baseline, _StubProducts()) + + # Assert + if recommendation is not None: + measure_types = {o.measure_type for o in recommendation.options} + assert "system_tune_up" not in measure_types + assert "system_tune_up_zoned" not in measure_types + + def test_boiler_upgrade_leaves_adequate_controls_unchanged() -> None: # Arrange — the same combi but with already-adequate controls (2113, room # thermostat and TRVs): the upgrade must not move the controls (and must diff --git a/tests/domain/modelling/test_measure_type.py b/tests/domain/modelling/test_measure_type.py index 56fd5a4c..214df8bc 100644 --- a/tests/domain/modelling/test_measure_type.py +++ b/tests/domain/modelling/test_measure_type.py @@ -27,6 +27,8 @@ _EXPECTED_VALUES = { "high_heat_retention_storage_heaters", "air_source_heat_pump", "gas_boiler_upgrade", + "system_tune_up", + "system_tune_up_zoned", "solar_pv", } diff --git a/tests/harness/test_console.py b/tests/harness/test_console.py index 1adc9951..4ea237bc 100644 --- a/tests/harness/test_console.py +++ b/tests/harness/test_console.py @@ -39,6 +39,8 @@ _GENERATOR_MEASURE_TYPES = ( "high_heat_retention_storage_heaters", "air_source_heat_pump", "gas_boiler_upgrade", + "system_tune_up", + "system_tune_up_zoned", ) diff --git a/tests/harness/test_report.py b/tests/harness/test_report.py index 1dcf9123..003ff7bf 100644 --- a/tests/harness/test_report.py +++ b/tests/harness/test_report.py @@ -125,6 +125,21 @@ def test_gas_boiler_upgrade_surfaces_its_eligibility_triggers() -> None: } +def test_system_tune_up_surfaces_its_eligibility_triggers() -> None: + # Like the boiler-upgrade trigger, no golden cert selects a tune-up, so the + # branch is covered directly. + from harness.report import _triggers_for # pyright: ignore[reportPrivateUsage] + + # Arrange — a wet boiler (SAP code 102) with "no control" (2101): the wet- + # boiler code and the improvable control are what the report should explain. + epc = parse_recommendation_summary("tune_up_from_2101_001431_before.pdf") + + # Act / Assert — both tune-up measure types surface the same eligibility. + expected = {"sap_main_heating_code": 102, "main_heating_control": 2101} + assert _triggers_for(epc, "system_tune_up") == expected + assert _triggers_for(epc, "system_tune_up_zoned") == expected + + def test_few_measure_cert_surfaces_only_its_fired_measures_triggers() -> None: # Arrange path: Path = _GOLDEN / f"{_WITHIN_TOLERANCE}.json" diff --git a/tests/orchestration/test_ara_first_run_pipeline_integration.py b/tests/orchestration/test_ara_first_run_pipeline_integration.py index 3b72ba13..b7ffb86f 100644 --- a/tests/orchestration/test_ara_first_run_pipeline_integration.py +++ b/tests/orchestration/test_ara_first_run_pipeline_integration.py @@ -176,6 +176,22 @@ def test_first_run_baselines_through_repos_and_is_idempotent_on_rerun( is_active=True, description="Gas condensing boiler", ), + MaterialRow( + id=7, + type="system_tune_up", + total_cost=500.0, + cost_unit="gbp_per_unit", + is_active=True, + description="Heating controls + cylinder tune-up", + ), + MaterialRow( + id=8, + type="system_tune_up_zoned", + total_cost=900.0, + cost_unit="gbp_per_unit", + is_active=True, + description="Zoned heating controls + cylinder tune-up", + ), ] ) session.commit()