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 b17b683a..cea22e59 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 @@ -268,15 +268,7 @@ function readHasPendingUplift( } function readPrimaryDispatchStatus(item: Record): string { - return readString( - item, - "primaryDispatchStatus", - "PrimaryDispatchStatus", - "dispatchStatus", - "DispatchStatus", - "vendorDispatchStatus", - "VendorDispatchStatus", - ); + return readString(item, "primaryDispatchStatus", "PrimaryDispatchStatus"); } export function mapWorkOrderTableRow(raw: unknown): WorkOrderTableRow { diff --git a/src/domain/work-orders/types/work-order-board-detail.ts b/src/domain/work-orders/types/work-order-board-detail.ts index 14adb595..163775e9 100644 --- a/src/domain/work-orders/types/work-order-board-detail.ts +++ b/src/domain/work-orders/types/work-order-board-detail.ts @@ -42,10 +42,8 @@ export interface WorkOrderBoardDetailInfoApi { dayGroup?: string | null; vendorId?: number | null; vendorName?: string | null; - /** Primary dispatch status when the board contract supplies it (SH-183). */ + /** Exact board DTO field; inactive primary dispatch is not a live company (SH-183). */ primaryDispatchStatus?: string | null; - dispatchStatus?: string | null; - vendorDispatchStatus?: string | null; techName?: string | null; techPhone?: string | null; apptDate?: string | null; diff --git a/src/domain/work-orders/types/work-order-board.ts b/src/domain/work-orders/types/work-order-board.ts index d8c178c4..bc836d30 100644 --- a/src/domain/work-orders/types/work-order-board.ts +++ b/src/domain/work-orders/types/work-order-board.ts @@ -184,10 +184,8 @@ export interface WorkOrderBoardRowApi { dayGroup?: string | null; vendorId?: number | null; vendorName?: string | null; - /** Primary dispatch status when the board contract supplies it (SH-183). */ + /** Exact board DTO field; inactive primary dispatch is not a live company (SH-183). */ primaryDispatchStatus?: string | null; - dispatchStatus?: string | null; - vendorDispatchStatus?: string | null; techName?: string | null; techPhone?: string | null; apptDate?: string | null; diff --git a/src/test/domain/work-orders/mappers/work-order-table-row-mapper.test.ts b/src/test/domain/work-orders/mappers/work-order-table-row-mapper.test.ts index a2fbd50c..99283be9 100644 --- a/src/test/domain/work-orders/mappers/work-order-table-row-mapper.test.ts +++ b/src/test/domain/work-orders/mappers/work-order-table-row-mapper.test.ts @@ -54,11 +54,20 @@ describe("mapWorkOrderTableRow isAddOn", () => { describe("mapWorkOrderTableRow primaryDispatchStatus", () => { it.each([ ["primaryDispatchStatus", "Refused"], - ["dispatchStatus", "Canceled"], - ["vendorDispatchStatus", "Cancelled"], - ] as const)("maps %s onto primaryDispatchStatus", (key, value) => { + ["PrimaryDispatchStatus", "Canceled"], + ] as const)("maps exact DTO field %s onto primaryDispatchStatus", (key, value) => { const row = mapWorkOrderTableRow({ id: 9, vendorId: 45, [key]: value }); expect(row.vendorId).toBe("45"); expect(row.primaryDispatchStatus).toBe(value); }); + + it("ignores undocumented dispatchStatus aliases", () => { + const row = mapWorkOrderTableRow({ + id: 9, + vendorId: 45, + dispatchStatus: "Refused", + vendorDispatchStatus: "Cancelled", + }); + expect(row.primaryDispatchStatus).toBe(""); + }); }); 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 d7eaf16b..c463dd5f 100644 --- a/src/test/domain/work-orders/utils/wo-closability.test.ts +++ b/src/test/domain/work-orders/utils/wo-closability.test.ts @@ -428,6 +428,12 @@ describe("tableRowToClosabilityInput", () => { expect(getClosabilityGaps(input)).toContain("Company"); }, ); + + it("raises Company when the board omits vendor assignment (inactive primary, SH-183)", () => { + const input = tableRowToClosabilityInput({ ...closableRow, vendorId: "", company: "" }); + expect(input.vendorId).toBe(""); + expect(getClosabilityGaps(input)).toContain("Company"); + }); }); describe("readDetailWoType", () => {