energy assessment model

This commit is contained in:
Khalim Conn-Kowlessar 2024-07-25 18:35:00 +01:00
parent 7b04e1edc7
commit 6702eb65b0
3 changed files with 128 additions and 5 deletions

View file

@ -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)

View file

@ -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')],
}

View file

@ -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