diff --git a/packages/domain/src/domain/sap/worksheet/heat_transmission.py b/packages/domain/src/domain/sap/worksheet/heat_transmission.py index 37a3f935..1c302c61 100644 --- a/packages/domain/src/domain/sap/worksheet/heat_transmission.py +++ b/packages/domain/src/domain/sap/worksheet/heat_transmission.py @@ -496,12 +496,26 @@ def heat_transmission_from_cert( age_band=age_band, insulation_thickness_mm=floor_ins_thickness ) else: + # The per-bp `floor_construction_type` lodgement ("Suspended + # timber" / "Solid") takes precedence over the global + # `epc.floors[].description` when present — it's the explicit + # per-part lodgement Elmhurst surfaces in §3 / §9 of the + # Summary PDF (cf. cert 001479 Main: floor_construction_type + # = "Suspended timber" age C; the cascade's `u_floor` + # otherwise defaults to the solid branch for age bands C+ + # without an explicit signal, producing a U=0.60 vs the + # worksheet's suspended-timber U=0.65). + effective_floor_description = ( + part.floor_construction_type + if part.floor_construction_type + else floor_description + ) uf = u_floor( country=country, age_band=age_band, construction=floor_construction, insulation_thickness_mm=floor_ins_thickness, area_m2=floor_area, perimeter_m=floor_perimeter, wall_thickness_mm=part.wall_thickness_mm, - description=floor_description, + description=effective_floor_description, ) upw = u_party_wall(party_wall_construction=party_construction) # Per-bp `y` for backwards compat: when the bp's own age band