Skip to content

Part 4 of 7 · Payout reconciler series ~5 min read

The adjustment lines nobody explains

Almost every line in a settlement report carries a type code a parser can map in one line of configuration. The rest carry a sentence instead: a reserve adjustment, a terminal rental, a correction to an earlier fee. There are not many of them, and they are why reconciliations get abandoned.

Key takeaways

  • Type codes first, remembered wording second, the model third, a person last.
  • The model chooses from a closed list of eleven types, or returns null.
  • A model’s answer is used at once, but only remembered after a person confirms it.
  • PDF-only statements are read by the model and must sum to their own printed total.
  • VAT treatment is copied from the provider’s invoice line, never inferred.

Four ways a line gets its type

A settlement line typed by code, by remembered wording, by a model or by a personA vertical chain inside an AWS account container, entered from a box on the left labelled A line, with a code, a text, or both. Known type code, such as charge, refund, fee or payout, with a side exit labelled yes leading to Typed by rule, with no model and no judgement. Seen this wording, meaning the same provider and the same text, with a side exit labelled yes leading to Reuse the answer, which a person already confirmed. Model reads it, choosing one type from a closed list or null, with a side exit labelled null leading to Ask a person, and remember the answer. The final step is Post, flagged: typed by the model and awaiting a look. A note says a rule is never wrong about its own code and a remembered answer was checked once, while the model can be wrong, so it comes last.AWS ACCOUNTA linewith a code, a text,or bothKnown type code?charge, refund, fee,payout and so onTyped by ruleno model andno judgementyesSeen this wording?same provider,same textReuse the answera person alreadyconfirmed ityesModel reads itone type from aclosed list, or nullAsk a personand rememberthe answernullPost, flaggedtyped by the model,awaiting a lookA rule is never wrong about its own code and a remembered answer was checked once. The model can be wrong, so it comes last.
Fig 1. Two chances to avoid a model call before the model is called, and a person behind the model rather than in front of it.
  • App integration
  • Machine learning
  • Management
  • Analytics
  • People

What the unknown lines look like

They are dull, and that is the problem. Reserve adjustment. Terminal rental Aug. Dispute fee. Fee correction for period. Advertising services. Each is an amount with a sentence where a type code should be, and each belongs somewhere different: a movement between two assets, an overhead, a dispute cost, a reduction of an earlier fee, a marketing expense.

A bookkeeper facing forty of these at month end does what anybody would and posts them all to suspense or to bank charges. The first loses them. The second overstates fees, understates marketing, and if one of them was a reserve release, books an asset coming home as a negative cost.

The closed list

The model is not asked what the line is. It is asked which of eleven types it is: sale, refund, dispute, dispute reversal, processing fee, other charge, reserve held, reserve released, payout, correction or marketing, with null available and encouraged. A free description from a model is one more sentence nobody can post; a type from a closed list is a posting rule.

Its answer is used straight away, so the month is not held up, but the line is flagged and the wording is not remembered until a person has confirmed the type. That asymmetry is deliberate. A remembered answer is applied silently to every future line with the same wording, and a silent rule should only ever come from a person.

Null is the answer the design wants whenever the text is genuinely ambiguous. Adjustment on its own could be a correction, a reserve movement or a goodwill credit, and a model that picks the likeliest of the three is right often enough to be trusted and wrong often enough to matter. A person decides instead, and can mark a wording as one never to remember, so a bare Adjustment comes back to a person every time it appears.

A year of lines, by how they were typed

One year of settlement lines grouped by how each was typedA horizontal row of five boxes joined by arrows. Twenty-seven thousand and seventy-one lines from four providers in one year. Twenty-six thousand three hundred and eighteen typed by code, mapped by a rule in configuration. Six hundred and eleven typed by wording, remembered from an earlier answer. One hundred and forty-two read by the model, of which one hundred and nineteen were typed and twenty-three came back null. And twenty-three sent to a person, each answer then remembered. A note says most of the one hundred and forty-two came in the first three months, and after that the same wordings came back as remembered answers.ONE RETAILER'S YEAR OF SETTLEMENT LINES27,071 linesfour providers,one year26,318 by codemapped by a rulein configuration611 by wordingremembered from anearlier answer142 read119 typed by themodel, 23 null23 to a personeach answer thenrememberedMost of the 142 came in the first three months. After that, the same wordings came back as remembered answers.
Fig 2. The model’s share is about half of one per cent of the lines, and it shrinks, because every confirmed answer turns a future model call into a lookup.
  • Machine learning
  • Management
  • Analytics
  • People

Statements that only come as PDFs

One provider in four sends its monthly charges as a PDF invoice rather than as lines in a report: terminal rental, a compliance fee, the occasional hardware charge. There is no export to parse, so this is the other thing the model reads. It returns each charge with its description and amount, and code checks that those amounts sum to the invoice’s own printed total before a single line is accepted.

Amounts read from a PDF are the only figures in the system that come out of a model, which is why they carry a check the parsed reports do not need. A decimal point read in the wrong place does not survive a sum that has to match.

VAT is copied, not decided

The charges on a provider’s statement do not all carry the same VAT treatment, the VAT treatment of payment-related services has been argued in the courts more than once, and HMRC revised its guidance on payment handling as recently as late 2025. That is not a question a classifier should be answering. The system copies the treatment and the VAT amount the provider’s invoice shows against each charge, stores them beside the line, and leaves the judgement to whoever prepares the return.

What is not in doubt is the other side. Output VAT on a sale is worked out on what the customer paid, not on what the provider passed on, which is one more reason a payout cannot be the sale.

The next post is where the money reaches the bank: matching deposits to payouts, and closing a month on the date things were sold.

All posts