|
|
|
@@ -7,7 +7,7 @@ package encounter
|
|
|
|
|
import (
|
|
|
|
|
"errors"
|
|
|
|
|
"fmt"
|
|
|
|
|
un "simrs-vx/internal/use-case/main-use-case/nurse"
|
|
|
|
|
|
|
|
|
|
"strings"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
@@ -24,9 +24,9 @@ import (
|
|
|
|
|
ere "simrs-vx/internal/domain/references/encounter"
|
|
|
|
|
erg "simrs-vx/internal/domain/references/organization"
|
|
|
|
|
|
|
|
|
|
eaeh "simrs-vx/internal/domain/main-entities/adm-employee-hist"
|
|
|
|
|
ea "simrs-vx/internal/domain/main-entities/ambulatory"
|
|
|
|
|
ec "simrs-vx/internal/domain/main-entities/chemo"
|
|
|
|
|
ecpl "simrs-vx/internal/domain/main-entities/chemo-plan"
|
|
|
|
|
edo "simrs-vx/internal/domain/main-entities/device-order"
|
|
|
|
|
ed "simrs-vx/internal/domain/main-entities/doctor"
|
|
|
|
|
ee "simrs-vx/internal/domain/main-entities/emergency"
|
|
|
|
@@ -42,12 +42,9 @@ import (
|
|
|
|
|
ep "simrs-vx/internal/domain/main-entities/prescription"
|
|
|
|
|
epi "simrs-vx/internal/domain/main-entities/prescription-item"
|
|
|
|
|
er "simrs-vx/internal/domain/main-entities/rehab"
|
|
|
|
|
erdh "simrs-vx/internal/domain/main-entities/responsible-doctor-hist"
|
|
|
|
|
es "simrs-vx/internal/domain/main-entities/soapi"
|
|
|
|
|
eu "simrs-vx/internal/domain/main-entities/unit"
|
|
|
|
|
|
|
|
|
|
// udo "simrs-vx/internal/use-case/main-use-case/device-order"
|
|
|
|
|
uaeh "simrs-vx/internal/use-case/main-use-case/adm-employee-hist"
|
|
|
|
|
ua "simrs-vx/internal/use-case/main-use-case/ambulatory"
|
|
|
|
|
uc "simrs-vx/internal/use-case/main-use-case/chemo"
|
|
|
|
|
ud "simrs-vx/internal/use-case/main-use-case/doctor"
|
|
|
|
@@ -58,10 +55,10 @@ import (
|
|
|
|
|
umi "simrs-vx/internal/use-case/main-use-case/medicine-mix"
|
|
|
|
|
ummi "simrs-vx/internal/use-case/main-use-case/medicine-mix-item"
|
|
|
|
|
_ "simrs-vx/internal/use-case/main-use-case/nurse"
|
|
|
|
|
un "simrs-vx/internal/use-case/main-use-case/nurse"
|
|
|
|
|
up "simrs-vx/internal/use-case/main-use-case/prescription"
|
|
|
|
|
upi "simrs-vx/internal/use-case/main-use-case/prescription-item"
|
|
|
|
|
ur "simrs-vx/internal/use-case/main-use-case/rehab"
|
|
|
|
|
urdh "simrs-vx/internal/use-case/main-use-case/responsible-doctor-hist"
|
|
|
|
|
us "simrs-vx/internal/use-case/main-use-case/soapi"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
@@ -396,192 +393,6 @@ func getMcuOrders(encounter_id uint, event *pl.Event, tx *gorm.DB) error {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func upsertResponsibleDoctorHist(input erdh.CreateDto, event *pl.Event, dbx ...*gorm.DB) error {
|
|
|
|
|
pl.SetLogInfo(event, nil, "started", "DBCreate")
|
|
|
|
|
|
|
|
|
|
var tx *gorm.DB
|
|
|
|
|
if len(dbx) > 0 {
|
|
|
|
|
tx = dbx[0]
|
|
|
|
|
} else {
|
|
|
|
|
tx = dg.I
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var latest erdh.ResponsibleDoctorHist
|
|
|
|
|
err := tx.
|
|
|
|
|
Where("\"Encounter_Id\" = ?", input.Encounter_Id).
|
|
|
|
|
Order("\"CreatedAt\" DESC").
|
|
|
|
|
Limit(1).
|
|
|
|
|
First(&latest).Error
|
|
|
|
|
|
|
|
|
|
switch {
|
|
|
|
|
case errors.Is(err, gorm.ErrRecordNotFound):
|
|
|
|
|
// Insert
|
|
|
|
|
if _, err = urdh.CreateData(input, event, tx); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
case err != nil:
|
|
|
|
|
event.Status = "failed"
|
|
|
|
|
event.ErrInfo = pl.ErrorInfo{
|
|
|
|
|
Code: "read-fail",
|
|
|
|
|
Detail: "Failed to read responsible doctor history",
|
|
|
|
|
Raw: err,
|
|
|
|
|
}
|
|
|
|
|
return pl.SetLogError(event, input)
|
|
|
|
|
default:
|
|
|
|
|
// Update
|
|
|
|
|
if err := tx.Model(&latest).Updates(map[string]interface{}{
|
|
|
|
|
"Doctor_Code": input.Doctor_Code,
|
|
|
|
|
"StartedAt": input.StartedAt,
|
|
|
|
|
"UpdatedAt": time.Now(),
|
|
|
|
|
}).Error; err != nil {
|
|
|
|
|
event.Status = "failed"
|
|
|
|
|
event.ErrInfo = pl.ErrorInfo{
|
|
|
|
|
Code: "update-fail",
|
|
|
|
|
Detail: "Failed to update responsible doctor history",
|
|
|
|
|
Raw: err,
|
|
|
|
|
}
|
|
|
|
|
return pl.SetLogError(event, input)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pl.SetLogInfo(event, input, "complete")
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func upsertAdmEmployeeHist(input eaeh.CreateDto, event *pl.Event, dbx ...*gorm.DB) error {
|
|
|
|
|
pl.SetLogInfo(event, nil, "started", "DBCreate")
|
|
|
|
|
|
|
|
|
|
var tx *gorm.DB
|
|
|
|
|
if len(dbx) > 0 {
|
|
|
|
|
tx = dbx[0]
|
|
|
|
|
} else {
|
|
|
|
|
tx = dg.I
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var latest eaeh.AdmEmployeeHist
|
|
|
|
|
err := tx.
|
|
|
|
|
Where("\"Encounter_Id\" = ?", input.Encounter_Id).
|
|
|
|
|
Order("\"CreatedAt\" DESC").
|
|
|
|
|
Limit(1).
|
|
|
|
|
First(&latest).Error
|
|
|
|
|
|
|
|
|
|
switch {
|
|
|
|
|
case errors.Is(err, gorm.ErrRecordNotFound):
|
|
|
|
|
// Insert
|
|
|
|
|
if _, err = uaeh.CreateData(input, event, tx); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
case err != nil:
|
|
|
|
|
event.Status = "failed"
|
|
|
|
|
event.ErrInfo = pl.ErrorInfo{
|
|
|
|
|
Code: "read-fail",
|
|
|
|
|
Detail: "Failed to read responsible doctor history",
|
|
|
|
|
Raw: err,
|
|
|
|
|
}
|
|
|
|
|
return pl.SetLogError(event, input)
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
// Update
|
|
|
|
|
if err := tx.Model(&latest).Updates(map[string]interface{}{
|
|
|
|
|
"Employee_Id": input.Employee_Id,
|
|
|
|
|
"StartedAt": input.StartedAt,
|
|
|
|
|
"UpdatedAt": time.Now(),
|
|
|
|
|
}).Error; err != nil {
|
|
|
|
|
event.Status = "failed"
|
|
|
|
|
event.ErrInfo = pl.ErrorInfo{
|
|
|
|
|
Code: "update-fail",
|
|
|
|
|
Detail: "Failed to update responsible doctor history",
|
|
|
|
|
Raw: err,
|
|
|
|
|
}
|
|
|
|
|
return pl.SetLogError(event, input)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pl.SetLogInfo(event, input, "complete")
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func updateLatestResponsibleDoctorHist(input e.CheckinDto, event *pl.Event, dbx ...*gorm.DB) error {
|
|
|
|
|
pl.SetLogInfo(event, "started", "DBUpdate")
|
|
|
|
|
|
|
|
|
|
var tx *gorm.DB
|
|
|
|
|
if len(dbx) > 0 {
|
|
|
|
|
tx = dbx[0]
|
|
|
|
|
} else {
|
|
|
|
|
tx = dg.I
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
subQuery := tx.
|
|
|
|
|
Select("\"Id\"").
|
|
|
|
|
Model(&erdh.ResponsibleDoctorHist{}).
|
|
|
|
|
Where("\"Encounter_Id\" = ?", input.Id).
|
|
|
|
|
Order("\"CreatedAt\" DESC").
|
|
|
|
|
Limit(1)
|
|
|
|
|
|
|
|
|
|
result := tx.
|
|
|
|
|
Model(&erdh.ResponsibleDoctorHist{}).
|
|
|
|
|
Where("\"Id\" = (?)", subQuery).
|
|
|
|
|
Update("\"FinishedAt\"", input.FinishedAt)
|
|
|
|
|
|
|
|
|
|
if result.Error != nil {
|
|
|
|
|
event.Status = "failed"
|
|
|
|
|
event.ErrInfo = pl.ErrorInfo{
|
|
|
|
|
Code: "data-update-fail",
|
|
|
|
|
Detail: "Database update failed",
|
|
|
|
|
Raw: result.Error,
|
|
|
|
|
}
|
|
|
|
|
return pl.SetLogError(event, input)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if result.RowsAffected == 0 {
|
|
|
|
|
pl.SetLogInfo(event, input, "no previous data found to update")
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pl.SetLogInfo(event, nil, "complete")
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func updateLatestAdmEmployeeHist(input e.CheckinDto, event *pl.Event, dbx ...*gorm.DB) error {
|
|
|
|
|
pl.SetLogInfo(event, "started", "DBUpdate")
|
|
|
|
|
|
|
|
|
|
var tx *gorm.DB
|
|
|
|
|
if len(dbx) > 0 {
|
|
|
|
|
tx = dbx[0]
|
|
|
|
|
} else {
|
|
|
|
|
tx = dg.I
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
subQuery := tx.
|
|
|
|
|
Select("\"Id\"").
|
|
|
|
|
Model(&eaeh.AdmEmployeeHist{}).
|
|
|
|
|
Where("\"Encounter_Id\" = ?", input.Id).
|
|
|
|
|
Order("\"CreatedAt\" DESC").
|
|
|
|
|
Limit(1)
|
|
|
|
|
|
|
|
|
|
result := tx.
|
|
|
|
|
Model(&eaeh.AdmEmployeeHist{}).
|
|
|
|
|
Where("\"Id\" = (?)", subQuery).
|
|
|
|
|
Update("\"FinishedAt\"", input.FinishedAt)
|
|
|
|
|
|
|
|
|
|
if result.Error != nil {
|
|
|
|
|
event.Status = "failed"
|
|
|
|
|
event.ErrInfo = pl.ErrorInfo{
|
|
|
|
|
Code: "data-update-fail",
|
|
|
|
|
Detail: "Database update failed",
|
|
|
|
|
Raw: result.Error,
|
|
|
|
|
}
|
|
|
|
|
return pl.SetLogError(event, input)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if result.RowsAffected == 0 {
|
|
|
|
|
pl.SetLogInfo(event, input, "no previous data found to update")
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pl.SetLogInfo(event, nil, "complete")
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func getSoapiByResponsibleDoctor(enc e.Encounter, event *pl.Event) (data []es.Soapi, err error) {
|
|
|
|
|
pl.SetLogInfo(event, enc, "started", "DBReadList")
|
|
|
|
|
|
|
|
|
@@ -856,6 +667,7 @@ func insertDataSubClassAmbulatory(input e.CreateDto, soapiData []es.CreateDto, e
|
|
|
|
|
Encounter_Id: &input.Id,
|
|
|
|
|
Status_Code: erc.DVCVerified,
|
|
|
|
|
SrcUnit_Code: input.Unit_Code,
|
|
|
|
|
Class_Code: ere.CCCAct,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// create data chemo
|
|
|
|
@@ -864,6 +676,12 @@ func insertDataSubClassAmbulatory(input e.CreateDto, soapiData []es.CreateDto, e
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// set chemo-plan to planned
|
|
|
|
|
_, err = updateChemoPlan(*input.Patient_Id, event, tx)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case subCode == ere.ACCRehab:
|
|
|
|
|
rehabData := er.CreateDto{
|
|
|
|
|
Encounter_Id: &input.Id,
|
|
|
|
@@ -1056,3 +874,32 @@ func validateDoctorCodes(doctorCodes map[string]struct{}, event *pl.Event) error
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func updateChemoPlan(patientId uint, event *pl.Event, dbx ...*gorm.DB) (*ecpl.ChemoPlan, error) {
|
|
|
|
|
pl.SetLogInfo(event, nil, "started", "getChemoFromEncounter")
|
|
|
|
|
data := ecpl.ChemoPlan{}
|
|
|
|
|
|
|
|
|
|
var tx *gorm.DB
|
|
|
|
|
if len(dbx) > 0 {
|
|
|
|
|
tx = dbx[0]
|
|
|
|
|
} else {
|
|
|
|
|
tx = dg.I
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tx = tx.Model(&ecpl.ChemoPlan{}).
|
|
|
|
|
Joins(`"ChemoProtocol" cp ON cp."Id" = "ChemoPlan"."Protocol_Id"`).
|
|
|
|
|
Where(`cp."Patient_Id" = ? AND ("ChemoPlan"."Status" IS NULL OR "ChemoPlan"."Status" = ?)`, patientId, ere.SPCSchedule).
|
|
|
|
|
Order(`"Id" ASC`).
|
|
|
|
|
Limit(1).First(&data)
|
|
|
|
|
|
|
|
|
|
if err := tx.Error; err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := tx.Model(&data).Update(`"Status"`, ere.SPCPlanned).Error; err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pl.SetLogInfo(event, nil, "complete")
|
|
|
|
|
return &data, nil
|
|
|
|
|
}
|