Model/domain/modelling/generators
Khalim Conn-Kowlessar d58ac60d29 feat(modelling): MeasureType StrEnum as the canonical measure vocabulary
Introduce domain/modelling/measure_type.py — a StrEnum with one member per
modelled measure (the 15 the generators emit). A StrEnum so each member *is*
its string value: it persists straight into the `recommendation` varchar
column, is the optimiser's group-by key, and compares equal to the catalogue /
EPC strings — so it replaces the per-generator string constants with no
persistence or optimiser change.

Repoint every generator's measure-type constant/literal to a MeasureType
member (wall, solid_wall, roof, floor, glazing, lighting, ventilation,
heating, solar). Field annotations stay `str` for now; tightening them to
MeasureType is the next slice.

This is the enum the historical engine deferred (engine.py:970
"TODO - formalise property measure types into an enum") and the vocabulary the
forthcoming `considered_measures` allowlist will speak (mirroring the legacy
`inclusions`).

Suite green: tests/domain/modelling + orchestration + harness 253 pass + 3
xfail; pyright clean on the enum + generators.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 19:54:04 +00:00
..
__init__.py refactor(modelling): group domain/modelling into generators/scoring/optimisation 2026-06-03 13:48:36 +00:00
floor_recommendation.py feat(modelling): MeasureType StrEnum as the canonical measure vocabulary 2026-06-08 19:54:04 +00:00
glazing_recommendation.py feat(modelling): MeasureType StrEnum as the canonical measure vocabulary 2026-06-08 19:54:04 +00:00
heating_recommendation.py feat(modelling): MeasureType StrEnum as the canonical measure vocabulary 2026-06-08 19:54:04 +00:00
lighting_recommendation.py feat(modelling): MeasureType StrEnum as the canonical measure vocabulary 2026-06-08 19:54:04 +00:00
roof_recommendation.py feat(modelling): MeasureType StrEnum as the canonical measure vocabulary 2026-06-08 19:54:04 +00:00
solar_recommendation.py feat(modelling): MeasureType StrEnum as the canonical measure vocabulary 2026-06-08 19:54:04 +00:00
solid_wall_recommendation.py feat(modelling): MeasureType StrEnum as the canonical measure vocabulary 2026-06-08 19:54:04 +00:00
ventilation_recommendation.py feat(modelling): MeasureType StrEnum as the canonical measure vocabulary 2026-06-08 19:54:04 +00:00
wall_recommendation.py feat(modelling): MeasureType StrEnum as the canonical measure vocabulary 2026-06-08 19:54:04 +00:00