Approvals

Expense Approvals

How expense reports are submitted, who approves them, the approve/reject/mark-paid actions, and how separation of duties scopes department heads.

This page covers the approver side of expenses — how reports reach the queue, who can decide them, and the approve, reject, and mark-paid actions.

The expense status flow

DRAFT → SUBMITTED or PENDING_APPROVAL → APPROVED → PAID
                                         (or REJECTED / CANCELLED)

See Statuses and submission for the full status detail.

What happens on submit

When an employee submits a report (POST /api/expenses/:id/submit):

  • The report needs at least one line item.
  • If the organization requires receipts, every line item over the receipt threshold must have a receipt attached.
  • If a maximum report amount is set and the total exceeds it, submission is rejected.
  • If an auto-approve-below threshold is set and the total is under it, the report is APPROVED immediately.
  • Otherwise it becomes PENDING_APPROVAL (when approval is required) or SUBMITTED.

The assigned approver is the submitter's manager (reportsToId); if there's no manager, it falls back to the first active administrator or executive.

Who can approve

The expense approvals queue (GET /api/expenses/approvals) shows reports in SUBMITTED and PENDING_APPROVAL. You can approve a report if you are:

  • The assigned approver, or
  • The submitter's manager, or
  • An administrator or executive.
Department heads are department-scoped — always. A department head cannot approve a cross-department report even if they're the named approver. This is a separation-of-duties rule. You also cannot approve your own report unless you're an administrator.

Actions

ActionEndpointWhoNotes
ApprovePOST /api/expenses/:id/approveAssigned approver, manager, admin/execMoves the report to APPROVED.
RejectPOST /api/expenses/:id/rejectSame as approveReason required. Submitter notified at HIGH priority.
Mark paidPOST /api/expenses/:id/mark-paidAdmin/exec onlyReport must be APPROVED. Optional paymentReference and paymentMethod. A bulk mark-paid is also available to admin/exec.
CancelPOST /api/expenses/:id/cancelOwner (own) or admin/exec (any)Cannot cancel a PAID report.

Notifications

EventNotification
SubmitEXPENSE_APPROVAL_REQUIRED to the approver plus admins/execs.
ApproveEXPENSE_APPROVED to the submitter.
RejectEXPENSE_REJECTED to the submitter (HIGH priority).
Mark paidEXPENSE_PAID to the submitter.
Payment reminders. A scheduled reminder runs for reports that are approved but unpaid, so payments don't slip through the cracks.