test(accuracy): ratchet 77.3% -> 77.7% via flat-roof insulation-thickness fix (Elmhurst-validated)

A FLAT roof lodges its insulation thickness in the DEDICATED gov-EPC API
`flat_roof_insulation_thickness` field (e.g. "75mm"), leaving
`roof_insulation_thickness` None (that field is for pitched-loft joists).
`heat_transmission_from_cert` read only the latter, so a measured
flat-roof thickness was ignored and the roof billed at the uninsulated
age-band flat default (age E = 1.5) instead of its Table-16 insulated U.

Fixed by preferring `flat_roof_insulation_thickness` when the part is a
flat roof — the exact mirror of the existing rafter-thickness branch.
An "AB"/"NI" (as-built/unknown) value parses to None and keeps the
age-band default, unchanged; only measured thicknesses move.

PER-CERT ELMHURST VALIDATION (cert 47084930, top-floor flat, flat roof
75 mm): built on the lodged inputs in accredited Elmhurst RdSAP10-Online
(evidence saved: elmhurst_summary.pdf / elmhurst_worksheet.pdf). The
worksheet bills "insulated flat roof" at U 0.5 (floor 0.70 + wall 0.25
also matching the engine). The fix takes the engine roof 96.4 -> 32.1 W/K
(= 64.26 x 0.5, Elmhurst-exact), PE +47 -> +0.2, SAP 69.51 -> 74.34 =
lodged 74.

Gauge: within 77.3% -> 77.7%, SAP MAE 0.648 -> 0.641, CO2 0.074 -> 0.072,
PE 3.1 -> 2.97. Unit-pinned in test_heat_transmission
(flat_roof_insulation_thickness -> U 0.5); RealCertExpectation 47084930
= 74 (Elmhurst-validated). Also adds the build script build_47084930.py.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jun-te Kim 2026-07-02 23:27:57 +00:00
parent 11a637c6bd
commit 8e33a8de53
9 changed files with 915 additions and 216 deletions

View file

@ -0,0 +1,324 @@
{
"uprn": 47084930,
"roofs": [
{
"description": "Flat, insulated",
"energy_efficiency_rating": 3,
"environmental_efficiency_rating": 3
}
],
"walls": [
{
"description": "Cavity wall, with internal insulation",
"energy_efficiency_rating": 4,
"environmental_efficiency_rating": 4
}
],
"floors": [
{
"description": "(other premises below)",
"energy_efficiency_rating": 0,
"environmental_efficiency_rating": 0
}
],
"status": "entered",
"tenure": 3,
"window": {
"description": "Fully double glazed",
"energy_efficiency_rating": 3,
"environmental_efficiency_rating": 3
},
"lighting": {
"description": "Excellent lighting efficiency",
"energy_efficiency_rating": 5,
"environmental_efficiency_rating": 5
},
"postcode": "NE12 8AQ",
"hot_water": {
"description": "From main system",
"energy_efficiency_rating": 4,
"environmental_efficiency_rating": 4
},
"post_town": "NEWCASTLE UPON TYNE",
"built_form": "NR",
"created_at": "2026-05-06 10:59:38",
"door_count": 0,
"region_code": 1,
"report_type": 2,
"sap_heating": {
"number_baths": 1,
"cylinder_size": 1,
"shower_outlets": [
{
"shower_wwhrs": 1,
"shower_outlet_type": 1
}
],
"number_baths_wwhrs": 0,
"water_heating_code": 901,
"water_heating_fuel": 26,
"main_heating_details": [
{
"has_fghrs": "N",
"main_fuel_type": 26,
"boiler_flue_type": 2,
"fan_flue_present": "Y",
"heat_emitter_type": 1,
"emitter_temperature": 0,
"main_heating_number": 1,
"main_heating_control": 2106,
"main_heating_category": 2,
"main_heating_fraction": 1,
"central_heating_pump_age": 0,
"main_heating_data_source": 1,
"main_heating_index_number": 17815
}
],
"immersion_heating_type": "NA",
"has_fixed_air_conditioning": "false"
},
"sap_version": 10.2,
"sap_windows": [
{
"pvc_frame": "true",
"orientation": 3,
"window_type": 1,
"glazing_type": 2,
"window_width": 1.23,
"window_height": 1.61,
"draught_proofed": "true",
"window_location": 0,
"window_wall_type": 1,
"permanent_shutters_present": "N",
"permanent_shutters_insulated": "N"
},
{
"pvc_frame": "true",
"orientation": 3,
"window_type": 1,
"glazing_type": 2,
"window_width": 1.23,
"window_height": 1.61,
"draught_proofed": "true",
"window_location": 0,
"window_wall_type": 1,
"permanent_shutters_present": "N",
"permanent_shutters_insulated": "N"
},
{
"pvc_frame": "true",
"orientation": 3,
"window_type": 1,
"glazing_type": 2,
"window_width": 1.23,
"window_height": 1.61,
"draught_proofed": "true",
"window_location": 0,
"window_wall_type": 1,
"permanent_shutters_present": "N",
"permanent_shutters_insulated": "N"
},
{
"pvc_frame": "true",
"orientation": 3,
"window_type": 1,
"glazing_type": 2,
"window_width": 1.23,
"window_height": 1.61,
"draught_proofed": "true",
"window_location": 0,
"window_wall_type": 1,
"permanent_shutters_present": "N",
"permanent_shutters_insulated": "N"
},
{
"pvc_frame": "true",
"orientation": 3,
"window_type": 1,
"glazing_type": 2,
"window_width": 1.23,
"window_height": 1.61,
"draught_proofed": "true",
"window_location": 0,
"window_wall_type": 1,
"permanent_shutters_present": "N",
"permanent_shutters_insulated": "N"
}
],
"schema_type": "RdSAP-Schema-21.0.1",
"uprn_source": "Energy Assessor",
"country_code": "ENG",
"main_heating": [
{
"description": "Boiler and radiators, mains gas",
"energy_efficiency_rating": 4,
"environmental_efficiency_rating": 4
}
],
"air_tightness": {
"description": "(not tested)",
"energy_efficiency_rating": 0,
"environmental_efficiency_rating": 0
},
"dwelling_type": "Top-floor flat",
"language_code": 1,
"pressure_test": 4,
"property_type": 2,
"address_line_1": "83 Station Road",
"address_line_2": "Forest Hall",
"assessment_type": "RdSAP",
"completion_date": "2026-05-06",
"inspection_date": "2026-05-05",
"extensions_count": 0,
"measurement_type": 1,
"sap_flat_details": {
"level": 3,
"top_storey": "Y",
"storey_count": 2,
"flat_location": 1,
"heat_loss_corridor": 1
},
"total_floor_area": 64,
"transaction_type": 8,
"conservatory_type": 1,
"has_draught_lobby": "true",
"heated_room_count": 3,
"registration_date": "2026-05-06",
"sap_energy_source": {
"mains_gas": "Y",
"meter_type": 2,
"pv_connection": 0,
"photovoltaic_supply": {
"none_or_no_details": {
"percent_roof_area": 0
}
},
"wind_turbines_count": 0,
"gas_smart_meter_present": "true",
"is_dwelling_export_capable": "false",
"wind_turbines_terrain_type": 2,
"electricity_smart_meter_present": "true"
},
"secondary_heating": {
"description": "None",
"energy_efficiency_rating": 0,
"environmental_efficiency_rating": 0
},
"sap_building_parts": [
{
"identifier": "Main Dwelling",
"wall_dry_lined": "N",
"wall_thickness": 380,
"floor_heat_loss": 3,
"roof_construction": 1,
"wall_construction": 4,
"building_part_number": 1,
"sap_floor_dimensions": [
{
"floor": 0,
"room_height": {
"value": 2.32,
"quantity": "metres"
},
"total_floor_area": {
"value": 64.26,
"quantity": "square metres"
},
"party_wall_length": {
"value": 18.15,
"quantity": "metres"
},
"heat_loss_perimeter": {
"value": 18.15,
"quantity": "metres"
}
}
],
"wall_insulation_type": 3,
"construction_age_band": "E",
"party_wall_construction": 0,
"wall_thickness_measured": "Y",
"roof_insulation_location": 6,
"wall_insulation_thickness": "100mm",
"flat_roof_insulation_thickness": "75mm"
}
],
"solar_water_heating": "N",
"habitable_room_count": 3,
"heating_cost_current": {
"value": 623,
"currency": "GBP"
},
"insulated_door_count": 0,
"co2_emissions_current": 2.0,
"energy_rating_average": 60,
"energy_rating_current": 74,
"lighting_cost_current": {
"value": 42,
"currency": "GBP"
},
"main_heating_controls": [
{
"description": "Programmer, room thermostat and TRVs",
"energy_efficiency_rating": 4,
"environmental_efficiency_rating": 4
}
],
"has_hot_water_cylinder": "false",
"heating_cost_potential": {
"value": 553,
"currency": "GBP"
},
"hot_water_cost_current": {
"value": 207,
"currency": "GBP"
},
"mechanical_ventilation": 0,
"percent_draughtproofed": 100,
"suggested_improvements": [
{
"sequence": 1,
"typical_saving": {
"value": 69,
"currency": "GBP"
},
"indicative_cost": "\u00a3900 - \u00a31,200",
"improvement_type": "A2",
"improvement_details": {
"improvement_number": 45
},
"improvement_category": 5,
"energy_performance_rating": 76,
"environmental_impact_rating": 78
}
],
"co2_emissions_potential": 1.8,
"energy_rating_potential": 76,
"lighting_cost_potential": {
"value": 42,
"currency": "GBP"
},
"schema_version_original": "21.0.1",
"hot_water_cost_potential": {
"value": 208,
"currency": "GBP"
},
"renewable_heat_incentive": {
"water_heating": 2384.75,
"space_heating_existing_dwelling": 5681.26
},
"draughtproofed_door_count": 0,
"energy_consumption_current": 170,
"has_fixed_air_conditioning": "false",
"multiple_glazed_proportion": 100,
"calculation_software_version": "5.02r0344",
"energy_consumption_potential": 154,
"environmental_impact_current": 76,
"current_energy_efficiency_band": "C",
"environmental_impact_potential": 78,
"led_fixed_lighting_bulbs_count": 9,
"has_heated_separate_conservatory": "false",
"potential_energy_efficiency_band": "C",
"co2_emissions_current_per_floor_area": 31,
"incandescent_fixed_lighting_bulbs_count": 0
}

View file

