SAP's duplicate invoice check is a built-in control that compares key fields on an incoming invoice against documents already posted or parked in the system. When you enter a new invoice, SAP compares the vendor, the invoice reference (the Reference field), the company code, the currency and the invoice date. Logistics Invoice Verification also compares the gross invoice amount; Financial Accounting compares the amount only when no reference has been entered. If every compared field matches an existing document, the system flags the entry as a potential duplicate.
Which message you see depends on the posting path. Invoices entered in Financial Accounting (FB60, FB01, F-43) raise message F5117. Invoices entered in MIRO raise M8108 when the match is an accounting document, or M8462 when it is a logistics invoice document. F5117 is a warning by default, and the MIRO messages are a warning or an error depending on how the M8 messages are set in Customizing. A warning can be acknowledged and the invoice posted, so unless your team has made these messages errors, the duplicate check is an advisory guardrail rather than a gate.
This is also not a system-wide default. The SAP duplicate invoice check must be activated individually within each vendor master record, and that one flag governs both posting paths. If it is not set for a given vendor, SAP performs no comparison at all when invoices are entered for that supplier. Organizations with thousands of vendors need a deliberate rollout strategy, because any vendor without the flag enabled is effectively invisible to the duplicate check.
Two main posting paths exist for supplier invoices in SAP, and both support duplicate detection, but they do not behave the same way. Logistics Invoice Verification (MIRO) handles invoices tied to purchase orders within the MM module. FI direct posting (FB60) handles invoices posted directly through Financial Accounting without a purchase order reference. The two paths search overlapping pools of documents but compare different fields, and understanding where they diverge is critical for anyone relying on SAP to catch duplicate supplier invoices.
The gaps that let duplicates through are ones SAP documents. The second copy carries a reference typed differently, a different date or, in MIRO, a different gross amount. The vendor's flag was never set, or was set after the first invoice was posted. The original was reversed. The document is a credit memo entered in MIRO, which is not checked by default. Or a field was taken out of the comparison in Customizing.
The financial consequences are concrete. A duplicate that clears both posting and payment creates a recovery effort that pulls AP staff into investigation cycles, vendor outreach, and manual journal corrections. Depending on the vendor relationship and the amounts involved, duplicate payments can strain commercial terms and erode the trust your finance team has built with key suppliers.
How Duplicate Checks Work Differently in MIRO and FB60
Each posting path runs its own check, with its own fields and its own messages. Knowing what each one compares, and what it leaves out, is the difference between a reliable control and a false sense of security.
MIRO: Logistics Invoice Verification
When you post or park an invoice in transaction MIRO, Logistics Invoice Verification first checks the accounting documents in Financial Accounting, then its own invoice documents that contain errors or were entered for verification in the background, as SAP's documentation of the duplicate check describes. Every posted invoice has an FI accounting document whichever path it came through, so an invoice already entered through FB60 or FB01 is within MIRO's reach.
The standard comparison uses six fields: vendor, currency, company code, gross invoice amount, reference and invoice date. In Customizing (Materials Management → Logistics Invoice Verification → Incoming Invoice → Set Check for Duplicate Invoices, transaction OMRDC) you can take the reference, the invoice date or the company code out of the comparison for a company code; SAP warns that dropping the company code can slow the check down. A match raises M8108 or M8462 for an invoice entered on screen. Invoices created in the background have their own messages, M8 804 and 805.
By default MIRO checks invoices only. Credit memos and subsequent debits or credits entered in MIRO are not compared.
FB60: FI Direct Posting
Transaction FB60 handles invoices posted directly into Financial Accounting, bypassing the procurement and PO-matching workflow entirely. Its check, as SAP describes it for Create Incoming Invoices, looks for FI documents posted or parked either through Logistics Invoice Verification or through an FI invoice transaction. Every MIRO posting generates a corresponding FI document, so a PO invoice already posted in MIRO is within FB60's reach too.
What FB60 compares depends on whether the Reference field is filled:
- With a reference: company code, vendor, currency, document date and reference. The amount is not compared, so a second invoice with the same reference and a different amount is still flagged.
- Without a reference: company code, vendor, currency, document date and amount in document currency.
A match raises F5117. Unlike MIRO, the FI check covers credit memos as well as invoices.
MIRO and FB60 Side by Side
| MIRO (Logistics Invoice Verification) | FB60 (FI direct posting) | |
|---|---|---|
| Documents searched | FI accounting documents, then LIV documents with errors or entered for background verification | FI documents posted or parked through LIV or an FI invoice transaction |
| Fields compared | Vendor, currency, company code, gross amount, reference, invoice date | Company code, vendor, currency, document date, plus the reference if entered, otherwise the amount |
| Amount compared | Always (gross invoice amount) | Only when no reference is entered |
| Fields that can be switched off | Reference, invoice date, company code (OMRDC) | Not covered by OMRDC |
| Message | M8108 / M8462 on screen, M8 804 / 805 in the background | F5117 |
| Where the message type is set | On premise: Define Attributes of System Messages (OMRM). Cloud: Define Message Types for Area M8 | On premise: OBA5, area F5. Cloud: stays a warning |
| Credit memos | Not checked by default | Checked |
| Vendor flag required | Yes, "Chk double inv." | Yes, the same flag |
Where This Creates Real Exposure
Any organization that uses both posting paths should know where they differ. That is far more common than it sounds. Companies routinely post PO-backed invoices through MIRO while routing non-PO invoices (consulting fees, rent, utilities, one-off services) through FB60. Each path can find the other's postings, but a duplicate entered through the other path is caught only when the fields that path compares match. A services invoice posted in FB60 with the reference "INV-4471" and entered again in MIRO as "4471" raises nothing. An invoice posted first in FB60 and then entered in MIRO with the same reference but a gross amount that differs, because freight or tax was handled differently, also passes MIRO's check, although the reverse order would have been caught: FB60 ignores the amount when a reference is present. When differences like these get through, the team may not discover the duplicate payment until bank reconciliation or a vendor audit surfaces it.
Activating the Duplicate Check in the Vendor Master
The duplicate invoice check is not a system-wide setting that applies to all vendors by default. It is activated individually, per vendor, in the vendor master record. If the flag is not set for a given vendor, invoices posted to that vendor skip duplicate detection entirely, regardless of how MIRO or FB60 are configured.
The relevant field sits in the company code data of the vendor master, on the Payment transactions screen. It is labeled "Chk double inv.", short for the check flag for double invoices or credit memos. When this indicator is active, SAP compares key invoice fields at posting time against previously recorded documents for that vendor. The flag's name covers credit memos, but only the FI check compares them; MIRO checks invoices only by default.
Activating the Flag in SAP ECC
In ECC, the standard path is through transaction FK02 (Change Vendor) or XK02 (Change Vendor: Centrally). After entering the vendor number and company code:
- Navigate to the Company Code Data view.
- Open the Payment Transactions screen.
- Set the Chk double inv. indicator.
- Save the vendor master record.
This is a straightforward configuration step, but it must be repeated for every vendor where you want duplicate detection active. There is no mass-update toggle that enables it across the entire vendor base in one action, though batch input or LSMW can help with larger rollouts.
Activating the Flag in S/4HANA
In SAP S/4HANA, the vendor master has been absorbed into the Business Partner (BP) framework. You set the same flag through transaction BP rather than FK02 or XK02: open the business partner in the role Supplier (Fin.Accounting), go to Company Code, open the Vendor: Payment Transactions tab (Supplier: Payment Transactions in some releases) and set Check Double Invoice. The Fiori app Manage Supplier Master Data offers the same indicator under Finance → Payment, as SAP's note on the supplier invoice duplicate check sets out.
Screen layouts may vary depending on your Fiori configuration, but the field behaves identically once set.
Configuring F5117 and M8108: Warning vs. Hard Block
Even when the duplicate check flag is active, a match is often only a warning: the user acknowledges the message and the invoice can still be posted. For many AP operations, a warning that users can click past is not sufficient control. Each path's message is changed to an error in a different place, and an error is a hard block that prevents the duplicate invoice from being posted.
F5117 (FB60 and the other FI transactions). On premise, change F5117 from a warning (message type W) to an error (message type E) in transaction OBA5, or through the IMG path for message control under Financial Accounting. In OBA5, enter application area F5, locate message 117, change the message type from W to E, and save. In S/4HANA Cloud this is not possible: SAP's note on the FB60 check states that F5117 cannot currently be changed from a warning to an error there, and points customers to a feature request through the Customer Influence portal.
M8108 and M8462 (MIRO). On premise, set the message type in Customizing under Materials Management → Logistics Invoice Verification → Define Attributes of System Messages (transaction OMRM), where each message can be given a type for online and for background processing. If invoices are created in the background, set M8 804 and 805 there as well, so they are held to the same rule as invoices entered on screen. In S/4HANA Cloud the choice of error or warning is made in the configuration activities Define Message Types for Area M8 (ID 102091) and Area M8_2 (ID 102092), as SAP's note on configuring the supplier invoice check in the cloud explains.
Why Vendor Master Governance Matters Here
The per-vendor activation model creates an operational risk that is easy to overlook. Every time a new vendor is created, the duplicate check flag must be explicitly set. If your vendor creation process does not enforce this, whether through workflow rules, a vendor request form, or master data governance policies, new vendors will enter the system without duplicate detection.
Over time, this gap compounds. A vendor onboarded without the flag six months ago has been accumulating invoices with zero duplicate checking ever since, and setting the flag today does not reach back: SAP notes that a document created before the settings were made is not flagged when its duplicate arrives later. For AP teams focused on payment accuracy, making the SAP duplicate invoice check a mandatory field in the vendor master creation workflow is one of the highest-value controls available. Periodic audits of existing vendor records to verify the flag is set are equally important, particularly after data migrations or organizational restructuring.
Why Duplicate Invoices Still Get Posted
Even with the duplicate check properly configured, duplicate invoices still reach posted status, and the root causes are systematic rather than accidental.
The invoice reference field is the single biggest point of failure. SAP's duplicate detection relies on an exact match of the Reference field, alongside the vendor, company code, currency and date. If the same supplier invoice arrives twice with even slightly different reference formatting, SAP treats them as two distinct documents. A reference entered as "INV-2024-001" will not match "2024001" or "Invoice #001," even though all three represent the same invoice. The date works the same way: an invoice keyed once with its issue date and once with the date it was received is two documents to SAP. This problem compounds in manual entry environments where different AP clerks apply their own formatting conventions to the same reference number. Without upstream standardization of the SAP invoice reference before it hits the system, duplicate detection operates on unreliable input.
This is not just a configuration gap. According to EY's 2025 Tax and Finance Operations Survey, 91% of organizations report financial data stored in too many silos, and only 13% of finance functions describe their data management capabilities as very effective. The reference inconsistency that undermines SAP's duplicate check is one symptom of a broader data quality problem that spans the entire finance operation.
Parked documents and approval workflow exposure
SAP's check covers parked documents as well as posted ones: the FI check looks for documents posted or parked, and MIRO raises M8108 when an invoice is parked as well as when it is posted. A parked invoice waiting for approval is found like any other. The exposure in SAP invoice parking and approval workflows is the warning itself. It is a message to the person entering the duplicate, not a status the document carries, so if it is only a warning they can park the invoice anyway, and whoever approves it later has no sign that it matched an earlier document unless the workflow records it. The more invoices move through multi-step approval, the more this matters.
Batch and programmatic processing gaps
Invoices that Logistics Invoice Verification creates in the background, rather than through MIRO on screen, are governed by their own messages, M8 804 and 805, which report that an invoice was not created automatically because a potential duplicate exists. When M8108 and M8462 are made errors for invoices entered on screen, these two need the same decision. The check runs before the journal entry is created and never afterwards, so a duplicate that gets past it is found only by controls further down the process. In high-volume environments where thousands of invoices arrive through BAPIs, IDocs or batch input sessions, verify the duplicate check behavior for each of those routes in your own system rather than assuming the interactive safeguards carry over.
Reversed and cancelled documents
SAP leaves cancelled and reversed invoices out of the comparison. Its documentation states that if a previously created document is canceled and then created again, the system does not display a message, and SAP's notes confirm the same for documents reversed in MIRO and in FI. This is deliberate: reversing a wrong invoice and entering it again correctly should not raise a warning. It also means the check cannot tell a correction from a mistake. When a reversed invoice is entered again, the only check on whether that second entry is right is the person making it, so reversal and re-entry deserve the same review as any other exception.
Fields switched off and credit memos
Two settings change what the check can catch at all. In OMRDC, a company code's settings can take the reference, the invoice date or the company code out of MIRO's comparison. Dropping the reference means two different invoices from one vendor with the same date and amount are flagged against each other; keeping it means a mistyped reference defeats the check. And MIRO does not check credit memos or subsequent debits and credits by default, so a supplier credit entered twice through MIRO posts without a message, where the same credit entered twice through FB60 would be flagged.
Incomplete vendor master activation
New vendors may be created without the flag, acquired company codes may bring in unchecked master data, and periodic cleanups rarely catch every gap. A single missed vendor creates an unprotected entry point for duplicate payments.
Three-way matching is not a substitute
Three-way matching and duplicate invoice detection are separate controls that address different risks. Three-way matching compares the purchase order, goods receipt, and invoice to catch price or quantity discrepancies. It is an important control, but it operates on a completely different axis. An invoice that passes three-way matching because the PO quantity, goods receipt, and billed amount all align can still be a duplicate of an invoice already posted. These are complementary controls, and one does not cover for the other.
Strengthening Duplicate Detection Before Invoices Reach SAP
Some of the failures above are settings and process: the vendor flag, the message types, reversals, credit memos. The one no setting can fix is the data itself, because SAP's duplicate check can only match what it receives. When invoices arrive from multiple channels with inconsistent formatting, the Reference field values diverge and the check has nothing to compare.
Upstream normalization addresses this: standardize invoice reference numbers, amounts, vendor identifiers, and dates into a consistent format before they enter SAP. When every instance of the same invoice produces an identical Reference field value regardless of the source channel, the native duplicate check works as designed.
Purpose-built invoice data extraction tools make this practical at scale, without relying on manual keying discipline across an AP team. It is worth noting that "OCR for SAP" is not one product but several different paths AP teams can take to capture invoice data, ranging from SAP-native modules to OpenText VIM, Peppol channels, and extraction-first approaches. Invoice Data Extraction takes the extraction-first path: teams upload the invoices as they were received, scanned or emailed PDFs and images alike, say in plain words how each field should be written (the reference in one agreed form, dates as YYYY-MM-DD, amounts to two decimal places), and download the spreadsheet. The same columns, date and number formats come back for every document, and again next month, which is how teams automate invoice data extraction before posting to SAP and hand the duplicate check the consistent Reference values it depends on. A value the panel of AI agents cannot agree on is flagged as Review Needed, with what to check, so it can be looked at before anything is posted.
The duplicate invoice check is one control in what should be a layered AP control framework. It works best when the data feeding it is consistent, but it cannot compensate for problems introduced upstream. Teams serious about SAP duplicate payment prevention should think about their controls as a stack, not a single checkpoint. Sage Intacct faces a similar gap in its own duplicate bill detection, where built-in checks only cover one entry path and manual bills bypass detection entirely. Oracle Fusion's duplicate invoice validation runs into its own version of the same problem, with standard and additional checks that still miss common edge cases. For a broader view of how duplicate detection fits into the full AP control lifecycle, see broader duplicate payment prevention controls.
For teams looking to reduce duplicate invoice risk in their SAP environment, here is a practical priority list ordered by impact-to-effort ratio. The first two items close the widest gaps with the least implementation work:
- Audit vendor master duplicate check activation across all active vendors. Gaps here mean the check never fires, regardless of data quality.
- Standardize invoice reference formatting rules for manual entry. Define clear conventions for how reference numbers should be entered and communicate them to everyone who posts invoices.
- Evaluate upstream data extraction and normalization for high-volume invoice channels. Manual formatting discipline does not scale when hundreds of invoices arrive daily from different sources and formats.
- Review the F5117, M8108 and M8462 message types based on your organization's risk tolerance. A warning allows users to override the duplicate flag; changing it to an error forces a hard stop that requires investigation before posting. In S/4HANA Cloud, F5117 stays a warning.
- Verify duplicate check behavior for background and interface postings. Set M8 804 and 805 alongside the online messages, and test each BAPI, IDoc and batch input route in your own system.
- Decide how reversals and MIRO credit memos are reviewed, since the duplicate check covers neither.