From 4d14607e7e659bf297637d2a57b5af9a0c7c6f74 Mon Sep 17 00:00:00 2001 From: Jun-te Kim Date: Tue, 16 Jun 2026 18:53:00 +0000 Subject: [PATCH] Add SAP-16.2 schema coverage + single-glazing fix; flat party-wall fix; pin 2 certs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SAP-Schema-16.2 (datatypes/epc/domain/mapper.py): - 16.2 is structurally an RdSAP-17.1 cert under a different name; add _normalize_sap_schema_16_2 (field renames + defaults) and dispatch to the tested from_rdsap_schema_17_1 mapper. uprn_100020933699 maps → SAP 71. - Honour a "Single glazed" windows description when multiple_glazing_type="ND" (was defaulting to double) → RdSAP-21 code 5; eng 72→71 (lodged 70). - 4 regression tests + sap_16_2.json fixture; 0 new pyright errors. Flat party-wall fix (domain/sap10_calculator/worksheet/heat_transmission.py): - Full-SAP flats carry flatness in dwelling_type, not property_type, so the party-wall default fell through to the 0.25 house value instead of the RdSAP Table-15 flat 0.0. Add _is_flat_or_maisonette_dwelling fallback + regression test. uprn_10093116529 80→81 (matches the cert's lodged party u_value 0). Accuracy corpus pins (tests/domain/sap10_calculator/test_real_cert_sap_accuracy.py): - uprn_10093116543 (SAP-17.1 gas-combi semi): engine 81 (Elmhurst 77; documented full-SAP→RdSAP residual — measured wall/floor U + PCDB boiler vs RdSAP defaults). - uprn_10093116529 (SAP-17.1 g/f flat): engine 81 (Elmhurst 78). devcontainer: add poppler-utils (pdfinfo) for the documents-parser PDF fixtures. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../expand-sap-accuracy-corpus/worklist.md | 20 +- .devcontainer/backend/Dockerfile | 7 +- .../uprn_100020933699/elmhurst_inputs.md | 86 ++++ .../uprn_100020933699/epc.json | 310 ++++++++++++++ .../uprn_10093116529/elmhurst_inputs.md | 88 ++++ .../uprn_10093116529/elmhurst_summary.pdf | Bin 0 -> 76640 bytes .../uprn_10093116529/elmhurst_worksheet.pdf | Bin 0 -> 23282 bytes .../SAP-Schema-17.1/uprn_10093116529/epc.json | 390 ++++++++++++++++++ .../uprn_10093116543/elmhurst_summary.pdf | Bin 77579 -> 63530 bytes .../uprn_10093116543/elmhurst_worksheet.pdf | Bin 44600 -> 43097 bytes datatypes/epc/domain/mapper.py | 89 ++++ .../epc/domain/tests/test_from_sap_schema.py | 51 +++ .../epc/schema/tests/fixtures/sap_16_2.json | 310 ++++++++++++++ .../worksheet/heat_transmission.py | 19 +- .../test_real_cert_sap_accuracy.py | 56 +++ .../worksheet/test_heat_transmission.py | 40 ++ 16 files changed, 1460 insertions(+), 6 deletions(-) create mode 100644 backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.2/uprn_100020933699/elmhurst_inputs.md create mode 100644 backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.2/uprn_100020933699/epc.json create mode 100644 backend/epc_api/json_samples/real_life_examples/SAP-Schema-17.1/uprn_10093116529/elmhurst_inputs.md create mode 100644 backend/epc_api/json_samples/real_life_examples/SAP-Schema-17.1/uprn_10093116529/elmhurst_summary.pdf create mode 100644 backend/epc_api/json_samples/real_life_examples/SAP-Schema-17.1/uprn_10093116529/elmhurst_worksheet.pdf create mode 100644 backend/epc_api/json_samples/real_life_examples/SAP-Schema-17.1/uprn_10093116529/epc.json create mode 100644 datatypes/epc/schema/tests/fixtures/sap_16_2.json diff --git a/.claude/skills/expand-sap-accuracy-corpus/worklist.md b/.claude/skills/expand-sap-accuracy-corpus/worklist.md index 7f382483..55134391 100644 --- a/.claude/skills/expand-sap-accuracy-corpus/worklist.md +++ b/.claude/skills/expand-sap-accuracy-corpus/worklist.md @@ -10,12 +10,26 @@ UPRN, tick it and annotate: `— · eng / elm · `. 2020 new-build flat) — full loop proven: eng 77 / elm 78, engine-on-Elmhurst- inputs 79 (calculator faithful within ~1). Use it to sanity-check the pipeline. +## E2E testing set + +UPRNs needed for end-to-end testing (also tracked in The 100 below). + +| UPRN | Schema | Status | Engine SAP | Notes | +|---|---|---|---|---| +| 10093116528 | SAP-17.1 | ✅ pinned | 82 (elm 81) | full-SAP semi; AP50 fix | +| 10093116543 | SAP-17.1 | ✅ pinned | 81 (elm 77) | 2017 gas-combi semi | +| 10093116529 | SAP-17.1 | ✅ pinned | 81 (elm 78) | 2017 gas-combi g/f flat; party-wall fix | +| 100020933699 | SAP-16.2 | 🔧 mapper + glazing fix | 71 (lodged 70) | RdSAP-shaped; single-glazing fix; Elmhurst validation pending | +| 44012843 | — | ☐ todo | — | not yet processed | +| 10023444324 | — | ☐ todo | — | not yet processed | +| 10023444320 | — | ☐ todo | — | not yet processed | + ## The 100 - [x] 🔧 10093116528 — SAP-17.1 (full-SAP semi) · eng 82 / elm 81 · 🔧 air-perm AP50 fix: q50 Blower-Door routed to (18)=AP50/20 not the AP4/Pulse formula (was eng 78). Residual +1 = lodged-U vs RdSAP age-band-U; FGHRS (60031) omitted both sides. Worked-ref 10092973954 re-pinned 77→80 by same fix. -- [ ] 10093116543 -- [ ] 10093116529 -- [ ] 100020933699 +- [x] 10093116543 — SAP-17.1 (2017 gas-combi semi) · eng 81 / elm 77 (lodged 82) · PINNED engine 81. +4 = documented full-SAP→RdSAP residual, NOT a mapper bug: ~1.5 floor-U (cert lodges measured 0.11 vs Elmhurst RdSAP solid default 0.23; U-known override disabled) + ~1 boiler-eff (cert PCDB 17644 88.5% vs Elmhurst generic BGW combi 84%; PCDB search disabled, 89% cascade option is a regular boiler needing a cylinder) + ~0.5 roof band-L/infil. Conservatory leftover from prior cert cleared (worksheet 73→77). No mapper change. +- [x] 🔧 10093116529 — SAP-17.1 (2017 gas-combi ground-floor FLAT, TFA 49) · eng 81 / elm 78 (lodged 81) · PINNED engine 81. 🔧 FIXED a real calc bug: full-SAP flats took the 0.25 house party-wall default instead of the RdSAP Table-15 flat 0.0 (flatness is in dwelling_type, not property_type) — heat_transmission._is_flat_or_maisonette_dwelling; +regression test. Cert lodges party u_value 0; Elmhurst worksheet 0.0; fix 80→81. Residual +3 vs Elmhurst = documented full-SAP→RdSAP gap (measured wall 0.184/floor 0.12 + PCDB 88.5% vs generic 84%). Calculator faithful: fed Elmhurst's Us, HTC 93.4 vs ~94. House→Flat Elmhurst switch (storeys→1, roof→another-dwelling-above). No mapper change. +- [ ] 🔧 100020933699 — SAP-16.2 SCHEMA COVERAGE ADDED (end-terrace house, band G). 16.2 is structurally RdSAP-17.1 (reduced fields, glazed_area band, construction-code building parts) under a different name; mapped via `_normalize_sap_schema_16_2` (renames windows→window, main_gas→mains_gas, boiler_index_number→main_heating_index_number, wwhrs→instantaneous_wwhrs + defaults) → reuses from_rdsap_schema_17_1. 🔧 Also fixed: "Single glazed" description honoured when multiple_glazing_type="ND" (was defaulting to double; RdSAP-21 code 5) → eng 72→71. +4 regression tests, sap_16_2.json fixture, 0 new pyright errors. eng 71 / lodged 70. ⚠ Known gap: 16.2 lodges no party_wall_length → end-terrace party wall unmodelled (likely the residual +1). ⏳ Elmhurst build (partial: PropDesc/Dims/Walls/Roofs done) + pin still pending. - [ ] 44012843 - [ ] 10023444324 - [ ] 10092970673 diff --git a/.devcontainer/backend/Dockerfile b/.devcontainer/backend/Dockerfile index 1514f78f..f9fa2902 100644 --- a/.devcontainer/backend/Dockerfile +++ b/.devcontainer/backend/Dockerfile @@ -6,11 +6,14 @@ ARG USER_UID=1000 ARG USER_GID=1000 ARG DEBIAN_FRONTEND=noninteractive -# 1) Toolchain + utilities for building libpostal, plus LazyVim deps +# 1) Toolchain + utilities for building libpostal, plus LazyVim deps. +# poppler-utils provides `pdfinfo`, required by backend/documents_parser (the +# Elmhurst Input-Summary / SAP-worksheet PDF fixtures in the SAP corpus tests +# shell out to it). RUN apt-get update && apt-get install -y --no-install-recommends \ sudo jq vim curl git ca-certificates wget \ build-essential pkg-config automake autoconf libtool \ - ripgrep fd-find make unzip bash-completion \ + ripgrep fd-find make unzip bash-completion poppler-utils \ && rm -rf /var/lib/apt/lists/* # 1b) Headed-browser viewer stack for the hyde Elmhurst automation. diff --git a/backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.2/uprn_100020933699/elmhurst_inputs.md b/backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.2/uprn_100020933699/elmhurst_inputs.md new file mode 100644 index 00000000..6644ffaa --- /dev/null +++ b/backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.2/uprn_100020933699/elmhurst_inputs.md @@ -0,0 +1,86 @@ +# Elmhurst RdSAP inputs — UPRN 100020933699 (cert 9548-2053-6299-9947-0950, SAP-Schema-16.2) + +**Lodged SAP:** 70 **Our engine:** 72 (continuous 72.29) ← compare Elmhurst against the engine +**Property:** End-terrace HOUSE, age band G (1983–1990), mains-gas regular boiler + cylinder, TFA 62 m² + +**Schema note:** SAP-Schema-16.2 is RdSAP-shaped (reduced-field) — mapped via `_normalize_sap_schema_16_2` → RdSAP-17.1 mapper. This is a REDUCED-FIELD cert (descriptions + glazed-area band, no measured U-values), so unlike the 17.1 new-builds the engine and Elmhurst should both use RdSAP age-band/description U-values — expect a TIGHTER agreement. + +**Known divergences / gaps to watch:** +- **Party wall:** 16.2 does not lodge `party_wall_length`; the normalizer defaults it to 0, so the engine currently models NO party wall. An end-terrace HAS one party wall — Elmhurst will model it. **This is the likely main divergence; check the worksheet party-wall line.** +- Age band G → Elmhurst on-screen band **G 1983-1990**. + +## Property Description +| Elmhurst field | Value | Notes | +|---|---|---| +| Property Type | **House** | dwelling_type "End-terrace house" (switch from FLAT — prior cert) | +| Built form | **End-Terrace** | built_form 3 | +| Age band | **G 1983-1990** | construction_age_band G | +| Storeys | 2 | floor 0 + floor 1 | +| Habitable rooms | 4 | habitable_room_count 4 | + +## Dimensions +| Elmhurst field | Value | Notes | +|---|---|---| +| Ground floor area | 31.06 m² | floor 0 | +| First floor area | 31.06 m² | floor 1 | +| Room height (ground / first) | 2.40 / 2.65 m | room_height | +| Heat-loss perimeter (each) | 15.8 m | heat_loss_perimeter | +| Party-wall length (each) | **see note** | 16.2 lodges none; for an end-terrace enter the real party-wall length if Elmhurst derives it from built-form, else note the divergence | + +## Walls +| Elmhurst field | Value | Notes | +|---|---|---| +| Construction | Cavity | wall_construction 4 | +| Insulation | **Filled** | wall_insulation_type 2 = filled cavity ("Cavity wall, filled cavity") | +| Thickness | 280 mm | wall_thickness | +| Party wall | Present (End-Terrace) — Unable to determine | built_form 3 | + +## Roofs +| Elmhurst field | Value | Notes | +|---|---|---| +| Type | Pitched, access to loft | roof_construction 4 | +| Insulation at | Joists | roof_insulation_location 2 | +| Thickness | 100 mm | roof_insulation_thickness "100mm" | + +## Floors +| Elmhurst field | Value | Notes | +|---|---|---| +| Location / type | Ground floor / Solid | floor_construction 1 | +| Insulation | **None** | "Solid, no insulation (assumed)" | + +## Openings +| Elmhurst field | Value | Notes | +|---|---|---| +| Windows | **Single glazed**, glazed-area band Normal | glazed_area 1, multiple_glazing_type ND, "Single glazed" | +| Doors | **2 doors, uninsulated** | door_count 2, insulated_door_count 0 (high U — solid/older doors) | + +## Ventilation & Lighting +| Elmhurst field | Value | Notes | +|---|---|---| +| Ventilation | Natural | no MV; no air-permeability test lodged (ap50/ap4 None) | +| Extract fans / flues | 0 / 0 | none lodged; open chimneys 0 | +| Sheltered sides | 1 | sheltered_sides 1 | +| Air Pressure Test | **None** (do NOT enter Blower Door) | no test lodged — leave method blank | +| Lighting | 22% low-energy | low_energy 2 / total 9 outlets | + +## Space Heating +| Elmhurst field | Value | Notes | +|---|---|---| +| Main heating | Mains gas **regular boiler + radiators** | fuel 26, emitter 1, control 2106, fan-assisted flue, PCDB 10321. NOT a combi — has a cylinder → use the BGB regular condensing/non-condensing cascade option (per age band G, likely non-condensing) | +| Secondary | None | secondary "None" | + +## Water Heating +| Elmhurst field | Value | Notes | +|---|---|---| +| Water heating | From main (901), gas | water_heating_fuel 26 | +| Hot water cylinder | **Present** — 110 L (Normal), Foam, 25 mm | has_hot_water_cylinder True, cylinder_size 2, insulation type 1 (foam) 25 mm | +| Solar / WWHRS / FGHRS | None | — | + +## Fields to clear in Elmhurst (do NOT map) +| Elmhurst field | Set to | Why absent | +|---|---|---| +| Flats page | (gone — House now) | switch from prior FLAT cert | +| Conservatory | none / uncheck | not lodged | +| Air Pressure Test method | **blank** | no test lodged (prior certs had Blower Door — CLEAR it) | +| Main Heating 2 / Secondary | none | single system | +| PV / Wind / Hydro | none | none lodged | diff --git a/backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.2/uprn_100020933699/epc.json b/backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.2/uprn_100020933699/epc.json new file mode 100644 index 00000000..b8193954 --- /dev/null +++ b/backend/epc_api/json_samples/real_life_examples/SAP-Schema-16.2/uprn_100020933699/epc.json @@ -0,0 +1,310 @@ +{ + "uprn": 100020933699, + "roofs": [ + { + "description": "Pitched, 100 mm loft insulation", + "energy_efficiency_rating": 3, + "environmental_efficiency_rating": 3 + } + ], + "walls": [ + { + "description": "Cavity wall, filled cavity", + "energy_efficiency_rating": 4, + "environmental_efficiency_rating": 4 + } + ], + "floors": [ + { + "description": "Solid, no insulation (assumed)", + "energy_efficiency_rating": 0, + "environmental_efficiency_rating": 0 + } + ], + "status": "entered", + "tenure": 2, + "windows": [ + { + "description": "Single glazed", + "energy_efficiency_rating": 1, + "environmental_efficiency_rating": 1 + } + ], + "lighting": { + "description": "Low energy lighting in 22% of fixed outlets", + "energy_efficiency_rating": 2, + "environmental_efficiency_rating": 2 + }, + "postcode": "SE18 2PE", + "hot_water": { + "description": "From main system", + "energy_efficiency_rating": 4, + "environmental_efficiency_rating": 4 + }, + "post_town": "LONDON", + "built_form": 3, + "created_at": "2013-01-14 15:52:33.000000", + "door_count": 2, + "glazed_area": 1, + "region_code": 17, + "report_type": 2, + "sap_heating": { + "wwhrs": { + "rooms_with_bath_and_or_shower": 1, + "rooms_with_mixer_shower_no_bath": 0, + "rooms_with_bath_and_mixer_shower": 0 + }, + "cylinder_size": 2, + "water_heating_code": 901, + "water_heating_fuel": 26, + "cylinder_thermostat": "Y", + "main_heating_details": [ + { + "has_fghrs": "N", + "main_fuel_type": 26, + "boiler_flue_type": 2, + "fan_flue_present": "Y", + "heat_emitter_type": 1, + "boiler_index_number": 10321, + "main_heating_number": 1, + "main_heating_control": 2106, + "main_heating_category": 2, + "main_heating_fraction": 1, + "main_heating_data_source": 1 + } + ], + "cylinder_insulation_type": 1, + "has_fixed_air_conditioning": "false", + "cylinder_insulation_thickness": 25 + }, + "sap_version": 9.91, + "schema_type": "SAP-Schema-16.2", + "uprn_source": "Energy Assessor", + "country_code": "EAW", + "main_heating": [ + { + "description": "Boiler and radiators, mains gas", + "energy_efficiency_rating": 4, + "environmental_efficiency_rating": 4 + } + ], + "dwelling_type": "End-terrace house", + "language_code": 1, + "property_type": 0, + "address_line_1": "1, Acland Close", + "schema_version": "LIG-16.1", + "assessment_type": "RdSAP", + "completion_date": "2013-01-14", + "inspection_date": "2013-01-14", + "extensions_count": 0, + "measurement_type": 1, + "total_floor_area": 62, + "transaction_type": 8, + "conservatory_type": 1, + "heated_room_count": 4, + "registration_date": "2013-01-14", + "restricted_access": 0, + "sap_energy_source": { + "main_gas": "Y", + "meter_type": 2, + "photovoltaic_supply": { + "percent_roof_area": 0 + }, + "wind_turbines_count": 0, + "wind_turbines_terrain_type": 2 + }, + "secondary_heating": { + "description": "None", + "energy_efficiency_rating": 0, + "environmental_efficiency_rating": 0 + }, + "sap_building_parts": [ + { + "identifier": "Main Dwelling", + "wall_dry_lined": "N", + "wall_thickness": 280, + "floor_heat_loss": 7, + "roof_construction": 4, + "wall_construction": 4, + "building_part_number": 1, + "sap_floor_dimensions": [ + { + "floor": 0, + "room_height": 2.4, + "floor_insulation": 1, + "total_floor_area": 31.06, + "floor_construction": 1, + "heat_loss_perimeter": 15.8 + }, + { + "floor": 1, + "room_height": 2.4, + "total_floor_area": 31.06, + "heat_loss_perimeter": 15.8 + } + ], + "wall_insulation_type": 2, + "construction_age_band": "G", + "wall_thickness_measured": "Y", + "roof_insulation_location": 2, + "roof_insulation_thickness": "100mm" + } + ], + "low_energy_lighting": 22, + "solar_water_heating": "N", + "bedf_revision_number": 333, + "habitable_room_count": 4, + "heating_cost_current": { + "value": 370, + "currency": "GBP" + }, + "insulated_door_count": 0, + "co2_emissions_current": 2.2, + "energy_rating_average": 60, + "energy_rating_current": 70, + "lighting_cost_current": { + "value": 66, + "currency": "GBP" + }, + "main_heating_controls": [ + { + "description": "Programmer, room thermostat and TRVs", + "energy_efficiency_rating": 4, + "environmental_efficiency_rating": 4 + } + ], + "multiple_glazing_type": "ND", + "open_fireplaces_count": 0, + "has_hot_water_cylinder": "true", + "heating_cost_potential": { + "value": 296, + "currency": "GBP" + }, + "hot_water_cost_current": { + "value": 106, + "currency": "GBP" + }, + "mechanical_ventilation": 0, + "percent_draughtproofed": 100, + "suggested_improvements": [ + { + "sequence": 1, + "typical_saving": { + "value": 27, + "currency": "GBP" + }, + "indicative_cost": "\u00a3800 - \u00a31,200", + "improvement_type": "W", + "improvement_details": { + "improvement_number": 47 + }, + "improvement_category": 5, + "energy_performance_rating": 71, + "environmental_impact_rating": 73 + }, + { + "sequence": 2, + "typical_saving": { + "value": 26, + "currency": "GBP" + }, + "indicative_cost": "\u00a335", + "improvement_type": "E", + "improvement_details": { + "improvement_number": 35 + }, + "improvement_category": 5, + "energy_performance_rating": 72, + "environmental_impact_rating": 74 + }, + { + "sequence": 3, + "typical_saving": { + "value": 33, + "currency": "GBP" + }, + "indicative_cost": "\u00a34,000 - \u00a36,000", + "improvement_type": "N", + "improvement_details": { + "improvement_number": 19 + }, + "improvement_category": 5, + "energy_performance_rating": 74, + "environmental_impact_rating": 76 + }, + { + "sequence": 4, + "typical_saving": { + "value": 52, + "currency": "GBP" + }, + "indicative_cost": "\u00a33,300 - \u00a36,500", + "improvement_type": "O", + "improvement_details": { + "improvement_number": 8 + }, + "improvement_category": 5, + "energy_performance_rating": 77, + "environmental_impact_rating": 80 + }, + { + "sequence": 5, + "typical_saving": { + "value": 236, + "currency": "GBP" + }, + "indicative_cost": "\u00a39,000 - \u00a314,000", + "improvement_type": "U", + "improvement_details": { + "improvement_number": 34 + }, + "improvement_category": 5, + "energy_performance_rating": 89, + "environmental_impact_rating": 92 + }, + { + "sequence": 6, + "typical_saving": { + "value": 19, + "currency": "GBP" + }, + "indicative_cost": "\u00a31,500 - \u00a34,000", + "improvement_type": "V", + "improvement_details": { + "improvement_number": 44 + }, + "improvement_category": 5, + "energy_performance_rating": 90, + "environmental_impact_rating": 92 + } + ], + "co2_emissions_potential": 0.5, + "energy_rating_potential": 90, + "lighting_cost_potential": { + "value": 37, + "currency": "GBP" + }, + "hot_water_cost_potential": { + "value": 72, + "currency": "GBP" + }, + "renewable_heat_incentive": { + "water_heating": 2577, + "impact_of_loft_insulation": -309, + "space_heating_existing_dwelling": 5864 + }, + "seller_commission_report": "Y", + "energy_consumption_current": 189, + "has_fixed_air_conditioning": "false", + "multiple_glazed_proportion": 0, + "calculation_software_version": 8.0, + "energy_consumption_potential": 36, + "environmental_impact_current": 71, + "fixed_lighting_outlets_count": 9, + "current_energy_efficiency_band": "C", + "environmental_impact_potential": 92, + "has_heated_separate_conservatory": "false", + "potential_energy_efficiency_band": "B", + "co2_emissions_current_per_floor_area": 36, + "low_energy_fixed_lighting_outlets_count": 2 +} \ No newline at end of file diff --git a/backend/epc_api/json_samples/real_life_examples/SAP-Schema-17.1/uprn_10093116529/elmhurst_inputs.md b/backend/epc_api/json_samples/real_life_examples/SAP-Schema-17.1/uprn_10093116529/elmhurst_inputs.md new file mode 100644 index 00000000..fb47fb67 --- /dev/null +++ b/backend/epc_api/json_samples/real_life_examples/SAP-Schema-17.1/uprn_10093116529/elmhurst_inputs.md @@ -0,0 +1,88 @@ +# Elmhurst RdSAP inputs — UPRN 10093116529 (cert 8178-7436-5600-9809-0906, SAP-Schema-17.1) + +**Lodged SAP:** 81 **Our engine:** 80 (continuous 80.22) ← compare Elmhurst against the engine +**Property:** ground-floor FLAT, 2017 build, mains-gas combi, TFA 49.0 m² + +**Known divergences (flag, don't tune) — same full-SAP→RdSAP pattern as uprn_10093116543:** +- **Walls/floor measured U:** cert lodges measured U (wall 0.184, floor 0.12); engine uses them, Elmhurst RdSAP forces band-L defaults (~0.28 / ~0.23). Expected residual. +- **Boiler:** cert PCDB 17644 (88.5%); Elmhurst PCDB search disabled → generic BGW combi 84%. +- **Age band:** engine 'M', build year 2017 → enter Elmhurst band **L (2012–2022)**. + +## Property Description +| Elmhurst field | Value | Notes | +|---|---|---| +| Property Type | **Flat** | dwelling_type "Ground-floor flat" — SWITCH from House (prior cert) | +| Built form | (flat — N/A) | — | +| Age band | **L (2012–2022)** | construction_year 2017 | +| Habitable rooms | 2 | habitable_rooms_count 2 | +| Storeys | 1 | single-storey flat | + +## Flats +| Elmhurst field | Value | Notes | +|---|---|---| +| Position of flat | Ground Floor | ground-floor flat | +| Floor level | 0 | ground = storey 0 | +| Corridor | **None** (all-exposed) | the "to corridor" wall is keyed as a semi-exposed wall element instead — see Walls. Avoids the sheltered-alt-wall validation trap. | + +## Dimensions +| Elmhurst field | Value | Notes | +|---|---|---| +| Lowest-floor area | 49.03 m² | floor dim[0] | +| Room height | 2.60 m | room_height_m | +| Heat-loss perimeter | 28.45 m | heat_loss_perimeter_m | +| Party-wall length | 4.34 m | party_wall_length_m | + +## Walls +| Elmhurst field | Value | Notes | +|---|---|---| +| Main wall | Cavity / As Built | wall_construction 4; cert lodges measured U 0.184 (Elmhurst RdSAP default ~0.28) | +| Wall area (external) | 56.6 m² | Wall 1 "External" | +| "To corridor" wall | semi-exposed, 17.37 m², U 0.15 | Wall 3 (type 3). Heat loss to unheated corridor — key as an alternative/sheltered wall if Elmhurst allows; else note divergence. | +| Party wall | Present, **U Unable to determine** | Wall 2 (type 4) area 11.28; party_walls_w_per_k 2.82 | + +## Roofs +| Elmhurst field | Value | Notes | +|---|---|---| +| Roof type | **A Another dwelling above** | ground-floor flat → roof_w_per_k = 0 | + +## Floors +| Elmhurst field | Value | Notes | +|---|---|---| +| Location | Ground floor | floor_type 2 | +| Type / insulation | Solid / As built | cert lodges measured U 0.12 (Elmhurst RdSAP ~0.23) | + +## Openings +| Elmhurst field | Value | Notes | +|---|---|---| +| Windows (combined) | ~24.9 m², East, Double post-2022 | 7 synth windows; U 1.4 / g 0.72 / frame 0.7 | +| Doors | 1 insulated, U 1.6 | door_count 1 | + +## Ventilation & Lighting +| Elmhurst field | Value | Notes | +|---|---|---| +| Ventilation | Natural + 2 intermittent extract fans | extract_fans_count 2 | +| Air Pressure Test | Blower Door, **3.45** (+ cert number) | air_permeability_ap50 3.45 | +| Sheltered sides | 2 | sheltered_sides 2 | +| Lighting | 100% low-energy | 10 bulbs, all low-energy | + +## Space Heating +| Elmhurst field | Value | Notes | +|---|---|---| +| Main heating | Mains gas condensing **combi** (generic BGW 84% substitute) | fuel 1, emitter radiators, control 2110, fan-assisted balanced flue, PCDB 17644 (88.5% — can't enter) | +| Secondary | None | — | + +## Water Heating +| Elmhurst field | Value | Notes | +|---|---|---| +| Water heating | From main (combi), gas | code 901; no cylinder | +| Solar / WWHRS / FGHRS | None | — | + +## Fields to clear in Elmhurst (do NOT map) +| Elmhurst field | Set to | Why absent | +|---|---|---| +| Property Description · extensions / room-in-roof | blank | none | +| Dimensions · 1st-floor row | clear | single-storey flat (was 2-storey house) | +| Conservatory | none / uncheck | not lodged (CLEAR — prior-cert leftover risk) | +| Space Heating · Main Heating 2 / Secondary | none | single main system | +| Water Heating · cylinder | none | combi | +| New Tech · PV / Wind / Hydro | none | none lodged | diff --git a/backend/epc_api/json_samples/real_life_examples/SAP-Schema-17.1/uprn_10093116529/elmhurst_summary.pdf b/backend/epc_api/json_samples/real_life_examples/SAP-Schema-17.1/uprn_10093116529/elmhurst_summary.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fbf7d74d31b4452f447e47e13f13513fb431c776 GIT binary patch literal 76640 zcmeF)1ymeCqA=S{iUQb|mLfrXJBfrXTr)Y`zDkB>>!)y9ZPRNq10 z!rFvMN#DfCo|N_Rpt68~k(J?N5QL|9{~_p~AWWjxj#dt&989uihW1)4Tu&#Evhe&_ zu|CDEOv=jkZ!3U~crmfl0;Dz~Lz)(w2`oU;>#LI+&8OGBYzt z8JU@wI*_uku|FnhVQr^kqyNE(NzBN}?1PcAqzIFUnS;HOk)5curH!?f(PNglnH2Ob zALC(Wk}$JyFtTHku+Vof5;OW>ZD_MYE4P4vy@Q>Rz9qu@fCC+PdsWGp z`&{IUfpX4o`!0cwXclN|w)^2k16>{aF5U0-ghWItQ4EO)4IG|{-~>@15@o$4+HTf- zkv%zKUNq5^3D(?DR-4>&^L)m7E*|hwaH6>E>!q5yF;Q}Fp5K3XwXbw3@ZGy^oSUey zSvQcQv=D{|C5mh@zN`0ua70Tr9^ms3T7441J^Bu(9D)T7X*~GKL#RH`0*F)pN}fG`V84yfHfq>-wA3J8-Lg z6*6~nl}Yz;qh)b-*E6ijksGV7<=Ux6KVbl7}=--PM%vJpX2oxtsex4TQFAS0ycey8r_ zc&tsv@S_QJ*g1>7jT1`CjfHuj^3C=uuZ7Ld^Y{C$zoJ`I7m&dwr$ z{Gtd+zmAz*@p$V(sIp`;!{viHufH_!%;2u%Cw}~h*M;f&vhnSd4d}=t)uEsS!84{) zlUAtv?z#?i;)Z<;QrLT>?aHp>M&0m-zsMs%If1wjCEOKHy3TE-r z9`Ay7PD96*_VArneW;yVi^qZvlHAA%Qt6w`SSsu7ZJt?muZ2Z(@SyhL&7qFP@jz%c zL~Nip)WB;^-}fGR7X1E(5(&b@k8}LK?y6vq_X-vQn)n64STa-xjFut_*w^ktNA# z*-WBAQad|zT>>?m6IZQKLS}ght@{0%t>ni{yKW}VpE!*pLFJPB;*?0pji;^~jt@}s zY8~0z_?dFV;mr>FbM#8i4>#`TrI^r^N$DEkg*^f!h?t&RFgttA2tSM3+)OD{V-%)@ zk7r`Rq5Vg2w(QKcheHKi{rK3fCVO=gUf2o=^UT==F^_XESlpGHef7apuvyj6x}>7< z`q;y3Zu|Yi*_(Z_=z3}@-fpU|y!H172H87b<|M$=PGuZcj_1lNOl@J1$;pk(_J`}n zp3^>EY*@z`C!&V;Ng*d?KVm@k{qz<_7ryTJGJ)FI3zQN$l=lt?LPEu{p#GLZbr73z ziQ0<~j3SAfU<#a#=9P z8SB@!C9BCVZ%A;Ee_9w;<1)Rn>O)PpHuqxZ`^x8EX)@RK-6eirYbMp?#@m4`ZFfR1 z3N{O^hx56^*c$e+nojKfYHs$Z#dl-WghqqGAHT8b-MXEfUv_ej57HFEx|D%_C{M_x zf_`vC3|=3pS2@peb;BS)6ymkN&3}_h1(nq4jE@@WZk47JncA*}$tpFrN2?iOy+7Uk z37wlP2pg2m2$uUec|>+CBG$j(B`22 zx;;0JNkqD9J-@>z=j^e>O}6TPZRCKI?QICj)>t(2XI;>@ylD93rjhvJu_~U9ONNK6 zp6E2KC{+dXr?IJ?tOTuiDOnS5VI4i@pJ$S3r^{x;vWsb)EB(F z&WgCtQyEe=Hg2O|zS=0hJ~DQ$3errUnkGE!{O;OWhQHu3_MtCQ;I^{MX$xiNrh4ds z?hfo)_^VG$RTjG+qx{=vvo=hOn=b{Fu~FaqbZ-hwRB&z%ei4EvFKJ8cPXH|><_ z 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 MhfoU$z_nEV1<+dG-2eap literal 0 HcmV?d00001 diff --git a/backend/epc_api/json_samples/real_life_examples/SAP-Schema-17.1/uprn_10093116529/elmhurst_worksheet.pdf b/backend/epc_api/json_samples/real_life_examples/SAP-Schema-17.1/uprn_10093116529/elmhurst_worksheet.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dbfd34b9591c07a670f34a34deeef7ad429508a3 GIT binary patch literal 23282 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 Jqokw!{{T78eH8!z delta 7429 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

+-g=j!O!(V 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 EUzu`YJOBUy literal 44600 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 diff --git a/datatypes/epc/domain/mapper.py b/datatypes/epc/domain/mapper.py index e4170d27..7028274c 100644 --- a/datatypes/epc/domain/mapper.py +++ b/datatypes/epc/domain/mapper.py @@ -1,3 +1,4 @@ +import copy import re from dataclasses import replace from datetime import date @@ -2552,6 +2553,19 @@ class EpcPropertyDataMapper: return EpcPropertyDataMapper.from_sap_schema_17_1( from_dict(SapSchema17_1, data) ) + if schema == "SAP-Schema-16.2": + # SAP-Schema-16.2 is structurally an RdSAP-17.1 cert (reduced fields, + # glazed_area band, construction-code building parts) under a different + # name + a handful of renamed/omitted fields — normalise it onto the + # RdSAP-17.1 shape and reuse that tested mapper. See + # `_normalize_sap_schema_16_2`. + from datatypes.epc.schema.rdsap_schema_17_1 import RdSapSchema17_1 + + return _clear_basement_flag_when_system_built( + EpcPropertyDataMapper.from_rdsap_schema_17_1( + from_dict(RdSapSchema17_1, _normalize_sap_schema_16_2(data)) + ) + ) raise ValueError(f"Unsupported EPC schema: {schema!r}") @@ -3008,6 +3022,81 @@ def _default_missing_post_town(data: Dict[str, Any]) -> Dict[str, Any]: return {**data, "post_town": ""} +def _normalize_sap_schema_16_2(data: Dict[str, Any]) -> Dict[str, Any]: + """Rewrite a `SAP-Schema-16.2` API doc onto the `RdSAP-Schema-17.1` shape so + it can reuse the tested `from_rdsap_schema_17_1` mapper. + + Despite the "SAP-Schema" name, 16.2 is structurally an RdSAP cert (reduced + fields: a `glazed_area` *band* not measured openings, construction-code + building parts, `main_gas`/`meter_type` energy source, a PCDB boiler index). + It differs from RdSAP-17.1 only by a handful of field names plus three + fields it omits: + * top-level `windows` (list) → `window` (first element); + `schema_version` → `schema_version_original` + * sap_heating `wwhrs` → `instantaneous_wwhrs` (identical shape); + `immersion_heating_type` defaulted (16.2 omits it — gas cert) + * main_heating_details[] `boiler_index_number` → `main_heating_index_number` + (preserves PCDB efficiency); `emitter_temperature` defaulted + * sap_floor_dimensions[] `party_wall_length` defaulted to 0 (16.2 does not + lodge it — note: party-wall heat loss is then unmodelled) + * sap_energy_source `main_gas` → `mains_gas` + + Mirrors `_normalize_shower_outlets` — mutates a deep copy, never the + caller's dict. Defaults use setdefault so a 16.2 cert that *does* carry the + RdSAP-17.1 name is left untouched. + """ + d: Dict[str, Any] = copy.deepcopy(data) + + def _dicts(value: Any) -> List[Dict[str, Any]]: + """The dict elements of `value` when it is a list, else [].""" + if not isinstance(value, list): + return [] + items: List[Any] = cast(List[Any], value) + return [cast(Dict[str, Any], x) for x in items if isinstance(x, dict)] + + windows: Any = d.get("windows") + if isinstance(windows, list) and windows: + window_list: List[Any] = cast(List[Any], windows) + d.setdefault("window", window_list[0]) + d.setdefault("schema_version_original", d.get("schema_version", "")) + + # 16.2 lodges glazing in BOTH `multiple_glazing_type` (frequently the "ND" + # not-defined sentinel) AND the windows[].description. When the numeric field + # is undefined, honour an explicit "Single glazed" description so it is not + # defaulted to double — RdSAP-21 code 5 = single glazing (cascade single + # slot, U≈4.8). Otherwise keep the ND→double-modal default the cascade uses. + glazing_type: Any = d.get("multiple_glazing_type") + if not isinstance(glazing_type, int): + window: Any = d.get("window") + description = "" + if isinstance(window, dict): + description = str(cast(Dict[str, Any], window).get("description") or "").lower() + if "single" in description: + d["multiple_glazing_type"] = 5 + + sap_heating: Any = d.get("sap_heating") + if isinstance(sap_heating, dict): + heating: Dict[str, Any] = cast(Dict[str, Any], sap_heating) + if "wwhrs" in heating: + heating.setdefault("instantaneous_wwhrs", heating["wwhrs"]) + heating.setdefault("immersion_heating_type", None) + for mh in _dicts(heating.get("main_heating_details")): + if "boiler_index_number" in mh: + mh.setdefault("main_heating_index_number", mh["boiler_index_number"]) + mh.setdefault("emitter_temperature", None) + + for bp in _dicts(d.get("sap_building_parts")): + for fd in _dicts(bp.get("sap_floor_dimensions")): + fd.setdefault("party_wall_length", 0) + + energy_source: Any = d.get("sap_energy_source") + if isinstance(energy_source, dict): + source: Dict[str, Any] = cast(Dict[str, Any], energy_source) + if "main_gas" in source: + source.setdefault("mains_gas", source["main_gas"]) + return d + + def _count_shower_outlets_by_type( schema_shower_outlets: Any, target_type: int, diff --git a/datatypes/epc/domain/tests/test_from_sap_schema.py b/datatypes/epc/domain/tests/test_from_sap_schema.py index f9351340..8f5d3ab1 100644 --- a/datatypes/epc/domain/tests/test_from_sap_schema.py +++ b/datatypes/epc/domain/tests/test_from_sap_schema.py @@ -376,3 +376,54 @@ class TestFromSapSchema17_1Perimeter: schema = from_dict(SapSchema17_1, data) with pytest.raises(UnmappedApiCode): EpcPropertyDataMapper.from_sap_schema_17_1(schema) + + +class TestFromSapSchema16_2: + """SAP-Schema-16.2 — structurally an RdSAP-17.1 cert under a different name + + a few renamed/omitted fields. `from_api_response` normalises it onto the + RdSAP-17.1 shape (`_normalize_sap_schema_16_2`) and reuses that mapper. + Regression for uprn_100020933699 (cert 9548-…-0950, End-terrace house).""" + + def test_16_2_dispatches_and_maps_via_rdsap_17_1(self) -> None: + # Arrange / Act — the raw 16.2 doc must dispatch (no "Unsupported + # schema") and map all the renamed seams: windows→window, + # main_gas→mains_gas, boiler_index_number→main_heating_index_number, + # wwhrs→instantaneous_wwhrs. + epc = EpcPropertyDataMapper.from_api_response(load("sap_16_2.json")) + + # Assert — identity + the seams that would silently drop on a bad rename. + assert isinstance(epc, EpcPropertyData) + assert epc.uprn == 100020933699 + assert epc.total_floor_area_m2 == 62.0 + assert epc.dwelling_type == "End-terrace house" + mh = epc.sap_heating.main_heating_details[0] + assert mh.main_fuel_type == 26 # mains gas + # boiler_index_number must survive as the PCDB index (efficiency source). + assert mh.main_heating_index_number == 10321 + + def test_16_2_produces_a_sap_score(self) -> None: + # The mapped cert must run end-to-end through the SAP-10 engine. + from domain.sap10_calculator.calculator import Sap10Calculator + + epc = EpcPropertyDataMapper.from_api_response(load("sap_16_2.json")) + result = Sap10Calculator().calculate(epc) + # Lodged 70; engine produces 71 (Elmhurst validation still pending). + assert result.sap_score == 71 + + def test_16_2_single_glazed_description_honoured_over_nd(self) -> None: + # 16.2 lodges multiple_glazing_type "ND" but a "Single glazed" windows + # description; the normaliser must route to single glazing (cascade slot + # 1, U≈4.8) not the ND→double default — else single-glazed older certs + # over-rate. Regression for uprn_100020933699. + epc = EpcPropertyDataMapper.from_api_response(load("sap_16_2.json")) + assert epc.sap_windows, "expected synthesised windows" + assert epc.sap_windows[0].glazing_type == 1 # cascade single-glazing slot + + def test_16_2_normalizer_does_not_mutate_caller_dict(self) -> None: + # Mirror _normalize_shower_outlets' contract: the caller's dict is + # untouched (deep copy), so a re-dispatch sees the original shape. + data = load("sap_16_2.json") + before_keys = set(data.keys()) + EpcPropertyDataMapper.from_api_response(data) + assert "window" not in data # the rename landed only on the copy + assert set(data.keys()) == before_keys diff --git a/datatypes/epc/schema/tests/fixtures/sap_16_2.json b/datatypes/epc/schema/tests/fixtures/sap_16_2.json new file mode 100644 index 00000000..b8193954 --- /dev/null +++ b/datatypes/epc/schema/tests/fixtures/sap_16_2.json @@ -0,0 +1,310 @@ +{ + "uprn": 100020933699, + "roofs": [ + { + "description": "Pitched, 100 mm loft insulation", + "energy_efficiency_rating": 3, + "environmental_efficiency_rating": 3 + } + ], + "walls": [ + { + "description": "Cavity wall, filled cavity", + "energy_efficiency_rating": 4, + "environmental_efficiency_rating": 4 + } + ], + "floors": [ + { + "description": "Solid, no insulation (assumed)", + "energy_efficiency_rating": 0, + "environmental_efficiency_rating": 0 + } + ], + "status": "entered", + "tenure": 2, + "windows": [ + { + "description": "Single glazed", + "energy_efficiency_rating": 1, + "environmental_efficiency_rating": 1 + } + ], + "lighting": { + "description": "Low energy lighting in 22% of fixed outlets", + "energy_efficiency_rating": 2, + "environmental_efficiency_rating": 2 + }, + "postcode": "SE18 2PE", + "hot_water": { + "description": "From main system", + "energy_efficiency_rating": 4, + "environmental_efficiency_rating": 4 + }, + "post_town": "LONDON", + "built_form": 3, + "created_at": "2013-01-14 15:52:33.000000", + "door_count": 2, + "glazed_area": 1, + "region_code": 17, + "report_type": 2, + "sap_heating": { + "wwhrs": { + "rooms_with_bath_and_or_shower": 1, + "rooms_with_mixer_shower_no_bath": 0, + "rooms_with_bath_and_mixer_shower": 0 + }, + "cylinder_size": 2, + "water_heating_code": 901, + "water_heating_fuel": 26, + "cylinder_thermostat": "Y", + "main_heating_details": [ + { + "has_fghrs": "N", + "main_fuel_type": 26, + "boiler_flue_type": 2, + "fan_flue_present": "Y", + "heat_emitter_type": 1, + "boiler_index_number": 10321, + "main_heating_number": 1, + "main_heating_control": 2106, + "main_heating_category": 2, + "main_heating_fraction": 1, + "main_heating_data_source": 1 + } + ], + "cylinder_insulation_type": 1, + "has_fixed_air_conditioning": "false", + "cylinder_insulation_thickness": 25 + }, + "sap_version": 9.91, + "schema_type": "SAP-Schema-16.2", + "uprn_source": "Energy Assessor", + "country_code": "EAW", + "main_heating": [ + { + "description": "Boiler and radiators, mains gas", + "energy_efficiency_rating": 4, + "environmental_efficiency_rating": 4 + } + ], + "dwelling_type": "End-terrace house", + "language_code": 1, + "property_type": 0, + "address_line_1": "1, Acland Close", + "schema_version": "LIG-16.1", + "assessment_type": "RdSAP", + "completion_date": "2013-01-14", + "inspection_date": "2013-01-14", + "extensions_count": 0, + "measurement_type": 1, + "total_floor_area": 62, + "transaction_type": 8, + "conservatory_type": 1, + "heated_room_count": 4, + "registration_date": "2013-01-14", + "restricted_access": 0, + "sap_energy_source": { + "main_gas": "Y", + "meter_type": 2, + "photovoltaic_supply": { + "percent_roof_area": 0 + }, + "wind_turbines_count": 0, + "wind_turbines_terrain_type": 2 + }, + "secondary_heating": { + "description": "None", + "energy_efficiency_rating": 0, + "environmental_efficiency_rating": 0 + }, + "sap_building_parts": [ + { + "identifier": "Main Dwelling", + "wall_dry_lined": "N", + "wall_thickness": 280, + "floor_heat_loss": 7, + "roof_construction": 4, + "wall_construction": 4, + "building_part_number": 1, + "sap_floor_dimensions": [ + { + "floor": 0, + "room_height": 2.4, + "floor_insulation": 1, + "total_floor_area": 31.06, + "floor_construction": 1, + "heat_loss_perimeter": 15.8 + }, + { + "floor": 1, + "room_height": 2.4, + "total_floor_area": 31.06, + "heat_loss_perimeter": 15.8 + } + ], + "wall_insulation_type": 2, + "construction_age_band": "G", + "wall_thickness_measured": "Y", + "roof_insulation_location": 2, + "roof_insulation_thickness": "100mm" + } + ], + "low_energy_lighting": 22, + "solar_water_heating": "N", + "bedf_revision_number": 333, + "habitable_room_count": 4, + "heating_cost_current": { + "value": 370, + "currency": "GBP" + }, + "insulated_door_count": 0, + "co2_emissions_current": 2.2, + "energy_rating_average": 60, + "energy_rating_current": 70, + "lighting_cost_current": { + "value": 66, + "currency": "GBP" + }, + "main_heating_controls": [ + { + "description": "Programmer, room thermostat and TRVs", + "energy_efficiency_rating": 4, + "environmental_efficiency_rating": 4 + } + ], + "multiple_glazing_type": "ND", + "open_fireplaces_count": 0, + "has_hot_water_cylinder": "true", + "heating_cost_potential": { + "value": 296, + "currency": "GBP" + }, + "hot_water_cost_current": { + "value": 106, + "currency": "GBP" + }, + "mechanical_ventilation": 0, + "percent_draughtproofed": 100, + "suggested_improvements": [ + { + "sequence": 1, + "typical_saving": { + "value": 27, + "currency": "GBP" + }, + "indicative_cost": "\u00a3800 - \u00a31,200", + "improvement_type": "W", + "improvement_details": { + "improvement_number": 47 + }, + "improvement_category": 5, + "energy_performance_rating": 71, + "environmental_impact_rating": 73 + }, + { + "sequence": 2, + "typical_saving": { + "value": 26, + "currency": "GBP" + }, + "indicative_cost": "\u00a335", + "improvement_type": "E", + "improvement_details": { + "improvement_number": 35 + }, + "improvement_category": 5, + "energy_performance_rating": 72, + "environmental_impact_rating": 74 + }, + { + "sequence": 3, + "typical_saving": { + "value": 33, + "currency": "GBP" + }, + "indicative_cost": "\u00a34,000 - \u00a36,000", + "improvement_type": "N", + "improvement_details": { + "improvement_number": 19 + }, + "improvement_category": 5, + "energy_performance_rating": 74, + "environmental_impact_rating": 76 + }, + { + "sequence": 4, + "typical_saving": { + "value": 52, + "currency": "GBP" + }, + "indicative_cost": "\u00a33,300 - \u00a36,500", + "improvement_type": "O", + "improvement_details": { + "improvement_number": 8 + }, + "improvement_category": 5, + "energy_performance_rating": 77, + "environmental_impact_rating": 80 + }, + { + "sequence": 5, + "typical_saving": { + "value": 236, + "currency": "GBP" + }, + "indicative_cost": "\u00a39,000 - \u00a314,000", + "improvement_type": "U", + "improvement_details": { + "improvement_number": 34 + }, + "improvement_category": 5, + "energy_performance_rating": 89, + "environmental_impact_rating": 92 + }, + { + "sequence": 6, + "typical_saving": { + "value": 19, + "currency": "GBP" + }, + "indicative_cost": "\u00a31,500 - \u00a34,000", + "improvement_type": "V", + "improvement_details": { + "improvement_number": 44 + }, + "improvement_category": 5, + "energy_performance_rating": 90, + "environmental_impact_rating": 92 + } + ], + "co2_emissions_potential": 0.5, + "energy_rating_potential": 90, + "lighting_cost_potential": { + "value": 37, + "currency": "GBP" + }, + "hot_water_cost_potential": { + "value": 72, + "currency": "GBP" + }, + "renewable_heat_incentive": { + "water_heating": 2577, + "impact_of_loft_insulation": -309, + "space_heating_existing_dwelling": 5864 + }, + "seller_commission_report": "Y", + "energy_consumption_current": 189, + "has_fixed_air_conditioning": "false", + "multiple_glazed_proportion": 0, + "calculation_software_version": 8.0, + "energy_consumption_potential": 36, + "environmental_impact_current": 71, + "fixed_lighting_outlets_count": 9, + "current_energy_efficiency_band": "C", + "environmental_impact_potential": 92, + "has_heated_separate_conservatory": "false", + "potential_energy_efficiency_band": "B", + "co2_emissions_current_per_floor_area": 36, + "low_energy_fixed_lighting_outlets_count": 2 +} \ No newline at end of file diff --git a/domain/sap10_calculator/worksheet/heat_transmission.py b/domain/sap10_calculator/worksheet/heat_transmission.py index 9f603d04..a10b1841 100644 --- a/domain/sap10_calculator/worksheet/heat_transmission.py +++ b/domain/sap10_calculator/worksheet/heat_transmission.py @@ -231,6 +231,20 @@ def _is_flat_or_maisonette(property_type: Optional[str]) -> bool: return property_type in _PROPERTY_TYPES_FLAT_OR_MAISONETTE +def _is_flat_or_maisonette_dwelling(dwelling_type: Optional[str]) -> bool: + """Fallback flat/maisonette detection from `epc.dwelling_type` for certs + where `property_type` is absent. Full-SAP / SAP-Schema certs carry the + flatness only in dwelling_type (e.g. "Ground-floor flat", "Mid-floor + maisonette"), so without this the RdSAP 10 Table 15 footnote * party-wall + U=0 default never fires for them and they wrongly take the 0.25 house + default. Houses/bungalows ("Detached house", "Mid-Terrace house") don't + contain these tokens, so they stay on the house default.""" + if dwelling_type is None: + return False + dt = dwelling_type.lower() + return "flat" in dt or "maisonette" in dt + + @dataclass(frozen=True) class HeatTransmission: """SAP 10.2 §3 conduction HLC broken down per element type, summed @@ -1029,7 +1043,10 @@ def heat_transmission_from_cert( # branch (they're houses for party-wall purposes per the spec). upw = u_party_wall( party_wall_construction=party_construction, - is_flat=_is_flat_or_maisonette(epc.property_type), + is_flat=( + _is_flat_or_maisonette(epc.property_type) + or _is_flat_or_maisonette_dwelling(epc.dwelling_type) + ), ) # Per-bp `y` for backwards compat: when the bp's own age band # differs from the dwelling's primary, the cascade applies the diff --git a/tests/domain/sap10_calculator/test_real_cert_sap_accuracy.py b/tests/domain/sap10_calculator/test_real_cert_sap_accuracy.py index 7a22c28f..f39e0168 100644 --- a/tests/domain/sap10_calculator/test_real_cert_sap_accuracy.py +++ b/tests/domain/sap10_calculator/test_real_cert_sap_accuracy.py @@ -129,6 +129,62 @@ _EXPECTATIONS: Final[tuple[RealCertExpectation, ...]] = ( cert_num="8000-8495-2839-2607-9683", sap_score=82, ), + # UPRN 10093116543 → cert 8358-7436-5620-6889-0906. SAP-Schema-17.1 — a + # FULL-SAP cert (2017 mains-gas COMBI semi, Emsworth), forced through the + # RdSAP SAP-10 engine. Lodged 82; engine produces 81. Built in Elmhurst + # RdSAP10 on the lodged inputs (evidence saved: elmhurst_summary.pdf / + # elmhurst_worksheet.pdf): Elmhurst worksheet SAP 77. The +4 (81 vs 77) is + # the inherent full-SAP-lodged-value vs RdSAP-default methodology gap — the + # engine faithfully uses the cert's MEASURED full-SAP data that Elmhurst + # RdSAP structurally cannot: + # • Ground floor: cert lodges measured U=0.11 (raw floor u_value 0.11, + # "Average thermal transmittance 0.11 W/m²K"); engine uses 0.11, Elmhurst + # RdSAP solid-floor default = 0.23 (~1.5 SAP). Elmhurst's U-value-known + # override can't be set via the entry tool. + # • Boiler: cert lodges PCDB index 17644 (88.5%); engine uses 88.5%, + # Elmhurst's PCDB/SEDBUK boiler search is disabled in this UI state so the + # only automatable combi is the generic SAP Table 4b "BGW condensing + # combi" = 84% (~1 SAP). The 89% cascade option is a *regular* boiler + # (needs a cylinder) — not valid for this combi/no-cylinder dwelling. + # • Remainder: roof band-L 0.16 vs engine band-M 0.15, infiltration / + # sheltered-sides 1-vs-2 (~0.5). + # Calculator confirmed faithful on the prior sibling cert (engine on + # Elmhurst's own parsed inputs ≈ worksheet). A leftover conservatory from the + # reused assessment was cleared during the build (worksheet 73→77). PINNED TO + # THE OBSERVED 81, not lodged 82 — mapping deliberately untuned; the Elmhurst + # delta is the documented full-SAP→RdSAP residual, NOT a mapper bug. + RealCertExpectation( + schema="SAP-Schema-17.1", + sample="uprn_10093116543", + cert_num="8358-7436-5620-6889-0906", + sap_score=81, + ), + # UPRN 10093116529 → cert 8178-7436-5600-9809-0906. SAP-Schema-17.1 — a + # FULL-SAP cert (2017 mains-gas combi GROUND-FLOOR FLAT, Emsworth, TFA 49 m²), + # forced through the RdSAP SAP-10 engine. Lodged 81; engine produces 81. Built + # in Elmhurst RdSAP10 on the lodged inputs (evidence saved: elmhurst_summary.pdf + # / elmhurst_worksheet.pdf): Elmhurst worksheet SAP 78. Calculator confirmed + # faithful — fed Elmhurst's own U-values the engine reproduces its HTC to ~0.6 + # W/K (93.4 vs ~94). The +3 (81 vs 78) is the full-SAP→RdSAP methodology gap: + # cert lodges measured U (wall 0.184, floor 0.12), engine uses them, Elmhurst + # RdSAP forces band-L defaults; plus the generic 84% combi vs the cert's PCDB + # 17644 (88.5%). The "to corridor" wall (17.37 m², U 0.15) is already inside the + # heat-loss perimeter (28.45 m × 2.6 = 73.97 m² external), so Elmhurst derives + # it as part of the main cavity wall. + # This cert surfaced + drove the FLAT PARTY-WALL FIX (heat_transmission.py + # `_is_flat_or_maisonette_dwelling`): full-SAP flats carry their flatness in + # `dwelling_type` not `property_type`, so the party-wall default was wrongly + # the 0.25 house value instead of the RdSAP Table 15 footnote-* flat 0.0. The + # cert lodges party `u_value: 0` and Elmhurst's worksheet uses 0.0; the fix + # lifts this flat 80→81 (and matches the lodged/Elmhurst party wall). + # PINNED TO THE OBSERVED 81, not lodged 81-coincidence — mapping untuned; the + # Elmhurst delta is the documented full-SAP residual, not a bug. + RealCertExpectation( + schema="SAP-Schema-17.1", + sample="uprn_10093116529", + cert_num="8178-7436-5600-9809-0906", + sap_score=81, + ), # UPRN 10002468137 → cert 0215-2818-7357-9703-2145. RdSAP-Schema-17.1, # all-electric high-heat-retention storage heaters on Economy 7, solid- # brick uninsulated end-terrace. Validated against Elmhurst RdSAP10 on diff --git a/tests/domain/sap10_calculator/worksheet/test_heat_transmission.py b/tests/domain/sap10_calculator/worksheet/test_heat_transmission.py index d1ed0c92..c7773d63 100644 --- a/tests/domain/sap10_calculator/worksheet/test_heat_transmission.py +++ b/tests/domain/sap10_calculator/worksheet/test_heat_transmission.py @@ -1150,6 +1150,46 @@ def test_ground_floor_flat_exposure_keeps_floor_drops_roof() -> None: assert ground.roof_w_per_k == 0.0 +def test_full_sap_flat_party_wall_uses_flat_zero_default_via_dwelling_type() -> None: + # Arrange — a full-SAP / SAP-Schema cert carries its flatness in + # `dwelling_type` ("Ground-floor flat"), NOT `property_type` (which is + # None). The party-wall default must still fire the RdSAP 10 Table 15 + # footnote * flat value U=0.0 (party wall between two heated dwellings is + # not a heat-loss element), not the 0.25 house default. Regression for + # uprn_10093116529: without the dwelling_type fallback the engine charged + # 2.82 W/K of phantom party-wall loss (cert lodged party u_value 0; + # Elmhurst's worksheet uses 0.0). `party_wall_construction=None` = + # "unknown" → the is_flat-dependent default branch. + def _build(dwelling_type: str) -> HeatTransmission: + main = make_building_part( + identifier="Main Dwelling", + construction_age_band="L", + wall_construction=4, wall_insulation_type=4, + party_wall_construction=None, roof_construction=4, + floor_dimensions=[ + make_floor_dimension( + total_floor_area_m2=49.0, room_height_m=2.6, + party_wall_length_m=5.0, heat_loss_perimeter_m=28.0, floor=0, + ), + ], + ) + epc = make_minimal_sap10_epc( + total_floor_area_m2=49.0, country_code="ENG", + dwelling_type=dwelling_type, property_type=None, + sap_building_parts=[main], + ) + return heat_transmission_from_cert(epc) + + # Act + flat = _build("Ground-floor flat") + house = _build("Mid-terrace house") + + # Assert — flat party wall is a non-heat-loss element (U=0); the same + # geometry as a house takes the 0.25 unknown-house default (> 0). + assert flat.party_walls_w_per_k == 0.0 + assert house.party_walls_w_per_k > 0.0 + + def test_floor_over_another_dwelling_below_zeroes_floor_despite_exposed_flag() -> None: # Arrange — a "Ground-floor flat" lodged with floor_heat_loss=6 # ("another dwelling below") sits over a heated dwelling (e.g. a