Core
Approvals
Workflow studio — no-code multi-step approvals by document type, assignees, conditions, due times, escalation, and the My Approvals inbox.
Which documents can require approval
| Document key | Value used for step thresholds | On approve |
|---|---|---|
purchase_request | Total amount | Status → approved; can be converted to RFQ/PO |
purchase_order | Total amount | Status → confirmed; budget commitment reserved |
purchase_invoice | Total amount | Status → approved; can be posted |
sales_order | Total amount | Status → confirmed |
quotation | Total amount | Status → sent/accepted path |
leave_request | Days | Balance deducted, status → approved |
expense_report | Total amount | Status → approved |
travel_request | Estimated amount | Status → approved |
cash_advance | Amount | Status → approved |
job_requisition | Budget max | Status → approved |
job_offer | Base salary | Status → approved |
timesheet | Total hours | Status → approved |
promotion | Planned spend | Promotion activated |
accounting_period_unlock | — | Locked period reopened |
project_budget | Planned cost | Budget status → approved / locked |
Workflow studio (/approval-workflows)
Build a no-code multi-step path per document type:
- Toggle Require approval for the document type (off = submit auto-finalizes).
- Create a workflow (one active per document type).
- Optional start conditions — the workflow only starts when all match (e.g. value ≥ 1000, or a partner/warehouse attribute).
- Add steps on the vertical canvas (reorder with arrows). Each step can have:
- Assignee — role, a specific user, or the submitter’s line manager
- Min / max on the document value (amount, days, hours…)
- Extra conditions (attribute + operator + value)
- Due in hours and escalate to role if overdue
- Toggle active.
When a document is submitted, matching steps are frozen into a snapshot on the approval request. Editing the studio afterward does not change in-flight requests.
My Approvals (/approvals)
Your inbox of requests waiting for your role, your user assignment, or an escalated role. Approve or reject inline (with a comment), or open the document. Each step is recorded with the approver and timestamp. Overdue steps with an escalate role are reassigned automatically (every 15 minutes).
Submit behaviour
When a user submits a document:
- If approval is not required for its type → the document is approved immediately.
- If required but no active workflow → the document stays submitted for a legacy
*.approvepermission. - If a workflow exists → an approval request is created with the matching steps (and snapshot); the document shows "Waiting for approval — step 1 of N".
- When every step is approved → the registry's
on_approvedhook runs and the status advances. - A rejection sets the document to rejected; the owner can edit and re-submit as a new request.
- If required + workflow but no steps match (thresholds/conditions) → auto-finalize as approved.
Related gates that are not workflows
- Credit management blocks sales orders over the customer's credit limit until released.
- Period lock blocks posting into locked periods; unlocking itself is an approval (
accounting_period_unlock). - Supplier onboarding approves bank-detail changes submitted through the supplier portal.