Community-heating overrides default to Group 3 control 2313 🟩

Per-axis choice (decided with Khalim): the kit axis concedes to the
evidence (community schemes skew modern; lodged community certs are
overwhelmingly thermostatted, none lodge 2301), the charging axis stays
flat-rate — usage-linked billing is scheme paperwork an override
cannot see.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-07-03 16:32:58 +00:00
parent 2bfda711d8
commit 72ccc920c5

View file

@ -185,14 +185,18 @@ _CONSERVATIVE_HEAT_PUMP_CONTROL = 2201
_HEAT_NETWORK_CATEGORY = 6
_HEAT_NETWORK_CODES = frozenset({301, 302, 303, 304})
_COMMUNITY_BOILER_CODES = frozenset({301, 302, 303})
# SAP Table 4e Group 3 heat-network control: 2301 ("flat rate charging, no
# thermostatic control of room temperature") is the conservative default when
# the landlord named only the scheme. It is never-over-crediting on BOTH axes
# the control drives: the largest Group 3 temperature adjustment (+0.3 C, tied
# with 2302) and the worst Table 4c(3) charging factors (space 1.10, DHW 1.05
# — an unobserved charging arrangement is never assumed usage-linked). The
# community mirror of storage 2401 / boiler 2101 / heat-pump 2201 (ADR-0053).
_CONSERVATIVE_HEAT_NETWORK_CONTROL = 2301
# SAP Table 4e Group 3 heat-network control: 2313 ("flat rate charging, room
# thermostat and TRVs") is the default when the landlord named only the scheme
# — a per-axis choice (ADR-0053, decided with Khalim). KIT axis: community
# schemes skew modern and the portfolio's lodged community certs are
# overwhelmingly thermostatted (modal 2306; none lodge 2301), so a room
# thermostat + TRVs is the evidence-backed assumption (temperature adjustment
# 0.0). CHARGING axis: flat rate (Table 4c(3) space 1.05 / DHW 1.05) — the
# billing arrangement is scheme paperwork an override cannot see, so the
# usage-linked credit (1.0/1.0) is never assumed. An assessor-OBSERVED Group 3
# control on the cert is kept in preference to this default (the overlay sets
# `keep_existing_heat_network_control`; the applicator honours it).
_DEFAULT_HEAT_NETWORK_CONTROL = 2313
_COMMUNITY_GAS_FUEL = 20
# SAP Table 4c full boiler-control code: programmer + room thermostat + TRVs. The
@ -324,7 +328,7 @@ def _control_for(code: int) -> Optional[int]:
if code in _WET_HEAT_PUMP_CODES:
return _CONSERVATIVE_HEAT_PUMP_CONTROL
if code in _HEAT_NETWORK_CODES:
return _CONSERVATIVE_HEAT_NETWORK_CONTROL
return _DEFAULT_HEAT_NETWORK_CONTROL
return None