diff --git a/.env b/.env
index 51d6ac9..d9af6b8 100644
--- a/.env
+++ b/.env
@@ -4,11 +4,19 @@ SATUDATA_PASSWORD=stim*RS54
SATUDATA_NAME=satu_db
SATUDATA_PORT=5000
+SIMRS_HOST=10.10.123.160
+SIMRS_USERNAME=simrs
+SIMRS_PASSWORD=simrs.rssa
+SIMRS_NAME=simrs
+SIMRS_PORT=5000
+
BASEURL_BPJS=https://apijkn.bpjs-kesehatan.go.id/
ANTREAN_RS=antreanrs
+I_CARE_JKN=ihs
CONS_ID=5257
USER_KEY=4cf1cbef8c008440bbe9ef9ba789e482
SECRET_KEY=1bV363512D
+USER_KEY_ICARE=1cd65acaa349684be6353bea5149e2e2
CONS_ID_DEV=16041
USER_KEY_DEV=467a2817fde5070f66c9a41fbeb8dc2c
@@ -16,8 +24,8 @@ 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
+VCLAIM_RS=vclaim-rest
+I_CARE_JKN=wsihs
I_CARE_JKN_DEV=ihs_dev
INSERT_SURAT_KONTROL=/RencanaKontrol/insert
@@ -27,8 +35,7 @@ GET_NOMOR_SURAT_KONTROL=/RencanaKontrol/noSuratKontrol/
GET_SURAT_KONTROL_SEP=/RencanaKontrol/nosep/
GET_NOMOR_RUJUKAN=/Rujukan/
GET_NOMOR_RUJUKAN_BATCH=/Rujukan/List/Peserta/
+GET_REFERENSI_DOKTER=/referensi/dokter/
GET_FKRTL=/api/rs/validate
-GET_FKTP=/api/pcare/validate
-
-
+GET_FKTP=/api/pcare/validate
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..c2083d3
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/bridging-rssa.iml b/.idea/bridging-rssa.iml
new file mode 100644
index 0000000..0f43ca1
--- /dev/null
+++ b/.idea/bridging-rssa.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..91aabb7
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..0faa797
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index cf4a464..b32a33b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,11 @@
FROM golang:1.23-alpine AS builder
+# Install tzdata dan dependencies build
+RUN apk add --no-cache tzdata build-base
+
+# Set timezone ke Asia/Jakarta
+ENV TZ=Asia/Jakarta
+
WORKDIR /app
COPY go.mod go.sum ./
diff --git a/config/config.go b/config/config.go
index 21cb2a4..645b102 100644
--- a/config/config.go
+++ b/config/config.go
@@ -17,6 +17,7 @@ import (
var DB *gorm.DB
var SatuDataDB *gorm.DB
+var SimrsDB *gorm.DB
var err error
func ConnectDB() {
@@ -34,22 +35,37 @@ func ConnectDB() {
} else {
log.Println("Successfully connected to the database")
}
+
+ hostSimrs := os.Getenv("SIMRS_HOST")
+ userNameSimrs := os.Getenv("SIMRS_USERNAME")
+ passwordSimrs := os.Getenv("SIMRS_PASSWORD")
+ dbNameSimrs := os.Getenv("SIMRS_NAME")
+ portSimrs := os.Getenv("SIMRS_PORT")
+
+ simrs := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", hostSimrs, userNameSimrs, passwordSimrs, dbNameSimrs, portSimrs)
+
+ SimrsDB, err = gorm.Open(postgres.Open(simrs), &gorm.Config{})
+ if err != nil {
+ log.Fatal("Failed to connect to Satu Data database: ", err)
+ } else {
+ log.Println("Successfully connected to the database")
+ }
}
-func SetHeader(cfg config.ConfigBpjs) *config.Header {
+func SetHeader(isIcare bool, cfg config.ConfigBpjs) *config.Header {
timenow := time.Now().UTC()
time := time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC)
tstamp := timenow.Unix() - time.Unix()
- // cfg.Cons_id = os.Getenv("CONS_ID_DEV")
- // 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")
+ if isIcare {
+ cfg.User_key = os.Getenv("USER_KEY_ICARE")
+ }
+
secret := []byte(cfg.Secret_key)
message := []byte(cfg.Cons_id + "&" + fmt.Sprint(tstamp))
hash := hmac.New(sha256.New, secret)
@@ -71,6 +87,35 @@ func SetHeader(cfg config.ConfigBpjs) *config.Header {
}
+func SetHeaderFKRTL(cfg config.ConfigBpjs) *config.Header {
+
+ timestamp := time.Now().UTC().Unix()
+
+ 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(timestamp))
+ hash := hmac.New(sha256.New, secret)
+ hash.Write(message)
+ // to lowercase hexits
+ 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,
+ UserKey: cfg.User_key,
+ TimeStamp: fmt.Sprint(timestamp),
+ XSignature: X_signature,
+ }
+
+ return header
+
+}
+
func SetHeaderDev(cfg config.ConfigBpjs) *config.Header {
timenow := time.Now().UTC()
diff --git a/database/satu_data/dokter/dokter.go b/database/satu_data/dokter/dokter.go
index ea9a295..6d9c515 100644
--- a/database/satu_data/dokter/dokter.go
+++ b/database/satu_data/dokter/dokter.go
@@ -55,7 +55,8 @@ func GetNamaLengkapDokter(idDokter []string) ([]dokter.NamaLengkap, error) {
from data_pegawai_daftar_gelar_belakang dpdgb
left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id where dpdgb.data_pegawai_id = dp.id
) AS gelarbelakang,
- dp."HFIS_code"
+ dp."HFIS_code",
+ dp."Code_dpjp" as "DPJP_code"
from "data_pegawai" dp
left join data_ktp dk on dp."KTP" = dk.id
WHERE dp.id in ?`, idDokter).Find(&namaDokter)
@@ -70,3 +71,19 @@ func GetNamaLengkapDokter(idDokter []string) ([]dokter.NamaLengkap, error) {
return namaDokter, nil
}
+
+func GetHFISCode(dpjp string) (*dokter.DaftarDokter, error) {
+ var dataDokter *dokter.DaftarDokter
+ err := config.SatuDataDB.Debug().Raw(`select dp."id", dp."HFIS_code" from data_pegawai dp where dp."Code_dpjp" = ?`, dpjp).First(&dataDokter).Error
+ if err != nil {
+ if errors.Is(err, gorm.ErrRecordNotFound) {
+ errMsg := errors.New("Data tidak ditemukan")
+ log.Println("error :", errMsg)
+ return nil, errMsg
+ }
+ log.Println("error :", err)
+ return nil, err
+ }
+ log.Println("Daftar Dokter :", dataDokter)
+ return dataDokter, nil
+}
diff --git a/database/satu_data/dokter/jadwal_dokter.go b/database/satu_data/dokter/jadwal_dokter.go
index 425cc26..a1df9f9 100644
--- a/database/satu_data/dokter/jadwal_dokter.go
+++ b/database/satu_data/dokter/jadwal_dokter.go
@@ -1,126 +1,187 @@
-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
-}
+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 DeleteDataJadwalDokter() error {
+ err := config.SatuDataDB.Debug().Exec(`truncate table "data_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 TruncateDataJadwalDokter() error {
+ err := config.SatuDataDB.Debug().Exec(`truncate table "data_jadwal_dokter"`).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 InsertDataJadwalDokter(reqInsert *jadwal_dokter.DataJadwalDokterSatuData) error {
+ err := config.SatuDataDB.Debug().Exec(`insert into "data_jadwal_dokter" ("id", "Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Tanggal_jadwal") values (?, ?, ? ,?, ?, ?, ?, ?)`, reqInsert.ID, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, reqInsert.Spesialis, reqInsert.SubSpesialis, reqInsert.TanggalJadwal).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
+}
+
+func GetAllJadwalDokter(condition string, args []interface{}) ([]*jadwal_dokter.ListDaftarJadwalDokter, error) {
+ var listDokter []*jadwal_dokter.ListDaftarJadwalDokter
+ query := `select djd."Hari" as valuehari, djd."Nama_hari" as hari, djd."Waktu" as waktu, ds."Spesialis" as spesialis, dss."Subspesialis" as subspesialis,
+ array(
+ select dgd."Gelar_depan"
+ from data_pegawai_daftar_gelar_depan dpdgd
+ left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id
+ where dpdgd.data_pegawai_id = dp.id
+ ) AS gelardepan,
+ dkt. "Nama_lengkap" as namalengkap,
+ array(
+ select dgb."Gelar_belakang"
+ from data_pegawai_daftar_gelar_belakang dpdgb
+ left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id
+ where dpdgb.data_pegawai_id = dp.id
+ ) AS gelarbelakang
+ from daftar_jadwal_dokter djd
+ join daftar_spesialis ds on ds.id = djd."Spesialis"
+ join daftar_subspesialis dss on dss.id = djd."Sub_spesialis"
+ join data_pegawai dp on dp.id = djd."Dokter"
+ join data_ktp dkt on dkt.id = dp."KTP" `
+ order := ` order by djd."Hari" asc, ds."Spesialis" asc, dss."Subspesialis" asc, djd."Waktu" asc`
+ query += condition + order
+ err := config.SatuDataDB.Debug().Raw(query, args...).Scan(&listDokter).Error
+ if err != nil {
+ log.Printf("Failed Get data : %v", err)
+ return nil, err
+ }
+ return listDokter, nil
+}
diff --git a/database/satu_data/jadwal/jadwal_libur.go b/database/satu_data/jadwal/jadwal_libur.go
new file mode 100644
index 0000000..6fc9329
--- /dev/null
+++ b/database/satu_data/jadwal/jadwal_libur.go
@@ -0,0 +1,21 @@
+package jadwal
+
+import (
+ "bridging-rssa/config"
+ "bridging-rssa/models/jadwal"
+ "log"
+)
+
+func GetJadwalLibur(date string) (*jadwal.DaftarJadwalLiburPelayanan, bool, error) {
+ var jadwalLibur *jadwal.DaftarJadwalLiburPelayanan
+ query := `select * from daftar_jadwal_libur_pelayanan where "Tanggal_libur_pelayanan" = ?`
+ q := config.SatuDataDB.Debug().Raw(query, date).Scan(&jadwalLibur)
+ if q.Error != nil {
+ log.Println(q.Error)
+ return nil, false, q.Error
+ } else if q.RowsAffected == 0 {
+ log.Println("Tidak pada hari libur")
+ return jadwalLibur, false, nil
+ }
+ return jadwalLibur, true, nil
+}
diff --git a/database/satu_data/kunjungan_pasien/kunjungan_pasien.go b/database/satu_data/kunjungan_pasien/kunjungan_pasien.go
new file mode 100644
index 0000000..195cc90
--- /dev/null
+++ b/database/satu_data/kunjungan_pasien/kunjungan_pasien.go
@@ -0,0 +1,41 @@
+package kunjunganpasien
+
+import (
+ "bridging-rssa/config"
+ kunjunganpasien "bridging-rssa/models/kunjungan_pasien"
+ "log"
+)
+
+func GetListKunjunganPasien(req *kunjunganpasien.RequestListKunjunganPasien) ([]*kunjunganpasien.ListKunjunganPasien, error) {
+ var dataKunjunganPasien []*kunjunganpasien.ListKunjunganPasien
+ query := `select
+ dkp. "NOMR" as nomr, dkp. "Nama_lengkap" as namalengkap, dkp. "Tanggal_lahir" as tanggallahir,
+ dkp. "Jenis_kelamin" as jeniskelamin, dkp. "Tanggal_masuk" as tanggalmasukkunjungan,
+ dkp."Jam_masuk" as jammasukkunjungan, dkp. "Diagnosis_awal_masuk" as dxawalmasuk,
+ dkp. "Display_diagnosis_awal_masuk" as displaydxawalmasuk, dlr. "Nama" as namaruang,
+ array(
+ select dgd. "Gelar_depan"
+ from data_pegawai_daftar_gelar_depan dpdgd
+ left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id
+ where dpdgd.data_pegawai_id = dp.id
+ ) AS gelardepan,
+ dkt. "Nama_lengkap" as namalengkapdokter,
+ array(
+ select dgb. "Gelar_belakang"
+ from data_pegawai_daftar_gelar_belakang dpdgb
+ left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id
+ where dpdgb.data_pegawai_id = dp.id
+ ) AS gelarbelakang
+ from data_kunjungan_pasien dkp
+ join daftar_lokasi_ruang dlr on dlr.id = dkp. "Ruangan"
+ join data_pegawai dp on dp.id = dkp. "DPJP"
+ join data_ktp dkt on dkt.id = dp. "KTP"
+ where dkp."Tanggal_masuk" between ? and ?
+ order by dkp. "Tanggal_masuk" desc, dkp. "Jam_masuk" desc`
+ err := config.SatuDataDB.Debug().Raw(query, req.TanggalAwal, req.TanggalAkhir).Scan(&dataKunjunganPasien).Error
+ if err != nil {
+ log.Println(err)
+ return nil, err
+ }
+ return dataKunjunganPasien, nil
+}
diff --git a/database/satu_data/log_api/log_api.go b/database/satu_data/log_api/log_api.go
index d9f4f51..2755d5a 100644
--- a/database/satu_data/log_api/log_api.go
+++ b/database/satu_data/log_api/log_api.go
@@ -31,4 +31,16 @@ func InsertLogAPI(reqInsert *logapi.DataLogAPI) error {
return err
}
return nil
-}
\ No newline at end of file
+}
+
+func GetLogAPI(req logapi.ReqGetDataLogAPI) ([]*logapi.DataLogAPI, error) {
+ var dataLog []*logapi.DataLogAPI
+ query := `select * from data_log_api dla where dla."Parameter" = 'BPJS-VClaim-RencanaKontrol' and dla."Request"->>'tipe_rawat' = ? and date(dla."date_created") between ? and ?`
+ err := config.SatuDataDB.Debug().Raw(query, req.TipeRawat, req.TanggalAwal, req.TanggalAkhir).Scan(&dataLog).Error
+ if err != nil {
+ log.Println(err)
+ return nil, err
+ }
+ log.Println("Berhasil Get Data")
+ return dataLog, nil
+}
diff --git a/database/satu_data/log_api/log_icare.go b/database/satu_data/log_api/log_icare.go
new file mode 100644
index 0000000..94cbdf9
--- /dev/null
+++ b/database/satu_data/log_api/log_icare.go
@@ -0,0 +1,24 @@
+package logapi
+
+import (
+ "bridging-rssa/config"
+ logapi "bridging-rssa/models/log_api"
+ "log"
+)
+
+func InsertLogICare(reqInsert *logapi.InsertLogICare) error {
+ query := `insert into "data_log_icare_bpjs" ("id", "date_created", "Ruangan", "Dokter", "Kunjungan_pasien", "Waktu_transaksi")
+ values (?, ?, ?, ?, ?, ?)`
+ errInsert := config.SatuDataDB.Debug().Exec(query,
+ reqInsert.ID,
+ reqInsert.DateCreated,
+ reqInsert.Ruangan,
+ reqInsert.Dokter,
+ reqInsert.Kunjungan_pasien,
+ reqInsert.WaktuTransaksi).Error
+ if errInsert != nil {
+ log.Println(errInsert)
+ return errInsert
+ }
+ return nil
+}
diff --git a/database/satu_data/lokasi_ruang/daftar_lokasi_ruang.go b/database/satu_data/lokasi_ruang/daftar_lokasi_ruang.go
new file mode 100644
index 0000000..6514795
--- /dev/null
+++ b/database/satu_data/lokasi_ruang/daftar_lokasi_ruang.go
@@ -0,0 +1,30 @@
+package lokasiruang
+
+import (
+ "bridging-rssa/config"
+ "errors"
+ "log"
+ "strconv"
+
+ "gorm.io/gorm"
+)
+
+func GetDaftarLokasiRuang(idSimgos string) (int, error) {
+ var idRuangan int
+ query := `select dlr."id" from "daftar_lokasi_ruang" dlr where dlr."Id_location_simgos" = ?`
+ err := config.SatuDataDB.Debug().Raw(query, idSimgos).First(&idRuangan).Error
+ if err != nil {
+ if errors.Is(err, gorm.ErrRecordNotFound) {
+ log.Println(err)
+ idInt, errConv := strconv.Atoi(idSimgos)
+ if errConv != nil {
+ log.Println(err)
+ return 0, err
+ }
+ return idInt, nil
+ }
+ log.Println(err)
+ return 0, err
+ }
+ return idRuangan, nil
+}
diff --git a/database/satu_data/pasien/kunjungan_pasien.go b/database/satu_data/pasien/kunjungan_pasien.go
new file mode 100644
index 0000000..d1c6c5c
--- /dev/null
+++ b/database/satu_data/pasien/kunjungan_pasien.go
@@ -0,0 +1,61 @@
+package pasien
+
+import (
+ "bridging-rssa/config"
+ "bridging-rssa/models/pasien"
+ "errors"
+ "log"
+
+ "gorm.io/gorm"
+)
+
+func GetDataKunjunganPasien(idxdaftar string) (*pasien.KunjunganPasien, error) {
+ var kunjunganPasien *pasien.KunjunganPasien
+ query := `select dks."id", dks."Ruangan" from "data_kunjungan_pasien" dks where dks."IDXDAFTAR" = ?`
+ err := config.SatuDataDB.Debug().Raw(query, idxdaftar).First(&kunjunganPasien).Error
+ if err != nil {
+ if errors.Is(err, gorm.ErrRecordNotFound) {
+ errMsg := errors.New("Data Tidak Ditemukan")
+ log.Println(errMsg)
+ return nil, errMsg
+ }
+ log.Println(err)
+ return nil, err
+ }
+ log.Println("Data Kunjungan Pasien : ", kunjunganPasien)
+ return kunjunganPasien, nil
+}
+
+func GetListKunjunganPasien(req *pasien.RequestListKunjunganPasien) ([]*pasien.ListKunjunganPasien, error) {
+ var dataKunjunganPasien []*pasien.ListKunjunganPasien
+ query := `select
+ dkp. "NOMR" as nomr, dkp. "Nama_lengkap" as namalengkap, dkp. "Tanggal_lahir" as tanggallahir,
+ dkp. "Jenis_kelamin" as jeniskelamin, dkp. "Tanggal_masuk" as tanggalmasukkunjungan,
+ dkp."Jam_masuk" as jammasukkunjungan, dkp. "Diagnosis_awal_masuk" as dxawalmasuk,
+ dkp. "Display_diagnosis_awal_masuk" as displaydxawalmasuk, dlr. "Nama" as namaruang,
+ array(
+ select dgd. "Gelar_depan"
+ from data_pegawai_daftar_gelar_depan dpdgd
+ left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id
+ where dpdgd.data_pegawai_id = dp.id
+ ) AS gelardepan,
+ dkt. "Nama_lengkap" as namalengkapdokter,
+ array(
+ select dgb. "Gelar_belakang"
+ from data_pegawai_daftar_gelar_belakang dpdgb
+ left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id
+ where dpdgb.data_pegawai_id = dp.id
+ ) AS gelarbelakang
+ from data_kunjungan_pasien dkp
+ join daftar_lokasi_ruang dlr on dlr.id = dkp. "Ruangan"
+ join data_pegawai dp on dp.id = dkp. "DPJP"
+ join data_ktp dkt on dkt.id = dp. "KTP"
+ where dkp."Tanggal_masuk" between ? and ?
+ order by dkp. "Tanggal_masuk" desc, dkp. "Jam_masuk" desc`
+ q := config.SatuDataDB.Debug().Raw(query, req.TanggalAwal, req.TanggalAkhir).Scan(&dataKunjunganPasien)
+ if q.Error != nil {
+ log.Println(q.Error)
+ return nil, q.Error
+ }
+ return dataKunjunganPasien, nil
+}
diff --git a/database/satu_data/surat_kontrol/surat_kontrol.go b/database/satu_data/surat_kontrol/surat_kontrol.go
index ec5abe1..6590b4e 100644
--- a/database/satu_data/surat_kontrol/surat_kontrol.go
+++ b/database/satu_data/surat_kontrol/surat_kontrol.go
@@ -79,7 +79,7 @@ func InsertDataSuratKontrol(reqInsert *suratkontrol.DataSuratKontrol) error {
return nil
}
-func GetDataSuratKontrol(offset, limit string) ([]*suratkontrol.GetDataSuratKontrol, error) {
+func GetDataSuratKontrol() ([]*suratkontrol.GetDataSuratKontrol, error) {
var dataSurKon []*suratkontrol.GetDataSuratKontrol
err := config.SatuDataDB.Debug().Raw(`select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol",
dsk."Nomor_surat_kontrol",
@@ -115,7 +115,7 @@ func GetDataSuratKontrol(offset, limit string) ([]*suratkontrol.GetDataSuratKont
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' offset ? limit ?`, offset, limit).Scan(&dataSurKon).Error
+ where dsk."Status_surat_kontrol" = '1'`).Scan(&dataSurKon).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
errMsg := errors.New("DPJP anda belum ada subspesialis")
@@ -155,7 +155,8 @@ func GetDataSuratKontrolByID(idxdaftar string) (*suratkontrol.GetDataSuratKontro
dkp2."NOMR" as "No_rm",
dkp2."Diagnosis_primer_utama" as "Kode_diagnosa",
dkp2."Display_diagnosis_primer_utama" as "Nama_diagnosa",
- dsk."Tipe_surat_kontrol" as "Tipe_SurKon"
+ dsk."Tipe_surat_kontrol" as "Tipe_SurKon",
+ dsk."User_created_surat_kontrol" as "User"
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"
@@ -207,7 +208,62 @@ 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 ? offset ? limit ?`
+ queryDate := ` and date(dsk."Tanggal_rencana_kontrol") between ? and ? offset ? limit ?`
+ if req.IsTanggalEntri {
+ queryDate = ` and date(dsk."Tanggal_cetak_surat_kontrol") between ? and ? offset ? limit ?`
+ }
+ query += queryDate
+ querySelect := `select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol",
+ dsk."Nomor_surat_kontrol",
+ (select dlr."Nama"
+ from data_kunjungan_pasien dkp
+ left join daftar_lokasi_ruang dlr on dkp."Ruangan" = dlr.id where dkp."id" = dsk."Kunjungan_pasien" LIMIT 1) as "Poli_asal",
+ dlr."Nama" as "Poli_tuju",
+ dkp2."Nomor_sep", dkp2."Nama_lengkap", dkp2."IDXDAFTAR",
+ array(
+ select dgd. "Gelar_depan"
+ from data_pegawai_daftar_gelar_depan dpdgd
+ left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id where dpdgd.data_pegawai_id = dp.id
+ ) AS gelardepan ,
+ dk."Nama_lengkap" as "Nama_lengkap_dokter",
+ array(
+ select dgb. "Gelar_belakang"
+ from data_pegawai_daftar_gelar_belakang dpdgb
+ left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id where dpdgb.data_pegawai_id = dp.id
+ ) AS gelarbelakang,
+ ds."Subspesialis",
+ ds."Kode" as "Kode_poli",
+ 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",
+ dsk."Tipe_surat_kontrol" as "Tipe_SurKon"
+ 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(&dataSurKon).Error
+ if err != nil {
+ log.Println(err)
+ return nil, err
+ }
+ return dataSurKon, nil
+}
+
+func SearchDataSurKonNew(req suratkontrol.RequestCariPasien, query string, args []interface{}) ([]*suratkontrol.GetDataSuratKontrol, error) {
+ var dataSurKon []*suratkontrol.GetDataSuratKontrol
+ queryDate := ` and date(dsk."Tanggal_rencana_kontrol") between ? and ?`
+ if req.IsTanggalEntri {
+ queryDate = ` and date(dsk."Tanggal_cetak_surat_kontrol") between ? and ?`
+ }
+ query += queryDate
querySelect := `select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol",
dsk."Nomor_surat_kontrol",
(select dlr."Nama"
@@ -254,7 +310,11 @@ func SearchDataSurKon(req suratkontrol.RequestCariPasien, query string, args []i
func CountDataSurKon(req suratkontrol.RequestCariPasien, query string, args []interface{}) (int, error) {
var jumlahData int
- query += ` and date(dsk."Tanggal_rencana_kontrol") between ? and ?`
+ queryDate := ` and date(dsk."Tanggal_rencana_kontrol") between ? and ?`
+ if req.IsTanggalEntri {
+ queryDate = ` and date(dsk."Tanggal_cetak_surat_kontrol") between ? and ?`
+ }
+ query += queryDate
querySelect := `select count(dsk.*)
from data_surat_kontrol dsk
left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien"
@@ -283,3 +343,14 @@ func GetNomorSurKon(idPasien string) (string, error) {
log.Println("Nomor SurKon :", noSurKon)
return noSurKon, nil
}
+
+func GetAllNomorSurKon(date string) ([]*suratkontrol.DataNomorSuratKontrol, error) {
+ var listNoSurKon []*suratkontrol.DataNomorSuratKontrol
+ querySelect := `select dsk."id", dsk."Nomor_surat_kontrol", date(dsk."Tanggal_rencana_kontrol") as "Tanggal_rencana_kontrol" from data_surat_kontrol dsk where dsk."Tipe_surat_kontrol" = '1' and date(dsk.date_created) = ?`
+ err := config.SatuDataDB.Debug().Raw(querySelect, date).Scan(&listNoSurKon).Error
+ if err != nil {
+ log.Println(err)
+ return nil, err
+ }
+ return listNoSurKon, nil
+}
diff --git a/database/simrs/mikrobiologi/mikrobiologi.go b/database/simrs/mikrobiologi/mikrobiologi.go
new file mode 100644
index 0000000..f0af917
--- /dev/null
+++ b/database/simrs/mikrobiologi/mikrobiologi.go
@@ -0,0 +1,43 @@
+package mikrobiologi
+
+import (
+ "bridging-rssa/config"
+ "bridging-rssa/models/simrs/mikrobiologi"
+ "errors"
+ "log"
+
+ "gorm.io/gorm"
+)
+
+func GetDataMikroBiologi(req *mikrobiologi.RequestPasienMikrobiologi) ([]*mikrobiologi.DataPasienMikrobiologi, error) {
+ var dataPasien []*mikrobiologi.DataPasienMikrobiologi
+ query := `select tom."nomr" as nomr, tomm."nonota" as nonota, tom."idxdaftar" as idxdaftar, tom."tglorder" as tglorder, tom."nolab" as nolab, tom."rajal" as statusrajal, tom."aps" as statusaps,
+ mp."nama" as nama, mp."noktp" as noktp, mp."noktp_baru" as noktpbaru, mp."tempat" as tmptlahir, mp."tgllahir" as tgllahir, mp."jeniskelamin" as jeniskelamin, mp."alamat" as alamat,
+ mpa."nama" as namaaps, mpa."noktp" as noktpaps, mpa."tempat" as tmptlahiraps, mpa."tgllahir" as tgllahiraps, mpa."jeniskelamin" as jeniskelaminaps, mpa."alamat" as alamataps,
+ mr."nama" as namaruang, mr."kelas" as kelasruang,
+ trj."kodetarif" as kodetarifrajal,
+ trp."kodetarif" as kodetarifranap
+ from t_orderlabmikro tom
+ left join m_pasien mp on mp."nomr" = tom."nomr"
+ left join m_pasien_aps mpa on mpa."nomr" = tom."nomr"
+ left join m_ruang mr on mr."no" = tom."kdpoli"
+ left join t_orderlabmikro_main tomm on tomm."nolab" = tom."nolab"
+ left join t_billrajal trj on trj."nonota" = CAST(tomm."nonota" AS int8)
+ left join t_billranap trp on trp."nonota" = CAST(tomm."nonota" AS int8)
+ where tom."nomr" = ?
+ and tom."idxdaftar" = ?
+ group by (tom."nomr",tomm."nonota",tom."idxdaftar",tom."tglorder",tom."nolab",tom."rajal",tom."aps",mp."nama",mp."noktp",mp."noktp_baru",mp."tempat",mp."tgllahir",mp."jeniskelamin",mp."alamat",mpa."nama",mpa."noktp",
+ mpa."tempat",mpa."tgllahir",mpa."jeniskelamin",mpa."alamat",mr."nama",mr."kelas",trj."kodetarif",trp."kodetarif")
+ `
+ errQuery := config.SimrsDB.Debug().Raw(query, req.NOMR, req.IDXDaftar).Scan(&dataPasien).Error
+ if errQuery != nil {
+ if errors.Is(errQuery, gorm.ErrRecordNotFound) {
+ errMsg := errors.New("Data Tidak Ditemukan")
+ log.Println(errMsg)
+ return nil, errMsg
+ }
+ log.Println(errQuery)
+ return nil, errQuery
+ }
+ return dataPasien, nil
+}
diff --git a/docker-compose.yml b/docker-compose.yml
index 1c6dc29..e3cc9d6 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -10,7 +10,11 @@ services:
- 8080:8080
volumes:
- .:/app
+ - /etc/localtime:/etc/localtime:ro
+ - /etc/timezone:/etc/timezone:ro
environment:
+ # Set timezone to Asia/Jakarta
+ - ENV TZ=Asia/Jakarta
# DATABASE SIMRS V3.0
- POSTGRE_DB_HOST=10.10.123.223
- POSTGRE_DB_PORT=5432
@@ -24,7 +28,7 @@ services:
- SATUDATA_NAME=satu_db
- SATUDATA_PORT=5000
# BPJS
- - BASEURL_BPJS=https://apijkn.bpjs-kesehatan.go.id
+ - BASEURL_BPJS=https://apijkn.bpjs-kesehatan.go.id/
- CONS_ID=5257
- USER_KEY=4cf1cbef8c008440bbe9ef9ba789e482
- SECRET_KEY=1bV363512D
diff --git a/docker-push.sh b/docker-push.sh
new file mode 100644
index 0000000..89b97a1
--- /dev/null
+++ b/docker-push.sh
@@ -0,0 +1,27 @@
+!/bin/bash
+
+#get image name
+remote_url=$(git remote get-url origin)
+image=$(echo $remote_url | sed 's|https://||g; s|.git||g')
+
+#get branch name
+branch_name=$(git rev-parse --abbrev-ref HEAD)
+clean_branch_name=${branch_name##*/}
+
+#get timestamp for the tag
+timestamp=$(date +%Y%m%d%H%M%S)
+
+tag=$image:$timestamp-$clean_branch_name
+latest=$image:latest-$clean_branch_name
+
+#build image
+docker build -t $tag .
+docker tag $tag $latest
+
+#push to dockerhub
+docker login git.rssa.top -u stim -p 4fde63b07906e7bfa6b3493d76d153a3981039b9
+docker push $tag
+docker push $latest
+
+#remove dangling images
+docker system prune -f
diff --git a/go.mod b/go.mod
index 4874b1d..c78cb6c 100644
--- a/go.mod
+++ b/go.mod
@@ -65,6 +65,7 @@ require (
github.com/google/uuid v1.6.0
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
+ github.com/robfig/cron/v3 v3.0.1
golang.org/x/text v0.18.0 // indirect
gorm.io/driver/postgres v1.5.9
)
diff --git a/go.sum b/go.sum
index 9b93f1e..2a98a09 100644
--- a/go.sum
+++ b/go.sum
@@ -96,6 +96,8 @@ github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xl
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
+github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
diff --git a/handlers/bpjs/i_care/i_care.go b/handlers/bpjs/i_care/i_care.go
index 3b020b7..bec6339 100644
--- a/handlers/bpjs/i_care/i_care.go
+++ b/handlers/bpjs/i_care/i_care.go
@@ -1,25 +1,35 @@
package icare
import (
+ "bridging-rssa/database/satu_data/dokter"
+ log_api "bridging-rssa/database/satu_data/log_api"
+ "bridging-rssa/database/satu_data/pasien"
"bridging-rssa/models/config"
+ logapi "bridging-rssa/models/log_api"
+ "encoding/json"
+ "fmt"
"log"
"net/http"
"os"
+ "strconv"
+ "strings"
+ "time"
cfg "bridging-rssa/config"
ic "bridging-rssa/models/bpjs/i_care"
"github.com/gin-gonic/gin"
+ "github.com/google/uuid"
)
func GetFKRTL(c *gin.Context) {
- baseUrl := os.Getenv("BASEURL_BPJS_DEV")
- endpoint := os.Getenv("I_CARE_JKN_DEV")
+ baseUrl := os.Getenv("BASEURL_BPJS")
+ endpoint := os.Getenv("I_CARE_JKN")
param := os.Getenv("GET_FKRTL")
url := baseUrl + endpoint + param
log.Println("URL :", url)
- var req *ic.RequestICare
+ var req *ic.ReqICare
err := c.Bind(&req)
if err != nil {
@@ -31,11 +41,26 @@ func GetFKRTL(c *gin.Context) {
return
}
- log.Println("REQUEST: ", req)
+ reqICare := &ic.RequestICare{
+ Param: req.Param,
+ KodeDokter: req.KodeDokter,
+ }
+
+ reqJson, errMarshal := json.Marshal(reqICare)
+ if errMarshal != nil {
+ log.Println(err)
+ c.JSON(http.StatusInternalServerError, &ic.Metadata{
+ Code: 0,
+ Message: errMarshal.Error(),
+ })
+ return
+ }
+
+ log.Println("REQUEST: ", string(reqJson))
conf := config.ConfigBpjs{}
- header := cfg.SetHeaderDev(conf)
+ header := cfg.SetHeader(true, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
@@ -46,7 +71,15 @@ func GetFKRTL(c *gin.Context) {
}
log.Println("Headers : ", headers)
- res, err := ResponseGetFKRTL(url, header, headers, req)
+ var headerStringBuilder strings.Builder
+ for key, value := range headers {
+ headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value))
+ }
+ headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ")
+
+ dpjp := strconv.Itoa(req.KodeDokter)
+
+ dataDokter, err := dokter.GetHFISCode(dpjp)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
@@ -56,6 +89,129 @@ func GetFKRTL(c *gin.Context) {
return
}
+ reqICare.KodeDokter, err = strconv.Atoi(dataDokter.HfisCode)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusInternalServerError, &ic.Metadata{
+ Code: 0,
+ Message: err.Error(),
+ })
+ return
+ }
+
+ kunjunganPasien, err := pasien.GetDataKunjunganPasien(req.IDXDaftar)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusInternalServerError, &ic.Metadata{
+ Code: 0,
+ Message: err.Error(),
+ })
+ return
+ }
+
+ uuid := uuid.New().String()
+ logTimeStart := time.Now().Format("2006-01-02 15:04:05")
+ res, err := ResponseGetFKRTL(url, header, headers, reqICare)
+ if err != nil {
+ responJson, errMarshal2 := json.Marshal(res)
+ if errMarshal2 != nil {
+ log.Println(errMarshal2)
+ c.JSON(http.StatusInternalServerError, &ic.Metadata{
+ Code: 0,
+ Message: errMarshal2.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-ICare-FKRTL",
+ Header: headerString,
+ Method: "POST",
+ Url: url,
+ Request: reqJson,
+ Respon: responJson,
+ ResponCode: strconv.Itoa(res.MetaData.Code),
+ ResponTimeStart: logTimeStart,
+ ResponTimeEnd: logTimeEnd,
+ Comment: res.MetaData.Message,
+ }
+
+ errInsert := log_api.InsertLogAPI(reqInsertLog)
+ if errInsert != nil {
+ log.Println(errInsert)
+ c.JSON(http.StatusInternalServerError, &ic.Metadata{
+ Code: 0,
+ Message: errInsert.Error(),
+ })
+ return
+ }
+ log.Println(err)
+ c.JSON(http.StatusInternalServerError, &ic.Metadata{
+ Code: 0,
+ Message: err.Error(),
+ })
+ return
+ }
+ responJson, err := json.Marshal(res)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusInternalServerError, &ic.Metadata{
+ Code: 0,
+ 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-ICare-FKRTL",
+ Header: headerString,
+ Method: "POST",
+ Url: url,
+ Request: reqJson,
+ Respon: responJson,
+ ResponCode: strconv.Itoa(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, &ic.Metadata{
+ Code: 0,
+ Message: err.Error(),
+ })
+ return
+ }
+
+ reqInsert := &logapi.InsertLogICare{
+ ID: uuid,
+ DateCreated: logTimeEnd,
+ Ruangan: kunjunganPasien.Ruangan,
+ Dokter: dataDokter.ID,
+ Kunjungan_pasien: kunjunganPasien.ID,
+ WaktuTransaksi: logTimeEnd,
+ }
+
+ errInsert := log_api.InsertLogICare(reqInsert)
+ if errInsert != nil {
+ log.Println(errInsert)
+ c.JSON(http.StatusInternalServerError, &ic.Metadata{
+ Code: 0,
+ Message: errInsert.Error(),
+ })
+ return
+ }
+
c.JSON(http.StatusOK, res)
}
diff --git a/handlers/bpjs/i_care/response.go b/handlers/bpjs/i_care/response.go
index 9ed5cca..a06b880 100644
--- a/handlers/bpjs/i_care/response.go
+++ b/handlers/bpjs/i_care/response.go
@@ -54,6 +54,15 @@ func ResponseGetFKRTL(url string, header *config.Header, headers map[string]stri
}
log.Println("RESPONSE: ", response)
+ // if response.StatusCode != 200 {
+ // errMsg := errors.New(response.Status)
+ // log.Printf("error : %v", errMsg)
+ // responses.MetaData.Code = 503
+ // responses.MetaData.Message = errMsg.Error()
+ // log.Println("responses: ", responses)
+ // return responses, err
+ // }
+
if response.StatusCode == http.StatusGatewayTimeout { // 504
errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi")
log.Printf("error : %v", errMsg)
@@ -176,13 +185,6 @@ func ResponseGetFKTP(url string, header *config.Header, headers map[string]strin
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)
@@ -196,6 +198,13 @@ func ResponseGetFKTP(url string, header *config.Header, headers map[string]strin
log.Println("responses: ", responses)
return responses, errMsg
}
+ err = json.Unmarshal([]byte(string(res)), &resFkrtlRaw)
+ if err != nil {
+ log.Printf("Error Unmarshaling: %v", err)
+ return nil, err
+ }
+
+ log.Println("ResponseRaw : ", resFkrtlRaw)
dataResp, err := docs.StringDecrypt(key, resFkrtlRaw.Response)
if err != nil {
diff --git a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go
index c455c14..16acaa0 100644
--- a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go
+++ b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go
@@ -1,335 +1,783 @@
-package jadwal_dokter
-
-import (
- cfg "bridging-rssa/config"
- "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"
- "net/http"
- "os"
- "strconv"
- "strings"
- "time"
-
- "github.com/gin-gonic/gin"
-)
-
-func GetJadwalDokter(c *gin.Context) {
- baseUrl := os.Getenv("BASEURL_BPJS")
- endpoint := os.Getenv("ANTREAN_RS")
- url := baseUrl + endpoint
-
- conf := config.ConfigBpjs{}
-
- header := cfg.SetHeader(conf)
-
- headers := map[string]string{
- "X-cons-id": header.ConsID,
- "X-timestamp": header.TimeStamp,
- "X-signature": header.XSignature,
- "user_key": header.UserKey,
- }
- log.Println("Headers : ", headers)
-
- errTruncate := dokter.DeleteJadwalDokter()
- if errTruncate != nil {
- log.Fatal(errTruncate)
- c.JSON(http.StatusInternalServerError, errTruncate)
- }
-
- errTruncateTemp := dokter.DeleteJadwalDokterTemp()
- if errTruncateTemp != nil {
- log.Fatal(errTruncateTemp)
- c.JSON(http.StatusInternalServerError, errTruncateTemp)
- }
-
- // Select from daftar spesialis
- spesialis, err := dokter.GetSpesialis()
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
-
- var listIdSpesialis = make(map[string]int)
- for _, kodeDokter := range spesialis {
- listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID
- }
-
- subspesialis, err := dokter.GetSubspesialis()
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
-
- var listIdSubspesialis = make(map[string]int)
- for _, kodeDokter := range subspesialis {
- listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID
- }
-
- listDokter, err := dokter.GetDokter()
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
-
- var listIddokter = make(map[int]string)
- for _, kodeDokter := range listDokter {
- listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
- }
-
- var reqInsert *jadwal_dokter.JadwalDokterSatuData
- var res *[]jadwal_dokter.ListDokter
-
- for _, value := range spesialis {
- tanggal := time.Now().Format("2006-01-02")
- for i := 0; i < 7; i++ {
- kdPoly := value.Kode
- res, err = JadwalDokterGetResponse(url, header, kdPoly, tanggal, headers)
- if err != nil {
- log.Fatalf("Error making external API request: %v", err)
- c.JSON(http.StatusInternalServerError, err)
- }
- if res == nil {
- log.Println("Skip Proses")
- continue
- }
- for _, v := range *res {
- idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis)
- idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis)
- idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter)
- reqInsert = &jadwal_dokter.JadwalDokterSatuData{
- Hari: v.Hari,
- NamaHari: v.NamaHari,
- Waktu: v.Jadwal,
- Dokter: idDokter,
- Spesialis: idSpesialis,
- SubSpesialis: idSubspesialis,
- Status: 1, // When available always set to 1
- }
- if reqInsert.Dokter != "" {
- errInsert := dokter.InsertJadwalDokter(reqInsert)
- if errInsert != nil {
- log.Println(errInsert)
- c.JSON(http.StatusInternalServerError, errInsert)
- }
- } else {
- reqInsert.Dokter = strconv.Itoa(v.KodeDokter)
- errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert)
- if errInsertTemp != nil {
- log.Println(errInsertTemp)
- c.JSON(http.StatusInternalServerError, errInsertTemp)
- }
- }
- }
- date, errParse := time.Parse("2006-01-02", tanggal)
- if errParse != nil {
- c.JSON(http.StatusInternalServerError, errParse)
- return
- }
- tanggal = date.AddDate(0, 0, 1).Format("2006-01-02")
- log.Println("Tanggal :", tanggal)
- }
- }
- c.JSON(http.StatusOK, res)
-}
-
-func GetDokterByDPJP(c *gin.Context) {
- dpjp := c.Param("dpjp")
- listHari, err := dokter.GetJadwalDokterByDPJP(dpjp)
- if err != nil {
- log.Println(err)
- c.JSON(http.StatusInternalServerError, &suratkontrol.MetadataString{
- Code: "",
- Message: err.Error(),
- })
- return
- }
-
- log.Println("listHari: ", listHari)
-
- var IDDokter []string
- var idSubspesialis int
- for _, v := range listHari {
- IDDokter = append(IDDokter, v.Dokter)
- idSubspesialis = v.SubSpesialis
- break
- }
-
- namaDokter, err := dokter.GetNamaLengkapDokter(IDDokter)
- if err != nil {
- log.Println(err)
- c.JSON(http.StatusInternalServerError, &suratkontrol.MetadataString{
- Code: "",
- Message: err.Error(),
- })
- return
- }
-
- listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
-
- var res *jadwal_dokter.ResponseListHari
-
- for _, k := range namaDokter {
- var jadwalDokter []jadwal_dokter.ListJadwalDokter
- for _, key := range listHari {
- jadwalDokter = append(jadwalDokter, jadwal_dokter.ListJadwalDokter{
- NamaHari: key.NamaHari,
- KodeHari: key.Hari,
- Waktu: key.Waktu,
- })
- }
- gelarDepan := utils.ReplaceGelar(k.GelarDepan)
- gelarBelakang := utils.ReplaceGelar(k.GelarBelakang)
- namaLengkap := gelarDepan + " " + k.NamaLengkap + " " + gelarBelakang
- namaLengkap = strings.TrimPrefix(namaLengkap, " ")
- namaLengkap = strings.TrimSuffix(namaLengkap, " ")
- hfisCode := strings.TrimSpace(k.HFISCode)
- res = &jadwal_dokter.ResponseListHari{
- IDSpesialis: listSubspesialis.IDSpesialis,
- Kode: listSubspesialis.Kode,
- Spesialis: listSubspesialis.Spesialis,
- Subspesialis: listSubspesialis.Subspesialis,
- IDSubspesialis: listSubspesialis.ID,
- NamaLengkap: namaLengkap,
- HFISCode: hfisCode,
- KodeDPJP: dpjp,
- JadwalDokter: jadwalDokter,
- IDDokter: k.ID,
- }
- }
- log.Println("Response :", res)
- c.JSON(http.StatusOK, res)
-}
-
-func GetSpesialisByDate(c *gin.Context) {
- tanggal := c.Param("tanggal")
- date, err := time.Parse("2006-01-02", tanggal)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
- hari := date.Local().Weekday().String()
- hari = utils.ConvertDay(hari)
- idSpesialis, err := dokter.GetJadwalDokterByDate(hari)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
- listSpesialis, err := dokter.GetSpesialisByID(idSpesialis)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
- c.JSON(http.StatusOK, listSpesialis)
-}
-
-func GetJadwalSubspesialisByDate(c *gin.Context) {
- tanggal := c.Param("tanggal")
- date, err := time.Parse("2006-01-02", tanggal)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
-
- log.Println("tanggal: ", tanggal)
- hari := date.Local().Weekday().String()
- hari = utils.ConvertDay(hari)
- idsubspesialis, err := dokter.GetJadwalSubspesialisByDate(hari)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
- listSpesialis, err := dokter.GetSubspesialisByIDBatch(idsubspesialis)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
- c.JSON(http.StatusOK, listSpesialis)
-}
-
-func GetDokterBySpesialis(c *gin.Context) {
- spesialis := c.Param("spesialis")
- tanggal := c.Param("tanggal")
- date, err := time.Parse("2006-01-02", tanggal)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
- hari := date.Local().Weekday().String()
- hari = utils.ConvertDay(hari)
- idDokter, err := dokter.GetJadwalDokterBySpesialis(hari, spesialis)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
- namaDokter, err := dokter.GetNamaLengkapDokter(idDokter)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
- var resDokter []dktr.ResponseDokter
- idSpesialis, err := strconv.Atoi(spesialis)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
- for _, v := range namaDokter {
- gelarDepan := utils.ReplaceGelar(v.GelarDepan)
- gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
- namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
- namaLengkap = strings.TrimPrefix(namaLengkap, " ")
- namaLengkap = strings.TrimSuffix(namaLengkap, " ")
- resDokter = append(resDokter, dktr.ResponseDokter{
- ID: v.ID,
- NamaLengkap: namaLengkap,
- Spesialis: idSpesialis,
- HFISCode: v.HFISCode,
- })
- }
- log.Println("Response :", resDokter)
- c.JSON(http.StatusOK, resDokter)
-}
-
-func GetDokterBySubspesialis(c *gin.Context) {
- subspesialis := c.Param("subspesialis")
- tanggal := c.Param("tanggal")
- date, err := time.Parse("2006-01-02", tanggal)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
-
- log.Println("subspesialis: ", subspesialis)
- log.Println("tanggal: ", tanggal)
-
- hari := date.Local().Weekday().String()
- hari = utils.ConvertDay(hari)
- idDokter, err := dokter.GetJadwalDokterBySubpesialis(hari, subspesialis)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
- namaDokter, err := dokter.GetNamaLengkapDokter(idDokter)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
- var resDokter []dktr.ResponseDokterNew
- idSubspesialis, err := strconv.Atoi(subspesialis)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
-
- listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis)
- if err != nil {
- c.JSON(http.StatusInternalServerError, err)
- }
-
- for _, v := range namaDokter {
- gelarDepan := utils.ReplaceGelar(v.GelarDepan)
- gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
- namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
- namaLengkap = strings.TrimPrefix(namaLengkap, " ")
- namaLengkap = strings.TrimSuffix(namaLengkap, " ")
- resDokter = append(resDokter, dktr.ResponseDokterNew{
- ID: v.ID,
- NamaLengkap: namaLengkap,
- Subspesialis: idSubspesialis,
- HFISCode: v.HFISCode,
- KodePoli: listSubspesialis.Kode,
- })
- }
- log.Println("Response :", resDokter)
- c.JSON(http.StatusOK, resDokter)
-}
+package jadwal_dokter
+
+import (
+ cfg "bridging-rssa/config"
+ "bridging-rssa/database/satu_data/dokter"
+ log_api "bridging-rssa/database/satu_data/log_api"
+ "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"
+ logapi "bridging-rssa/models/log_api"
+ "encoding/json"
+ "fmt"
+ "log"
+ "net/http"
+ "os"
+ "strconv"
+ "strings"
+ "time"
+
+ "github.com/gin-gonic/gin"
+ "github.com/google/uuid"
+ "gorm.io/gorm"
+)
+
+func GetJadwalDokter() {
+ baseUrl := os.Getenv("BASEURL_BPJS")
+ endpoint := os.Getenv("ANTREAN_RS")
+ url := baseUrl + endpoint
+
+ 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,
+ }
+
+ 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(), "; ")
+
+ errTruncate := dokter.DeleteJadwalDokter()
+ if errTruncate != nil {
+ log.Println(errTruncate)
+ return
+ }
+
+ errTruncateTemp := dokter.DeleteJadwalDokterTemp()
+ if errTruncateTemp != nil {
+ log.Println(errTruncateTemp)
+ return
+ }
+
+ // Select from daftar spesialis
+ spesialis, err := dokter.GetSpesialis()
+ if err != nil {
+ return
+ }
+
+ var listIdSpesialis = make(map[string]int)
+ for _, kodeDokter := range spesialis {
+ listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID
+ }
+
+ subspesialis, err := dokter.GetSubspesialis()
+ if err != nil {
+ return
+ }
+
+ var listIdSubspesialis = make(map[string]int)
+ for _, kodeDokter := range subspesialis {
+ listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID
+ }
+
+ listDokter, err := dokter.GetDokter()
+ if err != nil {
+ return
+ }
+
+ var listIddokter = make(map[int]string)
+ for _, kodeDokter := range listDokter {
+ listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
+ }
+
+ var reqInsert *jadwal_dokter.JadwalDokterSatuData
+
+ for _, value := range spesialis {
+ tanggal := time.Now().Format("2006-01-02")
+ for i := 0; i < 7; i++ {
+ kdPoly := value.Kode
+ param := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggal
+ url += param
+ req := &jadwal_dokter.RequestJadwalDokter{
+ KodePoli: kdPoly,
+ Tanggal: tanggal,
+ }
+ reqJson, errMarshal := json.Marshal(req)
+ if errMarshal != nil {
+ log.Println(errMarshal)
+ return
+ }
+ logTimeStart := time.Now().Format("2006-01-02 15:04:05")
+ res, errResponse := JadwalDokterGetResponse(url, header, kdPoly, tanggal, headers)
+ if errResponse != nil {
+ log.Printf("Error making external API request: %v", err)
+ return
+ }
+
+ resJson, errMarshalRes := json.Marshal(res)
+ if errMarshalRes != nil {
+ log.Printf("Error making external API request: %v", err)
+ }
+
+ uuid := uuid.New().String()
+ logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
+ if res.MetaData.Code != 200 {
+ log.Println("Skip Proses")
+ reqLogApi := &logapi.DataLogAPI{
+ ID: uuid,
+ DateCreated: logTimeEnd,
+ Parameter: "BPJS-AntreanRS-JadwalDokter",
+ Header: headerString,
+ Method: "GET",
+ Url: url,
+ Request: reqJson,
+ Respon: resJson,
+ ResponCode: "500",
+ ResponTimeStart: logTimeStart,
+ ResponTimeEnd: logTimeEnd,
+ Comment: "Data Kosong",
+ }
+ errLog := log_api.InsertLogAPI(reqLogApi)
+ if errLog != nil {
+ log.Printf("Error making external API request: %v", err)
+ }
+ continue
+ }
+
+ reqLogApi := &logapi.DataLogAPI{
+ ID: uuid,
+ DateCreated: logTimeEnd,
+ Parameter: "BPJS-AntreanRS-JadwalDokter",
+ Header: headerString,
+ Method: "GET",
+ Url: url,
+ Request: reqJson,
+ Respon: resJson,
+ ResponCode: strconv.Itoa(res.MetaData.Code),
+ ResponTimeStart: logTimeStart,
+ ResponTimeEnd: logTimeEnd,
+ Comment: res.MetaData.Message,
+ }
+ errLog := log_api.InsertLogAPI(reqLogApi)
+ if errLog != nil {
+ log.Printf("Error making external API request: %v", err)
+ }
+ for _, v := range res.Response {
+ idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis)
+ idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis)
+ idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter)
+ reqInsert = &jadwal_dokter.JadwalDokterSatuData{
+ Hari: v.Hari,
+ NamaHari: v.NamaHari,
+ Waktu: v.Jadwal,
+ Dokter: idDokter,
+ Spesialis: idSpesialis,
+ SubSpesialis: idSubspesialis,
+ Status: 1, // When available always set to 1
+ }
+ if reqInsert.Dokter != "" {
+ errInsert := dokter.InsertJadwalDokter(reqInsert)
+ if errInsert != nil {
+ log.Println(errInsert)
+ return
+ }
+ } else {
+ reqInsert.Dokter = strconv.Itoa(v.KodeDokter)
+ errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert)
+ if errInsertTemp != nil {
+ log.Println(errInsertTemp)
+ return
+ }
+ }
+ }
+ date, errParse := time.Parse("2006-01-02", tanggal)
+ if errParse != nil {
+ return
+ }
+ tanggal = date.AddDate(0, 0, 1).Format("2006-01-02")
+ log.Println("Tanggal :", tanggal)
+ }
+ }
+}
+
+func GetDokterByDPJP(c *gin.Context) {
+ dpjp := c.Param("dpjp")
+ listHari, err := dokter.GetJadwalDokterByDPJP(dpjp)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusInternalServerError, &suratkontrol.MetadataString{
+ Code: "",
+ Message: err.Error(),
+ })
+ return
+ }
+
+ log.Println("listHari: ", listHari)
+
+ var IDDokter []string
+ var idSubspesialis int
+ for _, v := range listHari {
+ IDDokter = append(IDDokter, v.Dokter)
+ idSubspesialis = v.SubSpesialis
+ break
+ }
+
+ namaDokter, err := dokter.GetNamaLengkapDokter(IDDokter)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusInternalServerError, &suratkontrol.MetadataString{
+ Code: "",
+ Message: err.Error(),
+ })
+ return
+ }
+
+ listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+
+ var res *jadwal_dokter.ResponseListHari
+
+ for _, k := range namaDokter {
+ var jadwalDokter []jadwal_dokter.ListJadwalDokter
+ for _, key := range listHari {
+ jadwalDokter = append(jadwalDokter, jadwal_dokter.ListJadwalDokter{
+ NamaHari: key.NamaHari,
+ KodeHari: key.Hari,
+ Waktu: key.Waktu,
+ })
+ }
+ gelarDepan := utils.ReplaceGelar(k.GelarDepan)
+ gelarBelakang := utils.ReplaceGelar(k.GelarBelakang)
+ namaLengkap := gelarDepan + " " + k.NamaLengkap + " " + gelarBelakang
+ namaLengkap = strings.TrimPrefix(namaLengkap, " ")
+ namaLengkap = strings.TrimSuffix(namaLengkap, " ")
+ hfisCode := strings.TrimSpace(k.HFISCode)
+ res = &jadwal_dokter.ResponseListHari{
+ IDSpesialis: listSubspesialis.IDSpesialis,
+ Kode: listSubspesialis.Kode,
+ Spesialis: listSubspesialis.Spesialis,
+ Subspesialis: listSubspesialis.Subspesialis,
+ IDSubspesialis: listSubspesialis.ID,
+ NamaLengkap: namaLengkap,
+ HFISCode: hfisCode,
+ KodeDPJP: dpjp,
+ JadwalDokter: jadwalDokter,
+ IDDokter: k.ID,
+ }
+ }
+ log.Println("Response :", res)
+ c.JSON(http.StatusOK, res)
+}
+
+func GetSpesialisByDate(c *gin.Context) {
+ tanggal := c.Param("tanggal")
+ date, err := time.Parse("2006-01-02", tanggal)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+ hari := date.Local().Weekday().String()
+ hari = utils.ConvertDay(hari)
+ idSpesialis, err := dokter.GetJadwalDokterByDate(hari)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+ listSpesialis, err := dokter.GetSpesialisByID(idSpesialis)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+ c.JSON(http.StatusOK, listSpesialis)
+}
+
+func GetJadwalSubspesialisByDate(c *gin.Context) {
+ tanggal := c.Param("tanggal")
+ date, err := time.Parse("2006-01-02", tanggal)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+
+ log.Println("tanggal: ", tanggal)
+ hari := date.Local().Weekday().String()
+ hari = utils.ConvertDay(hari)
+ idsubspesialis, err := dokter.GetJadwalSubspesialisByDate(hari)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+ listSpesialis, err := dokter.GetSubspesialisByIDBatch(idsubspesialis)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+ c.JSON(http.StatusOK, listSpesialis)
+}
+
+func GetDokterBySpesialis(c *gin.Context) {
+ spesialis := c.Param("spesialis")
+ tanggal := c.Param("tanggal")
+ date, err := time.Parse("2006-01-02", tanggal)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+ hari := date.Local().Weekday().String()
+ hari = utils.ConvertDay(hari)
+ idDokter, err := dokter.GetJadwalDokterBySpesialis(hari, spesialis)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+ namaDokter, err := dokter.GetNamaLengkapDokter(idDokter)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+ var resDokter []dktr.ResponseDokter
+ idSpesialis, err := strconv.Atoi(spesialis)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+ for _, v := range namaDokter {
+ gelarDepan := utils.ReplaceGelar(v.GelarDepan)
+ gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
+ namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
+ namaLengkap = strings.TrimPrefix(namaLengkap, " ")
+ namaLengkap = strings.TrimSuffix(namaLengkap, " ")
+ resDokter = append(resDokter, dktr.ResponseDokter{
+ ID: v.ID,
+ NamaLengkap: namaLengkap,
+ Spesialis: idSpesialis,
+ HFISCode: v.HFISCode,
+ DPJPCode: v.DPJPCode,
+ })
+ }
+ log.Println("Response :", resDokter)
+ c.JSON(http.StatusOK, resDokter)
+}
+
+func GetDokterBySubspesialis(c *gin.Context) {
+ subspesialis := c.Param("subspesialis")
+ tanggal := c.Param("tanggal")
+ date, err := time.Parse("2006-01-02", tanggal)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+
+ log.Println("subspesialis: ", subspesialis)
+ log.Println("tanggal: ", tanggal)
+
+ hari := date.Local().Weekday().String()
+ hari = utils.ConvertDay(hari)
+ idDokter, err := dokter.GetJadwalDokterBySubpesialis(hari, subspesialis)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+ namaDokter, err := dokter.GetNamaLengkapDokter(idDokter)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+ var resDokter []dktr.ResponseDokterNew
+ idSubspesialis, err := strconv.Atoi(subspesialis)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+
+ listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis)
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+
+ for _, v := range namaDokter {
+ gelarDepan := utils.ReplaceGelar(v.GelarDepan)
+ gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
+ namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
+ namaLengkap = strings.TrimPrefix(namaLengkap, " ")
+ namaLengkap = strings.TrimSuffix(namaLengkap, " ")
+ resDokter = append(resDokter, dktr.ResponseDokterNew{
+ ID: v.ID,
+ NamaLengkap: namaLengkap,
+ Subspesialis: idSubspesialis,
+ HFISCode: v.HFISCode,
+ KodePoli: listSubspesialis.Kode,
+ DPJPCode: v.DPJPCode,
+ })
+ }
+ log.Println("Response :", resDokter)
+ c.JSON(http.StatusOK, resDokter)
+}
+
+func GetJadwalDokterApi(c *gin.Context) {
+ baseUrl := os.Getenv("BASEURL_BPJS")
+ endpoint := os.Getenv("ANTREAN_RS")
+ url := baseUrl + endpoint
+
+ var req *jadwal_dokter.RequestJadwalDokter
+
+ err := c.Bind(&req)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusInternalServerError, &jadwal_dokter.Metadata{
+ Code: 0,
+ Message: err.Error(),
+ })
+ 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,
+ }
+ log.Println("Headers : ", headers)
+
+ param := "/jadwaldokter/kodepoli/" + req.KodePoli + "/tanggal/" + req.Tanggal
+ url += param
+ res, err := JadwalDokterGetResponse(url, header, req.KodePoli, req.Tanggal, headers)
+ if err != nil {
+ log.Printf("Error making external API request: %v", err)
+ c.JSON(http.StatusInternalServerError, &jadwal_dokter.Metadata{
+ Code: 0,
+ Message: err.Error(),
+ })
+ return
+ }
+
+ c.JSON(http.StatusOK, res)
+}
+
+func GetAllJadwalDokter(c *gin.Context) {
+ baseUrl := os.Getenv("BASEURL_BPJS")
+ endpoint := os.Getenv("ANTREAN_RS")
+ url := baseUrl + endpoint
+
+ 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,
+ }
+ log.Println("Headers : ", headers)
+
+ // errTruncate := dokter.DeleteJadwalDokter()
+ // if errTruncate != nil {
+ // log.Println(errTruncate)
+ // c.JSON(http.StatusInternalServerError, errTruncate)
+ // }
+
+ // errTruncateTemp := dokter.DeleteJadwalDokterTemp()
+ // if errTruncateTemp != nil {
+ // log.Println(errTruncateTemp)
+ // c.JSON(http.StatusInternalServerError, errTruncateTemp)
+ // }
+
+ // Select from daftar spesialis
+ spesialis, err := dokter.GetSpesialis()
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+
+ var listIdSpesialis = make(map[string]int)
+ for _, kodeDokter := range spesialis {
+ listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID
+ }
+
+ subspesialis, err := dokter.GetSubspesialis()
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+
+ var listIdSubspesialis = make(map[string]int)
+ for _, kodeDokter := range subspesialis {
+ listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID
+ }
+
+ listDokter, err := dokter.GetDokter()
+ if err != nil {
+ c.JSON(http.StatusInternalServerError, err)
+ }
+
+ var listIddokter = make(map[int]string)
+ for _, kodeDokter := range listDokter {
+ listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
+ }
+
+ var reqInsert *jadwal_dokter.JadwalDokterSatuData
+ var res *[]jadwal_dokter.ListDokter
+
+ for _, value := range spesialis {
+ // tanggal := time.Now().Format("2006-01-02")
+ tanggal := "2025-01-08"
+ // for i := 0; i < 7; i++ {
+ kdPoly := value.Kode
+ res, err = JadwalDokterGetResponseApi(url, header, kdPoly, tanggal, headers)
+ if err != nil {
+ log.Println("Error making external API request: %v", err)
+ c.JSON(http.StatusInternalServerError, err)
+ }
+ // date, errParse := time.Parse("2006-01-02", tanggal)
+ // if errParse != nil {
+ // c.JSON(http.StatusInternalServerError, errParse)
+ // return
+ // }
+ // tanggal = date.AddDate(0, 0, 1).Format("2006-01-02")
+ log.Println("Tanggal :", tanggal)
+ if res == nil {
+ log.Println("Skip Proses")
+ continue
+ }
+ for _, v := range *res {
+ idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis)
+ idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis)
+ idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter)
+ reqInsert = &jadwal_dokter.JadwalDokterSatuData{
+ Hari: v.Hari,
+ NamaHari: v.NamaHari,
+ Waktu: v.Jadwal,
+ Dokter: idDokter,
+ Spesialis: idSpesialis,
+ SubSpesialis: idSubspesialis,
+ Status: 1, // When available always set to 1
+ }
+ if reqInsert.Dokter != "" {
+ errInsert := dokter.InsertJadwalDokter(reqInsert)
+ if errInsert != nil {
+ log.Println(errInsert)
+ c.JSON(http.StatusInternalServerError, errInsert)
+ }
+ } else {
+ reqInsert.Dokter = strconv.Itoa(v.KodeDokter)
+ errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert)
+ if errInsertTemp != nil {
+ log.Println(errInsertTemp)
+ c.JSON(http.StatusInternalServerError, errInsertTemp)
+ }
+ }
+ }
+ // }
+ }
+ c.JSON(http.StatusOK, res)
+}
+
+func GetJadwalDokterNew() {
+
+}
+
+func GetDataJadwalDokter() {
+ baseUrl := os.Getenv("BASEURL_BPJS")
+ endpoint := os.Getenv("ANTREAN_RS")
+
+ url := baseUrl + endpoint
+ log.Println("url", url)
+ conf := config.ConfigBpjs{}
+
+ spesialis, err := dokter.GetSpesialis()
+ if err != nil {
+ return
+ }
+
+ var listIdSpesialis = make(map[string]int)
+ for _, kodeDokter := range spesialis {
+ listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID
+ }
+
+ subspesialis, err := dokter.GetSubspesialis()
+ if err != nil {
+ return
+ }
+
+ var listIdSubspesialis = make(map[string]int)
+ for _, kodeDokter := range subspesialis {
+ listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID
+ }
+
+ listDokter, err := dokter.GetDokter()
+ if err != nil {
+ return
+ }
+
+ var listIddokter = make(map[int]string)
+ for _, kodeDokter := range listDokter {
+ listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
+ }
+ db := cfg.SatuDataDB
+ errTx := db.Transaction(func(tx *gorm.DB) error {
+ for _, value := range spesialis {
+ url := baseUrl + endpoint + "/jadwaldokter/kodepoli/" + value.Kode
+
+ 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,
+ }
+
+ 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(), "; ")
+
+ startDate := time.Now()
+ endDate := startDate.AddDate(0, 1, 0)
+ logTimeStart := time.Now().Format("2006-01-02 15:04:05")
+ var res *jadwal_dokter.JadwalDokter
+ var reqLog []*jadwal_dokter.RequestJadwalDokter
+ var resLog []*jadwal_dokter.JadwalDokter
+
+ errTruncate := dokter.TruncateDataJadwalDokter()
+ if errTruncate != nil {
+ log.Println(errTruncate)
+ return errTruncate
+ }
+ for current := startDate; current.Before(endDate); current = current.AddDate(0, 0, 1) {
+ tanggal := current.Format("2006-01-02")
+ log.Println("Tanggal :", tanggal)
+ urlReq := url + "/tanggal/" + tanggal
+
+ res, err = JadwalDokterGetResponse(urlReq, header, value.Kode, tanggal, headers)
+ if err != nil {
+ log.Printf("Error making external API request: %v", err)
+ return errTruncate
+ }
+
+ reqLog = append(reqLog, &jadwal_dokter.RequestJadwalDokter{
+ KodePoli: value.Kode,
+ Tanggal: tanggal,
+ })
+
+ resLog = append(resLog, &jadwal_dokter.JadwalDokter{
+ Response: res.Response,
+ MetaData: res.MetaData,
+ })
+
+ if res.MetaData.Code != 200 {
+ resLog = append(resLog, &jadwal_dokter.JadwalDokter{
+ Response: res.Response,
+ MetaData: res.MetaData,
+ })
+ continue
+ }
+
+ for _, v := range res.Response {
+ idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis)
+ idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis)
+ idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter)
+ reqInsert := &jadwal_dokter.DataJadwalDokterSatuData{
+ ID: uuid.NewString(),
+ DateCreated: logTimeStart,
+ Hari: strconv.Itoa(v.Hari),
+ NamaHari: v.NamaHari,
+ Waktu: v.Jadwal,
+ Dokter: idDokter,
+ Spesialis: idSpesialis,
+ SubSpesialis: idSubspesialis,
+ TanggalJadwal: tanggal,
+ }
+ if reqInsert.Dokter != "" {
+ errInsert := dokter.InsertDataJadwalDokter(reqInsert)
+ if errInsert != nil {
+ log.Println(errInsert)
+ return errInsert
+ }
+ } else {
+ log.Println("Dokter tidak punya HFIS")
+ continue
+ }
+ }
+ }
+
+ reqLogJson, errMarshal := json.Marshal(reqLog)
+ if errMarshal != nil {
+ log.Println(errMarshal)
+ return errMarshal
+ }
+ resLogJson, errMarshal2 := json.Marshal(resLog)
+ if errMarshal2 != nil {
+ log.Println(errMarshal2)
+ return errMarshal2
+ }
+ logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
+ reqLogApi := &logapi.DataLogAPI{
+ ID: uuid.NewString(),
+ DateCreated: logTimeEnd,
+ Parameter: "BPJS-AntreanRS-JadwalDokter",
+ Header: headerString,
+ Method: "GET",
+ Url: url,
+ Request: reqLogJson,
+ Respon: resLogJson,
+ ResponCode: strconv.Itoa(res.MetaData.Code),
+ ResponTimeStart: logTimeStart,
+ ResponTimeEnd: logTimeEnd,
+ Comment: res.MetaData.Message,
+ }
+ errLog := log_api.InsertLogAPI(reqLogApi)
+ if errLog != nil {
+ log.Printf("Error making external API request: %v", err)
+ return errLog
+ }
+ }
+ return nil
+ })
+ if errTx != nil {
+ log.Println(errTx)
+ return
+ }
+ return
+}
+
+func GetDetailJadwalDokter(c *gin.Context) {
+ var req *jadwal_dokter.RequestDataJadwalDokter
+
+ errBind := c.Bind(&req)
+ if errBind != nil {
+ log.Println(errBind)
+ c.JSON(http.StatusInternalServerError, gin.H{"error": errBind})
+ return
+ }
+ query := ``
+ var conditions []string
+ var args []interface{}
+ if req.NamaHari != "" {
+ conditions = append(conditions, `"Nama_hari" = ? `)
+ args = append(args, req.NamaHari)
+ }
+ if req.Subspesialis != 0 {
+ conditions = append(conditions, `"Sub_spesialis" = ? `)
+ args = append(args, req.Subspesialis)
+ }
+ if len(conditions) > 0 {
+ query += " WHERE " + strings.Join(conditions, " AND ")
+ }
+ dataDokter, err := dokter.GetAllJadwalDokter(query, args)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusInternalServerError, gin.H{"error": err})
+ return
+ }
+ var res []*jadwal_dokter.ResponseDetailJadwalDokter
+ for _, v := range dataDokter {
+ gelarDepan := utils.ReplaceGelar(v.GelarDepan)
+ gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
+ namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
+ namaLengkap = strings.TrimPrefix(namaLengkap, " ")
+ namaLengkap = strings.TrimSuffix(namaLengkap, " ")
+ res = append(res, &jadwal_dokter.ResponseDetailJadwalDokter{
+ ValueHari: v.ValueHari,
+ NamaHari: v.NamaHari,
+ Waktu: v.Waktu,
+ Spesialis: v.Spesialis,
+ Subspesialis: v.Subspesialis,
+ NamaLengkap: namaLengkap,
+ })
+ }
+ c.JSON(http.StatusOK, res)
+}
diff --git a/handlers/bpjs/jadwal_dokter/response.go b/handlers/bpjs/jadwal_dokter/response.go
index 2bc311d..9cda110 100644
--- a/handlers/bpjs/jadwal_dokter/response.go
+++ b/handlers/bpjs/jadwal_dokter/response.go
@@ -11,7 +11,69 @@ import (
"net/http"
)
-func JadwalDokterGetResponse(url string, header *config.Header, kdPoly string, tanggal string, headers map[string]string) (*[]jadwal_dokter.ListDokter, error) {
+func JadwalDokterGetResponse(url string, header *config.Header, kdPoly string, tanggal string, headers map[string]string) (*jadwal_dokter.JadwalDokter, error) {
+ log.Println("URL", url)
+ req, err := http.NewRequest("GET", url, nil)
+ if err != nil {
+ log.Printf("Error creating request: %v", err)
+ }
+
+ for key, value := range headers {
+ req.Header.Set(key, value)
+ }
+
+ log.Println("REQ", req.Header)
+ client := http.Client{}
+ response, err := client.Do(req)
+ if err != nil {
+ log.Printf("Error making external API request: %v", err)
+ }
+ log.Println("RESPONSE: ", response)
+
+ key := header.ConsID + header.SecretKey + header.TimeStamp
+ res, err := io.ReadAll(response.Body)
+ if err != nil {
+ fmt.Println(err)
+ }
+
+ var jadwalDokterRaw jadwal_dokter.JadwalDokterRaw
+ err = json.Unmarshal([]byte(res), &jadwalDokterRaw)
+ if err != nil {
+ log.Printf("Error Unmarshaling: %v", err)
+ }
+
+ responses := &jadwal_dokter.JadwalDokter{}
+ if jadwalDokterRaw.MetaData.Code != 200 {
+ responses.MetaData.Code = jadwalDokterRaw.MetaData.Code
+ responses.MetaData.Message = jadwalDokterRaw.MetaData.Message
+ log.Println("No Data Found")
+ return responses, nil
+ }
+
+ dataResp, err := docs.StringDecrypt(key, jadwalDokterRaw.Response)
+ if err != nil {
+ log.Printf("Error Decrypt: %v", err)
+ }
+
+ var listDokter []*jadwal_dokter.ListDokter
+
+ log.Println("dataresp: ", dataResp)
+
+ err = json.Unmarshal([]byte(dataResp), &listDokter)
+ if err != nil {
+ log.Printf("Error Decode: %v", err)
+ }
+
+ log.Println("res: ", &listDokter)
+ responses = &jadwal_dokter.JadwalDokter{
+ Response: listDokter,
+ MetaData: jadwalDokterRaw.MetaData,
+ }
+
+ return responses, nil
+}
+
+func JadwalDokterGetResponseApi(url string, header *config.Header, kdPoly string, tanggal string, headers map[string]string) (*[]jadwal_dokter.ListDokter, error) {
param := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggal
url += param
log.Println("URL", url)
diff --git a/handlers/bpjs/surat_kontrol/response.go b/handlers/bpjs/surat_kontrol/response.go
index de04e59..1d42f2a 100644
--- a/handlers/bpjs/surat_kontrol/response.go
+++ b/handlers/bpjs/surat_kontrol/response.go
@@ -21,6 +21,7 @@ func PostData(url string, header *config.Header, headers map[string]string, requ
reqMarshall, err := json.Marshal(request)
if err != nil {
log.Printf("Error json marshal: %v", err)
+ return nil, err
}
log.Println("REQUEST: ", string(reqMarshall))
@@ -84,7 +85,11 @@ func PostData(url string, header *config.Header, headers map[string]string, requ
if resSuratKontrolRaw.MetaData.Code != "200" {
errMsg := errors.New(resSuratKontrolRaw.MetaData.Message)
- if strings.Contains(strings.ToLower(resSuratKontrolRaw.MetaData.Message), "Gagal simpan!") {
+ if resSuratKontrolRaw.MetaData.Message == "Gagal simpan! Nomor SEP Sudah pernah digunakan!." {
+ message := "Gagal simpan! Nomor SEP pernah diterbitkan Surat Kontrol!."
+ resSuratKontrolRaw.MetaData.Message = message
+ log.Println("masuk sini kan")
+ } else 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
}
@@ -186,11 +191,15 @@ 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") {
+ if resSuratKontrolRaw.MetaData.Message == "Gagal simpan! Nomor SEP Sudah pernah digunakan!." {
+ message := "Gagal simpan! Nomor SEP pernah diterbitkan Surat Kontrol!."
+ resSuratKontrolRaw.MetaData.Message = message
+ log.Println("masuk sini kan")
+ } else 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)
+ log.Printf("error : %v", resSuratKontrolRaw.MetaData.Message)
responses.MetaData.Code = resSuratKontrolRaw.MetaData.Code
responses.MetaData.Message = resSuratKontrolRaw.MetaData.Message
log.Println("responses: ", responses)
diff --git a/handlers/bpjs/surat_kontrol/surat_kontrol.go b/handlers/bpjs/surat_kontrol/surat_kontrol.go
index 3c796ca..f4f8681 100644
--- a/handlers/bpjs/surat_kontrol/surat_kontrol.go
+++ b/handlers/bpjs/surat_kontrol/surat_kontrol.go
@@ -2,7 +2,9 @@ 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"
@@ -22,7 +24,7 @@ import (
func InsertSuratKontrol(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
- endpoint := os.Getenv("SURAT_KONTROL_RS")
+ endpoint := os.Getenv("VCLAIM_RS")
param := os.Getenv("INSERT_SURAT_KONTROL")
url := baseUrl + endpoint + param
@@ -33,9 +35,32 @@ func InsertSuratKontrol(c *gin.Context) {
err := c.Bind(&req)
if err != nil {
log.Println(err)
- c.JSON(http.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ 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
}
@@ -43,9 +68,11 @@ func InsertSuratKontrol(c *gin.Context) {
reqJson, err := json.Marshal(req)
if err != nil {
log.Println(err)
- c.JSON(http.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ },
})
return
}
@@ -54,7 +81,7 @@ func InsertSuratKontrol(c *gin.Context) {
conf := config.ConfigBpjs{}
- header := cfg.SetHeader(conf)
+ header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
@@ -74,21 +101,42 @@ func InsertSuratKontrol(c *gin.Context) {
kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar)
if err != nil {
log.Println(err)
- c.JSON(http.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ 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.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ },
})
return
}
@@ -98,9 +146,11 @@ func InsertSuratKontrol(c *gin.Context) {
noUrut, err = utils.GetNoUrut(dataSurkon)
if err != nil {
log.Println(err)
- c.JSON(http.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ },
})
return
}
@@ -114,7 +164,7 @@ func InsertSuratKontrol(c *gin.Context) {
TglRencanaKontrol: req.TglRencanaKontrol,
NomorSurKon: noSurKon,
KunjunganPasien: kunjunganPasien.ID,
- RuanganSurKon: kunjunganPasien.Ruangan,
+ RuanganSurKon: idRuangan,
DPJPSurKon: req.IDDokter,
StatusSurKon: 1, // First Insert status always set to 1
UserCreatedSurKon: req.User,
@@ -123,9 +173,11 @@ func InsertSuratKontrol(c *gin.Context) {
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
- c.JSON(http.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ },
})
return
}
@@ -133,15 +185,19 @@ func InsertSuratKontrol(c *gin.Context) {
err = suratkontrol.UpdateKunjunganPasien(req)
if err != nil {
log.Println(err)
- c.JSON(http.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ },
})
return
}
- c.JSON(http.StatusOK, &sk.MetadataString{
- Code: "200",
- Message: "Berhasil Insert Surat Kontrol",
+ c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "200",
+ Message: "Berhasil Insert Surat Kontrol",
+ },
})
return
}
@@ -161,9 +217,11 @@ func InsertSuratKontrol(c *gin.Context) {
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
- c.JSON(http.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ },
})
return
}
@@ -173,7 +231,7 @@ func InsertSuratKontrol(c *gin.Context) {
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
- Parameter: "",
+ Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "POST",
Url: url,
@@ -188,23 +246,29 @@ func InsertSuratKontrol(c *gin.Context) {
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
- c.JSON(http.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ },
})
return
}
log.Println(err)
- c.JSON(http.StatusInternalServerError, res.MetaData)
+ c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{
+ MetaData: res.MetaData,
+ })
return
}
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
- c.JSON(http.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ },
})
return
}
@@ -216,7 +280,7 @@ func InsertSuratKontrol(c *gin.Context) {
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NomorSurKon: res.Response.NoSuratKontrol,
KunjunganPasien: kunjunganPasien.ID,
- RuanganSurKon: kunjunganPasien.Ruangan,
+ RuanganSurKon: idRuangan,
DPJPSurKon: req.IDDokter,
StatusSurKon: 1, // First Insert status always set to 1
UserCreatedSurKon: req.User,
@@ -226,9 +290,11 @@ func InsertSuratKontrol(c *gin.Context) {
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
- c.JSON(http.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ },
})
return
}
@@ -242,9 +308,11 @@ func InsertSuratKontrol(c *gin.Context) {
err = suratkontrol.UpdateKunjunganPasien(req)
if err != nil {
log.Println(err)
- c.JSON(http.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ },
})
return
}
@@ -254,7 +322,7 @@ func InsertSuratKontrol(c *gin.Context) {
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
- Parameter: "",
+ Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "POST",
Url: url,
@@ -269,9 +337,11 @@ func InsertSuratKontrol(c *gin.Context) {
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
- c.JSON(http.StatusInternalServerError, &sk.MetadataString{
- Code: "",
- Message: err.Error(),
+ c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ },
})
return
}
@@ -292,13 +362,12 @@ func InsertSuratKontrol(c *gin.Context) {
}
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")
+ endpoint := os.Getenv("VCLAIM_RS")
param := os.Getenv("UPDATE_SURAT_KONTROL")
url := baseUrl + endpoint + param
@@ -314,6 +383,23 @@ func UpdateSuratKontrol(c *gin.Context) {
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)
@@ -350,25 +436,12 @@ func UpdateSuratKontrol(c *gin.Context) {
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: noSurKon, //TODO How to get Nomor SurKon
+ NomorSurKon: dataSurkon, //TODO How to get Nomor SurKon
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: kunjunganPasien.Ruangan,
DPJPSurKon: req.IDDokter,
@@ -377,9 +450,10 @@ func UpdateSuratKontrol(c *gin.Context) {
UserUpdatedSurKon: req.User,
}
reqUpdate := &sk.DataSuratKontrol{
- DateUpdated: timeNow,
- ID: req.IDSurKon,
- StatusSurKon: 2,
+ DateUpdated: timeNow,
+ ID: req.IDSurKon,
+ StatusSurKon: 2,
+ UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
@@ -411,7 +485,7 @@ func UpdateSuratKontrol(c *gin.Context) {
conf := config.ConfigBpjs{}
- header := cfg.SetHeader(conf)
+ header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
@@ -462,7 +536,7 @@ func UpdateSuratKontrol(c *gin.Context) {
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
- Parameter: "",
+ Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "PUT",
Url: url,
@@ -499,9 +573,10 @@ func UpdateSuratKontrol(c *gin.Context) {
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqUpdate := &sk.DataSuratKontrol{
- DateUpdated: timeNow,
- ID: req.IDSurKon,
- StatusSurKon: 2,
+ DateUpdated: timeNow,
+ ID: req.IDSurKon,
+ StatusSurKon: 2,
+ UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
@@ -546,7 +621,7 @@ func UpdateSuratKontrol(c *gin.Context) {
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
- Parameter: "",
+ Parameter: "BPJS-VClaim-RencanaKontrol",
Header: headerString,
Method: "PUT",
Url: url,
@@ -573,7 +648,7 @@ func UpdateSuratKontrol(c *gin.Context) {
func DeleteSuratKontrol(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
- endpoint := os.Getenv("SURAT_KONTROL_RS")
+ endpoint := os.Getenv("VCLAIM_RS")
param := os.Getenv("DELETE_SURAT_KONTROL")
url := baseUrl + endpoint + param
@@ -588,6 +663,15 @@ func DeleteSuratKontrol(c *gin.Context) {
})
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)
@@ -620,7 +704,7 @@ func DeleteSuratKontrol(c *gin.Context) {
conf := config.ConfigBpjs{}
- header := cfg.SetHeader(conf)
+ header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
@@ -631,6 +715,12 @@ func DeleteSuratKontrol(c *gin.Context) {
}
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{
@@ -640,12 +730,91 @@ func DeleteSuratKontrol(c *gin.Context) {
},
}
+ 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,
@@ -668,14 +837,14 @@ func DeleteSuratKontrol(c *gin.Context) {
func GetNomorSuratKontrol(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
- endpoint := os.Getenv("SURAT_KONTROL_RS")
+ endpoint := os.Getenv("VCLAIM_RS")
param := os.Getenv("GET_NOMOR_SURAT_KONTROL")
noSurat := c.Param("noSuratKontrol")
url := baseUrl + endpoint + param + noSurat
conf := config.ConfigBpjs{}
- header := cfg.SetHeader(conf)
+ header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
@@ -698,14 +867,14 @@ func GetNomorSuratKontrol(c *gin.Context) {
func GetSuratKontrolBySEP(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
- endpoint := os.Getenv("SURAT_KONTROL_RS")
+ endpoint := os.Getenv("VCLAIM_RS")
param := os.Getenv("GET_SURAT_KONTROL_SEP")
noSEP := c.Param("noSEP")
url := baseUrl + endpoint + param + noSEP
conf := config.ConfigBpjs{}
- header := cfg.SetHeader(conf)
+ header := cfg.SetHeader(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
@@ -719,7 +888,7 @@ func GetSuratKontrolBySEP(c *gin.Context) {
res, err := ResponseGetSuratKontrolBySEP(url, header, headers)
if err != nil {
log.Printf("Error making external API request: %v", err)
- c.JSON(http.StatusInternalServerError, err)
+ c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
@@ -727,9 +896,7 @@ func GetSuratKontrolBySEP(c *gin.Context) {
}
func GetDataSurKon(c *gin.Context) {
- offset := c.Param("offset")
- limit := c.Param("limit")
- data, err := suratkontrol.GetDataSuratKontrol(offset, limit)
+ data, err := suratkontrol.GetDataSuratKontrol()
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
@@ -818,6 +985,7 @@ func GetDataSurKonByID(c *gin.Context) {
KodeDiagnosa: data.KodeDiagnosa,
NamaDiagnosa: data.NamaDiagnosa,
TipeSurKon: data.TipeSurKon,
+ User: data.User,
}
c.JSON(http.StatusOK, resSurKon)
}
@@ -883,7 +1051,7 @@ func CariPasienTPP(c *gin.Context) {
var count int
if req.NoRM != "" {
query += `and dkp2."NOMR" = ?`
- argsCount = append(argsCount, req.NoRM, req.TipeSurKon, req.TanggalAwal, req.TanggalAkhir)
+ argsCount = append(argsCount, req.TipeSurKon, req.NoRM, req.TanggalAwal, req.TanggalAkhir)
count, err = suratkontrol.CountDataSurKon(req, query, argsCount)
if err != nil {
log.Println(err)
@@ -893,7 +1061,7 @@ func CariPasienTPP(c *gin.Context) {
})
return
}
- args = append(args, req.NoRM, req.TipeSurKon, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit)
+ 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)
@@ -905,7 +1073,7 @@ func CariPasienTPP(c *gin.Context) {
}
} else if req.NoSEP != "" {
query += `and dkp2."Nomor_sep" = ?`
- argsCount = append(argsCount, req.NoSEP, req.TipeSurKon, req.TanggalAwal, req.TanggalAkhir)
+ argsCount = append(argsCount, req.TipeSurKon, req.NoSEP, req.TanggalAwal, req.TanggalAkhir)
count, err = suratkontrol.CountDataSurKon(req, query, argsCount)
if err != nil {
log.Println(err)
@@ -915,7 +1083,7 @@ func CariPasienTPP(c *gin.Context) {
})
return
}
- args = append(args, req.NoSEP, req.TipeSurKon, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit)
+ 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)
@@ -927,7 +1095,7 @@ func CariPasienTPP(c *gin.Context) {
}
} else if req.PoliKlinik != "" {
query += `and ds."id" = ?`
- argsCount = append(argsCount, req.PoliKlinik, req.TipeSurKon, req.TanggalAwal, req.TanggalAkhir)
+ argsCount = append(argsCount, req.TipeSurKon, req.PoliKlinik, req.TanggalAwal, req.TanggalAkhir)
count, err = suratkontrol.CountDataSurKon(req, query, argsCount)
if err != nil {
log.Println(err)
@@ -937,7 +1105,7 @@ func CariPasienTPP(c *gin.Context) {
})
return
}
- args = append(args, req.PoliKlinik, req.TipeSurKon, req.TanggalAwal, req.TanggalAkhir, req.Offset, req.Limit)
+ 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)
@@ -1009,4 +1177,267 @@ func CariPasienTPP(c *gin.Context) {
ListDataSuratKontrol: listData,
}
c.JSON(http.StatusOK, resSurKon)
-}
\ No newline at end of file
+}
+
+func CariPasienTPPNew(c *gin.Context) {
+ var req sk.RequestCariPasien
+
+ err := c.ShouldBindJSON(&req)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusPreconditionFailed, &sk.MetadataString{
+ Code: "203",
+ 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.StatusOK, &sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ })
+ return
+ }
+ args = append(args, req.TipeSurKon, req.NoRM, req.TanggalAwal, req.TanggalAkhir)
+ data, err = suratkontrol.SearchDataSurKonNew(req, query, args)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusOK, &sk.MetadataString{
+ Code: "203",
+ 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.StatusOK, &sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ })
+ return
+ }
+ args = append(args, req.TipeSurKon, req.NoSEP, req.TanggalAwal, req.TanggalAkhir)
+ data, err = suratkontrol.SearchDataSurKonNew(req, query, args)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusOK, &sk.MetadataString{
+ Code: "203",
+ 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.StatusOK, &sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ })
+ return
+ }
+ args = append(args, req.TipeSurKon, req.PoliKlinik, req.TanggalAwal, req.TanggalAkhir)
+ data, err = suratkontrol.SearchDataSurKonNew(req, query, args)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusOK, &sk.MetadataString{
+ Code: "203",
+ 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.StatusOK, &sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ })
+ return
+ }
+ args = append(args, req.TipeSurKon, req.TanggalAwal, req.TanggalAkhir)
+ data, err = suratkontrol.SearchDataSurKonNew(req, query, args)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusOK, &sk.MetadataString{
+ Code: "203",
+ 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)
+}
+
+func UpdateSuratKontrolSchedule() error {
+ baseUrl := os.Getenv("BASEURL_BPJS")
+ endpoint := os.Getenv("VCLAIM_RS")
+ param := os.Getenv("GET_NOMOR_SURAT_KONTROL")
+ dateNow := time.Now().Format("2006-01-02")
+ timeNow := time.Now().Format("2006-01-02 15:04:05")
+ dataNoSurKon, err := suratkontrol.GetAllNomorSurKon(dateNow)
+ if err != nil {
+ log.Println(err)
+ return err
+ }
+
+ for _, v := range dataNoSurKon {
+ url := baseUrl + endpoint + param + v.NomorSuratKontrol
+
+ 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 {
+ if res.MetaData.Message == "No.Rencana Kontrol tidak ada atau sudah terpakai!" {
+ reqUpdate := &sk.DataSuratKontrol{
+ DateUpdated: timeNow,
+ ID: v.ID,
+ StatusSurKon: 0,
+ UserUpdatedSurKon: "ADMIN IT",
+ }
+
+ err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
+ if err != nil {
+ log.Println(err)
+ continue
+ }
+ log.Println("Berhasil update nomor SurKon :", v.NomorSuratKontrol)
+ continue
+ }
+ log.Printf("Error making external API request: %v", err)
+ continue
+ }
+ log.Println("TIdak ada perubahan data untuk nomor SurKon :", v.NomorSuratKontrol)
+ continue
+ }
+
+ return nil
+}
+
+func GetDataLogAPI(c *gin.Context) {
+ var req logapi.ReqGetDataLogAPI
+
+ 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
+ }
+
+ dataLog, err := log_api.GetLogAPI(req)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{
+ MetaData: sk.MetadataString{
+ Code: "203",
+ Message: err.Error(),
+ },
+ })
+ return
+ }
+ var responDataLog []*logapi.DataLogAPI
+ for _, v := range dataLog {
+ jsonReq, _ := json.Marshal(v.Request)
+ jsonRes, _ := json.Marshal(v.Respon)
+ stringJsonReq := string(jsonReq)
+ stringJsonRes := string(jsonRes)
+ parsedTime, _ := time.Parse(time.RFC3339, v.DateCreated)
+ newTanggal := parsedTime.Format("2006-01-02 15:04:05")
+ responDataLog = append(responDataLog, &logapi.DataLogAPI{
+ ID: v.ID,
+ DateCreated: newTanggal,
+ UserAgent: v.UserAgent,
+ IP: v.IP,
+ Parameter: v.Parameter,
+ Header: v.Header,
+ Method: v.Method,
+ Url: v.Url,
+ Request: v.Request,
+ Respon: v.Respon,
+ ResponCode: v.ResponCode,
+ ResponTimeStart: v.ResponTimeStart,
+ ResponTimeEnd: v.ResponTimeEnd,
+ Comment: v.Comment,
+ RequestString: stringJsonReq,
+ ResponString: stringJsonRes,
+ })
+ }
+
+ c.JSON(http.StatusOK, responDataLog)
+}
diff --git a/handlers/bpjs/vClaim/Response.go b/handlers/bpjs/vClaim/Response.go
deleted file mode 100644
index 9737ad3..0000000
--- a/handlers/bpjs/vClaim/Response.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package Vclaim
-
-import (
- "crypto/aes"
- "crypto/cipher"
- "crypto/sha256"
- "encoding/base64"
- "errors"
- "bridging-rssa/docs"
-
- lzstring "github.com/daku10/go-lz-string"
-)
-
-func ResponseVclaim(encrypted string, key string) (string, error) {
-
- cipherText, err := base64.StdEncoding.DecodeString(encrypted)
- if err != nil {
- return "", err
- }
-
- hash := sha256.Sum256([]byte(key))
-
- block, err := aes.NewCipher(hash[:])
- if err != nil {
- return "", err
- }
-
- if len(cipherText) < aes.BlockSize {
- return "", errors.New("cipherText too short")
- }
-
- iv := hash[:aes.BlockSize]
-
- if len(cipherText)%aes.BlockSize != 0 {
- return "", errors.New("cipherText is not a multiple of the block size")
- }
-
- mode := cipher.NewCBCDecrypter(block, iv)
- mode.CryptBlocks(cipherText, cipherText)
-
- // cipherText, _ = pkcs7.Unpad(cipherText, aes.BlockSize)
- cipherText = docs.RemovePKCS7Padding(cipherText)
- data, err := lzstring.DecompressFromEncodedURIComponent(string(cipherText))
- // data, err := helper.DecompressFromEncodedUriComponent(string(cipherText))
- if err != nil {
- return "", err
- }
-
- return data, nil
-}
diff --git a/handlers/bpjs/vClaim/Config.go b/handlers/bpjs/v_claim/Config.go
similarity index 93%
rename from handlers/bpjs/vClaim/Config.go
rename to handlers/bpjs/v_claim/Config.go
index 8958651..2e0058e 100644
--- a/handlers/bpjs/vClaim/Config.go
+++ b/handlers/bpjs/v_claim/Config.go
@@ -1,4 +1,4 @@
-package Vclaim
+package vclaim
import (
"crypto/hmac"
diff --git a/handlers/bpjs/v_claim/Response.go b/handlers/bpjs/v_claim/Response.go
new file mode 100644
index 0000000..b9443e9
--- /dev/null
+++ b/handlers/bpjs/v_claim/Response.go
@@ -0,0 +1,127 @@
+package vclaim
+
+import (
+ "bridging-rssa/docs"
+ "bridging-rssa/models/config"
+ "crypto/aes"
+ "crypto/cipher"
+ "crypto/sha256"
+ "encoding/base64"
+ "encoding/json"
+ "errors"
+ "io"
+ "log"
+ "net/http"
+
+ vclaim "bridging-rssa/models/bpjs/v_claim"
+
+ lzstring "github.com/daku10/go-lz-string"
+)
+
+func ResponseVclaim(encrypted string, key string) (string, error) {
+
+ cipherText, err := base64.StdEncoding.DecodeString(encrypted)
+ if err != nil {
+ return "", err
+ }
+
+ hash := sha256.Sum256([]byte(key))
+
+ block, err := aes.NewCipher(hash[:])
+ if err != nil {
+ return "", err
+ }
+
+ if len(cipherText) < aes.BlockSize {
+ return "", errors.New("cipherText too short")
+ }
+
+ iv := hash[:aes.BlockSize]
+
+ if len(cipherText)%aes.BlockSize != 0 {
+ return "", errors.New("cipherText is not a multiple of the block size")
+ }
+
+ mode := cipher.NewCBCDecrypter(block, iv)
+ mode.CryptBlocks(cipherText, cipherText)
+
+ // cipherText, _ = pkcs7.Unpad(cipherText, aes.BlockSize)
+ cipherText = docs.RemovePKCS7Padding(cipherText)
+ data, err := lzstring.DecompressFromEncodedURIComponent(string(cipherText))
+ // data, err := helper.DecompressFromEncodedUriComponent(string(cipherText))
+ if err != nil {
+ return "", err
+ }
+
+ return data, nil
+}
+
+func ResponseGetReferensiDokter(url string, header *config.Header, headers map[string]string) (*vclaim.ResponseGetReferensiDokter, error) {
+ log.Println("URL", url)
+
+ req, err := http.NewRequest("GET", url, nil)
+ 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{}
+ response, err := client.Do(req)
+ if err != nil {
+ log.Printf("Error making external API request: %v", err)
+ }
+ log.Println("RESPONSE: ", response)
+
+ key := header.ConsID + header.SecretKey + header.TimeStamp
+ res, err := io.ReadAll(response.Body)
+ if err != nil {
+ log.Println(err)
+ return nil, err
+ }
+
+ var resReferensiDotker vclaim.ResponseGetReferensiDokterRaw
+ err = json.Unmarshal([]byte(string(res)), &resReferensiDotker)
+ if err != nil {
+ log.Printf("Error Unmarshaling: %v", err)
+ return nil, err
+ }
+
+ responses := &vclaim.ResponseGetReferensiDokter{}
+ if resReferensiDotker.MetaData.Code != "200" {
+ errMsg := errors.New(resReferensiDotker.MetaData.Message)
+ log.Printf("error : %v", errMsg)
+ responses.MetaData.Code = resReferensiDotker.MetaData.Code
+ responses.MetaData.Message = resReferensiDotker.MetaData.Message
+ log.Println("responses: ", responses)
+ return responses, errMsg
+ }
+
+ dataResp, err := docs.StringDecrypt(key, resReferensiDotker.Response)
+ if err != nil {
+ log.Printf("Error Decrypt: %v", err)
+ return nil, err
+ }
+
+ var responseListDokter vclaim.ResponseReferensiDokter
+ log.Println("dataresp: ", dataResp)
+
+ err = json.Unmarshal([]byte(dataResp), &responseListDokter)
+ if err != nil {
+ log.Printf("Error Decode: %v", err)
+ return nil, err
+ }
+
+ log.Println("res: ", resReferensiDotker)
+
+ responses = &vclaim.ResponseGetReferensiDokter{
+ MetaData: resReferensiDotker.MetaData,
+ Response: responseListDokter,
+ }
+
+ return responses, nil
+}
diff --git a/handlers/bpjs/vClaim/VclaimBridge.go b/handlers/bpjs/v_claim/VclaimBridge.go
similarity index 72%
rename from handlers/bpjs/vClaim/VclaimBridge.go
rename to handlers/bpjs/v_claim/VclaimBridge.go
index a3441c4..eac78e8 100644
--- a/handlers/bpjs/vClaim/VclaimBridge.go
+++ b/handlers/bpjs/v_claim/VclaimBridge.go
@@ -1,6 +1,7 @@
-package Vclaim
+package vclaim
import (
+ "bridging-rssa/models/config"
"bytes"
"encoding/json"
"fmt"
@@ -8,7 +9,11 @@ import (
"io/ioutil"
"log"
"net/http"
+ "os"
+ cfg "bridging-rssa/config"
+
+ "github.com/gin-gonic/gin"
"github.com/mashingan/smapping"
)
@@ -120,3 +125,33 @@ func PostRequest(endpoint string, cfg interface{}, data interface{}) interface{}
return &resp
}
+
+func GetReferensiDokter(c *gin.Context) {
+ baseUrl := os.Getenv("BASEURL_BPJS_DEV")
+ endpoint := os.Getenv("VCLAIM_RS_DEV")
+ param := os.Getenv("GET_REFERENSI_DOKTER")
+ dpjp := c.Param("dpjp")
+ url := baseUrl + endpoint + param + dpjp
+
+ 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; charset=utf-8",
+ }
+ log.Println("Headers : ", headers)
+
+ res, err := ResponseGetReferensiDokter(url, header, headers)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusInternalServerError, res.MetaData)
+ return
+ }
+
+ c.JSON(http.StatusOK, res)
+}
diff --git a/handlers/kunjungan_pasien/kunjungan_pasien.go b/handlers/kunjungan_pasien/kunjungan_pasien.go
new file mode 100644
index 0000000..dcbeb93
--- /dev/null
+++ b/handlers/kunjungan_pasien/kunjungan_pasien.go
@@ -0,0 +1,55 @@
+package kunjunganpasien
+
+import (
+ "bridging-rssa/database/satu_data/pasien"
+ "bridging-rssa/docs/utils"
+ pasien_model "bridging-rssa/models/pasien"
+ "log"
+ "net/http"
+ "strings"
+ "time"
+
+ "github.com/gin-gonic/gin"
+)
+
+func ListKunjunganPasien(c *gin.Context) {
+ var req *pasien_model.RequestListKunjunganPasien
+ err := c.Bind(&req)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
+ return
+ }
+ dataKunjunganPasien, err := pasien.GetListKunjunganPasien(req)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
+ return
+ }
+ var res []*pasien_model.ResponseListKunjunganPasien
+ for _, v := range dataKunjunganPasien {
+ gelarDepan := utils.ReplaceGelar(v.GelarDepan)
+ gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
+ namaLengkap := gelarDepan + " " + v.NamaLengkapDokter + " " + gelarBelakang
+ namaLengkap = strings.TrimPrefix(namaLengkap, " ")
+ namaLengkap = strings.TrimSuffix(namaLengkap, " ")
+ namaRuang := strings.TrimSpace(v.NamaRuang)
+ parsedTimeLahir, _ := time.Parse(time.RFC3339, v.TanggalLahir)
+ parsedTimeMasuk, _ := time.Parse(time.RFC3339, v.TanggalMasukKunjungan)
+ tanggalLahir := parsedTimeLahir.Format("2006-01-02")
+ tanggalMasuk := parsedTimeMasuk.Format("2006-01-02")
+ res = append(res, &pasien_model.ResponseListKunjunganPasien{
+ NoMR: v.NoMR,
+ NamaPasien: v.NamaPasien,
+ TanggalLahir: tanggalLahir,
+ JenisKelamin: v.JenisKelamin,
+ TanggalMasukKunjungan: tanggalMasuk,
+ JamMasukKunjungan: v.JamMasukKunjungan,
+ KodeDiagnosa: v.KodeDiagnosa,
+ NamaDiagnosa: v.NamaDiagnosa,
+ NamaRuang: namaRuang,
+ NamaLengkapDokter: namaLengkap,
+ })
+ }
+ c.JSON(http.StatusOK, res)
+}
diff --git a/handlers/mikrobiologi/mikrobiologi.go b/handlers/mikrobiologi/mikrobiologi.go
new file mode 100644
index 0000000..312f1ce
--- /dev/null
+++ b/handlers/mikrobiologi/mikrobiologi.go
@@ -0,0 +1,98 @@
+package mikrobiologi
+
+import (
+ mikrobiologiDB "bridging-rssa/database/simrs/mikrobiologi"
+ "bridging-rssa/models/simrs/mikrobiologi"
+ "log"
+ "net/http"
+
+ "github.com/gin-gonic/gin"
+)
+
+func GetDataPasienMikrobiologi(c *gin.Context) {
+ var req *mikrobiologi.RequestPasienMikrobiologi
+
+ err := c.Bind(&req)
+ if err != nil {
+ log.Println(err)
+ c.JSON(http.StatusBadRequest, gin.H{
+ "message": err,
+ })
+ return
+ }
+
+ dataPasien, errData := mikrobiologiDB.GetDataMikroBiologi(req)
+ if errData != nil {
+ log.Println(errData)
+ c.JSON(http.StatusBadRequest, gin.H{
+ "message": errData,
+ })
+ return
+ }
+ var res []interface{}
+ for _, v := range dataPasien {
+ ktp := v.NoKTP
+ if v.NoKTPBaru != "" {
+ ktp = v.NoKTPBaru
+ }
+ if v.StatusAPS == 1 {
+ res = append(res, &mikrobiologi.ResponseDataPasienRajalAPS{
+ NOMR: v.NOMR,
+ NoNota: v.NoNota,
+ IdxDaftar: v.IDXDaftar,
+ TanggalOrder: v.TanggalOrder,
+ NoLab: v.NoLab,
+ StatusRajal: v.StatusRajal,
+ StatusAPS: v.StatusAPS,
+ NamaAPS: v.NamaAPS,
+ NoKTPAPS: v.NoKTPAPS,
+ TempatLahirAPS: v.TempatLahirAPS,
+ TanggalLahirAPS: v.TanggalLahirAPS,
+ JenisKelaminAPS: v.JenisKelaminAPS,
+ AlamatAPS: v.AlamatAPS,
+ NamaRuang: v.NamaRuang,
+ KelasRuang: v.KelasRuang,
+ KodeTarifRajal: v.KodeTarifRajal,
+ })
+ } else {
+ if v.StatusRajal != 1 {
+ res = append(res, &mikrobiologi.ResponseDataPasienRanap{
+ NOMR: v.NOMR,
+ NoNota: v.NoNota,
+ IDXDaftar: v.IDXDaftar,
+ TanggalOrder: v.TanggalOrder,
+ NoLab: v.NoLab,
+ StatusRajal: v.StatusRajal,
+ Nama: v.Nama,
+ NoKTP: ktp,
+ TempatLahir: v.TempatLahir,
+ TanggalLahir: v.TanggalLahir,
+ JenisKelamin: v.JenisKelamin,
+ Alamat: v.Alamat,
+ NamaRuang: v.NamaRuang,
+ KelasRuang: v.KelasRuang,
+ KodeTarifRanap: v.KodeTarifRanap,
+ })
+ } else {
+ res = append(res, &mikrobiologi.ResponseDataPasienRajal{
+ NOMR: v.NOMR,
+ NoNota: v.NoNota,
+ IDXDaftar: v.IDXDaftar,
+ TanggalOrder: v.TanggalOrder,
+ NoLab: v.NoLab,
+ StatusRajal: v.StatusRajal,
+ Nama: v.Nama,
+ NoKTP: ktp,
+ TempatLahir: v.TempatLahir,
+ TanggalLahir: v.TanggalLahir,
+ JenisKelamin: v.JenisKelamin,
+ Alamat: v.Alamat,
+ NamaRuang: v.NamaRuang,
+ KelasRuang: v.KelasRuang,
+ KodeTarifRajal: v.KodeTarifRajal,
+ })
+ }
+ }
+ }
+ c.JSON(http.StatusOK, res)
+}
diff --git a/main.go b/main.go
index 927ec11..2a25a7a 100644
--- a/main.go
+++ b/main.go
@@ -1,95 +1,150 @@
-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"
- "log"
-
- _ "bridging-rssa/docs"
-
- "github.com/gin-contrib/cors"
- "github.com/gin-gonic/gin"
- "github.com/joho/godotenv"
- swaggerFiles "github.com/swaggo/files"
- ginSwagger "github.com/swaggo/gin-swagger"
-)
-
-// @title Crud User
-// @version 1
-// @Description Rest API CRUD User
-
-// @host localhost:8080
-
-func main() {
- err := godotenv.Load()
- if err != nil {
- log.Fatal("Error loading .env file")
- }
-
- config.ConnectDB()
-
- r := gin.Default()
-
- v1 := r.Group("/api")
-
- subspesialis := v1.Group("/subspesialis")
- {
- subspesialis.GET("/", bpjs.GetAllSubspesialis)
- }
-
- jadwalDokter := v1.Group("/jadwaldokter")
- {
- jadwalDokter.GET("/", jadwal_dokter.GetJadwalDokter)
- jadwalDokter.GET("/dpjp/:dpjp", jadwal_dokter.GetDokterByDPJP)
- // jadwalDokter.GET("/tanggal/:tanggal", jadwal_dokter.GetSpesialisByDate)
- jadwalDokter.GET("/tanggal/:tanggal", jadwal_dokter.GetJadwalSubspesialisByDate)
- jadwalDokter.GET("/tanggal/:tanggal/spesialis/:spesialis", jadwal_dokter.GetDokterBySpesialis)
- jadwalDokter.GET("/tanggal/:tanggal/subspesialis/:subspesialis", jadwal_dokter.GetDokterBySubspesialis)
- }
-
- suratKontrol := v1.Group("/suratkontrol")
- {
- suratKontrol.GET("/offset/:offset/limit/:limit", suratkontrol.GetDataSurKon)
- suratKontrol.GET("/idxdaftar/:idxdaftar", suratkontrol.GetDataSurKonByID)
- suratKontrol.GET("/noSuratKontrol/:noSuratKontrol", suratkontrol.GetNomorSuratKontrol)
- suratKontrol.GET("/noSEP/:noSEP", suratkontrol.GetSuratKontrolBySEP)
- suratKontrol.GET("/printSurKon/:idxdaftar", suratkontrol.PrintSurKon)
- suratKontrol.POST("/cari", suratkontrol.CariPasienTPP)
- suratKontrol.POST("/insert", suratkontrol.InsertSuratKontrol)
- suratKontrol.PUT("/update", suratkontrol.UpdateSuratKontrol)
- suratKontrol.POST("/delete", suratkontrol.DeleteSuratKontrol)
- }
-
- suratRujukan := v1.Group("/rujukan")
- {
- suratRujukan.GET("/noRujukan/:noRujukan", rujukan.GetSuratRujukan)
- 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))
- r.DELETE("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
- r.Use(cors.New(cors.Config{
- AllowOrigins: []string{"*"}, // or specific domains like "http://example.com"
- AllowMethods: []string{"GET", "POST", "PUT", "DELETE"},
- AllowHeaders: []string{"Origin", "Content-Type"},
- AllowCredentials: true,
- }))
-
- log.Println("JALAN DI PORT : 8083")
- err = r.Run(":8083")
- if err != nil {
- log.Fatal(err)
- }
-}
+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"
+ vclaim "bridging-rssa/handlers/bpjs/v_claim"
+ kunjungan_pasien "bridging-rssa/handlers/kunjungan_pasien"
+ mikrobiologiHandler "bridging-rssa/handlers/mikrobiologi"
+ "log"
+ "os"
+ "time"
+
+ _ "bridging-rssa/docs"
+
+ "github.com/gin-contrib/cors"
+ "github.com/gin-gonic/gin"
+ "github.com/joho/godotenv"
+ swaggerFiles "github.com/swaggo/files"
+ ginSwagger "github.com/swaggo/gin-swagger"
+)
+
+// @title Crud User
+// @version 1
+// @Description Rest API CRUD User
+
+// @host localhost:8080
+
+func main() {
+ err := godotenv.Load()
+ if err != nil {
+ log.Fatal("Error loading .env file")
+ }
+
+ config.ConnectDB()
+
+ r := gin.Default()
+
+ // jakartaTime, _ := time.LoadLocation("Asia/Jakarta")
+ // scheduler := cron.New(cron.WithLocation(jakartaTime))
+
+ // defer scheduler.Stop()
+
+ // scheduler.AddFunc("41 09 * * *", func() {
+ // log.Println("=== RUNNING SCHEDULE GET JADWAL DOKTER ===")
+ // jadwal_dokter.GetDataJadwalDokter()
+ // log.Println("=== SCHEDULE GET JADWAL DOKTER DONE ===")
+ // })
+
+ // scheduler.AddFunc("* 12 * * *", func() {
+ // log.Println("=== RUNNING SCHEDULE DATA SURAT KONTROL ===")
+ // suratkontrol.UpdateSuratKontrolSchedule()
+ // log.Println("=== SCHEDULE DATA SURAT KONTROL DONE ===")
+ // })
+
+ // scheduler.AddFunc("59 23 * * *", func() {
+ // log.Println("=== RUNNING SCHEDULE DATA SURAT KONTROL ===")
+ // suratkontrol.UpdateSuratKontrolSchedule()
+ // log.Println("=== SCHEDULE DATA SURAT KONTROL DONE ===")
+ // })
+
+ // go scheduler.Start()
+
+ v1 := r.Group("/api")
+
+ subspesialis := v1.Group("/subspesialis")
+ {
+ subspesialis.GET("/", bpjs.GetAllSubspesialis)
+ }
+ jadwalDokter := v1.Group("/jadwaldokter")
+ {
+ jadwalDokter.POST("/getjadwal", jadwal_dokter.GetJadwalDokterApi)
+ jadwalDokter.GET("/getalljadwal", jadwal_dokter.GetAllJadwalDokter)
+ jadwalDokter.GET("/dpjp/:dpjp", jadwal_dokter.GetDokterByDPJP)
+ // jadwalDokter.GET("/tanggal/:tanggal", jadwal_dokter.GetSpesialisByDate)
+ jadwalDokter.GET("/tanggal/:tanggal", jadwal_dokter.GetJadwalSubspesialisByDate)
+ jadwalDokter.GET("/tanggal/:tanggal/spesialis/:spesialis", jadwal_dokter.GetDokterBySpesialis)
+ jadwalDokter.GET("/tanggal/:tanggal/subspesialis/:subspesialis", jadwal_dokter.GetDokterBySubspesialis)
+ jadwalDokter.POST("/detail", jadwal_dokter.GetDetailJadwalDokter)
+ }
+
+ suratKontrol := v1.Group("/suratkontrol")
+ {
+ suratKontrol.GET("/offset/:offset/limit/:limit", suratkontrol.GetDataSurKon)
+ suratKontrol.GET("/idxdaftar/:idxdaftar", suratkontrol.GetDataSurKonByID)
+ suratKontrol.GET("/noSuratKontrol/:noSuratKontrol", suratkontrol.GetNomorSuratKontrol)
+ suratKontrol.GET("/noSEP/:noSEP", suratkontrol.GetSuratKontrolBySEP)
+ suratKontrol.GET("/printSurKon/:idxdaftar", suratkontrol.PrintSurKon)
+ suratKontrol.POST("/cari", suratkontrol.CariPasienTPP)
+ suratKontrol.POST("/insert", suratkontrol.InsertSuratKontrol)
+ suratKontrol.PUT("/update", suratkontrol.UpdateSuratKontrol)
+ suratKontrol.POST("/delete", suratkontrol.DeleteSuratKontrol)
+ suratKontrol.POST("/datalog", suratkontrol.GetDataLogAPI)
+ }
+
+ kunjunganPasien := v1.Group("/kunjunganpasien")
+ {
+ kunjunganPasien.POST("/listkunjunganpasien", kunjungan_pasien.ListKunjunganPasien)
+ }
+
+ suratRujukan := v1.Group("/rujukan")
+ {
+ suratRujukan.GET("/noRujukan/:noRujukan", rujukan.GetSuratRujukan)
+ suratRujukan.GET("/list/peserta/:noKartu", rujukan.GetSuratRujukanBatch)
+ }
+
+ iCare := v1.Group("/icare")
+ {
+ iCare.POST("/rs/validate", icare.GetFKRTL)
+ iCare.POST("/pcare/validate", icare.GetFKTP)
+ }
+
+ referensi := v1.Group("/referensi")
+ {
+ referensi.GET("/dokter/:dpjp", vclaim.GetReferensiDokter)
+ }
+
+ mikrobiologi := v1.Group("/mikrobiologi")
+ {
+ mikrobiologi.POST("/datapasien", mikrobiologiHandler.GetDataPasienMikrobiologi)
+ }
+
+ r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
+ r.POST("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
+ r.PUT("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
+ r.DELETE("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
+ r.Use(cors.New(cors.Config{
+ AllowOrigins: []string{"*"}, // or specific domains like "http://example.com"
+ AllowMethods: []string{"GET", "POST", "PUT", "DELETE"},
+ AllowHeaders: []string{"Origin", "Content-Type"},
+ AllowCredentials: true,
+ }))
+
+ localTime := time.Now()
+ log.Println("Local Time:", localTime)
+
+ baseUrl := os.Getenv("BASEURL_BPJS")
+ endpoint := os.Getenv("ANTREAN_RS")
+
+ url := baseUrl + endpoint
+ log.Println("url", url)
+ 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
index 84efe5b..6401c26 100644
--- a/models/bpjs/i_care/i_care.go
+++ b/models/bpjs/i_care/i_care.go
@@ -1,5 +1,12 @@
package icare
+type ReqICare struct {
+ IDXDaftar string `json:"idxdaftar"`
+ Param string `json:"param"`
+ KodeDokter int `json:"kodedokter"`
+ User string `json:"user"`
+}
+
type RequestICare struct {
Param string `json:"param"`
KodeDokter int `json:"kodedokter"`
diff --git a/models/bpjs/jadwal_dokter/jadwal_dokter.go b/models/bpjs/jadwal_dokter/jadwal_dokter.go
index 796d0ec..088b079 100644
--- a/models/bpjs/jadwal_dokter/jadwal_dokter.go
+++ b/models/bpjs/jadwal_dokter/jadwal_dokter.go
@@ -1,72 +1,123 @@
-package jadwal_dokter
-
-type JadwalDokterRaw struct {
- Response string `json:"response"`
- MetaData Metadata `json:"metadata"`
-}
-
-type Metadata struct {
- Code int `json:"code"`
- Message string `json:"message"`
-}
-
-type ListDokter struct {
- KodeSubspesialis string `json:"kodesubspesialis"`
- Hari int `json:"hari"`
- KapasitasPasien int `json:"kapasitaspasien"`
- Libur int `json:"libur"`
- NamaHari string `json:"namahari"`
- Jadwal string `json:"jadwal"`
- NamaSubspesialis string `json:"namasubspesialis"`
- NamaDokter string `json:"namadokter"`
- KodePoli string `json:"kodepoli"`
- NamaPoli string `json:"namapoli"`
- KodeDokter int `json:"kodedokter"`
-}
-
-type DaftarSpesialis struct {
- ID int `json:"id"`
- Kode string `json:"Kode"`
- Spesialis string `json:"Spesialis"`
-}
-
-type JadwalDokterSatuData struct {
- ID int `gorm:"column:id" json:"id"`
- Hari int `gorm:"column:Hari" json:"Hari"`
- NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
- Waktu string `gorm:"column:Waktu" json:"Waktu"`
- Dokter string `gorm:"column:Dokter" json:"Dokter"`
- Spesialis int `gorm:"column:Spesialis" json:"Spesialis"`
- SubSpesialis int `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
- Status int `gorm:"column:Status" json:"Status"`
-}
-
-type JadwalDokterTempSatuData struct {
- ID int `gorm:"column:id" json:"id"`
- Hari int `gorm:"column:Hari" json:"Hari"`
- NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
- Waktu string `gorm:"column:Waktu" json:"Waktu"`
- Dokter string `gorm:"column:Dokter" json:"Dokter"`
- Spesialis string `gorm:"column:Spesialis" json:"Spesialis"`
- SubSpesialis string `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
- Status int `gorm:"column:Status" json:"Status"`
-}
-
-type ResponseListHari struct {
- IDSpesialis int `json:"id_spesialis"`
- Kode string `json:"Kode"`
- Spesialis string `json:"Spesialis"`
- Subspesialis string `json:"Subspesialis"`
- IDSubspesialis int `json:"id_subspesialis"`
- NamaLengkap string `json:"nama_lengkap"`
- HFISCode string `json:"HFIS_code"`
- KodeDPJP string `json:"DPJP_code"`
- IDDokter string `json:"id_dokter"`
- JadwalDokter []ListJadwalDokter `json:"Jadwal_dokter"`
-}
-
-type ListJadwalDokter struct {
- NamaHari string `json:"Nama_hari"`
- KodeHari int `json:"Kode_hari"`
- Waktu string `json:"Waktu"`
-}
+package jadwal_dokter
+
+type JadwalDokterRaw struct {
+ Response string `json:"response"`
+ MetaData Metadata `json:"metadata"`
+}
+
+type JadwalDokter struct {
+ Response []*ListDokter `json:"response"`
+ MetaData Metadata `json:"metadata"`
+}
+
+type Metadata struct {
+ Code int `json:"code"`
+ Message string `json:"message"`
+}
+
+type ListDokter struct {
+ KodeSubspesialis string `json:"kodesubspesialis"`
+ Hari int `json:"hari"`
+ KapasitasPasien int `json:"kapasitaspasien"`
+ Libur int `json:"libur"`
+ NamaHari string `json:"namahari"`
+ Jadwal string `json:"jadwal"`
+ NamaSubspesialis string `json:"namasubspesialis"`
+ NamaDokter string `json:"namadokter"`
+ KodePoli string `json:"kodepoli"`
+ NamaPoli string `json:"namapoli"`
+ KodeDokter int `json:"kodedokter"`
+}
+
+type DaftarSpesialis struct {
+ ID int `json:"id"`
+ Kode string `json:"Kode"`
+ Spesialis string `json:"Spesialis"`
+}
+
+type JadwalDokterSatuData struct {
+ ID int `gorm:"column:id" json:"id"`
+ Hari int `gorm:"column:Hari" json:"Hari"`
+ NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
+ Waktu string `gorm:"column:Waktu" json:"Waktu"`
+ Dokter string `gorm:"column:Dokter" json:"Dokter"`
+ Spesialis int `gorm:"column:Spesialis" json:"Spesialis"`
+ SubSpesialis int `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
+ Status int `gorm:"column:Status" json:"Status"`
+}
+
+type DataJadwalDokterSatuData struct {
+ ID string `gorm:"column:id" json:"id"`
+ DateCreated string `gorm:"column:date_created" json:"Date_created"`
+ Hari string `gorm:"column:Hari" json:"Hari"`
+ NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
+ Waktu string `gorm:"column:Waktu" json:"Waktu"`
+ Dokter string `gorm:"column:Dokter" json:"Dokter"`
+ Spesialis int `gorm:"column:Spesialis" json:"Spesialis"`
+ SubSpesialis int `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
+ TanggalJadwal string `gorm:"column:Tanggal_jadwal" json:"Tanggal_jadwal"`
+}
+
+type JadwalDokterTempSatuData struct {
+ ID int `gorm:"column:id" json:"id"`
+ Hari int `gorm:"column:Hari" json:"Hari"`
+ NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
+ Waktu string `gorm:"column:Waktu" json:"Waktu"`
+ Dokter string `gorm:"column:Dokter" json:"Dokter"`
+ Spesialis string `gorm:"column:Spesialis" json:"Spesialis"`
+ SubSpesialis string `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
+ Status int `gorm:"column:Status" json:"Status"`
+}
+
+type ResponseListHari struct {
+ IDSpesialis int `json:"id_spesialis"`
+ Kode string `json:"Kode"`
+ Spesialis string `json:"Spesialis"`
+ Subspesialis string `json:"Subspesialis"`
+ IDSubspesialis int `json:"id_subspesialis"`
+ NamaLengkap string `json:"nama_lengkap"`
+ HFISCode string `json:"HFIS_code"`
+ KodeDPJP string `json:"DPJP_code"`
+ IDDokter string `json:"id_dokter"`
+ JadwalDokter []ListJadwalDokter `json:"Jadwal_dokter"`
+}
+
+type ListJadwalDokter struct {
+ NamaHari string `json:"Nama_hari"`
+ KodeHari int `json:"Kode_hari"`
+ Waktu string `json:"Waktu"`
+}
+
+type RequestJadwalDokter struct {
+ KodePoli string `json:"kodepoli"`
+ Tanggal string `json:"tanggal"`
+}
+type RequestDataJadwalDokter struct {
+ NamaHari string `gorm:"column:Nama_hari" json:"hari"`
+ Subspesialis int `gorm:"column:Sub_spesialis" json:"subspesialis"`
+}
+
+type ListDataJadwalDokter struct {
+ Hari string `gorm:"column:Nama_hari" json:"Hari"`
+ NamaDokter string `gorm:"column:nama_lengkap"`
+}
+
+type ListDaftarJadwalDokter struct {
+ ValueHari string `gorm:"column:valuehari" json:"valuehari"`
+ NamaHari string `gorm:"column:hari" json:"hari"`
+ Waktu string `gorm:"column:waktu" json:"waktu"`
+ Spesialis string `gorm:"column:spesialis" json:"spesialis"`
+ Subspesialis string `gorm:"column:subspesialis" json:"subspesialis"`
+ GelarDepan string `gorm:"column:gelardepan" json:"gelardepan"`
+ NamaLengkap string `gorm:"column:namalengkap" json:"namalengkap"`
+ GelarBelakang string `gorm:"column:gelarbelakang" json:"gelarbelakang"`
+}
+
+type ResponseDetailJadwalDokter struct {
+ ValueHari string `gorm:"column:valuehari" json:"valuehari"`
+ NamaHari string `gorm:"column:hari" json:"hari"`
+ Waktu string `gorm:"column:waktu" json:"waktu"`
+ Spesialis string `gorm:"column:spesialis" json:"spesialis"`
+ Subspesialis string `gorm:"column:subspesialis" json:"subspesialis"`
+ NamaLengkap string `gorm:"column:namalengkap" json:"namalengkap"`
+}
diff --git a/models/bpjs/surat_kontrol/surat_kontrol.go b/models/bpjs/surat_kontrol/surat_kontrol.go
index f78d297..691452c 100644
--- a/models/bpjs/surat_kontrol/surat_kontrol.go
+++ b/models/bpjs/surat_kontrol/surat_kontrol.go
@@ -34,6 +34,7 @@ type RequestInsertRencanaKontrol struct {
NamaDiagnosa string `json:"nama_diagnosa"`
TipeSurKon string `json:"tipe_surkon"`
TipeRawat string `json:"tipe_rawat"`
+ Ruangan string `json:"ruangan"`
}
type ReqDeleteRencanaKontrol struct {
@@ -253,6 +254,7 @@ type GetDataSuratKontrol struct {
KodeDiagnosa string `gorm:"column:Kode_diagnosa" json:"Kode_diagnosa"`
NamaDiagnosa string `gorm:"column:Nama_diagnosa" json:"Nama_diagnosa"`
TipeSurKon string `gorm:"column:Tipe_SurKon" json:"Tipe_SurKon"`
+ User string `gorm:"column:User" json:"User"`
}
type ResponseGetDataSuratKontrol struct {
@@ -277,6 +279,7 @@ type ResponseGetDataSuratKontrol struct {
KodeDiagnosa string `json:"Kode_diagnosa"`
NamaDiagnosa string `json:"Nama_diagnosa"`
TipeSurKon string `json:"Tipe_SurKon"`
+ User string `json:"User"`
}
type ResponseCariDataSuratKontrol struct {
@@ -285,12 +288,19 @@ type ResponseCariDataSuratKontrol struct {
}
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"`
+ 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"`
+ IsTanggalEntri bool `json:"is_tanggal_entri"`
+}
+
+type DataNomorSuratKontrol struct {
+ ID string `gorm:"column:id" json:"id"`
+ NomorSuratKontrol string `gorm:"column:Nomor_surat_kontrol" json:"Nomor_surat_kontrol"`
+ TanggalRencanaKontrol string `gorm:"column:Tanggal_rencana_kontrol" json:"Tanggal_rencana_kontrol"`
}
diff --git a/models/bpjs/v_claim/v_claim.go b/models/bpjs/v_claim/v_claim.go
new file mode 100644
index 0000000..66f74d8
--- /dev/null
+++ b/models/bpjs/v_claim/v_claim.go
@@ -0,0 +1,25 @@
+package vclaim
+
+type ResponseGetReferensiDokterRaw struct {
+ MetaData MetadataString `json:"metaData"`
+ Response string `json:"response"`
+}
+
+type MetadataString struct {
+ Code string `json:"code"`
+ Message string `json:"message"`
+}
+
+type ResponseGetReferensiDokter struct {
+ MetaData MetadataString `json:"metaData"`
+ Response ResponseReferensiDokter `json:"response"`
+}
+
+type ResponseReferensiDokter struct {
+ List ListData `json:"list"`
+}
+
+type ListData struct {
+ Kode string `json:"kode"`
+ Nama string `json:"nama"`
+}
diff --git a/models/dokter/dokter.go b/models/dokter/dokter.go
index 3139fe0..a2bfe5a 100644
--- a/models/dokter/dokter.go
+++ b/models/dokter/dokter.go
@@ -16,6 +16,7 @@ type NamaLengkap struct {
NamaLengkap string `gorm:"column:Nama_lengkap" json:"Nama_lengkap"`
GelarBelakang string `gorm:"column:gelarbelakang" json:"gelarbelakang"`
HFISCode string `gorm:"column:HFIS_code" json:"HFIS_code"`
+ DPJPCode string `gorm:"column:DPJP_code" json:"DPJP_code"`
}
type ResponseDokter struct {
@@ -23,6 +24,7 @@ type ResponseDokter struct {
NamaLengkap string `json:"nama_lengkap"`
Spesialis int `json:"spesialis"`
HFISCode string `json:"HFIS_code"`
+ DPJPCode string `json:"DPJP_code"`
}
type ResponseDokterNew struct {
@@ -31,4 +33,5 @@ type ResponseDokterNew struct {
Subspesialis int `json:"subspesialis"`
HFISCode string `json:"HFIS_code"`
KodePoli string `json:"kode_poli"`
+ DPJPCode string `json:"DPJP_code"`
}
diff --git a/models/jadwal/jadwal_libur.go b/models/jadwal/jadwal_libur.go
new file mode 100644
index 0000000..cdce49b
--- /dev/null
+++ b/models/jadwal/jadwal_libur.go
@@ -0,0 +1,7 @@
+package jadwal
+
+type DaftarJadwalLiburPelayanan struct {
+ NamaLiburPelayanan string `gorm:"column:Nama_libur_pelayanan" json:"Nama_libur_pelayanan"`
+ KeteranganLiburPelayanan string `gorm:"column:Keterangan_libur_pelayanan" json:"Keterangan_libur_pelayanan"`
+ TanggalLiburPelayanan string `gorm:"column:Tanggal_libur_pelayanan" json:"Tanggal_libur_pelayanan"`
+}
diff --git a/models/kunjungan_pasien/kunjungan_pasien.go b/models/kunjungan_pasien/kunjungan_pasien.go
new file mode 100644
index 0000000..a38a188
--- /dev/null
+++ b/models/kunjungan_pasien/kunjungan_pasien.go
@@ -0,0 +1,34 @@
+package kunjunganpasien
+
+type RequestListKunjunganPasien struct {
+ TanggalAwal string `json:"tanggalawal"`
+ TanggalAkhir string `json:"tanggalakhir"`
+}
+
+type ListKunjunganPasien struct {
+ NoMR string `gorm:"column:nomr" json:"nomr"`
+ NamaPasien string `gorm:"column:namalengkap" json:"namalengkap"`
+ TanggalLahir string `gorm:"column:tanggallahir" json:"tanggallahir"`
+ JenisKelamin string `gorm:"column:jeniskelamin" json:"jeniskelamin"`
+ TanggalMasukKunjungan string `gorm:"column:tanggalmasukkunjungan" json:"tanggalmasukkunjungan"`
+ JamMasukKunjungan string `gorm:"column:jammasukkunjungan" json:"jammasukkunjungan"`
+ KodeDiagnosa string `gorm:"column:dxawalmasuk" json:"dxawalmasuk"`
+ NamaDiagnosa string `gorm:"column:displaydxawalmasuk" json:"displaydxawalmasuk"`
+ NamaRuang string `gorm:"column:namaruang" json:"namaruang"`
+ GelarDepan string `gorm:"column:gelardepan" json:"gelardepan"`
+ NamaLengkapDokter string `gorm:"column:namalengkapdokter" json:"namalengkapdokter"`
+ GelarBelakang string `gorm:"column:gelarbelakang" json:"gelarbelakang"`
+}
+
+type ResponseListKunjunganPasien struct {
+ NoMR string `gorm:"column:nomr" json:"nomr"`
+ NamaPasien string `gorm:"column:namalengkap" json:"namalengkap"`
+ TanggalLahir string `gorm:"column:tanggallahir" json:"tanggallahir"`
+ JenisKelamin string `gorm:"column:jeniskelamin" json:"jeniskelamin"`
+ TanggalMasukKunjungan string `gorm:"column:tanggalmasukkunjungan" json:"tanggalmasukkunjungan"`
+ JamMasukKunjungan string `gorm:"column:jammasukkunjungan" json:"jammasukkunjungan"`
+ KodeDiagnosa string `gorm:"column:dxawalmasuk" json:"dxawalmasuk"`
+ NamaDiagnosa string `gorm:"column:displaydxawalmasuk" json:"displaydxawalmasuk"`
+ NamaRuang string `gorm:"column:namaruang" json:"namaruang"`
+ NamaLengkapDokter string `gorm:"column:namalengkapdokter" json:"namalengkapdokter"`
+}
diff --git a/models/log_api/log_api.go b/models/log_api/log_api.go
index b1751c7..a61365d 100644
--- a/models/log_api/log_api.go
+++ b/models/log_api/log_api.go
@@ -17,4 +17,12 @@ type DataLogAPI struct {
ResponTimeStart string `gorm:"column:Respontime_start" json:"Respontime_start"`
ResponTimeEnd string `gorm:"column:Respontime_end" json:"Respontime_end"`
Comment string `gorm:"column:Comment" json:"Comment"`
-}
\ No newline at end of file
+ RequestString string `json:"Request_string"`
+ ResponString string `json:"Respon_string"`
+}
+
+type ReqGetDataLogAPI struct {
+ TanggalAwal string `json:"Tanggal_awal"`
+ TanggalAkhir string `json:"Tanggal_akhir"`
+ TipeRawat string `json:"Tipe_rawat"`
+}
diff --git a/models/log_api/log_icare.go b/models/log_api/log_icare.go
new file mode 100644
index 0000000..b78c696
--- /dev/null
+++ b/models/log_api/log_icare.go
@@ -0,0 +1,10 @@
+package logapi
+
+type InsertLogICare struct {
+ ID string `gorm:"column:id" json:"id"`
+ DateCreated string `gorm:"column:date_created" json:"date_created"`
+ Ruangan int `gorm:"column:Ruangan" json:"Ruangan"`
+ Dokter string `gorm:"column:Dokter" json:"Dokter"`
+ Kunjungan_pasien string `gorm:"column:Kunjungan_pasien" json:"Kunjungan_pasien"`
+ WaktuTransaksi string `gorm:"column:Waktu_transaksi" json:"Waktu_transaksi"`
+}
diff --git a/models/pasien/kunjungan_pasien.go b/models/pasien/kunjungan_pasien.go
new file mode 100644
index 0000000..c8aca3a
--- /dev/null
+++ b/models/pasien/kunjungan_pasien.go
@@ -0,0 +1,39 @@
+package pasien
+
+type KunjunganPasien struct {
+ ID string `gorm:"column:id" json:"id"`
+ Ruangan int `gorm:"column:Ruangan" json:"Ruangan"`
+}
+
+type RequestListKunjunganPasien struct {
+ TanggalAwal string `json:"tanggalawal"`
+ TanggalAkhir string `json:"tanggalakhir"`
+}
+
+type ListKunjunganPasien struct {
+ NoMR string `gorm:"column:nomr" json:"nomr"`
+ NamaPasien string `gorm:"column:namalengkap" json:"namalengkap"`
+ TanggalLahir string `gorm:"column:tanggallahir" json:"tanggallahir"`
+ JenisKelamin string `gorm:"column:jeniskelamin" json:"jeniskelamin"`
+ TanggalMasukKunjungan string `gorm:"column:tanggalmasukkunjungan" json:"tanggalmasukkunjungan"`
+ JamMasukKunjungan string `gorm:"column:jammasukkunjungan" json:"jammasukkunjungan"`
+ KodeDiagnosa string `gorm:"column:dxawalmasuk" json:"dxawalmasuk"`
+ NamaDiagnosa string `gorm:"column:displaydxawalmasuk" json:"displaydxawalmasuk"`
+ NamaRuang string `gorm:"column:namaruang" json:"namaruang"`
+ GelarDepan string `gorm:"column:gelardepan" json:"gelardepan"`
+ NamaLengkapDokter string `gorm:"column:namalengkapdokter" json:"namalengkapdokter"`
+ GelarBelakang string `gorm:"column:gelarbelakang" json:"gelarbelakang"`
+}
+
+type ResponseListKunjunganPasien struct {
+ NoMR string `gorm:"column:nomr" json:"nomr"`
+ NamaPasien string `gorm:"column:namalengkap" json:"namalengkap"`
+ TanggalLahir string `gorm:"column:tanggallahir" json:"tanggallahir"`
+ JenisKelamin string `gorm:"column:jeniskelamin" json:"jeniskelamin"`
+ TanggalMasukKunjungan string `gorm:"column:tanggalmasukkunjungan" json:"tanggalmasukkunjungan"`
+ JamMasukKunjungan string `gorm:"column:jammasukkunjungan" json:"jammasukkunjungan"`
+ KodeDiagnosa string `gorm:"column:dxawalmasuk" json:"dxawalmasuk"`
+ NamaDiagnosa string `gorm:"column:displaydxawalmasuk" json:"displaydxawalmasuk"`
+ NamaRuang string `gorm:"column:namaruang" json:"namaruang"`
+ NamaLengkapDokter string `gorm:"column:namalengkapdokter" json:"namalengkapdokter"`
+}
diff --git a/models/simrs/mikrobiologi/mikrobiologi.go b/models/simrs/mikrobiologi/mikrobiologi.go
new file mode 100644
index 0000000..402c9c4
--- /dev/null
+++ b/models/simrs/mikrobiologi/mikrobiologi.go
@@ -0,0 +1,90 @@
+package mikrobiologi
+
+type RequestPasienMikrobiologi struct {
+ NOMR string `json:"nomr"`
+ IDXDaftar string `json:"idxdaftar"`
+ NoBill string `json:"nobill"`
+ TanggalKunjungan string `json:"tanggalkunjungan"`
+}
+
+type DataPasienMikrobiologi struct {
+ NOMR string `gorm:"column:nomr" json:"nomr"`
+ NoNota string `gorm:"column:nonota" json:"nonota"`
+ IDXDaftar int `gorm:"column:idxdaftar" json:"idxdaftar"`
+ TanggalOrder string `gorm:"column:tglorder" json:"tglorder"`
+ NoLab string `gorm:"column:nolab" json:"nolab"`
+ StatusRajal int `gorm:"column:statusrajal" json:"statusrajal"`
+ StatusAPS int `gorm:"column:statusaps" json:"statusaps"`
+ Nama string `gorm:"column:nama" json:"nama"`
+ NoKTP string `gorm:"column:noktp" json:"noktp"`
+ NoKTPBaru string `gorm:"column:noktpbaru" json:"noktpbaru"`
+ TempatLahir string `gorm:"column:tmptlahir" json:"tmptlahir"`
+ TanggalLahir string `gorm:"column:tgllahir" json:"tgllahir"`
+ JenisKelamin string `gorm:"column:jeniskelamin" json:"jeniskelamin"`
+ Alamat string `gorm:"column:alamat" json:"alamat"`
+ NamaAPS string `gorm:"column:namaaps" json:"namaaps"`
+ NoKTPAPS string `gorm:"column:noktpaps" json:"noktpaps"`
+ TempatLahirAPS string `gorm:"column:tmptlahiraps" json:"tmptlahiraps"`
+ TanggalLahirAPS string `gorm:"column:tgllahiraps" json:"tgllahiraps"`
+ JenisKelaminAPS string `gorm:"column:jeniskelaminaps" json:"jeniskelaminaps"`
+ AlamatAPS string `gorm:"column:alamataps" json:"alamataps"`
+ NamaRuang string `gorm:"column:namaruang" json:"namaruang"`
+ KelasRuang string `gorm:"column:kelasruang" json:"kelasruang"`
+ KodeTarifRajal string `gorm:"column:kodetarifrajal" json:"kodetarifrajal"`
+ KodeTarifRanap string `gorm:"column:kodetarifranap" json:"kodetarifranap"`
+}
+
+type ResponseDataPasienRanap struct {
+ NOMR string `gorm:"column:nomr" json:"nomr"`
+ NoNota string `gorm:"column:nonota" json:"nonota"`
+ IDXDaftar int `gorm:"column:idxdaftar" json:"idxdaftar"`
+ TanggalOrder string `gorm:"column:tglorder" json:"tglorder"`
+ NoLab string `gorm:"column:nolab" json:"nolab"`
+ StatusRajal int `gorm:"column:statusrajal" json:"statusrajal"`
+ Nama string `gorm:"column:nama" json:"nama"`
+ NoKTP string `gorm:"column:noktp" json:"noktp"`
+ TempatLahir string `gorm:"column:tmptlahir" json:"tmptlahir"`
+ TanggalLahir string `gorm:"column:tgllahir" json:"tgllahir"`
+ JenisKelamin string `gorm:"column:jeniskelamin" json:"jeniskelamin"`
+ Alamat string `gorm:"column:alamat" json:"alamat"`
+ NamaRuang string `gorm:"column:namaruang" json:"namaruang"`
+ KelasRuang string `gorm:"column:kelasruang" json:"kelasruang"`
+ KodeTarifRanap string `gorm:"column:kodetarifranap" json:"kodetarifranap"`
+}
+
+type ResponseDataPasienRajal struct {
+ NOMR string `gorm:"column:nomr" json:"nomr"`
+ NoNota string `gorm:"column:nonota" json:"nonota"`
+ IDXDaftar int `gorm:"column:idxdaftar" json:"idxdaftar"`
+ TanggalOrder string `gorm:"column:tglorder" json:"tglorder"`
+ NoLab string `gorm:"column:nolab" json:"nolab"`
+ StatusRajal int `gorm:"column:statusrajal" json:"statusrajal"`
+ Nama string `gorm:"column:nama" json:"nama"`
+ NoKTP string `gorm:"column:noktp" json:"noktp"`
+ TempatLahir string `gorm:"column:tmptlahir" json:"tmptlahir"`
+ TanggalLahir string `gorm:"column:tgllahir" json:"tgllahir"`
+ JenisKelamin string `gorm:"column:jeniskelamin" json:"jeniskelamin"`
+ Alamat string `gorm:"column:alamat" json:"alamat"`
+ NamaRuang string `gorm:"column:namaruang" json:"namaruang"`
+ KelasRuang string `gorm:"column:kelasruang" json:"kelasruang"`
+ KodeTarifRajal string `gorm:"column:kodetarifrajal" json:"kodetarifrajal"`
+}
+
+type ResponseDataPasienRajalAPS struct {
+ NOMR string `gorm:"column:nomr" json:"nomr"`
+ NoNota string `gorm:"column:nonota" json:"nonota"`
+ IdxDaftar int `gorm:"column:idxdaftar" json:"idxdaftar"`
+ TanggalOrder string `gorm:"column:tglorder" json:"tglorder"`
+ NoLab string `gorm:"column:nolab" json:"nolab"`
+ StatusRajal int `gorm:"column:statusrajal" json:"statusrajal"`
+ StatusAPS int `gorm:"column:statusaps" json:"statusaps"`
+ NamaAPS string `gorm:"column:namaaps" json:"namaaps"`
+ NoKTPAPS string `gorm:"column:noktpaps" json:"noktpaps"`
+ TempatLahirAPS string `gorm:"column:tmptlahiraps" json:"tmptlahiraps"`
+ TanggalLahirAPS string `gorm:"column:tgllahiraps" json:"tgllahiraps"`
+ JenisKelaminAPS string `gorm:"column:jeniskelaminaps" json:"jeniskelaminaps"`
+ AlamatAPS string `gorm:"column:alamataps" json:"alamataps"`
+ NamaRuang string `gorm:"column:namaruang" json:"namaruang"`
+ KelasRuang string `gorm:"column:kelasruang" json:"kelasruang"`
+ KodeTarifRajal string `gorm:"column:kodetarifrajal" json:"kodetarifrajal"`
+}