fix revision hide menu and test case

This commit is contained in:
arifal
2025-08-14 21:58:28 +07:00
parent d16934d7e4
commit 4091307e74
5 changed files with 1991 additions and 1938 deletions

View File

@@ -6,8 +6,8 @@ import {
FileText, FileText,
ChevronLeft, ChevronLeft,
ChevronRight, ChevronRight,
UserCog, // UserCog,
Lock, // Lock,
Database, Database,
Shield, Shield,
TrendingUp, TrendingUp,
@@ -77,23 +77,23 @@ export default function Sidebar({
}, },
], ],
}, },
{ // {
title: "Administrasi Sistem", // title: "Administrasi Sistem",
icon: UserCog, // icon: UserCog,
color: "text-blue-600", // color: "text-blue-600",
submenu: [ // submenu: [
{ // {
title: "Pengguna", // title: "Pengguna",
icon: Users, // icon: Users,
path: "/system-administration/user", // path: "/system-administration/user",
}, // },
{ // {
title: "Peran", // title: "Peran",
icon: Lock, // icon: Lock,
path: "/system-administration/role", // path: "/system-administration/role",
}, // },
], // ],
}, // },
]; ];
const [expandedMenu, setExpandedMenu] = useState<string | null>(null); const [expandedMenu, setExpandedMenu] = useState<string | null>(null);

View File

