From 7fd8bca3f893c3082d49ca4a2cff8fbe95a1f27b Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Tue, 30 Sep 2025 09:56:25 +0700 Subject: [PATCH 1/6] adjust for prescription item, medicinemix, medication item --- .../migrations/20250930025550.sql | 6 +++++ cmd/main-migration/migrations/atlas.sum | 7 +++--- .../main-entities/medication-item/dto.go | 7 ++++-- .../main-entities/medication-item/entity.go | 4 ++- .../main-entities/medicine-mix/entity.go | 3 +++ .../main-entities/prescription-item/dto.go | 25 +++++++++++++------ .../main-entities/prescription-item/entity.go | 4 ++- 7 files changed, 41 insertions(+), 15 deletions(-) create mode 100644 cmd/main-migration/migrations/20250930025550.sql diff --git a/cmd/main-migration/migrations/20250930025550.sql b/cmd/main-migration/migrations/20250930025550.sql new file mode 100644 index 00000000..cb24b7fc --- /dev/null +++ b/cmd/main-migration/migrations/20250930025550.sql @@ -0,0 +1,6 @@ +-- Modify "MedicationItem" table +ALTER TABLE "public"."MedicationItem" ALTER COLUMN "Usage" TYPE character varying(255), ADD COLUMN "Frequency" integer NULL, ADD COLUMN "Dose" numeric NULL; +-- Modify "PrescriptionItem" table +ALTER TABLE "public"."PrescriptionItem" ALTER COLUMN "Usage" TYPE character varying(255), ADD COLUMN "Frequency" integer NULL, ADD COLUMN "Dose" numeric NULL; +-- Modify "MedicineMix" table +ALTER TABLE "public"."MedicineMix" ADD COLUMN "Uom_Code" character varying(10) NULL, ADD CONSTRAINT "fk_MedicineMix_Uom" FOREIGN KEY ("Uom_Code") REFERENCES "public"."Uom" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION; diff --git a/cmd/main-migration/migrations/atlas.sum b/cmd/main-migration/migrations/atlas.sum index 9bdd6275..553c25ea 100644 --- a/cmd/main-migration/migrations/atlas.sum +++ b/cmd/main-migration/migrations/atlas.sum @@ -1,4 +1,4 @@ -h1:xkdKsHk/4s72juNsRgWubyMR4XEXjEQ38+XI4m/e/jM= +h1:Q2e6TNVbdE4yvg1W/bZvcNzYuBjy1kIT2z0QVbyWDYY= 20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k= 20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0= 20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI= @@ -17,5 +17,6 @@ h1:xkdKsHk/4s72juNsRgWubyMR4XEXjEQ38+XI4m/e/jM= 20250918074745.sql h1:2hNVQCXF/dVYXAh+T/7oBFgERGWxzVb2FXJjwkFWGCI= 20250923025134.sql h1:Ykz/qpHiGDXPsCsWTjydQFVSibZP2D+h2fIeb2h2JGA= 20250924051317.sql h1:yQuW6SwJxIOM5fcxeAaie5lSm1oLysU/C2hH2xNCVoQ= -20250929034321.sql h1:Pjs8W2zK7Q6Nwta/xpYE7YdfT+JfIMHjgWfDK2hnaEI= -20250929034428.sql h1:w3JomY0HxQJIdHA6Pq7mixJNi1YcO8NpQMjIfhNw+oA= +20250929034321.sql h1:101FJ8VH12mrZWlt/X1gvKUGOhoiF8tFbjiapAjnHzg= +20250929034428.sql h1:i+pROD9p+g5dOmmZma6WF/0Hw5g3Ha28NN85iTo1K34= +20250930025550.sql h1:cUvQcYn+4BoID3BGn2JriESuD7WactMf/fp48EFwtAA= diff --git a/internal/domain/main-entities/medication-item/dto.go b/internal/domain/main-entities/medication-item/dto.go index 00edb045..8267fde5 100644 --- a/internal/domain/main-entities/medication-item/dto.go +++ b/internal/domain/main-entities/medication-item/dto.go @@ -13,10 +13,13 @@ type CreateDto struct { IsMix bool `json:"isMix"` Medicine_Id *uint `json:"medicine_id"` MedicineMix_Id *uint `json:"medicineMix_id"` - Usage float64 `json:"usage"` + Frequency *uint16 `json:"frequency"` + Dose float64 `json:"dose"` + Usage string `json:"usage"` Interval uint8 `json:"interval"` IntervalUnit_Code erc.TimeUnitCode `json:"intervalUnit_code"` IsRedeemed bool `json:"isRedeemed"` + Quantity float64 `json:"quantity"` } type ReadListDto struct { @@ -67,7 +70,7 @@ type ResponseDto struct { Medicine *em.Medicine `json:"medicine,omitempty"` MedicineMix_Id *uint `json:"medicineMix_id"` MedicineMix *emm.MedicineMix `json:"medicineMix,omitempty"` - Usage float64 `json:"usage"` + Usage string `json:"usage"` Interval uint8 `json:"interval"` IntervalUnit_Code erc.TimeUnitCode `json:"intervalUnit_code"` IsRedeemed bool `json:"isRedeemed"` diff --git a/internal/domain/main-entities/medication-item/entity.go b/internal/domain/main-entities/medication-item/entity.go index e778cb50..ffef0761 100644 --- a/internal/domain/main-entities/medication-item/entity.go +++ b/internal/domain/main-entities/medication-item/entity.go @@ -18,7 +18,9 @@ type MedicationItem struct { Medicine *em.Medicine `json:"medicine,omitempty" gorm:"foreignKey:Medicine_Id;references:Id"` MedicineMix_Id *uint `json:"medicineMix_id"` MedicineMix *emm.MedicineMix `json:"medicineMix,omitempty" gorm:"foreignKey:MedicineMix_Id;references:Id"` - Usage float64 `json:"usage"` + Frequency *uint16 `json:"frequency"` + Dose float64 `json:"dose"` + Usage string `json:"usage" gorm:"size:255"` Interval uint8 `json:"interval"` IntervalUnit_Code erc.TimeUnitCode `json:"intervalUnit_code"` IsRedeemed bool `json:"isRedeemed"` diff --git a/internal/domain/main-entities/medicine-mix/entity.go b/internal/domain/main-entities/medicine-mix/entity.go index 6575d703..1b9edd4f 100644 --- a/internal/domain/main-entities/medicine-mix/entity.go +++ b/internal/domain/main-entities/medicine-mix/entity.go @@ -3,10 +3,13 @@ package medicinemix import ( ecore "simrs-vx/internal/domain/base-entities/core" emmi "simrs-vx/internal/domain/main-entities/medicine-mix-item" + eu "simrs-vx/internal/domain/main-entities/uom" ) type MedicineMix struct { ecore.Main // adjust this according to the needs Name string `json:"name" gorm:"size:50"` + Uom_Code *string `json:"uom_code" gorm:"size:10"` + Uom *eu.Uom `json:"uom" gorm:"foreignKey:Uom_Code;references:Code"` MixItems []*emmi.MedicineMixItem `json:"mixItems" gorm:"foreignKey:MedicineMix_Id;references:Id"` } diff --git a/internal/domain/main-entities/prescription-item/dto.go b/internal/domain/main-entities/prescription-item/dto.go index f23a6610..1926853d 100644 --- a/internal/domain/main-entities/prescription-item/dto.go +++ b/internal/domain/main-entities/prescription-item/dto.go @@ -9,13 +9,16 @@ import ( ) type CreateDto struct { - Prescription_Id *uint `json:"prescription_id"` - IsMix bool `json:"isMix"` - Medicine_Id *uint `json:"medicine_id"` - MedicineMix_Id *uint `json:"medicineMix_id"` - Usage float64 `json:"usage"` - Interval uint8 `json:"interval"` - IntervalUnit_Code erc.TimeUnitCode `json:"intervalUnit_code"` + Prescription_Id *uint `json:"prescription_id"` + IsMix bool `json:"isMix"` + Medicine_Id *uint `json:"medicine_id"` + MedicineMix_Id *uint `json:"medicineMix_id"` + Frequency *uint16 `json:"frequency"` + Dose float64 `json:"dose"` + Usage float64 `json:"usage"` + Interval uint8 `json:"interval"` + IntervalUnit_Code erc.TimeUnitCode `json:"intervalUnit_code"` + IntervalMultiplier *uint16 `json:"intervalMultiplier"` } type ReadListDto struct { @@ -65,9 +68,12 @@ type ResponseDto struct { Medicine *em.Medicine `json:"medicine,omitempty"` MedicineMix_Id *uint `json:"medicineMix_id"` MedicineMix *emm.MedicineMix `json:"medicineMix,omitempty"` - Usage float64 `json:"usage"` + Frequency *uint16 `json:"frequency"` + Dose float64 `json:"dose"` + Usage string `json:"usage"` Interval uint8 `json:"interval"` IntervalUnit_Code erc.TimeUnitCode `json:"intervalUnit_code"` + Quantity float64 `json:"quantity"` } func (d PrescriptionItem) ToResponse() ResponseDto { @@ -79,9 +85,12 @@ func (d PrescriptionItem) ToResponse() ResponseDto { Medicine: d.Medicine, MedicineMix_Id: d.MedicineMix_Id, MedicineMix: d.MedicineMix, + Frequency: d.Frequency, + Dose: d.Dose, Usage: d.Usage, Interval: d.Interval, IntervalUnit_Code: d.IntervalUnit_Code, + Quantity: d.Quantity, } resp.Main = d.Main return resp diff --git a/internal/domain/main-entities/prescription-item/entity.go b/internal/domain/main-entities/prescription-item/entity.go index 6ccf3ae4..33696385 100644 --- a/internal/domain/main-entities/prescription-item/entity.go +++ b/internal/domain/main-entities/prescription-item/entity.go @@ -18,7 +18,9 @@ type PrescriptionItem struct { Medicine *em.Medicine `json:"medicine,omitempty" gorm:"foreignKey:Medicine_Id;references:Id"` MedicineMix_Id *uint `json:"medicineMix_id"` MedicineMix *emm.MedicineMix `json:"medicineMix,omitempty" gorm:"foreignKey:MedicineMix_Id;references:Id"` - Usage float64 `json:"usage"` + Frequency *uint16 `json:"frequency"` + Dose float64 `json:"dose"` + Usage string `json:"usage" gorm:"size:255"` Interval uint8 `json:"interval"` IntervalUnit_Code erc.TimeUnitCode `json:"intervalUnit_code"` Quantity float64 `json:"quantity"` From 0f86c0827c342147ff949ea6e4981529155e83fd Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Tue, 30 Sep 2025 10:43:31 +0700 Subject: [PATCH 2/6] 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, From 74acd328bcaeabe27efdd3b9bfd612f3f0ce4bd9 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Tue, 30 Sep 2025 18:53:42 +0700 Subject: [PATCH 3/6] add validation --- internal/domain/main-entities/prescription-item/dto.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/domain/main-entities/prescription-item/dto.go b/internal/domain/main-entities/prescription-item/dto.go index 5abf902f..4c278b6f 100644 --- a/internal/domain/main-entities/prescription-item/dto.go +++ b/internal/domain/main-entities/prescription-item/dto.go @@ -13,12 +13,12 @@ type CreateDto struct { IsMix bool `json:"isMix"` Medicine_Id *uint `json:"medicine_id"` MedicineMix_Id *uint `json:"medicineMix_id"` - Frequency *uint16 `json:"frequency"` - Dose float64 `json:"dose"` + Frequency *uint16 `json:"frequency" validate:"required"` + Dose float64 `json:"dose" validate:"required"` Usage string `json:"usage"` Interval uint8 `json:"interval"` IntervalUnit_Code erc.TimeUnitCode `json:"intervalUnit_code"` - IntervalMultiplier *uint16 `json:"intervalMultiplier"` + IntervalMultiplier *uint16 `json:"intervalMultiplier" validate:"required"` Quantity float64 `json:"quantity"` } From c90529c847a51bbcc1bb38f43b63d557659a94a8 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Tue, 30 Sep 2025 21:05:11 +0700 Subject: [PATCH 4/6] rename CheckupCategory_Code into McuSrcCategory_Code --- cmd/main-migration/migrations/20250930140351.sql | 4 ++++ cmd/main-migration/migrations/atlas.sum | 5 +++-- internal/domain/main-entities/mcu-src/dto.go | 10 +++++----- internal/domain/main-entities/mcu-src/entity.go | 14 +++++++------- internal/use-case/main-use-case/mcu-src/helper.go | 2 +- 5 files changed, 20 insertions(+), 15 deletions(-) create mode 100644 cmd/main-migration/migrations/20250930140351.sql diff --git a/cmd/main-migration/migrations/20250930140351.sql b/cmd/main-migration/migrations/20250930140351.sql new file mode 100644 index 00000000..c98fd12a --- /dev/null +++ b/cmd/main-migration/migrations/20250930140351.sql @@ -0,0 +1,4 @@ +-- Rename a column from "CheckupCategory_Code" to "McuSrcCategory_Code" +ALTER TABLE "public"."McuSrc" RENAME COLUMN "CheckupCategory_Code" TO "McuSrcCategory_Code"; +-- Modify "McuSrc" table +ALTER TABLE "public"."McuSrc" DROP CONSTRAINT "fk_McuSrc_CheckupCategory", ADD CONSTRAINT "fk_McuSrc_McuSrcCategory" FOREIGN KEY ("McuSrcCategory_Code") REFERENCES "public"."McuSrcCategory" ("Code") ON UPDATE NO ACTION ON DELETE NO ACTION; diff --git a/cmd/main-migration/migrations/atlas.sum b/cmd/main-migration/migrations/atlas.sum index 553c25ea..4c7a0491 100644 --- a/cmd/main-migration/migrations/atlas.sum +++ b/cmd/main-migration/migrations/atlas.sum @@ -1,4 +1,4 @@ -h1:Q2e6TNVbdE4yvg1W/bZvcNzYuBjy1kIT2z0QVbyWDYY= +h1:X7LbOLpbDhciJ1O92KiWgnrVP60dDAyBKJqQKJnom+M= 20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k= 20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0= 20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI= @@ -19,4 +19,5 @@ h1:Q2e6TNVbdE4yvg1W/bZvcNzYuBjy1kIT2z0QVbyWDYY= 20250924051317.sql h1:yQuW6SwJxIOM5fcxeAaie5lSm1oLysU/C2hH2xNCVoQ= 20250929034321.sql h1:101FJ8VH12mrZWlt/X1gvKUGOhoiF8tFbjiapAjnHzg= 20250929034428.sql h1:i+pROD9p+g5dOmmZma6WF/0Hw5g3Ha28NN85iTo1K34= -20250930025550.sql h1:cUvQcYn+4BoID3BGn2JriESuD7WactMf/fp48EFwtAA= +20250930025550.sql h1:+F+CsCUXD/ql0tHGEow70GhPBX1ZybVn+bh/T4YMh7Y= +20250930140351.sql h1:aqXw0j09+xjFqemWlo0enw3tn/IT1FMxw3oUPljkjks= diff --git a/internal/domain/main-entities/mcu-src/dto.go b/internal/domain/main-entities/mcu-src/dto.go index 56ab9f57..a4fec862 100644 --- a/internal/domain/main-entities/mcu-src/dto.go +++ b/internal/domain/main-entities/mcu-src/dto.go @@ -58,11 +58,11 @@ type ResponseDto struct { func (d McuSrc) ToResponse() ResponseDto { resp := ResponseDto{ - Code: d.Code, - Name: d.Name, - CheckupCategory_Code: d.CheckupCategory_Code, - Item_Id: d.Item_Id, - Item: d.Item, + Code: d.Code, + Name: d.Name, + // CheckupCategory_Code: d.CheckupCategory_Code, + Item_Id: d.Item_Id, + Item: d.Item, } resp.Main = d.Main return resp diff --git a/internal/domain/main-entities/mcu-src/entity.go b/internal/domain/main-entities/mcu-src/entity.go index fbdb3f54..d3f4fca1 100644 --- a/internal/domain/main-entities/mcu-src/entity.go +++ b/internal/domain/main-entities/mcu-src/entity.go @@ -7,11 +7,11 @@ import ( ) type McuSrc struct { - ecore.Main // adjust this according to the needs - Code string `json:"code" gorm:"unique;size:20"` - Name string `json:"name" gorm:"size:50"` - CheckupCategory_Code *string `json:"checkupCategory_code" gorm:"size:20"` - CheckupCategory *emsc.McuSrcCategory `json:"checkupCategory,omitempty" gorm:"foreignKey:CheckupCategory_Code;references:Code"` - Item_Id *uint `json:"item_id"` - Item *ei.Item `json:"item,omitempty" gorm:"foreignKey:Item_Id;references:Id"` + ecore.Main // adjust this according to the needs + Code string `json:"code" gorm:"unique;size:20"` + Name string `json:"name" gorm:"size:50"` + McuSrcCategory_Code *string `json:"mcuSrcCategory_code" gorm:"size:20"` + McuSrcCategory *emsc.McuSrcCategory `json:"mcuSrcCategory,omitempty" gorm:"foreignKey:McuSrcCategory_Code;references:Code"` + Item_Id *uint `json:"item_id"` + Item *ei.Item `json:"item,omitempty" gorm:"foreignKey:Item_Id;references:Id"` } diff --git a/internal/use-case/main-use-case/mcu-src/helper.go b/internal/use-case/main-use-case/mcu-src/helper.go index 820dbfa7..abe07378 100644 --- a/internal/use-case/main-use-case/mcu-src/helper.go +++ b/internal/use-case/main-use-case/mcu-src/helper.go @@ -19,5 +19,5 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.McuSrc) { data.Code = inputSrc.Code data.Name = inputSrc.Name - data.CheckupCategory_Code = inputSrc.CheckupCategory_Code + // data.CheckupCategory_Code = inputSrc.CheckupCategory_Code } From c7242536c96bef48deda673d73219d6e2685316e Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Tue, 30 Sep 2025 21:10:04 +0700 Subject: [PATCH 5/6] feat (mcu-src): adjust after renaming CheckupCategory_code --- internal/domain/main-entities/mcu-src/dto.go | 34 +++++++++---------- .../use-case/main-use-case/mcu-src/helper.go | 29 +++++++++++++++- 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/internal/domain/main-entities/mcu-src/dto.go b/internal/domain/main-entities/mcu-src/dto.go index 63c45d51..7aa6c7e6 100644 --- a/internal/domain/main-entities/mcu-src/dto.go +++ b/internal/domain/main-entities/mcu-src/dto.go @@ -6,10 +6,10 @@ import ( ) type CreateDto struct { - Code string `json:"code" validate:"maxLength=20"` - Name string `json:"name" validate:"maxLength=50"` - CheckupCategory_Code *string `json:"checkupCategory_code" validate:"maxLength=20"` - Item_Id *uint `json:"item_id"` + Code string `json:"code" validate:"maxLength=20"` + Name string `json:"name" validate:"maxLength=50"` + McuSrcCategory_Code *string `json:"mcuSrcCategory_code" validate:"maxLength=20"` + Item_Id *uint `json:"item_id"` } type ReadListDto struct { @@ -19,9 +19,9 @@ type ReadListDto struct { } type FilterDto struct { - Code string `json:"code"` - Name string `json:"name"` - CheckupCategory_Code *string `json:"checkupCategory_code"` + Code string `json:"code"` + Name string `json:"name"` + McuSrcCategory_Code *string `json:"mcuSrcCategory_code"` Page int `json:"page"` PageSize int `json:"page_size"` @@ -50,20 +50,20 @@ type MetaDto struct { type ResponseDto struct { ecore.Main - Code string `json:"code"` - Name string `json:"name"` - CheckupCategory_Code *string `json:"checkupCategory_code"` - Item_Id *uint `json:"item_id"` - Item *ei.Item `json:"item,omitempty"` + Code string `json:"code"` + Name string `json:"name"` + McuSrcCategory_Code *string `json:"mcuSrcCategory_code"` + Item_Id *uint `json:"item_id"` + Item *ei.Item `json:"item,omitempty"` } func (d McuSrc) ToResponse() ResponseDto { resp := ResponseDto{ - Code: d.Code, - Name: d.Name, - // CheckupCategory_Code: d.CheckupCategory_Code, - Item_Id: d.Item_Id, - Item: d.Item, + Code: d.Code, + Name: d.Name, + McuSrcCategory_Code: d.McuSrcCategory_Code, + Item_Id: d.Item_Id, + Item: d.Item, } resp.Main = d.Main return resp diff --git a/internal/use-case/main-use-case/mcu-src/helper.go b/internal/use-case/main-use-case/mcu-src/helper.go index abe07378..9d808ca8 100644 --- a/internal/use-case/main-use-case/mcu-src/helper.go +++ b/internal/use-case/main-use-case/mcu-src/helper.go @@ -5,7 +5,17 @@ Any functions that are used internally by the use-case package mcusrc import ( + ei "simrs-vx/internal/domain/main-entities/item" e "simrs-vx/internal/domain/main-entities/mcu-src" + + ui "simrs-vx/internal/use-case/main-use-case/item" + + pl "simrs-vx/pkg/logger" + pu "simrs-vx/pkg/use-case-helper" + + ero "simrs-vx/internal/domain/references/organization" + + "gorm.io/gorm" ) func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.McuSrc) { @@ -19,5 +29,22 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.McuSrc) { data.Code = inputSrc.Code data.Name = inputSrc.Name - // data.CheckupCategory_Code = inputSrc.CheckupCategory_Code + data.McuSrcCategory_Code = inputSrc.McuSrcCategory_Code +} + +func createItem(input *e.CreateDto, event *pl.Event, tx *gorm.DB) error { + itemCreate := ei.CreateDto{ + Code: pu.AddPrefix("mcu-", input.Code), + Name: input.Name, + ItemGroup_Code: ero.ITGCMCU, + // Uom_Code: &input.Uom_Code, + // Infra_Id: input.Infra_Id, + } + item, err := ui.CreateData(itemCreate, event, tx) + if err != nil { + return err + } + + input.Item_Id = &item.Id + return nil } From d3bca381043f53123887c0b36dff409924cc4c91 Mon Sep 17 00:00:00 2001 From: dpurbosakti Date: Tue, 30 Sep 2025 21:20:32 +0700 Subject: [PATCH 6/6] feat (medication-item): add qty calculation if intervalMultiplier is not nil --- .../main-entities/medication-item/dto.go | 25 ++++++++++--------- .../main-use-case/medication-item/helper.go | 11 ++++++++ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/internal/domain/main-entities/medication-item/dto.go b/internal/domain/main-entities/medication-item/dto.go index c90be314..a43473d2 100644 --- a/internal/domain/main-entities/medication-item/dto.go +++ b/internal/domain/main-entities/medication-item/dto.go @@ -9,18 +9,19 @@ import ( ) type CreateDto struct { - Medication_Id *uint `json:"medication_id"` - IsMix bool `json:"isMix"` - Medicine_Id *uint `json:"medicine_id"` - MedicineMix_Id *uint `json:"medicineMix_id"` - Frequency *uint16 `json:"frequency"` - Dose float64 `json:"dose"` - Usage string `json:"usage"` - Interval uint8 `json:"interval"` - IntervalUnit_Code erc.TimeUnitCode `json:"intervalUnit_code"` - IsRedeemed bool `json:"isRedeemed"` - Quantity float64 `json:"quantity"` - Note *string `json:"note" gorm:"size:1024"` + Medication_Id *uint `json:"medication_id"` + IsMix bool `json:"isMix"` + Medicine_Id *uint `json:"medicine_id"` + MedicineMix_Id *uint `json:"medicineMix_id"` + Frequency *uint16 `json:"frequency"` + Dose float64 `json:"dose"` + Usage string `json:"usage"` + Interval uint8 `json:"interval"` + IntervalUnit_Code erc.TimeUnitCode `json:"intervalUnit_code"` + IsRedeemed bool `json:"isRedeemed"` + Quantity float64 `json:"quantity"` + Note *string `json:"note" gorm:"size:1024"` + IntervalMultiplier *uint16 `json:"intervalMultiplier"` } type ReadListDto struct { 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 aa3833d9..dcee2cac 100644 --- a/internal/use-case/main-use-case/medication-item/helper.go +++ b/internal/use-case/main-use-case/medication-item/helper.go @@ -29,4 +29,15 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.MedicationItem) { data.IsRedeemed = inputSrc.IsRedeemed data.Quantity = inputSrc.Quantity data.Note = inputSrc.Note + + if inputSrc.IntervalMultiplier != nil { + data.Quantity = countQty(*inputSrc) + } +} + +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 }