Files
antrean-anjungan/internal/models/reference/eclaim.go
2025-08-28 18:03:38 +07:00

149 lines
5.4 KiB
Go

package reference
// === KLAIM MODELS ===
// KlaimRequest represents klaim submission request
type KlaimRequest struct {
BaseRequest
NoSep string `json:"nomor_sep" validate:"required"`
NoKartu string `json:"nomor_kartu" validate:"required"`
NoMR string `json:"nomor_mr" validate:"required"`
TglPulang string `json:"tgl_pulang" validate:"required"`
TglMasuk string `json:"tgl_masuk" validate:"required"`
JnsPelayanan string `json:"jenis_pelayanan" validate:"required,oneof=1 2"`
CaraPulang string `json:"cara_pulang" validate:"required"`
Data KlaimData `json:"data" validate:"required"`
}
// KlaimData represents detailed klaim information
type KlaimData struct {
Diagnosa []DiagnosaKlaim `json:"diagnosa" validate:"required,dive"`
Procedure []ProcedureKlaim `json:"procedure,omitempty"`
Investigasi []InvestigasiKlaim `json:"investigasi,omitempty"`
ObatAlkes []ObatKlaim `json:"obat_alkes,omitempty"`
TarifRS []TarifKlaim `json:"tarif_rs,omitempty"`
DRG *DRGInfo `json:"drg,omitempty"`
SpecialCMG *SpecialCMGInfo `json:"special_cmg,omitempty"`
}
// DiagnosaKlaim represents diagnosis in klaim
type DiagnosaKlaim struct {
KodeDiagnosa string `json:"kode_diagnosa" validate:"required"`
NamaDiagnosa string `json:"nama_diagnosa"`
TipeDiagnosa string `json:"tipe_diagnosa" validate:"required,oneof=1 2"`
}
// ProcedureKlaim represents procedure in klaim
type ProcedureKlaim struct {
KodeTindakan string `json:"kode_tindakan" validate:"required"`
NamaTindakan string `json:"nama_tindakan"`
TanggalTindakan string `json:"tanggal_tindakan" validate:"required"`
Keterangan string `json:"keterangan,omitempty"`
}
// InvestigasiKlaim represents investigation/lab results
type InvestigasiKlaim struct {
KodeInvestigasi string `json:"kode_investigasi" validate:"required"`
NamaInvestigasi string `json:"nama_investigasi"`
Hasil string `json:"hasil,omitempty"`
Satuan string `json:"satuan,omitempty"`
NilaiNormal string `json:"nilai_normal,omitempty"`
}
// ObatKlaim represents medication in klaim
type ObatKlaim struct {
KodeObat string `json:"kode_obat" validate:"required"`
NamaObat string `json:"nama_obat"`
Dosis string `json:"dosis,omitempty"`
Frekuensi string `json:"frekuensi,omitempty"`
Jumlah float64 `json:"jumlah" validate:"min=0"`
Harga float64 `json:"harga" validate:"min=0"`
}
// TarifKlaim represents hospital tariff
type TarifKlaim struct {
KodeTarif string `json:"kode_tarif" validate:"required"`
NamaTarif string `json:"nama_tarif"`
Jumlah int `json:"jumlah" validate:"min=0"`
Tarif float64 `json:"tarif" validate:"min=0"`
Total float64 `json:"total"`
}
// DRGInfo represents DRG information
type DRGInfo struct {
KodeDRG string `json:"kode_drg"`
NamaDRG string `json:"nama_drg"`
TarifDRG float64 `json:"tarif_drg"`
Severity string `json:"severity,omitempty"`
}
// SpecialCMGInfo represents Special CMG information
type SpecialCMGInfo struct {
KodeCMG string `json:"kode_cmg"`
NamaCMG string `json:"nama_cmg"`
TarifCMG float64 `json:"tarif_cmg"`
SubAcute string `json:"sub_acute,omitempty"`
}
// KlaimResponse represents klaim API response
type KlaimResponse struct {
BaseResponse
Data *KlaimResponseData `json:"data,omitempty"`
}
// KlaimResponseData represents processed klaim data
type KlaimResponseData struct {
NoKlaim string `json:"nomor_klaim"`
NoSep string `json:"nomor_sep"`
StatusKlaim string `json:"status_klaim"`
TarifAktual float64 `json:"tarif_aktual"`
TarifRS float64 `json:"tarif_rs"`
TarifApproved float64 `json:"tarif_approved"`
Grouper *GrouperResult `json:"grouper,omitempty"`
}
// === GROUPER MODELS ===
// GrouperRequest represents grouper processing request
type GrouperRequest struct {
BaseRequest
NoSep string `json:"nomor_sep" validate:"required"`
NoKartu string `json:"nomor_kartu" validate:"required"`
TglMasuk string `json:"tgl_masuk" validate:"required"`
TglPulang string `json:"tgl_pulang" validate:"required"`
JnsPelayanan string `json:"jenis_pelayanan" validate:"required,oneof=1 2"`
CaraPulang string `json:"cara_pulang" validate:"required"`
DiagnosaPrimer string `json:"diagnosa_primer" validate:"required"`
DiagnosaSkunder []string `json:"diagnosa_skunder,omitempty"`
Procedure []string `json:"procedure,omitempty"`
AdlScore int `json:"adl_score,omitempty"`
AgeAtAdmission int `json:"age_at_admission" validate:"min=0"`
}
// GrouperResult represents grouper processing result
type GrouperResult struct {
KodeDRG string `json:"kode_drg"`
NamaDRG string `json:"nama_drg"`
TarifDRG float64 `json:"tarif_drg"`
KodeCMG string `json:"kode_cmg,omitempty"`
NamaCMG string `json:"nama_cmg,omitempty"`
TarifCMG float64 `json:"tarif_cmg,omitempty"`
Severity string `json:"severity"`
SubAcute bool `json:"sub_acute"`
Chronic bool `json:"chronic"`
TopUp *TopUpInfo `json:"top_up,omitempty"`
}
// TopUpInfo represents top-up information
type TopUpInfo struct {
Eligible bool `json:"eligible"`
Percentage float64 `json:"percentage"`
Amount float64 `json:"amount"`
}
// GrouperResponse represents grouper API response
type GrouperResponse struct {
BaseResponse
Data *GrouperResult `json:"data,omitempty"`
}