from model_data.BaseUtility import BaseUtility from model_data.Property import Property from model_data.analysis.UvalueEstimations import UvalueEstimations class FloorRecommendations(BaseUtility): # part L building regulations indicate that any rennovations on an existing property's walls should # achieve a U-value of no higher than 0.3 BUILDING_REGULATIONS_PART_L_MAX_U_VALUE = 0.25 # We don't recommend measures that are too low because it becomes expensive, therefore we aim to avoid # diminishing returns. This value should be verified with Osmosis (TODO) DIMINISHING_RETURNS_U_VALUE = 0.2 def __init__(self, property_instance: Property, uvalue_estimates: UvalueEstimations): self.property = property_instance self.uvalue_estimates = uvalue_estimates # For audit purposes, when estimating u values we'll store it self.estimated_u_value = None # Will contains a list of recommended measures self.recommendations = [] def recommend(self): is_suspended = self.property.floor["is_suspended"] insulation_thickness = self.property.floor["insulation_thickness"] self.property.year_built self.property.data["floor-energy-eff"] self.property.data["floor-env-eff"] # TODO: We neeed to know if the property is ground floor or not if self.property.floor["another_property_below"]: # If there's another property below, it's likely impractical to recommend a floor upgrade return if is_suspended: if insulation_thickness == "none": uvalue = None else: uvalue = self.uvalue_estimates.get_estimate( component="floor", description="", thickness=insulation_thickness )