docs: mark 19.0/21.0.0 ventilation fixed (feat/rdsap-19-21-ventilation) 🟪

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-06-26 10:00:48 +00:00
parent a63276387e
commit cc1c763946

View file

@ -12,12 +12,15 @@ Each is **separate from** the full-SAP fix (`fix/baseline-downgrades`).
`mechanical_ventilation_kind`. ✅
- `21_0_1` — rich inline `SapVentilation(...)` incl. the kind. ✅
- **`17_1` / `18_0` / `20_0_0`** — built `SapVentilation(sheltered_sides=…)` and
**dropped** the kind. **Fixed in this PR** (mirror `_api_mechanical_ventilation_kind`).
- **`19_0` / `21_0_0`** — set **no `sap_ventilation` at all** → the dataclass
default empty object. They drop the **entire** ventilation block (sheltered
sides + kind + everything), not just the kind. **Still open** — a bigger,
separate consistency fix (give them a proper `sap_ventilation` construction,
mirroring 21.0.1), not a one-liner.
**dropped** the kind. **Fixed in #1333** (mirror `_api_mechanical_ventilation_kind`).
- **`19_0` / `21_0_0`** — set **no `sap_ventilation` at all** → the
`EpcPropertyData` default (`None`). They dropped the **entire** ventilation
block (sheltered sides + kind), not just the kind. **Fixed in
`feat/rdsap-19-21-ventilation`**: both now construct `SapVentilation(...)`
mirroring 21.0.1, but only for the fields each schema lodges — the top-level
`mechanical_ventilation` enum (→ kind) and `sheltered_sides` (from
`built_form`). Neither lodges the fan/flue/vent counts, so those stay unset
(RdSAP Table-5 age defaults — see counts note below).
Either way, an MEV/MVHR cert (`mechanical_ventilation ≠ 0`) is treated as
**natural** by the affected mappers — wrong §2 ventilation cascade (and heat
@ -34,14 +37,15 @@ The granular **counts** (fans/flues/vents) are *not* a bug: older RdSAP open-dat
certs don't lodge them, and the calc correctly uses RdSAP Table-5 age defaults.
`percent_draughtproofed` is mapped (top-level) and read by the calc.
**Remaining fix (19.0 / 21.0.0):** give them a proper `sap_ventilation`
construction mirroring 21.0.1. **Calc-facing → validate** with the RdSAP-21.0.1
corpus (must hold 73.3% / MAE 0.774) plus an **Elmhurst-anchored MEV/MVHR
`RealCertExpectation`** (the corpus is natural-vent-dominated, so the kind change
isn't exercised by it). Quantify blast radius: count older-RdSAP certs with
`mechanical_ventilation ≠ 0`. The 17.1/18.0/20.0.0 fix in this PR is guarded by a
mapper-level MVHR test + the corpus/mapper-corpus staying green, with the Elmhurst
MEV/MVHR anchor as the SAP-accuracy fast-follow.
**19.0 / 21.0.0 fix (done, `feat/rdsap-19-21-ventilation`):** both build
`SapVentilation(sheltered_sides=…, mechanical_ventilation_kind=…)` mirroring
21.0.1. Guarded by the extended mapper-level MVHR test + a `sheltered_sides`
regression, with the corpus (held 73.3% / MAE 0.774 — it's 21.0.1-only so the
change isn't exercised by it) and the 6002-case mapper-corpus staying green.
**Outstanding SAP-accuracy fast-follow:** an **Elmhurst-anchored MEV/MVHR
`RealCertExpectation`** (the corpus is natural-vent-dominated, so the kind
change isn't exercised by it). **Blast radius (still to quantify):** count
portfolio-796 certs on schema 19.0 / 21.0.0 with `mechanical_ventilation ≠ 0`.
## 2. FE "Main Fuel: Unknown" is FE-side, not a Model mapper gap