diff --git a/src/domain/work-orders/mappers/work-order-table-row-mapper.ts b/src/domain/work-orders/mappers/work-order-table-row-mapper.ts index 0442d420..41ee9924 100644 --- a/src/domain/work-orders/mappers/work-order-table-row-mapper.ts +++ b/src/domain/work-orders/mappers/work-order-table-row-mapper.ts @@ -239,7 +239,9 @@ function readUpliftSummary(item: Record): WorkOrderUpliftSummar hasUplift: hasUplift || pendingCount > 0, pendingCount, }; - const primaryStatus = readString(source, "primaryStatus", "PrimaryStatus", "status", "Status"); + const primaryStatus = + readString(nested, "primaryStatus", "PrimaryStatus") || + readString(item, "primaryStatus", "PrimaryStatus"); if (primaryStatus) { summary.primaryStatus = primaryStatus; } diff --git a/src/domain/work-orders/utils/wo-closability.ts b/src/domain/work-orders/utils/wo-closability.ts index 024a1ca5..be377091 100644 --- a/src/domain/work-orders/utils/wo-closability.ts +++ b/src/domain/work-orders/utils/wo-closability.ts @@ -109,7 +109,7 @@ export function getClosabilityGaps(row: WoClosabilityInput): string[] { } export function formatClosabilityMissingTitle(gaps: string[]): string { - if (gaps.length === 1 && gaps[0] === PENDING_UPLIFT_GAP) { + if (gaps.includes(PENDING_UPLIFT_GAP)) { return UPLIFT_PENDING_COMPLETED_TITLE; } return `Missing: ${gaps.join(", ")}`; diff --git a/src/test/domain/work-orders/mappers/work-order-mapper.test.ts b/src/test/domain/work-orders/mappers/work-order-mapper.test.ts index 76d4af5c..107d63f0 100644 --- a/src/test/domain/work-orders/mappers/work-order-mapper.test.ts +++ b/src/test/domain/work-orders/mappers/work-order-mapper.test.ts @@ -209,6 +209,16 @@ describe("mapWorkOrderTableRow (board DTO)", () => { expect(clear.upliftSummary).toEqual({ hasUplift: false, pendingCount: 0 }); }); + it("does not copy work-order status into uplift primaryStatus on flat board rows", () => { + const row = mapWorkOrderTableRow({ + id: 308, + pendingUpliftCount: 1, + status: "In Progress", + Status: "In Progress", + }); + expect(row.upliftSummary?.primaryStatus).toBeUndefined(); + }); + it("leaves hasPendingUplift undefined when board count is absent", () => { const row = mapWorkOrderTableRow({ id: 307 }); expect(row.hasPendingUplift).toBeUndefined(); diff --git a/src/test/domain/work-orders/utils/wo-closability.test.ts b/src/test/domain/work-orders/utils/wo-closability.test.ts index 7c761560..8af2724e 100644 --- a/src/test/domain/work-orders/utils/wo-closability.test.ts +++ b/src/test/domain/work-orders/utils/wo-closability.test.ts @@ -128,9 +128,15 @@ describe("formatClosabilityMissingTitle", () => { ); }); - it("joins multiple gaps with Missing prefix", () => { + it("uses design Completed title when pending uplift is among mixed gaps", () => { expect(formatClosabilityMissingTitle(["Dispatcher", PENDING_UPLIFT_GAP])).toBe( - `Missing: Dispatcher, ${PENDING_UPLIFT_GAP}`, + UPLIFT_PENDING_COMPLETED_TITLE, + ); + }); + + it("joins multiple non-uplift gaps with Missing prefix", () => { + expect(formatClosabilityMissingTitle(["Dispatcher", "Company"])).toBe( + "Missing: Dispatcher, Company", ); }); });