mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
predicted_total_fuel_cost_gbp was silently mispricing every non-gas property because primary_main_fuel_type / water_heating_fuel store the gov EPC API enum (26=mains gas, 27=LPG, 28=oil, 29=electricity) and our _FUEL_UNIT_PRICE dict is keyed by Table 32 codes (1=gas, 4=oil, 30=elec). Codes 26-29 hit the dict's default 3.48 p/kWh -- silently treating electric immersion as gas. Concrete impact on OX1 5LR Sep 2025 cert (worst-predicted SAP=41, model 84): water_heating_fuel=29 (electric immersion). Real DHW cost 2941 kWh * 13.19p = £388/yr; we computed 2941 * 3.48 = £102 (4x under). Net predicted_total_fuel_cost £292 vs implied real £2513 -- predicted_ecf 0.49 (~SAP 93) vs real ECF 4.24 (SAP 41). Effect: every off-gas property's predicted_ecf was systematically too low, dragging the model's catastrophic-low-SAP predictions toward mid-band. Expected to substantially reduce decile-0 bias on retrain. New _API_TO_TABLE32 map covers codes 0-29. 4 new AAA tests; VERSION 2.2.0 -> 2.3.0 (MINOR; behavioural fix to existing column values). |
||
|---|---|---|
| .. | ||
| domain | ||
| fetchers | ||
| repos | ||
| utils | ||
| README.md | ||
Shared packages
Workspace packages consumed by services/*. Each package is its own Python distribution with its own pyproject.toml; services import via the workspace dependency mechanism ({ workspace = true }).
| Package | Purpose |
|---|---|
domain/ |
Shared domain types — Property, BaselinePerformance, Plan, Scenario, EpcPropertyData, etc. No persistence, no IO, no business logic. |
repos/ |
Persistence layer — one repo per aggregate. Owns the SQL. Depends on domain. |
fetchers/ |
External API clients (gov EPC, Ofgem, Google Solar, etc.). Depend on domain for response shapes. |
utils/ |
Cross-cutting infra — logging, S3, CloudWatch URL builders, SQS task helpers. |
Adding a new shared package
Only when a real second consumer materialises. Don't pre-shatter (repos-epc, repos-property, ...) — split when a deployment needs to drop a dep, not before.
See ../ara_backend_design.md §11 for the broader monorepo layout and ../CONTEXT.md for the domain glossary that names the types living in domain/.