mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +00:00
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>
91 lines
5.1 KiB
Markdown
91 lines
5.1 KiB
Markdown
# 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_openings` dims 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.
|