From 448c6a377239d33feb1cc8e732eaf10cf5f787ef Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 24 Oct 2023 16:02:08 +0800 Subject: [PATCH] added exposed floor insulation --- backend/app/plan/utils.py | 2 +- recommendations/FloorRecommendations.py | 14 ++++++++++---- recommendations/recommendation_utils.py | 12 +++++++----- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/backend/app/plan/utils.py b/backend/app/plan/utils.py index e056c61c..71a61be1 100644 --- a/backend/app/plan/utils.py +++ b/backend/app/plan/utils.py @@ -15,7 +15,7 @@ def filter_materials(materials): mapping = { "walls": ["internal_wall_insulation", "external_wall_insulation", "cavity_wall_insulation"], - "floor": ["suspended_floor_insulation", "solid_floor_insulation"], + "floor": ["suspended_floor_insulation", "solid_floor_insulation", "exposed_floor_insulation"], "ventilation": ["mechanical_ventilation"], "roof": ["loft_insulation"] } diff --git a/recommendations/FloorRecommendations.py b/recommendations/FloorRecommendations.py index a20a4fe1..2524d25f 100644 --- a/recommendations/FloorRecommendations.py +++ b/recommendations/FloorRecommendations.py @@ -45,10 +45,13 @@ class FloorRecommendations(Definitions): part for part in self.materials if part["type"] == "solid_floor_insulation" ] + self.exposed_floor_insulation_parts = [ + part for part in self.materials if part["type"] == "exposed_floor_insulation" + ] + def recommend(self): u_value = self.property.floor["thermal_transmittance"] - is_suspended = self.property.floor["is_suspended"] - is_solid = self.property.floor["is_solid"] + floor_level = ( FLOOR_LEVEL_MAP[self.property.data["floor-level"]] if self.property.data["floor-level"] not in self.DATA_ANOMALY_MATCHES else None @@ -89,14 +92,17 @@ class FloorRecommendations(Definitions): ) self.estimated_u_value = u_value - if is_suspended: + if self.property.floor["is_suspended"]: # Given the U-value, we recommend underfloor insulation self.recommend_floor_insulation(u_value=u_value, parts=self.suspended_floor_insulation_parts) - if is_solid: + if self.property.floor["is_solid"]: # Given the U-value, we recommend solid floor insulation options which are usually solid foam self.recommend_floor_insulation(u_value=u_value, parts=self.solid_floor_insulation_parts) + if self.property.floor["is_to_unheated_space"] or self.property.floor["is_to_external_air"]: + self.recommend_floor_insulation(u_value=u_value, parts=self.exposed_floor_insulation_parts) + raise NotImplementedError("Implement me!") @staticmethod diff --git a/recommendations/recommendation_utils.py b/recommendations/recommendation_utils.py index 8e67a384..74910e07 100644 --- a/recommendations/recommendation_utils.py +++ b/recommendations/recommendation_utils.py @@ -347,11 +347,13 @@ def get_exposed_floor_uvalue(insulation_thickness_str, age_band): :return: """ - if age_band in ["A", "B", "C", "D", "E", "F", "G", "H", "I"]: - # As directed by the documentation, if the insulation thickness is not known, we assume it's - # 50mm for these age bands - if insulation_thickness_str in ["below_average", "average", "above_average"]: - insulation_thickness = 50 + unknown_insulation_age_bands = ["A", "B", "C", "D", "E", "F", "G", "H", "I"] + # As directed by the documentation, if the insulation thickness is not known, we assume it's + # 50mm for these age bands + if insulation_thickness_str in ["below_average", "average", "above_average"] and ( + age_band in unknown_insulation_age_bands + ): + insulation_thickness = 50 elif insulation_thickness_str in ["none", None]: insulation_thickness = 0 elif insulation_thickness_str in ["below_average"]: