diff --git a/domain/sap10_calculator/docs/HANDOVER_MAPPER_BUGS.md b/domain/sap10_calculator/docs/HANDOVER_MAPPER_BUGS.md index b720c2c1..aad9253b 100644 --- a/domain/sap10_calculator/docs/HANDOVER_MAPPER_BUGS.md +++ b/domain/sap10_calculator/docs/HANDOVER_MAPPER_BUGS.md @@ -19,21 +19,28 @@ API-mapper/cascade bugs the audit surfaced. `_EXPECTATIONS` in `test_golden_fixtures.py` holds **53 pinned golden certs**. The suite is GREEN. **Only 3 have a non-zero SAP integer residual**, and they split into two kinds: -| cert | lodged | cont SAP | resid | nature | +| cert | lodged | cont SAP | resid | nature (from the cert's `notes:`) | |---|---|---|---|---| -| **2130-1033-4050** | 82 | **83.349** | **+1** | REAL +0.85 over-prediction — multi-part **solid-brick** wall fabric | -| **7536-3827-0600** | 68 | **69.071** | **+1** | REAL +0.57 over-prediction — multi-bp **D/L/F cavity** wall fabric | -| **0240-0200-5706** | 73 | **72.462** | **−1** | **ARCHITECTURAL — do NOT chase, do NOT re-pin** (see below) | +| **7536-3827-0600** | 68 | **69.071** | **+1** | +0.57 over — multi-age bps (Main D / Ext1 L / Ext2 F); **glazing U** (S0380.97 set glazing_type=2 → Table 24 spec U=2.0, but the cert's lodged U "appears higher than the spec default") | +| **2130-1033-4050** | 82 | **83.349** | **+1** | +0.85 over — end-terrace + 1 ext, gas combi PCDB 17505, **2× PV arrays**; SAP +1 came from the **cohort PV-β cascade interaction** (S0380.45/.49), not a pinpointed fabric line; PE residual −8.22 sits in gas-combi PE + secondary credit | -**The two real targets are 2130 + 7536.** Both are fabric *over*-predictions on **multi-part -wall** geometry (a wall with alternative-construction sub-areas / multiple building parts), -so they may share a single root cause in the §3 per-part wall area/U handling — a fix to -one could close both. Method: walk the §3 heat-transmission cascade per-part vs the lodged -register subsystem ratings (the certs are API-only — no worksheet — so the bar is ±0.5 SAP -vs lodged, but the goal is the integer flip 83→82 / 69→68, i.e. shave ~0.85 / ~0.57 off the -continuous SAP). If a multi-part-wall U or area is over-counted, that is the lever. The user -generates Elmhurst worksheets on request — ASK for a simulated case mirroring 2130's wall -(multi-part solid brick) rather than guess a U-value (the session methodology lesson). +**These are TWO DIFFERENT root causes — not a shared one** (an earlier audit label calling +both "multi-part wall" was wrong; trust the `notes:` above). + +- **7536** is the more tractable: a clear **glazing-U** hypothesis. S0380.97 forced + `glazing_type=2` to the Table 24 default U=2.0; the note suspects the cert's true per-bp + glazing U is higher (multi-age D/L/F geometry). Walk §3 window `(27)` per-bp vs the lodged + register window rating; the lever is likely the glazing U for one of the extensions. ASK + the user for a simulated Elmhurst worksheet mirroring 7536's glazing (double-glazed, + multi-age bps) to pin the true `(27)` U rather than guess. +- **2130** is harder: the SAP +1 is a PV-β / cohort *cascade interaction*, not a single + fabric line. Its PE residual (−8.22) is a documented gas-combi-PE + secondary-credit + deferral. Decompose which metric drives the integer flip (cost/EI vs PE) before touching + anything; this one may need the PV/secondary path, not fabric. + +Both certs are API-only (no worksheet) → bar is ±0.5 SAP vs lodged; the goal is the integer +flip (69→68 / 83→82), i.e. shave ~0.57 / ~0.85 off the continuous SAP. Per the session +methodology lesson, ASK for a worksheet rather than guess a U-value or factor. **0240 (−1) is NOT driveable from the JSON and the user has decided NOT to re-pin it — document the cause only.** Continuous SAP is 72.462; the true SAP is **72**. The lodged