"""Window-extraction completeness pin for cert 001431. The Modelling glazing overlay's draught-proofing recompute (RdSAP 10 §8.1 — a count over openable windows + doors) needs every openable §11 window captured with its `draught_proofed` flag. The Elmhurst Summary §11 block lodges 17 openable windows; two extraction gaps previously surfaced only 14: 1. The extractor rejected the one "Double glazing, known data" row whose data-source cell is "BFRC data" (laid out as its own line, with no frame factor) — it does not fit the ` ` Manufacturer-line shape. 2. The mapper's `_is_elmhurst_roof_window` reclassified the two "Double pre 2002" rows (U 3.1 / 3.4 > 3.0) as roof windows, even though both are lodged on an "External wall" — a false positive of the U-value backstop. With both closed, all 17 windows are `sap_windows` (none mis-routed to `sap_roof_windows`), and 14 carry `draught_proofed=True` — reconstructing Elmhurst's lodged 84% draught-proofing (16/19 = (14 windows + 2 doors) / (17 windows + 2 doors)). """ from __future__ import annotations from datatypes.epc.domain.epc_property_data import EpcPropertyData from tests.domain.modelling._elmhurst_recommendation import ( parse_recommendation_summary, ) def test_all_17_openable_windows_captured_on_001431() -> None: # Arrange / Act epc: EpcPropertyData = parse_recommendation_summary( "double_glazing_001431_before.pdf" ) # Assert — every openable §11 window is captured as a vertical window; # none of the wall-lodged rows leak into the roof-window list. assert len(epc.sap_windows) == 17 assert not epc.sap_roof_windows # None or empty — no wall window misrouted def test_draughtproofing_count_reconstructs_lodged_84_percent() -> None: # Arrange / Act epc: EpcPropertyData = parse_recommendation_summary( "double_glazing_001431_before.pdf" ) # Assert — 14 of the 17 openable windows are draught-proofed, the numerator # behind Elmhurst's lodged 84% (with the 2 lodged draught-proofed doors). draughtproofed: int = sum( 1 for window in epc.sap_windows if window.draught_proofed ) assert draughtproofed == 14