diff --git a/.env b/.env index e0189b4..7960c82 100644 --- a/.env +++ b/.env @@ -1,10 +1,3 @@ -# POSTGRES_DSN="postgres://sa:password@localhost:5432/postgres?sslmode=disable" -DB_HOST=localhost -DB_USERNAME=sa -DB_PASSWORD=password -DB_NAME=postgres -DB_PORT=5432 - SATUDATA_HOST=10.10.123.165 SATUDATA_USERNAME=stim SATUDATA_PASSWORD=stim*RS54 @@ -15,4 +8,17 @@ BASEURL_BPJS=https://apijkn.bpjs-kesehatan.go.id/ ANTREAN_RS=antreanrs CONS_ID=5257 USER_KEY=4cf1cbef8c008440bbe9ef9ba789e482 -SECRET_KEY=1bV363512D \ No newline at end of file +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/ + diff --git a/config/config.go b/config/config.go index b5e1e50..3bd7076 100644 --- a/config/config.go +++ b/config/config.go @@ -16,34 +16,18 @@ import ( ) var DB *gorm.DB -var localDB *gorm.DB var SatuDataDB *gorm.DB var err error func ConnectDB() { - 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") - 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) - - 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) @@ -52,12 +36,16 @@ func ConnectDB() { } } -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") @@ -71,6 +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 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() + + 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") + + 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 } diff --git a/database/satu_data/dokter/dokter.go b/database/satu_data/dokter/dokter.go index 79ddcb9..ea9a295 100644 --- a/database/satu_data/dokter/dokter.go +++ b/database/satu_data/dokter/dokter.go @@ -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 +} diff --git a/database/satu_data/dokter/jadwal_dokter.go b/database/satu_data/dokter/jadwal_dokter.go index 1b4aff7..3b9ee4d 100644 --- a/database/satu_data/dokter/jadwal_dokter.go +++ b/database/satu_data/dokter/jadwal_dokter.go @@ -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") diff --git a/database/satu_data/dokter/spesialis.go b/database/satu_data/dokter/spesialis.go index 873e554..1ac6d6b 100644 --- a/database/satu_data/dokter/spesialis.go +++ b/database/satu_data/dokter/spesialis.go @@ -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 } diff --git a/database/satu_data/dokter/subspesialis.go b/database/satu_data/dokter/subspesialis.go index 191fcba..7d976bb 100644 --- a/database/satu_data/dokter/subspesialis.go +++ b/database/satu_data/dokter/subspesialis.go @@ -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 } diff --git a/database/satu_data/surat_kontrol/kunjungan_pasien.go b/database/satu_data/surat_kontrol/kunjungan_pasien.go new file mode 100644 index 0000000..c614370 --- /dev/null +++ b/database/satu_data/surat_kontrol/kunjungan_pasien.go @@ -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 +} diff --git a/database/satu_data/surat_kontrol/surat_kontrol.go b/database/satu_data/surat_kontrol/surat_kontrol.go new file mode 100644 index 0000000..b8595ac --- /dev/null +++ b/database/satu_data/surat_kontrol/surat_kontrol.go @@ -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 +} diff --git a/docs/utils/utils.go b/docs/utils/utils.go index 70f4cd9..2a5f1d1 100644 --- a/docs/utils/utils.go +++ b/docs/utils/utils.go @@ -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 +} diff --git a/go.mod b/go.mod index 4c17746..4874b1d 100644 --- a/go.mod +++ b/go.mod @@ -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 diff --git a/go.sum b/go.sum index 2e8ae1b..9b93f1e 100644 --- a/go.sum +++ b/go.sum @@ -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= diff --git a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go index abc1f8b..ec82326 100644 --- a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go +++ b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go @@ -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) +} diff --git a/handlers/bpjs/jadwal_dokter/response.go b/handlers/bpjs/jadwal_dokter/response.go index 7f9b053..2bc311d 100644 --- a/handlers/bpjs/jadwal_dokter/response.go +++ b/handlers/bpjs/jadwal_dokter/response.go @@ -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) diff --git a/handlers/bpjs/surat_kontrol/response.go b/handlers/bpjs/surat_kontrol/response.go new file mode 100644 index 0000000..a469c14 --- /dev/null +++ b/handlers/bpjs/surat_kontrol/response.go @@ -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 +} diff --git a/handlers/bpjs/surat_kontrol/surat_kontrol.go b/handlers/bpjs/surat_kontrol/surat_kontrol.go new file mode 100644 index 0000000..2ed6f9f --- /dev/null +++ b/handlers/bpjs/surat_kontrol/surat_kontrol.go @@ -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) +} diff --git a/main.go b/main.go index 5d6bc41..e3c5aec 100644 --- a/main.go +++ b/main.go @@ -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 { diff --git a/models/bpjs/jadwal_dokter/jadwal_dokter.go b/models/bpjs/jadwal_dokter/jadwal_dokter.go index 9d5611a..cbbe6b0 100644 --- a/models/bpjs/jadwal_dokter/jadwal_dokter.go +++ b/models/bpjs/jadwal_dokter/jadwal_dokter.go @@ -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"` } diff --git a/models/bpjs/surat_kontrol/kunjugan_pasien.go b/models/bpjs/surat_kontrol/kunjugan_pasien.go new file mode 100644 index 0000000..3410c6f --- /dev/null +++ b/models/bpjs/surat_kontrol/kunjugan_pasien.go @@ -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"` +} diff --git a/models/bpjs/surat_kontrol/surat_kontrol.go b/models/bpjs/surat_kontrol/surat_kontrol.go new file mode 100644 index 0000000..3dba70e --- /dev/null +++ b/models/bpjs/surat_kontrol/surat_kontrol.go @@ -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"` +} diff --git a/models/config/config.go b/models/config/config.go index c6e2f86..4105bfe 100644 --- a/models/config/config.go +++ b/models/config/config.go @@ -1,7 +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 Header struct { + ConsID string + SecretKey string + UserKey string + TimeStamp string + XSignature string } diff --git a/models/dokter/dokter.go b/models/dokter/dokter.go index d17a114..3139fe0 100644 --- a/models/dokter/dokter.go +++ b/models/dokter/dokter.go @@ -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"` +} diff --git a/models/dokter/spesialis.go b/models/dokter/spesialis.go index 3e161c3..9ceaa3f 100644 --- a/models/dokter/spesialis.go +++ b/models/dokter/spesialis.go @@ -4,4 +4,4 @@ type DaftarSpesialis struct { ID int `json:"id"` Kode string `json:"Kode"` Spesialis string `json:"Spesialis"` -} \ No newline at end of file +} diff --git a/models/dokter/subspesialis.go b/models/dokter/subspesialis.go index 1707bd8..c18278f 100644 --- a/models/dokter/subspesialis.go +++ b/models/dokter/subspesialis.go @@ -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"` } -