# 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.