Perbaikan Lanjutan

This commit is contained in:
2025-09-01 15:01:30 +07:00
parent c154f96621
commit 980f890a41
27 changed files with 3668 additions and 687 deletions

View File

@@ -0,0 +1,43 @@
package aplicare
import "api-service/internal/models"
// === MONITORING MODELS ===
// MonitoringRequest represents monitoring data request
type MonitoringRequest struct {
models.BaseRequest
TanggalAwal string `json:"tanggal_awal" validate:"required"`
TanggalAkhir string `json:"tanggal_akhir" validate:"required"`
JenisLaporan string `json:"jenis_laporan" validate:"required,oneof=kunjungan klaim rujukan sep"`
PPK string `json:"ppk,omitempty"`
StatusData string `json:"status_data,omitempty"`
models.PaginationRequest
}
// MonitoringData represents monitoring information
type MonitoringData struct {
Tanggal string `json:"tanggal"`
PPK string `json:"ppk"`
NamaPPK string `json:"nama_ppk"`
JumlahKasus int `json:"jumlah_kasus"`
TotalTarif float64 `json:"total_tarif"`
StatusData string `json:"status_data"`
Keterangan string `json:"keterangan,omitempty"`
}
// MonitoringResponse represents monitoring API response
type MonitoringResponse struct {
models.BaseResponse
Data []MonitoringData `json:"data,omitempty"`
Summary *MonitoringSummary `json:"summary,omitempty"`
Pagination *models.PaginationResponse `json:"pagination,omitempty"`
}
// MonitoringSummary represents monitoring summary
type MonitoringSummary struct {
TotalKasus int `json:"total_kasus"`
TotalTarif float64 `json:"total_tarif"`
RataRataTarif float64 `json:"rata_rata_tarif"`
PeriodeLaporan string `json:"periode_laporan"`
}

View File

@@ -0,0 +1,32 @@
package aplicare
import "api-service/internal/models"
// === REFERENSI MODELS ===
// ReferensiRequest represents referensi lookup request
type ReferensiRequest struct {
models.BaseRequest
JenisReferensi string `json:"jenis_referensi" validate:"required,oneof=diagnosa procedure obat alkes faskes dokter poli"`
Keyword string `json:"keyword,omitempty"`
KodeReferensi string `json:"kode_referensi,omitempty"`
models.PaginationRequest
}
// ReferensiData represents referensi information
type ReferensiData struct {
Kode string `json:"kode"`
Nama string `json:"nama"`
Kategori string `json:"kategori,omitempty"`
Status string `json:"status"`
TglBerlaku string `json:"tgl_berlaku,omitempty"`
TglBerakhir string `json:"tgl_berakhir,omitempty"`
Keterangan string `json:"keterangan,omitempty"`
}
// ReferensiResponse represents referensi API response
type ReferensiResponse struct {
models.BaseResponse
Data []ReferensiData `json:"data,omitempty"`
Pagination *models.PaginationResponse `json:"pagination,omitempty"`
}

View File

