Every worklist UPRN now carries schema · engine SAP / lodged · flag. Tally: 64 healthy, 19 MVHR-not-credited (🚩 flag B), 6 heat-pump fuel-39 (🚩 flag A), 4 sparse/NOT MAPPABLE (⛔), 3 Elmhurst-pinned. MVHR is the largest accuracy gap. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.1 KiB
Autonomous corpus run — findings for review (2026-06-16)
🚩 MANUAL REVIEW NEEDED — heat-pump fuel code 39 mis-priced (CALCULATOR)
Owner action required. Database heat-pump certs (fuel code 39) are priced at the gas rate instead of electricity → SAP over-rated by ~14 (uprn_10093114053: eng 93 vs lodged 79). Root cause + evidence in §"BUGS" below and memory
heat-pump-fuel-39-mispriced. NOT auto-fixable: the correct electricity tariff for a database heat pump (standard code 30 vs a heat-pump tariff) is a SAP-domain judgement and it touches the Table-12a off-peak split. Decide the tariff, then it's a normal TDD fix. Affects every fuel-39 cert.
Triaged the full remaining worklist (~95 UPRNs): capture → map → engine SAP, flagging |eng−lodged| ≥ 8. Most certs map within ±4 of lodged. The worklist is fully annotated per-UPRN (schema · eng/lodged · flag).
Corpus-wide tally (after annotation)
| Bucket | Count |
|---|---|
| Mapped, healthy (within tolerance) | 64 |
| 🚩 MVHR not credited (flag B) | 19 ← biggest |
| 🚩 heat-pump fuel-39 (flag A) | 6 |
| ⛔ sparse / NOT MAPPABLE | 4 |
| ⚠ other moderate gap (undiagnosed) | 1 |
| ✅ Elmhurst-pinned | 3 |
✅ Schema coverage ADDED this run (low-risk, tested, committed)
- SAP-18.0.0 → full-SAP shape, dispatched to
from_sap_schema_17_1(no normalisation). Maps fine (e.g. 10094601287 → 80/lodged 84). - SAP-16.0 → same reduced-field 16.x path; only omitted
tenure, now defaulted in_normalize_sap_schema_16_x. Maps (100020933894 → 61/lodged 56). - (16.2/16.3/17.0 were added earlier in the session.)
⛔ Genuinely SPARSE 16.x certs (insufficient data — cannot score)
Missing 18 required fields incl. core fabric (glazed_area, window, door_count, habitable_room_count, multiple_glazing_type). Fail loud at from_dict (correct):
- uprn_10090844948 (16.3), uprn_10014314798 (16.2), uprn_10014314853 (16.3), uprn_10014314830 (16.2). These are minimal "reduced-data" lodgements.
🐞 BUGS FOUND (diagnosed; NOT fixed — for your review)
1. Opening dimensions in millimetres read as metres — MAPPER bug (SEVERE) ✅ FIXED
FIXED (TDD, _sanitise_opening_dimension_m + _sap_opening_area_m2): any opening
dimension > 50 m is mm → ÷1000. Applied to windows, roof windows, and the door
area-weighting. The 3 broken certs now score 90 / 81 / 79 (were all 1). 3 RED→GREEN
slices + refactor; fixture sap_17_1_mm_openings.json; 0 new pyright errors.
Original report below.
Full-SAP certs whose sap_building_parts[].sap_openings[] lodge width/height in
mm (mixed with metre rows in the same array) → the 17.1 mapper treats all as
metres → multi-million-m² windows → HTC in the millions → SAP clamps to 1.
- uprn_10093117227 (eng 1 / lodged 80): opening "Side Elevation" 2025×2100 (mm)
- uprn_10090317693 (eng 1 / lodged 88): 940×2100, 700×1500 (mm)
- uprn_10091636031 (eng 1 / lodged 85)
- Fix idea: sanitise
sap_openingsdims in_sap_17_1_windows/doors — any dimension > ~50 m is impossible → it's mm, ÷1000. Cleanly separates the mm rows (1000/2025/2100) from the m rows (3.06/3.6/1). Safe, high-value (3+ certs broken).
2. Heat-pump fuel code 39 mis-priced as gas — CALCULATOR bug
- uprn_10093114053 (eng 93 / lodged 79, +14): PCDB heat pump COP 3.33, fuel 39.
- Code 39 absent from
table_12.UNIT_PRICE_P_PER_KWH→ gas default 3.64p; CO2 factor correctly electricity (0.136). Inconsistent across price vs Table-12a. - Affects ALL database heat-pump certs (fuel 39). See memory
heat-pump-fuel-39-mispriced. Needs SAP-domain confirmation of the correct electricity tariff (standard 30 vs heat-pump) → not an autonomous fix.
⚠ MODERATE gaps — now CLASSIFIED into two patterns
Pattern A — heat-pump fuel-39 / high-COP certs (= bug #2, both directions)
- uprn_10090342180 (fuel 39): +9 (over-rates, classic fuel-39 mispricing)
- uprn_10093388053 (fuel 39): −7 · uprn_100090108846 (fuel 29 HP, COP 3.44): −15
- All resolve once the heat-pump fuel pricing is fixed (🚩 review item above).
Pattern B — 🚩 MVHR heat recovery NOT modelled — CALCULATOR gap (NEW, REVIEW)
Full-SAP gas certs that UNDER-predict −6…−12 ALL carry an MVHR system index
(mechanical_vent_system_index_number 500352 / 500230 / 500438 …). MVHR recovers
exhaust heat (big SAP boost), but the engine models mechanical ventilation as
extract heat loss, not heat recovery (same as the worked-ref note: "decentralised
MEV → EXTRACT_OR_PIV_OUTSIDE, priced as extract loss"). So every MVHR cert is
systematically under-credited.
- uprn_10090343767 (−12), 10090341811 (−9), 10093386427 (−9), 202211170 (−7), 10091636116 (−8), 10093049867 (−6), 10090034761 (−6), 10091636031 (−6).
- Needs the SAP Appendix Q / PCDB MVHR heat-recovery efficiency model — a feature,
not a one-line fix. See memory
mvhr-heat-recovery-not-modelled.
Other
- uprn_100061086424 (RdSAP-17.0, fuel 29, −15): not yet diagnosed (off-peak electric).
NOT diagnosed individually
The ~70 within-±4 certs are not listed; they look healthy.