The problem
The firm's bookkeeping team was re-typing around 4,000 supplier invoices a month — PDFs from email, scans, the occasional photo of a paper invoice. Every invoice meant reading, typing, and double-checking against a purchase order. Errors slipped through at month-end, and the team's best people spent their days on data entry instead of client work.
The approach
I built a straight-through processing pipeline on Azure, boring on purpose:
- Ingestion — a monitored mailbox and a small upload portal drop every incoming document onto an Azure Service Bus queue, so nothing is ever lost and every step can retry safely.
- Extraction — an Azure Functions worker (.NET 8, isolated) sends each document to Azure AI Document Intelligence's invoice model, extended with custom fields the firm needs (cost centres, internal PO references).
- Validation — extracted data is checked against open purchase orders and supplier master data in Azure SQL. Anything that matches within tolerance posts directly to the ERP through its API.
- Human review, only when needed — low-confidence fields or failed matches land in a React review queue that shows the document and the extracted values side by side. One click approves or corrects; every correction is logged.
Every invoice keeps a full audit trail — original file, extracted values, confidence scores, who approved what — which made the firm's auditors noticeably happier than the previous shoebox approach.
The result
Within two months, roughly 90% of invoices were flowing into the ERP without anyone touching them. The review queue takes one person about an hour a day, month-end close finishes three days earlier, and transposition errors — previously the most common support ticket — have effectively disappeared.