One payment, forty invoices, no remittance advice
In short
A receipt with no remittance advice is not an unidentifiable payment. It is an unresolved payer plus an unenumerated set of open invoices. Resolve the payer from the bank account identifier rather than the counterparty name, enumerate the subsets of their open items that sum to the receipt, and when 2 different subsets both fit, apply neither.
Key takeaways
- Resolve the payer before the invoices. A bank account identifier is stable; a counterparty name is free text that 4 systems have already rewritten.
- Bound the subset search. Capping candidates at 6 open items turns 1.1 trillion combinations into roughly 4.6 million, which a database enumerates in under a second.
- Ambiguity is a result, not a failure. If 2 subsets both sum to the receipt, the system escalates and never picks the more plausible one.
- A wrong application costs more than an unapplied receipt, because it surfaces weeks later as a dispute nobody can reconstruct.
- Self-declaration works when the customer ticks boxes against their own PO numbers, not when you ask them to explain their payment.
A credit lands for 48,210.00 and nothing in the ledger is 48,210.00. Before anyone files it as unidentified, be clear about what is missing. Not the payment, which is sitting in the account, but 2 joins: which customer sent it, and which of their open invoices it was meant to clear. Those are separate problems, solved in that order, because subset matching against the wrong customer's open items will produce an answer and the answer will be wrong.
The reason to be strict is that the costs are asymmetric. An unapplied receipt is visible and ages in a report. A wrongly applied one is invisible: the invoice it cleared goes quiet, the invoice it should have cleared keeps ageing and gets chased, and the error resurfaces in November as a dispute about a payment made in July. Design for a system that would rather leave money unapplied than apply it plausibly.
The query that decides whether this receipt is really unidentifiable
Run this before touching any matching rule. One candidate-set query separates the 3 states that matter: solvable now, ambiguous, and genuinely unknown.
- Resolve the payer from the account, not the name. Take the counterparty account identifier off the bank feed and look it up against every account that has ever paid you. One customer back means you have your ledger; 2 means a shared payment factory and a larger problem.
- Pull the candidate pool. Every open item for that customer and its known sister entities, dated between the oldest open item and the receipt. Include credit notes as negative items — a missing credit note is behind a large share of failed matches.
- Search exact subsets first. Find every combination whose net total equals the receipt to the cent, before any tolerance is applied, because tolerance multiplies what fits.
- Count the answers, then act on the count. Exactly 1 subset applies. 2 or more stops. Zero widens once, by one bounded step, and counts again.
- Store the search, not just the outcome. Keep the pool, the subsets found and the rule that decided, so a disputed application can be explained a year later.
Step 1 carries most of the value and is the step teams skip, because the statement shows a name that looks close enough. It is not. That name is free text that has passed through the payer's ERP, their bank, any intermediaries and your bank's statement generator, and each of those may truncate or rewrite it. What survives that journey is covered in what a payment narration field can actually carry.
Four ways the remittance advice exists but never reaches your ledger
Usually the customer did send one. It went somewhere your matching process cannot see, and each destination has a different fix and a different owner.
| What happened | How to confirm it | The structural fix |
|---|---|---|
| Advice emailed to a person — a sales rep, or someone who left | Search company inboxes for the amount or the payer name on the receipt date | One published remittance address, printed on the invoice, monitored by the process that parses it |
| Advice is a PDF; only the bank statement row reaches the ledger | The feed row has a short narration while the customer can produce a document listing 40 invoice numbers | Parse the attachment into a structured remittance record and match against that, not against statement text |
| Payer name on the credit is absent from your customer master | The customer confirms a payment on a date and amount you filed as unknown | A payer alias table keyed on the account identifier, with the name held as evidence rather than as the key |
| One transfer covers invoices raised by 2 of your legal entities | No subset within either entity sums to the receipt; a subset across both does | Let the pool span entities, then split the receipt into 2 applications with an inter-company reference |
Row 2 costs the most, because it looks like a data problem and is a routing problem. The detail exists in full, in a file, and nobody built the path from that file into the matcher — so somebody retypes 40 invoice numbers. That path is the sort of plumbing we scope as internal tools and operations builds.
The alias record that stops the same payer being a stranger every month
Payer resolution deserves a stored object rather than a fuzzy-name function called at match time, because resolution is evidence you accumulate. Work out once that a remitting account belongs to a customer and it should never be worked out again.
- Key on the account identifier. It does not change when the payer renames a subsidiary or moves the payment run to a treasury team.
- Keep the raw string. Store the counterparty name exactly as delivered alongside a normalised form; the raw string is how a bad alias gets audited.
- Carry the evidence and the confirmer. An alias a collector confirmed on a call is stronger than one inferred from a single match, and the record should show which it is.
- Hold a confidence state, not a boolean. Provisional aliases may only propose a pool. Confirmed aliases may let a single exact subset auto-apply.
- Expire nothing automatically. An alias falling out of use is not evidence it was wrong, and deleting it destroys the audit trail.
Fuzzy name matching is a guess dressed as an algorithm. An alias table is the same guess, made once, by a person, with their name on it.
When several combinations of invoices add up to the same number
Understand the shape of the search before tuning it. 40 open items admit roughly 1.1 trillion combinations, which nobody enumerates. Bounding subset size collapses that: combinations of up to 6 items drawn from 40 come to about 4.6 million, which a database walks in well under a second. Almost every real lump-sum payment clears a handful of invoices, so the bound costs little and buys a search that terminates.
The interesting failure is not an empty result. It is several results. As the pool grows and amounts cluster — recurring monthly charges, identical licence lines, the same freight fee on every consignment — the chance that 2 different subsets sum to the same total rises sharply. Widening tolerance makes it worse, because every item allowed to be approximately right multiplies the combinations that qualify.
Where the shortfall is systematic rather than random — the same payer, always a little light — a wider tolerance is the wrong instrument, because the gap has a cause and an owner. That diagnosis is in why payments keep arriving short by small amounts. The order of operations across exact, tolerance, subset and learned matching belongs to the cash-application matcher specification; this page governs only the case where the remittance is absent.
Getting the payer to tell you what they paid for
Self-declaration is the third rung and it works better than its reputation, provided the question is closed. "We received a payment, please advise allocation" asks their AP team to do reconciliation on your behalf, and they will not. A message listing their open items with your invoice number, their PO number, the date and the amount, asking them to tick what this payment covers, is a 2-minute job at their end and arrives already structured at yours.
- Send to the remittance address, not the buyer. The person who ran the payment can answer; the person who signed the contract cannot.
- Lead with their reference. Their ledger is organised by PO number, so a list sorted by your invoice number is a list they must translate first.
- Offer a reply that is not prose. Checkboxes against rendered open items, or a table they amend and return, both beat free text you then have to parse.
- Set an expiry and a fallback. If nothing returns inside 14 days the receipt stays unapplied and the account goes to a person — it does not quietly land on the oldest invoice.
When those messages go unanswered it is usually the address rather than the request, which is the same failure that kills payment reminders. The diagnosis in why reminder emails go unanswered applies here unchanged.
What the rest of the process must do while the receipt is unresolved
An unresolved receipt is not inert. It changes what everyone else should be doing, and a system that fails to propagate that damages the relationship while you work it out.
- Suppress dunning on the candidate set. Every invoice in a live pool is possibly paid, and chasing it while you hold their money is the most damaging thing the automation can do.
- Keep the balance visible, not buried. It belongs on the account as unapplied cash with an owner and a due-by date, in the shape set out in what unapplied cash really represents.
- Feed the state into prioritisation. An account sitting on a large unresolved receipt needs a different action from one that has not paid, which is why the collections worklist should be ordered by what a call can change.
- Escalate on age, not size. A small receipt unidentified for 90 days is a broken process; a large one from Tuesday is just Tuesday.
All of it sits inside receivables, cash application and dunning, and in the finance operations builds that carry it the hard part was never the arithmetic. It was deciding in advance, in writing, what the software is allowed to conclude on its own.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
How do you match a lump-sum payment to invoices when no remittance advice arrives?
Resolve the payer first, then enumerate subsets of that payer's open items that sum to the receipt. Payer resolution should key on the remitting account identifier rather than the counterparty name, because names get truncated and rewritten in transit. Bound the subset search by size — up to 6 items covers almost every real payment — and treat the number of matching subsets as the decision: 1 applies, several escalate, none triggers a structured question to the customer.
Is it safe to apply an unidentified receipt to the oldest open invoice?
No, unless a written standing instruction from that customer says their payments are allocated that way. Oldest-first is a convention, not information, and applying it invents a fact about what the payer intended. The visible cost is small and the invisible cost is not: the invoice actually paid keeps ageing and gets chased, producing a dispute that costs far more to unwind than the receipt cost to hold.
What should happen when two different sets of invoices both add up to the payment?
Neither is applied, and both go to a person with the evidence attached. Ambiguity is a legitimate output of a matcher, and breaking the tie on a confidence score means choosing between 2 arithmetically identical answers using a signal unrelated to what the payer intended. Show the candidates, the payer, the date window and the amounts, and let a collector settle it with one call.
Why does the bank credit show a payer name that does not exist in our customer master?
Because the name on a credit is the remitting party as their bank described it — often a payment factory, a parent company or a provider acting for them, and sometimes simply truncated by a field limit in the chain. Key payer resolution on the account identifier and store it as an alias record, so the same stranger is investigated once.
Should the subset search include credit notes and on-account credits?
Yes, and omitting them is one of the most common reasons an exact match fails. A payment that nets a credit note against 3 invoices equals no combination of invoices alone, so the search returns nothing and a clean piece of arithmetic gets filed as unidentified. Include open credit notes and on-account credits in the pool as negative items.
- cash application
- receivables
- payment matching
- finance operations
The work behind this page
Builds from our portfolio that this page draws on.
Read next
- Unapplied cash: money you have, against invoices you cannot nameMoney in the bank that no open item has been matched to. The balance is not an accounting curiosity — it overstates aging, misdirects collections, and hides disputes inside a number nobody owns.definition
- Payments arrive short by small amounts and break every auto-matchChronic small shortfalls have 4 causes with 4 different owners, and the shape of the delta tells you which one you have long before anyone picks up the phone.diagnostic
- A promise to pay is a record with an expiry, not a note in a CRMAmount, date, invoices covered, channel, evidence, state. Six fields turn a collections commitment from a memory aid into something a system can act on.definition
- Your reminder emails are read by nobody: where the sequence actually breaksBefore rewriting the copy, prove the message reached a human who is allowed to act on it. Most silent dunning sequences are failing at the address, the queue or the missing reference — not at the wording.diagnostic
- Decline reason codes: what to record at the moment of the decisionA reason recomputed from today's data is not the reason the applicant received. Bureau values, balances and documents move, so the reason belongs in the same transaction as the decision.definition
- First-payment default is an origination defect, not a collections eventA borrower who never makes payment one is rarely a credit decision that aged badly. The instrument was never lodged, the date was wrong, the payment went unattributed, or the income was never there.definition
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation