first commit
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
## 🔍 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)
|
||||
|
||||
Reference in New Issue
Block a user