Accounting integration

Every transaction the suite handles — disbursement, repayment, deposit, withdrawal, transfer, fee, interest accrual, IFRS 9 provisioning — posts a balanced journal entry to the BridgeERP General Ledger at the moment the event happens. This page is the reference for how that wiring works.

Accounting dashboard
BridgeERP Accounting dashboard — each MFI journal (MLOAN, MSAV, MMOB, MSHR, MTRS, MFEE) shows its posting volume.
Journals
Journals — the MFI journals (MLOAN / MSAV / MMOB / MSHR / MTRS / MFEE) plus standard banking journals.

How the integration is wired

The integration is event-source, not batch. Each app has a thin GL bridge module that listens for the operational event (e.g. mfi.loan._post_repayment) and posts the journal in the same transaction. If the posting fails, the operational event is rolled back too — the suite never leaves the GL out of sync with the sub-ledger.

Wiring summary:

  • Every loan + savings product has 3–4 GL accounts mapped on its form (principal receivable, interest income, fee income, write-off).
  • Every channel (cash, M-Pesa float, Airtel float, sponsor-bank float) has a dedicated cash-equivalent account.
  • Every MFI journal (MLOAN, MSAV, MMOB, MSHR, MTRS, MFEE) routes a specific class of entries.
  • The company-level defaults (mfi_*_journal_id, share-related accounts) tie the products to the company's books.
Chart of accounts
Chart of accounts — the SACCO-tier scheme seeded by the suite; MFI codes 12000 (Loans), 20000 (Deposits), 240xxx (Income), 25xxxx (Expenses).

The Odoo Apps store edition (MFI Accounting)

The MFI apps sold on apps.odoo.com do not use the GL bridge modules described on this page. MFI Accounting (aminitech_mfi_accounting) posts the entries itself, for any mix of MFI apps installed, with these accounts:

MovementDebitCredit
Membership fee paidMFI Cash and ClearingMFI Membership and Registration Fees
Savings depositMFI Cash and ClearingMFI Member Savings Deposits
Savings withdrawal, account closure, loan auto-debitMFI Member Savings DepositsMFI Cash and Clearing
Savings interest postedMFI Interest on Member SavingsMFI Member Savings Deposits
Savings fee chargedMFI Member Savings DepositsMFI Savings Fees and Charges
Savings fee waivedMFI Savings Fees and ChargesMFI Member Savings Deposits
Dividend credited to savingsMFI Dividends to MembersMFI Member Savings Deposits
Loan disbursed (fees deducted at disbursement)MFI Loans to Members (gross)MFI Cash and Clearing (net) + MFI Loan Fees and Commissions
Loan repaymentMFI Cash and ClearingMFI Loans to Members (principal), MFI Interest on Loans, MFI Loan Fees and Commissions, MFI Loan Penalties
Loan written offMFI Loans Written OffMFI Loans to Members
Repayment on a written-off loanMFI Cash and ClearingMFI Recoveries on Written-off Loans
Share purchase, rights issueMFI Cash and ClearingMFI Member Share Capital
Share redemption, buybackMFI Member Share CapitalMFI Cash and Clearing
Bonus issueMFI Share Premium and ReservesMFI Member Share Capital
Share dividend declaredMFI Dividends to MembersMFI Dividends Payable to Members
  • The accounts are created from your chart of accounts when the app is installed (or found by name if they exist), and you can point each one at your own account in Settings → MFI Accounting → Journal entries for MFI transactions.
  • Money that moves between two MFI apps (a loan instalment debited from savings, say) goes through MFI Cash and Clearing, so the two sides net out whichever apps you own.
  • Transfers between two members’ savings or shares change no balance-sheet total and post nothing. Reversing a transaction reverses its entry.
  • Transactions recorded before MFI Accounting was installed: press Post missing journal entries on the same settings page. It only posts what has no entry yet, so it is safe to press again.
  • A posting never blocks the teller or loan officer. If an account is missing, the transaction goes through, the reason is noted on the record, and the button above catches it up once the account is set.
  • All entries: Accounting → Journal Entries → MFI Journal Entries, each linked back to the loan, savings, share or member record it came from.

