Electric boiler and CPSU overrides drag the conservative Group 1 control (2101) 🟩

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-07-03 14:08:06 +00:00
parent afa781719d
commit 077dcf6bac

View file

@ -137,6 +137,15 @@ _ELECTRIC_BOILER_CODES = frozenset({191, 192})
# HHRSH pathway, and an inherited 7 (storage) made the Table 12a resolver bill
# direct-acting heat wholly at the off-peak low rate (ADR-0052, #1444).
_ELECTRIC_BOILER_CATEGORY = 2
# SAP Table 4e Group 1 boiler control: 2101 ("no time or thermostatic control
# of room temperature", +0.6 C) is the conservative default when the landlord
# named only the system — the largest Group 1 mean-internal-temperature
# adjustment, so an unobserved control is never over-credited (the boiler
# mirror of storage 2401 / room-heater 2601 / underfloor 2701). Deliberately
# NOT the gas boilers' modern 2106: the gas archetypes assume a whole modern
# condensing install; the electric-boiler archetypes describe an existing
# system of unknown vintage (ADR-0052).
_CONSERVATIVE_BOILER_CONTROL = 2101
# Electric underfloor — SAP Table 4a 421/422 (off-peak) and 424 (screed) — also
# unambiguously electric (ADR-0046).
_ELECTRIC_UNDERFLOOR_CODES = frozenset({421, 422, 424})
@ -281,8 +290,9 @@ def _meter_for(code: int) -> Optional[str]:
def _control_for(code: int) -> Optional[int]:
"""The control to assume when the landlord named only the system: a
conservative manual charge control for storage heaters, full modern controls
for a gas boiler, None for systems that take neither (direct-acting electric).
Overwrites a stale control inherited from the system being replaced."""
for a gas boiler, the conservative in-group default for the other mapped
families (room heaters, underfloor, electric boilers). Overwrites a stale
control inherited from the system being replaced."""
if code == _HHR_STORAGE_CODE:
return _HHR_CHARGE_CONTROL
if code in _STORAGE_HEATER_CODES:
@ -293,6 +303,8 @@ def _control_for(code: int) -> Optional[int]:
return _ROOM_HEATER_CONTROL
if code in _ELECTRIC_UNDERFLOOR_CODES:
return _UNDERFLOOR_CONTROL
if code in _ELECTRIC_BOILER_CODES:
return _CONSERVATIVE_BOILER_CONTROL
return None