/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.
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
- Go to Expense Claims (
/accounting/expenses) and choose New Expense. - 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.
- 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.
- Optionally add advances to draw from and tax lines (see below).
- 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
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
- Submit for approval — from a Draft (requires at least one line item). Moves the claim to PendingApproval. Requires
accounting-expenses:update. - 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. - 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 (requiresaccounting-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).
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 theaccounting-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.
- Debit Accounts Payable (clearing the liability) for the grand total.
- Credit your cash/bank account (money out).
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 → Accounting → Expense 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.
📷 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 theaccounting-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.)
Related
- Purchase Bills (Accounts Payable) — supplier invoices on terms
- Petty Cash — small immediate cash payouts
- Debit Notes — vendor returns