Map mechanical_ventilation_kind in the 3 bare-SapVentilation RdSAP mappers 🟥

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Khalim Conn-Kowlessar 2026-06-26 08:12:52 +00:00
parent 3f69c4be02
commit debbbb84f2

View file

@ -2702,3 +2702,30 @@ def test_rdsap_mappers_carry_main_heating_controls_display(
assert result.main_heating_controls is not None assert result.main_heating_controls is not None
assert result.main_heating_controls.description == expected assert result.main_heating_controls.description == expected
@pytest.mark.parametrize(
"schema_cls, mapper, fixture",
[
(RdSapSchema17_1, EpcPropertyDataMapper.from_rdsap_schema_17_1, "17_1.json"),
(RdSapSchema18_0, EpcPropertyDataMapper.from_rdsap_schema_18_0, "18_0.json"),
(RdSapSchema20_0_0, EpcPropertyDataMapper.from_rdsap_schema_20_0_0, "20_0_0.json"),
],
)
def test_rdsap_mappers_map_mechanical_ventilation_kind(
schema_cls: Any, mapper: Any, fixture: str
) -> None:
# Calc-facing: an MVHR cert (mechanical_ventilation=4) must reach the §2
# ventilation cascade as MVHR, not be silently treated as natural. These
# three build a bare SapVentilation(sheltered_sides=…) and dropped the
# top-level mechanical_ventilation; 17.0 + 21.0.1 + full-SAP already map it
# (via _sap_17_1_ventilation / their own wiring). 19.0 + 21.0.0 set no
# sap_ventilation at all — a bigger, separate gap (see followups). Natural
# certs (code 0/5 → None) are unchanged, so the fix only moves genuine
# MEV/MVHR certs (ADR-0037 follow-up).
data = load(fixture)
data["mechanical_ventilation"] = 4
result = mapper(from_dict(schema_cls, data))
assert result.sap_ventilation.mechanical_ventilation_kind == "MVHR"