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.



The hit policy is the whole decision.