From 0f86c0827c342147ff949ea6e4981529155e83fd Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Tue, 30 Sep 2025 10:43:31 +0700 Subject: [PATCH] feat (prescription-item, medicine-mix, medication-item): adjust field, calculate qty --- internal/domain/main-entities/medication-item/dto.go | 1 - internal/domain/main-entities/medicine-mix/dto.go | 8 ++++++-- internal/domain/main-entities/prescription-item/dto.go | 3 ++- internal/use-case/main-use-case/encounter/helper.go | 4 +++- .../use-case/main-use-case/medication-item/helper.go | 4 ++++ internal/use-case/main-use-case/medicine-mix/helper.go | 1 + .../use-case/main-use-case/prescription-item/case.go | 2 ++ .../use-case/main-use-case/prescription-item/helper.go | 9 +++++++++ internal/use-case/main-use-case/prescription/helper.go | 5 ++++- 9 files changed, 31 insertions(+), 6 deletions(-) diff --git a/internal/domain/main-entities/medication-item/dto.go b/internal/domain/main-entities/medication-item/dto.go index 9f26cebb..c90be314 100644 --- a/internal/domain/main-entities/medication-item/dto.go +++ b/internal/domain/main-entities/medication-item/dto.go @@ -20,7 +20,6 @@ type CreateDto struct { IntervalUnit_Code erc.TimeUnitCode `json:"intervalUnit_code"` IsRedeemed bool `json:"isRedeemed"` Quantity float64 `json:"quantity"` - Quantity float64 `json:"quantity"` Note *string `json:"note" gorm:"size:1024"` } diff --git a/internal/domain/main-entities/medicine-mix/dto.go b/internal/domain/main-entities/medicine-mix/dto.go index 05b67a06..6f7cd424 100644 --- a/internal/domain/main-entities/medicine-mix/dto.go +++ b/internal/domain/main-entities/medicine-mix/dto.go @@ -7,11 +7,13 @@ import ( ) type CreateDto struct { - Name string `json:"name" validate:"maxLength=50"` + Name string `json:"name" validate:"maxLength=50"` + Uom_Code *string `json:"uom_code" validate:"maxLength=10"` } type ReadListDto struct { - Name string `json:"name"` + Name string `json:"name"` + Uom_Code *string `json:"uom_code"` Page int `json:"page"` PageSize int `json:"page_size"` @@ -40,12 +42,14 @@ type MetaDto struct { type ResponseDto struct { ecore.Main Name string `json:"name"` + Uom_Code *string `json:"uom_code"` MixItems []*emmi.MedicineMixItem `json:"mixItems"` } func (d MedicineMix) ToResponse() ResponseDto { resp := ResponseDto{ Name: d.Name, + Uom_Code: d.Uom_Code, MixItems: d.MixItems, } resp.Main = d.Main diff --git a/internal/domain/main-entities/prescription-item/dto.go b/internal/domain/main-entities/prescription-item/dto.go index 44636535..5abf902f 100644 --- a/internal/domain/main-entities/prescription-item/dto.go +++ b/internal/domain/main-entities/prescription-item/dto.go @@ -15,10 +15,11 @@ type CreateDto struct { MedicineMix_Id *uint `json:"medicineMix_id"` Frequency *uint16 `json:"frequency"` Dose float64 `json:"dose"` - Usage float64 `json:"usage"` + Usage string `json:"usage"` Interval uint8 `json:"interval"` IntervalUnit_Code erc.TimeUnitCode `json:"intervalUnit_code"` IntervalMultiplier *uint16 `json:"intervalMultiplier"` + Quantity float64 `json:"quantity"` } type ReadListDto struct { diff --git a/internal/use-case/main-use-case/encounter/helper.go b/internal/use-case/main-use-case/encounter/helper.go index 035577df..8d9ea44d 100644 --- a/internal/use-case/main-use-case/encounter/helper.go +++ b/internal/use-case/main-use-case/encounter/helper.go @@ -142,6 +142,7 @@ func createMedication(encounter_id uint, event *pl.Event, tx *gorm.DB) error { medicationCreate := em.CreateDto{ Encounter_Id: &encounter_id, IssuedAt: pu.GetTimeNow(), + Status_Code: erc.DSCNew, } medication, err := um.CreateData(medicationCreate, event, tx) if err != nil { @@ -168,7 +169,8 @@ func createMedicineMixAndItem(input emi.MedicineMix, event *pl.Event, tx *gorm.D pl.SetLogInfo(event, nil, "started", "createMedicineMix") medicineMixCreate := emi.CreateDto{ - Name: input.Name, + Name: input.Name, + Uom_Code: input.Uom_Code, } medicineMix, err := umi.CreateData(medicineMixCreate, event, tx) if err != nil { diff --git a/internal/use-case/main-use-case/medication-item/helper.go b/internal/use-case/main-use-case/medication-item/helper.go index c3c07b36..aa3833d9 100644 --- a/internal/use-case/main-use-case/medication-item/helper.go +++ b/internal/use-case/main-use-case/medication-item/helper.go @@ -21,8 +21,12 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.MedicationItem) { data.IsMix = inputSrc.IsMix data.Medicine_Id = inputSrc.Medicine_Id data.MedicineMix_Id = inputSrc.MedicineMix_Id + data.Frequency = inputSrc.Frequency + data.Dose = inputSrc.Dose data.Usage = inputSrc.Usage data.Interval = inputSrc.Interval data.IntervalUnit_Code = inputSrc.IntervalUnit_Code data.IsRedeemed = inputSrc.IsRedeemed + data.Quantity = inputSrc.Quantity + data.Note = inputSrc.Note } diff --git a/internal/use-case/main-use-case/medicine-mix/helper.go b/internal/use-case/main-use-case/medicine-mix/helper.go index bd0892e0..1427fa49 100644 --- a/internal/use-case/main-use-case/medicine-mix/helper.go +++ b/internal/use-case/main-use-case/medicine-mix/helper.go @@ -18,4 +18,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.MedicineMix) { } data.Name = inputSrc.Name + data.Uom_Code = inputSrc.Uom_Code } diff --git a/internal/use-case/main-use-case/prescription-item/case.go b/internal/use-case/main-use-case/prescription-item/case.go index a6dd7be1..c068344d 100644 --- a/internal/use-case/main-use-case/prescription-item/case.go +++ b/internal/use-case/main-use-case/prescription-item/case.go @@ -35,6 +35,8 @@ func Create(input e.CreateDto) (*d.Data, error) { return err } + input.Quantity = countQty(input) + if resData, err := CreateData(input, &event, tx); err != nil { return err } else { diff --git a/internal/use-case/main-use-case/prescription-item/helper.go b/internal/use-case/main-use-case/prescription-item/helper.go index 47efc3f9..3f627ddf 100644 --- a/internal/use-case/main-use-case/prescription-item/helper.go +++ b/internal/use-case/main-use-case/prescription-item/helper.go @@ -21,8 +21,17 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.PrescriptionItem) { data.IsMix = inputSrc.IsMix data.Medicine_Id = inputSrc.Medicine_Id data.MedicineMix_Id = inputSrc.MedicineMix_Id + data.Frequency = inputSrc.Frequency + data.Dose = inputSrc.Dose data.Usage = inputSrc.Usage data.Interval = inputSrc.Interval data.IntervalUnit_Code = inputSrc.IntervalUnit_Code data.Quantity = inputSrc.Quantity } + +func countQty(input e.CreateDto) float64 { + if input.Frequency != nil && input.Dose != 0 && input.IntervalMultiplier != nil { + return (float64(*input.Frequency) * float64(input.Dose)) * float64(*input.IntervalMultiplier) + } + return 0 +} diff --git a/internal/use-case/main-use-case/prescription/helper.go b/internal/use-case/main-use-case/prescription/helper.go index 7c61469b..ee0b23b3 100644 --- a/internal/use-case/main-use-case/prescription/helper.go +++ b/internal/use-case/main-use-case/prescription/helper.go @@ -85,7 +85,8 @@ func createMedicineMixAndItem(input emi.MedicineMix, event *pl.Event, tx *gorm.D pl.SetLogInfo(event, nil, "started", "createMedicineMix") medicineMixCreate := emi.CreateDto{ - Name: input.Name, + Name: input.Name, + Uom_Code: input.Uom_Code, } medicineMix, err := umi.CreateData(medicineMixCreate, event, tx) if err != nil { @@ -116,6 +117,8 @@ func createMedicationItem(medication_id uint, input epi.PrescriptionItem, event IsMix: input.IsMix, Medicine_Id: input.Medicine_Id, MedicineMix_Id: input.MedicineMix_Id, + Frequency: input.Frequency, + Dose: input.Dose, Usage: input.Usage, Interval: input.Interval, IntervalUnit_Code: input.IntervalUnit_Code,