From 106fea0ac933d5ff6e5ec46edb4c269e0ebf2f41 Mon Sep 17 00:00:00 2001 From: vanilia Date: Wed, 3 Dec 2025 11:38:45 +0700 Subject: [PATCH] finish soapi --- .../simgos-entities/t-rekammedik/entity.go | 10 +- .../interface/main-handler/soapi/handler.go | 6 +- .../use-case/main-use-case/encounter/case.go | 10 +- .../use-case/main-use-case/encounter/lib.go | 5 +- .../new/encounter/case.go | 32 +++--- .../new/encounter/helper.go | 101 +++++++++++------- .../simgos-sync-use-case/new/encounter/lib.go | 53 +-------- 7 files changed, 102 insertions(+), 115 deletions(-) diff --git a/internal/domain/simgos-entities/t-rekammedik/entity.go b/internal/domain/simgos-entities/t-rekammedik/entity.go index 5df0ec83..8599db5d 100644 --- a/internal/domain/simgos-entities/t-rekammedik/entity.go +++ b/internal/domain/simgos-entities/t-rekammedik/entity.go @@ -5,14 +5,14 @@ import "time" type TRekammedik struct { TglKirim *time.Time `json:"tgl_kirim" gorm:"column:tgl_kirim"` TglTerima *time.Time `json:"tgl_terima" gorm:"column:tgl_terima"` - Idxdaftar int `json:"idxdaftar" gorm:"column:idxdaftar"` - Kdpoly int `json:"kdpoly" gorm:"column:kdpoly"` + Idxdaftar uint `json:"idxdaftar" gorm:"column:idxdaftar"` + Kdpoly uint `json:"kdpoly" gorm:"column:kdpoly"` Pengirim string `json:"pengirim" gorm:"column:pengirim"` Penerima string `json:"penerima" gorm:"column:penerima"` - Statusrm int `json:"statusrm" gorm:"column:statusrm"` + Statusrm uint `json:"statusrm" gorm:"column:statusrm"` PenerimaPoly string `json:"penerima_poly" gorm:"column:penerima_poly"` - JamKirimRm string `json:"jam_kirim_rm" gorm:"column:jam_kirim_rm"` - JamTerimaRm string `json:"jam_terima_rm" gorm:"column:jam_terima_rm"` + JamKirimRm *time.Time `json:"jam_kirim_rm" gorm:"column:jam_kirim_rm"` + JamTerimaRm *time.Time `json:"jam_terima_rm" gorm:"column:jam_terima_rm"` PjBerkasRm string `json:"pj_berkas_rm" gorm:"column:pj_berkas_rm"` StatusFisikBerkas string `json:"status_fisik_berkas" gorm:"column:status_fisik_berkas"` } diff --git a/internal/interface/main-handler/soapi/handler.go b/internal/interface/main-handler/soapi/handler.go index fe50b7d2..3683bb23 100644 --- a/internal/interface/main-handler/soapi/handler.go +++ b/internal/interface/main-handler/soapi/handler.go @@ -47,7 +47,7 @@ func (obj myBase) GetDetail(w http.ResponseWriter, r *http.Request) { return } dto := e.ReadDetailDto{} - dto.Id = uint16(id) + dto.Id = uint(id) res, err := u.ReadDetail(dto) rw.DataResponse(w, res, err) } @@ -62,7 +62,7 @@ func (obj myBase) Update(w http.ResponseWriter, r *http.Request) { if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { return } - dto.Id = uint16(id) + dto.Id = uint(id) res, err := u.Update(dto) rw.DataResponse(w, res, err) } @@ -74,7 +74,7 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) { } dto := e.DeleteDto{} - dto.Id = uint16(id) + dto.Id = uint(id) res, err := u.Delete(dto) rw.DataResponse(w, res, err) } diff --git a/internal/use-case/main-use-case/encounter/case.go b/internal/use-case/main-use-case/encounter/case.go index 07f055a8..3d38dff7 100644 --- a/internal/use-case/main-use-case/encounter/case.go +++ b/internal/use-case/main-use-case/encounter/case.go @@ -554,7 +554,6 @@ func UpdateStatusCode(input e.UpdateStatusDto) (*d.Data, error) { // Start log pl.SetLogInfo(&event, input, "started", "update") - // TODO: Only "supervisi pendaftaran" could cancel encounter roleAllowed := []string{string(erg.EPCReg), string(erg.EPCNur), string(erg.EPCDoc)} err = validateAuth(input.AuthInfo, roleAllowed, "update-status-encounter", &event) if err != nil { @@ -604,9 +603,14 @@ func UpdateStatusCode(input e.UpdateStatusDto) (*d.Data, error) { return err } - if input.StatusCode == erc.DSCProcess || input.StatusCode == erc.DSCCancel { - data.Status_Code = input.StatusCode + // get data encounter + if data, err = ReadDetailData(e.ReadDetailDto{ + Id: input.Id, + Includes: "Adm_Employee.User"}, &event, tx); err != nil { + return err + } + if input.StatusCode == erc.DSCProcess || input.StatusCode == erc.DSCCancel { mwRunner.setMwType(pu.MWTPre) // Run pre-middleware if err := mwRunner.RunUpdateStatusMiddleware(updatestatusEncounter, data); err != nil { diff --git a/internal/use-case/main-use-case/encounter/lib.go b/internal/use-case/main-use-case/encounter/lib.go index 0b14b925..4e8540f1 100644 --- a/internal/use-case/main-use-case/encounter/lib.go +++ b/internal/use-case/main-use-case/encounter/lib.go @@ -216,7 +216,10 @@ func UpdateStatusData(input e.UpdateStatusDto, event *pl.Event, dbx ...*gorm.DB) if err := tx.Model(&e.Encounter{}). Where("\"Id\" = ?", input.Id). - Update("Status_Code", input.StatusCode).Error; err != nil { + Updates(map[string]interface{}{ + "Status_Code": input.StatusCode, + "Adm_Employee_Id": input.Employee_Id, + }).Error; err != nil { event.Status = "failed" event.ErrInfo = pl.ErrorInfo{ Code: "update-fail", diff --git a/internal/use-case/simgos-sync-use-case/new/encounter/case.go b/internal/use-case/simgos-sync-use-case/new/encounter/case.go index 5e353d1f..55c0a912 100644 --- a/internal/use-case/simgos-sync-use-case/new/encounter/case.go +++ b/internal/use-case/simgos-sync-use-case/new/encounter/case.go @@ -1,6 +1,7 @@ package encounter import ( + erc "simrs-vx/internal/domain/references/common" pl "simrs-vx/pkg/logger" d "github.com/karincake/dodol" @@ -9,7 +10,6 @@ import ( db "simrs-vx/pkg/dualtrx-helper" e "simrs-vx/internal/domain/main-entities/encounter" - etp "simrs-vx/internal/domain/simgos-entities/t-pendaftaran" synce "simrs-vx/internal/domain/sync-entities/encounter" syncir "simrs-vx/internal/domain/sync-entities/internal-reference" elog "simrs-vx/internal/domain/sync-entities/log" @@ -21,9 +21,7 @@ const source = "encounter" func Create(input e.Encounter) (*d.Data, error) { var ( - sgData *etp.TPendaftaran syncLink *synce.EncounterLink - err error ) event := pl.Event{ @@ -34,21 +32,27 @@ func Create(input e.Encounter) (*d.Data, error) { // Start log pl.SetLogInfo(&event, input, "started", "create") - err = db.WithDualTx(func(tx *db.Dualtx) error { + err := db.WithDualTx(func(tx *db.Dualtx) error { // STEP 1: Insert TPendaftaran - sgData, err = CreateTPendaftaranData(input, &event, tx.Simgos) + tPendaftaran, err := CreateTPendaftaranData(input, &event, tx.Simgos) + if err != nil { + return err + } + + // STEP 2: Insert TRekammedik + err = CreateTRekammedik(tPendaftaran, &event, tx.Simgos) if err != nil { return err } // STEP 3: Update MPasien - err = updatePatientCaraBayar(*sgData, &event, tx.Simgos) + err = updatePatientCaraBayar(*tPendaftaran, &event, tx.Simgos) if err != nil { return err } - // STEP 2: Insert to Link - syncLink, err = CreateLinkData(input.Id, sgData.Idxdaftar, &event, tx.Sync) + // STEP 4: Insert to Link + syncLink, err = CreateLinkData(input.Id, tPendaftaran.Idxdaftar, &event, tx.Sync) if err != nil { return err } @@ -281,8 +285,6 @@ func CheckOut(input e.Encounter) (*d.Data, error) { return err } - // TODO: Update TPemeriksaanHistory end_konsul if internal reference exist - return nil }) @@ -299,12 +301,12 @@ func CheckOut(input e.Encounter) (*d.Data, error) { func UpdateStatus(input e.Encounter) (*d.Data, error) { event := pl.Event{ - Feature: "Cancel", + Feature: "Update Status", Source: source, } // Start log - pl.SetLogInfo(&event, input, "started", "cancel") + pl.SetLogInfo(&event, input, "started", "update-status") // STEP 1: Get Link syncLink, err := ReadDetailLinkData(input.Id, &event) @@ -326,7 +328,11 @@ func UpdateStatus(input e.Encounter) (*d.Data, error) { } // Step 3: Update TDiagnosadanterapi - // TODO: update diagnosadanterapi + if input.Status_Code == erc.DSCCancel { + if err = updateCancelTDiagnosaTherapy(simgos.Idxdaftar, input, &event, tx); err != nil { + return err + } + } return nil }) diff --git a/internal/use-case/simgos-sync-use-case/new/encounter/helper.go b/internal/use-case/simgos-sync-use-case/new/encounter/helper.go index bbbc8687..5344c897 100644 --- a/internal/use-case/simgos-sync-use-case/new/encounter/helper.go +++ b/internal/use-case/simgos-sync-use-case/new/encounter/helper.go @@ -6,25 +6,29 @@ package encounter import ( "encoding/json" + pl "simrs-vx/pkg/logger" + "strconv" + + dg "github.com/karincake/apem/db-gorm-pg" + "gorm.io/gorm" + "gorm.io/gorm/clause" + erc "simrs-vx/internal/domain/references/common" ere "simrs-vx/internal/domain/references/encounter" erp "simrs-vx/internal/domain/references/person" - pl "simrs-vx/pkg/logger" - "strconv" e "simrs-vx/internal/domain/main-entities/encounter" epa "simrs-vx/internal/domain/main-entities/person-address" epc "simrs-vx/internal/domain/main-entities/person-contact" epr "simrs-vx/internal/domain/main-entities/person-relative" + ep "simrs-vx/internal/domain/simgos-entities/m-pasien" - etph "simrs-vx/internal/domain/simgos-entities/t-pemeriksaan-hist" + etdt "simrs-vx/internal/domain/simgos-entities/t-diagnosadanterapi" etp "simrs-vx/internal/domain/simgos-entities/t-pendaftaran" + etrm "simrs-vx/internal/domain/simgos-entities/t-rekammedik" + esync "simrs-vx/internal/domain/sync-entities/encounter" esyncLog "simrs-vx/internal/domain/sync-entities/log" - - dg "github.com/karincake/apem/db-gorm-pg" - "gorm.io/gorm" - "gorm.io/gorm/clause" ) func setDataCreateTPendaftaran(input *e.Encounter) (data etp.TPendaftaran, err error) { @@ -188,34 +192,6 @@ func setDataCheckOut(input e.Encounter, data *etp.TPendaftaran) { return } -func setDataRequestSwitchUnit(input e.Encounter, data *etp.TPendaftaran) (hist []etph.TPemeriksaanHist) { - if enc := input.InternalReferences; enc != nil { - for i, ref := range *enc { - hist = append(hist, etph.TPemeriksaanHist{ - Idxdaftar: &data.Idxdaftar, - Kdpoly: stringtouint(*ref.Unit_Code), - DokterPengonsul: stringtouint(*ref.SrcDoctor_Code), - DokterPenerima: stringtouint(*ref.Doctor_Code), - StartKonsul: &now, - }) - - // set user konsul - if n := input.Responsible_Nurse; n != nil { - if emp := n.Employee; emp != nil { - if u := emp.User; u != nil { - hist[i].UserKonsul = &u.Name - } - } - } - - // setaktif - aktif := uint16(1) - hist[i].StAktif = &aktif - } - } - return -} - func setKdrujuk(input *ere.RefTypeCode, data *etp.TPendaftaran) { switch *input { case ere.RTCGov: @@ -363,12 +339,6 @@ func generateNoKunjung() (int, error) { return lastNumber + 1, nil } -func stringtouint(v string) *uint { - u, _ := strconv.Atoi(v) - point := uint(u) - return &point -} - func updatePatientCaraBayar(input etp.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) error { pl.SetLogInfo(event, nil, "started", "DBUpdate") @@ -417,3 +387,52 @@ func mapAddress(addresses *[]epa.PersonAddress, data *etp.TPendaftaran) { a := (*addresses)[0] data.PenanggungjawabAlamat = a.Address } + +func setDataTRekammedik(input *etp.TPendaftaran) (data etrm.TRekammedik) { + data.TglKirim = input.Tglreg + data.Idxdaftar = input.Idxdaftar + data.Kdpoly = input.Kdpoly + data.Pengirim = input.Nip + data.JamKirimRm = input.Tglreg + + return +} + +func updateCancelTDiagnosaTherapy(idxdaftar uint, enc e.Encounter, event *pl.Event, dbx ...*gorm.DB) error { + pl.SetLogInfo(event, nil, "started", "DBUpdate") + + var ( + tx *gorm.DB + userBatal string + ) + if len(dbx) > 0 { + tx = dbx[0] + } else { + tx = dg.IS["simrs"] + } + + if a := enc.Adm_Employee; a != nil { + if u := a.User; u != nil { + userBatal = u.Name + } + } + + if err := tx.Model(&etdt.TDiagnosaDanTerapi{}). + Where("idxdaftar = ?", idxdaftar). + Updates(map[string]interface{}{ + "status": "BATAL", + "user_batal": userBatal, + "tgl_batal": &now, + }).Error; err != nil { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "update-fail", + Detail: "Failed to update patient", + Raw: err, + } + return pl.SetLogError(event, idxdaftar) + } + + pl.SetLogInfo(event, idxdaftar, "complete") + return nil +} diff --git a/internal/use-case/simgos-sync-use-case/new/encounter/lib.go b/internal/use-case/simgos-sync-use-case/new/encounter/lib.go index 47d50802..35bf86ac 100644 --- a/internal/use-case/simgos-sync-use-case/new/encounter/lib.go +++ b/internal/use-case/simgos-sync-use-case/new/encounter/lib.go @@ -1,7 +1,6 @@ package encounter import ( - etph "simrs-vx/internal/domain/simgos-entities/t-pemeriksaan-hist" plh "simrs-vx/pkg/lib-helper" pl "simrs-vx/pkg/logger" pu "simrs-vx/pkg/use-case-helper" @@ -138,25 +137,6 @@ func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*e return &data, nil } -func CreateBulkLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*esync.EncounterLink, error) { - pl.SetLogInfo(event, nil, "started", "DBCreate") - data := setDataSimxLink(simxId, simgosId) - - var tx *gorm.DB - if len(dbx) > 0 { - tx = dbx[0] - } else { - tx = dg.I - } - - if err := tx.Create(&data).Error; err != nil { - return nil, plh.HandleCreateError(data, event, err) - } - - pl.SetLogInfo(event, nil, "complete") - return &data, nil -} - func ReadDetailLinkData(simxId uint, event *pl.Event) (*esync.EncounterLink, error) { pl.SetLogInfo(event, simxId, "started", "DBReadDetail") data := esync.EncounterLink{} @@ -218,10 +198,9 @@ func CreateLogData(input esynclog.SimxLogDto, event *pl.Event, dbx ...*gorm.DB) return nil } -func CreateBulkTPemeriksaanHistData(input e.Encounter, data *etp.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) (hist []etph.TPemeriksaanHist, err error) { +func CreateTRekammedik(input *etp.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) error { pl.SetLogInfo(event, nil, "started", "DBCreate") - - hist = setDataRequestSwitchUnit(input, data) + data := setDataTRekammedik(input) var tx *gorm.DB if len(dbx) > 0 { @@ -230,32 +209,8 @@ func CreateBulkTPemeriksaanHistData(input e.Encounter, data *etp.TPendaftaran, e tx = dg.IS["simrs"] } - if err := tx.Create(&hist).Error; err != nil { - return nil, plh.HandleCreateError(input, event, err) - } - - pl.SetLogInfo(event, nil, "complete") - return hist, nil -} - -func UpdateTPemeriksaanHistData(input e.ApproveCancelUnitDto, data *etph.TPemeriksaanHist, event *pl.Event, dbx ...*gorm.DB) error { - pl.SetLogInfo(event, input, "started", "DBUpdateTPemeriksaanHist") - - var tx *gorm.DB - if len(dbx) > 0 { - tx = dbx[0] - } else { - tx = dg.IS["simrs"] - } - - if err := tx.Save(&data).Error; err != nil { - event.Status = "failed" - event.ErrInfo = pl.ErrorInfo{ - Code: "data-update-fail", - Detail: "Database update failed", - Raw: err, - } - return pl.SetLogError(event, input) + if err := tx.Create(&data).Error; err != nil { + return plh.HandleCreateError(input, event, err) } pl.SetLogInfo(event, nil, "complete")