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

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-DA6ZOU73.mjs";
3
+ } from "./chunk-BURU6OAX.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-KWXPR76K.mjs.map
14
+ //# sourceMappingURL=auditReport-3PGQMNH7.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AuditReportDialog
3
- } from "./chunk-DA6ZOU73.mjs";
3
+ } from "./chunk-BURU6OAX.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-3QRU46CJ.mjs.map
843
+ //# sourceMappingURL=cdrReport-Y4VK3I3U.mjs.map
@@ -184,7 +184,7 @@ var SCORECARD_PARAMS = [
184
184
  { key: "Process_and_Workflow_Adherence", label: "Process & Workflow Adherence", defaultMax: 20 },
185
185
  { key: "Resolution_Accuracy", label: "Resolution Accuracy", defaultMax: 20 },
186
186
  { key: "Empathy_and_Patient_Assurance", label: "Empathy & Patient Assurance", defaultMax: 10 },
187
- { key: "Call_Handling", label: "Call Handling & Probing", defaultMax: 5 },
187
+ { key: "Call_Handling", label: "Call Handling", defaultMax: 5 },
188
188
  { key: "CRM_Documentation_Alignment", label: "CRM Documentation Alignment", defaultMax: 5 },
189
189
  { key: "Closing_and_Customer_Education", label: "Closing & Customer Education", defaultMax: 5 }
190
190
  ];
@@ -218,7 +218,7 @@ function ScorecardTab({ data, primary }) {
218
218
  /* @__PURE__ */ jsx(Box, { sx: { width: "100%", mt: 0.75 }, children: /* @__PURE__ */ jsx(LinearProgress, { variant: "determinate", value: pct, sx: { height: 6, borderRadius: 3, backgroundColor: alpha(primary, 0.12), "& .MuiLinearProgress-bar": { backgroundColor: primary, borderRadius: 3 } } }) }),
219
219
  /* @__PURE__ */ jsx(Box, { sx: { mt: 0.75 }, children: /* @__PURE__ */ jsx(StatusBadge, { label: resultBadge }) })
220
220
  ] }),
221
- /* @__PURE__ */ jsx(Box, { sx: { flex: 1, minWidth: 260, display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(160px, 1fr))", gap: "8px" }, children: metrics.map((m) => /* @__PURE__ */ jsxs(Box, { sx: { border: "1px solid", borderColor: "divider", borderRadius: "6px", backgroundColor: "background.paper", px: "10px", py: "7px", display: "flex", alignItems: "center", justifyContent: "space-between", gap: 1 }, children: [
221
+ /* @__PURE__ */ jsx(Box, { sx: { flex: 1, minWidth: 260, display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(160px, 1fr))", gap: "8px" }, children: metrics.filter((m) => m.value && m.value.toLowerCase() !== "n/a").map((m) => /* @__PURE__ */ jsxs(Box, { sx: { border: "1px solid", borderColor: "divider", borderRadius: "6px", backgroundColor: "background.paper", px: "10px", py: "7px", display: "flex", alignItems: "center", justifyContent: "space-between", gap: 1 }, children: [
222
222
  /* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.72rem", color: "text.secondary", lineHeight: 1.3, flex: 1 }, children: m.label }),
223
223
  /* @__PURE__ */ jsx(StatusBadge, { label: m.value })
224
224
  ] }, m.label)) })