@@ -1,10 +1,12 @@
package reference
package eclaim
import "api-service/internal/models"
// === KLAIM MODELS ===
// KlaimRequest represents klaim submission request
type KlaimRequest struct {
BaseRequest
models.BaseRequest
NoSep string `json:"nomor_sep" validate:"required"`
NoKartu string `json:"nomor_kartu" validate:"required"`
NoMR string `json:"nomor_mr" validate:"required"`
@@ -87,7 +89,7 @@ type SpecialCMGInfo struct {
// KlaimResponse represents klaim API response
type KlaimResponse struct {
BaseResponse
models.BaseResponse
Data *KlaimResponseData `json:"data,omitempty"`
}
@@ -106,7 +108,7 @@ type KlaimResponseData struct {
// GrouperRequest represents grouper processing request
type GrouperRequest struct {
BaseRequest
models.BaseRequest
NoSep string `json:"nomor_sep" validate:"required"`
NoKartu string `json:"nomor_kartu" validate:"required"`
TglMasuk string `json:"tgl_masuk" validate:"required"`
@@ -143,6 +145,6 @@ type TopUpInfo struct {
// GrouperResponse represents grouper API response
type GrouperResponse struct {
BaseResponse
models.BaseResponse
Data *GrouperResult `json:"data,omitempty"`
}

View File

@@ -63,6 +63,54 @@ type ErrorResponse struct {
Timestamp time.Time `json:"timestamp"`
}
// BaseRequest contains common fields for all BPJS requests
type BaseRequest struct {
RequestID string `json:"request_id,omitempty"`
Timestamp time.Time `json:"timestamp,omitempty"`
}
// BaseResponse contains common response fields
type BaseResponse struct {
Status string `json:"status"`
Message string `json:"message,omitempty"`
RequestID string `json:"request_id,omitempty"`
Timestamp string `json:"timestamp,omitempty"`
}
// ErrorResponse represents error response structure
type ErrorResponseBpjs struct {
Status string `json:"status"`
Message string `json:"message"`
RequestID string `json:"request_id,omitempty"`
Errors map[string]interface{} `json:"errors,omitempty"`
Code string `json:"code,omitempty"`
}
// PaginationRequest contains pagination parameters
type PaginationRequest struct {
Page int `json:"page" validate:"min=1"`
Limit int `json:"limit" validate:"min=1,max=100"`
SortBy string `json:"sort_by,omitempty"`
SortDir string `json:"sort_dir,omitempty" validate:"omitempty,oneof=asc desc"`
}
// PaginationResponse contains pagination metadata
type PaginationResponse struct {
CurrentPage int `json:"current_page"`
TotalPages int `json:"total_pages"`
TotalItems int64 `json:"total_items"`
ItemsPerPage int `json:"items_per_page"`
HasNext bool `json:"has_next"`
HasPrev bool `json:"has_previous"`
}
// MetaInfo contains additional metadata
type MetaInfo struct {
Version string `json:"version"`
Environment string `json:"environment"`
ServerTime string `json:"server_time"`
}
// Validation constants
const (
StatusDraft = "draft"

View File

@@ -1,70 +0,0 @@
package reference
// === REFERENSI MODELS ===
// ReferensiRequest represents referensi lookup request
type ReferensiRequest struct {
BaseRequest
JenisReferensi string `json:"jenis_referensi" validate:"required,oneof=diagnosa procedure obat alkes faskes dokter poli"`
Keyword string `json:"keyword,omitempty"`
KodeReferensi string `json:"kode_referensi,omitempty"`
PaginationRequest
}
// ReferensiData represents referensi information
type ReferensiData struct {
Kode string `json:"kode"`
Nama string `json:"nama"`
Kategori string `json:"kategori,omitempty"`
Status string `json:"status"`
TglBerlaku string `json:"tgl_berlaku,omitempty"`
TglBerakhir string `json:"tgl_berakhir,omitempty"`
Keterangan string `json:"keterangan,omitempty"`
}
// ReferensiResponse represents referensi API response
type ReferensiResponse struct {
BaseResponse
Data []ReferensiData `json:"data,omitempty"`
Pagination *PaginationResponse `json:"pagination,omitempty"`
}
// === MONITORING MODELS ===
// MonitoringRequest represents monitoring data request
type MonitoringRequest struct {
BaseRequest
TanggalAwal string `json:"tanggal_awal" validate:"required"`
TanggalAkhir string `json:"tanggal_akhir" validate:"required"`
JenisLaporan string `json:"jenis_laporan" validate:"required,oneof=kunjungan klaim rujukan sep"`
PPK string `json:"ppk,omitempty"`
StatusData string `json:"status_data,omitempty"`
PaginationRequest
}
// MonitoringData represents monitoring information
type MonitoringData struct {
Tanggal string `json:"tanggal"`
PPK string `json:"ppk"`
NamaPPK string `json:"nama_ppk"`
JumlahKasus int `json:"jumlah_kasus"`
TotalTarif float64 `json:"total_tarif"`
StatusData string `json:"status_data"`
Keterangan string `json:"keterangan,omitempty"`
}
// MonitoringResponse represents monitoring API response
type MonitoringResponse struct {
BaseResponse
Data []MonitoringData `json:"data,omitempty"`
Summary *MonitoringSummary `json:"summary,omitempty"`
Pagination *PaginationResponse `json:"pagination,omitempty"`
}
// MonitoringSummary represents monitoring summary
type MonitoringSummary struct {
TotalKasus int `json:"total_kasus"`
TotalTarif float64 `json:"total_tarif"`
RataRataTarif float64 `json:"rata_rata_tarif"`
PeriodeLaporan string `json:"periode_laporan"`
}

View File

@@ -1,53 +0,0 @@
package reference
import (
"time"
)
// BaseRequest contains common fields for all BPJS requests
type BaseRequest struct {
RequestID string `json:"request_id,omitempty"`
Timestamp time.Time `json:"timestamp,omitempty"`
}
// BaseResponse contains common response fields
type BaseResponse struct {
Status string `json:"status"`
Message string `json:"message,omitempty"`
RequestID string `json:"request_id,omitempty"`
Timestamp string `json:"timestamp,omitempty"`
}
// ErrorResponse represents error response structure
type ErrorResponse struct {
Status string `json:"status"`
Message string `json:"message"`
RequestID string `json:"request_id,omitempty"`
Errors map[string]interface{} `json:"errors,omitempty"`
Code string `json:"code,omitempty"`
}
// PaginationRequest contains pagination parameters
type PaginationRequest struct {
Page int `json:"page" validate:"min=1"`
Limit int `json:"limit" validate:"min=1,max=100"`
SortBy string `json:"sort_by,omitempty"`
SortDir string `json:"sort_dir,omitempty" validate:"omitempty,oneof=asc desc"`
}
// PaginationResponse contains pagination metadata
type PaginationResponse struct {
CurrentPage int `json:"current_page"`
TotalPages int `json:"total_pages"`
TotalItems int64 `json:"total_items"`
ItemsPerPage int `json:"items_per_page"`
HasNext bool `json:"has_next"`
HasPrev bool `json:"has_previous"`
}
// MetaInfo contains additional metadata
type MetaInfo struct {
Version string `json:"version"`
Environment string `json:"environment"`
ServerTime string `json:"server_time"`
}

View File

@@ -1,27 +0,0 @@
// internal/models/reference/services.go
package reference
// VClaimService defines VClaim service interface
// type VClaimService interface {
// GetPESERTA(ctx context.Context, nokartu string) (*PesertaData, error)
// CreateSEP(ctx context.Context, req *SEPRequest) (*SEPData, error)
// GetSEP(ctx context.Context, nosep string) (*SEPData, error)
// UpdateSEP(ctx context.Context, nosep string, req *SEPRequest) (*SEPData, error)
// DeleteSEP(ctx context.Context, nosep string) error
// GetRujukan(ctx context.Context, norujukan string) (*RujukanData, error)
// }
// // EClaimService defines EClaim service interface
// type EClaimService interface {
// CreateKlaim(ctx context.Context, req *KlaimRequest) (*KlaimResponseData, error)
// GetKlaim(ctx context.Context, noKlaim string) (*KlaimResponseData, error)
// UpdateKlaim(ctx context.Context, noKlaim string, req *KlaimRequest) (*KlaimResponseData, error)
// ProcessGrouper(ctx context.Context, req *GrouperRequest) (*GrouperResult, error)
// }
// // AplicareService defines Aplicare service interface
// type AplicareService interface {
// GetReferensi(ctx context.Context, req *ReferensiRequest) ([]ReferensiData, *PaginationResponse, error)
// GetMonitoring(ctx context.Context, req *MonitoringRequest) ([]MonitoringData, *MonitoringSummary, *PaginationResponse, error)
// CreateMonitoring(ctx context.Context, req *MonitoringRequest) error
// }

View File

@@ -1,144 +0,0 @@
// internal/models/reference/vclaim.go
package reference
// === PESERTA MODELS ===
// PesertaRequest represents peserta lookup request
type PesertaRequest struct {
BaseRequest
NoKartu string `json:"nokartu" validate:"required,min=13,max=13"`
NIK string `json:"nik,omitempty" validate:"omitempty,min=16,max=16"`
TanggalSEP string `json:"tglsep" validate:"required" example:"2024-01-15"`
NoTelepon string `json:"notelp,omitempty" validate:"omitempty,max=15"`
}
// PesertaData represents peserta information from BPJS
type PesertaData struct {
NoKartu string `json:"noKartu"`
NIK string `json:"nik"`
Nama string `json:"nama"`
Pisa string `json:"pisa"`
Sex string `json:"sex"`
TanggalLahir string `json:"tglLahir"`
TelephoneMsisdn string `json:"tglTAT"`
TelephoneAsat string `json:"tglTMT"`
KodeCabang string `json:"kdCabang"`
NamaCabang string `json:"nmCabang"`
KodeJenisPeserta string `json:"kdJnsPst"`
NamaJenisPeserta string `json:"nmJnsPst"`
KelasRawat string `json:"klsRawat"`
Status string `json:"statusPeserta"`
Aktif string `json:"aktif"`
KeteranganAktif string `json:"ketAktif"`
NoSKTM string `json:"noSKTM,omitempty"`
NoKTP string `json:"noKtp"`
Asuransi string `json:"asuransi,omitempty"`
CoB string `json:"cob,omitempty"`
TunggakanIuran string `json:"tglTunggak,omitempty"`
MR struct {
NoMR string `json:"noMR"`
NamaMR string `json:"nmMR"`
Sex string `json:"sex"`
TglLahir string `json:"tglLahir"`
TglMeninggal string `json:"tglMeninggal,omitempty"`
} `json:"mr,omitempty"`
}
// PesertaResponse represents peserta API response
type PesertaResponse struct {
BaseResponse
Data *PesertaData `json:"data,omitempty"`
MetaData interface{} `json:"metaData,omitempty"`
}
// === SEP (Surat Eligibilitas Peserta) MODELS ===
// SEPRequest represents SEP creation/update request
type SepRequest struct {
BaseRequest
NoKartu string `json:"noKartu" validate:"required"`
TglSep string `json:"tglSep" validate:"required"`
PPKPelayanan string `json:"ppkPelayanan" validate:"required"`
JnsPelayanan string `json:"jnsPelayanan" validate:"required,oneof=1 2"`
KlsRawat string `json:"klsRawat" validate:"required,oneof=1 2 3"`
NoMR string `json:"noMR" validate:"required"`
Rujukan *SepRujukan `json:"rujukan"`
Catatan string `json:"catatan,omitempty"`
Diagnosa string `json:"diagnosa" validate:"required"`
PoliTujuan string `json:"poli" validate:"required"`
ExternalUser string `json:"user" validate:"required"`
NoTelp string `json:"noTelp,omitempty"`
}
// SEPRujukan represents rujukan information in SEP
type SepRujukan struct {
AsalRujukan string `json:"asalRujukan" validate:"required,oneof=1 2"`
TglRujukan string `json:"tglRujukan" validate:"required"`
NoRujukan string `json:"noRujukan" validate:"required"`
PPKRujukan string `json:"ppkRujukan" validate:"required"`
}
// SEPData represents SEP response data
type SepData struct {
NoSep string `json:"noSep"`
TglSep string `json:"tglSep"`
JnsPelayanan string `json:"jnsPelayanan"`
PoliTujuan string `json:"poli"`
KlsRawat string `json:"klsRawat"`
NoMR string `json:"noMR"`
Rujukan SepRujukan `json:"rujukan"`
Catatan string `json:"catatan"`
Diagnosa string `json:"diagnosa"`
Peserta PesertaData `json:"peserta"`
Informasi struct {
NoSKDP string `json:"noSKDP,omitempty"`
DPJPLayan string `json:"dpjpLayan"`
NoTelepon string `json:"noTelp"`
SubSpesialis string `json:"subSpesialis,omitempty"`
} `json:"informasi"`
}
// SEPResponse represents SEP API response
type SepResponse struct {
BaseResponse
Data *SepData `json:"data,omitempty"`
}
// === RUJUKAN MODELS ===
// RujukanRequest represents rujukan lookup request
type RujukanRequest struct {
BaseRequest
NoRujukan string `json:"noRujukan" validate:"required"`
NoKartu string `json:"noKartu,omitempty"`
}
// RujukanData represents rujukan information
type RujukanData struct {
NoRujukan string `json:"noRujukan"`
TglRujukan string `json:"tglRujukan"`
NoKartu string `json:"noKartu"`
Nama string `json:"nama"`
KelasRawat string `json:"kelasRawat"`
Diagnosa struct {
KodeDiagnosa string `json:"kdDiagnosa"`
NamaDiagnosa string `json:"nmDiagnosa"`
} `json:"diagnosa"`
PoliRujukan struct {
KodePoli string `json:"kdPoli"`
NamaPoli string `json:"nmPoli"`
} `json:"poliRujukan"`
ProvPerujuk struct {
KodeProvider string `json:"kdProvider"`
NamaProvider string `json:"nmProvider"`
} `json:"provPerujuk"`
PelayananInfo string `json:"pelayanan"`
StatusRujukan string `json:"statusRujukan"`
}
// RujukanResponse represents rujukan API response
type RujukanResponse struct {
BaseResponse
Data *RujukanData `json:"data,omitempty"`
List []RujukanData `json:"list,omitempty"`
}

View File

@@ -1,4 +1,4 @@
package reference
package models
import (
"regexp"

View File

@@ -0,0 +1,53 @@
package peserta
import "api-service/internal/models"
// === PESERTA MODELS ===
// PesertaRequest represents peserta lookup request
type PesertaRequest struct {
models.BaseRequest
NoKartu string `json:"nokartu" validate:"required,min=13,max=13"`
NIK string `json:"nik,omitempty" validate:"omitempty,min=16,max=16"`
TanggalSEP string `json:"tglsep" validate:"required" example:"2024-01-15"`
NoTelepon string `json:"notelp,omitempty" validate:"omitempty,max=15"`
}
// PesertaData represents peserta information from BPJS
type PesertaData struct {
NoKartu string `json:"noKartu"`
NIK string `json:"nik"`
Nama string `json:"nama"`
Pisa string `json:"pisa"`
Sex string `json:"sex"`
TanggalLahir string `json:"tglLahir"`
TelephoneMsisdn string `json:"tglTAT"`
TelephoneAsat string `json:"tglTMT"`
KodeCabang string `json:"kdCabang"`
NamaCabang string `json:"nmCabang"`
KodeJenisPeserta string `json:"kdJnsPst"`
NamaJenisPeserta string `json:"nmJnsPst"`
KelasRawat string `json:"klsRawat"`
Status string `json:"statusPeserta"`
Aktif string `json:"aktif"`
KeteranganAktif string `json:"ketAktif"`
NoSKTM string `json:"noSKTM,omitempty"`
NoKTP string `json:"noKtp"`
Asuransi string `json:"asuransi,omitempty"`
CoB string `json:"cob,omitempty"`
TunggakanIuran string `json:"tglTunggak,omitempty"`
MR struct {
NoMR string `json:"noMR"`
NamaMR string `json:"nmMR"`
Sex string `json:"sex"`
TglLahir string `json:"tglLahir"`
TglMeninggal string `json:"tglMeninggal,omitempty"`
} `json:"mr,omitempty"`
}
// PesertaResponse represents peserta API response
type PesertaResponse struct {
models.BaseResponse
Data *PesertaData `json:"data,omitempty"`
MetaData interface{} `json:"metaData,omitempty"`
}

View File

@@ -0,0 +1,42 @@
package vclaim
import "api-service/internal/models"
// === RUJUKAN MODELS ===
// RujukanRequest represents rujukan lookup request
type RujukanRequest struct {
models.BaseRequest
NoRujukan string `json:"noRujukan" validate:"required"`
NoKartu string `json:"noKartu,omitempty"`
}
// RujukanData represents rujukan information
type RujukanData struct {
NoRujukan string `json:"noRujukan"`
TglRujukan string `json:"tglRujukan"`
NoKartu string `json:"noKartu"`
Nama string `json:"nama"`
KelasRawat string `json:"kelasRawat"`
Diagnosa struct {
KodeDiagnosa string `json:"kdDiagnosa"`
NamaDiagnosa string `json:"nmDiagnosa"`
} `json:"diagnosa"`
PoliRujukan struct {
KodePoli string `json:"kdPoli"`
NamaPoli string `json:"nmPoli"`
} `json:"poliRujukan"`
ProvPerujuk struct {
KodeProvider string `json:"kdProvider"`
NamaProvider string `json:"nmProvider"`
} `json:"provPerujuk"`
PelayananInfo string `json:"pelayanan"`
StatusRujukan string `json:"statusRujukan"`
}
// RujukanResponse represents rujukan API response
type RujukanResponse struct {
models.BaseResponse
Data *RujukanData `json:"data,omitempty"`
List []RujukanData `json:"list,omitempty"`
}

View File

@@ -0,0 +1,59 @@
package sep
import (
"api-service/internal/models"
"api-service/internal/models/vclaim/peserta"
)
// === SEP (Surat Eligibilitas Peserta) MODELS ===
// SEPRequest represents SEP creation/update request
type SepRequest struct {
models.BaseRequest
NoKartu string `json:"noKartu" validate:"required"`
TglSep string `json:"tglSep" validate:"required"`
PPKPelayanan string `json:"ppkPelayanan" validate:"required"`
JnsPelayanan string `json:"jnsPelayanan" validate:"required,oneof=1 2"`
KlsRawat string `json:"klsRawat" validate:"required,oneof=1 2 3"`
NoMR string `json:"noMR" validate:"required"`
Rujukan *SepRujukan `json:"rujukan"`
Catatan string `json:"catatan,omitempty"`
Diagnosa string `json:"diagnosa" validate:"required"`
PoliTujuan string `json:"poli" validate:"required"`
ExternalUser string `json:"user" validate:"required"`
NoTelp string `json:"noTelp,omitempty"`
}
// SEPRujukan represents rujukan information in SEP
type SepRujukan struct {
AsalRujukan string `json:"asalRujukan" validate:"required,oneof=1 2"`
TglRujukan string `json:"tglRujukan" validate:"required"`
NoRujukan string `json:"noRujukan" validate:"required"`
PPKRujukan string `json:"ppkRujukan" validate:"required"`
}
// SEPData represents SEP response data
type SepData struct {
NoSep string `json:"noSep"`
TglSep string `json:"tglSep"`
JnsPelayanan string `json:"jnsPelayanan"`
PoliTujuan string `json:"poli"`
KlsRawat string `json:"klsRawat"`
NoMR string `json:"noMR"`
Rujukan SepRujukan `json:"rujukan"`
Catatan string `json:"catatan"`
Diagnosa string `json:"diagnosa"`
Peserta peserta.PesertaData `json:"peserta"`
Informasi struct {
NoSKDP string `json:"noSKDP,omitempty"`
DPJPLayan string `json:"dpjpLayan"`
NoTelepon string `json:"noTelp"`
SubSpesialis string `json:"subSpesialis,omitempty"`
} `json:"informasi"`
}
// SEPResponse represents SEP API response
type SepResponse struct {
models.BaseResponse
Data *SepData `json:"data,omitempty"`
}