From 2b1f90a7defd55d641ef46b145b9cb51020b1349 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Wed, 3 Jun 2026 12:46:18 +0000 Subject: [PATCH] =?UTF-8?q?S0380.199:=20site-notes=20"Roof=20of=20Room"=20?= =?UTF-8?q?windows=20=E2=86=92=20roof=20windows=20(cross-mapper=20parity?= =?UTF-8?q?=20with=20S0380.198)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Elmhurst extractor crashed parsing simulated-case-6's room-in-roof window rows: the §11 "Location" cell "Roof of Room in Roof" wraps across the layout prefix/suffix blocks and leaked into the glazing-type phrase ("Double between 2002 Roof of Room and 2021 in Roof" → UnmappedElmhurst- Label). Fix (`_parse_window_from_anchors`): detect the roof-of-room location tokens, strip them from the before/after blocks so the glazing phrase reconstructs cleanly, and set location="Roof of Room". Mapper: `_is_elmhurst_roof_window` gains a "Roof of Room" location branch (highest-confidence rooflight signal, above the BP-roof-type / U>3.0 gates); `_ELMHURST_ROOF_WINDOW_U_BY_GLAZING` gains "Double between 2002 and 2021" → 2.30 (case 6 lodges the already-inclined roof-window U, so the +0.30 inclination adjustment must not double-apply). This is the site-notes mirror of S0380.198 (API window_wall_type=4): both paths now route room-in-roof rooflights to (27a) at the inclined U. Validated against the case-6 P960 worksheet at abs=1e-4: (27) Windows = 22.7408 (cascade 22.7407) (27a) Roof Windows = 13.0375 (cascade 13.0375, EXACT) (31) ext area = 336.13 Case 6 is pinned only on the §3 window line refs (new standalone test, not added to the section-pin `_FIXTURES`) because its DUAL main heating (51% rads + 49% underfloor, oil) makes the §10/§12 per-system lines non-comparable to SapResult's aggregated fields — documented in the fixture module. Summary mirrored to Summary_001431_case6.pdf. Suite: 2355 passed, 1 skipped. New code: 0 pyright errors. Co-Authored-By: Claude Opus 4.8 --- .../documents_parser/elmhurst_extractor.py | 18 +++ .../tests/fixtures/Summary_001431_case6.pdf | Bin 0 -> 94352 bytes datatypes/epc/domain/mapper.py | 11 ++ ...60-0001-001431 - 2026-06-03T130227.971.pdf | Bin 0 -> 49351 bytes .../simulated case 6/Summary_001431 (1).pdf | Bin 0 -> 94352 bytes .../_elmhurst_worksheet_001431_case6.py | 108 ++++++++++++++++++ .../worksheet/test_section_cascade_pins.py | 30 +++++ 7 files changed, 167 insertions(+) create mode 100644 backend/documents_parser/tests/fixtures/Summary_001431_case6.pdf create mode 100644 sap worksheets/golden fixture debugging/simulated case 6/P960-0001-001431 - 2026-06-03T130227.971.pdf create mode 100644 sap worksheets/golden fixture debugging/simulated case 6/Summary_001431 (1).pdf create mode 100644 tests/domain/sap10_calculator/worksheet/_elmhurst_worksheet_001431_case6.py diff --git a/backend/documents_parser/elmhurst_extractor.py b/backend/documents_parser/elmhurst_extractor.py index 00aaf045..a8b1893f 100644 --- a/backend/documents_parser/elmhurst_extractor.py +++ b/backend/documents_parser/elmhurst_extractor.py @@ -801,6 +801,12 @@ class ElmhurstSiteNotesExtractor: "North", "South", "East", "West", "NE", "NW", "SE", "SW", }) _BP_INLINE_TOKENS = frozenset({"Main"}) # "Extension" only appears as suffix + # A room-in-roof window (rooflight) lodges its §11 "Location" cell as + # "Roof of Room in Roof", which the layout preprocessor wraps onto two + # tokens ("Roof of Room" in the prefix block, "in Roof" in the suffix). + # Detected so the window routes to a roof window (worksheet (27a)) + # and the tokens don't leak into the glazing-type phrase. + _ROOF_OF_ROOM_LOCATION_TOKENS = frozenset({"Roof of Room", "in Roof"}) # The Elmhurst Summary PDF lodges each window's glazing-type as a # capitalised phrase like "Double between 2002" / "Double with unknown" # / "Single" / "Triple" / "Secondary". The first token of that phrase @@ -1020,6 +1026,18 @@ class ElmhurstSiteNotesExtractor: before = [lines[j].strip() for j in range(before_start, data_idx) if lines[j].strip()] after = [lines[j].strip() for j in range(manuf_idx + 4, after_end) if lines[j].strip()] + # Room-in-roof windows lodge their location as "Roof of Room in + # Roof" (wrapped across the prefix/suffix blocks). Detect it, pull + # those tokens out so they don't contaminate the glazing-type + # phrase, and override the wall-keyed `location` with the roof-of- + # room marker the roof-window classifier keys on. + if any( + t in self._ROOF_OF_ROOM_LOCATION_TOKENS for t in (*before, *after) + ): + location = "Roof of Room" + before = [t for t in before if t not in self._ROOF_OF_ROOM_LOCATION_TOKENS] + after = [t for t in after if t not in self._ROOF_OF_ROOM_LOCATION_TOKENS] + glazing_type, building_part, orientation = self._compose_window_descriptors( before=before, after=after, diff --git a/backend/documents_parser/tests/fixtures/Summary_001431_case6.pdf b/backend/documents_parser/tests/fixtures/Summary_001431_case6.pdf new file mode 100644 index 0000000000000000000000000000000000000000..258f56acc0612cd811962174b17de65d3eb3d030 GIT binary patch literal 94352 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 Jv{EY4{{_uXVqO3M literal 0 HcmV?d00001 diff --git a/datatypes/epc/domain/mapper.py b/datatypes/epc/domain/mapper.py index d779adb5..92373fbe 100644 --- a/datatypes/epc/domain/mapper.py +++ b/datatypes/epc/domain/mapper.py @@ -3837,6 +3837,11 @@ def _is_elmhurst_roof_window( """ if w.glazing_type.startswith("Single"): return False + # Explicit "Roof of Room" location lodging (simulated case 6): the + # surveyor placed the window on the room-in-roof, so it's a rooflight + # regardless of BP roof type or U-value. + if "roof of room" in (w.location or "").lower(): + return True bp_roof_type = _elmhurst_bp_roof_type(w, survey) if bp_roof_type is not None and bp_roof_type.startswith( _ELMHURST_BP_ROOF_TYPES_WITH_ROOFLIGHTS @@ -3852,6 +3857,12 @@ def _is_elmhurst_roof_window( # worksheet's (27a) line. The cohort exercises only "Double pre 2002". _ELMHURST_ROOF_WINDOW_U_BY_GLAZING: Dict[str, float] = { "Double pre 2002": 3.4, + # Simulated case 6 rooflights: the Summary lodges the already-inclined + # roof-window U=2.30 for DG-2002-2021 glazing (vs 2.00 vertical for the + # same glazing on a wall) — the worksheet bills it on (27a) at U_eff + # 2.1062 (= 2.30 with the §3.2 R=0.04 curtain transform). Keyed here so + # the inclination adjustment isn't double-applied. + "Double between 2002 and 2021": 2.30, } diff --git a/sap worksheets/golden fixture debugging/simulated case 6/P960-0001-001431 - 2026-06-03T130227.971.pdf b/sap worksheets/golden fixture debugging/simulated case 6/P960-0001-001431 - 2026-06-03T130227.971.pdf new file mode 100644 index 0000000000000000000000000000000000000000..13e0183aab5c88064b6b35fdd63ac22b61858acc GIT binary patch literal 49351 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 a0ORCr;OP9X)yc-i!NCqgPA;w}@&5sJ&Sxh8 literal 0 HcmV?d00001 diff --git a/sap worksheets/golden fixture debugging/simulated case 6/Summary_001431 (1).pdf b/sap worksheets/golden fixture debugging/simulated case 6/Summary_001431 (1).pdf new file mode 100644 index 0000000000000000000000000000000000000000..258f56acc0612cd811962174b17de65d3eb3d030 GIT binary patch literal 94352 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 Jv{EY4{{_uXVqO3M literal 0 HcmV?d00001 diff --git a/tests/domain/sap10_calculator/worksheet/_elmhurst_worksheet_001431_case6.py b/tests/domain/sap10_calculator/worksheet/_elmhurst_worksheet_001431_case6.py new file mode 100644 index 00000000..94b6d7e8 --- /dev/null +++ b/tests/domain/sap10_calculator/worksheet/_elmhurst_worksheet_001431_case6.py @@ -0,0 +1,108 @@ +"""Mapper-driven cascade fixture for the Elmhurst P960-0001-001431 +"simulated case 6" worksheet — a DETACHED, dual-oil cousin of golden +cert 0240 carrying ROOM-IN-ROOF WINDOWS (rooflights). + +Routes the Summary PDF through ElmhurstSiteNotesExtractor + +from_elmhurst_site_notes (no hand-built EpcPropertyData) so the pin +exercises the whole extractor + mapper + calculator pipeline. + +Purpose: validate S0380.198/199 ROOF-WINDOW handling against a real +worksheet. Case 6 lodges 6 windows on the room-in-roof ("Roof of Room" +location); the worksheet bills them on line (27a) Roof Windows at +U_eff 2.1062 (= inclined 2.30 with the §3.2 R=0.04 curtain transform), +NOT on (27) as vertical glazing. This is the site-notes mirror of +0240's API `window_wall_type=4` roof windows (S0380.198). + +This cert surfaced two site-notes gaps fixed in S0380.199: +- the extractor mangled the "Roof of Room in Roof" window-location cell + into the glazing-type phrase ("Double between 2002 Roof of Room and + 2021 in Roof" → UnmappedElmhurstLabel); `_parse_window_from_anchors` + now detects + strips those tokens and marks the window roof-of-room; +- `_is_elmhurst_roof_window` gained a "Roof of Room" location branch, + and `_ELMHURST_ROOF_WINDOW_U_BY_GLAZING` an entry for the + already-inclined "Double between 2002 and 2021" → 2.30 (so the + inclination adjustment isn't double-applied). + +SCOPE: this fixture pins only the §3 heat-transmission WINDOW line refs +(27)/(27a)/(31) — NOT the full SapResult. Case 6 has a DUAL main heating +system (51% radiators + 49% underfloor, oil), and `SapResult`'s +`main_heating_fuel_kwh_per_yr` / `pumps_fans_kwh_per_yr` aggregate the +two systems differently from the worksheet's per-system (211)/(231) +lines, so a full SapResult pin isn't apples-to-apples. Heating is also +SAP code 127 here vs 0240's code 130 condensing combi — so case 6 pins +to its OWN worksheet, not 0240's register. + +Source: user-simulated PDFs at `sap worksheets/golden fixture +debugging/simulated case 6/`. Summary mirrored into the tracked +`backend/documents_parser/tests/fixtures/Summary_001431_case6.pdf`. + +Worksheet §3 window pin targets (P960-0001-001431, Block 1): +- (27) Windows = 19.3704 (Main) + 3.3704 (Ext1) = 22.7408 W/K +- (27a) Roof Windows = 6.19 m² × 2.1062 = 13.0375 W/K (the 6 rooflights) +- (31) Total external element area = 336.13 m² + +Per [[feedback-zero-error-strict]]: pins are abs=1e-4 against the PDF. +""" + +from __future__ import annotations + +import re +import subprocess +from pathlib import Path +from typing import Final + +from backend.documents_parser.elmhurst_extractor import ElmhurstSiteNotesExtractor +from datatypes.epc.domain.epc_property_data import EpcPropertyData +from datatypes.epc.domain.mapper import EpcPropertyDataMapper + + +# parents[0]=worksheet/, [1]=sap10_calculator/, [2]=domain/, [3]=tests/, +# [4]=repo root. +_SUMMARY_PDF: Final[Path] = ( + Path(__file__).resolve().parents[4] + / "backend" / "documents_parser" / "tests" / "fixtures" + / "Summary_001431_case6.pdf" +) + +# Worksheet §3 window line refs (Block 1 — energy rating). +LINE_27_WINDOWS_W_PER_K: Final[float] = 22.7408 +LINE_27A_ROOF_WINDOWS_W_PER_K: Final[float] = 13.0375 +LINE_31_TOTAL_EXTERNAL_AREA_M2: Final[float] = 336.13 + + +def _summary_pdf_to_textract_style_pages(pdf_path: Path) -> list[str]: + """Convert a Summary PDF into the per-page text format the + ElmhurstSiteNotesExtractor expects (mirror of the case-5 helper).""" + info = subprocess.run( + ["pdfinfo", str(pdf_path)], capture_output=True, text=True, check=True, + ).stdout + m = re.search(r"Pages:\s+(\d+)", info) + if m is None: + raise RuntimeError(f"Could not parse page count from {pdf_path}") + page_count = int(m.group(1)) + + pages: list[str] = [] + for i in range(1, page_count + 1): + layout = subprocess.run( + [ + "pdftotext", "-layout", "-f", str(i), "-l", str(i), + str(pdf_path), "-", + ], + capture_output=True, text=True, check=True, + ).stdout + tokens: list[str] = [] + for line in layout.splitlines(): + if not line.strip(): + tokens.append("") + continue + parts = [p for p in re.split(r"\s{2,}", line.strip()) if p] + tokens.extend(parts) + pages.append("\n".join(tokens)) + return pages + + +def build_epc() -> EpcPropertyData: + """Route the simulated case-6 Summary through extractor + mapper.""" + pages = _summary_pdf_to_textract_style_pages(_SUMMARY_PDF) + site_notes = ElmhurstSiteNotesExtractor(pages).extract() + return EpcPropertyDataMapper.from_elmhurst_site_notes(site_notes) diff --git a/tests/domain/sap10_calculator/worksheet/test_section_cascade_pins.py b/tests/domain/sap10_calculator/worksheet/test_section_cascade_pins.py index b3480d2a..396247f6 100644 --- a/tests/domain/sap10_calculator/worksheet/test_section_cascade_pins.py +++ b/tests/domain/sap10_calculator/worksheet/test_section_cascade_pins.py @@ -42,6 +42,7 @@ from tests.domain.sap10_calculator.worksheet import ( _elmhurst_worksheet_000487 as _w000487, _elmhurst_worksheet_000490 as _w000490, _elmhurst_worksheet_000516 as _w000516, + _elmhurst_worksheet_001431_case6 as _w001431_case6, ) @@ -248,6 +249,35 @@ def test_section_3_line_refs_match_pdf( _pin(actual, expected, f"§3 {fixture_attr} {fixture_name}") +def test_section_3_roof_windows_case6_match_pdf() -> None: + """§3 (27a) roof-window pin for simulated case 6 — the 6 room-in-roof + rooflights (window_wall_type=4 on the API side / "Roof of Room" + location on the site-notes side) must bill on (27a) at U_eff 2.1062, + not on (27) as vertical glazing. Validates the S0380.198/199 roof- + window routing against a real worksheet. Case 6 is pinned only on the + §3 window line refs (not added to `_FIXTURES`) because its dual main + heating system makes the §10/§12 per-system lines non-comparable — + see the fixture module docstring.""" + # Arrange + epc = _w001431_case6.build_epc() + + # Act + ht = heat_transmission_section_from_cert(epc) + + # Assert + _pin(ht.windows_w_per_k, _w001431_case6.LINE_27_WINDOWS_W_PER_K, "§3 (27) case6") + _pin( + ht.roof_windows_w_per_k, + _w001431_case6.LINE_27A_ROOF_WINDOWS_W_PER_K, + "§3 (27a) case6", + ) + _pin( + ht.total_external_element_area_m2, + _w001431_case6.LINE_31_TOTAL_EXTERNAL_AREA_M2, + "§3 (31) case6", + ) + + # ============================================================================ # §4 Water heating — LINE_42..LINE_65 scalar + monthly tuples # ============================================================================