diff --git a/package-lock.json b/package-lock.json index 338de72..dfe8e82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2212,18 +2212,6 @@ "dev": true, "license": "MIT" }, - "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -2928,18 +2916,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jiti": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", - "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3030,257 +3006,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lightningcss": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", - "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", - "dev": true, - "license": "MPL-2.0", - "optional": true, - "peer": true, - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.30.1", - "lightningcss-darwin-x64": "1.30.1", - "lightningcss-freebsd-x64": "1.30.1", - "lightningcss-linux-arm-gnueabihf": "1.30.1", - "lightningcss-linux-arm64-gnu": "1.30.1", - "lightningcss-linux-arm64-musl": "1.30.1", - "lightningcss-linux-x64-gnu": "1.30.1", - "lightningcss-linux-x64-musl": "1.30.1", - "lightningcss-win32-arm64-msvc": "1.30.1", - "lightningcss-win32-x64-msvc": "1.30.1" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", - "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", - "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", - "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", - "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", - "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", - "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", - "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", - "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", - "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", - "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 6cac135..1758999 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -57,30 +57,6 @@ export default function Layout() { ClaimGuard Hospital Management - -
- {/* Notifications */} - - - {/* Quick Stats */} -
-
-

24

-

Pasien Hari Ini

-
-
-

12

-

Klaim Aktif

-
-
-

3

-

Alert

