Duplicate Payment and Vendor Master Audit Skill
Find duplicate payments and duplicate vendors: same invoice paid twice, shared bank accounts and tax IDs, vendor-employee matches. Offline. $29.
View Duplicate Payment and Vendor Master Audit Skill
Before the payment run: every vendor invoice checked against its PO and what was actually received. Approve the clean ones, hold the rest with the reason, catch re-sent duplicates, and get the received-not-billed list for month-end.

| Situation | Code | Level |
|---|---|---|
| Invoice line matches PO price and received quantity | approve | |
| Invoice line with no PO number | no_po | hold |
| PO number not in the PO file | po_not_found | hold |
| Invoice vendor isn't the PO vendor (suffixes like Inc./LLC ignored) | vendor_mismatch | hold |
| Item not on the PO (freight, fees, substitutions) | item_not_on_po | hold |
| Unit price over the PO beyond tolerance (default 2% / 0.01) | price_over_po | hold |
| Billed more than received to date | billed_not_received | hold |
| Billed more than ordered | billed_over_po | hold |
| Qty x price doesn't equal the line amount | line_math_error | hold |
| Same vendor + same invoice number (C-5501 vs C5501 vs 0C-5501) | duplicate_invoice | hold |
| Same vendor, date and total under a different number | possible_duplicate_invoice | hold |
| Unit price under the PO (missing charge or credit?) | price_under_po | info |
| Received but not invoiced (GRNI accrual candidate) | received_not_invoiced | info |
| PO line partly received and billed for what arrived | partial_receipt | info |
examples/harbor-point-october/ is a fictional restaurant group's October: 9 PO lines from 3 vendors, receiving, and 11 vendor invoices with 13 planted situations (a re-sent duplicate, a same-day double bill, billing for cups that never arrived, a price creep, a fee not on the PO, an invoice from the wrong vendor, a PO that doesn't exist, a line that doesn't add up and more). expected.json labels the outcome an AP reviewer would reach: 3 invoices to approve, 8 to hold, 85.00 of GRNI. The tests assert the tool reaches exactly that in any row order, honors your tolerance, and that a clean month exits 0.
Outputs in out/: invoices.csv (approve/hold per invoice with reasons), exceptions.csv (review queue, holds first), grni.csv (received not invoiced, with accrual value), report.md, summary.json. Exit 0 = every invoice can be approved; 1 = at least one hold; 2 = an input problem (the message says which flag fixes it).

./run_tests.sh
python3 -m threewaymatch --pos examples/harbor-point-october/purchase_orders.csv \
--receipts examples/harbor-point-october/receipts.csv --invoices examples/harbor-point-october/invoices.csv --name "Harbor Point" --out out/Python 3.9+ (tested on 3.10 and 3.13), no dependencies.
Zip, 17 KB, v1.0, 15 files. Use and modify it for yourself and for clients you serve; no resale or redistribution of the kit itself. Full terms in LICENSE.txt.
Three-way match vendor invoices to POs and receipts: approve/hold queue, price and qty variances, duplicate invoices, GRNI accruals. Offline. $29.
Find duplicate payments and duplicate vendors: same invoice paid twice, shared bank accounts and tax IDs, vendor-employee matches. Offline. $29.
View Duplicate Payment and Vendor Master Audit SkillAudit expense reports against your policy: duplicate and split charges, over-limit meals and hotels, missing receipts, mileage over the IRS rate. Offline. $19.
View Expense Report Audit SkillCheck a journal entry CSV before importing it into QuickBooks Online: unbalanced entries, rejected account names, A/R and A/P lines with no name. $12.
View QuickBooks Online Journal Entry Import Checker