From 4997039f1a4bf102aa58dc7e03f263eae97c8f55 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Mon, 25 May 2026 16:52:15 +0000 Subject: [PATCH] Slice 65: add shower_outlets + number_baths to cohort 000474 hand-built MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes 2 of 14 remaining diffs by populating Appendix J inputs the Elmhurst mapper surfaces from Summary §16: - `sap_heating.number_baths=1` (passed via make_sap_heating kwarg) - `sap_heating.shower_outlets = ShowerOutlets(Non-electric)` (set post-construction because the helper doesn't expose the field; added the dataclass imports for SCM completeness) Cascade-equivalent: number_baths=1 and one non-electric mixer outlet without WWHRS are the implicit Appendix J defaults when nothing is lodged. All 11 cohort 000474 cascade pins remain GREEN at 1e-4. Diff count: 14 → 12. Pyright net-zero (0 errors). Remaining 12 diffs split: - 7 mapper-needs-to-surface (country_code, water_heating_fuel, boiler_flue_type, emitter_temperature, main_heating_number, has_draught_lobby, central_heating_pump_age int↔str) - 3 party_wall_construction sentinel (None vs 0) across bps - 1 sap_windows: LEN 7 vs 5 (collapse vs 1:1 structural decision) - 1 dwelling_type / built_form casing nuance (resolved in Slice 64 bulk-update; remaining 1 was for one bp's encoding) Co-Authored-By: Claude Opus 4.7 --- .../tests/_elmhurst_worksheet_000474.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/domain/src/domain/sap/worksheet/tests/_elmhurst_worksheet_000474.py b/packages/domain/src/domain/sap/worksheet/tests/_elmhurst_worksheet_000474.py index 1b9ef77b..6e953323 100644 --- a/packages/domain/src/domain/sap/worksheet/tests/_elmhurst_worksheet_000474.py +++ b/packages/domain/src/domain/sap/worksheet/tests/_elmhurst_worksheet_000474.py @@ -28,6 +28,8 @@ from datatypes.epc.domain.epc_property_data import ( SapFloorDimension, SapVentilation, SapWindow, + ShowerOutlet, + ShowerOutlets, ) from domain.ml.tests._fixtures import ( make_main_heating_detail, @@ -195,6 +197,12 @@ def build_epc() -> EpcPropertyData: main_heating_data_source=1, ), ], + # Summary §15 / §16 lodgement the mapper surfaces — adding + # for field-level parity with `from_elmhurst_site_notes`. + # Cascade-equivalent: number_baths=1 is exactly what Appendix + # J §1a defaults to when nothing is lodged, so the 1e-4 + # cascade pin is preserved. + number_baths=1, ), ) # Top-level cert-lodgement booleans / counts the Elmhurst mapper @@ -205,6 +213,14 @@ def build_epc() -> EpcPropertyData: epc.number_of_storeys = 2 epc.hydro = False epc.photovoltaic_array = False + # `make_sap_heating` doesn't expose `shower_outlets` as a kwarg; the + # Elmhurst mapper surfaces it from Summary §16. Setting here for + # cross-mapper field parity. Cascade-equivalent: a non-electric + # mixer outlet with no WWHRS is Appendix J's default when the cert + # lodges a bath without explicit shower data. + epc.sap_heating.shower_outlets = ShowerOutlets( + shower_outlet=ShowerOutlet(shower_outlet_type="Non-electric shower"), + ) return epc