diff --git a/backend/app/plan/router.py b/backend/app/plan/router.py index bcbc4332..a0d93190 100644 --- a/backend/app/plan/router.py +++ b/backend/app/plan/router.py @@ -170,7 +170,7 @@ async def trigger_plan(body: PlanTriggerRequest): # Property recommendations p.get_components(cleaned, photo_supply_lookup, floor_area_decile_thresholds) - recommender = Recommendations(property_instance=p, materials=materials) + recommender = Recommendations(property_instance=p, materials=materials, exclusions=body.exclusions) property_recommendations, property_representative_recommendations = recommender.recommend() if not property_recommendations: @@ -196,6 +196,7 @@ async def trigger_plan(body: PlanTriggerRequest): ) model_api = ModelApi(portfolio_id=body.portfolio_id, timestamp=created_at) + # model_api.MODEL_PREFIXES = ["sap_change_predictions"] all_predictions = { "sap_change_predictions": pd.DataFrame(), @@ -274,14 +275,15 @@ async def trigger_plan(body: PlanTriggerRequest): if any(x in [r["type"] for r in solution] for x in [ "internal_wall_insulation", "external_wall_insulation", "cavity_wall_insulation" ]): - ventilation_rec = [ - r for r in recommendations_with_impact if r[0]["type"] == "mechanical_ventilation" - ][0] - - selected_recommendations = set( - list(selected_recommendations) + [ventilation_rec[0]["recommendation_id"]] + ventilation_rec = next( + (r[0] for r in recommendations_with_impact if r[0]["type"] == "mechanical_ventilation"), + None ) + # If a matching recommendation was found, add its ID to the selected recommendations + if ventilation_rec: + selected_recommendations.add(ventilation_rec["recommendation_id"]) + # We check if the selected recommendation is wall ventilation and if so, we make sure # mechanical ventilation is selected diff --git a/recommendations/Recommendations.py b/recommendations/Recommendations.py index b2e6d991..944fec7a 100644 --- a/recommendations/Recommendations.py +++ b/recommendations/Recommendations.py @@ -67,11 +67,19 @@ class Recommendations: property_recommendations.append(self.wall_recomender.recommendations) phase += 1 + if "roof_insulation" not in self.exclusions: + self.roof_recommender.recommend(phase=phase) + if self.roof_recommender.recommendations: + property_recommendations.append(self.roof_recommender.recommendations) + phase += 1 + # Ventilation recommendations # We only produce a ventilation recommendation if the property is recommended to have wall or roof # insulation - # We will not attribute a SAP impact to the ventilation recommendation, since we've seen that this has no - # real impact on the SAP score. Therefore, we don't need to include phasing for ventilation. If we have any + # We will not attribute a SAP impact to the ventilation recommendation, since we've seen that this + # has no + # real impact on the SAP score. Therefore, we don't need to include phasing for ventilation. If we + # have any # wall or roof recommendations, we will ensure that ventilation is included in the simulation if "ventilation" not in self.exclusions: if self.wall_recomender.recommendations or self.roof_recommender.recommendations: @@ -79,12 +87,6 @@ class Recommendations: if self.ventilation_recomender.recommendation: property_recommendations.append(self.ventilation_recomender.recommendation) - if "roof_insulation" not in self.exclusions: - self.roof_recommender.recommend(phase=phase) - if self.roof_recommender.recommendations: - property_recommendations.append(self.roof_recommender.recommendations) - phase += 1 - if "floor_insulation" not in self.exclusions: self.floor_recommender.recommend(phase=phase) if self.floor_recommender.recommendations: