In the intricate world of financial management, few issues are as pervasive and overlooked as that of duplicate invoices. These are invoices that are mistakenly issued or processed more than once, leading to the possibility of the same bill being paid multiple times. Although they may appear harmless on the surface, these redundant bills serve as significant drains on a company's bottom line. But what exactly are the problems associated with these duplicate invoices? At their core, they result in unnecessary and excessive payments, muddle financial records, and often lead to disputes between vendors and organizations.
According to a recent whitepaper on the subject, the financial implications are staggering. A typical medium-sized organization stands to lose an alarming $300,000 per year as a direct result of invoices that are inadvertently paid twice. This issue becomes particularly challenging when considering the checks and balances that most Enterprise Resource Planning (ERP) systems employ.
While these systems are designed to prevent the entry of an identical invoice reference for the same vendor, they are not foolproof. What if the vendor exists twice in the master data due to a minor variation in the name? Or what if there's a typographical error when inputting the invoice? Or perhaps, in an increasingly digitized world, the Optical Character Recognition (OCR) software misreads a '7' for a '1'? For many organizations, these scenarios spell trouble. Without a vigilant accounting department to manually detect these duplicates, the possibility of double payments looms large.
Understanding the root causes behind duplicate invoices is crucial as it forms the foundation for finding effective solutions.
So, how do these duplicate invoices emerge? The reasons for duplicate invoices are multi-faceted:
Human error
Technological glitches
Lack of standardized processes
Inadequate verification mechanisms
These, along with other causes, make addressing duplicate invoices particularly challenging.
Thankfully, the modern financial landscape offers solutions. By harnessing technological tools, developing stringent verification processes, and fostering clear communication channels with vendors, businesses can effectively mitigate the challenges of duplicate billing. This article delves deep into strategies and insights to help organizations combat the high costs and complications spawned by duplicate invoices.
In this blog post I will show you how to use fuzzy matching to find duplicates using the Celonis Intelligent Business Cloud (IBC) and Python. If you have your Accounts Payable process in the IBC, this becomes very easy by just following these five steps:
1. Filter out irrelevant invoices Using Process Analytics, we can quickly select the most relevant invoices. In the image below, you could select the activity “Pay Invoice,” so that invoices that are still being processed are ignored. Furthermore, we can select invoices with a value >€100, since we still need to do some manual work to verify whether results are true double invoices. (We only want to check them if the manual work is worth it.)
To narrow down further, we can remove things like:
Internal invoices
Reference numbers that occur often (e.g., invoices from a specific system sometimes receive the same reference number)
Invoices that have been refunded
2. Choose relevant data In the Duplicate Invoices analysis from the Celonis App Store, we specify what data we want to use to find duplicates:
The left four columns start with an underscore. This tells our Python package that these columns contain the unique identifier of the data we want to check. The other columns contain the invoice data that we want to check: vendor name, reference number, posting date and invoice value.
3. Run the duplicate checker in Python Finding the duplicates using default settings is as simple as running nine lines of Python code:
Anyone who knows the basics of Python can use this package. To give a brief overview of what happens:
Lines 1-2: Import the functions we need to connect to the IBC and to find duplicates.
Lines 5-6: Get the data from the table we created in the previous section.
Lines 9-12: Find potential duplicates.
Line 15: Adds potential duplicates to the data model.
3b. (Optional): Specify search patterns and similarity algorithms This piece is a bit more technical; feel free to skip it! By default, the duplicate checker finds duplicates by:
Finding exact matches
Finding invoices where 3 out of 4 columns match exactly, then fuzzy matching the 4th.
Fuzzy matching can be done using various similarity algorithms. By default, the duplicate checker uses Jaro-Winkler Similarity (for text columns). To fine-tune duplicate checking, we can specify whether we want to use a different search pattern (e.g., exact match for posting date and invoice value, fuzzy match for vendor and reference), or a different similarity algorithm (e.g., Soundex for vendor names).
4. Check whether results are really duplicates After running and fine-tuning the duplicate checker in Python, it’s time to verify and act on true duplicates. In Celonis Process Analytics, we can analyze the groups of potential duplicates, find cases with a high potential savings value and either drill down or directly go into the ERP to take action.
5. Take action Using the Celonis Action Engine, relevant accounting employees can be notified directly of a potential duplicate in their business area. From there, they can be linked to the relevant transaction in the ERP to reject the invoice—preventing the duplicate payment from happening before it takes place. They can also mark it as a false duplicate. After doing this for a while we can use this information to make the duplicate checker more accurate.
Celonis customers have already saved millions by taking action on duplicate invoices. If you are an existing Celonis customer and interested in using the Celonis Duplicate Checker, please contact your customer success manager. If you are new to Celonis and interested in seeing how the IBC and Duplicate Checker can benefit you, please get in touch today!