Expense approvals

Expenses Applies to: Managers and up

Expense Approvals lists every submitted claim whose current approval step is yours to decide. Claims move through a chain of one or more steps; you only see a claim while its active step names you or a role you hold. Approve, reject with a reason, or send it back to the employee for changes.

Who can do this: Managers with `expenses.approve.direct_reports` for their direct reports; HR Managers and Accounts with `expenses.approve.assigned_companies` for role-based steps in their company; Admins with `expenses.approve.any` for any claim. Overriding a hard policy block needs `expenses.approve.any` or `roles.manage`.

Where to find it

Expenses → Expense Approvals in the admin view, at `/expense-approvals`. The sidebar badge counts claims waiting on you. Each claim title links to its detail page at `/my-expenses/{id}` with every line, receipt and the full chain. An employee's claims are also listed read-only on their profile under People → Employees → Expenses.

Expense Approvals queue for a manager showing three submitted claims with Approve, Reject and Send back buttons and a checkbox on each
Expense Approvals queue for a manager showing three submitted claims with Approve, Reject and Send back buttons and a checkbox on each

Deciding a single claim

  1. Click the title to open the detail page. Check each line's category, date, merchant, INR amount, receipts and policy chips. Amber chips are warnings; red chips are hard blocks.
  2. Back in the queue, click one of:
  • Approve. Your step is marked approved. If the chain has a later step, the claim moves on and the next approver is notified; otherwise the claim becomes Approved.
  • Reject. A prompt asks "Reason for rejection:". The reason is required (up to 2000 characters), stored on the claim, and emailed to the employee. The claim is final.
  • Send back. A prompt asks "What needs changing?". The comment is required. The claim returns to Draft with its lines and receipts, the chain is discarded, and the employee is notified in-app. When they resubmit, the chain is rebuilt from scratch.

Approving in bulk

  1. Tick the checkbox on each claim. A bar shows "N selected" with Approve and Reject.
  2. Approve approves every selected claim at your step. Reject asks for one reason and applies it to all.
  3. Each claim is processed independently. One that cannot be actioned (a hard block, or it moved on since you loaded the page) is skipped without a message and stays in the list. Approve those individually from their own Approve button, which shows the reason.

Policy overrides

When you click Approve on a claim that has a red block chip (missing receipt or over-limit on a category with Block over-limit on submit):

  • If you are an HR Manager or Admin, a prompt reads "This claim exceeds policy limits. Enter a reason to override and approve:" followed by the violations. Enter a reason to approve. The override and reason are written to the audit log as `expense_claim.policy_overridden`.
  • Otherwise you see "Only HR/Admin can override policy violations." Use Send back so the employee can fix the line, or ask HR to decide.
Admin view of Expense Approvals showing two submitted claims from different employees
Admin view of Expense Approvals showing two submitted claims from different employees

What the chain shows

On the detail page, Approval chain lists each step as "#1 Role: Accounts" or "#2 Approver #id" with its status.

Step statusMeaning
PendingNot reached, or active now
ApprovedDecided in favour
RejectedDecided against; the claim is Rejected
SkippedBelow the step's amount threshold, or made redundant by a rejection, withdrawal or override

What happens next

  • Approve on the final step: the employee gets an email and in-app notification, a linked cash advance is settled, and the claim appears in Reimbursements for Accounts.
  • Approve on an earlier step: the next step's approver (a named user, or every holder of the role in the claim's company) is notified.
  • Reject: employee emailed with your reason. Send back: in-app notice only.
  • Every action is journalled on the claim and logged (`expense_claim.approved`, `expense_claim.rejected`, `expense_claim.sent_back`).

Rules and limits

  • You can only act on the active step. A claim is in your queue if that step names you, or names a role you hold in the claim's company and you have company-scoped approve rights. Admins can act on any active step.
  • Managers see only claims where they are the named approver, normally their direct reports' claims.
  • An employee can withdraw a submitted claim before the final decision; it disappears from your queue.
  • There is no stand-in or delegation setting for approvers. If you will be away, ask HR to add a Specific user step to the relevant rule, or let an HR Manager or Admin decide the claim.

Troubleshooting

A claim I expect is not in my queue. The active step may be a later one, or it names a role rather than you. Open the employee's profile Expenses tab to see the claim's status and chain.

Approve shows an alert about HR/Admin. The claim has a hard block and you cannot override. Send it back or escalate.

Bulk approve left some claims behind. Those claims were skipped without a message, usually because of a hard block. Approve them one at a time to see the reason.

Related