feat (encounter): handle status
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user