From 17b1d63f0e7cfcf91b51157aaf271fe3b8ec5f88 Mon Sep 17 00:00:00 2001 From: Jun-te Kim Date: Tue, 23 Jun 2026 15:35:06 +0000 Subject: [PATCH] test(accuracy): pin SAP-16.0 storage-flat uprn_10070004512 (built_form fix corpus) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corpus validation of the modelling_e2e built_form fix. Cert 8742-6624-9300-2780-4926 (SAP-Schema-16.0, ground-floor electric-storage-heater flat) omits built_form; the mapper now derives it from dwelling_type. built_form is ML-only so the fix is SAP-neutral: engine 66 = lodged 66 exactly. Built in Elmhurst (evidence: epc.json + summary + worksheet): worksheet 54, engine-on-Elmhurst-inputs 53 ≈ 54 → calculator faithful. The +12 engine-vs-Elmhurst is a build/input gap (cert size-1 small cylinder unrepresentable in Elmhurst's Normal/110L-minimum entry → higher HW + reduced-field 16.0 defaults). Pinned engine 66. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../uprn_10070004512/elmhurst_summary.pdf | Bin 0 -> 65734 bytes .../uprn_10070004512/elmhurst_worksheet.pdf | Bin 0 -> 43759 bytes .../SAP-Schema-16.0/uprn_10070004512/epc.json | 281 +++++++++++++++++ scripts/hyde/build_10070004512.py | 288 ++++++++++++++++++ .../test_real_cert_sap_accuracy.py | 22 ++ 5 files changed, 591 insertions(+) create mode 100644 backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.0/uprn_10070004512/elmhurst_summary.pdf create mode 100644 backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.0/uprn_10070004512/elmhurst_worksheet.pdf create mode 100644 backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.0/uprn_10070004512/epc.json create mode 100644 scripts/hyde/build_10070004512.py diff --git a/backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.0/uprn_10070004512/elmhurst_summary.pdf b/backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.0/uprn_10070004512/elmhurst_summary.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eddc43149bd024642a60e95b9b605b151f2d92d6 GIT binary patch literal 65734 zcmeFa1yo#Jwx}CHf=iG<@C0{<;O;IJtZ;WI+=2&p_uxSaCwTDS7TkinYtUQ#r~kfv zy6@|EyWhBHym3zzW3#r*C429=Y_9rhk}Hae(=#)$Au^LNk=Pno@bWUMy4e{sis*y% zt!zyh74=Px9Z6Uq7nS+>jctq|B8X2%engQ zpyr0M+SH!A*E5z2vA~xClO^R}uhi5{2vhp<{Qu_DxzZ!g`{1^5VXDGv+eC)iMi3sH zB)r9-)aVIjkCALXz~?5g`6P^cRP#zX1Pd6_eDIZtDUi%*P1n8YQ^r?#@rmd+iw=1psmhT@chYj7LDab z+tTi?S6HnR7go{1ej@kT^j`hi$+yfhFOcl8^OtNRFU!55>8X{)-rdd3lYwp)EqBTS zuTu%b`NFna;II$a_Bdj4YDF>o#Jp`VT0s40m-8Fu{9I!_N$(R?De~*Yy}1v~w;!Xr z9~4z79A7$WS76rFF`@O7gCZlg^2$+zVaohFS%~@R%O$nueme0bgxxq!Mp(-;J6?CM zwVz?6AY8O~;o*F1u48x`+smjsB+W;NiW?yBv_IdG5HVC5pCU;ibBWukXrZLs$DlYUa%r}O`Xr)Wg> zDKOJ2XLdJDj942hvBQoITMzJCUc0_*MwC#0>we4A+oMvD8B+YP({OS;-XU#dX-XM( z!K`oRjM{cDOq=Q=viS<8e3JT->o{w}xdo?xGy%!iar0|# zA6+m-woF#I+-HuP!q%Nx+?D(!OG~_-*KRMHKTO*Jjy%&q1*M2yvE7=~g1z@Q9oQQZ zkJ?V1k7XBSWsF~KH8^q#a>Ja+Gcc__q2*=s_X|d$jo{`@Kf(@`fjP&|2N{1;<4c2K za5Pr1$vtmsw6@TWcR828Hv7Fgb<1xpWQ?F-yMjN%AY5GHz;+VI=Ak~`1?-%LjxX=w zJFoguy0n*!2OlK6lf6x&Z8c}EYIL-FX4AVC7Q@bs){i%jHXhFnrrHp;gWXUAuC>(c zJ@zGx6I!-U@^D+z6;`l~-aTCxd(kh|PJ8>4v_aatrE({WTdP?()w`CU$h`QL_Z66C z-g~g(VRVN78xw6=l+?Et$vh`S#5r{45m5ywYaZWQo*64B``;3 z_Qn%b`KobZd{>jLt_3e_g_vpf{E~>KY!=q1pqYGhkl*?e>C={>*w@$sB) zUo@tXl7gp~;ww+%!+}B0PT{;baK^cu-Nxxcd4;hf3_LZpk=6Nl)BNMKUl$wRY1Wyr z>0@%pN%{9!fa3tImGPyY2flQWHufU9_!sgA(1D;}NgQCHtw5Y`W7Ch8VQb;d#`~2wpvrW6@5+<1X@KvX5koge>a{L& zoV{>}VEF{?>V;~_G(c&C&cv9p?p9d_p_%J0;)XBXTW zs^xd+^Z~m#WGD1aDR{>g&cADy?23j`YLx>AX^XZmtN5&eLv{y^H=VihjKWeq>-k;2 zU(O*KH`T8HwV54UzPBMLQ*YJEmwidw_M+*NyGD{Bq$!?>PeA~$p6Il!C{|XzWdR-| zeih4hnAl9f)J#>j-!puyk7rUY5Ool&_W}Wh1g3S-@Q()J8Vi(evLhbyRECvJOgd

)>-&OTEZ=vqo)(t<>+ymW;&iX}FWv~Y@ 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 ViIdB(*#rR#fy9W|*%dVJ{R>~TQceH> literal 0 HcmV?d00001 diff --git a/backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.0/uprn_10070004512/elmhurst_worksheet.pdf b/backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.0/uprn_10070004512/elmhurst_worksheet.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b71391c8b892ca1c4f7486fba5f2fb8f5b39a9df GIT binary patch literal 43759 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 Vg}VK +""" +from __future__ import annotations +import sys +import elmhurst_lib as E + +DIM = "TabContainer_TabPanelMain_WebUserControlDimensionsMain_" +WALL = ("TabContainer_TabPanelMain_InnerTabContainerMain_" + "TabPanelExternalWallMain_WebUserControlWallMain_") +ROOF = "TabContainer_TabPanelMain_WebUserControlRoofMain_" +FLOOR = "TabContainer_TabPanelMain_WebUserControlFloorsMain_" +WP = "TabContainer_TabPanelWindowsPanel_" +DP = "TabContainer_TabPanelDoorsPanel_" +VP = "TabContainer_TabPanelVentilationPanel_" +APT = "TabContainer_TabPanelAirPressureTest_" +LP = "TabContainer_TabPanelLighting_" +MV = "TabContainer_TabPanelMechVent_" +WH = "TabContainer_TabPanelWaterHeating_" + + +def _pick(page, suffix, contains): + val = page.evaluate( + """(a)=>{const s=document.getElementById(a[0]);if(!s)return null; + for(const o of s.options){if(o.text.toLowerCase().includes(a[1].toLowerCase()))return o.value;}return null;}""", + [f"{E.FP}{suffix}", contains]) + if val is not None: + E.set_select(page, suffix, val) + return val + + +def _options(page, suffix): + return page.evaluate( + """(id)=>{const s=document.getElementById(id);if(!s)return []; + return Array.from(s.options).map(o=>o.text);}""", f"{E.FP}{suffix}") + + +def property_description(page): + E.goto(page, "PropertyDescription", "WebFormPropertyDescription.aspx") + E.set_select(page, "DropDownListPropertyType1", "F Flat") + _pick(page, "DropDownListPropertyType2", "mid-terrace") # built_form 4 + E.set_text(page, "TextBoxStoreys", "1") + E.set_text(page, "TextBoxHabitableRooms", "2") + E.set_text(page, "TextBoxHeatedHabitableRooms", "2") + print("date ->", _pick(page, "DropDownListDateBuiltMain", "1900-1929")) # band B + E.set_select(page, "DropDownListDateBuiltFirst", "") + E.set_select(page, "DropDownListRoomInRoofMain", "") + E.save_close(page) + + +def flats(page): + E.goto(page, "Flats", "WebFormFlats.aspx") + E.set_select(page, "DropDownListPositionOfFlat", "Ground Floor") + E.set_text(page, "TextBoxFloor", "0") + E.set_select(page, "RadioButtonListFlatCoridor", "None") + E.save_close(page) + + +def dimensions(page): + E.goto(page, "Dimensions", "WebFormDimensions.aspx") + E.set_text(page, f"{DIM}TextBoxFloorAreaLowestFloor", "33.24") + E.set_text(page, f"{DIM}TextBoxRoomHeightLowestFloor", "2.42") + E.set_text(page, f"{DIM}TextBoxWallPerimeterLowestFloor", "10.39") + # 16.0 lodges no party_wall_length; a flat's side party walls are unmodelled by + # the engine. Try 0 (Elmhurst may require non-zero — adjust if Recommendations + # complains). + E.set_text(page, f"{DIM}TextBoxPartyWallLengthLowestFloor", "0") + E.save_close(page) + + +def walls(page): + E.goto(page, "Walls", "WebFormWalls.aspx") + E.set_select(page, f"{WALL}DropDownListType", "CA Cavity") + page.wait_for_timeout(400) + print("insulation ->", _pick(page, f"{WALL}DropDownListInsulation", "filled")) + E.save_close(page) + + +def roofs(page): + E.goto(page, "Roofs", "WebFormRoofs.aspx") + _pick(page, f"{ROOF}DropDownListType", "another dwelling above") + E.save_close(page) + + +def floors(page): + E.goto(page, "Floors", "WebFormFloors.aspx") + # Floor is "to external air" — that is the LOCATION/exposure, not a TYPE. + _pick(page, f"{FLOOR}DropDownListLocation", "external air") # E To external air + page.wait_for_timeout(400) + _pick(page, f"{FLOOR}DropDownListType", "solid") # construction; U from exposure + ins = page.locator(f"#{E.FP}{FLOOR}DropDownListInsulation") + if ins.count(): + E.set_select(page, f"{FLOOR}DropDownListInsulation", "A As built") + E.save_close(page) + + +def openings(page): + E.goto(page, "Openings", "WebFormOpenings.aspx") + E.click_tab(page, "TabContainer_TabPanelWindowsPanel") + _add_window(page, 4.88, "North", _glazing(page)) + _delete_zero_rows(page) + E.click_tab(page, "TabContainer_TabPanelDoorsPanel") + E.set_text(page, f"{DP}TextBoxDoors", "1") + E.set_text(page, f"{DP}TextBoxDoorsInsulated", "0") + E.set_text(page, f"{DP}TextBoxDraughtProofedDoors", "0") + E.save_close(page) + + +def _glazing(page): + for needle in ("unknown install date", "before 2002", "pre 2002"): + for opt in _options(page, f"{WP}DropDownListExtGlazing"): + low = opt.lower() + if needle in low and "triple" not in low and "single" not in low and "known data" not in low: + return opt + return "Double post or during 2022" + + +def _add_window(page, area, orientation, glazing): + print("glazing ->", glazing) + E.set_select(page, f"{WP}DropDownListExtGlazing", glazing) + page.wait_for_timeout(400) + ft = page.locator(f"#{E.FP}{WP}DropDownListExtFrameType") + if ft.count(): + ft.select_option("PVC") + gg = page.locator(f"#{E.FP}{WP}DropDownListExtGlazingGap") + if gg.count(): + gg.select_option("12 mm") + wid = f"{E.FP}{WP}TextBoxExtWidth" + page.evaluate( + """(a)=>{const e=document.getElementById(a[0]);if(e){e.value=a[1]; + e.dispatchEvent(new Event('input',{bubbles:true})); + e.dispatchEvent(new Event('change',{bubbles:true})); + e.dispatchEvent(new Event('blur',{bubbles:true}));}}""", [wid, str(area)]) + page.locator(f"#{E.FP}{WP}TextBoxExtHeight").fill("1.00") + page.locator(f"#{E.FP}{WP}DropDownListExtOrientation").select_option(orientation) + page.locator(f"#{E.FP}{WP}DropDownListExtBuildingPartId").select_option("Main") + page.locator(f"#{E.FP}{WP}DropDownListExtLocation").select_option("External wall") + page.wait_for_timeout(300) + before = E.window_row_count(page) + page.evaluate("(id)=>{const e=document.getElementById(id); if(e)e.click();}", f"{E.FP}{WP}ButtonAddWindow") + for _ in range(25): + page.wait_for_timeout(200) + if E.window_row_count(page) > before: + break + + +def _grid_rows(page): + return page.evaluate( + """()=>{const t=document.querySelector("[id*=GridViewExtendedWidows]"); + if(!t)return[];return Array.from(t.querySelectorAll('tr')).slice(1) + .map(r=>Array.from(r.querySelectorAll('td')).map(c=>c.innerText.trim()));}""") + + +def _delete_zero_rows(page): + g = 0 + while g < 6 and E.window_row_count(page) > 1: + g += 1 + rows = _grid_rows(page) + bad = next((i for i, c in enumerate(rows) if len(c) > 1 and c[1] in ("0.00", "0", "0.0")), None) + if bad is None: + break + _delete_row(page, bad) + page.wait_for_timeout(400) + + +def _delete_row(page, idx): + before = E.window_row_count(page) + btn = page.evaluate( + """(i)=>{const b=document.querySelectorAll("[id*='GridViewExtendedWidows_DeleteButton_']");return b[i]?b[i].id:null;}""", idx) + if not btn: + return + page.evaluate("(id)=>{const e=document.getElementById(id); if(e)e.click();}", btn) + page.wait_for_selector(f"#{E.FP}DeleteWindowDialog_LinkButtonYes", state="visible", timeout=5000) + page.evaluate("(id)=>{const e=document.getElementById(id); if(e)e.click();}", f"{E.FP}DeleteWindowDialog_LinkButtonYes") + for _ in range(20): + page.wait_for_timeout(200) + if E.window_row_count(page) < before: + break + + +def ventilation(page): + E.goto(page, "VentilationAndCooling", "WebFormVentilationAndCooling.aspx") + E.click_tab(page, "TabContainer_TabPanelVentilationPanel") + E.set_text(page, f"{VP}TextBoxIntermittentFans", "0") + cool = page.locator(f"#{E.FP}{VP}CheckBoxFixedSpaceCooling") + if cool.count() and cool.is_checked(): + E.commit(page, cool.uncheck) + E.click_tab(page, "TabContainer_TabPanelMechVent") + mv = page.locator(f"#{E.FP}{MV}CheckBoxMechanicalVentilation") + if mv.count() and mv.is_checked(): + E.commit(page, mv.uncheck) + E.click_tab(page, "TabContainer_TabPanelAirPressureTest") + E.set_select(page, f"{APT}DropDownListTestMethod", "Not available") + E.click_tab(page, "TabContainer_TabPanelLighting") + E.set_text(page, f"{LP}TextBoxLightsTotal", "5") + E.set_text(page, f"{LP}TextBoxLedLightsTotal", "5") # 100% low energy + E.set_text(page, f"{LP}TextBoxCflLightsTotal", "0") + E.save_close(page) + + +def space_heating(page): + # Electric storage heaters (SAP 402 = SEB), manual charge control (SAP 2401 = + # CSA). Two passes: clear bound PCDB boiler first, then set the SAP-table code. + E.goto(page, "SpaceHeating", "WebFormSpaceHeating.aspx") + page.wait_for_timeout(1000) + rid = f"{E.MH1}TextBoxPCDFBoilerReference" + ref = page.locator(f"#{rid}").input_value() + if ref not in ("0", ""): + print(f"clearing bound PCDB boiler {ref} -> 0 (rerun space_heating)") + page.evaluate("""(rid)=>{const r=document.getElementById(rid);r.value='0'; + r.dispatchEvent(new Event('change',{bubbles:true}));}""", rid) + page.wait_for_timeout(500) + E.save_close(page) + return + E.set_heating_dialog(page, "TabContainer_TabPanelMainHeating1_WebUserControlMainHeating1_ButtonMainHeatingCode", + "^Electric", "^Electric", "Storage", "SEB Modern slimline") + print("code:", page.locator(f"#{E.MH1}TextBoxMainHeatingCode").input_value()) + E.set_heating_dialog(page, "TabContainer_TabPanelMainHeating1_WebUserControlMainHeating1_ButtonMainHeatingControls", + "Storage Radiator", "CSA Manual charge control") + print("control:", page.locator(f"#{E.MH1}TextBoxMainHeatingControls").input_value()) + E.set_select(page, "DropDownListSecondaryHeatingPresent", "No") + # Economy-7 Dual meter (cert meter_type 1) — hidden Meters sub-tab. + E.click_tab(page, "TabContainer_TabPanelMeters") + E.set_select(page, "TabContainer_TabPanelMeters_RadioButtonListElectricityType", "Dual") + print("meter:", page.locator("#ContentBody_ContentPlaceHolder1_TabContainer_TabPanelMeters_RadioButtonListElectricityType").input_value()) + E.save_close(page) + + +def water_heating(page): + # Electric immersion off-peak (Dual) WITH cylinder (size 1 = small). The + # immersion code REQUIRES a cylinder. + E.goto(page, "WaterHeating", "WebFormWaterHeating.aspx") + E.click_tab(page, "TabContainer_TabPanelWaterHeating") + page.wait_for_timeout(600) + E.set_heating_dialog(page, f"{WH}ButtonWaterHeatingCode", + "Water Heater", "^Electric", "Immersion") + print("water code:", page.locator(f"#{E.FP}{WH}TextBoxWaterHeatingCode").input_value()) + cid = f"{E.FP}{WH}CheckBoxHotWaterCylinder" + cyl = page.locator(f"#{cid}") + if cyl.count() and not cyl.is_checked(): + try: + with page.expect_navigation(wait_until="load", timeout=8000): + page.evaluate( + """(id)=>{const c=document.getElementById(id);if(c){c.checked=true; + c.dispatchEvent(new Event('click',{bubbles:true})); + c.dispatchEvent(new Event('change',{bubbles:true}));}}""", cid) + except Exception: + page.wait_for_timeout(2000) + print("cylinder present:", cyl.is_checked() if cyl.count() else "n/a") + print("cyl sizes:", _options(page, f"{WH}DropDownListCylinderSize")) + _pick(page, f"{WH}DropDownListCylinderSize", "small") or \ + E.set_select(page, f"{WH}DropDownListCylinderSize", "Normal") + E.set_select(page, f"{WH}DropDownListInsulated", "Foam") + isuf = f"{WH}DropDownListInsulationThickness" + if page.locator(f"#{E.FP}{isuf}").count(): + _pick(page, isuf, "Unknown") or E.set_select(page, isuf, "25 mm") + imm = page.locator(f"#{E.FP}{WH}RadioButtonListImmersionHeater") + if imm.count(): + E.set_select(page, f"{WH}RadioButtonListImmersionHeater", "Dual") + E.save_close(page) + + +_ORDER = ["property_description", "flats", "dimensions", "walls", "roofs", + "floors", "openings", "ventilation", "space_heating", "water_heating"] + + +def main(): + if len(sys.argv) < 2 or sys.argv[1] not in _ORDER: + print("usage: build_10070004512.py <" + "|".join(_ORDER) + ">") + return 2 + with E.session() as (ctx, page): + globals()[sys.argv[1]](page) + print("done:", sys.argv[1], "->", page.url) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/domain/sap10_calculator/test_real_cert_sap_accuracy.py b/tests/domain/sap10_calculator/test_real_cert_sap_accuracy.py index 56989c71..df9a58e1 100644 --- a/tests/domain/sap10_calculator/test_real_cert_sap_accuracy.py +++ b/tests/domain/sap10_calculator/test_real_cert_sap_accuracy.py @@ -603,6 +603,28 @@ _EXPECTATIONS: Final[tuple[RealCertExpectation, ...]] = ( "engine prices 100% at the low rate; see elmhurst_worksheet.pdf (243-246)" ), ), + # UPRN 10070004512 → cert 8742-6624-9300-2780-4926. SAP-Schema-16.0, GROUND- + # FLOOR FLAT, band B, cavity FILLED, ELECTRIC STORAGE HEATERS (SAP 402 SEB, + # manual charge CSA/2401) + electric immersion off-peak (Economy-7 Dual meter) + # with a small cylinder (size 1), roof = another dwelling above, floor to + # EXTERNAL AIR, double glazed, TFA 33.24. Engine 66 = lodged 66 EXACTLY. + # This is the modelling_e2e built_form fix cert: 16.0 omits `built_form`, which + # RdSapSchema17_1 requires; the mapper derives it from dwelling_type (flat → + # modal 4). built_form is ML-only (the SAP calculator never reads it) so the fix + # is SAP-NEUTRAL — the engine reproduces the lodged score regardless. Built in + # Elmhurst RdSAP10 (evidence saved: elmhurst_summary.pdf / elmhurst_worksheet.pdf): + # worksheet SAP 54, engine on Elmhurst's own parsed inputs 53 ≈ 54 → calculator + # faithful. The engine 66 vs Elmhurst 54 (+12) is an input/build gap dominated by + # HOT WATER (engine 1272 vs Elmhurst 1948 kWh): the cert lodges a size-1 (small) + # cylinder but Elmhurst's RdSAP entry has no "Small" option (Normal/110 L is the + # smallest), forcing a larger cylinder + more storage loss; plus the reduced-field + # 16.0 floor/party-wall defaults. PINNED to the observed engine 66 (= lodged 66). + RealCertExpectation( + schema="SAP-Schema-16.0", + sample="uprn_10070004512", + cert_num="8742-6624-9300-2780-4926", + sap_score=66, + ), )