feat (encounter): handle status

This commit is contained in:
dpurbosakti
2025-09-10 13:11:18 +07:00
parent 922739d1b6
commit 266b96dd73
4 changed files with 29 additions and 0 deletions
@@ -8,6 +8,7 @@ import (
es "simrs-vx/internal/domain/main-entities/specialist"
ess "simrs-vx/internal/domain/main-entities/subspecialist"
eu "simrs-vx/internal/domain/main-entities/unit"
erc "simrs-vx/internal/domain/references/common"
ere "simrs-vx/internal/domain/references/encounter"
"time"
)
@@ -110,6 +111,7 @@ type ResponseDto struct {
MedicalDischargeEducation *string `json:"medicalDischargeEducation"`
AdmDischargeEducation *string `json:"admDischargeEducation"`
DischargeReason *string `json:"dischargeReason"`
Status_Code erc.DataStatusCode `json:"status_code"`
}
func (d Encounter) ToResponse() ResponseDto {
@@ -137,6 +139,7 @@ func (d Encounter) ToResponse() ResponseDto {
MedicalDischargeEducation: d.MedicalDischargeEducation,
AdmDischargeEducation: d.AdmDischargeEducation,
DischargeReason: d.DischargeReason,
Status_Code: d.Status_Code,
}
resp.Main = d.Main
return resp
@@ -40,3 +40,7 @@ type Encounter struct {
DischargeReason *string `json:"dischargeReason"`
Status_Code erc.DataStatusCode `json:"status_code" gorm:"size:10"`
}
func (d Encounter) IsDone() bool {
return d.Status_Code == erc.DSCDone
}
@@ -242,6 +242,16 @@ func Update(input e.UpdateDto) (*d.Data, error) {
return err
}
if data.IsDone() {
event.Status = "failed"
event.ErrInfo = pl.ErrorInfo{
Code: "data-state-mismatch",
Detail: "encounter is done",
Raw: errors.New("encounter is done"),
}
return pl.SetLogError(&event, input)
}
mwRunner := newMiddlewareRunner(&event, tx)
mwRunner.setMwType(pu.MWTPre)
// Run pre-middleware
@@ -352,6 +362,15 @@ func CheckOut(input e.DischargeDto) (*d.Data, error) {
return err
}
if data.IsDone() {
event.Status = "failed"
event.ErrInfo = pl.ErrorInfo{
Code: "data-state-mismatch",
Detail: "encounter is done",
Raw: errors.New("encounter is done"),
}
return pl.SetLogError(&event, input)
}
if err := checkSoapiByDocExists(data.Id, &event, tx); err != nil {
return err
}
@@ -10,6 +10,7 @@ import (
es "simrs-vx/internal/domain/main-entities/soapi"
pl "simrs-vx/pkg/logger"
erc "simrs-vx/internal/domain/references/common"
ero "simrs-vx/internal/domain/references/organization"
"gorm.io/gorm"
@@ -35,6 +36,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Encounter) {
data.Responsible_Doctor_Id = inputSrc.Responsible_Doctor_Id
data.RefSource_Name = inputSrc.RefSource_Name
data.Appointment_Id = inputSrc.Appointment_Id
data.Status_Code = erc.DSCNew
}
func setDataUpdate(src e.UpdateDto, dst *e.Encounter) {
@@ -52,6 +54,7 @@ func setDataDischarge(src e.DischargeDto, dst *e.Encounter) {
dst.MedicalDischargeEducation = src.MedicalDischargeEducation
dst.AdmDischargeEducation = src.AdmDischargeEducation
dst.DischargeReason = src.DischargeReason
dst.Status_Code = erc.DSCDone
}
func checkSoapiByDocExists(encounter_id uint, event *pl.Event, tx *gorm.DB) error {