Model/domain/sap10_calculator/worksheet
Khalim Conn-Kowlessar cbdee9ec3c S0380.238: single-point instantaneous water heaters incur no distribution loss
Water heating SAP code 909 (electric instantaneous) and 907 (single-point
gas) heat water at the point of use, serving one outlet with no
distribution pipework. Per SAP 10.2 §4 (p.23, l.1416): "'Single-point'
heaters, which are located at the point of use and serve only one outlet,
do not have distribution losses either." So worksheet (46)m = 0 and the
heat-required line collapses to SAP 10.2 worksheet l.7704
  (62)m = 0.85 × (45)m + (46)m + (57)m + (59)m + (61)m
        = 0.85 × (45)m   (all loss terms zero for a no-cylinder system).

`distribution_loss_monthly_kwh` already supported the
`is_instantaneous_at_point_of_use` flag (and its docstring already named
codes 907/909), but `water_heating_from_cert` hard-coded it to False, so
the cascade applied (46)m = 0.15 × (45)m to single-point heaters. That
0.15 distribution loss exactly cancelled the 0.85 reduction, leaving
(62)m = (45)m. On the cat-10 room-heater fixture (ref 001431, code 909)
that over-stated the water fuel (219) as 2082.6250 instead of the
worksheet's 1770.2313, and inflated the (65)m heat gains (692.47 vs
worksheet 442.55) which in turn suppressed space-heating demand.

Thread the cert's existing instantaneous flag (`_INSTANTANEOUS_WATER_CODES`
= {907, 909}) through `_water_heating_worksheet_and_gains` into both the
demand-pass and final `water_heating_from_cert` calls.

Pins (219) water fuel = 1770.2313 at abs 1e-4 via the extractor → mapper →
rating cascade. §4 suite green (2414 passed, 1 skipped); no existing
fixture exercised the 907/909 path. The residual space-heating fuel gap
((211) 11158.59 vs worksheet 11563.17) this exposes is a separate cause —
next slice.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 19:00:02 +00:00
..
__init__.py refactor: lift-and-shift packages/domain/src/domain/sap → domain/sap10_calculator 2026-05-26 12:22:37 +00:00
appendix_h_solar.py Slice S0380.74: Appendix H (H7) U3.3 monthly-integrated convention closes 1.81× over-count 2026-05-29 18:02:35 +00:00
dimensions.py refactor: lift-and-shift packages/domain/src/domain/sap → domain/sap10_calculator 2026-05-26 12:22:37 +00:00
energy_requirements.py S0380.200: SAP 10.2 §9a two-main-heating split (203)/(205)/(207)/(213) 2026-06-03 13:09:43 +00:00
fabric_energy_efficiency.py refactor: lift-and-shift packages/domain/src/domain/sap → domain/sap10_calculator 2026-05-26 12:22:37 +00:00
fuel_cost.py Slice S0380.47: wire β-split into cost cascade per SAP 10.2 Appendix M1 §6 2026-05-28 19:01:38 +00:00
heat_transmission.py review: clearer room-in-roof area variable names in heat_transmission 2026-06-05 10:18:58 +00:00
internal_gains.py S0380.202: SAP 10.2 Table 5a note a) second main-system pump gain (70) 2026-06-03 14:35:08 +00:00
mean_internal_temperature.py S0380.205: SAP 10.2 p.186 two-systems-different-parts MIT (weighted R + elsewhere blend) 2026-06-03 16:02:56 +00:00
mev.py Slice S0380.100: MEV SFPav + (230a) cascade helpers (SAP 10.2 §2.6.4 + Table 4f) 2026-05-30 15:28:59 +00:00
photovoltaic.py Slice S0380.44: SAP 10.2 Appendix M1 §3-4 PV β-factor calculator (no wiring) 2026-05-28 18:11:56 +00:00
rating.py refactor: lift-and-shift packages/domain/src/domain/sap → domain/sap10_calculator 2026-05-26 12:22:37 +00:00
solar_gains.py Slice S0380.42: Decimal HALF_UP per-window areas per RdSAP10 §15 — closes cert 1536 2026-05-28 17:11:39 +00:00
space_cooling.py refactor: lift-and-shift packages/domain/src/domain/sap → domain/sap10_calculator 2026-05-26 12:22:37 +00:00
space_heating.py refactor: lift-and-shift packages/domain/src/domain/sap → domain/sap10_calculator 2026-05-26 12:22:37 +00:00
utilisation_factor.py refactor: lift-and-shift packages/domain/src/domain/sap → domain/sap10_calculator 2026-05-26 12:22:37 +00:00
ventilation.py refactor: lift-and-shift packages/domain/src/domain/sap → domain/sap10_calculator 2026-05-26 12:22:37 +00:00
water_heating.py S0380.238: single-point instantaneous water heaters incur no distribution loss 2026-06-05 19:00:02 +00:00