Files
careit-fixed/MarkdownSourceFile/BILLING_DPJP_INTEGRATION.md
2026-02-06 14:22:35 +07:00

4.6 KiB

Integrasi Tabel billing_dpjp

Ringkasan Perubahan

Integrasi tabel billing_dpjp yang baru ke dalam sistem billing CareIT. Tabel ini digunakan untuk menyimpan Doctor In Charge (DPJP) untuk setiap billing.

Perubahan yang Dilakukan

1. services/billing_pasien.go

Function: DataFromFE()

  • Tambahan: Kode untuk insert ID_DPJP ke tabel billing_dpjp (lines ~439-451)
  • Logika: Jika input.ID_DPJP > 0, maka insert record ke tabel billing_dpjp
  • Log: Menambah logging untuk tracking DPJP insertion
if input.ID_DPJP > 0 {
    billingDPJP := models.Billing_DPJP{
        ID_Billing: billing.ID_Billing,
        ID_DPJP:    input.ID_DPJP,
    }
    // ... insert logic
}

Function: GetBillingDetailAktifByNama()

  • Perubahan: Menambah return value (dari 8 return menjadi 9)

    • Sebelumnya: (*models.BillingPasien, []string, []string, []string, []string, []string, []string, error)
    • Sesudahnya: (*models.BillingPasien, []string, []string, []string, []string, []string, []string, int, error)
  • Tambahan Query:

    • Query dari tabel billing_dpjp untuk fetch ID_DPJP
    • Jika tidak ada DPJP, return value 0 (normal)
var dpjpRow struct {
    ID_DPJP int `gorm:"column:ID_DPJP"`
}
// Query dari billing_dpjp

2. services/riwayat_billing_pasien.go

Function: GetRiwayatPasienAll()

  • Tambahan Query: Menambah query untuk fetch DPJP dari tabel billing_dpjp
  • Map Creation: Membuat dpjpMap untuk mapping ID_Billing ke ID_DPJP
  • Response Update: Field ID_DPJP di response sudah diisi (meskipun belum direferensikan di item construction, field sudah ada di model)
dpjpMap := make(map[int]int)
// Query dari billing_dpjp untuk mendapatkan ID_DPJP

3. handlers/routes.go

Function: GetBillingAktifByNamaHandler()

  • Update Parameter: Menangkap return value baru (ID_DPJP)
  • Response Update: Menambah field id_dpjp dalam JSON response
billing, tindakan, icd9, icd10, dokter, inacbgRI, inacbgRJ, dpjp, err := services.GetBillingDetailAktifByNama(nama)

Response JSON sekarang include:

{
  "data": {
    "billing": {...},
    "tindakan_rs": [...],
    "icd9": [...],
    "icd10": [...],
    "dokter": [...],
    "inacbg_ri": [...],
    "inacbg_rj": [...],
    "id_dpjp": 123
  }
}

Model yang Sudah Ada

models/models.go

  • Billing_DPJP: Struct untuk tabel billing_dpjp (line ~61-68)

    type Billing_DPJP struct {
        ID_Billing int `gorm:"column:ID_Billing;primaryKey"`
        ID_DPJP    int `gorm:"column:ID_DPJP;primaryKey"`
    }
    
  • BillingRequest: Sudah memiliki field ID_DPJP (line ~225)

    ID_DPJP int `json:"id_dpjp"`
    
  • Riwayat_Pasien_all: Sudah memiliki field ID_DPJP (line ~183)

    ID_DPJP string `json:"id_dpjp"`
    

API Endpoint yang Terpengaruh

GET /billing/aktif

Parameter: nama_pasien

Response:

{
  "status": "success",
  "data": {
    "billing": {...},
    "id_dpjp": 123,
    ...
  }
}

Database Schema

Tabel billing_dpjp sudah dibuat di PostgreSQL dengan struktur:

CREATE TABLE billing_dpjp (
  ID_Billing integer NOT NULL,
  ID_DPJP integer NOT NULL,
  PRIMARY KEY (ID_Billing, ID_DPJP),
  FOREIGN KEY (ID_Billing) REFERENCES billing_pasien(ID_Billing),
  FOREIGN KEY (ID_DPJP) REFERENCES dokter(ID_Dokter)
);

Testing

Test Case 1: Membuat Billing Baru dengan DPJP

POST /billing

{
  "id_dpjp": 5,
  "nama_dokter": ["Dr. Budi"],
  ...
}

Expected: DPJP tercatat di tabel billing_dpjp

Test Case 2: Fetch Billing Aktif dengan DPJP

GET /billing/aktif?nama_pasien=John Doe

Expected: Response include field id_dpjp dengan value yang benar

Test Case 3: Riwayat Billing Tertutup

GET /admin/riwayat-pasien-all

Expected: Setiap billing dalam response include DPJP (jika ada)

File yang Dimodifikasi

  1. services/billing_pasien.go - DataFromFE() + GetBillingDetailAktifByNama()
  2. services/riwayat_billing_pasien.go - GetRiwayatPasienAll()
  3. handlers/routes.go - GetBillingAktifByNamaHandler()

Status Kompilasi

BUILD SUCCESS - Tidak ada error atau warning saat compile go build .

Catatan

  • Field ID_DPJP di model Riwayat_Pasien_all bertipe string (line 183) sedangkan di billing_dpjp bertipe int. Ini mungkin perlu di-harmonisasi untuk konsistensi tipe data di masa depan.
  • Fungsi update billing yang ada (EditPasienComplete) belum include logika update DPJP. Jika ada requirement untuk update DPJP setelah billing dibuat, perlu ditambahkan.
  • DPJP bersifat opsional (jika tidak ada, return 0 - tidak error).