Common patterns
Approval with rework
Approve, reject or send a request back for changes, and loop the revised request into review again.
An approval usually has three answers: approved, needs changes and rejected. "Needs changes" goes back to the requester, and the revised request returns to review through a merge gateway placed just before it.
process Expense approval
lanes Employee | Manager | Finance
lane Employee
start Expense submitted
lane Manager
xor #resubmitted
user Review expense
xor Expense approved?
yes -> Pay expense
needs changes -> Revise expense
no (default) -> Notify rejection
lane Finance
service Pay expense
end Expense paid
lane Employee
user Revise expense
-> #resubmitted
lane Manager
send Notify rejection
end Expense rejectedWhat to notice
xor #resubmittedsits before Review expense, so the review has one arrow in. The loop points to the merge, never straight back to the review.- Each outcome has its own named end event: Expense paid and Expense rejected.
- The requester and the approver are in different lanes.
Variations
- Second-level approval. Add a decision on the amount before review, such as "Amount over limit?", that routes large requests to a second approver in another lane.
- Reminders and escalation. Add a timer to the review task. See Deadlines and reminders.
The Purchase request example puts both together.