From 210ca6397fe2610c933f4412de4d1c3c78345841 Mon Sep 17 00:00:00 2001 From: Jun-te Kim Date: Tue, 23 Jun 2026 10:22:40 +0000 Subject: [PATCH] updated sap scaema to take in inputs --- .../expand-sap-accuracy-corpus/SKILL.md | 8 ++++++ .../expand-sap-accuracy-corpus/worklist.md | 2 +- .../uprn_10010215568/elmhurst_summary.pdf | Bin 0 -> 64356 bytes .../uprn_10010215568/elmhurst_worksheet.pdf | Bin 0 -> 44836 bytes datatypes/epc/domain/mapper.py | 10 ++++++++ .../epc/domain/tests/test_from_sap_schema.py | 19 ++++++++++++++ scripts/hyde/elmhurst_download.py | 2 +- .../test_real_cert_sap_accuracy.py | 24 ++++++++++++++++++ 8 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 backend/epc_api/json_samples/real_life_examples/RdSAP-Schema-17.1/uprn_10010215568/elmhurst_summary.pdf create mode 100644 backend/epc_api/json_samples/real_life_examples/RdSAP-Schema-17.1/uprn_10010215568/elmhurst_worksheet.pdf diff --git a/.claude/skills/expand-sap-accuracy-corpus/SKILL.md b/.claude/skills/expand-sap-accuracy-corpus/SKILL.md index 1d12ed5b..954264e7 100644 --- a/.claude/skills/expand-sap-accuracy-corpus/SKILL.md +++ b/.claude/skills/expand-sap-accuracy-corpus/SKILL.md @@ -151,6 +151,14 @@ Pattern: `with E.session() as (ctx,page): E.goto(...); E.set_text/set_select(... 2022" ≈ U1.4/g0.72) — the "...known data" option demands per-row Frame-Factor/ Data-Source/Location/Building-Part and fails validation. Trust the grid only after Save & Close + reload (the live grid mis-shows older rows as 0.00). +- **Window-width `.fill()` can DOUBLE the value** → "Openings: Width has to be less + or equal to 50" validation error. `_add_window`'s `page.locator(TextBoxExtWidth) + .fill(str(area))` went through Elmhurst's keystroke/numeric formatter and rendered + `11.1` as `111.10` (uprn_10010215568) — the Recommendations gate then blocks the + download. After building Openings, VERIFY the grid width (reload + read the row); + if wrong, JS-set it: `el.value='11.1'; dispatch input+change+blur`, then Save&Close + (the entry boxes mirror the single row = edit-in-place). JS-set bypasses the + formatter and sticks. Belt-and-braces: set the width by JS in `_add_window` too. - **U-value-known overrides** (walls/roof/floor) don't toggle via automation → accept the natural RdSAP age-band U-value; note the divergence for reconciliation. - **Recommendations page = validation gate.** It must show ZERO errors before the diff --git a/.claude/skills/expand-sap-accuracy-corpus/worklist.md b/.claude/skills/expand-sap-accuracy-corpus/worklist.md index 2fad4b92..3825927b 100644 --- a/.claude/skills/expand-sap-accuracy-corpus/worklist.md +++ b/.claude/skills/expand-sap-accuracy-corpus/worklist.md @@ -78,7 +78,7 @@ Skip the 🚩 MVHR / 🚩 heat-pump-fuel and ⛔ sparse certs. - [⚠] 10093388044 — SAP-17.1 · eng 87 / lodged 93 · 🚩 heat-pump fuel-39 (flagged) - [x] 10090944225 — SAP-17.0 (full-SAP GROUND-FLOOR FLAT, band L 2015, combi PCDB 17045 Ideal Logic Combi ES35, control 2110 CBI time+temp zone, NATURAL vent + 2 extract fans, AP50 3.48, party wall 3.41m² U0, measured U walls 0.27/floor 0.14/window 1.41, TFA 49.97, no cylinder/no secondary) · eng 81 / elm 80 (lodged 82) · PINNED engine 81. Built in Elmhurst (boiler 17045 via search, control CBI/2110 under Boilers→Zone control, water from primary, AP50 Blower Door 3.48+cert, Single meter). engine-on-Elmhurst-inputs 80 = worksheet 80 (exact) → faithful; eng 81 ≈ lodged 82 (−1). Remaining +1 = documented full-SAP→RdSAP residual localised to the FLOOR (cert measured U 0.14 vs Elmhurst RdSAP solid default 0.23; walls/party match) — engine correctly uses measured 0.14, NOT a mapper bug. ⚠ Initial worksheet read 79 due to a spurious leftover REA/691 electric secondary (Table-11 frac 0.1, ~1.5 SAP) the shared assessment retained — REMOVED via present=Yes→clear secondary code to empty→present=No (79→80). 🔧 Build notes: storage→combi reset (clear leftover SEB MainHeatingCode pass-1, reset meter Single); control 2110 is Boilers→**Zone control**→CBI (not Standard). No mapper change. - [⚠] 10090341811 — SAP-17.0 · eng 80 / lodged 89 · 🚩 MVHR idx 500352 not credited (flagged) -- [ ] 10010215568 — RdSAP-17.1 · eng 75 / lodged 74 +- [x] 10010215568 — RdSAP-17.1 (NATIVE; END-TERRACE BUNGALOW single-storey, band J 2003-2006, cavity as-built insulated, pitched 200mm loft, solid insulated floor, mains-gas REGULAR boiler PCDB 15100 Vaillant Ecotec plus 415 + cylinder size2/Normal-110L/foam 25mm/thermostat, control 2106 CBE, water from primary, party wall 9.8m, double glazed, natural vent, 86% LED, TFA 75.46) · eng 75 / elm 73 (lodged 74) · PINNED engine 75. Built in Elmhurst (House+1 storey bungalow, boiler 15100 via search, CBE/2106 control, cylinder Normal/foam/25mm/thermostat, water from primary, window 11.1m² double-unknown-date). engine-on-Elmhurst-inputs 74 ≈ worksheet 73 → calculator faithful; eng 75 ≈ lodged 74 (+1). +2 vs Elmhurst = documented engine-uses-lodged vs Elmhurst-RdSAP-default (wall thickness 250 default vs lodged 310, baths 2 vs lodged 1). Cylinder thickness 25mm correctly carried by RdSAP-17.1 mapper (no cylinder-gap). ⚠ window width fill bug: `.fill("11.1")` rendered 111.10 (keystroke formatter doubled it) → validation "Width ≤ 50"; fixed by JS-setting width. No mapper change. build_10010215568.py. - [⚠] 10093117227 — SAP-17.1 · eng 90 / lodged 80 · 🚩 heat-pump fuel-39 (flagged) - [⚠] 10023444170 — SAP-17.0 · eng 80 / lodged 83 · 🚩 MVHR idx 500167 not credited (flagged) - [ ] 100020980961 — SAP-16.3 · eng 66 / lodged 65 diff --git a/backend/epc_api/json_samples/real_life_examples/RdSAP-Schema-17.1/uprn_10010215568/elmhurst_summary.pdf b/backend/epc_api/json_samples/real_life_examples/RdSAP-Schema-17.1/uprn_10010215568/elmhurst_summary.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0f61a1498cefabc2d811ea1ce6933798cd0b661e GIT binary patch literal 64356 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 aCPwhW#n{>9uU7(xAOv{{n3<&?%lr>c51l>$ literal 0 HcmV?d00001 diff --git a/backend/epc_api/json_samples/real_life_examples/RdSAP-Schema-17.1/uprn_10010215568/elmhurst_worksheet.pdf b/backend/epc_api/json_samples/real_life_examples/RdSAP-Schema-17.1/uprn_10010215568/elmhurst_worksheet.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d3c0c8f80194811aa0faf0e46a892a73aa394def GIT binary patch literal 44836 zcmeFYbFeK>wd;btYi? zV^refGqp4M1A+Qm`Zwr55PD&IS34I1Mkab`OA}{p*1vxsVE<>&`Olv5uLC6lM&^GV z{smzC7lQF$5T<`YnEnM}`WJ-hABgUMI{$0@H|JvZb}k~O&c;rb4ledi^nZ(ThPHp| zZ|~}4Y3d|r`jcMF#?aiEfSKtZqmYojn>H;Y6B7X~8wV2s+aG6~tc?Ht@+|-J<>{4O zja>e=iHeh}=|7G0j|VYEdLct+)4v}7-J7VLvAv0oVD2)7zqCV-~Tsl!0_j`|L<-8!=2Ophi(6znFRlk`afCx zm)rlw;=dvEC)Auw|Af##u|_XzYGP^lm#cqk#mdP_$HdOcM!>D?x|Ag(|&wqsOU-ZBHidovYnEnYE8$%aU z5z{}MHKms^wKI3IAYf)-W8~v=c5yN_w1v_Lp48H`-{(N`xz_JZ2K4}dPj4=8A3v0v zJ_xuZ!N}3aNRMKrl@5t2VD9!Qr_ki9A3xQF39%fo6aOmHpi%QyJvco8CXPq)*_D6& zupIeSlqPe8PeNR~qayN)Bz|=``#a=z{vaA2Js!UJTa&WN0td1h<#hPvAj&~3l|cVa zRXN^STl?;D-*i^x>RkQ{k&vJ9UXsDE@1Q1yD*xLs-aLQ_*RwE0HYqkXeH-Oq#2}J- zG*BR4L^;1zXolXs(P^HG)`_XUaUB@7jX4+WL;s_j0n$+@SV^yMgjYT1i8-7D2mRIA z>|T?gET=Y-hpOtkJ;$W3Mp``?Ctl;YK4nxqj`KvMzLxp zkjtwW9(q#-e3Z9DRk)Yhf&biWqA7J}$(beNx_-DF4^~_TT))8Yf)H$YkFT>jn#t@@ z+tjv>rpKsVyYM=_Aj7jTsH78IX4x&Z(6zTr4!_6DPaa28%VIhOfPBU`>?%jygsVy} zKRfZ9YHCr_yq~Ci?mrGtI_$u&ml=34XGx;8KhfyQbx+MqGNv}Vvi#p91-IrY{_^c*EltHrjv4-|QdxlZrhS8U>Ozi6y(w{7q zoFU>P1_XT55Bg2?0?(fM5+XINb@v@G$Rg8rW{mbFN~gzKx8uV*=o}cZF|~FP)3aIk z@obVnE{@^k@Duc9r3xI@^jITFw#x9F4E|K00$&h^2n3hfZfUzxdvVt6DOh{%UR{LJ zqhq=z1$I(9P}ODI`T^WM-%G63jUONi?U3YIeairJL~)7awh$lej0Zvi`n&rinOGG_nj`tg?@)6(~}3a2?V*oebGd~-mG8@ zN(Y%iLc@zqOEF$VFHqXtdgP2j9UuQ$28rqWJ6gCTB|K=*I^XXVd&JZkzrL9_uO196 zdW*a*bRFQ^`I_hpks%yv!Ec@;NiWb@U3T0>72n(_D=9jnD5LH1g5Uf}9%A(q`);)g z%%Ia80E5Us&3(ENL0&ptJtk6$z457 zXW@2KZy#Jr4rCF*FsP|=5>|@%i%q#a`3U9=9TY|On+gW6-3kI*`&z)yn`i?CG~`gv z@29Vaf5NG3Cxjj%+qzsoT#HW4a;i1Y6M+xu7y6SHEHN%hZj-hKSS1KV@i3fL%WfsT zS5v;(yg$1d-TAk@PbVKjZD0XUCyr;|uC`MJ^YXptmwpTrgQqtREpws>x*PZxH|FqM zSp$o0*Pcv?1$vW%B-kWQ=i8PAdKoeDd<_vsXSTOKj%}dS+%K)lTy*uY(}@{M0X;@) znRoZY0SuTjIU3ApA0+~-@$dat@!1~wV$o3ezQ7NiG zpWZH&d0R2cpRLKE8%(wlm}@Hbwi{}-32bnLAeix75$dFeg#Hf1&@D)%78cBPF&^d4 z$%;iHS?qP|vFJ_0n^yM(VBu}!^LHaFa-3`O>NbGvmN~})oc-lCV1q{HLwYE;LGk;%j`02?W$AOukl2}BvZk{0=7Pj-yGz;&8+txRe*3h z!Ulva3aSYNAjMSGdeR}9EN06VtP`7FK{HM6sOuW|%s@gzs9y#C z7vO_MJx--|tU2~lL7bwHJJO}q+rj=F-9=!q$C{Dp4@O!mcGB{SQUgs_gG&ha7%|9m z(8k*C%?<@*x%Z`Sx5UE7BWH9Dc;k{tQ~2&+=tH&6R9T$R-P0hlSVr-ip-HFK-iSB> z9?3>Y51x|AvpT;r_%b~E`$vceFjU2n8s3e^LpR`7UJ!Gz^2X!2yd~g^AGDBWf5NAak>mi|2 zz5AIH*OJ`q43;anYibe#l*6{XCx56Vr}ESBt#hjgGlvoa*&h*|Ap%0ohSVHSPh)D}OOR^CHB#*AK=&-7uP>f&;0xphsXI z_XK+S{zs>)i8*DPLyjzwux!QtN?G0{pG7OG5eqzh@N;5da4I%^#wL!_j)fN1A=?`COs7l7!rAm$C$2$z1omf9~8XPp^_ zhW#I5;!yNdI7ECXn)Mq>Dfc^B$n1z)A{+x7d8j@?M?!WSdb}rq*K>)Uv}5**9$V)F zZr!d)wN&$@Vp*!s4k;v+H+Q|cXSy)rAwiIAIaI;xosX0`)7BI|0IAE^rM57Bc$_FTEBaU4al^yovm7$yrMGs1-L%@B z5ZomiwY0z^&?^SjK7oyh_5wuPJa*WlhD4$P>R@kV$@VjDX^a6G_W{qnZFtfSNxMQj zvE3H+FkZYxceG|yhl>+V!p!F)4Jn(uExo+hk!WZ z-8Qbcx!n%L$Yfs=j>H)P7iEZeXp?ERYcUsql+!t#UfHN4@I_4A-ZqJup-Q0LC!gJ8(bQx;k1?VskZ|l0a*ctNB5Y{-}lj=>PwRZul$0|Ig?Zj{jGB_plABFix_I^=~d3{J(GXoqaxjkH9dmp58$ZGSkDQ zH<%Z9d*7ZtMEHK)=C~Qm1q)**m~2U6B^a#A+k#aSt9_mZ+xR7oY7z+o9l7*xoFwnse+RYyE?p0LUsVPO`1<< z4R75}^L%Lz@DE;K8pDL0p?P`|z|WeAbD_p9%23P2=siJS0#`19V~$q(myY0}uI3YY zs+dHdt>(w@zTcZF5n@iasJzuQ#34>VNe9N!ycd?R9a3#4xF)i`k|{D<^pn6J)%a0P z_cW!DD>O^mR@RN@jnbXj#&h_LsxW{ve<@01ceBvA$?tzVw(|jBJTjHjM?lGVv{r?m zKS_d(*VFe7hY3MvV;mQF*=A8S5-|W@ZGc1_T50pZhQWnq^u*c_2O0HQdLj=qpbq1v zdDV{|qYo0TFRXg0HVe>>9|5}3?I9p@9F=mkm`=6v;xvPAFO?$=b z&$lBxT`4^#x~BQVx-=get2WsF$Z9S~!NY~wn?dIIV`)c>e22f#{71LEP#N zQOwVDGwyAhbY6mQKcC)eeIdVfJE)p#0UN2bcGGxaFNo~krXlVncWw1aSGMZ%q_%e$ zIRkUV5Q*Sins|TDfLk!Mg(lEYM?kRKvMTfgE+MZkBI=nA0-O^s?MBfqDghQEfQ;`i zsEt;uh_5GpM)h{g*ir=(gROEvDOK|bvTY+eOV#X5-D?4ddxL%%zu8F%tF>XN!G?Oo zq4m7feuDdZpu*3x3baSn1s&*=q#pnf)I}W~L7JW!V2Dcm*rk?;)HwTWA{f_}JJGZU zBsTh{--D`ertE4n9Rc_H;sJEr1f`=0)ExC{NHNU@L+i94nCW?)iMd{PPsW*Ge%1z& zkj)oFMY3OYz0OB@peUteGa$nqPrF6gi%HNmhnJ$YK#D#rfGx$jVE@>98_#bbX<)TVS(mWx|Uds4}X=MySzF?jg}09!Eoh$aql*HUinSXs2bvWZ;a2xj$?SW&YGq8;yyE~qIFg03 z^-OXULwrio%scApTb-yR8-pVwES}e~;W0tEzP;14PYPEsG$f{Nw#Ro>epm-kj3)H% zwH2*#4aOe;BHiMf4G9c)8Da=#N-n`4BX{y^I0G5jH$ZfrSlJsOzjyrcDW?fG5{NLe zO{(_7H8wwey-C-=bJll?&KZVP;IQbC3RhV!ygvZS(4{5>?9ocKf^jf$qsul1y7m*K z7B*;DnCfWQh$M#I)r$M>mt0TT$A<5V&)NF*JOIQ@=upJ;W~|=$LiBa?^4(#`f< zXeS%x!xZQl2oIQjZ**nvshvm~1P2!O!}f7mVTZ=$ujpLYKs9waZKinyLLvXwkqxWV;=O zeEVR-sh>qV@Qy()I1IZ=vU?U*5K31WG5mCzDJk%dz@fvoe(w$?D&~6J(9AZ6RUG+L zY_%-F3@E&LL{>X!9V?F)CkLWG#6c%YBnb&azTyip{YVyLm)ZQlks(IeUp1AdeuCYC zmJU?c|6FHvk;M9nXD(Dc91wzr;mq3KIZ$x)$2LnNpOCSVlh6jOYD{=uk8Ze%H09g4 zq1!&1JbJ^+ZEuzg109%rS`5rP;x6`idxbga6s9S82r{JKFi zJJdhFz&MXE2nSfF<$j5QC3qfXN<7oIg3Y+!14Ghigx&y7#r@m>iW9A+p=PL?1>Y?R zucs%h5o4s~)0_KZ4?hz&`y{PsBcLUcY^>4ZG|MC-u|G$`Y4qliUvQXswHqd#k|Y8N zBdb)-$7*T5hX6!*=Ae5to(N(Fd1`s->C1=@BE5%K5?@IfLx6xL`hF)%c zu|1ttxm%etsv=W~(Q$K&TsFeO0kcN&`E#9)*7;M7~mpa<7p0fAxo#`Pn`cmvWS_-SImi7zpYa}mcADkunO zP&Quu5~*RVgDz>jfKLSiMknLfDhgaPStgN^uml}PY`FV&Y>GnzgovM^S`rggUjQ#d z-&Oq1Jq5nKpMr|g3!e`RwM1)CIUMJRB#u&ibT?jEQyK*3~tEIz#&o*#KAL^0$vCGQdPhLkD>UG3_rB{waL3m)8dqnq93D2VnpkS~89zU=YDThTu(_`yO%o>9Gwk0dX_28$a0ro?`|v zgL9W8)^!ty+M-~H>R>!iRw6#J_PLoruEK~*-?78N!RV^mBZzCseypSYve^xXJS~#C zVJYh2Toph~`H?XMGpp9qf+%?d6+qBLv9S{oBJa;lX|h5t&K`+}?b_ri`fX$)ZAF<2 zgZ7-Wu`;f8Kq`WUPE3Y6b6mE;BI?;OQjNcD1vQc4U;Rr#iJ6{B0EA@0MDbv|cNM4@ zj3wB0wr@Mlzkx3!kQIr{jX(jw)a8?qEitJf9sw{YJwAetrGnCFQ(#BHj?xHeLkK3H z2$G%SH0)s~aP%cb;8H{#bU;x_$|D${P;6YykA*vTRA0JMB2JD0&xmlk+#>jR=X@t5 z%5P@~Btk1G4^#3DMP81w(h_B8SB@^2p+t++HUSEh*Xm9z7P%J#D}7G51(@g%v=sfK z*INElXk)Ll*hf&I<1UDpwF-=m`FxTVXQ#;@T1$1^>#?K`#hFNVra*QAnE*ut5DhE| ztgpv}Tb@8KNu%pWQ(=e5M76+hle|EfMwyVk)P**~bx<}Nogipk5z?|M!8kQ;7W!{B zAO;A*C6wQ~Vb}{bIhDUke-IdsNlHph^bP(7A*hUiLiKc*#mgU6-0ZCB0dNMVfejgY z=qAIM4IQx3S1BCGUqxI=UbgoslCL-amN-X7;bwPSPKjFQ+mjqz2no-XPB~ksNK!%i z>19+1mnGy~Ke6QAI4BisD||ZlN;T}ku&1gnpwy%Zx_13s)>T#~64J{QOR@Koml@p6 zh^%`(UZiJU{JL5;Vsbne@9GJ&4~8SG%Eir8s!gPn^K3yJ9N+ZqCK zywRm~ZJkO#Hxvft0uxWaAj6=%dA!(C{XOhyWOwsbo_&kaBQZ$?eXglKbzkk_trqn& z_@yf7ke<+7oNbW|g8H_gas`s^63Vr;6jZcEoxM&yzmw>rZsZutxe+B zmPXE;kYr(4hJ*uOuV67A56rZ)OOI_CY#v09Q^4)l=lORBHZiB)se0)vPA+Ly7%73h z?|^J&lbZ|(*Ln&Sx6A|+fq85xTdmB#1aME%Ld>7K{8 zJVzk$475cuVZV4r8_30ByciI)x6R*LqCf#tv}Ro}0GIIazQQQQ5FG7{^$@qheQ5+^8dh_j!xxM?JM=1WL5d5DRpi~C z9cgFmVZ^R;^$Su}6;#%==lz(#3yE6gxP2+p;M|-IibV)CQ-$~2#+a+U=>bf#nn3|%8LD5?(===3QC(F9D zCW`XU+OnqB&+abry3$w^+r51BK2`qo4DTbdvpc)oo+gV!6C_V!+(ypw&+#8S$hTS4 zd0(sao({^}509=sZ`M4z2+jNJ&(E{Gwl^LR_{Gb!J`8Vj$-kE(Z|WVsv<7nAzmm|}JcctmGWE7Aitf(^oAN!_w5HEgnX8JNcYKy7hUd4- zn~zoR&)f85(eKY}%h04hDkK5VG}}woib}Z(DKh*~<_3k^3@U1*D9H*Pw%mvsQD@yp z6~qx$Z!ld6JDX*wAcjqmoS3MXPJ_u4^AQ^uX35F&Yu0XcjX{Q-WVj5y96(GcK$)<1 zGwTMxV$x*KUrQ{b1C%g_lv1Ywm_c$Y8{ZAE1Y!ez$av&7F2Go$%()S<9_%C%QZz*O zS(jp55X8xX)P`^*Bqm8x8qN8Sl9=3p)c%+$Ovr}qVYTc^k5jL*)%6O&Giz)6R2~NYDs9kI*$=xN+dcZFp!8^d2#giT+ULD$Ko){L_k`e zE#L|GI50>y7eu?y&B@Gqb!)fKrl}Oui70zj*rrX=yht{`Kf*c)EqYU!UXt~E^;#E9 z^d9EQHFbJ7@{Kk4NmCtNEdoTRIu_z@nvk~Yr)`(CD64$E@nAD-t)092 zE%K60kQ#&=J{Rw=z(7W|j(XUrFcq(>IQ7efXxr6=ee|lTc8nRaeGfMtZ`z~ST_KG7{V&cI!F!9x&}Ea!rUuhhZ!;N4uD$R#gI-U5hv*@GNc+- zH6XNdcrcN#IdARl9%NOWq$GU+JP##(*>eQuUKg5c7)<1qrhheKT4(VTic>`w@Ji4chc52 zYyK(7uYndlUa#_YvPX+X4K>eY`QUqXq0|TPqweqCWb7n{+^E9xPwjl~p<(bL>U3W} zZ-%fYIjM5PCD>IinX}MACs*Yld?DvWaKKO6pv(~2y`wk=pmzCL+E!oci>*2_jzg4G zL2V1L&d^lV+ku{7d>5(Pf+m|CxagK0z+JLYT8eTIBloDuM)4ecj+taRkmM7(1@OJP zPu=8|U<;GTCCwk5e1rwZh*TW82_|ryv5O*uKVj=ac1E{{l<)&hQ0|%x_wB*?ya@7% zMms@Y_%l@jEU|eg$PFRz-@u77vX;Zu^adgmVdC%^h*m_l*fgXuae2>;k(QjCLS0~J zNXc%~*m2kiiV(C2Spe||rG%=17v`0akR*TvQdAHY+l#X7`%+b%J(mgS^ysk}*1&yj zm762nDd(}U5M_C2iy9G==49teXz_;6Nf}p|!{6rzTMA(uUFTKmPr=)?+Q z<&GBzVKpP{V=29s3RSab2j*hd%KZS?8Ogu3WXGKll!9k);w^(D}veS4XHAuS-w>}w-N>O+G4Io5`>zxkh=IESPM#4!V!MCaWecW zSQBlOf7@{p$6|$H>mV!5NZ^{IN({#k_=+;2V*-A>xH2Q3nl<@xDL_`G?O2zgBG1Jg zlLgHnLN%H?G)&?ibG3@G_hmhIG=?6_m9QwPqf}EJj;SGR+pJn|<98Co!iK9PC<%~~ z6-fwFfOX|z?WvUhkZHw^>!byxR_ zp)etfQwA8)Y2?M|0wmHY)?BNOUqXz;4DM-3NycbN-o*$)9XOb!&=5GW0dBgFj$6lW zzyDm1hF0?cdMU<;m(GTYM<~3T{bZpj+3!1GOjr3I7D%h;y74n}BfOws zGDKg5d{WXOQ{0HouZfFJs}1E=jHPyH=S`H@y@FIsJUPjZ`TVmFrd22tIgy-42Bt8z z%Tx!SomH!JEoCKfw4vs%I76;Z_rG%El8j7nq@aE1mhU7r@IF5Qglw78$We0kQC zT3uG{aERr+`a$^&sZ~3DD9OHGhCD(!lFO3b7njdf!d2>*5uS|0VyL93a(#WK$Q-mg zezg4PvRV_B@SDuI>4SVQPep>I@~s|hl8w`_27qshrOmYgR|oXklL>tzl_mFCjPYb8 zwzq6cmym362*}9>+g*pEZ8SYk&sfQS zxwiR1D{qD|(aeXrFjb)}io{}z0?3w41BrYcNln{8I&)Nj>73dLy{(uaY{G3^ zp2DEE2B0RXDT0=#i6^BZM5dIm#W`$HQR;8q_vdkWc2i;w5y{cZXMvtzglrXrz#I>P zvVu`mM+?ceFpQ|B?As3Y?dq{PS*_z73oa%fKs*^msBn1epo)&w3?oZ-z$~PfW4)+Q z-rfkS!A1cQq(yIFWp{V596hAhR@W5aWOxLwC0`0-z$L*rQ5>miap-xF-9X-z4VQ_f zSK}CxiE<@FEYb#e@E8o*qw>QCt4Y0sUxn@}2j->fBjdnt8Zxa$?^13AA__&wa}iBAznukDGi5Yxq5&mt<1}BYpdXHqnY|sM!pr+b*U!jc8!9H zKEss5on_~UtcK&I8cX!1(+?j%n*tgXg07E^4@UM`8w^*}TEwMX*R#~;UoD#O<}24v zEn3}fFMskUd2{yFmTx3Gayf|5h$O!AY&|rF4i;E}Z;pFH+6ERfRV6>uuRm^XM*8>J z<5CHi|5nl;!GSBn>9r_r0}V`>{?b>oLzMe@-^F8%KkQ|%Z`Chl$rvC*2_$HC_-Mj} zE1Uj$l9e(Vzs(4f2|+R5v;B1!1~b@VSjgg21i?b$jzax*tGTLHGl#IkvF67LuHkOs zdU5Bf_j%}uNl8nLefASJ)Km8hrj^f$$fTil`B0EwpAD&wtU&W!B17UpnMy%+HJ2Me zqJDOMoLSEiKmGTfyu}V8{HcsRS`h~-*(?*ez2uMftJ=uPIu?fTq z$RcyvMj2KdLudGX4z*O)#EXMnQM#!{RDi@T(&UjZswbD>nT zvA;qEu{O+a{lZG;cEO^R0g4*L$~sZ`+FF)-^q!g`ghE@spJw$Gl;JfMz;A+nA`R7a z&qv9PIAUsoTQ%);8rlAyiPe@b5rMQNWofuuXz7`r>uuX8%G(vnGx9BFHF_Kv{5gr8 z+rcl513HZh$YtcAcz0SbH`m&9GqN@G`Et<=m~|u&c$u%~a1p4NFf`${F>*L5;X!|a z(r$F!@WJFdMsRZ;SI8qdq&F`2DQ)4S-BWs2op2@T~wnRA~j`^ zNvYaIt_DjW(jb?yuzs~{?? zp*B2!(1=ZAFn_s*2|`@Cnpx}eWP&n9R2R#afX?sjlm+Lw?CiD0Bffnkz>n`ZguD*B z*UKvz3$EQKA)sBn8%#`wlh|c#<{F3l(pA-n_Hc{cwv?2DU7RxL);&G8PbK~?siVmD zspC~{Sfc$285CCivv#IxIrY83%WgBbjzLpl$sh&hvJIa6KyE_Zk{}Q1GQE~ZZ#r$( z3Ua=!t-30mvr&>||Lm;m?RMK`$BLu$B`UfQR(#P%cljQ5i}KT;fLC_&v@W+kPkYP@ zsBJ=-$|U${ZG*h_-4^OouQFME-u<3bG00GwlP`yIeO`DLEnfms<*M5aVKDvu*6B9y z^lRhWw)P_~Y;LtHCY{9M>*|5PbudQh>9ilO=p4uK=qXg!rWhG7 z-_u@eBd*#e@7@+WM!Xo@=`;%E(;jp*Ri64PnKd&+F5v}`*V)zSBz105bI|*;)pc+5 zH#t*+!Ji?qi_=|;2*(3Ho@Yy(>^?6dFG(u6l(zZ)1yo}y+DyIm{)h5(c`hB=OR)Xh zQ$rp)Q&GiJKWuEh$>RphaqI`%Mf>sOPky#2xfooF=pCN(!6zSs!m{F)0Qs!3kfV}1 zn=lup%E;*A6Xcz9_ypj|0cF4b=K9e z+0nbMl~3Xt2wav*tRDlAEaupPz~U;Z;v#yJ46)YtS&fn1vc5&XI}2~!7|2Q>G0Jso zk9s2cF6$efKRn)miHlJ`0>4$!+e0%f%0^Fjz(*y9SXonJ4;s2%nMOUc9>$zBBI!pA zjzSMovGQTCIM%`oi}^p^TnQ!=4RryW7#=z;RUg7nVKEa>QzyjY(+>9e zFc0?Mjt7n*(=-vY#3iPqi&gnZlKHat4t9{2`Dw$O?};?&9gQlORWLUJFb@Y?L>V!r zc;rUk{7>KzvSC10gv3K(|$Emwz`FuMzI&a+{7bKYK1>(la*y0x~ zs?=)FYFb)g8aUU_4*R!kQslj}0Vbcwkom9Bmk*}v(d7d~C?qwD-28}?ay6ubl@P~P z)X~`srm77-+R^dg{3pj4Q{T1@TX2%lgR6H>VdL;{ItbUr1?j$}eDL#A8+N^i@geilIS;_^A?z9xm`>X$A?Ll(KnjCx>I4l2gRIMSW== zOTJio$YJlPb6vv890A?k++>c%JM!E_jTKUEC~=0v?h$Blc-`^ zWNXV}K>MIIQ;da^hS!a99L}W%%dPoROXw|=YT&RS=!c(@&bYFq{hqB5(~+-C*E%e- zDRVZf$TOg{ahNhVP?e6YuS5!nqyia^Hn=Zb3b#5P$b_c0=mQOcrGx$IA+UKPq$+5{Uiq&dTXwfuvHPrWPELEO{f4` zE4LBOcUFO&qf{3l?(7-cvc!RAodUieLcCrkM9>lLYGHJXvGj=TiuGnpbvD~IX&Gxg z=EXrFX~_n|$WAa#XDRlkN79=g<48H?vA(kP+wE!Z`0*AcUy3C!7K;gUszh+G2E;Vx znJ6akvtJz6_uKL%Q)hbk_1DFoCg`yblyzwK2>s-w0b)ToQJf7@YTgYH`UkDSKsipb zV0NqK%mPilBtQf3v5YCLpVd`*h9B&}BAQ8=c|W2>EY_#xaH uv1i%7xS7AmLJRt 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 L2%w=6SCsgFt)l^a literal 0 HcmV?d00001 diff --git a/datatypes/epc/domain/mapper.py b/datatypes/epc/domain/mapper.py index 60ec7c85..97528ed6 100644 --- a/datatypes/epc/domain/mapper.py +++ b/datatypes/epc/domain/mapper.py @@ -3296,6 +3296,16 @@ def _normalize_sap_schema_16_x(data: Dict[str, Any]) -> Dict[str, Any]: # still fail loud at from_dict — that is correct, the data is insufficient. d.setdefault("tenure", 0) + # Some 16.x certs (notably 16.3, cert 2628-…-2970) lodge `door_count` but + # omit `insulated_door_count` — RdSapSchema17_1 requires it. It is a door + # *refinement* (which of the lodged doors are the better-insulated type), not + # a core fabric field: an absent value means "no insulated doors recorded", so + # default 0 (the conservative RdSAP assumption — all doors take the standard + # door U-value; the engine's `insulated_share = insulated/door_count` is then + # 0). Mirrors the `tenure` default above. Certs that omit `door_count` itself + # still fail loud — that is correct, the fabric data is insufficient. + d.setdefault("insulated_door_count", 0) + # 16.2 lodges glazing in BOTH `multiple_glazing_type` (frequently the "ND" # not-defined sentinel) AND the windows[].description. When the numeric field # is undefined, honour an explicit "Single glazed" description so it is not diff --git a/datatypes/epc/domain/tests/test_from_sap_schema.py b/datatypes/epc/domain/tests/test_from_sap_schema.py index 64b6ee5c..7b75b84c 100644 --- a/datatypes/epc/domain/tests/test_from_sap_schema.py +++ b/datatypes/epc/domain/tests/test_from_sap_schema.py @@ -519,6 +519,25 @@ class TestFromSapSchema16_2: assert epc.uprn == 100020933894 assert Sap10Calculator().calculate(epc).sap_score == 61 # lodged 56 + def test_16_x_missing_insulated_door_count_defaults_to_zero(self) -> None: + # Some 16.x certs lodge `door_count` but omit `insulated_door_count`, + # which RdSapSchema17_1 requires — previously raised "missing required + # field 'insulated_door_count'", aborting the whole prediction cohort + # (EpcComparablePropertiesRepository.candidates_for maps every cohort + # cert in one list comprehension, so one unmappable cert killed the + # predict_epc path). Regression for cert 2628-3046-6233-4584-2970 + # (SAP-Schema-16.3, uprn 100061905751) seen via modelling_e2e property + # 730259. The normaliser defaults the missing count to 0 — no insulated + # doors recorded, the conservative RdSAP assumption. + data = load("sap_16_3.json") + del data["insulated_door_count"] + assert "insulated_door_count" not in data + + epc = EpcPropertyDataMapper.from_api_response(data) + + assert isinstance(epc, EpcPropertyData) + assert epc.insulated_door_count == 0 + def test_16_2_normalizer_does_not_mutate_caller_dict(self) -> None: # Mirror _normalize_shower_outlets' contract: the caller's dict is # untouched (deep copy), so a re-dispatch sees the original shape. diff --git a/scripts/hyde/elmhurst_download.py b/scripts/hyde/elmhurst_download.py index 3448a231..7688a30f 100644 --- a/scripts/hyde/elmhurst_download.py +++ b/scripts/hyde/elmhurst_download.py @@ -28,7 +28,7 @@ SESSION_DIR = HERE / ".elmhurst-session" SAMPLE_DIR = ( HERE.parent.parent / "backend/epc_api/json_samples/real_life_examples" - / "SAP-Schema-17.0/uprn_10090944225" + / "RdSAP-Schema-17.1/uprn_10010215568" ) ASSESSMENT_GUID = "B44A0DB4-4C08-4241-B818-86F060172105" 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 681117e0..aa8344b2 100644 --- a/tests/domain/sap10_calculator/test_real_cert_sap_accuracy.py +++ b/tests/domain/sap10_calculator/test_real_cert_sap_accuracy.py @@ -557,6 +557,30 @@ _EXPECTATIONS: Final[tuple[RealCertExpectation, ...]] = ( cert_num="2298-4036-7306-3186-4930", sap_score=81, ), + # UPRN 10010215568 → cert 9978-7098-7226-2633-3994. RdSAP-Schema-17.1 — NATIVE + # RdSAP, END-TERRACE BUNGALOW (single-storey), band J (2003-2006), cavity wall + # as-built insulated (assumed), pitched 200 mm loft, solid insulated floor, + # mains-gas REGULAR boiler (PCDB 15100 Vaillant Ecotec plus 415) + cylinder + # (size 2 = Normal/110 L, factory foam 25 mm, thermostat), control 2106 (CBE + # programmer + room thermostat + TRVs), water from primary, party wall 9.8 m, + # double glazed, natural ventilation, 86% LED, TFA 75.46. Lodged 74; engine 75. + # Built in Elmhurst RdSAP10 on the lodged inputs (evidence saved: + # elmhurst_summary.pdf / elmhurst_worksheet.pdf): worksheet SAP 73. Engine on + # Elmhurst's own parsed inputs = 74 ≈ worksheet 73 → calculator faithful (~1). + # The cylinder insulation thickness (25 mm) IS carried by the RdSAP-17.1 mapper + # (cylinder_insulation_thickness_mm=25) — no mapper gap here (cf. the RdSAP-17.0 + # cylinder-thickness drop on uprn_68151071). The residual engine 75 vs Elmhurst + # 73 (+2) is the documented engine-uses-lodged vs Elmhurst-RdSAP-default gap: + # Elmhurst defaulted the cavity wall thickness to 250 mm (lodged 310 mm) and + # number of baths to 2 (lodged 1, lifting Elmhurst's HW demand). Engine 75 ≈ + # lodged 74 (+1) is the validated anchor. PINNED to the observed engine 75 — + # mapping deliberately untuned. + RealCertExpectation( + schema="RdSAP-Schema-17.1", + sample="uprn_10010215568", + cert_num="9978-7098-7226-2633-3994", + sap_score=75, + ), )