diff --git a/backend/app/db/models/energy_assessments.py b/backend/app/db/models/energy_assessments.py new file mode 100644 index 00000000..b6f7dd73 --- /dev/null +++ b/backend/app/db/models/energy_assessments.py @@ -0,0 +1,121 @@ +from sqlalchemy import Column, Integer, BigInteger, Text, Float, DateTime, Boolean +from sqlalchemy.ext.declarative import declarative_base + +Base = declarative_base() + + +class EnergyAssessment(Base): + __tablename__ = 'energy_assessments' + id = Column(BigInteger, primary_key=True, autoincrement=True) + uprn = Column(BigInteger, nullable=False) + uprn_source = Column(Text, nullable=False) + property_type = Column(Text, nullable=False) + building_reference_number = Column(Text) + current_energy_efficiency = Column(Text, nullable=False) + current_energy_rating = Column(Text, nullable=False) + address1 = Column(Text, nullable=False) + address2 = Column(Text, nullable=False) + address3 = Column(Text) + posttown = Column(Text, nullable=False) + postcode = Column(Text, nullable=False) + address = Column(Text, nullable=False) + county = Column(Text) + constituency = Column(Text) + constituency_label = Column(Text) + low_energy_fixed_light_count = Column(Text, nullable=False) + construction_age_band = Column(Text, nullable=False) + mainheat_energy_eff = Column(Text, nullable=False) + windows_env_eff = Column(Text, nullable=False) + lighting_energy_eff = Column(Text, nullable=False) + environment_impact_potential = Column(Text, nullable=False) + mainheatcont_description = Column(Text, nullable=False) + sheating_energy_eff = Column(Text, nullable=False) + local_authority = Column(Text, nullable=False) + local_authority_label = Column(Text, nullable=False) + fixed_lighting_outlets_count = Column(Text, nullable=False) + energy_tariff = Column(Text, nullable=False) + mechanical_ventilation = Column(Text, nullable=False) + solar_water_heating_flag = Column(Text, nullable=False) + co2_emissions_potential = Column(Text, nullable=False) + number_heated_rooms = Column(Text, nullable=False) + floor_description = Column(Text, nullable=False) + energy_consumption_potential = Column(Text, nullable=False) + built_form = Column(Text, nullable=False) + number_open_fireplaces = Column(Text, nullable=False) + windows_description = Column(Text, nullable=False) + glazed_area = Column(Text, nullable=False) + inspection_date = Column(DateTime(timezone=True), nullable=False) + mains_gas_flag = Column(Text, nullable=False) + co2_emiss_curr_per_floor_area = Column(Text, nullable=False) + heat_loss_corridor = Column(Text, nullable=False) + unheated_corridor_length = Column(Text) + flat_storey_count = Column(Text) + roof_energy_eff = Column(Text, nullable=False) + total_floor_area = Column(Text, nullable=False) + environment_impact_current = Column(Text, nullable=False) + roof_description = Column(Text, nullable=False) + floor_energy_eff = Column(Text, nullable=False) + number_habitable_rooms = Column(Text, nullable=False) + hot_water_env_eff = Column(Text, nullable=False) + mainheatc_energy_eff = Column(Text, nullable=False) + main_fuel = Column(Text, nullable=False) + lighting_env_eff = Column(Text, nullable=False) + windows_energy_eff = Column(Text, nullable=False) + floor_env_eff = Column(Text, nullable=False) + sheating_env_eff = Column(Text, nullable=False) + lighting_description = Column(Text, nullable=False) + roof_env_eff = Column(Text, nullable=False) + walls_energy_eff = Column(Text, nullable=False) + photo_supply = Column(Text, nullable=False) + lighting_cost_potential = Column(Text, nullable=False) + mainheat_env_eff = Column(Text, nullable=False) + multi_glaze_proportion = Column(Text, nullable=False) + main_heating_controls = Column(Text, nullable=False) + flat_top_storey = Column(Text) + secondheat_description = Column(Text, nullable=False) + walls_env_eff = Column(Text, nullable=False) + transaction_type = Column(Text, nullable=False) + extension_count = Column(Text, nullable=False) + mainheatc_env_eff = Column(Text, nullable=False) + lmk_key = Column(Text) + wind_turbine_count = Column(Text, nullable=False) + tenure = Column(Text, nullable=False) + floor_level = Column(Text, nullable=False) + potential_energy_efficiency = Column(Text, nullable=False) + potential_energy_rating = Column(Text, nullable=False) + hot_water_energy_eff = Column(Text, nullable=False) + low_energy_lighting = Column(Text, nullable=False) + walls_description = Column(Text, nullable=False) + hotwater_description = Column(Text, nullable=False) + co2_emissions_current = Column(Text, nullable=False) + heating_cost_current = Column(Text, nullable=False) + heating_cost_potential = Column(Text, nullable=False) + hot_water_cost_current = Column(Text, nullable=False) + hot_water_cost_potential = Column(Text, nullable=False) + lighting_cost_current = Column(Text, nullable=False) + energy_consumption_current = Column(Text, nullable=False) + lodgement_date = Column(DateTime(timezone=True), nullable=False) + lodgement_datetime = Column(DateTime(timezone=True), nullable=False) + mainheat_description = Column(Text, nullable=False) + floor_height = Column(Float, nullable=False) + glazed_type = Column(Text, nullable=False) + file_location = Column(Text, nullable=False) + surveyor_name = Column(Text, nullable=False) + surveyor_company = Column(Text, nullable=False) + space_heating_kwh = Column(Text, nullable=False) + water_heating_kwh = Column(Text, nullable=False) + number_of_doors = Column(Integer, nullable=False) + number_of_insulated_doors = Column(Integer, nullable=False) + number_of_floors = Column(Integer, nullable=False) + insulation_wall_area = Column(Float, nullable=False) + heat_loss_perimeter = Column(Float, nullable=False) + party_wall_length = Column(Float, nullable=False) + perimeter = Column(Float, nullable=False) + rooms_with_bath_and_or_shower = Column(Integer) + rooms_with_mixer_shower_no_bath = Column(Integer) + room_with_bath_and_mixer_shower = Column(Integer) + percent_draftproofed = Column(Integer) + has_hot_water_cylinder = Column(Boolean) + cylinder_insulation_type = Column(Text) + cylinder_insulation_thickness = Column(Integer) + cylinder_thermostat = Column(Boolean) diff --git a/etl/xml_survey_extraction/XmlParser.py b/etl/xml_survey_extraction/XmlParser.py index 76fa5612..3f277bad 100644 --- a/etl/xml_survey_extraction/XmlParser.py +++ b/etl/xml_survey_extraction/XmlParser.py @@ -367,13 +367,13 @@ class XmlParser: "heat_loss_perimeter": self.heat_loss_perimeter, "party_wall_length": self.party_wall_length, "perimeter": self.perimeter, - "rooms_with_bath_and_or_shower": self.get_node_value('Rooms-With-Bath-And-Or-Shower'), - "rooms_with_mixer_shower_no_bath": self.get_node_value('Rooms-With-Mixer-Shower-No-Bath'), - "room_with_bath_and_mixer_shower": self.get_node_value('Rooms-With-Bath-And-Mixer-Shower'), - "percent_draftproofed": self.get_node_value('Percent-Draughtproofed'), + "rooms_with_bath_and_or_shower": int(self.get_node_value('Rooms-With-Bath-And-Or-Shower')), + "rooms_with_mixer_shower_no_bath": int(self.get_node_value('Rooms-With-Mixer-Shower-No-Bath')), + "room_with_bath_and_mixer_shower": int(self.get_node_value('Rooms-With-Bath-And-Mixer-Shower')), + "percent_draftproofed": int(self.get_node_value('Percent-Draughtproofed')), "has_hot_water_cylinder": boolean_lookup[self.get_node_value('Has-Hot-Water-Cylinder')], "cylinder_insulation_type": cylinder_insulation_type[self.get_node_value('Cylinder-Insulation-Type')], - "cylinder_insulation_thickness": self.get_node_value('Cylinder-Insulation-Thickness'), + "cylinder_insulation_thickness": int(self.get_node_value('Cylinder-Insulation-Thickness')), "cylinder_thermostat": boolean_lookup[self.get_node_value('Cylinder-Thermostat')], } diff --git a/etl/xml_survey_extraction/app.py b/etl/xml_survey_extraction/app.py index 92048a68..3e41b5fb 100644 --- a/etl/xml_survey_extraction/app.py +++ b/etl/xml_survey_extraction/app.py @@ -56,6 +56,8 @@ def main(): ) xml_parser.run() logger.info(f"Extracted data from {xml}") + extracted_epc = xml_parser.epc + extracted_additional_data = xml_parser.additional_data # TODO: Set a portfolio ID, Target and Automatically upload the asset list and create the event for the portfolio