ahs-cti 1.0.1-beta.49 → 1.0.1-beta.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AuditReportFullPage
3
- } from "./chunk-4P77HN5O.mjs";
3
+ } from "./chunk-DA6ZOU73.mjs";
4
4
  import "./chunk-C52XEAO2.mjs";
5
5
 
6
6
  // call-control-sdk/lib/pages/auditReport/index.tsx
@@ -11,4 +11,4 @@ function AuditReportPage({ callUuid }) {
11
11
  export {
12
12
  AuditReportPage as default
13
13
  };
14
- //# sourceMappingURL=auditReport-HZJJQPUJ.mjs.map
14
+ //# sourceMappingURL=auditReport-KWXPR76K.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useGetCallerData
3
- } from "./chunk-VG5S4K4H.mjs";
3
+ } from "./chunk-I7Z5Q5YA.mjs";
4
4
  import {
5
5
  SDKPageHeader
6
6
  } from "./chunk-I5VT6XXH.mjs";
@@ -2769,4 +2769,4 @@ var campaigns_default = Campaigns;
2769
2769
  export {
2770
2770
  campaigns_default as default
2771
2771
  };
2772
- //# sourceMappingURL=campaigns-SE5QEZ44.mjs.map
2772
+ //# sourceMappingURL=campaigns-PPOBBEO7.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AuditReportDialog
3
- } from "./chunk-4P77HN5O.mjs";
3
+ } from "./chunk-DA6ZOU73.mjs";
4
4
  import {
5
5
  ReportFilterBar,
6
6
  SearchBar,
@@ -840,4 +840,4 @@ var cdrReport_default = CdrReport;
840
840
  export {
841
841
  cdrReport_default as default
842
842
  };
843
- //# sourceMappingURL=cdrReport-XTDZ7NC2.mjs.map
843
+ //# sourceMappingURL=cdrReport-3QRU46CJ.mjs.map
@@ -37,6 +37,11 @@ import CheckCircleOutlineIcon from "@mui/icons-material/CheckCircleOutlined";
37
37
  import HighlightOffIcon from "@mui/icons-material/HighlightOff";
38
38
  import RemoveCircleOutlineIcon from "@mui/icons-material/RemoveCircleOutlined";
39
39
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
40
+ function toStringArray(value) {
41
+ if (!value) return [];
42
+ if (Array.isArray(value)) return value;
43
+ return value.split("\n").map((l) => l.replace(/^\s*[\*\-]\s*/, "").trim()).filter(Boolean);
44
+ }
40
45
  var STATUS_COLOUR = {
41
46
  completed: { color: "#2e7d32", bg: "#e8f5e9" },
42
47
  complied: { color: "#2e7d32", bg: "#e8f5e9" },
@@ -187,7 +192,8 @@ function ScorecardTab({ data, primary }) {
187
192
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
188
193
  const sc = (_a = data.Quality_Scorecard) != null ? _a : {};
189
194
  const summary = (_b = data.Executive_Audit_Summary) != null ? _b : {};
190
- const overallScore = (_d = (_c = sc.Total_Score) != null ? _c : summary.Overall_Audit_Score_Percentage) != null ? _d : 0;
195
+ const rawScore = (_d = (_c = sc.Total_Score) != null ? _c : summary.Overall_Audit_Score_Percentage) != null ? _d : 0;
196
+ const overallScore = typeof rawScore === "string" ? parseFloat(rawScore.replace("%", "")) || 0 : rawScore;
191
197
  const pct = Math.min(Math.round(overallScore / 100 * 100), 100);
192
198
  const resultBadge = (_f = (_e = summary.Audit_Result) != null ? _e : sc.Final_Rating) != null ? _f : "N/A";
193
199
  const metrics = [
@@ -229,16 +235,17 @@ function ScorecardTab({ data, primary }) {
229
235
  ].map((col, i) => /* @__PURE__ */ jsx(TableCell, { sx: __spreadProps(__spreadValues({}, TH), { textAlign: col.align, minWidth: col.minWidth }), children: col.label }, i)) }) }),
