Author SHA256 Message Date
mirza.millahsyafiq.0912 9aeafae2e6 Merge branch 'bridging-bpjs' of https://git.rssa.top/mirza.millahsyafiq.0912/bridging-rssa into master-mirza 2024-10-22 10:56:25 +07:00
mirza.millahsyafiq.0912 ab5303e55f fix prod 2024-10-22 09:53:16 +07:00
mirza.millahsyafiq.0912 9b14389d7c fix prod temp 2024-10-22 06:44:21 +07:00
mirza.millahsyafiq.0912 31666cb9e5 fix update data 2024-10-17 15:15:41 +07:00
mirza.millahsyafiq.0912 d19ec6fe96 fix query and condition 2024-10-17 10:51:36 +07:00
mirza.millahsyafiq.0912 87d5a964ef make query cari dynamic 2024-10-17 10:44:35 +07:00
mirza.millahsyafiq.0912 cf5c47f9bb add condition and cari 2024-10-17 08:24:41 +07:00
mirza.millahsyafiq.0912 a07cf7f9c4 add log 2024-10-16 11:36:32 +07:00
mirza.millahsyafiq.0912 3d2e1fcc5f fix code 2024-10-16 09:49:37 +07:00
mirza.millahsyafiq.0912 1b14bf24c5 update get jadwal dokter 2024-10-16 08:04:28 +07:00
mirza.millahsyafiq.0912 c3ac02052f add some response 2024-10-15 14:36:48 +07:00
mirza.millahsyafiq.0912 bb1a03e828 rename json req delete 2024-10-14 11:43:28 +07:00
mirza.millahsyafiq.0912 309d4db379 fix query 2024-10-14 09:46:59 +07:00
mirza.millahsyafiq.0912 14806ddceb fix update surkon 2024-10-14 09:43:13 +07:00
mirza.millahsyafiq.0912 7467882ba6 add idxdaftar get data surkon 2024-10-14 08:58:49 +07:00
mirza.millahsyafiq.0912 7f19c7181a fix print surkon 2024-10-11 14:23:19 +07:00
mirza.millahsyafiq.0912 9fbad6352c fix surkon 2024-10-11 08:48:20 +07:00
mirza.millahsyafiq.0912 75d45811d2 fix insert and get surat kontrol 2024-10-10 12:10:38 +07:00
mirza.millahsyafiq.0912 a1f2481024 remove unused code 2024-10-10 07:39:52 +07:00
mirza.millahsyafiq.0912 c744f87501 remove unused code 2024-10-10 07:39:25 +07:00
mirza.millahsyafiq.0912 6ff4efec2c fix response postdata 2024-10-10 07:38:24 +07:00
mirza.millahsyafiq.0912 2a218dfe9e fix insert request and response 2024-10-09 10:02:43 +07:00
mirza.millahsyafiq.0912 3c3c266536 update get data surkon and jadwal dokter 2024-10-09 09:36:56 +07:00
mirza.millahsyafiq.0912 5c32ab9928 fix get data surkon 2024-10-08 15:15:35 +07:00
mirza.millahsyafiq.0912 6ee0400ba5 fix insert surkon 2024-10-08 13:29:56 +07:00
mirza.millahsyafiq.0912 82d518a5a1 fix get dokter 2024-10-07 13:59:20 +07:00
mirza.millahsyafiq.0912 83b106a733 fix get dokter 2024-10-07 13:59:02 +07:00
mirza.millahsyafiq.0912 1c76a2c1b8 fix response jadwal dokter 2024-10-07 09:50:47 +07:00
mirza.millahsyafiq.0912 30851f56ab fix response 2024-10-07 09:38:00 +07:00
mirza.millahsyafiq.0912 cff6639073 fix code get jadwal dokter 2024-10-07 08:55:22 +07:00
mirza.millahsyafiq.0912 6a4c99b062 fix code insert surkon 2024-10-03 15:24:29 +07:00
mirza.millahsyafiq.0912 da0817cfd6 fix code insert surkon 2024-10-03 13:56:22 +07:00
mirza.millahsyafiq.0912 89173e7803 fix code 2024-10-02 15:12:57 +07:00
mirza.millahsyafiq.0912 9fe51bd269 add code insert into data rencana control 2024-10-02 14:33:14 +07:00
mirza.millahsyafiq.0912 363d9d7847 update insert and get dokter 2024-10-02 13:33:51 +07:00
mirza.millahsyafiq.0912 6654bb3d28 update code 2024-10-01 09:18:44 +07:00
mirza.millahsyafiq.0912 97a6780b6b add code for get nomor surat kontrol 2024-09-30 15:22:25 +07:00
mirza.millahsyafiq.0912 5a86adfa96 insert surat kontrol 2024-09-27 14:12:00 +07:00
mirza.millahsyafiq.0912 7a508c6691 fix get dokter 2024-09-26 07:53:33 +07:00
mirza.millahsyafiq.0912 d5b06ff328 update progress get dokter 2024-09-25 15:11:33 +07:00
mirza.millahsyafiq.0912 8f606982fa get spesialis 2024-09-25 11:53:50 +07:00
29 changed files with 2189 additions and 258 deletions
+24
View File
@@ -0,0 +1,24 @@
SATUDATA_HOST=10.10.123.165
SATUDATA_USERNAME=stim
SATUDATA_PASSWORD=stim*RS54
SATUDATA_NAME=satu_db
SATUDATA_PORT=5000
BASEURL_BPJS=https://apijkn.bpjs-kesehatan.go.id/
ANTREAN_RS=antreanrs
CONS_ID=5257
USER_KEY=4cf1cbef8c008440bbe9ef9ba789e482
SECRET_KEY=1bV363512D
CONS_ID_DEV=16041
USER_KEY_DEV=467a2817fde5070f66c9a41fbeb8dc2c
SECRET_KEY_DEV=8pP3D5431E
BASEURL_BPJS_DEV=https://apijkn-dev.bpjs-kesehatan.go.id/
SURAT_KONTROL_RS=vclaim-rest
INSERT_SURAT_KONTROL=/RencanaKontrol/insert
UPDATE_SURAT_KONTROL=/RencanaKontrol/Update
DELETE_SURAT_KONTROL=/RencanaKontrol/Delete
GET_NOMOR_SURAT_KONTROL=/RencanaKontrol/noSuratKontrol/
GET_SURAT_KONTROL_SEP=/RencanaKontrol/nosep/
View File
+43 -57
View File
@@ -16,70 +16,36 @@ import (
)
var DB *gorm.DB
var localDB *gorm.DB
var SatuDataDB *gorm.DB
var SimrsDataDB *gorm.DB
var err error
func ConnectDB() {
// POSTGRE_DB_HOST=10.10.123.223
// POSTGRE_DB_PORT=5432
// POSTGRE_DB_NAME=simrsbackup
// POSTGRE_DB_USER=simtest
// POSTGRE_DB_PASS=12345
// hostDB := os.Getenv("DB_HOST")
// usernameDB := os.Getenv("DB_USERNAME")
// passwordDB := os.Getenv("DB_PASSWORD")
// dbName := os.Getenv("DB_NAME")
// portDB := os.Getenv("DB_PORT")
hostSatuData := os.Getenv("SATUDATA_HOST")
userNameSatuData := os.Getenv("SATUDATA_USERNAME")
passwordSatuData := os.Getenv("SATUDATA_PASSWORD")
dbNameSatuData := os.Getenv("SATUDATA_NAME")
portSatuData := os.Getenv("SATUDATA_PORT")
hostSimrsDB := os.Getenv("SIMRS_DB_HOST")
usernameSimrsDB := os.Getenv("SIMRS_DB_USERNAME")
passwordSimrsDB := os.Getenv("SIMRS_DB_PASSWORD")
dbNameSimrsDB := os.Getenv("SIMRS_DB_NAME")
portSimrsDB := os.Getenv("SIMRS_DB_PORT")
// local := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", hostDB, usernameDB, passwordDB, dbName, portDB)
satuData := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", hostSatuData, userNameSatuData, passwordSatuData, dbNameSatuData, portSatuData)
simrsData := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", hostSimrsDB, usernameSimrsDB, passwordSimrsDB, dbNameSimrsDB, portSimrsDB)
// localDB, err = gorm.Open(postgres.Open(local), &gorm.Config{})
// if err != nil {
// log.Fatal("Failed to connect to Satu Data database: ", err)
// } else {
// log.Println("Successfully connected to the database")
// }
SatuDataDB, err = gorm.Open(postgres.Open(satuData), &gorm.Config{})
if err != nil {
log.Fatal("Failed to connect to Satu Data database: ", err)
} else {
log.Println("Successfully connected to the database")
}
SimrsDataDB, err = gorm.Open(postgres.Open(simrsData), &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) (string, string, string, string, string) {
func SetHeader(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")
@@ -93,29 +59,49 @@ func SetHeader(cfg config.ConfigBpjs) (string, string, string, string, string) {
// to base64
X_signature := base64.StdEncoding.EncodeToString(hash.Sum(nil))
return cfg.Cons_id, cfg.Secret_key, cfg.User_key, fmt.Sprint(tstamp), X_signature
header := &config.Header{
ConsID: cfg.Cons_id,
SecretKey: cfg.Secret_key,
UserKey: cfg.User_key,
TimeStamp: fmt.Sprint(tstamp),
XSignature: X_signature,
}
return header
}
// func SetHeaderSatusehat(cfg config.ConfigSatuSehat) (string, string, string, string, string) {
func SetHeaderDev(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()
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")
// cfg.User_key = os.Getenv("USER_KEY")
// cfg.Secret_key = os.Getenv("SECRET_KEY")
cfg.Cons_id = os.Getenv("CONS_ID_DEV")
cfg.User_key = os.Getenv("USER_KEY_DEV")
cfg.Secret_key = os.Getenv("SECRET_KEY_DEV")
// secret := []byte(cfg.Secret_key)
// message := []byte(cfg.Cons_id + "&" + fmt.Sprint(tstamp))
// 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))
// cfg.Cons_id = os.Getenv("CONS_ID")
// cfg.User_key = os.Getenv("USER_KEY")
// cfg.Secret_key = os.Getenv("SECRET_KEY")
// return cfg.Cons_id, cfg.Secret_key, cfg.User_key, fmt.Sprint(tstamp), X_signature
secret := []byte(cfg.Secret_key)
message := []byte(cfg.Cons_id + "&" + fmt.Sprint(tstamp))
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(tstamp),
XSignature: X_signature,
}
return header
}
+30
View File
@@ -40,3 +40,33 @@ func GetDokter() ([]dokter.DaftarDokterRes, error) {
log.Println("Data Pegawai: ", res)
return res, nil
}
func GetNamaLengkapDokter(idDokter []string) ([]dokter.NamaLengkap, error) {
var namaDokter []dokter.NamaLengkap
result := config.SatuDataDB.Debug().Raw(`select dp.id,
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" ,
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,
dp."HFIS_code"
from "data_pegawai" dp
left join data_ktp dk on dp."KTP" = dk.id
WHERE dp.id in ?`, idDokter).Find(&namaDokter)
if result.Error != nil {
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
log.Printf("Error get data : %v", result.Error)
return nil, result.Error
}
log.Printf("Data kosong: %v", result.Error)
return namaDokter, nil
}
return namaDokter, nil
}
+73 -4
View File
@@ -9,10 +9,79 @@ import (
"github.com/google/uuid"
)
func GetJadwalDokterByDPJP(dpjp string) (string, error) {
var id string
errSelect := config.SatuDataDB.Debug().Raw(`select "id" from "data_pegawai" where "Code_dpjp" = ?`, dpjp).First(&id).Error
if errSelect != nil {
log.Printf("Failed get data : %v", errSelect)
return "", errSelect
}
return id, nil
}
func GetJadwalHariDokterBySpesialis(id string) ([]jadwal_dokter.JadwalDokterSatuData, error) {
var hari []jadwal_dokter.JadwalDokterSatuData
errSelect := config.SatuDataDB.Debug().Raw(`select * from "daftar_jadwal_dokter" where "Dokter" = ? order by "id"`, id).Scan(&hari).Error
if errSelect != nil {
log.Printf("Failed get data : %v", errSelect)
return nil, errSelect
}
return hari, nil
}
func GetJadwalDokterByIDDokter(hari string) ([]string, error) {
var spesialis []string
errSelect := config.SatuDataDB.Debug().Raw(`select distinct "Spesialis" from "daftar_jadwal_dokter" where "Nama_hari" = ? order by "Spesialis"`, hari).Scan(&spesialis).Error
if errSelect != nil {
log.Printf("Failed get data : %v", errSelect)
return nil, errSelect
}
return spesialis, nil
}
func GetJadwalDokterByDate(hari string) ([]string, error) {
var spesialis []string
errSelect := config.SatuDataDB.Debug().Raw(`select distinct "Spesialis" from "daftar_jadwal_dokter" where "Nama_hari" = ? order by "Spesialis"`, hari).Scan(&spesialis).Error
if errSelect != nil {
log.Printf("Failed get data : %v", errSelect)
return nil, errSelect
}
return spesialis, nil
}
func GetJadwalSubspesialisByDate(hari string) ([]int, error) {
var subspesialis []int
errSelect := config.SatuDataDB.Debug().Raw(`select distinct "Sub_spesialis" from "daftar_jadwal_dokter" where "Nama_hari" = ? order by "Sub_spesialis"`, hari).Scan(&subspesialis).Error
if errSelect != nil {
log.Printf("Failed get data : %v", errSelect)
return nil, errSelect
}
return subspesialis, nil
}
func GetJadwalDokterBySpesialis(hari string, spesialis string) ([]string, error) {
var listDokter []string
errSelect := config.SatuDataDB.Debug().Raw(`select "Dokter" from "daftar_jadwal_dokter" where "Nama_hari" = ? and "Spesialis" = ? order by "Spesialis"`, hari, spesialis).Scan(&listDokter).Error
if errSelect != nil {
log.Printf("Failed get data : %v", errSelect)
return nil, errSelect
}
return listDokter, nil
}
func GetJadwalDokterBySubpesialis(hari string, subspesialis string) ([]string, error) {
var listDokter []string
errSelect := config.SatuDataDB.Debug().Raw(`select "Dokter" from "daftar_jadwal_dokter" where "Nama_hari" = ? and "Sub_spesialis" = ? order by "Sub_spesialis"`, hari, subspesialis).Scan(&listDokter).Error
if errSelect != nil {
log.Printf("Failed get data : %v", errSelect)
return nil, errSelect
}
return listDokter, nil
}
func DeleteJadwalDokter() error {
err := config.SatuDataDB.Debug().Exec(`truncate table "daftar_jadwal_dokter"`).Error
if err != nil {
log.Fatalf("Failed truncate data : %v", err)
log.Printf("Failed truncate data : %v", err)
return err
}
log.Println("Success truncate data")
@@ -22,7 +91,7 @@ func DeleteJadwalDokter() error {
func DeleteJadwalDokterTemp() error {
err := config.SatuDataDB.Debug().Exec(`truncate table "daftar_jadwal_dokter_temp"`).Error
if err != nil {
log.Fatalf("Failed truncate data : %v", err)
log.Printf("Failed truncate data : %v", err)
return err
}
log.Println("Success truncate data")
@@ -32,7 +101,7 @@ func DeleteJadwalDokterTemp() error {
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.Fatalf("Failed insert data : %v", err)
log.Printf("Failed insert data : %v", err)
return err
}
log.Println("Success insert data")
@@ -45,7 +114,7 @@ func InsertJadwalDokterTemp(reqInsert *jadwal_dokter.JadwalDokterSatuData) error
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.Fatalf("Failed insert data : %v", err)
log.Printf("Failed insert data : %v", err)
return err
}
log.Println("Success insert data")
+17 -2
View File
@@ -15,10 +15,25 @@ func GetSpesialis() ([]dokter.DaftarSpesialis, error) {
result := config.SatuDataDB.Debug().Raw(`select * from "daftar_spesialis"`).Find(&daftarSpesialis)
if result.Error != nil {
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
log.Fatalf("Error get data : %v", result.Error)
log.Printf("Error get data : %v", result.Error)
return nil, result.Error
}
log.Fatalf("Data kosong: %v", result.Error)
log.Printf("Data kosong: %v", result.Error)
return daftarSpesialis, nil
}
return daftarSpesialis, nil
}
func GetSpesialisByID(idSpesialis []string) ([]dokter.DaftarSpesialis, error) {
var daftarSpesialis []dokter.DaftarSpesialis
result := config.SatuDataDB.Debug().Raw(`select * from "daftar_spesialis" where "id" in ?`, idSpesialis).Find(&daftarSpesialis)
if result.Error != nil {
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
log.Printf("Error get data : %v", result.Error)
return nil, result.Error
}
log.Printf("Data kosong: %v", result.Error)
return daftarSpesialis, nil
}
+42 -2
View File
@@ -15,10 +15,50 @@ func GetSubspesialis() ([]dokter.DaftarSubspesialis, error) {
result := config.SatuDataDB.Debug().Raw(`select * from "daftar_subspesialis"`).Find(&daftarSubspesialis)
if result.Error != nil {
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
log.Fatalf("Error get data : %v", result.Error)
log.Printf("Error get data : %v", result.Error)
return nil, result.Error
}
log.Fatalf("Data kosong: %v", result.Error)
log.Printf("Data kosong: %v", result.Error)
return daftarSubspesialis, nil
}
log.Println(daftarSubspesialis)
return daftarSubspesialis, nil
}
func GetSubspesialisByID(idSubspesialis int) (*dokter.DaftarSubspesialis, error) {
var daftarSubspesialis *dokter.DaftarSubspesialis
result := config.SatuDataDB.Debug().Raw(`select dss.*, ds."Spesialis"
from "daftar_subspesialis" dss
left join "daftar_spesialis" ds on ds."id" = dss."FK_daftar_spesialis_ID"
where dss.id = ?`, idSubspesialis).First(&daftarSubspesialis)
if result.Error != nil {
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
log.Printf("Error get data : %v", result.Error)
return nil, result.Error
}
log.Printf("Data kosong: %v", result.Error)
return daftarSubspesialis, nil
}
log.Println(daftarSubspesialis)
return daftarSubspesialis, nil
}
func GetSubspesialisByIDBatch(idSubspesialis []int) ([]dokter.DaftarSubspesialis, error) {
var daftarSubspesialis []dokter.DaftarSubspesialis
result := config.SatuDataDB.Debug().Raw(`select dss.*, ds."Spesialis"
from "daftar_subspesialis" dss
left join "daftar_spesialis" ds on ds."id" = dss."FK_daftar_spesialis_ID"
where dss.id in ?
order by dss."id"`, idSubspesialis).Find(&daftarSubspesialis)
if result.Error != nil {
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
log.Printf("Error get data : %v", result.Error)
return nil, result.Error
}
log.Printf("Data kosong: %v", result.Error)
return daftarSubspesialis, nil
}
@@ -0,0 +1,16 @@
package suratkontrol
import (
"bridging-rssa/config"
sk "bridging-rssa/models/bpjs/surat_kontrol"
"log"
)
func UpdateKunjunganPasien(req sk.RequestInsertRencanaKontrol) error {
err := config.SatuDataDB.Debug().Exec(`update "data_kunjungan_pasien" set "Nomor_sep" = ?, "Diagnosis_akhir_keluar" = ?, "Display_diagnosis_akhir_keluar" = ?, "Diagnosis_primer_utama" = ?, "Display_diagnosis_primer_utama" = ? where "IDXDAFTAR" = ?`, req.NoSEP, req.KodeDiagnosa, req.NamaDiagnosa, req.KodeDiagnosa, req.NamaDiagnosa, req.IDXDaftar).Error
if err != nil {
log.Println(err)
return err
}
return nil
}
@@ -0,0 +1,255 @@
package suratkontrol
import (
"bridging-rssa/config"
suratkontrol "bridging-rssa/models/bpjs/surat_kontrol"
"errors"
"log"
"gorm.io/gorm"
)
func GetDataKunjunganPasien(idxdaftar string) (*suratkontrol.KunjunganPasien, error) {
var kunjunganPasien *suratkontrol.KunjunganPasien
err := config.SatuDataDB.Debug().Raw(`select dkp."id", dkp."IDXDAFTAR" as idxdaftar, dkp."Nomor_sep" as nomorsep,
dlr."Nama" as namaklinik, dlr."Id_location_simgos" as idkliniksimgos, dlr."Kode_hfis_bpjs" as kodehfisklinik,
dk."Nama_lengkap" as namadokter,
dp."KDDOKTER" as kodedokter, dp."HFIS_code" as kodehfisdokter,
dsu."Kode" as kodesubspesialis, dsu."Subspesialis" as subspesialis,
ds."Spesialis" as spesialis,
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,
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,
dkp."Ruangan" as ruangan,
dkp."DPJP" as id_dokter
from data_kunjungan_pasien dkp
left join daftar_lokasi_ruang dlr on dkp."Ruangan" = dlr.id
left join data_pegawai dp on dkp."DPJP" = dp.id
left join data_ktp dk on dp."KTP" = dk.id
left join daftar_subspesialis dsu on dp."Subspesialis" = dsu.id
left join daftar_spesialis ds on dsu."FK_daftar_spesialis_ID" = ds.id
where dkp."IDXDAFTAR" = ?`, 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 InsertDataSuratKontrol(reqInsert *suratkontrol.DataSuratKontrol) error {
log.Println("Req Insert Database : ", reqInsert)
insertQuery := `insert into "data_surat_kontrol" ("id", "date_created", "Tanggal_cetak_surat_kontrol", "Tanggal_rencana_kontrol",
"Nomor_surat_kontrol", "Kunjungan_pasien", "Ruangan_surat_kontrol", "DPJP_surat_kontrol", "Status_surat_kontrol",
"User_created_surat_kontrol", "Tipe_surat_kontrol", "User_updated_surat_kontrol")
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
err := config.SatuDataDB.Debug().Exec(insertQuery,
reqInsert.ID,
reqInsert.DateCreated,
reqInsert.TglCetakSurKon,
reqInsert.TglRencanaKontrol,
reqInsert.NomorSurKon,
reqInsert.KunjunganPasien,
reqInsert.RuanganSurKon,
reqInsert.DPJPSurKon,
reqInsert.StatusSurKon,
reqInsert.UserCreatedSurKon,
reqInsert.TipeSurKon,
reqInsert.UserUpdatedSurKon,
).Error
if err != nil {
log.Println(err)
return err
}
return nil
}
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",
(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",
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'`).Scan(&dataSurKon).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
errMsg := errors.New("DPJP anda belum ada subspesialis")
log.Println(errMsg)
return nil, errMsg
}
log.Println(err)
return nil, err
}
log.Println("Data Surat Kontrol : ", dataSurKon)
return dataSurKon, nil
}
func GetDataSuratKontrolByID(idxdaftar string) (*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",
(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",
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 dkp2."IDXDAFTAR" = ?`, idxdaftar).First(&dataSurKon).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
errMsg := errors.New("DPJP anda belum ada subspesialis")
log.Println(errMsg)
return nil, errMsg
}
log.Println(err)
return nil, err
}
log.Println("Data Surat Kontrol : ", dataSurKon)
return dataSurKon, nil
}
func UpdateDataSuratKontrol(reqUpdate *suratkontrol.DataSuratKontrol) error {
err := config.SatuDataDB.Debug().Exec(`update "data_surat_kontrol" set "date_updated" = ?, "Status_surat_kontrol" = ?, "User_updated_surat_kontrol" = ? where "id" = ?`, reqUpdate.DateUpdated, reqUpdate.StatusSurKon, reqUpdate.UserUpdatedSurKon, reqUpdate.ID).Error
if err != nil {
log.Println(err)
return err
}
return nil
}
func GetIDXDaftarBySurKon(idSurKon string) (string, error) {
var idxDaftar string
err := config.SatuDataDB.Debug().Raw(`select dkp."IDXDAFTAR"
from "data_surat_kontrol" dsk
left join "data_kunjungan_pasien" dkp on dkp."id" = dsk."Kunjungan_pasien"
where dsk."id" = ?`, idSurKon).First(&idxDaftar).Error
if err != nil {
log.Println(err)
return "", err
}
return idxDaftar, err
}
func GetAllDataSuratKontrol(idSurKon string) (*suratkontrol.DataSuratKontrol, error) {
var dataSurKon *suratkontrol.DataSuratKontrol
err := config.SatuDataDB.Debug().Raw(`select * from "data_surat_kontrol" where "id" = ?`, idSurKon).First(&dataSurKon).Error
if err != nil {
log.Println(err)
return nil, err
}
return dataSurKon, nil
}
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 ?`
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",
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' `
querySelect += query
err := config.SatuDataDB.Debug().Raw(querySelect, args...).Find(&dataSurKon).Error
if err != nil {
log.Println(err)
return nil, err
}
log.Println("Data Surat Kontrol : ", dataSurKon)
return dataSurKon, nil
}
+6 -9
View File
@@ -12,11 +12,11 @@ services:
- .:/app
environment:
# DATABASE SIMRS V3.0
- SIMRS_DB_HOST=10.10.123.223
- SIMRS_DB_NAME=simrsbackup
- SIMRS_DB_USERNAME=simtest
- SIMRS_DB_PASSWORD=12345
- SIMRS_DB_PORT=5432
- POSTGRE_DB_HOST=10.10.123.223
- POSTGRE_DB_PORT=5432
- POSTGRE_DB_NAME=simrsbackup
- POSTGRE_DB_USER=simtest
- POSTGRE_DB_PASS=12345
# DATABASE SATU DATA
- SATUDATA_HOST=10.10.123.165
- SATUDATA_USERNAME=stim
@@ -35,7 +35,4 @@ services:
# BPJS PCARE
- PCARE_RS=pcare-rest
# BPJS ICARE
- PCARE_APLICARE=ihs
# SATUSEHAT
- OR=10.10.123.165
- PCARE_APLICARE=ihs
+29 -1
View File
@@ -1,6 +1,9 @@
package utils
import "log"
import (
"log"
"strings"
)
// Function to convert Kode to ID
func KodeToIDConverter(kode string, kodeDokter map[string]int) int {
@@ -15,3 +18,28 @@ func HfisCodeToIDConverter(kode int, kodeDokter map[int]string) string {
id := kodeDokter[kode]
return id
}
func ConvertDay(day string) string {
dayTranslations := map[string]string{
"sunday": "MINGGU",
"monday": "SENIN",
"tuesday": "SELASA",
"wednesday": "RABU",
"thursday": "KAMIS",
"friday": "JUMAT",
"saturday": "SABTU",
}
dayLower := strings.ToLower(day)
if translatedDay, exists := dayTranslations[dayLower]; exists {
return translatedDay
}
return day
}
func ReplaceGelar(gelar string) string {
gelar = strings.ReplaceAll(gelar, "{", "")
gelar = strings.ReplaceAll(gelar, "}", "")
gelar = strings.ReplaceAll(gelar, ",", " ")
return gelar
}
View File
BIN
View File
Binary file not shown.
+1
View File
@@ -23,6 +23,7 @@ require (
github.com/cloudwego/iasm v0.2.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/gabriel-vasile/mimetype v1.4.5 // indirect
github.com/gin-contrib/cors v1.7.2 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
github.com/go-openapi/jsonreference v0.21.0 // indirect
+2
View File
@@ -19,6 +19,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4=
github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4=
github.com/gin-contrib/cors v1.7.2 h1:oLDHxdg8W/XDoN/8zamqk/Drgt4oVZDvaV0YmvVICQw=
github.com/gin-contrib/cors v1.7.2/go.mod h1:SUJVARKgQ40dmrzgXEVxj2m7Ig1v1qIboQkPDTQ9t2E=
github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4=
github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
+214 -14
View File
@@ -6,10 +6,12 @@ import (
"bridging-rssa/docs/utils"
"bridging-rssa/models/bpjs/jadwal_dokter"
"bridging-rssa/models/config"
dktr "bridging-rssa/models/dokter"
"log"
"net/http"
"os"
"strconv"
"strings"
"time"
"github.com/gin-gonic/gin"
@@ -20,6 +22,18 @@ func GetJadwalDokter(c *gin.Context) {
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)
@@ -63,26 +77,14 @@ func GetJadwalDokter(c *gin.Context) {
listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
}
conf := config.ConfigBpjs{}
cons_id, secretKey, User_key, tstamp, X_signature := cfg.SetHeader(conf)
headers := map[string]string{
"X-cons-id": cons_id,
"X-timestamp": tstamp,
"X-signature": X_signature,
"user_key": User_key,
}
var res *[]jadwal_dokter.ListDokter
log.Println("Headers : ", headers)
// var reqSelect *jadwal_dokter.JadwalDokterSatuData
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, secretKey, cons_id, User_key, tstamp, X_signature, kdPoly, tanggal, headers)
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)
@@ -122,6 +124,7 @@ func GetJadwalDokter(c *gin.Context) {
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)
@@ -129,3 +132,200 @@ func GetJadwalDokter(c *gin.Context) {
}
c.JSON(http.StatusOK, res)
}
func GetDokterByDPJP(c *gin.Context) {
dpjp := c.Param("dpjp")
idDokter, err := dokter.GetJadwalDokterByDPJP(dpjp)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
return
}
listHari, err := dokter.GetJadwalHariDokterBySpesialis(idDokter)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
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 {
c.JSON(http.StatusInternalServerError, err)
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.Kode,
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)
}
+8 -10
View File
@@ -3,6 +3,7 @@ package jadwal_dokter
import (
"bridging-rssa/docs"
"bridging-rssa/models/bpjs/jadwal_dokter"
"bridging-rssa/models/config"
"encoding/json"
"fmt"
"io"
@@ -10,13 +11,13 @@ import (
"net/http"
)
func JadwalDokterGetResponse(url string, secretKey string, cons_id string, User_keys string, tstamp string, X_signature string, 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.ListDokter, error) {
param := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggal
url += param
log.Println("URL", url)
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Fatalf("Error creating request: %v", err)
log.Printf("Error creating request: %v", err)
}
for key, value := range headers {
@@ -27,11 +28,11 @@ func JadwalDokterGetResponse(url string, secretKey string, cons_id string, User_
client := http.Client{}
response, err := client.Do(req)
if err != nil {
log.Fatalf("Error making external API request: %v", err)
log.Printf("Error making external API request: %v", err)
}
log.Println("RESPONSE: ", response)
key := cons_id + secretKey + tstamp
key := header.ConsID + header.SecretKey + header.TimeStamp
res, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
@@ -40,7 +41,7 @@ func JadwalDokterGetResponse(url string, secretKey string, cons_id string, User_
var jadwalDokterRaw jadwal_dokter.JadwalDokterRaw
err = json.Unmarshal([]byte(res), &jadwalDokterRaw)
if err != nil {
log.Fatalf("Error Unmarshaling: %v", err)
log.Printf("Error Unmarshaling: %v", err)
}
if jadwalDokterRaw.MetaData.Code == 201 {
@@ -50,19 +51,16 @@ func JadwalDokterGetResponse(url string, secretKey string, cons_id string, User_
dataResp, err := docs.StringDecrypt(key, jadwalDokterRaw.Response)
if err != nil {
log.Fatalf("Error Decrypt: %v", err)
log.Println("res: ", dataResp)
log.Printf("Error Decrypt: %v", err)
}
var listDokter []jadwal_dokter.ListDokter
log.Println("dataresp: ", dataResp)
// err = mapstructure.Decode(dataResp, &listDokter)
err = json.Unmarshal([]byte(dataResp), &listDokter)
if err != nil {
log.Fatalf("Error Decode: %v", err)
log.Printf("Error Decode: %v", err)
}
log.Println("res: ", &listDokter)
+363
View File
@@ -0,0 +1,363 @@
package suratkontrol
import (
"bridging-rssa/docs"
suratkontrol "bridging-rssa/models/bpjs/surat_kontrol"
"bridging-rssa/models/config"
"bytes"
"encoding/json"
"errors"
"fmt"
"io"
"log"
"net/http"
"strings"
"time"
)
func PostData(url string, header *config.Header, headers map[string]string, request *suratkontrol.RequestHeaderRencanaKontrol) (*suratkontrol.Response, error) {
log.Println("URL", url)
reqMarshall, err := json.Marshal(request)
if err != nil {
log.Printf("Error json marshal: %v", err)
}
log.Println("REQUEST: ", string(reqMarshall))
req, err := http.NewRequest("POST", url, bytes.NewReader(reqMarshall))
if err != nil {
log.Printf("Error creating request: %v", err)
return nil, err
}
for key, value := range headers {
req.Header.Set(key, value)
}
log.Println("REQ", req.Header)
client := http.Client{}
response, err := client.Do(req)
if err != nil {
log.Printf("Error making external API request: %v", err)
return nil, err
}
log.Println("RESPONSE: ", response)
key := header.ConsID + header.SecretKey + header.TimeStamp
res, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
return nil, err
}
log.Println("Res:", string(res))
var resSuratKontrolRaw suratkontrol.ResponseRaw
err = json.Unmarshal([]byte(string(res)), &resSuratKontrolRaw)
if err != nil {
log.Printf("Error Unmarshaling: %v", err)
return nil, err
}
log.Println("ResponseRaw : ", resSuratKontrolRaw)
responses := &suratkontrol.Response{}
if resSuratKontrolRaw.MetaData.Code != "200" {
errMsg := errors.New(resSuratKontrolRaw.MetaData.Message)
log.Printf("error : %v", errMsg)
responses.MetaData.Code = resSuratKontrolRaw.MetaData.Code
responses.MetaData.Message = resSuratKontrolRaw.MetaData.Message
log.Println("responses: ", responses)
return responses, errMsg
}
dataResp, err := docs.StringDecrypt(key, resSuratKontrolRaw.Response)
if err != nil {
log.Printf("Error Decrypt: %v", err)
log.Println("res: ", dataResp)
return nil, err
}
var resSuratKontrol suratkontrol.ResponseSuratKontrol
log.Println("dataresp: ", dataResp)
err = json.Unmarshal([]byte(dataResp), &resSuratKontrol)
if err != nil {
log.Printf("Error Decode: %v", err)
return nil, err
}
responses = &suratkontrol.Response{
MetaData: resSuratKontrolRaw.MetaData,
Response: resSuratKontrol,
}
return responses, nil
}
func ResponseUpdateSuratKontrol(url string, header *config.Header, headers map[string]string, request *suratkontrol.RequestHeaderRencanaKontrol) (*suratkontrol.Response, error) {
log.Println("URL", url)
reqMarshall, err := json.Marshal(request)
if err != nil {
log.Printf("Error json marshal: %v", err)
}
log.Println("REQUEST: ", string(reqMarshall))
req, err := http.NewRequest("PUT", url, bytes.NewReader(reqMarshall))
if err != nil {
log.Printf("Error creating request: %v", err)
return nil, err
}
for key, value := range headers {
req.Header.Set(key, value)
}
log.Println("REQ", req.Header)
client := http.Client{
Timeout: 10 * time.Second,
}
responses := &suratkontrol.Response{}
response, err := client.Do(req)
if err != nil {
if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") {
errMsg := errors.New("Gagal Proses Selama 10 Detik, Silahkan Coba Lagi")
log.Printf("error : %v", errMsg)
responses.MetaData.Message = errMsg.Error()
log.Println("responses: ", responses)
return responses, err
}
log.Printf("Error making external API request: %v", err)
return responses, err
}
log.Println("RESPONSE: ", response)
if response.StatusCode == http.StatusGatewayTimeout { // 504
errMsg := errors.New("Gagal Proses Selama 10 Detik, Silahkan Coba Lagi")
log.Printf("error : %v", errMsg)
responses.MetaData.Code = "504"
responses.MetaData.Message = errMsg.Error()
log.Println("responses: ", responses)
return responses, err
}
log.Println("RESPONSE: ", response)
key := header.ConsID + header.SecretKey + header.TimeStamp
res, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
return nil, err
}
var resSuratKontrolRaw suratkontrol.ResponseRawUpper
err = json.Unmarshal([]byte(res), &resSuratKontrolRaw)
if err != nil {
log.Printf("Error Unmarshaling: %v", err)
return nil, err
}
if resSuratKontrolRaw.MetaData.Code != "200" {
errMsg := errors.New(resSuratKontrolRaw.MetaData.Message)
log.Printf("error : %v", errMsg)
responses.MetaData.Code = resSuratKontrolRaw.MetaData.Code
responses.MetaData.Message = resSuratKontrolRaw.MetaData.Message
log.Println("responses: ", responses)
return responses, errMsg
}
dataResp, err := docs.StringDecrypt(key, resSuratKontrolRaw.Response)
if err != nil {
log.Printf("Error Decrypt: %v", err)
log.Println("res: ", dataResp)
return nil, err
}
var resSuratKontrol *suratkontrol.ResponseSuratKontrol
log.Println("dataresp: ", dataResp)
err = json.Unmarshal([]byte(dataResp), &resSuratKontrol)
if err != nil {
log.Printf("Error Decode: %v", err)
return nil, err
}
responses = &suratkontrol.Response{
MetaData: resSuratKontrolRaw.MetaData,
Response: *resSuratKontrol,
}
return responses, nil
}
func ResponseDeleteSuratKontrol(url string, header *config.Header, headers map[string]string, request *suratkontrol.RequestHeaderRencanaKontrol) (*suratkontrol.Response, error) {
log.Println("URL", url)
reqMarshall, err := json.Marshal(request)
if err != nil {
log.Printf("Error json marshal: %v", err)
}
log.Println("REQUEST: ", string(reqMarshall))
req, err := http.NewRequest("DELETE", url, bytes.NewReader(reqMarshall))
if err != nil {
log.Printf("Error creating request: %v", err)
return nil, err
}
for key, value := range headers {
req.Header.Set(key, value)
}
log.Println("REQ", req.Header)
client := http.Client{}
response, err := client.Do(req)
if err != nil {
log.Printf("Error making external API request: %v", err)
return nil, err
}
log.Println("RESPONSE: ", response)
res, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
return nil, err
}
var resSuratKontrolRaw suratkontrol.ResponseRawUpper
err = json.Unmarshal([]byte(res), &resSuratKontrolRaw)
if err != nil {
log.Printf("Error Unmarshaling: %v", err)
return nil, err
}
responses := &suratkontrol.Response{
MetaData: resSuratKontrolRaw.MetaData,
}
log.Println("res: ", responses)
return responses, nil
}
func ResponseGetNomorSuratKontrol(url string, header *config.Header, headers map[string]string) (*suratkontrol.ResponseGetSuratKontrol, 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 {
log.Println(err)
}
log.Println("res: ", string(res))
var resNoSuratKontrolRaw suratkontrol.ResponseRawUpper
err = json.Unmarshal([]byte(string(res)), &resNoSuratKontrolRaw)
if err != nil {
log.Printf("Error Unmarshaling: %v", err)
return nil, err
}
dataResp, err := docs.StringDecrypt(key, resNoSuratKontrolRaw.Response)
if err != nil {
log.Printf("Error Decrypt: %v", err)
return nil, err
}
log.Println("dataresp: ", dataResp)
var responseNoSuratKontrol suratkontrol.ResponseNomorSuratKontrol
err = json.Unmarshal([]byte(dataResp), &responseNoSuratKontrol)
if err != nil {
log.Printf("Error Decode: %v", err)
return nil, err
}
responses := &suratkontrol.ResponseGetSuratKontrol{
MetaData: resNoSuratKontrolRaw.MetaData,
Response: responseNoSuratKontrol,
}
log.Println("res: ", responses)
return responses, nil
}
func ResponseGetSuratKontrolBySEP(url string, header *config.Header, headers map[string]string) (*suratkontrol.ResponseGetSuratKontrolBySEP, 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 {
log.Println(err)
}
var resSurKonSEP suratkontrol.ResponseRawUpper
err = json.Unmarshal([]byte(string(res)), &resSurKonSEP)
if err != nil {
log.Printf("Error Unmarshaling: %v", err)
return nil, err
}
dataResp, err := docs.StringDecrypt(key, resSurKonSEP.Response)
if err != nil {
log.Printf("Error Decrypt: %v", err)
return nil, err
}
var responseNoSuratKontrol suratkontrol.ResponseSuratKontrolBySEP
log.Println("dataresp: ", dataResp)
err = json.Unmarshal([]byte(dataResp), &responseNoSuratKontrol)
if err != nil {
log.Printf("Error Decode: %v", err)
return nil, err
}
log.Println("res: ", resSurKonSEP)
responses := &suratkontrol.ResponseGetSuratKontrolBySEP{
MetaData: resSurKonSEP.MetaData,
Response: responseNoSuratKontrol,
}
return responses, nil
}
@@ -0,0 +1,658 @@
package suratkontrol
import (
cfg "bridging-rssa/config"
suratkontrol "bridging-rssa/database/satu_data/surat_kontrol"
"bridging-rssa/docs/utils"
sk "bridging-rssa/models/bpjs/surat_kontrol"
"bridging-rssa/models/config"
"log"
"net/http"
"os"
"strings"
"time"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
)
func InsertSuratKontrol(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
param := os.Getenv("INSERT_SURAT_KONTROL")
url := baseUrl + endpoint + param
timeNow := time.Now().Format("2006-01-02 15:04:05")
var req sk.RequestInsertRencanaKontrol
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
log.Println("Request: ", req)
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,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
tipeSurKon := "1"
kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
uuid := uuid.New().String()
if req.NoSEP == "" {
tipeSurKon = "0"
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: req.TglRencanaKontrol,
NomorSurKon: "", //TODO How to get Nomor SurKon
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: kunjunganPasien.Ruangan,
DPJPSurKon: req.IDDokter,
StatusSurKon: 1, // First Insert status always set to 1
UserCreatedSurKon: req.User,
TipeSurKon: tipeSurKon,
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
c.JSON(http.StatusOK, nil)
return
}
reqSuratKontrol := &sk.RequestHeaderRencanaKontrol{
Request: &sk.ReqInsertRencanaKontrol{
NoSEP: req.NoSEP,
KodeDokter: req.KodeHFIS,
PoliKontrol: req.KodePoli,
TglRencanaKontrol: req.TglRencanaKontrol,
User: req.User,
},
}
res, err := PostData(url, header, headers, reqSuratKontrol)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, res.MetaData)
return
}
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NomorSurKon: res.Response.NoSuratKontrol,
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: kunjunganPasien.Ruangan,
DPJPSurKon: req.IDDokter,
StatusSurKon: 1, // First Insert status always set to 1
UserCreatedSurKon: req.User,
TipeSurKon: tipeSurKon,
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
if req.KodeDiagnosa == "" || req.NamaDiagnosa == "" {
diagnosa := strings.Split(res.Response.NamaDiagnosa, " - ")
req.KodeDiagnosa = diagnosa[0]
req.NamaDiagnosa = diagnosa[1]
}
err = suratkontrol.UpdateKunjunganPasien(req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
response := &sk.ResponseInsertSuratKontrol{
MetaData: res.MetaData,
Response: sk.ResponseData{
NoSuratKontrol: res.Response.NoSuratKontrol,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NamaDokter: res.Response.NamaDokter,
NoKartu: res.Response.NoKartu,
Nama: res.Response.Nama,
Kelamin: res.Response.Kelamin,
TglLahir: res.Response.TglLahir,
NamaDiagnosa: res.Response.NamaDiagnosa,
SubSpesialis: req.Subspesialis,
},
}
log.Println("Response: ", response)
c.JSON(http.StatusOK, response)
}
func UpdateSuratKontrol(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
param := os.Getenv("UPDATE_SURAT_KONTROL")
url := baseUrl + endpoint + param
var req sk.RequestUpdateRencanaKontrol
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
log.Println("Request: ", req)
timeNow := time.Now().Format("2006-01-02 15:04:05")
kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
uuid := uuid.New().String()
tipeSurKon := "1"
if req.NoSEP == "" {
tipeSurKon = "0"
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: req.TglRencanaKontrol,
NomorSurKon: "", //TODO How to get Nomor SurKon
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: kunjunganPasien.Ruangan,
DPJPSurKon: req.IDDokter,
StatusSurKon: 1, // First Insert status always set to 1
TipeSurKon: tipeSurKon,
UserUpdatedSurKon: req.User,
}
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDSurKon,
StatusSurKon: 2,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
c.JSON(http.StatusOK, nil)
return
}
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,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
reqSuratKontrol := &sk.RequestHeaderRencanaKontrol{
Request: &sk.ReqUpdateRencanaKontrol{
NoSuratKontrol: req.NoSuratKontrol,
NoSEP: req.NoSEP,
KodeDokter: req.KodeHFIS,
PoliKontrol: req.KodePoli,
TglRencanaKontrol: req.TglRencanaKontrol,
User: req.User,
},
}
res, err := ResponseUpdateSuratKontrol(url, header, headers, reqSuratKontrol)
if err != nil {
if res.MetaData.Code == "504" {
log.Println(err)
c.JSON(http.StatusGatewayTimeout, res.MetaData)
return
}
log.Println(err)
c.JSON(http.StatusInternalServerError, res.MetaData)
return
}
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDSurKon,
StatusSurKon: 2,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
reqInsert := &sk.DataSuratKontrol{
ID: uuid,
DateCreated: timeNow,
TglCetakSurKon: timeNow,
TglRencanaKontrol: res.Response.TglRencanaKontrol,
NomorSurKon: res.Response.NoSuratKontrol,
KunjunganPasien: kunjunganPasien.ID,
RuanganSurKon: kunjunganPasien.Ruangan,
DPJPSurKon: req.IDDokter,
StatusSurKon: 1, // Insert status always set to 1
TipeSurKon: tipeSurKon,
UserUpdatedSurKon: req.User,
}
if reqInsert.DPJPSurKon == "" {
reqInsert.DPJPSurKon = kunjunganPasien.DPJP
}
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
c.JSON(http.StatusOK, res)
}
func DeleteSuratKontrol(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
param := os.Getenv("DELETE_SURAT_KONTROL")
url := baseUrl + endpoint + param
var req sk.ReqDeleteRencanaKontrol
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
log.Println("REQUEST: ", req)
timeNow := time.Now().Format("2006-01-02 15:04:05")
if req.NomorSurKon == "" {
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDDataSurKon,
StatusSurKon: 0,
UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
res := &sk.MetadataString{
Code: "200",
Message: "Berhasil Hapus Data",
}
c.JSON(http.StatusOK, res)
}
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,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
request := &sk.RequestHeaderRencanaKontrol{
Request: &sk.TSuratKontrol{
RequestDelete: sk.RequestDeleteRencanaKontrol{
NoSuratKontrol: req.NomorSurKon,
User: req.User,
},
},
}
res, err := ResponseDeleteSuratKontrol(url, header, headers, request)
if err != nil {
log.Printf("Error making external API request: %v", err)
c.JSON(http.StatusInternalServerError, err)
return
}
reqUpdate := &sk.DataSuratKontrol{
DateUpdated: timeNow,
ID: req.IDDataSurKon,
StatusSurKon: 0,
UserUpdatedSurKon: req.User,
}
err = suratkontrol.UpdateDataSuratKontrol(reqUpdate)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
c.JSON(http.StatusOK, res)
}
func GetNomorSuratKontrol(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
param := os.Getenv("GET_NOMOR_SURAT_KONTROL")
noSurat := c.Param("noSuratKontrol")
url := baseUrl + endpoint + param + noSurat
conf := config.ConfigBpjs{}
header := cfg.SetHeader(conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
res, err := ResponseGetNomorSuratKontrol(url, header, headers)
if err != nil {
log.Printf("Error making external API request: %v", err)
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, res)
}
func GetSuratKontrolBySEP(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("SURAT_KONTROL_RS")
param := os.Getenv("GET_SURAT_KONTROL_SEP")
noSEP := c.Param("noSEP")
url := baseUrl + endpoint + param + noSEP
conf := config.ConfigBpjs{}
header := cfg.SetHeader(conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "Application/x-www-form-urlencoded",
}
log.Println("Headers : ", headers)
res, err := ResponseGetSuratKontrolBySEP(url, header, headers)
if err != nil {
log.Printf("Error making external API request: %v", err)
c.JSON(http.StatusInternalServerError, err)
return
}
c.JSON(http.StatusOK, res)
}
func GetDataSurKon(c *gin.Context) {
data, err := suratkontrol.GetDataSuratKontrol()
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
var resSurKon []*sk.ResponseGetDataSuratKontrol
for _, v := range data {
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
namaLengkap := gelarDepan + " " + v.NamaLengkapDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, v.TglCetakSurKon)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, v.TglRencanaKontrol)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
resSurKon = append(resSurKon, &sk.ResponseGetDataSuratKontrol{
IDDataSurKon: v.IDDataSurKon,
IDXDaftar: v.IDXDaftar,
TglCetakSurKon: dateCetakSurkonString,
TglRencanaKontrol: dateRencanaSurkonString,
NomorSurKon: v.NomorSurKon,
PoliAsal: v.PoliAsal,
PoliTujuan: v.PoliTujuan,
NomorSEP: v.NomorSEP,
NamaPasien: v.NamaPasien,
NamaDokter: namaLengkap,
NomorKartu: "",
Subspesialis: v.Subspesialis,
KodePoli: v.KodePoli,
KodeDokter: v.KodeDokter,
NoRM: v.NoRM,
KodeDiagnosa: v.KodeDiagnosa,
NamaDiagnosa: v.NamaDiagnosa,
TipeSurKon: v.TipeSurKon,
})
}
c.JSON(http.StatusOK, resSurKon)
}
func GetDataSurKonByID(c *gin.Context) {
id := c.Param("idxdaftar")
data, err := suratkontrol.GetDataSuratKontrolByID(id)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
gelarDepan := utils.ReplaceGelar(data.GelarDepan)
gelarBelakang := utils.ReplaceGelar(data.GelarBelakang)
namaLengkap := gelarDepan + " " + data.NamaLengkapDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, data.TglCetakSurKon)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, data.TglRencanaKontrol)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
resSurKon := &sk.ResponseGetDataSuratKontrol{
IDDataSurKon: data.IDDataSurKon,
IDXDaftar: data.IDXDaftar,
TglCetakSurKon: dateCetakSurkonString,
TglRencanaKontrol: dateRencanaSurkonString,
NomorSurKon: data.NomorSurKon,
PoliAsal: data.PoliAsal,
PoliTujuan: data.PoliTujuan,
NomorSEP: data.NomorSEP,
NamaPasien: data.NamaPasien,
NamaDokter: namaLengkap,
NomorKartu: "",
Subspesialis: data.Subspesialis,
KodePoli: data.KodePoli,
KodeDokter: data.KodeDokter,
IDPoli: data.IDPoli,
IDDokter: data.IDDokter,
NoRM: data.NoRM,
KodeDiagnosa: data.KodeDiagnosa,
NamaDiagnosa: data.NamaDiagnosa,
TipeSurKon: data.TipeSurKon,
}
c.JSON(http.StatusOK, resSurKon)
}
func PrintSurKon(c *gin.Context) {
id := c.Param("idxdaftar")
data, err := suratkontrol.GetDataSuratKontrolByID(id)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &sk.MetadataString{
Code: "",
Message: err.Error(),
})
return
}
gelarDepan := utils.ReplaceGelar(data.GelarDepan)
gelarBelakang := utils.ReplaceGelar(data.GelarBelakang)
namaLengkap := gelarDepan + " " + data.NamaLengkapDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, data.TglCetakSurKon)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, data.TglRencanaKontrol)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
resSurKon := &sk.ResponseGetDataSuratKontrol{
IDDataSurKon: data.IDDataSurKon,
IDXDaftar: data.IDXDaftar,
TglCetakSurKon: dateCetakSurkonString,
TglRencanaKontrol: dateRencanaSurkonString,
NomorSurKon: data.NomorSurKon,
PoliAsal: data.PoliAsal,
PoliTujuan: data.PoliTujuan,
NomorSEP: data.NomorSEP,
NamaPasien: data.NamaPasien,
NamaDokter: namaLengkap,
NomorKartu: "",
Subspesialis: data.Subspesialis,
}
log.Println("Data surkon", resSurKon)
c.JSON(http.StatusOK, resSurKon)
}
func CariPasienTPP(c *gin.Context) {
var req sk.RequestCariPasien
err := c.ShouldBindJSON(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
log.Println("request :", req)
query := ``
var args []interface{}
var data []*sk.GetDataSuratKontrol
if req.NoRM != "" {
query += `and dkp2."NOMR" = ?`
args = append(args, req.NoRM, req.TanggalAwal, req.TanggalAkhir)
data, err = suratkontrol.SearchDataSurKon(req, query, args)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
} else if req.NoSEP != "" {
query += `and dkp2."Nomor_sep" = ?`
args = append(args, req.NoSEP, req.TanggalAwal, req.TanggalAkhir)
data, err = suratkontrol.SearchDataSurKon(req, query, args)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
} else if req.PoliKlinik != "" {
query += `and ds."id" = ?`
args = append(args, req.PoliKlinik, req.TanggalAwal, req.TanggalAkhir)
data, err = suratkontrol.SearchDataSurKon(req, query, args)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
} else {
args = append(args, req.TanggalAwal, req.TanggalAkhir)
data, err = suratkontrol.SearchDataSurKon(req, query, args)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, err)
return
}
}
var resSurKon []*sk.ResponseGetDataSuratKontrol
for _, v := range data {
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
namaLengkap := gelarDepan + " " + v.NamaLengkapDokter + " " + gelarBelakang
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
dateCetakSurkon, _ := time.Parse(time.RFC3339, v.TglCetakSurKon)
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
dateRencanaSurkon, _ := time.Parse(time.RFC3339, v.TglRencanaKontrol)
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
resSurKon = append(resSurKon, &sk.ResponseGetDataSuratKontrol{
IDDataSurKon: v.IDDataSurKon,
IDXDaftar: v.IDXDaftar,
TglCetakSurKon: dateCetakSurkonString,
TglRencanaKontrol: dateRencanaSurkonString,
NomorSurKon: v.NomorSurKon,
PoliAsal: v.PoliAsal,
PoliTujuan: v.PoliTujuan,
NomorSEP: v.NomorSEP,
NamaPasien: v.NamaPasien,
NamaDokter: namaLengkap,
NomorKartu: "",
Subspesialis: v.Subspesialis,
KodePoli: v.KodePoli,
KodeDokter: v.KodeDokter,
NoRM: v.NoRM,
KodeDiagnosa: v.KodeDiagnosa,
NamaDiagnosa: v.NamaDiagnosa,
TipeSurKon: v.TipeSurKon,
})
}
c.JSON(http.StatusOK, resSurKon)
}
+27
View File
@@ -4,10 +4,12 @@ import (
"bridging-rssa/config"
"bridging-rssa/handlers/bpjs"
"bridging-rssa/handlers/bpjs/jadwal_dokter"
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"
@@ -40,12 +42,37 @@ func main() {
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("/", 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)
}
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 : 8081")
err = r.Run(":8081")
if err != nil {
+35 -16
View File
@@ -31,23 +31,42 @@ type DaftarSpesialis struct {
}
type JadwalDokterSatuData struct {
ID int `gorm:"id" json:"id"`
Hari int `gorm:"Hari" json:"Hari"`
NamaHari string `gorm:"Nama_hari" json:"Nama_hari"`
Waktu string `gorm:"Waktu" json:"Waktu"`
Dokter string `gorm:"Dokter" json:"Dokter"`
Spesialis int `gorm:"Spesialis" json:"Spesialis"`
SubSpesialis int `gorm:"Sub_spesialis" json:"Sub_spesialis"`
Status int `gorm:"Status" json:"Status"`
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:"id" json:"id"`
Hari int `gorm:"Hari" json:"Hari"`
NamaHari string `gorm:"Nama_hari" json:"Nama_hari"`
Waktu string `gorm:"Waktu" json:"Waktu"`
Dokter string `gorm:"Dokter" json:"Dokter"`
Spesialis string `gorm:"Spesialis" json:"Spesialis"`
SubSpesialis string `gorm:"Sub_spesialis" json:"Sub_spesialis"`
Status int `gorm:"Status" json:"Status"`
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 string `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"`
}
@@ -0,0 +1,24 @@
package suratkontrol
type KunjunganPasien struct {
ID string `gorm:"column:id" json:"id"`
IDXDaftar int `gorm:"column:idxdaftar" json:"idxdaftar"`
NomorSEP string `gorm:"column:nomorsep" json:"nomorsep"`
NamaKlinik string `gorm:"column:namaklinik" json:"namaklinik"`
IDKlinikSimgos string `gorm:"column:idkliniksimgos" json:"idkliniksimgos"`
KodeHfisKlinik string `gorm:"column:kodehfisklinik" json:"kodehfisklinik"`
NamaDokter string `gorm:"column:namadokter" json:"namadokter"`
KodeDokter string `gorm:"column:kodedokter" json:"kodedokter"`
KodeHfisDokter string `gorm:"column:kodehfisdokter" json:"kodehfisdokter"`
KodeSubspesialis string `gorm:"column:kodesubspesialis" json:"kodesubspesialis"`
Subspesialis string `gorm:"column:subspesialis" json:"subspesialis"`
Spesialis string `gorm:"column:spesialis" json:"spesialis"`
GelarDepan string `gorm:"column:gelardepan" json:"gelardepan"`
GelarBelakang string `gorm:"column:gelarbelakang" json:"gelarbelakang"`
Ruangan int `gorm:"column:ruangan" json:"ruangan"`
DPJP string `gorm:"column:id_dokter" json:"id_dokter"`
DiagnosisAkhirKeluar string `gorm:"column:Diagnosis_akhir_keluar" json:"Diagnosis_akhir_keluar"`
DisplayDiagnosisAkhirKeluar string `gorm:"column:Display_diagnosis_akhir_keluar" json:"Display_diagnosis_akhir_keluar"`
DiagnosisPrimerUtama string `gorm:"column:Diagnosis_primer_utama" json:"Diagnosis_primer_utama"`
DisplayDiagnosisPrimerUtama string `gorm:"column:Display_diagnosis_primer_utama" json:"Display_diagnosis_primer_utama"`
}
+281
View File
@@ -0,0 +1,281 @@
package suratkontrol
type RequestHeaderRencanaKontrol struct {
Request interface{} `json:"request"`
}
type ReqInsertRencanaKontrol struct {
NoSEP string `json:"noSEP"`
KodeDokter string `json:"kodeDokter"`
PoliKontrol string `json:"poliKontrol"`
TglRencanaKontrol string `json:"tglRencanaKontrol"`
User string `json:"user"`
}
type ReqUpdateRencanaKontrol struct {
NoSuratKontrol string `json:"noSuratKontrol"`
NoSEP string `json:"noSEP"`
KodeDokter string `json:"kodeDokter"`
PoliKontrol string `json:"poliKontrol"`
TglRencanaKontrol string `json:"tglRencanaKontrol"`
User string `json:"user"`
}
type RequestInsertRencanaKontrol struct {
IDXDaftar string `json:"idxdaftar"`
NoSEP string `json:"noSEP"`
KodeHFIS string `json:"kodeHFIS"`
KodePoli string `json:"kodePoli"`
Subspesialis string `json:"subspesialis"`
TglRencanaKontrol string `json:"tglRencanaKontrol"`
User string `json:"user"`
IDDokter string `json:"id_dokter"`
KodeDiagnosa string `json:"kode_diagnosa"`
NamaDiagnosa string `json:"nama_diagnosa"`
}
type ReqDeleteRencanaKontrol struct {
IDDataSurKon string `json:"id_surat_kontrol"`
NomorSurKon string `json:"Nomor_surat_kontrol"`
User string `json:"user"`
}
type RequestUpdateRencanaKontrol struct {
IDXDaftar string `json:"idxdaftar"`
IDSurKon string `json:"idSurKon"`
IDDokter string `json:"id_dokter"`
NoSuratKontrol string `json:"noSuratKontrol"`
NoSEP string `json:"noSEP"`
KodeHFIS string `json:"kodeHFIS"`
KodePoli string `json:"kodePoli"`
TglRencanaKontrol string `json:"tglRencanaKontrol"`
User string `json:"user"`
KodeDiagnosa string `json:"Kode_diagnosa"`
NamaDiagnosa string `json:"Nama_diagnosa"`
}
type TSuratKontrol struct {
RequestDelete RequestDeleteRencanaKontrol `json:"t_suratkontrol"`
}
type RequestDeleteRencanaKontrol struct {
NoSuratKontrol string `json:"noSuratKontrol"`
User string `json:"user"`
}
type ResponseRaw struct {
Response string `json:"response"`
MetaData MetadataString `json:"metadata"`
}
type ResponseRawUpper struct {
Response string `json:"response"`
MetaData MetadataString `json:"metaData"`
}
type Metadata struct {
Code int `json:"code"`
Message string `json:"message"`
}
type ResponseInsertRaw struct {
Response string `json:"response"`
MetaData MetadataString `json:"metaData"`
}
type MetadataString struct {
Code string `json:"code"`
Message string `json:"message"`
}
type ResponseGetSuratKontrol struct {
MetaData MetadataString `json:"metaData"`
Response ResponseNomorSuratKontrol `json:"response"`
}
type ResponseGetSuratKontrolBySEP struct {
MetaData MetadataString `json:"metaData"`
Response ResponseSuratKontrolBySEP `json:"response"`
}
type Response struct {
MetaData MetadataString `json:"metadata"`
Response ResponseSuratKontrol `json:"response"`
}
type ResponseUpper struct {
MetaData MetadataString `json:"metaData"`
Response ResponseSuratKontrol `json:"response"`
}
type ResponseInsertSuratKontrol struct {
MetaData MetadataString `json:"metaData"`
Response ResponseData `json:"response"`
}
type ResponseData struct {
NoSuratKontrol string `json:"noSuratKontrol"`
TglRencanaKontrol string `json:"tglRencanaKontrol"`
NamaDokter string `json:"namaDokter"`
NoKartu string `json:"noKartu"`
Nama string `json:"nama"`
Kelamin string `json:"kelamin"`
TglLahir string `json:"tglLahir"`
NamaDiagnosa string `json:"namaDiagnosa"`
SubSpesialis string `json:"subspesialis"`
}
type ResponseSuratKontrol struct {
NoSuratKontrol string `json:"noSuratKontrol"`
TglRencanaKontrol string `json:"tglRencanaKontrol"`
NamaDokter string `json:"namaDokter"`
NoKartu string `json:"noKartu"`
Nama string `json:"nama"`
Kelamin string `json:"kelamin"`
TglLahir string `json:"tglLahir"`
NamaDiagnosa string `json:"namaDiagnosa"`
}
type RequestRencanaKontrol struct {
IDXDaftar string `json:"idxdaftar"`
NoSEP string `json:"noSEP"`
KodeHFIS string `json:"kodeHFIS"`
KodePoli string `json:"kodePoli"`
TglRencanaKontrol string `json:"tglRencanaKontrol"`
User string `json:"user"`
}
type ResponseNomorSuratKontrol struct {
NoSuratKontrol string `json:"noSuratKontrol"`
TglRencanaKontrol string `json:"tglRencanaKontrol"`
TglTerbit string `json:"tglTerbit"`
JnsKontrol string `json:"jnsKontrol"`
PoliTujuan string `json:"poliTujuan"`
NamaPoliTujuan string `json:"namaPoliTujuan"`
KodeDokter string `json:"kodeDokter"`
NamaDokter string `json:"namaDokter"`
FlagKontrol string `json:"flagKontrol"`
KodeDokterPembuat string `json:"kodeDokterPembuat"`
NamaDokterPembuat string `json:"namaDokterPembuat"`
NamaJnsKontrol string `json:"namaJnsKontrol"`
Sep Sep `json:"sep"`
}
type Sep struct {
NoSep string `json:"noSep"`
TglSep string `json:"tglSep"`
JnsPelayanan string `json:"jnsPelayanan"`
Poli string `json:"poli"`
Diagnosa string `json:"diagnosa"`
Peserta Peserta `json:"peserta"`
ProvUmum ProvUmum `json:"provUmum"`
ProvPerujuk ProvPerujuk `json:"provPerujuk"`
}
type Peserta struct {
NoKartu string `json:"noKartu"`
Nama string `json:"nama"`
TglLahir string `json:"tglLahir"`
Kelamin string `json:"kelamin"`
HakKelas string `json:"hakKelas"`
}
type ProvUmum struct {
KodedProvider string `json:"kdProvider"`
NamaProvider string `json:"nmProvider"`
}
type ProvPerujuk struct {
KodeProviderPerujuk string `json:"kdProviderPerujuk"`
NamaProviderPerujuk string `json:"nmProviderPerujuk"`
AsalRujukan string `json:"asalRujukan"`
NoRujukan string `json:"noRujukan"`
TglRujukan string `json:"tglRujukan"`
}
type DataSuratKontrol struct {
ID string `gorm:"column:id" json:"id"`
Status string `gorm:"column:status" json:"status"`
Sort int `gorm:"column:sort" json:"sort"`
UserCreated string `gorm:"column:user_created" json:"user_created"`
DateCreated string `gorm:"column:date_created" json:"date_created"`
UserUpdated string `gorm:"column:user_updated" json:"user_updated"`
DateUpdated string `gorm:"column:date_updated" json:"date_updated"`
TglCetakSurKon string `gorm:"column:Tanggal_cetak_surat_kontrol" json:"Tanggal_cetak_surat_kontrol"`
TglRencanaKontrol string `gorm:"column:Tanggal_rencana_kontrol" json:"Tanggal_rencana_kontrol"`
NomorSurKon string `gorm:"column:Nomor_surat_kontrol" json:"Nomor_surat_kontrol"`
KunjunganPasien string `gorm:"column:Kunjungan_pasien" json:"Kunjungan_pasien"`
RuanganSurKon int `gorm:"column:Ruangan_surat_kontrol" json:"Ruangan_surat_kontrol"`
DPJPSurKon string `gorm:"column:DPJP_surat_kontrol" json:"DPJP_surat_kontrol"`
StatusSurKon int `gorm:"column:Status_surat_kontrol" json:"Status_surat_kontrol"`
UserCreatedSurKon string `gorm:"column:User_created_surat_kontrol" json:"User_created_surat_kontrol"`
TipeSurKon string `gorm:"column:Tipe_surat_kontrol" json:"Tipe_surat_kontrol"`
UserUpdatedSurKon string `gorm:"column:User_updated_surat_kontrol" json:"User_updated_surat_kontrol"`
}
type ResponseSuratKontrolBySEP struct {
NoSEP string `json:"noSep"`
TglSEP string `json:"tglSep"`
JenisPelayanan string `json:"jnsPelayanan"`
Poli string `json:"poli"`
Diagnosa string `json:"diagnosa"`
Peserta Peserta `json:"peserta"`
ProvUmum ProvUmum `json:"provUmum"`
ProvPerujuk ProvPerujuk `json:"provPerujuk"`
}
type GetDataSuratKontrol struct {
IDDataSurKon string `gorm:"column:id" json:"id"`
IDXDaftar string `gorm:"column:IDXDAFTAR" json:"IDXDAFTAR"`
TglCetakSurKon string `gorm:"column:Tanggal_cetak_surat_kontrol" json:"Tanggal_cetak_surat_kontrol"`
TglRencanaKontrol string `gorm:"column:Tanggal_rencana_kontrol" json:"Tanggal_rencana_kontrol"`
NomorSurKon string `gorm:"column:Nomor_surat_kontrol" json:"Nomor_surat_kontrol"`
PoliAsal string `gorm:"column:Poli_asal" json:"Poli_asal"`
PoliTujuan string `gorm:"column:Poli_tuju" json:"Poli_tuju"`
NomorSEP string `gorm:"column:Nomor_sep" json:"Nomor_sep"`
NamaPasien string `gorm:"column:Nama_lengkap" json:"Nama_lengkap"`
GelarDepan string `gorm:"column:gelardepan" json:"gelardepan"`
NamaLengkapDokter string `gorm:"column:Nama_lengkap_dokter" json:"Nama_lengkap_dokter"`
GelarBelakang string `gorm:"column:gelarbelakang" json:"gelarbelakang"`
Subspesialis string `gorm:"column:Subspesialis" json:"Subspesialis"`
KodePoli string `gorm:"column:Kode_poli" json:"Kode_poli"`
KodeDokter string `gorm:"column:Kode_dokter" json:"Kode_dokter"`
NomorKartu string `gorm:"column:No_kartu" json:"No_kartu"`
IDPoli string `gorm:"column:ID_poli" json:"id_poli"`
IDDokter string `gorm:"column:id_dokter" json:"id_dokter"`
NoRM string `gorm:"column:No_rm" json:"No_rm"`
KodeDiagnosa string `gorm:"column:Kode_diagnosa" json:"Kode_diagnosa"`
NamaDiagnosa string `gorm:"column:Nama_diagnosa" json:"Nama_diagnosa"`
TipeSurKon string `gorm:"column:Tipe_SurKon" json:"Tipe_SurKon"`
}
type ResponseGetDataSuratKontrol struct {
IDDataSurKon string `json:"id"`
IDXDaftar string `json:"Idx_daftar"`
TglCetakSurKon string `json:"Tanggal_cetak_surat_kontrol"`
TglRencanaKontrol string `json:"Tanggal_rencana_kontrol"`
NomorSurKon string `json:"Nomor_surat_kontrol"`
PoliAsal string `json:"Poli_asal"`
PoliTujuan string `json:"Poli_tuju"`
NomorSEP string `json:"Nomor_sep"`
NamaPasien string `json:"Nama_pasien"`
NamaDokter string `json:"NamaDokter"`
NomorKartu string `json:"Nomor_kartu"`
Subspesialis string `json:"Subspesialis"`
KodePoli string `json:"Kode_poli"`
KodeDokter string `json:"Kode_dokter"`
IDPoli string `json:"id_poli"`
IDDokter string `json:"id_dokter"`
NoRM string `json:"No_rm"`
KodeDiagnosa string `json:"Kode_diagnosa"`
NamaDiagnosa string `json:"Nama_diagnosa"`
TipeSurKon string `json:"Tipe_SurKon"`
}
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"`
}
+12 -8
View File
@@ -1,14 +1,18 @@
package config
type ConfigBpjs struct {
Cons_id string
Secret_key string
User_key string
Cons_id string
Secret_key string
User_key string
Cons_id_dev string
Secret_key_dev string
User_key_dev string
}
type ConfigSatuSehat struct {
Org_id string
Client_id string
Client_secret string
Token string
type Header struct {
ConsID string
SecretKey string
UserKey string
TimeStamp string
XSignature string
}
+23
View File
@@ -9,3 +9,26 @@ type DaftarDokterRes struct {
ID string `gorm:"column:id" json:"id"`
HfisCode int `gorm:"column:HFIS_code" json:"HFIS_code"`
}
type NamaLengkap struct {
ID string `gorm:"column:id" json:"id"`
GelarDepan string `gorm:"column:gelardepan" json:"gelardepan"`
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"`
}
type ResponseDokter struct {
ID string `json:"id_dokter"`
NamaLengkap string `json:"nama_lengkap"`
Spesialis int `json:"spesialis"`
HFISCode string `json:"HFIS_code"`
}
type ResponseDokterNew struct {
ID string `json:"id_dokter"`
NamaLengkap string `json:"nama_lengkap"`
Subspesialis int `json:"subspesialis"`
HFISCode string `json:"HFIS_code"`
KodePoli string `json:"kode_poli"`
}
+1 -1
View File
@@ -4,4 +4,4 @@ type DaftarSpesialis struct {
ID int `json:"id"`
Kode string `json:"Kode"`
Spesialis string `json:"Spesialis"`
}
}
+5 -5
View File
@@ -1,9 +1,9 @@
package dokter
type DaftarSubspesialis struct {
ID int `json:"id"`
Kode string `json:"Kode"`
Subspesialis string `json:"Subspesialis"`
FKDaftarSpesialisID int `json:"FK_daftar_spesialis_ID" gorm:"column:FK_daftar_spesialis_ID"`
ID int `json:"id"`
Kode string `json:"Kode"`
Subspesialis string `json:"Subspesialis"`
IDSpesialis int `json:"FK_daftar_spesialis_ID" gorm:"column:FK_daftar_spesialis_ID"`
Spesialis string `gorm:"column:Spesialis" json:"Spesialis"`
}
-20
View File
@@ -1,20 +0,0 @@
package satusehat
import (
"github.com/go-playground/validator/v10"
)
type Procedure struct {
VisitId int `db:"visit_id" json:"visit_id" validate:"required"`
ProcedureCode string `db:"procedure_code" json:"procedure_code" validate:"required"`
ProcedureName string `db:"procedure_name" json:"procedure_name" validate:"required"`
}
func (o *Procedure) Invalid() bool {
val := validator.New()
err := val.Struct(o)
if err != nil {
return true
}
return false
}
-109
View File
@@ -1,109 +0,0 @@
package satusehat
import (
"time"
"github.com/go-playground/validator/v10"
)
type Visit struct {
VisitID string
PatientSatusehatID string
PatientNIK string
PatientName string
PatientSex string
PatientBirthDate *time.Time
PatientAddress string
PractitionerNIK string
PractitionerSatusehatID string
PractitionerName string
ClinicSatusehatID string
ClinicName string
Systole string
Diastole string
HeartRate string
RespirationRate string
OxygenSaturation string
Temperature string
PeriodStartDate time.Time
PeriodEndDate time.Time
ArrivedStartTime *time.Time
ArrivedEndTime *time.Time
InProgressStartTime *time.Time
InProgressEndTime *time.Time
FinishStartTime *time.Time
FinishEndTime *time.Time
}
type VisitDetail struct {
VisitId string `json:"visit_id" validate:"required"`
PatientSatusehatId string `json:"patient_satusehat_id" validate:"required"`
PatientNik string `json:"patient_nik" `
PatientName string `json:"patient_name" validate:"required"`
PatientSex string `json:"patient_sex"`
PatientBirthDate *time.Time `json:"patient_birth_date"`
PatientAddress string `json:"patient_address"`
PractitionerNik string `json:"practitioner_nik"`
PractitionerId string `json:"practitioner_satusehat_id" validate:"required"`
PractitionerName string `json:"practitioner_name" validate:"required"`
ClinicName string `json:"clinic_name" validate:"required"`
ClinicSatuSehatId string `json:"clinic_id" validate:"required"`
PeriodStartDate time.Time `json:"period_start_date" validate:"required"`
PeriodEndDate time.Time `json:"period_end_date" validate:"required"`
ArrivedStartTime *time.Time `json:"arrived_start_time" validate:"required"`
ArrivedEndTime *time.Time `json:"arrived_end_time" validate:"required"`
InProgressStartTime *time.Time `json:"in_progress_start_time" validate:"required"`
InProgressEndTime *time.Time `json:"in_progress_end_time" validate:"required"`
FinishStartTime *time.Time `json:"finish_start_time" validate:"required"`
FinishEndTime *time.Time `json:"finish_end_time" validate:"required"`
}
func (v VisitDetail) Invalid() error {
val := validator.New()
return val.Struct(v)
}
type VitalSign struct {
Systole string `json:"sistole"`
Diastole string `json:"diastole"`
HeartRate string `json:"heart_rate"`
RespirationRate string `json:"respiration_rate"`
Temperature string `json:"temperature"`
OxygenSaturation string `json:"oxygen_saturation"`
}
func (v *Visit) VitalSign() VitalSign {
return VitalSign{
Systole: v.Systole,
Diastole: v.Diastole,
HeartRate: v.HeartRate,
RespirationRate: v.RespirationRate,
Temperature: v.Temperature,
OxygenSaturation: v.OxygenSaturation,
}
}
func (v *Visit) VisitDetail() VisitDetail {
return VisitDetail{
VisitId: v.VisitID,
PatientSatusehatId: v.PatientSatusehatID,
PatientNik: v.PatientNIK,
PatientName: v.PatientName,
PatientSex: v.PatientSex,
PatientBirthDate: v.PatientBirthDate,
PatientAddress: v.PatientAddress,
ClinicName: v.ClinicName,
ClinicSatuSehatId: v.ClinicSatusehatID,
PeriodStartDate: v.PeriodStartDate,
PeriodEndDate: v.PeriodEndDate,
PractitionerNik: v.PractitionerNIK,
PractitionerId: v.PractitionerSatusehatID,
PractitionerName: v.PractitionerName,
ArrivedStartTime: v.ArrivedStartTime,
ArrivedEndTime: v.ArrivedEndTime,
InProgressStartTime: v.InProgressStartTime,
InProgressEndTime: v.InProgressEndTime,
FinishStartTime: v.FinishStartTime,
FinishEndTime: v.FinishEndTime,
}
}