feat (encounter): handle status
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
|||||||
es "simrs-vx/internal/domain/main-entities/specialist"
|
es "simrs-vx/internal/domain/main-entities/specialist"
|
||||||
ess "simrs-vx/internal/domain/main-entities/subspecialist"
|
ess "simrs-vx/internal/domain/main-entities/subspecialist"
|
||||||
eu "simrs-vx/internal/domain/main-entities/unit"
|
eu "simrs-vx/internal/domain/main-entities/unit"
|
||||||
|
erc "simrs-vx/internal/domain/references/common"
|
||||||
ere "simrs-vx/internal/domain/references/encounter"
|
ere "simrs-vx/internal/domain/references/encounter"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@@ -110,6 +111,7 @@ type ResponseDto struct {
|
|||||||
MedicalDischargeEducation *string `json:"medicalDischargeEducation"`
|
MedicalDischargeEducation *string `json:"medicalDischargeEducation"`
|
||||||
AdmDischargeEducation *string `json:"admDischargeEducation"`
|
AdmDischargeEducation *string `json:"admDischargeEducation"`
|
||||||
DischargeReason *string `json:"dischargeReason"`
|
DischargeReason *string `json:"dischargeReason"`
|
||||||
|
Status_Code erc.DataStatusCode `json:"status_code"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d Encounter) ToResponse() ResponseDto {
|
func (d Encounter) ToResponse() ResponseDto {
|
||||||
@@ -137,6 +139,7 @@ func (d Encounter) ToResponse() ResponseDto {
|
|||||||
MedicalDischargeEducation: d.MedicalDischargeEducation,
|
MedicalDischargeEducation: d.MedicalDischargeEducation,
|
||||||
AdmDischargeEducation: d.AdmDischargeEducation,
|
AdmDischargeEducation: d.AdmDischargeEducation,
|
||||||
DischargeReason: d.DischargeReason,
|
DischargeReason: d.DischargeReason,
|
||||||
|
Status_Code: d.Status_Code,
|
||||||
}
|
}
|
||||||
resp.Main = d.Main
|
resp.Main = d.Main
|
||||||
return resp
|
return resp
|
||||||
|
|||||||
@@ -40,3 +40,7 @@ type Encounter struct {
|
|||||||
DischargeReason *string `json:"dischargeReason"`
|
DischargeReason *string `json:"dischargeReason"`
|
||||||
Status_Code erc.DataStatusCode `json:"status_code" gorm:"size:10"`
|
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
|
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 := newMiddlewareRunner(&event, tx)
|
||||||
mwRunner.setMwType(pu.MWTPre)
|
mwRunner.setMwType(pu.MWTPre)
|
||||||
// Run pre-middleware
|
// Run pre-middleware
|
||||||
@@ -352,6 +362,15 @@ func CheckOut(input e.DischargeDto) (*d.Data, error) {
|
|||||||
return err
|
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 {
|
if err := checkSoapiByDocExists(data.Id, &event, tx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
es "simrs-vx/internal/domain/main-entities/soapi"
|
es "simrs-vx/internal/domain/main-entities/soapi"
|
||||||
pl "simrs-vx/pkg/logger"
|
pl "simrs-vx/pkg/logger"
|
||||||
|
|
||||||
|
erc "simrs-vx/internal/domain/references/common"
|
||||||
ero "simrs-vx/internal/domain/references/organization"
|
ero "simrs-vx/internal/domain/references/organization"
|
||||||
|
|
||||||
"gorm.io/gorm"
|
"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.Responsible_Doctor_Id = inputSrc.Responsible_Doctor_Id
|
||||||
data.RefSource_Name = inputSrc.RefSource_Name
|
data.RefSource_Name = inputSrc.RefSource_Name
|
||||||
data.Appointment_Id = inputSrc.Appointment_Id
|
data.Appointment_Id = inputSrc.Appointment_Id
|
||||||
|
data.Status_Code = erc.DSCNew
|
||||||
}
|
}
|
||||||
|
|
||||||
func setDataUpdate(src e.UpdateDto, dst *e.Encounter) {
|
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.MedicalDischargeEducation = src.MedicalDischargeEducation
|
||||||
dst.AdmDischargeEducation = src.AdmDischargeEducation
|
dst.AdmDischargeEducation = src.AdmDischargeEducation
|
||||||
dst.DischargeReason = src.DischargeReason
|
dst.DischargeReason = src.DischargeReason
|
||||||
|
dst.Status_Code = erc.DSCDone
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkSoapiByDocExists(encounter_id uint, event *pl.Event, tx *gorm.DB) error {
|
func checkSoapiByDocExists(encounter_id uint, event *pl.Event, tx *gorm.DB) error {
|
||||||
|
|||||||
Reference in New Issue
Block a user