Overview
Recording expenses ensures all organizational spending is tracked in Agatabo. This maintains accurate financial records, enables budgeting, and generates complete financial reports. Expenses can be paid from bank account cash or funded from reserve allocations.Before You Begin
Prerequisites:
- You have
expenses:writepermission - You have a receipt or documentation for the expense
- You know which bank account paid the expense (or which reserve funded it)
- You’ve decided on a clear, descriptive title for the expense
Recording a Standard Expense
Step 1: Navigate to Expenses
Step 2: Fill Required Fields
Required Information:| Field | Description | Validation |
|---|---|---|
| Title | Short description of expense | Required, non-empty string |
| Amount | How much was spent | Required, minimum 0.01 |
| Date | When expense occurred | Required, ISO date (can be past) |
- Title: “Office Rent - June 2026”
- Amount: 150000 (or 150,000 RWF)
- Date: 2026-06-08
Title field is NOT “Category”: The backend uses a free-form
title field, not a predefined category dropdown. Use clear, consistent titles to organize your expenses.Step 3: Fill Optional Fields
Optional Information:| Field | Description | Default |
|---|---|---|
| Bank Account | Which account paid the expense | Falls back to default account |
| Description | Detailed explanation of the expense | None |
| Documents | Upload receipts, invoices, or references | None |
| Bank Charge Amount | Additional bank service charge | 0 (no charge) |
- Explain what was purchased and why
- Include relevant details (period, vendor, purpose)
- Example: “Monthly office space rental at Kimihurura for June 2026, paid to Landlord ABC”
- Upload photos or PDFs of receipts
- Store invoice copies
- Keep audit trail of supporting documentation
Step 4: Add Bank Charge (Optional)
If the expense incurred a bank service charge (transaction fee, wire fee):
Example:
Step 5: Submit
Recording a Reserve-Funded Expense
For expenses paid from designated reserve allocations (emergency fund, specific reserve):Step 1: Navigate and Start
Step 2: Fill Expense Details
Fill the same required fields:- Title: Descriptive expense name
- Amount: How much to spend from reserve
- Date: When expense occurred
Step 3: Select Reserve Allocation
Select the reserve
Choose which reserve fund to draw from (e.g., “Emergency Fund”, “Equipment Reserve”)
Step 4: Optional Bank Account
Reserve-funded expenses behavior:- Bank account is optional (can be omitted)
- If provided: System releases reserve TO that account, then pays expense FROM it
- If omitted: Uses default bank account
Step 5: Submit
What happens:
Recording with Bank Charge
Complete example of expense with bank charge:Scenario: Pay Supplier with Wire Fee
Details:- Supplier payment: 500,000 RWF
- Wire transfer fee: 5,000 RWF
- Total cost: 505,000 RWF
Steps
Fill expense fields
- Title: “Payment to Supplier XYZ”
- Amount: 500,000
- Date: 2026-06-11
- Bank Account: Operations Account
- Description: “Purchase order #456 - Office furniture”
What Happens When You Record
When you submit an expense, Agatabo automatically:-
Validates inputs:
- Amount >= 0.01
- Title is non-empty
- Date is valid ISO format
- Bank account exists and is active
- Reserve has sufficient balance (if reserve-funded)
-
Creates journal entries:
- Main expense entry (EXPENSE_PAYMENT or RESERVE_EXPENSE)
- Reserve release entry (if reserve-funded)
- Bank charge entry (if bank charge amount provided)
-
Updates balances:
- Reduces bank account balance (CASH ledger)
- Reduces reserve balance (if reserve-funded)
- Records expense in OPERATING_EXPENSE or BANK_CHARGE_EXPENSE
-
Records metadata:
- Creates ExpenseMeta record with all details
- Links to journal entries
- Stores documents as JSON
-
Logs audit trail:
- Records who created the expense
- Timestamp of creation
- IP address and user agent (if available)
-
Updates reports:
- Appears on Profit & Loss statement
- Shows in expense history
- Affects financial metrics
Editing Expenses
You can edit expenses to correct errors or update information.How to Edit
What You Can Change
All fields are editable:- Title
- Amount
- Date
- Description
- Bank account
- Reserve allocation
- Bank charge amount
- Documents
How Editing Works (Reverse-and-Repost)
Important: Agatabo doesn’t modify existing entries. Instead:-
Reverses old entries:
- Creates reversal of main expense
- Reverses linked bank charge (if exists)
- Reverses reserve release (if reserve-funded)
-
Creates new entries:
- Posts new expense with updated values
- Creates new bank charge (if amount provided)
- Creates new reserve release (if reserve-funded)
-
Maintains audit trail:
- Old entries remain visible as REVERSED
- New entries show as POSTED
- Complete history preserved
Constraints on Editing
Cannot edit if:- ❌ Expense is in closed accounting period
- ❌ Expense has already been reversed
- ❌ You don’t have
expenses:writepermission
- ✅ Any POSTED expense in open period
- ✅ All fields including amount and date
- ✅ Can change from standard to reserve-funded (or vice versa)
Deleting Expenses
You can delete expenses if they were recorded in error.How to Delete
What Happens During Deletion
Reversal process:-
Reverses main expense:
- Creates reversal entry: Dr CASH / Cr OPERATING_EXPENSE
- Restores bank account balance
-
Reverses bank charge (if exists):
- Reverses linked bank charge entry
- Restores additional bank fees
-
Reverses reserve release (if reserve-funded):
- Reverses reserve release entry: Dr RESERVE_ALLOCATION / Cr CASH
- Restores reserve balance
-
Updates metadata:
- Marks expense as deleted
- All journal entries show status: REVERSED
- Audit trail maintained
Constraints on Deletion
Cannot delete if:- ❌ Expense is in closed accounting period
- ❌ Already reversed/deleted
- ❌ Don’t have
expenses:writepermission
- Deletion may create negative balance if bank account doesn’t have sufficient funds
- Use
skipNegativeBalanceCheckparameter if intentional
Common Scenarios
Scenario 1: Monthly Recurring Expenses
For expenses that happen every month (rent, salaries, utilities): Best practice:Use consistent titles
Format: “Expense Type - Month Year”
Examples: “Office Rent - June 2026”, “Treasurer Stipend - June 2026”
Scenario 2: Recording Reimbursements
If reimbursing a member who paid on behalf of the organization:
Example:
Scenario 3: Emergency Expense from Reserve
Using emergency fund for urgent, unplanned expense:
Example:
Scenario 4: Large Payment with Bank Charge
Significant payment with wire transfer fee:Scenario 5: Correcting an Error
Recorded wrong amount, need to fix:
Example:
Validation and Error Messages
Common Errors
| Error Message | Cause | Solution |
|---|---|---|
| ”Amount must be at least 0.01” | Amount is 0 or negative | Enter positive amount |
| ”Title cannot be empty” | No title provided | Add descriptive title |
| ”Invalid date format” | Date not in ISO format | Use YYYY-MM-DD format |
| ”Bank account not found” | Invalid bank account ID | Select valid active account |
| ”Insufficient reserve balance” | Reserve doesn’t have enough | Choose different reserve or reduce amount |
| ”Cannot modify closed period” | Expense date in closed period | Change date or open period |
| ”Idempotency key required” | Missing header | System should auto-generate |
Validation Rules
Amount:- ✅ Must be >= 0.01
- ✅ Must match currency decimal places
- ❌ Cannot be 0 or negative
- ✅ Must be non-empty string
- ❌ Cannot be blank spaces
- ✅ Must be valid ISO date (YYYY-MM-DD)
- ✅ Can be in the past
- ❌ Cannot be in closed period
- ❌ Cannot be future date (some implementations)
- ✅ Must exist in organization
- ✅ Must be active
- Falls back to default if omitted
- ✅ Must exist and be active
- ✅ Must have sufficient balance
- ✅ Balance >= (expense amount + bank charge amount)
Best Practices
Expense recording tips:
- Record expenses within 1 week of occurrence (fresher memory)
- Keep physical receipts in organized file or envelope
- Take photos of receipts for digital backup (upload as documents)
- Use clear, consistent title format: “Category - Description - Period”
- Include detailed descriptions for amounts over 100,000 RWF
- Require approval workflow for large expenses (implement externally)
- Review expense trends monthly to catch unusual spending patterns
- Separate personal expenses from organizational expenses (never mix)
- Use reserve-funded expenses for emergency or planned reserve spending
- Always include bank charges when applicable (don’t hide fees)
- Reconcile bank statements monthly to catch missing expenses
- Close accounting periods regularly to lock historical data
Permissions Required
| Action | Permission | Scope |
|---|---|---|
| Record expense | expenses:write | ANY |
| Edit expense | expenses:write | ANY |
| Delete expense | expenses:write | ANY |
| View expenses | expenses:read | ANY |
Typical access: Accountants and Administrators have
expenses:write. Regular members may have expenses:read (view only) or no access.Related Topics
Expenses Overview
Understand expense types and integration
Expense Categories
Organize spending by category
View Expense History
Browse and analyze past spending
Bank Accounts
Learn about bank account tracking
Reserves
Understand reserve allocations
Profit & Loss Report
See expense impact on profitability