# from sqlmodel import Field, SQLModel, Relationship # import uuid # from typing import Optional, List # from datetime import datetime # from pydantic import EmailStr # from sqlalchemy import Column # from sqlalchemy.dialects.postgresql import UUID # # from etl.models.topLevel import BaseModel, Documents # class PreSiteNote(BaseModel, table=True): # summary_info_id: uuid.UUID = Field( # foreign_key="presitenotessummaryinfo.id", # nullable=False # ) # summary_info: Optional["PreSiteNotesSummaryInfo"] = Relationship(back_populates="pre_site_notes") # # Assessor Info # assessor_id: uuid.UUID = Field( # foreign_key="assessorinfo.id", # nullable=False # ) # assessor: Optional["AssessorInfo"] = Relationship(back_populates="pre_site_notes") # pre_site_note_description_id: uuid.UUID = Field( # foreign_key="propertydescription.id", # nullable=True # ) # pre_site_note_description: Optional["PropertyDescription"] = Relationship(back_populates="pre_site_notes") # class Dimension(BaseModel, table=True): # floor_area_m2: float # room_height_m: float # loss_perimeter_m: float # party_wall_length_m: float # property_detail_id: Optional[uuid.UUID] = Field(default=None, foreign_key="propertydetail.id") # property_detail: Optional["PropertyDetail"] = Relationship(back_populates="dimensions") # class Walls(BaseModel, table=True): # construction: str # insulation: str # insulation_thickness_mm: str # wall_thickness_measured: bool # wall_thickness_mm: Optional[int] # u_value_known: bool # u_value_w_m2_k: Optional[float] # dry_lining: bool # alternative_wall_present: bool # class Roofs(BaseModel, table=True): # construction: str # insulation_type: str # insulation_thickness: str # u_value_known: bool # class Floors(BaseModel, table=True): # floor_type: str # ground_floor_construction: str # ground_floor_insulation_type: Optional[str] = "" # floor_insulation_thickness_mm: Optional[float] = -1 # u_value_known: bool # class Windows(BaseModel, table=True): # glazing_type: str # area_m2: float # roof_window: bool # orientation: str # u_value_w_m2_k: int # g_value: int # property_detail_id: Optional[uuid.UUID] = Field(default=None, foreign_key="propertydetail.id") # property_detail: Optional["PropertyDetail"] = Relationship(back_populates="windows") # class PropertyDetail(BaseModel, table=True): # age_band: str # wall_id: Optional[uuid.UUID] = Field(default=None, foreign_key="walls.id") # roof_id: Optional[uuid.UUID] = Field(default=None, foreign_key="roofs.id") # floor_id: Optional[uuid.UUID] = Field(default=None, foreign_key="floors.id") # # Relationships # dimensions: List[Dimension] = Relationship(back_populates="property_detail") # windows: List[Windows] = Relationship(back_populates="property_detail") # class Door(BaseModel, table=True): # no_of_doors: int # no_of_insulated_doors: int # u_value_w_m2_k: Optional[str] # property_description: Optional["PropertyDescription"] = Relationship(back_populates="door") # class VentilationAndCooling(BaseModel, table=True): # no_of_open_fireplaces: int # ventilation_type: str # space_cooling_system_present: bool # property_description: Optional["PropertyDescription"] = Relationship(back_populates="ventilation_and_cooling") # class Lighting(BaseModel, table=True): # total_no_of_light_fittings: int # total_no_of_lel_fittings: int # property_description: Optional["PropertyDescription"] = Relationship(back_populates="lighting") # class HeatingSystemControls(BaseModel, table=True): # control_type: str # flue_type: str # fan_assisted_flue: bool # heat_emitter_type: str # electricity_meter_type: Optional[str] = "" # mains_gas_available: Optional[bool] = False # class HeatingFromPreSiteNotes(BaseModel, table=True): # type: str # heating_source: str # efficiency_source: str # heating_fuel: str # brand_name: str # model_name: str # model_qualifer: str # sap_2009_table: Optional[str] = "" # percentage_of_heated_floor_area_served: Optional[str] = "" # controls_id: Optional[uuid.UUID] = Field(default=None, foreign_key="heatingsystemcontrols.id") # property_description: Optional["PropertyDescription"] = Relationship( # back_populates="main_heating", sa_relationship_kwargs={"foreign_keys": "[PropertyDescription.main_heating_id]"} # ) # property_description2: Optional["PropertyDescription"] = Relationship( # back_populates="main_heating2", sa_relationship_kwargs={"foreign_keys": "[PropertyDescription.main_heating2_id]"} # ) # class HeatingType(BaseModel, table=True): # heating_type: str # fuel_type: str # property_description: Optional["PropertyDescription"] = Relationship(back_populates="secondary_heating_type") # class WaterHeating(BaseModel, table=True): # heating_type: str # fuel_type: str # property_description: Optional["PropertyDescription"] = Relationship(back_populates="water_heating") # class HotWaterCylinder(BaseModel, table=True): # volume: str # insulation_type: str # insulation_thickness: str # thermostat: bool # property_description: Optional["PropertyDescription"] = Relationship(back_populates="hot_water_cylinder") # class SolarWaterHeating(BaseModel, table=True): # solar_water_heating_details_known: bool # property_description: Optional["PropertyDescription"] = Relationship(back_populates="solar_water_heating") # class ShowerAndBaths(BaseModel, table=True): # no_of_rooms_with_baths_and_or_shower: int # no_of_rooms_with_mixer_shower_and_no_baths: int # no_of_rooms_with_mixer_shower_and_baths: int # property_description: Optional["PropertyDescription"] = Relationship(back_populates="shower_and_baths") # class FlueGasHeatRecoverySystem(BaseModel, table=True): # fghrs_present: bool # property_description: Optional["PropertyDescription"] = Relationship(back_populates="flue_gas_heat_recovery_system") # class PhotovoltaicPanel(BaseModel, table=True): # pvs_are_connected_to_dwelling_electricity_meter: bool # percentage_of_external_roof_area_with_pvs: str # property_description: Optional["PropertyDescription"] = Relationship(back_populates="photovoltaic_panel") # class WindTurbine(BaseModel, table=True): # wind_turbine: bool # property_description: Optional["PropertyDescription"] = Relationship(back_populates="wind_turbine") # class OtherDetails(BaseModel, table=True): # electricity_meter_type: str # main_gas_avalible: bool # property_description: Optional["PropertyDescription"] = Relationship(back_populates="other_details") # class PropertyDescription(BaseModel, table=True): # built_form: str # detachment_or_position: str # no_of_main_property: int # no_of_extension_1: Optional[int] = 0 # no_of_extension_2: Optional[int] = 0 # no_of_extension_3: Optional[int] = 0 # no_of_extension_4: Optional[int] = 0 # no_of_habitable_rooms: int # no_of_heated_rooms: int # heated_basement: bool # conservatory_type: str # percentage_of_draught_proofed: int # terrain_type: str # conservatory: bool # main_property_id: uuid.UUID = Field(foreign_key="propertydetail.id") # ex1_property_id: Optional[uuid.UUID] = Field(default=None, foreign_key="propertydetail.id") # ex2_property_id: Optional[uuid.UUID] = Field(default=None, foreign_key="propertydetail.id") # ex3_property_id: Optional[uuid.UUID] = Field(default=None, foreign_key="propertydetail.id") # ex4_property_id: Optional[uuid.UUID] = Field(default=None, foreign_key="propertydetail.id") # door_id: Optional[uuid.UUID] = Field(default=None, foreign_key="door.id") # ventilation_and_cooling_id: Optional[uuid.UUID] = Field(default=None, foreign_key="ventilationandcooling.id") # lighting_id: Optional[uuid.UUID] = Field(default=None, foreign_key="lighting.id") # water_heating_id: Optional[uuid.UUID] = Field(default=None, foreign_key="waterheating.id") # hot_water_cylinder_id: Optional[uuid.UUID] = Field(default=None, foreign_key="hotwatercylinder.id") # solar_water_heating_id: Optional[uuid.UUID] = Field(default=None, foreign_key="solarwaterheating.id") # shower_and_baths_id: Optional[uuid.UUID] = Field(default=None, foreign_key="showerandbaths.id") # flue_gas_heat_recovery_system_id: Optional[uuid.UUID] = Field(default=None, foreign_key="fluegasheatrecoverysystem.id") # photovoltaic_panel_id: Optional[uuid.UUID] = Field(default=None, foreign_key="photovoltaicpanel.id") # wind_turbine_id: Optional[uuid.UUID] = Field(default=None, foreign_key="windturbine.id") # other_details_id: Optional[uuid.UUID] = Field(default=None, foreign_key="otherdetails.id") # main_heating_id: Optional[uuid.UUID] = Field(default=None, foreign_key="heatingfrompresitenotes.id") # main_heating2_id: Optional[uuid.UUID] = Field(default=None, foreign_key="heatingfrompresitenotes.id") # secondary_heating_type_id: Optional[uuid.UUID] = Field(default=None, foreign_key="heatingtype.id") # # Relationships # main_property: Optional["PropertyDetail"] = Relationship(sa_relationship_kwargs={"foreign_keys": "[PropertyDescription.main_property_id]"}) # ex1_property: Optional["PropertyDetail"] = Relationship(sa_relationship_kwargs={"foreign_keys": "[PropertyDescription.ex1_property_id]"}) # ex2_property: Optional["PropertyDetail"] = Relationship(sa_relationship_kwargs={"foreign_keys": "[PropertyDescription.ex2_property_id]"}) # ex3_property: Optional["PropertyDetail"] = Relationship(sa_relationship_kwargs={"foreign_keys": "[PropertyDescription.ex3_property_id]"}) # ex4_property: Optional["PropertyDetail"] = Relationship(sa_relationship_kwargs={"foreign_keys": "[PropertyDescription.ex4_property_id]"}) # # Related Models # door: Optional["Door"] = Relationship(back_populates="property_description") # ventilation_and_cooling: Optional["VentilationAndCooling"] = Relationship(back_populates="property_description") # lighting: Optional["Lighting"] = Relationship(back_populates="property_description") # water_heating: Optional["WaterHeating"] = Relationship(back_populates="property_description") # hot_water_cylinder: Optional["HotWaterCylinder"] = Relationship(back_populates="property_description") # solar_water_heating: Optional["SolarWaterHeating"] = Relationship(back_populates="property_description") # shower_and_baths: Optional["ShowerAndBaths"] = Relationship(back_populates="property_description") # flue_gas_heat_recovery_system: Optional["FlueGasHeatRecoverySystem"] = Relationship(back_populates="property_description") # photovoltaic_panel: Optional["PhotovoltaicPanel"] = Relationship(back_populates="property_description") # wind_turbine: Optional["WindTurbine"] = Relationship(back_populates="property_description") # other_details: Optional["OtherDetails"] = Relationship(back_populates="property_description") # main_heating: Optional["HeatingFromPreSiteNotes"] = Relationship(back_populates="property_description", sa_relationship_kwargs={"foreign_keys": "[PropertyDescription.main_heating_id]"}) # main_heating2: Optional["HeatingFromPreSiteNotes"] = Relationship(back_populates="property_description", sa_relationship_kwargs={"foreign_keys": "[PropertyDescription.main_heating2_id]"}) # secondary_heating_type: Optional["HeatingType"] = Relationship(back_populates="property_description") # pre_site_notes: Optional["PreSiteNote"] = Relationship(back_populates="pre_site_note_description") # class AssessorInfo(BaseModel, table=True): # accreditation_number: str # name: str # phone_number: Optional[str] = None # email_address: Optional[EmailStr] = None # company_id: Optional[uuid.UUID] = Field(default=None, foreign_key="companyinfo.id") # company: Optional["CompanyInfo"] = Relationship(back_populates="assessors") # pre_site_notes: List["PreSiteNote"] = Relationship(back_populates="assessor") # documents: List["Documents"] = Relationship(back_populates="author") # class PreSiteNotesSummaryInfo(BaseModel, table=True): # reference_number: str # epc_language: str # uprn: Optional[str] = "" # postcode: str # region: str # address: str # town: str # county: Optional[str] = "" # property_tenure: str # transaction_type: str # inspection_date: datetime # current_sap: str # potential_sap: str # current_ei: str # potential_ei: str # current_annual_emissions: str # current_annual_emission_including_0925_multiplayer: str # current_annual_energy_costs: str # pre_site_notes: List["PreSiteNote"] = Relationship(back_populates="summary_info") # class CompanyInfo(BaseModel, table=True): # address: str # trading_name: str # post_code: str # fax_number: Optional[str] = None # related_party_disclosure: Optional[str] = None # assessors: List[AssessorInfo] = Relationship(back_populates="company") # class Insulation(BaseModel, table=True): # type: str # PreSiteNote.update_forward_refs() # AssessorInfo.update_forward_refs()