diff --git a/internal/domain/main-entities/encounter/dto.go b/internal/domain/main-entities/encounter/dto.go index 32472324..a431ad4e 100644 --- a/internal/domain/main-entities/encounter/dto.go +++ b/internal/domain/main-entities/encounter/dto.go @@ -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 diff --git a/internal/domain/main-entities/encounter/entity.go b/internal/domain/main-entities/encounter/entity.go index bb3b3e90..0a685611 100644 --- a/internal/domain/main-entities/encounter/entity.go +++ b/internal/domain/main-entities/encounter/entity.go @@ -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 +} diff --git a/internal/use-case/main-use-case/encounter/case.go b/internal/use-case/main-use-case/encounter/case.go index 0101f38d..ed8fa816 100644 --- a/internal/use-case/main-use-case/encounter/case.go +++ b/internal/use-case/main-use-case/encounter/case.go @@ -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 } diff --git a/internal/use-case/main-use-case/encounter/helper.go b/internal/use-case/main-use-case/encounter/helper.go index 4a24900b..b40783b7 100644 --- a/internal/use-case/main-use-case/encounter/helper.go +++ b/internal/use-case/main-use-case/encounter/helper.go @@ -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 {