Model/tests/domain/modelling/fixtures
Khalim Conn-Kowlessar 07f534ee11 feat(modelling): system tune-up options (standard + zone controls)
Add the system tune-up to the heating Recommendation: keep the existing wet
boiler but install better heating controls and fix the cylinder. Two competing
Options (the Optimiser picks <=1 across the whole heating rec) per the user's
two best control end-states:

- system_tune_up        — standard controls (programmer + room thermostat +
  TRVs, SAP 10.2 Table 4e code 2106)
- system_tune_up_zoned  — time-and-temperature zone control (code 2110, type 3):
  more SAP uplift for more cost

Both keep the boiler (no fuel / SAP code / flue change), set the control
ABSOLUTELY to their end-state, and apply the conditional cylinder fixes (an
80 mm jacket when under-insulated, a thermostat when absent — only when a
cylinder exists). Each control option is offered only when it genuinely improves
the existing control — standard is skipped when the control is already 2106 /
2110 / 2112, zone when already 2110 / 2112 — so neither is ever a downgrade or a
no-op.

Validated against the Elmhurst "system tune up" re-lodgements (cert 001431):
nine befores spanning controls 2101-2113 all converge to the two common afters,
proving the control overlay is absolute. The cascade pin is parametrised over
two starting controls (2101 "no control" + 2113 "room thermostat and TRVs") x
both afters, delta 0 (SAP/CO2/PE).