-
-
-
diff --git a/src/pages/BPJSCode.tsx b/src/pages/BPJSCode.tsx index 0496152..3e137b6 100644 --- a/src/pages/BPJSCode.tsx +++ b/src/pages/BPJSCode.tsx @@ -6,17 +6,23 @@ import { Download, Eye, Calendar, + Clock, Code, Activity, DollarSign, TrendingUp, AlertCircle, Building2, + Wand2, + ShieldCheck, + CheckCircle2, + ClipboardList, } from "lucide-react"; interface DiagnoseCode { id: string; icdCode: string; + bpjsCode: string; description: string; category: string; severity: "ringan" | "sedang" | "berat"; @@ -26,14 +32,16 @@ interface DiagnoseCode { department: string; } -interface ProcedureCode { +// removed legacy ICP-9 procedure model + +interface ICD9DiagnoseCode { id: string; - icp9Code: string; + icd9Code: string; + bpjsCode: string; description: string; category: string; - complexity: "sederhana" | "kompleks" | "sangat_kompleks"; + severity: "ringan" | "sedang" | "berat"; bpjsRate: number; - duration: number; // in minutes usageCount: number; lastUsed: string; department: string; @@ -48,12 +56,44 @@ interface CodeUsageStats { averageClaimValue: number; } +interface AssistInput { + clinicalNotes: string; + labResults: string; + procedures: string; +} + +interface RecommendedCode { + type: "ICD10" | "ICD9CM"; + code: string; + description: string; + confidence: number; + rationale: string; +} + +interface InaCbgsMapping { + group: string; + code: string; + description: string; + estTariff: number; +} + +interface AssistResult { + preprocessed: AssistInput; + recommendedCodes: RecommendedCode[]; + inaCbgs: InaCbgsMapping | null; + references: string[]; +} + export default function BPJSCode() { - const [activeTab, setActiveTab] = useState<"diagnose" | "procedure">( + const [activeTab, setActiveTab] = useState<"diagnose" | "procedure" | "assist">( "diagnose" ); const [searchTerm, setSearchTerm] = useState(""); const [categoryFilter, setCategoryFilter] = useState("all"); + const [assistInput, setAssistInput] = useState({ clinicalNotes: "", labResults: "", procedures: "" }); + const [assistLoading, setAssistLoading] = useState(false); + const [assistError, setAssistError] = useState(null); + const [assistResult, setAssistResult] = useState(null); const formatDate = (dateString: string) => { const date = new Date(dateString); @@ -74,6 +114,92 @@ export default function BPJSCode() { }).format(amount); }; + const formatDateOnly = (dateString: string) => { + const date = new Date(dateString); + return date.toLocaleDateString("id-ID", { + day: "numeric", + month: "short", + year: "numeric", + }); + }; + + const formatTimeOnly = (dateString: string) => { + const date = new Date(dateString); + return date.toLocaleTimeString("id-ID", { + hour: "2-digit", + minute: "2-digit", + }); + }; + + // Mock pipeline: preprocess -> LLM -> RAG -> INA-CBGs mapping + const preprocessInput = (input: AssistInput): AssistInput => { + const normalize = (s: string) => s.replace(/\s+/g, " ").trim(); + return { + clinicalNotes: normalize(input.clinicalNotes), + labResults: normalize(input.labResults), + procedures: normalize(input.procedures), + }; + }; + + const mockLLMRecommend = async (input: AssistInput): Promise => { + const text = `${input.clinicalNotes} ${input.labResults} ${input.procedures}`.toLowerCase(); + const recs: RecommendedCode[] = []; + if (text.includes("hipertensi") || text.includes("bp 150/95") || text.includes("tekanan darah")) { + recs.push({ type: "ICD10", code: "I10", description: "Essential (primary) hypertension", confidence: 90, rationale: "Temuan tekanan darah tinggi/hipertensi pada catatan klinis." }); + } + if (text.includes("hba1c") || text.includes("diabetes") || text.includes("glukosa puasa")) { + recs.push({ type: "ICD10", code: "E11", description: "Type 2 diabetes mellitus", confidence: 86, rationale: "Hasil lab HbA1c/glukosa dan kata kunci diabetes terdeteksi." }); + } + if (text.includes("pneumonia") || text.includes("infiltrat") || text.includes("nyeri dada batuk demam")) { + recs.push({ type: "ICD10", code: "J18.9", description: "Pneumonia, unspecified organism", confidence: 80, rationale: "Gambaran klinis/temuan imaging mendukung pneumonia." }); + } + if (text.includes("endoskopi") || text.includes("kateterisasi") || text.includes("fiksasi")) { + recs.push({ type: "ICD9CM", code: "45.13", description: "Endoskopi lambung (contoh)", confidence: 72, rationale: "Prosedur terekstrak dari tindakan/operasi." }); + } + if (recs.length === 0) { + recs.push({ type: "ICD10", code: "R69", description: "Illness, unspecified", confidence: 55, rationale: "Tidak ada sinyal kuat; butuh klarifikasi klinis." }); + } + await new Promise((r) => setTimeout(r, 500)); + return recs.sort((a, b) => b.confidence - a.confidence).slice(0, 6); + }; + + const mockRAGValidate = async (recs: RecommendedCode[]): Promise<{ validated: RecommendedCode[]; references: string[] }> => { + // Anggap melakukan pencarian ke referensi nasional (Kemenkes/BPJS) + const refs: string[] = recs.map((r) => `Ref:${r.type}:${r.code}`); + await new Promise((r) => setTimeout(r, 300)); + return { validated: recs, references: refs }; + }; + + const mockMapInaCbgs = async (recs: RecommendedCode[]): Promise => { + // Mapping sederhana contoh saja + const hasPneumonia = recs.some((r) => r.code.startsWith("J18")); + const hasDM = recs.some((r) => r.code.startsWith("E11")); + const mapping: InaCbgsMapping | null = hasPneumonia + ? { group: "Respiratory", code: "E-4-13-II", description: "Pneumonia", estTariff: 3500000 } + : hasDM + ? { group: "Endocrine", code: "E-1-10-I", description: "Diabetes Mellitus", estTariff: 2100000 } + : null; + await new Promise((r) => setTimeout(r, 300)); + return mapping; + }; + + const runAssistPipeline = async () => { + setAssistLoading(true); + setAssistError(null); + setAssistResult(null); + try { + const pre = preprocessInput(assistInput); + const llm = await mockLLMRecommend(pre); + const rag = await mockRAGValidate(llm); + const ina = await mockMapInaCbgs(rag.validated); + setAssistResult({ preprocessed: pre, recommendedCodes: rag.validated, inaCbgs: ina, references: rag.references }); + } catch (e) { + setAssistError("Gagal menjalankan Assist Coding. Coba lagi."); + } finally { + setAssistLoading(false); + } + }; + const getSeverityColor = (severity: string) => { switch (severity) { case "ringan": @@ -87,24 +213,14 @@ export default function BPJSCode() { } }; - const getComplexityColor = (complexity: string) => { - switch (complexity) { - case "sederhana": - return "bg-green-100 text-green-800"; - case "kompleks": - return "bg-yellow-100 text-yellow-800"; - case "sangat_kompleks": - return "bg-red-100 text-red-800"; - default: - return "bg-gray-100 text-gray-800"; - } - }; + // removed legacy complexity color helper (ICP-9 procedures) // Sample diagnose codes data const [diagnoseCodes] = useState([ { id: "1", icdCode: "I10", + bpjsCode: "BPJS-I10-01", description: "Hipertensi Esensial", category: "Penyakit Kardiovaskular", severity: "sedang", @@ -116,6 +232,7 @@ export default function BPJSCode() { { id: "2", icdCode: "E11", + bpjsCode: "BPJS-E11-02", description: "Diabetes Mellitus Tipe 2", category: "Penyakit Endokrin", severity: "sedang", @@ -127,6 +244,7 @@ export default function BPJSCode() { { id: "3", icdCode: "J18.9", + bpjsCode: "BPJS-J18-03", description: "Pneumonia", category: "Penyakit Pernafasan", severity: "berat", @@ -138,6 +256,7 @@ export default function BPJSCode() { { id: "4", icdCode: "K29.1", + bpjsCode: "BPJS-K29-04", description: "Gastritis Akut", category: "Penyakit Pencernaan", severity: "ringan", @@ -149,6 +268,7 @@ export default function BPJSCode() { { id: "5", icdCode: "S52.5", + bpjsCode: "BPJS-S52-05", description: "Fraktur Radius", category: "Cedera dan Keracunan", severity: "berat", @@ -160,86 +280,86 @@ export default function BPJSCode() { ]); // Sample procedure codes data - const [procedureCodes] = useState([ + const [icd9DiagnoseCodes] = useState([ { id: "1", - icp9Code: "99.04", - description: "Transfusi Darah", - category: "Prosedur Hematologi", - complexity: "sederhana", - bpjsRate: 450000, - duration: 120, - usageCount: 89, + icd9Code: "250.00", + bpjsCode: "BPJS-250-00", + description: "Diabetes mellitus tanpa komplikasi", + category: "Penyakit Endokrin", + severity: "sedang", + bpjsRate: 950000, + usageCount: 132, lastUsed: "2024-01-15T13:20:00Z", - department: "IGD", + department: "Poli Endokrin", }, { id: "2", - icp9Code: "36.10", - description: "Kateterisasi Jantung", - category: "Prosedur Kardiovaskular", - complexity: "sangat_kompleks", - bpjsRate: 8500000, - duration: 180, - usageCount: 23, + icd9Code: "486", + bpjsCode: "BPJS-486-00", + description: "Pneumonia, organisme tidak spesifik", + category: "Penyakit Pernafasan", + severity: "berat", + bpjsRate: 2700000, + usageCount: 58, lastUsed: "2024-01-14T08:45:00Z", - department: "Kardiologi", + department: "Poli Paru", }, { id: "3", - icp9Code: "79.35", - description: "Open Reduction Fraktur", - category: "Prosedur Ortopedi", - complexity: "kompleks", - bpjsRate: 5200000, - duration: 240, - usageCount: 45, + icd9Code: "401.9", + bpjsCode: "BPJS-401-90", + description: "Hipertensi esensial, tidak spesifik", + category: "Penyakit Kardiovaskular", + severity: "sedang", + bpjsRate: 780000, + usageCount: 120, lastUsed: "2024-01-13T14:15:00Z", - department: "Ortopedi", + department: "Poli Dalam", }, { id: "4", - icp9Code: "45.13", - description: "Endoskopi Lambung", - category: "Prosedur Pencernaan", - complexity: "kompleks", - bpjsRate: 1800000, - duration: 45, - usageCount: 67, + icd9Code: "530.81", + bpjsCode: "BPJS-530-81", + description: "Penyakit refluks gastroesofageal", + category: "Penyakit Pencernaan", + severity: "ringan", + bpjsRate: 620000, + usageCount: 93, lastUsed: "2024-01-12T10:30:00Z", department: "Gastroenterologi", }, { id: "5", - icp9Code: "87.44", - description: "CT Scan Thorax", - category: "Prosedur Radiologi", - complexity: "sederhana", - bpjsRate: 750000, - duration: 30, - usageCount: 156, + icd9Code: "813.42", + bpjsCode: "BPJS-813-42", + description: "Fraktur tertutup radius distal", + category: "Cedera dan Keracunan", + severity: "berat", + bpjsRate: 3400000, + usageCount: 27, lastUsed: "2024-01-15T16:45:00Z", - department: "Radiologi", + department: "Ortopedi", }, ]); // Calculate statistics const stats: CodeUsageStats = { totalDiagnoses: diagnoseCodes.length, - totalProcedures: procedureCodes.length, + totalProcedures: icd9DiagnoseCodes.length, totalRevenue: diagnoseCodes.reduce((sum, d) => sum + d.bpjsRate * d.usageCount, 0) + - procedureCodes.reduce((sum, p) => sum + p.bpjsRate * p.usageCount, 0), + icd9DiagnoseCodes.reduce((sum, p) => sum + p.bpjsRate * p.usageCount, 0), mostUsedDiagnose: diagnoseCodes.sort((a, b) => b.usageCount - a.usageCount)[0]?.icdCode || "", mostUsedProcedure: - procedureCodes.sort((a, b) => b.usageCount - a.usageCount)[0]?.icp9Code || + icd9DiagnoseCodes.sort((a, b) => b.usageCount - a.usageCount)[0]?.icd9Code || "", averageClaimValue: (diagnoseCodes.reduce((sum, d) => sum + d.bpjsRate, 0) + - procedureCodes.reduce((sum, p) => sum + p.bpjsRate, 0)) / - (diagnoseCodes.length + procedureCodes.length), + icd9DiagnoseCodes.reduce((sum, p) => sum + p.bpjsRate, 0)) / + (diagnoseCodes.length + icd9DiagnoseCodes.length), }; // Filter data based on search and category @@ -255,9 +375,9 @@ export default function BPJSCode() { return matchesSearch && matchesCategory; }); - const filteredProcedureCodes = procedureCodes.filter((code) => { + const filteredICD9DiagnoseCodes = icd9DiagnoseCodes.filter((code) => { const matchesSearch = - code.icp9Code.toLowerCase().includes(searchTerm.toLowerCase()) || + code.icd9Code.toLowerCase().includes(searchTerm.toLowerCase()) || code.description.toLowerCase().includes(searchTerm.toLowerCase()) || code.category.toLowerCase().includes(searchTerm.toLowerCase()); @@ -389,78 +509,123 @@ export default function BPJSCode() { >
- Kode Prosedur (ICP-9) + Kode Diagnosis (ICD-9) +
+ + - {/* Filters and Search */} -
-
-
-
- - setSearchTerm(e.target.value)} - className="pl-9 pr-4 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-purple-500 focus:border-transparent w-80" - /> -
-
- - + {/* Filters and Search or Assist Input */} + {activeTab !== "assist" ? ( +
+
+
+
+ + setSearchTerm(e.target.value)} + className="pl-9 pr-4 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-purple-500 focus:border-transparent w-80" + /> +
+
+ + +
-
+ ) : ( +
+
+
+ +