debugging windows recommendation tests

This commit is contained in:
Khalim Conn-Kowlessar 2026-01-20 23:48:22 +00:00
parent 0fc09aa142
commit 349cf437ed
4 changed files with 1125 additions and 407 deletions

View file

@ -1395,7 +1395,7 @@ def test_private_epc_e_solar_with_heating_and_minimum_insulation_produces_uplift
assert funding.eco4_funding and funding.eco4_funding > 0 assert funding.eco4_funding and funding.eco4_funding > 0
def test_existing_gshp_to_ashp(): def test_existing_gshp_to_ashp(mock_project_scores_matrix, mock_partial_scores_matrix, mock_whlg_postcodes):
r = {'phase': 3, 'parts': [], 'type': 'heating', 'measure_type': 'air_source_heat_pump', r = {'phase': 3, 'parts': [], 'type': 'heating', 'measure_type': 'air_source_heat_pump',
'description': 'Install a 5KW air source heat pump, and upgrade heating controls to Smart Thermostats, ' 'description': 'Install a 5KW air source heat pump, and upgrade heating controls to Smart Thermostats, '
'room sensors and smart radiator valves (time & temperature zone control). Ensure you have a ' 'room sensors and smart radiator valves (time & temperature zone control). Ensure you have a '

View file

@ -15,7 +15,12 @@ class TestCleanFloor:
empty = FloorAttributes('') empty = FloorAttributes('')
assert empty.nodata assert empty.nodata
output = empty.process() output = empty.process()
assert output == {"no_data": True} assert output == {
'thermal_transmittance': None, 'thermal_transmittance_unit': None, 'is_assumed': True,
'is_to_unheated_space': False, 'is_to_external_air': False, 'is_suspended': True,
'is_solid': False, 'another_property_below': False, 'insulation_thickness': 'none',
'no_data': True
}
# Test initialization with a description that contains none of the keywords # Test initialization with a description that contains none of the keywords
with pytest.raises(ValueError): with pytest.raises(ValueError):

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,6 @@
import pytest import pytest
import pickle import pickle
import numpy as np
from recommendations.WindowsRecommendations import WindowsRecommendations from recommendations.WindowsRecommendations import WindowsRecommendations
from backend.Property import Property from backend.Property import Property
from recommendations.tests.test_data.materials import materials from recommendations.tests.test_data.materials import materials
@ -245,12 +246,16 @@ class TestWindowRecommendations:
address='1', address='1',
epc_record=epc_record epc_record=epc_record
) )
property_6.windows = {'original_description': 'Single glazed', 'has_glazing': False, 'glazing_coverage': None, property_6.windows = {
'glazing_type': 'single', 'original_description': 'Single glazed', 'clean_description': 'Single glazed',
'no_data': False} 'has_glazing': False, 'glazing_coverage': None,
'glazing_type': 'single',
'no_data': False
}
property_6.number_of_windows = 7 property_6.number_of_windows = 7
property_6.restricted_measures = True property_6.restricted_measures = True
property_6.is_heritage = True property_6.is_heritage = True
property_6.already_installed = []
recommender6 = WindowsRecommendations(property_instance=property_6, materials=materials) recommender6 = WindowsRecommendations(property_instance=property_6, materials=materials)
@ -258,26 +263,18 @@ class TestWindowRecommendations:
recommender6.recommend() recommender6.recommend()
assert recommender6.recommendation == [ assert len(recommender6.recommendation) == 1
{ assert recommender6.recommendation[0]["total"] == np.float64(7980.0)
'phase': 0, 'parts': [], 'type': 'windows_glazing', 'measure_type': 'secondary_glazing', assert recommender6.recommendation[0]["phase"] == 0
'description': 'Install secondary glazing to all windows. Secondary glazing recommended due to ' assert recommender6.recommendation[0]["contingency"] == np.float64(1197.0)
'herigate building status', assert recommender6.recommendation[0]["description"] == (
'starting_u_value': None, 'new_u_value': None, 'sap_points': None, 'already_installed': False, 'Install secondary glazing to all windows. Secondary glazing recommended due to herigate building status'
'total': 7980.0, 'labour_hours': 0.0, 'labour_days': 0.0, 'is_secondary_glazing': True, )
'description_simulation': { assert recommender6.recommendation[0]["simulation_config"] == {
'multi-glaze-proportion': 100, 'windows-energy-eff': 'Good', 'has_glazing_ending': True, 'glazing_coverage_ending': 'full', 'glazing_type_ending': 'secondary',
'windows-description': 'Full secondary glazing', 'multi_glaze_proportion_ending': 100, 'windows_energy_eff_ending': 'Good',
'glazed-type': 'secondary glazing' 'glazed_type_ending': 'secondary glazing'
}, }
'simulation_config': {
'has_glazing_ending': True, 'glazing_coverage_ending': 'full',
'glazing_type_ending': 'secondary', 'multi_glaze_proportion_ending': 100,
'windows_energy_eff_ending': 'Good', 'glazed_type_ending': 'secondary glazing'
},
"survey": None
},
]
def test_full_triple_glazed(self): def test_full_triple_glazed(self):
epc_record = EPCRecord() epc_record = EPCRecord()
@ -292,10 +289,14 @@ class TestWindowRecommendations:
address='1', address='1',
epc_record=epc_record epc_record=epc_record
) )
property_7.windows = {'original_description': 'Fully triple glazed', 'has_glazing': True, property_7.windows = {
'glazing_coverage': 'full', 'original_description': 'Fully triple glazed', 'clean_description': 'Fully triple glazed',
'glazing_type': 'triple', 'no_data': False} 'has_glazing': True,
'glazing_coverage': 'full',
'glazing_type': 'triple', 'no_data': False
}
property_7.number_of_windows = 7 property_7.number_of_windows = 7
property_7.already_installed = []
recommender7 = WindowsRecommendations(property_instance=property_7, materials=materials) recommender7 = WindowsRecommendations(property_instance=property_7, materials=materials)
@ -394,7 +395,9 @@ class TestWindowRecommendations:
epc_record=epc_record epc_record=epc_record
) )
property_9.windows = { property_9.windows = {
'original_description': 'Single glazed', 'has_glazing': False, 'glazing_coverage': None, 'original_description': 'Single glazed',
'clean_description': 'Single glazed',
'has_glazing': False, 'glazing_coverage': None,
'glazing_type': 'single', 'glazing_type': 'single',
'no_data': False 'no_data': False
} }
@ -403,6 +406,7 @@ class TestWindowRecommendations:
property_9.number_of_windows = 7 property_9.number_of_windows = 7
property_9.restricted_measures = False property_9.restricted_measures = False
property_9.is_heritage = False property_9.is_heritage = False
property_9.already_installed = []
recommender9 = WindowsRecommendations(property_instance=property_9, materials=materials) recommender9 = WindowsRecommendations(property_instance=property_9, materials=materials)
@ -410,26 +414,10 @@ class TestWindowRecommendations:
recommender9.recommend() recommender9.recommend()
assert recommender9.recommendation == [ assert recommender9.recommendation[0]["total"] == np.float64(7980.0)
{ assert recommender9.recommendation[0]["phase"] == 0
'phase': 0, 'parts': [], 'type': 'windows_glazing', 'measure_type': 'double_glazing', assert recommender9.recommendation[0]["description"] == 'Install double glazing to all windows'
'description': 'Install double glazing to all windows', 'starting_u_value': None, 'new_u_value': None, assert recommender9.recommendation[0]["contingency"] == np.float64(1197.0)
'sap_points': None, 'already_installed': False, 'total': 7980.0, 'labour_hours': 0.0,
'labour_days': 0.0, 'is_secondary_glazing': False,
'description_simulation': {
'multi-glaze-proportion': 100, 'windows-energy-eff': 'Good',
'windows-description': 'Fully double glazed',
'glazed-type': 'double glazing installed during or after 2002'
},
'simulation_config': {
'has_glazing_ending': True, 'glazing_coverage_ending': 'full',
'glazing_type_ending': 'double', 'multi_glaze_proportion_ending': 100,
'windows_energy_eff_ending': 'Good',
'glazed_type_ending': 'double glazing installed during or after 2002'
},
"survey": None
}
]
# We now simulate the outcome # We now simulate the outcome
windows_rec = recommender9.recommendation.copy() windows_rec = recommender9.recommendation.copy()
@ -537,8 +525,10 @@ class TestWindowRecommendations:
'mainheatc_energy_eff_ending': 'Average', 'lighting_energy_eff_starting': 'Very Good', 'mainheatc_energy_eff_ending': 'Average', 'lighting_energy_eff_starting': 'Very Good',
'lighting_energy_eff_ending': 'Very Good', 'number_habitable_rooms_starting': 4.0, 'lighting_energy_eff_ending': 'Very Good', 'number_habitable_rooms_starting': 4.0,
'number_habitable_rooms_ending': 4.0, 'number_heated_rooms_starting': 4.0, 'number_habitable_rooms_ending': 4.0, 'number_heated_rooms_starting': 4.0,
'number_heated_rooms_ending': 4.0, 'days_to_starting': 3642, 'days_to_ending': 3642, 'number_heated_rooms_ending': 4.0, 'is_post_sap10_starting': False, 'is_post_sap10_ending': False,
'estimated_perimeter_starting': 23.430749027719962, 'estimated_perimeter_ending': 23.430749027719962 'lodgement_date_starting': '2024-07-21', 'lodgement_date_ending': '2024-07-21', 'days_to_starting': 3642,
'days_to_ending': 3642, 'estimated_perimeter_starting': 23.430749027719962,
'estimated_perimeter_ending': 23.430749027719962
} }
assert starting_record == expected_base_difference_record assert starting_record == expected_base_difference_record
@ -553,104 +543,168 @@ class TestWindowRecommendations:
assert len(simulated_data) == 1 assert len(simulated_data) == 1
expected_simulated_outcome = { expected_simulated_outcome = {
'uprn': 200001041444, 'rdsap_change': 0, 'heat_demand_change': 0, 'carbon_change': 0.0, 'uprn': 200001041444, 'rdsap_change': 0, 'heat_demand_change': 0,
'carbon_change': 0.0,
'potential_energy_efficiency': 82.0, 'environment_impact_potential': 79.0, 'potential_energy_efficiency': 82.0, 'environment_impact_potential': 79.0,
'energy_consumption_potential': 155.0, 'co2_emissions_potential': 1.7, 'property_type': 'House', 'energy_consumption_potential': 155.0, 'co2_emissions_potential': 1.7,
'built_form': 'Semi-Detached', 'constituency': 'E14000909', 'number_habitable_rooms': 4.0, 'property_type': 'House',
'number_heated_rooms': 4.0, 'construction_age_band': 'England and Wales: before 1900', 'built_form': 'Semi-Detached', 'constituency': 'E14000909',
'number_habitable_rooms': 4.0,
'number_heated_rooms': 4.0,
'construction_age_band': 'England and Wales: before 1900',
'fixed_lighting_outlets_count': 7.0, 'walls_thermal_transmittance': 1.7, 'fixed_lighting_outlets_count': 7.0, 'walls_thermal_transmittance': 1.7,
'walls_thermal_transmittance_unit': 'Unknown', 'is_cavity_wall': False, 'is_filled_cavity': False, 'walls_thermal_transmittance_unit': 'Unknown', 'is_cavity_wall': False,
'is_filled_cavity': False,
'is_solid_brick': True, 'is_system_built': False, 'is_timber_frame': False, 'is_solid_brick': True, 'is_system_built': False, 'is_timber_frame': False,
'is_granite_or_whinstone': False, 'is_as_built': True, 'is_cob': False, 'walls_is_assumed': True, 'is_granite_or_whinstone': False,
'is_sandstone_or_limestone': False, 'is_park_home': False, 'walls_insulation_thickness': 'none', 'is_as_built': True, 'is_cob': False, 'walls_is_assumed': True,
'external_insulation': False, 'internal_insulation': False, 'floor_thermal_transmittance': 0.96, 'is_sandstone_or_limestone': False,
'is_to_unheated_space': False, 'is_to_external_air': False, 'is_suspended': False, 'is_solid': True, 'is_park_home': False, 'walls_insulation_thickness': 'none',
'another_property_below': False, 'floor_insulation_thickness': 'none', 'roof_thermal_transmittance': 2.3, 'external_insulation': False,
'is_pitched': True, 'is_roof_room': False, 'is_loft': False, 'is_flat': False, 'is_thatched': False, 'internal_insulation': False, 'floor_thermal_transmittance': 0.96,
'is_at_rafters': False, 'has_dwelling_above': False, 'roof_insulation_thickness': 'none', 'is_to_unheated_space': False,
'heater_type': 'Unknown', 'system_type': 'from main system', 'thermostat_characteristics': 'Unknown', 'is_to_external_air': False, 'is_suspended': False, 'is_solid': True,
'heating_scope': 'Unknown', 'energy_recovery': 'Unknown', 'hotwater_tariff_type': 'Unknown', 'another_property_below': False,
'extra_features': 'Unknown', 'chp_systems': 'Unknown', 'distribution_system': 'Unknown', 'floor_insulation_thickness': 'none', 'roof_thermal_transmittance': 2.3,
'no_system_present': 'Unknown', 'appliance': 'Unknown', 'has_radiators': True, 'has_fan_coil_units': False, 'is_pitched': True,
'has_pipes_in_screed_above_insulation': False, 'has_pipes_in_insulated_timber_floor': False, 'is_roof_room': False, 'is_loft': False, 'is_flat': False, 'is_thatched': False,
'has_pipes_in_concrete_slab': False, 'has_boiler': True, 'has_air_source_heat_pump': False, 'is_at_rafters': False,
'has_room_heaters': False, 'has_electric_storage_heaters': False, 'has_warm_air': False, 'has_dwelling_above': False, 'roof_insulation_thickness': 'none',
'heater_type': 'Unknown',
'system_type': 'from main system', 'thermostat_characteristics': 'Unknown',
'heating_scope': 'Unknown',
'energy_recovery': 'Unknown', 'hotwater_tariff_type': 'Unknown',
'extra_features': 'Unknown',
'chp_systems': 'Unknown', 'distribution_system': 'Unknown',
'no_system_present': 'Unknown',
'appliance': 'Unknown', 'has_radiators': True, 'has_fan_coil_units': False,
'has_pipes_in_screed_above_insulation': False,
'has_pipes_in_insulated_timber_floor': False,
'has_pipes_in_concrete_slab': False, 'has_boiler': True,
'has_air_source_heat_pump': False,
'has_room_heaters': False, 'has_electric_storage_heaters': False,
'has_warm_air': False,
'has_electric_underfloor_heating': False, 'has_electric_ceiling_heating': False, 'has_electric_underfloor_heating': False, 'has_electric_ceiling_heating': False,
'has_community_scheme': False, 'has_ground_source_heat_pump': False, 'has_no_system_present': False, 'has_community_scheme': False, 'has_ground_source_heat_pump': False,
'has_no_system_present': False,
'has_portable_electric_heaters': False, 'has_water_source_heat_pump': False, 'has_portable_electric_heaters': False, 'has_water_source_heat_pump': False,
'has_electric_heat_pump': False, 'has_micro-cogeneration': False, 'has_solar_assisted_heat_pump': False, 'has_electric_heat_pump': False,
'has_exhaust_source_heat_pump': False, 'has_community_heat_pump': False, 'has_electric': False, 'has_micro-cogeneration': False, 'has_solar_assisted_heat_pump': False,
'has_mains_gas': True, 'has_wood_logs': False, 'has_coal': False, 'has_oil': False, 'has_exhaust_source_heat_pump': False,
'has_wood_pellets': False, 'has_anthracite': False, 'has_dual_fuel_mineral_and_wood': False, 'has_community_heat_pump': False, 'has_electric': False, 'has_mains_gas': True,
'has_smokeless_fuel': False, 'has_lpg': False, 'has_b30k': False, 'has_electricaire': False, 'has_wood_logs': False,
'has_assumed_for_most_rooms': False, 'has_underfloor_heating': False, 'has_coal': False, 'has_oil': False, 'has_wood_pellets': False,
'thermostatic_control': 'room thermostat', 'charging_system': 'Unknown', 'switch_system': 'programmer', 'has_anthracite': False,
'has_dual_fuel_mineral_and_wood': False, 'has_smokeless_fuel': False,
'has_lpg': False, 'has_b30k': False,
'has_electricaire': False, 'has_assumed_for_most_rooms': False,
'has_underfloor_heating': False,
'thermostatic_control': 'room thermostat', 'charging_system': 'Unknown',
'switch_system': 'programmer',
'no_control': 'Unknown', 'dhw_control': 'Unknown', 'community_heating': 'Unknown', 'no_control': 'Unknown', 'dhw_control': 'Unknown', 'community_heating': 'Unknown',
'multiple_room_thermostats': False, 'auxiliary_systems': 'Unknown', 'trvs': 'Unknown', 'multiple_room_thermostats': False, 'auxiliary_systems': 'Unknown',
'trvs': 'Unknown',
'rate_control': 'Unknown', 'glazing_type': 'single', 'fuel_type': 'mains gas', 'rate_control': 'Unknown', 'glazing_type': 'single', 'fuel_type': 'mains gas',
'main-fuel_tariff_type': 'Unknown', 'is_community': False, 'main-fuel_tariff_type': 'Unknown', 'is_community': False,
'no_individual_heating_or_community_network': False, 'complex_fuel_type': 'Unknown', 'no_individual_heating_or_community_network': False,
'walls_thermal_transmittance_ending': 1.7, 'walls_thermal_transmittance_unit_ending': 'Unknown', 'complex_fuel_type': 'Unknown',
'is_filled_cavity_ending': False, 'is_as_built_ending': True, 'walls_is_assumed_ending': True, 'walls_thermal_transmittance_ending': 1.7,
'walls_thermal_transmittance_unit_ending': 'Unknown',
'is_filled_cavity_ending': False, 'is_as_built_ending': True,
'walls_is_assumed_ending': True,
'is_park_home_ending': False, 'walls_insulation_thickness_ending': 'none', 'is_park_home_ending': False, 'walls_insulation_thickness_ending': 'none',
'external_insulation_ending': False, 'internal_insulation_ending': False, 'external_insulation_ending': False, 'internal_insulation_ending': False,
'floor_thermal_transmittance_ending': 0.96, 'floor_insulation_thickness_ending': 'none', 'floor_thermal_transmittance_ending': 0.96,
'floor_insulation_thickness_ending': 'none',
'roof_thermal_transmittance_ending': 2.3, 'is_at_rafters_ending': False, 'roof_thermal_transmittance_ending': 2.3, 'is_at_rafters_ending': False,
'roof_insulation_thickness_ending': 'none', 'heater_type_ending': 'Unknown', 'roof_insulation_thickness_ending': 'none', 'heater_type_ending': 'Unknown',
'system_type_ending': 'from main system', 'thermostat_characteristics_ending': 'Unknown', 'system_type_ending': 'from main system',
'thermostat_characteristics_ending': 'Unknown',
'heating_scope_ending': 'Unknown', 'energy_recovery_ending': 'Unknown', 'heating_scope_ending': 'Unknown', 'energy_recovery_ending': 'Unknown',
'hotwater_tariff_type_ending': 'Unknown', 'extra_features_ending': 'Unknown', 'hotwater_tariff_type_ending': 'Unknown', 'extra_features_ending': 'Unknown',
'chp_systems_ending': 'Unknown', 'distribution_system_ending': 'Unknown', 'chp_systems_ending': 'Unknown',
'no_system_present_ending': 'Unknown', 'appliance_ending': 'Unknown', 'has_radiators_ending': True, 'distribution_system_ending': 'Unknown', 'no_system_present_ending': 'Unknown',
'has_fan_coil_units_ending': False, 'has_pipes_in_screed_above_insulation_ending': False, 'appliance_ending': 'Unknown',
'has_pipes_in_insulated_timber_floor_ending': False, 'has_pipes_in_concrete_slab_ending': False, 'has_radiators_ending': True, 'has_fan_coil_units_ending': False,
'has_boiler_ending': True, 'has_air_source_heat_pump_ending': False, 'has_room_heaters_ending': False, 'has_pipes_in_screed_above_insulation_ending': False,
'has_pipes_in_insulated_timber_floor_ending': False,
'has_pipes_in_concrete_slab_ending': False, 'has_boiler_ending': True,
'has_air_source_heat_pump_ending': False, 'has_room_heaters_ending': False,
'has_electric_storage_heaters_ending': False, 'has_warm_air_ending': False, 'has_electric_storage_heaters_ending': False, 'has_warm_air_ending': False,
'has_electric_underfloor_heating_ending': False, 'has_electric_ceiling_heating_ending': False, 'has_electric_underfloor_heating_ending': False,
'has_electric_ceiling_heating_ending': False,
'has_community_scheme_ending': False, 'has_ground_source_heat_pump_ending': False, 'has_community_scheme_ending': False, 'has_ground_source_heat_pump_ending': False,
'has_no_system_present_ending': False, 'has_portable_electric_heaters_ending': False, 'has_no_system_present_ending': False,
'has_water_source_heat_pump_ending': False, 'has_electric_heat_pump_ending': False, 'has_portable_electric_heaters_ending': False,
'has_micro-cogeneration_ending': False, 'has_solar_assisted_heat_pump_ending': False, 'has_water_source_heat_pump_ending': False,
'has_exhaust_source_heat_pump_ending': False, 'has_community_heat_pump_ending': False, 'has_electric_heat_pump_ending': False,
'has_electric_ending': False, 'has_mains_gas_ending': True, 'has_wood_logs_ending': False, 'has_micro-cogeneration_ending': False,
'has_coal_ending': False, 'has_oil_ending': False, 'has_wood_pellets_ending': False, 'has_solar_assisted_heat_pump_ending': False,
'has_exhaust_source_heat_pump_ending': False,
'has_community_heat_pump_ending': False,
'has_electric_ending': False, 'has_mains_gas_ending': True,
'has_wood_logs_ending': False,
'has_coal_ending': False, 'has_oil_ending': False,
'has_wood_pellets_ending': False,
'has_anthracite_ending': False, 'has_dual_fuel_mineral_and_wood_ending': False, 'has_anthracite_ending': False, 'has_dual_fuel_mineral_and_wood_ending': False,
'has_smokeless_fuel_ending': False, 'has_lpg_ending': False, 'has_b30k_ending': False, 'has_smokeless_fuel_ending': False, 'has_lpg_ending': False,
'has_b30k_ending': False,
'has_electricaire_ending': False, 'has_assumed_for_most_rooms_ending': False, 'has_electricaire_ending': False, 'has_assumed_for_most_rooms_ending': False,
'has_underfloor_heating_ending': False, 'thermostatic_control_ending': 'room thermostat', 'has_underfloor_heating_ending': False,
'charging_system_ending': 'Unknown', 'switch_system_ending': 'programmer', 'no_control_ending': 'Unknown', 'thermostatic_control_ending': 'room thermostat',
'charging_system_ending': 'Unknown', 'switch_system_ending': 'programmer',
'no_control_ending': 'Unknown',
'dhw_control_ending': 'Unknown', 'community_heating_ending': 'Unknown', 'dhw_control_ending': 'Unknown', 'community_heating_ending': 'Unknown',
'multiple_room_thermostats_ending': False, 'auxiliary_systems_ending': 'Unknown', 'trvs_ending': 'Unknown', 'multiple_room_thermostats_ending': False, 'auxiliary_systems_ending': 'Unknown',
'rate_control_ending': 'Unknown', 'glazing_type_ending': 'double', 'fuel_type_ending': 'mains gas', 'trvs_ending': 'Unknown',
'rate_control_ending': 'Unknown', 'glazing_type_ending': 'double',
'fuel_type_ending': 'mains gas',
'main-fuel_tariff_type_ending': 'Unknown', 'is_community_ending': False, 'main-fuel_tariff_type_ending': 'Unknown', 'is_community_ending': False,
'no_individual_heating_or_community_network_ending': False, 'complex_fuel_type_ending': 'Unknown', 'no_individual_heating_or_community_network_ending': False,
'sap_starting': 47, 'sap_ending': 47, 'heat_demand_starting': 478, 'heat_demand_ending': 478, 'complex_fuel_type_ending': 'Unknown',
'carbon_starting': 5.1, 'carbon_ending': 5.1, 'lighting_cost_starting': 91.0, 'lighting_cost_ending': 91.0, 'sap_starting': 47, 'sap_ending': 47, 'heat_demand_starting': 478,
'heating_cost_starting': 1677.0, 'heating_cost_ending': 1677.0, 'hot_water_cost_starting': 161.0, 'heat_demand_ending': 478,
'carbon_starting': 5.1, 'carbon_ending': 5.1, 'lighting_cost_starting': 91.0,
'lighting_cost_ending': 91.0,
'heating_cost_starting': 1677.0, 'heating_cost_ending': 1677.0,
'hot_water_cost_starting': 161.0,
'hot_water_cost_ending': 161.0, 'mechanical_ventilation_starting': 'natural', 'hot_water_cost_ending': 161.0, 'mechanical_ventilation_starting': 'natural',
'mechanical_ventilation_ending': 'natural', 'secondheat_description_starting': 'None', 'mechanical_ventilation_ending': 'natural',
'secondheat_description_starting': 'None',
'secondheat_description_ending': 'None', 'glazed_type_starting': 'not defined', 'secondheat_description_ending': 'None', 'glazed_type_starting': 'not defined',
'glazed_type_ending': 'double glazing installed during or after 2002', 'glazed_type_ending': 'double glazing installed during or after 2002',
'multi_glaze_proportion_starting': 0.0, 'multi_glaze_proportion_ending': 100, 'multi_glaze_proportion_starting': 0.0,
'low_energy_lighting_starting': 100.0, 'low_energy_lighting_ending': 100.0, 'multi_glaze_proportion_ending': 100, 'low_energy_lighting_starting': 100.0,
'number_open_fireplaces_starting': 0.0, 'number_open_fireplaces_ending': 0.0, 'low_energy_lighting_ending': 100.0, 'number_open_fireplaces_starting': 0.0,
'solar_water_heating_flag_starting': 'N', 'solar_water_heating_flag_ending': 'N', 'number_open_fireplaces_ending': 0.0, 'solar_water_heating_flag_starting': 'N',
'photo_supply_starting': 0.0, 'photo_supply_ending': 0.0, 'transaction_type_starting': 'rental', 'solar_water_heating_flag_ending': 'N', 'photo_supply_starting': 0.0,
'transaction_type_ending': 'rental', 'energy_tariff_starting': 'dual', 'energy_tariff_ending': 'dual', 'photo_supply_ending': 0.0,
'extension_count_starting': 3.0, 'extension_count_ending': 3.0, 'total_floor_area_starting': 61.0, 'transaction_type_starting': 'rental', 'transaction_type_ending': 'rental',
'total_floor_area_ending': 61.0, 'floor_height_starting': 2.37, 'floor_height_ending': 2.37, 'energy_tariff_starting': 'dual',
'hot_water_energy_eff_starting': 'Good', 'hot_water_energy_eff_ending': 'Good', 'energy_tariff_ending': 'dual', 'extension_count_starting': 3.0,
'extension_count_ending': 3.0,
'total_floor_area_starting': 61.0, 'total_floor_area_ending': 61.0,
'floor_height_starting': 2.37,
'floor_height_ending': 2.37, 'hot_water_energy_eff_starting': 'Good',
'hot_water_energy_eff_ending': 'Good',
'floor_energy_eff_starting': 'NO_RATING', 'floor_energy_eff_ending': 'NO_RATING', 'floor_energy_eff_starting': 'NO_RATING', 'floor_energy_eff_ending': 'NO_RATING',
'windows_energy_eff_starting': 'Very Poor', 'windows_energy_eff_ending': 'Good', 'windows_energy_eff_starting': 'Very Poor', 'windows_energy_eff_ending': 'Good',
'walls_energy_eff_starting': 'Very Poor', 'walls_energy_eff_ending': 'Very Poor', 'walls_energy_eff_starting': 'Very Poor', 'walls_energy_eff_ending': 'Very Poor',
'sheating_energy_eff_starting': 'NO_RATING', 'sheating_energy_eff_ending': 'NO_RATING', 'sheating_energy_eff_starting': 'NO_RATING',
'sheating_energy_eff_ending': 'NO_RATING',
'roof_energy_eff_starting': 'Very Poor', 'roof_energy_eff_ending': 'Very Poor', 'roof_energy_eff_starting': 'Very Poor', 'roof_energy_eff_ending': 'Very Poor',
'mainheat_energy_eff_starting': 'Good', 'mainheat_energy_eff_ending': 'Good', 'mainheat_energy_eff_starting': 'Good', 'mainheat_energy_eff_ending': 'Good',
'mainheatc_energy_eff_starting': 'Average', 'mainheatc_energy_eff_ending': 'Average', 'mainheatc_energy_eff_starting': 'Average',
'lighting_energy_eff_starting': 'Very Good', 'lighting_energy_eff_ending': 'Very Good', 'mainheatc_energy_eff_ending': 'Average',
'lighting_energy_eff_starting': 'Very Good',
'lighting_energy_eff_ending': 'Very Good',
'number_habitable_rooms_starting': 4.0, 'number_habitable_rooms_ending': 4.0, 'number_habitable_rooms_starting': 4.0, 'number_habitable_rooms_ending': 4.0,
'number_heated_rooms_starting': 4.0, 'number_heated_rooms_ending': 4.0, 'days_to_starting': 3642, 'number_heated_rooms_starting': 4.0, 'number_heated_rooms_ending': 4.0,
'days_to_ending': 3713, 'estimated_perimeter_starting': 23.430749027719962, 'is_post_sap10_starting': False,
'is_post_sap10_ending': False, 'lodgement_date_starting': '2024-07-21',
'lodgement_date_ending': '2024-07-21',
'days_to_starting': 3642, 'days_to_ending': 4189,
'estimated_perimeter_starting': 23.430749027719962,
'estimated_perimeter_ending': 23.430749027719962, 'has_glazing_ending': True, 'estimated_perimeter_ending': 23.430749027719962, 'has_glazing_ending': True,
'glazing_coverage_ending': 'full', 'id': '1+1' 'glazing_coverage_ending': 'full', 'id': '1+1'
} }