@ -922,6 +922,22 @@ def heat_transmission_from_cert(
raw_rafter_thickness = getattr(part, "rafter_insulation_thickness", None)
if raw_rafter_thickness is not None:
raw_roof_thickness = raw_rafter_thickness
elif "flat" in (part.roof_construction_type or "").lower():
# RdSAP 10 §5.11 — a FLAT roof lodges its insulation thickness in
# the dedicated gov-API `flat_roof_insulation_thickness` field
# (e.g. "75mm"), NOT `roof_insulation_thickness` (which stays None
# for flat roofs). Prefer it so a measured flat-roof thickness
# bills at its Table-16 U instead of the uninsulated age-band flat
# default. Mirrors the rafter branch above. Cert 47084930: flat
# roof "75mm" -> U 0.5 (accredited Elmhurst worksheet, "insulated
# flat roof") vs the age-E default 1.5 (roof 96.4 -> 32.1 W/K). An
# "AB"/"NI" (as-built/unknown) value parses to None and keeps the
# age-band default, unchanged.
raw_flat_thickness = getattr(
part, "flat_roof_insulation_thickness", None
)
if raw_flat_thickness is not None:
raw_roof_thickness = raw_flat_thickness
roof_thickness = _parse_thickness_mm(raw_roof_thickness)
floor_ins_thickness = _parse_thickness_mm(getattr(part, "floor_insulation_thickness", None))

View file

@ -1,10 +1,10 @@
# RdSAP-21.0.1 corpus campaign ledger
**Gauge:** 1000 computed / 0 skipped · SAP within-0.5 = **77.3%** · MAE = **0.648** (floors in test_sap_accuracy_corpus.py)
**Gauge:** 1000 computed / 0 skipped · SAP within-0.5 = **77.7%** · MAE = **0.641** (floors in test_sap_accuracy_corpus.py)
Statuses: `[ ]` todo · `[x]` resolved ≤0.5 · 🔧 fix landed · ⚠ xfail engine bug · ⛔ unbuildable. Line: `uprn · lodged L / eng E / Δ · signature`. Rebuild/re-rank: `PYTHONPATH=. python scripts/corpus_1000/build_worklist.py` (preserves statuses & `<-` notes).
## Clusters (certs with |Δ| ≥ 0.5, ranked by summed |Δ|) — 227 certs in 220 clusters
## Clusters (certs with |Δ| ≥ 0.5, ranked by summed |Δ|) — 223 certs in 216 clusters
### C001 · Σ|Δ| 23.9 · 1 certs · `hpcdb100053/elec | solid brick | (another dwelling | sec:room heaters`
- ⚠ `4510053280` · L 51 / E 74.94 / Δ +23.94 <- lodged software billed out-of-range-PSR (2.031 > 2.0) PCDB 100053 as 100% direct electric; engine follows SAP10.2 N2 extension (305%), Elmhurst-validated on case 56. Pinned engine 75 in test_real_cert_sap_accuracy.
@ -69,611 +69,599 @@ Statuses: `[ ]` todo · `[x]` resolved ≤0.5 · 🔧 fix landed · ⚠ xfail en
### C020 · Σ|Δ| 4.5 · 1 certs · `hpcdb18786/fuel27 | solid brick | pitched 100 | RR,consv3`
- [ ] `100071010014` · L 55 / E 50.47 / Δ -4.53
### C021 · Σ|Δ| 4.5 · 1 certs · `hpcdb17815/gas | cavity wall | flat insulated`
- [ ] `47084930` · L 74 / E 69.51 / Δ -4.49
### C022 · Σ|Δ| 4.5 · 1 certs · `h301/coal-anth | system built | (another dwelling | mv4`
### C021 · Σ|Δ| 4.5 · 1 certs · `h301/coal-anth | system built | (another dwelling | mv4`
- [ ] `10093342182` · L 82 / E 77.51 / Δ -4.49
### C023 · Σ|Δ| 4.4 · 1 certs · `hpcdb17973/gas | solid brick | (another dwelling`
### C022 · Σ|Δ| 4.4 · 1 certs · `hpcdb17973/gas | solid brick | (another dwelling`
- [ ] `5117280` · L 76 / E 71.56 / Δ -4.44
### C024 · Σ|Δ| 4.4 · 1 certs · `h191/elec | solid brick | (another dwelling | ext2`
### C023 · Σ|Δ| 4.4 · 1 certs · `h191/elec | solid brick | (another dwelling | ext2`
- [ ] `217060420` · L 42 / E 37.58 / Δ -4.42
### C025 · Σ|Δ| 4.4 · 1 certs · `h402/elec | cavity wall | (another dwelling | sec:room heaters,whw903`
### C024 · Σ|Δ| 4.4 · 1 certs · `h402/elec | cavity wall | (another dwelling | sec:room heaters,whw903`
- [ ] `72399971` · L 69 / E 64.60 / Δ -4.40
### C026 · Σ|Δ| 4.4 · 1 certs · `hpcdb19258/fuel28 | granite or | pitched no | ext2,sec:room heaters`
### C025 · Σ|Δ| 4.4 · 1 certs · `hpcdb19258/fuel28 | granite or | pitched no | ext2,sec:room heaters`
- [ ] `10007016314` · L 57 / E 52.64 / Δ -4.36
### C027 · Σ|Δ| 4.1 · 1 certs · `h633/heatnet | sandstone with | pitched insulated | sec:room heaters,whw903`
### C026 · Σ|Δ| 4.1 · 1 certs · `h633/heatnet | sandstone with | pitched insulated | sec:room heaters,whw903`
- [ ] `100052159386` · L 56 / E 51.92 / Δ -4.08
### C028 · Σ|Δ| 4.0 · 1 certs · `h408/elec | cavity wall | pitched 100 | ext1,sec:room heaters,whw903`
### C027 · Σ|Δ| 4.0 · 1 certs · `h408/elec | cavity wall | pitched 100 | ext1,sec:room heaters,whw903`
- [ ] `100040767294` · L 43 / E 47.04 / Δ +4.04
### C029 · Σ|Δ| 3.6 · 1 certs · `hpcdb15445/gas | granite or | pitched no | RR,ext3,sec:room heaters`
### C028 · Σ|Δ| 3.6 · 1 certs · `hpcdb15445/gas | granite or | pitched no | RR,ext3,sec:room heaters`
- [ ] `10002188054` · L 68 / E 64.42 / Δ -3.58
### C030 · Σ|Δ| 3.5 · 1 certs · `hpcdb18234/gas | cavity wall | pitched insulated | PV,ext2,sec:room heaters`
### C029 · Σ|Δ| 3.5 · 1 certs · `hpcdb18234/gas | cavity wall | pitched insulated | PV,ext2,sec:room heaters`
- [ ] `39066537` · L 78 / E 81.49 / Δ +3.49
### C031 · Σ|Δ| 3.5 · 1 certs · `hpcdb8387/gas | cavity wall | pitched 150`
### C030 · Σ|Δ| 3.5 · 1 certs · `hpcdb8387/gas | cavity wall | pitched 150`
- [ ] `100100137438` · L 69 / E 72.48 / Δ +3.48
### C032 · Σ|Δ| 3.4 · 1 certs · `hpcdb17507/gas | cavity wall | pitched insulated | RR,sec:room heaters`
### C031 · Σ|Δ| 3.4 · 1 certs · `hpcdb17507/gas | cavity wall | pitched insulated | RR,sec:room heaters`
- [ ] `100080122910` · L 60 / E 63.45 / Δ +3.45
### C033 · Σ|Δ| 3.3 · 1 certs · `h691/elec | cavity wall | pitched 300 | mv5,sec:portable electric,whw903`
### C032 · Σ|Δ| 3.3 · 1 certs · `h691/elec | cavity wall | pitched 300 | mv5,sec:portable electric,whw903`
- [ ] `452010022` · L 42 / E 38.67 / Δ -3.33
### C034 · Σ|Δ| 3.3 · 1 certs · `h402/elec | cavity wall | pitched 150 | ext1,sec:room heaters,whw903`
### C033 · Σ|Δ| 3.3 · 1 certs · `h402/elec | cavity wall | pitched 150 | ext1,sec:room heaters,whw903`
- [ ] `200004818752` · L 34 / E 30.73 / Δ -3.27
### C035 · Σ|Δ| 3.2 · 1 certs · `hpcdb1770/fuel28 | solid brick | pitched no | ext3,sec:room heaters`
### C034 · Σ|Δ| 3.2 · 1 certs · `hpcdb1770/fuel28 | solid brick | pitched no | ext3,sec:room heaters`
- [ ] `200004522639` · L 37 / E 33.77 / Δ -3.23
### C036 · Σ|Δ| 3.2 · 1 certs · `hpcdb18759/gas | sandstone as | pitched insulated | RR,ext1,sec:room heaters`
### C035 · Σ|Δ| 3.2 · 1 certs · `hpcdb18759/gas | sandstone as | pitched insulated | RR,ext1,sec:room heaters`
- [ ] `72351021` · L 64 / E 60.85 / Δ -3.15
### C037 · Σ|Δ| 3.1 · 1 certs · `h633/heatnet | timber frame | roof room(s) | RR,ext1,sec:room heaters,whw909`
### C036 · Σ|Δ| 3.1 · 1 certs · `h633/heatnet | timber frame | roof room(s) | RR,ext1,sec:room heaters,whw909`
- [ ] `22077224` · L 37 / E 33.90 / Δ -3.10
### C038 · Σ|Δ| 3.0 · 1 certs · `hpcdb18498/gas | solid brick | pitched 250 | RR,ext2`
### C037 · Σ|Δ| 3.0 · 1 certs · `hpcdb18498/gas | solid brick | pitched 250 | RR,ext2`
- [ ] `10011740578` · L 70 / E 67.00 / Δ -3.00
### C039 · Σ|Δ| 2.9 · 1 certs · `h402/elec | cavity wall | pitched 250 | sec:portable electric,whw903`
### C038 · Σ|Δ| 2.9 · 1 certs · `h402/elec | cavity wall | pitched 250 | sec:portable electric,whw903`
- [ ] `100110680822` · L 79 / E 76.07 / Δ -2.93
### C040 · Σ|Δ| 2.9 · 1 certs · `h301/coal-anth | solid brick | pitched 250`
### C039 · Σ|Δ| 2.9 · 1 certs · `h301/coal-anth | solid brick | pitched 250`
- [ ] `452032915` · L 75 / E 72.09 / Δ -2.91
### C041 · Σ|Δ| 2.9 · 1 certs · `h301/coal-anth | cavity wall | (another dwelling | whw909`
### C040 · Σ|Δ| 2.9 · 1 certs · `h301/coal-anth | cavity wall | (another dwelling | whw909`
- [ ] `100071306639` · L 73 / E 70.14 / Δ -2.86
### C042 · Σ|Δ| 2.9 · 1 certs · `hpcdb18435/gas+2mains | cavity wall | pitched 100 | ext3,sec:room heaters,whw903`
### C041 · Σ|Δ| 2.9 · 1 certs · `hpcdb18435/gas+2mains | cavity wall | pitched 100 | ext3,sec:room heaters,whw903`
- [ ] `100061346049` · L 55 / E 52.15 / Δ -2.85
### C043 · Σ|Δ| 2.7 · 1 certs · `hpcdb8443/fuel28 | cavity wall | pitched 100 | RR,ext2,sec:room heaters`
### C042 · Σ|Δ| 2.7 · 1 certs · `hpcdb8443/fuel28 | cavity wall | pitched 100 | RR,ext2,sec:room heaters`
- [ ] `10013008238` · L 41 / E 38.26 / Δ -2.74
### C044 · Σ|Δ| 2.7 · 3 certs · `h691/elec | cavity wall | (another dwelling | whw903`
### C043 · Σ|Δ| 2.7 · 3 certs · `h691/elec | cavity wall | (another dwelling | whw903`
- [ ] `10033187652` · L 70 / E 71.21 / Δ +1.21
- [ ] `200002730` · L 65 / E 64.13 / Δ -0.87
- [ ] `10023328117` · L 78 / E 78.64 / Δ +0.64
### C045 · Σ|Δ| 2.7 · 1 certs · `h633/heatnet | cavity wall | pitched 200 | RR,sec:room heaters,whw903`
### C044 · Σ|Δ| 2.7 · 1 certs · `h633/heatnet | cavity wall | pitched 200 | RR,sec:room heaters,whw903`
- [ ] `10004873253` · L 65 / E 62.29 / Δ -2.71
### C046 · Σ|Δ| 2.7 · 1 certs · `h691/elec | cavity wall | (another dwelling | mv1,whw903`
### C045 · Σ|Δ| 2.7 · 1 certs · `h691/elec | cavity wall | (another dwelling | mv1,whw903`
- [ ] `10090793715` · L 73 / E 75.71 / Δ +2.71
### C047 · Σ|Δ| 2.7 · 1 certs · `hpcdb17964/gas+2mains | cavity wall | pitched 100 | ext1,sec:room heaters`
### C046 · Σ|Δ| 2.7 · 1 certs · `hpcdb17964/gas+2mains | cavity wall | pitched 100 | ext1,sec:room heaters`
- [ ] `100120745600` · L 65 / E 67.69 / Δ +2.69
### C048 · Σ|Δ| 2.7 · 1 certs · `hpcdb17757/gas | granite or | pitched no | RR,ext1`
### C047 · Σ|Δ| 2.7 · 1 certs · `hpcdb17757/gas | granite or | pitched no | RR,ext1`
- [ ] `100051178830` · L 63 / E 65.66 / Δ +2.66
### C049 · Σ|Δ| 2.6 · 1 certs · `hpcdb10321/gas | sandstone as | pitched 100 | ext2`
### C048 · Σ|Δ| 2.6 · 1 certs · `hpcdb10321/gas | sandstone as | pitched 100 | ext2`
- [ ] `100120018282` · L 64 / E 61.36 / Δ -2.64
### C050 · Σ|Δ| 2.6 · 1 certs · `hpcdb17968/gas | cavity wall | pitched 300 | ext2,sec:room heaters`
### C049 · Σ|Δ| 2.6 · 1 certs · `hpcdb17968/gas | cavity wall | pitched 300 | ext2,sec:room heaters`
- [ ] `83035979` · L 65 / E 67.60 / Δ +2.60
### C051 · Σ|Δ| 2.5 · 1 certs · `h524/elec | solid brick | (another dwelling | consv2,sec:room heaters,whw909`
### C050 · Σ|Δ| 2.5 · 1 certs · `h524/elec | solid brick | (another dwelling | consv2,sec:room heaters,whw909`
- [ ] `10014073761` · L 75 / E 72.52 / Δ -2.48
### C052 · Σ|Δ| 2.5 · 1 certs · `hpcdb10328/gas | solid brick | pitched insulated | RR`
### C051 · Σ|Δ| 2.5 · 1 certs · `hpcdb10328/gas | solid brick | pitched insulated | RR`
- [ ] `100050964834` · L 60 / E 62.47 / Δ +2.47
### C053 · Σ|Δ| 2.4 · 1 certs · `h694/elec | cavity wall | (another dwelling | whw941`
### C052 · Σ|Δ| 2.4 · 1 certs · `h694/elec | cavity wall | (another dwelling | whw941`
- [ ] `100120752995` · L 71 / E 73.42 / Δ +2.42
### C054 · Σ|Δ| 2.4 · 1 certs · `hpcdb1245/gas | solid brick | pitched insulated | ext1`
- [ ] `100032230128` · L 55 / E 52.60 / Δ -2.40
### C053 · Σ|Δ| 2.4 · 1 certs · `h691/elec | solid brick | roof room(s) | RR,ext2,sec:room heaters,whw903`
- [ ] `100062174575` · L 46 / E 48.40 / Δ +2.40
### C055 · Σ|Δ| 2.3 · 1 certs · `hpcdb15753/gas | solid brick | pitched 150 | RR`
### C054 · Σ|Δ| 2.3 · 1 certs · `hpcdb15753/gas | solid brick | pitched 150 | RR`
- [ ] `100000034023` · L 73 / E 70.71 / Δ -2.29
### C056 · Σ|Δ| 2.2 · 1 certs · `h506/gas | cavity wall | flat limited | sec:room heaters`
### C055 · Σ|Δ| 2.2 · 1 certs · `h506/gas | cavity wall | flat limited | sec:room heaters`
- [ ] `100020377671` · L 62 / E 64.23 / Δ +2.23
### C057 · Σ|Δ| 2.2 · 1 certs · `h104/gas | solid brick | pitched insulated | RR,ext1`
### C056 · Σ|Δ| 2.2 · 1 certs · `h104/gas | solid brick | pitched insulated | RR,ext1`
- [ ] `22027335` · L 76 / E 73.77 / Δ -2.23
### C058 · Σ|Δ| 2.1 · 1 certs · `hpcdb18833/gas | solid brick | pitched insulated | RR,ext1,sec:room heaters`
### C057 · Σ|Δ| 2.1 · 1 certs · `hpcdb18833/gas | solid brick | pitched insulated | RR,ext1,sec:room heaters`
- [ ] `48056153` · L 65 / E 62.89 / Δ -2.11
### C059 · Σ|Δ| 2.0 · 1 certs · `hpcdb19008/gas | solid brick | pitched insulated | sec:room heaters`
### C058 · Σ|Δ| 2.0 · 1 certs · `hpcdb19008/gas | solid brick | pitched insulated | sec:room heaters`
- [ ] `100021924710` · L 63 / E 65.00 / Δ +2.00
### C060 · Σ|Δ| 1.9 · 1 certs · `hpcdb18774/gas | solid brick | pitched 100 | RR,ext1`
### C059 · Σ|Δ| 1.9 · 1 certs · `hpcdb18774/gas | solid brick | pitched 100 | RR,ext1`
- [ ] `100031270375` · L 69 / E 70.93 / Δ +1.93
### C061 · Σ|Δ| 1.9 · 1 certs · `hpcdb106417/elec | cavity wall | pitched 250 | RR,ext2,sec:room heaters`
### C060 · Σ|Δ| 1.9 · 1 certs · `hpcdb106417/elec | cavity wall | pitched 250 | RR,ext2,sec:room heaters`
- [ ] `10001118522` · L 80 / E 78.07 / Δ -1.93
### C062 · Σ|Δ| 1.9 · 1 certs · `h192/elec | cavity wall | (another dwelling`
### C061 · Σ|Δ| 1.9 · 1 certs · `h192/elec | cavity wall | (another dwelling`
- [ ] `10010234711` · L 81 / E 79.08 / Δ -1.92
### C063 · Σ|Δ| 1.9 · 1 certs · `hpcdb18250/gas | solid brick | pitched 100 | consv2,sec:room heaters`
### C062 · Σ|Δ| 1.9 · 1 certs · `hpcdb18250/gas | solid brick | pitched 100 | consv2,sec:room heaters`
- [ ] `100031768368` · L 61 / E 59.12 / Δ -1.88
### C064 · Σ|Δ| 1.8 · 1 certs · `h301/elec10hr | cavity wall | (another dwelling`
### C063 · Σ|Δ| 1.8 · 1 certs · `h301/elec10hr | cavity wall | (another dwelling`
- [ ] `4510729926` · L 73 / E 71.15 / Δ -1.85
### C065 · Σ|Δ| 1.8 · 1 certs · `hpcdb17138/fuel28 | granite or | pitched 200 | ext1,sec:room heaters`
### C064 · Σ|Δ| 1.8 · 1 certs · `hpcdb17138/fuel28 | granite or | pitched 200 | ext1,sec:room heaters`
- [ ] `100091329112` · L 49 / E 50.82 / Δ +1.82
### C066 · Σ|Δ| 1.8 · 2 certs · `hpcdb18908/gas | solid brick | pitched 300`
### C065 · Σ|Δ| 1.8 · 2 certs · `hpcdb18908/gas | solid brick | pitched 300`
- [ ] `100061275133` · L 76 / E 77.24 / Δ +1.24
- [ ] `207032630` · L 74 / E 73.47 / Δ -0.53
### C067 · Σ|Δ| 1.8 · 1 certs · `h691/elec | timber frame | pitched insulated | RR,ext1,sec:portable electric,whw908`
### C066 · Σ|Δ| 1.8 · 1 certs · `h691/elec | timber frame | pitched insulated | RR,ext1,sec:portable electric,whw908`
- [ ] `10011797347` · L 47 / E 48.77 / Δ +1.77
### C068 · Σ|Δ| 1.8 · 1 certs · `hpcdb17570/gas+2mains | solid brick | (another dwelling | RR,ext3,sec:room heaters`
### C067 · Σ|Δ| 1.8 · 1 certs · `hpcdb17570/gas+2mains | solid brick | (another dwelling | RR,ext3,sec:room heaters`
- [ ] `100022668387` · L 68 / E 66.25 / Δ -1.75
### C069 · Σ|Δ| 1.7 · 1 certs · `hpcdb10354/gas+2mains | sandstone as | pitched 300 | ext1`
### C068 · Σ|Δ| 1.7 · 1 certs · `hpcdb10354/gas+2mains | sandstone as | pitched 300 | ext1`
- [ ] `100100892216` · L 69 / E 67.28 / Δ -1.72
### C070 · Σ|Δ| 1.7 · 1 certs · `hpcdb8119/gas | cavity wall | pitched insulated | RR,ext1`
### C069 · Σ|Δ| 1.7 · 1 certs · `hpcdb8119/gas | cavity wall | pitched insulated | RR,ext1`
- [ ] `100060878876` · L 49 / E 50.71 / Δ +1.71
### C071 · Σ|Δ| 1.7 · 1 certs · `h402/elec | solid brick | (another dwelling | sec:portable electric,whw903`
### C070 · Σ|Δ| 1.7 · 1 certs · `h402/elec | solid brick | (another dwelling | sec:portable electric,whw903`
- [ ] `12126160` · L 69 / E 70.71 / Δ +1.71
### C072 · Σ|Δ| 1.7 · 1 certs · `h401/elec | solid brick | (another dwelling | sec:portable electric,whw950`
### C071 · Σ|Δ| 1.7 · 1 certs · `h401/elec | solid brick | (another dwelling | sec:portable electric,whw950`
- [ ] `22032926` · L 61 / E 62.71 / Δ +1.71
### C073 · Σ|Δ| 1.7 · 1 certs · `hpcdb18560/gas | cavity wall | pitched insulated | RR,ext1`
### C072 · Σ|Δ| 1.7 · 1 certs · `hpcdb18560/gas | cavity wall | pitched insulated | RR,ext1`
- [ ] `100010942905` · L 72 / E 73.70 / Δ +1.70
### C074 · Σ|Δ| 1.6 · 1 certs · `hpcdb18119/gas | solid brick | pitched 100 | ext1`
### C073 · Σ|Δ| 1.6 · 1 certs · `hpcdb18119/gas | solid brick | pitched 100 | ext1`
- [ ] `100030307976` · L 71 / E 69.37 / Δ -1.63
### C075 · Σ|Δ| 1.6 · 1 certs · `hpcdb18909/gas | cavity wall | pitched 100 | whw903`
### C074 · Σ|Δ| 1.6 · 1 certs · `hpcdb18909/gas | cavity wall | pitched 100 | whw903`
- [ ] `100061404488` · L 70 / E 68.38 / Δ -1.62
### C076 · Σ|Δ| 1.6 · 1 certs · `h402/elec | system built | (another dwelling | sec:room heaters,whw903`
### C075 · Σ|Δ| 1.6 · 1 certs · `h402/elec | system built | (another dwelling | sec:room heaters,whw903`
- [ ] `21067296` · L 67 / E 68.60 / Δ +1.60
### C077 · Σ|Δ| 1.6 · 1 certs · `hpcdb10164/gas | solid brick | pitched insulated | sec:room heaters`
### C076 · Σ|Δ| 1.6 · 1 certs · `hpcdb10164/gas | solid brick | pitched insulated | sec:room heaters`
- [ ] `5870047440` · L 58 / E 59.58 / Δ +1.58
### C078 · Σ|Δ| 1.6 · 1 certs · `hpcdb8051/gas | cavity wall | (same dwelling | ext2`
### C077 · Σ|Δ| 1.6 · 1 certs · `hpcdb8051/gas | cavity wall | (same dwelling | ext2`
- [ ] `100070450818` · L 65 / E 63.43 / Δ -1.57
### C079 · Σ|Δ| 1.6 · 1 certs · `hpcdb17741/gas | cavity wall | pitched 225`
### C078 · Σ|Δ| 1.6 · 1 certs · `hpcdb17741/gas | cavity wall | pitched 225`
- [ ] `100050881708` · L 70 / E 71.55 / Δ +1.55
### C080 · Σ|Δ| 1.5 · 1 certs · `h301/elec | system built | (another dwelling | whw950`
### C079 · Σ|Δ| 1.5 · 1 certs · `h301/elec | system built | (another dwelling | whw950`
- [ ] `10010254955` · L 79 / E 77.46 / Δ -1.54
### C081 · Σ|Δ| 1.5 · 1 certs · `hpcdb16839/gas | cavity wall | pitched 400+ | ext1,mv2,sec:room heaters`
### C080 · Σ|Δ| 1.5 · 1 certs · `hpcdb16839/gas | cavity wall | pitched 400+ | ext1,mv2,sec:room heaters`
- [ ] `3455011834` · L 69 / E 67.48 / Δ -1.52
### C082 · Σ|Δ| 1.5 · 1 certs · `hpcdb15502/gas | granite or | pitched 150 | RR,ext1,sec:room heaters`
### C081 · Σ|Δ| 1.5 · 1 certs · `hpcdb15502/gas | granite or | pitched 150 | RR,ext1,sec:room heaters`
- [ ] `100100274789` · L 60 / E 61.51 / Δ +1.51
### C083 · Σ|Δ| 1.5 · 1 certs · `hpcdb16453/gas | cavity wall | pitched 300 | consv2,ext1`
### C082 · Σ|Δ| 1.5 · 1 certs · `hpcdb16453/gas | cavity wall | pitched 300 | consv2,ext1`
- [ ] `100050852755` · L 65 / E 66.49 / Δ +1.49
### C084 · Σ|Δ| 1.5 · 1 certs · `hpcdb17679/gas | solid brick | pitched 125 | ext1`
### C083 · Σ|Δ| 1.5 · 1 certs · `hpcdb17679/gas | solid brick | pitched 125 | ext1`
- [ ] `100021326422` · L 70 / E 68.51 / Δ -1.49
### C085 · Σ|Δ| 1.5 · 1 certs · `hpcdb15029/gas | solid brick | pitched insulated | RR,ext1`
### C084 · Σ|Δ| 1.5 · 1 certs · `hpcdb15029/gas | solid brick | pitched insulated | RR,ext1`
- [ ] `100050988345` · L 61 / E 59.51 / Δ -1.49
### C086 · Σ|Δ| 1.5 · 1 certs · `hpcdb17998/gas | solid brick | pitched insulated | RR,consv2`
### C085 · Σ|Δ| 1.5 · 1 certs · `hpcdb17998/gas | solid brick | pitched insulated | RR,consv2`
- [ ] `100030285758` · L 54 / E 55.48 / Δ +1.48
### C087 · Σ|Δ| 1.5 · 1 certs · `hpcdb17974/gas | cavity wall | pitched 175 | PV,ext1`
- [ ] `100090536443` · L 86 / E 84.52 / Δ -1.48
### C088 · Σ|Δ| 1.4 · 1 certs · `hpcdb17978/gas | solid brick | flat no | RR,ext1`
### C086 · Σ|Δ| 1.4 · 1 certs · `hpcdb17978/gas | solid brick | flat no | RR,ext1`
- [ ] `line80` · L 72 / E 70.56 / Δ -1.44
### C089 · Σ|Δ| 1.4 · 1 certs · `hpcdb10356/gas | solid brick | pitched 150 | RR,ext1,sec:room heaters`
### C087 · Σ|Δ| 1.4 · 1 certs · `hpcdb10356/gas | solid brick | pitched 150 | RR,ext1,sec:room heaters`
- [ ] `100080518673` · L 57 / E 58.42 / Δ +1.42
### C090 · Σ|Δ| 1.4 · 1 certs · `hpcdb18561/gas | solid brick | pitched 250 | ext2`
### C088 · Σ|Δ| 1.4 · 1 certs · `hpcdb18561/gas | solid brick | pitched 250 | ext2`
- [ ] `235025284` · L 69 / E 67.59 / Δ -1.41
### C091 · Σ|Δ| 1.4 · 1 certs · `hpcdb18767/gas | sandstone as | (another dwelling`
### C089 · Σ|Δ| 1.4 · 1 certs · `hpcdb18767/gas | sandstone as | (another dwelling`
- [ ] `250063088` · L 73 / E 71.60 / Δ -1.40
### C092 · Σ|Δ| 1.4 · 1 certs · `hpcdb16210/gas | cavity wall | pitched 300 | sec:room heaters`
### C090 · Σ|Δ| 1.4 · 1 certs · `hpcdb16210/gas | cavity wall | pitched 300 | sec:room heaters`
- [ ] `100110097281` · L 64 / E 65.37 / Δ +1.37
### C093 · Σ|Δ| 1.4 · 1 certs · `h691/elec | solid brick | (another dwelling | whw903`
### C091 · Σ|Δ| 1.4 · 1 certs · `h691/elec | solid brick | (another dwelling | whw903`
- [ ] `10091630692` · L 58 / E 56.63 / Δ -1.37
### C094 · Σ|Δ| 1.4 · 1 certs · `hpcdb19094/gas | cavity wall | (another dwelling | ext1,sec:room heaters`
- [ ] `100031433810` · L 70 / E 68.63 / Δ -1.37
### C095 · Σ|Δ| 1.3 · 1 certs · `hpcdb19227/fuel28 | solid brick | pitched 100 | RR,ext3,sec:room heaters`
### C092 · Σ|Δ| 1.3 · 1 certs · `hpcdb19227/fuel28 | solid brick | pitched 100 | RR,ext3,sec:room heaters`
- [ ] `100012368622` · L 39 / E 40.32 / Δ +1.32
### C096 · Σ|Δ| 1.3 · 1 certs · `hpcdb19007/gas | solid brick | pitched insulated | RR,ext2,sec:room heaters`
### C093 · Σ|Δ| 1.3 · 1 certs · `hpcdb19007/gas | solid brick | pitched insulated | RR,ext2,sec:room heaters`
- [ ] `90077194` · L 65 / E 63.69 / Δ -1.31
### C097 · Σ|Δ| 1.3 · 1 certs · `hpcdb19083/gas | cavity wall | pitched 75 | RR,consv2`
### C094 · Σ|Δ| 1.3 · 1 certs · `hpcdb19083/gas | cavity wall | pitched 75 | RR,consv2`
- [ ] `100031461986` · L 70 / E 71.29 / Δ +1.29
### C098 · Σ|Δ| 1.3 · 1 certs · `h691/elec | granite or | pitched insulated | PV,ext3,whw903`
### C095 · Σ|Δ| 1.3 · 1 certs · `h691/elec | granite or | pitched insulated | PV,ext3,whw903`
- [ ] `30095054` · L 46 / E 44.74 / Δ -1.26
### C099 · Σ|Δ| 1.3 · 1 certs · `hpcdb18335/gas | cavity wall | pitched 100 | RR,ext1,sec:room heaters`
### C096 · Σ|Δ| 1.3 · 1 certs · `hpcdb18335/gas | cavity wall | pitched 100 | RR,ext1,sec:room heaters`
- [ ] `100100055589` · L 58 / E 59.26 / Δ +1.26
### C100 · Σ|Δ| 1.2 · 1 certs · `h409/elec | solid brick | (another dwelling | consv2,sec:portable electric,whw909`
### C097 · Σ|Δ| 1.2 · 1 certs · `h409/elec | solid brick | (another dwelling | consv2,sec:portable electric,whw909`
- [ ] `74061136` · L 73 / E 71.75 / Δ -1.25 <- electric storage cat7 E7: over-rate = off-peak rate/fraction too generous; needs Elmhurst tariff arbitration
### C101 · Σ|Δ| 1.2 · 1 certs · `hpcdb15101/gas | cavity wall | pitched 270 | consv3,sec:room heaters`
### C098 · Σ|Δ| 1.2 · 1 certs · `hpcdb15101/gas | cavity wall | pitched 270 | consv3,sec:room heaters`
- [ ] `100091435353` · L 65 / E 66.23 / Δ +1.23
### C102 · Σ|Δ| 1.2 · 2 certs · `h301/coal-anth | system built | (another dwelling`
### C099 · Σ|Δ| 1.2 · 2 certs · `h301/coal-anth | system built | (another dwelling`
- [ ] `10091070164` · L 69 / E 69.60 / Δ +0.60
- [ ] `10090927185` · L 79 / E 79.60 / Δ +0.60
### C103 · Σ|Δ| 1.2 · 1 certs · `hpcdb19110/gas | cavity wall | pitched no | ext3`
### C100 · Σ|Δ| 1.2 · 1 certs · `hpcdb19110/gas | cavity wall | pitched no | ext3`
- [ ] `100100614412` · L 53 / E 51.81 / Δ -1.19
### C104 · Σ|Δ| 1.2 · 1 certs · `hpcdb18658/gas | solid brick | flat no`
### C101 · Σ|Δ| 1.2 · 1 certs · `hpcdb18658/gas | solid brick | flat no`
- [ ] `217091901` · L 62 / E 60.82 / Δ -1.18
### C105 · Σ|Δ| 1.2 · 1 certs · `hpcdb17115/gas | sandstone as | (another dwelling | ext2,sec:room heaters`
### C102 · Σ|Δ| 1.2 · 1 certs · `hpcdb17115/gas | sandstone as | (another dwelling | ext2,sec:room heaters`
- [x] `line768` · L 57 / E 55.84 / Δ -1.16
### C106 · Σ|Δ| 1.2 · 1 certs · `h102/gas | solid brick | (same dwelling | ext1,sec:portable electric`
### C103 · Σ|Δ| 1.2 · 1 certs · `h102/gas | solid brick | (same dwelling | ext1,sec:portable electric`
- [ ] `217061895` · L 61 / E 59.84 / Δ -1.16
### C107 · Σ|Δ| 1.1 · 1 certs · `hpcdb15708/gas | cavity wall | pitched insulated | RR,sec:room heaters`
### C104 · Σ|Δ| 1.1 · 1 certs · `hpcdb15708/gas | cavity wall | pitched insulated | RR,sec:room heaters`
- [ ] `10002349227` · L 76 / E 77.14 / Δ +1.14
### C108 · Σ|Δ| 1.1 · 1 certs · `hpcdb15451/gas | timber frame | pitched insulated | RR,ext1,sec:room heaters`
### C105 · Σ|Δ| 1.1 · 1 certs · `hpcdb15451/gas | timber frame | pitched insulated | RR,ext1,sec:room heaters`
- [ ] `200001634005` · L 66 / E 67.11 / Δ +1.11
### C109 · Σ|Δ| 1.1 · 1 certs · `hpcdb16407/gas | cavity wall | pitched 250 | ext1,sec:room heaters`
### C106 · Σ|Δ| 1.1 · 1 certs · `hpcdb16407/gas | cavity wall | pitched 250 | ext1,sec:room heaters`
- [ ] `100071059081` · L 63 / E 64.09 / Δ +1.09
### C110 · Σ|Δ| 1.1 · 1 certs · `hpcdb19007/gas+2mains | cavity wall | pitched 350 | ext2,mv5,sec:room heaters,whw914`
### C107 · Σ|Δ| 1.1 · 1 certs · `hpcdb19007/gas+2mains | cavity wall | pitched 350 | ext2,mv5,sec:room heaters,whw914`
- [ ] `100011820199` · L 55 / E 56.06 / Δ +1.06
### C111 · Σ|Δ| 1.1 · 1 certs · `h691/elec | system built | (another dwelling | whw903`
### C108 · Σ|Δ| 1.1 · 1 certs · `h691/elec | system built | (another dwelling | whw903`
- [ ] `90214753` · L 83 / E 81.95 / Δ -1.05
### C112 · Σ|Δ| 1.0 · 1 certs · `h102/gas | cavity wall | pitched insulated | consv2`
### C109 · Σ|Δ| 1.0 · 1 certs · `h102/gas | cavity wall | pitched insulated | consv2`
- [ ] `100051051866` · L 70 / E 71.04 / Δ +1.04
### C113 · Σ|Δ| 1.0 · 1 certs · `hpcdb18737/gas | cavity wall | pitched insulated | PV,sec:room heaters`
### C110 · Σ|Δ| 1.0 · 1 certs · `hpcdb18737/gas | cavity wall | pitched insulated | PV,sec:room heaters`
- [ ] `10013836852` · L 100 / E 98.97 / Δ -1.03
### C114 · Σ|Δ| 1.0 · 1 certs · `hpcdb17985/gas | solid brick | (another dwelling`
### C111 · Σ|Δ| 1.0 · 1 certs · `hpcdb17985/gas | solid brick | (another dwelling`
- [ ] `line899` · L 73 / E 71.97 / Δ -1.03
### C115 · Σ|Δ| 1.0 · 1 certs · `hpcdb18524/gas+2mains | cavity wall | pitched 400+ | ext4`
### C112 · Σ|Δ| 1.0 · 1 certs · `hpcdb18524/gas+2mains | cavity wall | pitched 400+ | ext4`
- [ ] `40037847` · L 81 / E 79.98 / Δ -1.02
### C116 · Σ|Δ| 1.0 · 1 certs · `hpcdb19012/gas | cavity wall | pitched insulated`
### C113 · Σ|Δ| 1.0 · 1 certs · `hpcdb19012/gas | cavity wall | pitched insulated`
- [ ] `10070056075` · L 80 / E 78.99 / Δ -1.01
### C117 · Σ|Δ| 1.0 · 1 certs · `hpcdb16843/gas+2mains | cavity wall | pitched insulated | PV,RR,ext2`
### C114 · Σ|Δ| 1.0 · 1 certs · `hpcdb16843/gas+2mains | cavity wall | pitched insulated | PV,RR,ext2`
- [ ] `200131078` · L 86 / E 85.00 / Δ -1.00
### C118 · Σ|Δ| 1.0 · 1 certs · `hpcdb17489/gas | cavity wall | pitched 270 | PV,consv2,ext1,sec:room heaters`
### C115 · Σ|Δ| 1.0 · 1 certs · `hpcdb17489/gas | cavity wall | pitched 270 | PV,consv2,ext1,sec:room heaters`
- [ ] `10000245212` · L 101 / E 100.00 / Δ -1.00
### C119 · Σ|Δ| 1.0 · 1 certs · `h191/elec | solid brick | (another dwelling | ext2,whw909`
### C116 · Σ|Δ| 1.0 · 1 certs · `h191/elec | solid brick | (another dwelling | ext2,whw909`
- [ ] `15129162` · L 62 / E 61.00 / Δ -1.00
### C120 · Σ|Δ| 1.0 · 1 certs · `h301/coal-anth | cavity wall | pitched 270`
### C117 · Σ|Δ| 1.0 · 1 certs · `h301/coal-anth | cavity wall | pitched 270`
- [ ] `23032873` · L 73 / E 72.00 / Δ -1.00
### C121 · Σ|Δ| 1.0 · 1 certs · `hpcdb16930/gas | cavity wall | pitched unknown | RR,ext1,sec:room heaters`
### C118 · Σ|Δ| 1.0 · 1 certs · `hpcdb16930/gas | cavity wall | pitched unknown | RR,ext1,sec:room heaters`
- [ ] `45019020` · L 62 / E 61.01 / Δ -0.99
### C122 · Σ|Δ| 1.0 · 1 certs · `hpcdb17939/gas | solid brick | (another dwelling`
### C119 · Σ|Δ| 1.0 · 1 certs · `hpcdb17939/gas | solid brick | (another dwelling`
- [ ] `42065028` · L 59 / E 58.02 / Δ -0.98
### C123 · Σ|Δ| 1.0 · 1 certs · `hpcdb10071/gas | cavity wall | pitched 150 | RR`
### C120 · Σ|Δ| 1.0 · 1 certs · `hpcdb10071/gas | cavity wall | pitched 150 | RR`
- [ ] `10032928147` · L 77 / E 76.04 / Δ -0.96
### C124 · Σ|Δ| 1.0 · 1 certs · `hpcdb17045/gas | cavity wall | pitched 300`
### C121 · Σ|Δ| 1.0 · 1 certs · `hpcdb17045/gas | cavity wall | pitched 300`
- [ ] `10010678937` · L 78 / E 77.04 / Δ -0.96
### C125 · Σ|Δ| 1.0 · 1 certs · `hpcdb15247/gas | cavity wall | pitched insulated | RR`
### C122 · Σ|Δ| 1.0 · 1 certs · `hpcdb15247/gas | cavity wall | pitched insulated | RR`
- [ ] `100011010151` · L 62 / E 62.96 / Δ +0.96
### C126 · Σ|Δ| 1.0 · 1 certs · `hpcdb16406/gas | solid brick | pitched insulated | RR,consv2,ext2,sec:room heaters`
### C123 · Σ|Δ| 1.0 · 1 certs · `hpcdb16406/gas | solid brick | pitched insulated | RR,consv2,ext2,sec:room heaters`
- [ ] `100050477371` · L 65 / E 64.04 / Δ -0.96
### C127 · Σ|Δ| 0.9 · 1 certs · `hpcdb17529/fuel28 | cavity wall | pitched insulated | RR,ext2,sec:room heaters`
### C124 · Σ|Δ| 0.9 · 1 certs · `hpcdb17529/fuel28 | cavity wall | pitched insulated | RR,ext2,sec:room heaters`
- [ ] `10002945522` · L 61 / E 61.94 / Δ +0.94
### C128 · Σ|Δ| 0.9 · 1 certs · `h691/elec+2mains | cob as | pitched 300 | whw903`
### C125 · Σ|Δ| 0.9 · 1 certs · `h691/elec+2mains | cob as | pitched 300 | whw903`
- [ ] `10032957680` · L 45 / E 45.94 / Δ +0.94
### C129 · Σ|Δ| 0.9 · 1 certs · `hpcdb18204/gas | solid brick | pitched 400+ | PV,ext2`
### C126 · Σ|Δ| 0.9 · 1 certs · `hpcdb18204/gas | solid brick | pitched 400+ | PV,ext2`
- [ ] `2465057465` · L 81 / E 81.93 / Δ +0.93
### C130 · Σ|Δ| 0.9 · 1 certs · `hpcdb19019/gas | solid brick | pitched 100 | ext3,sec:room heaters`
### C127 · Σ|Δ| 0.9 · 1 certs · `hpcdb19019/gas | solid brick | pitched 100 | ext3,sec:room heaters`
- [ ] `100090616327` · L 63 / E 63.93 / Δ +0.93
### C131 · Σ|Δ| 0.9 · 1 certs · `hpcdb17612/gas | cavity wall | pitched 270 | ext1`
### C128 · Σ|Δ| 0.9 · 1 certs · `hpcdb17612/gas | cavity wall | pitched 270 | ext1`
- [ ] `100012753833` · L 74 / E 73.07 / Δ -0.93
### C132 · Σ|Δ| 0.9 · 1 certs · `hpcdb19006/gas | solid brick | pitched 75 | ext1,sec:room heaters`
### C129 · Σ|Δ| 0.9 · 1 certs · `hpcdb19006/gas | solid brick | pitched 75 | ext1,sec:room heaters`
- [ ] `100031269525` · L 53 / E 53.91 / Δ +0.91
### C133 · Σ|Δ| 0.9 · 1 certs · `hpcdb17964/gas | cavity wall | pitched insulated | consv3`
### C130 · Σ|Δ| 0.9 · 1 certs · `hpcdb17964/gas | cavity wall | pitched insulated | consv3`
- [ ] `200003725358` · L 75 / E 74.09 / Δ -0.91
### C134 · Σ|Δ| 0.9 · 1 certs · `hpcdb17507/gas | solid brick | pitched insulated | RR,ext3`
### C131 · Σ|Δ| 0.9 · 1 certs · `hpcdb17507/gas | solid brick | pitched insulated | RR,ext3`
- [ ] `100050986162` · L 62 / E 61.10 / Δ -0.90
### C135 · Σ|Δ| 0.9 · 1 certs · `hpcdb17985/gas | cavity wall | (another dwelling | mv2`
### C132 · Σ|Δ| 0.9 · 1 certs · `hpcdb17985/gas | cavity wall | (another dwelling | mv2`
- [ ] `5300000141` · L 78 / E 77.10 / Δ -0.90
### C136 · Σ|Δ| 0.9 · 1 certs · `hpcdb18616/gas | cavity wall | pitched 250 | sec:room heaters`
### C133 · Σ|Δ| 0.9 · 1 certs · `hpcdb18616/gas | cavity wall | pitched 250 | sec:room heaters`
- [ ] `100050618404` · L 73 / E 73.89 / Δ +0.89
### C137 · Σ|Δ| 0.9 · 1 certs · `hpcdb17507/gas | cavity wall | pitched 250 | PV,ext1`
### C134 · Σ|Δ| 0.9 · 1 certs · `hpcdb17507/gas | cavity wall | pitched 250 | PV,ext1`
- [ ] `100090476016` · L 81 / E 81.89 / Δ +0.89
### C138 · Σ|Δ| 0.9 · 1 certs · `h691/elec | timber frame | pitched 200 | RR,ext3,whw903`
### C135 · Σ|Δ| 0.9 · 1 certs · `h691/elec | timber frame | pitched 200 | RR,ext3,whw903`
- [ ] `10012119141` · L 45 / E 45.89 / Δ +0.89
### C139 · Σ|Δ| 0.9 · 1 certs · `h524/elec | cavity wall | pitched 300 | PV`
### C136 · Σ|Δ| 0.9 · 1 certs · `h524/elec | cavity wall | pitched 300 | PV`
- [ ] `100040938206` · L 75 / E 75.89 / Δ +0.89
### C140 · Σ|Δ| 0.9 · 1 certs · `hpcdb18234/gas | cavity wall | pitched insulated | RR,consv2`
### C137 · Σ|Δ| 0.9 · 1 certs · `hpcdb18234/gas | cavity wall | pitched insulated | RR,consv2`
- [ ] `38188474` · L 76 / E 76.87 / Δ +0.87
### C141 · Σ|Δ| 0.9 · 1 certs · `hpcdb16777/gas | cavity wall | pitched 100 | ext1,sec:room heaters`
### C138 · Σ|Δ| 0.9 · 1 certs · `hpcdb16777/gas | cavity wall | pitched 100 | ext1,sec:room heaters`
- [ ] `100061194957` · L 69 / E 69.87 / Δ +0.87
### C142 · Σ|Δ| 0.9 · 1 certs · `hpcdb18559/gas+2mains | solid brick | pitched 200 | whw914`
### C139 · Σ|Δ| 0.9 · 1 certs · `hpcdb18559/gas+2mains | solid brick | pitched 200 | whw914`
- [ ] `100021236527` · L 72 / E 71.13 / Δ -0.87
### C143 · Σ|Δ| 0.9 · 1 certs · `hpcdb18907/gas | cavity wall | pitched 270 | consv2`
### C140 · Σ|Δ| 0.9 · 1 certs · `hpcdb18907/gas | cavity wall | pitched 270 | consv2`
- [ ] `100040193752` · L 71 / E 71.86 / Δ +0.86
### C144 · Σ|Δ| 0.9 · 1 certs · `hpcdb10327/gas | cavity wall | (another dwelling`
### C141 · Σ|Δ| 0.9 · 1 certs · `hpcdb10327/gas | cavity wall | (another dwelling`
- [ ] `100060701552` · L 74 / E 74.86 / Δ +0.86
### C145 · Σ|Δ| 0.9 · 1 certs · `h691/elec | system built | flat insulated | whw903`
### C142 · Σ|Δ| 0.9 · 1 certs · `h691/elec | system built | flat insulated | whw903`
- [ ] `10070396146` · L 61 / E 60.14 / Δ -0.86
### C146 · Σ|Δ| 0.8 · 1 certs · `hpcdb8587/gas | cavity wall | (another dwelling`
### C143 · Σ|Δ| 0.8 · 1 certs · `hpcdb8587/gas | cavity wall | (another dwelling`
- [ ] `100030528930` · L 74 / E 73.16 / Δ -0.84
### C147 · Σ|Δ| 0.8 · 1 certs · `hpcdb18212/gas | solid brick | (another dwelling`
### C144 · Σ|Δ| 0.8 · 1 certs · `hpcdb18212/gas | solid brick | (another dwelling`
- [ ] `100020982570` · L 72 / E 71.17 / Δ -0.83
### C148 · Σ|Δ| 0.8 · 1 certs · `hpcdb16888/gas | cavity wall | pitched 350 | consv2`
### C145 · Σ|Δ| 0.8 · 1 certs · `hpcdb16888/gas | cavity wall | pitched 350 | consv2`
- [ ] `394024487` · L 75 / E 74.17 / Δ -0.83
### C149 · Σ|Δ| 0.8 · 1 certs · `hpcdb17503/gas | solid brick | pitched insulated | RR,ext1,mv4`
### C146 · Σ|Δ| 0.8 · 1 certs · `hpcdb17503/gas | solid brick | pitched insulated | RR,ext1,mv4`
- [ ] `217070698` · L 78 / E 78.83 / Δ +0.83
### C150 · Σ|Δ| 0.8 · 1 certs · `hpcdb15709/gas | cavity wall | (another dwelling | ext1`
### C147 · Σ|Δ| 0.8 · 1 certs · `hpcdb15709/gas | cavity wall | (another dwelling | ext1`
- [ ] `77022508` · L 69 / E 68.18 / Δ -0.82
### C151 · Σ|Δ| 0.8 · 1 certs · `hpcdb18496/gas | cavity wall | pitched 250 | RR,consv4`
### C148 · Σ|Δ| 0.8 · 1 certs · `hpcdb18496/gas | cavity wall | pitched 250 | RR,consv4`
- [ ] `100040259104` · L 68 / E 68.82 / Δ +0.82
### C152 · Σ|Δ| 0.8 · 1 certs · `hpcdb18559/gas | solid brick | pitched 270 | ext1`
### C149 · Σ|Δ| 0.8 · 1 certs · `hpcdb18559/gas | solid brick | pitched 270 | ext1`
- [ ] `100031399026` · L 70 / E 70.81 / Δ +0.81
### C153 · Σ|Δ| 0.8 · 1 certs · `hpcdb16374/gas | cavity wall | pitched unknown`
### C150 · Σ|Δ| 0.8 · 1 certs · `hpcdb16374/gas | cavity wall | pitched unknown`
- [ ] `10009645698` · L 67 / E 67.81 / Δ +0.81
### C154 · Σ|Δ| 0.8 · 1 certs · `hpcdb16395/gas | timber frame | thatched with | ext1,sec:room heaters`
### C151 · Σ|Δ| 0.8 · 1 certs · `hpcdb16395/gas | timber frame | thatched with | ext1,sec:room heaters`
- [ ] `100080818887` · L 56 / E 55.19 / Δ -0.81
### C155 · Σ|Δ| 0.8 · 1 certs · `hpcdb16835/gas | solid brick | pitched insulated | RR,ext1`
### C152 · Σ|Δ| 0.8 · 1 certs · `hpcdb16835/gas | solid brick | pitched insulated | RR,ext1`
- [ ] `100012374381` · L 69 / E 69.80 / Δ +0.80
### C156 · Σ|Δ| 0.8 · 1 certs · `hpcdb17560/gas | cavity wall | pitched 250 | ext2`
### C153 · Σ|Δ| 0.8 · 1 certs · `hpcdb17560/gas | cavity wall | pitched 250 | ext2`
- [ ] `100012350270` · L 78 / E 77.20 / Δ -0.80
### C157 · Σ|Δ| 0.8 · 1 certs · `hpcdb15166/gas+2mains | sandstone as | pitched no | PV,ext4,sec:room heaters,whw914`
### C154 · Σ|Δ| 0.8 · 1 certs · `hpcdb15166/gas+2mains | sandstone as | pitched no | PV,ext4,sec:room heaters,whw914`
- [ ] `100051109723` · L 60 / E 60.78 / Δ +0.78
### C158 · Σ|Δ| 0.8 · 1 certs · `hpcdb18911/gas | cavity wall | pitched 50 | consv4`
### C155 · Σ|Δ| 0.8 · 1 certs · `hpcdb18911/gas | cavity wall | pitched 50 | consv4`
- [ ] `100061616915` · L 63 / E 62.22 / Δ -0.78
### C159 · Σ|Δ| 0.8 · 1 certs · `h691/elec | cavity wall | pitched 200 | whw903`
### C156 · Σ|Δ| 0.8 · 1 certs · `h691/elec | cavity wall | pitched 200 | whw903`
- [ ] `line71` · L 74 / E 74.77 / Δ +0.77
### C160 · Σ|Δ| 0.8 · 1 certs · `hpcdb17986/gas | cavity wall | (another dwelling`
### C157 · Σ|Δ| 0.8 · 1 certs · `hpcdb17986/gas | cavity wall | (another dwelling`
- [ ] `100011603934` · L 72 / E 71.23 / Δ -0.77
### C161 · Σ|Δ| 0.8 · 1 certs · `hpcdb10244/gas | cavity wall | pitched 100`
### C158 · Σ|Δ| 0.8 · 1 certs · `hpcdb10244/gas | cavity wall | pitched 100`
- [ ] `24030987` · L 73 / E 73.76 / Δ +0.76
### C162 · Σ|Δ| 0.8 · 1 certs · `h193/elec | solid brick | (another dwelling | whw909`
### C159 · Σ|Δ| 0.8 · 1 certs · `h193/elec | solid brick | (another dwelling | whw909`
- [ ] `100032043038` · L 74 / E 73.24 / Δ -0.76
### C163 · Σ|Δ| 0.8 · 1 certs · `hpcdb17513/gas | cavity wall | pitched unknown`
### C160 · Σ|Δ| 0.8 · 1 certs · `hpcdb17513/gas | cavity wall | pitched unknown`
- [ ] `100010866608` · L 71 / E 70.24 / Δ -0.76
### C164 · Σ|Δ| 0.7 · 1 certs · `hpcdb17965/gas | cavity wall | pitched insulated | RR,ext1,sec:room heaters`
### C161 · Σ|Δ| 0.7 · 1 certs · `hpcdb17965/gas | cavity wall | pitched insulated | RR,ext1,sec:room heaters`
- [ ] `100090399615` · L 67 / E 67.75 / Δ +0.75
### C165 · Σ|Δ| 0.7 · 1 certs · `h691/elec | solid brick | roof room(s) | RR,ext2,sec:room heaters,whw903`
- [ ] `100062174575` · L 46 / E 46.75 / Δ +0.75
### C166 · Σ|Δ| 0.7 · 1 certs · `hpcdb16137/gas | solid brick | pitched 150`
### C162 · Σ|Δ| 0.7 · 1 certs · `hpcdb16137/gas | solid brick | pitched 150`
- [ ] `200004296092` · L 71 / E 71.74 / Δ +0.74
### C167 · Σ|Δ| 0.7 · 1 certs · `hpcdb17576/gas | cavity wall | pitched insulated | RR,consv2`
### C163 · Σ|Δ| 0.7 · 1 certs · `hpcdb17576/gas | cavity wall | pitched insulated | RR,consv2`
- [ ] `10012341135` · L 79 / E 79.73 / Δ +0.73
### C168 · Σ|Δ| 0.7 · 1 certs · `h409/elec | cavity wall | (another dwelling | sec:portable electric,whw903`
### C164 · Σ|Δ| 0.7 · 1 certs · `h409/elec | cavity wall | (another dwelling | sec:portable electric,whw903`
- [ ] `100091005853` · L 70 / E 69.27 / Δ -0.73
### C169 · Σ|Δ| 0.7 · 1 certs · `hpcdb18908/gas | cavity wall | pitched 175`
### C165 · Σ|Δ| 0.7 · 1 certs · `hpcdb18908/gas | cavity wall | pitched 175`
- [ ] `100021533514` · L 71 / E 71.73 / Δ +0.73
### C170 · Σ|Δ| 0.7 · 1 certs · `h301/coal-anth | solid brick | (another dwelling`
### C166 · Σ|Δ| 0.7 · 1 certs · `h301/coal-anth | solid brick | (another dwelling`
- [ ] `5062075` · L 69 / E 69.72 / Δ +0.72
### C171 · Σ|Δ| 0.7 · 1 certs · `hpcdb18112/gas | cavity wall | pitched 100 | RR,ext1`
### C167 · Σ|Δ| 0.7 · 1 certs · `hpcdb18112/gas | cavity wall | pitched 100 | RR,ext1`
- [ ] `100040813308` · L 62 / E 62.72 / Δ +0.72
### C172 · Σ|Δ| 0.7 · 1 certs · `h104/gas | solid brick | pitched unknown | ext2`
### C168 · Σ|Δ| 0.7 · 1 certs · `h104/gas | solid brick | pitched unknown | ext2`
- [ ] `38105600` · L 68 / E 67.28 / Δ -0.72
### C173 · Σ|Δ| 0.7 · 1 certs · `h104/gas | solid brick | pitched 200`
### C169 · Σ|Δ| 0.7 · 1 certs · `h104/gas | solid brick | pitched 200`
- [ ] `line255` · L 72 / E 71.29 / Δ -0.71
### C174 · Σ|Δ| 0.7 · 1 certs · `h304/elec | cavity wall | (another dwelling | whw950`
### C170 · Σ|Δ| 0.7 · 1 certs · `h304/elec | cavity wall | (another dwelling | whw950`
- [ ] `5300047580` · L 69 / E 68.30 / Δ -0.70
### C175 · Σ|Δ| 0.7 · 1 certs · `h104/gas | cavity wall | pitched 250 | ext1`
### C171 · Σ|Δ| 0.7 · 1 certs · `h104/gas | cavity wall | pitched 250 | ext1`
- [ ] `100110433403` · L 69 / E 68.32 / Δ -0.68
### C176 · Σ|Δ| 0.7 · 1 certs · `hpcdb16835/gas | cavity wall | pitched insulated`
### C172 · Σ|Δ| 0.7 · 1 certs · `hpcdb16835/gas | cavity wall | pitched insulated`
- [ ] `10093416558` · L 79 / E 78.32 / Δ -0.68
### C177 · Σ|Δ| 0.7 · 1 certs · `hpcdb18251/gas | solid brick | pitched 100`
### C173 · Σ|Δ| 0.7 · 1 certs · `hpcdb18251/gas | solid brick | pitched 100`
- [ ] `100050958217` · L 68 / E 68.68 / Δ +0.68
### C178 · Σ|Δ| 0.7 · 1 certs · `hpcdb18224/gas | solid brick | pitched 225 | ext1`
### C174 · Σ|Δ| 0.7 · 1 certs · `hpcdb18224/gas | solid brick | pitched 225 | ext1`
- [ ] `100022667797` · L 68 / E 67.32 / Δ -0.68
### C179 · Σ|Δ| 0.7 · 1 certs · `hpcdb10243/gas | cavity wall | pitched insulated | RR,sec:room heaters`
### C175 · Σ|Δ| 0.7 · 1 certs · `hpcdb10243/gas | cavity wall | pitched insulated | RR,sec:room heaters`
- [ ] `100030528925` · L 78 / E 78.65 / Δ +0.65
### C180 · Σ|Δ| 0.6 · 1 certs · `hpcdb17657/gas | cavity wall | (another dwelling`
### C176 · Σ|Δ| 0.6 · 1 certs · `hpcdb17657/gas | cavity wall | (another dwelling`
- [ ] `100110300037` · L 74 / E 73.35 / Δ -0.65
### C181 · Σ|Δ| 0.6 · 1 certs · `hpcdb2044/gas | solid brick | (another dwelling | ext1`
### C177 · Σ|Δ| 0.6 · 1 certs · `hpcdb2044/gas | solid brick | (another dwelling | ext1`
- [ ] `217092450` · L 52 / E 52.64 / Δ +0.64
### C182 · Σ|Δ| 0.6 · 1 certs · `hpcdb15101/gas | solid brick | pitched 300`
### C178 · Σ|Δ| 0.6 · 1 certs · `hpcdb15101/gas | solid brick | pitched 300`
- [ ] `100061164545` · L 72 / E 71.36 / Δ -0.64
### C183 · Σ|Δ| 0.6 · 1 certs · `hpcdb10328/gas | cavity wall | pitched unknown`
### C179 · Σ|Δ| 0.6 · 1 certs · `hpcdb10328/gas | cavity wall | pitched unknown`
- [ ] `100051075936` · L 71 / E 70.36 / Δ -0.64
### C184 · Σ|Δ| 0.6 · 1 certs · `hpcdb17507/gas | cavity wall | roof room(s) | RR,sec:room heaters`
### C180 · Σ|Δ| 0.6 · 1 certs · `hpcdb17507/gas | cavity wall | roof room(s) | RR,sec:room heaters`
- [ ] `100011565830` · L 72 / E 72.64 / Δ +0.64
### C185 · Σ|Δ| 0.6 · 1 certs · `hpcdb15700/gas | sandstone with | pitched 100 | RR,sec:room heaters`
### C181 · Σ|Δ| 0.6 · 1 certs · `hpcdb15700/gas | sandstone with | pitched 100 | RR,sec:room heaters`
- [ ] `61010956` · L 75 / E 74.37 / Δ -0.63
### C186 · Σ|Δ| 0.6 · 1 certs · `hpcdb17115/gas+2mains | cavity wall | pitched insulated | RR,ext4,sec:room heaters`
### C182 · Σ|Δ| 0.6 · 1 certs · `hpcdb17115/gas+2mains | cavity wall | pitched insulated | RR,ext4,sec:room heaters`
- [ ] `100110752514` · L 67 / E 67.62 / Δ +0.62
### C187 · Σ|Δ| 0.6 · 1 certs · `h404/elec | cavity wall | pitched 175 | sec:room heaters,whw909`
### C183 · Σ|Δ| 0.6 · 1 certs · `h404/elec | cavity wall | pitched 175 | sec:room heaters,whw909`
- [ ] `100070295212` · L 75 / E 74.38 / Δ -0.62
### C188 · Σ|Δ| 0.6 · 1 certs · `hpcdb18766/gas+2mains | sandstone as | pitched 100 | RR`
### C184 · Σ|Δ| 0.6 · 1 certs · `hpcdb18766/gas+2mains | sandstone as | pitched 100 | RR`
- [ ] `100012534027` · L 65 / E 64.38 / Δ -0.62
### C189 · Σ|Δ| 0.6 · 1 certs · `hpcdb9058/fuel28 | solid brick | pitched 100 | RR,ext2,sec:room heaters`
### C185 · Σ|Δ| 0.6 · 1 certs · `hpcdb9058/fuel28 | solid brick | pitched 100 | RR,ext2,sec:room heaters`
- [x] `10009812472` · L 40 / E 39.40 / Δ -0.60
### C190 · Σ|Δ| 0.6 · 1 certs · `hpcdb18218/gas | solid brick | (another dwelling`
### C186 · Σ|Δ| 0.6 · 1 certs · `hpcdb18218/gas | solid brick | (another dwelling`
- [ ] `34080035` · L 77 / E 76.41 / Δ -0.59
### C191 · Σ|Δ| 0.6 · 1 certs · `hpcdb16137/gas | cavity wall | pitched 150 | RR,ext1`
### C187 · Σ|Δ| 0.6 · 1 certs · `hpcdb16137/gas | cavity wall | pitched 150 | RR,ext1`
- [ ] `21032732` · L 69 / E 69.59 / Δ +0.59
### C192 · Σ|Δ| 0.6 · 1 certs · `h101/gas | cavity wall | pitched 100 | RR,ext1`
### C188 · Σ|Δ| 0.6 · 1 certs · `h101/gas | cavity wall | pitched 100 | RR,ext1`
- [ ] `100060562056` · L 66 / E 65.41 / Δ -0.59
### C193 · Σ|Δ| 0.6 · 1 certs · `hpcdb17514/fuel27 | cavity wall | pitched 400+ | PV,ext2`
### C189 · Σ|Δ| 0.6 · 1 certs · `hpcdb17514/fuel27 | cavity wall | pitched 400+ | PV,ext2`
- [ ] `100091086558` · L 79 / E 79.58 / Δ +0.58
### C194 · Σ|Δ| 0.6 · 1 certs · `hpcdb18908/gas | solid brick | (another dwelling`
### C190 · Σ|Δ| 0.6 · 1 certs · `hpcdb18908/gas | solid brick | (another dwelling`
- [ ] `line599` · L 74 / E 73.42 / Δ -0.58
### C195 · Σ|Δ| 0.6 · 1 certs · `hpcdb17973/gas | cavity wall | pitched insulated`
### C191 · Σ|Δ| 0.6 · 1 certs · `hpcdb17973/gas | cavity wall | pitched insulated`
- [ ] `100020407741` · L 72 / E 71.42 / Δ -0.58
### C196 · Σ|Δ| 0.6 · 1 certs · `hpcdb19007/gas | cavity wall | pitched 200 | consv2,ext1,sec:room heaters`
### C192 · Σ|Δ| 0.6 · 1 certs · `hpcdb19007/gas | cavity wall | pitched 200 | consv2,ext1,sec:room heaters`
- [ ] `100050839457` · L 70 / E 70.57 / Δ +0.57
### C197 · Σ|Δ| 0.6 · 1 certs · `hpcdb19007/gas | solid brick | pitched insulated | RR,sec:room heaters`
### C193 · Σ|Δ| 0.6 · 1 certs · `hpcdb19007/gas | solid brick | pitched insulated | RR,sec:room heaters`
- [ ] `42105250` · L 59 / E 59.57 / Δ +0.57
### C198 · Σ|Δ| 0.6 · 1 certs · `hpcdb1917/gas | timber frame | pitched insulated`
### C194 · Σ|Δ| 0.6 · 1 certs · `hpcdb1917/gas | timber frame | pitched insulated`
- [ ] `77200509` · L 69 / E 69.57 / Δ +0.57
### C199 · Σ|Δ| 0.6 · 1 certs · `hpcdb10356/gas | cavity wall | pitched insulated | ext2`
### C195 · Σ|Δ| 0.6 · 1 certs · `hpcdb10356/gas | cavity wall | pitched insulated | ext2`
- [ ] `200040534` · L 65 / E 65.56 / Δ +0.56
### C200 · Σ|Δ| 0.6 · 1 certs · `hpcdb17507/gas | solid brick | pitched 150 | ext1,mv2`
### C196 · Σ|Δ| 0.6 · 1 certs · `hpcdb17507/gas | solid brick | pitched 150 | ext1,mv2`
- [ ] `200049463` · L 69 / E 69.56 / Δ +0.56
### C201 · Σ|Δ| 0.6 · 1 certs · `h126/fuel28+2mains | cavity wall | pitched 300 | RR,consv2,ext3,sec:room heaters`
### C197 · Σ|Δ| 0.6 · 1 certs · `h126/fuel28+2mains | cavity wall | pitched 300 | RR,consv2,ext3,sec:room heaters`
- [ ] `100062527568` · L 61 / E 61.56 / Δ +0.56
### C202 · Σ|Δ| 0.6 · 1 certs · `hpcdb15700/gas | cavity wall | pitched limited | RR,ext1`
### C198 · Σ|Δ| 0.6 · 1 certs · `hpcdb15700/gas | cavity wall | pitched limited | RR,ext1`
- [ ] `100100268900` · L 69 / E 69.56 / Δ +0.56
### C203 · Σ|Δ| 0.6 · 1 certs · `hpcdb17004/fuel27+2mains | sandstone as | pitched no | ext3,sec:room heaters`
### C199 · Σ|Δ| 0.6 · 1 certs · `hpcdb17004/fuel27+2mains | sandstone as | pitched no | ext3,sec:room heaters`
- [x] `200003110548` · L 29 / E 28.45 / Δ -0.55
### C204 · Σ|Δ| 0.5 · 1 certs · `hpcdb9464/gas | cavity wall | pitched 150 | ext1`
### C200 · Σ|Δ| 0.5 · 1 certs · `hpcdb9464/gas | cavity wall | pitched 150 | ext1`
- [ ] `90036914` · L 60 / E 60.55 / Δ +0.55
### C205 · Σ|Δ| 0.5 · 1 certs · `h409/elec | cavity wall | pitched 250 | mv5,sec:room heaters,whw903`
### C201 · Σ|Δ| 0.5 · 1 certs · `h409/elec | cavity wall | pitched 250 | mv5,sec:room heaters,whw903`
- [ ] `10004742671` · L 70 / E 69.46 / Δ -0.54
### C206 · Σ|Δ| 0.5 · 1 certs · `hpcdb18251/gas | cavity wall | roof room(s) | RR`
### C202 · Σ|Δ| 0.5 · 1 certs · `hpcdb18251/gas | cavity wall | roof room(s) | RR`
- [ ] `100010657450` · L 75 / E 75.54 / Δ +0.54
### C207 · Σ|Δ| 0.5 · 1 certs · `hpcdb17507/gas | cavity wall | pitched 150 | ext1`
### C203 · Σ|Δ| 0.5 · 1 certs · `hpcdb17507/gas | cavity wall | pitched 150 | ext1`
- [ ] `100061834344` · L 71 / E 70.46 / Δ -0.54
### C208 · Σ|Δ| 0.5 · 1 certs · `h113/gas | cavity wall | pitched 200`
### C204 · Σ|Δ| 0.5 · 1 certs · `h113/gas | cavity wall | pitched 200`
- [ ] `4510097194` · L 70 / E 70.53 / Δ +0.53
### C209 · Σ|Δ| 0.5 · 1 certs · `hpcdb18907/gas | cavity wall | pitched 125 | ext1`
### C205 · Σ|Δ| 0.5 · 1 certs · `hpcdb18907/gas | cavity wall | pitched 125 | ext1`
- [ ] `100010913220` · L 72 / E 72.53 / Δ +0.53
### C210 · Σ|Δ| 0.5 · 1 certs · `hpcdb18242/gas | sandstone as | pitched 150 | ext2,sec:room heaters`
### C206 · Σ|Δ| 0.5 · 1 certs · `hpcdb18242/gas | sandstone as | pitched 150 | ext2,sec:room heaters`
- [ ] `43074051` · L 63 / E 62.48 / Δ -0.52
### C211 · Σ|Δ| 0.5 · 1 certs · `h104/gas | cavity wall | pitched 300`
### C207 · Σ|Δ| 0.5 · 1 certs · `h104/gas | cavity wall | pitched 300`
- [ ] `100010723814` · L 69 / E 69.52 / Δ +0.52
### C212 · Σ|Δ| 0.5 · 1 certs · `hpcdb16137/gas | cavity wall | (another dwelling`
### C208 · Σ|Δ| 0.5 · 1 certs · `hpcdb16137/gas | cavity wall | (another dwelling`
- [ ] `100020955792` · L 77 / E 77.52 / Δ +0.52
### C213 · Σ|Δ| 0.5 · 1 certs · `hpcdb19079/gas | cavity wall | pitched 200 | ext1,sec:room heaters`
### C209 · Σ|Δ| 0.5 · 1 certs · `hpcdb19079/gas | cavity wall | pitched 200 | ext1,sec:room heaters`
- [ ] `77172223` · L 65 / E 65.52 / Δ +0.52
### C214 · Σ|Δ| 0.5 · 1 certs · `hpcdb10242/gas | granite or | pitched insulated | RR,sec:room heaters`
### C210 · Σ|Δ| 0.5 · 1 certs · `hpcdb10242/gas | granite or | pitched insulated | RR,sec:room heaters`
- [ ] `100051245439` · L 62 / E 61.48 / Δ -0.52
### C215 · Σ|Δ| 0.5 · 1 certs · `hpcdb10328/gas | cavity wall | (another dwelling`
### C211 · Σ|Δ| 0.5 · 1 certs · `hpcdb10328/gas | cavity wall | (another dwelling`
- [ ] `100012553958` · L 67 / E 66.48 / Δ -0.52
### C216 · Σ|Δ| 0.5 · 1 certs · `hpcdb10033/gas | cavity wall | pitched 200 | ext2,sec:room heaters`
### C212 · Σ|Δ| 0.5 · 1 certs · `hpcdb10033/gas | cavity wall | pitched 200 | ext2,sec:room heaters`
- [ ] `100110108632` · L 63 / E 63.51 / Δ +0.51
### C217 · Σ|Δ| 0.5 · 1 certs · `h109/gas | cavity wall | pitched 270 | consv2,ext1,sec:room heaters`
### C213 · Σ|Δ| 0.5 · 1 certs · `h109/gas | cavity wall | pitched 270 | consv2,ext1,sec:room heaters`
- [ ] `100091102581` · L 65 / E 65.51 / Δ +0.51
### C218 · Σ|Δ| 0.5 · 1 certs · `hpcdb19008/gas | cavity wall | pitched 150 | ext1,sec:room heaters`
### C214 · Σ|Δ| 0.5 · 1 certs · `hpcdb19008/gas | cavity wall | pitched 150 | ext1,sec:room heaters`
- [ ] `10002326688` · L 69 / E 68.50 / Δ -0.50
### C219 · Σ|Δ| 0.5 · 1 certs · `h129/fuel28 | granite or | pitched 200 | ext2,sec:room heaters`
### C215 · Σ|Δ| 0.5 · 1 certs · `h129/fuel28 | granite or | pitched 200 | ext2,sec:room heaters`
- [ ] `10023132869` · L 46 / E 45.50 / Δ -0.50
### C220 · Σ|Δ| 0.5 · 1 certs · `hpcdb9007/fuel28 | sandstone as | pitched insulated | RR,ext4,sec:room heaters`
### C216 · Σ|Δ| 0.5 · 1 certs · `hpcdb9007/fuel28 | sandstone as | pitched insulated | RR,ext4,sec:room heaters`
- [ ] `10091707271` · L 41 / E 41.50 / Δ +0.50
## Resolved ≤0.5 (773 certs — no action)
## Resolved ≤0.5 (777 certs — no action)
<details><summary>expand</summary>
@ -926,6 +914,7 @@ Statuses: `[ ]` todo · `[x]` resolved ≤0.5 · 🔧 fix landed · ⚠ xfail en
- [x] `100010779964` · L 72 / E 72.34 / Δ +0.34 · `hpcdb17683/gas | sandstone as | pitched 75`
- [x] `64106486` · L 72 / E 71.66 / Δ -0.34 · `hpcdb17926/fuel27 | timber frame | pitched 270 | ext1`
- [x] `100060109253` · L 62 / E 62.34 / Δ +0.34 · `hpcdb18435/gas | solid brick | pitched insulated | RR,ext2,sec:room heaters`
- [x] `47084930` · L 74 / E 74.34 / Δ +0.34 · `hpcdb17815/gas | cavity wall | flat insulated`
- [x] `200002819281` · L 72 / E 71.66 / Δ -0.34 · `h104/gas | solid brick | pitched insulated | RR,ext1`
- [x] `100051237659` · L 65 / E 64.67 / Δ -0.33 · `hpcdb18560/gas | sandstone as | pitched insulated | sec:room heaters`
- [x] `12027355` · L 70 / E 70.33 / Δ +0.33 · `hpcdb1838/gas | solid brick | pitched insulated | ext1`
@ -999,6 +988,7 @@ Statuses: `[ ]` todo · `[x]` resolved ≤0.5 · 🔧 fix landed · ⚠ xfail en
- [x] `32049938` · L 63 / E 62.71 / Δ -0.29 · `hpcdb17983/gas | solid brick | pitched 350 | sec:room heaters`
- [x] `100110433442` · L 70 / E 69.71 / Δ -0.29 · `hpcdb16839/gas | cavity wall | pitched 400+ | ext1`
- [x] `100070532674` · L 76 / E 76.29 / Δ +0.29 · `hpcdb17983/gas | cavity wall | pitched insulated`
- [x] `100032230128` · L 55 / E 54.71 / Δ -0.29 · `hpcdb1245/gas | solid brick | pitched insulated | ext1`
- [x] `10024298029` · L 72 / E 72.29 / Δ +0.29 · `hpcdb17503/gas | solid brick | pitched 270 | ext1,sec:room heaters`
- [x] `5079850` · L 39 / E 39.29 / Δ +0.29 · `h301/coal-anth | system built | (another dwelling | ext1,whw903`
- [x] `10001235167` · L 74 / E 73.71 / Δ -0.29 · `hpcdb17645/gas | solid brick | pitched 225`
@ -1054,6 +1044,7 @@ Statuses: `[ ]` todo · `[x]` resolved ≤0.5 · 🔧 fix landed · ⚠ xfail en
- [x] `83147775` · L 71 / E 71.25 / Δ +0.25 · `hpcdb16839/gas | cavity wall | pitched insulated`
- [x] `72303880` · L 63 / E 62.75 / Δ -0.25 · `hpcdb17507/gas | cavity wall | pitched 150 | sec:room heaters`
- [x] `100022711136` · L 72 / E 71.75 / Δ -0.25 · `hpcdb16495/gas | cavity wall | (another dwelling`
- [x] `100090536443` · L 86 / E 86.25 / Δ +0.25 · `hpcdb17974/gas | cavity wall | pitched 175 | PV,ext1`
- [x] `83147745` · L 75 / E 75.25 / Δ +0.25 · `hpcdb16839/gas | cavity wall | (another dwelling | sec:room heaters`
- [x] `200002598542` · L 61 / E 61.25 / Δ +0.25 · `h402/elec | cavity wall | pitched 175 | ext1,sec:room heaters,whw903`
- [x] `100010572385` · L 62 / E 62.25 / Δ +0.25 · `hpcdb18817/gas | cavity wall | pitched 250 | ext2,sec:room heaters`
@ -1328,6 +1319,7 @@ Statuses: `[ ]` todo · `[x]` resolved ≤0.5 · 🔧 fix landed · ⚠ xfail en
- [x] `5870046999` · L 73 / E 73.09 / Δ +0.09 · `hpcdb17973/gas | cavity wall | (another dwelling`
- [x] `100010384681` · L 75 / E 74.91 / Δ -0.09 · `hpcdb19080/gas | cavity wall | pitched 400+ | PV,ext1,sec:room heaters`
- [x] `100022536385` · L 71 / E 70.92 / Δ -0.08 · `hpcdb17505/gas | solid brick | pitched 300`
- [x] `100031433810` · L 70 / E 70.08 / Δ +0.08 · `hpcdb19094/gas | cavity wall | (another dwelling | ext1,sec:room heaters`
- [x] `1710029098` · L 69 / E 69.08 / Δ +0.08 · `hpcdb17958/gas | cavity wall | pitched 270 | sec:room heaters`
- [x] `100040884417` · L 70 / E 70.08 / Δ +0.08 · `hpcdb10328/gas | cavity wall | (another dwelling`
- [x] `100080706339` · L 65 / E 65.08 / Δ +0.08 · `hpcdb16396/gas | system built | pitched 250`

View file

@ -0,0 +1,299 @@
"""Elmhurst build for UPRN 47084930 (RdSAP-21.0.1, TOP-FLOOR FLAT, band E,
CAVITY wall with INTERNAL insulation (100 mm), FLAT ROOF insulated 75 mm, floor
over OTHER PREMISES below, mains-gas COMBI (PCDB 17815), 5 DG windows ~9.9 ,
no doors, TFA 64. Lodged SAP 74; engine 69.51 (Δ 4.49, PE +47 over-count).
Per-cert worksheet validation. Suspected engine gap: the flat-roof insulation
thickness is lodged in `flat_roof_insulation_thickness` (75 mm) but the U-value
calc reads `roof_insulation_thickness` (None) bills the roof at the age-E flat
default 1.5 (96 W/K) instead of the 75 mm insulated ~0.5 (~30 W/K). This build
gets the accredited flat-roof + floor U. Run:
DISPLAY=:99 python scripts/hyde/build_47084930.py <page>
"""
from __future__ import annotations
import sys
from pathlib import Path
import elmhurst_lib as E
DIM = "TabContainer_TabPanelMain_WebUserControlDimensionsMain_"
WALL = ("TabContainer_TabPanelMain_InnerTabContainerMain_"
"TabPanelExternalWallMain_WebUserControlWallMain_")
ROOF = "TabContainer_TabPanelMain_WebUserControlRoofMain_"
FLOOR = "TabContainer_TabPanelMain_WebUserControlFloorsMain_"
WP = "TabContainer_TabPanelWindowsPanel_"
DP = "TabContainer_TabPanelDoorsPanel_"
VP = "TabContainer_TabPanelVentilationPanel_"
APT = "TabContainer_TabPanelAirPressureTest_"
LP = "TabContainer_TabPanelLighting_"
MV = "TabContainer_TabPanelMechVent_"
WH = "TabContainer_TabPanelWaterHeating_"
MH1B = "TabContainer_TabPanelMainHeating1_WebUserControlMainHeating1_"
_SAMPLE_DIR = (Path(__file__).parent.parent.parent
/ "backend/epc_api/json_samples/real_life_examples"
/ "RdSAP-Schema-21.0.1/uprn_47084930")
def _pick(page, suffix, contains):
val = page.evaluate(
"""(a)=>{const s=document.getElementById(a[0]);if(!s)return null;
for(const o of s.options){if(o.text.toLowerCase().includes(a[1].toLowerCase()))return o.value;}return null;}""",
[f"{E.FP}{suffix}", contains])
if val is not None:
E.set_select(page, suffix, val)
return val
def _options(page, suffix):
return page.evaluate(
"""(id)=>{const s=document.getElementById(id);if(!s)return [];
return Array.from(s.options).map(o=>o.text);}""", f"{E.FP}{suffix}")
def property_description(page):
E.goto(page, "PropertyDescription", "WebFormPropertyDescription.aspx")
_pick(page, "DropDownListPropertyType1", "flat") or \
E.set_select(page, "DropDownListPropertyType1", "F Flat")
E.set_text(page, "TextBoxStoreys", "1")
E.set_text(page, "TextBoxHabitableRooms", "3")
E.set_text(page, "TextBoxHeatedHabitableRooms", "3")
print("date ->", _pick(page, "DropDownListDateBuiltMain", "1967-1975"))
E.set_select(page, "DropDownListDateBuiltFirst", "")
E.save_close(page)
def flats(page):
E.goto(page, "Flats", "WebFormFlats.aspx")
print("flat positions:", _options(page, "" if False else "DropDownListPositionOfFlat"))
_pick(page, "DropDownListPositionOfFlat", "top") or \
E.set_select(page, "DropDownListPositionOfFlat", "Top Floor")
E.set_text(page, "TextBoxFloor", "3")
E.set_select(page, "RadioButtonListFlatCoridor", "None")
E.save_close(page)
def dimensions(page):
E.goto(page, "Dimensions", "WebFormDimensions.aspx")
E.set_text(page, f"{DIM}TextBoxFloorAreaLowestFloor", "64.26")
E.set_text(page, f"{DIM}TextBoxRoomHeightLowestFloor", "2.32")
E.set_text(page, f"{DIM}TextBoxWallPerimeterLowestFloor", "18.15")
E.set_text(page, f"{DIM}TextBoxPartyWallLengthLowestFloor", "18.15")
E.save_close(page)
def walls(page):
E.goto(page, "Walls", "WebFormWalls.aspx")
E.set_select(page, f"{WALL}DropDownListType", "CA Cavity")
page.wait_for_timeout(500)
print("insulation opts:", _options(page, f"{WALL}DropDownListInsulation"))
_pick(page, f"{WALL}DropDownListInsulation", "internal")
page.wait_for_timeout(500)
for suf in (f"{WALL}DropDownListInsulationThickness",):
if page.locator(f"#{E.FP}{suf}").count():
print("wall ins thickness opts:", _options(page, suf))
_pick(page, suf, "100")
E.save_close(page)
def roofs(page):
E.goto(page, "Roofs", "WebFormRoofs.aspx")
print("ROOF TYPE opts:", _options(page, f"{ROOF}DropDownListType"))
_pick(page, f"{ROOF}DropDownListType", "flat")
page.wait_for_timeout(600)
# discover flat-roof insulation fields
for suf in (f"{ROOF}DropDownListInsulationAt", f"{ROOF}DropDownListThickness",
f"{ROOF}DropDownListInsulation"):
if page.locator(f"#{E.FP}{suf}").count():
print(f" {suf.split('_')[-1]} opts:", _options(page, suf))
# flat roof insulated 75 mm
if page.locator(f"#{E.FP}{ROOF}DropDownListThickness").count():
_pick(page, f"{ROOF}DropDownListThickness", "75")
E.save_close(page)
def floors(page):
E.goto(page, "Floors", "WebFormFloors.aspx")
print("FLOOR LOCATION opts:", _options(page, f"{FLOOR}DropDownListLocation"))
# "(other premises below)" = above a partially-heated space
(_pick(page, f"{FLOOR}DropDownListLocation", "partially heated")
or _pick(page, f"{FLOOR}DropDownListLocation", "other premises")
or _pick(page, f"{FLOOR}DropDownListLocation", "unheated"))
page.wait_for_timeout(400)
tsel = page.locator(f"#{E.FP}{FLOOR}DropDownListType")
if tsel.count():
_pick(page, f"{FLOOR}DropDownListType", "solid")
E.save_close(page)
def openings(page):
E.goto(page, "Openings", "WebFormOpenings.aspx")
E.click_tab(page, "TabContainer_TabPanelWindowsPanel")
_add_window(page, 9.9, "North", _glazing(page))
_delete_zero_rows(page)
E.click_tab(page, "TabContainer_TabPanelDoorsPanel")
E.set_text(page, f"{DP}TextBoxDoors", "0")
E.set_text(page, f"{DP}TextBoxDoorsInsulated", "0")
E.set_text(page, f"{DP}TextBoxDraughtProofedDoors", "0")
E.save_close(page)
def _glazing(page):
for needle in ("unknown install date", "before 2002", "pre 2002"):
for opt in _options(page, f"{WP}DropDownListExtGlazing"):
low = opt.lower()
if needle in low and "triple" not in low and "single" not in low and "known data" not in low:
return opt
return "Double post or during 2022"
def _add_window(page, area, orientation, glazing):
print("glazing ->", glazing)
E.set_select(page, f"{WP}DropDownListExtGlazing", glazing)
page.wait_for_timeout(400)
ft = page.locator(f"#{E.FP}{WP}DropDownListExtFrameType")
if ft.count():
ft.select_option("PVC")
gg = page.locator(f"#{E.FP}{WP}DropDownListExtGlazingGap")
if gg.count():
gg.select_option("12 mm")
wid = f"{E.FP}{WP}TextBoxExtWidth"
page.evaluate(
"""(a)=>{const e=document.getElementById(a[0]);if(e){e.value=a[1];
e.dispatchEvent(new Event('input',{bubbles:true}));
e.dispatchEvent(new Event('change',{bubbles:true}));
e.dispatchEvent(new Event('blur',{bubbles:true}));}}""", [wid, str(area)])
page.locator(f"#{E.FP}{WP}TextBoxExtHeight").fill("1.00")
page.locator(f"#{E.FP}{WP}DropDownListExtOrientation").select_option(orientation)
page.locator(f"#{E.FP}{WP}DropDownListExtBuildingPartId").select_option("Main")
page.locator(f"#{E.FP}{WP}DropDownListExtLocation").select_option("External wall")
page.wait_for_timeout(300)
before = E.window_row_count(page)
page.evaluate("(id)=>{const e=document.getElementById(id); if(e)e.click();}", f"{E.FP}{WP}ButtonAddWindow")
for _ in range(25):
page.wait_for_timeout(200)
if E.window_row_count(page) > before:
break
def _grid_rows(page):
return page.evaluate(
"""()=>{const t=document.querySelector("[id*=GridViewExtendedWidows]");
if(!t)return[];return Array.from(t.querySelectorAll('tr')).slice(1)
.map(r=>Array.from(r.querySelectorAll('td')).map(c=>c.innerText.trim()));}""")
def _delete_zero_rows(page):
g = 0
while g < 6 and E.window_row_count(page) > 1:
g += 1
rows = _grid_rows(page)
bad = next((i for i, c in enumerate(rows) if len(c) > 1 and c[1] in ("0.00", "0", "0.0")), None)
if bad is None:
break
_delete_row(page, bad)
page.wait_for_timeout(400)
def _delete_row(page, idx):
before = E.window_row_count(page)
btn = page.evaluate(
"""(i)=>{const b=document.querySelectorAll("[id*='GridViewExtendedWidows_DeleteButton_']");return b[i]?b[i].id:null;}""", idx)
if not btn:
return
page.evaluate("(id)=>{const e=document.getElementById(id); if(e)e.click();}", btn)
page.wait_for_selector(f"#{E.FP}DeleteWindowDialog_LinkButtonYes", state="visible", timeout=5000)
page.evaluate("(id)=>{const e=document.getElementById(id); if(e)e.click();}", f"{E.FP}DeleteWindowDialog_LinkButtonYes")
for _ in range(20):
page.wait_for_timeout(200)
if E.window_row_count(page) < before:
break
def ventilation(page):
E.goto(page, "VentilationAndCooling", "WebFormVentilationAndCooling.aspx")
E.click_tab(page, "TabContainer_TabPanelVentilationPanel")
E.set_text(page, f"{VP}TextBoxIntermittentFans", "0")
cool = page.locator(f"#{E.FP}{VP}CheckBoxFixedSpaceCooling")
if cool.count() and cool.is_checked():
E.commit(page, cool.uncheck)
E.click_tab(page, "TabContainer_TabPanelMechVent")
mv = page.locator(f"#{E.FP}{MV}CheckBoxMechanicalVentilation")
if mv.count() and mv.is_checked():
E.commit(page, mv.uncheck)
E.click_tab(page, "TabContainer_TabPanelAirPressureTest")
E.set_select(page, f"{APT}DropDownListTestMethod", "Not available")
E.click_tab(page, "TabContainer_TabPanelLighting")
E.set_text(page, f"{LP}TextBoxLightsTotal", "6")
E.set_text(page, f"{LP}TextBoxLedLightsTotal", "0")
E.set_text(page, f"{LP}TextBoxCflLightsTotal", "0")
E.save_close(page)
def space_heating(page):
E.goto(page, "SpaceHeating", "WebFormSpaceHeating.aspx")
page.wait_for_timeout(1000)
mhc = page.locator(f"#{E.MH1}TextBoxMainHeatingCode")
code = mhc.input_value() if mhc.count() else ""
if code and code not in ("0",):
print(f"clearing leftover MainHeatingCode {code}")
page.evaluate("""(id)=>{const e=document.getElementById(id);if(e){e.value='';
e.dispatchEvent(new Event('change',{bubbles:true}));}}""", f"{E.MH1}TextBoxMainHeatingCode")
page.wait_for_timeout(400)
E.save_close(page)
return
E.set_heating_dialog(page, f"{MH1B}ButtonMainHeatingCode",
"^Gas", "Mains gas", "Boilers", "Post 1998", "Condensing",
"Combi condens")
print("code:", page.locator(f"#{E.MH1}TextBoxMainHeatingCode").input_value())
E.set_heating_dialog(page, f"{MH1B}ButtonMainHeatingControls",
"^Boilers", "^Standard", "CBE Programmer, room thermostat and TRVs")
print("control:", page.locator(f"#{E.MH1}TextBoxMainHeatingControls").input_value())
E.set_select(page, "DropDownListSecondaryHeatingPresent", "No")
E.save_close(page)
def water_heating(page):
E.goto(page, "WaterHeating", "WebFormWaterHeating.aspx")
E.click_tab(page, "TabContainer_TabPanelWaterHeating")
page.wait_for_timeout(400)
E.clear_hot_water_cylinder(page)
E.set_heating_dialog(page, f"{WH}ButtonWaterHeatingCode",
"From Space Heating", "From the primary heating system")
print("water code:", page.locator(f"#{E.FP}{WH}TextBoxWaterHeatingCode").input_value())
E.save_close(page)
def download(page):
_SAMPLE_DIR.mkdir(parents=True, exist_ok=True)
E.goto(page, "Recommendations", "WebFormRecommendations.aspx")
page.wait_for_timeout(1500)
with page.expect_navigation(wait_until="networkidle", timeout=40000):
page.click("#ContentBody_buttonActionSummary_Link", timeout=15000)
page.wait_for_timeout(2000)
for btn, fname in (("ContentBody_ContentPlaceHolder1_LinkButtonSummary", "elmhurst_summary.pdf"),
("ContentBody_ContentPlaceHolder1_ButtonDebugInforPdf", "elmhurst_worksheet.pdf")):
try:
with page.expect_download(timeout=60000) as dl:
page.click(f"#{btn}", timeout=15000)
dl.value.save_as(str(_SAMPLE_DIR / fname))
print("saved", fname)
except Exception as e:
print("!! download failed", fname, type(e).__name__, str(e)[:120])
_ORDER = ["property_description", "flats", "dimensions", "walls", "roofs",
"floors", "openings", "ventilation", "space_heating", "water_heating",
"download"]
def main():
if len(sys.argv) < 2 or sys.argv[1] not in _ORDER:
print("usage: build_47084930.py <" + "|".join(_ORDER) + ">")
return 2
with E.session() as (ctx, page):
globals()[sys.argv[1]](page)
print("done:", sys.argv[1], "->", page.url)
return 0
if __name__ == "__main__":
raise SystemExit(main())

View file

@ -805,6 +805,24 @@ _EXPECTATIONS: Final[tuple[RealCertExpectation, ...]] = (
cert_num="uprn-200004017091",
sap_score=71,
),
# UPRN 47084930 (corpus; no cert number lodged). RdSAP-21.0.1 native —
# TOP-FLOOR FLAT, band E, cavity wall + 100 mm internal insulation, FLAT
# ROOF insulated 75 mm, floor over other premises, mains-gas combi. The
# flat-roof insulation-thickness cert: the 75 mm is lodged in
# `flat_roof_insulation_thickness`, but heat_transmission read
# `roof_insulation_thickness` (None) → billed the flat roof at the
# uninsulated age-E default 1.5 (roof 96.4 W/K) → PE +47, engine 69.51
# (Δ 4.49 vs lodged 74). Preferring the flat field → U 0.5 (roof 32.1
# W/K), engine 74.34 = lodged 74. VALIDATED against the accredited
# Elmhurst worksheet (built on the lodged inputs, evidence saved:
# elmhurst_summary.pdf / elmhurst_worksheet.pdf): "insulated flat roof"
# U 0.5, floor 0.70 and wall 0.25 both matching the engine. PINNED 74.
RealCertExpectation(
schema="RdSAP-Schema-21.0.1",
sample="uprn_47084930",
cert_num="uprn-47084930",
sap_score=74,
),
)