230
236
  /* @__PURE__ */ jsxs(TableBody, { children: [
231
237
  SCORECARD_PARAMS.map((p) => {
232
- var _a2, _b2, _c2;
238
+ var _a2, _b2;
233
239
  const entry = sc[p.key];
234
- const score = (_a2 = entry == null ? void 0 : entry.Score_Obtained) != null ? _a2 : 0;
235
- const max = (_b2 = entry == null ? void 0 : entry.Weightage) != null ? _b2 : p.defaultMax;
240
+ const rawEntryScore = entry == null ? void 0 : entry.Score_Obtained;
241
+ const score = typeof rawEntryScore === "string" ? parseFloat(rawEntryScore) || 0 : rawEntryScore != null ? rawEntryScore : 0;
242
+ const max = (_a2 = entry == null ? void 0 : entry.Weightage) != null ? _a2 : p.defaultMax;
236
243
  return /* @__PURE__ */ jsxs(TableRow, { children: [
237
244
  /* @__PURE__ */ jsx(TableCell, { sx: __spreadValues({}, TD), children: p.label }),
238
245
  /* @__PURE__ */ jsx(TableCell, { sx: __spreadProps(__spreadValues({}, TD), { textAlign: "center" }), children: max }),
239
- /* @__PURE__ */ jsx(TableCell, { sx: __spreadProps(__spreadValues({}, TD), { textAlign: "center" }), children: score }),
246
+ /* @__PURE__ */ jsx(TableCell, { sx: __spreadProps(__spreadValues({}, TD), { textAlign: "center" }), children: rawEntryScore != null ? rawEntryScore : "\u2014" }),
240
247
  /* @__PURE__ */ jsx(TableCell, { sx: __spreadValues({}, TD), children: /* @__PURE__ */ jsx(ProgressCell, { value: { score, max }, primary }) }),
241
- /* @__PURE__ */ jsx(TableCell, { sx: __spreadValues({}, TD), children: (_c2 = entry == null ? void 0 : entry.Remarks) != null ? _c2 : "\u2014" })
248
+ /* @__PURE__ */ jsx(TableCell, { sx: __spreadValues({}, TD), children: (_b2 = entry == null ? void 0 : entry.Remarks) != null ? _b2 : "\u2014" })
242
249
  ] }, p.key);
243
250
  }),
244
251
  /* @__PURE__ */ jsxs(TableRow, { sx: { backgroundColor: "#f5f7f8", "& td": { borderBottom: 0 } }, children: [
@@ -281,7 +288,7 @@ function processWorkflowRows(groups) {
281
288
  return (groups != null ? groups : []).flatMap(
282
289
  (g) => {
283
290
  var _a;
284
- return ((_a = g.items) != null ? _a : []).map((item) => {
291
+ return ((_a = g == null ? void 0 : g.items) != null ? _a : []).map((item) => {
285
292
  var _a2, _b, _c, _d, _e;
286
293
  return {
287
294
  parameter: (_a2 = item.parameter) != null ? _a2 : "\u2014",
@@ -322,7 +329,7 @@ function DispositionFrameworkTable({ data }) {
322
329
  const rows = ((_a = data.Disposition_Based_Quality_Framework) != null ? _a : []).flatMap(
323
330
  (df) => {
324
331
  var _a2;
325
- return ((_a2 = df.frameworks) != null ? _a2 : []).map((fw) => {
332
+ return ((_a2 = df == null ? void 0 : df.frameworks) != null ? _a2 : []).map((fw) => {
326
333
  var _a3, _b, _c, _d;
327
334
  return {
328
335
  dispositionType: (_a3 = df.dispositionType) != null ? _a3 : "\u2014",
@@ -398,9 +405,9 @@ function AuditChecklistTab({ data, primary: _primary }) {
398
405
  ] });
399
406
  }
400
407
  function RootCauseAnalysisTab({ data, primary }) {
401
- var _a, _b, _c, _d, _e, _f, _g, _h;
402
- const rcaRows = ((_a = data.Root_Cause_Analysis) != null ? _a : []).filter((r) => r.Observation && r.Observation !== "N/A");
403
- const rec = (_b = data.Auditor_Recommendation) != null ? _b : {};
408
+ var _a, _b, _c;
409
+ const rcaRows = (_b = ((_a = data.Root_Cause_Analysis) != null ? _a : []).filter((r) => (r == null ? void 0 : r.Observation) && (r == null ? void 0 : r.Observation) !== "N/A")) != null ? _b : [];
410
+ const rec = (_c = data.Auditor_Recommendation) != null ? _c : {};
404
411
  return /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: [
405
412
  /* @__PURE__ */ jsxs(Box, { children: [
406
413
  /* @__PURE__ */ jsx(SectionTitle, { children: "Root Cause Analysis" }),
@@ -417,18 +424,24 @@ function RootCauseAnalysisTab({ data, primary }) {
417
424
  }) })
418
425
  ] }) }) : /* @__PURE__ */ jsx(Box, { sx: { border: "1px solid", borderColor: "divider", borderRadius: "8px", px: "14px", py: "10px", backgroundColor: "background.paper" }, children: /* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.75rem", color: "text.secondary" }, children: "No significant root causes identified for this interaction." }) })
419
426
  ] }),
420
- (((_d = (_c = rec.Key_Strengths) == null ? void 0 : _c.length) != null ? _d : 0) > 0 || ((_f = (_e = rec.Improvement_Areas) == null ? void 0 : _e.length) != null ? _f : 0) > 0) && /* @__PURE__ */ jsxs(Box, { children: [
427
+ (toStringArray(rec.Key_Strengths).length > 0 || toStringArray(rec.Improvement_Areas).length > 0) && /* @__PURE__ */ jsxs(Box, { children: [
421
428
  /* @__PURE__ */ jsx(SectionTitle, { children: "Coaching & Development" }),
422
429
  /* @__PURE__ */ jsx(Box, { sx: { display: "flex", gap: 2, flexWrap: "wrap" }, children: [
423
- { title: "Key Strengths", items: (_g = rec.Key_Strengths) != null ? _g : [], color: "#2e7d32" },
424
- { title: "Improvement Areas", items: (_h = rec.Improvement_Areas) != null ? _h : [], color: "#e65100" }
425
- ].filter((g) => g.items.length > 0).map((g) => /* @__PURE__ */ jsxs(Box, { sx: { flex: "1 1 200px", border: "1px solid", borderColor: "divider", borderRadius: "6px", backgroundColor: "background.paper", px: "14px", py: "10px" }, children: [
426
- /* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.78rem", fontWeight: 600, color: "text.primary", mb: "8px" }, children: g.title }),
427
- g.items.map((item, ii) => /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "flex-start", gap: "7px", mb: "5px" }, children: [
428
- /* @__PURE__ */ jsx(Box, { sx: { width: 5, height: 5, borderRadius: "50%", backgroundColor: g.color, mt: "5px", flexShrink: 0 } }),
429
- /* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.75rem", color: "text.secondary", lineHeight: 1.5 }, children: item })
430
- ] }, ii))
431
- ] }, g.title)) })
430
+ { title: "Key Strengths", items: toStringArray(rec.Key_Strengths), color: "#2e7d32" },
431
+ { title: "Improvement Areas", items: toStringArray(rec.Improvement_Areas), color: "#e65100" }
432
+ ].filter((g) => {
433
+ var _a2, _b2;
434
+ return ((_b2 = (_a2 = g.items) == null ? void 0 : _a2.length) != null ? _b2 : 0) > 0;
435
+ }).map((g) => {
436
+ var _a2;
437
+ return /* @__PURE__ */ jsxs(Box, { sx: { flex: "1 1 200px", border: "1px solid", borderColor: "divider", borderRadius: "6px", backgroundColor: "background.paper", px: "14px", py: "10px" }, children: [
438
+ /* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.78rem", fontWeight: 600, color: "text.primary", mb: "8px" }, children: g.title }),
439
+ (_a2 = g.items) == null ? void 0 : _a2.map((item, ii) => /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "flex-start", gap: "7px", mb: "5px" }, children: [
440
+ /* @__PURE__ */ jsx(Box, { sx: { width: 5, height: 5, borderRadius: "50%", backgroundColor: g.color, mt: "5px", flexShrink: 0 } }),
441
+ /* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.75rem", color: "text.secondary", lineHeight: 1.5 }, children: item })
442
+ ] }, ii))
443
+ ] }, g.title);
444
+ }) })
432
445
  ] }),
433
446
  data.Final_Auditor_Remarks && /* @__PURE__ */ jsxs(Box, { sx: { border: "1px solid", borderLeft: "3px solid", borderColor: "divider", borderLeftColor: primary, borderRadius: "6px", px: "14px", py: "10px", backgroundColor: alpha(primary, 0.04) }, children: [
434
447
  /* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.78rem", fontWeight: 600, color: primary, mb: "6px" }, children: "Final Auditor Remarks" }),
@@ -628,4 +641,4 @@ export {
628
641
  AuditReportDialog,
629
642
  AuditReportFullPage
630
643
  };
631
- //# sourceMappingURL=chunk-4P77HN5O.mjs.map
644
+ //# sourceMappingURL=chunk-DA6ZOU73.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../call-control-sdk/lib/pages/common/components/AuditReport.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport {\r\n Avatar,\r\n Box,\r\n Typography,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n Tabs,\r\n Tab,\r\n LinearProgress,\r\n useTheme,\r\n Dialog,\r\n IconButton,\r\n GlobalStyles,\r\n CircularProgress,\r\n Alert,\r\n ToggleButton,\r\n ToggleButtonGroup,\r\n} from \"@mui/material\";\r\nimport { alpha } from \"@mui/material/styles\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport LaunchIcon from \"@mui/icons-material/Launch\";\r\nimport CheckCircleOutlineIcon from \"@mui/icons-material/CheckCircleOutlined\";\r\nimport HighlightOffIcon from \"@mui/icons-material/HighlightOff\";\r\nimport RemoveCircleOutlineIcon from \"@mui/icons-material/RemoveCircleOutlined\";\r\nimport axiosInstance from \"../../../services/axios\";\r\nimport { END_POINT } from \"../../../services/endPoint\";\r\nimport type { CdrRecordResponse } from \"../../cdrReport/types\";\r\n\r\n// ─── API response types ────────────────────────────────────────────────────────\r\n\r\ninterface AuditMetadata {\r\n Hospital_Name?: string;\r\n \"Process/Department\"?: string;\r\n Call_Disposition?: string;\r\n Call_Category?: string;\r\n Call_Type?: string;\r\n Call_Date_Time?: string;\r\n Call_Duration?: string;\r\n Agent_Name?: string;\r\n Employee_ID?: string;\r\n Team_Leader?: string;\r\n Auditor_Name?: string;\r\n Language?: string;\r\n Recording_ID?: string;\r\n}\r\n\r\ninterface ExecutiveAuditSummary {\r\n Overall_Audit_Score_Percentage?: number | string;\r\n Audit_Result?: string;\r\n First_Call_Resolution_FCR?: string;\r\n Patient_Sentiment?: string;\r\n Process_Adherence?: string;\r\n Communication_Effectiveness?: string;\r\n Compliance_Status?: string;\r\n Customer_Experience?: string;\r\n Knowledge_Accuracy?: string;\r\n Empathy_Handling?: string;\r\n Risk_Severity?: string;\r\n}\r\n\r\ninterface ScorecardEntry {\r\n Weightage?: number;\r\n Score_Obtained?: number | string;\r\n Remarks?: string;\r\n}\r\n\r\ninterface QualityScorecard {\r\n Opening_and_Greeting?: ScorecardEntry;\r\n Verification_and_Authentication?: ScorecardEntry;\r\n Communication_and_Soft_Skills?: ScorecardEntry;\r\n Process_and_Workflow_Adherence?: ScorecardEntry;\r\n Resolution_Accuracy?: ScorecardEntry;\r\n Empathy_and_Patient_Assurance?: ScorecardEntry;\r\n Call_Handling?: ScorecardEntry;\r\n CRM_Documentation_Alignment?: ScorecardEntry;\r\n Closing_and_Customer_Education?: ScorecardEntry;\r\n Total_Score?: number;\r\n Final_Rating?: string;\r\n}\r\n\r\ninterface DispositionFramework {\r\n dispositionType?: string;\r\n frameworks?: Array<{\r\n expectedFramework?: string;\r\n status?: string;\r\n remarks?: string;\r\n }>;\r\n}\r\n\r\ninterface ChecklistItem {\r\n parameter?: string;\r\n expectedStandard?: string;\r\n status?: string;\r\n remarks?: string;\r\n qaObservation?: string;\r\n}\r\n\r\ninterface ChecklistGroup {\r\n items?: ChecklistItem[];\r\n}\r\n\r\ntype ObsRecord = Record<string, { Status?: string; Remarks?: string; Observation_Impact?: string }>;\r\n\r\ninterface SectionWiseAuditObservations {\r\n Opening_and_Greeting?: ObsRecord;\r\n Verification_and_Authentication?: ObsRecord;\r\n Communication_and_Soft_Skills?: ObsRecord;\r\n Process_and_Workflow_Adherence?: ChecklistGroup[];\r\n Empathy_and_Patient_Assurance?: ObsRecord;\r\n Call_Handling?: ObsRecord;\r\n Call_Closure_and_Customer_Education?: ObsRecord;\r\n}\r\n\r\ninterface RootCauseItem {\r\n Observation?: string;\r\n Root_Cause?: string;\r\n Impact?: string;\r\n Severity?: string;\r\n}\r\n\r\ninterface AuditorRecommendation {\r\n Key_Strengths?: string[] | string;\r\n Improvement_Areas?: string[] | string;\r\n}\r\n\r\nexport interface NewAuditApiResponse {\r\n Audit_Metadata?: AuditMetadata;\r\n Conversation_Type_Classification?: Record<string, string>;\r\n Call_Summary?: string;\r\n transcript?: string;\r\n Executive_Audit_Summary?: ExecutiveAuditSummary;\r\n Quality_Scorecard?: QualityScorecard;\r\n Disposition_Based_Quality_Framework?: DispositionFramework[];\r\n Section_Wise_Audit_Observations_Checklist?: SectionWiseAuditObservations;\r\n Root_Cause_Analysis?: RootCauseItem[];\r\n Auditor_Recommendation?: AuditorRecommendation;\r\n Final_Auditor_Remarks?: string;\r\n}\r\n\r\n\r\nfunction toStringArray(value: string[] | string | undefined): string[] {\r\n if (!value) return [];\r\n if (Array.isArray(value)) return value;\r\n return value.split(\"\\n\").map((l) => l.replace(/^\\s*[\\*\\-]\\s*/, \"\").trim()).filter(Boolean);\r\n}\r\n\r\n// ─── Colour helpers ────────────────────────────────────────────────────────────\r\n\r\nconst STATUS_COLOUR: Record<string, { color: string; bg: string }> = {\r\n completed: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n complied: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n pass: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n compliant: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n achieved: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n strong: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n excellent: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n low: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n no: { color: \"#2e7d32\", bg: \"#e8f5e9\" },\r\n good: { color: \"#1565c0\", bg: \"#e3f2fd\" },\r\n partial: { color: \"#e65100\", bg: \"#fff3e0\" },\r\n moderate: { color: \"#e65100\", bg: \"#fff3e0\" },\r\n medium: { color: \"#e65100\", bg: \"#fff3e0\" },\r\n missed: { color: \"#c62828\", bg: \"#ffebee\" },\r\n fail: { color: \"#c62828\", bg: \"#ffebee\" },\r\n high: { color: \"#c62828\", bg: \"#ffebee\" },\r\n yes: { color: \"#c62828\", bg: \"#ffebee\" },\r\n \"n/a\": { color: \"#757575\", bg: \"#f5f5f5\" },\r\n na: { color: \"#757575\", bg: \"#f5f5f5\" },\r\n};\r\n\r\nfunction resolveColour(label: string): { color: string; bg: string } {\r\n const key = label.toLowerCase().trim();\r\n if (STATUS_COLOUR[key]) return STATUS_COLOUR[key];\r\n const stripped = key.replace(/[^a-z]/g, \"\");\r\n return STATUS_COLOUR[stripped] ?? { color: \"#555\", bg: \"#f0f0f0\" };\r\n}\r\n\r\nfunction StatusBadge({ label }: { label: string }) {\r\n const { color, bg } = resolveColour(label);\r\n return (\r\n <Box sx={{ display: \"inline-flex\", alignItems: \"center\", px: \"7px\", py: \"2px\", borderRadius: \"4px\", backgroundColor: bg, whiteSpace: \"nowrap\" }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", fontWeight: 600, color, letterSpacing: \"0.02em\" }}>\r\n {label.toUpperCase()}\r\n </Typography>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction StatusIconBadge({ label }: { label: string }) {\r\n const key = label.toLowerCase().replace(/[^a-z]/g, \"\");\r\n let icon: React.ReactNode;\r\n if (key === \"complied\" || key === \"completed\" || key === \"pass\") {\r\n icon = <CheckCircleOutlineIcon sx={{ fontSize: 15, color: \"#2e7d32\" }} />;\r\n } else if (key === \"partial\") {\r\n icon = <RemoveCircleOutlineIcon sx={{ fontSize: 15, color: \"#e65100\" }} />;\r\n } else if (key === \"na\") {\r\n icon = <RemoveCircleOutlineIcon sx={{ fontSize: 15, color: \"#757575\" }} />;\r\n } else {\r\n icon = <HighlightOffIcon sx={{ fontSize: 15, color: \"#c62828\" }} />;\r\n }\r\n return (\r\n <Box sx={{ display: \"inline-flex\", alignItems: \"center\", gap: \"4px\" }}>\r\n {icon}\r\n <StatusBadge label={label} />\r\n </Box>\r\n );\r\n}\r\n\r\ninterface ProgressValue { score: number; max: number }\r\n\r\nfunction ProgressCell({ value, primary }: { value: ProgressValue; primary: string }) {\r\n const pct = Math.min(Math.round((value.score / value.max) * 100), 100);\r\n const barColor = pct < 80 ? \"#c62828\" : primary;\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, minWidth: 100 }}>\r\n <LinearProgress variant=\"determinate\" value={pct} sx={{ flex: 1, height: 5, borderRadius: 3, backgroundColor: alpha(barColor, 0.12), \"& .MuiLinearProgress-bar\": { backgroundColor: barColor, borderRadius: 3 } }} />\r\n <Typography sx={{ fontSize: \"0.68rem\", color: \"text.secondary\", minWidth: 28, textAlign: \"right\" }}>{pct}%</Typography>\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Shared styles ─────────────────────────────────────────────────────────────\r\n\r\nconst TH: SxProps<Theme> = { fontSize: \"0.72rem\", fontWeight: 700, color: \"text.secondary\", py: \"7px\", px: \"10px\", backgroundColor: \"#f5f7f8\", borderBottom: \"1px solid\", borderColor: \"divider\", whiteSpace: \"nowrap\" };\r\nconst TD: SxProps<Theme> = { fontSize: \"0.75rem\", color: \"text.primary\", py: \"6px\", px: \"10px\", borderBottom: \"1px solid\", borderColor: \"divider\", verticalAlign: \"middle\" };\r\n\r\nfunction SectionTitle({ children }: { children: React.ReactNode }) {\r\n return (\r\n <Typography sx={{ fontSize: \"0.78rem\", fontWeight: 700, color: \"text.primary\", mb: \"8px\", mt: \"4px\" }}>\r\n {children}\r\n </Typography>\r\n );\r\n}\r\n\r\n// ─── Transcript bubbles (mirrors Transcript.tsx chat layout) ───────────────────\r\n\r\nfunction TranscriptBubbles({ text }: { text: string }) {\r\n const lines = text.split(\"\\n\").filter((l) => l.trim().length > 0);\r\n if (!lines.length) {\r\n return <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\" }}>No transcript available.</Typography>;\r\n }\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: \"6px\" }}>\r\n {lines.map((line, idx) => {\r\n const isPatient = line.trim().toLowerCase().startsWith(\"patient\");\r\n const text = line.replace(/^\\s*(Patient|Agent)\\s*:\\s*/i, \"\");\r\n return (\r\n <Box key={idx} sx={{ display: \"flex\", justifyContent: isPatient ? \"flex-end\" : \"flex-start\", alignItems: \"flex-end\", gap: \"6px\" }}>\r\n {!isPatient && <Avatar sx={{ width: 22, height: 22, fontSize: 12 }} />}\r\n <Box\r\n sx={(t) => ({\r\n maxWidth: \"70%\",\r\n px: \"10px\",\r\n py: \"7px\",\r\n borderRadius: isPatient ? \"8px 8px 0 8px\" : \"8px 8px 8px 0\",\r\n backgroundColor: isPatient ? t.palette.primary.main : \"#fff\",\r\n color: isPatient ? t.palette.common.white : \"#222\",\r\n border: isPatient ? \"none\" : \"1px solid #e0e0e0\",\r\n fontSize: \"0.78rem\",\r\n lineHeight: 1.5,\r\n })}\r\n >\r\n {text}\r\n </Box>\r\n {isPatient && <Avatar sx={{ width: 22, height: 22, fontSize: 12 }} />}\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Overview Tab ──────────────────────────────────────────────────────────────\r\n\r\nfunction OverviewTab({ data }: { data: NewAuditApiResponse }) {\r\n const meta = data.Audit_Metadata ?? {};\r\n const kvItems = [\r\n { label: \"Hospital Name\", value: meta.Hospital_Name ?? \"N/A\" },\r\n { label: \"Call Duration\", value: meta.Call_Duration ?? \"N/A\" },\r\n { label: \"Department\", value: meta[\"Process/Department\"] ?? \"N/A\" },\r\n { label: \"Agent Name\", value: meta.Agent_Name ?? \"N/A\" },\r\n { label: \"Call Disposition\", value: meta.Call_Disposition ?? \"N/A\" },\r\n { label: \"Employee ID\", value: meta.Employee_ID ?? \"N/A\" },\r\n { label: \"Call Category\", value: meta.Call_Category ?? \"N/A\" },\r\n { label: \"Team Leader\", value: meta.Team_Leader ?? \"N/A\" },\r\n { label: \"Call Type\", value: meta.Call_Type ?? \"N/A\" },\r\n { label: \"Auditor Name\", value: meta.Auditor_Name ?? \"N/A\" },\r\n { label: \"Call Date & Time\", value: meta.Call_Date_Time ?? \"N/A\" },\r\n { label: \"Language\", value: meta.Language ?? \"N/A\" },\r\n { label: \"Recording ID\", value: meta.Recording_ID ?? \"N/A\" },\r\n ];\r\n const half = Math.ceil(kvItems.length / 2);\r\n const col1 = kvItems.slice(0, half);\r\n const col2 = kvItems.slice(half);\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n {/* Audit Metadata */}\r\n <Box>\r\n <SectionTitle>Audit Metadata</SectionTitle>\r\n <Box sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\", backgroundColor: \"background.paper\" }}>\r\n <Box sx={{ display: \"flex\" }}>\r\n {[col1, col2].map((chunk, ci) => (\r\n <Box key={ci} sx={{ flex: \"1 1 240px\", minWidth: 0, borderRight: ci === 0 ? \"1px solid\" : \"none\", borderColor: \"divider\" }}>\r\n {chunk.map((item, ii) => (\r\n <Box key={ii} sx={{ display: \"flex\", alignItems: \"baseline\", borderBottom: ii < chunk.length - 1 ? \"1px solid\" : \"none\", borderColor: \"divider\", px: \"10px\", py: \"6px\", gap: 1 }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", minWidth: 140, flexShrink: 0 }}>{item.label}</Typography>\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.primary\", fontWeight: 500 }}>\r\n {item.value === \"Not Available\" ? \"—\" : item.value}\r\n </Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n {/* Call Summary */}\r\n <Box>\r\n <SectionTitle>Call Summary</SectionTitle>\r\n <Box sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", backgroundColor: \"background.paper\", px: \"14px\", py: \"10px\", maxHeight: 160, overflowY: \"auto\" }}>\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\", lineHeight: 1.7 }}>\r\n {data.Call_Summary ?? \"No summary available.\"}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n\r\n {/* Call Transcription */}\r\n <Box>\r\n <SectionTitle>Call Transcription</SectionTitle>\r\n <Box sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", backgroundColor: \"#f9f9f9\", px: \"14px\", py: \"12px\", maxHeight: 320, overflowY: \"auto\" }}>\r\n <TranscriptBubbles text={data.transcript ?? \"\"} />\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Scorecard Tab ─────────────────────────────────────────────────────────────\r\n\r\nconst SCORECARD_PARAMS: Array<{ key: keyof QualityScorecard; label: string; defaultMax: number }> = [\r\n { key: \"Opening_and_Greeting\", label: \"Opening & Greeting\", defaultMax: 10 },\r\n { key: \"Verification_and_Authentication\", label: \"Verification & Authentication\", defaultMax: 10 },\r\n { key: \"Communication_and_Soft_Skills\", label: \"Communication & Soft Skills\", defaultMax: 15 },\r\n { key: \"Process_and_Workflow_Adherence\", label: \"Process & Workflow Adherence\", defaultMax: 20 },\r\n { key: \"Resolution_Accuracy\", label: \"Resolution Accuracy\", defaultMax: 20 },\r\n { key: \"Empathy_and_Patient_Assurance\", label: \"Empathy & Patient Assurance\", defaultMax: 10 },\r\n { key: \"Call_Handling\", label: \"Call Handling & Probing\", defaultMax: 5 },\r\n { key: \"CRM_Documentation_Alignment\", label: \"CRM Documentation Alignment\", defaultMax: 5 },\r\n { key: \"Closing_and_Customer_Education\", label: \"Closing & Customer Education\", defaultMax: 5 },\r\n];\r\n\r\nfunction ScorecardTab({ data, primary }: { data: NewAuditApiResponse; primary: string }) {\r\n const sc = data.Quality_Scorecard ?? {};\r\n const summary = data.Executive_Audit_Summary ?? {};\r\n\r\n const rawScore = sc.Total_Score ?? summary.Overall_Audit_Score_Percentage ?? 0;\r\n const overallScore = typeof rawScore === \"string\" ? parseFloat(rawScore.replace(\"%\", \"\")) || 0 : rawScore;\r\n const pct = Math.min(Math.round((overallScore / 100) * 100), 100);\r\n const resultBadge = summary.Audit_Result ?? sc.Final_Rating ?? \"N/A\";\r\n\r\n const metrics = [\r\n { label: \"Audit Result\", value: summary.Audit_Result ?? \"N/A\" },\r\n { label: \"Compliance Status\", value: summary.Compliance_Status ?? \"N/A\" },\r\n { label: \"First Call Resolution\", value: summary.First_Call_Resolution_FCR ?? \"N/A\" },\r\n { label: \"Customer Experience\", value: summary.Customer_Experience ?? summary.Patient_Sentiment ?? \"N/A\" },\r\n { label: \"Process Adherence\", value: summary.Process_Adherence ?? \"N/A\" },\r\n { label: \"Communication\", value: summary.Communication_Effectiveness ?? \"N/A\" },\r\n { label: \"Knowledge Accuracy\", value: summary.Knowledge_Accuracy ?? \"N/A\" },\r\n { label: \"Empathy Handling\", value: summary.Empathy_Handling ?? \"N/A\" },\r\n { label: \"Risk Severity\", value: summary.Risk_Severity ?? \"N/A\" },\r\n ];\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2.5 }}>\r\n {/* Overall score + metric cards */}\r\n <Box sx={{ display: \"flex\", gap: 2, flexWrap: \"wrap\", alignItems: \"stretch\" }}>\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", backgroundColor: \"background.paper\", px: 3, py: 2, minWidth: 140, gap: 0.5 }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", fontWeight: 600, mb: 0.5, letterSpacing: \"0.04em\" }}>OVERALL SCORE</Typography>\r\n <Box sx={{ display: \"flex\", alignItems: \"baseline\", gap: \"3px\" }}>\r\n <Typography sx={{ fontSize: \"2.4rem\", fontWeight: 700, color: primary, lineHeight: 1 }}>{overallScore}</Typography>\r\n <Typography sx={{ fontSize: \"0.85rem\", color: \"text.secondary\", fontWeight: 600 }}>/100</Typography>\r\n </Box>\r\n <Box sx={{ width: \"100%\", mt: 0.75 }}>\r\n <LinearProgress variant=\"determinate\" value={pct} sx={{ height: 6, borderRadius: 3, backgroundColor: alpha(primary, 0.12), \"& .MuiLinearProgress-bar\": { backgroundColor: primary, borderRadius: 3 } }} />\r\n </Box>\r\n <Box sx={{ mt: 0.75 }}><StatusBadge label={resultBadge} /></Box>\r\n </Box>\r\n <Box sx={{ flex: 1, minWidth: 260, display: \"grid\", gridTemplateColumns: \"repeat(auto-fill, minmax(160px, 1fr))\", gap: \"8px\" }}>\r\n {metrics.map((m) => (\r\n <Box key={m.label} sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"6px\", backgroundColor: \"background.paper\", px: \"10px\", py: \"7px\", display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 1 }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", lineHeight: 1.3, flex: 1 }}>{m.label}</Typography>\r\n <StatusBadge label={m.value} />\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n\r\n {/* Quality Scorecard table */}\r\n <Box>\r\n <SectionTitle>Quality Scorecard</SectionTitle>\r\n <TableContainer sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\" }}>\r\n <Table size=\"small\">\r\n <TableHead>\r\n <TableRow>\r\n {[\r\n { label: \"Evaluation Parameter\", align: \"left\", minWidth: 180 },\r\n { label: \"Weightage\", align: \"center\", minWidth: 90 },\r\n { label: \"Score\", align: \"center\", minWidth: 80 },\r\n { label: \"\", align: \"left\", minWidth: 120 },\r\n { label: \"Remarks\", align: \"left\", minWidth: 160 },\r\n ].map((col, i) => (\r\n <TableCell key={i} sx={{ ...TH, textAlign: col.align as any, minWidth: col.minWidth }}>{col.label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {SCORECARD_PARAMS.map((p) => {\r\n const entry = sc[p.key] as ScorecardEntry | undefined;\r\n const rawEntryScore = entry?.Score_Obtained;\r\n const score = typeof rawEntryScore === \"string\" ? parseFloat(rawEntryScore) || 0 : (rawEntryScore ?? 0);\r\n const max = entry?.Weightage ?? p.defaultMax;\r\n return (\r\n <TableRow key={p.key}>\r\n <TableCell sx={{ ...TD }}>{p.label}</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\" }}>{max}</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\" }}>{rawEntryScore ?? \"—\"}</TableCell>\r\n <TableCell sx={{ ...TD }}><ProgressCell value={{ score, max }} primary={primary} /></TableCell>\r\n <TableCell sx={{ ...TD }}>{entry?.Remarks ?? \"—\"}</TableCell>\r\n </TableRow>\r\n );\r\n })}\r\n <TableRow sx={{ backgroundColor: \"#f5f7f8\", \"& td\": { borderBottom: 0 } }}>\r\n <TableCell sx={{ ...TD, fontWeight: 700 }}>Total Score</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\", fontWeight: 700 }}>100</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\", fontWeight: 700 }}>{overallScore}</TableCell>\r\n <TableCell sx={{ ...TD }}><ProgressCell value={{ score: overallScore, max: 100 }} primary={primary} /></TableCell>\r\n <TableCell sx={{ ...TD, fontWeight: 700 }}><StatusBadge label={sc.Final_Rating ?? resultBadge} /></TableCell>\r\n </TableRow>\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Audit Checklist Tab ───────────────────────────────────────────────────────\r\n\r\ninterface ChecklistRow { parameter: string; expectedStandard: string; status: string; remarks: string; qaObservation: string }\r\n\r\nconst OPENING_LABELS: Record<string, string> = { Standard_Greeting_Used: \"Standard Greeting Used\", Hospital_Name_Mentioned: \"Hospital Name Mentioned\", Agent_Introduction_Provided: \"Agent Introduction Provided\", Professional_Tone_Maintained: \"Professional Tone Maintained\" };\r\nconst OPENING_EXPECTED: Record<string, string> = { Standard_Greeting_Used: \"Agent must greet as per approved hospital script\", Hospital_Name_Mentioned: \"Mandatory hospital identification\", Agent_Introduction_Provided: \"Agent must introduce self\", Professional_Tone_Maintained: \"Warm and professional tone expected\" };\r\n\r\nconst VERIFICATION_LABELS: Record<string, string> = { Patient_Name_Captured: \"Patient Name Captured\", \"Existing_New_Patient_Validation\": \"Existing/New Patient Validation\", Registered_Mobile_Number_Verified: \"Registered Mobile Number Verified\", \"Secondary_Authentication_DOB_UHID\": \"Secondary Authentication (DOB/UHID)\", Patient_Data_Handling: \"Patient Data Handling\" };\r\nconst VERIFICATION_EXPECTED: Record<string, string> = { Patient_Name_Captured: \"Mandatory for identification\", \"Existing_New_Patient_Validation\": \"Required for workflow routing\", Registered_Mobile_Number_Verified: \"Mandatory authentication step\", \"Secondary_Authentication_DOB_UHID\": \"Recommended compliance practice\", Patient_Data_Handling: \"Confidential information to be handled securely\" };\r\n\r\nconst COMM_LABELS: Record<string, string> = { Clarity_of_Speech: \"Clarity of Speech\", Active_Listening_Demonstrated: \"Active Listening Demonstrated\", Avoidance_of_Dead_Air: \"Avoidance of Dead Air\", Professional_Language_Usage: \"Professional Language Usage\", Empathy_Statements_Used: \"Empathy Statements Used\" };\r\nconst COMM_EXPECTED: Record<string, string> = { Clarity_of_Speech: \"Clear and understandable communication\", Active_Listening_Demonstrated: \"Agent should acknowledge caller inputs\", Avoidance_of_Dead_Air: \"Minimal silence during call\", Professional_Language_Usage: \"No slang/rude language\", Empathy_Statements_Used: \"Emotional acknowledgement expected\" };\r\n\r\nconst EMPATHY_LABELS: Record<string, string> = { Patient_Concern_Acknowledged: \"Patient Concern Acknowledged\", Empathy_Toward_Patient_Condition: \"Empathy Toward Patient Condition\", Severity_Red_Flag_Probing: \"Severity/Red Flag Probing\", Professional_Behaviour_Maintained: \"Professional Behaviour Maintained\" };\r\nconst EMPATHY_EXPECTED: Record<string, string> = { Patient_Concern_Acknowledged: \"Agent should acknowledge caller concern\", Empathy_Toward_Patient_Condition: \"Empathetic reassurance expected\", Severity_Red_Flag_Probing: \"Escalation probing recommended where applicable\", Professional_Behaviour_Maintained: \"Calm and respectful handling required\" };\r\n\r\nconst CALL_HANDLING_LABELS: Record<string, string> = { \"Placing the Call on Hold\": \"Placing the Call on Hold\", Resuming_After_Hold: \"Resuming After Hold\", Apologizing_for_Inconvenience: \"Apologizing for Inconvenience\", Offering_Further_Assistance: \"Offering Further Assistance\" };\r\nconst CALL_HANDLING_EXPECTED: Record<string, string> = { \"Placing the Call on Hold\": \"Inform customer before placing on hold\", Resuming_After_Hold: \"Thank customer for holding\", Apologizing_for_Inconvenience: \"Apologize for any delays\", Offering_Further_Assistance: \"Ask if further help is needed\" };\r\n\r\nconst CLOSURE_LABELS: Record<string, string> = { Additional_Assistance_Offered: \"Additional Assistance Offered\", Professional_Closing_Provided: \"Professional Closing Provided\", \"Wellness/Courtesy_Statement_Used\": \"Wellness/Courtesy Statement Used\", Recontact_Information_Shared: \"Recontact Information Shared\" };\r\nconst CLOSURE_EXPECTED: Record<string, string> = { Additional_Assistance_Offered: \"Mandatory closure check\", Professional_Closing_Provided: \"Standard closure etiquette expected\", \"Wellness/Courtesy_Statement_Used\": \"Positive healthcare closure preferred\", Recontact_Information_Shared: \"Helpline/rebooking guidance recommended\" };\r\n\r\nfunction obsRecordToRows(record: ObsRecord | undefined, labelMap: Record<string, string>, expectedMap: Record<string, string>): ChecklistRow[] {\r\n return Object.entries(record ?? {}).map(([key, val]) => ({\r\n parameter: labelMap[key] ?? key.replace(/_/g, \" \"),\r\n expectedStandard: expectedMap[key] ?? \"—\",\r\n status: val.Status ?? \"N/A\",\r\n remarks: val.Remarks ?? \"—\",\r\n qaObservation: val.Observation_Impact ?? \"—\",\r\n }));\r\n}\r\n\r\nfunction processWorkflowRows(groups: ChecklistGroup[] | undefined): ChecklistRow[] {\r\n return (groups ?? []).flatMap((g) =>\r\n (g?.items ?? []).map((item) => ({\r\n parameter: item.parameter ?? \"—\",\r\n expectedStandard: item.expectedStandard ?? \"—\",\r\n status: item.status ?? \"N/A\",\r\n remarks: item.remarks ?? \"—\",\r\n qaObservation: item.qaObservation ?? \"—\",\r\n })),\r\n );\r\n}\r\n\r\nconst CHECKLIST_COLS = [\r\n { key: \"parameter\", label: \"Audit Parameter\", minWidth: 180 },\r\n { key: \"expectedStandard\", label: \"Expected Standard\", minWidth: 200 },\r\n { key: \"status\", label: \"Status\", minWidth: 130 },\r\n { key: \"remarks\", label: \"Remarks\", minWidth: 160 },\r\n { key: \"qaObservation\", label: \"QA Observation / Impact\", minWidth: 180 },\r\n];\r\n\r\nfunction ChecklistTable({ title, rows }: { title: string; rows: ChecklistRow[] }) {\r\n if (!rows.length) return null;\r\n return (\r\n <Box>\r\n <SectionTitle>{title}</SectionTitle>\r\n <TableContainer sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\" }}>\r\n <Table size=\"small\">\r\n <TableHead>\r\n <TableRow>\r\n {CHECKLIST_COLS.map((col) => (\r\n <TableCell key={col.key} sx={{ ...TH, minWidth: col.minWidth }}>{col.label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {rows.map((row, ri) => (\r\n <TableRow key={ri} sx={{ \"&:last-child td\": { borderBottom: 0 } }}>\r\n <TableCell sx={{ ...TD }}>{row.parameter}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.expectedStandard}</TableCell>\r\n <TableCell sx={{ ...TD }}><StatusIconBadge label={row.status} /></TableCell>\r\n <TableCell sx={{ ...TD }}>{row.remarks}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.qaObservation}</TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction DispositionFrameworkTable({ data }: { data: NewAuditApiResponse }) {\r\n const rows = (data.Disposition_Based_Quality_Framework ?? []).flatMap((df) =>\r\n (df?.frameworks ?? []).map((fw) => ({\r\n dispositionType: df.dispositionType ?? \"—\",\r\n expectedFramework: fw.expectedFramework ?? \"—\",\r\n status: fw.status ?? \"N/A\",\r\n remarks: fw.remarks ?? \"—\",\r\n })),\r\n );\r\n\r\n if (!rows.length) {\r\n return <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\" }}>No disposition framework data available.</Typography>;\r\n }\r\n\r\n return (\r\n <Box>\r\n <SectionTitle>Disposition-Based Quality Framework</SectionTitle>\r\n <TableContainer sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\" }}>\r\n <Table size=\"small\">\r\n <TableHead>\r\n <TableRow>\r\n {[\r\n { label: \"Disposition Type\", minWidth: 160 },\r\n { label: \"Expected Framework\", minWidth: 200 },\r\n { label: \"Status\", minWidth: 120 },\r\n { label: \"Remarks\", minWidth: 160 },\r\n ].map((col, i) => (\r\n <TableCell key={i} sx={{ ...TH, minWidth: col.minWidth }}>{col.label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {rows.map((row, ri) => (\r\n <TableRow key={ri} sx={{ \"&:last-child td\": { borderBottom: 0 } }}>\r\n <TableCell sx={{ ...TD }}>{row.dispositionType}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.expectedFramework}</TableCell>\r\n <TableCell sx={{ ...TD }}><StatusIconBadge label={row.status} /></TableCell>\r\n <TableCell sx={{ ...TD }}>{row.remarks}</TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction AuditChecklistTab({ data, primary: _primary }: { data: NewAuditApiResponse; primary: string }) {\r\n const [view, setView] = useState<\"overview\" | \"detailed\">(\"overview\");\r\n const obs = data.Section_Wise_Audit_Observations_Checklist ?? {};\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n <Box sx={{ display: \"flex\", justifyContent: \"flex-start\" }}>\r\n <ToggleButtonGroup\r\n value={view}\r\n exclusive\r\n onChange={(_, v) => v && setView(v)}\r\n size=\"small\"\r\n sx={{\r\n \"& .MuiToggleButton-root\": {\r\n fontSize: \"0.72rem\",\r\n fontWeight: 600,\r\n textTransform: \"none\",\r\n px: 1.5,\r\n py: \"4px\",\r\n border: \"1px solid\",\r\n borderColor: \"divider\",\r\n color: \"text.secondary\",\r\n \"&.Mui-selected\": { backgroundColor: _primary, color: \"#fff\", borderColor: _primary, \"&:hover\": { backgroundColor: _primary } },\r\n },\r\n }}\r\n >\r\n <ToggleButton value=\"overview\">Overview</ToggleButton>\r\n <ToggleButton value=\"detailed\">Detailed</ToggleButton>\r\n </ToggleButtonGroup>\r\n </Box>\r\n\r\n {view === \"overview\" && <DispositionFrameworkTable data={data} />}\r\n\r\n {view === \"detailed\" && (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n <ChecklistTable title=\"Opening & Greeting\" rows={obsRecordToRows(obs.Opening_and_Greeting, OPENING_LABELS, OPENING_EXPECTED)} />\r\n <ChecklistTable title=\"Verification & Authentication\" rows={obsRecordToRows(obs.Verification_and_Authentication, VERIFICATION_LABELS, VERIFICATION_EXPECTED)} />\r\n <ChecklistTable title=\"Communication Effectiveness\" rows={obsRecordToRows(obs.Communication_and_Soft_Skills, COMM_LABELS, COMM_EXPECTED)} />\r\n <ChecklistTable title=\"Process & Workflow Adherence\" rows={processWorkflowRows(obs.Process_and_Workflow_Adherence)} />\r\n <ChecklistTable title=\"Clinical Sensitivity & Patient Handling\" rows={obsRecordToRows(obs.Empathy_and_Patient_Assurance, EMPATHY_LABELS, EMPATHY_EXPECTED)} />\r\n <ChecklistTable title=\"Call Handling\" rows={obsRecordToRows(obs.Call_Handling, CALL_HANDLING_LABELS, CALL_HANDLING_EXPECTED)} />\r\n <ChecklistTable title=\"Call Closure & Customer Education\" rows={obsRecordToRows(obs.Call_Closure_and_Customer_Education, CLOSURE_LABELS, CLOSURE_EXPECTED)} />\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Root Cause Analysis Tab ───────────────────────────────────────────────────\r\n\r\nfunction RootCauseAnalysisTab({ data, primary }: { data: NewAuditApiResponse; primary: string }) {\r\n const rcaRows = (data.Root_Cause_Analysis ?? []).filter((r) => r?.Observation && r?.Observation !== \"N/A\") ?? [];\r\n const rec = data.Auditor_Recommendation ?? {};\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\r\n <Box>\r\n <SectionTitle>Root Cause Analysis</SectionTitle>\r\n {rcaRows.length > 0 ? (\r\n <TableContainer sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", overflow: \"hidden\" }}>\r\n <Table size=\"small\">\r\n <TableHead>\r\n <TableRow>\r\n {[{ label: \"Observation\", minWidth: 180 }, { label: \"Root Cause\", minWidth: 200 }, { label: \"Impact\", minWidth: 200 }, { label: \"Severity\", minWidth: 90 }].map((col, i) => (\r\n <TableCell key={i} sx={{ ...TH, minWidth: col.minWidth }}>{col.label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {rcaRows.map((row, ri) => (\r\n <TableRow key={ri} sx={{ \"&:last-child td\": { borderBottom: 0 } }}>\r\n <TableCell sx={{ ...TD }}>{row.Observation ?? \"—\"}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.Root_Cause ?? \"—\"}</TableCell>\r\n <TableCell sx={{ ...TD }}>{row.Impact ?? \"—\"}</TableCell>\r\n <TableCell sx={{ ...TD, textAlign: \"center\" }}>{row.Severity ? <StatusBadge label={row.Severity} /> : \"—\"}</TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n ) : (\r\n <Box sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: \"8px\", px: \"14px\", py: \"10px\", backgroundColor: \"background.paper\" }}>\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\" }}>No significant root causes identified for this interaction.</Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n {(toStringArray(rec.Key_Strengths).length > 0 || toStringArray(rec.Improvement_Areas).length > 0) && (\r\n <Box>\r\n <SectionTitle>Coaching & Development</SectionTitle>\r\n <Box sx={{ display: \"flex\", gap: 2, flexWrap: \"wrap\" }}>\r\n {[\r\n { title: \"Key Strengths\", items: toStringArray(rec.Key_Strengths), color: \"#2e7d32\" },\r\n { title: \"Improvement Areas\", items: toStringArray(rec.Improvement_Areas), color: \"#e65100\" },\r\n ].filter((g) => (g.items?.length ?? 0) > 0).map((g) => (\r\n <Box key={g.title} sx={{ flex: \"1 1 200px\", border: \"1px solid\", borderColor: \"divider\", borderRadius: \"6px\", backgroundColor: \"background.paper\", px: \"14px\", py: \"10px\" }}>\r\n <Typography sx={{ fontSize: \"0.78rem\", fontWeight: 600, color: \"text.primary\", mb: \"8px\" }}>{g.title}</Typography>\r\n {g.items?.map((item, ii) => (\r\n <Box key={ii} sx={{ display: \"flex\", alignItems: \"flex-start\", gap: \"7px\", mb: \"5px\" }}>\r\n <Box sx={{ width: 5, height: 5, borderRadius: \"50%\", backgroundColor: g.color, mt: \"5px\", flexShrink: 0 }} />\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\", lineHeight: 1.5 }}>{item}</Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n {data.Final_Auditor_Remarks && (\r\n <Box sx={{ border: \"1px solid\", borderLeft: \"3px solid\", borderColor: \"divider\", borderLeftColor: primary, borderRadius: \"6px\", px: \"14px\", py: \"10px\", backgroundColor: alpha(primary, 0.04) }}>\r\n <Typography sx={{ fontSize: \"0.78rem\", fontWeight: 600, color: primary, mb: \"6px\" }}>Final Auditor Remarks</Typography>\r\n <Typography sx={{ fontSize: \"0.75rem\", color: \"text.secondary\", lineHeight: 1.6 }}>{data.Final_Auditor_Remarks}</Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\n// ─── Static tabs ───────────────────────────────────────────────────────────────\r\n\r\nconst STATIC_TABS = [\r\n { id: \"overview\", label: \"Overview\" },\r\n { id: \"scorecard\", label: \"Scorecard\" },\r\n { id: \"checklist\", label: \"Audit Checklist\" },\r\n { id: \"rca\", label: \"Root Cause Analysis\" },\r\n];\r\n\r\n// ─── Data hook ─────────────────────────────────────────────────────────────────\r\n\r\nfunction useAuditReportData(callUuid?: string, active = true) {\r\n const [activeTab, setActiveTab] = useState(0);\r\n const [apiData, setApiData] = useState<NewAuditApiResponse | null>(null);\r\n const [auditLoading, setAuditLoading] = useState(false);\r\n const [auditError, setAuditError] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n setApiData(null);\r\n setAuditError(null);\r\n setActiveTab(0);\r\n\r\n if (!active || !callUuid) return;\r\n\r\n let cancelled = false;\r\n setAuditLoading(true);\r\n axiosInstance\r\n .get<NewAuditApiResponse>(END_POINT.CALLSAGE_AUDIT(callUuid))\r\n .then((res) => { if (!cancelled) setApiData(res.data); })\r\n .catch((err: any) => {\r\n if (!cancelled) setAuditError(err?.response?.data?.message ?? err?.message ?? \"Failed to generate audit report\");\r\n })\r\n .finally(() => { if (!cancelled) setAuditLoading(false); });\r\n return () => { cancelled = true; };\r\n }, [active, callUuid]);\r\n\r\n return { activeTab, setActiveTab, apiData, auditLoading, auditError };\r\n}\r\n\r\n// ─── Print layout ──────────────────────────────────────────────────────────────\r\n\r\nconst PRINT_ROOT_ID = \"audit-report-print-root\";\r\n\r\nconst PRINT_STYLES = (\r\n <GlobalStyles\r\n styles={{\r\n [`#${PRINT_ROOT_ID}`]: { position: \"absolute\", width: \"1px\", height: \"1px\", overflow: \"hidden\", clip: \"rect(0 0 0 0)\", clipPath: \"inset(50%)\", whiteSpace: \"nowrap\", pointerEvents: \"none\" },\r\n \"@media print\": {\r\n \"body *\": { visibility: \"hidden\" },\r\n [`#${PRINT_ROOT_ID}`]: { visibility: \"visible\", position: \"absolute\", top: 0, left: 0, width: \"100%\", height: \"auto\", overflow: \"visible\", clip: \"auto\", clipPath: \"none\", whiteSpace: \"normal\", padding: \"0 8mm\", boxSizing: \"border-box\" },\r\n [`#${PRINT_ROOT_ID} *`]: { visibility: \"visible\", printColorAdjust: \"exact\", WebkitPrintColorAdjust: \"exact\" } as React.CSSProperties,\r\n },\r\n }}\r\n />\r\n);\r\n\r\n// ─── Inner component (shared by dialog + full-page) ───────────────────────────\r\n\r\ninterface AuditReportInnerProps {\r\n callUuid?: string;\r\n active?: boolean;\r\n primary: string;\r\n onClose?: () => void;\r\n onMaximize?: () => void;\r\n}\r\n\r\nfunction buildHeaderBadges(data: NewAuditApiResponse): Array<{ label: string; value: string; asBadge?: boolean }> {\r\n const sc = data.Quality_Scorecard ?? {};\r\n const summary = data.Executive_Audit_Summary ?? {};\r\n const meta = data.Audit_Metadata ?? {};\r\n return [\r\n { label: \"Call Disposition\", value: meta.Call_Disposition ?? \"N/A\" },\r\n { label: \"Result\", value: summary.Audit_Result ?? \"N/A\", asBadge: true },\r\n { label: \"Score\", value: `${sc.Total_Score ?? summary.Overall_Audit_Score_Percentage ?? 0}/100` },\r\n ];\r\n}\r\n\r\nfunction AuditReportInner({ callUuid, active = true, primary, onClose, onMaximize }: AuditReportInnerProps) {\r\n const { activeTab, setActiveTab, apiData, auditLoading, auditError } = useAuditReportData(callUuid, active);\r\n\r\n const headerBadges = apiData ? buildHeaderBadges(apiData) : [];\r\n const subtitle = apiData\r\n ? [apiData.Audit_Metadata?.Agent_Name, apiData.Audit_Metadata?.Hospital_Name, apiData.Audit_Metadata?.Call_Date_Time].filter(Boolean).join(\" · \") || undefined\r\n : undefined;\r\n\r\n const iconButtonSx = {\r\n flexShrink: 0, width: 28, height: 28, borderRadius: \"6px\", backgroundColor: \"action.hover\", color: \"text.secondary\",\r\n \"&:hover\": { backgroundColor: \"action.selected\", color: \"text.primary\" },\r\n transition: \"all 0.15s ease\",\r\n } as const;\r\n\r\n function renderTab() {\r\n if (!apiData) return null;\r\n switch (activeTab) {\r\n case 0: return <OverviewTab data={apiData} />;\r\n case 1: return <ScorecardTab data={apiData} primary={primary} />;\r\n case 2: return <AuditChecklistTab data={apiData} primary={primary} />;\r\n case 3: return <RootCauseAnalysisTab data={apiData} primary={primary} />;\r\n default: return null;\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {PRINT_STYLES}\r\n {createPortal(\r\n <div id={PRINT_ROOT_ID}>\r\n <Box sx={{ mb: 2.5, pb: 1.5, borderBottom: \"2px solid\", borderColor: \"divider\" }}>\r\n <Typography sx={{ fontSize: \"1.2rem\", fontWeight: 700, color: \"text.primary\" }}>Audit Report</Typography>\r\n {subtitle && <Typography sx={{ fontSize: \"0.8rem\", color: \"text.secondary\", mt: \"4px\" }}>{subtitle}</Typography>}\r\n </Box>\r\n {apiData && (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 3 }}>\r\n <OverviewTab data={apiData} />\r\n <ScorecardTab data={apiData} primary={primary} />\r\n <AuditChecklistTab data={apiData} primary={primary} />\r\n <RootCauseAnalysisTab data={apiData} primary={primary} />\r\n </Box>\r\n )}\r\n </div>,\r\n document.body,\r\n )}\r\n\r\n {/* Title bar */}\r\n <Box sx={{ px: { xs: 2, md: 2.5 }, py: \"12px\", display: \"flex\", alignItems: \"flex-start\", justifyContent: \"space-between\", gap: 1, borderBottom: \"1px solid\", borderColor: \"divider\", flexShrink: 0 }}>\r\n <Box sx={{ minWidth: 0 }}>\r\n <Typography sx={{ fontWeight: 700, fontSize: { xs: \"1rem\", sm: \"1.2rem\" }, color: \"text.primary\", lineHeight: 1.3 }}>Audit Report</Typography>\r\n {subtitle && <Typography sx={{ fontSize: \"0.78rem\", color: \"text.secondary\", mt: \"3px\" }}>{subtitle}</Typography>}\r\n </Box>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.75, flexShrink: 0 }}>\r\n {onMaximize && (\r\n <IconButton size=\"small\" onClick={onMaximize} title=\"Open in new tab\" sx={iconButtonSx}>\r\n <LaunchIcon sx={{ fontSize: 14 }} />\r\n </IconButton>\r\n )}\r\n {onClose && (\r\n <IconButton size=\"small\" onClick={onClose} title=\"Close\" sx={iconButtonSx}>\r\n <CloseIcon sx={{ fontSize: 15 }} />\r\n </IconButton>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n {/* Header badges */}\r\n {headerBadges.length > 0 && (\r\n <Box sx={{ px: { xs: 2, md: 2.5 }, py: \"8px\", display: \"flex\", alignItems: \"center\", gap: \"8px\", flexWrap: \"wrap\", borderBottom: \"1px solid\", borderColor: \"divider\", backgroundColor: \"#f5f7f8\", flexShrink: 0 }}>\r\n {headerBadges.map((badge, i) =>\r\n badge.asBadge ? (\r\n <StatusBadge key={i} label={badge.value} />\r\n ) : (\r\n <Box key={i} sx={{ display: \"flex\", alignItems: \"center\", gap: \"5px\", px: \"9px\", height: 26, border: \"1px solid\", borderColor: \"divider\", borderRadius: \"5px\", backgroundColor: \"background.paper\" }}>\r\n <Box sx={{ width: 5, height: 5, borderRadius: \"50%\", backgroundColor: primary, flexShrink: 0 }} />\r\n <Typography sx={{ fontSize: \"0.72rem\", color: \"text.secondary\", whiteSpace: \"nowrap\" }}>\r\n <Box component=\"span\" sx={{ fontWeight: 600, color: \"text.primary\", mr: \"3px\" }}>{badge.label}:</Box>\r\n {badge.value}\r\n </Typography>\r\n </Box>\r\n ),\r\n )}\r\n </Box>\r\n )}\r\n\r\n {/* Static tabs */}\r\n <Box sx={{ borderBottom: \"1px solid\", borderColor: \"divider\", backgroundColor: \"background.paper\", flexShrink: 0 }}>\r\n <Tabs\r\n value={activeTab}\r\n onChange={(_, v) => setActiveTab(v)}\r\n variant=\"scrollable\"\r\n scrollButtons=\"auto\"\r\n sx={{\r\n minHeight: 40,\r\n px: { xs: 1, md: 2 },\r\n \"& .MuiTab-root\": { fontSize: \"0.78rem\", fontWeight: 600, minHeight: 40, textTransform: \"none\", color: \"text.secondary\", py: 0, px: 1.5, \"&.Mui-selected\": { color: primary } },\r\n \"& .MuiTabs-indicator\": { backgroundColor: primary, height: 2 },\r\n }}\r\n >\r\n {STATIC_TABS.map((tab) => (\r\n <Tab key={tab.id} label={tab.label} disableRipple />\r\n ))}\r\n </Tabs>\r\n </Box>\r\n\r\n {/* Tab content */}\r\n <Box sx={{ flex: 1, overflow: \"auto\", px: { xs: 2, md: 2.5 }, py: 2 }}>\r\n {auditLoading && (\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\", py: 6 }}>\r\n <CircularProgress size={32} />\r\n </Box>\r\n )}\r\n {!auditLoading && auditError && (\r\n <Alert severity=\"warning\" sx={{ mb: 2, fontSize: \"0.78rem\" }}>{auditError}</Alert>\r\n )}\r\n {!auditLoading && !auditError && !apiData && (\r\n <Box sx={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\", py: 6 }}>\r\n <Typography sx={{ fontSize: \"0.78rem\", color: \"text.secondary\" }}>No audit data available.</Typography>\r\n </Box>\r\n )}\r\n {!auditLoading && apiData && renderTab()}\r\n </Box>\r\n </>\r\n );\r\n}\r\n\r\n// ─── Public exports ────────────────────────────────────────────────────────────\r\n\r\ninterface AuditReportDialogProps {\r\n open: boolean;\r\n onClose: () => void;\r\n width?: string;\r\n rowData?: CdrRecordResponse;\r\n}\r\n\r\n/**\r\n * Audit report shown in a modal dialog. The maximize button opens the same\r\n * report full-screen in a new browser tab (`/audit-report/:callUuid`).\r\n */\r\nexport default function AuditReportDialog({ open, onClose, width = \"80vw\", rowData }: AuditReportDialogProps) {\r\n const theme = useTheme();\r\n const primary = theme.palette.primary.main;\r\n const callUuid = rowData?.callUuid;\r\n\r\n const handleMaximize = () => {\r\n if (!callUuid) return;\r\n window.open(`/audit-report/${encodeURIComponent(callUuid)}`, \"_blank\");\r\n };\r\n\r\n return (\r\n <Dialog\r\n open={open}\r\n onClose={onClose}\r\n fullWidth\r\n slotProps={{\r\n paper: {\r\n sx: { width, maxWidth: width, height: \"90vh\", display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", borderRadius: \"10px\" },\r\n },\r\n }}\r\n >\r\n {open && (\r\n <AuditReportInner\r\n callUuid={callUuid}\r\n active={open}\r\n primary={primary}\r\n onClose={onClose}\r\n onMaximize={callUuid ? handleMaximize : undefined}\r\n />\r\n )}\r\n </Dialog>\r\n );\r\n}\r\n\r\n/**\r\n * Stand-alone full-page audit report rendered by the `/audit-report/:callUuid` route.\r\n */\r\nexport function AuditReportFullPage({ callUuid }: { callUuid?: string }) {\r\n const theme = useTheme();\r\n const primary = theme.palette.primary.main;\r\n\r\n return (\r\n <Box sx={{ height: \"100vh\", display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", backgroundColor: \"background.paper\" }}>\r\n <AuditReportInner callUuid={callUuid} active primary={primary} />\r\n </Box>\r\n );\r\n}\r\n\r\n"],"mappings":"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","names":["text","_a","_b","_c"]}
@@ -1,4 +1,5 @@
1
1
  import {
2
+ __spreadProps,
2
3
  __spreadValues,
3
4
  sdkStateManager
4
5
  } from "./chunk-C52XEAO2.mjs";
@@ -8,9 +9,9 @@ import { useState, useEffect } from "react";
8
9
  var useGetCallerData = () => {
9
10
  var _a, _b;
10
11
  const sdkState = sdkStateManager.getState();
11
- const { process_id, process_name, status, phone_number, agent_id, call_id, call_details, socket_info } = sdkState.callData;
12
+ const { process_id, process_name, status, phone_number, agent_id, call_id, call_details } = sdkState.callData;
12
13
  const initialLeadData = sdkStateManager.getTransferLeadData();
13
- const initialCallData = __spreadValues(__spreadValues({
14
+ const initialCallData = __spreadProps(__spreadValues({
14
15
  phone_number,
15
16
  status,
16
17
  callReferenceId: call_id,
@@ -19,15 +20,17 @@ var useGetCallerData = () => {
19
20
  process_name,
20
21
  call_details,
21
22
  auto_wrapup_time: (_b = (_a = sdkState.backendCallControls) == null ? void 0 : _a.auto_wrapup_time) != null ? _b : null
22
- }, initialLeadData !== void 0 && { lead_data: initialLeadData }), socket_info !== void 0 && { socket_info });
23
+ }, initialLeadData !== void 0 && { lead_data: initialLeadData }), {
24
+ socket_info: sdkState.callData
25
+ });
23
26
  const [callData, setCallData] = useState(initialCallData);
24
27
  useEffect(() => {
25
28
  const unsubscribe = sdkStateManager.subscribe(() => {
26
29
  var _a2, _b2;
27
30
  const state = sdkStateManager.getState();
28
- const { process_id: process_id2, process_name: process_name2, status: status2, phone_number: phone_number2, agent_id: agent_id2, call_id: call_id2, call_details: call_details2, auto_wrapup_time, socket_info: socket_info2 } = state.callData;
31
+ const { process_id: process_id2, process_name: process_name2, status: status2, phone_number: phone_number2, agent_id: agent_id2, call_id: call_id2, call_details: call_details2, auto_wrapup_time } = state.callData;
29
32
  const lead_data = sdkStateManager.getTransferLeadData();
30
- const currentCallData = __spreadValues(__spreadValues({
33
+ const currentCallData = __spreadProps(__spreadValues({
31
34
  phone_number: phone_number2,
32
35
  status: status2,
33
36
  callReferenceId: call_id2,
@@ -36,7 +39,9 @@ var useGetCallerData = () => {
36
39
  process_name: process_name2,
37
40
  call_details: call_details2,
38
41
  auto_wrapup_time: (_b2 = auto_wrapup_time != null ? auto_wrapup_time : (_a2 = state.backendCallControls) == null ? void 0 : _a2.auto_wrapup_time) != null ? _b2 : null
39
- }, lead_data !== void 0 && { lead_data }), socket_info2 !== void 0 && { socket_info: socket_info2 });
42
+ }, lead_data !== void 0 && { lead_data }), {
43
+ socket_info: state.callData
44
+ });
40
45
  setCallData(currentCallData);
41
46
  });
42
47
  return unsubscribe;
@@ -47,4 +52,4 @@ var useGetCallerData = () => {
47
52
  export {
48
53
  useGetCallerData
49
54
  };
50
- //# sourceMappingURL=chunk-VG5S4K4H.mjs.map
55
+ //# sourceMappingURL=chunk-I7Z5Q5YA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../call-control-sdk/lib/hooks/useGetCallerData.ts"],"sourcesContent":["import { useState, useEffect } from \"react\";\r\nimport { sdkStateManager } from \"./sdk-state\";\r\nimport type { CallData } from \"../../types\";\r\n\r\nexport const useGetCallerData = (): CallData => {\r\n\tconst sdkState = sdkStateManager.getState();\r\n\tconst { process_id, process_name, status, phone_number, agent_id, call_id, call_details } =\r\n\t\tsdkState.callData;\r\n\tconst initialLeadData = sdkStateManager.getTransferLeadData();\r\n\tconst initialCallData = {\r\n\t\tphone_number,\r\n\t\tstatus,\r\n\t\tcallReferenceId: call_id,\r\n\t\tagent_id,\r\n\t\tprocess_id,\r\n\t\tprocess_name,\r\n\t\tcall_details,\r\n\t\tauto_wrapup_time: sdkState.backendCallControls?.auto_wrapup_time ?? null,\r\n\t\t...(initialLeadData !== undefined && { lead_data: initialLeadData }),\r\n\t\tsocket_info: sdkState.callData,\r\n\t};\r\n\tconst [callData, setCallData] = useState<CallData>(initialCallData);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst unsubscribe = sdkStateManager.subscribe(() => {\r\n\t\t\tconst state = sdkStateManager.getState();\r\n\t\t\tconst { process_id, process_name, status, phone_number, agent_id, call_id, call_details, auto_wrapup_time } =\r\n\t\t\t\tstate.callData;\r\n\t\t\tconst lead_data = sdkStateManager.getTransferLeadData();\r\n\t\t\tconst currentCallData = {\r\n\t\t\t\tphone_number,\r\n\t\t\t\tstatus,\r\n\t\t\t\tcallReferenceId: call_id,\r\n\t\t\t\tagent_id,\r\n\t\t\t\tprocess_id,\r\n\t\t\t\tprocess_name,\r\n\t\t\t\tcall_details,\r\n\t\t\t\tauto_wrapup_time: auto_wrapup_time ?? state.backendCallControls?.auto_wrapup_time ?? null,\r\n\t\t\t\t...(lead_data !== undefined && { lead_data }),\r\n\t\t\t\tsocket_info: state.callData,\r\n\t\t\t};\r\n\t\t\tsetCallData(currentCallData);\r\n\t\t});\r\n\r\n\t\treturn unsubscribe;\r\n\t}, []);\r\n\r\n\treturn callData;\r\n};\r\n"],"mappings":";;;;;;;AAAA,SAAS,UAAU,iBAAiB;AAI7B,IAAM,mBAAmB,MAAgB;AAJhD;AAKC,QAAM,WAAW,gBAAgB,SAAS;AAC1C,QAAM,EAAE,YAAY,cAAc,QAAQ,cAAc,UAAU,SAAS,aAAa,IACvF,SAAS;AACV,QAAM,kBAAkB,gBAAgB,oBAAoB;AAC5D,QAAM,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAkB,oBAAS,wBAAT,mBAA8B,qBAA9B,YAAkD;AAAA,KAChE,oBAAoB,UAAa,EAAE,WAAW,gBAAgB,IAT3C;AAAA,IAUvB,aAAa,SAAS;AAAA,EACvB;AACA,QAAM,CAAC,UAAU,WAAW,IAAI,SAAmB,eAAe;AAElE,YAAU,MAAM;AACf,UAAM,cAAc,gBAAgB,UAAU,MAAM;AAxBtD,UAAAA,KAAAC;AAyBG,YAAM,QAAQ,gBAAgB,SAAS;AACvC,YAAM,EAAE,YAAAC,aAAY,cAAAC,eAAc,QAAAC,SAAQ,cAAAC,eAAc,UAAAC,WAAU,SAAAC,UAAS,cAAAC,eAAc,iBAAiB,IACzG,MAAM;AACP,YAAM,YAAY,gBAAgB,oBAAoB;AACtD,YAAM,kBAAkB;AAAA,QACvB,cAAAH;AAAA,QACA,QAAAD;AAAA,QACA,iBAAiBG;AAAA,QACjB,UAAAD;AAAA,QACA,YAAAJ;AAAA,QACA,cAAAC;AAAA,QACA,cAAAK;AAAA,QACA,mBAAkBP,MAAA,+CAAoBD,MAAA,MAAM,wBAAN,gBAAAA,IAA2B,qBAA/C,OAAAC,MAAmE;AAAA,SACjF,cAAc,UAAa,EAAE,UAAU,IATpB;AAAA,QAUvB,aAAa,MAAM;AAAA,MACpB;AACA,kBAAY,eAAe;AAAA,IAC5B,CAAC;AAED,WAAO;AAAA,EACR,GAAG,CAAC,CAAC;AAEL,SAAO;AACR;","names":["_a","_b","process_id","process_name","status","phone_number","agent_id","call_id","call_details"]}
package/dist/index.d.mts CHANGED
@@ -690,7 +690,7 @@ interface CallData {
690
690
  /** Lead data set by the host app; attached when available */
691
691
  lead_data?: any;
692
692
  /** Raw socket payload from the most recent WebSocket message */
693
- socket_info?: Record<string, any>;
693
+ socket_info?: any;
694
694
  break_details?: {
695
695
  type: string;
696
696
  value: string;
package/dist/index.d.ts CHANGED
@@ -690,7 +690,7 @@ interface CallData {
690
690
  /** Lead data set by the host app; attached when available */
691
691
  lead_data?: any;
692
692
  /** Raw socket payload from the most recent WebSocket message */
693
- socket_info?: Record<string, any>;
693
+ socket_info?: any;
694
694
  break_details?: {
695
695
  type: string;
696
696
  value: string;