From 67fbe47f8733079a4474583ecf6ddf63e86e0675f85a1519d40d835f6024888c Mon Sep 17 00:00:00 2001 From: mirza Date: Tue, 5 Nov 2024 08:25:53 +0700 Subject: [PATCH] add i_care code --- .env | 6 + config/config.go | 5 - database/satu_data/dokter/jadwal_dokter.go | 248 +++++++++--------- .../satu_data/surat_kontrol/surat_kontrol.go | 42 ++- docs/utils/utils.go | 20 ++ handlers/bpjs/i_care/i_care.go | 107 ++++++++ handlers/bpjs/i_care/response.go | 222 ++++++++++++++++ handlers/bpjs/jadwal_dokter/jadwal_dokter.go | 22 +- handlers/bpjs/surat_kontrol/response.go | 94 +++++-- handlers/bpjs/surat_kontrol/surat_kontrol.go | 199 ++++++++++---- main.go | 11 +- models/bpjs/i_care/i_care.go | 29 ++ models/bpjs/jadwal_dokter/jadwal_dokter.go | 2 +- models/bpjs/surat_kontrol/kunjugan_pasien.go | 1 + models/bpjs/surat_kontrol/surat_kontrol.go | 15 +- models/config/config.go | 11 +- 16 files changed, 813 insertions(+), 221 deletions(-) create mode 100644 handlers/bpjs/i_care/i_care.go create mode 100644 handlers/bpjs/i_care/response.go create mode 100644 models/bpjs/i_care/i_care.go diff --git a/.env b/.env index 8258c7e..51d6ac9 100644 --- a/.env +++ b/.env @@ -17,6 +17,9 @@ SECRET_KEY_DEV=8pP3D5431E BASEURL_BPJS_DEV=https://apijkn-dev.bpjs-kesehatan.go.id/ VCLAIM_RS_DEV=vclaim-rest-dev SURAT_KONTROL_RS=vclaim-rest +I_CARE_JKN=ihs +I_CARE_JKN_DEV=ihs_dev + INSERT_SURAT_KONTROL=/RencanaKontrol/insert UPDATE_SURAT_KONTROL=/RencanaKontrol/Update DELETE_SURAT_KONTROL=/RencanaKontrol/Delete @@ -25,4 +28,7 @@ GET_SURAT_KONTROL_SEP=/RencanaKontrol/nosep/ GET_NOMOR_RUJUKAN=/Rujukan/ GET_NOMOR_RUJUKAN_BATCH=/Rujukan/List/Peserta/ +GET_FKRTL=/api/rs/validate +GET_FKTP=/api/pcare/validate + diff --git a/config/config.go b/config/config.go index 3bd7076..21cb2a4 100644 --- a/config/config.go +++ b/config/config.go @@ -81,10 +81,6 @@ func SetHeaderDev(cfg config.ConfigBpjs) *config.Header { cfg.User_key = os.Getenv("USER_KEY_DEV") cfg.Secret_key = os.Getenv("SECRET_KEY_DEV") - // cfg.Cons_id = os.Getenv("CONS_ID") - // cfg.User_key = os.Getenv("USER_KEY") - // cfg.Secret_key = os.Getenv("SECRET_KEY") - secret := []byte(cfg.Secret_key) message := []byte(cfg.Cons_id + "&" + fmt.Sprint(tstamp)) hash := hmac.New(sha256.New, secret) @@ -93,7 +89,6 @@ func SetHeaderDev(cfg config.ConfigBpjs) *config.Header { hex.EncodeToString(hash.Sum(nil)) // to base64 X_signature := base64.StdEncoding.EncodeToString(hash.Sum(nil)) - header := &config.Header{ ConsID: cfg.Cons_id, SecretKey: cfg.Secret_key, diff --git a/database/satu_data/dokter/jadwal_dokter.go b/database/satu_data/dokter/jadwal_dokter.go index 3b9ee4d..425cc26 100644 --- a/database/satu_data/dokter/jadwal_dokter.go +++ b/database/satu_data/dokter/jadwal_dokter.go @@ -1,122 +1,126 @@ -package dokter - -import ( - "bridging-rssa/config" - "bridging-rssa/models/bpjs/jadwal_dokter" - "log" - "strconv" - - "github.com/google/uuid" -) - -func GetJadwalDokterByDPJP(dpjp string) (string, error) { - var id string - errSelect := config.SatuDataDB.Debug().Raw(`select "id" from "data_pegawai" where "Code_dpjp" = ?`, dpjp).First(&id).Error - if errSelect != nil { - log.Printf("Failed get data : %v", errSelect) - return "", errSelect - } - return id, nil -} - -func GetJadwalHariDokterBySpesialis(id string) ([]jadwal_dokter.JadwalDokterSatuData, error) { - var hari []jadwal_dokter.JadwalDokterSatuData - errSelect := config.SatuDataDB.Debug().Raw(`select * from "daftar_jadwal_dokter" where "Dokter" = ? order by "id"`, id).Scan(&hari).Error - if errSelect != nil { - log.Printf("Failed get data : %v", errSelect) - return nil, errSelect - } - return hari, nil -} - -func GetJadwalDokterByIDDokter(hari string) ([]string, error) { - var spesialis []string - errSelect := config.SatuDataDB.Debug().Raw(`select distinct "Spesialis" from "daftar_jadwal_dokter" where "Nama_hari" = ? order by "Spesialis"`, hari).Scan(&spesialis).Error - if errSelect != nil { - log.Printf("Failed get data : %v", errSelect) - return nil, errSelect - } - return spesialis, nil -} -func GetJadwalDokterByDate(hari string) ([]string, error) { - var spesialis []string - errSelect := config.SatuDataDB.Debug().Raw(`select distinct "Spesialis" from "daftar_jadwal_dokter" where "Nama_hari" = ? order by "Spesialis"`, hari).Scan(&spesialis).Error - if errSelect != nil { - log.Printf("Failed get data : %v", errSelect) - return nil, errSelect - } - return spesialis, nil -} - -func GetJadwalSubspesialisByDate(hari string) ([]int, error) { - var subspesialis []int - errSelect := config.SatuDataDB.Debug().Raw(`select distinct "Sub_spesialis" from "daftar_jadwal_dokter" where "Nama_hari" = ? order by "Sub_spesialis"`, hari).Scan(&subspesialis).Error - if errSelect != nil { - log.Printf("Failed get data : %v", errSelect) - return nil, errSelect - } - return subspesialis, nil -} - -func GetJadwalDokterBySpesialis(hari string, spesialis string) ([]string, error) { - var listDokter []string - errSelect := config.SatuDataDB.Debug().Raw(`select "Dokter" from "daftar_jadwal_dokter" where "Nama_hari" = ? and "Spesialis" = ? order by "Spesialis"`, hari, spesialis).Scan(&listDokter).Error - if errSelect != nil { - log.Printf("Failed get data : %v", errSelect) - return nil, errSelect - } - return listDokter, nil -} - -func GetJadwalDokterBySubpesialis(hari string, subspesialis string) ([]string, error) { - var listDokter []string - errSelect := config.SatuDataDB.Debug().Raw(`select "Dokter" from "daftar_jadwal_dokter" where "Nama_hari" = ? and "Sub_spesialis" = ? order by "Sub_spesialis"`, hari, subspesialis).Scan(&listDokter).Error - if errSelect != nil { - log.Printf("Failed get data : %v", errSelect) - return nil, errSelect - } - return listDokter, nil -} - -func DeleteJadwalDokter() error { - err := config.SatuDataDB.Debug().Exec(`truncate table "daftar_jadwal_dokter"`).Error - if err != nil { - log.Printf("Failed truncate data : %v", err) - return err - } - log.Println("Success truncate data") - return nil -} - -func DeleteJadwalDokterTemp() error { - err := config.SatuDataDB.Debug().Exec(`truncate table "daftar_jadwal_dokter_temp"`).Error - if err != nil { - log.Printf("Failed truncate data : %v", err) - return err - } - log.Println("Success truncate data") - return nil -} - -func InsertJadwalDokter(reqInsert *jadwal_dokter.JadwalDokterSatuData) error { - err := config.SatuDataDB.Debug().Exec(`insert into "daftar_jadwal_dokter" ("Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Status") values (?, ? ,?, ?, ?, ?, ?)`, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, reqInsert.Spesialis, reqInsert.SubSpesialis, reqInsert.Status).Error - if err != nil { - log.Printf("Failed insert data : %v", err) - return err - } - log.Println("Success insert data") - return nil -} - -func InsertJadwalDokterTemp(reqInsert *jadwal_dokter.JadwalDokterSatuData) error { - spesialis := strconv.Itoa(reqInsert.Spesialis) - subspesialis := strconv.Itoa(reqInsert.SubSpesialis) - id := uuid.New() - err := config.SatuDataDB.Debug().Exec(`insert into "daftar_jadwal_dokter_temp" ("id", "Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Status") values (?, ?, ?, ?, ?, ?, ?, ?)`, id, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, spesialis, subspesialis, reqInsert.Status).Error - if err != nil { - log.Printf("Failed insert data : %v", err) - return err - } - log.Println("Success insert data") - return nil -} +package dokter + +import ( + "bridging-rssa/config" + "bridging-rssa/models/bpjs/jadwal_dokter" + "errors" + "log" + "strconv" + + "github.com/google/uuid" + "gorm.io/gorm" +) + +func GetJadwalDokterByDPJP(dpjp string) ([]jadwal_dokter.JadwalDokterSatuData, error) { + var hari []jadwal_dokter.JadwalDokterSatuData + errSelect := config.SatuDataDB.Debug().Raw(`select djd.* from "daftar_jadwal_dokter" djd + left join "data_pegawai" dp on djd."Dokter" = dp."id" where dp."Code_dpjp" = ? order by djd."id"`, dpjp).Scan(&hari).Error + if errSelect != nil { + if errors.Is(errSelect, gorm.ErrRecordNotFound) { + errMsg := errors.New("Dokter Tidak Terdaftar di HFIS") + log.Println(errMsg) + return nil, errMsg + } + log.Printf("Failed get data : %v", errSelect) + return nil, errSelect + } + return hari, nil +} + +func GetJadwalHariDokterBySpesialis(id string) ([]jadwal_dokter.JadwalDokterSatuData, error) { + var hari []jadwal_dokter.JadwalDokterSatuData + errSelect := config.SatuDataDB.Debug().Raw(`select * from "daftar_jadwal_dokter" where "Dokter" = ? order by "id"`, id).Scan(&hari).Error + if errSelect != nil { + if errors.Is(errSelect, gorm.ErrRecordNotFound) { + errMsg := errors.New("Dokter Tidak Terdaftar di HFIS") + log.Println(errMsg) + return nil, errMsg + } + log.Printf("Failed get data : %v", errSelect) + return nil, errSelect + } + return hari, nil +} + +func GetJadwalDokterByDate(hari string) ([]string, error) { + var spesialis []string + errSelect := config.SatuDataDB.Debug().Raw(`select distinct "Spesialis" from "daftar_jadwal_dokter" where "Nama_hari" = ? order by "Spesialis"`, hari).Scan(&spesialis).Error + if errSelect != nil { + log.Printf("Failed get data : %v", errSelect) + return nil, errSelect + } + return spesialis, nil +} + +func GetJadwalSubspesialisByDate(hari string) ([]int, error) { + var subspesialis []int + errSelect := config.SatuDataDB.Debug().Raw(`select distinct "Sub_spesialis" from "daftar_jadwal_dokter" where "Nama_hari" = ? order by "Sub_spesialis"`, hari).Scan(&subspesialis).Error + if errSelect != nil { + log.Printf("Failed get data : %v", errSelect) + return nil, errSelect + } + return subspesialis, nil +} + +func GetJadwalDokterBySpesialis(hari string, spesialis string) ([]string, error) { + var listDokter []string + errSelect := config.SatuDataDB.Debug().Raw(`select "Dokter" from "daftar_jadwal_dokter" where "Nama_hari" = ? and "Spesialis" = ? order by "Spesialis"`, hari, spesialis).Scan(&listDokter).Error + if errSelect != nil { + log.Printf("Failed get data : %v", errSelect) + return nil, errSelect + } + return listDokter, nil +} + +func GetJadwalDokterBySubpesialis(hari string, subspesialis string) ([]string, error) { + var listDokter []string + errSelect := config.SatuDataDB.Debug().Raw(`select "Dokter" from "daftar_jadwal_dokter" where "Nama_hari" = ? and "Sub_spesialis" = ? order by "Sub_spesialis"`, hari, subspesialis).Scan(&listDokter).Error + if errSelect != nil { + log.Printf("Failed get data : %v", errSelect) + return nil, errSelect + } + return listDokter, nil +} + +func DeleteJadwalDokter() error { + err := config.SatuDataDB.Debug().Exec(`truncate table "daftar_jadwal_dokter"`).Error + if err != nil { + log.Printf("Failed truncate data : %v", err) + return err + } + log.Println("Success truncate data") + return nil +} + +func DeleteJadwalDokterTemp() error { + err := config.SatuDataDB.Debug().Exec(`truncate table "daftar_jadwal_dokter_temp"`).Error + if err != nil { + log.Printf("Failed truncate data : %v", err) + return err + } + log.Println("Success truncate data") + return nil +} + +func InsertJadwalDokter(reqInsert *jadwal_dokter.JadwalDokterSatuData) error { + err := config.SatuDataDB.Debug().Exec(`insert into "daftar_jadwal_dokter" ("Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Status") values (?, ? ,?, ?, ?, ?, ?)`, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, reqInsert.Spesialis, reqInsert.SubSpesialis, reqInsert.Status).Error + if err != nil { + log.Printf("Failed insert data : %v", err) + return err + } + log.Println("Success insert data") + return nil +} + +func InsertJadwalDokterTemp(reqInsert *jadwal_dokter.JadwalDokterSatuData) error { + spesialis := strconv.Itoa(reqInsert.Spesialis) + subspesialis := strconv.Itoa(reqInsert.SubSpesialis) + id := uuid.New() + err := config.SatuDataDB.Debug().Exec(`insert into "daftar_jadwal_dokter_temp" ("id", "Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Status") values (?, ?, ?, ?, ?, ?, ?, ?)`, id, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, spesialis, subspesialis, reqInsert.Status).Error + if err != nil { + log.Printf("Failed insert data : %v", err) + return err + } + log.Println("Success insert data") + return nil +} diff --git a/database/satu_data/surat_kontrol/surat_kontrol.go b/database/satu_data/surat_kontrol/surat_kontrol.go index ba7f50f..ec5abe1 100644 --- a/database/satu_data/surat_kontrol/surat_kontrol.go +++ b/database/satu_data/surat_kontrol/surat_kontrol.go @@ -30,7 +30,8 @@ func GetDataKunjunganPasien(idxdaftar string) (*suratkontrol.KunjunganPasien, er where dpdgb.data_pegawai_id = dp.id ) AS gelarbelakang, dkp."Ruangan" as ruangan, - dkp."DPJP" as id_dokter + dkp."DPJP" as id_dokter, + dkp."NOMR" as "No_rm" from data_kunjungan_pasien dkp left join daftar_lokasi_ruang dlr on dkp."Ruangan" = dlr.id left join data_pegawai dp on dkp."DPJP" = dp.id @@ -103,6 +104,7 @@ func GetDataSuratKontrol(offset, limit string) ([]*suratkontrol.GetDataSuratKont ds."id" as "ID_poli", dp."HFIS_code" as "Kode_dokter", dp."id" as "id_dokter", + dp."Code_dpjp" as "Kode_dpjp", dkp2."NOMR" as "No_rm", dkp2."Diagnosis_primer_utama" as "Kode_diagnosa", dkp2."Display_diagnosis_primer_utama" as "Nama_diagnosa", @@ -149,6 +151,7 @@ func GetDataSuratKontrolByID(idxdaftar string) (*suratkontrol.GetDataSuratKontro ds."id" as "ID_poli", dp."HFIS_code" as "Kode_dokter", dp."id" as "id_dokter", + dp."Code_dpjp" as "Kode_dpjp", dkp2."NOMR" as "No_rm", dkp2."Diagnosis_primer_utama" as "Kode_diagnosa", dkp2."Display_diagnosis_primer_utama" as "Nama_diagnosa", @@ -204,7 +207,7 @@ func GetAllDataSuratKontrol(idSurKon string) (*suratkontrol.DataSuratKontrol, er func SearchDataSurKon(req suratkontrol.RequestCariPasien, query string, args []interface{}) ([]*suratkontrol.GetDataSuratKontrol, error) { var dataSurKon []*suratkontrol.GetDataSuratKontrol - query += ` and date(dsk."Tanggal_rencana_kontrol") between ? and ?` + query += ` and date(dsk."Tanggal_rencana_kontrol") between ? and ? offset ? limit ?` querySelect := `select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol", dsk."Nomor_surat_kontrol", (select dlr."Nama" @@ -228,6 +231,7 @@ func SearchDataSurKon(req suratkontrol.RequestCariPasien, query string, args []i ds."id" as "ID_poli", dp."HFIS_code" as "Kode_dokter", dp."id" as "id_dokter", + dp."Code_dpjp" as "Kode_dpjp", dkp2."NOMR" as "No_rm", dkp2."Diagnosis_primer_utama" as "Kode_diagnosa", dkp2."Display_diagnosis_primer_utama" as "Nama_diagnosa", @@ -238,7 +242,7 @@ func SearchDataSurKon(req suratkontrol.RequestCariPasien, query string, args []i left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id" left join data_ktp dk on dp."KTP" = dk. "id" left join daftar_subspesialis ds on dp."Subspesialis" = ds."id" - where dsk."Status_surat_kontrol" = '1' ` + where dsk."Status_surat_kontrol" = '1' and dsk."Tipe_surat_kontrol" = ? ` querySelect += query err := config.SatuDataDB.Debug().Raw(querySelect, args...).Find(&dataSurKon).Error if err != nil { @@ -247,3 +251,35 @@ func SearchDataSurKon(req suratkontrol.RequestCariPasien, query string, args []i } return dataSurKon, nil } + +func CountDataSurKon(req suratkontrol.RequestCariPasien, query string, args []interface{}) (int, error) { + var jumlahData int + query += ` and date(dsk."Tanggal_rencana_kontrol") between ? and ?` + querySelect := `select count(dsk.*) + from data_surat_kontrol dsk + left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien" + left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id" + left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id" + left join data_ktp dk on dp."KTP" = dk. "id" + left join daftar_subspesialis ds on dp."Subspesialis" = ds."id" + where dsk."Status_surat_kontrol" = '1' and dsk."Tipe_surat_kontrol" = ? ` + querySelect += query + err := config.SatuDataDB.Debug().Raw(querySelect, args...).Find(&jumlahData).Error + if err != nil { + log.Println(err) + return 0, err + } + return jumlahData, nil +} + +func GetNomorSurKon(idPasien string) (string, error) { + var noSurKon string + querySelect := `select dsk."Nomor_surat_kontrol" from data_surat_kontrol dsk where dsk."Kunjungan_pasien" = ? and dsk."Tipe_surat_kontrol" <> '1' order by dsk."date_created"` + err := config.SatuDataDB.Debug().Raw(querySelect, idPasien).Scan(&noSurKon).Error + if err != nil { + log.Println(err) + return "", err + } + log.Println("Nomor SurKon :", noSurKon) + return noSurKon, nil +} diff --git a/docs/utils/utils.go b/docs/utils/utils.go index 2a5f1d1..415d91f 100644 --- a/docs/utils/utils.go +++ b/docs/utils/utils.go @@ -1,7 +1,9 @@ package utils import ( + "fmt" "log" + "strconv" "strings" ) @@ -43,3 +45,21 @@ func ReplaceGelar(gelar string) string { gelar = strings.ReplaceAll(gelar, ",", " ") return gelar } + +func GetNoUrut(noSurKon string) (string, error) { + noSurKonSlice := strings.Split(noSurKon, "/") + noUrut := noSurKonSlice[3] + noUrutInt, err := strconv.Atoi(noUrut) + if err != nil { + return "", err + } + + log.Println("No Urut Int: ", noUrutInt) + noUrutInt++ + + log.Println("No Urut Int: ", noUrutInt) + + noUrutStr := fmt.Sprintf("%03d", noUrutInt) + log.Println("No Urut: ", noUrutStr) + return noUrutStr, nil +} diff --git a/handlers/bpjs/i_care/i_care.go b/handlers/bpjs/i_care/i_care.go new file mode 100644 index 0000000..3b020b7 --- /dev/null +++ b/handlers/bpjs/i_care/i_care.go @@ -0,0 +1,107 @@ +package icare + +import ( + "bridging-rssa/models/config" + "log" + "net/http" + "os" + + cfg "bridging-rssa/config" + ic "bridging-rssa/models/bpjs/i_care" + + "github.com/gin-gonic/gin" +) + +func GetFKRTL(c *gin.Context) { + baseUrl := os.Getenv("BASEURL_BPJS_DEV") + endpoint := os.Getenv("I_CARE_JKN_DEV") + param := os.Getenv("GET_FKRTL") + url := baseUrl + endpoint + param + + log.Println("URL :", url) + var req *ic.RequestICare + + err := c.Bind(&req) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &ic.Metadata{ + Code: 0, + Message: err.Error(), + }) + return + } + + log.Println("REQUEST: ", req) + + conf := config.ConfigBpjs{} + + header := cfg.SetHeaderDev(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/json", + } + log.Println("Headers : ", headers) + + res, err := ResponseGetFKRTL(url, header, headers, req) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &ic.Metadata{ + Code: 0, + Message: err.Error(), + }) + return + } + + c.JSON(http.StatusOK, res) +} + +func GetFKTP(c *gin.Context) { + baseUrl := os.Getenv("BASEURL_BPJS_DEV") + endpoint := os.Getenv("I_CARE_JKN_DEV") + param := os.Getenv("GET_FKRTL") + url := baseUrl + endpoint + param + + log.Println("URL :", url) + var req *ic.RequestICare + + err := c.Bind(&req) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &ic.Metadata{ + Code: 0, + Message: err.Error(), + }) + return + } + + log.Println("REQUEST: ", req) + + conf := config.ConfigBpjs{} + + header := cfg.SetHeaderDev(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/json", + } + log.Println("Headers : ", headers) + + res, err := ResponseGetFKRTL(url, header, headers, req) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &ic.Metadata{ + Code: 0, + Message: err.Error(), + }) + return + } + + c.JSON(http.StatusOK, res) +} diff --git a/handlers/bpjs/i_care/response.go b/handlers/bpjs/i_care/response.go new file mode 100644 index 0000000..9ed5cca --- /dev/null +++ b/handlers/bpjs/i_care/response.go @@ -0,0 +1,222 @@ +package icare + +import ( + "bridging-rssa/docs" + ic "bridging-rssa/models/bpjs/i_care" + "bridging-rssa/models/config" + "bytes" + "encoding/json" + "errors" + "fmt" + "io" + "log" + "net/http" + "strings" + "time" +) + +func ResponseGetFKRTL(url string, header *config.Header, headers map[string]string, request *ic.RequestICare) (*ic.ResponseGet, error) { + log.Println("URL", url) + + reqMarshall, err := json.Marshal(request) + if err != nil { + log.Printf("Error json marshal: %v", err) + } + + log.Println("REQUEST: ", string(reqMarshall)) + + req, err := http.NewRequest("POST", url, bytes.NewReader(reqMarshall)) + if err != nil { + log.Printf("Error creating request: %v", err) + return nil, err + } + for key, value := range headers { + req.Header.Set(key, value) + } + + log.Println("REQ", req.Header) + client := http.Client{ + Timeout: 10 * time.Second, + } + + responses := &ic.ResponseGet{} + response, err := client.Do(req) + if err != nil { + if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") { + errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") + log.Printf("error : %v", errMsg) + responses.MetaData.Message = errMsg.Error() + log.Println("responses: ", responses) + return responses, err + } + log.Printf("Error making external API request: %v", err) + return responses, err + } + log.Println("RESPONSE: ", response) + + if response.StatusCode == http.StatusGatewayTimeout { // 504 + errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") + log.Printf("error : %v", errMsg) + responses.MetaData.Code = 504 + responses.MetaData.Message = errMsg.Error() + log.Println("responses: ", responses) + return responses, err + } + + key := header.ConsID + header.SecretKey + header.TimeStamp + res, err := io.ReadAll(response.Body) + if err != nil { + fmt.Println(err) + return nil, err + } + + log.Println("Res:", string(res)) + + var resFkrtlRaw ic.ResponseGetRaw + err = json.Unmarshal([]byte(string(res)), &resFkrtlRaw) + if err != nil { + log.Printf("Error Unmarshaling: %v", err) + return nil, err + } + + log.Println("ResponseRaw : ", resFkrtlRaw) + + if resFkrtlRaw.MetaData.Code != 200 { + errMsg := errors.New(resFkrtlRaw.MetaData.Message) + if strings.Contains(strings.ToLower(resFkrtlRaw.MetaData.Message), "Gagal simpan!") { + message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal" + resFkrtlRaw.MetaData.Message = message + } + log.Printf("error : %v", errMsg) + responses.MetaData.Code = resFkrtlRaw.MetaData.Code + responses.MetaData.Message = resFkrtlRaw.MetaData.Message + log.Println("responses: ", responses) + return responses, errMsg + } + + dataResp, err := docs.StringDecrypt(key, resFkrtlRaw.Response) + if err != nil { + log.Printf("Error Decrypt: %v", err) + log.Println("res: ", dataResp) + return nil, err + } + + var resFkrtl ic.Response + + log.Println("dataresp: ", dataResp) + + err = json.Unmarshal([]byte(dataResp), &resFkrtl) + if err != nil { + log.Printf("Error Decode: %v", err) + return nil, err + } + + responses = &ic.ResponseGet{ + Response: resFkrtl, + MetaData: resFkrtlRaw.MetaData, + } + return responses, nil +} + +func ResponseGetFKTP(url string, header *config.Header, headers map[string]string, request *ic.ReqFKTP) (*ic.ResponseGet, error) { + log.Println("URL", url) + + reqMarshall, err := json.Marshal(request) + if err != nil { + log.Printf("Error json marshal: %v", err) + } + + log.Println("REQUEST: ", string(reqMarshall)) + + req, err := http.NewRequest("POST", url, bytes.NewReader(reqMarshall)) + if err != nil { + log.Printf("Error creating request: %v", err) + return nil, err + } + for key, value := range headers { + req.Header.Set(key, value) + } + + log.Println("REQ", req.Header) + client := http.Client{ + Timeout: 10 * time.Second, + } + + responses := &ic.ResponseGet{} + response, err := client.Do(req) + if err != nil { + if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") { + errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") + log.Printf("error : %v", errMsg) + responses.MetaData.Message = errMsg.Error() + log.Println("responses: ", responses) + return responses, err + } + log.Printf("Error making external API request: %v", err) + return responses, err + } + log.Println("RESPONSE: ", response) + + if response.StatusCode == http.StatusGatewayTimeout { // 504 + errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") + log.Printf("error : %v", errMsg) + responses.MetaData.Code = 504 + responses.MetaData.Message = errMsg.Error() + log.Println("responses: ", responses) + return responses, err + } + + key := header.ConsID + header.SecretKey + header.TimeStamp + res, err := io.ReadAll(response.Body) + if err != nil { + fmt.Println(err) + return nil, err + } + + log.Println("Res:", string(res)) + + var resFkrtlRaw ic.ResponseGetRaw + err = json.Unmarshal([]byte(string(res)), &resFkrtlRaw) + if err != nil { + log.Printf("Error Unmarshaling: %v", err) + return nil, err + } + + log.Println("ResponseRaw : ", resFkrtlRaw) + + if resFkrtlRaw.MetaData.Code != 200 { + errMsg := errors.New(resFkrtlRaw.MetaData.Message) + if strings.Contains(strings.ToLower(resFkrtlRaw.MetaData.Message), "Gagal simpan!") { + message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal" + resFkrtlRaw.MetaData.Message = message + } + log.Printf("error : %v", errMsg) + responses.MetaData.Code = resFkrtlRaw.MetaData.Code + responses.MetaData.Message = resFkrtlRaw.MetaData.Message + log.Println("responses: ", responses) + return responses, errMsg + } + + dataResp, err := docs.StringDecrypt(key, resFkrtlRaw.Response) + if err != nil { + log.Printf("Error Decrypt: %v", err) + log.Println("res: ", dataResp) + return nil, err + } + + var resFkrtl ic.Response + + log.Println("dataresp: ", dataResp) + + err = json.Unmarshal([]byte(dataResp), &resFkrtl) + if err != nil { + log.Printf("Error Decode: %v", err) + return nil, err + } + + responses = &ic.ResponseGet{ + Response: resFkrtl, + MetaData: resFkrtlRaw.MetaData, + } + return responses, nil +} diff --git a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go index ec82326..c455c14 100644 --- a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go +++ b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go @@ -5,6 +5,7 @@ import ( "bridging-rssa/database/satu_data/dokter" "bridging-rssa/docs/utils" "bridging-rssa/models/bpjs/jadwal_dokter" + suratkontrol "bridging-rssa/models/bpjs/surat_kontrol" "bridging-rssa/models/config" dktr "bridging-rssa/models/dokter" "log" @@ -135,17 +136,16 @@ func GetJadwalDokter(c *gin.Context) { func GetDokterByDPJP(c *gin.Context) { dpjp := c.Param("dpjp") - idDokter, err := dokter.GetJadwalDokterByDPJP(dpjp) + listHari, err := dokter.GetJadwalDokterByDPJP(dpjp) if err != nil { - c.JSON(http.StatusInternalServerError, err) + log.Println(err) + c.JSON(http.StatusInternalServerError, &suratkontrol.MetadataString{ + Code: "", + Message: err.Error(), + }) return } - listHari, err := dokter.GetJadwalHariDokterBySpesialis(idDokter) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - return - } log.Println("listHari: ", listHari) var IDDokter []string @@ -158,7 +158,11 @@ func GetDokterByDPJP(c *gin.Context) { namaDokter, err := dokter.GetNamaLengkapDokter(IDDokter) if err != nil { - c.JSON(http.StatusInternalServerError, err) + log.Println(err) + c.JSON(http.StatusInternalServerError, &suratkontrol.MetadataString{ + Code: "", + Message: err.Error(), + }) return } @@ -189,7 +193,7 @@ func GetDokterByDPJP(c *gin.Context) { Kode: listSubspesialis.Kode, Spesialis: listSubspesialis.Spesialis, Subspesialis: listSubspesialis.Subspesialis, - IDSubspesialis: listSubspesialis.Kode, + IDSubspesialis: listSubspesialis.ID, NamaLengkap: namaLengkap, HFISCode: hfisCode, KodeDPJP: dpjp, diff --git a/handlers/bpjs/surat_kontrol/response.go b/handlers/bpjs/surat_kontrol/response.go index a0bb00c..de04e59 100644 --- a/handlers/bpjs/surat_kontrol/response.go +++ b/handlers/bpjs/surat_kontrol/response.go @@ -36,14 +36,34 @@ func PostData(url string, header *config.Header, headers map[string]string, requ } log.Println("REQ", req.Header) - client := http.Client{} + client := http.Client{ + Timeout: 10 * time.Second, + } + + responses := &suratkontrol.Response{} response, err := client.Do(req) if err != nil { + if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") { + errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") + log.Printf("error : %v", errMsg) + responses.MetaData.Message = errMsg.Error() + log.Println("responses: ", responses) + return responses, err + } log.Printf("Error making external API request: %v", err) - return nil, err + return responses, err } log.Println("RESPONSE: ", response) + if response.StatusCode == http.StatusGatewayTimeout { // 504 + errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") + log.Printf("error : %v", errMsg) + responses.MetaData.Code = "504" + responses.MetaData.Message = errMsg.Error() + log.Println("responses: ", responses) + return responses, err + } + key := header.ConsID + header.SecretKey + header.TimeStamp res, err := io.ReadAll(response.Body) if err != nil { @@ -62,30 +82,12 @@ func PostData(url string, header *config.Header, headers map[string]string, requ log.Println("ResponseRaw : ", resSuratKontrolRaw) - responses := &suratkontrol.Response{} - // uuid := uuid.New().String() if resSuratKontrolRaw.MetaData.Code != "200" { - // reqInsertLog := &logapi.DataLogAPI{ - // ID: uuid, - // UserAgent: "", - // IP: "", - // Parameter: "", - // Header: "", - // Method: "", - // Url: url, - // Request: "", - // Respon: "", - // ResponCode: "", - // ResponTimeStart: "", - // ResponTimeEnd: "", - // Comment: "", - // } - // err = log_api.InsertLogAPI(*reqInsertLog) - // if err != nil { - // log.Println(err) - // return nil, err - // } errMsg := errors.New(resSuratKontrolRaw.MetaData.Message) + if strings.Contains(strings.ToLower(resSuratKontrolRaw.MetaData.Message), "Gagal simpan!") { + message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal" + resSuratKontrolRaw.MetaData.Message = message + } log.Printf("error : %v", errMsg) responses.MetaData.Code = resSuratKontrolRaw.MetaData.Code responses.MetaData.Message = resSuratKontrolRaw.MetaData.Message @@ -146,7 +148,7 @@ func ResponseUpdateSuratKontrol(url string, header *config.Header, headers map[s response, err := client.Do(req) if err != nil { if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") { - errMsg := errors.New("Gagal Proses Selama 10 Detik, Silahkan Coba Lagi") + errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") log.Printf("error : %v", errMsg) responses.MetaData.Message = errMsg.Error() log.Println("responses: ", responses) @@ -158,7 +160,7 @@ func ResponseUpdateSuratKontrol(url string, header *config.Header, headers map[s log.Println("RESPONSE: ", response) if response.StatusCode == http.StatusGatewayTimeout { // 504 - errMsg := errors.New("Gagal Proses Selama 10 Detik, Silahkan Coba Lagi") + errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") log.Printf("error : %v", errMsg) responses.MetaData.Code = "504" responses.MetaData.Message = errMsg.Error() @@ -184,6 +186,10 @@ func ResponseUpdateSuratKontrol(url string, header *config.Header, headers map[s if resSuratKontrolRaw.MetaData.Code != "200" { errMsg := errors.New(resSuratKontrolRaw.MetaData.Message) + if strings.Contains(strings.ToLower(resSuratKontrolRaw.MetaData.Message), "gagal simpan") { + message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal" + resSuratKontrolRaw.MetaData.Message = message + } log.Printf("error : %v", errMsg) responses.MetaData.Code = resSuratKontrolRaw.MetaData.Code responses.MetaData.Message = resSuratKontrolRaw.MetaData.Message @@ -258,7 +264,17 @@ func ResponseDeleteSuratKontrol(url string, header *config.Header, headers map[s return nil, err } - responses := &suratkontrol.Response{ + responses := &suratkontrol.Response{} + if resSuratKontrolRaw.MetaData.Code != "200" { + errMsg := errors.New(resSuratKontrolRaw.MetaData.Message) + log.Printf("error : %v", errMsg) + responses.MetaData.Code = resSuratKontrolRaw.MetaData.Code + responses.MetaData.Message = resSuratKontrolRaw.MetaData.Message + log.Println("responses: ", responses) + return responses, errMsg + } + + responses = &suratkontrol.Response{ MetaData: resSuratKontrolRaw.MetaData, } @@ -301,6 +317,16 @@ func ResponseGetNomorSuratKontrol(url string, header *config.Header, headers map return nil, err } + responses := &suratkontrol.ResponseGetSuratKontrol{} + if resNoSuratKontrolRaw.MetaData.Code != "200" { + errMsg := errors.New(resNoSuratKontrolRaw.MetaData.Message) + log.Printf("error : %v", errMsg) + responses.MetaData.Code = resNoSuratKontrolRaw.MetaData.Code + responses.MetaData.Message = resNoSuratKontrolRaw.MetaData.Message + log.Println("responses: ", responses) + return responses, errMsg + } + dataResp, err := docs.StringDecrypt(key, resNoSuratKontrolRaw.Response) if err != nil { log.Printf("Error Decrypt: %v", err) @@ -316,7 +342,7 @@ func ResponseGetNomorSuratKontrol(url string, header *config.Header, headers map return nil, err } - responses := &suratkontrol.ResponseGetSuratKontrol{ + responses = &suratkontrol.ResponseGetSuratKontrol{ MetaData: resNoSuratKontrolRaw.MetaData, Response: responseNoSuratKontrol, } @@ -358,6 +384,16 @@ func ResponseGetSuratKontrolBySEP(url string, header *config.Header, headers map return nil, err } + responses := &suratkontrol.ResponseGetSuratKontrolBySEP{} + if resSurKonSEP.MetaData.Code != "200" { + errMsg := errors.New(resSurKonSEP.MetaData.Message) + log.Printf("error : %v", errMsg) + responses.MetaData.Code = resSurKonSEP.MetaData.Code + responses.MetaData.Message = resSurKonSEP.MetaData.Message + log.Println("responses: ", responses) + return responses, errMsg + } + dataResp, err := docs.StringDecrypt(key, resSurKonSEP.Response) if err != nil { log.Printf("Error Decrypt: %v", err) @@ -375,7 +411,7 @@ func ResponseGetSuratKontrolBySEP(url string, header *config.Header, headers map log.Println("res: ", resSurKonSEP) - responses := &suratkontrol.ResponseGetSuratKontrolBySEP{ + responses = &suratkontrol.ResponseGetSuratKontrolBySEP{ MetaData: resSurKonSEP.MetaData, Response: responseNoSuratKontrol, } diff --git a/handlers/bpjs/surat_kontrol/surat_kontrol.go b/handlers/bpjs/surat_kontrol/surat_kontrol.go index 04ef68e..b0e6320 100644 --- a/handlers/bpjs/surat_kontrol/surat_kontrol.go +++ b/handlers/bpjs/surat_kontrol/surat_kontrol.go @@ -22,7 +22,7 @@ import ( func InsertSuratKontrol(c *gin.Context) { baseUrl := os.Getenv("BASEURL_BPJS") - endpoint := os.Getenv("VCLAIM_RS_DEV") + endpoint := os.Getenv("SURAT_KONTROL_RS") param := os.Getenv("INSERT_SURAT_KONTROL") url := baseUrl + endpoint + param @@ -50,11 +50,11 @@ func InsertSuratKontrol(c *gin.Context) { return } - log.Println("Request: ", reqJson) + log.Println("Request: ", string(reqJson)) conf := config.ConfigBpjs{} - header := cfg.SetHeaderDev(conf) + header := cfg.SetHeader(conf) headers := map[string]string{ "X-cons-id": header.ConsID, @@ -70,7 +70,6 @@ func InsertSuratKontrol(c *gin.Context) { headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value)) } headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ") - tipeSurKon := "1" kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar) if err != nil { @@ -83,20 +82,43 @@ func InsertSuratKontrol(c *gin.Context) { } uuid := uuid.New().String() - if req.NoSEP == "" { - tipeSurKon = "0" + 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 + } + + noUrut := "001" + if dataSurkon != "" { + noUrut, err = utils.GetNoUrut(dataSurkon) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } + } + + noSurKon := "SI/" + req.TipeRawat + "/" + kunjunganPasien.NomorRM + "/" + noUrut reqInsert := &sk.DataSuratKontrol{ ID: uuid, DateCreated: timeNow, TglCetakSurKon: timeNow, TglRencanaKontrol: req.TglRencanaKontrol, - NomorSurKon: "", //TODO How to get Nomor SurKon + NomorSurKon: noSurKon, KunjunganPasien: kunjunganPasien.ID, RuanganSurKon: kunjunganPasien.Ruangan, DPJPSurKon: req.IDDokter, StatusSurKon: 1, // First Insert status always set to 1 UserCreatedSurKon: req.User, - TipeSurKon: tipeSurKon, + TipeSurKon: req.TipeSurKon, } err = suratkontrol.InsertDataSuratKontrol(reqInsert) if err != nil { @@ -107,7 +129,20 @@ func InsertSuratKontrol(c *gin.Context) { }) return } - c.JSON(http.StatusOK, nil) + + err = suratkontrol.UpdateKunjunganPasien(req) + 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 Insert Surat Kontrol", + }) return } @@ -185,7 +220,7 @@ func InsertSuratKontrol(c *gin.Context) { DPJPSurKon: req.IDDokter, StatusSurKon: 1, // First Insert status always set to 1 UserCreatedSurKon: req.User, - TipeSurKon: tipeSurKon, + TipeSurKon: "1", } err = suratkontrol.InsertDataSuratKontrol(reqInsert) @@ -263,7 +298,7 @@ func InsertSuratKontrol(c *gin.Context) { func UpdateSuratKontrol(c *gin.Context) { baseUrl := os.Getenv("BASEURL_BPJS") - endpoint := os.Getenv("VCLAIM_RS_DEV") + endpoint := os.Getenv("SURAT_KONTROL_RS") param := os.Getenv("UPDATE_SURAT_KONTROL") url := baseUrl + endpoint + param @@ -279,7 +314,17 @@ func UpdateSuratKontrol(c *gin.Context) { return } - log.Println("Request: ", req) + 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") @@ -292,22 +337,43 @@ func UpdateSuratKontrol(c *gin.Context) { }) return } - uuid := uuid.New().String() - tipeSurKon := "1" - if req.NoSEP == "" { - tipeSurKon = "0" + 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 + } + + noUrut := "001" + if dataSurkon != "" { + noUrut, err = utils.GetNoUrut(dataSurkon) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } + } + noSurKon := "SI/" + req.TipeRawat + "/" + kunjunganPasien.NomorRM + "/" + noUrut reqInsert := &sk.DataSuratKontrol{ ID: uuid, DateCreated: timeNow, TglCetakSurKon: timeNow, TglRencanaKontrol: req.TglRencanaKontrol, - NomorSurKon: "", //TODO How to get Nomor SurKon + NomorSurKon: noSurKon, //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: tipeSurKon, + TipeSurKon: req.TipeSurKon, UserUpdatedSurKon: req.User, } reqUpdate := &sk.DataSuratKontrol{ @@ -334,16 +400,9 @@ func UpdateSuratKontrol(c *gin.Context) { }) return } - c.JSON(http.StatusOK, nil) - return - } - - reqJson, err := json.Marshal(req) - if err != nil { - log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusOK, &sk.MetadataString{ + Code: "200", + Message: "Berhasil Update Surat Kontrol", }) return } @@ -352,7 +411,7 @@ func UpdateSuratKontrol(c *gin.Context) { conf := config.ConfigBpjs{} - header := cfg.SetHeaderDev(conf) + header := cfg.SetHeader(conf) headers := map[string]string{ "X-cons-id": header.ConsID, @@ -465,7 +524,7 @@ func UpdateSuratKontrol(c *gin.Context) { RuanganSurKon: kunjunganPasien.Ruangan, DPJPSurKon: req.IDDokter, StatusSurKon: 1, // Insert status always set to 1 - TipeSurKon: tipeSurKon, + TipeSurKon: "1", UserUpdatedSurKon: req.User, } @@ -514,7 +573,7 @@ func UpdateSuratKontrol(c *gin.Context) { func DeleteSuratKontrol(c *gin.Context) { baseUrl := os.Getenv("BASEURL_BPJS") - endpoint := os.Getenv("VCLAIM_RS_DEV") + endpoint := os.Getenv("SURAT_KONTROL_RS") param := os.Getenv("DELETE_SURAT_KONTROL") url := baseUrl + endpoint + param @@ -534,7 +593,7 @@ func DeleteSuratKontrol(c *gin.Context) { timeNow := time.Now().Format("2006-01-02 15:04:05") - if req.NomorSurKon == "" { + if req.TipeSurKon != "1" { reqUpdate := &sk.DataSuratKontrol{ DateUpdated: timeNow, ID: req.IDDataSurKon, @@ -556,11 +615,12 @@ func DeleteSuratKontrol(c *gin.Context) { Message: "Berhasil Hapus Data", } c.JSON(http.StatusOK, res) + return } conf := config.ConfigBpjs{} - header := cfg.SetHeaderDev(conf) + header := cfg.SetHeader(conf) headers := map[string]string{ "X-cons-id": header.ConsID, @@ -608,14 +668,14 @@ func DeleteSuratKontrol(c *gin.Context) { func GetNomorSuratKontrol(c *gin.Context) { baseUrl := os.Getenv("BASEURL_BPJS") - endpoint := os.Getenv("VCLAIM_RS_DEV") + 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.SetHeaderDev(conf) + header := cfg.SetHeader(conf) headers := map[string]string{ "X-cons-id": header.ConsID, @@ -638,14 +698,14 @@ func GetNomorSuratKontrol(c *gin.Context) { func GetSuratKontrolBySEP(c *gin.Context) { baseUrl := os.Getenv("BASEURL_BPJS") - endpoint := os.Getenv("VCLAIM_RS_DEV") + 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.SetHeaderDev(conf) + header := cfg.SetHeader(conf) headers := map[string]string{ "X-cons-id": header.ConsID, @@ -704,6 +764,8 @@ func GetDataSurKon(c *gin.Context) { Subspesialis: v.Subspesialis, KodePoli: v.KodePoli, KodeDokter: v.KodeDokter, + IDDokter: v.IDDokter, + KodeDPJP: v.KodeDPJP, NoRM: v.NoRM, KodeDiagnosa: v.KodeDiagnosa, NamaDiagnosa: v.NamaDiagnosa, @@ -751,6 +813,7 @@ func GetDataSurKonByID(c *gin.Context) { KodeDokter: data.KodeDokter, IDPoli: data.IDPoli, IDDokter: data.IDDokter, + KodeDPJP: data.KodeDPJP, NoRM: data.NoRM, KodeDiagnosa: data.KodeDiagnosa, NamaDiagnosa: data.NamaDiagnosa, @@ -815,10 +878,22 @@ func CariPasienTPP(c *gin.Context) { query := `` var args []interface{} + var argsCount []interface{} var data []*sk.GetDataSuratKontrol + var count int if req.NoRM != "" { query += `and dkp2."NOMR" = ?` - args = append(args, req.NoRM, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit) + argsCount = append(argsCount, req.NoRM, 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.NoRM, req.TipeSurKon, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit) data, err = suratkontrol.SearchDataSurKon(req, query, args) if err != nil { log.Println(err) @@ -830,7 +905,17 @@ func CariPasienTPP(c *gin.Context) { } } else if req.NoSEP != "" { query += `and dkp2."Nomor_sep" = ?` - args = append(args, req.NoSEP, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit) + argsCount = append(argsCount, req.NoSEP, 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.NoSEP, req.TipeSurKon, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit) data, err = suratkontrol.SearchDataSurKon(req, query, args) if err != nil { log.Println(err) @@ -842,7 +927,17 @@ func CariPasienTPP(c *gin.Context) { } } else if req.PoliKlinik != "" { query += `and ds."id" = ?` - args = append(args, req.PoliKlinik, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit) + argsCount = append(argsCount, req.PoliKlinik, 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.PoliKlinik, req.TipeSurKon, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit) data, err = suratkontrol.SearchDataSurKon(req, query, args) if err != nil { log.Println(err) @@ -853,7 +948,17 @@ func CariPasienTPP(c *gin.Context) { return } } else { - args = append(args, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit) + 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) @@ -864,8 +969,7 @@ func CariPasienTPP(c *gin.Context) { return } } - - var resSurKon []*sk.ResponseGetDataSuratKontrol + var listData []*sk.ResponseGetDataSuratKontrol for _, v := range data { gelarDepan := utils.ReplaceGelar(v.GelarDepan) gelarBelakang := utils.ReplaceGelar(v.GelarBelakang) @@ -876,7 +980,7 @@ func CariPasienTPP(c *gin.Context) { dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02") dateRencanaSurkon, _ := time.Parse(time.RFC3339, v.TglRencanaKontrol) dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02") - resSurKon = append(resSurKon, &sk.ResponseGetDataSuratKontrol{ + listData = append(listData, &sk.ResponseGetDataSuratKontrol{ IDDataSurKon: v.IDDataSurKon, IDXDaftar: v.IDXDaftar, TglCetakSurKon: dateCetakSurkonString, @@ -891,11 +995,18 @@ func CariPasienTPP(c *gin.Context) { 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) } diff --git a/main.go b/main.go index 6840d6d..927ec11 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "bridging-rssa/config" "bridging-rssa/handlers/bpjs" + icare "bridging-rssa/handlers/bpjs/i_care" "bridging-rssa/handlers/bpjs/jadwal_dokter" "bridging-rssa/handlers/bpjs/rujukan" suratkontrol "bridging-rssa/handlers/bpjs/surat_kontrol" @@ -69,6 +70,12 @@ func main() { suratRujukan.GET("/list/peserta/:noKartu", rujukan.GetSuratRujukanBatch) } + iCare := v1.Group("/icare") + { + iCare.POST("/rs/validate", icare.GetFKRTL) + iCare.POST("/pcare/validate", icare.GetFKTP) + } + r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) r.POST("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) r.PUT("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) @@ -80,8 +87,8 @@ func main() { AllowCredentials: true, })) - log.Println("JALAN DI PORT : 8082") - err = r.Run(":8082") + log.Println("JALAN DI PORT : 8083") + err = r.Run(":8083") if err != nil { log.Fatal(err) } diff --git a/models/bpjs/i_care/i_care.go b/models/bpjs/i_care/i_care.go new file mode 100644 index 0000000..84efe5b --- /dev/null +++ b/models/bpjs/i_care/i_care.go @@ -0,0 +1,29 @@ +package icare + +type RequestICare struct { + Param string `json:"param"` + KodeDokter int `json:"kodedokter"` +} + +type ReqFKTP struct { + Param string `json:"param"` +} + +type Metadata struct { + Code int `json:"code"` + Message string `json:"message"` +} + +type Response struct { + Url string `json:"url"` +} + +type ResponseGet struct { + Response Response `json:"response"` + MetaData Metadata `json:"metaData"` +} + +type ResponseGetRaw struct { + Response string `json:"response"` + MetaData Metadata `json:"metaData"` +} diff --git a/models/bpjs/jadwal_dokter/jadwal_dokter.go b/models/bpjs/jadwal_dokter/jadwal_dokter.go index cbbe6b0..796d0ec 100644 --- a/models/bpjs/jadwal_dokter/jadwal_dokter.go +++ b/models/bpjs/jadwal_dokter/jadwal_dokter.go @@ -57,7 +57,7 @@ type ResponseListHari struct { Kode string `json:"Kode"` Spesialis string `json:"Spesialis"` Subspesialis string `json:"Subspesialis"` - IDSubspesialis string `json:"id_subspesialis"` + IDSubspesialis int `json:"id_subspesialis"` NamaLengkap string `json:"nama_lengkap"` HFISCode string `json:"HFIS_code"` KodeDPJP string `json:"DPJP_code"` diff --git a/models/bpjs/surat_kontrol/kunjugan_pasien.go b/models/bpjs/surat_kontrol/kunjugan_pasien.go index 3410c6f..243682b 100644 --- a/models/bpjs/surat_kontrol/kunjugan_pasien.go +++ b/models/bpjs/surat_kontrol/kunjugan_pasien.go @@ -21,4 +21,5 @@ type KunjunganPasien struct { DisplayDiagnosisAkhirKeluar string `gorm:"column:Display_diagnosis_akhir_keluar" json:"Display_diagnosis_akhir_keluar"` DiagnosisPrimerUtama string `gorm:"column:Diagnosis_primer_utama" json:"Diagnosis_primer_utama"` DisplayDiagnosisPrimerUtama string `gorm:"column:Display_diagnosis_primer_utama" json:"Display_diagnosis_primer_utama"` + NomorRM string `gorm:"column:No_rm" json:"No_rm"` } diff --git a/models/bpjs/surat_kontrol/surat_kontrol.go b/models/bpjs/surat_kontrol/surat_kontrol.go index 712f0c1..061c208 100644 --- a/models/bpjs/surat_kontrol/surat_kontrol.go +++ b/models/bpjs/surat_kontrol/surat_kontrol.go @@ -32,12 +32,15 @@ type RequestInsertRencanaKontrol struct { IDDokter string `json:"id_dokter"` KodeDiagnosa string `json:"kode_diagnosa"` NamaDiagnosa string `json:"nama_diagnosa"` + TipeSurKon string `json:"tipe_surkon"` + TipeRawat string `json:"tipe_rawat"` } type ReqDeleteRencanaKontrol struct { IDDataSurKon string `json:"id_surat_kontrol"` NomorSurKon string `json:"Nomor_surat_kontrol"` User string `json:"user"` + TipeSurKon string `json:"tipe_surkon"` } type RequestUpdateRencanaKontrol struct { @@ -52,6 +55,8 @@ type RequestUpdateRencanaKontrol struct { User string `json:"user"` KodeDiagnosa string `json:"Kode_diagnosa"` NamaDiagnosa string `json:"Nama_diagnosa"` + TipeSurKon string `json:"tipe_surkon"` + TipeRawat string `json:"tipe_rawat"` } type TSuratKontrol struct { @@ -243,6 +248,7 @@ type GetDataSuratKontrol struct { NomorKartu string `gorm:"column:No_kartu" json:"No_kartu"` IDPoli string `gorm:"column:ID_poli" json:"id_poli"` IDDokter string `gorm:"column:id_dokter" json:"id_dokter"` + KodeDPJP string `gorm:"column:Kode_dpjp" json:"Kode_dpjp"` NoRM string `gorm:"column:No_rm" json:"No_rm"` KodeDiagnosa string `gorm:"column:Kode_diagnosa" json:"Kode_diagnosa"` NamaDiagnosa string `gorm:"column:Nama_diagnosa" json:"Nama_diagnosa"` @@ -264,6 +270,7 @@ type ResponseGetDataSuratKontrol struct { Subspesialis string `json:"Subspesialis"` KodePoli string `json:"Kode_poli"` KodeDokter string `json:"Kode_dokter"` + KodeDPJP string `json:"Kode_dpjp"` IDPoli string `json:"id_poli"` IDDokter string `json:"id_dokter"` NoRM string `json:"No_rm"` @@ -272,12 +279,18 @@ type ResponseGetDataSuratKontrol struct { TipeSurKon string `json:"Tipe_SurKon"` } +type ResponseCariDataSuratKontrol struct { + JumlahData int `json:"jumlah_data"` + ListDataSuratKontrol []*ResponseGetDataSuratKontrol `json:"list_data"` +} + type RequestCariPasien struct { NoRM string `json:"no_rm"` NoSEP string `json:"no_sep"` PoliKlinik string `json:"poliklinik"` TanggalAwal string `json:"tanggal_awal"` TanggalAkhir string `json:"tanggal_akhir"` + TipeSurKon string `json:"tipe_surkon"` Offset string `json:"offset"` Limit string `json:"limit"` -} \ No newline at end of file +} diff --git a/models/config/config.go b/models/config/config.go index 4105bfe..b573589 100644 --- a/models/config/config.go +++ b/models/config/config.go @@ -10,9 +10,10 @@ type ConfigBpjs struct { } type Header struct { - ConsID string - SecretKey string - UserKey string - TimeStamp string - XSignature string + ConsID string + SecretKey string + UserKey string + TimeStamp string + XSignature string + XAuthorization string }