From 7c979d60f6f4756862d69b42c8aaf78adb5f31e4 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Thu, 16 Jul 2026 16:35:12 +0000 Subject: [PATCH] =?UTF-8?q?Rate=20gas=20room-heater=20main=20systems=20at?= =?UTF-8?q?=20Table=204a=20code=20603=20=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #1631: the label blocks in the main room-heater type table (Heating System (Other) field), not the secondary table the issue cited — same PCDB row either way. Wythenshawe 164→165 computed. The fixture scores 49.5 vs pre_sap 31: its own 2025 accredited cert 6890-0597-0722-0196-3943 lodges the identical codes (603/26/2601) at band E agreeing with us, while pre_sap matches the dwelling's superseded electric configuration (2017/2023 certs, band F) — accepted divergence, MAE ceiling re-baselined 0.75→0.85 with the citation. Co-Authored-By: Claude Fable 5 --- .../tests/test_pashub_sap_accuracy_wythenshawe.py | 11 ++++++++++- datatypes/epc/domain/mapper.py | 9 ++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) 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 c93a8adec..350cb7bc6 100644 --- a/backend/documents_parser/tests/test_pashub_sap_accuracy_wythenshawe.py +++ b/backend/documents_parser/tests/test_pashub_sap_accuracy_wythenshawe.py @@ -57,8 +57,17 @@ _MANIFEST_PATH = _FIXTURES_DIR / "manifest.json" # MAE 0.740). 7/10 newly-computed land within 0.5 — the treatment validates; # −3.3/−5.5 tail entries dilute the aggregates. Floor 0.76 → 0.75, ceiling # 0.72 → 0.75. +# 2026-07-16 (#1622/#1626-#1631): the remaining one-off labels (HHR-control +# 2404→2402 downgrade, 'Loose jacket' cylinder, secondary 601/609, secondary +# dual fuel, gas room-heater 603) → **165 computed / 3 blocked** (within-0.5 +# 75.2% = 124/165, MAE 0.844). The MAE step is one accepted pre_sap +# divergence: 500797805807 (90 Brookfield Gardens) scores 49.5 vs pre_sap 31 +# (+18.5) — its own 2025 accredited cert 6890-0597-0722-0196-3943 lodges the +# identical heating codes (603/26/2601) at band E, agreeing with US; the +# PasHub pre_sap instead matches the dwelling's superseded electric +# room-heater certs (2017/2023, band F). Ceiling 0.75 → 0.85. _MIN_WITHIN_HALF: float = 0.75 -_MAX_SAP_MAE: float = 0.75 +_MAX_SAP_MAE: float = 0.85 _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 244ac76ae..85fe33be7 100644 --- a/datatypes/epc/domain/mapper.py +++ b/datatypes/epc/domain/mapper.py @@ -8092,10 +8092,17 @@ _PASHUB_STORAGE_HEATER_HHR_CODE: int = 409 # PasHub surveyed room-heater emitter class ("Heating System (Other)" field) → -# Table 4a code (spec PDF p.170, both 100% efficient). +# Table 4a code (spec PDF p.170; the electric rows are 100% efficient, the gas +# row bills its Table 4a seasonal efficiency). _PASHUB_ROOM_HEATER_TYPE_TO_SAP10: Dict[str, int] = { "Panel, Convector or radiant heaters": 691, "Water or oil-filled radiators": 694, + # Gas fire, open flue, 1980+, open fronted, sealed to fireplace — Table 4a + # code 603 (PCDB "sitting proud of, and sealed to, fireplace opening", + # eff 63%). 604 (back boiler) / 605 (flush-fitting live fuel effect) + # rejected: neither qualifier appears in the surveyed label. Same PCDB row + # the secondary table pins for its differently-phrased sibling label. + "Gas fire, Open flue, 1980 or later (Open fronted), Sealed to fireplace": 603, }