diff --git a/backend/documents_parser/tests/test_pashub_sap_accuracy_wythenshawe.py b/backend/documents_parser/tests/test_pashub_sap_accuracy_wythenshawe.py index eef150c8a..f070a04cb 100644 --- a/backend/documents_parser/tests/test_pashub_sap_accuracy_wythenshawe.py +++ b/backend/documents_parser/tests/test_pashub_sap_accuracy_wythenshawe.py @@ -46,8 +46,13 @@ _MANIFEST_PATH = _FIXTURES_DIR / "manifest.json" # headroom; treat them as a regression tripwire, NOT a cohort accuracy figure, # and re-baseline (coverage growth is not loosening) as further mapper fixes # unblock fixtures. +# 2026-07-16 (#1622/#1624): room-heater control 2601 unblocked the two 'No +# thermostatic control...' fixtures → **151 computed / 17 blocked** (within-0.5 +# 76.2% = 115/151, MAE 0.716; 500767954156 lands within 0.5, 500797465814 is a +# −8.8 tail entry). MAE ceiling re-baselined 0.67 → 0.72 per the +# coverage-growth convention above. _MIN_WITHIN_HALF: float = 0.76 -_MAX_SAP_MAE: float = 0.67 +_MAX_SAP_MAE: float = 0.72 _KNOWN_GAP_REASON = ( "pashub `from_site_notes` mapper does not int-code a main-heating " diff --git a/datatypes/epc/domain/mapper.py b/datatypes/epc/domain/mapper.py index 139f31bd3..78d11ac71 100644 --- a/datatypes/epc/domain/mapper.py +++ b/datatypes/epc/domain/mapper.py @@ -8037,8 +8037,11 @@ _PASHUB_STORAGE_HEATER_CONTROL_TO_SAP10: Dict[str, int] = { # PasHub surveyed room-heater control labels → their SAP 10.2 Table 4e Group 6 # code (spec PDF p.173). PasHub lodges the singular "Programmer and room # thermostat"; Table 4e's Group 6 wording is the plural "Programmer and room -# thermostats" (2605) — same control. +# thermostats" (2605) — same control. 2601 is the lowest-control (manual / +# no-thermostat) Group 6 code: control type 2, +0.3 °C MIT adjustment (PCDB +# `room_heater_systems_controls`), one step below 2602. _PASHUB_ROOM_HEATER_CONTROL_TO_SAP10: Dict[str, int] = { + "No thermostatic control of room temperature": 2601, "Appliance thermostats": 2602, "Programmer and room thermostat": 2605, }