@@ -238,6 +238,7 @@ function ScorecardTab({ data, primary }) {
238
238
  var _a2, _b2;
239
239
  const entry = sc[p.key];
240
240
  const rawEntryScore = entry == null ? void 0 : entry.Score_Obtained;
241
+ if (typeof rawEntryScore === "string" && rawEntryScore.toLowerCase().trim() === "n/a") return null;
241
242
  const score = typeof rawEntryScore === "string" ? parseFloat(rawEntryScore) || 0 : rawEntryScore != null ? rawEntryScore : 0;
242
243
  const max = (_a2 = entry == null ? void 0 : entry.Weightage) != null ? _a2 : p.defaultMax;
243
244
  return /* @__PURE__ */ jsxs(TableRow, { children: [
@@ -262,18 +263,19 @@ function ScorecardTab({ data, primary }) {
262
263
  }
263
264
  var OPENING_LABELS = { Standard_Greeting_Used: "Standard Greeting Used", Hospital_Name_Mentioned: "Hospital Name Mentioned", Agent_Introduction_Provided: "Agent Introduction Provided", Professional_Tone_Maintained: "Professional Tone Maintained" };
264
265
  var OPENING_EXPECTED = { 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" };
265
- var VERIFICATION_LABELS = { 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" };
266
- var VERIFICATION_EXPECTED = { 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" };
266
+ var VERIFICATION_LABELS = { 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)" };
267
+ var VERIFICATION_EXPECTED = { 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" };
267
268
  var COMM_LABELS = { 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" };
268
269
  var COMM_EXPECTED = { 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" };
269
270
  var EMPATHY_LABELS = { 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" };
270
271
  var EMPATHY_EXPECTED = { 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" };
271
272
  var CALL_HANDLING_LABELS = { "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" };
272
273
  var CALL_HANDLING_EXPECTED = { "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" };
273
- var CLOSURE_LABELS = { 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" };
274
- var CLOSURE_EXPECTED = { 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" };
274
+ var CLOSURE_LABELS = { Additional_Assistance_Offered: "Additional Assistance Offered", Professional_Closing_Provided: "Professional Closing Provided", "Wellness/Courtesy_Statement_Used": "Wellness/Courtesy Statement Used" };
275
+ var CLOSURE_EXPECTED = { Additional_Assistance_Offered: "Mandatory closure check", Professional_Closing_Provided: "Standard closure etiquette expected", "Wellness/Courtesy_Statement_Used": "Positive healthcare closure preferred" };
276
+ var EXCLUDED_KEYS = /* @__PURE__ */ new Set(["Patient_Data_Handling", "Recontact_Information_Shared"]);
275
277
  function obsRecordToRows(record, labelMap, expectedMap) {
276
- return Object.entries(record != null ? record : {}).map(([key, val]) => {
278
+ return Object.entries(record != null ? record : {}).filter(([key]) => !EXCLUDED_KEYS.has(key)).map(([key, val]) => {
277
279
  var _a, _b, _c, _d, _e;
278
280
  return {
279
281
  parameter: (_a = labelMap[key]) != null ? _a : key.replace(/_/g, " "),
@@ -309,12 +311,13 @@ var CHECKLIST_COLS = [
309
311
  { key: "qaObservation", label: "QA Observation / Impact", minWidth: 180 }
310
312
  ];
311
313
  function ChecklistTable({ title, rows }) {
312
- if (!rows.length) return null;
314
+ const visibleRows = rows.filter((r) => r.status.toLowerCase().replace(/[^a-z]/g, "") !== "na");
315
+ if (!visibleRows.length) return null;
313
316
  return /* @__PURE__ */ jsxs(Box, { children: [
314
317
  /* @__PURE__ */ jsx(SectionTitle, { children: title }),
315
318
  /* @__PURE__ */ jsx(TableContainer, { sx: { border: "1px solid", borderColor: "divider", borderRadius: "8px", overflow: "hidden" }, children: /* @__PURE__ */ jsxs(Table, { size: "small", children: [
316
319
  /* @__PURE__ */ jsx(TableHead, { children: /* @__PURE__ */ jsx(TableRow, { children: CHECKLIST_COLS.map((col) => /* @__PURE__ */ jsx(TableCell, { sx: __spreadProps(__spreadValues({}, TH), { minWidth: col.minWidth }), children: col.label }, col.key)) }) }),
317
- /* @__PURE__ */ jsx(TableBody, { children: rows.map((row, ri) => /* @__PURE__ */ jsxs(TableRow, { sx: { "&:last-child td": { borderBottom: 0 } }, children: [
320
+ /* @__PURE__ */ jsx(TableBody, { children: visibleRows.map((row, ri) => /* @__PURE__ */ jsxs(TableRow, { sx: { "&:last-child td": { borderBottom: 0 } }, children: [
318
321
  /* @__PURE__ */ jsx(TableCell, { sx: __spreadValues({}, TD), children: row.parameter }),
319
322
  /* @__PURE__ */ jsx(TableCell, { sx: __spreadValues({}, TD), children: row.expectedStandard }),
320
323
  /* @__PURE__ */ jsx(TableCell, { sx: __spreadValues({}, TD), children: /* @__PURE__ */ jsx(StatusIconBadge, { label: row.status }) }),
@@ -339,7 +342,7 @@ function DispositionFrameworkTable({ data }) {
339
342
  };
340
343
  });
341
344
  }
342
- );
345
+ ).filter((r) => r.status.toLowerCase().replace(/[^a-z]/g, "") !== "na" && r.expectedFramework.toLowerCase().trim() !== "clinical sensitivity handling");
343
346
  if (!rows.length) {
344
347
  return /* @__PURE__ */ jsx(Typography, { sx: { fontSize: "0.75rem", color: "text.secondary" }, children: "No disposition framework data available." });
345
348
  }
@@ -398,7 +401,7 @@ function AuditChecklistTab({ data, primary: _primary }) {
398
401
  /* @__PURE__ */ jsx(ChecklistTable, { title: "Verification & Authentication", rows: obsRecordToRows(obs.Verification_and_Authentication, VERIFICATION_LABELS, VERIFICATION_EXPECTED) }),
399
402
  /* @__PURE__ */ jsx(ChecklistTable, { title: "Communication Effectiveness", rows: obsRecordToRows(obs.Communication_and_Soft_Skills, COMM_LABELS, COMM_EXPECTED) }),
400
403
  /* @__PURE__ */ jsx(ChecklistTable, { title: "Process & Workflow Adherence", rows: processWorkflowRows(obs.Process_and_Workflow_Adherence) }),
401
- /* @__PURE__ */ jsx(ChecklistTable, { title: "Clinical Sensitivity & Patient Handling", rows: obsRecordToRows(obs.Empathy_and_Patient_Assurance, EMPATHY_LABELS, EMPATHY_EXPECTED) }),
404
+ /* @__PURE__ */ jsx(ChecklistTable, { title: "Empathy & Patient Assurance", rows: obsRecordToRows(obs.Empathy_and_Patient_Assurance, EMPATHY_LABELS, EMPATHY_EXPECTED) }),
402
405
  /* @__PURE__ */ jsx(ChecklistTable, { title: "Call Handling", rows: obsRecordToRows(obs.Call_Handling, CALL_HANDLING_LABELS, CALL_HANDLING_EXPECTED) }),
403
406
  /* @__PURE__ */ jsx(ChecklistTable, { title: "Call Closure & Customer Education", rows: obsRecordToRows(obs.Call_Closure_and_Customer_Education, CLOSURE_LABELS, CLOSURE_EXPECTED) })
404
407
  ] })
@@ -425,7 +428,7 @@ function RootCauseAnalysisTab({ data, primary }) {
425
428
  ] }) }) : /* @__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." }) })
426
429
  ] }),
427
430
  (toStringArray(rec.Key_Strengths).length > 0 || toStringArray(rec.Improvement_Areas).length > 0) && /* @__PURE__ */ jsxs(Box, { children: [
428
- /* @__PURE__ */ jsx(SectionTitle, { children: "Coaching & Development" }),
431
+ /* @__PURE__ */ jsx(SectionTitle, { children: "Auditor's Recommendation" }),
429
432
  /* @__PURE__ */ jsx(Box, { sx: { display: "flex", gap: 2, flexWrap: "wrap" }, children: [
430
433
  { title: "Key Strengths", items: toStringArray(rec.Key_Strengths), color: "#2e7d32" },
431
434
  { title: "Improvement Areas", items: toStringArray(rec.Improvement_Areas), color: "#e65100" }
@@ -641,4 +644,4 @@ export {
641
644
  AuditReportDialog,
642
645
  AuditReportFullPage
643
646
  };
644
- //# sourceMappingURL=chunk-DA6ZOU73.mjs.map
647
+ //# sourceMappingURL=chunk-BURU6OAX.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\", 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.filter((m) => m.value && m.value.toLowerCase() !== \"n/a\").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 if (typeof rawEntryScore === \"string\" && rawEntryScore.toLowerCase().trim() === \"n/a\") return null;\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)\" };\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\" };\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\" };\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\" };\r\n\r\nconst EXCLUDED_KEYS = new Set([\"Patient_Data_Handling\", \"Recontact_Information_Shared\"]);\r\n\r\nfunction obsRecordToRows(record: ObsRecord | undefined, labelMap: Record<string, string>, expectedMap: Record<string, string>): ChecklistRow[] {\r\n return Object.entries(record ?? {})\r\n .filter(([key]) => !EXCLUDED_KEYS.has(key))\r\n .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 const visibleRows = rows.filter((r) => r.status.toLowerCase().replace(/[^a-z]/g, \"\") !== \"na\");\r\n if (!visibleRows.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 {visibleRows.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 ).filter((r) => r.status.toLowerCase().replace(/[^a-z]/g, \"\") !== \"na\" && r.expectedFramework.toLowerCase().trim() !== \"clinical sensitivity handling\");\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=\"Empathy & Patient Assurance\" 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>Auditor's Recommendation</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"]}
package/dist/index.js CHANGED
@@ -31935,7 +31935,7 @@ function ScorecardTab({ data, primary }) {
31935
31935
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.Box, { sx: { width: "100%", mt: 0.75 }, children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.LinearProgress, { variant: "determinate", value: pct, sx: { height: 6, borderRadius: 3, backgroundColor: (0, import_styles51.alpha)(primary, 0.12), "& .MuiLinearProgress-bar": { backgroundColor: primary, borderRadius: 3 } } }) }),
31936
31936
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.Box, { sx: { mt: 0.75 }, children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(StatusBadge, { label: resultBadge }) })
31937
31937
  ] }),
31938
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.Box, { sx: { flex: 1, minWidth: 260, display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(160px, 1fr))", gap: "8px" }, children: metrics.map((m) => /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_material18.Box, { sx: { border: "1px solid", borderColor: "divider", borderRadius: "6px", backgroundColor: "background.paper", px: "10px", py: "7px", display: "flex", alignItems: "center", justifyContent: "space-between", gap: 1 }, children: [
31938
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.Box, { sx: { flex: 1, minWidth: 260, display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(160px, 1fr))", gap: "8px" }, children: metrics.filter((m) => m.value && m.value.toLowerCase() !== "n/a").map((m) => /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_material18.Box, { sx: { border: "1px solid", borderColor: "divider", borderRadius: "6px", backgroundColor: "background.paper", px: "10px", py: "7px", display: "flex", alignItems: "center", justifyContent: "space-between", gap: 1 }, children: [
31939
31939
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.Typography, { sx: { fontSize: "0.72rem", color: "text.secondary", lineHeight: 1.3, flex: 1 }, children: m.label }),
31940
31940
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(StatusBadge, { label: m.value })
31941
31941
  ] }, m.label)) })
@@ -31955,6 +31955,7 @@ function ScorecardTab({ data, primary }) {
31955
31955
  var _a3, _b2;
31956
31956
  const entry = sc[p.key];
31957
31957
  const rawEntryScore = entry == null ? void 0 : entry.Score_Obtained;
31958
+ if (typeof rawEntryScore === "string" && rawEntryScore.toLowerCase().trim() === "n/a") return null;
31958
31959
  const score = typeof rawEntryScore === "string" ? parseFloat(rawEntryScore) || 0 : rawEntryScore != null ? rawEntryScore : 0;
31959
31960
  const max = (_a3 = entry == null ? void 0 : entry.Weightage) != null ? _a3 : p.defaultMax;
31960
31961
  return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_material18.TableRow, { children: [
@@ -31978,7 +31979,7 @@ function ScorecardTab({ data, primary }) {
31978
31979
  ] });
31979
31980
  }
31980
31981
  function obsRecordToRows(record, labelMap, expectedMap) {
31981
- return Object.entries(record != null ? record : {}).map(([key, val]) => {
31982
+ return Object.entries(record != null ? record : {}).filter(([key]) => !EXCLUDED_KEYS.has(key)).map(([key, val]) => {
31982
31983
  var _a2, _b, _c, _d, _e;
31983
31984
  return {
31984
31985
  parameter: (_a2 = labelMap[key]) != null ? _a2 : key.replace(/_/g, " "),
@@ -32007,12 +32008,13 @@ function processWorkflowRows(groups) {
32007
32008
  );
32008
32009
  }
32009
32010
  function ChecklistTable({ title, rows }) {
32010
- if (!rows.length) return null;
32011
+ const visibleRows = rows.filter((r2) => r2.status.toLowerCase().replace(/[^a-z]/g, "") !== "na");
32012
+ if (!visibleRows.length) return null;
32011
32013
  return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_material18.Box, { children: [
32012
32014
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(SectionTitle, { children: title }),
32013
32015
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.TableContainer, { sx: { border: "1px solid", borderColor: "divider", borderRadius: "8px", overflow: "hidden" }, children: /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_material18.Table, { size: "small", children: [
32014
32016
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.TableHead, { children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.TableRow, { children: CHECKLIST_COLS.map((col) => /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.TableCell, { sx: __spreadProps(__spreadValues({}, TH), { minWidth: col.minWidth }), children: col.label }, col.key)) }) }),
32015
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.TableBody, { children: rows.map((row, ri) => /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_material18.TableRow, { sx: { "&:last-child td": { borderBottom: 0 } }, children: [
32017
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.TableBody, { children: visibleRows.map((row, ri) => /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_material18.TableRow, { sx: { "&:last-child td": { borderBottom: 0 } }, children: [
32016
32018
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.TableCell, { sx: __spreadValues({}, TD), children: row.parameter }),
32017
32019
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.TableCell, { sx: __spreadValues({}, TD), children: row.expectedStandard }),
32018
32020
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.TableCell, { sx: __spreadValues({}, TD), children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(StatusIconBadge, { label: row.status }) }),
@@ -32037,7 +32039,7 @@ function DispositionFrameworkTable({ data }) {
32037
32039
  };
32038
32040
  });
32039
32041
  }
32040
- );
32042
+ ).filter((r2) => r2.status.toLowerCase().replace(/[^a-z]/g, "") !== "na" && r2.expectedFramework.toLowerCase().trim() !== "clinical sensitivity handling");
32041
32043
  if (!rows.length) {
32042
32044
  return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.Typography, { sx: { fontSize: "0.75rem", color: "text.secondary" }, children: "No disposition framework data available." });
32043
32045
  }
@@ -32096,7 +32098,7 @@ function AuditChecklistTab({ data, primary: _primary }) {
32096
32098
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(ChecklistTable, { title: "Verification & Authentication", rows: obsRecordToRows(obs.Verification_and_Authentication, VERIFICATION_LABELS, VERIFICATION_EXPECTED) }),
32097
32099
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(ChecklistTable, { title: "Communication Effectiveness", rows: obsRecordToRows(obs.Communication_and_Soft_Skills, COMM_LABELS, COMM_EXPECTED) }),
32098
32100
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(ChecklistTable, { title: "Process & Workflow Adherence", rows: processWorkflowRows(obs.Process_and_Workflow_Adherence) }),
32099
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(ChecklistTable, { title: "Clinical Sensitivity & Patient Handling", rows: obsRecordToRows(obs.Empathy_and_Patient_Assurance, EMPATHY_LABELS, EMPATHY_EXPECTED) }),
32101
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(ChecklistTable, { title: "Empathy & Patient Assurance", rows: obsRecordToRows(obs.Empathy_and_Patient_Assurance, EMPATHY_LABELS, EMPATHY_EXPECTED) }),
32100
32102
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(ChecklistTable, { title: "Call Handling", rows: obsRecordToRows(obs.Call_Handling, CALL_HANDLING_LABELS, CALL_HANDLING_EXPECTED) }),
32101
32103
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(ChecklistTable, { title: "Call Closure & Customer Education", rows: obsRecordToRows(obs.Call_Closure_and_Customer_Education, CLOSURE_LABELS, CLOSURE_EXPECTED) })
32102
32104
  ] })
@@ -32123,7 +32125,7 @@ function RootCauseAnalysisTab({ data, primary }) {
32123
32125
  ] }) }) : /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.Box, { sx: { border: "1px solid", borderColor: "divider", borderRadius: "8px", px: "14px", py: "10px", backgroundColor: "background.paper" }, children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.Typography, { sx: { fontSize: "0.75rem", color: "text.secondary" }, children: "No significant root causes identified for this interaction." }) })
32124
32126
  ] }),
32125
32127
  (toStringArray(rec.Key_Strengths).length > 0 || toStringArray(rec.Improvement_Areas).length > 0) && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_material18.Box, { children: [
32126
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(SectionTitle, { children: "Coaching & Development" }),
32128
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(SectionTitle, { children: "Auditor's Recommendation" }),
32127
32129
  /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.Box, { sx: { display: "flex", gap: 2, flexWrap: "wrap" }, children: [
32128
32130
  { title: "Key Strengths", items: toStringArray(rec.Key_Strengths), color: "#2e7d32" },
32129
32131
  { title: "Improvement Areas", items: toStringArray(rec.Improvement_Areas), color: "#e65100" }
@@ -32314,7 +32316,7 @@ function AuditReportFullPage({ callUuid }) {
32314
32316
  const primary = theme.palette.primary.main;
32315
32317
  return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_material18.Box, { sx: { height: "100vh", display: "flex", flexDirection: "column", overflow: "hidden", backgroundColor: "background.paper" }, children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(AuditReportInner, { callUuid, active: true, primary }) });
32316
32318
  }
32317
- var import_react30, import_react_dom2, import_material18, import_styles51, import_Close5, import_Launch, import_CheckCircleOutlined, import_HighlightOff, import_RemoveCircleOutlined, import_jsx_runtime74, STATUS_COLOUR, TH, TD, SCORECARD_PARAMS, OPENING_LABELS, OPENING_EXPECTED, VERIFICATION_LABELS, VERIFICATION_EXPECTED, COMM_LABELS, COMM_EXPECTED, EMPATHY_LABELS, EMPATHY_EXPECTED, CALL_HANDLING_LABELS, CALL_HANDLING_EXPECTED, CLOSURE_LABELS, CLOSURE_EXPECTED, CHECKLIST_COLS, STATIC_TABS, PRINT_ROOT_ID, PRINT_STYLES;
32319
+ var import_react30, import_react_dom2, import_material18, import_styles51, import_Close5, import_Launch, import_CheckCircleOutlined, import_HighlightOff, import_RemoveCircleOutlined, import_jsx_runtime74, STATUS_COLOUR, TH, TD, SCORECARD_PARAMS, OPENING_LABELS, OPENING_EXPECTED, VERIFICATION_LABELS, VERIFICATION_EXPECTED, COMM_LABELS, COMM_EXPECTED, EMPATHY_LABELS, EMPATHY_EXPECTED, CALL_HANDLING_LABELS, CALL_HANDLING_EXPECTED, CLOSURE_LABELS, CLOSURE_EXPECTED, EXCLUDED_KEYS, CHECKLIST_COLS, STATIC_TABS, PRINT_ROOT_ID, PRINT_STYLES;
32318
32320
  var init_AuditReport = __esm({
32319
32321
  "call-control-sdk/lib/pages/common/components/AuditReport.tsx"() {
32320
32322
  "use strict";
@@ -32360,22 +32362,23 @@ var init_AuditReport = __esm({
32360
32362
  { key: "Process_and_Workflow_Adherence", label: "Process & Workflow Adherence", defaultMax: 20 },
32361
32363
  { key: "Resolution_Accuracy", label: "Resolution Accuracy", defaultMax: 20 },
32362
32364
  { key: "Empathy_and_Patient_Assurance", label: "Empathy & Patient Assurance", defaultMax: 10 },
32363
- { key: "Call_Handling", label: "Call Handling & Probing", defaultMax: 5 },
32365
+ { key: "Call_Handling", label: "Call Handling", defaultMax: 5 },
32364
32366
  { key: "CRM_Documentation_Alignment", label: "CRM Documentation Alignment", defaultMax: 5 },
32365
32367
  { key: "Closing_and_Customer_Education", label: "Closing & Customer Education", defaultMax: 5 }
32366
32368
  ];
32367
32369
  OPENING_LABELS = { Standard_Greeting_Used: "Standard Greeting Used", Hospital_Name_Mentioned: "Hospital Name Mentioned", Agent_Introduction_Provided: "Agent Introduction Provided", Professional_Tone_Maintained: "Professional Tone Maintained" };
32368
32370
  OPENING_EXPECTED = { 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" };
32369
- VERIFICATION_LABELS = { 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" };
32370
- VERIFICATION_EXPECTED = { 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" };
32371
+ VERIFICATION_LABELS = { 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)" };
32372
+ VERIFICATION_EXPECTED = { 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" };
32371
32373
  COMM_LABELS = { 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" };
32372
32374
  COMM_EXPECTED = { 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" };
32373
32375
  EMPATHY_LABELS = { 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" };
32374
32376
  EMPATHY_EXPECTED = { 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" };
32375
32377
  CALL_HANDLING_LABELS = { "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" };
32376
32378
  CALL_HANDLING_EXPECTED = { "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" };
32377
- CLOSURE_LABELS = { 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" };
32378
- CLOSURE_EXPECTED = { 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" };
32379
+ CLOSURE_LABELS = { Additional_Assistance_Offered: "Additional Assistance Offered", Professional_Closing_Provided: "Professional Closing Provided", "Wellness/Courtesy_Statement_Used": "Wellness/Courtesy Statement Used" };
32380
+ CLOSURE_EXPECTED = { Additional_Assistance_Offered: "Mandatory closure check", Professional_Closing_Provided: "Standard closure etiquette expected", "Wellness/Courtesy_Statement_Used": "Positive healthcare closure preferred" };
32381
+ EXCLUDED_KEYS = /* @__PURE__ */ new Set(["Patient_Data_Handling", "Recontact_Information_Shared"]);
32379
32382
  CHECKLIST_COLS = [
32380
32383
  { key: "parameter", label: "Audit Parameter", minWidth: 180 },
32381
32384
  { key: "expectedStandard", label: "Expected Standard", minWidth: 200 },