From 04312afceeaeb76bdd8c26d550461ffd6630dd85 Mon Sep 17 00:00:00 2001 From: vanilia Date: Tue, 25 Nov 2025 19:47:47 +0700 Subject: [PATCH] testing --- .../domain/main-entities/encounter/dto.go | 22 ++--- .../domain/references/encounter/encounter.go | 8 +- .../simgos-entities/m-polihfis/entity.go | 2 +- .../domain/simgos-entities/m-poly/entity.go | 2 +- .../simgos-entities/t-pendaftaran/entity.go | 1 - .../main-handler/encounter/handler.go | 14 +-- .../new/encounter/handler.go | 2 +- .../use-case/main-use-case/doctor/helper.go | 4 +- .../main-use-case/edu-assessment/case.go | 2 +- .../use-case/main-use-case/encounter/case.go | 21 ++-- .../main-use-case/encounter/helper.go | 3 +- .../main-use-case/therapy-protocol/case.go | 2 +- internal/use-case/main-use-case/unit/case.go | 16 +++- .../new/encounter/case.go | 54 +++++------ .../new/encounter/helper.go | 95 ++++++++++++------- .../simgos-sync-use-case/new/encounter/lib.go | 8 +- .../new/patient/helper.go | 15 +-- .../new/specialist/helper.go | 2 +- .../new/specialist/lib.go | 9 +- .../simgos-sync-use-case/new/unit/helper.go | 3 + 20 files changed, 165 insertions(+), 120 deletions(-) diff --git a/internal/domain/main-entities/encounter/dto.go b/internal/domain/main-entities/encounter/dto.go index 849a5834..d4eeda3f 100644 --- a/internal/domain/main-entities/encounter/dto.go +++ b/internal/domain/main-entities/encounter/dto.go @@ -65,15 +65,15 @@ type CreateDto struct { } type TRujukan struct { - NoSep string `json:"noSep"` + NoSep string `json:"noSep"` // Surat Eligibilitas Peserta TglRujukan string `json:"tglRujukan"` - PpkDirujuk string `json:"ppkDirujuk"` - JnsPelayanan string `json:"jnsPelayanan"` + PpkDirujuk string `json:"ppkDirujuk"` // PPK (Provider Pelayanan Kesehatan) -> kode RS tujuan + JnsPelayanan string `json:"jnsPelayanan"` // Jenis pelayanan yang dimintakan; 1 = RawatInap; 2 = RawatJalan Catatan string `json:"catatan"` - DiagRujukan string `json:"diagRujukan"` - TipeRujukan string `json:"tipeRujukan"` - PoliRujukan string `json:"poliRujukan"` - User string `json:"user"` + DiagRujukan string `json:"diagRujukan"` // Kode Diagnosa + TipeRujukan string `json:"tipeRujukan"` // 0 = Rujukan Penuh; 1 = Rujukan Partial (hanya untuk tindakan tertentu); 2 = Balik (dikembalikan ke faskes asal) + PoliRujukan string `json:"poliRujukan"` // Kode Poli Tujuan + User string `json:"user"` // user yang membuat rujukan } type ReadListDto struct { @@ -105,24 +105,24 @@ type FilterDto struct { } type ReadDetailDto struct { - Id uint16 `json:"id"` + Id uint `json:"id"` Includes string `json:"includes"` } type UpdateDto struct { - Id uint16 `json:"id"` + Id uint `json:"id"` CreateDto } type UpdateStatusDto struct { - Id uint16 `json:"id"` + Id uint `json:"id"` StatusCode erc.DataStatusCode `json:"status_code"` pa.AuthInfo } type DeleteDto struct { - Id uint16 `json:"id"` + Id uint `json:"id"` pa.AuthInfo } diff --git a/internal/domain/references/encounter/encounter.go b/internal/domain/references/encounter/encounter.go index ca600246..a1fc3b31 100644 --- a/internal/domain/references/encounter/encounter.go +++ b/internal/domain/references/encounter/encounter.go @@ -95,10 +95,10 @@ const ( RTCPrivate RefTypeCode = "private" // Swasta RTCBpjs RefTypeCode = "bpjs" // BPJS - APMCJkn AllPaymentMethodCode = "jkn" // JKN - APMCJkmm AllPaymentMethodCode = "jkmm" // JKMM - APMCSpm AllPaymentMethodCode = "spm" // SPM - APMCPks AllPaymentMethodCode = "pks" // PKS + APMCJkn AllPaymentMethodCode = "jkn" // JKN -> Jaminan Kesehatan Nasional -> BPJS Kesehatan + APMCJkmm AllPaymentMethodCode = "jkmm" // JKMM -> Jaminan Kesehatan Masyarakat Miskin -> Dibiayai oleh APBD daerah + APMCSpm AllPaymentMethodCode = "spm" // SPM -> Surat Pernyataan Miskin + APMCPks AllPaymentMethodCode = "pks" // PKS -> Perjanjian Kerjasama -> Pembayaran melalui instansi atau perusahaan yang memiliki kontrak dengan rumah sakit APMCUmum AllPaymentMethodCode = "umum" SRTCInternal SEPRefTypeCode = "internal" // Rujukan Internal diff --git a/internal/domain/simgos-entities/m-polihfis/entity.go b/internal/domain/simgos-entities/m-polihfis/entity.go index b9eb7b56..8bed236d 100644 --- a/internal/domain/simgos-entities/m-polihfis/entity.go +++ b/internal/domain/simgos-entities/m-polihfis/entity.go @@ -1,4 +1,4 @@ -package division +package m_polihfis type MPolihfis struct { Id uint `json:"id" gorm:"primaryKey;autoIncrement;column:id"` diff --git a/internal/domain/simgos-entities/m-poly/entity.go b/internal/domain/simgos-entities/m-poly/entity.go index 52fe20eb..aff4bc1e 100644 --- a/internal/domain/simgos-entities/m-poly/entity.go +++ b/internal/domain/simgos-entities/m-poly/entity.go @@ -1,7 +1,7 @@ package m_poly type MPoly struct { - Kode uint `json:"kode" gorm:"primaryKey;autoIncrement;column:kode"` + Kode uint `json:"kode" gorm:"primaryKey;column:kode"` Nama string `json:"nama" gorm:"column:nama"` Jenispoly uint `json:"jenispoly" gorm:"column:jenispoly"` } diff --git a/internal/domain/simgos-entities/t-pendaftaran/entity.go b/internal/domain/simgos-entities/t-pendaftaran/entity.go index 682aabeb..08222653 100644 --- a/internal/domain/simgos-entities/t-pendaftaran/entity.go +++ b/internal/domain/simgos-entities/t-pendaftaran/entity.go @@ -82,7 +82,6 @@ type TPendaftaran struct { DokterNameHfis *string `json:"dokter_name_hfis" gorm:"column:dokter_name_hfis"` DokterIdHfis *string `json:"dokter_id_hfis" gorm:"column:dokter_id_hfis"` StatusBridging *string `json:"status_bridging" gorm:"column:status_bridging"` - NoSpri *string `json:"no_spri" gorm:"column:no_spri"` } func (TPendaftaran) TableName() string { diff --git a/internal/interface/main-handler/encounter/handler.go b/internal/interface/main-handler/encounter/handler.go index 0c87b7b2..688d6904 100644 --- a/internal/interface/main-handler/encounter/handler.go +++ b/internal/interface/main-handler/encounter/handler.go @@ -64,7 +64,7 @@ func (obj myBase) GetDetail(w http.ResponseWriter, r *http.Request) { } dto := e.ReadDetailDto{} sf.UrlQueryParam(&dto, *r.URL) - dto.Id = uint16(id) + dto.Id = uint(id) res, err := u.ReadDetail(dto) rw.DataResponse(w, res, err) } @@ -84,7 +84,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) dto.AuthInfo = *authInfo res, err := u.Update(dto) @@ -103,7 +103,7 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) { } dto := e.DeleteDto{} - dto.Id = uint16(id) + dto.Id = uint(id) dto.AuthInfo = *authInfo res, err := u.Delete(dto) @@ -175,7 +175,7 @@ func (obj myBase) Process(w http.ResponseWriter, r *http.Request) { } dto := e.UpdateStatusDto{ - Id: uint16(id), + Id: uint(id), StatusCode: erc.DSCProcess, } @@ -195,7 +195,7 @@ func (obj myBase) Cancel(w http.ResponseWriter, r *http.Request) { } dto := e.UpdateStatusDto{ - Id: uint16(id), + Id: uint(id), StatusCode: erc.DSCCancel, } @@ -211,7 +211,7 @@ func (obj myBase) Reject(w http.ResponseWriter, r *http.Request) { } dto := e.UpdateStatusDto{ - Id: uint16(id), + Id: uint(id), StatusCode: erc.DSCRejected, } @@ -226,7 +226,7 @@ func (obj myBase) Skip(w http.ResponseWriter, r *http.Request) { } dto := e.UpdateStatusDto{ - Id: uint16(id), + Id: uint(id), StatusCode: erc.DSCSkipped, } diff --git a/internal/interface/simgos-sync-handler/new/encounter/handler.go b/internal/interface/simgos-sync-handler/new/encounter/handler.go index e6b0515a..bec44cd4 100644 --- a/internal/interface/simgos-sync-handler/new/encounter/handler.go +++ b/internal/interface/simgos-sync-handler/new/encounter/handler.go @@ -51,7 +51,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/doctor/helper.go b/internal/use-case/main-use-case/doctor/helper.go index 344d1c0e..9ddc2027 100644 --- a/internal/use-case/main-use-case/doctor/helper.go +++ b/internal/use-case/main-use-case/doctor/helper.go @@ -22,6 +22,6 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Doctor) { data.IHS_Number = inputSrc.IHS_Number data.SIP_Number = inputSrc.SIP_Number data.Unit_Code = inputSrc.Unit_Code - data.Specialist_Code = inputSrc.Code - data.Subspecialist_Code = inputSrc.Code + data.Specialist_Code = inputSrc.Specialist_Code + data.Subspecialist_Code = inputSrc.Subspecialist_Code } diff --git a/internal/use-case/main-use-case/edu-assessment/case.go b/internal/use-case/main-use-case/edu-assessment/case.go index 230f0679..525274ca 100644 --- a/internal/use-case/main-use-case/edu-assessment/case.go +++ b/internal/use-case/main-use-case/edu-assessment/case.go @@ -37,7 +37,7 @@ func Create(input e.CreateDto) (*d.Data, error) { } // validate encounter_id - _, err := ue.ReadDetail(ee.ReadDetailDto{Id: uint16(*input.Encounter_Id)}) + _, err := ue.ReadDetail(ee.ReadDetailDto{Id: *input.Encounter_Id}) if err != nil { return err } diff --git a/internal/use-case/main-use-case/encounter/case.go b/internal/use-case/main-use-case/encounter/case.go index 25d74859..2a8ee1ba 100644 --- a/internal/use-case/main-use-case/encounter/case.go +++ b/internal/use-case/main-use-case/encounter/case.go @@ -118,7 +118,6 @@ func Create(input e.CreateDto) (*d.Data, error) { // insert vclaimReference if vr := input.VclaimReference; vr != nil { t, _ := time.Parse("2006-01-02", vr.TglRujukan) - _, err = uv.CreateData(ev.CreateDto{ Encounter_Id: &data.Id, Date: &t, @@ -136,8 +135,10 @@ func Create(input e.CreateDto) (*d.Data, error) { } dataEncounter, err := ReadDetailData(e.ReadDetailDto{ - Id: uint16(data.Id), - Includes: "Adm_Employee.User,Patient.Person.Relatives,Patient.Person.VclaimMember,VclaimReference"}, + Id: data.Id, + Includes: "Adm_Employee.User,Patient.Person.Relatives," + + "Patient.Person.VclaimMember,VclaimReference," + + "Patient.Person.Contacts,Patient.Person.Addresses"}, &event, tx) if err != nil { return err @@ -311,7 +312,7 @@ func Update(input e.UpdateDto) (*d.Data, error) { } dataEncounter, err := ReadDetailData(e.ReadDetailDto{ - Id: uint16(data.Id), + Id: data.Id, Includes: "Adm_Employee.User,Patient.Person.Relatives,Patient.Person.VclaimMember"}, &event, tx) if err != nil { @@ -429,7 +430,7 @@ func Delete(input e.DeleteDto) (*d.Data, error) { } func CheckOut(input e.DischargeDto) (*d.Data, error) { - rdDto := e.ReadDetailDto{Id: uint16(input.Id), Includes: "Ambulatory,Rehab"} + rdDto := e.ReadDetailDto{Id: input.Id, Includes: "Ambulatory,Rehab"} var data *e.Encounter var err error @@ -516,7 +517,7 @@ func CheckOut(input e.DischargeDto) (*d.Data, error) { } dataEncounter, err := ReadDetailData(e.ReadDetailDto{ - Id: uint16(data.Id), + Id: data.Id, Includes: "DeathCause"}, &event, tx) if err != nil { @@ -658,7 +659,7 @@ func UpdateStatusCode(input e.UpdateStatusDto) (*d.Data, error) { } func CheckIn(input e.CheckinDto) (*d.Data, error) { - rdDto := e.ReadDetailDto{Id: uint16(input.Id), Includes: "Rehab,Ambulatory"} + rdDto := e.ReadDetailDto{Id: input.Id, Includes: "Rehab,Ambulatory"} var data *e.Encounter var err error @@ -743,7 +744,7 @@ func CheckIn(input e.CheckinDto) (*d.Data, error) { } dataEncounter, err := ReadDetailData(e.ReadDetailDto{ - Id: uint16(data.Id), + Id: data.Id, Includes: "Adm_Employee.User"}, &event, tx) if err != nil { @@ -776,7 +777,7 @@ func CheckIn(input e.CheckinDto) (*d.Data, error) { } func RequestSwitchUnit(input e.SwitchUnitDto) (*d.Data, error) { - rdDto := e.ReadDetailDto{Id: uint16(input.Id), Includes: "Responsible_Doctor"} + rdDto := e.ReadDetailDto{Id: input.Id, Includes: "Responsible_Doctor"} var data *e.Encounter var err error @@ -865,7 +866,7 @@ func RequestSwitchUnit(input e.SwitchUnitDto) (*d.Data, error) { } func ApproveSwitchUnit(input e.ApproveUnitDto) (*d.Data, error) { - rdDto := e.ReadDetailDto{Id: uint16(input.Id), Includes: "Responsible_Doctor"} + rdDto := e.ReadDetailDto{Id: input.Id, Includes: "Responsible_Doctor"} var data *e.Encounter var err error diff --git a/internal/use-case/main-use-case/encounter/helper.go b/internal/use-case/main-use-case/encounter/helper.go index 3b215c36..73b053e5 100644 --- a/internal/use-case/main-use-case/encounter/helper.go +++ b/internal/use-case/main-use-case/encounter/helper.go @@ -68,6 +68,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Encounter) { var inputSrc *e.CreateDto if inputT, ok := any(input).(*e.CreateDto); ok { inputSrc = inputT + data.Status_Code = erc.DSCNew } else { inputTemp := any(input).(*e.UpdateDto) inputSrc = &inputTemp.CreateDto @@ -90,7 +91,6 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Encounter) { data.Responsible_Doctor_Code = inputSrc.Responsible_Doctor_Code data.RefSource_Name = inputSrc.RefSource_Name data.Appointment_Id = inputSrc.Appointment_Id - data.Status_Code = erc.DSCProcess data.RefType_Code = &inputSrc.RefTypeCode data.NewStatus = inputSrc.NewStatus } @@ -556,6 +556,7 @@ func getSoapiByResponsibleDoctor(enc e.Encounter, event *pl.Event) (data []es.So Code: "no responsible-doctor found", Detail: "Encounter does not have responsible-doctor", } + return nil, pl.SetLogError(event, enc) } err = dg.I. diff --git a/internal/use-case/main-use-case/therapy-protocol/case.go b/internal/use-case/main-use-case/therapy-protocol/case.go index ed4f3a21..a332d675 100644 --- a/internal/use-case/main-use-case/therapy-protocol/case.go +++ b/internal/use-case/main-use-case/therapy-protocol/case.go @@ -359,7 +359,7 @@ func Verify(input e.VerifyDto) (*d.Data, error) { func validateForeignKey(input e.CreateDto) error { // validate encounter if input.Encounter_Id != nil { - if _, err := ue.ReadDetail(ee.ReadDetailDto{Id: uint16(*input.Encounter_Id)}); err != nil { + if _, err := ue.ReadDetail(ee.ReadDetailDto{Id: *input.Encounter_Id}); err != nil { return err } } diff --git a/internal/use-case/main-use-case/unit/case.go b/internal/use-case/main-use-case/unit/case.go index 1db6fb79..c73c2c1d 100644 --- a/internal/use-case/main-use-case/unit/case.go +++ b/internal/use-case/main-use-case/unit/case.go @@ -1,6 +1,7 @@ package unit import ( + "errors" e "simrs-vx/internal/domain/main-entities/unit" erc "simrs-vx/internal/domain/references/common" esync "simrs-vx/internal/domain/sync-entities/log" @@ -27,9 +28,22 @@ func Create(input e.CreateDto) (*d.Data, error) { // Start log pl.SetLogInfo(&event, input, "started", "create") + + // validate unit_code + _, err := strconv.Atoi(input.Code) + if err != nil { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "invalid_code_format", + Detail: "unit_code must be a valid integer", + Raw: errors.New("invalid unit_code format"), + } + return nil, pl.SetLogError(&event, input) + } + mwRunner := newMiddlewareRunner(&event) - err := dg.I.Transaction(func(tx *gorm.DB) error { + err = dg.I.Transaction(func(tx *gorm.DB) error { if resData, err := CreateData(input, &event, tx); err != nil { return err } else { 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 6b4f7ab4..f9f48c11 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 @@ -12,8 +12,6 @@ import ( 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" @@ -46,14 +44,8 @@ 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) + // STEP 3: Update MPasien + err = updatePatientCaraBayar(*sgData, &event, tx.Simgos) if err != nil { return err } @@ -123,13 +115,13 @@ func Update(input e.Encounter) (*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 - simgos, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) + simgos, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event) if err != nil { return nil, err } @@ -137,7 +129,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, "update", &event, tx); err != nil { + if err = UpdateTPendaftaranData(input, simgos, "update", &event, tx); err != nil { return err } @@ -173,7 +165,7 @@ func Delete(input e.DeleteDto) (*d.Data, error) { } // STEP 2: Get Simgos - sgData, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) + sgData, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event) if err != nil { return nil, err } @@ -226,13 +218,13 @@ func CheckIn(input e.Encounter) (*d.Data, error) { pl.SetLogInfo(&event, input, "started", "check-in") // 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 - simgos, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) + simgos, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event) if err != nil { return nil, err } @@ -240,7 +232,7 @@ 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 = UpdateTPendaftaranData(input, *simgos, "check-in", &event, tx); err != nil { + if err = UpdateTPendaftaranData(input, simgos, "check-in", &event, tx); err != nil { return err } @@ -268,13 +260,13 @@ func CheckOut(input e.Encounter) (*d.Data, error) { pl.SetLogInfo(&event, input, "started", "check-out") // 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 - simgos, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) + simgos, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event) if err != nil { return nil, err } @@ -282,7 +274,7 @@ func CheckOut(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, "check-out", &event, tx); err != nil { + if err = UpdateTPendaftaranData(input, simgos, "check-out", &event, tx); err != nil { return err } @@ -310,13 +302,13 @@ func Cancel(input e.Encounter) (*d.Data, error) { pl.SetLogInfo(&event, input, "started", "cancel") // 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 - simgos, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) + simgos, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event) if err != nil { return nil, err } @@ -324,7 +316,7 @@ func Cancel(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, "update-status", &event, tx); err != nil { + if err = UpdateTPendaftaranData(input, simgos, "update-status", &event, tx); err != nil { return err } @@ -352,13 +344,13 @@ func RequestSwitchUnit(input e.Encounter) (*d.Data, error) { pl.SetLogInfo(&event, input, "started", "request-switch-unit") // 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 - tpendaftaran, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) + tpendaftaran, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event) if err != nil { return nil, err } @@ -366,12 +358,12 @@ func RequestSwitchUnit(input e.Encounter) (*d.Data, error) { 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 { + 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 { + if _, err := CreateBulkTPemeriksaanHistData(input, tpendaftaran, &event, tx); err != nil { return err } @@ -399,13 +391,13 @@ func ApproveSwitchUnit(input e.Encounter) (*d.Data, error) { pl.SetLogInfo(&event, input, "started", "request-switch-unit") // 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 - tpendaftaran, err := ReadTPendaftaranDetailData(uint16(syncLink.Simgos_Id), &event) + tpendaftaran, err := ReadTPendaftaranDetailData(syncLink.Simgos_Id, &event) if err != nil { return nil, err } @@ -413,12 +405,12 @@ func ApproveSwitchUnit(input e.Encounter) (*d.Data, error) { 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 { + 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 { + if _, err := CreateBulkTPemeriksaanHistData(input, tpendaftaran, &event, tx); err != nil { return err } 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 a64a0c4e..fe1d5b42 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,7 +6,7 @@ package encounter import ( "encoding/json" - epr "simrs-vx/internal/domain/main-entities/person-relative" + epa "simrs-vx/internal/domain/main-entities/person-address" erc "simrs-vx/internal/domain/references/common" ere "simrs-vx/internal/domain/references/encounter" erp "simrs-vx/internal/domain/references/person" @@ -14,6 +14,8 @@ import ( "strconv" e "simrs-vx/internal/domain/main-entities/encounter" + 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" etp "simrs-vx/internal/domain/simgos-entities/t-pendaftaran" @@ -47,20 +49,29 @@ func setDataCreateTPendaftaran(input *e.Encounter) (data etp.TPendaftaran, err e } data.NoKunjung = uint(noKunjung) - setDataTPendaftaran(input, data) + if p := input.Patient.Person; p != nil { + mapRelative(p.Relatives, &data) + + if data.PenanggungjawabNama == "" { + data.PenanggungjawabHubungan = "DIRI SENDIRI" + data.PenanggungjawabNama = p.Name + mapContact(p.Contacts, &data) + mapAddress(p.Addresses, &data) + } + + if bpjs := p.VclaimMember; bpjs != nil { + data.Nokartu = *bpjs.CardNumber + } + } + + setDataTPendaftaran(input, &data) return } -func setDataTPendaftaran(input *e.Encounter, data etp.TPendaftaran) { +func setDataTPendaftaran(input *e.Encounter, data *etp.TPendaftaran) { data.Tglreg = input.RegisteredAt - // set kddokter - if d := input.Appointment_Doctor_Code; d != nil { - kddokter, _ := strconv.Atoi(*input.Appointment_Doctor_Code) - data.Kddokter = uint(kddokter) - } - // set kdpoly if p := input.Unit_Code; p != nil { kdpoly, _ := strconv.Atoi(*input.Unit_Code) @@ -82,22 +93,18 @@ func setDataTPendaftaran(input *e.Encounter, data etp.TPendaftaran) { } } - if ref := input.VclaimReference; ref != nil { - data.Ketrujuk = *ref.SrcCode - data.Norujukan = *ref.Number - data.Tglrujukan = ref.Date + // set data if payment_method bpjs + if input.RefSource_Name != nil { + data.Ketrujuk = *input.RefSource_Name data.Strujukan = 1 } else { data.Ketrujuk = "TR" data.Strujukan = 0 } - if p := input.Patient.Person; p != nil { - mapRelative(p.Relatives, data) - - if bpjs := p.VclaimMember; bpjs != nil { - data.Nokartu = *bpjs.CardNumber - } + if ref := input.VclaimReference; ref != nil { + data.Norujukan = *ref.Number + data.Tglrujukan = ref.Date } data.Jamreg = input.RegisteredAt @@ -107,7 +114,7 @@ func setDataTPendaftaran(input *e.Encounter, data etp.TPendaftaran) { return } -func setDataCheckIn(input e.Encounter, data etp.TPendaftaran) { +func setDataCheckIn(input e.Encounter, data *etp.TPendaftaran) { // set kddokter kddokter, _ := strconv.Atoi(*input.Responsible_Doctor_Code) data.Kddokter = uint(kddokter) @@ -125,7 +132,7 @@ func setDataCheckIn(input e.Encounter, data etp.TPendaftaran) { return } -func setDataRequestSwitchUnit(input e.Encounter, data etp.TPendaftaran) (hist []etph.TPemeriksaanHist) { +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{ @@ -151,7 +158,7 @@ func setDataRequestSwitchUnit(input e.Encounter, data etp.TPendaftaran) (hist [] return } -func setDataCheckOut(input e.Encounter, data etp.TPendaftaran) { +func setDataCheckOut(input e.Encounter, data *etp.TPendaftaran) { data.Keluarpoly = input.Discharge_Date // set status @@ -169,13 +176,13 @@ func setDataCheckOut(input e.Encounter, data etp.TPendaftaran) { return } -func setDataUpdateStatus(input e.Encounter, data etp.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) { +func setKdrujuk(input *ere.RefTypeCode, data *etp.TPendaftaran) { switch *input { case ere.RTCGov: data.Kdrujuk = 1 @@ -188,7 +195,7 @@ func setKdrujuk(input *ere.RefTypeCode, data etp.TPendaftaran) { } } -func setKdcarabayar(input ere.AllPaymentMethodCode, data etp.TPendaftaran) { +func setKdcarabayar(input ere.AllPaymentMethodCode, data *etp.TPendaftaran) { switch input { case ere.APMCPks: data.Kdcarabayar = 12 @@ -203,7 +210,7 @@ func setKdcarabayar(input ere.AllPaymentMethodCode, data etp.TPendaftaran) { } } -func setStatus(code *ere.DischargeMethodCode, data etp.TPendaftaran) { +func setStatus(code *ere.DischargeMethodCode, data *etp.TPendaftaran) { switch *code { case ere.DMCHome: data.Status = 1 @@ -250,7 +257,7 @@ func setStatus(code *ere.DischargeMethodCode, data etp.TPendaftaran) { } } -func mapRelative(relative *[]epr.PersonRelative, data etp.TPendaftaran) { +func mapRelative(relative *[]epr.PersonRelative, data *etp.TPendaftaran) { if relative == nil || len(*relative) == 0 { return } @@ -322,10 +329,11 @@ func generateNoKunjung() (int, error) { // Lock rows for this prefix → prevents race condition if err := dg.IS["simrs"]. Table("t_pendaftaran"). - Select("COALESCE(MAX(no_kunjung),0)"). + Select("no_kunjung"). Where("tglreg = CURRENT_DATE"). Order("no_kunjung DESC"). Clauses(clause.Locking{Strength: "UPDATE"}). + Limit(1). Scan(&lastNumber).Error; err != nil { return 0, err } @@ -339,7 +347,7 @@ func stringtouint(v string) *uint { return &point } -func updatePatient(patient ep.MPasien, event *pl.Event, dbx ...*gorm.DB) error { +func updatePatientCaraBayar(input etp.TPendaftaran, event *pl.Event, dbx ...*gorm.DB) error { pl.SetLogInfo(event, nil, "started", "DBUpdate") var tx *gorm.DB @@ -350,9 +358,9 @@ func updatePatient(patient ep.MPasien, event *pl.Event, dbx ...*gorm.DB) error { } if err := tx.Model(&ep.MPasien{}). - Where("\"nomr\" = ?", patient.Nomr). + Where("\"nomr\" = ?", input.Nomr). Updates(map[string]interface{}{ - "kdcarabayar": patient.Kdcarabayar, + "kdcarabayar": input.Kdcarabayar, }).Error; err != nil { event.Status = "failed" event.ErrInfo = pl.ErrorInfo{ @@ -360,9 +368,30 @@ func updatePatient(patient ep.MPasien, event *pl.Event, dbx ...*gorm.DB) error { Detail: "Failed to update patient", Raw: err, } - return pl.SetLogError(event, patient) + return pl.SetLogError(event, input) } - pl.SetLogInfo(event, patient, "complete") + pl.SetLogInfo(event, input, "complete") return nil } + +func mapContact(contact *[]epc.PersonContact, data *etp.TPendaftaran) { + if contact == nil || len(*contact) == 0 { + return + } + + for _, c := range *contact { + if c.Type_Code == erp.CTPhone || c.Type_Code == erp.CTMPhone { + data.PenanggungjawabPhone = c.Value + break + } + } +} + +func mapAddress(addresses *[]epa.PersonAddress, data *etp.TPendaftaran) { + if addresses == nil || len(*addresses) == 0 { + return + } + a := (*addresses)[0] + data.PenanggungjawabAlamat = a.Address +} 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 064131e5..3312193d 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 @@ -41,7 +41,7 @@ func CreateTPendaftaranData(input e.Encounter, event *pl.Event, dbx ...*gorm.DB) return &data, nil } -func ReadTPendaftaranDetailData(simgosId uint16, event *pl.Event) (*etp.TPendaftaran, error) { +func ReadTPendaftaranDetailData(simgosId uint, event *pl.Event) (*etp.TPendaftaran, error) { pl.SetLogInfo(event, simgosId, "started", "DBReadDetail") data := etp.TPendaftaran{} @@ -59,7 +59,7 @@ func ReadTPendaftaranDetailData(simgosId uint16, event *pl.Event) (*etp.TPendaft return &data, nil } -func UpdateTPendaftaranData(input e.Encounter, data etp.TPendaftaran, method string, 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") switch method { @@ -138,7 +138,7 @@ func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*e return &data, nil } -func ReadDetailLinkData(simxId uint16, event *pl.Event) (*esync.EncounterLink, error) { +func ReadDetailLinkData(simxId uint, event *pl.Event) (*esync.EncounterLink, error) { pl.SetLogInfo(event, simxId, "started", "DBReadDetail") data := esync.EncounterLink{} @@ -199,7 +199,7 @@ 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 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) diff --git a/internal/use-case/simgos-sync-use-case/new/patient/helper.go b/internal/use-case/simgos-sync-use-case/new/patient/helper.go index 14f516d5..532574b2 100644 --- a/internal/use-case/simgos-sync-use-case/new/patient/helper.go +++ b/internal/use-case/simgos-sync-use-case/new/patient/helper.go @@ -37,12 +37,15 @@ func setDataSimgos(input *e.Patient) (data esimgos.MPasien) { mapContact(input.Person.Contacts, &data) } - 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) + if input.Person != nil { + data.PenanggungjawabHubungan = "DIRI SENDIRI" + data.PenanggungjawabNama = input.Person.Name + data.PenanggungjawabPhone = data.Notelp + data.PenanggungjawabAlamat = data.Alamat + + if input.Person.Relatives != nil { + mapRelative(input.Person.Relatives, &data) + } } data.Nip = input.RegisteredBy_User_Name diff --git a/internal/use-case/simgos-sync-use-case/new/specialist/helper.go b/internal/use-case/simgos-sync-use-case/new/specialist/helper.go index 4a155496..adce079f 100644 --- a/internal/use-case/simgos-sync-use-case/new/specialist/helper.go +++ b/internal/use-case/simgos-sync-use-case/new/specialist/helper.go @@ -14,7 +14,7 @@ import ( esync "simrs-vx/internal/domain/sync-entities/specialist" ) -func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T) (data esimgos.MPolihfis) { +func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T, data *esimgos.MPolihfis) { var inputSrc *e.CreateDto if inputT, ok := any(input).(*e.CreateDto); ok { inputSrc = inputT diff --git a/internal/use-case/simgos-sync-use-case/new/specialist/lib.go b/internal/use-case/simgos-sync-use-case/new/specialist/lib.go index c796af73..0aee2ceb 100644 --- a/internal/use-case/simgos-sync-use-case/new/specialist/lib.go +++ b/internal/use-case/simgos-sync-use-case/new/specialist/lib.go @@ -20,7 +20,8 @@ var now = time.Now() func CreateSimgosData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*esimgos.MPolihfis, error) { pl.SetLogInfo(event, nil, "started", "DBCreate") - data := setDataSimgos(&input) + data := esimgos.MPolihfis{} + setDataSimgos(&input, &data) var tx *gorm.DB if len(dbx) > 0 { @@ -29,7 +30,7 @@ func CreateSimgosData(input e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*esi tx = dg.IS["simrs"] } - if err := tx.Create(&data).Error; err != nil { + if err := tx.Debug().Create(&data).Error; err != nil { return nil, plh.HandleCreateError(input, event, err) } @@ -58,7 +59,9 @@ func ReadDetailSimgosData(simgosId uint16, event *pl.Event) (*esimgos.MPolihfis, func UpdateSimgosData(input e.UpdateDto, dataSimgos *esync.SpecialistLink, event *pl.Event, dbx ...*gorm.DB) error { pl.SetLogInfo(event, input, "started", "DBUpdate") - data := setDataSimgos(&input) + data := esimgos.MPolihfis{} + + setDataSimgos(&input, &data) data.Id = dataSimgos.Simgos_Id var tx *gorm.DB diff --git a/internal/use-case/simgos-sync-use-case/new/unit/helper.go b/internal/use-case/simgos-sync-use-case/new/unit/helper.go index 667bb7f0..d7dfb1f6 100644 --- a/internal/use-case/simgos-sync-use-case/new/unit/helper.go +++ b/internal/use-case/simgos-sync-use-case/new/unit/helper.go @@ -7,6 +7,7 @@ package unit import ( "encoding/json" erc "simrs-vx/internal/domain/references/common" + "strconv" e "simrs-vx/internal/domain/main-entities/unit" @@ -27,6 +28,8 @@ func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T) (data esimgos.MPoly) data.Nama = inputSrc.Name data.Jenispoly = 0 + kodePoly, _ := strconv.Atoi(inputSrc.Code) + data.Kode = uint(kodePoly) return }