diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx index ed8e4a6..1a94cb7 100644 --- a/src/components/AppShell.tsx +++ b/src/components/AppShell.tsx @@ -18,6 +18,7 @@ const ACTIVITY_META: Record, style: "primary" }, [ACTIVITY_IDS.RETRY_SCHEDULING_CALL]: { label: "Retry Scheduling Call", icon: , style: "primary" }, [ACTIVITY_IDS.RETRY_FEEDBACK_CALL]: { label: "Retry Feedback Call", icon: , style: "primary" }, + [ACTIVITY_IDS.MARK_EXPERT_TD_DONE]: { label: "Mark Expert TD Done", icon: , style: "primary" }, }; const BTN_STYLES: Record = { @@ -33,6 +34,7 @@ const STATE_LABEL: Record = { [STATE_IDS.FEEDBACK_COLLECTED]: "Feedback Collected", [STATE_IDS.SCHEDULING_CALL_FAILED]: "Scheduling Call Failed", [STATE_IDS.FEEDBACK_CALL_FAILED]: "Feedback Call Failed", + [STATE_IDS.EXPERT_TD_SCHEDULED]: "Expert TD Scheduled", [STATE_IDS.END_STATE]: "Closed", }; @@ -45,7 +47,7 @@ function stateTone(stateId: string | null) { return { bg: "rgba(239,68,68,0.12)", fg: "#B91C1C", ring: "rgba(239,68,68,0.30)" }; if (stateId === STATE_IDS.AWAITING_SCHEDULER_CALL || stateId === STATE_IDS.AWAITING_FEEDBACK_CALL) return { bg: "rgba(200,16,46,0.10)", fg: "#C8102E", ring: "rgba(200,16,46,0.28)" }; - if (stateId === STATE_IDS.SCHEDULED) + if (stateId === STATE_IDS.SCHEDULED || stateId === STATE_IDS.EXPERT_TD_SCHEDULED) return { bg: "rgba(245,158,11,0.14)", fg: "#B45309", ring: "rgba(245,158,11,0.30)" }; return { bg: "rgba(168,162,158,0.15)", fg: "#57534E", ring: "rgba(168,162,158,0.30)" }; } @@ -158,6 +160,7 @@ function CurrentAppShell() { if (instanceState === STATE_IDS.SCHEDULED) return [ACTIVITY_IDS.MARK_TEST_DRIVE_DONE]; if (instanceState === STATE_IDS.SCHEDULING_CALL_FAILED) return [ACTIVITY_IDS.RETRY_SCHEDULING_CALL]; if (instanceState === STATE_IDS.FEEDBACK_CALL_FAILED) return [ACTIVITY_IDS.RETRY_FEEDBACK_CALL]; + if (instanceState === STATE_IDS.EXPERT_TD_SCHEDULED) return [ACTIVITY_IDS.MARK_EXPERT_TD_DONE]; return []; })(); @@ -373,6 +376,8 @@ function fmtAct(id: string): string { case ACTIVITY_IDS.AI_CONFIRM_FEEDBACK_COLLECTED: return "AI · Feedback Collected"; case ACTIVITY_IDS.AI_CONFIRM_FEEDBACK_FAILED: return "AI · Feedback Failed"; case ACTIVITY_IDS.RETRY_FEEDBACK_CALL: return "Retry Feedback Call"; + case ACTIVITY_IDS.CONCERN_EXPERT_TD_BOOKED: return "AI · Concern → Expert TD Booked"; + case ACTIVITY_IDS.MARK_EXPERT_TD_DONE: return "Expert TD Completed"; default: return id.slice(0, 8) + "…"; } } diff --git a/src/components/variants/VariantB.tsx b/src/components/variants/VariantB.tsx index 1763586..8502646 100644 --- a/src/components/variants/VariantB.tsx +++ b/src/components/variants/VariantB.tsx @@ -60,6 +60,7 @@ const STATE_TONE: Record = { "Awaiting Scheduler Call": { bg: "#FEF3C7", fg: "#92400E", dot: "#e6ab2e" }, "Scheduled": { bg: "#FEF3C7", fg: "#92400E", dot: "#e6ab2e" }, "Awaiting Feedback Call": { bg: "#FEF3C7", fg: "#92400E", dot: "#e6ab2e" }, + "Expert TD Scheduled": { bg: "#FEF3C7", fg: "#92400E", dot: "#e6ab2e" }, "Feedback Collected": { bg: "#DCFCE7", fg: "#166534", dot: "#27a846" }, "Scheduling Call Failed": { bg: ACCENT_SOFT, fg: ACCENT_DARK, dot: ACCENT }, "Feedback Call Failed": { bg: ACCENT_SOFT, fg: ACCENT_DARK, dot: ACCENT }, @@ -779,6 +780,7 @@ function DetailPage({ if (instanceState === STATE_IDS.SCHEDULED) return [{ id: ACTIVITY_IDS.MARK_TEST_DRIVE_DONE, label: "Mark Test Drive Done", icon: }]; if (instanceState === STATE_IDS.SCHEDULING_CALL_FAILED) return [{ id: ACTIVITY_IDS.RETRY_SCHEDULING_CALL, label: "Retry Scheduling Call", icon: }]; if (instanceState === STATE_IDS.FEEDBACK_CALL_FAILED) return [{ id: ACTIVITY_IDS.RETRY_FEEDBACK_CALL, label: "Retry Feedback Call", icon: }]; + if (instanceState === STATE_IDS.EXPERT_TD_SCHEDULED) return [{ id: ACTIVITY_IDS.MARK_EXPERT_TD_DONE, label: "Mark Expert TD Done", icon: }]; return []; }, [instanceState]); @@ -1083,6 +1085,8 @@ const ACTIVITY_LABELS: Record = { diff --git a/src/config.ts b/src/config.ts index 7119d19..0882d47 100644 --- a/src/config.ts +++ b/src/config.ts @@ -15,6 +15,8 @@ export const ACTIVITY_IDS = { AI_CONFIRM_FEEDBACK_COLLECTED: "a6666666-6666-4abc-8000-000000000006", // AI submits on feedback success AI_CONFIRM_FEEDBACK_FAILED: "a7777777-7777-4abc-8000-000000000007", // AI submits on feedback failure RETRY_FEEDBACK_CALL: "a8888888-8888-4abc-8000-000000000008", // Re-fire AI from failed feedback + CONCERN_EXPERT_TD_BOOKED: "e1111111-1111-4abc-8000-000000000009", // AI submits when feedback call surfaces concern + expert TD slot booked + MARK_EXPERT_TD_DONE: "e2222222-2222-4abc-8000-000000000010", // Dealer marks the expert/specialist drive complete } as const; export const RECORD_VIEW_IDS = { @@ -23,6 +25,7 @@ export const RECORD_VIEW_IDS = { PENDING_FEEDBACK: "rv-mahindra-pending-feedback", COMPLETED: "rv-mahindra-completed", SCHEDULED_TEST_DRIVES: "rv-mahindra-scheduled-td", + CONCERN_EXPERT_TD: "ab66664a-19e1-45a2-be51-dca0211a8be7", } as const; // rv_uid -> field_keys that should NOT render as table columns even though @@ -34,6 +37,7 @@ export const RV_HIDDEN_COLUMNS: Record = { "rv-mahindra-scheduled-td": ["current_state_id"], "rv-mahindra-pending-feedback": ["current_state_id"], "rv-mahindra-completed": ["current_state_id"], + "ab66664a-19e1-45a2-be51-dca0211a8be7": ["current_state_id"], }; export const DETAIL_VIEW_IDS = { @@ -49,6 +53,7 @@ export const SCREEN_TO_DV: Record = { "dfa82b37-ecc0-4b21-99aa-ae50d62c4dfb": "1eb72636-f6fc-41b6-9107-775f93de1fa1", // Pending Feedback "1fe0a811-19bf-4dbd-a643-32ae1a067162": "f9828eb2-2c32-4a87-b7f1-fc0c8c16ac86", // Completed "66c003dc-0162-46f2-9b87-a7b73051a4ca": "f07f3a7f-300e-4040-b5ff-dba75493738a", // Leads + "857596bf-2d50-489d-9316-c5dd10b1b42d": "9cb88bfa-13b5-42e3-88dd-c7eb1f419439", // Concern - Expert TD }; // Workflow states @@ -59,6 +64,7 @@ export const STATE_IDS = { FEEDBACK_COLLECTED: "aab92dd6-46e6-4448-b61b-fe37f8727c00", SCHEDULING_CALL_FAILED: "b1f1ce11-fa11-4abc-9001-0000000000a1", FEEDBACK_CALL_FAILED: "b1f1ce11-fa11-4abc-9001-0000000000a2", + EXPERT_TD_SCHEDULED: "e0000000-0000-4abc-9003-000000000001", END_STATE: "33cce5a0-f493-4fac-a1b7-7b68fbcbffce", } as const;