Skip to content

Commit 38d224c

Browse files
Casper BollenCasper Bollen
Casper Bollen
authored and
Casper Bollen
committed
fix: dose is solved and had values logic
1 parent d80c11d commit 38d224c

File tree

2 files changed

+49
-27
lines changed

2 files changed

+49
-27
lines changed

src/Informedica.GenOrder.Lib/Order.fs

+33-17
Original file line numberDiff line numberDiff line change
@@ -2350,30 +2350,46 @@ module Order =
23502350
reraise()
23512351

23522352

2353-
let checkOrderDose pred cmp (ord: Order) : bool =
2353+
let checkOrderDose pred op (ord: Order) : bool =
2354+
let checkRte rte = rte |> Rate.toOrdVar |> pred
2355+
let checkQty qty = qty |> Quantity.toOrdVar |> pred
2356+
2357+
let rates =
2358+
[
2359+
ord.Orderable.Dose.Rate
2360+
yield!
2361+
ord.Orderable.Components
2362+
|> List.map _.Dose
2363+
|> List.map _.Rate
2364+
]
2365+
2366+
let qtys =
2367+
[
2368+
ord.Orderable.Dose.Quantity
2369+
yield!
2370+
ord.Orderable.Components
2371+
|> List.map _.Dose
2372+
|> List.map _.Quantity
2373+
2374+
]
2375+
2376+
let isOr = true |> op <| false
2377+
23542378
match ord.Prescription with
23552379
| Continuous ->
2356-
ord.Orderable.Dose.Rate |> Rate.toOrdVar |> pred
2380+
if isOr then rates |> List.exists checkRte
2381+
else rates |> List.forall checkRte
2382+
| Timed (freq, _)
23572383
| Discontinuous freq ->
23582384
(freq |> Frequency.toOrdVar |> pred)
2359-
|> cmp <|
2360-
(ord.Orderable.Dose.Quantity |> Quantity.toOrdVar |> pred)
2361-
|> cmp <|
2362-
(ord.Orderable.Dose.PerTime |> PerTime.toOrdVar |> pred)
2385+
|> op <|
2386+
(if isOr then qtys |> List.exists checkQty else qtys |> List.forall checkQty)
23632387
| Once ->
2364-
(ord.Orderable.Dose.Quantity |> Quantity.toOrdVar |> pred)
2365-
| Timed (freq, tme) ->
2366-
(freq |> Frequency.toOrdVar |> pred)
2367-
|> cmp <|
2368-
(tme |> Time.toOrdVar |> pred)
2369-
|> cmp <|
2370-
(ord.Orderable.Dose.Quantity |> Quantity.toOrdVar |> pred)
2371-
|> cmp <|
2372-
(ord.Orderable.Dose.PerTime |> PerTime.toOrdVar |> pred)
2388+
qtys |> List.forall checkQty
23732389
| OnceTimed tme ->
23742390
(tme |> Time.toOrdVar |> pred)
2375-
|> cmp <|
2376-
(ord.Orderable.Dose.Quantity |> Quantity.toOrdVar |> pred)
2391+
|> op <|
2392+
(if isOr then qtys |> List.exists checkQty else qtys |> List.forall checkQty)
23772393

23782394

23792395
let doseIsSolved = checkOrderDose OrderVariable.isSolved (&&)

src/Informedica.GenOrder.Lib/Scripts/Scenarios.fsx

+16-10
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,10 @@ let checkCtx msg ctx =
9898
Patient.infant
9999
|> Patient.setWeight (10m |> Kilogram |> Some)
100100
|> PrescriptionContext.create
101-
|> PrescriptionContext.setFilterIndication "Chronische pijn"
102-
|> PrescriptionContext.setFilterGeneric "paracetamol"
103-
|> PrescriptionContext.setFilterShape "drank"
104-
|> PrescriptionContext.setFilterRoute "oraal"
101+
|> PrescriptionContext.setFilterIndication "Ernstige infectie, gram negatieve microorganismen"
102+
|> PrescriptionContext.setFilterGeneric "gentamicine"
103+
|> PrescriptionContext.setFilterShape "injectievloeistof"
104+
|> PrescriptionContext.setFilterRoute "intraveneus"
105105
|> checkCtx "inital setup"
106106
|> Api.evaluate
107107
|> checkCtx "first evaluation" //|> ignore
@@ -117,8 +117,8 @@ Patient.infant
117117
Order =
118118
let dto = s.Order |> Order.Dto.toDto
119119
dto.Prescription.Frequency.Variable.ValsOpt.Value.Value <-
120-
dto.Prescription.Frequency.Variable.ValsOpt.Value.Value[0]
121-
|> Array.singleton
120+
dto.Prescription.Frequency.Variable.ValsOpt.Value.Value
121+
|> Array.take 1
122122

123123
dto |> Order.Dto.fromDto
124124
}
@@ -138,10 +138,16 @@ Patient.infant
138138
{ s with
139139
Order =
140140
let dto = s.Order |> Order.Dto.toDto
141-
dto.Orderable.Dose.Quantity.Variable.ValsOpt.Value.Value <-
142-
dto.Orderable.Dose.Quantity.Variable.ValsOpt.Value.Value[0]
143-
|> Array.singleton
144-
141+
dto.Orderable.Components <-
142+
dto.Orderable.Components
143+
|> List.mapi (fun i cmp ->
144+
if i > 0 then cmp
145+
else
146+
cmp.Dose.Quantity.Variable.ValsOpt.Value.Value <-
147+
cmp.Dose.Quantity.Variable.ValsOpt.Value.Value
148+
|> Array.take 1
149+
cmp
150+
)
145151
dto |> Order.Dto.fromDto
146152
}
147153
)

0 commit comments

Comments
 (0)