mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
RdSAP "first floor over passageway" rule — when an upper storey has
larger floor area than the storey immediately below, the excess
overhangs an unheated space or external air and routes through
Table 20's U_exposed_floor (1.20 W/m²K for age-D + no insulation,
the modal cohort lodging).
Cohort ground-truth: cert 2636 BP0 floor 1 (42.92 m²) − floor 0
(39.18 m²) = 3.74 m². Worksheet (28b) "Exposed floor Main: 3.74 ×
1.20 = 4.4880" matches the spec rule exactly.
`_part_geometry` now computes `cantilever_floor_area_m2` per BP.
The per-BP loop in `heat_transmission_from_cert` injects U×A onto
the floor accumulator and includes the area in (31) total external
area (which feeds (36) thermal bridges).
Gated to avoid false positives on flats and sub-ground multi-storey
shapes:
- `property_type == "0"` (house) — excludes flats (cert 9501 BP0
has 6.85 m² floor 0 + 74.43 m² floor 1; the diff is stairwell
access, not a real cantilever).
- `excess >= 1 m²` — excludes 2-dp rounding artefacts (cert 001479
Main BP0 lodges floor 1 = 30.77 vs floor 0 = 30.45 → 0.32 m²
drift that's not a real cantilever; would otherwise add 0.4
W/K and break the closed-cert 1e-4 Layer 4 chain gate).
- `excess / prev_area < 0.25` — excludes sub-ground / partial-
storey shapes (cert 7536 BP0: 33.7/17.28 = 195% — not a real
cantilever; floor 0 likely a partial vestibule, not the full
ground footprint).
Cohort impact: cert 2636 SAP residual closes from +0.4873 → -0.0055
(by far the largest cohort outlier becomes the closest match).
Zero regressions: 654 pass + 10 pre-existing baseline fails (9 cert
001479 hand-built skeleton + 1 FEE). All 7 ASHP certs now cluster
within ±0.06 SAP vs worksheet.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| handler | ||
| tests | ||
| __init__.py | ||
| db_writer.py | ||
| elmhurst_extractor.py | ||
| extractor.py | ||
| local_runner.py | ||
| parser.py | ||
| pdf.py | ||