An overdue-invoice view looks simple: read a CSV, compare due dates and sort. The awkward bugs live in the details. A worklist can send someone chasing the wrong amount even when its table looks correct.
We used these checks while building Cashflow Check at Xargaar Tools. The examples below are fictional.
1. Work in the smallest currency unit
For the current tool, amounts are plain positive decimals with no more than two decimal places. Convert them to integer cents before arithmetic. An invoice for 1,200.00 with 300.00 paid has 900.00 remaining, not 1,200.00 overdue.
Reject malformed amounts instead of quietly converting them to zero. Check that paid does not exceed the invoice total. Supporting every currency's decimal convention is a separate problem; this tool deliberately limits its input format.
2. Keep currencies separate
USD 900 and EUR 700 are two balances. They are not a meaningful total of 1,600 unless you explicitly choose exchange rates and a valuation date. Our review groups balances by the currency code supplied in the CSV. It does not convert currencies.
3. Validate calendar dates, not just date-shaped strings
A pattern matching YYYY-MM-DD is only the first check. Parse the date and round-trip it back to the same format to catch impossible dates. Use a chosen review date so that a saved worklist states when it was prepared.
An invoice due on the review date is due today, not already a day late. Keep that boundary explicit.
4. Reject duplicate invoice/customer pairs
A duplicate import row can double the amount a dashboard tells someone to chase. Make the key explicit and reject repeats with the input row number. Our current key is the invoice identifier plus customer name; if your source allows reused identifiers, define the right key for that source rather than copying this choice blindly.
5. Treat export as another input boundary
CSV quoting and spreadsheet formula handling solve different problems. Quote fields and double embedded quotes. Separately consider text beginning with formula-like characters such as =, +, - or @ before someone opens the export in a spreadsheet. Test the target spreadsheet's behavior rather than treating a single escape rule as a universal security guarantee.
The same caution applies to the worklist itself: imported payment data can be stale. Check payment records before contacting a customer. A local CSV tool cannot know that money arrived after the export.
Try the workflow
Cashflow Check's free sample runs in the browser without an account or invoice upload. It accepts up to 5,000 rows and a 5 MB CSV, shows remaining balances by customer and currency, and exports a follow-up worklist. It does not connect to a bank or send reminders.
Disclosure: this is our product. The optional one-time $19 review pack adds the offline download, editable review log and weekly workflow. The free tool stays available. It is one part of the Xargaar Tools collection.
Which CSV edge case has caused the most cleanup in a tool you've built?
Top comments (0)