docs(adr): ADR-0068 mechanism — cert-native anchors, not a synthesis slot

Decision 4 + Status rewritten: band → Table 4b code (C-G) / PCDB index (A/B),
carried by cert-native fields only. Records the review rejection of the
(winter,summer) slot on MainHeatingDetail.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-07-30 13:08:08 +00:00
parent 307fdfb270
commit 10acaa48cc

View file

@ -2,14 +2,16 @@
## Status
accepted — implemented & live (band parser + overlay `(winter, summer)` slot +
calculator precedence + classifier/backfill). C-and-below from accredited Table
4b; **A/B validated and live for gas/LPG/biogas and oil** — gas from accredited
Elmhurst RdSAP10 builds (PCDB 18790 → 90.6/81.6, 15029 → 88.0/79.4), oil pinned
from the accredited PCDB records (17292 → 90.6/82.8, 10498 → 88.0/80.2) after the
gas builds proved Elmhurst's worksheet (206)/(217) == the PCDB winter/summer
verbatim (SAP 10.2 App D2.1). Whole-dwelling check: A-rated cert 15017550 +1.78
SAP; gov-API RdSAP corpus unmoved.
accepted — implemented & live. Band → **cert-native efficiency anchor** (C-and-
below: the band's Table 4b `sap_main_heating_code`; A/B: a representative PCDB
`main_heating_index_number`) — no synthesised field on the cert datatype (see
Decision 4). **A/B live for gas/LPG/biogas and oil**: gas from accredited Elmhurst
RdSAP10 builds (PCDB 18790 reg / 15029 combi; 18964 gas-A-combi, 8106 gas-B-reg),
oil from accredited PCDB (17292, 10498, 15959) after the gas builds proved
Elmhurst's worksheet (206)/(217) == the PCDB winter/summer verbatim (SAP 10.2 App
D2.1). Oil A-combi has no >90 % product (≈0 homes) → keeps its code-130 default.
Each A/B id CI-guarded. Whole-dwelling: A-combi cert 15017550 +2.06 SAP (via PCDB
idx), D-regular 0.98 (via code); gov-API RdSAP corpus unmoved.
## Context
@ -68,17 +70,30 @@ gave us), distinct from the sibling **fuel-override data-quality** question
policy ("we only correct downward") that a later reader would silently "fix"
into (a) anyway.
4. **Mechanism: `(archetype + fuel) → base code`, then `band → (winter, summer)
efficiency slot` that overrides the code's default.** The **archetype and its
resolved fuel** pick the *base* `sap_main_heating_code` — this is already
ADR-0067's "resolve fuel at resolution" (`Gas boiler, regular` + an oil
`main_fuel``Oil boiler, regular` → an oil code), and the code still drives
system-type behaviour (combi vs regular hot water, etc.). The **band** then
sets a `(winter, summer)` seasonal-efficiency pair on the overlay /
`MainHeatingDetail` that the calculator consumes **ahead of** the code's
Table 4b default — mirroring the existing PCDB precedence
(`pcdb_main.winter_efficiency_pct`, `cert_to_inputs.py:2103`). So efficiency is
looked up by **(fuel family, boiler type, band)**, never a single annual number.
4. **Mechanism: `(archetype + fuel) → base code`, then `band → a cert-native
efficiency anchor`.** The **archetype and its resolved fuel** pick the *base*
`sap_main_heating_code` — ADR-0067's "resolve fuel at resolution" (`Gas boiler,
regular` + an oil `main_fuel` → `Oil boiler, regular` → an oil code). The
**band** then picks the boiler's efficiency using the **same fields a real
cert carries** — deliberately *not* a synthesised efficiency field on the cert
datatype (an earlier draft added a `(winter, summer)` slot on
`MainHeatingDetail`; rejected in review as it had no lodged-cert analogue and
polluted the API-cert type):
- **C-and-below** → the band's **Table 4b `sap_main_heating_code`** (regular
102→106/101/105/115; combi 104→108/103/107/118). The code is itself
combi/regular-specific, so system-type behaviour is preserved by the code
alone; the existing Table 4b path resolves the efficiency.
- **A/B** (exceed Table 4b's 84 % ceiling, so no code exists) → a
**representative PCDB `main_heating_index_number`**, type-matched to the
archetype (combi vs regular, because the combi-loss cascade reads the
record). `_fold_heating` clears the base code when an index is present, so
the **Effective EPC reads as a real PCDB-lodged cert**, resolved by the
existing PCDB Appendix D2.1 path (winter + summer + combi-loss). This is also
the natural on-ramp to a **future user-supplied product → PCDB id**.
So efficiency is looked up by **(fuel family, boiler type, band)** and carried
by cert-native fields only — never a synthesised number on the cert type. Each
A/B product id is CI-guarded to its accredited `(winter, summer)`.
5. **The band mechanism covers exactly the SEDBUK-rated wet boilers — gas and
oil — and both are currently inflated.** Mains gas, LPG and biogas **share** the