Your round-trip check produces false matches when amounts differ

The statement

When you open six months of statements for Halden Trading, a demo case, a synthetic UK SME account built for this test, there are 497 transactions and GBP 1,927,352.83 in credits between February and July 2026. One same-day pair stands out: on 10 March, GBP 45,000.00 came in from CASTLE ROW HOLDINGS LTD and GBP 45,000.00 went back out to the same counterparty.

Nothing was bought or sold. Turnover rose by GBP 45,000.00 as the money passed through.

The same reading becomes harder when the money is spread across dates or split across rows. GBP 62,500.00 came in from Castle Row on 14 April and GBP 62,500.00 went back out on 15 April, which is still visible as a pair. The Lindholme movement is not. On 12 May, GBP 18,400.00 and GBP 12,750.00 came in from LINDHOLME PARTNERS LLP; on 13 May, another GBP 13,850.00 came in; and on 14 May, GBP 45,000.00 went out to Lindholme. The three incoming payments add to GBP 45,000.00, but no single row matches another row. The match exists only as a sum across three dates, inside 497 lines. A second Lindholme movement is split two against two: GBP 27,000.00 and GBP 9,500.00 came in between 7 and 9 July, followed by GBP 22,500.00 and GBP 14,000.00 going out. Each side totals GBP 36,500.00.

Exact matching finds four sets on Halden: the same-day pair, the next-day pair, the three-payment split and the two-against-two movement. Together they account for GBP 189,000.00, or 9.8% of the GBP 1,927,352.83 credited over the six months.

The allowance

The check matches money in to the same money out within three working days, and can combine up to three payments in against up to two payments out, so a split transfer still counts as one round trip. That last adjustment is meant to catch a payment reduced by a fee or another small deduction. It catches the shaved Castle Row payment: GBP 38,000.00 came in on 9 June and GBP 37,848.00 went out on 10 June, a difference of GBP 152.00, or 0.4%. Exact matching misses it.

Once several payments can be combined, a 0.5% allowance produces 87 false matches on Halden and 84 on Carrowmere, a company with 473 transactions and no planted round trips. A false match is a matched set that is not exactly one planted round trip. Combining payments is what makes the number multiply: at the same allowance, comparing one payment with one payment produces ten false matches on Halden instead of 87. The extra combinations create more sums to test against the same allowance, so the setting makes the check suspicious of ordinary statements as well as statements containing real round trips.

How far amounts may differ Payments combined Planted round trips found False matches: Halden False matches: Carrowmere
exact up to 3 in, 2 out 4 of 5 0 0
0.10% up to 3 in, 2 out 4 of 5 53 52
0.25% up to 3 in, 2 out 4 of 5 69 68
0.50% up to 3 in, 2 out 3 of 5 87 84
0.50% one in, one out 3 of 5 10 11

A credit analyst would object that exact matching is too strict because real payments get trimmed by fees. The answer is that allowing 0.5% between one payment and one payment is the only tested setting that finds the shaved Castle Row round trip. It finds one real event and costs ten false matches on Halden on these statements, which is a genuine trade.

The damage

The widest allowance with combinations returns fewer real events. It returns three of Halden’s five planted round trips, rather than four, and the two-against-two Lindholme movement disappears from the result. Because each matched row is used once, the four Lindholme payments are divided across three different sets. The GBP 22,500.00 payment out on 8 July is matched with invoices from K&M FACILITIES LTD for GBP 5,040.37 and SEVERN VALLEY INNS LTD for GBP 21,875.54, plus a GBP 4,324.33 payment to ASHDOWN PACKAGING LTD. The payment in on 7 July is matched with an invoice from BRAMLEY AND SONS LTD and payments to VALEBRIDGE PRODUCE and KINGSMEAD DAIRY LTD. The payment out on 9 July is matched with three customer invoices and a payment to STANMORE BEVERAGES LTD. The round trip has not been rejected cleanly; its rows have been spent on other matches.

That is worse than a simple miss. The GBP 38,000.00 Castle Row payment comes back inside a set containing two customer invoices, a supplier payment and a GBP 26,498.66 VAT payment to HMRC.

A reviewer opening that set sees a real transfer beside ordinary trading rows and can conclude that the check is noise. The count still reports the set as a match, but cannot show that a real event has been buried inside an unrelated one.

Decisimo decision engine

Put these checks into a decision flow

Create rules for credit, fraud or collections, then run them on live decisions.

The test

The comparison has a known answer because five round trips were planted in Halden’s statement before the check ran, alongside two decoy rows. That lets you measure both sides of the result. On a production statement, you can count what the check found, but not what it missed: nobody has labelled which payments were genuinely round trips. A controlled statement turns misses and false matches into quantities you can test.

Use a statement you control and plant three known cases: an exact pair, a split set and one payment shaved by a small amount. Run the check at the setting you intend to use, then count the planted cases it misses and the matched sets that were not planted. Run the same setting on a statement with nothing planted; those false matches show what an ordinary customer’s review queue will look like. Generate the statements from a fixed seed, so the same seed produces the same statements and repeating the sweep produces the same table.

The decision

The decision flow turns the number of matched sets into one of three outcomes. Three or more matched sets produce a decline with reason code RT_PATTERN; one or two produce a referral to a person with reason code RT_REVIEW; none produces a pass with reason code RT_NONE. Each set carries the payments in, payments out, dates, counterparties and volume, so you can open the rows behind the count and read the statement itself.

On your next review, take the small allowance you currently use and run it once against a statement with nothing planted. Record how many matched sets it creates before deciding what the count means. That gives you a false-match number beside the real cases, instead of asking one count to speak for both.

Frequently asked questions

What causes false matches when a round-trip check combines payments?

Combining incoming and outgoing payments creates more possible sums for a round-trip check to compare against its amount allowance. Ordinary transactions can then fall within the permitted difference even when they do not form one real round trip, so a wider allowance can make the check noisier.

How can a small amount allowance affect round-trip matching?

A small amount allowance can catch a payment reduced by a fee that exact matching misses, but it can also create false matches among ordinary statement rows. Use the allowance only after measuring what it finds on a controlled statement and what it returns on one with no planted round trips.

Can a match count show whether a round-trip check missed a real transfer?

A match count from a production statement cannot show which real round trips the check missed, because the statement has no labels identifying genuine transfers. A controlled statement with planted round trips provides known cases, so a lender can count misses as well as false matches.

Why can a false match mislead a credit reviewer?

A false match can bury a real transfer among unrelated customer invoices, supplier payments or tax payments. The count still treats the set as a match, but a reviewer may read the mixed rows as noise and miss the genuine event, so inspect the payments behind each matched set.

How should a lender test a round-trip check before using it?

A lender should test a round-trip check on a controlled statement with known exact pairs, split payments and a payment reduced by a small amount. Run the intended setting on that statement and on one with no planted round trips, then count missed planted cases and false matches. A fixed seed makes the statements repeatable.

Decisimo decision engine

Put these checks into a decision flow

Create rules for credit, fraud or collections, then run them on live decisions.