wip encounter + medication

This commit is contained in:
dpurbosakti
2025-09-17 11:47:03 +07:00
parent c8e32e8239
commit 86a073164d
14 changed files with 164 additions and 57 deletions
@@ -8,7 +8,17 @@ import (
"errors"
e "simrs-vx/internal/domain/main-entities/encounter"
es "simrs-vx/internal/domain/main-entities/soapi"
// ep "simrs-vx/internal/domain/main-entities/prescription"
// epi "simrs-vx/internal/domain/main-entities/prescription-item"
// em "simrs-vx/internal/domain/main-entities/medication"
// up "simrs-vx/internal/use-case/main-use-case/prescription"
// upi "simrs-vx/internal/use-case/main-use-case/prescription-item"
// um "simrs-vx/internal/use-case/main-use-case/medication"
pl "simrs-vx/pkg/logger"
// pu "simrs-vx/pkg/use-case-helper"
erc "simrs-vx/internal/domain/references/common"
ero "simrs-vx/internal/domain/references/organization"
@@ -98,3 +108,44 @@ func checkSoapiByDocExists(encounter_id uint, event *pl.Event, tx *gorm.DB) erro
}
return pl.SetLogError(event, nil)
}
// func createMedication(encounter_id uint, event *pl.Event, tx *gorm.DB) error {
// pl.SetLogInfo(event, nil, "started", "createMedication")
// prescription, err := up.ReadDetailData(ep.ReadDetailDto{Id: encounter_id}, event, tx)
// if err != nil {
// return err
// }
// prescriptionItem, _, err := upi.ReadListData(epi.ReadListDto{FilterDto: epi.FilterDto{Prescription_Id: &prescription.Id}}, event, tx)
// if err != nil {
// return err
// }
// if len(prescriptionItem) == 0 {
// return nil
// }
// medicationCreate := em.CreateDto{
// Encounter_Id: &encounter_id,
// IssuedAt: pu.GetTimeNow(),
// }
// medication, err := um.CreateData(medicationCreate, event, tx)
// if err != nil {
// return err
// }
// for _, prescriptionItem := range prescriptionItem {
// if prescriptionItem.IsMix {
// continue
// }
// // medication, err := um.ReadDetailData(e.ReadDetailDto{Id: prescriptionItem.Medication_Id}, event, tx)
// // if err != nil {
// // return err
// // }
// // if medication.IsCompleted() {
// // continue
// // }
// // createMedicationItemDist(medication.Id, event, tx)
// }
// }
@@ -332,6 +332,10 @@ func Complete(input e.ReadDetailDto) (*d.Data, error) {
return pl.SetLogError(&event, input)
}
if err := createMedicationItemDist(&data.Id, &event, tx); err != nil {
return err
}
pl.SetLogInfo(&event, nil, "complete")
return nil
})
@@ -6,10 +6,17 @@ package medication
import (
e "simrs-vx/internal/domain/main-entities/medication"
// emi "simrs-vx/internal/domain/main-entities/medication-item"
// emid "simrs-vx/internal/domain/main-entities/medication-item-dist"
// umi "simrs-vx/internal/use-case/main-use-case/medication-item"
// umid "simrs-vx/internal/use-case/main-use-case/medication-item-dist"
emi "simrs-vx/internal/domain/main-entities/medication-item"
emid "simrs-vx/internal/domain/main-entities/medication-item-dist"
umi "simrs-vx/internal/use-case/main-use-case/medication-item"
umid "simrs-vx/internal/use-case/main-use-case/medication-item-dist"
pl "simrs-vx/pkg/logger"
pu "simrs-vx/pkg/use-case-helper"
dg "github.com/karincake/apem/db-gorm-pg"
"gorm.io/gorm"
)
func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Medication) {
@@ -27,32 +34,32 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Medication) {
data.Status_Code = inputSrc.Status_Code
}
// func createMedicationItemDist(medication_id *uint, event *pl.Event, dbx ...*gorm.DB) error {
// pl.SetLogInfo(event, nil, "started", "createMedicationItemDist")
// var tx *gorm.DB
// if len(dbx) > 0 {
// tx = dbx[0]
// } else {
// tx = dg.I
// }
func createMedicationItemDist(medication_id *uint, event *pl.Event, dbx ...*gorm.DB) error {
pl.SetLogInfo(event, nil, "started", "createMedicationItemDist")
var tx *gorm.DB
if len(dbx) > 0 {
tx = dbx[0]
} else {
tx = dg.I
}
// filterMI := emi.ReadListDto{FilterDto: emi.FilterDto{Medication_Id: medication_id, IsRedeemed: true}}
// medicationItemList, _, err := umi.ReadListData(filterMI, event, tx)
// if err != nil {
// return err
// }
// for _, medicationItem := range medicationItemList {
// midCreate := emid.CreateDto{
// MedicationItem_Id: &medicationItem.Id,
// DateTime: medicationItem.MedicationItem.DateTime,
// Remain: medicationItem.MedicationItem.Remain,
// Nurse_Id: medicationItem.MedicationItem.Nurse_Id,
// }
// if err := umid.Create(midCreate); err != nil {
// return err
// }
// }
filterMI := emi.ReadListDto{FilterDto: emi.FilterDto{Medication_Id: medication_id, IsRedeemed: true}}
medicationItemList, _, err := umi.ReadListData(filterMI, event, tx)
if err != nil {
return err
}
// Nurse id isn't set here because it will be set when medItemDist is consumed by the nurse who is logged in and performing the consume action, so it isn't needed here.
for _, medicationItem := range medicationItemList {
midCreate := emid.CreateDto{
MedicationItem_Id: &medicationItem.Id,
DateTime: pu.GetTimeNow(),
Remain: medicationItem.Quantity,
}
if _, err := umid.CreateData(midCreate, event, tx); err != nil {
return err
}
}
// pl.SetLogInfo(event, nil, "complete")
// return nil
// }
pl.SetLogInfo(event, nil, "complete")
return nil
}
@@ -96,7 +96,15 @@ func ReadDetailData(input e.ReadDetailDto, event *pl.Event, dbx ...*gorm.DB) (*e
tx = dg.I
}
if err := tx.First(&data, input.Id).Error; err != nil {
if input.Encounter_Id != nil {
tx = tx.Where("\"Encounter_Id\" = ?", *input.Encounter_Id)
}
if input.Id != 0 {
tx = tx.Where("\"Id\" = ?", input.Id)
}
if err := tx.First(&data).Error; err != nil {
if processedErr := pu.HandleReadError(err, event, source, input.Id, data); processedErr != nil {
return nil, processedErr
}
@@ -24,4 +24,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.PrescriptionItem) {
data.Usage = inputSrc.Usage
data.Interval = inputSrc.Interval
data.IntervalUnit_Code = inputSrc.IntervalUnit_Code
data.Quantity = inputSrc.Quantity
}
@@ -20,4 +20,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Prescription) {
data.Encounter_Id = inputSrc.Encounter_Id
data.Doctor_Id = inputSrc.Doctor_Id
data.IssuedAt = inputSrc.IssuedAt
data.Status_Code = inputSrc.Status_Code
}
@@ -96,7 +96,15 @@ func ReadDetailData(input e.ReadDetailDto, event *pl.Event, dbx ...*gorm.DB) (*e
tx = dg.I
}
if err := tx.First(&data, input.Id).Error; err != nil {
if input.Encounter_Id != nil {
tx = tx.Where("\"Encounter_Id\" = ?", *input.Encounter_Id)
}
if input.Id != 0 {
tx = tx.Where("\"Id\" = ?", input.Id)
}
if err := tx.First(&data).Error; err != nil {
if processedErr := pu.HandleReadError(err, event, source, input.Id, data); processedErr != nil {
return nil, processedErr
}