mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +00:00
The gov API lodges a manufacturer's declared cylinder loss factor (kWh/day) in `sap_heating.cylinder_heat_loss`, in which case it leaves the cylinder volume / insulation type / thickness None. That field was undeclared on the 21.0.x schemas, so `from_dict` dropped it — then `_cylinder_storage_loss_override` hit its insulation-None / volume-None guards and returned None, dropping the §4 storage loss ENTIRELY. The dwelling over-rated (the declared loss is typically ~1.5 kWh/day ≈ 550 kWh/yr). SAP 10.2 §4 branch a) (PDF p.136): when the declared loss factor is known, storage loss (50) = (48) declared loss × (49) Table-2b temperature factor — replacing the Table 2 V×L×VF computation. - declare `cylinder_heat_loss` on RdSapSchema21_0_0/21_0_1.SapHeating + EpcPropertyData.SapHeating; thread through the 21.0.x mappers. - `cylinder_storage_loss_monthly_kwh` gains `declared_loss_kwh_per_day`: when set, combined_55 = declared × TF (volume/insulation unused). - `_cylinder_storage_loss_override` resolves the declared loss BEFORE the insulation/volume guards (the gov omits those when the loss is lodged). 12 /tmp certs carry it (mean |err| 3.00 -> 2.51; the clean ones close hard, e.g. 2360 2.65 -> 0.30, 0245 2.25 -> 0.53). Corpus within-0.5 67.0% -> 67.3% (MAE 1.025 -> 1.020); /tmp 71.2% -> 71.4% (0.889 -> 0.882). Worksheet harness 47/47; regression = only the 3 pre-existing fails; pyright net-zero. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| addresses | ||
| billing | ||
| data_transformation | ||
| epc | ||
| fuel_rates | ||
| geospatial | ||
| magicplan | ||
| modelling | ||
| property | ||
| property_baseline | ||
| sap10_calculator | ||
| sap10_ml | ||
| tasks | ||
| building_geometry.py | ||
| postcode.py | ||