diff --git a/recommendations/HotwaterRecommendations.py b/recommendations/HotwaterRecommendations.py index 7f77597f..88cfa932 100644 --- a/recommendations/HotwaterRecommendations.py +++ b/recommendations/HotwaterRecommendations.py @@ -1,5 +1,6 @@ from backend.Property import Property from recommendations.Costs import Costs +from recommendations.recommendation_utils import override_costs class HotwaterRecommendations: @@ -41,6 +42,13 @@ class HotwaterRecommendations: recommendation_cost = self.costs.hot_water_tank_insulation() + is_override = "hot_water_tank_insulation" in self.property.override + if is_override: + recommendation_cost = override_costs(recommendation_cost) + description = "Insulation tank has already been insulated, no further action required" + else: + description = "Insulate hot water tank" + self.recommendations.append( { "phase": phase, @@ -48,10 +56,11 @@ class HotwaterRecommendations: # TODO ], "type": "hot_water_tank_insulation", - "description": "Insulate the hot water tank with an insulation jacket", + "description": description, "starting_u_value": None, "new_u_value": None, "sap_points": None, + "is_override": is_override, **recommendation_cost, "simulation_config": {"hot_water_energy_eff_ending": "Average"} } diff --git a/recommendations/LightingRecommendations.py b/recommendations/LightingRecommendations.py index 352c4d8a..9e4c8e43 100644 --- a/recommendations/LightingRecommendations.py +++ b/recommendations/LightingRecommendations.py @@ -1,6 +1,7 @@ from backend.Property import Property from typing import List from recommendations.Costs import Costs +from recommendations.recommendation_utils import override_costs class LightingRecommendations: @@ -91,6 +92,11 @@ class LightingRecommendations: heat_demand_change, carbon_change = self.estimate_lighting_impact(number_non_lel_outlets) + is_override = "low_energy_lighting" in self.property.override + if is_override: + cost_result = override_costs(cost_result) + description = "Low energy lighting has already been installed, no further action required" + self.recommendation = [ { "phase": phase, @@ -99,6 +105,7 @@ class LightingRecommendations: "description": description, "starting_u_value": None, "new_u_value": None, + "is_override": is_override, # For SAP points, we use the fact that lighting is usually worth 2 points and we scale this to # the proportion of lights that will be set to low energy "sap_points": round(2 * (number_non_lel_outlets / number_lighting_outlets), 2), diff --git a/recommendations/SecondaryHeating.py b/recommendations/SecondaryHeating.py index f31c4c05..e426977e 100644 --- a/recommendations/SecondaryHeating.py +++ b/recommendations/SecondaryHeating.py @@ -1,4 +1,5 @@ from recommendations.Costs import Costs +from recommendations.recommendation_utils import override_costs from backend.Property import Property @@ -38,15 +39,24 @@ class SecondaryHeating: n_rooms = 0 costs = self.costs.heater_removal(n_rooms=n_rooms) + + is_override = "secondary_heating" in self.property.override + if is_override: + 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", - "description": "Remove the secondary heating system", + "description": description, "starting_u_value": None, "new_u_value": None, "sap_points": None, + "is_override": is_override, **costs, "simulation_config": { "secondheat_description_ending": "None" diff --git a/recommendations/SolarPvRecommendations.py b/recommendations/SolarPvRecommendations.py index f75003ce..72fcdf4b 100644 --- a/recommendations/SolarPvRecommendations.py +++ b/recommendations/SolarPvRecommendations.py @@ -1,5 +1,6 @@ import numpy as np from recommendations.Costs import Costs +from recommendations.recommendation_utils import override_costs class SolarPvRecommendations: @@ -110,6 +111,10 @@ class SolarPvRecommendations: description = (f"Install a {kw} kilowatt-peak (kWp) solar photovoltaic (PV) p" f"anel system on {round(roof_coverage_percent)}% the roof.") + is_override = "solar_pv" in self.property.override + if is_override: + cost_result = override_costs(cost_result) + self.recommendation.append( { "phase": phase, @@ -119,6 +124,7 @@ class SolarPvRecommendations: "starting_u_value": None, "new_u_value": None, "sap_points": None, + "is_override": is_override, **cost_result, # This is required for simulating the SAP impact. solar_pv_percentage is between 0 & 1 so we scale # back up here