mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
`_cylinder_storage_loss_override` returned None for any cylinder whose cylinder_insulation_type wasn't 1 (factory), so a loose-jacket cylinder (code 2, RdSAP 10 field 7-11) fell to the cascade's zero-storage-loss combi/instantaneous default — its real storage loss vanished. SAP 10.2 Table 2 Note 1 gives loose jacket a SEPARATE, ~2× higher loss factor (L = 0.005 + 1.76/(t+12.8) vs factory 0.005 + 0.55/(t+4)); the cylinder_storage_loss_factor_table_2 helper already implements it — only the dispatch was missing. Fix: a `_cylinder_storage_loss_insulation_label` resolver maps the lodged code to the Table 2 branch (1 → factory_insulated, 2 → loose_jacket; None/0/unknown → None, keeping the conservative no-loss default). The override and the HW storage call now route through it instead of hardcoding "factory_insulated". Evidence + validation: a random 2026 register sample has 22 loose-jacket certs that over-predicted SAP by +2.29 mean (18/22 too high, 1/22 within 0.5) — the exact signature of under-counted HW storage loss. After the fix their mean error collapses to +0.45 and 11/22 land within 0.5, with ZERO regression across the worksheet-validated cohort (§4 + golden suite 2394 passed — no validated cert lodges loose jacket, so none shifts). Also unblocks the §10.7 A-F no-water-heating default (next slice) which needs the loose-jacket branch. cert_to_inputs.py pyright unchanged at 32. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| applications | ||
| domain | ||
| infrastructure | ||
| orchestration | ||
| repositories | ||
| utilities | ||
| __init__.py | ||
| conftest.py | ||
| test_lambda_packaging.py | ||