mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
docs: handover post S0380.160..163
Wraps the four slices closing the heating-systems corpus from Σ|ΔSAP_c| 1.24 → 0 (25/25 cascade-OK variants SAP/cost/CO2/PE EXACT, except solid fuel 2 summer-immersion-blend artifact). Highest-leverage next slice: close solid fuel 2 (the only remaining open variant in the cascade-OK tier) via the S0380.154 blend code path — likely a parallel Elmhurst-mirror gate for the summer- immersion CO2/PE factors. Other open fronts: 16 blocked-tier mapper extensions; pcdb 1 sub- tolerance -0.011 SAP; cohort-2 golden residuals tightening per [[feedback-golden-residuals-near-zero]]. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
9896644c4c
commit
ef7fe01282
1 changed files with 295 additions and 0 deletions
295
domain/sap10_calculator/docs/HANDOVER_POST_S0380_163.md
Normal file
295
domain/sap10_calculator/docs/HANDOVER_POST_S0380_163.md
Normal file
|
|
@ -0,0 +1,295 @@
|
|||
# Handover — post Slices S0380.160..163
|
||||
|
||||
Branch: `feature/per-cert-mapper-validation`. **HEAD `9896644c`**.
|
||||
Predecessor: [`HANDOVER_POST_S0380_159.md`](HANDOVER_POST_S0380_159.md).
|
||||
|
||||
## TL;DR
|
||||
|
||||
Four slices landed; the 41-variant controlled-variable heating-systems
|
||||
corpus closed from Σ|ΔSAP_c| 1.24 → 0 on its 25 cascade-OK variants.
|
||||
All 25 now SAP / cost / CO2 / PE **EXACT** vs the Elmhurst worksheet
|
||||
on all 4 metrics, with only `solid fuel 2` open via the S0380.154
|
||||
summer-immersion-blend artifact. The master doc gained a new §8
|
||||
"Elmhurst-mirrored spec divergences" section seeded by .163.
|
||||
|
||||
| Slice | Commit | Spec rule / engine behaviour closed |
|
||||
|---|---|---|
|
||||
| S0380.160 | `af34ad98` | SAP 10.2 Table 5a (PDF p.177) "Central heating pump in heated space" — wet-pump gate. Pre-slice cascade added 7 W pump gain for every non-HP main; row only applies to mains with a water-loop circulation pump (electric storage / solid-fuel room heaters / electric direct-acting are dry → 0 W). |
|
||||
| S0380.161 | `482ce88b` | SAP 10.2 Table 5a (PDF p.177) "Warm air heating system fans a) c)" — GAIN side = SFP × 0.04 × V. Sister to S0380.158 (kWh side); wires Cat 5 warm-air HP (e.g. electric 2 code 524) + Cat 9 warm-air non-HP. Footnote c) omission when balanced MV present. |
|
||||
| S0380.162 | `8d465d97` | SAP 10.2 Appendix N3.1 (PDF p.105) "The default heat gain from Table 5a is included via worksheet (70)" for electric HPs. .160 had over-stripped HP pump gain; .162 refines: PCDB Table 362 records keep 0 W (pump in COP per N1.2.1); Cat 5 warm-air HPs keep 0 W (no water pump); Cat 4 HPs without PCDB get 3 W default. |
|
||||
| S0380.163 | `9896644c` | **First Elmhurst-mirrored spec divergence.** SAP 10.2 Table 12 footnote (t) reads "monthly Table 12e factors should be used" for all electric end-uses; the BRE-approved Elmhurst engine uses Table 12 annual flat (1.501 PE / 0.136 CO2) for the worksheet (278) "Water heating (low-rate cost)" line on dual-rate tariffs. Cascade now mirrors the engine — STANDARD tariff still monthly, dual-rate (7-hour / 10-hour / 18-hour / 24-hour) → annual. |
|
||||
|
||||
Extended handover suite at HEAD: **907 pass, 0 fail.** Pyright net-zero
|
||||
(43 → 43).
|
||||
|
||||
## Disciplines reinforced this session
|
||||
|
||||
1. **Per-line walk before forming a spec hypothesis.** Every closure
|
||||
came from dumping the failing variant's worksheet line-by-line:
|
||||
- .160: cascade `pumps_fans[Jan] = 7.0` vs worksheet (70) = 0 for
|
||||
electric 3 → Table 5a "Central heating pump" row inapplicable.
|
||||
- .161: cascade (70) = 0 for electric 2 vs worksheet 13.6350 W =
|
||||
1.5 × 0.04 × 227.25 → Table 5a warm-air-fan row never wired.
|
||||
- .162: cascade (70) = 0 for ashp vs worksheet 3.0 W → Appendix
|
||||
N3.1 default heat gain rule for electric HPs without PCDB.
|
||||
- .163: cascade HW PE factor 1.5214 vs worksheet 1.5010 →
|
||||
Elmhurst applies Table 12 annual for low-rate dual-rate billing.
|
||||
|
||||
2. **`[[feedback-spec-floor-skepticism]]` cuts both ways.** The
|
||||
handover post-.159 claimed the lighting-PE +48.66 cohort was
|
||||
"non-closable per spec" (Table 12 footnote (t) mandates monthly).
|
||||
Per-line walk revealed: cascade IS spec-correct, Elmhurst diverges,
|
||||
and per [[feedback-software-no-special-handling]] we mirror the
|
||||
engine. The user pushed back on the "non-closable" framing and
|
||||
that pushback was correct — the divergence IS closable, just at
|
||||
the cost of one documented Elmhurst mirror. New master-doc §8
|
||||
captures the divergence with criteria for when to add more.
|
||||
|
||||
3. **Slice rollback as a debugging tool.** S0380.160 over-stripped
|
||||
HP pump gain (zeroed for all HPs including ashp/gshp where the
|
||||
spec applies the Table 5a default). .162 didn't revert .160 — it
|
||||
refined the predicate with the Appendix N3.1 carve-out, so PCDB-
|
||||
Table-362 HPs stay at 0 and non-PCDB HPs apply the default.
|
||||
|
||||
## Current residual state at HEAD `9896644c`
|
||||
|
||||
### Cascade-OK tier (25 variants on pin grid)
|
||||
|
||||
**All 25 variants now SAP / cost / CO2 / PE EXACT (|Δ| < 1e-3)** vs the
|
||||
worksheet, except `solid fuel 2`:
|
||||
|
||||
| Variant | ΔSAP_c | Δcost | ΔCO2 | ΔPE | Notes |
|
||||
|---|---:|---:|---:|---:|---|
|
||||
| ashp | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| electric 1 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| electric 2 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT (was -0.11 SAP) |
|
||||
| electric 3 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT (was +0.12 SAP) |
|
||||
| electric 5 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| electric 6 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| electric 7 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| electric 8 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| electric 9 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| gshp | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| oil 1 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| oil pcdb 1 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| oil pcdb 2 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| oil pcdb 3 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| pcdb 1 | -0.0108 | +£0.24 | +1.33 | +5.70 | sub-tolerance |
|
||||
| **solid fuel 2** | **±0.0000** | **±0.00** | **-93.10** | **-1027.51** | S0380.154 summer-immersion-blend artifact |
|
||||
| solid fuel 3 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| solid fuel 4 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| solid fuel 5 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| solid fuel 6 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| solid fuel 7 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| solid fuel 8 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| solid fuel 9 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| solid fuel 10 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
| solid fuel 11 | ±0.0000 | ±0.00 | ±0.00 | ±0.00 | EXACT |
|
||||
|
||||
**Σ|ΔSAP_c| = 0.011** (entirely `pcdb 1`, was 2.87 at start of
|
||||
S0380.156). 24/25 variants are SAP/cost/CO2/PE EXACT.
|
||||
|
||||
### Blocked tier (16 variants — `MissingMainFuelType`)
|
||||
|
||||
Unchanged. Community heating × 5, electric storage 11-14, no system,
|
||||
oil 2-6, pcdb 3.
|
||||
|
||||
## Open fronts ranked by leverage
|
||||
|
||||
### 1. **`solid fuel 2` — S0380.154 summer-immersion-blend CO2/PE — −93/-1027**
|
||||
|
||||
Cascade ΔSAP / Δcost are EXACT but ΔCO2 = −93 kg/yr and ΔPE = −1027
|
||||
kWh/yr remain. Source: S0380.154 split HW into winter-boiler + Jun-Sep
|
||||
electric-immersion blend. The blend (`_section_12_4_4_hw_blend`) sets
|
||||
its own `hw_co2_factor` / `hw_pe_factor` directly — it doesn't route
|
||||
through `_hot_water_co2_factor_kg_per_kwh` / `_hot_water_primary_factor`
|
||||
which got the .163 dual-rate annual gate.
|
||||
|
||||
Likely a parallel fix: either route the blend through the same Elmhurst-
|
||||
mirror gate, OR investigate whether Elmhurst applies Table 12d/12e
|
||||
monthly for the summer-immersion months (the 4 Jun-Sep months) and the
|
||||
boiler factor for the 8 winter months, vs the cascade's all-monthly
|
||||
treatment. Per-line walk needed first — `_section_12_4_4_hw_blend`
|
||||
docstring is at `domain/sap10_calculator/rdsap/cert_to_inputs.py:4870`.
|
||||
|
||||
**Highest leverage:** closes the LAST open variant in the corpus
|
||||
cascade-OK tier. After this, 25/25 EXACT on all 4 metrics.
|
||||
|
||||
### 2. **`pcdb 1` — −0.0108 SAP / +£0.24 / +1.33 CO2 / +5.7 PE**
|
||||
|
||||
Sub-tolerance gap. PCDB-listed gas boiler (Table 322 index 716). Not
|
||||
the same shape as the lighting-PE quirk (different magnitude per kWh).
|
||||
Probably a Δ in cascade HW or SH computation specific to PCDB Table
|
||||
322 path. Lower leverage — already < 0.05 SAP.
|
||||
|
||||
### 3. **Mapper-extension unblocking (16 blocked variants)**
|
||||
|
||||
Separate from cascade closure. Each unblock = one mapper slice:
|
||||
- Community heating × 5 — extend extractor for §14.1 block.
|
||||
- Electric storage 11-14 — extend `_ELMHURST_MAIN_HEATING_EES_TO_FUEL_CODE`
|
||||
for EES codes WEA, REA, OEA.
|
||||
- "No system" — spec-assumed direct electric.
|
||||
- Oil 2-6 — Table 4b non-oil liquid fuels (HVO/FAME/B30K/bioethanol).
|
||||
- pcdb 3 — `"Bulk LPG"` mapper dict gap.
|
||||
|
||||
Each variant unblocked becomes a new pin on the corpus residual grid;
|
||||
closures from there follow the existing per-line-walk discipline.
|
||||
|
||||
### 4. **Cohort-2 golden residuals**
|
||||
|
||||
`test_golden_fixtures.py` carries PE/CO2 residual pins for 38 cohort-2
|
||||
certs. The S0380.163 fix (HW PE/CO2 annual on dual-rate) likely
|
||||
affected several. After S0380.163 ran the golden suite passes (59/59);
|
||||
verify the pinned residuals are still optimal or could now be tightened
|
||||
toward zero per [[feedback-golden-residuals-near-zero]]. **Quick check
|
||||
slice:** loop the golden fixtures, dump current residual vs pinned
|
||||
residual, re-pin if pinned > actual.
|
||||
|
||||
## Slice history (this session)
|
||||
|
||||
| Slice | HEAD | Scope |
|
||||
|---|---|---|
|
||||
| S0380.160 | `af34ad98` | SAP 10.2 Table 5a (PDF p.177) row 1 "Central heating pump in heated space" wet-pump gate. New `_any_main_system_has_central_heating_pump(epc)` predicate in `internal_gains.py` mirroring `cert_to_inputs._is_wet_boiler_main` (S0380.149's kWh-side gate). Pre-slice the cascade applied 7 W (UNKNOWN-date default) for every non-HP main; per worksheet evidence (electric 3 (70) = 0 every month vs cascade 7 W), dry mains have no central heating pump and the row simply doesn't apply. 10-variant cluster closure: electric 3/5/6/7/8/9 + solid fuel 4/9/10/11 ΔSAP +0.085..+0.121 → ±0.0000 EXACT. |
|
||||
| S0380.161 | `482ce88b` | SAP 10.2 Table 5a (PDF p.177) row "Warm air heating system fans a) c)" GAIN side = SFP × 0.04 × V W with default SFP 1.5 W/(l/s) per footnote c). Sister to S0380.158 which wired the Table 4f kWh side (136.35 kWh/yr). Per-line walk on electric 2 (Cat 5 ASHP code 524): worksheet (70) = 13.6350 W heating-mask, cascade 0 W. New `_any_main_system_has_warm_air_distribution(epc)` + `_has_balanced_mechanical_ventilation(epc)` predicates + `_TABLE_5A_WARM_AIR_FAN_DEFAULT_SFP_W_PER_L_PER_S = 1.5` constant. Closures electric 2: ΔSAP −0.1087 → −0.0000 EXACT. |
|
||||
| S0380.162 | `8d465d97` | SAP 10.2 Appendix N3.1 (PDF p.105) "Circulation pump and fan" — "For electric heat pumps: ... The default heat gain from Table 5a is included via worksheet (70)." S0380.160 over-stripped (zeroed for all HPs); .162 refines the HP gate in `_any_main_system_has_central_heating_pump`: PCDB Table 362 records keep 0 W (pump in COP per N1.2.1); Cat 5 warm-air HPs keep 0 W (no water pump; warm-air fan via .161); Cat 4 HPs without PCDB get the Table 5a default per pump age. Closures: ashp ΔSAP −0.0240 → +0.0000 EXACT, Δcost +£0.55 → +£0.00 EXACT, ΔPE +36.34 → +25.51 (residual narrows to HW annual-vs-monthly Elmhurst quirk only); gshp same shape. |
|
||||
| **S0380.163** | **`9896644c`** | **First Elmhurst-mirrored spec divergence. SAP 10.2 Table 12 footnote (t) (PDF p.189) reads literally would apply Table 12e monthly factors to all electric end-uses including dual-rate HW. The BRE-approved Elmhurst engine applies Table 12 ANNUAL flat (1.501 PE / 0.136 CO2) for the worksheet (278) "Water heating (low-rate cost)" row on dual-rate tariffs. New `tariff: Tariff` parameter on `_hot_water_primary_factor` + `_hot_water_co2_factor_kg_per_kwh`: STANDARD → monthly cascade (unchanged); 7-hour/10-hour/18-hour/24-hour → Table 12 annual flat. 18-variant deferred cohort closure (electric 1/2/3/5/6/7/8/9 + solid fuel 4/5/6/7/8/9/10/11 + ashp + gshp): ΔCO2 +6.31/+11.95 → ±0.0000 EXACT, ΔPE +25.51/+48.66 → ±0.0000 EXACT. All 25 cascade-OK variants now SAP / cost / CO2 / PE EXACT (except solid fuel 2 summer-immersion blend artifact). Master doc gained new §8 "Elmhurst-mirrored spec divergences" section.** |
|
||||
|
||||
## Standard slice workflow (unchanged)
|
||||
|
||||
1. Read spec page + identify rule (or Elmhurst worksheet pattern)
|
||||
2. Probe one variant; verify diagnosis via monkey-patch / direct walk
|
||||
3. Write failing AAA test (literal `# Arrange / # Act / # Assert`)
|
||||
4. Implement helper / dispatch entry / mapper extension
|
||||
5. Re-pin affected variants (DO NOT widen tolerance)
|
||||
6. Run extended handover suite (command below)
|
||||
7. Pyright net-zero check (`git stash` → pyright → `git stash pop` → pyright)
|
||||
8. If mirroring Elmhurst against spec literal: add a row to
|
||||
`SAP_CALCULATOR.md §8 "Elmhurst-mirrored spec divergences"`.
|
||||
9. Commit with spec citation + `Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>`
|
||||
10. Update `project-heating-systems-corpus` + `MEMORY.md` index
|
||||
|
||||
## Test baseline at HEAD `9896644c`
|
||||
|
||||
```bash
|
||||
PYTHONPATH=/workspaces/model python -m pytest \
|
||||
backend/documents_parser/tests/test_summary_pdf_mapper_chain.py \
|
||||
backend/documents_parser/tests/test_heating_systems_corpus.py \
|
||||
backend/documents_parser/tests/test_elmhurst_extractor.py \
|
||||
backend/documents_parser/tests/test_elmhurst_end_to_end.py \
|
||||
domain/sap10_calculator/worksheet/tests/test_e2e_elmhurst_sap_score.py \
|
||||
domain/sap10_calculator/worksheet/tests/test_heat_transmission.py \
|
||||
domain/sap10_calculator/worksheet/tests/test_internal_gains.py \
|
||||
domain/sap10_calculator/worksheet/tests/test_solar_gains.py \
|
||||
domain/sap10_calculator/worksheet/tests/test_dimensions.py \
|
||||
domain/sap10_calculator/worksheet/tests/test_rating.py \
|
||||
domain/sap10_calculator/worksheet/tests/test_ventilation.py \
|
||||
domain/sap10_calculator/worksheet/tests/test_appendix_h_solar.py \
|
||||
domain/sap10_calculator/worksheet/tests/test_mev.py \
|
||||
domain/sap10_calculator/rdsap/tests/test_cert_to_inputs.py \
|
||||
domain/sap10_calculator/rdsap/tests/test_golden_fixtures.py \
|
||||
domain/sap10_calculator/tests/test_pcdb_table_322_lookup.py \
|
||||
domain/sap10_calculator/tests/test_pcdb_table_329_lookup.py \
|
||||
domain/sap10_calculator/tests/test_table_12a.py \
|
||||
--no-cov -q
|
||||
```
|
||||
|
||||
Expected: **907 pass, 0 fail.**
|
||||
|
||||
## Memories to load (in order)
|
||||
|
||||
```
|
||||
project-heating-systems-corpus # HEAD 9896644c
|
||||
feedback-sap-10-2-only-never-10-3 # CRITICAL — never reference SAP 10.3
|
||||
feedback-software-no-special-handling # CRITICAL — informed S0380.163; mirror the engine
|
||||
feedback-spec-floor-skepticism # cuts both ways: spec-floor AND non-closable framings
|
||||
feedback-worksheet-not-api-reference
|
||||
feedback-spec-citation-in-commits
|
||||
feedback-verify-handover-claims
|
||||
feedback-zero-error-strict # TARGET: ΔSAP_c < 1e-4 vs worksheet
|
||||
feedback-commit-per-slice
|
||||
feedback-aaa-test-convention
|
||||
feedback-e2e-validation-philosophy
|
||||
feedback-abs-diff-over-pytest-approx
|
||||
feedback-golden-residuals-near-zero # relevant for Open Front #4 below
|
||||
feedback-one-e-minus-4-across-the-board
|
||||
reference-unmapped-sap-code
|
||||
reference-unmapped-api-code
|
||||
project-oil-price-spec-divergence
|
||||
```
|
||||
|
||||
## What NOT to do
|
||||
|
||||
- **Don't reference SAP 10.3** — track 10.2 deliberately.
|
||||
- **Don't widen pin tolerances** — re-pin smaller or find the spec gap.
|
||||
- **Don't add empirical gates** to keep cohort pins stable when a
|
||||
spec rule clearly applies. Add Elmhurst-mirror gates ONLY when
|
||||
worksheet evidence is reproducible across multiple certs.
|
||||
- **Don't re-investigate Slices .91..163** — all settled.
|
||||
- **Don't add new helpers to `domain/sap10_ml/`** — on deprecation
|
||||
path; `domain/sap10_calculator/tables/` is the canonical home.
|
||||
- **Don't treat ΔSAP=0.07 as "closed"** — target is <1e-4 vs worksheet.
|
||||
- **Don't add a new SAP_CALCULATOR.md §8 divergence row without per-line
|
||||
worksheet evidence across ≥2 certs.** The Elmhurst-mirror gate is
|
||||
the exception, not the rule; default to spec-correct cascade.
|
||||
|
||||
## Spec source quick-reference
|
||||
|
||||
All under `domain/sap10_calculator/docs/specs/`:
|
||||
|
||||
- **SAP 10.2 full spec**: `sap-10-2-full-specification-2025-03-14.pdf`
|
||||
- **§4** (p.135-137) — water heating worksheet (45..65)
|
||||
- **§7** (p.26) — Mean internal temperature
|
||||
- **§9.2.4** (p.27) — Solid fuel boiler systems
|
||||
- **§9.4.11** (p.30) — Boiler interlock: -5pp to BOTH SH and DHW
|
||||
- **§9.4.19** (p.34-35) — Storage heater controls
|
||||
- **§12.4.3** (p.36) — Electric tariff types
|
||||
- **§12.4.4** (p.36-37) — Solid fuel back-boiler summer immersion.
|
||||
**Used in Slice .154; the source of `solid fuel 2`'s open
|
||||
residual (Open Front #1).**
|
||||
- **§A.2.2** (~p.189) — Forced-secondary set
|
||||
- **Appendix D §D2.1 (2)** (p.57) — Eq D1 monthly water eff cascade
|
||||
- **Appendix F2** (p.63) — 18-hour CPSU
|
||||
- **Appendix N3.1** (p.105) — Heat pump circulation pump GAIN
|
||||
inclusion rule. **Slice .162.**
|
||||
- **Appendix N3** (p.107-109) — Heat pump DHW efficiency cascade
|
||||
- **Table 2b** (p.159) — Cylinder temperature factor + note b ×0.9
|
||||
rule for boiler/warm-air/HP. **Slice .157.**
|
||||
- **Table 3** (p.160) — Primary circuit loss; zero-loss list incl.
|
||||
electric immersion. **Slices .152 / .153 / .156.**
|
||||
- **Table 4a** (p.163-170) — heating systems + R splits. **Slices
|
||||
.155 / .159.**
|
||||
- **Table 4b** (p.168) — gas/liquid boilers seasonal efficiency
|
||||
- **Table 4e** (p.171-173) — heating system controls + temperature
|
||||
adjustment column. Group 4 storage controls 2401/2402/2403.
|
||||
- **Table 4f** (p.174) — pumps + fans (incl. warm-air row).
|
||||
**Slice .158.**
|
||||
- **Table 5a** (p.177) — pump + fan GAINS (incl. central heating
|
||||
pump and warm-air-fan rows). **Slices .160 / .161 / .162.**
|
||||
- **Tables 9 / 9a / 9b / 9c** (p.182-184) — heating periods, MIT
|
||||
cascade, T_sc formula.
|
||||
- **Table 11** (p.188) — secondary heating fraction
|
||||
- **Table 12** (p.189) — fuel prices + annual CO2/PE factors;
|
||||
footnotes (s)/(t) point to monthly cascades. **Slice .163
|
||||
(Elmhurst-mirror divergence).**
|
||||
- **Table 12a** (p.191) — high/low-rate fraction by system × tariff
|
||||
- **Table 12d/12e** (p.194-195) — monthly variation in CO2/PE
|
||||
factors. **Slice .163 (mirrored against literal reading).**
|
||||
- **Table 13** (p.197) — high-rate fraction for electric DHW
|
||||
- **RdSAP 10 spec**: `RdSAP 10 Specification 10-06-2025.pdf`
|
||||
- **§4.1 Table 5** (p.28) — Ventilation parameters
|
||||
- **§5** (p.29) — Floor infiltration spec rule
|
||||
- **§10.11 Table 29** (p.56) — Heating/HW parameters
|
||||
- **§19 Table 32** (p.95) — RdSAP10 fuel prices / CO2 / PE
|
||||
- **§19.2** (p.94) — RdSAP10 CO2/PE = SAP10.2 Table 12 (defers to
|
||||
SAP 10.2 §14 for PE calc — confirms footnote (t) applies to
|
||||
EPC PE block).
|
||||
|
||||
## Master doc
|
||||
|
||||
The canonical architecture + API + validation doc lives at
|
||||
[`domain/sap10_calculator/docs/SAP_CALCULATOR.md`](SAP_CALCULATOR.md)
|
||||
(7 sections + new §8). The S0380.163 slice added §8 as the home for
|
||||
Elmhurst-mirrored spec divergences; future slices that diverge from
|
||||
spec literal interpretation should add a §8.x row there.
|
||||
|
||||
## Good luck.
|
||||
Loading…
Add table
Reference in a new issue