From 49922a6b7213c9365051bf74806084278c118ec8 Mon Sep 17 00:00:00 2001 From: vanilia Date: Sun, 9 Nov 2025 23:12:09 +0700 Subject: [PATCH] adjustment update rehab in checkout --- internal/use-case/main-use-case/encounter/case.go | 15 ++++++++------- .../use-case/main-use-case/encounter/helper.go | 15 ++++++++------- internal/use-case/main-use-case/encounter/lib.go | 2 +- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/internal/use-case/main-use-case/encounter/case.go b/internal/use-case/main-use-case/encounter/case.go index 9798a28b..533b2264 100644 --- a/internal/use-case/main-use-case/encounter/case.go +++ b/internal/use-case/main-use-case/encounter/case.go @@ -52,15 +52,15 @@ func Create(input e.CreateDto) (*d.Data, error) { // validate rehab bpjs if input.RefTypeCode == ere.RTCBpjs && input.Class_Code == ere.ECAmbulatory && ere.AmbulatoryClassCode(*input.SubClass_Code) == ere.ACCRehab { - // identify visit mode from latest rehab data - recentRehabData, err := identifyVisitModeCode(input, &event) + // get latest rehab data + recentRehabData, err := getLatestRehabData(input, &event) if err != nil { return nil, err } if recentRehabData != nil { // determine VisitModeCode - input.VisitMode_Code, *input.RecentEncounterAdm, err = determineVisitMode(recentRehabData, input, &event) + input.VisitMode_Code, input.RecentEncounterAdm, err = determineVisitMode(recentRehabData, input, &event) if err != nil { return nil, err } @@ -397,11 +397,12 @@ func CheckOut(input e.DischargeDto) (*d.Data, error) { return err } - // verify and update rehabData if visit count has reached the allowed limit - if err = verifyRehabLimit(data, &event, tx); err != nil { - return err + if data.Ambulatory.Class_Code == ere.ACCRehab { + // verify and update rehabData if visit count has reached the allowed limit + if err = verifyRehabLimit(data, &event, tx); err != nil { + return err + } } - } else { // chemo TBC if err := checkSoapiByDocExists(data.Id, &event, tx); err != nil { diff --git a/internal/use-case/main-use-case/encounter/helper.go b/internal/use-case/main-use-case/encounter/helper.go index dc825348..1d313d5f 100644 --- a/internal/use-case/main-use-case/encounter/helper.go +++ b/internal/use-case/main-use-case/encounter/helper.go @@ -559,6 +559,7 @@ func getSoapiByResponsibleDoctor(enc e.Encounter, event *pl.Event) (data []es.So } err = dg.I. + Debug(). Model(&es.Soapi{}). Joins("JOIN \"Employee\" ON \"Employee\".\"Id\" = \"Soapi\".\"Employee_Id\""). Where("\"Encounter_Id\" = ?", enc.Id). @@ -704,7 +705,7 @@ func identifyPatientStatus(input e.CreateDto) (isNewPatient bool, err error) { return } -func determineVisitMode(recentRehabData *er.Rehab, input e.CreateDto, event *pl.Event) (ere.VisitModeCode, e.Encounter, error) { +func determineVisitMode(recentRehabData *er.Rehab, input e.CreateDto, event *pl.Event) (ere.VisitModeCode, *e.Encounter, error) { var ( visitModeCode ere.VisitModeCode recentAdmEncounterData e.Encounter @@ -719,7 +720,7 @@ func determineVisitMode(recentRehabData *er.Rehab, input e.CreateDto, event *pl. // verify whether the allocated visit count has not exceeded the limit recentAdmEncounterData, isQuotaValid, err = verifyAllocatedVisitCount(input, event) if err != nil { - return "", e.Encounter{}, err + return "", nil, err } if !isQuotaValid || recentRehabData.ExpiredAt.Before(*pu.GetTimeNow()) { @@ -729,7 +730,7 @@ func determineVisitMode(recentRehabData *er.Rehab, input e.CreateDto, event *pl. Detail: "Encounter has exceeded the allowed number of visits or expired", Raw: errors.New("visit count exceeds allowed limit"), } - return "", e.Encounter{}, pl.SetLogError(event, input) + return "", nil, pl.SetLogError(event, input) } case erc.DSCDone: @@ -742,10 +743,10 @@ func determineVisitMode(recentRehabData *er.Rehab, input e.CreateDto, event *pl. Detail: fmt.Sprintf("Unknown rehab status: %v", *recentRehabData.Status_Code), Raw: errors.New("unsupported rehab status"), } - return "", e.Encounter{}, pl.SetLogError(event, input) + return "", nil, pl.SetLogError(event, input) } - return visitModeCode, recentAdmEncounterData, nil + return visitModeCode, &recentAdmEncounterData, nil } func insertdataClassCode(input e.CreateDto, soapiData []es.CreateDto, event *pl.Event, tx *gorm.DB) (err error) { @@ -852,10 +853,10 @@ func verifyRehabLimit(data *e.Encounter, event *pl.Event, tx *gorm.DB) error { } // Check if the visit count has reached the allowed limit - // Mark rehab status as 'done' if exceeded. + // Mark latest rehab status as 'done' if exceeded. if len(*encounterAdmData.RehabChildren) >= *encounterAdmData.Rehab.AllocatedVisitCount { err = updateRehabStatus(er.UpdateDto{ - Id: uint16(encounterAdmData.Rehab.Id), + Id: uint16(data.Rehab.Id), CreateDto: er.CreateDto{Status_Code: erc.DSCDone}}, event, tx) if err != nil { return err diff --git a/internal/use-case/main-use-case/encounter/lib.go b/internal/use-case/main-use-case/encounter/lib.go index 5f41bf8c..373ce7f2 100644 --- a/internal/use-case/main-use-case/encounter/lib.go +++ b/internal/use-case/main-use-case/encounter/lib.go @@ -254,7 +254,7 @@ func updateCheckInData(input e.CheckinDto, data *e.Encounter, event *pl.Event, d return nil } -func identifyVisitModeCode(i e.CreateDto, event *pl.Event) (recentRehabData *er.Rehab, err error) { +func getLatestRehabData(i e.CreateDto, event *pl.Event) (recentRehabData *er.Rehab, err error) { pl.SetLogInfo(event, nil, "started", "DBGetLatestRehab") var (