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;