Hit Policies
HitPolicy
defines how the output of a decision is computed from the results of particular rules. The available
policies are based
on DMN Hit Policies
with small changes in naming for increased clarity. Each HitPolicy
comes with a dedicated evaluation method and return
type.
When in doubt, we recommend using the Single
policy as a default, as it is the most restrictive one. Alternatively,
First
is often the most intuitive and easy to reason about.
Each HitPolicy
has a dedicated evaluation method, which returns a type specific to that policy.
HitPolicy.Single
Allows for only one rule to be satisfied. Maps to the DMN Unique
policy.
val single: DecisionTable[In, Out, HitPolicy.Single] = DecisionTable(rules, name, HitPolicy.Single)
single.evaluateSingle(in)
HitPolicy.Distinct
Allows for multiple rules to be satisfied as long as they provide the same output. Maps to the DMN Any
policy.
val distinct: DecisionTable[In, Out, HitPolicy.Distinct] = DecisionTable(rules, name, HitPolicy.Distinct)
distinct.evaluateDistinct(in)
HitPolicy.First
The first satisfied rule defines the result, and others are ignored.
val first: DecisionTable[In, Out, HitPolicy.First] = DecisionTable(rules, name, HitPolicy.First)
first.evaluateFirst(in)
HitPolicy.Collect
Outputs are collected into a list.
val collect: DecisionTable[In, Out, HitPolicy.Collect] = DecisionTable(rules, name, HitPolicy.Collect)
collect.evaluateCollect(in)
HitPolicy.CollectSum
Outputs are combined together.
val collectSum: DecisionTable[In, Out, HitPolicy.CollectSum] = DecisionTable(rules, name, HitPolicy.CollectSum)
val merge: (Out[Value], Out[Value]) => Out[Value] = ???
collectSum.evaluateSum(in)(merge)
HitPolicy.CollectMin
The minimal output is returned.
val collectMin: DecisionTable[In, Out, HitPolicy.CollectMin] = DecisionTable(rules, name, HitPolicy.CollectMin)
given Ordering[Out[Value]] = ???
collectMin.evaluateMin(in)
HitPolicy.CollectMax
The maximal output is returned.
val collectMax: DecisionTable[In, Out, HitPolicy.CollectMax] = DecisionTable(rules, name, HitPolicy.CollectMax)
given Ordering[Out[Value]] = ???
collectMax.evaluateMax(in)
HitPolicy.CollectCount
The number of satisfied rules is returned.
val collectCount: DecisionTable[In, Out, HitPolicy.CollectCount] = DecisionTable(rules, name, HitPolicy.CollectCount)
collectCount.evaluateCount(in)