What are Expenses?
Expenses are money spent by your organization on operational costs such as rent, utilities, supplies, salaries, bank charges, or other business needs. In Agatabo, expenses are automatically recorded in the general ledger, reduce bank account balances, and appear on financial reports.Why Track Expenses?
Key benefits:
- Know exactly how much you’re spending and on what
- Create budgets and monitor spending against targets
- Generate accurate financial reports (Profit & Loss statement)
- Ensure accountability and transparency
- Track spending trends over time
- Manage reserve fund usage
- Separate operational expenses from capital expenditures
- Maintain complete audit trail
How Expenses Work
Types of Expenses
1. Standard Operating Expenses
Regular operational costs paid from bank account cash. Journal Entry:2. Reserve-Funded Expenses
Expenses paid from designated reserve allocations (emergency fund, specific reserve). Journal Entries (Two entries created): Entry 1: Reserve Release3. Bank Charges
Bank service fees linked to parent expenses, assets, or loans. Journal Entry:parentExpenseId
When to use: Transaction fees, wire transfer fees, check fees, account maintenance charges
Expense Information
Each expense record includes:Required Fields
Amount:- How much was spent (minimum 0.01)
- Must match organization’s currency decimal places
- Validates against monetary policy
- Short description of what was purchased
- Example: “Office rent - June 2026”, “Stationery supplies”, “Treasurer stipend”
- Required, non-empty string
- When the expense occurred (ISO date format)
- Can be historical (past dates allowed)
- Cannot be in closed accounting period
- Cannot exceed current date
Optional Fields
Description:- Detailed explanation of the expense
- Purpose, justification, or additional context
- Example: “Monthly rent for office space at Kimihurura, Period: June 2026”
- Which account paid the expense
- Falls back to default account if not specified
- Must be active account
- Supporting receipts, invoices, or reference documents
- Stored as JSON array of DocumentItemDto
- Includes document type, URL, and metadata
- For reserve-funded expenses only
- Selects which reserve fund to draw from
- Must have sufficient reserve balance
- Additional bank service charge (optional)
- Automatically creates linked BANK_CHARGE entry
- Included in total reserve release if reserve-funded
- Advanced option to allow negative balances
- Requires special permission
- Use only for opening balance adjustments
Automatically Generated
Expense ID: Unique identifier (UUID) Journal Entry ID: Links to accounting entry Organization ID: Scope to organization Created At: Timestamp of creation Parent IDs: Links to parent expense/asset/loan (for bank charges)Common Expense Categories
Most tontines track these types of expenses:| Category | Examples | Typical Amount |
|---|---|---|
| Operating Expenses | Rent, utilities, internet, phone | Medium to High |
| Salaries & Wages | Treasurer pay, accountant fees, staff salaries | High |
| Office Supplies | Paper, pens, ledgers, printer ink | Low |
| Bank Charges | Account maintenance fees, transaction fees, wire fees | Low |
| Meeting Expenses | Room rental, refreshments, member gatherings | Medium |
| Transportation | Treasurer travel, bank trips, member visits | Low to Medium |
| Professional Services | Audit fees, legal consultation, training, software | Medium to High |
| Communication | SMS notifications, printing, postage | Low |
| Technology | Software subscriptions, computer equipment | Medium |
| Maintenance & Repairs | Office repairs, equipment maintenance | Medium |
| Insurance | Office insurance, liability coverage | Medium |
| Other | Miscellaneous expenses | Varies |
Category best practices:
- Use consistent category names across all expenses
- Create organization-specific categories as needed
- Don’t include loan disbursements, dividends, or asset purchases as expenses
- Separate capital expenditures (buy assets) from operational expenses
What’s NOT an Expense?
These operations are not expenses and should be tracked separately: ❌ Loan Disbursements: Track as loans, not expenses ❌ Dividend Distributions: Track as dividends, not expenses ❌ Member Savings Withdrawals: Track as savings withdrawals ❌ Reserve Allocations: Track as reserve top-ups (separate feature) ❌ Asset Purchases: Track as fixed assets ❌ Bank Transfers: Move money between accounts (internal, not expense) ❌ Opening Balance Adjustments: Use dedicated adjustment featureExpense Operations
What You Can Do
Record Expenses
Create new expense entries
View History
Browse and search past expenses
Edit Expenses
Update expense details
Delete Expenses
Remove expense entries
How Editing Works
Reverse-and-Repost Pattern:- System doesn’t modify existing entries
- Instead, reverses old entry and creates new one
- Maintains complete audit trail
- All linked entries (bank charges, reserve releases) also reversed and recreated
- Amount
- Title
- Description
- Date
- Bank account
- Reserve allocation
- Bank charge amount
- Cannot edit expenses in closed accounting periods
- Cannot edit reversed expenses
- Must have
expenses:writepermission
How Deletion Works
Reversal Process:- Reverses main expense entry
- Reverses all linked bank charges
- Reverses linked reserve release (if reserve-funded)
- Updates bank account balances back to original state
- Cannot delete expenses in closed accounting periods
- May create negative balance (check before deleting)
- Requires
expenses:writepermission
Integration with Other Features
Bank Accounts
Expenses decrease bank account balances through CASH ledger credits. How it works:- You select which bank account pays the expense
- System creates journal entry crediting CASH (bank account)
- Bank account balance decreases automatically
- Transaction appears in bank account history
Reserves
Reserve-funded expenses draw from designated reserve allocations. How it works:- Select reserve allocation when recording expense
- System releases funds from reserve (Dr CASH, Cr RESERVE_ALLOCATION)
- System records expense (Dr EXPENSE, Cr CASH)
- Reserve balance decreases, expense recorded, bank unchanged
- Track which expenses came from reserves
- Prevent overspending reserve allocations
- Better reserve fund reporting
- Separate restricted from unrestricted spending
- Emergency equipment repair from Emergency Fund
- Audit fees from Statutory Reserve
- Training expenses from Development Fund
Financial Reports
Expenses appear on Profit & Loss (Income Statement). Impact on P&L:- Higher expenses = lower net income
- Net income affects dividends available
- Expense trends show operational efficiency
General Ledger
All expenses create journal entries in the general ledger. Every expense:- Creates at least one journal entry (may create 2-3 if reserve-funded with bank charge)
- Debits OPERATING_EXPENSE or BANK_CHARGE_EXPENSE
- Credits CASH (bank account)
- Maintains balanced double-entry accounting
- Every entry records who, when, what, why
- Reversals are tracked separately (not deleted)
- Complete history maintained permanently
Validation and Constraints
Input Validation
Amount:- ✅ Must be at least 0.01
- ✅ Must match organization’s currency decimal places (e.g., 2 decimals for RWF)
- ❌ Cannot be negative
- ❌ Cannot be zero
- ✅ Must be non-empty string
- ❌ Cannot be blank
- ✅ Must be valid ISO date
- ✅ Can be historical (past dates)
- ❌ Cannot be in closed accounting period
- ❌ Cannot exceed current date
- ✅ Must be active account
- ✅ Falls back to default if not specified
- ❌ Cannot use inactive accounts
- ✅ Must exist and be active
- ✅ Must have sufficient balance
- ❌ Cannot exceed reserve balance
Business Logic Validation
Balance Checks:- System verifies bank account won’t go negative (unless explicitly skipped)
- Checks reserve balance before releasing funds
- Validates total amount against available cash
- Cannot create expense in closed period
- Cannot edit expense in closed period
- Cannot delete expense in closed period
- All operations require idempotency key
- Prevents duplicate entries from retries
- Safe for network failures and refreshes
Permissions Required
| Action | Permission | Scope |
|---|---|---|
| View expenses | expenses:read | ANY |
| Create expense | expenses:write | ANY |
| Edit expense | expenses:write | ANY |
| Delete expense | expenses:write | ANY |
| View financial reports | reports:read | ANY |
Typical roles: Accountants and Administrators usually have
expenses:write. Regular members typically have expenses:read (view only) or no access.Best Practices
Expense management tips:
- Record expenses promptly (same day or within a week)
- Keep physical receipts and upload as documents
- Use clear, consistent titles (include month/period)
- Add detailed descriptions for large or unusual expenses
- Always select the correct bank account
- Use reserve-funded expenses for emergency/planned spending from reserves
- Separate bank charges from main expenses (use bank charge field)
- Review expense reports monthly
- Set spending limits and get approval for large purchases
- Don’t use expenses for loan disbursements or asset purchases
- Reconcile bank statements to catch missing expenses
- Close accounting periods regularly to lock historical data
Common Scenarios
Scenario 1: Regular Monthly Rent
Scenario 2: Bank Wire Transfer with Fee
Scenario 3: Emergency Repair from Reserve
Getting Started
Record Your First Expense
Step-by-step expense recording guide
Expense Categories
Organize spending by category
View Expense History
Browse and analyze past spending
Profit & Loss Report
See expense impact on profitability