Non PO based invoices often fall into the category of contractual, regular spend monthly invoices. Their value may fluctuate slightly, such as with utility and phone bills, but they arrive consistently and follow a similar spend profile. As they don’t have POs or receipts, we can’t be sure the invoice was intended or the service received, so they typically need some manual intervention to approve and code.
Sometimes it’s possible to use AI to send the invoice line descriptions and the possible nominal codes to a large language model and get it to code the invoices. With the arrival of RAG (Retrieval Augmented Generation), nominal codes can be loaded separately to the prompt. Without RAG, and with large datasets from the invoice and nominal ledger, the token set can be huge and the cost of coding significant. The results aren’t always perfect.
One of the approaches we’ve begun to use is not AI based. Shock, horror, I know. It uses pattern analysis.
- First invoice arrives from the supplier
- Someone approves and codes it
- Second and third invoices follow the same pattern
- Fourth invoice arrives. If the supplier is marked as a contract spend supplier and the fourth invoice’s net amount is within x percent of invoices 1, 2 and 3 then auto approve
- If the previous three invoices were coded similarly, auto code
Using maths we can filter out any values above the mean, so as not to auto-approve an invoice if the mean value is skewed by a one-off large purchase such as can happen with IT suppliers and capital vs operational expenses.
This approach gives a much higher chance of accuracy and consistency and doesn’t use AI. Increasingly I’m finding people more impressed when functionality doesn’t rely on our large language model friends.