View file

@ -370,6 +370,46 @@ def test_rafter_insulation_thickness_field_drives_table16_column_2() -> None:
assert abs(result.roof_w_per_k - 25.0) <= 1e-4
def test_flat_roof_insulation_thickness_field_drives_insulated_u() -> None:
# Arrange — a FLAT roof lodges its insulation thickness in the DEDICATED
# gov-EPC API `flat_roof_insulation_thickness` field (e.g. "75mm"),
# leaving `roof_insulation_thickness` None (that field is for pitched-loft
# joists). heat_transmission must prefer the flat field when the part is a
# flat roof so the measured thickness bills at its RdSAP 10 §5.11 Table-16
# U (75 mm → 0.5) instead of the uninsulated age-band flat default (age E
# → 1.5). Cert 47084930 (top-floor flat, flat roof "75mm"): roof 96.4 ->
# 32.1 W/K, engine 69.51 -> 74.34 = lodged 74, matching the accredited
# Elmhurst worksheet ("insulated flat roof", U 0.5). Mirrors the rafter
# field. Geometry: 100 m² plan → roof 100 m². 0.5 × 100 = 50 W/K.
main = make_building_part(
construction_age_band="E",
wall_construction=4,
wall_insulation_type=4,
party_wall_construction=1,
roof_construction=1, # flat
floor_dimensions=[
make_floor_dimension(
total_floor_area_m2=100.0, room_height_m=2.5,
party_wall_length_m=0.0, heat_loss_perimeter_m=40.0, floor=0,
),
],
)
main.roof_construction_type = "Flat"
main.roof_insulation_thickness = None # gov leaves this None for flat roofs
main.flat_roof_insulation_thickness = "75mm" # the thickness lives here
epc = make_minimal_sap10_epc(
total_floor_area_m2=100.0,
country_code="ENG",
sap_building_parts=[main],
)
# Act
result = heat_transmission_from_cert(epc)
# Assert — 75 mm insulated flat roof at U 0.5, not the age-E default 1.5.
assert abs(result.roof_w_per_k - 50.0) <= 1e-4
def test_lodged_roof_u_value_overrides_construction_default() -> None:
# Arrange — RdSAP 10 §5.1: where an element's U-value is known from the
# assessment (documentary evidence / the lodged RdSAP output) it is used

