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"` +}