Provisioning journal entry

The run computes ECL. The provisioning journal entry is what puts ECL into the books. This page shows the exact accounts hit, how the increment is calculated, and how to reconcile to the trial balance every quarter end.

IFRS 9 runs
Quarterly run history with totals.

Increment, not absolute

ECL sits as an asset-contra (allowance for impairment) on the balance sheet. Each quarter the system posts only the difference between the new ECL and the prior period's posted ECL. If the new number is higher, the journal is a charge to P&L impairment expense; if it is lower, the journal is a release.

# Per portfolio segment (loan product or product group)
prior_ecl = ifrs9.run.previous(segment).total_ecl
new_ecl   = ifrs9.run.current(segment).total_ecl
increment = new_ecl - prior_ecl

if increment > 0:
    # P&L charge
    Dr 5520 Impairment Loss             increment
    Cr 1290 Allowance for Loan Loss     increment
else:
    # Release
    Dr 1290 Allowance for Loan Loss     abs(increment)
    Cr 5520 Impairment Loss             abs(increment)  # negative impairment expense

Accounts hit

Macro scenarios
Base / Optimistic / Downside scenarios with weights.

We use four accounts in the standard chart, all CBK-compliant. Each is reserved exclusively for IFRS 9 — manual postings to these accounts are blocked by an account.move rule.

CodeNameTypeUse
1280Loans and Advances — GrossAssetGross loan book; untouched by ECL
1290Allowance for Loan Loss — Stage 1+2+3Asset (contra)Stage 1/2/3 ECL allowance
1291Allowance — Specific (Stage 3 Carve-out)Asset (contra)Stage 3 specific allowance, when ringfenced
5520Impairment Loss — LoansExpense (P&L)Periodic impairment charge / release
Note — 1290 is the umbrella allowance account hit by the standard quarterly journal. 1291 is only used when management ringfences Stage 3 specific allowance for reporting clarity — disabled by default.

One journal per segment

The system posts one journal per portfolio segment (loan product or product group, configurable). This keeps the P&L view granular without polluting it with thousands of line items.

Example posting on a Q3 run for a tenant with 4 active loan products:

Net P&L impact = +192,740 - 26,800 + 320,520 + 167,600 = +654,060.

SegmentPrior ECLNew ECLIncrementDrCr
Normal Loan3,420,1403,612,880+192,7405520 NRM 192,7401290 NRM 192,740
Emergency Loan415,200388,400-26,8001290 EMG 26,8005520 EMG 26,800
Group Loan1,820,0002,140,520+320,5205520 GRP 320,5201290 GRP 320,520
Agriculture Loan612,800780,400+167,6005520 AGR 167,6001290 AGR 167,600

Reference and analytic tagging

Every journal posted by the engine carries:

Reconciliation queries always filter on the run linkage rather than on the date or reference text — it survives if accountants rename references.

  • Reference: IFRS9/Q4/2026/NRM — engine-generated, unique per run × segment.
  • Move date: quarter-end (not posting date).
  • Posting date: actual date the engine posted (typically T+3 to T+5).
  • Analytic distribution: 100% to the product's analytic account.
  • Run linkage: x_ifrs9_run_id field on the move points back to the run.

Quarter-end reconciliation

A clean reconciliation is the single most useful audit artefact. The system produces it automatically — Run → Reconciliation tab — but operators should still walk through it on a real GL extract every quarter.

  1. Closing balance on 1290 should equal total weighted ECL on the current run.
  2. Sum of charges/releases on 5520 for the quarter should equal the increment of the run.
  3. Each journal reference IFRS9/Qx/yyyy/SEG should appear in 1290 and 5520 with equal-and-opposite postings.
  4. No manual postings to 1290 or 5520 — if any exist, they must be documented.
# Pull the GL extract for accounts 1290 and 5520
# from the Accounting module:
# Reporting → Trial Balance → date range = quarter
# Filter: account 1290, 1291, 5520
# Export as XLSX

# In the run:
# Run → Reconciliation tab
# Click 'Compare to GL extract' → upload the XLSX
# System highlights any line in the GL that
# is not from an IFRS 9 run, and any run line
# that is missing from the GL.

Reversing a posted run

Posted runs are immutable. To correct a posted run you create a reversing run for the same period, post it, then post the corrected run.

  1. Open the original run, click Reverse (CFO permission required).
  2. System creates a new run in draft with negated ECLs; period_end and segments mirror the original.
  3. Approve and post the reversing run. GL effect: original journals negated.
  4. Create the new corrected run, take it through the normal lifecycle.
  5. Audit pack tracks the trio: original → reverse → corrected, with a CFO note explaining why.
