155 lines
5.1 KiB
Markdown
155 lines
5.1 KiB
Markdown
## 🔍 HASIL CECK LENGKAP - Filter Tanggal Issue
|
|
|
|
### 📋 RINGKASAN MASALAH
|
|
|
|
Frontend filter untuk tanggal tidak bekerja karena:
|
|
- **Frontend** mengharapkan field: `tanggal_masuk` atau `tanggal_keluar`
|
|
- **Backend API** `/admin/riwayat-billing` mengembalikan response dari struct `Request_Admin_Inacbg`
|
|
- **Struct `Request_Admin_Inacbg`** TIDAK memiliki field tanggal sama sekali!
|
|
|
|
---
|
|
|
|
## 🔗 FLOW API YANG SEBENARNYA
|
|
|
|
```
|
|
Frontend getRiwayatBilling()
|
|
↓
|
|
API: GET /admin/riwayat-billing
|
|
↓
|
|
Handler: GetRiwayatBillingHandler
|
|
↓
|
|
Service: GetAllRiwayatpasien(db)
|
|
↓
|
|
Return: []models.Request_Admin_Inacbg
|
|
↓
|
|
Response JSON berisi: id_billing, nama_pasien, id_pasien, kelas, ruangan, total_tarif_rs,
|
|
total_klaim, id_dpjp, tindakan_rs, icd9, icd10, inacbg_ri, inacbg_rj,
|
|
billing_sign, nama_dokter
|
|
↓
|
|
❌ TIDAK ADA: tanggal_masuk, tanggal_keluar
|
|
```
|
|
|
|
---
|
|
|
|
## 📦 PERBANDINGAN 2 API ENDPOINT
|
|
|
|
### Endpoint 1: `/admin/riwayat-billing` (YANG DIPAKAI FRONTEND)
|
|
- Handler: `GetRiwayatBillingHandler`
|
|
- Service: `GetAllRiwayatpasien()`
|
|
- Return Type: `[]models.Request_Admin_Inacbg`
|
|
- Fields: ❌ Tanggal fields TIDAK ADA
|
|
|
|
### Endpoint 2: `/admin/riwayat-pasien-all` (TIDAK DIPAKAI)
|
|
- Handler: `GetRiwayatPasienAllHandler`
|
|
- Service: `GetRiwayatPasienAll()`
|
|
- Return Type: `[]models.Riwayat_Pasien_all`
|
|
- Fields: ✅ Memiliki Tanggal_Masuk (*time.Time) dan Tanggal_Keluar (string)
|
|
- **ISSUE**: Di service GetRiwayatPasienAll(), baris 210 ada bug:
|
|
```go
|
|
Tanggal_Masuk: b.Tanggal_masuk, // ❌ Assign pointer langsung, harusnya .Format("2006-01-02")
|
|
```
|
|
|
|
---
|
|
|
|
## 🗂️ FILE STRUCTURE
|
|
|
|
### Backend Services
|
|
|
|
**File: riwayat_billing_pasien.go**
|
|
- Line 10: `func GetRiwayatPasienAll()` → returns `[]Riwayat_Pasien_all` ✅ Ada tanggal
|
|
- Line 226: `func GetAllRiwayatpasien()` → returns `[]Request_Admin_Inacbg` ❌ Tanpa tanggal
|
|
|
|
### Models
|
|
|
|
**File: models.go**
|
|
- Line 175: `type Riwayat_Pasien_all struct`
|
|
- Memiliki: Tanggal_Masuk (*time.Time), Tanggal_Keluar (string)
|
|
- STATUS: Fields exists tapi tidak di-populate di service
|
|
|
|
- Line 314: `type Request_Admin_Inacbg struct`
|
|
- TIDAK memiliki field tanggal apapun
|
|
- STATUS: Ini yang dipakai GetAllRiwayatpasien()
|
|
|
|
### Handlers
|
|
|
|
**File: handlers/routes.go**
|
|
- Line 56: `GET /admin/riwayat-billing` → calls `GetAllRiwayatpasien()`
|
|
- Line 58: `GET /admin/riwayat-pasien-all` → calls `GetRiwayatPasienAll()`
|
|
|
|
### Frontend
|
|
|
|
**File: riwayat-billing-pasien.tsx**
|
|
- Line 5: imports `getRiwayatBilling()`
|
|
- Line 87: calls `getRiwayatBilling()`
|
|
|
|
**File: lib/api-helper.ts**
|
|
- Line 252: `getRiwayatBilling()` → calls `/admin/riwayat-billing`
|
|
|
|
---
|
|
|
|
## 🎯 ROOT CAUSE
|
|
|
|
Frontend dipaksa menggunakan API `/admin/riwayat-billing` yang:
|
|
1. Memanggil `GetAllRiwayatpasien()`
|
|
2. Mengembalikan struct `Request_Admin_Inacbg` yang tidak punya field tanggal
|
|
3. Menyebabkan frontend tidak bisa filter berdasarkan tanggal
|
|
|
|
**Ada 2 API endpoint dengan data berbeda:**
|
|
- `/admin/riwayat-billing` → untuk INACBG Admin (tidak ada tanggal)
|
|
- `/admin/riwayat-pasien-all` → untuk riwayat lengkap (ada tanggal tapi ada bug di service)
|
|
|
|
---
|
|
|
|
## ✅ DATABASE - FIELDS TERSEDIA
|
|
|
|
**Table: billing_pasien**
|
|
```sql
|
|
Tanggal_Masuk (TIMESTAMP) ✅ Ada di database
|
|
Tanggal_Keluar (TIMESTAMP) ✅ Ada di database
|
|
```
|
|
|
|
**Struct: BillingPasien**
|
|
```go
|
|
Tanggal_masuk *time.Time ✅ Mapped dari Tanggal_Masuk
|
|
Tanggal_keluar *time.Time ✅ Mapped dari Tanggal_Keluar
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 CHECKLIST STATUS
|
|
|
|
| Item | Status | Lokasi | Catatan |
|
|
|------|--------|--------|---------|
|
|
| Database fields (tanggal) | ✅ Ada | billing_pasien table | Tersedia di DB |
|
|
| BillingPasien struct fields | ✅ Ada | models.go | Mapped dengan benar |
|
|
| Riwayat_Pasien_all struct | ✅ Ada | models.go L175 | Punya field tanggal |
|
|
| Request_Admin_Inacbg struct | ❌ Tidak | models.go L314 | Tidak punya field tanggal |
|
|
| GetRiwayatPasienAll service | ✅ Ada tapi BUG | services L10 | Line 210: bug assign pointer |
|
|
| GetAllRiwayatpasien service | ✅ Ada | services L226 | Tapi return struct tanpa tanggal |
|
|
| `/admin/riwayat-billing` endpoint | ✅ Ada | handlers L56 | Pakai GetAllRiwayatpasien |
|
|
| `/admin/riwayat-pasien-all` endpoint | ✅ Ada | handlers L58 | Tidak dipakai frontend |
|
|
| Frontend getRiwayatBilling() | ✅ Ada | api-helper.ts L252 | Call `/admin/riwayat-billing` |
|
|
| Frontend filter logic | ✅ Ada | riwayat-billing-pasien.tsx | Ready to work jika data ada |
|
|
| Frontend filter UI | ✅ Ada | riwayat-billing-pasien.tsx | Consolidated dropdown ✅ |
|
|
|
|
---
|
|
|
|
## 🤔 KESIMPULAN
|
|
|
|
**Masalah Core:**
|
|
Frontend menggunakan endpoint `/admin/riwayat-billing` yang return struct tanpa field tanggal.
|
|
Padahal ada endpoint alternatif `/admin/riwayat-pasien-all` yang punya field tanggal.
|
|
|
|
**Opsi Solusi:**
|
|
|
|
1. **Update `Request_Admin_Inacbg` struct** - tambahkan field tanggal
|
|
- Perubahan minimal: models.go (add 2 fields)
|
|
- Update: GetAllRiwayatpasien() service untuk assign tanggal values
|
|
|
|
2. **Switch frontend ke `/admin/riwayat-pasien-all`**
|
|
- Update: api-helper.ts getRiwayatBilling()
|
|
- Fix bug di GetRiwayatPasienAll() service (line 210)
|
|
|
|
3. **Tunggu user decision** ⏳ (current state)
|
|
|