From c72b7c1625a2d4b0e8b77f6882fe879f6bf1905d Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 15 Jun 2026 09:48:41 +0000 Subject: [PATCH 1/3] Add coordination comments, damp/mould, and Domna survey columns to property table and CSV export Co-Authored-By: Claude Sonnet 4.6 --- .../your-projects/live/PropertyTable.tsx | 8 +++ .../live/PropertyTableColumns.tsx | 68 +++++++++++++++++++ .../your-projects/live/dealQuery.ts | 2 + .../your-projects/live/docStatus.test.ts | 2 + .../your-projects/live/measureFilters.test.ts | 2 + .../your-projects/live/propertyCsv.test.ts | 2 + .../your-projects/live/propertyCsv.ts | 4 ++ .../your-projects/live/transforms.test.ts | 2 + .../(portfolio)/your-projects/live/types.ts | 2 + 9 files changed, 92 insertions(+) diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTable.tsx b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTable.tsx index 348a5a11..9594f538 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTable.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTable.tsx @@ -64,6 +64,10 @@ const COLUMN_LABELS: Record = { epcPrn: "EPC Certificate Number", batch: "Group", batchDescription: "Group Description", + coordinationComments: "Coordination Comments", + dampAndMouldGrowth: "Damp and Mould Growth", + dampMouldAndRepairComments: "Dampm, Mould and Repair Comments", + domnaSurveyRequested: "Domna Survey Requested" }; type DocFilter = "all" | "has_docs" | "incomplete" | "none"; @@ -106,6 +110,10 @@ export default function PropertyTable({ data, onOpenDrawer, portfolioId = "", sh epcPrn: false, batch: false, batchDescription: false, + coordinationComments: false, + dampAndMouldGrowth: false, + dampMouldAndRepairComments: false, + domnaSurveyRequested: false, }); // Pre-filter by stage, doc status, and removal status before TanStack gets it diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTableColumns.tsx b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTableColumns.tsx index b889d636..eeb579fa 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTableColumns.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTableColumns.tsx @@ -371,6 +371,74 @@ export function createPropertyTableColumns( ), }, + // ── Coordination comments ──────────────────────────────────────────── + { + accessorKey: "coordinationComments", + id: "coordinationComments", + header: () => ( + + Coordination Comments + + ), + cell: ({ row }) => ( + + {row.original.coordinationComments ?? } + + ), + }, + + // ── Damp and mould growth ──────────────────────────────────────────── + { + id: "dampAndMouldGrowth", + accessorFn: (row) => row.dampMouldFlag, + header: () => ( + + Damp & Mould Growth + + ), + cell: ({ row }) => ( + + {row.original.dampMouldFlag ?? } + + ), + }, + + // ── Damp, mould and repair comments ───────────────────────────────── + { + accessorKey: "dampMouldAndRepairComments", + id: "dampMouldAndRepairComments", + header: () => ( + + Damp, Mould & Repair Comments + + ), + cell: ({ row }) => ( + + {row.original.dampMouldAndRepairComments ?? } + + ), + }, + + // ── Domna survey required ──────────────────────────────────────────── + { + id: "domnaSurveyRequested", + accessorFn: (row) => row.domnasurveyRequired, + header: () => ( + + Domna Survey Required + + ), + cell: ({ row }) => { + const val = row.original.domnasurveyRequired; + if (val === null || val === undefined) return ; + return ( + + {val ? "Yes" : "No"} + + ); + }, + }, + ]; if (showDocuments) { diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/dealQuery.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/dealQuery.ts index 0532ab36..fb112ef3 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/dealQuery.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/dealQuery.ts @@ -36,6 +36,8 @@ export function mapDbRowToHubspotDeal(row: DealRow): HubspotDeal { sharepointLink: d.sharepointLink, dampMouldFlag: d.dampmouldGrowth, dampMouldAndRepairComments: d.dampMouldAndRepairComments, + coordinationComments: d.coordination_comments, + domnasurveyRequired: d.domnasurveyRequired, preSapScore: d.preSap, coordinator: row.coordinator, ioeV1Date: d.mtpCompletionDate, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts index 029e4113..fc281f23 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts @@ -60,6 +60,8 @@ function makeDeal(overrides: Partial = {}): HubspotDeal { domnaSurveyDate: null, batch: null, batchDescription: null, + coordinationComments: null, + domnasurveyRequired: null, createdAt: new Date(), updatedAt: new Date(), ...overrides, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/measureFilters.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/measureFilters.test.ts index 9166e8b5..afa7193b 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/measureFilters.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/measureFilters.test.ts @@ -59,6 +59,8 @@ function makeDeal(overrides: Partial = {}): ClassifiedDeal { domnaSurveyDate: null, batch: null, batchDescription: null, + coordinationComments: null, + domnasurveyRequired: null, createdAt: new Date(), updatedAt: new Date(), displayStage: "Coordination in Progress", diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts index da315e1a..ba3fb006 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts @@ -59,6 +59,8 @@ function makeDeal(overrides: Partial = {}): HubspotDeal { domnaSurveyDate: null, batch: null, batchDescription: null, + coordinationComments: null, + domnasurveyRequired: null, createdAt: new Date(), updatedAt: new Date(), ...overrides, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.ts index 37de6463..8fe4b778 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.ts @@ -26,6 +26,10 @@ export const PROPERTY_CSV_FIELDS: PropertyCsvField[] = [ { key: "epcPrn", label: "EPC Certificate Number" }, { key: "batch", label: "Group" }, { key: "batchDescription", label: "Group Description" }, + { key: "coordinationComments", label: "Coordination Comments" }, + { key: "dampMouldFlag", label: "Damp and Mould Growth" }, + { key: "dampMouldAndRepairComments", label: "Damp Mould and Repair Comments" }, + { key: "domnasurveyRequired", label: "Domna Survey Required" }, ]; export function escapeCsvCell(value: unknown): string { diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/transforms.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/transforms.test.ts index a60db64e..5467d22a 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/transforms.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/transforms.test.ts @@ -66,6 +66,8 @@ function makeDeal(overrides: Partial = {}): HubspotDeal { domnaSurveyDate: null, batch: null, batchDescription: null, + coordinationComments: null, + domnasurveyRequired: null, createdAt: new Date(), updatedAt: new Date(), ...overrides, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/types.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/types.ts index f53d71aa..07a81140 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/types.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/types.ts @@ -30,6 +30,8 @@ export type HubspotDeal = { sharepointLink: string | null; dampMouldFlag: string | null; // coordinator-stage damp/mould flag dampMouldAndRepairComments: string | null; // coordinator damp/mould comments + coordinationComments: string | null; + domnasurveyRequired: boolean | null; preSapScore: string | null; // kept as text (HubSpot returns strings) coordinator: string | null; ioeV1Date: Date | null; From 5ad99df0441b86f9dcf439d4a429b6d6b361a449 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 15 Jun 2026 09:54:15 +0000 Subject: [PATCH 2/3] correct typo --- .../[slug]/(portfolio)/your-projects/live/PropertyTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTable.tsx b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTable.tsx index 9594f538..d1e07c96 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTable.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTable.tsx @@ -66,7 +66,7 @@ const COLUMN_LABELS: Record = { batchDescription: "Group Description", coordinationComments: "Coordination Comments", dampAndMouldGrowth: "Damp and Mould Growth", - dampMouldAndRepairComments: "Dampm, Mould and Repair Comments", + dampMouldAndRepairComments: "Damp, Mould and Repair Comments", domnaSurveyRequested: "Domna Survey Requested" }; From 2a9da6765b48759495b9cd7bc0579d9d744c6a9a Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 15 Jun 2026 11:57:39 +0000 Subject: [PATCH 3/3] Switch EPC SAP (Potential) data source from epcSapScorePotential to potentialPostSapScoreDropdown --- .../(portfolio)/your-projects/live/PropertyTableColumns.tsx | 4 ++-- .../(portfolio)/your-projects/live/[dealId]/DealPage.tsx | 2 +- .../(portfolio)/your-projects/live/[dealId]/page.test.ts | 2 +- .../[slug]/(portfolio)/your-projects/live/dealQuery.ts | 2 +- .../[slug]/(portfolio)/your-projects/live/docStatus.test.ts | 2 +- .../(portfolio)/your-projects/live/measureFilters.test.ts | 2 +- .../[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts | 2 +- .../[slug]/(portfolio)/your-projects/live/propertyCsv.ts | 2 +- .../[slug]/(portfolio)/your-projects/live/transforms.test.ts | 2 +- .../portfolio/[slug]/(portfolio)/your-projects/live/types.ts | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTableColumns.tsx b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTableColumns.tsx index eeb579fa..aa0157a2 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTableColumns.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/PropertyTableColumns.tsx @@ -268,12 +268,12 @@ export function createPropertyTableColumns( // ── EPC SAP score (potential) ───────────────────────────────────────── { - accessorKey: "epcSapScorePotential", + accessorKey: "potentialPostSapScoreDropdown", id: "epcSapScorePotential", header: ({ column }) => , cell: ({ row }) => ( - {row.original.epcSapScorePotential ?? } + {row.original.potentialPostSapScoreDropdown ?? } ), }, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/[dealId]/DealPage.tsx b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/[dealId]/DealPage.tsx index 95c72fa5..29568024 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/[dealId]/DealPage.tsx +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/[dealId]/DealPage.tsx @@ -93,7 +93,7 @@ export default function DealPage({ }); const parsedPreSap = parsePreSap(deal.preSapScore); - const epcPotential = sapToEpc(deal.epcSapScorePotential != null ? Number(deal.epcSapScorePotential) : null); + const epcPotential = sapToEpc(deal.potentialPostSapScoreDropdown != null ? Number(deal.potentialPostSapScoreDropdown) : null); const technicalApprovedMeasures = parseMeasures( deal.technicalApprovedMeasuresForInstall ?? null, ); diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/[dealId]/page.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/[dealId]/page.test.ts index c8bf7a11..d154a872 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/[dealId]/page.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/[dealId]/page.test.ts @@ -187,7 +187,7 @@ const mockDealRow = { eiScore: null, eiScorePotential: null, epcSapScore: null, - epcSapScorePotential: null, + potentialPostSapScoreDropdown: null, epcPrn: null, surveyType: null, measuresForPibiOrdered: null, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/dealQuery.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/dealQuery.ts index fb112ef3..68ce00ac 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/dealQuery.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/dealQuery.ts @@ -60,7 +60,7 @@ export function mapDbRowToHubspotDeal(row: DealRow): HubspotDeal { eiScore: d.eiScore, eiScorePotential: d.eiScorePotential, epcSapScore: d.epcSapScore, - epcSapScorePotential: d.epcSapScorePotential, + potentialPostSapScoreDropdown: d.potentialPostSapScoreDropdown, epcPrn: d.epcPrn, surveyType: d.surveyType, measuresForPibiOrdered: d.measuresForPibiOrdered, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts index fc281f23..32d1671e 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts @@ -47,7 +47,7 @@ function makeDeal(overrides: Partial = {}): HubspotDeal { eiScore: null, eiScorePotential: null, epcSapScore: null, - epcSapScorePotential: null, + potentialPostSapScoreDropdown: null, epcPrn: null, surveyType: null, measuresForPibiOrdered: null, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/measureFilters.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/measureFilters.test.ts index afa7193b..6a30d703 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/measureFilters.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/measureFilters.test.ts @@ -46,7 +46,7 @@ function makeDeal(overrides: Partial = {}): ClassifiedDeal { eiScore: null, eiScorePotential: null, epcSapScore: null, - epcSapScorePotential: null, + potentialPostSapScoreDropdown: null, epcPrn: null, surveyType: null, measuresForPibiOrdered: null, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts index ba3fb006..91501665 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.test.ts @@ -46,7 +46,7 @@ function makeDeal(overrides: Partial = {}): HubspotDeal { eiScore: null, eiScorePotential: null, epcSapScore: null, - epcSapScorePotential: null, + potentialPostSapScoreDropdown: null, epcPrn: null, surveyType: null, measuresForPibiOrdered: null, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.ts index 8fe4b778..1b29caab 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/propertyCsv.ts @@ -18,7 +18,7 @@ export const PROPERTY_CSV_FIELDS: PropertyCsvField[] = [ { key: "eiScore", label: "EI Score" }, { key: "eiScorePotential", label: "EI Score (Potential)" }, { key: "epcSapScore", label: "EPC SAP Score" }, - { key: "epcSapScorePotential", label: "EPC SAP (Potential)" }, + { key: "potentialPostSapScoreDropdown", label: "EPC SAP (Potential)" }, { key: "lodgementStatus", label: "Lodgement Status" }, { key: "surveyedDate", label: "Surveyed Date" }, { key: "designDate", label: "Design Date" }, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/transforms.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/transforms.test.ts index 5467d22a..ad7bf045 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/transforms.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/transforms.test.ts @@ -53,7 +53,7 @@ function makeDeal(overrides: Partial = {}): HubspotDeal { eiScore: null, eiScorePotential: null, epcSapScore: null, - epcSapScorePotential: null, + potentialPostSapScoreDropdown: null, epcPrn: null, surveyType: null, measuresForPibiOrdered: null, diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/types.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/types.ts index 07a81140..6f2ab002 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/types.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/types.ts @@ -54,7 +54,7 @@ export type HubspotDeal = { eiScore: string | null; eiScorePotential: string | null; epcSapScore: string | null; - epcSapScorePotential: string | null; + potentialPostSapScoreDropdown: string | null; epcPrn: string | null; // ── New per-deal workflow fields (issue #249 slice) ────────────────────