Expense Management

Expense Management covers everyday expense submission and approval, with an optional bridge into Billing for expenses you want to pass on to a client.

Expenses

An expense is either general or mileage — mileage expenses auto-compute their amount from distance × rate, rather than you entering an amount directly. Every expense belongs to a category (see below).

Status only moves through an explicit approve/reject action, never a generic edit:

pending → approved
→ rejected

Once approved, an expense is a financial record: it can no longer be edited or deleted. Rejecting an expense records who rejected it, when, and why (approver_id, decided_at, rejection_reason).

Categories

Expense categories are per-organization (name, description, active flag, sort order) and configured under Settings → Expense Categories.

Expense Reports

Instead of approving expenses one at a time, group several into a report and decide on all of them at once. A report has its own lifecycle:

draft → submitted → approved
→ rejected

Approving or rejecting a report cascades the decision to every expense in it.

Billing a client for an expense

Mark an expense is_billable with an Account attached, and it can be rebilled onto that Account’s invoice — this creates an invoice line item linked back to the originating expense and stamps rebilled_at. Each expense can only be rebilled once; Moyo Suite enforces this at the database level so two people rebilling the same expense at the same moment can’t create a duplicate line item.