From 96a7ec559de49ec387f8e16ab8da129d8daf965fc1ec6005de5e3a99a03f3b14 Mon Sep 17 00:00:00 2001 From: ahdan15 Date: Thu, 11 Sep 2025 16:33:26 +0700 Subject: [PATCH] penambahan validasi kunjungan --- .env | 6 ++ config/config.go | 17 ++++ .../satu_data/surat_kontrol/surat_kontrol.go | 62 +++++++++++-- handlers/bpjs/jadwal_dokter/jadwal_dokter.go | 42 +++++++++ handlers/bpjs/surat_kontrol/surat_kontrol.go | 89 ++++++++++++++----- main.go | 4 + models/bpjs/surat_kontrol/kunjugan_pasien.go | 21 +++++ models/bpjs/surat_kontrol/surat_kontrol.go | 1 + 8 files changed, 214 insertions(+), 28 deletions(-) diff --git a/.env b/.env index 6407a97..29991e2 100644 --- a/.env +++ b/.env @@ -4,6 +4,12 @@ SATUDATA_PASSWORD=stim*RS54 SATUDATA_NAME=satu_db SATUDATA_PORT=5000 +SIMRS_HOST=10.10.123.163 +SIMRS_USERNAME=simrs +SIMRS_PASSWORD=simrs.rssa +SIMRS_NAME=simrs +SIMRS_PORT=5432 + BASEURL_BPJS=https://apijkn.bpjs-kesehatan.go.id ANTREAN_RS=/antreanrs CONS_ID=5257 diff --git a/config/config.go b/config/config.go index 17d816c..45b870b 100644 --- a/config/config.go +++ b/config/config.go @@ -17,6 +17,7 @@ import ( var DB *gorm.DB var SatuDataDB *gorm.DB +var DBsimrs *gorm.DB var err error func ConnectDB() { @@ -26,6 +27,12 @@ func ConnectDB() { dbNameSatuData := os.Getenv("SATUDATA_NAME") portSatuData := os.Getenv("SATUDATA_PORT") + hostDBsimrs := os.Getenv("SIMRS_HOST") + userNameDBsimrs := os.Getenv("SIMRS_USERNAME") + passwordDBsimrs := os.Getenv("SIMRS_PASSWORD") + dbNameDBsimrs := os.Getenv("SIMRS_NAME") + portDBsimrs := os.Getenv("SIMRS_PORT") + satuData := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", hostSatuData, userNameSatuData, passwordSatuData, dbNameSatuData, portSatuData) SatuDataDB, err = gorm.Open(postgres.Open(satuData), &gorm.Config{}) @@ -34,6 +41,16 @@ func ConnectDB() { } else { log.Println("Successfully connected to the database") } + + dbSimrs := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", + hostDBsimrs, userNameDBsimrs, passwordDBsimrs, dbNameDBsimrs, portDBsimrs) + + DBsimrs, err = gorm.Open(postgres.Open(dbSimrs), &gorm.Config{}) + if err != nil { + log.Fatal("Failed to connect to DBsimrs database: ", err) + } else { + log.Println("Successfully connected to the DBsimrs database") + } } func SetHeader(isIcare bool, cfg config.ConfigBpjs) *config.Header { diff --git a/database/satu_data/surat_kontrol/surat_kontrol.go b/database/satu_data/surat_kontrol/surat_kontrol.go index 9abda75..f7ab0c2 100644 --- a/database/satu_data/surat_kontrol/surat_kontrol.go +++ b/database/satu_data/surat_kontrol/surat_kontrol.go @@ -9,6 +9,46 @@ import ( "gorm.io/gorm" ) +func GetAdmission(idxdaftar string) (*suratkontrol.Addmission, *suratkontrol.Addmission) { + var dataAdmission *suratkontrol.Addmission + err := config.DBsimrs.Raw(`select ta."dokterpengirim",ta."id_admission",ta."dokter_penanggungjawab",ta."nosep",mp."nama",mp."noktp" from t_admission ta join m_pasien mp on ta."nomr" = mp."nomr" where ta.id_admission = ? `, idxdaftar).Scan(&dataAdmission) + if err != nil { + log.Println(err) + return nil, nil + } + log.Println(dataAdmission) + return dataAdmission, nil +} + +func Getdokter(kddokter int) (string, error) { + var idDokter string + err := config.SatuDataDB.Raw(`select "id" from data_pegawai where "KDDOKTER" = ? LIMIT 1`, kddokter).Scan(&idDokter).Error + if err != nil { + return "", err + } + return idDokter, err +} + +func InsertKunjunganPasien(reqInsert *suratkontrol.InsertKunjunganPasien) error { + log.Println("Req Insert Database : ", reqInsert) + insertQuery := `insert into "data_kunjungan_pasien" ("id", "IDXDAFTAR","NOMR","Nama_lengkap","NIK","DPJP","Tanggal_masuk","Jam_masuk" + values (?, ?, ?, ?, ?, ?, ?, ?)` + err := config.SatuDataDB.Exec(insertQuery, + reqInsert.ID, + reqInsert.IdxDaftar, + reqInsert.Nomr, + reqInsert.NamaLengkap, + reqInsert.NIK, + reqInsert.DPJP, + reqInsert.TanggalMasuk, + reqInsert.JamMasuk, + ).Error + if err != nil { + log.Println(err) + return err + } + return nil +} func GetDataKunjunganPasien(idxdaftar string) (*suratkontrol.KunjunganPasien, error) { var kunjunganPasien *suratkontrol.KunjunganPasien err := config.SatuDataDB.Raw(`select dkp."id", dkp."IDXDAFTAR" as idxdaftar, dkp."Nomor_sep" as nomorsep, @@ -56,8 +96,8 @@ 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", "Tipe_rawat","Nomor_kartu","Kode_icd","Diagnosa") - values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?)` + "User_created_surat_kontrol", "Tipe_surat_kontrol", "User_updated_surat_kontrol", "Tipe_rawat","Nomor_kartu","Kode_icd","Diagnosa","Idxdaftar_surat_kontrol") + values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?.?)` err := config.SatuDataDB.Exec(insertQuery, reqInsert.ID, reqInsert.DateCreated, @@ -75,6 +115,7 @@ func InsertDataSuratKontrol(reqInsert *suratkontrol.DataSuratKontrol) error { reqInsert.NomorKartu, reqInsert.KodeIcd, reqInsert.Diagnosa, + reqInsert.IdxDaftarSurkon, ).Error if err != nil { log.Println(err) @@ -355,10 +396,9 @@ func GetDataSuratKontrolidsurkon(id string) (*suratkontrol.GetDataSuratKontrol, dkp2."Display_diagnosis_primer_utama" as "Nama_diagnosa", dsk."Tipe_surat_kontrol" as "Tipe_SurKon", dsk."User_created_surat_kontrol" as "User", - dsk."Nomor_kartu", + dsk."Nomor_kartu" as "No_kartu", dsk."Kode_icd", - dsk."Diagnosa", -dsk."Nomor_kartu" as "No_kartu" + dsk."Diagnosa" 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" @@ -554,6 +594,18 @@ func GetNomorSurKon(idPasien string) (string, error) { return noSurKon, nil } +func GetNomorSurKonnew(idxdaftar string) (string, error) { + var noSurKon string + querySelect := `select dsk."Nomor_surat_kontrol" from data_surat_kontrol dsk where dsk."Idxdaftar_surat_kontrol" = ? and dsk."Tipe_surat_kontrol" <> '2' order by dsk."date_created"` + err := config.SatuDataDB.Raw(querySelect, idxdaftar).Scan(&noSurKon).Error + if err != nil { + log.Println(err) + return "", err + } + log.Println("Nomor SurKon :", noSurKon) + return noSurKon, nil +} + func Getdatahistori(norm string, offset, limit string) ([]*suratkontrol.HistoriSurkon, error) { var dataHistoriSurKon []*suratkontrol.HistoriSurkon err := config.SatuDataDB.Raw(`select dkp2."Nama_lengkap",dkp2."Nomor_sep",dsk."id",dkp2."IDXDAFTAR",dsk."Nomor_surat_kontrol",dsk."Tanggal_rencana_kontrol",dsk."Tanggal_cetak_surat_kontrol", diff --git a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go index 16d719c..af3649e 100644 --- a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go +++ b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go @@ -675,3 +675,45 @@ func GetJadwalDokterNew() bool { } return true } + +func GetJadwalbaru(*gin.Context) { + baseUrl := os.Getenv("BASEURL_BPJS") + endpoint := os.Getenv("ANTREAN_RS") + url := baseUrl + endpoint + log.Println(url) + + conf := config.ConfigBpjs{} + + header := cfg.SetHeader(false, conf) + + headers := map[string]string{ + "X-cons-id": header.ConsID, + "X-timestamp": header.TimeStamp, + "X-signature": header.XSignature, + "user_key": header.UserKey, + } + log.Println(headers) + + spesialis, err := dokter.GetSpesialis() + if err != nil { + return + } + + var listIdSpesialis = make(map[string]int) + for _, kodeDokter := range spesialis { + listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID + break + } + log.Println(listIdSpesialis) + + subspesialis, err := dokter.GetSubspesialis() + if err != nil { + return + } + + var listIdSubspesialis = make(map[string]int) + for _, kodeDokter := range subspesialis { + listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID + } + log.Println(listIdSubspesialis) +} diff --git a/handlers/bpjs/surat_kontrol/surat_kontrol.go b/handlers/bpjs/surat_kontrol/surat_kontrol.go index f55c0d0..79e2ff0 100644 --- a/handlers/bpjs/surat_kontrol/surat_kontrol.go +++ b/handlers/bpjs/surat_kontrol/surat_kontrol.go @@ -110,15 +110,66 @@ func InsertSuratkontrolNew(c *gin.Context) { }) return } + uuid := uuid.New().String() - kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar) + var kunjunganPasien *sk.KunjunganPasien + kunjunganPasien, err = suratkontrol.GetDataKunjunganPasien(req.IDXDaftar) if err != nil { log.Println(err) - c.JSON(http.StatusCreated, &sk.MetadataString{ - Code: "201", - Message: err.Error(), - }) - return + if err.Error() == "Data Tidak Ditemukan" { + dataAdmission, erradmission := suratkontrol.GetAdmission(req.IDXDaftar) + log.Println("kesini kagh", dataAdmission) + if erradmission != nil { + log.Println("masuk sini") + c.JSON(http.StatusCreated, &sk.MetadataString{ + Code: "201", + Message: "Pasien Tidak Ada Kunjungan", + }) + return + } + IdDokter, err := suratkontrol.Getdokter(dataAdmission.DokterPengirim) + if err != nil { + log.Println(err) + c.JSON(http.StatusCreated, &sk.MetadataString{ + Code: "201", + Message: "Dokter tidak Ditemukan", + }) + } + layout := "2006-01-02 15:04:05" // sesuaikan format string input + + masukrsTime, err := time.Parse(layout, dataAdmission.MasukRS) + Tanggalmasuk := masukrsTime.Format("2006-01-02") + Jammasuk := masukrsTime.Format("15:04:05") + insertKunjungan := &sk.InsertKunjunganPasien{ + ID: uuid, + IdxDaftar: dataAdmission.ID, + Nomr: dataAdmission.Nomr, + NamaLengkap: dataAdmission.NamaLengkap, + NIK: dataAdmission.NoKTP, + DPJP: IdDokter, + TanggalMasuk: Tanggalmasuk, + JamMasuk: Jammasuk, + } + log.Println("insertKunjungan:", insertKunjungan) + err = suratkontrol.InsertKunjunganPasien(insertKunjungan) + if err != nil { + log.Println(err) + c.JSON(http.StatusCreated, &sk.MetadataString{ + Code: "201", + Message: "Server Pasien Sedang Down", + }) + } + kunjunganPasien, err = suratkontrol.GetDataKunjunganPasien(req.IDXDaftar) + if err != nil { + log.Println(err) + c.JSON(http.StatusCreated, &sk.MetadataString{ + Code: "201", + Message: "Kunjungan Pasien Kosong", + }) + } + + } + } var idRuangan int @@ -136,7 +187,6 @@ func InsertSuratkontrolNew(c *gin.Context) { } } - uuid := uuid.New().String() if req.TipeSurKon == "2" { reqJson, err := json.Marshal(req) if err != nil { @@ -267,6 +317,7 @@ func InsertSuratkontrolNew(c *gin.Context) { TipeRawat: req.TipeRawat, KodeIcd: kodeICD, Diagnosa: diagnosa, + IdxDaftarSurkon: req.IDXDaftar, } log.Println(reqInsert) err = suratkontrol.InsertDataSuratKontrol(reqInsert) @@ -279,16 +330,6 @@ func InsertSuratkontrolNew(c *gin.Context) { return } - err = suratkontrol.UpdateKunjunganPasien(req) - if err != nil { - log.Println(err) - c.JSON(http.StatusCreated, &sk.MetadataString{ - Code: "201", - Message: err.Error(), - }) - return - } - reqInsertLog := &logapi.DataLogAPI{ ID: uuid, DateCreated: logTimeEnd, @@ -334,15 +375,17 @@ func InsertSuratkontrolNew(c *gin.Context) { log.Println("Response: ", response) c.JSON(http.StatusOK, response) } else { + + var dataSurkon string logTimeStart := time.Now().Format("2006-01-02 15:04:05") dataSurkon, err := suratkontrol.GetNomorSurKon(kunjunganPasien.ID) if err != nil { - log.Println(err) - c.JSON(http.StatusCreated, &sk.MetadataString{ - Code: "201", - Message: err.Error(), - }) - return + if err.Error() == "Data tidak ada" { + dataSurkon, err = suratkontrol.GetNomorSurKonnew(req.IDXDaftar) + if err != nil { + + } + } } noUrut := "001" diff --git a/main.go b/main.go index a9cc204..5754d38 100644 --- a/main.go +++ b/main.go @@ -81,6 +81,10 @@ func main() { { subspesialis.GET("/", bpjs.GetAllSubspesialis) } + test := v1.Group("/test") + { + test.GET("/test", jadwal_dokter.GetJadwalbaru) + } //API UNTUK JADWAL DOKTER jadwalDokter := v1.Group("/jadwaldokter") diff --git a/models/bpjs/surat_kontrol/kunjugan_pasien.go b/models/bpjs/surat_kontrol/kunjugan_pasien.go index 243682b..585bf42 100644 --- a/models/bpjs/surat_kontrol/kunjugan_pasien.go +++ b/models/bpjs/surat_kontrol/kunjugan_pasien.go @@ -23,3 +23,24 @@ type KunjunganPasien struct { DisplayDiagnosisPrimerUtama string `gorm:"column:Display_diagnosis_primer_utama" json:"Display_diagnosis_primer_utama"` NomorRM string `gorm:"column:No_rm" json:"No_rm"` } + +type Addmission struct { + ID int `gorm:"column:id_admission" json:"id"` + Nomr string `gorm:"column:nomr" json:"nomr"` + DokterPengirim int `gorm:"column:dokterpengirim" json:"dokterpengirim"` + NoSEP string `gorm:"column:nosep" json:"no_sep"` + NamaLengkap string `gorm:"column:nama" json:"namalengkap"` + NoKTP string `gorm:"column:noktp" json:"noktp"` + MasukRS string `gorm:"column:masukrs" json:"masukrs"` +} + +type InsertKunjunganPasien struct { + ID string `gorm:"column:id" json:"id"` + IdxDaftar int `gorm:"column:IDXDAFTAR" json:"idxdaftar"` + Nomr string `gorm:"column:NOMR" json:"nomr"` + NamaLengkap string `gorm:"column:Nama_lengkap" json:"namalengkap"` + NIK string `gorm:"column:NIK" json:"nik"` + DPJP string `gorm:"column:DPJP" json:"dpjp"` + TanggalMasuk string `gorm:"column:Tanggal_masuk" json:"tanggalmasuk"` + JamMasuk string `gorm:"column:Jam_masuk" json:"jammasuk"` +} diff --git a/models/bpjs/surat_kontrol/surat_kontrol.go b/models/bpjs/surat_kontrol/surat_kontrol.go index d32901e..e445cd2 100644 --- a/models/bpjs/surat_kontrol/surat_kontrol.go +++ b/models/bpjs/surat_kontrol/surat_kontrol.go @@ -273,6 +273,7 @@ type DataSuratKontrol struct { TipeSurKon string `gorm:"column:Tipe_surat_kontrol" json:"Tipe_surat_kontrol"` UserUpdatedSurKon string `gorm:"column:User_updated_surat_kontrol" json:"User_updated_surat_kontrol"` TipeRawat string `gorm:"column:Tipe_rawat" json:"Tipe_rawat"` + IdxDaftarSurkon string `gorm:"column:Idxdaftar_surat_kontrol" json:"IdxDaftar_surkon"` } type ResponseSuratKontrolBySEP struct {