Skip to main content

Reimbursements

Payroll → Loans & Claims → Reimbursements (/reimbursements) — employee reimbursement claims and their approval workflow. Approval requires payroll:approve (separate from payroll:manage).

Reimbursements pageReimbursements page
Reimbursements — tabs Pending / Approved / Rejected

Layout​

Tabs via UrlTabs with defaultTab=PENDING:

TabQueryEmpty text
PendingGET /reimbursements?status=PENDINGNo pending claims.
ApprovedPENDING → APPROVEDNo approved claims.
RejectedREJECTEDNo rejected claims.

Each tab renders ClaimsTable(status).

ColumnMeaning
CodeclaimCode (mono)
TypeclaimType (MEDICAL_BILL → MEDICAL BILL)
DateclaimDate
AmounttotalAmount (money)
Itemsitems.length (line-item count)
StatusStatusBadge
DescriptionFree text
OutcomeAPPROVED → approvedAt (date en-IN), REJECTED → rejectedReason

Row actions (only when status === PENDING, payroll:approve):

  • Approve (Check icon) — POST /reimbursements/:id/approve with X-User-Id: user-id (the API reads the approver from the header, not the token — missing user.id blocks with “Your user id is unavailable…”). Confirm modal: “claimCode for ₹X will be approved for payout.”
  • Reject (X icon) — POST /reimbursements/:id/reject reason — reason required (“A rejection reason is required.”). Modal has a textarea (3 rows).

Lifecycle​

PENDING → APPROVED → paid in next pay run
→ REJECTED (with reason, shown in Outcome)

An APPROVED claim is picked up by the next run that includes the employee (within its period); its amount is added as a reimbursement earning. Approved claims appear in the run's employee lines and on the payslip.

:::tip Who can approve Unlike pay-run transitions (payroll:manage), reimbursements require payroll:approve. Finance approvers often have approve without manage so they can approve claims but not create runs. :::