@@ -72,7 +72,7 @@ export default function Dashboard() {
</div> </div>
{/* Alert/Warning Section */} {/* Alert/Warning Section */}
<div className="bg-white rounded-lg shadow-sm border mb-6 p-4"> <div className="bg-white rounded-lg shadow-sm border mb-6 p-4 hidden">
<div className="flex items-center justify-between mb-4"> <div className="flex items-center justify-between mb-4">
<h3 className="text-lg font-semibold text-gray-900 flex items-center"> <h3 className="text-lg font-semibold text-gray-900 flex items-center">
<Bell className="h-5 w-5 text-red-500 mr-2" /> <Bell className="h-5 w-5 text-red-500 mr-2" />
@@ -150,7 +150,7 @@ export default function Dashboard() {
</div> </div>
{/* Stats Grid */} {/* Stats Grid */}
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8"> <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8 hidden">
{stats.map((stat, index) => ( {stats.map((stat, index) => (
<div key={index} className="card p-6"> <div key={index} className="card p-6">
<div className="flex items-center justify-between mb-4"> <div className="flex items-center justify-between mb-4">
@@ -175,7 +175,7 @@ export default function Dashboard() {
</div> </div>
{/* Main Grid */} {/* Main Grid */}
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6"> <div className="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6 hidden">
{/* BPJS Operations */} {/* BPJS Operations */}
<div className="card p-6"> <div className="card p-6">
<div className="flex items-center justify-between mb-6"> <div className="flex items-center justify-between mb-6">
@@ -320,7 +320,7 @@ export default function Dashboard() {
</div> </div>
{/* Second Row */} {/* Second Row */}
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6"> <div className="grid grid-cols-1 lg:grid-cols-2 gap-6 hidden">
{/* ICD Recommendations & Cost */} {/* ICD Recommendations & Cost */}
<div className="card p-6"> <div className="card p-6">
<div className="flex items-center justify-between mb-6"> <div className="flex items-center justify-between mb-6">

View File

@@ -221,14 +221,33 @@ export default function Administrative() {
setSearchResults(null); setSearchResults(null);
setTimeout(() => { setTimeout(() => {
const query = searchQuery.toLowerCase(); const query = searchQuery.toLowerCase().trim();
const foundPatient = mockAdministrativeData.find(
(patient) => if (!query) {
patient.name.toLowerCase().includes(query) || setSearchResults(null);
patient.medicalRecordNumber.toLowerCase().includes(query) || setIsSearching(false);
patient.bpjsNumber.includes(query) return;
}
const foundPatient = mockAdministrativeData.find((patient) => {
// Normalize patient data to lowercase for case-insensitive search
const patientName = patient.name.toLowerCase();
const patientMRN = patient.medicalRecordNumber.toLowerCase();
const patientBPJS = patient.bpjsNumber.toLowerCase();
// For name search, check if all words in query exist in patient name
const queryWords = query.split(/\s+/).filter((word) => word.length > 0);
const nameMatch = queryWords.every((word) =>
patientName.includes(word)
); );
// For MRN and BPJS, use simple includes
const mrnMatch = patientMRN.includes(query);
const bpjsMatch = patientBPJS.includes(query);
return nameMatch || mrnMatch || bpjsMatch;
});
if (foundPatient) { if (foundPatient) {
// Further filter by birth date if provided // Further filter by birth date if provided
if (birthDate) { if (birthDate) {

View File

@@ -10,7 +10,6 @@ import {
interface AssistInput { interface AssistInput {
clinicalNotes: string; clinicalNotes: string;
labResults: string;
procedures: string; procedures: string;
} }
@@ -41,7 +40,6 @@ interface AssistResult {
export default function BPJSCodeification() { export default function BPJSCodeification() {
const [assistInput, setAssistInput] = useState<AssistInput>({ const [assistInput, setAssistInput] = useState<AssistInput>({
clinicalNotes: "", clinicalNotes: "",
labResults: "",
procedures: "", procedures: "",
}); });
const [assistLoading, setAssistLoading] = useState(false); const [assistLoading, setAssistLoading] = useState(false);
@@ -60,7 +58,6 @@ export default function BPJSCodeification() {
const normalize = (s: string) => s.replace(/\s+/g, " ").trim(); const normalize = (s: string) => s.replace(/\s+/g, " ").trim();
return { return {
clinicalNotes: normalize(input.clinicalNotes), clinicalNotes: normalize(input.clinicalNotes),
labResults: normalize(input.labResults),
procedures: normalize(input.procedures), procedures: normalize(input.procedures),
}; };
}; };
@@ -68,8 +65,7 @@ export default function BPJSCodeification() {
const mockAssistPipeline = async ( const mockAssistPipeline = async (
input: AssistInput input: AssistInput
): Promise<AssistResult> => { ): Promise<AssistResult> => {
const text = const text = `${input.clinicalNotes} ${input.procedures}`.toLowerCase();
`${input.clinicalNotes} ${input.labResults} ${input.procedures}`.toLowerCase();
const icd10Codes: ICD10Code[] = []; const icd10Codes: ICD10Code[] = [];
const procedureCodes: ProcedureCode[] = []; const procedureCodes: ProcedureCode[] = [];
@@ -349,23 +345,7 @@ export default function BPJSCodeification() {
className="w-full rounded-md border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent p-3" className="w-full rounded-md border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent p-3"
/> />
</div> </div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-1">
Hasil Laboratorium
</label>
<textarea
rows={3}
value={assistInput.labResults}
onChange={(e) =>
setAssistInput((s) => ({
...s,
labResults: e.target.value,
}))
}
placeholder="Leukosit: 15.000/µL, CRP: 25 mg/L, HbA1c: 7.8%, Glukosa Puasa: 180 mg/dL..."
className="w-full rounded-md border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent p-3"
/>
</div>
<div> <div>
<label className="block text-sm font-medium text-gray-700 mb-1"> <label className="block text-sm font-medium text-gray-700 mb-1">
Tindakan / Prosedur yang Dilakukan Tindakan / Prosedur yang Dilakukan
@@ -388,9 +368,7 @@ export default function BPJSCodeification() {
onClick={runAssistPipeline} onClick={runAssistPipeline}
disabled={ disabled={
assistLoading || assistLoading ||
(!assistInput.clinicalNotes && (!assistInput.clinicalNotes && !assistInput.procedures)
!assistInput.labResults &&
!assistInput.procedures)
} }
className="flex items-center space-x-2 disabled:opacity-60 bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg disabled:cursor-not-allowed" className="flex items-center space-x-2 disabled:opacity-60 bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg disabled:cursor-not-allowed"
> >

View File

@@ -6,94 +6,201 @@
DAFTAR ISI: DAFTAR ISI:
1. Clinical.tsx - Test Cases (Rekam Medis Klinis) 1. Clinical.tsx - Test Cases (Rekam Medis Klinis)
2. Administrative.tsx - Test Cases (Rekam Medis Administratif) 2. Administrative.tsx - Test Cases (Rekam Medis Administratif)
3. CostRecommendation.tsx - Test Cases (Rekomendasi Biaya) 3. BPJSCodeification.tsx - Test Cases (Asisten Kodefikasi BPJS)
4. BPJSCodeification.tsx - Test Cases (Kodefikasi BPJS) 4. CostRecommendation.tsx - Test Cases (Rekomendasi Biaya)
5. Instruksi Penggunaan Test Cases 5. Sample Data untuk Testing
6. Instruksi Penggunaan Test Cases
================================================================================ ================================================================================
1. CLINICAL.TSX - TEST CASES (REKAM MEDIS KLINIS) 1. CLINICAL.TSX - TEST CASES (REKAM MEDIS KLINIS)
================================================================================ ================================================================================
TEST CASE 1: PENCARIAN PASIEN LENGKAP SCHEMA PENCARIAN:
===================================== - Input tunggal: Nama Pasien / Nomor Rekam Medis / Nomor BPJS
- Tanggal Lahir (Opsional)
- Pencarian fleksibel dengan word matching
TEST CASE 1: PENCARIAN NAMA LENGKAP
==================================
Input Form: Input Form:
- Nama/Nomor RM/BPJS: Ahmad Budi Santoso - Nama/No. RM/No. BPJS: John Doe
- Tanggal Lahir: 15 Januari 1985 - Tanggal Lahir: 15 Juni 1985
Expected Result: Expected Result:
Menampilkan rekam medis lengkap dengan identitas pasien, riwayat medis, Menampilkan rekam medis lengkap dengan:
pemeriksaan fisik, diagnosis, rencana pengobatan, dan dokumen medis. - Identitas pasien (John Doe, MR2024001, BPJS: 0001234567890)
- Riwayat medis (Hipertensi 2020, Diabetes 2021)
- Pemeriksaan fisik dengan tanda vital
- Diagnosis ICD-10 (Unstable Angina - I20.0)
- Rencana pengobatan dan dokumen medis
TEST CASE 2: PENCARIAN DENGAN NOMOR REKAM MEDIS TEST CASE 2: PENCARIAN NAMA PARSIAL (WORD MATCHING)
==================================================
Input Form:
- Nama/No. RM/No. BPJS: john
- Tanggal Lahir: (kosong)
Expected Result:
Pasien "John Doe" ditemukan meskipun hanya input "john"
TEST CASE 3: PENCARIAN DENGAN NOMOR REKAM MEDIS
=============================================== ===============================================
Input Form: Input Form:
- Nama/Nomor RM/BPJS: MRN2024001 - Nama/No. RM/No. BPJS: MR2024001
- Tanggal Lahir: (kosong) - Tanggal Lahir: (kosong)
Expected Result: Expected Result:
Pasien ditemukan berdasarkan nomor rekam medis dengan data klinis lengkap. Pasien John Doe ditemukan berdasarkan nomor rekam medis
TEST CASE 3: PENCARIAN DENGAN NOMOR BPJS TEST CASE 4: PENCARIAN DENGAN NOMOR BPJS
========================================= ========================================
Input Form: Input Form:
- Nama/Nomor RM/BPJS: 000987654321 - Nama/No. RM/No. BPJS: 0001234567890
- Tanggal Lahir: 12 April 1985
Expected Result:
Verifikasi pasien dengan nomor BPJS dan tanggal lahir yang sesuai.
TEST CASE 4: PENCARIAN NAMA PARSIAL
===================================
Input Form:
- Nama/Nomor RM/BPJS: Sari
- Tanggal Lahir: (kosong) - Tanggal Lahir: (kosong)
Expected Result: Expected Result:
Hasil pencarian untuk pasien dengan nama yang mengandung "Sari". Pasien John Doe ditemukan berdasarkan nomor BPJS
TEST CASE 5: PENCARIAN CASE INSENSITIVE
======================================
Input Form:
- Nama/No. RM/No. BPJS: JOHN DOE
- Tanggal Lahir: (kosong)
Expected Result:
Pasien ditemukan meskipun menggunakan huruf kapital
================================================================================ ================================================================================
2. ADMINISTRATIVE.TSX - TEST CASES (REKAM MEDIS ADMINISTRATIF) 2. ADMINISTRATIVE.TSX - TEST CASES (REKAM MEDIS ADMINISTRATIF)
================================================================================ ================================================================================
TEST CASE 1: PENCARIAN PASIEN AKTIF SCHEMA PENCARIAN:
=================================== - Input tunggal: Nama Pasien, No. RM, atau No. BPJS
- Tanggal Lahir (Opsional)
- Flexible word matching untuk nama
TEST CASE 1: PENCARIAN PASIEN DENGAN STATUS APPROVED
====================================================
Input Form: Input Form:
- Nama/Nomor RM/BPJS: Siti Nurhaliza - Nama/No. RM/No. BPJS: Ahmad Budi Santoso
- Tanggal Lahir: 25 Juli 1990 - Tanggal Lahir: 10 Mei 1985
Expected Result: Expected Result:
Detail administratif menampilkan status klaim aktif, informasi pembayaran, Menampilkan data administratif:
dan riwayat kunjungan. - Nama: Ahmad Budi Santoso
- MRN: MRN2024001, BPJS: 0001234567890
- Status Klaim: Disetujui (hijau)
- Status Pembayaran: Lunas (hijau)
- Total Biaya: Rp 2.500.000
- Rawat Jalan di Poli Penyakit Dalam
TEST CASE 2: PENCARIAN PASIEN BPJS TEST CASE 2: PENCARIAN DENGAN NAMA PARSIAL
================================== ==========================================
Input Form: Input Form:
- Nama/Nomor RM/BPJS: 000123456789 - Nama/No. RM/No. BPJS: ahmad santoso
- Tanggal Lahir: (kosong) - Tanggal Lahir: (kosong)
Expected Result: Expected Result:
Data administratif pasien dengan status klaim BPJS dan detail pembayaran. Menemukan "Ahmad Budi Santoso" dengan flexible matching
TEST CASE 3: PASIEN KUNJUNGAN TERBARU TEST CASE 3: PENCARIAN PASIEN UNDER REVIEW
===================================== ==========================================
Input Form: Input Form:
- Nama/Nomor RM/BPJS: MRN2024002 - Nama/No. RM/No. BPJS: Siti Aminah
- Tanggal Lahir: 10 September 1978
Expected Result:
Pasien dengan kunjungan terbaru menampilkan status proses klaim saat ini.
TEST CASE 4: PASIEN DENGAN MULTIPLE KLAIM
=========================================
Input Form:
- Nama/Nomor RM/BPJS: Bambang Sutrisno
- Tanggal Lahir: (kosong) - Tanggal Lahir: (kosong)
Expected Result: Expected Result:
Pasien dengan beberapa klaim dan riwayat pembayaran. Menampilkan pasien dengan:
- Status Klaim: Sedang Ditinjau (biru)
- Status Pembayaran: Menunggu (kuning)
- Total Biaya: Rp 1.800.000
- Sisa Tagihan: Rp 1.800.000
TEST CASE 4: PENCARIAN PASIEN INPATIENT
=======================================
Input Form:
- Nama/No. RM/No. BPJS: Roberto Silva
- Tanggal Lahir: (kosong)
Expected Result:
Menampilkan pasien dengan:
- Rawat Inap - Kelas 2
- Status Pembayaran: Sebagian (orange)
- IGD Emergency case
================================================================================ ================================================================================
3. COSTRECOMMENDATION.TSX - TEST CASES (REKOMENDASI BIAYA) 3. BPJSCODIFICATION.TSX - TEST CASES (ASISTEN KODEFIKASI BPJS)
================================================================================
SCHEMA INPUT (UPDATED):
- Catatan Medis / Anamnesis (textarea)
- Tindakan / Prosedur yang Dilakukan (input)
- TIDAK ADA input Hasil Laboratorium (sudah dihapus)
TEST CASE 1: KASUS PNEUMONIA
============================
Input Form:
Catatan Medis / Anamnesis:
Pasien mengeluh demam sejak 3 hari, batuk berdahak, sesak napas, nyeri dada.
Pemeriksaan fisik ditemukan suara napas menurun di basal kanan. Pasien tampak sesak.
Tindakan / Prosedur:
Rontgen thorax, darah lengkap
Expected Result:
- ICD-10: J18.9 - Pneumonia dengan kuman tidak spesifik
- Prosedur: 87.44 - Foto Rontgen thorax, 90.59 - Pemeriksaan darah lengkap
- INA-CBG: B-4-13-I - Pneumonia tanpa komplikasi (Rp 3.500.000)
TEST CASE 2: KASUS DIABETES + HIPERTENSI
========================================
Input Form:
Catatan Medis / Anamnesis:
Pasien dengan riwayat diabetes mellitus dan hipertensi datang untuk kontrol rutin.
Keluhan poliuria, polidipsia. Tekanan darah tinggi 150/95 mmHg. Kadar gula darah tinggi.
Tindakan / Prosedur:
EKG, pemeriksaan HbA1c
Expected Result:
- ICD-10: E11.9 - Diabetes mellitus tipe 2, I10 - Hipertensi esensial
- Prosedur: 89.52 - Elektrokardiogram
- INA-CBG: E-4-10-I - Diabetes Mellitus tanpa komplikasi (Rp 2.100.000)
TEST CASE 3: KASUS GASTRITIS
============================
Input Form:
Catatan Medis / Anamnesis:
Pasien mengeluh nyeri perut, mual, muntah sejak kemarin. Nyeri seperti terbakar di ulu hati.
Tindakan / Prosedur:
Endoskopi lambung
Expected Result:
- ICD-10: K29.1 - Gastritis akut lainnya
- Prosedur: 45.13 - Esofagogastroduodenoskopi (EGD)
- INA-CBG: G-4-10-I - Gastritis akut tanpa komplikasi (Rp 1.200.000)
TEST CASE 4: KASUS TIDAK SPESIFIK
=================================
Input Form:
Catatan Medis / Anamnesis:
Pasien datang dengan keluhan umum tidak jelas
Tindakan / Prosedur:
Pemeriksaan rutin
Expected Result:
- ICD-10: R69 - Penyakit tidak spesifik
- Prosedur: 99213 - Kunjungan rawat jalan
- INA-CBG: Z-4-00-I - Kondisi tidak spesifik (Rp 750.000)
================================================================================
4. COSTRECOMMENDATION.TSX - TEST CASES (REKOMENDASI BIAYA)
================================================================================ ================================================================================
TEST CASE 1: KASUS DEMAM BERDARAH DENGUE TEST CASE 1: KASUS DEMAM BERDARAH DENGUE
@@ -118,8 +225,8 @@ Expected Result:
Analisis AI menunjukkan peringatan potensi overclaim untuk transfusi Analisis AI menunjukkan peringatan potensi overclaim untuk transfusi
dengan Hb > 7 g/dL threshold. dengan Hb > 7 g/dL threshold.
TEST CASE 2: KASUS PNEUMONIA TEST CASE 2: KASUS PNEUMONIA COMMUNITY
============================ ======================================
Input Form: Input Form:
Diagnosis Klinis: Diagnosis Klinis:
@@ -138,204 +245,153 @@ Tanggal Kunjungan Terakhir: 15 Agustus 2024
Expected Result: Expected Result:
Analisis biaya dengan koding ICD-10 yang tepat dan rekomendasi pengobatan. Analisis biaya dengan koding ICD-10 yang tepat dan rekomendasi pengobatan.
TEST CASE 3: KASUS DIABETES FOLLOW-UP
=====================================
Input Form:
Diagnosis Klinis:
Pasien laki-laki 55 tahun dengan diabetes mellitus tipe 2 kontrol
rutin. Keluhan poliuria, polidipsia ringan. GDS 180 mg/dL,
HbA1c 8.2%. TD 140/90 mmHg. Kaki: tidak ada ulkus, sensasi normal.
Prosedur/Tindakan:
Pemeriksaan HbA1c, GDS, urinalisis, konsultasi gizi,
edukasi diabetes, penyesuaian dosis metformin, kontrol rutin 1 bulan.
Tanggal Kunjungan Terakhir: 5 September 2024
Expected Result:
Peringatan interval kontrol untuk kunjungan dalam 30 hari,
koding manajemen diabetes yang tepat.
================================================================================ ================================================================================
4. BPJSCODIFICATION.TSX - TEST CASES (KODEFIKASI BPJS) 5. SAMPLE DATA UNTUK TESTING
================================================================================ ================================================================================
TEST CASE 1: KASUS EMERGENCY - APPENDICITIS AKUT CLINICAL PAGE - MOCK DATA:
================================================ =========================
Input Form: Patient Identity:
- Name: John Doe
- Medical Record Number: MR2024001
- BPJS Number: 0001234567890
- Birth Date: 1985-06-15
- Gender: Male
- Blood Type: O+
- Address: Jl. Sudirman No. 123, Jakarta Pusat
Keluhan Pasien: Medical History:
Nyeri perut kanan bawah sejak 12 jam yang lalu, mula-mula nyeri - Previous Diseases: Hypertension (2020), Diabetes Mellitus Type 2 (2021)
di epigastrium kemudian berpindah ke fossa iliaka dextra. - Allergies: Penicillin, Shellfish
Disertai mual, muntah 2x, demam subfebris. - Current Medications: Metformin 500mg, Lisinopril 10mg
Pemeriksaan Fisik: Primary Diagnosis: Unstable Angina (I20.0)
TD 110/70 mmHg, nadi 88x/menit, suhu 37.8°C. Abdomen: Secondary: Essential Hypertension (I10), Type 2 Diabetes (E11.9)
McBurney sign (+), Rovsing sign (+), defans muskuler (+)
regio iliaka dextra. Bising usus normal.
Pemeriksaan Penunjang: ADMINISTRATIVE PAGE - MOCK DATA:
Leukosit 12.500/μL dengan shift to left, USG abdomen: ===============================
appendix menebal dengan fluid collection, foto polos Patient 1:
abdomen dalam batas normal. - Name: Ahmad Budi Santoso
- Birth Date: 1985-05-10
- MRN: MRN2024001
- BPJS: 0001234567890
- Claim Status: approved
- Payment Status: paid
- Total Cost: 2,500,000
- Admission Type: outpatient
Diagnosis: Acute appendicitis Patient 2:
- Name: Siti Aminah
- Birth Date: 1990-11-22
- MRN: MRN2024002
- BPJS: 0009876543210
- Claim Status: under_review
- Payment Status: pending
- Total Cost: 1,800,000
- Admission Type: outpatient
Tindakan: Appendectomy laparoscopic Patient 3:
- Name: Roberto Silva
- Birth Date: 1978-03-15
- MRN: MRN2024003
- BPJS: 0003456789012
- Claim Status: pending
- Payment Status: partial
- Total Cost: 5,200,000
- Admission Type: inpatient
- Room Class: Kelas 2
Expected Result: BPJS CODIFICATION - DETECTION KEYWORDS:
ICD-10 K35.9, kode prosedur untuk laparoscopic appendectomy, ======================================
mapping INA-CBG dengan tarif bedah. Pneumonia Keywords: pneumonia, infiltrat, demam, batuk, sesak
→ ICD-10: J18.9, INA-CBG: B-4-13-I (Rp 3.500.000)
TEST CASE 2: KASUS MEDIS - KRISIS HIPERTENSI Hypertension Keywords: hipertensi, bp 150/95, tekanan darah tinggi
============================================ → ICD-10: I10, INA-CBG: F-4-13-II (Rp 1.850.000)
Input Form:
Keluhan Pasien: Diabetes Keywords: diabetes, hba1c, glukosa, gula darah
Nyeri kepala hebat sejak pagi, pandangan kabur, mual muntah. → ICD-10: E11.9, INA-CBG: E-4-10-I (Rp 2.100.000)
Pasien memiliki riwayat hipertensi tidak terkontrol,
tidak rutin minum obat.
Pemeriksaan Fisik: Gastritis Keywords: gastritis, nyeri perut, mual, muntah
Kesadaran compos mentis, TD 220/120 mmHg, nadi 95x/menit → ICD-10: K29.1, INA-CBG: G-4-10-I (Rp 1.200.000)
reguler, RR 20x/menit. Funduskopi: perdarahan retina (+),
papil edema (+). JVP tidak meningkat.
Pemeriksaan Penunjang: Procedure Keywords:
EKG: LVH dengan strain pattern, urinalisis: proteinuria +2, - rontgen, x-ray → 87.44 Foto Rontgen thorax
kreatinin 1.8 mg/dL, troponin negatif. Foto thorax: - darah lengkap, cbc → 90.59 Pemeriksaan darah lengkap
kardiomegali dengan pulmonary edema. - endoskopi → 45.13 Esofagogastroduodenoskopi
- ekg, ecg → 89.52 Elektrokardiogram
Diagnosis: Hypertensive emergency with target organ damage - usg, ultrasound → 88.76 USG abdomen
Tindakan: IV antihypertensive therapy, cardiac monitoring
Expected Result:
ICD-10 I16.1, kode prosedur untuk monitoring intensif,
INA-CBG untuk emergency hipertensi.
TEST CASE 3: KASUS OBSTETRIK - PERSALINAN NORMAL
================================================
Input Form:
Keluhan Pasien:
G2P1A0 usia kehamilan 39 minggu datang dengan keluhan
kontraksi uterus teratur sejak 6 jam yang lalu,
keluar lendir bercampur darah.
Pemeriksaan Fisik:
TD 120/80 mmHg, nadi 80x/menit, kontraksi uterus 3x/10 menit
lamanya 40 detik. VT: pembukaan 6 cm, ketuban (+),
presentasi kepala, hodge II.
Pemeriksaan Penunjang:
CTG: reactive, variabilitas baik, tidak ada deselerasi.
Hb 11.5 g/dL, golongan darah O Rh+, HbsAg non-reaktif,
VDRL non-reaktif.
Diagnosis: Term pregnancy in labor, vertex presentation
Tindakan: Spontaneous vaginal delivery, episiotomy
Expected Result:
ICD-10 O80, kode prosedur untuk persalinan dan episiotomy,
paket INA-CBG maternal.
TEST CASE 4: KASUS PEDIATRIK - BRONKIOLITIS
===========================================
Input Form:
Keluhan Pasien:
Bayi laki-laki 8 bulan dibawa orangtua dengan keluhan
sesak napas sejak 2 hari, batuk, demam ringan.
Riwayat pilek pada kakak 1 minggu sebelumnya.
Pemeriksaan Fisik:
BB 8 kg, suhu 37.5°C, RR 50x/menit, retraksi intercostal (+),
wheezing ekspirasi (+) bilateral, ronki basah halus (+).
SpO2 94% udara bebas.
Pemeriksaan Penunjang:
Foto thorax: hiperinflasi bilateral, peribronchial thickening.
Rapid test RSV positif. Leukosit 8.500/μL,
analisa gas darah normal.
Diagnosis: Acute bronchiolitis due to RSV
Tindakan: Oxygen therapy, bronchodilator nebulization, supportive care
Expected Result:
ICD-10 J21.0, kode prosedur untuk respiratory support,
tarif INA-CBG pediatrik.
================================================================================ ================================================================================
5. INSTRUKSI PENGGUNAAN TEST CASES 6. INSTRUKSI PENGGUNAAN TEST CASES
================================================================================ ================================================================================
PERUBAHAN SCHEMA TERBARU:
========================
1. ADMINISTRATIVE.TSX:
✅ Input tunggal untuk Nama/MRN/BPJS (bukan 3 field terpisah)
✅ Flexible word matching untuk nama (ahmad santoso → Ahmad Budi Santoso)
✅ Case insensitive search
✅ Dapat mencari dengan kata parsial
2. BPJSCODIFICATION.TSX:
✅ DIHAPUS: Input "Hasil Laboratorium"
✅ Hanya 2 input: Catatan Medis + Prosedur
✅ Interface lebih sederhana
3. CLINICAL.TSX:
✅ Tetap sama dengan pencarian fleksibel
CARA MELAKUKAN TESTING: CARA MELAKUKAN TESTING:
======================= =======================
1. CLINICAL.TSX: 1. CLINICAL.TSX:
- Masukkan data pasien sesuai test case - Input: "john" → Harus menemukan "John Doe"
- Klik tombol "Cari Rekam Medis" - Input: "MR2024001" → Harus menemukan pasien
- Verifikasi tampilan rekam medis lengkap - Input: "0001234567890" → Harus menemukan via BPJS
2. ADMINISTRATIVE.TSX: 2. ADMINISTRATIVE.TSX:
- Input data pasien - Input: "ahmad santoso" → Harus menemukan "Ahmad Budi Santoso"
- Klik tombol "Cari Rekam Medis" - Input: "siti" → Harus menemukan "Siti Aminah"
- Periksa informasi billing/klaim status - Input: "MRN2024001" → Harus menemukan via MRN
- Verifikasi flexible word matching
3. COSTRECOMMENDATION.TSX: 3. BPJSCODIFICATION.TSX:
- Masukkan diagnosis klinis (copy paste dari test case) - Hanya isi 2 field (bukan 3)
- Masukkan prosedur/tindakan - Test dengan keyword: "pneumonia, batuk, sesak"
- Pilih tanggal kunjungan terakhir - Prosedur: "rontgen thorax"
- Klik "Analisis Rekomendasi" - Verifikasi ICD-10 dan tarif yang benar
- Verifikasi analisis AI dan deteksi overclaim
4. BPJSCODIFICATION.TSX: 4. COSTRECOMMENDATION.TSX:
- Input data klinis lengkap sesuai test case - Copy paste diagnosis klinis lengkap
- Klik tombol untuk generate koding - Isi prosedur/tindakan
- Periksa hasil ICD-10, prosedur, dan mapping INA-CBG - Pilih tanggal kunjungan
- Verifikasi analisis AI
PERILAKU YANG DIHARAPKAN: TESTING CHECKLIST:
======================== ==================
✓ Search dengan nama parsial berhasil
✓ Search case insensitive berfungsi
✓ BPJS Codification hanya 2 input field
✓ Word matching fleksibel (ahmad santoso → Ahmad Budi Santoso)
✓ Loading spinner tampil
✓ Error handling untuk data tidak ditemukan
✓ Format mata uang Indonesia (Rp)
✓ Responsive di mobile dan desktop
✓ Konsistensi warna dan UI
✓ Loading Spinner: Tampil saat proses pencarian/analisis EXPECTED BEHAVIOR:
✓ Hasil Lengkap: Informasi pasien/analisis yang komprehensif ==================
Error Handling: Pesan yang tepat jika tidak ada hasil Pencarian TIDAK mengembalikan "tidak ada data" jika input valid
✓ Format Tanggal: Format Indonesia di seluruh aplikasi ✓ Flexible matching untuk nama dengan urutan kata berbeda
Status Tombol: Disabled/enabled yang tepat Interface yang sederhana dan user-friendly
Responsive: Berfungsi di berbagai ukuran layar Performance yang responsif
Bahasa Indonesia: Semua text dalam bahasa Indonesia Data yang konsisten dan realistis
✓ Tema Biru-Putih: Konsistensi warna tombol
COVERAGE TESTING:
================
✓ Kasus Emergency (Appendicitis)
✓ Kasus Medis (Hipertensi, Pneumonia, Diabetes)
✓ Kasus Bedah (Appendectomy)
✓ Kasus Obstetrik (Persalinan Normal)
✓ Kasus Pediatrik (Bronkiolitis)
✓ Pencarian Nama, Nomor RM, BPJS
✓ Analisis Biaya dan Overclaim
✓ Kodefikasi ICD-10 dan INA-CBG
================================================================================ ================================================================================
CATATAN PENTING: UPDATED: Desember 2024
================================================================================ VERSION: 2.0
CHANGES: Updated schema for unified search input and removed lab results field
1. Semua test case menggunakan data medis yang realistis
2. Format tanggal menggunakan bahasa Indonesia
3. Input diagnosis dan prosedur sudah disesuaikan dengan terminologi medis
4. Test case mencakup berbagai spesialisasi medis
5. Verifikasi response time dan user experience
6. Pastikan tidak ada error di console browser
7. Test di berbagai browser (Chrome, Firefox, Edge)
================================================================================
CREATED: Desember 2024
VERSION: 1.0
SYSTEM: Claim Guard Frontend - Medical Records Module SYSTEM: Claim Guard Frontend - Medical Records Module
================================================================================ ================================================================================