diff --git a/domain/modelling/generators/heating_recommendation.py b/domain/modelling/generators/heating_recommendation.py index 410eb5e6..b10e1b76 100644 --- a/domain/modelling/generators/heating_recommendation.py +++ b/domain/modelling/generators/heating_recommendation.py @@ -64,6 +64,10 @@ _HHR_STORAGE_OVERLAY = HeatingOverlay( cylinder_insulation_type=1, cylinder_insulation_thickness_mm=120, cylinder_thermostat="Y", + # Single off-peak electric immersion — drives the SAP 10.2 Table 13 HW + # high-rate split (matches the relodged after-cert; without it the HW + # bills 100% at the low rate, +1.26 SAP over the reference). + immersion_heating_type=1, has_hot_water_cylinder=True, meter_type="Dual", ) diff --git a/domain/modelling/scoring/overlay_applicator.py b/domain/modelling/scoring/overlay_applicator.py index c11285ca..d47d84a7 100644 --- a/domain/modelling/scoring/overlay_applicator.py +++ b/domain/modelling/scoring/overlay_applicator.py @@ -98,6 +98,7 @@ _SAP_HEATING_FIELDS: tuple[str, ...] = ( "cylinder_insulation_type", "cylinder_insulation_thickness_mm", "cylinder_thermostat", + "immersion_heating_type", ) _ENERGY_SOURCE_FIELDS: tuple[str, ...] = ("meter_type", "mains_gas") diff --git a/domain/modelling/simulation.py b/domain/modelling/simulation.py index 083f8898..7d951ac5 100644 --- a/domain/modelling/simulation.py +++ b/domain/modelling/simulation.py @@ -133,6 +133,11 @@ class HeatingOverlay: cylinder_insulation_type: Optional[Union[int, str]] = None cylinder_insulation_thickness_mm: Optional[int] = None cylinder_thermostat: Optional[str] = None + # The cylinder's immersion-heater arrangement (e.g. single off-peak + # immersion = 1). Drives the SAP 10.2 Table 13 HW high-rate fraction on + # off-peak tariffs — without it the calculator cannot resolve + # `immersion_single` and bills HW 100% at the low rate. + immersion_heating_type: Optional[Union[int, str]] = None # EpcPropertyData (top-level) has_hot_water_cylinder: Optional[bool] = None # sap_energy_source diff --git a/tests/domain/modelling/test_heating_recommendation.py b/tests/domain/modelling/test_heating_recommendation.py index 5e8e1576..81b9f692 100644 --- a/tests/domain/modelling/test_heating_recommendation.py +++ b/tests/domain/modelling/test_heating_recommendation.py @@ -67,6 +67,7 @@ def test_electric_storage_dwelling_yields_an_hhr_storage_bundle() -> None: cylinder_insulation_type=1, cylinder_insulation_thickness_mm=120, cylinder_thermostat="Y", + immersion_heating_type=1, has_hot_water_cylinder=True, meter_type="Dual", )