Author SHA256 Message Date
meninjar dev 36cf47313b update docker 2024-09-30 01:34:09 +00:00
47 changed files with 602 additions and 4850 deletions
-35
View File
@@ -1,35 +0,0 @@
SATUDATA_HOST=10.10.123.165
SATUDATA_USERNAME=stim
SATUDATA_PASSWORD=stim*RS54
SATUDATA_NAME=satu_db
SATUDATA_PORT=5000
BASEURL_BPJS=https://apijkn.bpjs-kesehatan.go.id
ANTREAN_RS=/antreanrs
CONS_ID=5257
USER_KEY=4cf1cbef8c008440bbe9ef9ba789e482
SECRET_KEY=1bV363512D
CONS_ID_DEV=16041
USER_KEY_DEV=467a2817fde5070f66c9a41fbeb8dc2c
SECRET_KEY_DEV=8pP3D5431E
USER_KEY_ICARE=1cd65acaa349684be6353bea5149e2e2
BASEURL_BPJS_DEV=https://apijkn-dev.bpjs-kesehatan.go.id
VCLAIM_RS_DEV=/vclaim-rest-dev
SURAT_KONTROL_RS=/vclaim-rest
I_CARE_JKN=/wsihs
I_CARE_JKN_DEV=/ihs_dev
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/
GET_NOMOR_RUJUKAN=/Rujukan/
GET_NOMOR_RUJUKAN_BATCH=/Rujukan/List/Peserta/
GET_FKRTL=/api/rs/validate
GET_FKTP=/api/pcare/validate
Executable
View File
-8
View File
@@ -1,8 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
-13
View File
@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="Go" enabled="true">
<buildTags>
<option name="os" value="linux" />
</buildTags>
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
-8
View File
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/api-bpjs-surkon.iml" filepath="$PROJECT_DIR$/.idea/api-bpjs-surkon.iml" />
</modules>
</component>
</project>
Generated
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
+2 -6
View File
@@ -12,15 +12,11 @@ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
# RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest
# Set timezone ke Asia/Jakarta
ENV TZ=Asia/Jakarta
RUN apk --no-cache add ca-certificates tzdata
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
COPY --from=builder /app/.env .
EXPOSE 8083
EXPOSE 8080
CMD ["./main"]
+57 -42
View File
@@ -16,27 +16,65 @@ import (
)
var DB *gorm.DB
var localDB *gorm.DB
var SatuDataDB *gorm.DB
var SimrsDataDB *gorm.DB
var err error
func ConnectDB() {
// POSTGRE_DB_HOST=10.10.123.223
// POSTGRE_DB_PORT=5432
// POSTGRE_DB_NAME=simrsbackup
// POSTGRE_DB_USER=simtest
// POSTGRE_DB_PASS=12345
// hostDB := os.Getenv("DB_HOST")
// usernameDB := os.Getenv("DB_USERNAME")
// passwordDB := os.Getenv("DB_PASSWORD")
// dbName := os.Getenv("DB_NAME")
// portDB := os.Getenv("DB_PORT")
hostSatuData := os.Getenv("SATUDATA_HOST")
userNameSatuData := os.Getenv("SATUDATA_USERNAME")
passwordSatuData := os.Getenv("SATUDATA_PASSWORD")
dbNameSatuData := os.Getenv("SATUDATA_NAME")
portSatuData := os.Getenv("SATUDATA_PORT")
hostSimrsDB := os.Getenv("SIMRS_DB_HOST")
usernameSimrsDB := os.Getenv("SIMRS_DB_USERNAME")
passwordSimrsDB := os.Getenv("SIMRS_DB_PASSWORD")
dbNameSimrsDB := os.Getenv("SIMRS_DB_NAME")
portSimrsDB := os.Getenv("SIMRS_DB_PORT")
// local := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", hostDB, usernameDB, passwordDB, dbName, portDB)
satuData := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", hostSatuData, userNameSatuData, passwordSatuData, dbNameSatuData, portSatuData)
simrsData := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", hostSimrsDB, usernameSimrsDB, passwordSimrsDB, dbNameSimrsDB, portSimrsDB)
// localDB, err = gorm.Open(postgres.Open(local), &gorm.Config{})
// if err != nil {
// log.Fatal("Failed to connect to Satu Data database: ", err)
// } else {
// log.Println("Successfully connected to the database")
// }
SatuDataDB, err = gorm.Open(postgres.Open(satuData), &gorm.Config{})
if err != nil {
log.Fatal("Failed to connect to Satu Data database: ", err)
} else {
log.Println("Successfully connected to the database")
}
SimrsDataDB, err = gorm.Open(postgres.Open(simrsData), &gorm.Config{})
if err != nil {
log.Fatal("Failed to connect to Satu Data database: ", err)
} else {
log.Println("Successfully connected to the database")
}
}
func SetHeader(isIcare bool, cfg config.ConfigBpjs) *config.Header {
func SetHeader(cfg config.ConfigBpjs) (string, string, string, string, string) {
timenow := time.Now().UTC()
time := time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC)
@@ -46,9 +84,6 @@ func SetHeader(isIcare bool, cfg config.ConfigBpjs) *config.Header {
cfg.User_key = os.Getenv("USER_KEY")
cfg.Secret_key = os.Getenv("SECRET_KEY")
if isIcare {
cfg.User_key = os.Getenv("USER_KEY_ICARE")
}
secret := []byte(cfg.Secret_key)
message := []byte(cfg.Cons_id + "&" + fmt.Sprint(tstamp))
hash := hmac.New(sha256.New, secret)
@@ -58,49 +93,29 @@ func SetHeader(isIcare bool, cfg config.ConfigBpjs) *config.Header {
// 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
return cfg.Cons_id, cfg.Secret_key, cfg.User_key, fmt.Sprint(tstamp), X_signature
}
func SetHeaderDev(b bool, cfg config.ConfigBpjs) *config.Header {
// func SetHeaderSatusehat(cfg config.ConfigSatuSehat) (string, string, string, string, string) {
timenow := time.Now().UTC()
time := time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC)
tstamp := timenow.Unix() - time.Unix()
// timenow := time.Now().UTC()
// time := time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC)
// tstamp := timenow.Unix() - time.Unix()
cfg.Cons_id = os.Getenv("CONS_ID_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")
// 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))
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))
// 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
}
// }
+1 -48
View File
@@ -14,7 +14,7 @@ import (
func GetDokter() ([]dokter.DaftarDokterRes, error) {
var listDokter []dokter.DaftarDokter
var res []dokter.DaftarDokterRes
result := config.SatuDataDB.Raw(`select "id", "HFIS_code" from "data_pegawai" where "HFIS_code" is not null`).Scan(&listDokter)
result := config.SatuDataDB.Debug().Raw(`select "id", "HFIS_code" from "data_pegawai" where "HFIS_code" is not null`).Scan(&listDokter)
if result.Error != nil {
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
log.Fatalf("Error get data : %v", result.Error)
@@ -40,50 +40,3 @@ 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.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",
dp."Code_dpjp" as "DPJP_code"
from "data_pegawai" dp
left join data_ktp dk on dp."KTP" = dk.id
WHERE dp.id in ?`, idDokter).Find(&namaDokter)
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
}
func GetHFISCode(dpjp string) (*dokter.DaftarDokter, error) {
var dataDokter *dokter.DaftarDokter
err := config.SatuDataDB.Raw(`select dp."id", dp."HFIS_code" from data_pegawai dp where dp."Code_dpjp" = ?`, dpjp).First(&dataDokter).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
errMsg := errors.New("Data tidak ditemukan")
log.Println("error :", errMsg)
return nil, errMsg
}
log.Println("error :", err)
return nil, err
}
log.Println("Daftar Dokter :", dataDokter)
return dataDokter, nil
}
+8 -98
View File
@@ -3,96 +3,16 @@ package dokter
import (
"bridging-rssa/config"
"bridging-rssa/models/bpjs/jadwal_dokter"
"gorm.io/gorm"
"log"
"strconv"
"github.com/google/uuid"
)
func GetJadwalDokterByDPJP(dpjp string) (string, error) {
var id string
errSelect := config.SatuDataDB.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.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.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.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.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.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(tanggal string, subspesialis string) ([]string, error) {
var listDokter []string
errSelect := config.SatuDataDB.Raw(`select "Dokter" from "data_jadwal_dokter" where "Tanggal_jadwal" = ? and "Sub_spesialis" = ? order by "Sub_spesialis"`, tanggal, 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.Exec(`truncate table "daftar_jadwal_dokter"`).Error
err := config.SatuDataDB.Debug().Exec(`truncate table "daftar_jadwal_dokter"`).Error
if err != nil {
log.Printf("Failed truncate data : %v", err)
return err
}
log.Println("Success truncate data")
return nil
}
func TruncateDataJadwalDokter() error {
err := config.SatuDataDB.Exec(`truncate table "data_jadwal_dokter"`).Error
if err != nil {
log.Printf("Failed truncate data : %v", err)
log.Fatalf("Failed truncate data : %v", err)
return err
}
log.Println("Success truncate data")
@@ -100,9 +20,9 @@ func TruncateDataJadwalDokter() error {
}
func DeleteJadwalDokterTemp() error {
err := config.SatuDataDB.Exec(`truncate table "daftar_jadwal_dokter_temp"`).Error
err := config.SatuDataDB.Debug().Exec(`truncate table "daftar_jadwal_dokter_temp"`).Error
if err != nil {
log.Printf("Failed truncate data : %v", err)
log.Fatalf("Failed truncate data : %v", err)
return err
}
log.Println("Success truncate data")
@@ -110,9 +30,9 @@ func DeleteJadwalDokterTemp() error {
}
func InsertJadwalDokter(reqInsert *jadwal_dokter.JadwalDokterSatuData) error {
err := config.SatuDataDB.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
err := config.SatuDataDB.Debug().Exec(`insert into "daftar_jadwal_dokter" ("Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Status") values (?, ? ,?, ?, ?, ?, ?)`, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, reqInsert.Spesialis, reqInsert.SubSpesialis, reqInsert.Status).Error
if err != nil {
log.Printf("Failed insert data : %v", err)
log.Fatalf("Failed insert data : %v", err)
return err
}
log.Println("Success insert data")
@@ -123,19 +43,9 @@ func InsertJadwalDokterTemp(reqInsert *jadwal_dokter.JadwalDokterSatuData) error
spesialis := strconv.Itoa(reqInsert.Spesialis)
subspesialis := strconv.Itoa(reqInsert.SubSpesialis)
id := uuid.New()
err := config.SatuDataDB.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
err := config.SatuDataDB.Debug().Exec(`insert into "daftar_jadwal_dokter_temp" ("id", "Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Status") values (?, ?, ?, ?, ?, ?, ?, ?)`, id, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, spesialis, subspesialis, reqInsert.Status).Error
if err != nil {
log.Printf("Failed insert data : %v", err)
return err
}
log.Println("Success insert data")
return nil
}
func 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)
log.Fatalf("Failed insert data : %v", err)
return err
}
log.Println("Success insert data")
+3 -18
View File
@@ -12,28 +12,13 @@ import (
func GetSpesialis() ([]dokter.DaftarSpesialis, error) {
var daftarSpesialis []dokter.DaftarSpesialis
result := config.SatuDataDB.Raw(`select * from "daftar_spesialis"`).Find(&daftarSpesialis)
result := config.SatuDataDB.Debug().Raw(`select * from "daftar_spesialis"`).Find(&daftarSpesialis)
if result.Error != nil {
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
log.Printf("Error get data : %v", result.Error)
log.Fatalf("Error get data : %v", result.Error)
return nil, 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.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)
log.Fatalf("Data kosong: %v", result.Error)
return daftarSpesialis, nil
}
+3 -43
View File
@@ -12,53 +12,13 @@ import (
func GetSubspesialis() ([]dokter.DaftarSubspesialis, error) {
var daftarSubspesialis []dokter.DaftarSubspesialis
result := config.SatuDataDB.Raw(`select * from "daftar_subspesialis"`).Find(&daftarSubspesialis)
result := config.SatuDataDB.Debug().Raw(`select * from "daftar_subspesialis"`).Find(&daftarSubspesialis)
if result.Error != nil {
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
log.Printf("Error get data : %v", result.Error)
log.Fatalf("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 GetSubspesialisByID(idSubspesialis int) (*dokter.DaftarSubspesialis, error) {
var daftarSubspesialis *dokter.DaftarSubspesialis
result := config.SatuDataDB.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.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)
log.Fatalf("Data kosong: %v", result.Error)
return daftarSubspesialis, nil
}
-21
View File
@@ -1,21 +0,0 @@
package jadwal
import (
"bridging-rssa/config"
"bridging-rssa/models/jadwal"
"log"
)
func GetJadwalLibur(date string) (*jadwal.DaftarJadwalLiburPelayanan, bool, error) {
var jadwalLibur *jadwal.DaftarJadwalLiburPelayanan
query := `select * from daftar_jadwal_libur_pelayanan where "Tanggal_libur_pelayanan" = ?`
q := config.SatuDataDB.Debug().Raw(query, date).Scan(&jadwalLibur)
if q.Error != nil {
log.Println(q.Error)
return nil, false, q.Error
} else if q.RowsAffected == 0 {
log.Println("Tidak pada hari libur")
return jadwalLibur, false, nil
}
return jadwalLibur, true, nil
}
-37
View File
@@ -1,37 +0,0 @@
package logapi
import (
"bridging-rssa/config"
logapi "bridging-rssa/models/log_api"
"fmt"
"log"
)
func InsertLogAPI(reqInsert *logapi.DataLogAPI) error {
query := `insert into "data_log_api" (
"id", "date_created", "User_agent", "IP", "Parameter", "Header", "Method", "URL", "Request", "Respon", "Respon_code", "Respontime_start", "Respontime_end", "Comment"
) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
err := config.SatuDataDB.Exec(query,
reqInsert.ID,
reqInsert.DateCreated,
reqInsert.UserAgent,
reqInsert.IP,
reqInsert.Parameter,
reqInsert.Header,
reqInsert.Method,
reqInsert.Url,
reqInsert.Request,
reqInsert.Respon,
reqInsert.ResponCode,
reqInsert.ResponTimeStart,
reqInsert.ResponTimeEnd,
reqInsert.Comment,
).Error
if err != nil {
log.Println(err)
return err
}
log.Println(err)
fmt.Printf("insert log: ", err)
return nil
}
-24
View File
@@ -1,24 +0,0 @@
package logapi
import (
"bridging-rssa/config"
logapi "bridging-rssa/models/log_api"
"log"
)
func InsertLogICare(reqInsert *logapi.InsertLogICare) error {
query := `insert into "data_log_icare_bpjs" ("id", "date_created", "Ruangan", "Dokter", "Kunjungan_pasien", "Waktu_transaksi")
values (?, ?, ?, ?, ?, ?)`
errInsert := config.SatuDataDB.Exec(query,
reqInsert.ID,
reqInsert.DateCreated,
reqInsert.Ruangan,
reqInsert.Dokter,
reqInsert.Kunjungan_pasien,
reqInsert.WaktuTransaksi).Error
if errInsert != nil {
log.Println(errInsert)
return errInsert
}
return nil
}
@@ -1,24 +0,0 @@
package lokasiruang
import (
"bridging-rssa/config"
"errors"
"log"
"gorm.io/gorm"
)
func GetDaftarLokasiRuang(idSimgos string) (int, error) {
var idRuangan int
query := `select dlr."id" from "daftar_lokasi_ruang" dlr where dlr."Id_location_simgos" = ?`
err := config.SatuDataDB.Raw(query, idSimgos).First(&idRuangan).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
log.Println(err)
return 128, nil
}
log.Println(err)
return 0, err
}
return idRuangan, nil
}
@@ -1,27 +0,0 @@
package pasien
import (
"bridging-rssa/config"
"bridging-rssa/models/pasien"
"errors"
"log"
"gorm.io/gorm"
)
func GetDataKunjunganPasien(idxdaftar string) (*pasien.KunjunganPasien, error) {
var kunjunganPasien *pasien.KunjunganPasien
query := `select dks."id", dks."Ruangan" from "data_kunjungan_pasien" dks where dks."IDXDAFTAR" = ?`
err := config.SatuDataDB.Raw(query, idxdaftar).First(&kunjunganPasien).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
errMsg := errors.New("Data Tidak Ditemukan")
log.Println(errMsg)
return nil, errMsg
}
log.Println(err)
return nil, err
}
log.Println("Data Kunjungan Pasien : ", kunjunganPasien)
return kunjunganPasien, nil
}
@@ -1,16 +0,0 @@
package suratkontrol
import (
"bridging-rssa/config"
sk "bridging-rssa/models/bpjs/surat_kontrol"
"log"
)
func UpdateKunjunganPasien(req sk.RequestInsertRencanaKontrol) error {
err := config.SatuDataDB.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
}
@@ -1,369 +0,0 @@
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.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,
dkp."NOMR" as "No_rm"
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", "Tipe_rawat")
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
err := config.SatuDataDB.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,
reqInsert.TipeRawat,
).Error
if err != nil {
log.Println(err)
return err
}
return nil
}
func GetDataSuratKontrol(offset, limit 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"
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' offset ? limit ?`, offset, limit).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
}
}
return dataSurKon, nil
}
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",
(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" = ? and dsk."Tipe_rawat" = ?`, idxdaftar, tipe).First(&dataSurKon).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
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" = ? and dsk."Tipe_rawat" is null`, 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
}
}
return dataSurKon, nil
}
func UpdateDataSuratKontrol(reqUpdate *suratkontrol.DataSuratKontrol) error {
err := config.SatuDataDB.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.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.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 ? offset ? limit ?`
querySelect := `select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol",
dsk."Nomor_surat_kontrol",
(select dlr."Nama"
from data_kunjungan_pasien dkp
left join daftar_lokasi_ruang dlr on dkp."Ruangan" = dlr.id where dkp."id" = dsk."Kunjungan_pasien" LIMIT 1) as "Poli_asal",
dlr."Nama" as "Poli_tuju",
dkp2."Nomor_sep", dkp2."Nama_lengkap", dkp2."IDXDAFTAR",
array(
select dgd. "Gelar_depan"
from data_pegawai_daftar_gelar_depan dpdgd
left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id where dpdgd.data_pegawai_id = dp.id
) AS gelardepan ,
dk."Nama_lengkap" as "Nama_lengkap_dokter",
array(
select dgb. "Gelar_belakang"
from data_pegawai_daftar_gelar_belakang dpdgb
left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id where dpdgb.data_pegawai_id = dp.id
) AS gelarbelakang,
ds."Subspesialis",
ds."Kode" as "Kode_poli",
ds."id" as "ID_poli",
dp."HFIS_code" as "Kode_dokter",
dp."id" as "id_dokter",
dp."Code_dpjp" as "Kode_dpjp",
dkp2."NOMR" as "No_rm",
dkp2."Diagnosis_primer_utama" as "Kode_diagnosa",
dkp2."Display_diagnosis_primer_utama" as "Nama_diagnosa",
dsk."Tipe_surat_kontrol" as "Tipe_SurKon"
from data_surat_kontrol dsk
left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien"
left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id"
left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id"
left join data_ktp dk on dp."KTP" = dk. "id"
left join daftar_subspesialis ds on dp."Subspesialis" = ds."id"
where dsk."Status_surat_kontrol" = '1' and dsk."Tipe_surat_kontrol" = ? `
querySelect += query
err := config.SatuDataDB.Raw(querySelect, args...).Find(&dataSurKon).Error
if err != nil {
log.Println(err)
return nil, err
}
return dataSurKon, nil
}
func CountDataSurKon(req suratkontrol.RequestCariPasien, query string, args []interface{}) (int, error) {
var jumlahData int
query += ` and date(dsk."Tanggal_rencana_kontrol") between ? and ?`
querySelect := `select count(dsk.*)
from data_surat_kontrol dsk
left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien"
left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id"
left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id"
left join data_ktp dk on dp."KTP" = dk. "id"
left join daftar_subspesialis ds on dp."Subspesialis" = ds."id"
where dsk."Status_surat_kontrol" = '1' and dsk."Tipe_surat_kontrol" = ? `
querySelect += query
err := config.SatuDataDB.Raw(querySelect, args...).Find(&jumlahData).Error
if err != nil {
log.Println(err)
return 0, err
}
return jumlahData, nil
}
func GetNomorSurKon(idPasien string) (string, error) {
var noSurKon string
querySelect := `select dsk."Nomor_surat_kontrol" from data_surat_kontrol dsk where dsk."Kunjungan_pasien" = ? and dsk."Tipe_surat_kontrol" <> '1' order by dsk."date_created"`
err := config.SatuDataDB.Raw(querySelect, idPasien).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",
ds2."Spesialis",ds."Subspesialis",
array(
select dgd. "Gelar_depan"
from data_pegawai_daftar_gelar_depan dpdgd
left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id where dpdgd.data_pegawai_id = dp.id
) AS gelardepan ,
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, dsk."User_created_surat_kontrol", dsk."User_updated_surat_kontrol",dsk."Tipe_rawat" ,
dsk."Status_surat_kontrol"
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"
left join daftar_spesialis ds2 on ds."FK_daftar_spesialis_ID" = ds2."id"
where dkp2."NOMR" = ? order by dsk."Tanggal_rencana_kontrol" desc offset ? limit ?`, norm, offset, limit).Scan(&dataHistoriSurKon).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
errMsg := errors.New("data tidak ada")
log.Println(errMsg)
return nil, errMsg
}
}
return dataHistoriSurKon, nil
}
+10 -11
View File
@@ -7,20 +7,16 @@ services:
container_name: api-rssa
restart: always
ports:
- 8083:8083
- 8080:8080
volumes:
- .:/app
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
environment:
# TIMEZONE
- TZ=Asia/Jakarta
# DATABASE SIMRS V3.0
- POSTGRE_DB_HOST=10.10.123.223
- POSTGRE_DB_PORT=5432
- POSTGRE_DB_NAME=simrsbackup
- POSTGRE_DB_USER=simtest
- POSTGRE_DB_PASS=12345
- SIMRS_DB_HOST=10.10.123.223
- SIMRS_DB_NAME=simrsbackup
- SIMRS_DB_USERNAME=simtest
- SIMRS_DB_PASSWORD=12345
- SIMRS_DB_PORT=5432
# DATABASE SATU DATA
- SATUDATA_HOST=10.10.123.165
- SATUDATA_USERNAME=stim
@@ -28,7 +24,7 @@ services:
- SATUDATA_NAME=satu_db
- SATUDATA_PORT=5000
# BPJS
- BASEURL_BPJS=https://apijkn.bpjs-kesehatan.go.id/
- BASEURL_BPJS=https://apijkn.bpjs-kesehatan.go.id
- CONS_ID=5257
- USER_KEY=4cf1cbef8c008440bbe9ef9ba789e482
- SECRET_KEY=1bV363512D
@@ -40,3 +36,6 @@ services:
- PCARE_RS=pcare-rest
# BPJS ICARE
- PCARE_APLICARE=ihs
# SATUSEHAT
- OR=10.10.123.165
-27
View File
@@ -1,27 +0,0 @@
!/bin/bash
#get image name
remote_url=$(git remote get-url origin)
image=$(echo $remote_url | sed 's|https://||g; s|.git||g')
#get branch name
branch_name=$(git rev-parse --abbrev-ref HEAD)
clean_branch_name=${branch_name##*/}
#get timestamp for the tag
timestamp=$(date +%Y%m%d%H%M%S)
tag=$image:$timestamp-$clean_branch_name
latest=$image:latest-$clean_branch_name
#build image
docker build -t $tag .
docker tag $tag $latest
#push to dockerhub
docker login git.rssa.top -u stim -p 4fde63b07906e7bfa6b3493d76d153a3981039b9
docker push $tag
docker push $latest
#remove dangling images
docker system prune -f
+1 -45
View File
@@ -1,11 +1,6 @@
package utils
import (
"fmt"
"log"
"strconv"
"strings"
)
import "log"
// Function to convert Kode to ID
func KodeToIDConverter(kode string, kodeDokter map[string]int) int {
@@ -20,42 +15,3 @@ 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
}
func GetNoUrut(noSurKon string) (string, error) {
noSurKonSlice := strings.Split(noSurKon, "/")
noUrut := noSurKonSlice[3]
noUrutInt, err := strconv.Atoi(noUrut)
if err != nil {
return "", err
}
noUrutInt++
noUrutStr := fmt.Sprintf("%03d", noUrutInt)
log.Println("No Urut: ", noUrutStr)
return noUrutStr, nil
}
Executable
View File
BIN
View File
Binary file not shown.
-2
View File
@@ -23,7 +23,6 @@ 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
@@ -65,7 +64,6 @@ require (
github.com/google/uuid v1.6.0
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/robfig/cron/v3 v3.0.1
golang.org/x/text v0.18.0 // indirect
gorm.io/driver/postgres v1.5.9
)
-4
View File
@@ -19,8 +19,6 @@ 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=
@@ -96,8 +94,6 @@ github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xl
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
-264
View File
@@ -1,264 +0,0 @@
package icare
import (
"bridging-rssa/database/satu_data/dokter"
log_api "bridging-rssa/database/satu_data/log_api"
"bridging-rssa/database/satu_data/pasien"
"bridging-rssa/models/config"
logapi "bridging-rssa/models/log_api"
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"strconv"
"strings"
"time"
cfg "bridging-rssa/config"
ic "bridging-rssa/models/bpjs/i_care"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
)
func GetFKRTL(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("I_CARE_JKN")
param := os.Getenv("GET_FKRTL")
url := baseUrl + endpoint + param
log.Println("URL :", url)
var req *ic.ReqICare
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: err.Error(),
})
return
}
reqICare := &ic.RequestICare{
Param: req.Param,
KodeDokter: req.KodeDokter,
}
reqJson, errMarshal := json.Marshal(reqICare)
if errMarshal != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: errMarshal.Error(),
})
return
}
log.Println("REQUEST: ", string(reqJson))
conf := config.ConfigBpjs{}
icare := true
header := cfg.SetHeader(icare, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "application/json",
}
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(), "; ")
dpjp := strconv.Itoa(req.KodeDokter)
dataDokter, err := dokter.GetHFISCode(dpjp)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: err.Error(),
})
return
}
reqICare.KodeDokter, err = strconv.Atoi(dataDokter.HfisCode)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: err.Error(),
})
return
}
kunjunganPasien, err := pasien.GetDataKunjunganPasien(req.IDXDaftar)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: err.Error(),
})
return
}
uuid := uuid.New().String()
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
res, err := ResponseGetFKRTL(url, header, headers, reqICare)
if err != nil {
responJson, errMarshal2 := json.Marshal(res)
if errMarshal2 != nil {
log.Println(errMarshal2)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: errMarshal2.Error(),
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-ICare-FKRTL",
Header: headerString,
Method: "POST",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: strconv.Itoa(res.MetaData.Code),
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
errInsert := log_api.InsertLogAPI(reqInsertLog)
if errInsert != nil {
log.Println(errInsert)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: errInsert.Error(),
})
return
}
log.Println(err)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: err.Error(),
})
return
}
responJson, err := json.Marshal(res)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: err.Error(),
})
return
}
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
reqInsertLog := &logapi.DataLogAPI{
ID: uuid,
DateCreated: logTimeEnd,
UserAgent: req.User,
IP: c.ClientIP(),
Parameter: "BPJS-ICare-FKRTL",
Header: headerString,
Method: "POST",
Url: url,
Request: reqJson,
Respon: responJson,
ResponCode: strconv.Itoa(res.MetaData.Code),
ResponTimeStart: logTimeStart,
ResponTimeEnd: logTimeEnd,
Comment: res.MetaData.Message,
}
err = log_api.InsertLogAPI(reqInsertLog)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: err.Error(),
})
return
}
reqInsert := &logapi.InsertLogICare{
ID: uuid,
DateCreated: logTimeEnd,
Ruangan: kunjunganPasien.Ruangan,
Dokter: dataDokter.ID,
Kunjungan_pasien: kunjunganPasien.ID,
WaktuTransaksi: logTimeEnd,
}
errInsert := log_api.InsertLogICare(reqInsert)
if errInsert != nil {
log.Println(errInsert)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: errInsert.Error(),
})
return
}
c.JSON(http.StatusOK, res)
}
func GetFKTP(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("I_CARE_JKN")
param := os.Getenv("GET_FKRTL")
url := baseUrl + endpoint + param
log.Println("URL :", url)
var req *ic.RequestICare
err := c.Bind(&req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: err.Error(),
})
return
}
log.Println("REQUEST: ", req)
conf := config.ConfigBpjs{}
header := cfg.SetHeaderDev(false, conf)
headers := map[string]string{
"X-cons-id": header.ConsID,
"X-timestamp": header.TimeStamp,
"X-signature": header.XSignature,
"user_key": header.UserKey,
"Content-Type": "application/json",
}
log.Println("Headers : ", headers)
res, err := ResponseGetFKRTL(url, header, headers, req)
if err != nil {
log.Println(err)
c.JSON(http.StatusInternalServerError, &ic.Metadata{
Code: 0,
Message: err.Error(),
})
return
}
c.JSON(http.StatusOK, res)
}
-222
View File
@@ -1,222 +0,0 @@
package icare
import (
"bridging-rssa/docs"
ic "bridging-rssa/models/bpjs/i_care"
"bridging-rssa/models/config"
"bytes"
"encoding/json"
"errors"
"fmt"
"io"
"log"
"net/http"
"strings"
"time"
)
func ResponseGetFKRTL(url string, header *config.Header, headers map[string]string, request *ic.RequestICare) (*ic.ResponseGet, 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{
Timeout: 10 * time.Second,
}
responses := &ic.ResponseGet{}
response, err := client.Do(req)
if err != nil {
if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") {
errMsg := errors.New("Koneksi BPJS Terputus, 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("Koneksi BPJS Terputus, Silahkan Coba Lagi")
log.Printf("error : %v", errMsg)
responses.MetaData.Code = 504
responses.MetaData.Message = errMsg.Error()
log.Println("responses: ", responses)
return responses, err
}
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 resFkrtlRaw ic.ResponseGetRaw
err = json.Unmarshal([]byte(string(res)), &resFkrtlRaw)
if err != nil {
log.Printf("Error Unmarshaling: %v", err)
return nil, err
}
log.Println("ResponseRaw : ", resFkrtlRaw)
if resFkrtlRaw.MetaData.Code != 200 {
errMsg := errors.New(resFkrtlRaw.MetaData.Message)
if strings.Contains(strings.ToLower(resFkrtlRaw.MetaData.Message), "Gagal simpan!") {
message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal"
resFkrtlRaw.MetaData.Message = message
}
log.Printf("error : %v", errMsg)
responses.MetaData.Code = resFkrtlRaw.MetaData.Code
responses.MetaData.Message = resFkrtlRaw.MetaData.Message
log.Println("responses: ", responses)
return responses, errMsg
}
dataResp, err := docs.StringDecrypt(key, resFkrtlRaw.Response)
if err != nil {
log.Printf("Error Decrypt: %v", err)
log.Println("res: ", dataResp)
return nil, err
}
var resFkrtl ic.Response
log.Println("dataresp: ", dataResp)
err = json.Unmarshal([]byte(dataResp), &resFkrtl)
if err != nil {
log.Printf("Error Decode: %v", err)
return nil, err
}
responses = &ic.ResponseGet{
Response: resFkrtl,
MetaData: resFkrtlRaw.MetaData,
}
return responses, nil
}
func ResponseGetFKTP(url string, header *config.Header, headers map[string]string, request *ic.ReqFKTP) (*ic.ResponseGet, 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{
Timeout: 10 * time.Second,
}
responses := &ic.ResponseGet{}
response, err := client.Do(req)
if err != nil {
if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") {
errMsg := errors.New("Koneksi BPJS Terputus, 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("Koneksi BPJS Terputus, Silahkan Coba Lagi")
log.Printf("error : %v", errMsg)
responses.MetaData.Code = 504
responses.MetaData.Message = errMsg.Error()
log.Println("responses: ", responses)
return responses, err
}
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 resFkrtlRaw ic.ResponseGetRaw
err = json.Unmarshal([]byte(string(res)), &resFkrtlRaw)
if err != nil {
log.Printf("Error Unmarshaling: %v", err)
return nil, err
}
log.Println("ResponseRaw : ", resFkrtlRaw)
if resFkrtlRaw.MetaData.Code != 200 {
errMsg := errors.New(resFkrtlRaw.MetaData.Message)
if strings.Contains(strings.ToLower(resFkrtlRaw.MetaData.Message), "Gagal simpan!") {
message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal"
resFkrtlRaw.MetaData.Message = message
}
log.Printf("error : %v", errMsg)
responses.MetaData.Code = resFkrtlRaw.MetaData.Code
responses.MetaData.Message = resFkrtlRaw.MetaData.Message
log.Println("responses: ", responses)
return responses, errMsg
}
dataResp, err := docs.StringDecrypt(key, resFkrtlRaw.Response)
if err != nil {
log.Printf("Error Decrypt: %v", err)
log.Println("res: ", dataResp)
return nil, err
}
var resFkrtl ic.Response
log.Println("dataresp: ", dataResp)
err = json.Unmarshal([]byte(dataResp), &resFkrtl)
if err != nil {
log.Printf("Error Decode: %v", err)
return nil, err
}
responses = &ic.ResponseGet{
Response: resFkrtl,
MetaData: resFkrtlRaw.MetaData,
}
return responses, nil
}
+33 -575
View File
@@ -3,532 +3,39 @@ package jadwal_dokter
import (
cfg "bridging-rssa/config"
"bridging-rssa/database/satu_data/dokter"
"bridging-rssa/database/satu_data/jadwal"
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"
"log"
"net/http"
"os"
"strconv"
"strings"
"time"
"github.com/google/uuid"
"gorm.io/gorm"
"github.com/gin-gonic/gin"
)
func GetJadwalDokter(c *gin.Context) {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("ANTREAN_RS")
tanggal := c.Param("tanggal")
// Select from daftar spesialis
spesialis, err := dokter.GetSpesialis()
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
var listIdSpesialis = make(map[string]int)
for _, kodeDokter := range spesialis {
listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID
}
subspesialis, err := dokter.GetSubspesialis()
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
var listIdSubspesialis = make(map[string]int)
for _, kodeDokter := range subspesialis {
listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID
}
listDokter, err := dokter.GetDokter()
if err != nil {
c.JSON(http.StatusInternalServerError, err)
}
var listIddokter = make(map[int]string)
for _, kodeDokter := range listDokter {
listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
}
var reqInsert *jadwal_dokter.JadwalDokterSatuData
var response []*jadwal_dokter.JadwalDokterSatuData
for _, value := range spesialis {
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,
}
kdPoly := value.Kode
url := baseUrl + endpoint
param := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggal
linkurl := url + param
res, err := JadwalDokterGetResponse(linkurl, header, headers)
if err != nil {
log.Println("Error making external API request: %v", err)
c.JSON(http.StatusInternalServerError, err)
}
log.Println("Tanggal :", tanggal)
if res == nil {
log.Println("Skip Proses")
continue
}
jadwalLibur, isLibur, errLibur := jadwal.GetJadwalLibur(tanggal)
if errLibur != nil {
log.Println(errLibur)
c.JSON(http.StatusInternalServerError, err)
}
if isLibur {
tanggalTemp, errParseTemp := time.Parse("2006-01-02", tanggal)
if errParseTemp != nil {
log.Println(errParseTemp)
c.JSON(http.StatusInternalServerError, err)
}
isLibur = false
log.Println(jadwalLibur.NamaLiburPelayanan)
tanggalTemp = tanggalTemp.AddDate(0, 0, 7)
tanggalTempString := tanggalTemp.Format("2006-01-02")
log.Println(tanggalTempString)
paramLibur := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggalTempString
linkUrl := url + paramLibur
resNew, errRes := JadwalDokterGetResponse(linkUrl, header, headers)
if errRes != nil {
log.Println("Error making external API request: ", errRes)
c.JSON(http.StatusInternalServerError, err)
}
if resNew != nil {
for _, v := range resNew.Response {
res.Response = append(res.Response, &jadwal_dokter.ListDokter{
KodeSubspesialis: v.KodeSubspesialis,
Hari: v.Hari,
KapasitasPasien: v.KapasitasPasien,
Libur: v.Libur,
NamaHari: v.NamaHari,
Jadwal: v.Jadwal,
NamaSubspesialis: v.NamaSubspesialis,
NamaDokter: v.NamaDokter,
KodePoli: v.KodePoli,
NamaPoli: v.NamaPoli,
KodeDokter: v.KodeDokter,
})
}
} else {
log.Println("Tidak ada data pada tanggal ", tanggalTempString)
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)
c.JSON(http.StatusInternalServerError, err)
}
} else {
reqInsert.Dokter = strconv.Itoa(v.KodeDokter)
errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert)
if errInsertTemp != nil {
log.Println(errInsertTemp)
c.JSON(http.StatusInternalServerError, err)
}
}
response = append(response, reqInsert)
}
}
c.JSON(http.StatusOK, response)
}
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 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")
log.Println("subspesialis: ", subspesialis)
log.Println("tanggal: ", tanggal)
idDokter, err := dokter.GetJadwalDokterBySubpesialis(tanggal, 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")
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 {
errTruncate := dokter.TruncateDataJadwalDokter()
if errTruncate != nil {
log.Println(errTruncate)
return errTruncate
}
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, 3, 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, 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
}
func GetJadwalDokterNew() bool {
baseUrl := os.Getenv("BASEURL_BPJS")
endpoint := os.Getenv("ANTREAN_RS")
url := baseUrl + endpoint
errTruncate := dokter.DeleteJadwalDokter()
if errTruncate != nil {
log.Println(errTruncate)
return false
log.Fatal(errTruncate)
c.JSON(http.StatusInternalServerError, errTruncate)
}
errTruncateTemp := dokter.DeleteJadwalDokterTemp()
if errTruncateTemp != nil {
log.Println(errTruncateTemp)
return false
log.Fatal(errTruncateTemp)
c.JSON(http.StatusInternalServerError, errTruncateTemp)
}
// Select from daftar spesialis
spesialis, err := dokter.GetSpesialis()
if err != nil {
return false
c.JSON(http.StatusInternalServerError, err)
}
var listIdSpesialis = make(map[string]int)
@@ -538,7 +45,7 @@ func GetJadwalDokterNew() bool {
subspesialis, err := dokter.GetSubspesialis()
if err != nil {
return false
c.JSON(http.StatusInternalServerError, err)
}
var listIdSubspesialis = make(map[string]int)
@@ -548,7 +55,7 @@ func GetJadwalDokterNew() bool {
listDokter, err := dokter.GetDokter()
if err != nil {
return false
c.JSON(http.StatusInternalServerError, err)
}
var listIddokter = make(map[int]string)
@@ -556,90 +63,35 @@ func GetJadwalDokterNew() bool {
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
for _, value := range spesialis {
tanggal := time.Now().Format("2006-01-02")
// tanggal := "2025-04-11"
for i := 0; i < 7; i++ {
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,
}
kdPoly := value.Kode
param := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggal
linkurl := url + param
res, err := JadwalDokterGetResponseApi(linkurl, header, headers)
res, err = JadwalDokterGetResponse(url, secretKey, cons_id, User_key, tstamp, X_signature, kdPoly, tanggal, headers)
if err != nil {
log.Println("Error making external API request: %v", err)
return false
log.Fatalf("Error making external API request: %v", err)
c.JSON(http.StatusInternalServerError, err)
}
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
}
jadwalLibur, isLibur, errLibur := jadwal.GetJadwalLibur(tanggal)
if errLibur != nil {
log.Println(errLibur)
return false
}
if isLibur {
tanggalTemp, errParseTemp := time.Parse("2006-01-02", tanggal)
if errParseTemp != nil {
log.Println(errParseTemp)
return false
}
isLibur = false
for i := 0; i < 7; i++ {
log.Println(jadwalLibur.NamaLiburPelayanan)
tanggalTemp = tanggalTemp.AddDate(0, 0, 7)
tanggalTempString := tanggalTemp.Format("2006-01-02")
log.Println(tanggalTempString)
paramLibur := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggalTempString
linkUrl := url + paramLibur
resNew, errRes := JadwalDokterGetResponseApi(linkUrl, header, headers)
if errRes != nil {
log.Println("Error making external API request: ", errRes)
return false
}
if resNew != nil {
for _, v := range resNew {
res = append(res, &jadwal_dokter.ListDokter{
KodeSubspesialis: v.KodeSubspesialis,
Hari: v.Hari,
KapasitasPasien: v.KapasitasPasien,
Libur: v.Libur,
NamaHari: v.NamaHari,
Jadwal: v.Jadwal,
NamaSubspesialis: v.NamaSubspesialis,
NamaDokter: v.NamaDokter,
KodePoli: v.KodePoli,
NamaPoli: v.NamaPoli,
KodeDokter: v.KodeDokter,
})
}
log.Println("Ada data pada tanggal ", tanggalTempString)
break
} else {
log.Println("Tidak ada data pada tanggal ", tanggalTempString)
continue
}
}
}
for _, v := range res {
for _, v := range *res {
idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis)
idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis)
idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter)
@@ -656,18 +108,24 @@ func GetJadwalDokterNew() bool {
errInsert := dokter.InsertJadwalDokter(reqInsert)
if errInsert != nil {
log.Println(errInsert)
return false
c.JSON(http.StatusInternalServerError, errInsert)
}
} else {
reqInsert.Dokter = strconv.Itoa(v.KodeDokter)
errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert)
if errInsertTemp != nil {
log.Println(errInsertTemp)
return false
c.JSON(http.StatusInternalServerError, errInsertTemp)
}
}
}
date, errParse := time.Parse("2006-01-02", tanggal)
if errParse != nil {
c.JSON(http.StatusInternalServerError, errParse)
}
tanggal = date.AddDate(0, 0, 1).Format("2006-01-02")
log.Println("Tanggal :", tanggal)
}
}
return true
c.JSON(http.StatusOK, res)
}
+14 -72
View File
@@ -3,7 +3,6 @@ package jadwal_dokter
import (
"bridging-rssa/docs"
"bridging-rssa/models/bpjs/jadwal_dokter"
"bridging-rssa/models/config"
"encoding/json"
"fmt"
"io"
@@ -11,11 +10,13 @@ import (
"net/http"
)
func JadwalDokterGetResponse(url string, header *config.Header, headers map[string]string) (*jadwal_dokter.JadwalDokter, error) {
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) {
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)
log.Fatalf("Error creating request: %v", err)
}
for key, value := range headers {
@@ -26,11 +27,11 @@ func JadwalDokterGetResponse(url string, header *config.Header, headers map[stri
client := http.Client{}
response, err := client.Do(req)
if err != nil {
log.Printf("Error making external API request: %v", err)
log.Fatalf("Error making external API request: %v", err)
}
log.Println("RESPONSE: ", response)
key := header.ConsID + header.SecretKey + header.TimeStamp
key := cons_id + secretKey + tstamp
res, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
@@ -39,69 +40,7 @@ func JadwalDokterGetResponse(url string, header *config.Header, headers map[stri
var jadwalDokterRaw jadwal_dokter.JadwalDokterRaw
err = json.Unmarshal([]byte(res), &jadwalDokterRaw)
if err != nil {
log.Printf("Error Unmarshaling: %v", err)
}
responses := &jadwal_dokter.JadwalDokter{}
if jadwalDokterRaw.MetaData.Code != 200 {
responses.MetaData.Code = jadwalDokterRaw.MetaData.Code
responses.MetaData.Message = jadwalDokterRaw.MetaData.Message
log.Println("No Data Found")
return responses, nil
}
dataResp, err := docs.StringDecrypt(key, jadwalDokterRaw.Response)
if err != nil {
log.Printf("Error Decrypt: %v", err)
}
var listDokter []*jadwal_dokter.ListDokter
log.Println("dataresp: ", dataResp)
err = json.Unmarshal([]byte(dataResp), &listDokter)
if err != nil {
log.Printf("Error Decode: %v", err)
}
log.Println("res: ", &listDokter)
responses = &jadwal_dokter.JadwalDokter{
Response: listDokter,
MetaData: jadwalDokterRaw.MetaData,
}
return responses, nil
}
func JadwalDokterGetResponseApi(url string, header *config.Header, headers map[string]string) ([]*jadwal_dokter.ListDokter, 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)
log.Fatalf("Error Unmarshaling: %v", err)
}
if jadwalDokterRaw.MetaData.Code == 201 {
@@ -111,19 +50,22 @@ func JadwalDokterGetResponseApi(url string, header *config.Header, headers map[s
dataResp, err := docs.StringDecrypt(key, jadwalDokterRaw.Response)
if err != nil {
log.Printf("Error Decrypt: %v", err)
log.Fatalf("Error Decrypt: %v", err)
log.Println("res: ", dataResp)
}
var listDokter []*jadwal_dokter.ListDokter
var listDokter []jadwal_dokter.ListDokter
log.Println("dataresp: ", dataResp)
// err = mapstructure.Decode(dataResp, &listDokter)
err = json.Unmarshal([]byte(dataResp), &listDokter)
if err != nil {
log.Printf("Error Decode: %v", err)
log.Fatalf("Error Decode: %v", err)
}
log.Println("res: ", &listDokter)
return listDokter, nil
return &listDokter, nil
}
-415
View File
@@ -1,415 +0,0 @@
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"
)
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{}
responses := &suratkontrol.Response{}
response, err := client.Do(req)
if err != nil {
responses.MetaData.Code = "203"
responses.MetaData.Message = err.Error()
log.Printf("Error making external API request: %v", err)
log.Println("responses: ", responses)
return responses, err
}
log.Println("RESPONSE: ", response)
if response.StatusCode == http.StatusGatewayTimeout { // 504
errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi")
log.Printf("error : %v", errMsg)
responses.MetaData.Code = "504"
responses.MetaData.Message = errMsg.Error()
log.Println("responses: ", responses)
return responses, errMsg
}
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)
if resSuratKontrolRaw.MetaData.Code != "200" {
if resSuratKontrolRaw.MetaData.Message == "Gagal simpan! Nomor SEP Sudah pernah digunakan!." {
message := "Gagal simpan! Nomor SEP pernah diterbitkan Surat Kontrol!."
resSuratKontrolRaw.MetaData.Message = message
log.Println("masuk sini kan")
} else if resSuratKontrolRaw.MetaData.Message == "Gagal simpan! Poli Tujuan Kontrol tidak sama dengan Poli Asal Rujukan Awal." {
message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal"
resSuratKontrolRaw.MetaData.Message = message
}
log.Printf("error : %v", resSuratKontrolRaw.MetaData.Message)
responses.MetaData.Code = resSuratKontrolRaw.MetaData.Code
responses.MetaData.Message = resSuratKontrolRaw.MetaData.Message
errMsg := errors.New(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{}
responses := &suratkontrol.Response{}
response, err := client.Do(req)
if err != nil {
responses.MetaData.Code = "504"
responses.MetaData.Message = err.Error()
log.Println("responses: ", responses)
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("Koneksi BPJS Terputus, 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" {
if resSuratKontrolRaw.MetaData.Message == "Gagal simpan! Nomor SEP Sudah pernah digunakan!." {
message := "Gagal simpan! Nomor SEP pernah diterbitkan Surat Kontrol!."
resSuratKontrolRaw.MetaData.Message = message
log.Println("masuk sini kan")
} else if strings.Contains(strings.ToLower(resSuratKontrolRaw.MetaData.Message), "gagal simpan") {
message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal"
resSuratKontrolRaw.MetaData.Message = message
}
log.Printf("error : %v", resSuratKontrolRaw.MetaData.Message)
responses.MetaData.Code = resSuratKontrolRaw.MetaData.Code
responses.MetaData.Message = resSuratKontrolRaw.MetaData.Message
errMsg := errors.New(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{}
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
}
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
}
responses := &suratkontrol.ResponseGetSuratKontrol{}
if resNoSuratKontrolRaw.MetaData.Code != "200" {
errMsg := errors.New(resNoSuratKontrolRaw.MetaData.Message)
log.Printf("error : %v", errMsg)
responses.MetaData.Code = resNoSuratKontrolRaw.MetaData.Code
responses.MetaData.Message = resNoSuratKontrolRaw.MetaData.Message
log.Println("responses: ", responses)
return responses, errMsg
}
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
}
responses := &suratkontrol.ResponseGetSuratKontrolBySEP{}
if resSurKonSEP.MetaData.Code != "200" {
errMsg := errors.New(resSurKonSEP.MetaData.Message)
log.Printf("error : %v", errMsg)
responses.MetaData.Code = resSurKonSEP.MetaData.Code
responses.MetaData.Message = resSurKonSEP.MetaData.Message
log.Println("responses: ", responses)
return responses, errMsg
}
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
}
File diff suppressed because it is too large Load Diff
+3 -69
View File
@@ -3,17 +3,13 @@ package main
import (
"bridging-rssa/config"
"bridging-rssa/handlers/bpjs"
icare "bridging-rssa/handlers/bpjs/i_care"
"bridging-rssa/handlers/bpjs/jadwal_dokter"
suratkontrol "bridging-rssa/handlers/bpjs/surat_kontrol"
"github.com/gin-contrib/cors"
"log"
_ "bridging-rssa/docs"
"github.com/gin-gonic/gin"
"github.com/joho/godotenv"
cron "github.com/robfig/cron/v3"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)
@@ -33,41 +29,6 @@ func main() {
config.ConnectDB()
r := gin.Default()
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,
}))
scheduler := cron.New()
defer scheduler.Stop()
// SCHEDULE HARIAN
scheduler.AddFunc("15 2 * * *", func() {
log.Println("=== RUNNING SCHEDULE GET JADWAL DOKTER ===")
for {
success := jadwal_dokter.GetJadwalDokterNew()
if success {
log.Println("=== SCHEDULE GET JADWAL DOKTER DONE ===")
break
}
}
})
//SCHEDULE TIAP 3 BULAN
scheduler.AddFunc("20 2 * * 5", 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")
@@ -76,44 +37,17 @@ func main() {
subspesialis.GET("/", bpjs.GetAllSubspesialis)
}
//API UNTUK JADWAL DOKTER
jadwalDokter := v1.Group("/jadwaldokter")
{
jadwalDokter.GET("/date/:tanggal", jadwal_dokter.GetJadwalDokter)
jadwalDokter.GET("/dpjp/:dpjp", jadwal_dokter.GetDokterByDPJP)
jadwalDokter.GET("/tanggal/:tanggal", jadwal_dokter.GetJadwalSubspesialisByDate)
jadwalDokter.GET("/tanggal/:tanggal/spesialis/:spesialis", jadwal_dokter.GetDokterBySpesialis)
jadwalDokter.GET("/tanggal/:tanggal/subspesialis/:subspesialis", jadwal_dokter.GetDokterBySubspesialis)
jadwalDokter.GET("/", jadwal_dokter.GetJadwalDokter)
}
// API UNTUK SURAT KONTROL
suratKontrol := v1.Group("/suratkontrol")
{
suratKontrol.GET("/offset/:offset/limit/:limit", suratkontrol.GetDataSurKon)
suratKontrol.GET("/idxdaftar/:idxdaftar/tiperawat/:tiperawat", suratkontrol.GetDataSurKonByID)
suratKontrol.GET("/noSuratKontrol/:noSuratKontrol", suratkontrol.GetNomorSuratKontrol)
suratKontrol.GET("/noSEP/:noSEP", suratkontrol.GetSuratKontrolBySEP)
suratKontrol.GET("/printSurKon/:idxdaftar/tiperawat/:tiperawat", suratkontrol.PrintSurKon)
suratKontrol.POST("/cari", suratkontrol.CariPasienTPP)
suratKontrol.POST("/insert", suratkontrol.InsertSuratKontrol)
suratKontrol.POST("/insertnew", suratkontrol.InsertSuratkontrolNew)
suratKontrol.PUT("/update", suratkontrol.UpdateSuratKontrol)
suratKontrol.POST("/delete", suratkontrol.DeleteSuratKontrol)
suratKontrol.GET("/norm/:norm/limit/:limit/offset/:offset", suratkontrol.GethistoribyNorm)
}
iCare := v1.Group("/icare")
{
iCare.POST("/rs/validate", icare.GetFKRTL)
iCare.POST("/pcare/validate", icare.GetFKTP)
}
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
r.POST("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
r.PUT("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
r.DELETE("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
log.Println("JALAN DI PORT : 8080")
err = r.Run(":8083")
log.Println("JALAN DI PORT : 8081")
err = r.Run(":8081")
if err != nil {
log.Fatal(err)
}
-36
View File
@@ -1,36 +0,0 @@
package icare
type ReqICare struct {
IDXDaftar string `json:"idxdaftar"`
Param string `json:"param"`
KodeDokter int `json:"kodedokter"`
User string `json:"user"`
}
type RequestICare struct {
Param string `json:"param"`
KodeDokter int `json:"kodedokter"`
}
type ReqFKTP struct {
Param string `json:"param"`
}
type Metadata struct {
Code int `json:"code"`
Message string `json:"message"`
}
type Response struct {
Url string `json:"url"`
}
type ResponseGet struct {
Response Response `json:"response"`
MetaData Metadata `json:"metaData"`
}
type ResponseGetRaw struct {
Response string `json:"response"`
MetaData Metadata `json:"metaData"`
}
+16 -57
View File
@@ -5,11 +5,6 @@ type JadwalDokterRaw struct {
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"`
@@ -36,59 +31,23 @@ type DaftarSpesialis struct {
}
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"`
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"`
}
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"`
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"`
}
@@ -1,25 +0,0 @@
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"`
NomorRM string `gorm:"column:No_rm" json:"No_rm"`
}
-337
View File
@@ -1,337 +0,0 @@
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"`
NoRM string `json:"noRM"`
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"`
TipeSurKon string `json:"tipe_surkon"`
TipeRawat string `json:"tipe_rawat"`
Ruangan string `json:"ruangan"`
}
type ReqDeleteRencanaKontrol struct {
IDDataSurKon string `json:"id_surat_kontrol"`
NomorSurKon string `json:"Nomor_surat_kontrol"`
User string `json:"user"`
TipeSurKon string `json:"tipe_surkon"`
}
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"`
TipeSurKon string `json:"tipe_surkon"`
TipeRawat string `json:"tipe_rawat"`
}
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 {
KodeProvider 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"`
TipeRawat string `gorm:"column:Tipe_rawat" json:"Tipe_rawat"`
}
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"`
KodeDPJP string `gorm:"column:Kode_dpjp" json:"Kode_dpjp"`
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"`
User string `gorm:"column:User" json:"User"`
}
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"`
KodeDPJP string `json:"Kode_dpjp"`
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"`
User string `json:"User"`
}
type ResponseCariDataSuratKontrol struct {
JumlahData int `json:"jumlah_data"`
ListDataSuratKontrol []*ResponseGetDataSuratKontrol `json:"list_data"`
}
type RequestCariPasien struct {
NoRM string `json:"no_rm"`
NoSEP string `json:"no_sep"`
PoliKlinik string `json:"poliklinik"`
TanggalAwal string `json:"tanggal_awal"`
TanggalAkhir string `json:"tanggal_akhir"`
TipeSurKon string `json:"tipe_surkon"`
Offset string `json:"offset"`
Limit string `json:"limit"`
}
type HistoriSurkon struct {
NamaPasien string `gorm:"column:Nama_lengkap" json:"Nama_pasien"`
NoSEP string `gorm:"column:Nomor_sep" json:"No_SEP"`
IdSurkon string `gorm:"column:id" json:"id"`
Idxdaftar string `gorm:"column:IDXDAFTAR" json:"IDXDAFTAR"`
NomorSuratkontrol string `gorm:"column:Nomor_surat_kontrol" json:"Nomor_surat_kontrol"`
TanggalRencana string `gorm:"column:Tanggal_rencana_kontrol" json:"Tanggal_rencana_kontrol"`
TanggalCetak string `gorm:"column:Tanggal_cetak_surat_kontrol" json:"Tanggal_cetak_surat_kontrol"`
Spesialis string `gorm:"column:Spesialis" json:"Spesialis"`
Subspesialis string `gorm:"column:Subspesialis" json:"Subspesialis"`
GelarDepan string `gorm:"column:gelardepan" json:"Gelar_depan"`
NamaDokter string `gorm:"column:Nama_lengkap_dokter" json:"Nama_dokter"`
GelarBelakang string `gorm:"column:gelarbelakang" json:"Gelar_belakang"`
Tiperawat string `gorm:"column:Tipe_rawat" json:"Tipe_rawat"`
UserCreate string `gorm:"column:User_created_surat_kontrol" json:"User_create"`
UserUpdate string `gorm:"column:User_updated_surat_kontrol" json:"User_update"`
Status string `gorm:"column:Status_surat_kontrol" json:"Status_surat_kontrol"`
}
type Dataresponse struct {
NamaPasien string `json:"Nama_pasien"`
NoSEP string `json:"No_SEP"`
IdSurkon string `json:"id_surkon"`
Idxdaftar string `json:"Idxdaftar"`
NomorSuratkontrol string `json:"Nomor_surat_kontrol"`
TanggalRencana string `json:"Tanggal_rencana_kontrol"`
TanggalCetak string `json:"Tanggal_cetak_surat_kontrol"`
Spesialis string `json:"Spesialis"`
Subspesialis string `json:"Subspesialis"`
NamaLengkap string `json:"Dpjp"`
Tiperawat string `json:"Tipe_rawat"`
UserCreate string `json:"User_create"`
UserUpdate string `json:"User_update"`
Status string `json:"Status_surat_kontrol"`
}
+8 -12
View File
@@ -1,18 +1,14 @@
package config
type ConfigBpjs struct {
Cons_id string
Secret_key string
User_key string
Cons_id_dev string
Secret_key_dev string
User_key_dev string
Cons_id string
Secret_key string
User_key string
}
type Header struct {
ConsID string
SecretKey string
UserKey string
TimeStamp string
XSignature string
type ConfigSatuSehat struct {
Org_id string
Client_id string
Client_secret string
Token string
}
-25
View File
@@ -9,28 +9,3 @@ 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"`
DPJPCode string `gorm:"column:DPJP_code" json:"DPJP_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"`
DPJPCode string `json:"DPJP_code"`
}
+5 -5
View File
@@ -1,9 +1,9 @@
package dokter
type DaftarSubspesialis struct {
ID int `json:"id"`
Kode string `json:"Kode"`
Subspesialis string `json:"Subspesialis"`
IDSpesialis int `json:"FK_daftar_spesialis_ID" gorm:"column:FK_daftar_spesialis_ID"`
Spesialis string `gorm:"column:Spesialis" json:"Spesialis"`
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"`
}
-7
View File
@@ -1,7 +0,0 @@
package jadwal
type DaftarJadwalLiburPelayanan struct {
NamaLiburPelayanan string `gorm:"column:Nama_libur_pelayanan" json:"Nama_libur_pelayanan"`
KeteranganLiburPelayanan string `gorm:"column:Keterangan_libur_pelayanan" json:"Keterangan_libur_pelayanan"`
TanggalLiburPelayanan string `gorm:"column:Tanggal_libur_pelayanan" json:"Tanggal_libur_pelayanan"`
}
-20
View File
@@ -1,20 +0,0 @@
package logapi
import "encoding/json"
type DataLogAPI struct {
ID string `gorm:"column:id" json:"ID"`
DateCreated string `gorm:"column:date_created" json:"date_created"`
UserAgent string `gorm:"column:User_agent" json:"User_agent"`
IP string `gorm:"column:IP" json:"IP"`
Parameter string `gorm:"column:Parameter" json:"Parameter"`
Header string `gorm:"column:Header" json:"Header"`
Method string `gorm:"column:Method" json:"Method"`
Url string `gorm:"column:URL" json:"URL"`
Request json.RawMessage `gorm:"column:Request" json:"Request"`
Respon json.RawMessage `gorm:"column:Respon" json:"Respon"`
ResponCode string `gorm:"column:Respon_code" json:"Respon_code"`
ResponTimeStart string `gorm:"column:Respontime_start" json:"Respontime_start"`
ResponTimeEnd string `gorm:"column:Respontime_end" json:"Respontime_end"`
Comment string `gorm:"column:Comment" json:"Comment"`
}
-10
View File
@@ -1,10 +0,0 @@
package logapi
type InsertLogICare struct {
ID string `gorm:"column:id" json:"id"`
DateCreated string `gorm:"column:date_created" json:"date_created"`
Ruangan int `gorm:"column:Ruangan" json:"Ruangan"`
Dokter string `gorm:"column:Dokter" json:"Dokter"`
Kunjungan_pasien string `gorm:"column:Kunjungan_pasien" json:"Kunjungan_pasien"`
WaktuTransaksi string `gorm:"column:Waktu_transaksi" json:"Waktu_transaksi"`
}
-6
View File
@@ -1,6 +0,0 @@
package pasien
type KunjunganPasien struct {
ID string `gorm:"column:id" json:"id"`
Ruangan int `gorm:"column:Ruangan" json:"Ruangan"`
}
+20
View File
@@ -0,0 +1,20 @@
package satusehat
import (
"github.com/go-playground/validator/v10"
)
type Procedure struct {
VisitId int `db:"visit_id" json:"visit_id" validate:"required"`
ProcedureCode string `db:"procedure_code" json:"procedure_code" validate:"required"`
ProcedureName string `db:"procedure_name" json:"procedure_name" validate:"required"`
}
func (o *Procedure) Invalid() bool {
val := validator.New()
err := val.Struct(o)
if err != nil {
return true
}
return false
}
+109
View File
@@ -0,0 +1,109 @@
package satusehat
import (
"time"
"github.com/go-playground/validator/v10"
)
type Visit struct {
VisitID string
PatientSatusehatID string
PatientNIK string
PatientName string
PatientSex string
PatientBirthDate *time.Time
PatientAddress string
PractitionerNIK string
PractitionerSatusehatID string
PractitionerName string
ClinicSatusehatID string
ClinicName string
Systole string
Diastole string
HeartRate string
RespirationRate string
OxygenSaturation string
Temperature string
PeriodStartDate time.Time
PeriodEndDate time.Time
ArrivedStartTime *time.Time
ArrivedEndTime *time.Time
InProgressStartTime *time.Time
InProgressEndTime *time.Time
FinishStartTime *time.Time
FinishEndTime *time.Time
}
type VisitDetail struct {
VisitId string `json:"visit_id" validate:"required"`
PatientSatusehatId string `json:"patient_satusehat_id" validate:"required"`
PatientNik string `json:"patient_nik" `
PatientName string `json:"patient_name" validate:"required"`
PatientSex string `json:"patient_sex"`
PatientBirthDate *time.Time `json:"patient_birth_date"`
PatientAddress string `json:"patient_address"`
PractitionerNik string `json:"practitioner_nik"`
PractitionerId string `json:"practitioner_satusehat_id" validate:"required"`
PractitionerName string `json:"practitioner_name" validate:"required"`
ClinicName string `json:"clinic_name" validate:"required"`
ClinicSatuSehatId string `json:"clinic_id" validate:"required"`
PeriodStartDate time.Time `json:"period_start_date" validate:"required"`
PeriodEndDate time.Time `json:"period_end_date" validate:"required"`
ArrivedStartTime *time.Time `json:"arrived_start_time" validate:"required"`
ArrivedEndTime *time.Time `json:"arrived_end_time" validate:"required"`
InProgressStartTime *time.Time `json:"in_progress_start_time" validate:"required"`
InProgressEndTime *time.Time `json:"in_progress_end_time" validate:"required"`
FinishStartTime *time.Time `json:"finish_start_time" validate:"required"`
FinishEndTime *time.Time `json:"finish_end_time" validate:"required"`
}
func (v VisitDetail) Invalid() error {
val := validator.New()
return val.Struct(v)
}
type VitalSign struct {
Systole string `json:"sistole"`
Diastole string `json:"diastole"`
HeartRate string `json:"heart_rate"`
RespirationRate string `json:"respiration_rate"`
Temperature string `json:"temperature"`
OxygenSaturation string `json:"oxygen_saturation"`
}
func (v *Visit) VitalSign() VitalSign {
return VitalSign{
Systole: v.Systole,
Diastole: v.Diastole,
HeartRate: v.HeartRate,
RespirationRate: v.RespirationRate,
Temperature: v.Temperature,
OxygenSaturation: v.OxygenSaturation,
}
}
func (v *Visit) VisitDetail() VisitDetail {
return VisitDetail{
VisitId: v.VisitID,
PatientSatusehatId: v.PatientSatusehatID,
PatientNik: v.PatientNIK,
PatientName: v.PatientName,
PatientSex: v.PatientSex,
PatientBirthDate: v.PatientBirthDate,
PatientAddress: v.PatientAddress,
ClinicName: v.ClinicName,
ClinicSatuSehatId: v.ClinicSatusehatID,
PeriodStartDate: v.PeriodStartDate,
PeriodEndDate: v.PeriodEndDate,
PractitionerNik: v.PractitionerNIK,
PractitionerId: v.PractitionerSatusehatID,
PractitionerName: v.PractitionerName,
ArrivedStartTime: v.ArrivedStartTime,
ArrivedEndTime: v.ArrivedEndTime,
InProgressStartTime: v.InProgressStartTime,
InProgressEndTime: v.InProgressEndTime,
FinishStartTime: v.FinishStartTime,
FinishEndTime: v.FinishEndTime,
}
}