From de7425b88db19d648bc4b7b2518dc0f7616a2a02 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 26 May 2026 18:53:08 +0000 Subject: [PATCH] chore: stage cert 9501 fixtures (second boiler validation cert) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit API JSON + Summary PDF for cert 9501-3059-8202-7356-0204. RR/Mid- terrace flat, 4 building storeys, TFA 113.08 m², mains gas boiler (PCDB idx 19007), age band B. Worksheet target unrounded SAP **68.5252**. Second boiler cert per the per-cert mapper validation workflow: Summary path proves itself against the worksheet (Layer 2 1e-4 pin), then the API path catches up (Layer 4 1e-4 pin) — mirrors the cert 0330 cycle. Co-Authored-By: Claude Opus 4.7 --- .../tests/fixtures/Summary_000784.pdf | Bin 0 -> 79308 bytes .../golden/9501-3059-8202-7356-0204.json | 429 ++++++++++++++++++ 2 files changed, 429 insertions(+) create mode 100644 backend/documents_parser/tests/fixtures/Summary_000784.pdf create mode 100644 domain/sap10_calculator/rdsap/tests/fixtures/golden/9501-3059-8202-7356-0204.json diff --git a/backend/documents_parser/tests/fixtures/Summary_000784.pdf b/backend/documents_parser/tests/fixtures/Summary_000784.pdf new file mode 100644 index 0000000000000000000000000000000000000000..72c53d2c5be384aaddc7bec0de7a77383a265882 GIT binary patch literal 79308 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 Uxc>fzfw{T3*^sHIB$Ooo3u4|ML;wH) literal 0 HcmV?d00001 diff --git a/domain/sap10_calculator/rdsap/tests/fixtures/golden/9501-3059-8202-7356-0204.json b/domain/sap10_calculator/rdsap/tests/fixtures/golden/9501-3059-8202-7356-0204.json new file mode 100644 index 00000000..da18a4be --- /dev/null +++ b/domain/sap10_calculator/rdsap/tests/fixtures/golden/9501-3059-8202-7356-0204.json @@ -0,0 +1,429 @@ +{ + "uprn": 100032131984, + "roofs": [ + { + "description": "Pitched, insulated (assumed)", + "energy_efficiency_rating": 3, + "environmental_efficiency_rating": 3 + }, + { + "description": "Roof room(s), ceiling insulated", + "energy_efficiency_rating": 2, + "environmental_efficiency_rating": 2 + } + ], + "walls": [ + { + "description": "Solid brick, as built, no insulation (assumed)", + "energy_efficiency_rating": 1, + "environmental_efficiency_rating": 1 + } + ], + "floors": [ + { + "description": "(another dwelling below)", + "energy_efficiency_rating": 0, + "environmental_efficiency_rating": 0 + } + ], + "status": "entered", + "tenure": 2, + "window": { + "description": "Fully double glazed", + "energy_efficiency_rating": 2, + "environmental_efficiency_rating": 2 + }, + "addendum": { + "addendum_numbers": [ + 8 + ] + }, + "lighting": { + "description": "Good lighting efficiency", + "energy_efficiency_rating": 4, + "environmental_efficiency_rating": 4 + }, + "postcode": "NG9 1QN", + "hot_water": { + "description": "From main system", + "energy_efficiency_rating": 4, + "environmental_efficiency_rating": 4 + }, + "post_town": "NOTTINGHAM", + "built_form": "NR", + "created_at": "2026-03-24 13:28:51", + "door_count": 1, + "region_code": 3, + "report_type": 2, + "sap_heating": { + "number_baths": 0, + "cylinder_size": 1, + "shower_outlets": [ + { + "shower_outlet": { + "shower_wwhrs": 1, + "shower_outlet_type": 2 + } + } + ], + "number_baths_wwhrs": 0, + "water_heating_code": 901, + "water_heating_fuel": 26, + "secondary_fuel_type": 29, + "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": 19007 + } + ], + "immersion_heating_type": "NA", + "secondary_heating_type": 691, + "has_fixed_air_conditioning": "false" + }, + "sap_version": 10.2, + "sap_windows": [ + { + "pvc_frame": "true", + "glazing_gap": "16+", + "orientation": 6, + "window_type": 1, + "glazing_type": 3, + "window_width": 0.86, + "window_height": 1.03, + "draught_proofed": "true", + "window_location": 0, + "window_wall_type": 1, + "permanent_shutters_present": "N", + "permanent_shutters_insulated": "N" + }, + { + "pvc_frame": "true", + "glazing_gap": "16+", + "orientation": 8, + "window_type": 1, + "glazing_type": 3, + "window_width": 0.92, + "window_height": 1.12, + "draught_proofed": "true", + "window_location": 0, + "window_wall_type": 1, + "permanent_shutters_present": "N", + "permanent_shutters_insulated": "N" + }, + { + "pvc_frame": "true", + "glazing_gap": "16+", + "orientation": 6, + "window_type": 1, + "glazing_type": 3, + "window_width": 1.01, + "window_height": 2.07, + "draught_proofed": "true", + "window_location": 0, + "window_wall_type": 1, + "permanent_shutters_present": "N", + "permanent_shutters_insulated": "N" + }, + { + "pvc_frame": "true", + "glazing_gap": "16+", + "orientation": 8, + "window_type": 1, + "glazing_type": 3, + "window_width": 1.03, + "window_height": 1.81, + "draught_proofed": "true", + "window_location": 0, + "window_wall_type": 1, + "permanent_shutters_present": "N", + "permanent_shutters_insulated": "N" + }, + { + "pvc_frame": "true", + "glazing_gap": "16+", + "orientation": 8, + "window_type": 1, + "glazing_type": 3, + "window_width": 0.88, + "window_height": 1.95, + "draught_proofed": "true", + "window_location": 0, + "window_wall_type": 1, + "permanent_shutters_present": "N", + "permanent_shutters_insulated": "N" + }, + { + "pvc_frame": "true", + "glazing_gap": "16+", + "orientation": 2, + "window_type": 1, + "glazing_type": 3, + "window_width": 0.68, + "window_height": 1.41, + "draught_proofed": "true", + "window_location": 0, + "window_wall_type": 1, + "permanent_shutters_present": "N", + "permanent_shutters_insulated": "N" + }, + { + "pvc_frame": "true", + "glazing_gap": "16+", + "orientation": 6, + "window_type": 1, + "glazing_type": 3, + "window_width": 0.68, + "window_height": 1.41, + "draught_proofed": "true", + "window_location": 0, + "window_wall_type": 1, + "permanent_shutters_present": "N", + "permanent_shutters_insulated": "N" + }, + { + "pvc_frame": "true", + "glazing_gap": "16+", + "orientation": 2, + "window_type": 1, + "glazing_type": 3, + "window_width": 0.76, + "window_height": 1.43, + "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": "Address Matched", + "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": "Flat B", + "address_line_2": "2 Laburnum Grove", + "address_line_3": "Beeston", + "assessment_type": "RdSAP", + "completion_date": "2026-03-24", + "inspection_date": "2026-02-10", + "extensions_count": 0, + "measurement_type": 1, + "sap_flat_details": { + "level": 3, + "top_storey": "Y", + "storey_count": 2, + "flat_location": 1, + "heat_loss_corridor": 0 + }, + "total_floor_area": 113, + "transaction_type": 5, + "conservatory_type": 1, + "heated_room_count": 5, + "registration_date": "2026-03-24", + "sap_energy_source": { + "mains_gas": "Y", + "meter_type": 2, + "pv_connection": 2, + "photovoltaic_supply": { + "pv_arrays": [ + { + "pitch": 3, + "peak_power": 2.36, + "orientation": 6, + "overshading": 1 + } + ] + }, + "wind_turbines_count": 0, + "gas_smart_meter_present": "true", + "is_dwelling_export_capable": "true", + "wind_turbines_terrain_type": 2, + "electricity_smart_meter_present": "true" + }, + "secondary_heating": { + "description": "Room heaters, electric", + "energy_efficiency_rating": 0, + "environmental_efficiency_rating": 0 + }, + "extract_fans_count": 2, + "lzc_energy_sources": [ + 11 + ], + "sap_building_parts": [ + { + "identifier": "Main Dwelling", + "wall_dry_lined": "N", + "wall_thickness": 250, + "floor_heat_loss": 6, + "sap_room_in_roof": { + "floor_area": 31.8, + "room_in_roof_details": { + "gable_wall_type_1": 0, + "gable_wall_type_2": 0, + "gable_wall_height_1": 2.45, + "gable_wall_height_2": 2.45, + "gable_wall_length_1": 5.51, + "gable_wall_length_2": 6.51, + "flat_ceiling_height_1": 1, + "flat_ceiling_length_1": 5.5, + "flat_ceiling_insulation_type_1": 0, + "flat_ceiling_insulation_thickness_1": "300mm" + }, + "construction_age_band": "B" + }, + "roof_construction": 5, + "wall_construction": 3, + "building_part_number": 1, + "sap_floor_dimensions": [ + { + "floor": 0, + "room_height": { + "value": 3.27, + "quantity": "metres" + }, + "total_floor_area": { + "value": 6.85, + "quantity": "square metres" + }, + "party_wall_length": { + "value": 6.85, + "quantity": "metres" + }, + "heat_loss_perimeter": { + "value": 10.41, + "quantity": "metres" + } + }, + { + "floor": 1, + "room_height": { + "value": 2.48, + "quantity": "metres" + }, + "total_floor_area": { + "value": 74.43, + "quantity": "square metres" + }, + "party_wall_length": { + "value": 11.04, + "quantity": "metres" + }, + "heat_loss_perimeter": { + "value": 28.45, + "quantity": "metres" + } + } + ], + "wall_insulation_type": 4, + "construction_age_band": "B", + "party_wall_construction": 1, + "wall_thickness_measured": "Y", + "roof_insulation_location": 4, + "roof_insulation_thickness": "ND", + "wall_insulation_thickness": "NI" + } + ], + "solar_water_heating": "N", + "habitable_room_count": 5, + "heating_cost_current": { + "value": 1543, + "currency": "GBP" + }, + "insulated_door_count": 0, + "co2_emissions_current": 3.6, + "energy_rating_average": 60, + "energy_rating_current": 69, + "lighting_cost_current": { + "value": 78, + "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": 818, + "currency": "GBP" + }, + "hot_water_cost_current": { + "value": 324, + "currency": "GBP" + }, + "mechanical_ventilation": 0, + "percent_draughtproofed": 100, + "suggested_improvements": [ + { + "sequence": 1, + "typical_saving": { + "value": 719, + "currency": "GBP" + }, + "indicative_cost": "\u00a37,500 - \u00a311,000", + "improvement_type": "Q", + "improvement_details": { + "improvement_number": 7 + }, + "improvement_category": 5, + "energy_performance_rating": 83, + "environmental_impact_rating": 83 + } + ], + "co2_emissions_potential": 1.8, + "energy_rating_potential": 83, + "lighting_cost_potential": { + "value": 78, + "currency": "GBP" + }, + "schema_version_original": "21.0.1", + "hot_water_cost_potential": { + "value": 324, + "currency": "GBP" + }, + "renewable_heat_incentive": { + "water_heating": 1991.01, + "space_heating_existing_dwelling": 14717.13 + }, + "draughtproofed_door_count": 1, + "energy_consumption_current": 182, + "has_fixed_air_conditioning": "false", + "multiple_glazed_proportion": 100, + "calculation_software_version": "5.02r0335", + "energy_consumption_potential": 95, + "environmental_impact_current": 68, + "current_energy_efficiency_band": "C", + "environmental_impact_potential": 83, + "has_heated_separate_conservatory": "false", + "potential_energy_efficiency_band": "B", + "co2_emissions_current_per_floor_area": 31, + "low_energy_fixed_lighting_bulbs_count": 11, + "incandescent_fixed_lighting_bulbs_count": 0 +} \ No newline at end of file