adjustment update rehab in checkout

This commit is contained in:
vanilia
2025-11-09 23:12:09 +07:00
parent fcbec59a17
commit 49922a6b72
3 changed files with 17 additions and 15 deletions
@@ -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 {
@@ -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
@@ -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 (