Cash, yield and the reconciliation nobody wants to build
The gap between your risk reporting and the general ledger is always there. Reported monthly by component it is a control. Discovered by a funder it is a finding.
Cash is the one part of a lending business where being approximately right is not a position anybody will accept. It is also, in most lenders we meet, the number with the largest unexplained gap between two internal systems.
This is the last of the six-domain KPI series, after first payment default, the recovery funnel, sales pacing, acquisition source quality and onboarding drop-off.
The four numbers#
Cash in. Everything received: scheduled instalments, early repayments, late payments, recoveries. Split principal from interest and fees, because they behave differently and a blended number hides a change in either.
Cash out. Disbursements, plus operating outflow if you are reporting a full picture. The gap between in and out is your funding requirement, and its trend is what a funder actually reads.
Yield. Revenue over average outstanding principal, annualised. Not over issued volume — that is a different and much flatter number that will make a shrinking book look healthy.
Outstanding principal. Almost always reported as the performing balance, and the definition of performing is where the arguments live. State whether you mean zero-bucket only, and be consistent about it forever.
Why yield moves, and it is usually mix#
When yield changes, the instinct is to look at pricing. Pricing is rarely the cause. Four things move it more often:
Product mix. A shift toward longer terms lowers the annualised yield even at identical pricing.
Market mix. Rate structures differ by country. Growth in a lower-rate market pulls the blended figure down while every individual market is stable.
Book age. A rapidly growing book has a larger share of loans early in their amortisation, where interest is a bigger part of each payment. Yield rises with growth and falls when growth stops, entirely mechanically.
Fee timing. Whether an origination fee is recognised at issue or spread across the term will move yield materially, and the two treatments look identical in a monthly total.
An agent that reports "yield fell 30 basis points" is unhelpful. An agent that reports "yield fell 30 basis points, of which 24 is the Poland mix shift and 6 is unexplained" is a different artefact entirely.
The reconciliation#
Between your operational reporting and the general ledger there is a gap. There is always a gap. Timing differences, write-off treatment, foreign exchange, interest accruals, provisions posted at a different grain.
The instinct is to explain it when asked. The better approach is to publish it every month as a standing line item with each component named and sized.
A gap of 0.4% made of four named components is a control. The same gap, unreported until a funder's analyst finds it, is a finding — and findings are expensive out of all proportion to the number that caused them.
Nobody has ever lost a funding line because the reconciliation gap was 0.4%. People have lost them because nobody could say what the 0.4% was made of.
Building this is unglamorous and takes a few weeks. Measured by how much easier it makes every subsequent conversation with a funder, auditor or acquirer, it is the highest-return thing we have built for lending clients.
Define it before you measure it#
- FX rates fixed per reporting period and published on the report. Otherwise currency movement reads as commercial performance.
- Accrual or cash basis, stated, and never mixed within one view.
- Month end is the same date for everyone. Calendar month end and processing month end differ in most loan management systems, usually by a working day, and that difference will produce a permanent unexplainable gap between finance's numbers and yours.
- Yield denominator is average outstanding, computed daily and averaged, not the opening or closing balance.
- Write-offs stated separately from repayments, always.
The dimensional model underneath#
fct_paymentat one row per received payment, with principal, interest and fee split at source rather than allocated laterfct_disbursementat one row per payoutfct_balance_daily, a daily snapshot of outstanding principal by loan — the single most valuable table in the estate and the one most often missingdim_gl_component, mapping each reconciliation difference to a named, owned categorydim_fx_rate, at period grain, with the rate that was actually applied- Metrics for
cash_in,cash_out,yield,principal_outstanding,gl_variance
Without fct_balance_daily, average outstanding is an estimate and every historical yield question becomes a reconstruction.
The agent#
The behaviour worth copying is the last line. The agent does not round the unexplained residual away. Six basis points is small, and small unexplained residuals are exactly where the interesting problems hide. Naming it as open costs nothing and means somebody looks.
What good looks like#
You can do all of the following without preparing for them:
- Reproduce any month's cash position from source, without a manual step
- Explain the ledger variance by named component, for any month in the last two years
- Decompose a yield movement into product mix, market mix, book age and pricing
- Show the daily outstanding balance series that every ratio is built on
- Point at the residual you cannot explain, and say how big it is
That fifth one is the mark of a team that is trusted. Everybody has a residual. Very few report it.
The series, in one line#
Six domains, six agents, one dimensional model underneath all of them. The pattern repeats every time: define the metric once so it cannot be reconstructed wrongly, give the agent the dimensions it needs to decompose a move, and make it prove the why before it is allowed to interrupt anybody.
That last constraint is what separates a monitor people keep from an alert channel people mute.
Want this KPI under watch first?
The Monitoring Pod stands up one agent per KPI domain, on your dimensional model, with the decomposition already done before it interrupts anybody.