mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
§3 cascade pins now close at abs=1e-4 for all 6 fixtures (was 5 of 6 with
000487 the holdout). Five spec-grounded changes:
1. SapRoomInRoofSurface gains optional `u_value` override + new kind
`gable_wall_external` per RdSAP10 Table 4 (p.22) row 1 (exposed gable,
U "as common wall" with assessor-lodged override). Routes to (29a)
walls + LINE_31 external area.
2. SapAlternativeWall gains optional `u_value` override — assessor-lodged
measured U bypasses the Table 6 cascade. 000487 Ext1 has a 9-mm
TimberWallOneLayer at U=1.90 outside the Table 6 buckets.
3. _part_geometry uses MAX of floor areas (not top) for roof area, per
RdSAP10 §3.8 (p.20): "Roof area is the greatest of the floor areas
on each level". Fixes 000487 Ext1 where ground=7.13 m² > first=5.63.
4. Replace Python `round()` (banker's) with `_round_half_up` for §15
element-area rounding. Banker's rounds 17.125 → 17.12; SAP convention
rounds half-up → 17.13. Boundary case appears in 000487 Ext1 party
wall area (party_length 6.25 × height 2.74 = 17.125).
5. 000487 fixture lodges 5 detailed RR surfaces (party gable, external
gable @ U=0.86, flat ceiling, stud wall, slope), roof_insulation_
thickness=300 (both parts → U=0.14), is_exposed_floor=True on Ext1
floor 0, and u_value=1.90 on the Ext1 alt wall.
§3 cascade per-fixture:
field | 474 | 477 | 480 | 487 | 490 | 516
LINE_31 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
LINE_33 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
LINE_36 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
LINE_37 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓
Scoreboard:
section_cascade_pins: 274 → 279 PASS (+5: §3 +4 for 000487, §7 +1
cascade)
e2e SapResult: 32 → 32 PASS (unchanged — downstream §8-§12
pins not yet asserted)
§4 (000487) deferred to slice 25b — needs has_electric_shower routing
through the §4 cascade so Nbath uses the "0.13N+0.19" branch when only
electric showers are present.
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/.