Model/packages/domain
Khalim Conn-Kowlessar 6e6bba7e67 Slice 26c: §7 mean internal temperature cascade pin (44/60 PASS)
Added `mean_internal_temperature_section_from_cert` composing §1 (dim)
+ §2 (effective_monthly_ach) + §3 (total HLC) + §5 (internal gains)
+ §6 (solar gains) + climate (external temp) and threading them through
the §7 orchestrator — exact mirror of the cert_to_inputs internal
cascade.

Added 60 strict pin cases for §7 worksheet lines (85)..(94): T_h1
scalar, living_area_fraction scalar, η_living + T_living + T_h2 +
η_elsewhere + T_elsewhere + T_92 + T_93 + η_whole monthly tuples.

§7 per-fixture monthly pin status:
  fixture | passing
  000474  | 6 of 8  (LINE_92/93 ~0.0001 K residual)
  000477  | 6 of 8  (LINE_92/93 ~0.0002 K residual)
  000480  | 6 of 8  (LINE_92/93 ~0.0001 K residual)
  000487  | 0 of 8  (cascade from §3 RR + §4 HW defects)
  000490  | 6 of 8  (LINE_92/93 ~0.0001 K residual)
  000516  | 8 of 8  ✓

LINE_92/93 marginal fails on 4 fixtures: weighted-sum of T_living +
T_elsewhere drifts by ~1e-4 K from PDF despite the per-zone temps
matching at 1e-4 individually. Likely a PDF intermediate-precision
artefact (analogous to U_eff at 5 dp in §3 windows); investigation
deferred — no widening per project policy.

Scoreboard:
  section_cascade_pins: 230 → 274 PASS (+44; 60 new tests, 16 fail)
  e2e SapResult:         32 →  32 PASS (unchanged — §7 cascade was
    already running internally, pin tests just surface the line refs)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 21:50:12 +00:00
..
src/domain Slice 26c: §7 mean internal temperature cascade pin (44/60 PASS) 2026-05-23 21:50:12 +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/.