// Collaboration & Workflow — comments/annotations, task board, approvals, version history. const COMMENTS = [ { who: "Vikram Chatterjee", init: "VC", at: "12 min ago", on: "GeM Quarterly Review", text: "The Punjab dip looks like an MCC artefact — can we annotate the chart so executives don't misread it?", tag: "annotation", replies: 2 }, { who: "Meera Krishnan", init: "MK", at: "1 hr ago", on: "Vendor Compliance", text: "@Kabir the quality bar on tender_bids_raw is red again. Blocking the sign-off until the GST regex rule passes.", tag: "blocker", replies: 4 }, { who: "AI Copilot", init: "AI", at: "1 hr ago", on: "Executive Dashboard", text: "Auto-annotation added: Karnataka +18.4% surge traced to 3 BEL/HAL defence orders > ₹20 Cr.", tag: "ai", replies: 0 }, { who: "Sunita Nair", init: "SN", at: "3 hr ago", on: "Monthly Revenue vs Target", text: "Approved the Q2 numbers. Nice work — margin bridge finally reconciles with the finance ledger. 👍", tag: "approval", replies: 1 }, ]; const COLUMNS = [ { id: "todo", label: "Backlog", tint: "var(--ink-4)" }, { id: "prog", label: "In Progress", tint: "var(--primary)" }, { id: "review", label: "In Review", tint: "var(--accent-2)" }, { id: "done", label: "Done", tint: "var(--ok)" }, ]; const CARDS = [ { col: "todo", t: "Add district drill-down to Geo map", who: "KM", pri: "Med", tag: "geo" }, { col: "todo", t: "Wire DPDP retention policy to catalog", who: "MK", pri: "High", tag: "governance" }, { col: "prog", t: "Retrain tender-volume LSTM (drift)", who: "PD", pri: "High", tag: "ml" }, { col: "prog", t: "Vendor risk scorecard v2", who: "VC", pri: "Med", tag: "analytics" }, { col: "review", t: "GeM Quarterly Review — final layout", who: "SN", pri: "High", tag: "dashboard" }, { col: "review", t: "Alert rule: PM2.5 > 200 Delhi", who: "AR", pri: "Low", tag: "alerts" }, { col: "done", t: "ClickHouse mart migration", who: "KM", pri: "High", tag: "data" }, { col: "done", t: "Copilot XAI trace card", who: "AR", pri: "Med", tag: "ai" }, ]; const APPROVALS = [ { item: "Publish 'GeM Quarterly Review' to Production", by: "Sunita Nair", step: 2, steps: ["Submitted", "Reviewed", "Approved", "Published"], status: "In review" }, { item: "Release Vendor Fraud model v3 to prod", by: "Priya Deshmukh", step: 3, steps: ["Submitted", "Validated", "Approved", "Deployed"], status: "Approved" }, { item: "Grant 'Editor' role — Finance-BI workspace", by: "Aditi Ranganathan", step: 4, steps: ["Requested", "Manager", "Security", "Granted"], status: "Granted" }, { item: "Export citizen scheme data (PII)", by: "Faisal Ahmed", step: 1, steps: ["Requested", "DPO review", "Approved", "Released"], status: "DPO review" }, ]; const VERSIONS = [ { v: "v14", who: "Sunita Nair", at: "Today 14:04", note: "Fixed margin bridge; added forecast band to revenue chart.", cur: true }, { v: "v13", who: "AI Copilot", at: "Today 11:20", note: "Auto-inserted Karnataka surge annotation.", cur: false }, { v: "v12", who: "Vikram Chatterjee", at: "Yesterday", note: "Reordered KPI tiles; added scheme-utilization gauge.", cur: false }, { v: "v11", who: "Sunita Nair", at: "Jul 12", note: "Switched state map metric to procurement value.", cur: false }, { v: "v10", who: "Aditi Ranganathan", at: "Jul 10", note: "Initial Q2 layout published.", cur: false }, ]; function CollabScreen() { const [tab, setTab] = useState("comments"); const tagColor = (t) => ({ blocker: "danger", ai: "primary", approval: "ok", annotation: "warn" }[t] || ""); return (
Collaboration & Workflow
Comments, annotations, tasks & approval workflows · 28 open threads · 6 pending approvals
{[{ id: "comments", label: "Comments & Annotations", c: 28 }, { id: "tasks", label: "Task Board", c: 8 }, { id: "approvals", label: "Approvals", c: 6 }, { id: "versions", label: "Version History", c: 14 }].map(t => ( ))}
{tab === "comments" && (

Activity & Threads

Live
{COMMENTS.map((c, i) => (
{c.init}
{c.who} {c.tag} on {c.on} · {c.at}
@$1') }}/>
{c.replies} replies React Resolve
))}

Team presence

{["Aditi R.", "Vikram C.", "Meera K.", "Kabir M."].map((n, i) => (
{n} {i < 3 ? 'editing' : 'away'}
))}
AI thread summary
2 blockers open on the Q2 review — both trace to the tender_bids_raw GST regex rule. Fixing that data-quality rule unblocks sign-off.
)} {tab === "tasks" && (
{COLUMNS.map(col => { const items = CARDS.filter(c => c.col === col.id); return (
{col.label} {items.length}
{items.map((c, i) => (
{c.t}
#{c.tag} {c.pri}
{c.who}
))}
); })}
)} {tab === "approvals" && (
{APPROVALS.map((a, i) => (
{a.item}
Requested by {a.by}
{a.status} {a.step < a.steps.length && <>}
{a.steps.map((s, si) => (
{si < a.step ? : si + 1}
{s}
{si < a.steps.length - 1 &&
} ))}
))}
)} {tab === "versions" && (

Version History — GeM Quarterly Review

Immutable · every publish snapshotted · restore any version
{VERSIONS.map((v, i) => (
{i < VERSIONS.length - 1 &&
}
{v.v} {v.cur && current} {v.who} · {v.at} {!v.cur && }
{v.note}
))}
)}
); } window.CollabScreen = CollabScreen;