Model/tests/domain
Khalim Conn-Kowlessar 3f6129afc6 Bill a sheltered wall to a stairwell at Ru 2.1, not the corridor 0.5 🟩
RdSAP 10 §5.9 "U-values of sheltered walls" (PDF p.43): a wall between a
flat/maisonette and an unheated buffer takes SAP 10.2 §3.3's U = 1/(1/U0 + Ru),
and Ru depends on the BUFFER TYPE — "Use Ru = 0.5 m²K/W for corridors and
Ru = 2.1 m²K/W for stairwell."

The buffer type is lodged on `SapFlatDetails.heat_loss_corridor` (0-based per
item 1-11, PDF p.70: 0 none, 1 heated, 2 unheated corridor, 3 unheated
stairwell). That field was read NOWHERE under domain/ — corridor presence was
inferred only from a lodged sheltered alternative wall — so every sheltered wall
took the corridor 0.5 and every stairwell flat over-billed its sheltered wall,
under-rating the dwelling.

Distinct from `_SHELTERED_GABLE_ADDED_RESISTANCE_M2K_W`, which is RdSAP 10
Table 4 (p.22) for a room-in-roof sheltered gable — same 0.5, different rule,
deliberately untouched.

Corpus gauge ratcheted UP: within-0.5 78.8% -> 79.8% (+10 certs), SAP MAE
0.626 -> 0.613, PE MAE 2.9 -> 2.8. Failure set and pyright count identical to
main. Portfolio 824 is stairwell-heavy (60 properties at code 3); property
749898 over-bills 4.44 W/K on a 48 m2 flat.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 22:02:31 +00:00
..
abri send AM or PM instead of trying to parse morning or afternoon 2026-07-10 10:45:57 +00:00
addresses standardist Address 2026-05-22 10:13:32 +00:00
billing ASHP sizing targets the Appendix-N efficiency peak (realistic installed pump) 🟩 2026-07-03 11:02:13 +00:00
bulk_document_download Scope latest-per-Document-Type per property, each in its own folder 🟩 2026-07-08 09:15:44 +00:00
data_transformation Let a deterministic guard override the fallback classifier per description 🟥 2026-07-01 09:39:16 +00:00
epc A community override keeps an assessor-observed Group 3 control 🟥 2026-07-03 16:33:40 +00:00
epc_prediction Derive multiple_glazed_proportion for 16.x certs with explicit glazing wording 2026-07-08 11:53:51 +00:00
fuel_rates Expose an off-peak meter's standing charge and full day/night blend range 🟩 2026-06-24 17:14:51 +00:00
magicplan Mapper reads 'Individual Trickle Vent' label variant 🟥 2026-06-30 13:43:48 +00:00
modelling Gate the loft top-up strictly below the 270mm building-regs depth 🟩 2026-07-10 16:07:48 +00:00
property feat: thread physical-state-change signal into rebaselining 🟩 2026-06-26 19:15:11 +00:00
property_baseline ASHP sizing targets the Appendix-N efficiency peak (realistic installed pump) 🟩 2026-07-03 11:02:13 +00:00
sap10_calculator Bill a sheltered wall to a stairwell at Ru 2.1, not the corridor 0.5 🟩 2026-07-21 22:02:31 +00:00
tasks A recorded batch failure carries structured details onto the sub_task outputs 🟥 2026-07-07 11:49:56 +00:00
__init__.py added postcode splitter rewrite to ddd 2026-05-19 16:35:09 +00:00
test_building_geometry.py feat(modelling): floor Recommendation Generator + ground-floor-area geometry 2026-06-03 09:12:29 +00:00
test_postcode.py Add UK-postcode format validity to the Postcode value object 🟩 2026-06-29 15:24:18 +00:00