Skip to content

Commit

Permalink
fix: correct processing of multiple norm qty values for renal rule
Browse files Browse the repository at this point in the history
  • Loading branch information
Casper Bollen authored and Casper Bollen committed Jul 6, 2024
1 parent 2c041c4 commit f70bb5c
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 8 deletions.
4 changes: 2 additions & 2 deletions src/Informedica.GenForm.Lib/DoseRule.fs
Original file line number Diff line number Diff line change
Expand Up @@ -831,7 +831,7 @@ cannot map {r}
|> fromTupleInclIncl du
NormQuantityAdjust =
r.NormQtyAdj
|> ValueUnit.withOptionalUnit duAdj
|> ValueUnit.withOptSingleAndOptUnit duAdj
QuantityAdjust =
(r.MinQtyAdj, r.MaxQtyAdj)
|> fromTupleInclIncl duAdj
Expand All @@ -840,7 +840,7 @@ cannot map {r}
|> fromTupleInclIncl duTime
NormPerTimeAdjust =
r.NormPerTimeAdj
|> ValueUnit.withOptionalUnit duAdjTime
|> ValueUnit.withOptSingleAndOptUnit duAdjTime
PerTimeAdjust =
(r.MinPerTimeAdj, r.MaxPerTimeAdj)
|> fromTupleInclIncl duAdjTime
Expand Down
13 changes: 8 additions & 5 deletions src/Informedica.GenForm.Lib/RenalRule.fs
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,12 @@ module RenalRule =
Substance = get "Substance"
MinQty = get "MinQty" |> toBrOpt
MaxQty = get "MaxQty" |> toBrOpt
NormQtyAdj = get "NormQtyAdj" |> String.replace " - " ";" |> toBrOpt
NormQtyAdj = get "NormQtyAdj" |> String.replace " - " ";" |> BigRational.toBrs
MinQtyAdj = get "MinQtyAdj" |> toBrOpt
MaxQtyAdj = get "MaxQtyAdj" |> toBrOpt
MinPerTime = get "MinPerTime" |> toBrOpt
MaxPerTime = get "MaxPerTime" |> toBrOpt
NormPerTimeAdj = get "NormPerTimeAdj" |> String.replace " - " ";" |> toBrOpt
NormPerTimeAdj = get "NormPerTimeAdj" |> String.replace " - " ";" |> BigRational.toBrs
MinPerTimeAdj = get "MinPerTimeAdj" |> toBrOpt
MaxPerTimeAdj = get "MaxPerTimeAdj" |> toBrOpt
MinRate = get "MinRate" |> toBrOpt
Expand Down Expand Up @@ -175,7 +175,7 @@ module RenalRule =
|> EGFR |> Some


let fromData (data : {| AdjustUnit: string; ContDial: string; DoseRed: string; DoseText: string; DoseType: string; DoseUnit: string; FreqUnit: string; Frequencies: BigRational array; Generic: string; Indication: string; IntDial: string; IntervalUnit: string; MaxAge: BigRational option; MaxGFR: BigRational option; MaxInterval: BigRational option; MaxPerTime: BigRational option; MaxPerTimeAdj: BigRational option; MaxQty: BigRational option; MaxQtyAdj: BigRational option; MaxRate: BigRational option; MaxRateAdj: BigRational option; MinAge: BigRational option; MinGFR: BigRational option; MinInterval: BigRational option; MinPerTime: BigRational option; MinPerTimeAdj: BigRational option; MinQty: BigRational option; MinQtyAdj: BigRational option; MinRate: BigRational option; MinRateAdj: BigRational option; NormPerTimeAdj: BigRational option; NormQtyAdj: BigRational option; PerDial: string; RateUnit: string; Route: string; Source: string; Substance: string |} array) =
let fromData (data : {| AdjustUnit: string; ContDial: string; DoseRed: string; DoseText: string; DoseType: string; DoseUnit: string; FreqUnit: string; Frequencies: BigRational array; Generic: string; Indication: string; IntDial: string; IntervalUnit: string; MaxAge: BigRational option; MaxGFR: BigRational option; MaxInterval: BigRational option; MaxPerTime: BigRational option; MaxPerTimeAdj: BigRational option; MaxQty: BigRational option; MaxQtyAdj: BigRational option; MaxRate: BigRational option; MaxRateAdj: BigRational option; MinAge: BigRational option; MinGFR: BigRational option; MinInterval: BigRational option; MinPerTime: BigRational option; MinPerTimeAdj: BigRational option; MinQty: BigRational option; MinQtyAdj: BigRational option; MinRate: BigRational option; MinRateAdj: BigRational option; NormPerTimeAdj: BigRational[]; NormQtyAdj: BigRational[]; PerDial: string; RateUnit: string; Route: string; Source: string; Substance: string |} array) =
data
|> Array.filter (fun r ->
r.Generic <> "" &&
Expand Down Expand Up @@ -295,10 +295,10 @@ module RenalRule =
(r.Substance |> LimitTarget.SubstanceLimitTarget)
(r.DoseRed |> DoseReduction.fromString)
((r.MinQty, r.MaxQty) |> fromTupleInclIncl du)
(r.NormQtyAdj |> ValueUnit.withOptionalUnit duAdj)
(r.NormQtyAdj |> ValueUnit.withArrayAndOptUnit duAdj)
((r.MinQtyAdj, r.MaxQtyAdj) |> fromTupleInclIncl duAdj)
((r.MinPerTime, r.MaxPerTime) |> fromTupleInclIncl duTime)
(r.NormPerTimeAdj |> ValueUnit.withOptionalUnit duAdjTime)
(r.NormPerTimeAdj |> ValueUnit.withArrayAndOptUnit duAdjTime)
((r.MinPerTimeAdj, r.MaxPerTimeAdj) |> fromTupleInclIncl duAdjTime)
((r.MinRate, r.MaxRate) |> fromTupleInclIncl duRate)
((r.MinRateAdj, r.MaxRateAdj) |> fromTupleInclIncl duAdjRate)
Expand Down Expand Up @@ -468,6 +468,7 @@ module RenalRule =
doseRule.Frequencies
|> Option.map (fun f -> vu / f)
)
printfn $"== going to apply:\n{rl}\nto:\n{dl}\nwith normQtyAdj:\n{normQtyAdj}\n\n"
{ dl with
Quantity =
dl.Quantity
Expand Down Expand Up @@ -514,5 +515,7 @@ module RenalRule =
rl.RateAdjust

}
|> fun x ->
printfn $"== result:\n{x}"; x
)
}
13 changes: 12 additions & 1 deletion src/Informedica.GenForm.Lib/Utils.fs
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ module Utils =
let ageFullTerm = 37N |> ValueUnit.singleWithUnit Units.Time.week


let withOptionalUnit u v =
let withOptSingleAndOptUnit u v =
match v, u with
| Some v, Some u ->
v
Expand All @@ -185,6 +185,17 @@ module Utils =
| _ -> None


let withArrayAndOptUnit u v =
if v |> Array.isEmpty then None
else
match u with
| Some u ->
v
|> ValueUnit.withUnit u
|> Some
| _ -> None


let toString prec vu =
ValueUnit.toStringDecimalDutchShortWithPrec prec vu
|> String.replace ";" ", "
Expand Down

0 comments on commit f70bb5c

Please sign in to comment.