Perbaikan tool bpjs

This commit is contained in:
2025-09-03 19:24:55 +07:00
parent 1ab7687e68
commit 8311311615
11 changed files with 1896 additions and 415 deletions

View File

@@ -12,6 +12,7 @@ import (
"api-service/internal/config"
"api-service/internal/models"
"api-service/internal/models/vclaim/peserta"
services "api-service/internal/services/bpjs"
"api-service/pkg/logger"
@@ -20,62 +21,6 @@ import (
"github.com/google/uuid"
)
// 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"`
TglCetakKartu string `json:"tglCetakKartu"`
TglTAT string `json:"tglTAT"`
TglTMT string `json:"tglTMT"`
StatusPeserta struct {
Kode string `json:"kode"`
Keterangan string `json:"keterangan"`
} `json:"statusPeserta"`
ProvUmum struct {
KdProvider string `json:"kdProvider"`
NmProvider string `json:"nmProvider"`
} `json:"provUmum"`
JenisPeserta struct {
Kode string `json:"kode"`
Keterangan string `json:"keterangan"`
} `json:"jenisPeserta"`
HakKelas struct {
Kode string `json:"kode"`
Keterangan string `json:"keterangan"`
} `json:"hakKelas"`
Umur struct {
UmurSekarang string `json:"umurSekarang"`
UmurSaatPelayanan string `json:"umurSaatPelayanan"`
} `json:"umur"`
Informasi struct {
Dinsos interface{} `json:"dinsos"`
ProlanisPRB string `json:"prolanisPRB"`
NoSKTM interface{} `json:"noSKTM"`
ESEP interface{} `json:"eSEP"`
} `json:"informasi"`
Cob struct {
NoAsuransi interface{} `json:"noAsuransi"`
NmAsuransi interface{} `json:"nmAsuransi"`
TglTMT interface{} `json:"tglTMT"`
TglTAT interface{} `json:"tglTAT"`
} `json:"cob"`
MR struct {
NoMR string `json:"noMR"`
NoTelepon string `json:"noTelepon"`
} `json:"mr,omitempty"`
}
// PesertaResponse represents peserta API response
type PesertaResponse struct {
models.BaseResponse
Data *PesertaData `json:"data,omitempty"`
MetaData interface{} `json:"metaData,omitempty"`
}
// VClaimHandler handles VClaim BPJS services
type VClaimHandler struct {
service services.VClaimService
@@ -115,7 +60,7 @@ func NewVClaimHandler(cfg VClaimHandlerConfig) *VClaimHandler {
// @Failure 401 {object} models.ErrorResponseBpjs "Unauthorized - invalid API credentials"
// @Failure 404 {object} models.ErrorResponseBpjs "Not found - PesertaBynokartu not found"
// @Failure 500 {object} models.ErrorResponseBpjs "Internal server error"
// @Router /peserta/:nokartu [get]
// @Router /peserta/nokartu/:nokartu/tglSEP/:tglsep [get]
func (h *VClaimHandler) GetPesertaBynokartu(c *gin.Context) {
ctx, cancel := context.WithTimeout(c.Request.Context(), 30*time.Second)
defer cancel()
@@ -152,7 +97,7 @@ func (h *VClaimHandler) GetPesertaBynokartu(c *gin.Context) {
}
// Call service method
var response PesertaResponse
var response peserta.PesertaResponse
endpoint := "/Peserta/nokartu/:nokartu/tglSEP/:tglsep"
@@ -177,7 +122,7 @@ func (h *VClaimHandler) GetPesertaBynokartu(c *gin.Context) {
// Map the raw response
response.MetaData = resp.MetaData
if resp.Response != nil {
response.Data = &PesertaData{}
response.Data = &peserta.PesertaData{}
if respStr, ok := resp.Response.(string); ok {
// Decrypt the response string
consID, secretKey, _, tstamp, _ := h.config.SetHeader()
@@ -223,7 +168,7 @@ func (h *VClaimHandler) GetPesertaBynokartu(c *gin.Context) {
// @Failure 401 {object} models.ErrorResponseBpjs "Unauthorized - invalid API credentials"
// @Failure 404 {object} models.ErrorResponseBpjs "Not found - PesertaBynik not found"
// @Failure 500 {object} models.ErrorResponseBpjs "Internal server error"
// @Router /peserta/nik/:nik [get]
// @Router /Peserta/nik/nik/:nik/tglSEP/:tglsep [get]
func (h *VClaimHandler) GetPesertaBynik(c *gin.Context) {
ctx, cancel := context.WithTimeout(c.Request.Context(), 30*time.Second)
defer cancel()
@@ -237,7 +182,7 @@ func (h *VClaimHandler) GetPesertaBynik(c *gin.Context) {
h.logger.Info("Processing GetPesertaBynik request", map[string]interface{}{
"request_id": requestID,
"endpoint": "/peserta/nik/:nik",
"endpoint": "/peserta/nik/:nik/tglSEP/:tglsep",
"nik": c.Param("nik"),
})
@@ -245,6 +190,7 @@ func (h *VClaimHandler) GetPesertaBynik(c *gin.Context) {
// Extract path parameters
nik := c.Param("nik")
tglsep := c.Param("tglsep")
if nik == "" {
h.logger.Error("Missing required parameter nik", map[string]interface{}{
@@ -258,13 +204,26 @@ func (h *VClaimHandler) GetPesertaBynik(c *gin.Context) {
})
return
}
if tglsep == "" {
h.logger.Error("Missing required parameter Tanggal SEP", map[string]interface{}{
"request_id": requestID,
})
c.JSON(http.StatusBadRequest, models.ErrorResponseBpjs{
Status: "error",
Message: "Missing required parameter Tanggal SEP",
RequestID: requestID,
})
return
}
// Call service method
var response PesertaResponse
var response peserta.PesertaResponse
endpoint := "/peserta/nik/:nik"
endpoint := "/Peserta/nik/:nik/tglSEP/:tglsep"
endpoint = strings.Replace(endpoint, ":nik", nik, 1)
endpoint = strings.Replace(endpoint, ":tglsep", tglsep, 1)
resp, err := h.service.GetRawResponse(ctx, endpoint)
if err != nil {
@@ -284,7 +243,7 @@ func (h *VClaimHandler) GetPesertaBynik(c *gin.Context) {
// Map the raw response
response.MetaData = resp.MetaData
if resp.Response != nil {
response.Data = &PesertaData{}
response.Data = &peserta.PesertaData{}
if respStr, ok := resp.Response.(string); ok {
// Decrypt the response string
consID, secretKey, _, tstamp, _ := h.config.SetHeader()