e2becd6219f3509829935bdaf8178206ac0694a3
- Reviewer now sends all pages to the review VLM alongside extracted JSON. - XML builder deduplicates account.tax records by rate. - XML builder raises on confidence below min_confidence_threshold. - Adds fractional tax-rate support with stable external IDs. - Adds expected_invoice.xml fixture, reviewer tests, and XML regression tests.
odoo_ocr
Local-first invoice OCR pipeline that reads scanned, printed, handwritten, and native-PDF invoices and produces Odoo Enterprise-ready XML.
Quick start
-
Install dependencies:
uv sync --all-extras # or pip install -e ".[dev]" -
Configure
config.yamlor set environment variables:export OLLAMA_BASE_URL="http://100.103.83.12:11435" -
Run the pipeline:
odoo-ocr process /path/to/invoices --output ./out/
Architecture
Input File
→ Classifier (heuristic + small VLM)
→ Branch: digital_pdf → text/layout extraction
→ Branch: scanned_print → preprocess → VLM OCR
→ Branch: handwritten → preprocess → GLM-OCR
→ Branch: mixed_unknown → preprocess → ensemble OCR
→ Structured Extraction VLM
→ Review VLM (image vs extracted JSON)
→ Confidence check
→ XML Builder
→ Odoo XML + sidecar JSON
Project-specific agent skills
Agent skills are in .agents/skills/:
odoo-ocr-pipeline— classifier, branches, extraction, review.odoo-xml-import— generating and validating Odoo XML.local-vlm-client— Ollama/llama.cpp VLM clients and prompts.
Description
Languages
Python
99.5%
Shell
0.5%