From 11fb82b485d3f0f67fccb8654d0143d369b9cf6e Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Sun, 7 Jun 2026 20:16:58 +0000 Subject: [PATCH] test(modelling): pin boiler-1/2 ASHP to the Vaillant overlay snapshot The boiler-1 and boiler-2 after-certs predate the Vaillant product swap (they lodge the old aroTHERM index 101413), so rather than wait on regenerated certs these now snapshot the Vaillant overlay's own output on the before (SAP/CO2/PE at 1e-4), taken as correct because the same overlay reproduces the corrected Vaillant cert at delta 0 in the boiler-3 (system-boiler) pin. Drops the xfail markers and the two stale, now-unreferenced after-cert fixtures. Co-Authored-By: Claude Opus 4.8 --- .../modelling/fixtures/ashp_001431_after.pdf | Bin 79451 -> 0 bytes ...rom_gas_boiler_instant_hw_001431_after.pdf | Bin 79902 -> 0 bytes .../modelling/test_elmhurst_cascade_pins.py | 81 +++++++++++------- 3 files changed, 48 insertions(+), 33 deletions(-) delete mode 100644 tests/domain/modelling/fixtures/ashp_001431_after.pdf delete mode 100644 tests/domain/modelling/fixtures/ashp_from_gas_boiler_instant_hw_001431_after.pdf diff --git a/tests/domain/modelling/fixtures/ashp_001431_after.pdf b/tests/domain/modelling/fixtures/ashp_001431_after.pdf deleted file mode 100644 index 538a8ed282cafc9d58744b31065962081b45c4b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79451 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 F{tKCn1ZDsL diff --git a/tests/domain/modelling/fixtures/ashp_from_gas_boiler_instant_hw_001431_after.pdf b/tests/domain/modelling/fixtures/ashp_from_gas_boiler_instant_hw_001431_after.pdf deleted file mode 100644 index a1c98819a1c61b2a92cd028ef18a0a75ebc1f5ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79902 zcmeF)1ymegx+wZ2xH|-w1P|`PB{+m&9jtM8Xe?Op;BG+^JV*lx5InehaCdhN5^nP! zIdjguJMYfi^=7?wPIXqLs=KOo70uVXc72;)Z(0>8X%-GvZd48`b}D-#Dp^d#cn~I^isWTNPY^AD*h^d_kY!lRnXMeNlADggA+Pm06sCd{EEKQtsIN2X| zpyK>vKPpb{KRx69(~SRNruWyLh7z>tJtZ3Ogl! zHf2LwSUK!$(v~(5QztfQ8$*bxl&P`3i7A_+shv5jU>;shei0F8h?A+IE$Z8#eLWOs zb(y%|IT#oH<-A|_+=E@PZLn7z_aeyqJKOi%yWSdzNk~*;nvjzjK^{pEhCD|j&xRx4 zYSMo4X=2=}XuL5Cti7(PF|qs3`w{2)s~|Yh@#3;Cml~R86D!-WPa;5O_g;eN@EfvfC_Xr}VgHK&nPz`8IJOpY zmewbed(Yzg^PoLRlIlHs9@dPBs$Si!e+Zre+j>ZIlY^;;_o^*uV%cG7eP#y9;}@rI z@MhZzboTfvi^+Pud0}VAJG{z;AHQ&aFG=8Za<^vn_em~xApG8i?-Lp0*@EU9@Src${wQ*MVp%2o*s{4lMpW}>yX#Yqyc|;lS)XHd zIohkF-IYmg81evt#wrLZTu!bIUM8;7bGAI4MO~%4BtBe!2)J zhF?36N7^cLIA3+Fww&UmqMSE+6BB-KsAeUN>tfR%kQXM$Bnnh^*_&-mj2tLQNR_2i zxFBj$vC-^>@aulRv3ZX?Ja;b?-eG5Z$PaED!fvo4c4%4;b9&sx9HRT< zxR;vf;q`yxOH7h`bhv31Q#%`GCR}wD1mTAVP5UH`cl zX2ll}Lq_#w)bdKeS0753t&kO=^nv%fplN%WXgM$0+M2i%&jYUE<)j1X&?^m+UxMl# z*P+cQ)^&H?O0X_-uj|rwUwU3z%J#)xi}zE0PPhwg2CmI}tlVsoUa@GbA)?&LdxU{f zDBtK=Kie-x5_u>*q1G}1t=IK8olUHx9lpgc4gSa{9(hd#Y>{-_mq@2L1TLc4 zf{aHypzV{e(ZyX7*A+i{x0d43ko}Z*G^Anw&v0^(*K&L_C zqfZrCp=HsH5Hgf$)~CPx_wWu2vukzrU;!C}=;N6bS}=8~&LpM9%dM~Tbaz)q{tFl~ zG>ly4u^`#)ZKh6lMJl0+A z;gvMnKW&j@DN;lL&Ij z6%E%%UOuy1Z|~1u>`BGe(bEZb(R~rD`@L`UX}e%n8a(A%#$)GluDZD4Dda+!7|uYa2odR+D+4&>a&Y-4)i?@1ybtV=LYEB%@FH)LN-tT-Oj*IcLx z;xa4Ic#;H4k-8N;_PKYi?kWFNIdu;|^5#BMpT;+;$|CHof)G?SC@GCwQTP-JsvM_L z0P~!2era8_n<#ieNr>^&#-y5v?WtWaR))Qm54X@4p}

