mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
Cert 2636-0525-2600-0401-2296's Summary §11 Windows block lodges one
alt-wall window (1.19 m², north-facing). The PDF layout for alt-wall
rows puts the "Alternative wall" string in the slot BEFORE the W×H×A
data line — not after frame_factor where regular "External wall"
rows put it. Without this fix the extractor's
`_parse_window_from_anchors` only scanned the post-frame_factor
`middle` slice for wall tokens, defaulted to "External wall" for the
alt-wall row, and the cascade allocated the 1.19 m² opening to the
main wall instead of the alt-wall — under-deducting from main and
leaving the alt-wall gross instead of net.
Fix at `elmhurst_extractor.py:865`: also scan
`lines[before_start:data_idx]` (the pre-data slice) for "wall"
tokens. Search order:
1. `middle` — first preference (normal layout for regular rows)
2. `pre_data` — alt-wall rows (cert 2636)
3. "External wall" default — no wall lodging found
Forcing function: cert 2636 walls_w_per_k moves from 20.5595 to
**20.0240 — EXACT match against worksheet (29a) Main 11.9250 + alt.1
8.0990 = 20.0240**. (Header (29a) sum is now fabric-exact; the
remaining +0.52 SAP residual on cert 2636 is in the ventilation
cascade — HTC 153.97 vs API 159.02 vs worksheet (39) avg 158.85 —
to be investigated in a follow-up slice.)
Added focused unit test
`test_summary_2636_alt_wall_window_parses_alternative_wall_location`
that pins the by-area lookup: 1.19 m² → "Alternative wall"; the
six 2.25 m² windows stay on "External wall". Guards against future
window-location parser regressions.
Pyright: 0 errors on the edited extractor + test files.
Regression suite: 685 pass + 10 fail (handover baseline 669 + 10 +
16 new GREEN tests across S0380.2..S0380.12). Cohort status:
cert Δ vs worksheet spec floor?
0380 +0.0594 ✓
0350 +0.0458 ✓
2225 +0.0441 ✓
2636 +0.5167 ✗ (fabric exact; ventilation residual)
3800 +0.0442 ✓
9285 +0.0502 ✓
9418 +2.5973 ✗ (Daikin)
Spec refs:
- Slice 102f-prep.10 (commit
|
||
|---|---|---|
| .. | ||
| handler | ||
| tests | ||
| __init__.py | ||
| db_writer.py | ||
| elmhurst_extractor.py | ||
| extractor.py | ||
| local_runner.py | ||
| parser.py | ||
| pdf.py | ||