Expenses
Track staff out-of-pocket spend with receipt scanning.
Last updated 2026-05-05
Expenses capture staff out-of-pocket spending: amount, currency, category, vendor, and a receipt image or PDF (uploaded to S3, ClamAV-scanned). The optional OCR pass (see OpenAI) extracts vendor, total, tax, and date from the receipt and pre-fills the form for a one-tap submit on mobile. Submitted expenses route through an approval chain (department manager → finance) configured per tenant; approved expenses can be billed back to a Project (becoming reimbursable line items on the next invoice) or paid out via a finance export.
The detail screen shows the original receipt side-by-side with the editable fields so reviewers can verify in one glance.
Related endpoints
GET /api/tenant/expenses— list with status / staff / category filters.POST /api/tenant/expenses— create with receipt upload.POST /api/tenant/expenses/:id/submit— kick off approval chain.POST /api/tenant/expenses/:id/approve— approver action.POST /api/tenant/expenses/:id/reimburse— mark paid out.
See the source at apps/web/src/app/(tenant)/expenses and apps/api/src/expenses.