mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-22 08:48:38 +00:00
SAP 10.2 Table 3a (PDF p.160) additional combi loss (61)m. Two coupled defects, both surfaced by simulated case 49 (000565 + gas combi, U985 "Combi keep hot type = None") sitting at SAP 71.43 vs the worksheet's 72: 1. The cascade defaulted EVERY non-PCDB combi to the flat keep-hot time-clock row (600 × n/365). A combi WITHOUT a keep-hot facility uses row 1 (600 × fu × n/365, fu = V_d/100 when daily HW < 100 L/day) — over-counting (61)m for the no-keep-hot cohort. `water_heating_from_ cert` now defaults to the "without keep-hot" row. 2. `pcdb_combi_loss_override` returned None for keep_hot_facility=1/ timer=1, leaning on the OLD flat-600 default. So flipping the default silently turned 190 corpus PCDB keep-hot-time-clock combis into no-keep-hot. Fixed to return the flat keep-hot row EXPLICITLY. Key insight (the Summary is the input echo; the U985 keep-hot line is a computed OUTPUT, so it must be derivable): keep-hot rides on the PCDB boiler record (Table 105 keep_hot_facility/timer), resolved by `pcdb_combi_loss_override`. A generic SAP-code combi with no PCDB record (case 49, PCDF ref 0) has no keep-hot by construction → row 1. So the default is not a guess — it is the spec-correct value for non-PCDB combis. Worksheet-proven: case 49 → cost £726.696, SAP 72 — matching the accredited worksheet to the digit (continuous 71.6945 = the worksheet's own 71.6945). 000516 (keep-hot None) also exact (£860.716, SAP 63); 000490 (PCDB 10328, keep_hot_facility=1/timer=1) keeps its flat-600 via the PCDB path. Masked until now because every prior combi-loss worksheet fixture was keep-hot (000490/000474/000480 time-clock) or had V_d >= 100 every month (001431, rows coincide); case 49 is the first no-keep-hot one. Corpus within-0.5 72.7% -> 73.3%, MAE 0.781 -> 0.774, PE 3.5 -> 3.4; ratcheted _MAX_SAP_MAE 0.785 -> 0.775, _MAX_PE_PER_M2_MAE 3.6 -> 3.5. Note: pyright strict type gate not run locally (pyright not installed). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| fixtures | ||
| __init__.py | ||
| _elmhurst_fixtures.py | ||
| _elmhurst_worksheet_000474.py | ||
| _elmhurst_worksheet_000477.py | ||
| _elmhurst_worksheet_000480.py | ||
| _elmhurst_worksheet_000487.py | ||
| _elmhurst_worksheet_000490.py | ||
| _elmhurst_worksheet_000516.py | ||
| _elmhurst_worksheet_000565.py | ||
| _elmhurst_worksheet_001431.py | ||
| _elmhurst_worksheet_001431_6035.py | ||
| _elmhurst_worksheet_001431_case5.py | ||
| _elmhurst_worksheet_001431_case6.py | ||
| _elmhurst_worksheet_001431_case7.py | ||
| _elmhurst_worksheet_001431_case20.py | ||
| _elmhurst_worksheet_001431_case21.py | ||
| _elmhurst_worksheet_001431_case38.py | ||
| _elmhurst_worksheet_001431_case39.py | ||
| _elmhurst_worksheet_001431_case43.py | ||
| _elmhurst_worksheet_001431_case44.py | ||
| _elmhurst_worksheet_001431_case45.py | ||
| _elmhurst_worksheet_001431_rr.py | ||
| _elmhurst_worksheet_001431_rr8.py | ||
| _xlsx_loader.py | ||
| test_appendix_h_solar.py | ||
| test_dimensions.py | ||
| test_e2e_elmhurst_sap_score.py | ||
| test_energy_requirements.py | ||
| test_fabric_energy_efficiency.py | ||
| test_fuel_cost.py | ||
| test_heat_transmission.py | ||
| test_internal_gains.py | ||
| test_mean_internal_temperature.py | ||
| test_mev.py | ||
| test_photovoltaic.py | ||
| test_rating.py | ||
| test_section_cascade_pins.py | ||
| test_solar_gains.py | ||
| test_space_cooling.py | ||
| test_space_heating.py | ||
| test_utilisation_factor.py | ||
| test_ventilation.py | ||
| test_water_heating.py | ||