Model/datatypes/epc
Khalim Conn-Kowlessar 1e9654ce28 Slice 26b: §6 solar gains cascade pin + SapRoofWindow solar attrs
Added `solar_gains_section_from_cert` and 12 strict pin cases for §6
LINE_83 (total solar W) and LINE_84 (total internal + solar gains).

Extended SapRoofWindow with the solar attrs needed for line (82) roof-
window monthly gain: `orientation` (SAP10.2 code 1..8), `pitch_deg`,
`g_perpendicular`, `frame_factor`. Defaults match the modal RdSAP roof
window (45° pitch, DG g⊥=0.76, PVC FF=0.70, N). 000516 lodges
orientation=2 (NE) + pitch=45 from the U985 cert.

Plumbed `_roof_windows_for_solar_gains` through both `solar_gains_
section_from_cert` and the internal `cert_to_inputs` cascade so the
production §6 cascade now picks up 000516's NE roof window contribution
to (82). Exposed `ORIENTATION_BY_SAP10_CODE` from solar_gains for the
SAP10.2 code → Orientation enum mapping the cascade needs.

§6 cascade (LINE_83 monthly):
  fixture | LINE_83 | LINE_84
  000474  |    ✓    |    ✓
  000477  |    ✓    |    ✗ (cascaded §4 LINE_65 → §5 LINE_72/73)
  000480  |    ✓    |    ✓
  000487  |    ✓    |    ✗ (cascaded HW lodgement defect, slice 25)
  000490  |    ✓    |    ✓
  000516  |    ✓    |    ✓ (roof window now feeding (82))

Scoreboard:
  section_cascade_pins: 220 → 230 PASS (+10; 12 new tests, 2 fail)
  e2e SapResult:        30 →  32 PASS (+2, downstream of §6 closure)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 21:41:58 +00:00
..
domain Slice 26b: §6 solar gains cascade pin + SapRoofWindow solar attrs 2026-05-23 21:41:58 +00:00
loaders demo generated for use in address2uprn 2026-05-08 14:48:15 +00:00
schema slice 15d: +50 features (gap fill + secondary building part); drop 2 derived 2026-05-17 10:13:03 +00:00
search bolstering testing 2026-04-28 13:46:09 +00:00
surveys Handle wall thickness "Unmeasurable" 🟩 2026-04-30 16:41:16 +00:00
__init__.py testing out rebaselining 2026-02-12 22:25:03 +00:00
construction_age_band.py testing out rebaselining 2026-02-12 22:25:03 +00:00
efficiency.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
floor.py preparing partiy class 2026-02-05 08:54:27 +00:00
fuel.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
heating_controls.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
hotwater.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
main_heating.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
property_type_built_form.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
roof.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
walls.py beginning to assembly the parity class 2026-02-04 18:34:59 +00:00
windows.py testing out rebaselining 2026-02-12 22:25:03 +00:00