Reconciliation guide
Processor report, settlement file or bank statement? The source of truth for each field.
Your processor report, settlement file and bank statement disagree. Which is the source of truth for amount, fees, status, dates and FX? A field-by-field map.
By Sanjay Singh, Founder · Last updated:
Book a Recon demoOn this page 14 sections
The short answer
There is no single source of truth for a payment. Each field has its own authoritative source, and reconciliation is the work of checking the others against it. Your own ledger is authoritative for what you asked for. The processor is authoritative for its own identifiers and what it says it did. The settlement file is authoritative for what the provider paid you and what it deducted. The bank statement is authoritative for whether cash moved, and when.
Trouble starts when a team picks one record as “the truth” for everything. Pick the processor report, and you will believe payments that never settled. Pick the bank, and you won’t know which payments a batch credit contains.
Four records of one payment
- Your ledgerWhat you asked for. INTERNAL.
- Processor reportWhat the provider says it did. CLAIM.
- Settlement fileWhat it paid you, and deducted. SETTLEMENT.
- Bank statementWhether cash moved. CASH.
The field map
Use this as a starting point, and agree it with finance before you build matching rules on it.
| Field | Authoritative source | Check it against |
|---|---|---|
| Customer, beneficiary and purpose | Your ledger | The processor’s record of the beneficiary, for changed details |
| Requested amount and currency | Your ledger | The processor report, for amount or currency changes |
| Provider’s transaction id | Processor report or API | The settlement file, which should carry the same id |
| Execution status | Processor claim, confirmed by settlement | Settlement and bank; a claim alone is not an outcome |
| Final outcome of the payment | Settlement and bank together | Returns and reversals arriving later |
| Fee charged | Settlement file | Your contract rate or the quote you booked |
| FX rate applied | Settlement file or provider confirmation | The quote you gave the customer |
| Net amount received or paid | Bank statement | The settlement net, and any bank charges |
| Which batch a payment settled in | Settlement file | Your expected settlement date |
| Cash date | Bank statement booking and value dates | The provider’s stated settlement date |
| Refunds, chargebacks and reversals | Processor and settlement file | The bank, for the cash effect |
| Reserve held or released | Provider’s balance statement | Your own reserve tracking, batch by batch |
| Business day the payment belongs to | Your own cut-off policy | Each source’s time zone and cut-off |
The keys that connect the records
A field map only helps if you can tell which records belong to the same payment. That depends on identifiers, and each record carries different ones:
| Identifier | Set by | Appears in |
|---|---|---|
| Your reference or idempotency key | You | Your ledger, and the processor’s record when it echoes it back |
| Provider transaction id | The processor | API responses, webhooks, reports and the settlement file |
| Settlement batch id | The provider | The settlement file, and sometimes the bank narrative |
| End-to-end id | Whoever created the payment instruction | Bank payment files and ISO 20022 statements |
| Bank reference | Your bank | The bank statement and bank reports |
Store every identifier you receive against the payment, as it arrives. The processor id links your ledger to the settlement file; the batch id links the settlement file to the bank. If any link in that chain is missing, matching falls back to amounts and dates, which is where false matches come from.
A second example: whose fee is right?
Say your contract with a provider sets a 1.2% fee. The processor’s report shows the fee per payment rounded to two decimal places, the settlement file shows one fee line per batch, and the two differ by 0.84 across a batch of 700 payments.
The map says the settlement file is authoritative for the fee charged, because that is what was actually deducted. Your contract is what you check it against. The 0.84 is rounding: the processor rounds per payment, the settlement file rounds once per batch. Record the tolerance that accepts it, with the reason, and it is explained. Had the difference been 1% of the batch, the same check would have found a fee applied at the wrong rate.
Why the three records disagree
- Timing. The processor reports in real time, the settlement file the next morning, the bank after its own cut-off. The same payment belongs to different days in each.
- Gross and net. The processor shows the payment amount; the settlement file and bank show amounts after fees, refunds and reserves.
- Batching. The bank shows one credit for many payments, so it cannot confirm any single payment on its own.
- Time zones. A provider working in UTC and a bank working in local time will disagree about which day a late-evening payment belongs to.
- Corrections. Processors revise statuses, and providers send corrected files, after the original records were read.
- Rounding. FX and percentage fees round differently at different stages.
Rules for resolving a disagreement
- Never overwrite. Keep every record as it arrived. A later record adds evidence; it doesn’t replace the earlier one.
- Rank by question. Ask which field is in dispute, then look up its authoritative source in the map.
- Log tolerances. If you accept a rounding or timing difference, record the rule that allowed it, every time it is used.
- Set expectations. For each source, know what should arrive and by when, so a missing record is noticed.
- Leave it open until proven. A payment with a claim but no settlement or cash evidence is open, however confident the processor sounds.
A worked example
Say your processor’s report shows 1,000 payments paid on 30 September. The next morning’s settlement file lists 998 of them in the 1 October batch, net of fees, and the bank shows one credit for that batch net on 1 October. Two payments are missing from the file.
For those two, the processor’s paid status is only a claim. Checking the provider’s cut-off shows both were captured at 23:40 UTC, after the batch closed, and they appear in the 2 October file. They were never missing: they belonged to another batch. Without the cut-off rule, they would have been two false breaks. Without the settlement file, they would have been counted as cash a day early.
Balances held at a provider
Some providers hold money for you: a payout float you prefund, a reserve they keep, or collections waiting to settle. For those balances, the provider’s own balance statement is the authoritative record of what it says it holds, and your ledger is what you check it against.
Reconcile the balance, not only the payments. Your opening balance, plus money you sent in, minus payouts made, minus fees and reserves, should equal the provider’s closing balance. When it doesn’t, and no single payment explains the gap, you have an unexplained position: often a fee or adjustment the provider booked without telling you, or a payout it made that you have no record of. Those are the breaks that stay hidden longest when only individual payments are matched.
With more than one provider
The map stays the same when you add providers, but each provider needs its own row of details: which report is its settlement file, which identifiers it echoes back, its time zone and cut-off, and how it reports fees, refunds and reserves. Write these down per provider before the second one goes live. The most common mistake is assuming the second provider behaves like the first because its report has similar column names.
Setting it up: a checklist
- List every record you receive for a payment, by provider, with when it arrives.
- Agree the authoritative source for each field with finance, and write it down.
- Store every identifier each record carries, as it arrives.
- Record each source’s time zone and cut-off as configuration, not as knowledge in someone’s head.
- Set an expectation for each source: what should arrive, and by when.
- Decide which tolerances you accept, who owns them, and log every use.
- Treat every disagreement as an exception with evidence, never as an overwrite.
How Flominzo records it
Flominzo Recon keeps each record as evidence with a grade, INTERNAL, CLAIM, SETTLEMENT or CASH, and with its source and time of arrival. Matching rules, tolerances and expectations are versioned configuration, including each source’s time zone and cut-off. When sources disagree, the difference becomes an exception with the evidence attached, and no record is overwritten.
Questions
Is the bank statement always the source of truth?
For whether cash moved and when, yes. For which payments a batch contains, what fees were charged, or who the beneficiary was, no: the settlement file and your own ledger are authoritative for those.
Should we trust the processor’s paid status?
Treat it as a claim. It is authoritative for the processor’s own identifiers and view, but a payment isn’t finished until settlement and the bank agree.
What if the settlement file contradicts the processor report?
Keep both, raise an exception, and check timing first: most contradictions are cut-offs or corrections. If it isn’t timing, the provider needs to explain which is right.
Where does our own ledger fit?
Your ledger is authoritative for what you intended: who, how much, and why. It is the weakest evidence that money moved, so it is checked against the provider and the bank, never the other way round.
Do we need a separate source of truth for business dates?
Yes, and it should be your own policy. Each provider and bank has its own cut-off and time zone, so decide which business day a payment belongs to in your books, write the rule down, and map every source’s dates onto it. Most false breaks disappear once this rule exists.
Let’s make it specific to you.
Bring your systems, payment flows, and questions. We’ll help define the next step.
Talk to the team