From 882bdd1a3e5d77b116161a4436f36e4fe313decdb14776db85fbdfc515b4c854 Mon Sep 17 00:00:00 2001 From: mirza Date: Tue, 4 Feb 2025 07:43:34 +0700 Subject: [PATCH] update get data surkon --- database/satu_data/dokter/jadwal_dokter.go | 11 + .../satu_data/surat_kontrol/surat_kontrol.go | 52 +- handlers/bpjs/jadwal_dokter/jadwal_dokter.go | 827 +++++++++++------- handlers/bpjs/jadwal_dokter/response.go | 143 +-- handlers/bpjs/surat_kontrol/surat_kontrol.go | 76 +- main.go | 11 + models/bpjs/jadwal_dokter/jadwal_dokter.go | 166 ++-- 7 files changed, 783 insertions(+), 503 deletions(-) diff --git a/database/satu_data/dokter/jadwal_dokter.go b/database/satu_data/dokter/jadwal_dokter.go index e0508ae..8d5c087 100644 --- a/database/satu_data/dokter/jadwal_dokter.go +++ b/database/satu_data/dokter/jadwal_dokter.go @@ -3,6 +3,7 @@ package dokter import ( "bridging-rssa/config" "bridging-rssa/models/bpjs/jadwal_dokter" + "gorm.io/gorm" "log" "strconv" @@ -120,3 +121,13 @@ func InsertJadwalDokterTemp(reqInsert *jadwal_dokter.JadwalDokterSatuData) error log.Println("Success insert data") return nil } + +func InsertDataJadwalDokter(tx *gorm.DB, reqInsert *jadwal_dokter.DataJadwalDokterSatuData) error { + err := tx.Debug().Exec(`insert into "data_jadwal_dokter" ("id", "Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Tanggal_jadwal") values (?, ?, ? ,?, ?, ?, ?, ?)`, reqInsert.ID, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, reqInsert.Spesialis, reqInsert.SubSpesialis, reqInsert.TanggalJadwal).Error + if err != nil { + log.Printf("Failed insert data : %v", err) + return err + } + log.Println("Success insert data") + return nil +} diff --git a/database/satu_data/surat_kontrol/surat_kontrol.go b/database/satu_data/surat_kontrol/surat_kontrol.go index 5af5d12..a421ec0 100644 --- a/database/satu_data/surat_kontrol/surat_kontrol.go +++ b/database/satu_data/surat_kontrol/surat_kontrol.go @@ -127,7 +127,7 @@ func GetDataSuratKontrol(offset, limit string) ([]*suratkontrol.GetDataSuratKont return dataSurKon, nil } -func GetDataSuratKontrolByID(idxdaftar string, tipe string) (*suratkontrol.GetDataSuratKontrol, error) { +func GetDataSuratKontrolByIDTipe(idxdaftar string, tipe string) (*suratkontrol.GetDataSuratKontrol, error) { var dataSurKon *suratkontrol.GetDataSuratKontrol err := config.SatuDataDB.Raw(`select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol", dsk."Nomor_surat_kontrol", @@ -167,7 +167,55 @@ func GetDataSuratKontrolByID(idxdaftar string, tipe string) (*suratkontrol.GetDa where dsk."Status_surat_kontrol" = '1' and dkp2."IDXDAFTAR" = ? and dsk."Tipe_rawat" = ?`, idxdaftar, tipe).First(&dataSurKon).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { - errMsg := errors.New("DPJP anda belum ada subspesialis") + errMsg := errors.New("Data tidak ada") + log.Println(errMsg) + return nil, errMsg + } + } + return dataSurKon, nil +} + +func GetDataSuratKontrolByID(idxdaftar string) (*suratkontrol.GetDataSuratKontrol, error) { + var dataSurKon *suratkontrol.GetDataSuratKontrol + err := config.SatuDataDB.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", + dp."Code_dpjp" as "Kode_dpjp", + dkp2."NOMR" as "No_rm", + dkp2."Diagnosis_primer_utama" as "Kode_diagnosa", + dkp2."Display_diagnosis_primer_utama" as "Nama_diagnosa", + dsk."Tipe_surat_kontrol" as "Tipe_SurKon", + dsk."User_created_surat_kontrol" as "User" + from data_surat_kontrol dsk + left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien" + left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id" + 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("Data tidak ada") log.Println(errMsg) return nil, errMsg } diff --git a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go index b29a30e..aec0df2 100644 --- a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go +++ b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go @@ -1,328 +1,499 @@ -package jadwal_dokter - -import ( - cfg "bridging-rssa/config" - "bridging-rssa/database/satu_data/dokter" - "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" -) - -func GetJadwalDokter() bool { - baseUrl := os.Getenv("BASEURL_BPJS") - endpoint := os.Getenv("ANTREAN_RS") - url := baseUrl + endpoint - conf := config.ConfigBpjs{} - - header := cfg.SetHeader(false, conf) - - headers := map[string]string{ - "X-cons-id": header.ConsID, - "X-timestamp": header.TimeStamp, - "X-signature": header.XSignature, - "user_key": header.UserKey, - } - - errTruncate := dokter.DeleteJadwalDokter() - if errTruncate != nil { - log.Println(errTruncate) - return false - } - - errTruncateTemp := dokter.DeleteJadwalDokterTemp() - if errTruncateTemp != nil { - log.Println(errTruncateTemp) - return false - } - - // Select from daftar spesialis - spesialis, err := dokter.GetSpesialis() - if err != nil { - return false - } - - var listIdSpesialis = make(map[string]int) - for _, kodeDokter := range spesialis { - listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID - } - - subspesialis, err := dokter.GetSubspesialis() - if err != nil { - return false - } - - var listIdSubspesialis = make(map[string]int) - for _, kodeDokter := range subspesialis { - listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID - } - - listDokter, err := dokter.GetDokter() - if err != nil { - return false - } - - var listIddokter = make(map[int]string) - for _, kodeDokter := range listDokter { - listIddokter[kodeDokter.HfisCode] = kodeDokter.ID - } - - var reqInsert *jadwal_dokter.JadwalDokterSatuData - var res *[]jadwal_dokter.ListDokter - - for _, value := range spesialis { - tanggal := time.Now().Format("2006-01-02") - for i := 0; i < 7; i++ { - kdPoly := value.Kode - res, err = JadwalDokterGetResponse(url, header, kdPoly, tanggal, headers) - if err != nil { - log.Println("Error making external API request: %v", err) - return false - } - date, errParse := time.Parse("2006-01-02", tanggal) - if errParse != nil { - return false - } - tanggal = date.AddDate(0, 0, 1).Format("2006-01-02") - log.Println("Tanggal :", tanggal) - if res == nil { - log.Println("Skip Proses") - continue - } - for _, v := range *res { - idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis) - idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis) - idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter) - reqInsert = &jadwal_dokter.JadwalDokterSatuData{ - Hari: v.Hari, - NamaHari: v.NamaHari, - Waktu: v.Jadwal, - Dokter: idDokter, - Spesialis: idSpesialis, - SubSpesialis: idSubspesialis, - Status: 1, // When available always set to 1 - } - if reqInsert.Dokter != "" { - errInsert := dokter.InsertJadwalDokter(reqInsert) - if errInsert != nil { - log.Println(errInsert) - return false - } - } else { - reqInsert.Dokter = strconv.Itoa(v.KodeDokter) - errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert) - if errInsertTemp != nil { - log.Println(errInsertTemp) - return false - } - } - } - } - } - return true -} - -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 - } - - 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.ID, - NamaLengkap: namaLengkap, - HFISCode: hfisCode, - KodeDPJP: dpjp, - JadwalDokter: jadwalDokter, - IDDokter: k.ID, - } - } - log.Println("Response :", res) - c.JSON(http.StatusOK, res) -} - -func GetSpesialisByDate(c *gin.Context) { - tanggal := c.Param("tanggal") - date, err := time.Parse("2006-01-02", tanggal) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - hari := date.Local().Weekday().String() - hari = utils.ConvertDay(hari) - idSpesialis, err := dokter.GetJadwalDokterByDate(hari) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - listSpesialis, err := dokter.GetSpesialisByID(idSpesialis) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - c.JSON(http.StatusOK, listSpesialis) -} - -func GetJadwalSubspesialisByDate(c *gin.Context) { - tanggal := c.Param("tanggal") - date, err := time.Parse("2006-01-02", tanggal) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - - log.Println("tanggal: ", tanggal) - hari := date.Local().Weekday().String() - hari = utils.ConvertDay(hari) - idsubspesialis, err := dokter.GetJadwalSubspesialisByDate(hari) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - listSpesialis, err := dokter.GetSubspesialisByIDBatch(idsubspesialis) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - c.JSON(http.StatusOK, listSpesialis) -} - -func GetDokterBySpesialis(c *gin.Context) { - spesialis := c.Param("spesialis") - tanggal := c.Param("tanggal") - date, err := time.Parse("2006-01-02", tanggal) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - hari := date.Local().Weekday().String() - hari = utils.ConvertDay(hari) - idDokter, err := dokter.GetJadwalDokterBySpesialis(hari, spesialis) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - namaDokter, err := dokter.GetNamaLengkapDokter(idDokter) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - var resDokter []dktr.ResponseDokter - idSpesialis, err := strconv.Atoi(spesialis) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - for _, v := range namaDokter { - gelarDepan := utils.ReplaceGelar(v.GelarDepan) - gelarBelakang := utils.ReplaceGelar(v.GelarBelakang) - namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang - namaLengkap = strings.TrimPrefix(namaLengkap, " ") - namaLengkap = strings.TrimSuffix(namaLengkap, " ") - resDokter = append(resDokter, dktr.ResponseDokter{ - ID: v.ID, - NamaLengkap: namaLengkap, - Spesialis: idSpesialis, - HFISCode: v.HFISCode, - }) - } - log.Println("Response :", resDokter) - c.JSON(http.StatusOK, resDokter) -} - -func GetDokterBySubspesialis(c *gin.Context) { - subspesialis := c.Param("subspesialis") - tanggal := c.Param("tanggal") - date, err := time.Parse("2006-01-02", tanggal) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - - log.Println("subspesialis: ", subspesialis) - log.Println("tanggal: ", tanggal) - - hari := date.Local().Weekday().String() - hari = utils.ConvertDay(hari) - idDokter, err := dokter.GetJadwalDokterBySubpesialis(hari, subspesialis) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - namaDokter, err := dokter.GetNamaLengkapDokter(idDokter) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - var resDokter []dktr.ResponseDokterNew - idSubspesialis, err := strconv.Atoi(subspesialis) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - - listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis) - if err != nil { - c.JSON(http.StatusInternalServerError, err) - } - - for _, v := range namaDokter { - gelarDepan := utils.ReplaceGelar(v.GelarDepan) - gelarBelakang := utils.ReplaceGelar(v.GelarBelakang) - namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang - namaLengkap = strings.TrimPrefix(namaLengkap, " ") - namaLengkap = strings.TrimSuffix(namaLengkap, " ") - resDokter = append(resDokter, dktr.ResponseDokterNew{ - ID: v.ID, - NamaLengkap: namaLengkap, - Subspesialis: idSubspesialis, - HFISCode: v.HFISCode, - KodePoli: listSubspesialis.Kode, - DPJPCode: v.DPJPCode, - }) - } - log.Println("Response :", resDokter) - c.JSON(http.StatusOK, resDokter) -} +package jadwal_dokter + +import ( + cfg "bridging-rssa/config" + "bridging-rssa/database/satu_data/dokter" + log_api "bridging-rssa/database/satu_data/log_api" + "bridging-rssa/docs/utils" + "bridging-rssa/models/bpjs/jadwal_dokter" + "bridging-rssa/models/config" + dktr "bridging-rssa/models/dokter" + logapi "bridging-rssa/models/log_api" + "encoding/json" + "fmt" + "github.com/google/uuid" + "gorm.io/gorm" + "log" + "net/http" + "os" + "strconv" + "strings" + "time" + + "github.com/gin-gonic/gin" +) + +func GetJadwalDokter() bool { + baseUrl := os.Getenv("BASEURL_BPJS") + endpoint := os.Getenv("ANTREAN_RS") + url := baseUrl + endpoint + conf := config.ConfigBpjs{} + + header := cfg.SetHeader(false, conf) + + headers := map[string]string{ + "X-cons-id": header.ConsID, + "X-timestamp": header.TimeStamp, + "X-signature": header.XSignature, + "user_key": header.UserKey, + } + + errTruncate := dokter.DeleteJadwalDokter() + if errTruncate != nil { + log.Println(errTruncate) + return false + } + + errTruncateTemp := dokter.DeleteJadwalDokterTemp() + if errTruncateTemp != nil { + log.Println(errTruncateTemp) + return false + } + + // Select from daftar spesialis + spesialis, err := dokter.GetSpesialis() + if err != nil { + return false + } + + var listIdSpesialis = make(map[string]int) + for _, kodeDokter := range spesialis { + listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID + } + + subspesialis, err := dokter.GetSubspesialis() + if err != nil { + return false + } + + var listIdSubspesialis = make(map[string]int) + for _, kodeDokter := range subspesialis { + listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID + } + + listDokter, err := dokter.GetDokter() + if err != nil { + return false + } + + var listIddokter = make(map[int]string) + for _, kodeDokter := range listDokter { + listIddokter[kodeDokter.HfisCode] = kodeDokter.ID + } + + var reqInsert *jadwal_dokter.JadwalDokterSatuData + + for _, value := range spesialis { + tanggal := time.Now().Format("2006-01-02") + for i := 0; i < 7; i++ { + kdPoly := value.Kode + res, err := JadwalDokterGetResponse(url, header, kdPoly, tanggal, headers) + if err != nil { + log.Println("Error making external API request: %v", err) + return false + } + date, errParse := time.Parse("2006-01-02", tanggal) + if errParse != nil { + return false + } + tanggal = date.AddDate(0, 0, 1).Format("2006-01-02") + log.Println("Tanggal :", tanggal) + if res == nil { + log.Println("Skip Proses") + continue + } + for _, v := range res.Response { + idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis) + idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis) + idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter) + reqInsert = &jadwal_dokter.JadwalDokterSatuData{ + Hari: v.Hari, + NamaHari: v.NamaHari, + Waktu: v.Jadwal, + Dokter: idDokter, + Spesialis: idSpesialis, + SubSpesialis: idSubspesialis, + Status: 1, // When available always set to 1 + } + if reqInsert.Dokter != "" { + errInsert := dokter.InsertJadwalDokter(reqInsert) + if errInsert != nil { + log.Println(errInsert) + return false + } + } else { + reqInsert.Dokter = strconv.Itoa(v.KodeDokter) + errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert) + if errInsertTemp != nil { + log.Println(errInsertTemp) + return false + } + } + } + } + } + return true +} + +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 + } + + 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.ID, + NamaLengkap: namaLengkap, + HFISCode: hfisCode, + KodeDPJP: dpjp, + JadwalDokter: jadwalDokter, + IDDokter: k.ID, + } + } + log.Println("Response :", res) + c.JSON(http.StatusOK, res) +} + +func GetSpesialisByDate(c *gin.Context) { + tanggal := c.Param("tanggal") + date, err := time.Parse("2006-01-02", tanggal) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + hari := date.Local().Weekday().String() + hari = utils.ConvertDay(hari) + idSpesialis, err := dokter.GetJadwalDokterByDate(hari) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + listSpesialis, err := dokter.GetSpesialisByID(idSpesialis) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + c.JSON(http.StatusOK, listSpesialis) +} + +func GetJadwalSubspesialisByDate(c *gin.Context) { + tanggal := c.Param("tanggal") + date, err := time.Parse("2006-01-02", tanggal) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + + log.Println("tanggal: ", tanggal) + hari := date.Local().Weekday().String() + hari = utils.ConvertDay(hari) + idsubspesialis, err := dokter.GetJadwalSubspesialisByDate(hari) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + listSpesialis, err := dokter.GetSubspesialisByIDBatch(idsubspesialis) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + c.JSON(http.StatusOK, listSpesialis) +} + +func GetDokterBySpesialis(c *gin.Context) { + spesialis := c.Param("spesialis") + tanggal := c.Param("tanggal") + date, err := time.Parse("2006-01-02", tanggal) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + hari := date.Local().Weekday().String() + hari = utils.ConvertDay(hari) + idDokter, err := dokter.GetJadwalDokterBySpesialis(hari, spesialis) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + namaDokter, err := dokter.GetNamaLengkapDokter(idDokter) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + var resDokter []dktr.ResponseDokter + idSpesialis, err := strconv.Atoi(spesialis) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + for _, v := range namaDokter { + gelarDepan := utils.ReplaceGelar(v.GelarDepan) + gelarBelakang := utils.ReplaceGelar(v.GelarBelakang) + namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang + namaLengkap = strings.TrimPrefix(namaLengkap, " ") + namaLengkap = strings.TrimSuffix(namaLengkap, " ") + resDokter = append(resDokter, dktr.ResponseDokter{ + ID: v.ID, + NamaLengkap: namaLengkap, + Spesialis: idSpesialis, + HFISCode: v.HFISCode, + }) + } + log.Println("Response :", resDokter) + c.JSON(http.StatusOK, resDokter) +} + +func GetDokterBySubspesialis(c *gin.Context) { + subspesialis := c.Param("subspesialis") + tanggal := c.Param("tanggal") + date, err := time.Parse("2006-01-02", tanggal) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + + log.Println("subspesialis: ", subspesialis) + log.Println("tanggal: ", tanggal) + + hari := date.Local().Weekday().String() + hari = utils.ConvertDay(hari) + idDokter, err := dokter.GetJadwalDokterBySubpesialis(hari, subspesialis) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + namaDokter, err := dokter.GetNamaLengkapDokter(idDokter) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + var resDokter []dktr.ResponseDokterNew + idSubspesialis, err := strconv.Atoi(subspesialis) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + + listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis) + if err != nil { + c.JSON(http.StatusInternalServerError, err) + } + + for _, v := range namaDokter { + gelarDepan := utils.ReplaceGelar(v.GelarDepan) + gelarBelakang := utils.ReplaceGelar(v.GelarBelakang) + namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang + namaLengkap = strings.TrimPrefix(namaLengkap, " ") + namaLengkap = strings.TrimSuffix(namaLengkap, " ") + resDokter = append(resDokter, dktr.ResponseDokterNew{ + ID: v.ID, + NamaLengkap: namaLengkap, + Subspesialis: idSubspesialis, + HFISCode: v.HFISCode, + KodePoli: listSubspesialis.Kode, + DPJPCode: v.DPJPCode, + }) + } + log.Println("Response :", resDokter) + c.JSON(http.StatusOK, resDokter) +} + +func GetDataJadwalDokter() bool { + baseUrl := os.Getenv("BASEURL_BPJS") + endpoint := os.Getenv("ANTREAN_RS") + + url := baseUrl + endpoint + log.Println("url", url) + conf := config.ConfigBpjs{} + + spesialis, err := dokter.GetSpesialis() + if err != nil { + log.Println("Error getting spesialis", err) + return false + } + + var listIdSpesialis = make(map[string]int) + for _, kodeDokter := range spesialis { + listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID + } + + subspesialis, err := dokter.GetSubspesialis() + if err != nil { + log.Println("Error getting subspesialis", err) + return false + } + + var listIdSubspesialis = make(map[string]int) + for _, kodeDokter := range subspesialis { + listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID + } + + listDokter, err := dokter.GetDokter() + if err != nil { + log.Println("Error getting dokter", err) + return false + } + + var listIddokter = make(map[int]string) + for _, kodeDokter := range listDokter { + listIddokter[kodeDokter.HfisCode] = kodeDokter.ID + } + db := cfg.SatuDataDB + errTx := db.Transaction(func(tx *gorm.DB) error { + for _, value := range spesialis { + url := baseUrl + endpoint + "/jadwaldokter/kodepoli/" + value.Kode + + header := cfg.SetHeader(false, conf) + + headers := map[string]string{ + "X-cons-id": header.ConsID, + "X-timestamp": header.TimeStamp, + "X-signature": header.XSignature, + "user_key": header.UserKey, + } + + log.Println("Headers : ", headers) + var headerStringBuilder strings.Builder + for key, value := range headers { + headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value)) + } + headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ") + + startDate := time.Now() + endDate := startDate.AddDate(0, 1, 0) + logTimeStart := time.Now().Format("2006-01-02 15:04:05") + var res *jadwal_dokter.JadwalDokter + var reqLog []*jadwal_dokter.RequestJadwalDokter + var resLog []*jadwal_dokter.JadwalDokter + + for current := startDate; current.Before(endDate); current = current.AddDate(0, 0, 1) { + tanggal := current.Format("2006-01-02") + log.Println("Tanggal :", tanggal) + urlReq := url + "/tanggal/" + tanggal + + res, err = JadwalDokterGetResponse(urlReq, header, value.Kode, tanggal, headers) + if err != nil { + log.Printf("Error making external API request: %v", err) + return err + } + + reqLog = append(reqLog, &jadwal_dokter.RequestJadwalDokter{ + KodePoli: value.Kode, + Tanggal: tanggal, + }) + + resLog = append(resLog, &jadwal_dokter.JadwalDokter{ + Response: res.Response, + MetaData: res.MetaData, + }) + + if res.MetaData.Code != 200 { + resLog = append(resLog, &jadwal_dokter.JadwalDokter{ + Response: res.Response, + MetaData: res.MetaData, + }) + continue + } + + for _, v := range res.Response { + idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis) + idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis) + idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter) + reqInsert := &jadwal_dokter.DataJadwalDokterSatuData{ + ID: uuid.NewString(), + DateCreated: logTimeStart, + Hari: strconv.Itoa(v.Hari), + NamaHari: v.NamaHari, + Waktu: v.Jadwal, + Dokter: idDokter, + Spesialis: idSpesialis, + SubSpesialis: idSubspesialis, + TanggalJadwal: tanggal, + } + if reqInsert.Dokter != "" { + errInsert := dokter.InsertDataJadwalDokter(tx, reqInsert) + if errInsert != nil { + log.Println(errInsert) + return errInsert + } + } else { + log.Println("Dokter tidak punya HFIS") + continue + } + } + } + + reqLogJson, errMarshal := json.Marshal(reqLog) + if errMarshal != nil { + log.Println(errMarshal) + return errMarshal + } + resLogJson, errMarshal2 := json.Marshal(resLog) + if errMarshal2 != nil { + log.Println(errMarshal2) + return errMarshal2 + } + logTimeEnd := time.Now().Format("2006-01-02 15:04:05") + reqLogApi := &logapi.DataLogAPI{ + ID: uuid.NewString(), + DateCreated: logTimeEnd, + Parameter: "BPJS-AntreanRS-JadwalDokter", + Header: headerString, + Method: "GET", + Url: url, + Request: reqLogJson, + Respon: resLogJson, + ResponCode: strconv.Itoa(res.MetaData.Code), + ResponTimeStart: logTimeStart, + ResponTimeEnd: logTimeEnd, + Comment: res.MetaData.Message, + } + errLog := log_api.InsertLogAPI(reqLogApi) + if errLog != nil { + log.Printf("Error making external API request: %v", err) + return errLog + } + } + return nil + }) + if errTx != nil { + log.Println(errTx) + return false + } + log.Println("Berhasil ambil jadwal data dokter") + return true +} diff --git a/handlers/bpjs/jadwal_dokter/response.go b/handlers/bpjs/jadwal_dokter/response.go index 2bc311d..42b71f3 100644 --- a/handlers/bpjs/jadwal_dokter/response.go +++ b/handlers/bpjs/jadwal_dokter/response.go @@ -1,69 +1,74 @@ -package jadwal_dokter - -import ( - "bridging-rssa/docs" - "bridging-rssa/models/bpjs/jadwal_dokter" - "bridging-rssa/models/config" - "encoding/json" - "fmt" - "io" - "log" - "net/http" -) - -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.Printf("Error creating request: %v", err) - } - - for key, value := range headers { - req.Header.Set(key, value) - } - - log.Println("REQ", req.Header) - client := http.Client{} - response, err := client.Do(req) - if err != nil { - log.Printf("Error making external API request: %v", err) - } - log.Println("RESPONSE: ", response) - - key := header.ConsID + header.SecretKey + header.TimeStamp - res, err := io.ReadAll(response.Body) - if err != nil { - fmt.Println(err) - } - - var jadwalDokterRaw jadwal_dokter.JadwalDokterRaw - err = json.Unmarshal([]byte(res), &jadwalDokterRaw) - if err != nil { - log.Printf("Error Unmarshaling: %v", err) - } - - if jadwalDokterRaw.MetaData.Code == 201 { - log.Println("No Data Found") - return nil, nil - } - - dataResp, err := docs.StringDecrypt(key, jadwalDokterRaw.Response) - if err != nil { - log.Printf("Error Decrypt: %v", err) - } - - var listDokter []jadwal_dokter.ListDokter - - log.Println("dataresp: ", dataResp) - - err = json.Unmarshal([]byte(dataResp), &listDokter) - if err != nil { - log.Printf("Error Decode: %v", err) - } - - log.Println("res: ", &listDokter) - - return &listDokter, nil -} +package jadwal_dokter + +import ( + "bridging-rssa/docs" + "bridging-rssa/models/bpjs/jadwal_dokter" + "bridging-rssa/models/config" + "encoding/json" + "fmt" + "io" + "log" + "net/http" +) + +func JadwalDokterGetResponse(url string, header *config.Header, kdPoly string, tanggal string, headers map[string]string) (*jadwal_dokter.JadwalDokter, error) { + log.Println("URL", url) + req, err := http.NewRequest("GET", url, nil) + if err != nil { + log.Printf("Error creating request: %v", err) + } + + for key, value := range headers { + req.Header.Set(key, value) + } + + log.Println("REQ", req.Header) + client := http.Client{} + response, err := client.Do(req) + if err != nil { + log.Printf("Error making external API request: %v", err) + } + log.Println("RESPONSE: ", response) + + key := header.ConsID + header.SecretKey + header.TimeStamp + res, err := io.ReadAll(response.Body) + if err != nil { + fmt.Println(err) + } + + var jadwalDokterRaw jadwal_dokter.JadwalDokterRaw + err = json.Unmarshal([]byte(res), &jadwalDokterRaw) + if err != nil { + log.Printf("Error Unmarshaling: %v", err) + } + + responses := &jadwal_dokter.JadwalDokter{} + if jadwalDokterRaw.MetaData.Code != 200 { + responses.MetaData.Code = jadwalDokterRaw.MetaData.Code + responses.MetaData.Message = jadwalDokterRaw.MetaData.Message + log.Println("No Data Found") + return responses, nil + } + + dataResp, err := docs.StringDecrypt(key, jadwalDokterRaw.Response) + if err != nil { + log.Printf("Error Decrypt: %v", err) + } + + var listDokter []*jadwal_dokter.ListDokter + + log.Println("dataresp: ", dataResp) + + err = json.Unmarshal([]byte(dataResp), &listDokter) + if err != nil { + log.Printf("Error Decode: %v", err) + } + + log.Println("res: ", &listDokter) + responses = &jadwal_dokter.JadwalDokter{ + Response: listDokter, + MetaData: jadwalDokterRaw.MetaData, + } + + return responses, nil +} diff --git a/handlers/bpjs/surat_kontrol/surat_kontrol.go b/handlers/bpjs/surat_kontrol/surat_kontrol.go index 04999c3..469fd59 100644 --- a/handlers/bpjs/surat_kontrol/surat_kontrol.go +++ b/handlers/bpjs/surat_kontrol/surat_kontrol.go @@ -949,56 +949,68 @@ func GetDataSurKon(c *gin.Context) { func GetDataSurKonByID(c *gin.Context) { id := c.Param("idxdaftar") tipe := c.Param("tiperawat") - data, err := suratkontrol.GetDataSuratKontrolByID(id, tipe) + var dataSurKon *sk.GetDataSuratKontrol + dataSurKon, err := suratkontrol.GetDataSuratKontrolByIDTipe(id, tipe) if err != nil { - log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), - }) - return + if err.Error() == "Data tidak ada" { + dataSurKon, err = suratkontrol.GetDataSuratKontrolByID(id) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } + } else { + 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 + gelarDepan := utils.ReplaceGelar(dataSurKon.GelarDepan) + gelarBelakang := utils.ReplaceGelar(dataSurKon.GelarBelakang) + namaLengkap := gelarDepan + " " + dataSurKon.NamaLengkapDokter + " " + gelarBelakang namaLengkap = strings.TrimPrefix(namaLengkap, " ") namaLengkap = strings.TrimSuffix(namaLengkap, " ") - dateCetakSurkon, _ := time.Parse(time.RFC3339, data.TglCetakSurKon) + dateCetakSurkon, _ := time.Parse(time.RFC3339, dataSurKon.TglCetakSurKon) dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02") - dateRencanaSurkon, _ := time.Parse(time.RFC3339, data.TglRencanaKontrol) + dateRencanaSurkon, _ := time.Parse(time.RFC3339, dataSurKon.TglRencanaKontrol) dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02") resSurKon := &sk.ResponseGetDataSuratKontrol{ - IDDataSurKon: data.IDDataSurKon, - IDXDaftar: data.IDXDaftar, + IDDataSurKon: dataSurKon.IDDataSurKon, + IDXDaftar: dataSurKon.IDXDaftar, TglCetakSurKon: dateCetakSurkonString, TglRencanaKontrol: dateRencanaSurkonString, - NomorSurKon: data.NomorSurKon, - PoliAsal: data.PoliAsal, - PoliTujuan: data.PoliTujuan, - NomorSEP: data.NomorSEP, - NamaPasien: data.NamaPasien, + NomorSurKon: dataSurKon.NomorSurKon, + PoliAsal: dataSurKon.PoliAsal, + PoliTujuan: dataSurKon.PoliTujuan, + NomorSEP: dataSurKon.NomorSEP, + NamaPasien: dataSurKon.NamaPasien, NamaDokter: namaLengkap, NomorKartu: "", - Subspesialis: data.Subspesialis, - KodePoli: data.KodePoli, - KodeDokter: data.KodeDokter, - IDPoli: data.IDPoli, - IDDokter: data.IDDokter, - KodeDPJP: data.KodeDPJP, - NoRM: data.NoRM, - KodeDiagnosa: data.KodeDiagnosa, - NamaDiagnosa: data.NamaDiagnosa, - TipeSurKon: data.TipeSurKon, - User: data.User, + Subspesialis: dataSurKon.Subspesialis, + KodePoli: dataSurKon.KodePoli, + KodeDokter: dataSurKon.KodeDokter, + IDPoli: dataSurKon.IDPoli, + IDDokter: dataSurKon.IDDokter, + KodeDPJP: dataSurKon.KodeDPJP, + NoRM: dataSurKon.NoRM, + KodeDiagnosa: dataSurKon.KodeDiagnosa, + NamaDiagnosa: dataSurKon.NamaDiagnosa, + TipeSurKon: dataSurKon.TipeSurKon, + User: dataSurKon.User, } c.JSON(http.StatusOK, resSurKon) } func PrintSurKon(c *gin.Context) { id := c.Param("idxdaftar") - tipe := c.Param("tiperawat") - data, err := suratkontrol.GetDataSuratKontrolByID(id, tipe) + data, err := suratkontrol.GetDataSuratKontrolByID(id) if err != nil { log.Println(err) c.JSON(http.StatusInternalServerError, &sk.MetadataString{ diff --git a/main.go b/main.go index d3ac1aa..ed949de 100644 --- a/main.go +++ b/main.go @@ -49,6 +49,17 @@ func main() { // } //}) + scheduler.AddFunc("0 2 15 * *", func() { + log.Println("=== RUNNING SCHEDULE GET JADWAL DOKTER MONTHLY===") + for { + success := jadwal_dokter.GetDataJadwalDokter() + if success { + log.Println("=== SCHEDULE GET JADWAL DOKTER MONTHLY DONE ===") + break + } + } + }) + go scheduler.Start() v1 := r.Group("/api") diff --git a/models/bpjs/jadwal_dokter/jadwal_dokter.go b/models/bpjs/jadwal_dokter/jadwal_dokter.go index 796d0ec..65af4dc 100644 --- a/models/bpjs/jadwal_dokter/jadwal_dokter.go +++ b/models/bpjs/jadwal_dokter/jadwal_dokter.go @@ -1,72 +1,94 @@ -package jadwal_dokter - -type JadwalDokterRaw struct { - Response string `json:"response"` - MetaData Metadata `json:"metadata"` -} - -type Metadata struct { - Code int `json:"code"` - Message string `json:"message"` -} - -type ListDokter struct { - KodeSubspesialis string `json:"kodesubspesialis"` - Hari int `json:"hari"` - KapasitasPasien int `json:"kapasitaspasien"` - Libur int `json:"libur"` - NamaHari string `json:"namahari"` - Jadwal string `json:"jadwal"` - NamaSubspesialis string `json:"namasubspesialis"` - NamaDokter string `json:"namadokter"` - KodePoli string `json:"kodepoli"` - NamaPoli string `json:"namapoli"` - KodeDokter int `json:"kodedokter"` -} - -type DaftarSpesialis struct { - ID int `json:"id"` - Kode string `json:"Kode"` - Spesialis string `json:"Spesialis"` -} - -type JadwalDokterSatuData struct { - ID int `gorm:"column:id" json:"id"` - Hari int `gorm:"column:Hari" json:"Hari"` - NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"` - Waktu string `gorm:"column:Waktu" json:"Waktu"` - Dokter string `gorm:"column:Dokter" json:"Dokter"` - Spesialis int `gorm:"column:Spesialis" json:"Spesialis"` - SubSpesialis int `gorm:"column:Sub_spesialis" json:"Sub_spesialis"` - Status int `gorm:"column:Status" json:"Status"` -} - -type JadwalDokterTempSatuData struct { - ID int `gorm:"column:id" json:"id"` - Hari int `gorm:"column:Hari" json:"Hari"` - NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"` - Waktu string `gorm:"column:Waktu" json:"Waktu"` - Dokter string `gorm:"column:Dokter" json:"Dokter"` - Spesialis string `gorm:"column:Spesialis" json:"Spesialis"` - SubSpesialis string `gorm:"column:Sub_spesialis" json:"Sub_spesialis"` - Status int `gorm:"column:Status" json:"Status"` -} - -type ResponseListHari struct { - IDSpesialis int `json:"id_spesialis"` - Kode string `json:"Kode"` - Spesialis string `json:"Spesialis"` - Subspesialis string `json:"Subspesialis"` - IDSubspesialis int `json:"id_subspesialis"` - NamaLengkap string `json:"nama_lengkap"` - HFISCode string `json:"HFIS_code"` - KodeDPJP string `json:"DPJP_code"` - IDDokter string `json:"id_dokter"` - JadwalDokter []ListJadwalDokter `json:"Jadwal_dokter"` -} - -type ListJadwalDokter struct { - NamaHari string `json:"Nama_hari"` - KodeHari int `json:"Kode_hari"` - Waktu string `json:"Waktu"` -} +package jadwal_dokter + +type JadwalDokterRaw struct { + Response string `json:"response"` + MetaData Metadata `json:"metadata"` +} + +type JadwalDokter struct { + Response []*ListDokter `json:"response"` + MetaData Metadata `json:"metadata"` +} + +type Metadata struct { + Code int `json:"code"` + Message string `json:"message"` +} + +type ListDokter struct { + KodeSubspesialis string `json:"kodesubspesialis"` + Hari int `json:"hari"` + KapasitasPasien int `json:"kapasitaspasien"` + Libur int `json:"libur"` + NamaHari string `json:"namahari"` + Jadwal string `json:"jadwal"` + NamaSubspesialis string `json:"namasubspesialis"` + NamaDokter string `json:"namadokter"` + KodePoli string `json:"kodepoli"` + NamaPoli string `json:"namapoli"` + KodeDokter int `json:"kodedokter"` +} + +type DaftarSpesialis struct { + ID int `json:"id"` + Kode string `json:"Kode"` + Spesialis string `json:"Spesialis"` +} + +type JadwalDokterSatuData struct { + ID int `gorm:"column:id" json:"id"` + Hari int `gorm:"column:Hari" json:"Hari"` + NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"` + Waktu string `gorm:"column:Waktu" json:"Waktu"` + Dokter string `gorm:"column:Dokter" json:"Dokter"` + Spesialis int `gorm:"column:Spesialis" json:"Spesialis"` + SubSpesialis int `gorm:"column:Sub_spesialis" json:"Sub_spesialis"` + Status int `gorm:"column:Status" json:"Status"` +} + +type DataJadwalDokterSatuData struct { + ID string `gorm:"column:id" json:"id"` + DateCreated string `gorm:"column:date_created" json:"Date_created"` + Hari string `gorm:"column:Hari" json:"Hari"` + NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"` + Waktu string `gorm:"column:Waktu" json:"Waktu"` + Dokter string `gorm:"column:Dokter" json:"Dokter"` + Spesialis int `gorm:"column:Spesialis" json:"Spesialis"` + SubSpesialis int `gorm:"column:Sub_spesialis" json:"Sub_spesialis"` + TanggalJadwal string `gorm:"column:Tanggal_jadwal" json:"Tanggal_jadwal"` +} + +type JadwalDokterTempSatuData struct { + ID int `gorm:"column:id" json:"id"` + Hari int `gorm:"column:Hari" json:"Hari"` + NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"` + Waktu string `gorm:"column:Waktu" json:"Waktu"` + Dokter string `gorm:"column:Dokter" json:"Dokter"` + Spesialis string `gorm:"column:Spesialis" json:"Spesialis"` + SubSpesialis string `gorm:"column:Sub_spesialis" json:"Sub_spesialis"` + Status int `gorm:"column:Status" json:"Status"` +} + +type ResponseListHari struct { + IDSpesialis int `json:"id_spesialis"` + Kode string `json:"Kode"` + Spesialis string `json:"Spesialis"` + Subspesialis string `json:"Subspesialis"` + IDSubspesialis int `json:"id_subspesialis"` + NamaLengkap string `json:"nama_lengkap"` + HFISCode string `json:"HFIS_code"` + KodeDPJP string `json:"DPJP_code"` + IDDokter string `json:"id_dokter"` + JadwalDokter []ListJadwalDokter `json:"Jadwal_dokter"` +} + +type ListJadwalDokter struct { + NamaHari string `json:"Nama_hari"` + KodeHari int `json:"Kode_hari"` + Waktu string `json:"Waktu"` +} + +type RequestJadwalDokter struct { + KodePoli string `json:"kodepoli"` + Tanggal string `json:"tanggal"` +}