Files
2026-02-06 14:22:35 +07:00

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)