diff --git a/etl/pdfReader/sitenotes.py b/etl/pdfReader/sitenotes.py index 95d4a39..3be34f5 100644 --- a/etl/pdfReader/sitenotes.py +++ b/etl/pdfReader/sitenotes.py @@ -14,7 +14,7 @@ from etl.transform.conditionReportTypes import ( ExternalElevationGableOne, ExternalElevationGableTwo, ExternalElevationRear, ConservatoryOrOutbuilding, AccessAndElevations, Hallway, RoomInfo, WindowsInfo, VentilationInfo, LivingRoom, DiningRoom, Kitchen, Rooms, Utility, WC, Landing, Bedroom, Bathroom, LoftSpace, RoomInRoof, HeatingSystem, GeneralConditionHeatingSystem, - MainHeatingOne, MainHeatingTwo, SecondaryHeating + MainHeatingOne, MainHeatingTwo, SecondaryHeating, HeatingByRoom, Renewables ) from datetime import datetime from pprint import pprint @@ -482,6 +482,8 @@ class ConditionReport(SiteNotesExtractor): _ = self.get_main_heating_one() _ = self.get_main_heating_two() _ = self.get_secondary_heating() + _ = self.get_heating_by_room() + _ = self.get_renewables() pprint(_) def get_main_heating_one(self): @@ -502,7 +504,53 @@ class ConditionReport(SiteNotesExtractor): data = self.get_data_between("Secondary Heating", "Heating by room") return SecondaryHeating( is_there_a_secondary_heating=True if self.get_next_value(data, "Is there a Secondary Heating?").lower() == "yes" else False, - fuel=self.get_next_value(data, "Fuel") + fuel=self.get_next_value(data, "Fuel"), + electric_heating_type=self.get_next_value_greedy(data, "Type", 2), + gas_heating_type=self.get_x_value(data, "Type", 1), + ) + + def get_heating_by_room(self): + data = self.get_data_between("Heating by room", "Renewables") + list_of_main_heating_system_by_one = self.get_data_between("Rooms heated by Main System 1:", "Rooms Heated by Main System 2")[1:] + list_of_main_heating_system_by_two = self.get_data_between("Rooms Heated by Main System 2", "Rooms heated by Secondary Heating:")[1:] + list_of_rooms_heated_by_secondary_heating = self.get_data_between("Rooms heated by Secondary Heating:", "Are there any partially heated rooms?")[1:] + are_there_any_partially_heated_rooms = True if self.get_next_value(data, "Are there any partially heated rooms?").lower() == "yes" else False + are_there_any_unheated_rooms = True if self.get_next_value(data, "Are there any unheated rooms?").lower() == "yes" else False + list_of_partially_heated_rooms = self.get_data_between("Are there any partially heated rooms?", "Are there any unheated rooms?")[2:] + list_of_unheated_rooms = self.get_data_between("Are there any unheated rooms?", "Renewables")[2:] + + def remove_special_character(lst): + return_lst = [] + for i, item in enumerate(lst): + if '\xa0' in item or 'Rooms' in item or len(item) == 1 or item.lower() == "None".lower(): + pass + else: + return_lst.append(item) + return return_lst + + return HeatingByRoom( + rooms_heated_by_main_system_one=remove_special_character(list_of_main_heating_system_by_one), + rooms_heated_by_main_system_two=remove_special_character(list_of_main_heating_system_by_two), + rooms_heated_by_secondary_heating=remove_special_character(list_of_rooms_heated_by_secondary_heating), + are_there_any_partially_heated_rooms=are_there_any_partially_heated_rooms, + are_there_any_unheated_rooms=are_there_any_unheated_rooms, + list_of_partially_heated_rooms=remove_special_character(list_of_partially_heated_rooms), + unheated_rooms=remove_special_character(list_of_unheated_rooms), + ) + + def get_renewables(self): + data = self.get_data_between("Renewables", "5. Occupancy Assessment") + + return Renewables( + is_there_any_renewable_energy_system_in_place=True if self.get_next_value(data, "Is there any renewable energy system in place?").lower() == "yes" else False, + suitable_roof_orientation_for_solar_pv_water=self.get_next_value(data, "Suitable roof orientation for Solar PV/water:"), + is_there_a_water_tank=True if self.get_next_value(data, "Is there a Water Tank?").lower() == "yes" else False, + type=self.get_next_value(data, "Type"), + size=self.get_next_value(data, "Size"), + tank_location=self.get_next_value(data, "Tank Location"), + is_the_tank_insulated=True if self.get_next_value(data, "Is the tank Insulated") else False, + type_of_insulation=self.get_next_value(data, "Type of Insulation"), + thickness_of_insulation_in_mm=int(self.get_next_value(data, "Thickness of Insulation (mm)")), ) def get_general_condition_of_heating_system(self): diff --git a/etl/transform/conditionReportTypes.py b/etl/transform/conditionReportTypes.py index da8a7c3..82a9f39 100644 --- a/etl/transform/conditionReportTypes.py +++ b/etl/transform/conditionReportTypes.py @@ -176,7 +176,8 @@ class GeneralConditionHeatingSystem(BaseModel): class SecondaryHeating(BaseModel): is_there_a_secondary_heating: bool fuel: str - type: str + electric_heating_type: str + gas_heating_type: str class MainHeatingOne(BaseModel): as_defined_by: str @@ -187,12 +188,13 @@ class MainHeatingTwo(BaseModel): is_there_a_main_heating_two: bool class HeatingByRoom(BaseModel): - rooms_heated_by_main_system_one: str - rooms_heated_by_main_system_two: str - rooms_heated_by_secondary_heating: str - are_there_any_partially_heated_rooms: str + rooms_heated_by_main_system_one: List[str] + rooms_heated_by_main_system_two: List[str] + rooms_heated_by_secondary_heating: List[str] + are_there_any_partially_heated_rooms: bool + partially_heated_rooms: Optional[List[str]] = [] are_there_any_unheated_rooms: bool - unheated_rooms: str + unheated_rooms: List[str] class Renewables(BaseModel): is_there_any_renewable_energy_system_in_place: bool