Duplicate Invoice Detection in Odoo 20: Red and Yellow Warnings

Paying the same vendor bill twice is one of the most expensive quiet errors in accounting. It rarely looks like fraud or carelessness. A supplier emails an invoice, someone uploads the PDF a week later, a third copy arrives through an import, and because each copy was entered by a different person at a different moment, both get posted and both get paid. Recovering the second payment takes months of awkward emails — if anyone notices at all. Duplicate detection exists to catch the second copy while it is still cheap to fix, and in current Odoo that detection speaks in two colours: red and yellow.

First, an honest version note

The improved duplicate detection is often marketed as an Odoo 20 feature, and Odoo 20 users absolutely get it — but the Odoo 20 release notes themselves flag it as available from 19.0. The wording in the Accounting section is precise: “Invoice duplicate detection has been improved with two levels of warnings for invoices and bills: red invoices that are highly likely to be duplicates that should be corrected and yellow potential duplicates that should be investigated before posting. After posting, only red warnings will remain.”

That matters for two reasons. If you are upgrading from Odoo 19 to 20, do not expect a brand-new duplicate system to learn on go-live day; the two-tier model is already the one your team may know. And if you are evaluating Odoo 20 from an older version such as 17 or 18, this is still a genuine step up for you — the improvement simply landed one version earlier than the headline suggests. Either way, Odoo 20 is where most teams will meet it, so it deserves a clear explanation of what each colour is asking you to do.

Red versus yellow: two different instructions

The two levels are not a severity decoration. They are two different workflows, and treating them the same way defeats the purpose.

Red: highly likely a duplicate — correct it

A red warning means Odoo considers the document highly likely to be a duplicate of another invoice or bill already in the system. The release notes' instruction is blunt: red documents should be corrected. In practice that means stop, open the suspected original, and compare the two side by side. If the new document is the same obligation entered twice — same supplier or customer document, same economic event — the correct action is to remove or cancel the duplicate copy, not to post it and sort it out later. A red warning that gets posted anyway becomes a real liability on the ledger and, for a vendor bill, a real candidate for a second payment.

Yellow: a possible duplicate — investigate before posting

A yellow warning means the document might be a duplicate. Legitimate business produces look-alikes constantly: a monthly subscription that bills the same amount every month, staged invoices on one contract, a corrected invoice that replaces an earlier one, two genuinely separate orders that happen to total the same. Yellow is Odoo saying the resemblance is strong enough that a human should look before this becomes a posted entry. Investigate, decide, and only then post. The investigation is the feature — the warning buys you a pause at exactly the moment a pause is still free.

Where duplicates actually come from

Understanding the entry points helps a team respond to warnings without resentment, because most duplicates are process accidents, not personal mistakes:

  • Multiple intake channels. The same supplier invoice arrives by email, through a portal, and as a paper copy in the mail. Each channel has a different person who dutifully enters it.
  • Digitisation plus manual entry. A bill is uploaded for automatic processing and, while it waits, someone keys it in by hand from the same PDF.
  • Imports and migrations. Opening balances and historical imports can re-create documents that were already entered live, especially in the first months after a go-live.
  • Re-sent documents. A vendor who has not been paid re-sends the invoice — sometimes with a new transmission date — and it looks like a new bill to whoever receives it.
  • Customer-side mirrors. The detection covers customer invoices as well as vendor bills. A duplicated sales invoice inflates receivables, distorts revenue, and can trigger a tax filing on money that was never owed twice.

Working a red warning, step by step

  1. Do not post. Leave the flagged document in draft while you check. Everything is easier before posting.
  2. Open the suspected match. Compare the partner, the document reference, the dates, and the amounts with your own eyes. The warning is a strong signal, not a verdict; the comparison is your verdict.
  3. Decide which record is authoritative. Usually it is the one that is already posted, already linked to a purchase order or receipt, or already partially paid. The newcomer is normally the copy.
  4. Remove the copy properly. Delete or cancel the duplicate draft so it cannot be resurrected later by someone clearing a draft queue. If your process requires a trail, note in the chatter why it was removed and which document it duplicated.
  5. If it is genuinely not a duplicate, document why — for example, a second delivery under the same reference — before posting. The next person who sees the warning deserves your reasoning, not a mystery.

Working a yellow warning without slowing AP to a crawl

Yellow warnings fail in two opposite ways: teams that ignore them entirely, and teams that investigate each one so exhaustively that bill entry grinds down. The middle path is a short, consistent check. Confirm the partner is the same, confirm whether the reference or bill number has been seen before, and confirm whether the amount matching is a coincidence of a recurring charge or the same charge arriving twice. Recurring charges are the classic yellow case: rent, subscriptions, and retainers are supposed to look identical month to month, and the distinguishing evidence is the service period, not the total.

Make the decision visible. A short chatter note — “checked against the September bill; this is the October period, not a duplicate” — converts a warning into an audit trail and keeps the next reviewer from repeating your work.

What changes after posting

The release notes add a detail that shapes month-end work: after posting, only red warnings remain. Yellow is a pre-posting tool. Once a document is posted, the softer “possible duplicate” signal goes away, while the strong red signal persists on posted documents. Two consequences follow. First, yellow warnings cannot be delegated to a later review — if nobody investigates before posting, that layer of protection is simply gone. Second, red warnings on posted documents become a genuine period-end control: a finance team can sweep for red-flagged posted bills before paying them or before closing the period, and still catch the worst cases. Build that sweep into your payment run routine, because a posted duplicate bill that reaches the payment stage is one click away from becoming a duplicate payment. Note that Odoo separately hardens the payment step itself: the payment wizard in current Odoo detects pending payments and deducts them from the amount due, which reduces — but does not eliminate — the double-payment risk that duplicate bills create.

Detection is a control, not a cure

Keep the limits in view. Duplicate detection works on documents inside Odoo; it cannot see the copy that is still sitting in someone's inbox, and it cannot judge whether two similar bills represent one obligation or two — that judgement is precisely what the yellow tier hands back to you. It also depends on disciplined master data. The same supplier created twice under two names, or references typed inconsistently, makes every matching system weaker. Treat partner deduplication and consistent reference entry as part of the same control. Finally, warnings only work if the culture allows them to: if staff learn that clearing warnings fast is praised and investigating them is friction, the colours will be clicked through. The teams that benefit are the ones where “I stopped a red one” is recognised as money saved — because it is.

The bottom line

For Odoo 20 finance teams, the routine is simple to state: red means stop and correct it, yellow means look before you post, and after posting only red remains to protect you. The feature arrived with 19.0 and carries into 20 unchanged in concept, which is good news — it is a stable, learnable control. Teach the two colours, write down your team's investigation steps, add a red-warning sweep to your payment and month-end routines, and duplicate invoices become a caught exception instead of a recovery project.

Further reading

  • Odoo 20 Release Notes — Accounting section; the “Improved duplicate detection” entry, including the note that it is available from 19.0 and that only red warnings remain after posting.
  • Odoo 19 Release Notes summary — Synconics — the same two-level duplicate detection described in the version where it first appeared.

Leave a Comment