mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
Closes the dominant ~92% of the 000474 HW kWh +14.4% residual that the post-§10a Table 32 cost-side fix exposed (pre-§10a wrong prices had been masking it). 000474 HW fuel kWh tightens 2622 → 2320 (+1.2% over PDF 2292); remaining +1.2% closes when slice 2 (Eq D1 monthly cascade) lands. 000490 unaffected — PCDB 10328 lodges separate_dhw_ tests=0 (no Table 3b/3c data), falls through to existing Table 3a default. - tables/pcdb/parser.py: GasOilBoilerRecord gains 7 typed fields per BRE PCDF Spec v1.0 §7.11 — subsidiary_type (field 16), store_type (field 39), separate_dhw_tests (field 48), rejected_energy_ proportion_r1 (field 51), loss_factor_f1_kwh_per_day (field 52), loss_factor_f2_kwh_per_day (field 56), rejected_factor_f3_per_ litre (field 57). Field positions cross-verified against PDF Σ(61) = 337.27 vs 000474 worksheet pin 337.19 (Δ 0.02%). - worksheet/water_heating.py: combi_loss_monthly_kwh_table_3b_row_1_ instantaneous(r1, F1, energy_content (45)m, daily HW (44)m) — SAP10.2 Appendix J Table 3b row 1 formula (61)m = (45)m × r1 × fu + F1 × n_m. Other Table 3b rows (storage variants) and Table 3c (two-profile) deferred until a fixture exercises. - rdsap/cert_to_inputs.py: _pcdb_table_3b_combi_loss_override builds the (61)m override from the PCDB record when separate_dhw_tests=1 + subsidiary=0 + store_type=0 (instantaneous non-storage path). _hot_water_fuel_kwh_per_yr threaded with pcdb_record kwarg; calls water_heating_from_cert with the override when present. - docs/sap-spec/pcdb_table_105_gas_oil_boilers.jsonl: regenerated via the ETL to surface the new typed fields alongside the existing efficiency columns. 484 tests passing (was 479). e2e ceilings hold: 000474 SAP delta 4 → 3 (within current ceiling of 4 — will tighten further after slice 2 Eq D1 cascade lands). 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/.