Wires the two MeasureTypes through contingencies (0.15), the offline catalogue
(500 / 900), the catalogue-coverage list, the report triggers, and the ARA
first-run seed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 10:20:46 +00:00
..
ashp_from_gas_boiler_001431_before.pdf test(modelling): ASHP before/after cascade pin (001431) at 1e-4 2026-06-06 17:01:40 +00:00
ashp_from_gas_boiler_instant_hw_001431_before.pdf test(modelling): ASHP pin from a gas boiler with instantaneous HW + fuel tripwire 2026-06-06 17:40:25 +00:00
ashp_from_system_boiler_with_cylinder_001431_after.pdf test(modelling): finalize Vaillant ASHP swap on the cascade pins 2026-06-06 21:33:09 +00:00
ashp_from_system_boiler_with_cylinder_001431_before.pdf test(modelling): ASHP from a system gas boiler with an existing cylinder 2026-06-06 18:20:58 +00:00
boiler_combi_gas_001431_after.pdf feat(modelling): gas combi boiler upgrade + controls-when-inadequate 2026-06-09 16:28:00 +00:00
boiler_combi_gas_001431_before.pdf feat(modelling): gas combi boiler upgrade + controls-when-inadequate 2026-06-09 16:28:00 +00:00
boiler_combi_oil_001431_after.pdf test(modelling): pin non-gas->gas + already-insulated-cylinder boiler upgrades 2026-06-09 16:37:32 +00:00
boiler_combi_oil_001431_before.pdf test(modelling): pin non-gas->gas + already-insulated-cylinder boiler upgrades 2026-06-09 16:37:32 +00:00
boiler_cyl_coal_001431_after.pdf feat(modelling): solid-fuel(coal)->gas boiler upgrade + boiler_flue_type end-state 2026-06-10 08:27:07 +00:00
boiler_cyl_coal_001431_before.pdf feat(modelling): solid-fuel(coal)->gas boiler upgrade + boiler_flue_type end-state 2026-06-10 08:27:07 +00:00
boiler_cyl_gas_001431_after.pdf feat(modelling): gas-boiler-upgrade-with-cylinder option in the heating rec 2026-06-09 16:16:46 +00:00
boiler_cyl_gas_001431_before.pdf feat(modelling): gas-boiler-upgrade-with-cylinder option in the heating rec 2026-06-09 16:16:46 +00:00
boiler_cyl_lpg_001431_after.pdf test(modelling): pin non-gas->gas + already-insulated-cylinder boiler upgrades 2026-06-09 16:37:32 +00:00
boiler_cyl_lpg_001431_before.pdf test(modelling): pin non-gas->gas + already-insulated-cylinder boiler upgrades 2026-06-09 16:37:32 +00:00
cavity_wall_001431_after.pdf test(modelling): Elmhurst before/after cascade pin for cavity wall (#1154) 2026-06-03 09:36:53 +00:00
cavity_wall_001431_before.pdf test(modelling): Elmhurst before/after cascade pin for cavity wall (#1154) 2026-06-03 09:36:53 +00:00
double_glazing_001431_after.pdf test(fixtures): add glazing before/after certs (001431) for the pin slices 2026-06-05 07:54:43 +00:00
double_glazing_001431_before.pdf test(fixtures): add glazing before/after certs (001431) for the pin slices 2026-06-05 07:54:43 +00:00
flat_roof_001431_after.pdf feat(modelling): roof dispatcher insulates a flat roof 2026-06-04 21:16:00 +00:00
flat_roof_001431_before.pdf feat(modelling): roof dispatcher insulates a flat roof 2026-06-04 21:16:00 +00:00
google_building_insights_001431.json feat(modelling): typed SolarPotential projection over Google buildingInsights 2026-06-08 09:55:55 +00:00
hhr_storage_001431_after.pdf test(modelling): HHRSH before/after cascade pins (001431) at 1e-4 2026-06-05 19:09:23 +00:00
hhr_storage_from_electric_storage_001431_before.pdf test(modelling): HHRSH before/after cascade pins (001431) at 1e-4 2026-06-05 19:09:23 +00:00
hhr_storage_from_no_system_001431_before.pdf test(modelling): HHRSH before/after cascade pins (001431) at 1e-4 2026-06-05 19:09:23 +00:00
loft_001431_after.pdf feat(modelling): loft overlay 270→300 mm + Elmhurst cascade pin (#1158) 2026-06-03 09:39:21 +00:00
loft_001431_before.pdf feat(modelling): loft overlay 270→300 mm + Elmhurst cascade pin (#1158) 2026-06-03 09:39:21 +00:00
loft_thatched_001431_after.pdf feat(modelling): fold loft into the roof dispatcher; thatch routes to loft 2026-06-04 21:12:01 +00:00
loft_thatched_001431_before.pdf feat(modelling): fold loft into the roof dispatcher; thatch routes to loft 2026-06-04 21:12:01 +00:00
low_energy_lighting_some_leds_001431_after.pdf test(modelling): lighting before/after cascade pins (001431) at 1e-4 2026-06-05 12:27:36 +00:00
low_energy_lighting_some_leds_001431_before.pdf test(modelling): lighting before/after cascade pins (001431) at 1e-4 2026-06-05 12:27:36 +00:00
low_energy_lighting_zero_leds_001431_after.pdf test(modelling): lighting before/after cascade pins (001431) at 1e-4 2026-06-05 12:27:36 +00:00
low_energy_lighting_zero_leds_001431_before.pdf test(modelling): lighting before/after cascade pins (001431) at 1e-4 2026-06-05 12:27:36 +00:00
secondary_glazing_001431_after.pdf test(fixtures): add glazing before/after certs (001431) for the pin slices 2026-06-05 07:54:43 +00:00
secondary_glazing_001431_before.pdf test(fixtures): add glazing before/after certs (001431) for the pin slices 2026-06-05 07:54:43 +00:00
sloping_ceiling_001431_after.pdf feat(modelling): recommend_roof_insulation insulates a sloping ceiling 2026-06-04 21:02:06 +00:00
sloping_ceiling_001431_before.pdf feat(modelling): recommend_roof_insulation insulates a sloping ceiling 2026-06-04 21:02:06 +00:00
solar_pv_001431_before.pdf test(modelling): Solar PV Elmhurst cascade pins + battery tripwire 2026-06-08 12:42:24 +00:00
solar_pv_no_battery_001431_after_1.pdf test(modelling): Solar PV Elmhurst cascade pins + battery tripwire 2026-06-08 12:42:24 +00:00
solar_pv_no_battery_001431_after_2.pdf test(modelling): Solar PV Elmhurst cascade pins + battery tripwire 2026-06-08 12:42:24 +00:00
solar_pv_no_battery_001431_after_3.pdf test(modelling): Solar PV Elmhurst cascade pins + battery tripwire 2026-06-08 12:42:24 +00:00
solar_pv_with_battery_001431_after.pdf test(modelling): Solar PV Elmhurst cascade pins + battery tripwire 2026-06-08 12:42:24 +00:00
solid_brick_ewi_001431_after.pdf feat(modelling): overlay models solid-wall insulation (IWI/EWI), pinned 2026-06-04 15:11:26 +00:00
solid_brick_ewi_001431_before.pdf feat(modelling): overlay models solid-wall insulation (IWI/EWI), pinned 2026-06-04 15:11:26 +00:00
solid_brick_iwi_001431_after.pdf feat(modelling): overlay models solid-wall insulation (IWI/EWI), pinned 2026-06-04 15:11:26 +00:00
solid_brick_iwi_001431_before.pdf feat(modelling): overlay models solid-wall insulation (IWI/EWI), pinned 2026-06-04 15:11:26 +00:00
solid_floor_001431_after.pdf feat(modelling): floor insulation-type overlay field + cascade pins (#1159) 2026-06-03 09:41:54 +00:00
solid_floor_001431_before.pdf feat(modelling): floor insulation-type overlay field + cascade pins (#1159) 2026-06-03 09:41:54 +00:00
suspended_floor_001431_after.pdf feat(modelling): floor insulation-type overlay field + cascade pins (#1159) 2026-06-03 09:41:54 +00:00
suspended_floor_001431_before.pdf feat(modelling): floor insulation-type overlay field + cascade pins (#1159) 2026-06-03 09:41:54 +00:00
system_built_ewi_001431_after.pdf feat(modelling): system-built walls take EWI+IWI (blocked on basement-code fix) 2026-06-04 18:26:08 +00:00
system_built_ewi_001431_before.pdf feat(modelling): system-built walls take EWI+IWI (blocked on basement-code fix) 2026-06-04 18:26:08 +00:00
system_built_iwi_001431_after.pdf feat(modelling): system-built walls take EWI+IWI (blocked on basement-code fix) 2026-06-04 18:26:08 +00:00
system_built_iwi_001431_before.pdf feat(modelling): system-built walls take EWI+IWI (blocked on basement-code fix) 2026-06-04 18:26:08 +00:00
timber_frame_iwi_001431_after.pdf feat(modelling): solid-wall generator offers IWI-only for timber frame 2026-06-04 15:33:46 +00:00
timber_frame_iwi_001431_before.pdf feat(modelling): solid-wall generator offers IWI-only for timber frame 2026-06-04 15:33:46 +00:00
tune_up_from_2101_001431_before.pdf feat(modelling): system tune-up options (standard + zone controls) 2026-06-10 10:20:46 +00:00
tune_up_from_2113_001431_before.pdf feat(modelling): system tune-up options (standard + zone controls) 2026-06-10 10:20:46 +00:00
tune_up_standard_001431_after.pdf feat(modelling): system tune-up options (standard + zone controls) 2026-06-10 10:20:46 +00:00
tune_up_zoned_001431_after.pdf feat(modelling): system tune-up options (standard + zone controls) 2026-06-10 10:20:46 +00:00