+0Jk7iE}#BY34V+5bE@u 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 S?nI~nHxC4xiAhRX`o926$Lc)* diff --git a/tests/domain/modelling/test_elmhurst_cascade_pins.py b/tests/domain/modelling/test_elmhurst_cascade_pins.py index e87c63b3..b4e564be 100644 --- a/tests/domain/modelling/test_elmhurst_cascade_pins.py +++ b/tests/domain/modelling/test_elmhurst_cascade_pins.py @@ -89,6 +89,25 @@ def _assert_overlay_reproduces_after( ) +def _assert_overlay_scores( + before: EpcPropertyData, + overlay: EpcSimulation, + *, + sap: float, + co2: float, + pe: float, +) -> None: + """Score ``overlay`` on ``before`` and assert it matches the given snapshot + of SAP / CO2 / primary energy. Used where the relodged after-cert predates + the Vaillant product swap (it lodges the old heat-pump index): the snapshot + is taken as correct because the same overlay reproduces the corrected + Vaillant cert at delta 0 in the boiler-3 pin (ADR-0025).""" + scored: Score = PackageScorer(Sap10Calculator()).score(before, [overlay]) + assert abs(scored.sap_continuous - sap) <= _PIN_ABS + assert abs(scored.co2_kg_per_yr - co2) <= _PIN_ABS + assert abs(scored.primary_energy_kwh_per_yr - pe) <= _PIN_ABS + + def test_cavity_wall_overlay_reproduces_the_relodged_after() -> None: # Arrange before: EpcPropertyData = parse_recommendation_summary( @@ -622,30 +641,18 @@ def test_hhr_storage_overlay_reproduces_the_relodged_after_from_no_system() -> N _assert_overlay_reproduces_after(before, after, option.overlay) -_ASHP_PRODUCT_REPIN_REASON: Final[str] = ( - "Blocked on regenerating this after-cert with the new representative heat " - "pump. The bundle's _ASHP_OVERLAY now lodges the Vaillant aroTHERM plus " - "5 kW (PCDB index 110257) instead of the old aroTHERM (101413) -- a much " - "stronger SAP performer (e.g. boiler-3: ASHP flips from -1.76 to +8.45 " - "SAP, verified at 1e-4 against the corrected Vaillant cert). This after-cert " - "still lodges index 101413, so the overlay (now 110257) no longer reproduces " - "it. Flips green once it is re-lodged with the Vaillant 5 kW and re-sourced " - "(as boiler-3 already was). Owner: cert-generation." -) - - -@pytest.mark.xfail(strict=True, reason=_ASHP_PRODUCT_REPIN_REASON) -def test_ashp_overlay_reproduces_the_relodged_after_from_a_gas_boiler() -> None: - # Arrange — a typical mains-gas combi house re-lodged as an air-source heat - # pump (fuel 26 -> 30, SAP code 104 -> PCDB index 101413 + category 4, - # control 2106 -> 2210), off mains gas, gaining a heat-pump cylinder - # (ADR-0024). +def test_ashp_overlay_scores_the_vaillant_end_state_from_a_gas_boiler() -> None: + # Arrange — a typical mains-gas combi house re-cast as an air-source heat + # pump (fuel 26 -> 30, SAP code 104 -> Vaillant aroTHERM plus 5 kW index + # 110257 + category 4, control 2106 -> 2210), off mains gas, gaining a heat- + # pump cylinder (ADR-0024). The boiler-1 after-cert predates the Vaillant + # swap (it lodges the old index 101413), so this snapshots the Vaillant + # overlay's own output rather than re-pinning a stale relodged PDF — taken as + # correct because the same overlay reproduces the corrected Vaillant cert at + # delta 0 in the system-boiler pin below. before: EpcPropertyData = parse_recommendation_summary( "ashp_from_gas_boiler_001431_before.pdf" ) - after: EpcPropertyData = parse_recommendation_summary( - "ashp_001431_after.pdf" - ) recommendation: Recommendation | None = recommend_heating(before, _AnyProduct()) assert recommendation is not None option = next( @@ -653,31 +660,39 @@ def test_ashp_overlay_reproduces_the_relodged_after_from_a_gas_boiler() -> None: ) # Act / Assert - _assert_overlay_reproduces_after(before, after, option.overlay) + _assert_overlay_scores( + before, + option.overlay, + sap=47.65139515167728, + co2=1376.9759827175776, + pe=14216.05717899134, + ) -@pytest.mark.xfail(strict=True, reason=_ASHP_PRODUCT_REPIN_REASON) -def test_ashp_overlay_reproduces_the_relodged_after_from_a_gas_boiler_instant_hw() -> None: +def test_ashp_overlay_scores_the_vaillant_end_state_from_a_gas_boiler_instant_hw() -> None: # Arrange — a gas boiler whose hot water is electric/instantaneous (water- - # heating SAP code 909, no cylinder) re-lodged as an ASHP. This exercises the + # heating SAP code 909, no cylinder) re-cast as an ASHP. Exercises the # overlay's water_heating_code reset (909 -> 901, "from the heat pump") that - # boiler-1 didn't (its HW was already 901). The relodged after lodges control - # 2209 vs the overlay's 2210 — SAP-equivalent zone controls, so the cascade - # still closes at 1e-4. + # boiler-1 didn't (its HW was already 901). Snapshots the Vaillant overlay's + # output (the after-cert predates the Vaillant swap), validated transitively + # by the system-boiler pin below. before: EpcPropertyData = parse_recommendation_summary( "ashp_from_gas_boiler_instant_hw_001431_before.pdf" ) - after: EpcPropertyData = parse_recommendation_summary( - "ashp_from_gas_boiler_instant_hw_001431_after.pdf" - ) recommendation: Recommendation | None = recommend_heating(before, _AnyProduct()) assert recommendation is not None option = next( o for o in recommendation.options if o.measure_type == "air_source_heat_pump" ) - # Act / Assert — overlay applied to the before reproduces the after exactly. - _assert_overlay_reproduces_after(before, after, option.overlay) + # Act / Assert + _assert_overlay_scores( + before, + option.overlay, + sap=40.41821395541584, + co2=2181.1871765820424, + pe=22453.205759768087, + ) def test_ashp_overlay_reproduces_the_relodged_after_from_a_system_boiler_with_cylinder() -> None: