diff --git a/docs/baseline-downgrade-followups.md b/docs/baseline-downgrade-followups.md index 2157eb7f..0b7464c1 100644 --- a/docs/baseline-downgrade-followups.md +++ b/docs/baseline-downgrade-followups.md @@ -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