View file

@ -227,7 +227,17 @@ _CORPUS = Path(
# Table-13 fraction path already used). Gated on the explicit 0 so a
# full-SAP unlodged size (None) keeps its own handling. 7 corpus certs;
# within 77.0% -> 77.3%, PE 3.2 -> 3.05, CO2 0.074 -> 0.073.
_MIN_WITHIN_HALF_SAP = 0.773
# 0.773 -> 0.777 via the flat-roof insulation-thickness fix: a FLAT roof
# lodges its thickness in the dedicated `flat_roof_insulation_thickness`
# field (e.g. "75mm"), but heat_transmission read `roof_insulation_thickness`
# (None for flat roofs) -> billed the roof at the uninsulated age-band flat
# default (age E 1.5) instead of the insulated Table-16 U. Prefer the flat
# field when the part is flat (mirrors the rafter-thickness branch). Cert
# 47084930 (top-floor flat, flat roof 75mm): roof 96.4 -> 32.1 W/K, engine
# 69.51 -> 74.34 = lodged 74, VALIDATED against the accredited Elmhurst
# worksheet ("insulated flat roof" U 0.5). within 77.3% -> 77.7%, PE 3.1 ->
# 2.97, CO2 0.074 -> 0.072.
_MIN_WITHIN_HALF_SAP = 0.777
# 0.793 -> 0.789 via the §12 Unknown-meter + dual-electric-immersion off-peak
# trigger (RdSAP 10 PDF p.62): Apartment 241 (main 691 + 903 dual immersion)
# -5.38 -> -1.05. Worksheet-validated on "simulated case 48" (Elmhurst SAP 57,
@ -313,9 +323,9 @@ _MIN_WITHIN_HALF_SAP = 0.773
# (U~1.4) -> ~0.29, PE +59.6 -> ~0, SAP 64.35 -> 71.74 (lodged 71). Scoped to
# brick/stone (the only §5.8 R-value path); within-0.5 held at 77.0%, MAE
# 0.658 -> 0.647, PE 3.2 -> 3.1. Unit-pinned in test_rdsap_uvalues.
_MAX_SAP_MAE = 0.648
_MAX_CO2_MAE_TONNES = 0.074 # t CO2 / yr vs co2_emissions_current
_MAX_PE_PER_M2_MAE = 3.1 # kWh / m2 / yr vs energy_consumption_current
_MAX_SAP_MAE = 0.641
_MAX_CO2_MAE_TONNES = 0.072 # t CO2 / yr vs co2_emissions_current
_MAX_PE_PER_M2_MAE = 3.0 # kWh / m2 / yr vs energy_consumption_current
def _load_corpus() -> list[dict[str, Any]]: