From e3c023e0f6f3faf334a49ba2a8349f56a9467e66 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Mon, 29 Jun 2026 20:00:41 +0000 Subject: [PATCH] =?UTF-8?q?Preserve=20an=20existing=20more-off-peak=20cert?= =?UTF-8?q?=20meter=20under=20a=20heating=20overlay=20=F0=9F=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .../epc/test_main_heating_system_overlay.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/domain/epc/test_main_heating_system_overlay.py b/tests/domain/epc/test_main_heating_system_overlay.py index 7abccefd..ea73c0f7 100644 --- a/tests/domain/epc/test_main_heating_system_overlay.py +++ b/tests/domain/epc/test_main_heating_system_overlay.py @@ -329,6 +329,35 @@ def test_the_three_heating_overrides_compose_without_conflict() -> None: assert result.sap_heating.water_heating_fuel == 29 +def test_room_heaters_preserve_an_existing_more_off_peak_cert_meter() -> None: + # The overlay's assumed Dual (7-hour E7) meter is a coherent *default* for a + # single/unknown-meter dwelling — it must NOT downgrade a cert that already + # lodges a more-off-peak meter (here a 24-hour all-low tariff, code "4"). + # Clobbering it to E7 would bill the heating on a high/low split it doesn't + # have, under-rating the dwelling. + baseline = build_epc() + baseline.sap_energy_source.meter_type = "4" # 24-hour tariff + overlay = main_heating_overlay_for("Electric room heaters", 0) + assert overlay is not None + + result = apply_simulations(baseline, [overlay]) + + assert result.sap_energy_source.meter_type == "4" + + +def test_room_heaters_set_dual_when_the_cert_meter_is_single() -> None: + # The flip side: a single-rate dwelling DOES get the assumed Dual meter — + # off-peak heating can't be billed on a single-rate meter (ADR-0035 drag). + baseline = build_epc() + baseline.sap_energy_source.meter_type = "Single" + overlay = main_heating_overlay_for("Electric room heaters", 0) + assert overlay is not None + + result = apply_simulations(baseline, [overlay]) + + assert result.sap_energy_source.meter_type == "Dual" + + def test_electric_room_heaters_member_decodes_to_the_room_heater_code() -> None: # Arrange — the canonical landlord archetype for direct-acting room heaters member = MainHeatingSystemType.ELECTRIC_ROOM_HEATERS