Model/repositories
Khalim Conn-Kowlessar 31da90f5eb feat(modelling): persist recommendation.material_id from the catalogue
Expand half of the recommendation_materials retirement (ADR-0017). A
Plan Measure installs a single Product, so thread its catalogue id end to
end — Product.id -> MeasureOption.material_id -> PlanMeasure.material_id
-> recommendation.material_id — replacing the per-material BOM child
table with one nullable column on the row. ProductPostgresRepository
reads the id from MaterialRow; the four fabric generators set it on their
Option; the orchestrator carries it onto the Plan Measure; the mirror
declares + maps the column. Optional throughout (the JSON stopgap
catalogue carries no ids -> NULL).

The multi-measure integration test now pins each persisted measure's
material_id to its seeded MaterialRow id. Migration spec (live column
must be added before this deploys; contraction is the owner's next step)
in docs/migrations/recommendation-material-id.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 08:26:58 +00:00
..
epc perf(repos): bulk get_many / get_for_properties — batch reads, not N round-trips (#1138) 2026-06-01 16:28:48 +00:00
fuel_rates refactor(fuel-rates): name the adapter aggregate-first per house convention 2026-06-02 17:21:27 +00:00
geospatial feat(geospatial): GeospatialRepo — OS Open-UPRN coordinate lookup (#1131) 2026-06-01 16:28:48 +00:00
landlord_overrides move landlord overrides 2026-06-01 15:46:46 +00:00
materials feat(first-run): FirstRunPipeline E2E — Ingestion → Baseline → Modelling (#1136) 2026-06-01 16:28:48 +00:00
plan refactor(modelling): rename the cluster SQLModel classes …Row → …Model 2026-06-03 22:42:21 +00:00
product feat(modelling): persist recommendation.material_id from the catalogue 2026-06-04 08:26:58 +00:00
property refactor(property): PropertyRow.id non-Optional (PR #1139 review) 2026-06-01 16:28:48 +00:00
property_baseline refactor(property-baseline): rename baseline → property_baseline aggregate (PR #1139 review) 2026-06-01 16:28:48 +00:00
scenario refactor(modelling): consolidate scenario + installed_measure into the subpackage 2026-06-03 22:52:35 +00:00
solar feat(ingestion): relocate EpcClientService to infrastructure + SolarRepo (#1133) 2026-06-01 16:28:48 +00:00
tasks added postcode splitter rewrite to ddd 2026-05-19 16:35:09 +00:00
unstandardised_address updated rdsap option; seperated s3 location in infrastrucutre; added open ai api 2026-05-22 14:00:33 +00:00
__init__.py added postcode splitter rewrite to ddd 2026-05-19 16:35:09 +00:00
postgres_unit_of_work.py feat(modelling): expose scenario/product/plan repos on the UnitOfWork (#1157) 2026-06-03 11:53:34 +00:00
unit_of_work.py feat(modelling): expose scenario/product/plan repos on the UnitOfWork (#1157) 2026-06-03 11:53:34 +00:00