Approval Workflow Flowchart
The code
flowchart TD
A[Request submitted] --> B[Manager review]
B --> C{Manager approves?}
C -- No --> D[Return to requester]
D --> A
C -- Yes --> E{Amount over 5000?}
E -- Yes --> F[Finance director review]
F --> G{Director approves?}
G -- No --> D
G -- Yes --> H[Process payment]
E -- No --> H
H --> I[Notify requester]
I --> J((Request approved))
How this template works
This template models the signoff chain behind expense requests, purchase orders, time-off approvals, or any decision where money changes hands. The defining feature is the amount threshold: small requests sail through with one approval, while larger ones automatically pick up a second reviewer. Finance teams use it to prove that the control policy is actually followed, and the diagram is often the artifact auditors ask for first.
The syntax shows a loop back to the very beginning. flowchart TD keeps the hierarchy vertical, with the requester’s entry node at the top. The rectangle B[Manager review] is the first human step, and C{Manager approves?} is its outcome gate. The rejection path is the interesting part: C -- No --> D[Return to requester] followed by D --> A sends the request back to the start node, so a revision re-enters the process exactly where a fresh request would. The threshold diamond E{Amount over 5000?} then decides whether the finance director joins the chain, and its No branch E -- No --> H skips straight to payment — a skip edge like this is how you show that a step is conditional rather than optional. Both approval paths converge on H[Process payment], and the terminator J((Request approved)) uses double parentheses to mark the end state.
The gotcha is currency formatting. A label written as E{Amount over $5,000?} will break the render, because the comma inside an unquoted label confuses the parser about where the node ends. Quote the whole label — E{"Amount over $5,000?"} — and it renders fine. The same rule applies to edge labels with punctuation. The second trap is the restart loop: D --> A must reference the exact id of the entry node, so if you rename A to something more descriptive, update the loop edge too, or you will get a phantom node.
To adapt it, set the threshold to your real policy number, add more levels for bigger amounts, and consider a delegation node for approvers who are on vacation. If rejections should terminate rather than loop, point the No branch at a rejected terminator instead.
Related templates: the customer support triage flowchart for another threshold-driven routing rule, the swimlane process flowchart for showing which team owns each approval step, and the decision tree flowchart for multi-question routing without money involved. The flowchart diagram guide explains every edge label form.
Variations to try
- Add a second threshold diamond for amounts over 50000 that routes to the CFO as a third level.
- Replace the return step with revise and resubmit nodes if your form tool tracks request versions.
- Change the threshold label to your real policy number and currency before sharing with the team.