new solid floor pricing mechanism

This commit is contained in:
Khalim Conn-Kowlessar 2025-12-23 09:53:03 +08:00
parent f06676f15a
commit b881c8358e

View file

@ -350,16 +350,31 @@ class Costs:
total_cost = material["total_cost"] * insulation_floor_area
labour_hours = material["labour_hours_per_unit"] * insulation_floor_area
# To install suspended floor insulation, a small to medium size project might be conducted by a team of 3
# people
labour_days = (labour_hours / 8) / 3
# We assume the average house takes ~7 days to complete at £300/day incl. VAT, as per checkatrade
# which can be seen here: https://www.checkatrade.com/blog/cost-guides/floor-insulation-cost
# Assumptions
base_days = 7 # The quickest it will be completed
base_area = 45 # The area that can be completed in that time (for a typical 90m2 house)
labour_exponent = 0.85 # Non-linear scaling
daily_labour_rate = 300 # Based on checkatrade
min_days = 3 # Fewest days it will take
labour_days = max(
min_days,
base_days * (insulation_floor_area / base_area) ** labour_exponent
)
labour_cost = labour_days * daily_labour_rate
total_cost = total_cost + labour_cost
total_cost = round(total_cost, 2)
return {
"total": total_cost,
"contingency": self.CONTINGENCIES["solid_floor_insulation"] * total_cost,
"contingency_rate": self.CONTINGENCIES["solid_floor_insulation"],
"labour_hours": labour_hours,
"labour_hours": labour_days * 8,
"labour_days": labour_days,
}