Model/domain/modelling
Khalim Conn-Kowlessar 0fec069988 feat(modelling): wire the ventilation Measure Dependency into the orchestrator (#1161)
ModellingOrchestrator builds the ventilation dependency per Property
(suppressed when already mechanically ventilated) and passes it to
optimise_package, so a selected wall measure forces MEV into the package before
the re-score. Ventilation joins the role-3 cascade in best-practice order
(walls -> roof -> ventilation -> floor) and persists as a Plan Measure carrying
its real negative marginal and its cost. Added the mechanical_ventilation
contingency rate (0.26, per legacy Costs.CONTINGENCIES). Integration test now
seeds the ventilation Product and asserts the forced measure persists with
<=0 SAP and 2x900 cost; the full-pipeline test seeds the Product too (the
dependency is built for every not-yet-ventilated dwelling). On 000490 the real
calculator scores MEV at -1.275 SAP.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 13:34:40 +00:00
..
__init__.py feat(modelling): Overlay Applicator folds EpcSimulation onto EpcPropertyData 2026-06-02 22:13:51 +00:00
contingencies.py feat(modelling): wire the ventilation Measure Dependency into the orchestrator (#1161) 2026-06-03 13:34:40 +00:00
floor_recommendation.py feat(modelling): floor insulation-type overlay field + cascade pins (#1159) 2026-06-03 09:41:54 +00:00
measure_dependency.py feat(modelling): ventilation Measure Dependency builder + has_ventilation guard (#1161) 2026-06-03 13:27:56 +00:00
optimiser.py feat(modelling): inject forced Measure Dependencies into the package (#1161) 2026-06-03 13:25:40 +00:00
overlay_applicator.py feat(modelling): Simulation Overlay grows a dwelling ventilation segment (#1161) 2026-06-03 13:20:45 +00:00
package_scorer.py feat(modelling): Package Scorer — compose overlays + score on the calculator 2026-06-03 08:41:30 +00:00
plan.py feat(modelling): domain Plan + PlanMeasure types (#1157) 2026-06-03 11:40:27 +00:00
product.py feat(modelling): ProductRepository + Postgres materials-table source 2026-06-03 08:32:38 +00:00
recommendation.py feat(modelling): wall Recommendation Generator — cavity-fill detection + overlay 2026-06-02 22:49:33 +00:00
roof_recommendation.py feat(modelling): loft overlay 270→300 mm + Elmhurst cascade pin (#1158) 2026-06-03 09:39:21 +00:00
scenario.py feat(modelling): domain Scenario + ScenarioPostgresRepository (#1157) 2026-06-03 11:19:52 +00:00
scoring.py feat(modelling): per-measure scoring — marginal cascade + per-Option signal (#1156) 2026-06-03 08:50:49 +00:00
simulation.py feat(modelling): Simulation Overlay grows a dwelling ventilation segment (#1161) 2026-06-03 13:20:45 +00:00
wall_recommendation.py feat(modelling): price the cavity Option from area x Product — closes #1155 2026-06-03 08:35:52 +00:00