The full event → journal entry map

EventModuleDRCR
Loan disbursementmfi_loan_gl_bridgeLoans Receivable (12000)Cash or M-Pesa Float
Loan repayment (principal)mfi_loanCash / Member SavingsLoans Receivable (12000)
Loan repayment (interest)mfi_loanCash / Member SavingsInterest Income (240000)
Loan repayment (fee)mfi_loanCash / Member SavingsFee & Commission Income (242000)
Loan fee chargemfi_loanReceivableFee Income (242000)
Loan write-offmfi_loanBad-Debt ExpenseLoans Receivable (12000)
Loan recovery (after write-off)mfi_loanCashBad-Debt Recoveries
Savings depositmfi_savings_gl_bridgeCash or M-Pesa FloatMember Deposits (20000)
Savings withdrawalmfi_savings_gl_bridgeMember Deposits (20000)Cash or M-Pesa Float
Savings interest postingmfi_savings_gl_bridgeInterest Expense — Deposits (250000)Member Deposits (20000)
Savings fee chargemfi_savings_gl_bridgeMember Deposits (20000)Fee Income (242000)
Suspense receiptmfi_savings_gl_bridgeCash or M-Pesa FloatSuspense — Unidentified Deposits (29900)
Suspense releasemfi_savings_gl_bridgeSuspense (29900)Member Deposits (20000)
Share purchasemfi_accountingCashShare Capital
Dividend declarationmfi_accountingRetained EarningsDividends Payable
Dividend paymentmfi_accountingDividends PayableCash / Member Savings
IFRS 9 ECL provisioningmfi_ifrs9_eclLoan Loss Provisioning — ExpenseLoan Loss Allowance
Bureau feemfi_credit_bureauBureau Fees — ExpenseSundry Payable
Insurance premiummfi_bancassuranceCashUnderwriter Payable + Commission Income

How to read the Profit and Loss

The MFI Suite posts Revenue under 240xxx (Interest Income, Fee & Commission Income) and Expenses under 25xxxx (Interest Expense, Loan Loss Provisioning, Bad-Debt Expense).

The Kenya P&L variant has been extended to include those code prefixes — on a live tenant with this guide's configuration, opening Accounting → Reporting → Profit and Loss (KE) at "All Time" shows the numbers below:

LineValue
Operating RevenuesKES 208,694.75
  Interest IncomeKES 90,540.11
  Fee & Commission IncomeKES 118,154.64
Operating Costs(KES 175,829.11)
  Interest Expense — DepositsKES 175,829.11
Net Profit / LossKES 32,865.64
Journal Entries
Journal Entries — every MFI transaction lands here, posted state, with the source document linked back.

How to verify the Trial Balance

The trial balance is the production-readiness gate. Open Accounting → Reporting → Trial Balance with date filter "All Time".

Total Debits must equal Total Credits exactly. If not:

  • Search Journal Entries for state = Draft. Each draft is missing from the TB and probably has a rounding gap.
  • Open each draft and look for a 0.01–1.00 imbalance between the principal / interest / fee components.
  • Post the draft (the suite's repayment-posting flow handles rounding by widening the largest line).

Where to wire a new module to the GL

If you build a new MFI module that moves money, follow these conventions:

  1. Add a tiny <module>_gl_bridge shim module (or extend an existing bridge).
  2. Listen on the operational event method (action_post / action_confirm).
  3. Build the account.move with two or more lines that sum to zero.
  4. Call move.action_post() in the same transaction.
  5. On failure, let the exception bubble so the operational event rolls back too.
Tip. Run the Trial Balance after every period — DR must equal CR exactly. Any draft entries indicate a rounding gap that needs reconciliation.
Was this page helpful?