Air-source heat-pump overrides drag the conservative Group 2 control (2201) 🟩

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-07-03 14:19:20 +00:00
parent 6d414c7b51
commit 6bad3a216a

View file

@ -168,6 +168,17 @@ _UNDERFLOOR_CONTROL = 2701
# without a PCDB index (ADR-0041).
_HEAT_PUMP_CATEGORY = 4
_HEAT_PUMP_CODES = frozenset(range(211, 225)) | frozenset(range(521, 528))
# SAP Table 4e Group 2 heat-pump control: 2201 ("no time or thermostatic
# control of room temperature", +0.3 C) is the conservative default when the
# landlord named only the system — the largest Group 2 adjustment, so an
# unobserved control is never over-credited. Deliberately NOT the ASHP
# Measure's 2210 zone control: a measure designs a modern end-state
# (ADR-0024); an override describes an existing pump (ADR-0053). Scoped to the
# WET heat pumps (211-224) — warm-air pumps (521-527) take Table 4e Group 5
# and stay unmapped (no archetype maps to them; the incomplete-companion raise
# guards that a future one cannot land without choosing its Group 5 control).
_WET_HEAT_PUMP_CODES = frozenset(range(211, 225))
_CONSERVATIVE_HEAT_PUMP_CONTROL = 2201
# Community / heat-network heating (SAP Table 4a 301-304) is category 6; the
# calculator's `_is_heat_network` keys off code OR category 6. The boiler-driven
@ -305,6 +316,8 @@ def _control_for(code: int) -> Optional[int]:
return _UNDERFLOOR_CONTROL
if code in _ELECTRIC_BOILER_CODES:
return _CONSERVATIVE_BOILER_CONTROL
if code in _WET_HEAT_PUMP_CODES:
return _CONSERVATIVE_HEAT_PUMP_CONTROL
return None