Model/tests/infrastructure/epc_client
Jun-te Kim dee72bbdfa fix(rdsap): §5 (12) floor infiltration falls back to floors[].description
_has_suspended_timber_floor_per_spec only read the Main bp's per-part
floor_construction_type lodgement; the gov-API mapper frequently leaves
that None even when the global epc.floors[].description carries an
explicit "Suspended, ..." observation. _main_floor_u_value already fell
back to this joined description for the U-value calc — the infiltration
rule did not, so a genuinely suspended-timber floor silently entered
(12)=0 instead of 0.2 unsealed. Extracted the shared
_effective_floor_description helper and added a tri-state resolver
(explicit lodgement -> description, excluding "not timber" -> Table 19
footnote-1 age-A/B default) so both paths agree.

Cert 100061275133 (Elmhurst-validated build, PR #1439 handoff): engine
77.24 -> 76.33, now an exact match to lodged (76). Corpus gauge 77.7% ->
77.8% within-0.5, MAE 0.637 -> 0.636; floors ratcheted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 09:12:19 +00:00
..
__init__.py python upgraded due to enum 2026-06-12 15:47:28 +00:00
conftest.py python upgraded due to enum 2026-06-12 15:47:28 +00:00
test_client.py docs(adr): record nearby-postcode broadening (0034) + share HTTP retry primitive 2026-06-23 16:54:06 +00:00
test_mapper_corpus.py python upgraded due to enum 2026-06-12 15:47:28 +00:00
test_mapper_dispatcher.py python upgraded due to enum 2026-06-12 15:47:28 +00:00
test_pv_battery_sap_neutrality.py test(pv-battery): pin SAP cost-neutrality on export-capable standard tariff 2026-06-14 09:51:34 +00:00
test_sap_accuracy_corpus.py fix(rdsap): §5 (12) floor infiltration falls back to floors[].description 2026-07-03 09:12:19 +00:00