Invoice dispute triager
A small system that reads incoming disputes about invoices, classifies each into one of a small fixed set of reasons, pulls together the specific evidence that reason needs, and puts a decision in front of a human with everything already attached. It never issues a credit note and never argues with anybody. Seven posts on the same system — one diagram at a time — with a cost breakdown and an engineering reference at the end.
- 01
An invoice dispute triager on AWS for a few dollars a month
The whole system on one page — a classifier, a gatherer and a router — plus the thing that makes it worth building: the evidence is assembled before a human is involved.
- 02
How a dispute gets recognised
Telling a dispute apart from a question, a remittance and an auto-reply, finding the invoice number, and stopping the chaser before anything else happens.
- 03
How a dispute gets classified
Six classes, one model call, and a deliberate escape hatch — because a confidently wrong class gathers the wrong paperwork, which is worse than gathering none at all.
- 04
How the evidence gets gathered
What gets pulled for each reason, why narrow beats complete, and the one-screen summary that turns a set of documents into an actual decision.
- 05
How a dispute decision gets recorded
Resuming the chaser correctly, the record a resolved dispute leaves, and the monthly report that turns fifteen individual disputes into one process problem worth fixing.
- 06
What the invoice dispute triager costs
About $2 a month. One Bedrock read per dispute is the only line that grows; the queue, the table, the mail and the storage are rounding errors. Plus the three ways the bill could surprise you.
- 07
Engineering reference: the invoice dispute triager architecture
Same system, drawn purely for engineers. Service names, region, Lambda inventory, IAM scopes, the schemas and the exact model id.
Frequently asked questions
- What is an invoice dispute triager?
- A small serverless system that reads emails and portal messages saying an invoice is wrong, works out which of a handful of standard reasons is being claimed, gathers the records that bear on that reason, and hands a person a decision with the evidence attached. It never issues a credit note by itself.
- Why classify rather than just forward?
- Because the evidence needed is completely different per reason. A quantity dispute needs the delivery note; a price dispute needs the quote; a duplicate claim needs the payment history. Classifying first means the evidence is already gathered when a person opens it, which is the difference between a two-minute decision and a two-day thread.
- Does it pause the invoice?
- It flags it as disputed and stops any automatic chasing, which matters — nothing damages a customer relationship faster than a dunning reminder sent while a genuine dispute is open. It does not change the amount owed; only a person does that.
- What if the dispute is not really about the invoice?
- That is common and it is one of the classifications. “We are unhappy with the work” is not an invoice error, and routing it to accounts is how it becomes one. It goes to whoever owns the relationship instead.
- What does it cost to run?
- A few dollars a month. Dispute volume is low even in businesses that feel like they have a lot of them. See part six.