Model/tests/domain/sap10_calculator/worksheet
Khalim Conn-Kowlessar 7dfe3f2c99 feat(test): case-20 cascade fixture + close its CO2 via E7 per-end-use codes
Locks sim case 20 (storage heaters + Detailed RR + loose-jacket cylinder)
as a golden vector: _elmhurst_worksheet_001431_case20.build_epc() routes the
Summary PDF through extractor → mapper → calculator, registered in
test_e2e_elmhurst_sap_score with all 11 SapResult headline pins at 1e-4.
10 pinned exact off slices 1-2 (window extractor, RR stud walls); this slice
closes the last one, co2_kg_per_yr (was 3797.62 vs (272) 3815.4060).

Root cause: on a dual-rate (E7) meter the CO2 path ignored the tariff's
high/low Table-12 electricity codes that the cost path already uses:
  - Secondary (direct-acting portable heaters, on-peak) keyed the monthly
    Table 12d cascade on standard code 30 (0.15405) instead of the E7 HIGH
    code 32 → (263) 0.1616. SAP 10.2 Table 12a Grid 1 direct-acting electric
    is 100% high-rate; mirrors the cost side billing it at 15.29 p/kWh.
  - Main storage heaters fell through `_table_12a_system_for_main`=None to
    the FLAT annual factor (0.136) rather than the dual-rate LOW code: per
    the Table 12a design intent ("storage … 100% low rate") they charge
    off-peak → E7 LOW code 31 → (261) 0.1357.

case-20 co2 now EXACT. 2433 calculator + 112 golden + documents_parser tests
pass — no dual-meter/storage cohort regression; pyright strict net-zero (32=32).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 11:23:10 +00:00
..
fixtures Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
__init__.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
_elmhurst_fixtures.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
_elmhurst_worksheet_000474.py mapper: Elmhurst path populates roof_construction (int) for cross-mapper parity 2026-06-04 21:16:20 +00:00
_elmhurst_worksheet_000477.py mapper: Elmhurst path populates roof_construction (int) for cross-mapper parity 2026-06-04 21:16:20 +00:00
_elmhurst_worksheet_000480.py mapper: Elmhurst path populates roof_construction (int) for cross-mapper parity 2026-06-04 21:16:20 +00:00
_elmhurst_worksheet_000487.py mapper: Elmhurst path populates roof_construction (int) for cross-mapper parity 2026-06-04 21:16:20 +00:00
_elmhurst_worksheet_000490.py mapper: Elmhurst path populates roof_construction (int) for cross-mapper parity 2026-06-04 21:16:20 +00:00
_elmhurst_worksheet_000516.py mapper: Elmhurst path populates roof_construction (int) for cross-mapper parity 2026-06-04 21:16:20 +00:00
_elmhurst_worksheet_000565.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
_elmhurst_worksheet_001431.py S0380.191: pin simulated 001431 gas-combi end-to-end at 1e-4 (e2e harness) 2026-06-02 22:44:32 +00:00
_elmhurst_worksheet_001431_6035.py S0380.195: pin sim case 4 (6035 floor geometry) e2e at 1e-4 — 6035 +19 PE is lodged divergence 2026-06-03 09:56:39 +00:00
_elmhurst_worksheet_001431_case5.py S0380.197: simulated case 5 e2e fixture — detached sandstone RR validates S0380.196 (RdSAP 10 §3.9.1 + Table 4 p.22) 2026-06-03 11:41:16 +00:00
_elmhurst_worksheet_001431_case6.py S0380.207: promote simulated case 6 to a full SapResult e2e fixture 2026-06-03 16:14:48 +00:00
_elmhurst_worksheet_001431_case7.py S0380.208: case 7 combi e2e fixture — condensing-oil-combi path validated exact 2026-06-03 17:57:22 +00:00
_elmhurst_worksheet_001431_case20.py feat(test): case-20 cascade fixture + close its CO2 via E7 per-end-use codes 2026-06-06 11:23:10 +00:00
_elmhurst_worksheet_001431_rr.py S0380.193: suspended-floor (12) sealed rule fires only on a SUPPLIED U-value 2026-06-03 09:16:25 +00:00
_elmhurst_worksheet_001431_rr8.py S0380.194: pin sim case 3 (near-exact 6035 replica) e2e at 1e-4 2026-06-03 09:46:56 +00:00
_xlsx_loader.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_appendix_h_solar.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_dimensions.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_e2e_elmhurst_sap_score.py feat(test): case-20 cascade fixture + close its CO2 via E7 per-end-use codes 2026-06-06 11:23:10 +00:00
test_energy_requirements.py S0380.200: SAP 10.2 §9a two-main-heating split (203)/(205)/(207)/(213) 2026-06-03 13:09:43 +00:00
test_fabric_energy_efficiency.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_fuel_cost.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_heat_transmission.py mapper: disambiguate SY system-built from B basement wall (both share code 6) 2026-06-04 19:39:18 +00:00
test_internal_gains.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_mean_internal_temperature.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_mev.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_photovoltaic.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_rating.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_section_cascade_pins.py S0380.206: Eq D1 Q_space uses the DHW boiler's own (204) share, not (202) 2026-06-03 16:10:42 +00:00
test_solar_gains.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_space_cooling.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_space_heating.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_utilisation_factor.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_ventilation.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00
test_water_heating.py Move sap10_calculator tests to tests/domain/sap10_calculator/ for CI 2026-06-02 16:58:00 +00:00