mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
`heat_transmission_from_cert` computed `y = thermal_bridging_y(age_ band=part.construction_age_band)` per bp, then applied each bp's y to its own external area. That mis-models multi-age dwellings: RdSAP10 Table 21 indexes y by the *dwelling's* age band, and Elmhurst's worksheet reports y as a single user-defined value applied to total exposed area (cert 001479 worksheet: "Thermal Bridges Bridging User Input Y 0.15"). For cohort certs with uniform age-band bps the change is heat-loss- invariant. For cert 001479 (Main=C → 0.15, Ext1=M → 0.08, Ext2=C → 0.15) the cascade was under-counting Ext1's bridging by 0.07 × 27.28 m² ≈ 1.9 W/K. For golden cert 7536-3827 (Main=D, Ext1=L, Ext2=F) the same per-bp split was costing ~2 W/K of bridging. Use the primary part's (parts[0]) age band for a single dwelling-wide `dwelling_y`, applied across all parts in the heat-loss loop. Cert 001479 chain pin closes another step: cascade SAP 70.38 → 70.20 (target 69.0094, delta 1.37 → 1.19). Golden 7536-3827 residuals tighten in lockstep: SAP +4 → +3, PE -24.73 → -22.53, CO2 -0.66 → -0.60. Other 7 golden certs unchanged (single-bp or uniform-age multi-bp). 70 of 71 chain+golden+heat-transmission tests green; chain pin still RED (load-bearing). Pyright net-zero (13-error baseline on heat_transmission.py preserved). 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/.