Skip to main content
An expense records a cost your business incurs that isn’t billed on vendor terms — typically an out-of-pocket cost or a staff reimbursement claim. Unlike a bill, an expense is usually raised by the person who spent the money, can be reviewed and sanctioned (the approver may approve less than was claimed), and is then paid out to that person or vendor. You’ll find this at: /accounting/expenses In the navigation this is labelled Expense Claims under Finance → Payables. Staff members see their own claims; finance users with the right permission see everyone’s.
📷 Screenshot: Expenses list with reference number, claimant, date, amount, status and payment status — to be added.

When to use an expense claim

  • A staff member paid for something out of pocket and wants reimbursing.
  • You’re recording a cost with multiple itemised lines (travel, meals, supplies) that should be reviewed and approved before payment.
  • The cost may be partly covered by a cash advance the staff member was given earlier.
For supplier invoices on payment terms use a Bill; for small immediate cash payouts use Petty Cash.

The expense lifecycle (statuses)

An expense has two parallel status fields: the workflow state and the payment status. Workflow state: Payment status: UNPAID or PAID — tracks whether the money has actually gone out, independently of the workflow state.

Recording an expense — step by step

  1. Go to Expense Claims (/accounting/expenses) and choose New Expense.
  2. Fill in the header:
    • Expense date — required. The posting date for the claim.
    • Description / purpose (optional) — header-level note.
    • Vendor (contact) (optional) — when the cost relates to a specific party.
    • Currency (optional, default UGX) and exchange rate (optional, default 1.0) — for foreign-currency claims, the rate converts amounts to your base currency.
    • Project / Task (optional) — attribute the cost to a project/task (a task must belong to the project when both are given).
    • Attachments (optional) — receipts.
  3. Add one or more line items (see below). If you don’t add explicit items, the system creates a single item from the header amount.
  4. Optionally add advances to draw from and tax lines (see below).
  5. Save as Draft, or set the status to submit straight away.

Line item fields

Each item needs either a claim type or an expense account. If you supply neither, the system tries the category’s default account, then falls back to the workspace’s default operating-expense account; if it still can’t resolve one, it asks you to pick one.

Expense taxes

You can add tax and charge lines (VAT, WHT, etc.). Each tax line specifies:
  • GL account for the tax (e.g. Input VAT, WHT account)
  • Description (e.g. “VAT 18%”)
  • Rate (%) (optional, display only)
  • Tax amount in the claim currency
Taxes are added to the sanctioned line totals to produce the claim’s grand total.

Advances against a claim

If the claimant was given a cash advance earlier, list the advances to draw from and the amount to allocate from each. When the claim is approved, the system reconciles each advance and — if the advances fully cover the claim — settles it automatically against the advance (see Behind the scenes). A partial advance that doesn’t fully cover the claim is left to the normal payment flow.

Submitting, sanctioning and approving

  1. Submit for approval — from a Draft (requires at least one line item). Moves the claim to PendingApproval. Requires accounting-expenses:update.
  2. Sanction amounts (approver, optional) — before approving, the approver can set the sanctioned (approved) amount per item. The sanctioned amount must be ≤ the claimed amount — approvers can trim a claim but never inflate it. Requires accounting-expenses:approve. Only available while the claim is PendingApproval.
  3. Approve — on approval, any items not explicitly sanctioned are auto-sanctioned at their claimed amount, the grand total (sanctioned + taxes) is computed, and the accrual is posted to the ledger.
The claimed vs sanctioned distinction is the heart of expense review: staff claim, finance approves the amount it agrees to pay.

Paying an expense

Once Approved, finance records payment. Choose Record payment (requires accounting-expenses:post) and enter:
  • Payment account — must be an ASSET-type (cash/bank/mobile-money) account in the same book.
  • Mode of payment — CASH, BANK_TRANSFER, CHEQUE or MOBILE_MONEY.
  • Payment date.
  • Payment reference (optional).
The claim moves to Paid / payment status PAID, and the payment posts to the ledger (clearing the payable). The amount paid equals the accrued grand total, so payment clears exactly what the accrual booked (including taxes).

Editing, deleting and voiding

  • Edit — allowed until the claim is Approved. You can change header fields, items, advances and taxes; totals recompute from the items. Requires accounting-expenses:update. (An Approved claim can’t be edited — void it and create a new one.)
  • Delete — only Draft claims can be deleted (soft delete). Requires accounting-expenses:delete.
  • Void — only Submitted (PendingApproval) or Approved claims can be voided. Voiding reverses both the payment journal entry (if paid) and the accrual journal entry, then marks the claim Void. Requires accounting-expenses:void.

Who can see which claims

Listing and viewing are ownership-scoped. A user without the accounting-expenses:read-all permission only sees and can open their own claims; trying to open someone else’s returns “not found”. Users with read-all (finance) see every claim. This same scoping applies to the expense summary and unpaid reports. There’s also an Unpaid report (/accounting/expenses/unpaid-report) that groups approved-but-unpaid claims by submitter, so finance can see who’s owed what before a payment run.

Behind the scenes — the accounting

On approval (accrual entry):
  • Debit each expense account (from the line’s claim type or account) for its sanctioned amount, plus a debit to each tax account for its tax amount. Per-line cost centers carry into the ledger.
  • Credit Accounts Payable for the grand total (sanctioned + taxes) in base currency.
If the claim was raised by a linked staff member, the payable credit is sub-ledgered to that employee (via their per-book employee Contact), so staff payables net by real person. This is best-effort — it never blocks the posting. On payment:
  • Debit Accounts Payable (clearing the liability) for the grand total.
  • Credit your cash/bank account (money out).
(For older claims with no accrual entry, payment posts directly: Debit Expense / Credit Cash.) When fully covered by advances: instead of a cash payment, the system posts Debit Accounts Payable / Credit Staff Advances, clearing the payable against the advance the staff member already holds. This needs a staff_advances control account in the book; if it’s missing, the settlement is skipped and surfaced in the logs. On void: the accrual (and any payment) entries are reversed, restoring the trial balance.

Expense Claim Types

Expense claim types are reusable, worker-friendly categories that each map to a GL expense account (and optionally a default cost center). They let staff pick “Travel” or “Meals” instead of hunting through the chart of accounts, while finance keeps control of where each type posts. You’ll find these at: ERP Settings → AccountingExpense Claim Types (under /settings/erp). The API lives at /accounting/expense-claim-types.

Managing claim types

  • Create — give the type a name (unique within the book) and pick an expense account (must be an EXPENSE-type account in the same book). Optionally set a description, a default cost center, and whether it’s active.
  • Update — rename, repoint the account, or toggle active. Renaming to a name already in use is blocked.
  • Deactivate (delete) — soft-deletes and deactivates the type. Existing claims that already used it are unaffected.
When a claim line uses a claim type, the accrual debits that type’s mapped expense account — so changing claim types changes where future claims post without retraining staff.
📷 Screenshot: Expense Claim Types settings panel listing each type, its mapped account and active toggle — to be added.

Multi-business note

Expenses, their items, taxes, advances and claim types all live inside a single accounting book (workspaceId) and never cross businesses. Switch to the correct business before recording or approving claims.

Permissions reference

Expense actions are gated by the accounting-expenses permission module: (Expense Claim Types are managed in ERP Settings and don’t use a separate per-action slug beyond standard accounting settings access.)