Charge-off and write-off in Fineract: how the journal entries actually post
6/13/2026

Charge-off and write-off are the part of the loan lifecycle nobody enjoys, and the part where the general ledger has to be exactly right. Move the wrong number to the wrong account and your Trial Balance stops tying, your loss provisioning is off, and an auditor eventually asks a question you would rather not answer.
We run managed Fineract, so we have posted a lot of these and seen where they go wrong. Here is exactly what Fineract writes to the ledger when you charge off or write off a loan, in both cash and accrual basis, and the handful of places the accounting bites. The docs explain the chart of accounts and how to map GL accounts to a loan product; what they do not explain is what actually posts when a loan goes bad. That is this post.
Charge-off and write-off are not the same thing
In Fineract these are two distinct events with two distinct sets of journal entries, and the difference matters.
Charge-off is the accounting recognition that a loan has gone bad. The outstanding principal moves off your loan portfolio asset into a loss or expense account, the outstanding interest, fees, and penalties are dealt with (more on that shortly), and what happens to interest from there depends on the charge-off behavior you set. The loan still exists. You can even undo a charge-off if a payment turns up.
Write-off is the formal elimination of the receivable. It is often the second step: a loan is charged off, sits as a recognized loss, and is later written off entirely.
So a loan's path is usually active, then charged off, then sometimes written off. Each transition posts its own entries, and the write-off entries depend on whether the loan was charged off first. That dependency is where most of the bugs we will get to actually lived.
The charge-off entries
On accrual-basis accounting, a charge-off posts four logical entries:
| What | Debit | Credit |
|---|---|---|
| Principal | Charge-off expense | Loan portfolio |
| Interest | Income from charge-off (interest) | Interest receivable |
| Fees | Income from charge-off (fees) | Fees receivable |
| Penalties | Income from charge-off (penalty) | Penalties receivable |
Two things to know about that principal line. First, the debit account is configurable per charge-off reason: if you have mapped a reason to a specific expense account, the principal lands there; otherwise it falls back to the product's charge-off expense account. Second, loans flagged as fraud debit a separate charge-off fraud expense account instead. So the same charge-off can hit different GL accounts depending on the reason and the fraud flag, which is exactly the flexibility your finance team asked for and exactly the thing that is easy to misconfigure.
One caveat on completeness: if the loan carries capitalized income or buy-down fees, charge-off posts extra entries to unwind the related deferred income, on top of the four above. Most loans do not use those, which is why the four are the ones to keep in your head.
On cash-basis accounting there are no receivable accounts to clear, so only the principal moves to the loss account. The interest, fees, and penalties lines reverse income you already recognized on collection rather than draining a receivable.
The write-off entries, and the trap
A write-off comes in two shapes, and Fineract picks based on whether the loan was already charged off.
If the loan was never charged off, the write-off drains the balances directly: debit losses written off (or a mapped write-off-reason account), and credit the loan portfolio, the receivables, and any overpayment.
If the loan was already charged off, those balances are already gone. The receivables were cleared at charge-off and the principal is already sitting in the charge-off expense account. So the write-off has to reverse the charge-off accounts, not the receivables: debit losses written off, and credit the charge-off expense and charge-off income accounts.
This is the single most error-prone spot in the whole flow. Get it wrong and you credit the receivable accounts a second time, even though charge-off already cleared them, and your ledger is now double counting. That is not hypothetical. It was a real Fineract bug, fixed in 1.13.0, where receivable GL accounts were double credited on a charge-off followed by a write-off. If you are on an older build, or you have customized this path, it is worth a deliberate test.
What happens to accrued interest
This is the question that causes the most confusion, so be precise about it.
What happens to interest after a charge-off depends on the charge-off behavior set on the loan. On progressive loans there are three modes: zero-interest stops accruing interest after the charge-off, accelerate-maturity makes all future installments due immediately, and regular continues normal accrual. So whether interest keeps accruing is a configuration choice, not a given.
The interest that had already accrued but was never paid does not just vanish. On accrual basis it is recognized as charge-off income, which is the interest line in the table above: the receivable is cleared and the income is booked. That keeps the ledger honest about what you actually earned versus what you wrote down.
The trap is timing. Accruals in Fineract are posted by the nightly Close of Business job, and there is a long-standing, still-open bug where writing off a loan skips the final accrual, because the accrual recalculation runs after the loan has already left active status. The interest and fees that should have accrued right up to the write-off never hit the GL, and the ledger comes out understated. Whether or not you hit that exact bug, the lesson holds: true up accruals before a loan goes inactive, because once it is inactive nothing accrues.
Why your Trial Balance will not tie (and it is usually not the postings)
When a Trial Balance refuses to balance around charge-offs, the instinct is to assume a debit or credit is wrong. On a current, tested build it usually is not. The imbalance is usually one of three other things:
- A transaction that posted no journal entry at all. Some events, historically charge adjustments and refunds, changed a balance or created an accrual without writing the matching journal entry. The loan ledger and the GL drift apart silently, and you go hunting for a wrong number that does not exist.
- A report or period-close bug, not a posting bug. A real example: a year-end Trial Balance stopped showing retained earnings because of a single change in how the report extracted the year from a date. The postings were fine; the report was wrong.
- The accounting basis is not what you think. Loans set to cash or none have, in some versions, still generated accrual entries, and accrual accounts get mislabeled (the classic interest-receivable versus income-from-interest mix-up). The numbers look wrong because the configuration, not the math, is wrong.
So when the Trial Balance will not tie: check that every transaction posted a journal entry, check the report and the period close, and check the product's accounting basis, before you suspect the charge-off math.
The one rule that prevents most of this
Almost every charge-off and write-off accounting bug we found traces to a single invariant: a reversal must mirror the original entry exactly, in account, in amount, and in number of legs. Charge-off and write-off are destructive, late-stage events, and they trigger reversals and replays whenever an earlier transaction is undone. The bugs cluster precisely where that mirror broke, whether a charge-off reversal posted to a different account than the original or an accrual replay emitted duplicate or zero-amount entries. One edge is still open at the time of writing: a refund plus a credit balance refund before a charge-off can leave a negative charge-off balance.
If you run this yourself, the test that catches most of it is cheap. In a non-production tenant, charge off a loan, write it off, then reverse each step, and confirm every reversal journal entry is the exact inverse of the original. If it is not, you have found your problem before your auditor does.
So, what should you do?
Charge-off and write-off accounting in Fineract is correct when it is configured correctly, and that is a real qualifier. Get the chart of accounts and the per-product, per-reason GL mappings right, choose cash or accrual deliberately and confirm the product actually behaves that way, and test the charge-off to write-off to reversal path before you trust it with real money. The defaults assume contexts that may not be yours.
That is the part we take off your plate. Finecko runs managed Apache Fineract with the accounting set up correctly and these traps already handled, so the journal entries post the way your controller expects. If you would rather run it yourself, the entries and failure modes above are the map. Either way, a charged-off loan should be a clean line in your ledger, not a week of reconciliation.
Skip the ops. Run managed Apache Fineract.
Finecko runs managed Apache Fineract for you - the Finecko Hub, the right topology, connection pooling, backups, TLS, patching, and on-call. You get the open-source core without the operations, and the free plan is a full environment to try with no credit card.