mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
Wires the §10a Fuel costs worksheet block (slice 1's orchestrator) into the cert → calculator pipeline: - CalculatorInputs.fuel_cost composite slot (default zero sentinel for synthetic-test constructions that don't supply one). - cert_to_inputs._fuel_cost precompute — resolves Table 32 prices per end-use, calls additional_standing_charges_gbp per Table 12 note (a) for gas/off-peak gating, calls the fuel_cost orchestrator. Off-peak certs return a zero FuelCostResult sentinel so the legacy scalar fuel-cost-per-kWh fallback fires; Table 12a high-rate fraction split + Table12aSystem mapping is deferred to a future §10a follow-up slice. - calculator delegates total_cost / per-end-use cost intermediate dict entries to inputs.fuel_cost when the precompute is non-zero; falls back to the legacy inline kWh × price math for synthetic CalculatorInputs constructions (will be removed when the test corpus migrates to fuel_cost=). Outcomes: - 000490 SAP rating ceiling tightened 6 → 2 (marquee close-out: the cost gap was wrong-table + missing-standing-charges, not the spec-version drift the handover suspected). - 000474 SAP rating ceiling loosened 2 → 4 (post-§10a Table 32 + standing-charge fix exposes upstream §4 HW kWh + Appendix L lighting overestimates that the wrong pre-§10a prices had been masking). §4 HW worksheet tightening is the next ticket. - Golden corpus SAP tolerance widened 7 → 11 — Table 32 oil price rose +55% (4.94 → 7.64 p/kWh) which moves oil-heated certs whose lodged actual_sap pre-dates Table 32 (ADR-0010 §3 Validation Cohort discipline). - 2 new cert-round-trip conformance tests on test_fuel_cost.py (000474 within existing e2e tolerance; 000490 within 5%). 660 tests passing across the domain package. 0 net new pyright errors on touched modules. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| src/domain | ||
| pyproject.toml | ||
| README.md | ||
domna-domain
Shared domain types — Property, Properties, BaselinePerformance, Plan, PlanPhase, Scenario, ScenarioPhase, ScenarioSnapshot, Recommendation, OptimisedPackage, EpcPropertyData, etc.
Boundary: types only. No persistence, no IO, no business logic. Other packages and services depend on domna-domain; this package depends on nothing internal.
Domain definitions live in ../../CONTEXT.md. New types added here must match the glossary terms.
Layout
src/domain/
├── __init__.py
├── property.py # Property, Properties, PropertyIdentity
├── site_notes.py
├── landlord_overrides.py
├── baseline_performance.py # lodged + effective pair (ADR-0004)
├── plan.py # Plan, PlanPhase, OptimisedPackage
├── scenario.py # Scenario, ScenarioPhase, ScenarioSnapshot (ADR-0005)
├── recommendation.py
├── geospatial.py
├── solar.py
├── anomaly_flags.py
└── ml/
├── __init__.py
├── transform.py # EpcMlTransform (versioned per §8.3)
└── schema.py
When datatypes/epc/domain/ folds in, the EPC schema types move under src/domain/epc/.