Skip to main content

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)