From 0a9772d522be4d7d338a7970a2e51f398afe15da Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 26 Aug 2025 14:00:46 +0000 Subject: [PATCH] fixed funding ui --- .../RecommendationContainer.tsx | 2 +- .../ValuationImpactComponent.tsx | 6 +-- .../assessment/ConditionReport.tsx | 40 ++++++++++++++++++- .../[propertyId]/assessment/page.tsx | 10 ++++- 4 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/app/components/building-passport/RecommendationContainer.tsx b/src/app/components/building-passport/RecommendationContainer.tsx index af9dc11..37d0901 100644 --- a/src/app/components/building-passport/RecommendationContainer.tsx +++ b/src/app/components/building-passport/RecommendationContainer.tsx @@ -320,7 +320,7 @@ export default function RecommendationContainer({ console.warn("Multiple funding packages found, using the first one."); } - const [totalFunding, setTotalFunding] = useState(funding[0].projectFunding) + const [totalFunding, setTotalFunding] = useState(funding[0]?.projectFunding || 0) const currentEpcRating = propertyMeta.currentEpcRating; const currentSapPoints = propertyMeta.currentSapPoints; diff --git a/src/app/components/building-passport/ValuationImpactComponent.tsx b/src/app/components/building-passport/ValuationImpactComponent.tsx index f1856a0..9a2d5d4 100644 --- a/src/app/components/building-passport/ValuationImpactComponent.tsx +++ b/src/app/components/building-passport/ValuationImpactComponent.tsx @@ -105,14 +105,14 @@ export default function ValuationImpactComponent({ setFundingModalIsOpen(false)} - scheme={funding.scheme} - fundingPackageMeasures={funding.fundingPackageMeasures} + scheme={funding?.scheme} + fundingPackageMeasures={funding?.fundingPackageMeasures || []} /> ); diff --git a/src/app/portfolio/[slug]/building-passport/[propertyId]/assessment/ConditionReport.tsx b/src/app/portfolio/[slug]/building-passport/[propertyId]/assessment/ConditionReport.tsx index 2186454..ddd0afa 100644 --- a/src/app/portfolio/[slug]/building-passport/[propertyId]/assessment/ConditionReport.tsx +++ b/src/app/portfolio/[slug]/building-passport/[propertyId]/assessment/ConditionReport.tsx @@ -109,14 +109,28 @@ function formatRoomName(name: string) { .replace("Room Info", "Room"); } +function getRecommendedOccupants(bedrooms: number): number { + if (bedrooms <= 0) return 0; + if (bedrooms === 1) return 2; + if (bedrooms === 2) return 4; + if (bedrooms === 3) return 6; + return 7; // 4 or more +} + export default function ConditionReport({ conditionReport, + totalFloorArea }: { conditionReport: { rooms: Record; [key: string]: any; - } + }, + totalFloorArea: number; }) { + + // Documentation on decent home standards can be found here: + // https://assets.publishing.service.gov.uk/media/5a7968b740f0b63d72fc5926/138355.pdf + const rooms = conditionReport.rooms; const allRoomData = [ @@ -172,6 +186,22 @@ export default function ConditionReport({ } ); + // Check if the property has adequate space + // We've seen a case where the number of adult occupants + child occupants is greater than the total_number_of_occupants so we + // take the biggest of the two + const totalOccupants = conditionReport.occupant_info?.total_number_of_occupants ?? 0; + const totalAdults = conditionReport.occupant_info?.no_of_adult_occupants ?? 0; + const totalChildren = conditionReport.occupant_info?.no_of_child_occupants ?? 0; + const numberOfBedrooms = Array.isArray(rooms.bedrooms) + ? rooms.bedrooms.length + : 0; + + const occupantsToUse = Math.max(totalAdults + totalChildren, totalOccupants); + + const maxOccupants = getRecommendedOccupants(numberOfBedrooms); + const areaPerPerson = totalFloorArea / occupantsToUse; + const hasSufficientSpace = (occupantsToUse <= maxOccupants) && (areaPerPerson >= 20); + return (
@@ -180,7 +210,7 @@ export default function ConditionReport({ 0} roomsWithIssues={roomsWithDamp} @@ -212,6 +242,12 @@ export default function ConditionReport({ passed={bathroomsOk} alert={!bathroomsOk} /> + diff --git a/src/app/portfolio/[slug]/building-passport/[propertyId]/assessment/page.tsx b/src/app/portfolio/[slug]/building-passport/[propertyId]/assessment/page.tsx index 7368036..ddce32a 100644 --- a/src/app/portfolio/[slug]/building-passport/[propertyId]/assessment/page.tsx +++ b/src/app/portfolio/[slug]/building-passport/[propertyId]/assessment/page.tsx @@ -143,7 +143,7 @@ export default async function PreAssessmentReport( conditionReport = await getEnergyAssessmentFromS3(conditionReportMeta.s3JsonUri); } - console.log("conditionReport", conditionReport.rooms.kitchen) + // console.log("conditionReport", conditionReport.rooms.utility) const nonIntrusiveSurvey = await getNonIntrusiveSurvey(propertyMeta.uprn); @@ -151,6 +151,12 @@ export default async function PreAssessmentReport( const heatingDemand = formatHeatDemandFeatures(conditionReportData); + // If total floor area is missing, we have a problem + if (conditionReportData.totalFloorArea == null) { + console.error("Total floor area is missing"); + return null; + } + return (
@@ -172,7 +178,7 @@ export default async function PreAssessmentReport(
{ - Object.keys(conditionReportMeta).length > 0 && + Object.keys(conditionReportMeta).length > 0 && } {nonIntrusiveSurvey && (