Approvals
Goal
Review and decide on approval requests routed by the tenant’s approval matrix (extensibility), separate from the broader My Work inbox.
Who it is for
Approvers and supervisors with approvals.view. Acting on a request also needs approvals.act. Module: extensibility.
Preconditions
- Module extensibility enabled for the tenant.
- Permission
approvals.view(route meta). Without it, staff routing sends you to Dashboard. - Approval policies configured under Extensibility (needs
extensibility.view/extensibility.manageon the policies screen — not this list). - Your membership role names must match the step’s allowed roles; the decide API does not accept roles from the request body.
Open the screen
Administration → Extensibility → Approvals (path /approvals). Title: Approvals. Subtitle: Pending approvals routed by the approval matrix.
My Work may deep-link with ?pending=1; the Approvals list view currently loads the full queue from GET /approvals (it does not filter on that query in the Vue screen).
Steps
- Open the Approvals list. Columns: Entity, Amount, Roles, Status.
- Status values: Pending, Approved, Rejected, Cancelled.
- Empty state: No approval requests.
- On a Pending row, if you have
approvals.act, choose Approve or Reject. - Confirm; toast Decision recorded. Backend:
POST /approvals/{id}/decidewithdecision: approve|rejectand optionalnotes.
Result
The request status updates. Downstream documents or workflows continue only when approved (per that entity’s posting/approval rules). Rejected requests stay visible with status Rejected.
Hard stops
- No
approvals.act→ Approve/Reject buttons hidden. - Decide without a matching membership role → domain/422 error surfaced via notify.
- Missing module or
approvals.view→ redirect to Dashboard. - Do not confuse with POS approvals, HR approvals, or expense-claim queues — those appear in My Work (and their own screens), not necessarily here.