Files
api-bpjs-surkon/handlers/bpjs/surat_kontrol/surat_kontrol.go
2025-07-21 08:52:11 +07:00

2928 lines
79 KiB
Go

package suratkontrol
import (
cfg "bridging-rssa/config"
"bridging-rssa/database/satu_data/jadwal"
log_api "bridging-rssa/database/satu_data/log_api"
lokasiruang "bridging-rssa/database/satu_data/lokasi_ruang"
suratkontrol "bridging-rssa/database/satu_data/surat_kontrol"
"bridging-rssa/docs/utils"
"bridging-rssa/handlers/bpjs"
sk "bridging-rssa/models/bpjs/surat_kontrol"
"bridging-rssa/models/config"
logapi "bridging-rssa/models/log_api"
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"strings"
"time"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
)
func InsertSuratkontrolNew(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
//baseUrl := os.Getenv("BASEURL_BPJS_DEV")
//endpoint := os.Getenv("VCLAIM_RS_DEV")
param := os.Getenv("INSERT_SURAT_KONTROL")
url := baseUrl + endpoint + param
timeNow := time.Now().Format("2006-01-02 15:04:05")
conf := config.ConfigBpjs{}
header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
var headerStringBuilder strings.Builder
for key, value := range headers {
headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value))
}
headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ")
var req sk.RequestInsertRencanaKontrol
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
jadwalLibur, isLibur, errLibur := jadwal.GetJadwalLibur(req.TglRencanaKontrol)
if errLibur != nil {
log.Println(errLibur)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
} else if isLibur {
log.Println(jadwalLibur.KeteranganLiburPelayanan)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: "Hari Libur " + jadwalLibur.NamaLiburPelayanan,
})
return
}
kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
var idRuangan int
if kunjunganPasien.Ruangan != 0 {
idRuangan = kunjunganPasien.Ruangan
} else {
idRuangan, err = lokasiruang.GetDaftarLokasiRuang(req.Ruangan)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
}
uuid := uuid.New().String()
if req.TipeSurKon == "2" {
reqJson, err := json.Marshal(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
log.Println("reqJson : ", string(reqJson))
reqSuratKontrol := &sk.RequestHeaderRencanaKontrol{
Request: &sk.ReqInsertRencanaKontrol{
NoSEP: req.NoSEP,
KodeDokter: req.KodeHFIS,
PoliKontrol: req.KodePoli,
TglRencanaKontrol: req.TglRencanaKontrol,
User: req.User,
},
}
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
res, errData := PostData(url, header, headers, reqSuratKontrol)
log.Println("res : ", res)
if errData != nil {
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "201",
Message: err.Error(),
},
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "POST",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
log.Println(err)
bpjs.HandleResponse(c, res)
return
}
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
idDokter, err := suratkontrol.GetIdDokterByHFIS(req.KodeHFIS)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
NamaDiagnosaString := strings.TrimSpace(res.Response.NamaDiagnosa)
parts := strings.SplitN(NamaDiagnosaString, " - ", 2)
var kodeICD, diagnosa string
if len(parts) == 2 {
kodeICD = parts[0]
diagnosa = parts[1]
} else {
kodeICD = res.Response.NamaDiagnosa
diagnosa = ""
}
log.Println("kodeICD : ", kodeICD)
log.Println("diagnosa : ", diagnosa)
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NomorSurKon: res.Response.NoSuratKontrol,
NomorKartu: res.Response.NoKartu,
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: idRuangan,
DPJPSurKon: idDokter,
StatusSurKon: 1, // First Insert status always set to 1
UserCreatedSurKon: req.User,
TipeSurKon: req.TipeSurKon,
TipeRawat: req.TipeRawat,
KodeIcd: kodeICD,
Diagnosa: diagnosa,
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
err = suratkontrol.UpdateKunjunganPasien(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "POST",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
response := &sk.ResponseInsertSuratKontrol{
MetaData: res.MetaData,
Response: sk.ResponseData{
NoSuratKontrol: res.Response.NoSuratKontrol,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NamaDokter: res.Response.NamaDokter,
NoKartu: res.Response.NoKartu,
Nama: res.Response.Nama,
Kelamin: res.Response.Kelamin,
TglLahir: res.Response.TglLahir,
NamaDiagnosa: res.Response.NamaDiagnosa,
SubSpesialis: req.Subspesialis,
},
}
log.Println("Response: ", response)
c.JSON(http.StatusOK, response)
} else {
dataSurkon, err := suratkontrol.GetNomorSurKon(kunjunganPasien.ID)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
noUrut := "001"
if dataSurkon != "" {
noUrut, err = utils.GetNoUrut(dataSurkon)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
}
idDokter, err := suratkontrol.GetIdDokterByHFIS(req.KodeHFIS)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
noSurKon := "SI/" + req.TipeRawat + "/" + req.NoRM + "/" + noUrut
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: req.TglRencanaKontrol,
NomorSurKon: noSurKon,
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: idRuangan,
DPJPSurKon: idDokter,
StatusSurKon: 1, // First Insert status always set to 1
UserCreatedSurKon: req.User,
TipeSurKon: req.TipeSurKon,
TipeRawat: req.TipeRawat,
}
log.Println("INI SURAT INTERNAL", reqInsert)
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
err = suratkontrol.UpdateKunjunganPasien(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "200",
Message: "Berhasil Insert Surat Kontrol",
},
})
return
}
}
func InsertSuratKontrol(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
param := os.Getenv("INSERT_SURAT_KONTROL")
url := baseUrl + endpoint + param
timeNow := time.Now().Format("2006-01-02 15:04:05")
var req sk.RequestInsertRencanaKontrol
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
log.Println(req)
jadwalLibur, isLibur, errLibur := jadwal.GetJadwalLibur(req.TglRencanaKontrol)
if errLibur != nil {
log.Println(errLibur)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: errLibur.Error(),
},
})
return
} else if isLibur {
log.Println(jadwalLibur.KeteranganLiburPelayanan)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: jadwalLibur.NamaLiburPelayanan,
},
})
return
}
reqJson, err := json.Marshal(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
log.Println("Request: ", string(reqJson))
conf := config.ConfigBpjs{}
header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
var headerStringBuilder strings.Builder
for key, value := range headers {
headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value))
}
headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ")
kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
var idRuangan int
if kunjunganPasien.Ruangan != 0 {
idRuangan = kunjunganPasien.Ruangan
} else {
idRuangan, err = lokasiruang.GetDaftarLokasiRuang(req.Ruangan)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
}
uuid := uuid.New().String()
if req.TipeSurKon != "1" {
dataSurkon, err := suratkontrol.GetNomorSurKon(kunjunganPasien.ID)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
noUrut := "001"
if dataSurkon != "" {
noUrut, err = utils.GetNoUrut(dataSurkon)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
}
noSurKon := "SI/" + req.TipeRawat + "/" + kunjunganPasien.NomorRM + "/" + noUrut
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: req.TglRencanaKontrol,
NomorSurKon: noSurKon,
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: idRuangan,
DPJPSurKon: req.IDDokter,
StatusSurKon: 1, // First Insert status always set to 1
UserCreatedSurKon: req.User,
TipeSurKon: req.TipeSurKon,
TipeRawat: req.TipeRawat,
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
err = suratkontrol.UpdateKunjunganPasien(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "200",
Message: "Berhasil Insert Surat Kontrol",
},
})
return
}
reqSuratKontrol := &sk.RequestHeaderRencanaKontrol{
Request: &sk.ReqInsertRencanaKontrol{
NoSEP: req.NoSEP,
KodeDokter: req.KodeHFIS,
PoliKontrol: req.KodePoli,
TglRencanaKontrol: req.TglRencanaKontrol,
User: req.User,
},
}
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
res, err := PostData(url, header, headers, reqSuratKontrol)
if err != nil {
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "POST",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: res.MetaData,
})
return
}
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NomorSurKon: res.Response.NoSuratKontrol,
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: idRuangan,
DPJPSurKon: req.IDDokter,
StatusSurKon: 1, // First Insert status always set to 1
UserCreatedSurKon: req.User,
TipeSurKon: req.TipeSurKon,
TipeRawat: req.TipeRawat,
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
if req.KodeDiagnosa == "" || req.NamaDiagnosa == "" {
diagnosa := strings.Split(res.Response.NamaDiagnosa, " - ")
req.KodeDiagnosa = diagnosa[0]
req.NamaDiagnosa = diagnosa[1]
}
err = suratkontrol.UpdateKunjunganPasien(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "POST",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
response := &sk.ResponseInsertSuratKontrol{
MetaData: res.MetaData,
Response: sk.ResponseData{
NoSuratKontrol: res.Response.NoSuratKontrol,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NamaDokter: res.Response.NamaDokter,
NoKartu: res.Response.NoKartu,
Nama: res.Response.Nama,
Kelamin: res.Response.Kelamin,
TglLahir: res.Response.TglLahir,
NamaDiagnosa: res.Response.NamaDiagnosa,
SubSpesialis: req.Subspesialis,
},
}
log.Println("Response: ", response)
c.JSON(http.StatusOK, response)
}
func UpdateSuratKontrol(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
param := os.Getenv("UPDATE_SURAT_KONTROL")
url := baseUrl + endpoint + param
var req sk.RequestUpdateRencanaKontrol
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
jadwalLibur, isLibur, errLibur := jadwal.GetJadwalLibur(req.TglRencanaKontrol)
if errLibur != nil {
log.Println(errLibur)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
} else if isLibur {
log.Println(jadwalLibur.KeteranganLiburPelayanan)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: jadwalLibur.NamaLiburPelayanan,
})
return
}
reqJson, err := json.Marshal(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
log.Println("Request: ", string(reqJson))
timeNow := time.Now().Format("2006-01-02 15:04:05")
kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
uuid := uuid.New().String()
if req.TipeSurKon != "1" {
dataSurkon, err := suratkontrol.GetNomorSurKon(kunjunganPasien.ID)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: req.TglRencanaKontrol,
NomorSurKon: dataSurkon, //TODO How to get Nomor SurKon
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: kunjunganPasien.Ruangan,
DPJPSurKon: req.IDDokter,
StatusSurKon: 1, // First Insert status always set to 1
TipeSurKon: req.TipeSurKon,
UserUpdatedSurKon: req.User,
TipeRawat: req.TipeRawat,
}
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDSurKon,
StatusSurKon: 2,
UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
c.JSON(http.StatusOK, &sk.MetadataString{
Code: "200",
Message: "Berhasil Update Surat Kontrol",
})
return
}
log.Println("Request: ", reqJson)
conf := config.ConfigBpjs{}
header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
var headerStringBuilder strings.Builder
for key, value := range headers {
headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value))
}
headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ")
reqSuratKontrol := &sk.RequestHeaderRencanaKontrol{
Request: &sk.ReqUpdateRencanaKontrol{
NoSuratKontrol: req.NoSuratKontrol,
NoSEP: req.NoSEP,
KodeDokter: req.KodeHFIS,
PoliKontrol: req.KodePoli,
TglRencanaKontrol: req.TglRencanaKontrol,
User: req.User,
},
}
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
res, err := ResponseUpdateSuratKontrol(url, header, headers, reqSuratKontrol)
if err != nil {
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
if res.MetaData.Code == "504" {
log.Println(err)
c.JSON(http.StatusGatewayTimeout, res.MetaData)
return
}
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "PUT",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
log.Println(err)
c.JSON(http.StatusInternalServerError, res.MetaData)
return
}
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDSurKon,
StatusSurKon: 2,
UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NomorSurKon: res.Response.NoSuratKontrol,
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: kunjunganPasien.Ruangan,
DPJPSurKon: req.IDDokter,
StatusSurKon: 1, // Insert status always set to 1
TipeSurKon: "1",
UserUpdatedSurKon: req.User,
}
if reqInsert.DPJPSurKon == "" {
reqInsert.DPJPSurKon = kunjunganPasien.DPJP
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "PUT",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
c.JSON(http.StatusOK, res)
}
func UpdateSuratKontrolnew(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
//baseUrl := os.Getenv("BASEURL_BPJS_DEV")
//endpoint := os.Getenv("VCLAIM_RS_DEV")
param := os.Getenv("UPDATE_SURAT_KONTROL")
url := baseUrl + endpoint + param
conf := config.ConfigBpjs{}
header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
var headerStringBuilder strings.Builder
for key, value := range headers {
headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value))
}
headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ")
var req sk.RequestUpdateRencanaKontrolNew
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "203",
Message: err.Error(),
})
return
}
jadwalLibur, isLibur, errLibur := jadwal.GetJadwalLibur(req.TglRencanaKontrol)
if errLibur != nil {
log.Println(errLibur)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
} else if isLibur {
log.Println(jadwalLibur.KeteranganLiburPelayanan)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: "Hari Libur " + jadwalLibur.NamaLiburPelayanan,
})
return
}
timeNow := time.Now().Format("2006-01-02 15:04:05")
kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
UserCreated, err := suratkontrol.GetUserCreated(req.IDSurKon)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
}
dateCetakSurkon, _ := time.Parse(time.RFC3339, UserCreated.DataCreate)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
uuid := uuid.New().String()
if req.TipeSurKon == "2" {
reqJson, err := json.Marshal(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "203",
Message: err.Error(),
})
return
}
log.Println("reqJson : ", string(reqJson))
reqSuratKontrol := &sk.RequestHeaderRencanaKontrol{
Request: &sk.ReqUpdateRencanaKontrol{
NoSuratKontrol: req.NoSuratKontrol,
NoSEP: req.NoSEP,
KodeDokter: req.KodeHFIS,
PoliKontrol: req.KodePoli,
TglRencanaKontrol: req.TglRencanaKontrol,
User: req.User,
},
}
log.Println("reqJson : ", reqSuratKontrol)
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
res, errData := ResponseUpdateSuratKontrol(url, header, headers, reqSuratKontrol)
log.Println("error nya", errData)
log.Println("ResponseUpdateSuratKontrol: ", res)
if errData != nil {
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: res.MetaData.Code,
Message: res.MetaData.Message,
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
if res.MetaData.Code == "504" {
log.Println(err)
c.JSON(http.StatusGatewayTimeout, res.MetaData)
return
}
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "PUT",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
log.Println(err)
bpjs.HandleResponse(c, res)
return
}
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDSurKon,
StatusSurKon: 2,
UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
idDokter, err := suratkontrol.GetIdDokterByHFIS(req.KodeHFIS)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
}
parts := strings.SplitN(res.Response.NamaDiagnosa, " - ", 2)
var kodeICD, diagnosa string
if len(parts) == 2 {
kodeICD = parts[0]
diagnosa = parts[1]
} else {
kodeICD = res.Response.NamaDiagnosa
diagnosa = ""
}
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateUpdated: timeNow,
DateCreated: dateCetakSurkonString,
TglCetakSurKon: timeNow,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NomorSurKon: res.Response.NoSuratKontrol,
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: kunjunganPasien.Ruangan,
DPJPSurKon: idDokter,
StatusSurKon: 1, // Insert status always set to 1
TipeSurKon: req.TipeSurKon,
TipeRawat: req.TipeRawat,
UserCreatedSurKon: UserCreated.UserCreate,
UserUpdatedSurKon: req.User,
KodeIcd: kodeICD,
Diagnosa: diagnosa,
}
if reqInsert.DPJPSurKon == "" {
reqInsert.DPJPSurKon = kunjunganPasien.DPJP
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "PUT",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
log.Println("MASUK LOG DISINI: ", reqInsertLog)
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
log.Println("RESPON: ", res)
bpjs.HandleResponse(c, res)
} else {
dataSurkon, err := suratkontrol.GetNomorSurKon(kunjunganPasien.ID)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDSurKon,
StatusSurKon: 2,
UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
UserCreated, err := suratkontrol.GetUserCreated(req.IDSurKon)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
}
idDokter, err := suratkontrol.GetIdDokterByHFIS(req.KodeHFIS)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
}
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: dateCetakSurkonString,
DateUpdated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: req.TglRencanaKontrol,
NomorSurKon: dataSurkon, //TODO How to get Nomor SurKon
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: kunjunganPasien.Ruangan,
DPJPSurKon: idDokter,
StatusSurKon: 1, // First Insert status always set to 1
TipeSurKon: req.TipeSurKon,
UserCreatedSurKon: UserCreated.UserCreate,
UserUpdatedSurKon: req.User,
TipeRawat: req.TipeRawat,
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
c.JSON(http.StatusOK, &sk.MetadataString{
Code: "200",
Message: "Berhasil Update Surat Kontrol",
})
return
}
}
func DeleteSuratKontrolNew(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
//baseUrl := os.Getenv("BASEURL_BPJS_DEV")
//endpoint := os.Getenv("VCLAIM_RS_DEV")
param := os.Getenv("DELETE_SURAT_KONTROL")
url := baseUrl + endpoint + param
conf := config.ConfigBpjs{}
header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
var headerStringBuilder strings.Builder
for key, value := range headers {
headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value))
}
headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ")
var req sk.ReqDeleteRencanaKontrol
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
log.Println("REQUEST: ", req)
timeNow := time.Now().Format("2006-01-02 15:04:05")
if req.TipeSurKon == "2" {
reqJson, err := json.Marshal(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
log.Println("ini reqjson nya:", reqJson)
request := &sk.RequestHeaderRencanaKontrol{
Request: &sk.TSuratKontrol{
RequestDelete: sk.RequestDeleteRencanaKontrol{
NoSuratKontrol: req.NomorSurKon,
User: req.User,
},
},
}
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
res, errData := ResponseDeleteSuratKontrol(url, header, headers, request)
log.Println("RESPONSE DELETE: ", res)
log.Println("RESPONSE HEADER: ", errData)
if errData != nil {
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
uuid := uuid.New().String()
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "DELETE",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
log.Printf("Error making external API request: %v", err)
bpjs.HandleResponse(c, res)
return
}
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
uuid := uuid.New().String()
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "DELETE",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDDataSurKon,
StatusSurKon: 0,
UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
bpjs.HandleResponse(c, res)
} else {
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDDataSurKon,
StatusSurKon: 0,
UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
res := &sk.MetadataString{
Code: "200",
Message: "Berhasil Hapus Data",
}
c.JSON(http.StatusOK, res)
return
}
}
func DeleteSuratKontrol(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
param := os.Getenv("DELETE_SURAT_KONTROL")
url := baseUrl + endpoint + param
var req sk.ReqDeleteRencanaKontrol
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
reqJson, err := json.Marshal(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
log.Println("REQUEST: ", req)
timeNow := time.Now().Format("2006-01-02 15:04:05")
if req.TipeSurKon != "1" {
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDDataSurKon,
StatusSurKon: 0,
UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
res := &sk.MetadataString{
Code: "200",
Message: "Berhasil Hapus Data",
}
c.JSON(http.StatusOK, res)
return
}
conf := config.ConfigBpjs{}
header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
var headerStringBuilder strings.Builder
for key, value := range headers {
headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value))
}
headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ")
request := &sk.RequestHeaderRencanaKontrol{
Request: &sk.TSuratKontrol{
RequestDelete: sk.RequestDeleteRencanaKontrol{
NoSuratKontrol: req.NomorSurKon,
User: req.User,
},
},
}
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
res, err := ResponseDeleteSuratKontrol(url, header, headers, request)
if err != nil {
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
uuid := uuid.New().String()
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "DELETE",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
log.Printf("Error making external API request: %v", err)
c.JSON(http.StatusInternalServerError, err)
return
}
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
uuid := uuid.New().String()
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "DELETE",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDDataSurKon,
StatusSurKon: 0,
UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
c.JSON(http.StatusOK, res)
}
func GetNomorSuratKontrol(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
param := os.Getenv("GET_NOMOR_SURAT_KONTROL")
noSurat := c.Param("noSuratKontrol")
url := baseUrl + endpoint + param + noSurat
conf := config.ConfigBpjs{}
header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
res, err := ResponseGetNomorSuratKontrol(url, header, headers)
if err != nil {
log.Printf("Error making external API request: %v", err)
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, res)
}
func GetSuratKontrolBySEP(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
param := os.Getenv("GET_SURAT_KONTROL_SEP")
noSEP := c.Param("noSEP")
url := baseUrl + endpoint + param + noSEP
conf := config.ConfigBpjs{}
header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
res, err := ResponseGetSuratKontrolBySEP(url, header, headers)
if err != nil {
log.Printf("Error making external API request: %v", err)
c.JSON(http.StatusInternalServerError, err)
return
}
c.JSON(http.StatusOK, res)
}
func GetDataSurKon(c *gin.Context) {
offset := c.Param("offset")
limit := c.Param("limit")
data, err := suratkontrol.GetDataSuratKontrol(offset, limit)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
var resSurKon []*sk.ResponseGetDataSuratKontrol
for _, v := range data {
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
namaLengkap := gelarDepan + " " + v.NamaLengkapDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, v.TglCetakSurKon)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, v.TglRencanaKontrol)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
resSurKon = append(resSurKon, &sk.ResponseGetDataSuratKontrol{
IDDataSurKon: v.IDDataSurKon,
IDXDaftar: v.IDXDaftar,
TglCetakSurKon: dateCetakSurkonString,
TglRencanaKontrol: dateRencanaSurkonString,
NomorSurKon: v.NomorSurKon,
PoliAsal: v.PoliAsal,
PoliTujuan: v.PoliTujuan,
NomorSEP: v.NomorSEP,
NamaPasien: v.NamaPasien,
NamaDokter: namaLengkap,
NomorKartu: "",
Subspesialis: v.Subspesialis,
KodePoli: v.KodePoli,
KodeDokter: v.KodeDokter,
IDDokter: v.IDDokter,
KodeDPJP: v.KodeDPJP,
NoRM: v.NoRM,
KodeDiagnosa: v.KodeDiagnosa,
NamaDiagnosa: v.NamaDiagnosa,
TipeSurKon: v.TipeSurKon,
TipeRawat: v.TipeRawat,
})
}
c.JSON(http.StatusOK, resSurKon)
}
func GetDataSurKonByID(c *gin.Context) {
id := c.Param("idxdaftar")
tipe := c.Param("tiperawat")
var dataSurKon *sk.GetDataSuratKontrol
dataSurKon, err := suratkontrol.GetDataSuratKontrolByIDTipe(id, tipe)
if err != nil {
if err.Error() == "Data tidak ada" {
dataSurKon, err = suratkontrol.GetDataSuratKontrolByID(id)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
} else {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
}
gelarDepan := utils.ReplaceGelar(dataSurKon.GelarDepan)
gelarBelakang := utils.ReplaceGelar(dataSurKon.GelarBelakang)
namaLengkap := gelarDepan + " " + dataSurKon.NamaLengkapDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, dataSurKon.TglCetakSurKon)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, dataSurKon.TglRencanaKontrol)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
resSurKon := &sk.ResponseGetDataSuratKontrol{
IDDataSurKon: dataSurKon.IDDataSurKon,
IDXDaftar: dataSurKon.IDXDaftar,
TglCetakSurKon: dateCetakSurkonString,
TglRencanaKontrol: dateRencanaSurkonString,
NomorSurKon: dataSurKon.NomorSurKon,
PoliAsal: dataSurKon.PoliAsal,
PoliTujuan: dataSurKon.PoliTujuan,
NomorSEP: dataSurKon.NomorSEP,
NamaPasien: dataSurKon.NamaPasien,
NamaDokter: namaLengkap,
NomorKartu: "",
Subspesialis: dataSurKon.Subspesialis,
KodePoli: dataSurKon.KodePoli,
KodeDokter: dataSurKon.KodeDokter,
IDPoli: dataSurKon.IDPoli,
IDDokter: dataSurKon.IDDokter,
KodeDPJP: dataSurKon.KodeDPJP,
NoRM: dataSurKon.NoRM,
KodeDiagnosa: dataSurKon.KodeDiagnosa,
NamaDiagnosa: dataSurKon.NamaDiagnosa,
TipeSurKon: dataSurKon.TipeSurKon,
User: dataSurKon.User,
}
c.JSON(http.StatusOK, resSurKon)
}
func NewGetDataSurKonByID(c *gin.Context) {
id := c.Param("idxdaftar")
tipe := c.Param("tiperawat")
var dataSurKon *sk.GetDataSuratKontrol
dataSurKon, err := suratkontrol.GetDataSuratKontrolByIDTipe(id, tipe)
if err != nil {
if err.Error() == "Data tidak ada" {
dataSurKon, err = suratkontrol.GetDataSuratKontrolByID(id)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: "Pasien Belum Di terbitkan Surat Kontrol",
})
return
}
} else {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: "Pasien Belum Di terbitkan Surat Kontrol",
})
return
}
}
gelarDepan := utils.ReplaceGelar(dataSurKon.GelarDepan)
gelarBelakang := utils.ReplaceGelar(dataSurKon.GelarBelakang)
namaLengkap := gelarDepan + " " + dataSurKon.NamaLengkapDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, dataSurKon.TglCetakSurKon)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, dataSurKon.TglRencanaKontrol)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
resSurKon := &sk.ResponseGetDataSuratKontrol{
IDDataSurKon: dataSurKon.IDDataSurKon,
IDXDaftar: dataSurKon.IDXDaftar,
TglCetakSurKon: dateCetakSurkonString,
TglRencanaKontrol: dateRencanaSurkonString,
NomorSurKon: dataSurKon.NomorSurKon,
PoliAsal: dataSurKon.PoliAsal,
PoliTujuan: dataSurKon.PoliTujuan,
NomorSEP: dataSurKon.NomorSEP,
NamaPasien: dataSurKon.NamaPasien,
NamaDokter: namaLengkap,
NomorKartu: "",
Subspesialis: dataSurKon.Subspesialis,
KodePoli: dataSurKon.KodePoli,
KodeDokter: dataSurKon.KodeDokter,
IDPoli: dataSurKon.IDPoli,
IDDokter: dataSurKon.IDDokter,
KodeDPJP: dataSurKon.KodeDPJP,
NoRM: dataSurKon.NoRM,
KodeDiagnosa: dataSurKon.KodeDiagnosa,
NamaDiagnosa: dataSurKon.NamaDiagnosa,
TipeSurKon: dataSurKon.TipeSurKon,
User: dataSurKon.User,
}
c.JSON(http.StatusOK, resSurKon)
}
func GetDataSurKonByNoSurkon(c *gin.Context) {
id := c.Param("idxdaftar")
nomor := c.Param("nomorsurkon")
var dataSurKon *sk.GetDataSuratKontrol
dataSurKon, err := suratkontrol.GetDataSuratKontrolByIDnomor(id, nomor)
if err != nil {
if err.Error() == "Data tidak ada" {
dataSurKon, err = suratkontrol.GetDataSuratKontrolnomor(nomor)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
} else {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
}
gelarDepan := utils.ReplaceGelar(dataSurKon.GelarDepan)
gelarBelakang := utils.ReplaceGelar(dataSurKon.GelarBelakang)
namaLengkap := gelarDepan + " " + dataSurKon.NamaLengkapDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, dataSurKon.TglCetakSurKon)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, dataSurKon.TglRencanaKontrol)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
resSurKon := &sk.ResponseGetDataSuratKontrol{
IDDataSurKon: dataSurKon.IDDataSurKon,
IDXDaftar: dataSurKon.IDXDaftar,
TglCetakSurKon: dateCetakSurkonString,
TglRencanaKontrol: dateRencanaSurkonString,
NomorSurKon: dataSurKon.NomorSurKon,
PoliAsal: dataSurKon.PoliAsal,
PoliTujuan: dataSurKon.PoliTujuan,
NomorSEP: dataSurKon.NomorSEP,
NamaPasien: dataSurKon.NamaPasien,
NamaDokter: namaLengkap,
NomorKartu: dataSurKon.NomorKartu,
Subspesialis: dataSurKon.Subspesialis,
KodePoli: dataSurKon.KodePoli,
KodeDokter: dataSurKon.KodeDokter,
IDPoli: dataSurKon.IDPoli,
IDDokter: dataSurKon.IDDokter,
KodeDPJP: dataSurKon.KodeDPJP,
NoRM: dataSurKon.NoRM,
KodeDiagnosa: dataSurKon.KodeIcd,
NamaDiagnosa: dataSurKon.Diagnosa,
TipeSurKon: dataSurKon.TipeSurKon,
User: dataSurKon.User,
}
c.JSON(http.StatusOK, resSurKon)
}
func GetDataSurKonByIDSurkon(c *gin.Context) {
id := c.Param("idxdaftar")
idsurkon := c.Param("id")
var dataSurKon *sk.GetDataSuratKontrol
dataSurKon, err := suratkontrol.GetDataSuratKontrolByIDsrukon(id, idsurkon)
if err != nil {
if err.Error() == "Data tidak ada" {
dataSurKon, err = suratkontrol.GetDataSuratKontrolidsurkon(idsurkon)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
} else {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
}
gelarDepan := utils.ReplaceGelar(dataSurKon.GelarDepan)
gelarBelakang := utils.ReplaceGelar(dataSurKon.GelarBelakang)
namaLengkap := gelarDepan + " " + dataSurKon.NamaLengkapDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, dataSurKon.TglCetakSurKon)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, dataSurKon.TglRencanaKontrol)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
resSurKon := &sk.ResponseGetDataSuratKontrol{
IDDataSurKon: dataSurKon.IDDataSurKon,
IDXDaftar: dataSurKon.IDXDaftar,
TglCetakSurKon: dateCetakSurkonString,
TglRencanaKontrol: dateRencanaSurkonString,
NomorSurKon: dataSurKon.NomorSurKon,
PoliAsal: dataSurKon.PoliAsal,
PoliTujuan: dataSurKon.PoliTujuan,
NomorSEP: dataSurKon.NomorSEP,
NamaPasien: dataSurKon.NamaPasien,
NamaDokter: namaLengkap,
NomorKartu: dataSurKon.NomorKartu,
Subspesialis: dataSurKon.Subspesialis,
KodePoli: dataSurKon.KodePoli,
KodeDokter: dataSurKon.KodeDokter,
IDPoli: dataSurKon.IDPoli,
IDDokter: dataSurKon.IDDokter,
KodeDPJP: dataSurKon.KodeDPJP,
NoRM: dataSurKon.NoRM,
KodeDiagnosa: dataSurKon.KodeIcd,
NamaDiagnosa: dataSurKon.Diagnosa,
TipeSurKon: dataSurKon.TipeSurKon,
User: dataSurKon.User,
}
c.JSON(http.StatusOK, resSurKon)
}
func PrintSurKon(c *gin.Context) {
id := c.Param("idxdaftar")
data, err := suratkontrol.GetDataSuratKontrolByID(id)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
gelarDepan := utils.ReplaceGelar(data.GelarDepan)
gelarBelakang := utils.ReplaceGelar(data.GelarBelakang)
namaLengkap := gelarDepan + " " + data.NamaLengkapDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, data.TglCetakSurKon)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, data.TglRencanaKontrol)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
resSurKon := &sk.ResponseGetDataSuratKontrol{
IDDataSurKon: data.IDDataSurKon,
IDXDaftar: data.IDXDaftar,
TglCetakSurKon: dateCetakSurkonString,
TglRencanaKontrol: dateRencanaSurkonString,
NomorSurKon: data.NomorSurKon,
PoliAsal: data.PoliAsal,
PoliTujuan: data.PoliTujuan,
NomorSEP: data.NomorSEP,
NamaPasien: data.NamaPasien,
NamaDokter: namaLengkap,
NomorKartu: "",
Subspesialis: data.Subspesialis,
}
log.Println("Data surkon", resSurKon)
c.JSON(http.StatusOK, resSurKon)
}
func CariPasienTPP(c *gin.Context) {
var req sk.RequestCariPasien
err := c.ShouldBindJSON(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
log.Println("request :", req)
query := ``
var args []interface{}
var argsCount []interface{}
var data []*sk.GetDataSuratKontrol
var count int
if req.NoRM != "" {
query += `and dkp2."NOMR" = ?`
argsCount = append(argsCount, req.TipeSurKon, req.NoRM, req.TanggalAwal, req.TanggalAkhir)
count, err = suratkontrol.CountDataSurKon(req, query, argsCount)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
args = append(args, req.TipeSurKon, req.NoRM, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit)
data, err = suratkontrol.SearchDataSurKon(req, query, args)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
} else if req.NoSEP != "" {
query += `and dkp2."Nomor_sep" = ?`
argsCount = append(argsCount, req.TipeSurKon, req.NoSEP, req.TanggalAwal, req.TanggalAkhir)
count, err = suratkontrol.CountDataSurKon(req, query, argsCount)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
args = append(args, req.TipeSurKon, req.NoSEP, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit)
data, err = suratkontrol.SearchDataSurKon(req, query, args)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
} else if req.PoliKlinik != "" {
query += `and ds."id" = ?`
argsCount = append(argsCount, req.TipeSurKon, req.PoliKlinik, req.TanggalAwal, req.TanggalAkhir)
count, err = suratkontrol.CountDataSurKon(req, query, argsCount)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
args = append(args, req.TipeSurKon, req.PoliKlinik, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit)
data, err = suratkontrol.SearchDataSurKon(req, query, args)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
} else {
argsCount = append(argsCount, req.TipeSurKon, req.TanggalAwal, req.TanggalAkhir)
count, err = suratkontrol.CountDataSurKon(req, query, argsCount)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
args = append(args, req.TipeSurKon, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit)
data, err = suratkontrol.SearchDataSurKon(req, query, args)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
}
var listData []*sk.ResponseGetDataSuratKontrol
for _, v := range data {
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
namaLengkap := gelarDepan + " " + v.NamaLengkapDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, v.TglCetakSurKon)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, v.TglRencanaKontrol)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
listData = append(listData, &sk.ResponseGetDataSuratKontrol{
IDDataSurKon: v.IDDataSurKon,
IDXDaftar: v.IDXDaftar,
TglCetakSurKon: dateCetakSurkonString,
TglRencanaKontrol: dateRencanaSurkonString,
NomorSurKon: v.NomorSurKon,
PoliAsal: v.PoliAsal,
PoliTujuan: v.PoliTujuan,
NomorSEP: v.NomorSEP,
NamaPasien: v.NamaPasien,
NamaDokter: namaLengkap,
NomorKartu: "",
Subspesialis: v.Subspesialis,
KodePoli: v.KodePoli,
KodeDokter: v.KodeDokter,
IDDokter: v.IDDokter,
KodeDPJP: v.KodeDPJP,
NoRM: v.NoRM,
KodeDiagnosa: v.KodeDiagnosa,
NamaDiagnosa: v.NamaDiagnosa,
TipeSurKon: v.TipeSurKon,
TipeRawat: v.TipeRawat,
})
}
resSurKon := &sk.ResponseCariDataSuratKontrol{
JumlahData: count,
ListDataSuratKontrol: listData,
}
c.JSON(http.StatusOK, resSurKon)
}
func GethistoribyNorm(c *gin.Context) {
norm := c.Param("norm")
offset := c.Param("offset")
limit := c.Param("limit")
data, err := suratkontrol.Getdatahistori(norm, offset, limit)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
var resHisSurKon []*sk.Dataresponse
for _, v := range data {
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
namaLengkap := gelarDepan + " " + v.NamaDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, v.TanggalCetak)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, v.TanggalRencana)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
resHisSurKon = append(resHisSurKon, &sk.Dataresponse{
NamaPasien: v.NamaPasien,
NoSEP: v.NoSEP,
IdSurkon: v.IdSurkon,
Idxdaftar: v.Idxdaftar,
NomorSuratkontrol: v.NomorSuratkontrol,
TanggalRencana: dateRencanaSurkonString,
TanggalCetak: dateCetakSurkonString,
Spesialis: v.Spesialis,
Subspesialis: v.Subspesialis,
NamaLengkap: namaLengkap,
Tiperawat: v.Tiperawat,
TipeSurkon: v.TipeSurkon,
UserCreate: v.UserCreate,
UserUpdate: v.UserUpdate,
Status: v.Status,
})
}
c.JSON(http.StatusOK, resHisSurKon)
}
func InsertSpri(c *gin.Context) {
//baseUrl := os.Getenv("BASEURL_BPJS")
//endpoint := os.Getenv("SURAT_KONTROL_RS")
baseUrl := os.Getenv("BASEURL_BPJS_DEV")
endpoint := os.Getenv("VCLAIM_RS_DEV")
param := os.Getenv("INSERT_SPRI")
url := baseUrl + endpoint + param
log.Println(url)
timeNow := time.Now().Format("2006-01-02 15:04:05")
conf := config.ConfigBpjs{}
header := cfg.SetHeaderDev(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
var headerStringBuilder strings.Builder
for key, value := range headers {
headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value))
}
headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ")
log.Println(headerString)
var req sk.RequestInsertSPRI
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
var idRuangan int
if kunjunganPasien.Ruangan != 0 {
idRuangan = kunjunganPasien.Ruangan
} else {
idRuangan, err = lokasiruang.GetDaftarLokasiRuang(req.Ruangan)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
}
idDokter, err := suratkontrol.GetIdDokterByHFIS(req.KodeHFIS)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
uuid := uuid.New().String()
if req.TipeSurKon == "2" || req.TipeSurKon == "5" {
reqJson, err := json.Marshal(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
reqSPRI := &sk.RequestHeaderRencanaKontrol{
Request: &sk.ReqInsertSPRIbpjs{
NoKartu: req.NoKartu,
KodeDokter: req.KodeHFIS,
PoliKontrol: req.KodePoli,
TglRencanaKontrol: req.TglRencanaKontrol,
User: req.User,
},
}
log.Println(reqSPRI)
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
res, errData := PostDataSPRI(url, header, headers, reqSPRI)
log.Println("responnya : ", res)
log.Println("errornya : ", errData)
log.Println(logTimeStart)
if errData != nil {
log.Println(errData)
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "201",
Message: err.Error(),
},
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol/InsertSPRI",
Header: headerString,
Method: "POST",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
bpjs.HandleResponseSPRI(c, res)
return
}
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
MetaData: sk.MetadataString{
Code: "203",
Message: err.Error(),
},
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NomorSurKon: res.Response.NoSPRI,
NomorKartu: res.Response.NoKartu,
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: idRuangan,
DPJPSurKon: idDokter,
StatusSurKon: 1, // First Insert status always set to 1
UserCreatedSurKon: req.User,
TipeSurKon: "5",
TipeRawat: "RI",
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol/InsertSPRI",
Header: headerString,
Method: "POST",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
response := &sk.ResponseInsertSuratKontrolSPRI{
MetaData: res.MetaData,
Response: sk.ResponseDataSPRI{
NoSPRI: res.Response.NoSPRI,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NamaDokter: res.Response.NamaDokter,
NoKartu: res.Response.NoKartu,
Nama: res.Response.Nama,
Kelamin: res.Response.Kelamin,
TglLahir: res.Response.TglLahir,
NamaDiagnosa: res.Response.NamaDiagnosa,
},
}
log.Println("Response: ", response)
c.JSON(http.StatusOK, response)
} else {
}
}
func UpdateSpri(c *gin.Context) {
//baseUrl := os.Getenv("BASEURL_BPJS")
//endpoint := os.Getenv("SURAT_KONTROL_RS")
baseUrl := os.Getenv("BASEURL_BPJS_DEV")
endpoint := os.Getenv("VCLAIM_RS_DEV")
param := os.Getenv("UPDATE_SPRI")
url := baseUrl + endpoint + param
conf := config.ConfigBpjs{}
header := cfg.SetHeaderDev(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
var headerStringBuilder strings.Builder
for key, value := range headers {
headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value))
}
headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ")
var req sk.RequestUpdateRencanaKontrolspri
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "203",
Message: err.Error(),
})
return
}
timeNow := time.Now().Format("2006-01-02 15:04:05")
kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
uuid := uuid.New().String()
if req.TipeSurKon == "5" {
reqJson, err := json.Marshal(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "203",
Message: err.Error(),
})
return
}
log.Println("reqJson : ", string(reqJson))
reqSuratKontrolspri := &sk.RequestHeaderRencanaKontrol{
Request: &sk.ReqUpdateRencanaKontrolspri{
NoSPRI: req.NoSPRI,
KodeDokter: req.KodeHFIS,
PoliKontrol: req.KodePoli,
TglRencanaKontrol: req.TglRencanaKontrol,
User: req.User,
},
}
log.Println("reqJson : ", reqSuratKontrolspri)
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
res, errData := ResponseUpdateSuratKontrolSPRI(url, header, headers, reqSuratKontrolspri)
log.Println("error nya", errData)
log.Println("ResponseUpdateSuratKontrol: ", res)
if errData != nil {
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: res.MetaData.Code,
Message: res.MetaData.Message,
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
if res.MetaData.Code == "504" {
log.Println(err)
c.JSON(http.StatusGatewayTimeout, res.MetaData)
return
}
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "PUT",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
log.Println(err)
bpjs.HandleResponseSPRI(c, res)
return
}
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDSurKon,
StatusSurKon: 2,
UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
UserCreated, err := suratkontrol.GetUserCreated(req.IDSurKon)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
}
idDokter, err := suratkontrol.GetIdDokterByHFIS(req.KodeHFIS)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
}
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: UserCreated.DataCreate,
DateUpdated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NomorSurKon: res.Response.NoSPRI,
NomorKartu: res.Response.NoKartu,
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: kunjunganPasien.Ruangan,
DPJPSurKon: idDokter,
StatusSurKon: 1, // Insert status always set to 1
TipeSurKon: req.TipeSurKon,
TipeRawat: req.TipeRawat,
UserCreatedSurKon: UserCreated.UserCreate,
UserUpdatedSurKon: req.User,
}
if reqInsert.DPJPSurKon == "" {
reqInsert.DPJPSurKon = kunjunganPasien.DPJP
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-VClaim-RencanaKontrol/UpdateSPRI",
Header: headerString,
Method: "PUT",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: res.MetaData.Code,
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
log.Println("MASUK LOG DISINI: ", reqInsertLog)
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
response := &sk.ResponseInsertSuratKontrolSPRI{
MetaData: res.MetaData,
Response: sk.ResponseDataSPRI{
NoSPRI: res.Response.NoSPRI,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NamaDokter: res.Response.NamaDokter,
NoKartu: res.Response.NoKartu,
Nama: res.Response.Nama,
Kelamin: res.Response.Kelamin,
TglLahir: res.Response.TglLahir,
NamaDiagnosa: res.Response.NamaDiagnosa,
},
}
log.Println("Response: ", response)
c.JSON(http.StatusOK, response)
} else {
//dataSurkon, err := suratkontrol.GetNomorSurKon(kunjunganPasien.ID)
//if err != nil {
// log.Println(err)
// c.JSON(http.StatusCreated, &sk.MetadataString{
// Code: "201",
// Message: err.Error(),
// })
// return
//}
//
//reqUpdate := &sk.DataSuratKontrol{
// DateUpdated: timeNow,
// ID: req.IDSurKon,
// StatusSurKon: 2,
// UserUpdatedSurKon: req.User,
//}
//
//err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
//if err != nil {
// log.Println(err)
// c.JSON(http.StatusCreated, &sk.MetadataString{
// Code: "201",
// Message: err.Error(),
// })
// return
//}
//UserCreated, err := suratkontrol.GetUserCreated(req.IDSurKon)
//if err != nil {
// log.Println(err)
// c.JSON(http.StatusCreated, &sk.MetadataString{
// Code: "201",
// Message: err.Error(),
// })
//}
//idDokter, err := suratkontrol.GetIdDokterByHFIS(req.KodeHFIS)
//if err != nil {
// log.Println(err)
// c.JSON(http.StatusCreated, &sk.MetadataString{
// Code: "201",
// Message: err.Error(),
// })
//}
//reqInsert := &sk.DataSuratKontrol{
// ID: uuid,
// DateCreated: timeNow,
// TglCetakSurKon: timeNow,
// TglRencanaKontrol: req.TglRencanaKontrol,
// NomorSurKon: dataSurkon, //TODO How to get Nomor SurKon
// KunjunganPasien: kunjunganPasien.ID,
// RuanganSurKon: kunjunganPasien.Ruangan,
// DPJPSurKon: idDokter,
// StatusSurKon: 1, // First Insert status always set to 1
// TipeSurKon: req.TipeSurKon,
// UserCreatedSurKon: UserCreated,
// UserUpdatedSurKon: req.User,
// TipeRawat: req.TipeRawat,
//}
//err = suratkontrol.InsertDataSuratKontrol(reqInsert)
//if err != nil {
// log.Println(err)
// c.JSON(http.StatusCreated, &sk.MetadataString{
// Code: "201",
// Message: err.Error(),
// })
// return
//}
//
//c.JSON(http.StatusOK, &sk.MetadataString{
// Code: "200",
// Message: "Berhasil Update Surat Kontrol",
//})
//return
}
}
func DeleteSpri(c *gin.Context) {
var req sk.ReqDeleteRencanaKontrolSPRI
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
log.Println("REQUEST: ", req)
timeNow := time.Now().Format("2006-01-02 15:04:05")
if req.TipeSurKon == "5" {
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDDataSurKon,
StatusSurKon: 0,
UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusCreated, &sk.MetadataString{
Code: "201",
Message: err.Error(),
})
return
}
res := &sk.MetadataString{
Code: "200",
Message: "Berhasil Hapus Data",
}
c.JSON(http.StatusOK, res)
return
}
}