mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
Removes:
- environmental_impact_current (SAP-derived rating, leaks into co2 target)
- energy_rating_average (average of sap_score + potential, direct leak)
Adds:
Doors draughtproofed_door_count, insulated_door_u_value
Hot water cylinder_insulation_type, cylinder_thermostat,
secondary_heating_type
Ventilation mechanical_vent_duct_placement, _duct_insulation,
_duct_insulation_level, _measured_installation
Lighting low_energy_fixed_lighting_bulbs_count,
fixed_lighting_outlets_count,
low_energy_fixed_lighting_outlets_count
Windows window_avg_glazing_gap_mm, window_avg_frame_factor,
window_pct_permanent_shutters_insulated
Main dwelling room_in_roof_floor_area_m2, alternative_wall_count,
alternative_wall_area_m2, flat_roof_insulation_thickness_mm,
wall_thickness_measured
Element counts wall_count, roof_count, floor_count,
main_heating_count_elements, main_heating_controls_present
Wind wind_turbine_hub_height_m, wind_turbine_rotor_diameter_m
Flat flat_unheated_corridor_length_m
Addendum addendum_stone_walls, addendum_system_build,
addendum_numbers_count
LZC lzc_energy_sources_count
Secondary part secondary_dwelling_present + 11 fabric features
(wall/roof/floor construction + insulation + thickness
+ area + heat-loss perimeter) + other_building_parts_count
Wires through schema -> domain -> mapper: adds Addendum dataclass,
lzc_energy_sources, mechanical_vent_duct_insulation_level. Also fixes
_measurement_value to accept raw dicts (from_dict left some Measurement
fields as dict when they weren't typed as a dataclass).
Results at N=25,000 2026 RdSAP certs:
sap_score MAPE=0.043 sMAPE=0.036 R^2=0.891
co2_emissions sMAPE=0.106 R^2=0.929
peui_raw MAPE=0.087 sMAPE=0.084 R^2=0.860
peui_ucl MAPE=0.079 sMAPE=0.076 R^2=0.866
space_heating_kwh MAPE=0.112 sMAPE=0.108 R^2=0.947
hot_water_kwh MAPE=0.071 sMAPE=0.069 R^2=0.854 (+0.082 R^2 vs 15b)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| 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/.