From 00a27efd8716ed6876fbaa916edce1423e2944f7 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Sun, 24 May 2026 19:17:59 +0000 Subject: [PATCH] Slice 48: Elmhurst extractor handles 3 new layout quirks; 5 fixture PDFs added MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The §11 Windows table in the Summary PDF doesn't lay out identically across the cohort. Three new quirks added to the layout-style parser so the remaining 5 certs can be debugged with windows actually extracted: 1. `Wood 0.70` combined frame_type+frame_factor line — previously the parser expected them on separate lines (data+1 / data+2) and rejected the window when the joined form appeared. 2. Trailing glazing-type on the data line — `1.22 1.76 2.15 Double pre 2002` is the joined-cell variant in 000516; the W/H/Area anchor now captures the trailing phrase as an optional 4th group and feeds it through as `inline_glazing_type`, bypassing the separate-line glazing-prefix scan. 3. Cross-window gap with no glazing marker — `_partition_after_manuf` now falls back to "second orientation token in gap" when no glazing-type-prefix word appears. Covers the 000516 layout where each window has prefix+suffix orient tokens (no inline orient) and the glazing-type is joined-to-data. The 5 remaining Summary PDFs are copied into `backend/documents_parser/tests/fixtures/` ready for per-cert mapper work. Mirror pin tests deferred — each cert still has its own diff to close (handover in NEXT_AGENT_PROMPT.md documents the per-cert state, e.g. 000477 needs secondary-heating extraction, 000516 needs roof-window separation). Current cohort SAP deltas vs the U985 worksheet PDFs (target 1e-4): 000474 0.0000 ✓ 000477 +6.3655 secondary heating + lighting 000480 +8.2695 diagnosis pending 000487 +8.1433 extractor still drops windows 000490 +5.6551 diagnosis pending 000516 +5.9812 roof-window separation Wider regression stays green (754 pass). Pyright net-zero on touched files. Co-Authored-By: Claude Opus 4.7 --- .../documents_parser/elmhurst_extractor.py | 86 ++++- .../tests/fixtures/Summary_000477.pdf | Bin 0 -> 81441 bytes .../tests/fixtures/Summary_000480.pdf | Bin 0 -> 81872 bytes .../tests/fixtures/Summary_000487.pdf | Bin 0 -> 81825 bytes .../tests/fixtures/Summary_000490.pdf | Bin 0 -> 80197 bytes .../tests/fixtures/Summary_000516.pdf | Bin 0 -> 81306 bytes docs/sap-spec/NEXT_AGENT_PROMPT.md | 310 ++++++------------ 7 files changed, 172 insertions(+), 224 deletions(-) create mode 100644 backend/documents_parser/tests/fixtures/Summary_000477.pdf create mode 100644 backend/documents_parser/tests/fixtures/Summary_000480.pdf create mode 100644 backend/documents_parser/tests/fixtures/Summary_000487.pdf create mode 100644 backend/documents_parser/tests/fixtures/Summary_000490.pdf create mode 100644 backend/documents_parser/tests/fixtures/Summary_000516.pdf diff --git a/backend/documents_parser/elmhurst_extractor.py b/backend/documents_parser/elmhurst_extractor.py index 822254ca..a3449014 100644 --- a/backend/documents_parser/elmhurst_extractor.py +++ b/backend/documents_parser/elmhurst_extractor.py @@ -417,8 +417,14 @@ class ElmhurstSiteNotesExtractor: ) return windows - # Anchors used by the layout-style window parser. - _WIDTH_HEIGHT_AREA_RE = re.compile(r"^(\d+\.\d+)\s+(\d+\.\d+)\s+(\d+\.\d+)$") + # Anchors used by the layout-style window parser. The W/H/Area anchor + # is sometimes followed by a joined glazing-type phrase on the same + # line (e.g. '1.22 1.76 2.15 Double pre 2002'); the optional 4th + # capture surfaces that text so the parser can use it instead of a + # separately-laid-out prefix line. + _WIDTH_HEIGHT_AREA_RE = re.compile( + r"^(\d+\.\d+)\s+(\d+\.\d+)\s+(\d+\.\d+)(?:\s+(\S.*?))?$" + ) _MANUFACTURER_RE = re.compile(r"^(Manufacturer|Default)\s+(\d+\.\d+)$") _ORIENTATION_TOKENS = frozenset({ "North", "South", "East", "West", "NE", "NW", "SE", "SW", @@ -507,6 +513,28 @@ class ElmhurstSiteNotesExtractor: return j return None + _FRAME_TYPE_AND_FACTOR_RE = re.compile(r"^(\S+(?:\s+\S+)*?)\s+(\d\.\d+)$") + + def _parse_frame_type_and_factor( + self, lines: List[str], data_idx: int + ) -> tuple[str, Optional[float], int]: + """Return `(frame_type, frame_factor, middle_start_idx)` from + the lines immediately after the data anchor. Layout-style cell + joining can collapse what's normally two lines ('PVC' then + '0.70') into one ('Wood 0.70'); both shapes need to feed the + same downstream slice.""" + combined = self._FRAME_TYPE_AND_FACTOR_RE.match(lines[data_idx + 1].strip()) + if combined is not None: + return combined.group(1), float(combined.group(2)), data_idx + 2 + if data_idx + 2 >= len(lines): + return lines[data_idx + 1].strip(), None, data_idx + 2 + frame_type = lines[data_idx + 1].strip() + try: + frame_factor = float(lines[data_idx + 2].strip()) + except ValueError: + return frame_type, None, data_idx + 3 + return frame_type, frame_factor, data_idx + 3 + def _partition_after_manuf( self, lines: List[str], manuf_idx: int, next_data_idx: int ) -> int: @@ -514,14 +542,25 @@ class ElmhurstSiteNotesExtractor: block (and the inclusive lower bound for the next window's prefix block). After the manufacturer line come 3 fixed tokens (g_value, draught, shutters); the variable suffix lines start at manuf+4 - and run until the next window's glazing-type-start token (e.g. - 'Double between 2002', 'Single', 'Triple ...') or until the - next window's data line if no such token is present.""" + and run until either (a) the next window's glazing-type-start + token (e.g. 'Double between 2002', 'Single', 'Triple ...') or + (b) the second orientation token in the gap, whichever comes + first. Branch (b) covers layouts where the glazing-type is + joined to the data line (no separate prefix line exists), so + the only signal of window-transition is the orientation tokens + rotating: orient_suffix(k) → orient_prefix(k+1). Falls through + to `next_data_idx` when neither marker is present.""" scan_start = manuf_idx + 4 + seen_orient = False for j in range(scan_start, next_data_idx): - first_word = lines[j].strip().split(" ", 1)[0] + stripped = lines[j].strip() + first_word = stripped.split(" ", 1)[0] if first_word in self._GLAZING_TYPE_PREFIX_WORDS: return j + if stripped in self._ORIENTATION_TOKENS: + if seen_orient: + return j + seen_orient = True return next_data_idx def _parse_window_from_anchors( @@ -537,20 +576,28 @@ class ElmhurstSiteNotesExtractor: width = float(anchor.group(1)) height = float(anchor.group(2)) area = float(anchor.group(3)) + # Layout-style cell joining sometimes leaves the glazing-type + # phrase trailing the W H Area triplet on the same line (e.g. + # "1.22 1.76 2.15 Double pre 2002"); when present we pass it + # through as `inline_glazing_type` and the composer skips the + # would-be glazing-prefix scan. + inline_glazing_type = anchor.group(4) if anchor.lastindex and anchor.lastindex >= 4 else None # frame_type and frame_factor immediately follow the data line. - if data_idx + 2 >= len(lines): + # Layout-style cell joining sometimes collapses them onto a + # single "Wood 0.70" line; treat both shapes uniformly so the + # downstream `middle` slice still starts at the first variable + # field (glazing_gap / bp / location / orient). + if data_idx + 1 >= len(lines): return None - frame_type = lines[data_idx + 1].strip() - try: - frame_factor = float(lines[data_idx + 2].strip()) - except ValueError: - return None - if not 0.0 < frame_factor <= 1.0: + frame_type, frame_factor, middle_start = self._parse_frame_type_and_factor( + lines, data_idx + ) + if frame_factor is None or not 0.0 < frame_factor <= 1.0: return None # Variable-order tokens between frame_factor and Manufacturer. - middle = [lines[j].strip() for j in range(data_idx + 3, manuf_idx)] + middle = [lines[j].strip() for j in range(middle_start, manuf_idx)] glazing_gap = next((t for t in middle if "mm" in t.lower()), None) location = next((t for t in middle if "wall" in t.lower()), "External wall") bp_inline = next((t for t in middle if t in self._BP_INLINE_TOKENS), None) @@ -586,6 +633,7 @@ class ElmhurstSiteNotesExtractor: after=after, bp_inline=bp_inline, orient_inline=orient_inline, + inline_glazing_type=inline_glazing_type, ) return Window( @@ -613,6 +661,7 @@ class ElmhurstSiteNotesExtractor: after: List[str], bp_inline: Optional[str], orient_inline: Optional[str], + inline_glazing_type: Optional[str] = None, ) -> tuple[str, str, str]: """Re-join the glazing-type / building-part / orientation tokens split by the layout preprocessor. Each is at most 2 fragments @@ -645,8 +694,13 @@ class ElmhurstSiteNotesExtractor: bp_prefix_frag = pop_if_bp_fragment(prefix) bp_suffix_frag = pop_if_bp_fragment(suffix) - # Glazing type: remaining prefix + remaining suffix (joined). - glazing_type = " ".join([*prefix, *suffix]).strip() + # Glazing type: an inline glazing-type captured from the data + # line (layout-joined variant) wins; otherwise join the remaining + # prefix + suffix fragments. + if inline_glazing_type is not None: + glazing_type = inline_glazing_type + else: + glazing_type = " ".join([*prefix, *suffix]).strip() # Building part: inline token wins; otherwise join prefix + suffix. if bp_inline is not None: diff --git a/backend/documents_parser/tests/fixtures/Summary_000477.pdf b/backend/documents_parser/tests/fixtures/Summary_000477.pdf new file mode 100644 index 0000000000000000000000000000000000000000..94ca30020b9c310e2e6d7c579020fcbbe13fafd0 GIT binary patch literal 81441 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 literal 0 HcmV?d00001 diff --git a/backend/documents_parser/tests/fixtures/Summary_000516.pdf b/backend/documents_parser/tests/fixtures/Summary_000516.pdf new file mode 100644 index 0000000000000000000000000000000000000000..60c73055c1cae7466cdf6638520861725b48be4c GIT binary patch literal 81306 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 YymT^lbozC73IV_%01gX_oQnMa02uw|pa1{> literal 0 HcmV?d00001 diff --git a/docs/sap-spec/NEXT_AGENT_PROMPT.md b/docs/sap-spec/NEXT_AGENT_PROMPT.md index ebca5762..266fe437 100644 --- a/docs/sap-spec/NEXT_AGENT_PROMPT.md +++ b/docs/sap-spec/NEXT_AGENT_PROMPT.md @@ -1,245 +1,139 @@ -# Handover — close the Elmhurst Summary→SAP chain to 1e-4 +# Handover — close the remaining 5 Elmhurst Summary→SAP chains to 1e-4 You are picking up branch `ara-backend-design-prd` mid-stream. The -previous agent left a near-complete but **not actually complete** -validation chain. This handover is honest about what's done, what's -still wrong, and why a fresh approach may help. +previous chain of work closed **Summary_000474** to 1e-4 (Slice 47) +and landed extractor infrastructure that helps the other 5 fixtures +(Slice 48), but each of the 5 remaining certs still has its own diff +to close. This handover captures the exact per-cert state so you +don't have to rediscover it. ## The 30-second picture -There are two paths into the calculator: - ``` -Path A: hand-built EpcPropertyData → cascade → SAP 62.2584 ← matches Elmhurst worksheet PDF to 4 d.p. ✓ -Path B: Summary_NNNNNN.pdf → extractor → ElmhurstSiteNotes - → from_elmhurst_site_notes → EpcPropertyData - → cascade → SAP 62.5195 ← off by 0.2611 unrounded SAP points ✗ +Cert Mapped SAP Target SAP Δ Notes +000474 62.2584 62.2584 0.0000 ✓ CLOSED (Slice 47) +000477 71.3712 65.0057 +6.3655 secondary heating + lighting +000480 69.5681 61.2986 +8.2695 unknown (largest gap) +000487 69.7864 61.6431 +8.1433 window count 1/many (extractor) + others +000490 63.0530 57.3979 +5.6551 unknown +000516 68.7749 62.7937 +5.9812 roof window separation ``` -Both paths feed the same calculator (`calculate_sap_from_inputs`). Path -A proves the cascade is provably equivalent to Elmhurst's calculator -(`sap_score_continuous` = 62.2584 matches Elmhurst worksheet PDF line -257 exactly). Path B uses `from_elmhurst_site_notes` instead of the -hand-built fixture; **it should produce identical output**, because -the Summary PDF and the hand-built fixture encode the same source-of- -truth data. It doesn't. The 0.26 SAP gap means information is being -dropped in the extractor or mapper. +All Δ are positive — the mapper is computing SAP too HIGH, which +typically means missing cost contributions (secondary heating fuel, +lighting, etc.) or under-counted heat-loss area. -The user explicitly rejected "within 0.5 is good enough" — the chain -must reproduce Elmhurst to `1e-4` like every other Elmhurst worksheet -test. +Forcing function for the 000474 case is in: +`backend/documents_parser/tests/test_summary_pdf_mapper_chain.py::test_summary_000474_full_chain_sap_matches_worksheet_pdf_exactly` +(green at 1e-4). When you close each remaining cert, add a mirror +test next to it. -The end goal is: `api → EpcPropertyData → Sap10 calculator` with -`< 0.5` SAP error (the API publishes rounded SAP integers, so half a -point is rounding noise). But for the Elmhurst-site-notes path, -because Elmhurst's worksheet PDFs publish unrounded line-ref values, -the target is **zero error to 1e-4**. +## What landed already -## Forcing function - -There is one failing test pinning this: - -``` -backend/documents_parser/tests/test_summary_pdf_mapper_chain.py:: - test_summary_000474_full_chain_sap_matches_worksheet_pdf_exactly -``` - -It asserts `abs(mapped_sap - 62.2584) < 1e-4` and currently fails with -`Δ = 0.2611`. Your job is to drive it to GREEN. - -## Definition of done - -- The failing test above passes at `1e-4` tolerance. -- The two other `test_summary_pdf_mapper_chain.py` tests stay green - (`sap_building_parts == 3`, `sap_windows == 7`). -- The wider `datatypes/epc/` + `backend/documents_parser/tests/` - regression stays green (the 9 pre-existing `test_appendix_u.py` - failures and 1 pre-existing 1e-9 FEE-precision failure are - unrelated — leave them). -- Once 000474 is at 1e-4, replicate the test for the other 5 Summary - PDFs (000477, 000480, 000487, 000490, 000516) — files are under - `sap worksheets/` at the repo root, **untracked**, copy each into - `backend/documents_parser/tests/fixtures/` as you go. -- For each cert, pin against the unrounded SAP value lodged in line - 257 of the corresponding `U985-0001-NNNNNN.pdf` worksheet. - -## What the previous agent did right - -12 commits across the session. The architecturally-load-bearing ones: - -| Slice | Commit | Effect | +| Slice | Commit | What | |---|---|---| -| 44 | `ea6d4263` | flat_roof_insulation_thickness mapper passthrough | -| 45a/b/c | `f08252dc` / `24f35f8b` / `5acbecc5` | PV cascade per Appendix M + U (orientation × pitch × Table-M1 ZPV × rating-vs-demand climate) | -| audit pins | `15789f5a` / `acc6331d` / `8ac548ca` | u_wall / u_roof / u_floor description-cascade pins against Tables 6 / 16 / §5.12 — proves U-value cascade is spec-correct on the cohort | -| 46 scaffold | `ccf7aa21` | First scaffold test for Summary→EpcPropertyData chain (strict-xfail) | -| 46a | `36f2c7bb` | Multi-bp support: schema adds `ExtensionPart`; extractor parses Main + 1st Extension + 2nd Extension subsections in §4/§7/§8/§9 with "As Main: Yes" inheritance; mapper produces a `SapBuildingPart` per bp | -| 46b | `066dce19` | Layout-style window parser anchored on `W H Area` data line + `Manufacturer ` line — extracts 7 windows from the Summary table layout | -| **46c** | **`256a5afe`** | **String→int code translations for every Elmhurst-coded field the cascade reads (age band, wall_construction, wall_insulation_type, main_fuel_type, heat_emitter_type, main_heating_control, orientation); PCDB index parsed from `pcdf_boiler_reference`; floor ordering + 0.25 m upper-storey adjustment + `is_exposed_floor` flag for "above unheated space"** | +| 47 | `29ab80b0` | `main_heating_category=2` in mapper → pumps_fans 130→160; window-gap partitioned on glazing-type-start marker → fixes W4/W5 orientation mis-classification | +| 48 | (this slice) | Extractor handles combined `Wood 0.70` frame line; data anchor allows trailing glazing-type (`1.22 1.76 2.15 Double pre 2002`); partition falls back to second-orient-token when no glazing marker in gap; 5 fixture PDFs copied to `backend/documents_parser/tests/fixtures/` | -After 46c, mapped SAP is 62.52 vs target 62.26 (`Δ = 0.26`). +## Per-cert diff diagnoses (already done — don't re-discover) -## What the previous agent got wrong +### 000477 — Δ +6.37 — single-BP cert +Run `python /tmp/diff_cert.py 000477` to reproduce. Scalar input diffs: +- `secondary_heating_fraction`: mapped=**0.0** vs handbuilt=**0.1** ← root cause. Handbuilt has `secondary_heating_type=691` (Electric panel heaters) lodged on `SapHeating`. Mapper doesn't extract from §10 "Secondary heating" Summary PDF section. +- `lighting_kwh_per_yr`: mapped=160.88 vs handbuilt=201.68 — bulb count mismatch +- `secondary_heating_co2_factor_kg_per_kwh`, `secondary_heating_primary_factor`: None vs populated — downstream of the missing secondary_heating_type -**Overclaimed completion at the 0.5-tolerance milestone.** The -original test was written with a 0.5 tolerance (mirroring the -API-cert residual cohort, where the API publishes rounded SAP -integers so half a point is just rounding). That's the wrong -tolerance for the Elmhurst path: Elmhurst lodges full PDF lines with -4-d.p. unrounded values, and our cascade matches them exactly on -hand-built inputs. The bar is `1e-4`, not 0.5. The previous agent -committed Slice 46c with a 0.5-tolerance pin; this handover has -since tightened it to `1e-4` (the failing test above). +**Fix**: Extend `ElmhurstSiteNotesExtractor` to extract §10 Secondary heating fields, and `_map_elmhurst_sap_heating` to populate `secondary_heating_type` + `secondary_fuel_type` on the `SapHeating`. -## The remaining diffs (Slice 46c → 1e-4 SAP) +### 000487 — Δ +8.14 — only 1 window extracted (should be many) +Despite Slice 48's frame-line + data-anchor improvements, the §11 +table layout of this cert still drops most windows. Run +`python /tmp/dump_one.py 000487` to see the parsed window. Inspect +the raw layout via `python /tmp/dump_section.py 000487` — the table +has a different cell-joining pattern that the current parser hasn't +yet covered. -After Slice 46c, the only differing `cert_to_inputs(epc)` scalar -fields between mapped and hand-built are: +### 000516 — Δ +5.98 — roof window contamination +6 vertical windows extracted (correct: 5) — the 6th is actually a +**roof window** (`1.05×1.12=1.18 m² U=3.10 NE`, pitch 45°) being +treated as vertical. Handbuilt 000516 separates this into +`sap_roof_windows=[SapRoofWindow(area_m2=1.18, u_value_raw=3.40, +orientation=2 NE, pitch_deg=45.0, ...)]`. -``` -hot_water_kwh_per_yr: mapped=2291.7821223353485 handbuilt=2291.7784230242883 (Δ < 0.01 — float drift) -pumps_fans_kwh_per_yr: mapped=130.0 handbuilt=160.0 ← 30 kWh, real bug -lighting_kwh_per_yr: mapped=139.94522455112704 handbuilt=139.94522455112707 (Δ < 1e-10 — float noise) -pumps_fans_primary_factor: mapped=1.5128000000000001 handbuilt=1.5128 (float repr — harmless) -fabric_energy_efficiency_kwh_per_m2_yr: mapped=186.62 handbuilt=186.88 (output, not input — driven by solar gains) -``` +**Fix**: Add roof-window extraction in `ElmhurstSiteNotesExtractor` +(likely a "Roof Windows" subsection of §11). Map to `SapRoofWindow` +not `SapWindow`. -Plus a window-orientation mis-classification (see below). +### 000480 — Δ +8.27 — diagnosis pending +Run `python /tmp/diff_cert.py 000480` to start. Two BPs (Main + ext) +extracted correctly, 7 windows extracted. Largest gap of the 5 — may +have multiple compounding issues. -### Diff #1: `pumps_fans_kwh_per_yr` = 130 vs 160 (30 kWh) +### 000490 — Δ +5.66 — diagnosis pending +Same: `python /tmp/diff_cert.py 000490`. -This is the dominant residual contributor. Search `cert_to_inputs.py` -for `pumps_fans_kwh_per_yr` to find what drives it. Likely candidates: -- `central_heating_pump_age` (the Summary PDF lodges "Heat pump age: - Unknown" but that's the HEAT pump, not the central heating pump — - may need a separate field on `ElmhurstSiteNotes.MainHeating`) -- Boiler type / FGHRs / weather compensator flags -- Some specific Table 4d/4e cascade input we're dropping - -The cascade reads `MainHeatingDetail.central_heating_pump_age: Optional[int]` -which the Elmhurst mapper doesn't currently populate. - -### Diff #2: Window [4] orientation mis-classified as SE (4) — should be E (3) - -Mapped windows: -``` - [4] orient=4 (SE) W=1.1 H=1.6 U=2.0 -``` - -Hand-built has TWO East U=2.0 windows totalling 3.74 m² area. Mapped's -window [2] (East, 1.98 m²) + window [4] (mis-labelled SE, 1.76 m²) = -3.74 m² ✓ — exactly matches. So the layout-style window parser is -producing `orientation='East-South'` for window [4] when it should be -just `'East'`. Look at `_compose_window_descriptors` in -`backend/documents_parser/elmhurst_extractor.py` — the suffix -token "South" is being joined with the inline "East" prefix when it -shouldn't be (probably the "South" belongs to a different window). - -The window count itself also differs: mapped extracts 7 individual -windows, hand-built consolidates to 5 by `(orientation, U)` group with -width = total area / 1.0 m. Both should be functionally equivalent -to the cascade IF orientations + U-values + total areas all match. So -fixing the orientation should close this gap. - -### Diff #3: float-precision noise - -`hot_water_kwh_per_yr` (sub-0.01 kWh) and `lighting_kwh_per_yr` -(sub-1e-10 kWh) are downstream of accumulation order in the cascade. -`pumps_fans_primary_factor` 1.5128000000000001 vs 1.5128 is a Python -float repr quirk. These won't close the SAP gap; ignore them unless -the other fixes leave the test slightly red and one of these turns -out to be the last decimal. - -## Why a fresh approach may help - -The previous agent's pattern was "fix one bug at a time, ship when -test passes loosely." The right pattern for `1e-4` is the opposite: -**systematically diff every input field between mapped and hand-built, -fix every diff, then run the test once.** That's two more slices -(pumps_fans + window orientation) — not enough for a session of -incremental shipping, so consider doing both in one slice with the -pin as the forcing function. - -You may also want to look harder at the *architectural* question: -why does Elmhurst's "site notes" (the surveyor's input form) need to -go through THREE schemas — `ElmhurstSiteNotes`, then `EpcPropertyData`, -then `CalculatorInputs` — when the hand-built fixture skips straight -to the middle one? The string→int translations in `from_elmhurst_site_notes` -are essentially doing what the extractor should do (or what an -`elmhurst_codes.py` codes-module could express). If `ElmhurstSiteNotes` -stored integer codes alongside the human-readable strings, the mapper -would be a pure projection. - -## Quick-orient commands +## Probe scripts (already in `/tmp`) ```bash -# Failing test (Δ = 0.26 SAP → target < 1e-4) -python -m pytest backend/documents_parser/tests/test_summary_pdf_mapper_chain.py::test_summary_000474_full_chain_sap_matches_worksheet_pdf_exactly --no-cov --no-header --tb=short +# Probe all 6 fixtures' SAP delta +python /tmp/probe_all.py -# All Summary→chain tests (2/3 green, 1 failing — the one above) -python -m pytest backend/documents_parser/tests/test_summary_pdf_mapper_chain.py --no-cov --no-header -v +# Dump raw extracted windows for a cert +python /tmp/dump_one.py 000516 -# Wider regression to confirm no fresh breakage -python -m pytest datatypes/epc/ backend/documents_parser/tests/ --no-cov --no-header -q +# Dump the §11 Windows section layout (debug extractor) +python /tmp/dump_section.py 000487 + +# Field-by-field input diff mapped vs handbuilt +python /tmp/diff_cert.py 000477 ``` -The 9 `test_appendix_u.py` failures and 1 `test_no_ac_cert_round_trips_fee_equals_space_heating_per_m2` -failure are **pre-existing** from before this session — don't try to -fix them as part of this work. +If `/tmp` got wiped, the contents are: +- `probe_all.py`: iterates 6 fixtures, mapper-cascades each, prints + Δ and BPs/windows counts. +- `dump_one.py `: prints raw `ElmhurstSiteNotes.windows` for + the given cert. +- `dump_section.py `: prints the line-by-line `§11 Windows` + section from the layout-preprocessed pages. +- `diff_cert.py `: cascades both mapped and handbuilt EPCs + through `cert_to_inputs`, diffs the scalar input fields. + +## Suggested next slices + +| Slice | Cert | Effort | Why next | +|---|---|---|---| +| 49 | 000477 | Medium | 1 BP topology → smallest moving parts; secondary-heating extraction unlocks the largest single fix | +| 50 | 000516 | Medium | Roof-window separation — adds new schema field, generalisable | +| 51 | 000487 | High | Extractor parser improvements (the §11 layout is uncovered terrain) | +| 52 | 000490 | Unknown | Diagnose then close | +| 53 | 000480 | Unknown | Largest Δ; do last after others reveal patterns | + +## Definition of done (unchanged from before) + +- All 6 `test_summary_pdf_mapper_chain.py` chain tests pin at 1e-4. +- Wider regression stays green (currently 754 pass). +- Pyright net-zero on every commit (strict mode). +- One slice = one commit. +- No widening, no xfail (project memory `feedback_zero_error_strict`). ## Reference materials -- **`docs/sap-spec/HANDOVER_NEXT.md`** — original calculator-closure - handover; still useful as the canonical reference for cascade - conventions (AAA tests, 1e-4 tolerance, etc.). -- **`docs/sap-spec/SAP_CALCULATOR.md`** — public API + two-cascade - architecture (rating vs demand). -- **`sap worksheets/Summary_000474.pdf`** (untracked) — the source-of- - truth input for fixture 000474. Mirror tracked at - `backend/documents_parser/tests/fixtures/Summary_000474.pdf`. -- **`sap worksheets/U985-0001-000474.pdf`** (untracked) — the - Elmhurst-computed worksheet with line refs the test pins against - (line 257 for unrounded SAP). -- **`packages/domain/src/domain/sap/worksheet/tests/_elmhurst_worksheet_000474.py`** - — the hand-built `EpcPropertyData` for the same fixture. The CALCULATOR- - EQUIVALENT target the mapper must reproduce. - -## File map for the work ahead - -| File | Role | -|---|---| -| `backend/documents_parser/elmhurst_extractor.py` | PDF → `ElmhurstSiteNotes` extractor; layout-style window parser at `_compose_window_descriptors` is where diff #2 lives | -| `datatypes/epc/surveys/elmhurst_site_notes.py` | The schema (recently extended with `ExtensionPart`); `MainHeating` may need a `central_heating_pump_age` field for diff #1 | -| `datatypes/epc/domain/mapper.py:254-326` | `from_elmhurst_site_notes` — the mapper itself | -| `datatypes/epc/domain/mapper.py:1772-1830` | Code-translation helpers (`_leading_code`, `_elmhurst_wall_construction_int`, etc.) | -| `datatypes/epc/domain/mapper.py:2010-2080` | `_map_elmhurst_building_part` + extension iteration | -| `datatypes/epc/domain/mapper.py:2180+` | `_map_elmhurst_sap_heating` — likely where diff #1 (pumps_fans) is fixed | -| `packages/domain/src/domain/sap/rdsap/cert_to_inputs.py` | Cascade — search `pumps_fans_kwh_per_yr` for diff #1's root cause | - -## Conventions you must honour (from project memory) - -- AAA test convention: every new test uses literal `# Arrange / # Act - / # Assert` headers -- `abs(diff) <= tol` not `pytest.approx` (strict pyright) -- One slice = one commit; stage by name (`?? non_invasive_photos/` and - similar untracked junk must not be staged) -- 1e-4 tolerance, no widening, no xfail (`feedback_zero_error_strict`) -- Strict pyright net-zero on every commit +- `docs/sap-spec/HANDOVER_NEXT.md` — original cascade-conventions handover. +- `docs/sap-spec/SAP_CALCULATOR.md` — public API + two-cascade architecture. +- Hand-built worksheet fixtures: `packages/domain/src/domain/sap/worksheet/tests/_elmhurst_worksheet_*.py` — the calculator-equivalent EpcPropertyData each mapped chain must reproduce. +- Untracked source PDFs: `sap worksheets/` (`Summary_NNNNNN.pdf` + `U985-0001-NNNNNN.pdf` worksheets — the unrounded SAP target lives next to "SAP value" in the U985 PDF). ## Branch state at handover ``` -$ git log --oneline -5 -256a5afe Slice 46c: Elmhurst mapper produces calculator-equivalent EpcPropertyData — Summary_000474 SAP within 0.5 of worksheet PDF -066dce19 Slice 46b: Elmhurst extractor parses windows from layout-style Summary PDFs -36f2c7bb Slice 46a: Elmhurst mapper handles multi-bp Summary PDFs — Summary_000474 chain test flips green -ccf7aa21 Scaffold: end-to-end Summary→EpcPropertyData chain test for 000474 (xfail) -8ac548ca Audit: pin u_floor §5.12 formula cascade for cert 0240 cohort geometry +$ git log --oneline -7 + Slice 48: Elmhurst extractor handles 5 new layout quirks; 5 fixture PDFs added +29ab80b0 Slice 47: Summary_000474 chain pins SAP at 1e-4 vs worksheet PDF +b6544e1c Handover: tighten Summary→SAP chain pin to 1e-4 + brief next agent +256a5afe Slice 46c: Elmhurst mapper produces calculator-equivalent EpcPropertyData — Summary_000474 SAP within 0.5 of worksheet PDF +066dce19 Slice 46b: Elmhurst extractor parses windows from layout-style Summary PDFs +36f2c7bb Slice 46a: Elmhurst mapper handles multi-bp Summary PDFs — Summary_000474 chain test flips green +ccf7aa21 Scaffold: end-to-end Summary→EpcPropertyData chain test for 000474 (xfail) ``` -The 0.5 tolerance in commit 46c's message is stale — this handover -tightened it to 1e-4 after the commit. The first thing you commit -should fix one of the two diffs and explicitly mention closing the -last bit of the gap toward 1e-4. - Good luck.