from recommendations.Costs import Costs from recommendations.recommendation_utils import override_costs from backend.Property import Property class SecondaryHeating: """ This class recommends the removal of the secondary heating system for properties that have a primary heating system. """ # The list of existing heating systems that are accepted ACCEPTED_MAINHEAT_DESCRIPTIONS = ["Boiler and radiators, mains gas", "Electric storage heaters"] ACCEPTED_SECONDHEAT_DESCRIPTIONS = ["Room heaters, electric", 'Portable electric heaters (assumed)'] # These are the heaters where works are required to remove them FIXED_HEATER_DESCRIPTIONS = ["Room heaters, electric"] def __init__(self, property_instance: Property): self.property = property_instance self.costs = Costs(self.property) self.recommendation = [] def recommend(self, phase: int): # Reset self.recommendation = [] if self.property.main_heating["clean_description"] not in self.ACCEPTED_MAINHEAT_DESCRIPTIONS: return # TODO: We need to clean secondary data if self.property.data['secondheat-description'] not in self.ACCEPTED_SECONDHEAT_DESCRIPTIONS: return if self.property.data['secondheat-description'] in self.FIXED_HEATER_DESCRIPTIONS: # We have an associated cost otherwise, there is no cost n_rooms = self.property.data['number-habitable-rooms'] - self.property.data['number-heated-rooms'] else: n_rooms = 0 costs = self.costs.heater_removal(n_rooms=n_rooms) already_installed = "secondary_heating" in self.property.already_installed if already_installed: costs = override_costs(costs) description = "Secondary heating system has already been removed, no further action required" else: description = "Remove the secondary heating system" self.recommendation.append( { "phase": phase, "parts": [], "type": "secondary_heating", "measure_type": "secondary_heating", "description": description, "starting_u_value": None, "new_u_value": None, "sap_points": None, "already_installed": already_installed, **costs, "simulation_config": { "secondheat_description_ending": "None" }, "description_simulation": { "secondheat-description": "None" } } )