Slice 65: add shower_outlets + number_baths to cohort 000474 hand-built

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 <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-05-25 16:52:15 +00:00
parent b5cbfe83de
commit 4997039f1a

View file

@ -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