Getting an LLM to extract invoice data is the easy part. What happens when models disagree, totals do not reconcile, or confidence is too low? That is the challenge I explored while building an AI-assisted invoice and receipt review app. Here is how I built the pipeline: 1. Document classification Classifies uploads as invoices, receipts, or unsupported documents and routes them to the appropriate extraction path. 2. Dual-source extraction and reconciliation I integrated Azure AI Document Intelligence using its prebuilt-invoice and prebuilt-receipt models, alongside Azure OpenAI, to independently analyze each document. Document Intelligence remains the primary source. The merge logic preserves its values, uses LLM output to fill in missing fields, and flags conflicts and their sources for human review. 3. Deterministic validation I implemented rule-based checks for required fields, amount reconciliation, duplicate fingerprints, and EU VAT structure and checksum validation using python-stdnum. Fields with extraction confidence below 0.80 are flagged for review. 4. Constrained GL account suggestions Azure OpenAI suggests a general ledger account using structured output. The app validates the suggestion against a predefined catalog, preventing the creation of invented accounts and keeping approval decisions in human hands. 5. Human review Reviewers can inspect extracted values, sources, conflicts, and validation findings, correct fields, select an account, and approve or reject documents. The app can also draft supplier correction emails for human review. It does not send them automatically. Tech stack: React, TypeScript, FastAPI, Pydantic, Azure AI Document Intelligence, Azure OpenAI, and Azure Container Apps. Review data is stored in SQLite on an Azure Files mount, with the app configured for a single replica. The core principle: AI for interpretation, deterministic code for validation, and humans for consequential decisions. I have attached a walkthrough showing the pipeline from upload to review. I would love to hear your thoughts.