Model/packages/domain
Khalim Conn-Kowlessar 82627ebbfa Cohort residual slice 9: u_rr_default_all_elements — RdSAP10 Table 18 col (4)
Adds the "Room-in-roof, all elements" U-value lookup keyed by age band,
with Scotland override for age K per Table 18 footnote (2). This is the
fallback U-value for the §3.9 Simplified RR cascade when no detailed
per-surface lodgement is available (the "as built / unknown" path per
footnote (1)).

Tests cover the spec table verbatim:
  - A-D 2.30, E 1.50, F 0.80, G 0.50, H 0.35, I 0.35, J 0.30,
  - K 0.25 (England) / 0.20 (Scotland), L 0.18, M 0.15.
Mid-range fallback 0.50 (matching age G) when neither age band nor
country lodged — robustness contract identical to u_roof.

Reference: RdSAP 10 (10-06-2025) Table 18 page 45.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 19:16:15 +00:00
..
src/domain Cohort residual slice 9: u_rr_default_all_elements — RdSAP10 Table 18 col (4) 2026-05-22 19:16:15 +00:00
pyproject.toml slice 13: to_rows(properties) returns pd.DataFrame 2026-05-16 16:43:28 +00:00
README.md added potential file scaffolding: 2026-05-15 10:56:53 +00:00

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/.