1183 lines
32 KiB
Go
1183 lines
32 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"
|
|
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 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.StatusPreconditionFailed, &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.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{
|
|
MetaData: sk.MetadataString{
|
|
Code: "203",
|
|
Message: errLibur.Error(),
|
|
},
|
|
})
|
|
return
|
|
} else if isLibur {
|
|
log.Println(jadwalLibur.KeteranganLiburPelayanan)
|
|
c.JSON(http.StatusPreconditionFailed, &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.StatusPreconditionFailed, &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.StatusPreconditionFailed, &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.StatusInternalServerError, &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,
|
|
}
|
|
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.StatusPreconditionFailed, &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: "1",
|
|
}
|
|
|
|
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusPreconditionFailed, &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.StatusPreconditionFailed, &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.StatusPreconditionFailed, &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,
|
|
}
|
|
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 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.StatusInternalServerError, &sk.MetadataString{
|
|
Code: "",
|
|
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,
|
|
})
|
|
}
|
|
c.JSON(http.StatusOK, resSurKon)
|
|
}
|
|
|
|
func GetDataSurKonByID(c *gin.Context) {
|
|
id := c.Param("idxdaftar")
|
|
data, err := suratkontrol.GetDataSuratKontrolByID(id)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
|
|
Code: "",
|
|
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,
|
|
KodePoli: data.KodePoli,
|
|
KodeDokter: data.KodeDokter,
|
|
IDPoli: data.IDPoli,
|
|
IDDokter: data.IDDokter,
|
|
KodeDPJP: data.KodeDPJP,
|
|
NoRM: data.NoRM,
|
|
KodeDiagnosa: data.KodeDiagnosa,
|
|
NamaDiagnosa: data.NamaDiagnosa,
|
|
TipeSurKon: data.TipeSurKon,
|
|
User: data.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.StatusInternalServerError, &sk.MetadataString{
|
|
Code: "",
|
|
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.StatusInternalServerError, &sk.MetadataString{
|
|
Code: "",
|
|
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.StatusInternalServerError, &sk.MetadataString{
|
|
Code: "",
|
|
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.StatusInternalServerError, &sk.MetadataString{
|
|
Code: "",
|
|
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.StatusInternalServerError, &sk.MetadataString{
|
|
Code: "",
|
|
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.StatusInternalServerError, &sk.MetadataString{
|
|
Code: "",
|
|
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.StatusInternalServerError, &sk.MetadataString{
|
|
Code: "",
|
|
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.StatusInternalServerError, &sk.MetadataString{
|
|
Code: "",
|
|
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.StatusInternalServerError, &sk.MetadataString{
|
|
Code: "",
|
|
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.StatusInternalServerError, &sk.MetadataString{
|
|
Code: "",
|
|
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,
|
|
})
|
|
}
|
|
|
|
resSurKon := &sk.ResponseCariDataSuratKontrol{
|
|
JumlahData: count,
|
|
ListDataSuratKontrol: listData,
|
|
}
|
|
c.JSON(http.StatusOK, resSurKon)
|
|
}
|