adjustment update rehab in checkout
This commit is contained in:
@@ -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 (
|
||||
|
||||
Reference in New Issue
Block a user