From 6ac67a4c6fecc1e562df6cf272f671d3506e5cb2 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Wed, 3 Jun 2026 17:13:46 +0000 Subject: [PATCH] docs: add full 0240 worksheet input spec to the closure handover MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a "build THIS in Elmhurst" specification — dwelling, dual condensing oil-combi (code 130) heating, combi/no-cylinder DHW (Table 3a keep-hot 600), per-element fabric W/K targets, room-in-roof gables, the 5 vertical + 6 roof-of-room windows, lighting (8 LED), no PV — so a generated worksheet reproduces cert 0240 as closely as possible. Flags the three load-bearing differences vs case 6 (combi code 130, no cylinder, boiler interlock PRESENT → no -5pp) that the new worksheet must capture. Co-Authored-By: Claude Opus 4.8 --- .../docs/HANDOVER_0240_CLOSURE.md | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/domain/sap10_calculator/docs/HANDOVER_0240_CLOSURE.md b/domain/sap10_calculator/docs/HANDOVER_0240_CLOSURE.md index 190f9593..91507e27 100644 --- a/domain/sap10_calculator/docs/HANDOVER_0240_CLOSURE.md +++ b/domain/sap10_calculator/docs/HANDOVER_0240_CLOSURE.md @@ -121,6 +121,89 @@ knowing the true (worksheet) value, so the worksheet is the unblocker either way --- +## 0240 worksheet input specification (build THIS in Elmhurst) + +Reproduce cert **0240-0200-5706-2365-8010** as closely as possible so the +worksheet is a valid 1e-4 ground truth for the cascade. All values are from the +fixture JSON (`tests/.../fixtures/golden/0240-0200-5706-2365-8010.json`). Match +the **U-values / W-per-K targets** below — those are what the cascade actually +consumes, so hitting them matters more than the exact construction wording. + +**Dwelling** +- Detached house, **construction age band J**, England. Postcode **LE15 9LB** + (drives the demand/EPC climate). 1 extension. 7 habitable rooms. +- Storey height **2.28 m**. Total floor area **≈202 m²** = + Main ground floor **97.72** + Extension 1 ground floor **20.61** + the + room-in-roof floor **83.2**. + +**Heating — the load-bearing difference vs case 6.** TWO main systems, both a +**condensing oil combi, SAP main heating code 130** (Table 4b winter **82** / +summer **73**), oil fuel, **balanced flue** (not fan-assisted), efficiency from +the **SAP table** (no PCDB boiler index), central-heating pump age **unknown**. +They heat **different parts** (so the p.186 MIT applies, already implemented): +- **Main 1** — **radiators**, control **2106** (programmer + room thermostat + + TRVs), **51%**, serves the living area. +- **Main 2** — **underfloor heating in screed** (R=0.75), control **2110** (time + + temperature zone control), **49%**, serves elsewhere. + +**Domestic hot water — the other key difference vs case 6.** Heated **from the +main system** (WHC 901), oil. It is a **COMBI with NO hot-water cylinder** — +instantaneous DHW → SAP 10.2 **Table 3a keep-hot loss 600 kWh/yr** (`combi_loss` +600, `primary_loss` 0). 3 **mixer** showers + 1 bath; no effective WWHRS. +NB the lodged RHI `water_heating = 2842.82` already equals the cascade HW output +exactly, so get the DHW *demand* inputs right and any residual is in the combi +*efficiency* (Eq D1 winter/summer blend). +- **Boiler interlock: YES** for 0240 (combi + room thermostat 2106, no cylinder) + → **no −5pp penalty**, both systems run at base eff 82/73. (This is the + OPPOSITE of case 6, which had a regular boiler + cylinder with no cylinder stat + → −5pp. Get this right or the efficiencies — hence everything — will be off.) + +**Fabric — target W/K (cascade values to reproduce; total external area 328.97 m²):** +| element | W/K | notes | +|---|---|---| +| Walls (29a) | 24.45 | age J, **uninsulated** (NI), not dry-lined, not measured | +| Roof (30) | 32.331 | Main = pitched, **access to loft**, insulation at ceiling, **400 mm+** ; Ext1 = pitched **vaulted ceiling**, **no insulation (NI)** | +| Floor (28) | 29.4297 | **solid**; Main heat-loss perimeter 36.45, Ext1 13.45 | +| Party/gable (32) | 7.84 | RR gables billed as party at U=0.25 | +| Windows (27) | 22.7407 | see below | +| Roof windows (27a) | 12.6374 | see below | +| Doors (26) | 11.1 | **2 doors, uninsulated** | +| Thermal bridging (36) | 36.1867 | = 0.11 × 328.97 | +| **(33) fabric total** | **140.5288** | | +| **(37)+vent feeds (39)** | total transmission **176.7155** | | + +**Room-in-roof** (Main only): floor area **83.2 m²**, **two gables L = 6.40 m** +— one **Exposed**, one **Party** (per the case-5/6 sandstone replica convention), +age J. This is the same Simplified/detailed-gable RR structure case 6 validated. + +**Windows** (all **double glazed, PVC frame**, glazing "DG 2002+", U≈2.0, g=0.72): +- 5 **vertical** wall windows: 1.4×1.3, 1.2×1.3 (orient N), 1.6×1.3, 2.5×2.0 + (orient E), 1.4×1.3 (orient S, on Extension 1). +- 6 **"Roof of Room" rooflights** (window_wall_type 4): all **1.0×1.0**, at 45°, + 3 orient N + 3 orient S. These bill on (27a) and deduct from the RR residual + (S0380.203) — keep them as roof-of-room, not vertical glazing. + +**Ventilation / lighting / other** +- Natural ventilation; **no** mechanical ventilation, **no** extract fans, **no** + chimneys/flues. 85% draught-proofed. +- Lighting: **8 LED bulbs, 100% low-energy** (no CFL/incandescent). +- **No PV**, no solar thermal, **no secondary heating**, no air-conditioning. +- Electricity meter type 3 (standard), smart meter present, not export-capable. + +### The three things that MUST differ from case 6 (or you've just rebuilt case 6) +1. **Condensing oil combi, SAP code 130** (case 6 = regular oil boiler 127). +2. **Combi, NO cylinder** → Table 3a keep-hot 600 kWh (case 6 = boiler + 110 L + cylinder → primary/storage loss). +3. **Boiler interlock PRESENT → no −5pp** (case 6 = no interlock → −5pp). Driven + automatically by "combi + room thermostat, no cylinder", but verify the + worksheet shows base eff 82/73, not 77/68. + +Everything else (dual-main different-parts MIT, two pumps, rooflight→RR, Eq-D1 +(204) share) is already implemented and validated by case 6 — the new worksheet +just confirms the combi-HW path on top of that closed structure. + +--- + ## Pointers - Golden pin + full slice history: `tests/domain/sap10_calculator/rdsap/test_golden_fixtures.py` (cert `0240-0200-5706-2365-8010`, line ~83). - Case-6 fixture to mirror: `tests/domain/sap10_calculator/worksheet/_elmhurst_worksheet_001431_case6.py` + its e2e pins in `test_e2e_elmhurst_sap_score.py::_FIXTURE_PINS["001431_case6"]`.