mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
SAP 10.2 spec line 15271: "R = responsiveness of main heating system (Table 4a or Table 4d)" The cascade's `_responsiveness` was keyed solely on `heat_emitter_type` (Table 4d), which is correct for systems whose responsiveness is determined by the emitter (gas / oil / HP boilers feeding radiators or UFH). But for systems with intrinsically low responsiveness — solid- fuel room heaters, range cookers, independent solid-fuel boilers — the spec lodges R directly in Table 4a against the heating-system SAP code, and that value overrides any emitter-based lookup. For solid fuel 8 (SAP code 160 = "Range cooker boiler (integral oven and boiler)", lodged with radiators emitter), pre-slice the cascade returned R = 1.0 (radiators) instead of the spec-correct R = 0.50 (Table 4a p.169). The Table 9b mean-internal-temperature adjustment then over-estimated heating-system response, under-estimating space heating demand by ~10% (cascade demand 6874.80 kWh vs worksheet EPC implied 7566 kWh). The fix adds a new dispatch `_RESPONSIVENESS_BY_SAP_CODE` consulted first in `_responsiveness`; SAP codes not in the dict fall through to the existing Table 4d emitter lookup. Table 4a entries added (SAP 10.2 PDF p.169-170): 151 Manual feed independent boiler R=0.75 153 Auto (gravity) feed independent boiler R=0.75 155 Wood chip/pellet independent boiler R=0.75 156 Open fire with back boiler to radiators R=0.50 158 Closed room heater with boiler to radiators R=0.50 159 Stove (pellet-fired) with boiler to radiators R=0.75 160 Range cooker boiler (integral oven+boiler) R=0.50 161 Range cooker boiler (independent oven+boiler) R=0.50 631 Open fire in grate R=0.50 632 Open fire with back boiler (no radiators) R=0.50 633 Closed room heater R=0.50 634 Closed room heater with boiler (no radiators) R=0.50 635 Stove (pellet fired) R=0.75 636 Stove (pellet fired) with boiler (no rads) R=0.75 Heating-systems corpus impact — 10 solid-fuel variants re-pinned: variant ΔSAP was Δcost was ΔPE was solid fuel 2 +2.64 +4.79 -£60 -£110 -1211 -2292 solid fuel 3 +1.32 +4.43 -£30 -£102 -935 -2496 solid fuel 4 +1.59 +4.13 -£37 -£95 +151 -1097 solid fuel 5 +1.70 +2.71 -£39 -£62 +160 -331 solid fuel 6 -11.37 -7.38 +£268 +£168 +87 -1313 ← see below solid fuel 7 +2.04 +5.82 -£47 -£131 +44 -1638 solid fuel 8 +1.81 +4.24 -£42 -£98 +88 -1308 solid fuel 9 +1.71 +3.44 -£39 -£79 +155 -510 solid fuel 10 +1.75 +5.14 -£40 -£118 +120 -1315 solid fuel 11 +1.62 +4.35 -£37 -£100 +171 -962 7/10 PE residuals close to ±220 kWh (down from -331..-2496). 9/10 SAP residuals tighten to +1.32..+2.64 (down from +2.71..+5.82). solid fuel 6 (Dual Fuel Anthracite Wood, SAP 160) SAP residual regresses -7.38 → -11.37 while PE closes +87. The dual-fuel cascade has a separate bug now exposed by the more-accurate demand calc; queued for a follow-up slice. Non-solid-fuel variants (15) unchanged — their SAP codes aren't in the new dispatch dict so they fall through to Table 4d as before. Electric storage Table 4a rows (193-196, 422-424, 515, 701) and the spec's other low-responsiveness codes can be added in follow-up slices as electric corpus variants are unblocked. Extended handover suite: 877 pass / 0 fail (+1 new responsiveness AAA test). Pyright net-zero on touched files (43 → 43). No golden fixture impact — no golden cert lodges a solid-fuel SAP code via the cascade path. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| handler | ||
| tests | ||
| __init__.py | ||
| db_writer.py | ||
| elmhurst_extractor.py | ||
| extractor.py | ||
| local_runner.py | ||
| parser.py | ||
| pdf.py | ||