Technical detail
Safeguards
- Idempotent ingestion: the same invoice twice means one posting
- Poison queue and retry policy, with alerts on repeated SFTP failures
- Audit trail from email receipt to AP delivery
- No invoice content sent to public LLM APIs
Work / System · Integration
Purchase invoices from inbox to AP system, without manual keying.
A private accounts payable automation for a company. Vendor invoices arrive in Outlook, and a .NET pipeline extracts, validates, enriches and delivers them to the AP system.
Vendor invoices arrive as PDFs in many layouts. Keying them by hand is slow and invites typing errors and duplicate payments.
I designed the stages and their failure handling, and built the pipeline on .NET with Microsoft Graph and Azure Document Intelligence.
A vendor emails a PDF invoice to a shared Outlook mailbox.
Microsoft Graph API collects the message and attachment, and an idempotency key is assigned.
Azure Document Intelligence reads the header and line fields.
Rules check totals and VAT; vendor details are enriched and matched against master data.
An XML + PDF package goes to the AP system by SFTP, with retry and a dead-letter queue.
Anything that fails a check goes to a person instead of being forced through.
OCR reads the document; rules and master data decide what is accepted.
Tradeoff: Unusual layouts become exceptions rather than best guesses.
Keys survive duplicate emails and SFTP retries, so one invoice means one posting.
Tradeoff: Every stage has to carry and check the key.
Ingestion, extraction, enrichment, validation and delivery run separately, with poison queues and reconciliation.
Tradeoff: More components to monitor than a single script.
The system runs inside the organisation, so I show the architecture, not screens or data.
Tradeoff: Less to see here; I walk through it in conversation instead.
No screenshots, company names or invoice data are shared.
.NET, Outlook, Microsoft Graph API, Azure Document Intelligence, Vendor enrichment, SFTP, XML + PDF packages
Tell me what you'd like to change. I'm in Helsinki (UTC+2) and work with clients in Europe and North America.