Expense approval routing (DMN)
Routing decisions are where DMN pays off, because the answer is a person or a role rather than a number, and the rules change often.
#What this example shows
A category input matched against a list.
Amount bands controlling the approval level.
An output naming the approving role.
#Columns
Column | Type and meaning |
|---|---|
Amount (input) | number: claim total |
Category (input) | string: travel, equipment, entertainment, other |
Approver (output) | string: the approving role |
#The decision table
Hit policy: U (Unique). Cells are FEEL expressions, so a range, a list or a negation is a legal value; a dash means the input is irrelevant to that rule.
Amount | Category | Approver | Annotation |
|---|---|---|---|
< 100 | - | "line manager" | Auto-approved above receipts check |
[100..1000) | not("entertainment") | "line manager" | |
[100..1000) | "entertainment" | "department head" | Policy requires a second pair of eyes |
[1000..5000) | - | "department head" | |
>= 5000 | - | "finance director" |
#Making it your own
not("entertainment") is a FEEL negation, which saves listing every other category.
Return a role rather than a person, so the table survives people changing jobs.
Add a cost-centre input if approval depends on budget ownership.
#Related
The hit policy is the whole decision.
