diff --git a/README-DB.md b/README-DB.md index c361ca31..b99cf08a 100644 --- a/README-DB.md +++ b/README-DB.md @@ -15,7 +15,7 @@
Example: 1. `User_Id` represents the `User` object and the `Id` attribute 2. `BestProduct_Code` represents the `BestProduct` object and the `Code` attribute - 3. When more than one column has a similar definition, a `prefix` can be added to indicate the column's purpose. + 3. When more than one column has a similar definition, a `prefixnew` can be added to indicate the column's purpose.
Example: 1. `Admin_User_Id` represents the `Admin` of the `User` object and the `Id` attribute 2. `Operator_User_Id` refers to the `Operator` of the `User` object and the `Id` column. @@ -25,7 +25,7 @@
Example: 1. `user_id` represents the `User` object and the `Id` attribute. 2. `bestProduct_code` represents the `bestProduct` object and the `code` attribute. - 3. When more than one column has a similar definition, a `prefix` can be added to indicate the column's purpose. + 3. When more than one column has a similar definition, a `prefixnew` can be added to indicate the column's purpose.
Example: 1. `admin_user_id` refers to the `admin` of the `user` object and `id` attribute 2. `operator_user_id` refers to the `operator` of the `user` object, column `id` diff --git a/cmd/main-api/config.yml-example b/cmd/main-api/config.yml-example index 30351abf..3f6224ad 100644 --- a/cmd/main-api/config.yml-example +++ b/cmd/main-api/config.yml-example @@ -71,7 +71,7 @@ bpjsCfg: syncUrlCfg: enable: false host: - prefix: new-to-old + prefixnew: new-to-old docsCfg: path: ../../assets/docs/ \ No newline at end of file diff --git a/go.mod b/go.mod index 493ad0a2..c395bd8f 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ toolchain go1.24.6 require ( ariga.io/atlas-provider-gorm v0.5.6 + github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 github.com/SebastiaanKlippert/go-wkhtmltopdf v1.9.3 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/google/uuid v1.6.0 @@ -42,6 +43,7 @@ require ( github.com/karincake/pentol v0.0.3 // indirect github.com/klauspost/compress v1.18.0 // indirect github.com/klauspost/cpuid/v2 v2.2.11 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-sqlite3 v1.14.28 // indirect diff --git a/internal/domain/simgos-entities/installation/entity.go b/internal/domain/simgos-entities/m-instalasi/entity.go similarity index 95% rename from internal/domain/simgos-entities/installation/entity.go rename to internal/domain/simgos-entities/m-instalasi/entity.go index f2b291f5..bbeb3ed7 100644 --- a/internal/domain/simgos-entities/installation/entity.go +++ b/internal/domain/simgos-entities/m-instalasi/entity.go @@ -1,4 +1,4 @@ -package installation +package m_instalasi type MInstalasi struct { No_Instalasi uint `json:"no_instalasi" gorm:"primaryKey;autoIncrement;column:no_instalasi"` diff --git a/internal/domain/simgos-entities/patient/entity.go b/internal/domain/simgos-entities/m-pasien/entity.go similarity index 99% rename from internal/domain/simgos-entities/patient/entity.go rename to internal/domain/simgos-entities/m-pasien/entity.go index 67958d56..f2bacfd9 100644 --- a/internal/domain/simgos-entities/patient/entity.go +++ b/internal/domain/simgos-entities/m-pasien/entity.go @@ -1,4 +1,4 @@ -package patient +package m_pasien import "time" diff --git a/internal/domain/simgos-entities/specialist/entity.go b/internal/domain/simgos-entities/m-polihfis/entity.go similarity index 100% rename from internal/domain/simgos-entities/specialist/entity.go rename to internal/domain/simgos-entities/m-polihfis/entity.go diff --git a/internal/domain/simgos-entities/unit/entity.go b/internal/domain/simgos-entities/m-poly/entity.go similarity index 75% rename from internal/domain/simgos-entities/unit/entity.go rename to internal/domain/simgos-entities/m-poly/entity.go index 20fa0000..52fe20eb 100644 --- a/internal/domain/simgos-entities/unit/entity.go +++ b/internal/domain/simgos-entities/m-poly/entity.go @@ -1,11 +1,11 @@ -package unit +package m_poly -type MPloy struct { +type MPoly struct { Kode uint `json:"kode" gorm:"primaryKey;autoIncrement;column:kode"` Nama string `json:"nama" gorm:"column:nama"` Jenispoly uint `json:"jenispoly" gorm:"column:jenispoly"` } -func (MPloy) TableName() string { +func (MPoly) TableName() string { return "m_poly" } diff --git a/internal/domain/simgos-entities/division/entity.go b/internal/domain/simgos-entities/m-unit/entity.go similarity index 98% rename from internal/domain/simgos-entities/division/entity.go rename to internal/domain/simgos-entities/m-unit/entity.go index 0cc38494..3d67d8fd 100644 --- a/internal/domain/simgos-entities/division/entity.go +++ b/internal/domain/simgos-entities/m-unit/entity.go @@ -1,4 +1,4 @@ -package division +package m_unit type MUnit struct { KodeUnit uint `json:"kode_unit" gorm:"primaryKey;autoIncrement;column:kode_unit"` diff --git a/internal/domain/simgos-entities/t-pemeriksaan-hist/entity.go b/internal/domain/simgos-entities/t-pemeriksaan-hist/entity.go new file mode 100644 index 00000000..cfb0dda6 --- /dev/null +++ b/internal/domain/simgos-entities/t-pemeriksaan-hist/entity.go @@ -0,0 +1,27 @@ +package t_pemeriksaan_hist + +import "time" + +type TPemeriksaanHist struct { + IdPemeriksaanHist uint `json:"id_pemeriksaanhist" gorm:"primaryKey;column:id_pemeriksaanhist"` + Idxdaftar *uint `json:"idxdaftar" gorm:"column:idxdaftar"` + Kdpoly *uint `json:"kdpoly" gorm:"column:kdpoly"` + DokterPengonsul *uint `json:"dokter_pengonsul" gorm:"column:dokter_pengonsul"` + DokterPenerima *uint `json:"dokter_penerima" gorm:"column:dokter_penerima"` + StartKonsul *time.Time `json:"start_konsul" gorm:"column:start_konsul"` + EndKonsul *time.Time `json:"end_konsul" gorm:"column:end_konsul"` + UserKonsul *string `json:"user_konsul" gorm:"column:user_konsul;size:100"` + TglEntriKonsul *time.Time `json:"tgl_entri_konsul" gorm:"column:tgl_entri_konsul"` + IP *string `json:"ip" gorm:"column:ip;size:50"` + UserPenerima *string `json:"user_penerima" gorm:"column:user_penerima;size:100"` + MasukPoly *time.Time `json:"masuk_poly" gorm:"column:masuk_poly"` + PerawatPenerima *uint `json:"perawat_penerima" gorm:"column:perawat_penerima"` + StAktif *uint16 `json:"st_aktif" gorm:"column:st_aktif"` + UserBatal *string `json:"user_batal" gorm:"column:user_batal;size:100"` + TglBatal *time.Time `json:"tgl_batal" gorm:"column:tgl_batal"` + IdxBillRajal *uint `json:"idxbillrajal" gorm:"column:idxbillrajal"` +} + +func (TPemeriksaanHist) TableName() string { + return "t_pemeriksaan_hist" +} diff --git a/internal/domain/simgos-entities/encounter/entity.go b/internal/domain/simgos-entities/t-pendaftaran/entity.go similarity index 99% rename from internal/domain/simgos-entities/encounter/entity.go rename to internal/domain/simgos-entities/t-pendaftaran/entity.go index cd8f538d..682aabeb 100644 --- a/internal/domain/simgos-entities/encounter/entity.go +++ b/internal/domain/simgos-entities/t-pendaftaran/entity.go @@ -1,4 +1,4 @@ -package encounter +package t_pendaftaran import "time" diff --git a/internal/interface/main-handler/main-handler.go b/internal/interface/main-handler/main-handler.go index 4a49c022..898f9027 100644 --- a/internal/interface/main-handler/main-handler.go +++ b/internal/interface/main-handler/main-handler.go @@ -303,7 +303,7 @@ func SetRoutes() http.Handler { "PATCH /{id}/active": user.O.Active, }) hc.RegCrud(r, "/v1/user-fes", userfes.O) - hk.GroupRoutes("/v1/patient", r, hk.MapHandlerFunc{ + hk.GroupRoutes("/v1/patient", r, auth.GuardMW, hk.MapHandlerFunc{ "GET /": patient.O.GetList, "GET /{id}": patient.O.GetDetail, "POST /": patient.O.Create, diff --git a/internal/interface/simgos-sync-handler/division/handler.go b/internal/interface/simgos-sync-handler/new/division/handler.go similarity index 95% rename from internal/interface/simgos-sync-handler/division/handler.go rename to internal/interface/simgos-sync-handler/new/division/handler.go index 0f87ca8a..75059cd8 100644 --- a/internal/interface/simgos-sync-handler/division/handler.go +++ b/internal/interface/simgos-sync-handler/new/division/handler.go @@ -2,13 +2,13 @@ package division import ( "net/http" + u "simrs-vx/internal/use-case/simgos-sync-use-case/new/division" rw "github.com/karincake/risoles" // ua "github.com/karincake/tumpeng/auth/svc" e "simrs-vx/internal/domain/main-entities/division" esync "simrs-vx/internal/domain/sync-entities/log" - u "simrs-vx/internal/use-case/simgos-sync-use-case/division" ) type myBase struct{} diff --git a/internal/interface/simgos-sync-handler/encounter/handler.go b/internal/interface/simgos-sync-handler/new/encounter/handler.go similarity index 62% rename from internal/interface/simgos-sync-handler/encounter/handler.go rename to internal/interface/simgos-sync-handler/new/encounter/handler.go index 41ce9415..1f03c38c 100644 --- a/internal/interface/simgos-sync-handler/encounter/handler.go +++ b/internal/interface/simgos-sync-handler/new/encounter/handler.go @@ -2,13 +2,13 @@ package encounter import ( "net/http" + u "simrs-vx/internal/use-case/simgos-sync-use-case/new/encounter" rw "github.com/karincake/risoles" // ua "github.com/karincake/tumpeng/auth/svc" e "simrs-vx/internal/domain/main-entities/encounter" esync "simrs-vx/internal/domain/sync-entities/log" - u "simrs-vx/internal/use-case/simgos-sync-use-case/encounter" ) type myBase struct{} @@ -34,16 +34,10 @@ func (obj myBase) CreateLog(w http.ResponseWriter, r *http.Request) { } func (obj myBase) Update(w http.ResponseWriter, r *http.Request) { - id := rw.ValidateInt(w, "id", r.PathValue("id")) - if id <= 0 { - return - } - dto := e.Encounter{} if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { return } - dto.Id = uint(id) res, err := u.Update(dto) rw.DataResponse(w, res, err) @@ -61,3 +55,33 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) { res, err := u.Delete(dto) rw.DataResponse(w, res, err) } + +func (obj myBase) Checkin(w http.ResponseWriter, r *http.Request) { + dto := e.Encounter{} + if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { + return + } + + res, err := u.CheckIn(dto) + rw.DataResponse(w, res, err) +} + +func (obj myBase) Checkout(w http.ResponseWriter, r *http.Request) { + dto := e.Encounter{} + if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { + return + } + + res, err := u.CheckOut(dto) + rw.DataResponse(w, res, err) +} + +func (obj myBase) Cancel(w http.ResponseWriter, r *http.Request) { + dto := e.Encounter{} + if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res { + return + } + + res, err := u.Cancel(dto) + rw.DataResponse(w, res, err) +} diff --git a/internal/interface/simgos-sync-handler/installation/handler.go b/internal/interface/simgos-sync-handler/new/installation/handler.go similarity index 94% rename from internal/interface/simgos-sync-handler/installation/handler.go rename to internal/interface/simgos-sync-handler/new/installation/handler.go index 18d0316e..eb5fe09d 100644 --- a/internal/interface/simgos-sync-handler/installation/handler.go +++ b/internal/interface/simgos-sync-handler/new/installation/handler.go @@ -2,13 +2,13 @@ package installation import ( "net/http" + u "simrs-vx/internal/use-case/simgos-sync-use-case/new/installation" rw "github.com/karincake/risoles" // ua "github.com/karincake/tumpeng/auth/svc" e "simrs-vx/internal/domain/main-entities/installation" esync "simrs-vx/internal/domain/sync-entities/log" - u "simrs-vx/internal/use-case/simgos-sync-use-case/installation" ) type myBase struct{} diff --git a/internal/interface/simgos-sync-handler/patient/handler.go b/internal/interface/simgos-sync-handler/new/patient/handler.go similarity index 95% rename from internal/interface/simgos-sync-handler/patient/handler.go rename to internal/interface/simgos-sync-handler/new/patient/handler.go index cfc0c8da..d3e6d591 100644 --- a/internal/interface/simgos-sync-handler/patient/handler.go +++ b/internal/interface/simgos-sync-handler/new/patient/handler.go @@ -2,13 +2,13 @@ package patient import ( "net/http" + u "simrs-vx/internal/use-case/simgos-sync-use-case/new/patient" rw "github.com/karincake/risoles" // ua "github.com/karincake/tumpeng/auth/svc" e "simrs-vx/internal/domain/main-entities/patient" esync "simrs-vx/internal/domain/sync-entities/log" - u "simrs-vx/internal/use-case/simgos-sync-use-case/patient" ) type myBase struct{} diff --git a/internal/interface/simgos-sync-handler/specialist/handler.go b/internal/interface/simgos-sync-handler/new/specialist/handler.go similarity index 95% rename from internal/interface/simgos-sync-handler/specialist/handler.go rename to internal/interface/simgos-sync-handler/new/specialist/handler.go index 79289472..b1a31dbb 100644 --- a/internal/interface/simgos-sync-handler/specialist/handler.go +++ b/internal/interface/simgos-sync-handler/new/specialist/handler.go @@ -2,13 +2,13 @@ package specialist import ( "net/http" + u "simrs-vx/internal/use-case/simgos-sync-use-case/new/specialist" rw "github.com/karincake/risoles" // ua "github.com/karincake/tumpeng/auth/svc" e "simrs-vx/internal/domain/main-entities/specialist" esync "simrs-vx/internal/domain/sync-entities/log" - u "simrs-vx/internal/use-case/simgos-sync-use-case/specialist" ) type myBase struct{} diff --git a/internal/interface/simgos-sync-handler/subspecialist/handler.go b/internal/interface/simgos-sync-handler/new/subspecialist/handler.go similarity index 94% rename from internal/interface/simgos-sync-handler/subspecialist/handler.go rename to internal/interface/simgos-sync-handler/new/subspecialist/handler.go index fcd03c6b..4cf6dd13 100644 --- a/internal/interface/simgos-sync-handler/subspecialist/handler.go +++ b/internal/interface/simgos-sync-handler/new/subspecialist/handler.go @@ -2,13 +2,13 @@ package subspecialist import ( "net/http" + u "simrs-vx/internal/use-case/simgos-sync-use-case/new/subspecialist" rw "github.com/karincake/risoles" // ua "github.com/karincake/tumpeng/auth/svc" e "simrs-vx/internal/domain/main-entities/subspecialist" esync "simrs-vx/internal/domain/sync-entities/log" - u "simrs-vx/internal/use-case/simgos-sync-use-case/subspecialist" ) type myBase struct{} diff --git a/internal/interface/simgos-sync-handler/unit/handler.go b/internal/interface/simgos-sync-handler/new/unit/handler.go similarity index 95% rename from internal/interface/simgos-sync-handler/unit/handler.go rename to internal/interface/simgos-sync-handler/new/unit/handler.go index b1cac1c5..66479db2 100644 --- a/internal/interface/simgos-sync-handler/unit/handler.go +++ b/internal/interface/simgos-sync-handler/new/unit/handler.go @@ -2,13 +2,13 @@ package unit import ( "net/http" + u "simrs-vx/internal/use-case/simgos-sync-use-case/new/unit" rw "github.com/karincake/risoles" // ua "github.com/karincake/tumpeng/auth/svc" e "simrs-vx/internal/domain/main-entities/unit" esync "simrs-vx/internal/domain/sync-entities/log" - u "simrs-vx/internal/use-case/simgos-sync-use-case/unit" ) type myBase struct{} diff --git a/internal/interface/simgos-sync-handler/simgos-sync-handler.go b/internal/interface/simgos-sync-handler/simgos-sync-handler.go index b5b65507..a82e81e6 100644 --- a/internal/interface/simgos-sync-handler/simgos-sync-handler.go +++ b/internal/interface/simgos-sync-handler/simgos-sync-handler.go @@ -1,8 +1,14 @@ package simgossynchandler import ( - "fmt" "net/http" + "simrs-vx/internal/interface/simgos-sync-handler/new/division" + "simrs-vx/internal/interface/simgos-sync-handler/new/encounter" + "simrs-vx/internal/interface/simgos-sync-handler/new/installation" + "simrs-vx/internal/interface/simgos-sync-handler/new/patient" + "simrs-vx/internal/interface/simgos-sync-handler/new/specialist" + "simrs-vx/internal/interface/simgos-sync-handler/new/subspecialist" + "simrs-vx/internal/interface/simgos-sync-handler/new/unit" hc "simrs-vx/pkg/handler-crud-helper" /******************** infra ********************/ @@ -16,15 +22,10 @@ import ( /******************** external ********************/ a "github.com/karincake/apem" + hk "github.com/karincake/hongkue" + /******************** internal ********************/ "simrs-vx/internal/interface/main-handler/home" - division "simrs-vx/internal/interface/simgos-sync-handler/division" - encounter "simrs-vx/internal/interface/simgos-sync-handler/encounter" - installation "simrs-vx/internal/interface/simgos-sync-handler/installation" - patient "simrs-vx/internal/interface/simgos-sync-handler/patient" - specialist "simrs-vx/internal/interface/simgos-sync-handler/specialist" - subspecialist "simrs-vx/internal/interface/simgos-sync-handler/subspecialist" - unit "simrs-vx/internal/interface/simgos-sync-handler/unit" ) func SetRoutes() http.Handler { @@ -39,16 +40,32 @@ func SetRoutes() http.Handler { /******************** Main ********************/ r.HandleFunc("/", home.Home) - /******************** Source ******************/ - prefix := "/new-to-old" - hc.SyncCrud(r, prefix+"/v1/installation", installation.O) - hc.SyncCrud(r, prefix+"/v1/unit", unit.O) - hc.SyncCrud(r, prefix+"/v1/division", division.O) - hc.SyncCrud(r, prefix+"/v1/specialist", specialist.O) - hc.SyncCrud(r, prefix+"/v1/subspecialist", subspecialist.O) - hc.SyncCrud(r, prefix+"/v1/patient", patient.O) - r.HandleFunc(fmt.Sprintf("GET %s/v1/patient-nomr-generator", prefix), patient.O.GenerateNomr) - hc.SyncCrud(r, prefix+"/v1/encounter", encounter.O) + /******************** SvcToOld ******************/ + prefixnew := "/new-to-old" + hc.SyncCrud(r, prefixnew+"/v1/installation", installation.O) + hc.SyncCrud(r, prefixnew+"/v1/unit", unit.O) + hc.SyncCrud(r, prefixnew+"/v1/division", division.O) + hc.SyncCrud(r, prefixnew+"/v1/specialist", specialist.O) + hc.SyncCrud(r, prefixnew+"/v1/subspecialist", subspecialist.O) + hk.GroupRoutes(prefixnew+"/v1/patient", r, hk.MapHandlerFunc{ + "POST /": patient.O.Create, + "POST /log": patient.O.CreateLog, + "PATCH /{id}": patient.O.Update, + "DELETE /{id}": patient.O.Delete, + "POST /nomr": patient.O.GenerateNomr, + }) + hk.GroupRoutes(prefixnew+"/v1/encounter", r, hk.MapHandlerFunc{ + "POST /": encounter.O.Create, + "POST /log": encounter.O.CreateLog, + "PATCH /{id}": encounter.O.Update, + "DELETE /{id}": encounter.O.Delete, + "PATCH /{id}/checkin": encounter.O.Checkin, + "PATCH /{id}/checkout": encounter.O.Checkout, + "PATCH /{id}/cancel": encounter.O.Cancel, + }) + + /******************** SvcToNew ******************/ + //prefixold := "/old-to-new" return cmw.SetCors(handlerlogger.SetLog(r)) } diff --git a/internal/use-case/main-use-case/division/middleware.go b/internal/use-case/main-use-case/division/middleware.go index 83452940..159ae4a3 100644 --- a/internal/use-case/main-use-case/division/middleware.go +++ b/internal/use-case/main-use-case/division/middleware.go @@ -1,7 +1,7 @@ package division import ( - plugin "simrs-vx/internal/use-case/simgos-sync-plugin/division" + plugin "simrs-vx/internal/use-case/simgos-sync-plugin/new/division" ) // example of middleware diff --git a/internal/use-case/main-use-case/encounter/case.go b/internal/use-case/main-use-case/encounter/case.go index 45a85a00..25d74859 100644 --- a/internal/use-case/main-use-case/encounter/case.go +++ b/internal/use-case/main-use-case/encounter/case.go @@ -515,9 +515,17 @@ func CheckOut(input e.DischargeDto) (*d.Data, error) { } } + dataEncounter, err := ReadDetailData(e.ReadDetailDto{ + Id: uint16(data.Id), + Includes: "DeathCause"}, + &event, tx) + if err != nil { + return err + } + mwRunner.setMwType(pu.MWTPre) // Run pre-middleware - if err := mwRunner.RunCheckoutMiddleware(checkoutEncounter, &input); err != nil { + if err := mwRunner.RunCheckoutMiddleware(checkoutEncounter, dataEncounter); err != nil { return err } @@ -552,6 +560,7 @@ func UpdateStatusCode(input e.UpdateStatusDto) (*d.Data, error) { // Start log pl.SetLogInfo(&event, input, "started", "update") + mwRunner := newMiddlewareRunner(&event) err = dg.I.Transaction(func(tx *gorm.DB) error { pl.SetLogInfo(&event, rdDto, "started", "DBReadDetail") @@ -622,7 +631,13 @@ func UpdateStatusCode(input e.UpdateStatusDto) (*d.Data, error) { return err } - pl.SetLogInfo(&event, nil, "complete") + if input.StatusCode == erc.DSCCancel { + mwRunner.setMwType(pu.MWTPre) + // Run pre-middleware + if err := mwRunner.RunUpdateStatusMiddleware(updatestatusEncounter, data); err != nil { + return err + } + } return nil }) @@ -829,6 +844,8 @@ func RequestSwitchUnit(input e.SwitchUnitDto) (*d.Data, error) { return err } + // TODO: update status encounter, finishedAt + pl.SetLogInfo(&event, nil, "complete") return nil }) @@ -940,7 +957,7 @@ func ApproveSwitchUnit(input e.ApproveUnitDto) (*d.Data, error) { // update data response data.Responsible_Doctor_Code = irData.Doctor_Code - data.Unit_Code = irData.Unit_Code // + data.Unit_Code = irData.Unit_Code data.Specialist_Code = irData.Doctor.Specialist_Code data.Subspecialist_Code = irData.Doctor.Subspecialist_Code diff --git a/internal/use-case/main-use-case/encounter/lib.go b/internal/use-case/main-use-case/encounter/lib.go index 5eac2db5..ef189ad4 100644 --- a/internal/use-case/main-use-case/encounter/lib.go +++ b/internal/use-case/main-use-case/encounter/lib.go @@ -333,8 +333,6 @@ func updateEncounterApproveSwitchUnit(input eir.InternalReference, event *pl.Eve Updates(map[string]interface{}{ "Responsible_Doctor_Code": input.Doctor_Code, "Unit_Code": input.Unit_Code, - "Specialist_Code": input.Doctor.Specialist_Code, - "Subspecialist_Code": input.Doctor.Subspecialist_Code, }).Error; err != nil { event.Status = "failed" event.ErrInfo = pl.ErrorInfo{ diff --git a/internal/use-case/main-use-case/encounter/middleware-runner.go b/internal/use-case/main-use-case/encounter/middleware-runner.go index 78558cd0..ef1cb283 100644 --- a/internal/use-case/main-use-case/encounter/middleware-runner.go +++ b/internal/use-case/main-use-case/encounter/middleware-runner.go @@ -161,7 +161,7 @@ func (me *middlewareRunner) RunCheckinMiddleware(middleware checkinMw, input *e. return nil } -func (me *middlewareRunner) RunCheckoutMiddleware(middleware checkoutMw, input *e.DischargeDto) error { +func (me *middlewareRunner) RunCheckoutMiddleware(middleware checkoutMw, input *e.Encounter) error { if !me.SyncOn { return nil } @@ -179,6 +179,26 @@ func (me *middlewareRunner) RunCheckoutMiddleware(middleware checkoutMw, input * return nil } +func (me *middlewareRunner) RunUpdateStatusMiddleware(middlewares []updateStatusMw, input *e.Encounter) error { + if !me.SyncOn { + return nil + } + + for _, middleware := range middlewares { + logData := pu.GetLogData(input, nil) + + pl.SetLogInfo(me.Event, logData, "started", middleware.Name) + + if err := middleware.Func(input); err != nil { + return pu.HandleMiddlewareError(me.Event, string(me.MwType), middleware.Name, logData, err) + } + } + + pl.SetLogInfo(me.Event, nil, "complete") + + return nil +} + func (me *middlewareRunner) setMwType(mwType pu.MWType) { me.MwType = mwType } diff --git a/internal/use-case/main-use-case/encounter/middleware.go b/internal/use-case/main-use-case/encounter/middleware.go index bb5fab3f..fb2ce0a0 100644 --- a/internal/use-case/main-use-case/encounter/middleware.go +++ b/internal/use-case/main-use-case/encounter/middleware.go @@ -1,6 +1,8 @@ package encounter -import plugin "simrs-vx/internal/use-case/simgos-sync-plugin/encounter" +import ( + plugin "simrs-vx/internal/use-case/simgos-sync-plugin/new/encounter" +) func init() { createPreMw = append(createPreMw, @@ -10,8 +12,14 @@ func init() { createLogMw{Name: "create-sync-log", Func: plugin.CreateLog}) updatePreMw = append(updatePreMw, - updateMw{Name: "sync-update-patient", Func: plugin.Update}) + updateMw{Name: "sync-update-encounter", Func: plugin.Update}) deletePreMw = append(deletePreMw, - deleteMw{Name: "sync-delete-patient", Func: plugin.Delete}) + deleteMw{Name: "sync-delete-encounter", Func: plugin.Delete}) + + checkinEncounterMw = checkinMw{Name: "sync-checkin-encounter", Func: plugin.Checkin} + checkoutEncounter = checkoutMw{Name: "sync-checkout-encounter", Func: plugin.Checkout} + + updatestatusEncounter = append(updatestatusEncounter, + updateStatusMw{Name: "sync-update-status-encounter", Func: plugin.Cancel}) } diff --git a/internal/use-case/main-use-case/encounter/tycovar.go b/internal/use-case/main-use-case/encounter/tycovar.go index f2309211..f25ad45b 100644 --- a/internal/use-case/main-use-case/encounter/tycovar.go +++ b/internal/use-case/main-use-case/encounter/tycovar.go @@ -51,7 +51,12 @@ type checkinMw struct { type checkoutMw struct { Name string - Func func(input *e.DischargeDto) error + Func func(input *e.Encounter) error +} + +type updateStatusMw struct { + Name string + Func func(input *e.Encounter) error } type UpdateMw = updateMw @@ -70,3 +75,4 @@ var deletePreMw []deleteMw var deletePostMw []readDetailMw var checkinEncounterMw checkinMw var checkoutEncounter checkoutMw +var updatestatusEncounter []updateStatusMw diff --git a/internal/use-case/main-use-case/installation/middleware.go b/internal/use-case/main-use-case/installation/middleware.go index f32b7381..363c2526 100644 --- a/internal/use-case/main-use-case/installation/middleware.go +++ b/internal/use-case/main-use-case/installation/middleware.go @@ -1,7 +1,7 @@ package installation import ( - plugin "simrs-vx/internal/use-case/simgos-sync-plugin/installation" + plugin "simrs-vx/internal/use-case/simgos-sync-plugin/new/installation" ) // example of middleware diff --git a/internal/use-case/main-use-case/patient/helper.go b/internal/use-case/main-use-case/patient/helper.go index 82142632..fa3f1815 100644 --- a/internal/use-case/main-use-case/patient/helper.go +++ b/internal/use-case/main-use-case/patient/helper.go @@ -19,6 +19,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Patient) error { var inputSrc *e.CreateDto if inputT, ok := any(input).(*e.CreateDto); ok { inputSrc = inputT + data.RegisteredBy_User_Name = inputSrc.RegisteredBy_User_Name } else { inputTemp := any(input).(*e.UpdateDto) inputSrc = &inputTemp.CreateDto diff --git a/internal/use-case/main-use-case/patient/middleware.go b/internal/use-case/main-use-case/patient/middleware.go index 4270c14c..bd3e955b 100644 --- a/internal/use-case/main-use-case/patient/middleware.go +++ b/internal/use-case/main-use-case/patient/middleware.go @@ -5,12 +5,11 @@ import ( "fmt" "io" "net/http" + plugin "simrs-vx/internal/use-case/simgos-sync-plugin/new/patient" "gorm.io/gorm" e "simrs-vx/internal/domain/main-entities/patient" - - plugin "simrs-vx/internal/use-case/simgos-sync-plugin/patient" ) // example of middleware diff --git a/internal/use-case/main-use-case/specialist/middleware.go b/internal/use-case/main-use-case/specialist/middleware.go index 969436e5..74ba8e78 100644 --- a/internal/use-case/main-use-case/specialist/middleware.go +++ b/internal/use-case/main-use-case/specialist/middleware.go @@ -1,7 +1,7 @@ package specialist import ( - plugin "simrs-vx/internal/use-case/simgos-sync-plugin/specialist" + plugin "simrs-vx/internal/use-case/simgos-sync-plugin/new/specialist" ) // example of middleware diff --git a/internal/use-case/main-use-case/unit/middleware.go b/internal/use-case/main-use-case/unit/middleware.go index 0e62f502..03ef2c19 100644 --- a/internal/use-case/main-use-case/unit/middleware.go +++ b/internal/use-case/main-use-case/unit/middleware.go @@ -1,7 +1,7 @@ package unit import ( - plugin "simrs-vx/internal/use-case/simgos-sync-plugin/unit" + plugin "simrs-vx/internal/use-case/simgos-sync-plugin/new/unit" ) // example of middleware diff --git a/internal/use-case/simgos-sync-plugin/encounter/plugin.go b/internal/use-case/simgos-sync-plugin/encounter/plugin.go deleted file mode 100644 index 70d3e8be..00000000 --- a/internal/use-case/simgos-sync-plugin/encounter/plugin.go +++ /dev/null @@ -1,167 +0,0 @@ -package encounter - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "net/http" - - d "github.com/karincake/dodol" - - sync "simrs-vx/internal/infra/sync-cfg" - - e "simrs-vx/internal/domain/main-entities/encounter" - elog "simrs-vx/internal/domain/sync-entities/log" -) - -func Create(input *e.Encounter) error { - endpoint := getPrefixEndpoint() - - jsonData, err := json.Marshal(input) - if err != nil { - return fmt.Errorf("failed to encode JSON: %w", err) - } - - req, err := http.NewRequest("POST", endpoint, bytes.NewReader(jsonData)) - if err != nil { - return err - } - - req.Header.Set("Content-Type", "application/json") - - resp, err := http.DefaultClient.Do(req) - if err != nil { - return err - } - defer resp.Body.Close() - - bodyBytes, err := io.ReadAll(resp.Body) - if err != nil { - return err - } - - if resp.StatusCode != http.StatusOK { - errors := d.FieldError{} - _ = json.Unmarshal(bodyBytes, &errors) - - return fmt.Errorf(errors.Message) - } - - return nil -} - -func CreateLog(input *elog.SimxLogDto) error { - prefixEndpoint := getPrefixEndpoint() - endpoint := prefixEndpoint + "/log" - - jsonData, err := json.Marshal(input) - if err != nil { - return fmt.Errorf("failed to encode JSON: %w", err) - } - - req, err := http.NewRequest("POST", endpoint, bytes.NewReader(jsonData)) - if err != nil { - return err - } - - req.Header.Set("Content-Type", "application/json") - - resp, err := http.DefaultClient.Do(req) - if err != nil { - return err - } - defer resp.Body.Close() - - bodyBytes, err := io.ReadAll(resp.Body) - if err != nil { - return err - } - - if resp.StatusCode != http.StatusOK { - errors := d.FieldError{} - _ = json.Unmarshal(bodyBytes, &errors) - - return fmt.Errorf(errors.Message) - } - - return nil -} - -func Update(input *e.Encounter) error { - prefixEndpoint := getPrefixEndpoint() - endpoint := fmt.Sprintf("%s/%v", prefixEndpoint, input.Id) - - jsonData, err := json.Marshal(input) - if err != nil { - return fmt.Errorf("failed to encode JSON: %w", err) - } - - req, err := http.NewRequest("PATCH", endpoint, bytes.NewReader(jsonData)) - if err != nil { - return err - } - - req.Header.Set("Content-Type", "application/json") - - resp, err := http.DefaultClient.Do(req) - if err != nil { - return err - } - defer resp.Body.Close() - - bodyBytes, err := io.ReadAll(resp.Body) - if err != nil { - return err - } - - if resp.StatusCode != http.StatusOK { - errors := d.FieldError{} - _ = json.Unmarshal(bodyBytes, &errors) - - return fmt.Errorf(errors.Message) - } - - return nil -} - -func Delete(input *e.DeleteDto) error { - prefixEndpoint := getPrefixEndpoint() - endpoint := fmt.Sprintf("%s/%v", prefixEndpoint, input.Id) - - jsonData, err := json.Marshal(input) - if err != nil { - return fmt.Errorf("failed to encode JSON: %w", err) - } - - req, err := http.NewRequest("DELETE", endpoint, bytes.NewReader(jsonData)) - if err != nil { - return err - } - - req.Header.Set("Content-Type", "application/json") - - resp, err := http.DefaultClient.Do(req) - if err != nil { - return err - } - defer resp.Body.Close() - - bodyBytes, err := io.ReadAll(resp.Body) - if err != nil { - return err - } - - if resp.StatusCode != http.StatusOK { - errors := d.FieldError{} - _ = json.Unmarshal(bodyBytes, &errors) - - return fmt.Errorf(errors.Message) - } - - return nil -} - -func getPrefixEndpoint() string { - return fmt.Sprintf("%s%s/v1/encounter", sync.O.Host, sync.O.Prefix) -} diff --git a/internal/use-case/simgos-sync-plugin/division/plugin.go b/internal/use-case/simgos-sync-plugin/new/division/plugin.go similarity index 100% rename from internal/use-case/simgos-sync-plugin/division/plugin.go rename to internal/use-case/simgos-sync-plugin/new/division/plugin.go diff --git a/internal/use-case/simgos-sync-plugin/new/encounter/plugin.go b/internal/use-case/simgos-sync-plugin/new/encounter/plugin.go new file mode 100644 index 00000000..617f2e93 --- /dev/null +++ b/internal/use-case/simgos-sync-plugin/new/encounter/plugin.go @@ -0,0 +1,54 @@ +package encounter + +import ( + "fmt" + sync "simrs-vx/internal/infra/sync-cfg" + helper "simrs-vx/internal/use-case/simgos-sync-plugin/new" + + e "simrs-vx/internal/domain/main-entities/encounter" + elog "simrs-vx/internal/domain/sync-entities/log" +) + +func Create(input *e.Encounter) error { + return helper.DoJsonRequest(input, "POST", getPrefixEndpoint()) +} + +func CreateLog(input *elog.SimxLogDto) error { + prefixEndpoint := getPrefixEndpoint() + endpoint := prefixEndpoint + "/log" + return helper.DoJsonRequest(input, "POST", endpoint) +} + +func Update(input *e.Encounter) error { + prefixEndpoint := getPrefixEndpoint() + endpoint := fmt.Sprintf("%s/%v", prefixEndpoint, input.Id) + return helper.DoJsonRequest(input, "PATCH", endpoint) +} + +func Delete(input *e.DeleteDto) error { + prefixEndpoint := getPrefixEndpoint() + endpoint := fmt.Sprintf("%s/%v", prefixEndpoint, input.Id) + return helper.DoJsonRequest(input, "DELETE", endpoint) +} + +func Checkin(input *e.Encounter) error { + prefixEndpoint := getPrefixEndpoint() + endpoint := fmt.Sprintf("%s/%v/checkin", prefixEndpoint, input.Id) + return helper.DoJsonRequest(input, "PATCH", endpoint) +} + +func Checkout(input *e.Encounter) error { + prefixEndpoint := getPrefixEndpoint() + endpoint := fmt.Sprintf("%s/%v/checkout", prefixEndpoint, input.Id) + return helper.DoJsonRequest(input, "PATCH", endpoint) +} + +func Cancel(input *e.Encounter) error { + prefixEndpoint := getPrefixEndpoint() + endpoint := fmt.Sprintf("%s/%v/cancel", prefixEndpoint, input.Id) + return helper.DoJsonRequest(input, "PATCH", endpoint) +} + +func getPrefixEndpoint() string { + return fmt.Sprintf("%s%s/v1/encounter", sync.O.Host, sync.O.Prefix) +} diff --git a/internal/use-case/simgos-sync-plugin/new/helper.go b/internal/use-case/simgos-sync-plugin/new/helper.go new file mode 100644 index 00000000..75f63d49 --- /dev/null +++ b/internal/use-case/simgos-sync-plugin/new/helper.go @@ -0,0 +1,45 @@ +package new + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + + d "github.com/karincake/dodol" +) + +func DoJsonRequest(input any, method, endpoint string) error { + jsonData, err := json.Marshal(input) + if err != nil { + return fmt.Errorf("failed to encode JSON: %w", err) + } + + req, err := http.NewRequest(method, endpoint, bytes.NewReader(jsonData)) + if err != nil { + return err + } + + req.Header.Set("Content-Type", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + bodyBytes, err := io.ReadAll(resp.Body) + if err != nil { + return err + } + + if resp.StatusCode != http.StatusOK { + errors := d.FieldError{} + _ = json.Unmarshal(bodyBytes, &errors) + + return fmt.Errorf(errors.Message) + } + + return nil +} diff --git a/internal/use-case/simgos-sync-plugin/installation/plugin.go b/internal/use-case/simgos-sync-plugin/new/installation/plugin.go similarity index 100% rename from internal/use-case/simgos-sync-plugin/installation/plugin.go rename to internal/use-case/simgos-sync-plugin/new/installation/plugin.go diff --git a/internal/use-case/simgos-sync-plugin/patient/plugin.go b/internal/use-case/simgos-sync-plugin/new/patient/plugin.go similarity index 97% rename from internal/use-case/simgos-sync-plugin/patient/plugin.go rename to internal/use-case/simgos-sync-plugin/new/patient/plugin.go index ebfb8dc4..309e1d18 100644 --- a/internal/use-case/simgos-sync-plugin/patient/plugin.go +++ b/internal/use-case/simgos-sync-plugin/new/patient/plugin.go @@ -164,9 +164,9 @@ func Delete(input *e.DeleteDto) error { func GenerateNomrPatient() (*string, error) { prefixEndpoint := getPrefixEndpoint() - endpoint := fmt.Sprintf("%s-nomr-generator", prefixEndpoint) + endpoint := fmt.Sprintf("%s/nomr", prefixEndpoint) - req, err := http.NewRequest("GET", endpoint, nil) + req, err := http.NewRequest("POST", endpoint, nil) if err != nil { return nil, err } diff --git a/internal/use-case/simgos-sync-plugin/specialist/plugin.go b/internal/use-case/simgos-sync-plugin/new/specialist/plugin.go similarity index 100% rename from internal/use-case/simgos-sync-plugin/specialist/plugin.go rename to internal/use-case/simgos-sync-plugin/new/specialist/plugin.go diff --git a/internal/use-case/simgos-sync-plugin/subspecialist/plugin.go b/internal/use-case/simgos-sync-plugin/new/subspecialist/plugin.go similarity index 100% rename from internal/use-case/simgos-sync-plugin/subspecialist/plugin.go rename to internal/use-case/simgos-sync-plugin/new/subspecialist/plugin.go diff --git a/internal/use-case/simgos-sync-plugin/unit/plugin.go b/internal/use-case/simgos-sync-plugin/new/unit/plugin.go similarity index 100% rename from internal/use-case/simgos-sync-plugin/unit/plugin.go rename to internal/use-case/simgos-sync-plugin/new/unit/plugin.go diff --git a/internal/use-case/simgos-sync-use-case/division/case.go b/internal/use-case/simgos-sync-use-case/new/division/case.go similarity index 98% rename from internal/use-case/simgos-sync-use-case/division/case.go rename to internal/use-case/simgos-sync-use-case/new/division/case.go index 62c04143..458118d6 100644 --- a/internal/use-case/simgos-sync-use-case/division/case.go +++ b/internal/use-case/simgos-sync-use-case/new/division/case.go @@ -9,7 +9,7 @@ import ( db "simrs-vx/pkg/dualtrx-helper" e "simrs-vx/internal/domain/main-entities/division" - esimgos "simrs-vx/internal/domain/simgos-entities/division" + esimgos "simrs-vx/internal/domain/simgos-entities/m-unit" esync "simrs-vx/internal/domain/sync-entities/division" elog "simrs-vx/internal/domain/sync-entities/log" ) diff --git a/internal/use-case/simgos-sync-use-case/division/helper.go b/internal/use-case/simgos-sync-use-case/new/division/helper.go similarity index 95% rename from internal/use-case/simgos-sync-use-case/division/helper.go rename to internal/use-case/simgos-sync-use-case/new/division/helper.go index e180d771..dbf69fa6 100644 --- a/internal/use-case/simgos-sync-use-case/division/helper.go +++ b/internal/use-case/simgos-sync-use-case/new/division/helper.go @@ -9,7 +9,7 @@ import ( erc "simrs-vx/internal/domain/references/common" e "simrs-vx/internal/domain/main-entities/division" - esimgos "simrs-vx/internal/domain/simgos-entities/division" + esimgos "simrs-vx/internal/domain/simgos-entities/m-unit" esync "simrs-vx/internal/domain/sync-entities/division" esyncLog "simrs-vx/internal/domain/sync-entities/log" ) diff --git a/internal/use-case/simgos-sync-use-case/division/lib.go b/internal/use-case/simgos-sync-use-case/new/division/lib.go similarity index 98% rename from internal/use-case/simgos-sync-use-case/division/lib.go rename to internal/use-case/simgos-sync-use-case/new/division/lib.go index 681be276..5f4697a5 100644 --- a/internal/use-case/simgos-sync-use-case/division/lib.go +++ b/internal/use-case/simgos-sync-use-case/new/division/lib.go @@ -10,7 +10,7 @@ import ( "gorm.io/gorm" e "simrs-vx/internal/domain/main-entities/division" - esimgos "simrs-vx/internal/domain/simgos-entities/division" + esimgos "simrs-vx/internal/domain/simgos-entities/m-unit" esync "simrs-vx/internal/domain/sync-entities/division" esynclog "simrs-vx/internal/domain/sync-entities/log" ) diff --git a/internal/use-case/simgos-sync-use-case/division/middleware-runner.go b/internal/use-case/simgos-sync-use-case/new/division/middleware-runner.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/division/middleware-runner.go rename to internal/use-case/simgos-sync-use-case/new/division/middleware-runner.go diff --git a/internal/use-case/simgos-sync-use-case/division/middleware.go b/internal/use-case/simgos-sync-use-case/new/division/middleware.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/division/middleware.go rename to internal/use-case/simgos-sync-use-case/new/division/middleware.go diff --git a/internal/use-case/simgos-sync-use-case/division/tycovar.go b/internal/use-case/simgos-sync-use-case/new/division/tycovar.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/division/tycovar.go rename to internal/use-case/simgos-sync-use-case/new/division/tycovar.go diff --git a/internal/use-case/simgos-sync-use-case/encounter/case.go b/internal/use-case/simgos-sync-use-case/new/encounter/case.go similarity index 53% rename from internal/use-case/simgos-sync-use-case/encounter/case.go rename to internal/use-case/simgos-sync-use-case/new/encounter/case.go index 50a822ed..6b4f7ab4 100644 --- a/internal/use-case/simgos-sync-use-case/encounter/case.go +++ b/internal/use-case/simgos-sync-use-case/new/encounter/case.go @@ -9,16 +9,18 @@ import ( db "simrs-vx/pkg/dualtrx-helper" e "simrs-vx/internal/domain/main-entities/encounter" - esimgos "simrs-vx/internal/domain/simgos-entities/encounter" + etp "simrs-vx/internal/domain/simgos-entities/t-pendaftaran" esync "simrs-vx/internal/domain/sync-entities/encounter" elog "simrs-vx/internal/domain/sync-entities/log" + + up "simrs-vx/internal/use-case/simgos-sync-use-case/new/patient" ) const source = "encounter" func Create(input e.Encounter) (*d.Data, error) { var ( - sgData *esimgos.TPendaftaran + sgData *etp.TPendaftaran syncLink *esync.EncounterLink err error ) @@ -44,6 +46,18 @@ func Create(input e.Encounter) (*d.Data, error) { return err } + // STEP: 3 Get MPasien + dataPatient, err := up.ReadDetailSimgosByNomrData(sgData.Nomr, &event, tx.Simgos) + if err != nil { + return err + } + + // STEP 4: Update MPasien + err = updatePatient(*dataPatient, &event, tx.Simgos) + if err != nil { + return err + } + return nil }) @@ -115,7 +129,7 @@ func Update(input e.Encounter) (*d.Data, error) { } // STEP 2: Get Simgos - simgos, err := ReadEncounterDetailData(uint16(syncLink.Simgos_Id), &event) + simgos, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) if err != nil { return nil, err } @@ -123,7 +137,7 @@ func Update(input e.Encounter) (*d.Data, error) { tx := db.NewTx() err = tx.Simgos.Transaction(func(tx *gorm.DB) error { // Step 2: Update Simgos - if err = UpdateTPendaftaranData(input, *simgos, &event, tx); err != nil { + if err = UpdateTPendaftaranData(input, *simgos, "update", &event, tx); err != nil { return err } @@ -159,7 +173,7 @@ func Delete(input e.DeleteDto) (*d.Data, error) { } // STEP 2: Get Simgos - sgData, err := ReadEncounterDetailData(uint16(syncLink.Simgos_Id), &event) + sgData, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) if err != nil { return nil, err } @@ -218,7 +232,7 @@ func CheckIn(input e.Encounter) (*d.Data, error) { } // STEP 2: Get Simgos - simgos, err := ReadEncounterDetailData(uint16(syncLink.Simgos_Id), &event) + simgos, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) if err != nil { return nil, err } @@ -226,12 +240,10 @@ func CheckIn(input e.Encounter) (*d.Data, error) { tx := db.NewTx() err = tx.Simgos.Transaction(func(tx *gorm.DB) error { // Step 2: Update Simgos - if err = UpdateCheckinData(input, *simgos, &event, tx); err != nil { + if err = UpdateTPendaftaranData(input, *simgos, "check-in", &event, tx); err != nil { return err } - // TODO: insert t_pemeriksaan_hist - return nil }) @@ -246,14 +258,14 @@ func CheckIn(input e.Encounter) (*d.Data, error) { }, nil } -func CheckOut(input e.DischargeDto) (*d.Data, error) { +func CheckOut(input e.Encounter) (*d.Data, error) { event := pl.Event{ - Feature: "CheckIn", + Feature: "CheckOut", Source: source, } // Start log - pl.SetLogInfo(&event, input, "started", "check-in") + pl.SetLogInfo(&event, input, "started", "check-out") // STEP 1: Get Link syncLink, err := ReadDetailLinkData(uint16(input.Id), &event) @@ -262,7 +274,7 @@ func CheckOut(input e.DischargeDto) (*d.Data, error) { } // STEP 2: Get Simgos - simgos, err := ReadEncounterDetailData(uint16(syncLink.Simgos_Id), &event) + simgos, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) if err != nil { return nil, err } @@ -270,12 +282,146 @@ func CheckOut(input e.DischargeDto) (*d.Data, error) { tx := db.NewTx() err = tx.Simgos.Transaction(func(tx *gorm.DB) error { // Step 2: Update Simgos - if err = UpdateCheckoutData(input, *simgos, &event, tx); err != nil { + if err = UpdateTPendaftaranData(input, *simgos, "check-out", &event, tx); err != nil { + return err + } + + return nil + }) + + pl.SetLogInfo(&event, nil, "complete") + + return &d.Data{ + Meta: d.IS{ + "source": source, + "structure": "single-data", + "status": "updated", + }, + }, nil +} + +func Cancel(input e.Encounter) (*d.Data, error) { + event := pl.Event{ + Feature: "Cancel", + Source: source, + } + + // Start log + pl.SetLogInfo(&event, input, "started", "cancel") + + // STEP 1: Get Link + syncLink, err := ReadDetailLinkData(uint16(input.Id), &event) + if err != nil { + return nil, err + } + + // STEP 2: Get Simgos + simgos, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) + if err != nil { + return nil, err + } + + tx := db.NewTx() + err = tx.Simgos.Transaction(func(tx *gorm.DB) error { + // Step 2: Update Simgos + if err = UpdateTPendaftaranData(input, *simgos, "update-status", &event, tx); err != nil { + return err + } + + return nil + }) + + pl.SetLogInfo(&event, nil, "complete") + + return &d.Data{ + Meta: d.IS{ + "source": source, + "structure": "single-data", + "status": "updated", + }, + }, nil +} + +func RequestSwitchUnit(input e.Encounter) (*d.Data, error) { + event := pl.Event{ + Feature: "RequestSwitchUnit", + Source: source, + } + + // Start log + pl.SetLogInfo(&event, input, "started", "request-switch-unit") + + // STEP 1: Get Link + syncLink, err := ReadDetailLinkData(uint16(input.Id), &event) + if err != nil { + return nil, err + } + + // STEP 2: Get Simgos + tpendaftaran, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) + if err != nil { + return nil, err + } + + tx := db.NewTx() + err = tx.Simgos.Transaction(func(tx *gorm.DB) error { + // Step 2: Update TPendaftaran + if err = UpdateTPendaftaranData(input, *tpendaftaran, "update-status", &event, tx); err != nil { + return err + } + + // Step 3: Insert TPemeriksaanHist + if _, err := CreateBulkTPemeriksaanHistData(input, *tpendaftaran, &event, tx); err != nil { + return err + } + + return nil + }) + + pl.SetLogInfo(&event, nil, "complete") + + return &d.Data{ + Meta: d.IS{ + "source": source, + "structure": "single-data", + "status": "updated", + }, + }, nil +} + +func ApproveSwitchUnit(input e.Encounter) (*d.Data, error) { + event := pl.Event{ + Feature: "RequestSwitchUnit", + Source: source, + } + + // Start log + pl.SetLogInfo(&event, input, "started", "request-switch-unit") + + // STEP 1: Get Link + syncLink, err := ReadDetailLinkData(uint16(input.Id), &event) + if err != nil { + return nil, err + } + + // STEP 2: Get Simgos + tpendaftaran, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) + if err != nil { + return nil, err + } + + tx := db.NewTx() + err = tx.Simgos.Transaction(func(tx *gorm.DB) error { + // Step 2: Update TPendaftaran + if err = UpdateTPendaftaranData(input, *tpendaftaran, "update-status", &event, tx); err != nil { + return err + } + + // Step 3: Insert TPemeriksaanHist + if _, err := CreateBulkTPemeriksaanHistData(input, *tpendaftaran, &event, tx); err != nil { return err } - // TODO: insert t_pemeriksaan_hist - return nil }) diff --git a/internal/use-case/simgos-sync-use-case/encounter/helper.go b/internal/use-case/simgos-sync-use-case/new/encounter/helper.go similarity index 69% rename from internal/use-case/simgos-sync-use-case/encounter/helper.go rename to internal/use-case/simgos-sync-use-case/new/encounter/helper.go index 4672daa5..a64a0c4e 100644 --- a/internal/use-case/simgos-sync-use-case/encounter/helper.go +++ b/internal/use-case/simgos-sync-use-case/new/encounter/helper.go @@ -10,18 +10,22 @@ import ( 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" - esimgos "simrs-vx/internal/domain/simgos-entities/encounter" + ep "simrs-vx/internal/domain/simgos-entities/m-pasien" + etph "simrs-vx/internal/domain/simgos-entities/t-pemeriksaan-hist" + etp "simrs-vx/internal/domain/simgos-entities/t-pendaftaran" 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 esimgos.TPendaftaran, err error) { +func setDataCreateTPendaftaran(input *e.Encounter) (data etp.TPendaftaran, err error) { data.Nomr = *input.Patient.Number // set pasienbaru @@ -39,7 +43,7 @@ func setDataCreateTPendaftaran(input *e.Encounter) (data esimgos.TPendaftaran, e // set no_kunjung noKunjung, err := generateNoKunjung() if err != nil { - return esimgos.TPendaftaran{}, err + return etp.TPendaftaran{}, err } data.NoKunjung = uint(noKunjung) @@ -48,7 +52,7 @@ func setDataCreateTPendaftaran(input *e.Encounter) (data esimgos.TPendaftaran, e return } -func setDataTPendaftaran(input *e.Encounter, data esimgos.TPendaftaran) { +func setDataTPendaftaran(input *e.Encounter, data etp.TPendaftaran) { data.Tglreg = input.RegisteredAt // set kddokter @@ -103,7 +107,7 @@ func setDataTPendaftaran(input *e.Encounter, data esimgos.TPendaftaran) { return } -func setDataCheckIn(input e.Encounter, data esimgos.TPendaftaran) { +func setDataCheckIn(input e.Encounter, data etp.TPendaftaran) { // set kddokter kddokter, _ := strconv.Atoi(*input.Responsible_Doctor_Code) data.Kddokter = uint(kddokter) @@ -121,22 +125,57 @@ func setDataCheckIn(input e.Encounter, data esimgos.TPendaftaran) { return } -func setDataCheckOut(input e.DischargeDto, data esimgos.TPendaftaran) { - data.Keluarpoly = &now +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(*input.Responsible_Doctor_Code), + DokterPenerima: stringtouint(*ref.Doctor_Code), + StartKonsul: &now, + }) + + // set user konsul + if emp := input.Adm_Employee; emp != nil { + if u := emp.User; u != nil { + hist[i].UserKonsul = &u.Name + } + } + + // setaktif + aktif := uint16(1) + hist[i].StAktif = &aktif + } + } + return +} + +func setDataCheckOut(input e.Encounter, data etp.TPendaftaran) { + data.Keluarpoly = input.Discharge_Date // set status setStatus(input.Discharge_Method_Code, data) if data.Status == 8 || data.Status == 3 { - data.SebabMati1 = input.DeathCause + if dc := input.DeathCause; dc != nil { + data.SebabMati1 = dc.Value + } + } - //if input.Status_Code == erc.DSCCancel { - // data.Status = 11 - //} + + setPelayanan := uint(1) + data.StPelayanan = &setPelayanan return } -func setKdrujuk(input *ere.RefTypeCode, data esimgos.TPendaftaran) { +func setDataUpdateStatus(input e.Encounter, data etp.TPendaftaran) { + if input.Status_Code == erc.DSCCancel { + data.Status = 11 + } +} + +func setKdrujuk(input *ere.RefTypeCode, data etp.TPendaftaran) { switch *input { case ere.RTCGov: data.Kdrujuk = 1 @@ -149,7 +188,7 @@ func setKdrujuk(input *ere.RefTypeCode, data esimgos.TPendaftaran) { } } -func setKdcarabayar(input ere.AllPaymentMethodCode, data esimgos.TPendaftaran) { +func setKdcarabayar(input ere.AllPaymentMethodCode, data etp.TPendaftaran) { switch input { case ere.APMCPks: data.Kdcarabayar = 12 @@ -164,7 +203,7 @@ func setKdcarabayar(input ere.AllPaymentMethodCode, data esimgos.TPendaftaran) { } } -func setStatus(code *ere.DischargeMethodCode, data esimgos.TPendaftaran) { +func setStatus(code *ere.DischargeMethodCode, data etp.TPendaftaran) { switch *code { case ere.DMCHome: data.Status = 1 @@ -211,7 +250,7 @@ func setStatus(code *ere.DischargeMethodCode, data esimgos.TPendaftaran) { } } -func mapRelative(relative *[]epr.PersonRelative, data esimgos.TPendaftaran) { +func mapRelative(relative *[]epr.PersonRelative, data etp.TPendaftaran) { if relative == nil || len(*relative) == 0 { return } @@ -293,3 +332,37 @@ func generateNoKunjung() (int, error) { return lastNumber + 1, nil } + +func stringtouint(v string) *uint { + u, _ := strconv.Atoi(v) + point := uint(u) + return &point +} + +func updatePatient(patient ep.MPasien, event *pl.Event, dbx ...*gorm.DB) error { + pl.SetLogInfo(event, nil, "started", "DBUpdate") + + var tx *gorm.DB + if len(dbx) > 0 { + tx = dbx[0] + } else { + tx = dg.IS["simrs"] + } + + if err := tx.Model(&ep.MPasien{}). + Where("\"nomr\" = ?", patient.Nomr). + Updates(map[string]interface{}{ + "kdcarabayar": patient.Kdcarabayar, + }).Error; err != nil { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "update-fail", + Detail: "Failed to update patient", + Raw: err, + } + return pl.SetLogError(event, patient) + } + + pl.SetLogInfo(event, patient, "complete") + return nil +} diff --git a/internal/use-case/simgos-sync-use-case/encounter/lib.go b/internal/use-case/simgos-sync-use-case/new/encounter/lib.go similarity index 72% rename from internal/use-case/simgos-sync-use-case/encounter/lib.go rename to internal/use-case/simgos-sync-use-case/new/encounter/lib.go index f4c0023f..064131e5 100644 --- a/internal/use-case/simgos-sync-use-case/encounter/lib.go +++ b/internal/use-case/simgos-sync-use-case/new/encounter/lib.go @@ -1,6 +1,7 @@ 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" @@ -10,14 +11,14 @@ import ( "gorm.io/gorm" e "simrs-vx/internal/domain/main-entities/encounter" - esimgos "simrs-vx/internal/domain/simgos-entities/encounter" + etp "simrs-vx/internal/domain/simgos-entities/t-pendaftaran" esync "simrs-vx/internal/domain/sync-entities/encounter" esynclog "simrs-vx/internal/domain/sync-entities/log" ) var now = time.Now() -func CreateTPendaftaranData(input e.Encounter, event *pl.Event, dbx ...*gorm.DB) (*esimgos.TPendaftaran, error) { +func CreateTPendaftaranData(input e.Encounter, event *pl.Event, dbx ...*gorm.DB) (*etp.TPendaftaran, error) { pl.SetLogInfo(event, nil, "started", "DBCreate") data, err := setDataCreateTPendaftaran(&input) @@ -40,9 +41,9 @@ func CreateTPendaftaranData(input e.Encounter, event *pl.Event, dbx ...*gorm.DB) return &data, nil } -func ReadEncounterDetailData(simgosId uint16, event *pl.Event) (*esimgos.TPendaftaran, error) { +func ReadTPendaftaranDetailData(simgosId uint16, event *pl.Event) (*etp.TPendaftaran, error) { pl.SetLogInfo(event, simgosId, "started", "DBReadDetail") - data := esimgos.TPendaftaran{} + data := etp.TPendaftaran{} var tx = dg.IS["simrs"] @@ -58,10 +59,19 @@ func ReadEncounterDetailData(simgosId uint16, event *pl.Event) (*esimgos.TPendaf return &data, nil } -func UpdateTPendaftaranData(input e.Encounter, data esimgos.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) error { +func UpdateTPendaftaranData(input e.Encounter, data etp.TPendaftaran, method string, event *pl.Event, dbx ...*gorm.DB) error { pl.SetLogInfo(event, input, "started", "DBUpdate") - setDataTPendaftaran(&input, data) + switch method { + case "update": + setDataTPendaftaran(&input, data) + case "check-in": + setDataCheckIn(input, data) + case "check-out": + setDataCheckOut(input, data) + case "update-status": + setDataUpdateStatus(input, data) + } var tx *gorm.DB if len(dbx) > 0 { @@ -84,7 +94,7 @@ func UpdateTPendaftaranData(input e.Encounter, data esimgos.TPendaftaran, event return nil } -func HardDeleteTPendaftaranData(data *esimgos.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) error { +func HardDeleteTPendaftaranData(data *etp.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) error { pl.SetLogInfo(event, data, "started", "DBDelete") var tx *gorm.DB @@ -109,59 +119,6 @@ func HardDeleteTPendaftaranData(data *esimgos.TPendaftaran, event *pl.Event, dbx return nil } -func UpdateCheckinData(input e.Encounter, data esimgos.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) error { - pl.SetLogInfo(event, input, "started", "DBUpdate") - - setDataCheckIn(input, data) - - 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) - } - - pl.SetLogInfo(event, nil, "complete") - return nil -} - -func UpdateCheckoutData(input e.DischargeDto, data esimgos.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) error { - pl.SetLogInfo(event, input, "started", "DBUpdate") - - setDataCheckOut(input, data) - - 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) - } - - pl.SetLogInfo(event, nil, "complete") - return nil -} - -func CreateTPemeriksaanHist func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*esync.EncounterLink, error) { pl.SetLogInfo(event, nil, "started", "DBCreate") data := setDataSimxLink(simxId, simgosId) @@ -241,3 +198,23 @@ func CreateLogData(input esynclog.SimxLogDto, event *pl.Event, dbx ...*gorm.DB) pl.SetLogInfo(event, nil, "complete") return nil } + +func CreateBulkTPemeriksaanHistData(input e.Encounter, data etp.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) (hist []etph.TPemeriksaanHist, err error) { + pl.SetLogInfo(event, nil, "started", "DBCreate") + + hist = setDataRequestSwitchUnit(input, data) + + var tx *gorm.DB + if len(dbx) > 0 { + tx = dbx[0] + } else { + 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 +} diff --git a/internal/use-case/simgos-sync-use-case/encounter/middleware-runner.go b/internal/use-case/simgos-sync-use-case/new/encounter/middleware-runner.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/encounter/middleware-runner.go rename to internal/use-case/simgos-sync-use-case/new/encounter/middleware-runner.go diff --git a/internal/use-case/simgos-sync-use-case/encounter/middleware.go b/internal/use-case/simgos-sync-use-case/new/encounter/middleware.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/encounter/middleware.go rename to internal/use-case/simgos-sync-use-case/new/encounter/middleware.go diff --git a/internal/use-case/simgos-sync-use-case/encounter/tycovar.go b/internal/use-case/simgos-sync-use-case/new/encounter/tycovar.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/encounter/tycovar.go rename to internal/use-case/simgos-sync-use-case/new/encounter/tycovar.go diff --git a/internal/use-case/simgos-sync-use-case/installation/case.go b/internal/use-case/simgos-sync-use-case/new/installation/case.go similarity index 98% rename from internal/use-case/simgos-sync-use-case/installation/case.go rename to internal/use-case/simgos-sync-use-case/new/installation/case.go index edbf709d..4d89b5ae 100644 --- a/internal/use-case/simgos-sync-use-case/installation/case.go +++ b/internal/use-case/simgos-sync-use-case/new/installation/case.go @@ -10,7 +10,7 @@ import ( db "simrs-vx/pkg/dualtrx-helper" e "simrs-vx/internal/domain/main-entities/installation" - esimgos "simrs-vx/internal/domain/simgos-entities/installation" + esimgos "simrs-vx/internal/domain/simgos-entities/m-instalasi" esync "simrs-vx/internal/domain/sync-entities/installation" elog "simrs-vx/internal/domain/sync-entities/log" ) diff --git a/internal/use-case/simgos-sync-use-case/installation/helper.go b/internal/use-case/simgos-sync-use-case/new/installation/helper.go similarity index 95% rename from internal/use-case/simgos-sync-use-case/installation/helper.go rename to internal/use-case/simgos-sync-use-case/new/installation/helper.go index aa33ef4b..1bb722dd 100644 --- a/internal/use-case/simgos-sync-use-case/installation/helper.go +++ b/internal/use-case/simgos-sync-use-case/new/installation/helper.go @@ -8,7 +8,7 @@ import ( "encoding/json" e "simrs-vx/internal/domain/main-entities/installation" erc "simrs-vx/internal/domain/references/common" - esimgos "simrs-vx/internal/domain/simgos-entities/installation" + esimgos "simrs-vx/internal/domain/simgos-entities/m-instalasi" esync "simrs-vx/internal/domain/sync-entities/installation" esyncLog "simrs-vx/internal/domain/sync-entities/log" ) diff --git a/internal/use-case/simgos-sync-use-case/installation/lib.go b/internal/use-case/simgos-sync-use-case/new/installation/lib.go similarity index 98% rename from internal/use-case/simgos-sync-use-case/installation/lib.go rename to internal/use-case/simgos-sync-use-case/new/installation/lib.go index 9b057ece..a8d074fa 100644 --- a/internal/use-case/simgos-sync-use-case/installation/lib.go +++ b/internal/use-case/simgos-sync-use-case/new/installation/lib.go @@ -10,7 +10,7 @@ import ( "gorm.io/gorm" e "simrs-vx/internal/domain/main-entities/installation" - esimgos "simrs-vx/internal/domain/simgos-entities/installation" + esimgos "simrs-vx/internal/domain/simgos-entities/m-instalasi" esync "simrs-vx/internal/domain/sync-entities/installation" esynclog "simrs-vx/internal/domain/sync-entities/log" ) diff --git a/internal/use-case/simgos-sync-use-case/installation/middleware-runner.go b/internal/use-case/simgos-sync-use-case/new/installation/middleware-runner.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/installation/middleware-runner.go rename to internal/use-case/simgos-sync-use-case/new/installation/middleware-runner.go diff --git a/internal/use-case/simgos-sync-use-case/installation/middleware.go b/internal/use-case/simgos-sync-use-case/new/installation/middleware.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/installation/middleware.go rename to internal/use-case/simgos-sync-use-case/new/installation/middleware.go diff --git a/internal/use-case/simgos-sync-use-case/installation/tycovar.go b/internal/use-case/simgos-sync-use-case/new/installation/tycovar.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/installation/tycovar.go rename to internal/use-case/simgos-sync-use-case/new/installation/tycovar.go diff --git a/internal/use-case/simgos-sync-use-case/patient/case.go b/internal/use-case/simgos-sync-use-case/new/patient/case.go similarity index 91% rename from internal/use-case/simgos-sync-use-case/patient/case.go rename to internal/use-case/simgos-sync-use-case/new/patient/case.go index 104e79e9..a147524c 100644 --- a/internal/use-case/simgos-sync-use-case/patient/case.go +++ b/internal/use-case/simgos-sync-use-case/new/patient/case.go @@ -9,7 +9,7 @@ import ( db "simrs-vx/pkg/dualtrx-helper" e "simrs-vx/internal/domain/main-entities/patient" - esimgos "simrs-vx/internal/domain/simgos-entities/patient" + esimgos "simrs-vx/internal/domain/simgos-entities/m-pasien" elog "simrs-vx/internal/domain/sync-entities/log" esync "simrs-vx/internal/domain/sync-entities/patient" ) @@ -109,13 +109,13 @@ func Update(input e.Patient) (*d.Data, error) { pl.SetLogInfo(&event, input, "started", "update") // STEP 1: Get Link - syncLink, err := ReadDetailLinkData(uint16(input.Id), &event) + syncLink, err := ReadDetailLinkData(input.Id, &event) if err != nil { return nil, err } // STEP 2: Get Simgos - patientData, err := ReadDetailSimgosData(uint16(syncLink.Simgos_Id), &event) + patientData, err := ReadDetailSimgosData(syncLink.Simgos_Id, &event) if err != nil { return nil, err } @@ -130,6 +130,10 @@ func Update(input e.Patient) (*d.Data, error) { return nil }) + if err != nil { + return nil, err + } + pl.SetLogInfo(&event, nil, "complete") return &d.Data{ @@ -153,13 +157,13 @@ func Delete(input e.DeleteDto) (*d.Data, error) { pl.SetLogInfo(&event, input, "started", "delete") // STEP 1: Get Link - syncLink, err := ReadDetailLinkData(uint16(input.Id), &event) + syncLink, err := ReadDetailLinkData(input.Id, &event) if err != nil { return nil, err } // STEP 2: Get Simgos - sgData, err := ReadDetailSimgosData(uint16(syncLink.Simgos_Id), &event) + sgData, err := ReadDetailSimgosData(syncLink.Simgos_Id, &event) if err != nil { return nil, err } diff --git a/internal/use-case/simgos-sync-use-case/patient/helper.go b/internal/use-case/simgos-sync-use-case/new/patient/helper.go similarity index 96% rename from internal/use-case/simgos-sync-use-case/patient/helper.go rename to internal/use-case/simgos-sync-use-case/new/patient/helper.go index 8ab4c326..14f516d5 100644 --- a/internal/use-case/simgos-sync-use-case/patient/helper.go +++ b/internal/use-case/simgos-sync-use-case/new/patient/helper.go @@ -16,7 +16,7 @@ import ( 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" - esimgos "simrs-vx/internal/domain/simgos-entities/patient" + esimgos "simrs-vx/internal/domain/simgos-entities/m-pasien" esyncLog "simrs-vx/internal/domain/sync-entities/log" esync "simrs-vx/internal/domain/sync-entities/patient" @@ -37,13 +37,12 @@ func setDataSimgos(input *e.Patient) (data esimgos.MPasien) { mapContact(input.Person.Contacts, &data) } - if input.Person != nil && input.Person.Relatives != nil { + data.PenanggungjawabHubungan = "DIRI SENDIRI" + data.PenanggungjawabNama = input.Person.Name + data.PenanggungjawabPhone = data.Notelp + data.PenanggungjawabAlamat = data.Alamat + if input.Person != nil || input.Person.Relatives != nil { mapRelative(input.Person.Relatives, &data) - } else { - data.PenanggungjawabHubungan = "DIRI SENDIRI" - data.PenanggungjawabNama = input.Person.Name - data.PenanggungjawabPhone = data.Notelp - data.PenanggungjawabAlamat = data.Alamat } data.Nip = input.RegisteredBy_User_Name diff --git a/internal/use-case/simgos-sync-use-case/patient/lib.go b/internal/use-case/simgos-sync-use-case/new/patient/lib.go similarity index 84% rename from internal/use-case/simgos-sync-use-case/patient/lib.go rename to internal/use-case/simgos-sync-use-case/new/patient/lib.go index 6d50f877..edcaf036 100644 --- a/internal/use-case/simgos-sync-use-case/patient/lib.go +++ b/internal/use-case/simgos-sync-use-case/new/patient/lib.go @@ -10,7 +10,7 @@ import ( "gorm.io/gorm" e "simrs-vx/internal/domain/main-entities/patient" - esimgos "simrs-vx/internal/domain/simgos-entities/patient" + esimgos "simrs-vx/internal/domain/simgos-entities/m-pasien" esynclog "simrs-vx/internal/domain/sync-entities/log" esync "simrs-vx/internal/domain/sync-entities/patient" ) @@ -37,7 +37,7 @@ func CreateSimgosData(input e.Patient, event *pl.Event, dbx ...*gorm.DB) (*esimg return &data, nil } -func ReadDetailSimgosData(simgosId uint16, event *pl.Event) (*esimgos.MPasien, error) { +func ReadDetailSimgosData(simgosId uint, event *pl.Event) (*esimgos.MPasien, error) { pl.SetLogInfo(event, simgosId, "started", "DBReadDetail") data := esimgos.MPasien{} @@ -55,6 +55,29 @@ func ReadDetailSimgosData(simgosId uint16, event *pl.Event) (*esimgos.MPasien, e return &data, nil } +func ReadDetailSimgosByNomrData(nomr string, event *pl.Event, dbx ...*gorm.DB) (*esimgos.MPasien, error) { + pl.SetLogInfo(event, nomr, "started", "DBReadDetail") + data := esimgos.MPasien{} + + var tx *gorm.DB + if len(dbx) > 0 { + tx = dbx[0] + } else { + tx = dg.IS["simrs"] + } + + if err := tx. + Where("\"nomr\" = ?", nomr). + First(&data).Error; err != nil { + if processedErr := pu.HandleReadError(err, event, source, nomr, data); processedErr != nil { + return nil, processedErr + } + } + + pl.SetLogInfo(event, nil, "complete") + return &data, nil +} + func UpdateSimgosData(input e.Patient, patientData *esimgos.MPasien, event *pl.Event, dbx ...*gorm.DB) error { pl.SetLogInfo(event, input, "started", "DBUpdate") @@ -127,7 +150,7 @@ func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*e return &data, nil } -func ReadDetailLinkData(simxId uint16, event *pl.Event) (*esync.PatientLink, error) { +func ReadDetailLinkData(simxId uint, event *pl.Event) (*esync.PatientLink, error) { pl.SetLogInfo(event, simxId, "started", "DBReadDetail") data := esync.PatientLink{} diff --git a/internal/use-case/simgos-sync-use-case/patient/middleware-runner.go b/internal/use-case/simgos-sync-use-case/new/patient/middleware-runner.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/patient/middleware-runner.go rename to internal/use-case/simgos-sync-use-case/new/patient/middleware-runner.go diff --git a/internal/use-case/simgos-sync-use-case/patient/middleware.go b/internal/use-case/simgos-sync-use-case/new/patient/middleware.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/patient/middleware.go rename to internal/use-case/simgos-sync-use-case/new/patient/middleware.go diff --git a/internal/use-case/simgos-sync-use-case/patient/tycovar.go b/internal/use-case/simgos-sync-use-case/new/patient/tycovar.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/patient/tycovar.go rename to internal/use-case/simgos-sync-use-case/new/patient/tycovar.go diff --git a/internal/use-case/simgos-sync-use-case/specialist/case.go b/internal/use-case/simgos-sync-use-case/new/specialist/case.go similarity index 98% rename from internal/use-case/simgos-sync-use-case/specialist/case.go rename to internal/use-case/simgos-sync-use-case/new/specialist/case.go index cf76771c..dd88981d 100644 --- a/internal/use-case/simgos-sync-use-case/specialist/case.go +++ b/internal/use-case/simgos-sync-use-case/new/specialist/case.go @@ -9,7 +9,7 @@ import ( db "simrs-vx/pkg/dualtrx-helper" e "simrs-vx/internal/domain/main-entities/specialist" - esimgos "simrs-vx/internal/domain/simgos-entities/specialist" + esimgos "simrs-vx/internal/domain/simgos-entities/m-polihfis" elog "simrs-vx/internal/domain/sync-entities/log" esync "simrs-vx/internal/domain/sync-entities/specialist" ) diff --git a/internal/use-case/simgos-sync-use-case/specialist/helper.go b/internal/use-case/simgos-sync-use-case/new/specialist/helper.go similarity index 95% rename from internal/use-case/simgos-sync-use-case/specialist/helper.go rename to internal/use-case/simgos-sync-use-case/new/specialist/helper.go index 95839354..4a155496 100644 --- a/internal/use-case/simgos-sync-use-case/specialist/helper.go +++ b/internal/use-case/simgos-sync-use-case/new/specialist/helper.go @@ -9,7 +9,7 @@ import ( erc "simrs-vx/internal/domain/references/common" e "simrs-vx/internal/domain/main-entities/specialist" - esimgos "simrs-vx/internal/domain/simgos-entities/specialist" + esimgos "simrs-vx/internal/domain/simgos-entities/m-polihfis" esyncLog "simrs-vx/internal/domain/sync-entities/log" esync "simrs-vx/internal/domain/sync-entities/specialist" ) diff --git a/internal/use-case/simgos-sync-use-case/specialist/lib.go b/internal/use-case/simgos-sync-use-case/new/specialist/lib.go similarity index 98% rename from internal/use-case/simgos-sync-use-case/specialist/lib.go rename to internal/use-case/simgos-sync-use-case/new/specialist/lib.go index c7123f0b..c796af73 100644 --- a/internal/use-case/simgos-sync-use-case/specialist/lib.go +++ b/internal/use-case/simgos-sync-use-case/new/specialist/lib.go @@ -10,7 +10,7 @@ import ( "gorm.io/gorm" e "simrs-vx/internal/domain/main-entities/specialist" - esimgos "simrs-vx/internal/domain/simgos-entities/specialist" + esimgos "simrs-vx/internal/domain/simgos-entities/m-polihfis" esynclog "simrs-vx/internal/domain/sync-entities/log" esync "simrs-vx/internal/domain/sync-entities/specialist" ) diff --git a/internal/use-case/simgos-sync-use-case/specialist/middleware-runner.go b/internal/use-case/simgos-sync-use-case/new/specialist/middleware-runner.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/specialist/middleware-runner.go rename to internal/use-case/simgos-sync-use-case/new/specialist/middleware-runner.go diff --git a/internal/use-case/simgos-sync-use-case/specialist/middleware.go b/internal/use-case/simgos-sync-use-case/new/specialist/middleware.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/specialist/middleware.go rename to internal/use-case/simgos-sync-use-case/new/specialist/middleware.go diff --git a/internal/use-case/simgos-sync-use-case/specialist/tycovar.go b/internal/use-case/simgos-sync-use-case/new/specialist/tycovar.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/specialist/tycovar.go rename to internal/use-case/simgos-sync-use-case/new/specialist/tycovar.go diff --git a/internal/use-case/simgos-sync-use-case/subspecialist/case.go b/internal/use-case/simgos-sync-use-case/new/subspecialist/case.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/subspecialist/case.go rename to internal/use-case/simgos-sync-use-case/new/subspecialist/case.go diff --git a/internal/use-case/simgos-sync-use-case/subspecialist/helper.go b/internal/use-case/simgos-sync-use-case/new/subspecialist/helper.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/subspecialist/helper.go rename to internal/use-case/simgos-sync-use-case/new/subspecialist/helper.go diff --git a/internal/use-case/simgos-sync-use-case/subspecialist/lib.go b/internal/use-case/simgos-sync-use-case/new/subspecialist/lib.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/subspecialist/lib.go rename to internal/use-case/simgos-sync-use-case/new/subspecialist/lib.go diff --git a/internal/use-case/simgos-sync-use-case/subspecialist/middleware-runner.go b/internal/use-case/simgos-sync-use-case/new/subspecialist/middleware-runner.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/subspecialist/middleware-runner.go rename to internal/use-case/simgos-sync-use-case/new/subspecialist/middleware-runner.go diff --git a/internal/use-case/simgos-sync-use-case/subspecialist/middleware.go b/internal/use-case/simgos-sync-use-case/new/subspecialist/middleware.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/subspecialist/middleware.go rename to internal/use-case/simgos-sync-use-case/new/subspecialist/middleware.go diff --git a/internal/use-case/simgos-sync-use-case/subspecialist/tycovar.go b/internal/use-case/simgos-sync-use-case/new/subspecialist/tycovar.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/subspecialist/tycovar.go rename to internal/use-case/simgos-sync-use-case/new/subspecialist/tycovar.go diff --git a/internal/use-case/simgos-sync-use-case/unit/case.go b/internal/use-case/simgos-sync-use-case/new/unit/case.go similarity index 97% rename from internal/use-case/simgos-sync-use-case/unit/case.go rename to internal/use-case/simgos-sync-use-case/new/unit/case.go index e17a8b22..3450a4cb 100644 --- a/internal/use-case/simgos-sync-use-case/unit/case.go +++ b/internal/use-case/simgos-sync-use-case/new/unit/case.go @@ -9,7 +9,7 @@ import ( db "simrs-vx/pkg/dualtrx-helper" e "simrs-vx/internal/domain/main-entities/unit" - esimgos "simrs-vx/internal/domain/simgos-entities/unit" + esimgos "simrs-vx/internal/domain/simgos-entities/m-poly" elog "simrs-vx/internal/domain/sync-entities/log" esync "simrs-vx/internal/domain/sync-entities/unit" ) @@ -18,7 +18,7 @@ const source = "unit" func Create(input e.CreateDto) (*d.Data, error) { var ( - sgData *esimgos.MPloy + sgData *esimgos.MPoly syncLink *esync.UnitLink err error ) diff --git a/internal/use-case/simgos-sync-use-case/unit/helper.go b/internal/use-case/simgos-sync-use-case/new/unit/helper.go similarity index 94% rename from internal/use-case/simgos-sync-use-case/unit/helper.go rename to internal/use-case/simgos-sync-use-case/new/unit/helper.go index a499958c..667bb7f0 100644 --- a/internal/use-case/simgos-sync-use-case/unit/helper.go +++ b/internal/use-case/simgos-sync-use-case/new/unit/helper.go @@ -10,12 +10,12 @@ import ( e "simrs-vx/internal/domain/main-entities/unit" - esimgos "simrs-vx/internal/domain/simgos-entities/unit" + esimgos "simrs-vx/internal/domain/simgos-entities/m-poly" esyncLog "simrs-vx/internal/domain/sync-entities/log" esync "simrs-vx/internal/domain/sync-entities/unit" ) -func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T) (data esimgos.MPloy) { +func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T) (data esimgos.MPoly) { var inputSrc *e.CreateDto if inputT, ok := any(input).(*e.CreateDto); ok { inputSrc = inputT diff --git a/internal/use-case/simgos-sync-use-case/unit/lib.go b/internal/use-case/simgos-sync-use-case/new/unit/lib.go similarity index 95% rename from internal/use-case/simgos-sync-use-case/unit/lib.go rename to internal/use-case/simgos-sync-use-case/new/unit/lib.go index 720bd413..8712ab03 100644 --- a/internal/use-case/simgos-sync-use-case/unit/lib.go +++ b/internal/use-case/simgos-sync-use-case/new/unit/lib.go @@ -10,14 +10,14 @@ import ( "gorm.io/gorm" e "simrs-vx/internal/domain/main-entities/unit" - esimgos "simrs-vx/internal/domain/simgos-entities/unit" + esimgos "simrs-vx/internal/domain/simgos-entities/m-poly" esynclog "simrs-vx/internal/domain/sync-entities/log" esync "simrs-vx/internal/domain/sync-entities/unit" ) var now = time.Now() -func CreateSimgosData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*esimgos.MPloy, error) { +func CreateSimgosData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*esimgos.MPoly, error) { pl.SetLogInfo(event, nil, "started", "DBCreate") data := setDataSimgos(&input) @@ -37,9 +37,9 @@ func CreateSimgosData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*esi return &data, nil } -func ReadDetailSimgosData(simgosId uint16, event *pl.Event) (*esimgos.MPloy, error) { +func ReadDetailSimgosData(simgosId uint16, event *pl.Event) (*esimgos.MPoly, error) { pl.SetLogInfo(event, simgosId, "started", "DBReadDetail") - data := esimgos.MPloy{} + data := esimgos.MPoly{} var tx = dg.IS["simrs"] @@ -82,7 +82,7 @@ func UpdateSimgosData(input e.UpdateDto, dataSimgos *esync.UnitLink, event *pl.E return nil } -func HardDeleteSimgosData(data *esimgos.MPloy, event *pl.Event, dbx ...*gorm.DB) error { +func HardDeleteSimgosData(data *esimgos.MPoly, event *pl.Event, dbx ...*gorm.DB) error { pl.SetLogInfo(event, data, "started", "DBDelete") var tx *gorm.DB diff --git a/internal/use-case/simgos-sync-use-case/unit/middleware-runner.go b/internal/use-case/simgos-sync-use-case/new/unit/middleware-runner.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/unit/middleware-runner.go rename to internal/use-case/simgos-sync-use-case/new/unit/middleware-runner.go diff --git a/internal/use-case/simgos-sync-use-case/unit/middleware.go b/internal/use-case/simgos-sync-use-case/new/unit/middleware.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/unit/middleware.go rename to internal/use-case/simgos-sync-use-case/new/unit/middleware.go diff --git a/internal/use-case/simgos-sync-use-case/unit/tycovar.go b/internal/use-case/simgos-sync-use-case/new/unit/tycovar.go similarity index 100% rename from internal/use-case/simgos-sync-use-case/unit/tycovar.go rename to internal/use-case/simgos-sync-use-case/new/unit/tycovar.go