Warning — Reversal is for genuine errors. Don't use it to 'tidy' a run that you don't like the look of — auditors read the audit pack and a frequent reversal pattern is a red flag.

Worked scenarios

Scenario — Discovered data error — reverse and re-post

Setting: Three days after posting Q3, accountant finds a KES 4M loan that was excluded from the run because of an archival timestamp bug.

CharacterRole
Jane WanjikuIFRS 9 Analyst
Florence AchiengCFO
Kimani MwangiRisk Manager
David KaranjaInternal Audit

Timeline

  1. Oct 6, 14:00: Accountant Mary Mutua reconciles 1280 vs the loan ledger. Finds Loan LN-3847 (KES 4.1M business loan) absent from the run. (Loan archived 30-Sep 22:00 by automated 'no activity 12 months' cron)
  2. Oct 6, 15:00: Jane investigates: the loan was archived in error by a cron that wasn't tuned for high-value loans. Un-archives. (Loan state restored)
  3. Oct 6, 16:00: Jane raises a ticket to fix the cron threshold (low-value-only archive). (Internal ticket TICK-1192)
  4. Oct 7, 09:00: Florence opens the posted Q3 run and clicks Reverse. New run R-15-REV created in draft. (ifrs9.run id=15-rev)
  5. Oct 7, 09:15: Florence approves and posts the reversal. GL effect: Q3 impairment journals negated. (12 reversing journals in account.move)
  6. Oct 7, 09:30: Jane creates a corrected Q3 run, period_end 30-Sep. Snapshot now picks up LN-3847. (ifrs9.run id=16, 5,185 lines (was 5,184))
  7. Oct 7, 14:00: Through stage, compute, review. Corrected ECL: KES 11.2M (was 10.84M). (Diff +KES 0.36M from LN-3847 Stage 1 ECL)
  8. Oct 8, 10:00: Florence approves and posts. Net P&L impact of the trio: original +0.42M, reversal -0.42M, corrected +0.78M = net +0.78M. (GL clean)
  9. Oct 9: David documents the incident in the audit pack 'Adjustments' section. Cron bug logged for fix. (Audit pack section 6.2)

Outcome — Q3 correctly stated; full reverse-and-replay audit trail; root cause logged for engineering.

Reference

Account configuration

SettingValueWhere
Impairment expense account5520Settings → IFRS 9 → Posting
Allowance account (default)1290Settings → IFRS 9 → Posting
Specific allowance ringfence1291 (optional)Settings → IFRS 9 → Posting
JournalMisc Ops or dedicated IFRS9Settings → IFRS 9 → Posting
Block manual postings to 1290/5520TrueAccount.account → 'allow manual posting' = False
Post in draftTrueSettings → IFRS 9 → Posting

Extra fields on account.move from IFRS 9

FieldPurpose
x_ifrs9_run_idMany2one to ifrs9.run
x_ifrs9_segmentSelection — which segment
x_ifrs9_kindSelection — initial | reversal | correction
x_ifrs9_period_endDate — quarter-end
x_ifrs9_refChar — engine-generated reference

Troubleshooting

SymptomLikely causeFix
Account 1290 balance doesn't match total ECL on latest run.Manual posting to 1290 between runs (rare — should be blocked), or a posted run was reversed but reversal not posted.Query account.move.line where account_id = 1290 and x_ifrs9_run_id is null — any rows are manual postings. Either roll into the next run or post a corrective entry referencing 'IFRS 9 reconciliation'.
5520 charge for the quarter is positive but ECL fell.Reversal of prior period was posted in this quarter, creating a swing.Look at account.move.line where account = 5520 and date in quarter grouped by x_ifrs9_kind. The sum should reconcile to (current run ECL – prior run ECL).
Approve and Post creates the journal but doesn't post it.Setting 'Post in draft' is true (default).Expected behaviour — the CFO posts it from the accounting module as the second part of the two-person rule. If you genuinely want auto-post, flip the setting (not recommended).
Journal reference IFRS9/Q4/2026/NRM appears twice.A reversal and a corrected run both for the same quarter × segment — engine appends -REV / -COR suffix but reference root may look duplicated.Check x_ifrs9_kind on each move. If both are 'initial' that's a bug — escalate. Otherwise expected.
P&L impairment expense looks lumpy — quarters with large swings.Genuine — IFRS 9 is more volatile than the old incurred-loss model.Use the ECL bridge in the audit pack to explain the swing (staging migration, macro overlay change, new originations, write-offs, recoveries). Board prefers the bridge to the P&L line alone.

See also

Was this page helpful?