| Jim Kaplan's |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
AuditNet® Accounts Payable AuditingDuplicate Payments and Duplicate Vendors:
|
|
Algorithm # |
Vendor #: |
Invoice # |
Invoice Date |
Invoice Amount |
|
1 |
Exact |
Exact |
Exact |
Exact |
|
2 |
Different |
Exact |
Exact |
Exact |
|
3 |
Exact |
Similar |
Exact |
Exact |
|
4 |
Exact |
Exact |
Similar |
Exact |
|
5 |
Exact |
Exact |
Exact |
Similar |
|
6 |
Exact |
Similar |
Exact |
Similar |
|
7 |
Exact |
Similar |
Similar |
Exact |
|
8 |
Exact |
Exact |
Similar |
Similar |
|
9 |
Different |
Exact |
Similar |
Exact |
In the section below, we describe each algorithm and give examples of ACTUAL duplicates found using each.
Algorithm #1: EEEE
This is the most accurate duplicate where the vendor number, invoice number, invoice date, and invoice amount are all exactly the same.
|
Vendor Name |
Invoice # |
Invoice Date |
Invoice Amount |
|
GOOD FRAGRANCES INC |
54891 |
4-May-01 |
$2,750.00 |
|
GOOD FRAGRANCES INC |
54891 |
4-May-01 |
$2,750.00 |
Algorithm #2: DEEE
This algorithm identifies invoices where the vendor number is different but the invoice number, date, and amount are all exactly the same.
|
Vendor Name |
Invoice # |
Invoice Date |
Invoice Amount |
|
H & L PACKAGING |
29869-25 |
19-Aug-04 |
$2,139.25 |
|
PETTY CASH |
29869-25 |
19-Aug-04 |
$2,139.25 |
Algorithm #3: ESEE
This algorithm identifies invoices where the vendor number is exactly the same, the invoice number is SIMILAR but not exactly the same, and the date and amount are exactly the same.
|
Vendor Name |
Invoice # |
Invoice Date |
Invoice Amount |
|
TURNCO PACKAGING CORP. |
8012306 |
22-Nov-02 |
$8,870.40 |
|
TURNCO PACKAGING CORP. |
08012306A |
22-Nov-02 |
$8,870.40 |
When comparing invoice numbers to see if they are similar, try extracting only the numbers 1 through 9, and then comparing this newly created field. For example, we create a field called “INVCODE” which contains only the numbers 1 through 9, eliminating all letters and all zeros. We create the INVCODE using the following logic in visual basic:
for i = 1 To Len(invoicenum)
if isnumeric(Mid(invoicenum, i, 1))=true and mid(invoicenum,i,1)<> 0
Then tempstr = tempstr + Mid(invoicenum, i, 1)
Next
invcode = LTrim(tempstr)
Then we match on INVCODE instead of invoice number using the following SQL code:
SELECT * FROM INVOICE_TABLE A, INVOICE_TABLE B
WHERE A.INVCODE=B.INVCODE AND
A.INVOICENUM <> B.INVOICENUM
Make sure you specify that the invoice numbers cannot be exactly equal or you will end up identifying duplicates you already identified in algorithm #1 (EEEE).
Algorithm #4: EESE
This algorithm identifies invoices where the vendor numbers and invoice numbers are exactly the same, the invoice dates are similar, and the amounts are exactly the same. We usually define dates as “similar” if they are less than 30 days apart, but this variable can be changed to any number of days. For a more accurate listing, we often decrease the date tolerance to 14 or 21 days.
|
Vendor Name |
Invoice # |
Invoice Date |
Invoice Amount |
|
CC PACKAGES, INC. |
4206 |
12-Dec-02 |
$12,716.98 |
|
CC PACKAGES, INC. |
4206 |
9-Jan-03 |
$12,716.98 |
Algorithm #5: EEES
This algorithm identifies invoices where all fields are exactly the same except amount, but the amount is SIMILAR, not exact and not completely different.
We define amounts as “similar” if they meet one of the following criteria:
1) they are within 3% of one another, +/-
2) one is twice as much as the other one
3) they start with the same first 4 digits (e.g. $1,234.50 and $123.45)
Here are three examples of each type of amount-similar duplicate:
1) amounts are within 3% of one another:
|
Vendor Name |
Invoice # |
Invoice Date |
Invoice Amount |
|
NORWALK, INC. |
970003511 |
24-May-01 |
$1,650.26 |
|
NORWALK, INC. |
970003511 |
24-May-01 |
$1,620.00 |
2) one invoice is half of the other:
|
Vendor Name |
Invoice # |
Invoice Date |
Invoice Amount |
|
TRANSPORT SOUTHWEST |
23401/2/3 |
14-Jan-05 |
$4,143.00 |
|
TRANSPORT SOUTHWEST |
23401/2/3 |
14-Jan-05 |
$8,286.00 |
3) invoices start with the same first 4 digits:
|
Vendor Name |
Invoice # |
Invoice Date |
Invoice Amount |
|
HLC LTD. |
Blank |
22-Jul-02 |
$15,233.76 |
|
HLC LTD. |
Blank |
22-Jul-02 |
$1,523.38 |
Algorithm #6: ESES
This logic catches duplicates with the same vendor #, similar invoice #, same date, and similar amount.
In this example, the amounts are considered similar because one invoice is half of the other.
|
Vendor Name |
Invoice # |
Invoice Date |
Invoice Amount |
|
CC PACKAGES, INC. |
11903 |
8-Sep-04 |
$4,290.00 |
|
CC PACKAGES, INC. |
11903A |
8-Sep-04 |
$8,580.00 |
Algorithm #7: ESSE
This logic identifies duplicates with the same vendor #, similar invoice #, similar date, and exact amounts.
|
|
|
|
||||||||||||
|
|
|
|
|
Algorithm #8: EESS
This logic identifies duplicates with the same vendor #, same invoice #, similar date, and similar amount.
In this example, the amounts are considered similar because they are within 3% of each other. Also, the dates are within 30 days of each other. It is possible that these could represent two separate legitimate payments, but having the same invoice number indicates they are true duplicates.
|
Vendor Name |
Invoice # |
Invoice Date |
Invoice Amount |
|
VULCAN INDUSTRIES, INC. |
59282 |
14-Jun-04 |
$10,828.44 |
|
VULCAN INDUSTRIES, INC. |
59282 |
13-Jul-04 |
$10,830.00 |
This algorithm identifies duplicates with different (not similar and not exact) vendor #s, same invoice #s, similar dates, and exact amounts.
|
Vendor Name |
Invoice # |
Invoice Date |
Invoice Amount |
|
SMITH LABORATORIES, INC. |
90796747 |
18-Jul-02 |
$5,367.32 |
|
ASBURY CHEMICALS |
90796747 |
31-Jul-02 |
$5,367.32 |
Algorithm #10: Matching with blank invoice numbers:
Another algorithm that we have recently added to our repertoire is matching with blank invoices. Normally, A/P systems will not accept invoices without invoice numbers. Apparently, some checks still are cut without invoice numbers – look at the example below:
|
Vendor Name |
Invoice # |
Invoice Date |
Invoice Amount |
|
CHEMCUT SOUTHWEST, L. |
3316983 |
1-Jun-05 |
$10,641.00 |
|
CHEMCUT SOUTHWEST, L. |
Blank |
1-Jun-05 |
$10,641.00 |
In another example, BOTH invoices were left blank, leading to an $84,000 duplicate payment:
|
Vendor Name |
Invoice # |
Invoice Date |
Invoice Amount |
|
C&C LABS, INC. |
Blank |
29-Apr-05 |
$84,246.60 |
|
C&C LABS, INC. |
Blank |
2-May-05 |
$84,246.60 |
What is a “duplicate vendor”? This occurrence really should be called “multiple vendor numbers for the same vendor”, because that is what we are referring to when we say “duplicate vendors”. Having multiple vendor ids for the same vendor is a problem because it directly leads to duplicate payments. Many accounting packages do have dupe payment controls, but they do a quick check on vendor number and invoice number, and if there is an exact match, the system will prohibit you from creating that invoice for that vendor number. If the vendor has another number, however, the duplicate invoice will pass through the system.
We recommend implementing at least three duplicate vendor search algorithms:
1) address matching: identify vendors with same/similar addresses
2) tax ID matching: identify vendors with same/similar tax IDs
3) bank routing # matching: identify vendors with same/similar bank routing #s
There are several address matching algorithms out there. There are fancy “sound-ex” functions that compare individual words in the address with other words. There is the filter-approach where you take out the noise words like “Road”, “Drive”, “Suite”, etc.
In our experience, we have found that filtering the street address first helps tremendously. We filter out noise words such as “North”, “South”, “Road”, “Highway”, “Suite”, and many more. Then we rely on one of two well-tested algorithms: 1) the number approach and/or 2) the first 6 digit approach.
Filtering Logic
Filtering the street address field is not extremely complicated. The best algorithms are those that have been tested on several different sets of data so that every noise word you could encounter has been eliminated. Here is a list of common noise words that we systematically eliminate before conducting address-matching. This list is by no means exhaustive; we are constantly adding to it to improve our algorithms.
Noise Words
St.
Street
Ave.
Avenue
Dr.
Drive
Rd.
Road
Blvd
Boulevard
Ct.
Court
Way
P.O. Box
PO Box
P O Box
P. O. Box
Hwy
Highway
RR.
Rural Route
South
North
West
East
S.
N.
E.
W.
SE
SW
NE
NW
Lane
Ln.
Ste
Suite
The following are changed to their language equivalent: 1st is changed to “First”
1st
2nd
3rd
4th
5th
6th
7th
8th
9th
10th
After the noise words are eliminated, take out all vowels + Y, spaces, and all punctuation. Here are some suggestions for eliminating punctuation: #&*,-./\’.
Number Approach
With the number approach, you basically create a new field called “addresscode” that has all of the numbers that are in the street address. Then you concatenate (add) the zip code to this field so that you are only comparing addresses in the same zip code area. For example:
|
Street: |
Zip Code: |
Address Code: |
|
4300 Fair Lakes Court |
22033 |
430022033 |