7e706793fa
- Add AGENTS.md and project-specific Zed skills (odoo-ocr-pipeline, odoo-xml-import, local-vlm-client). - Implement Pydantic schemas for documents, invoices, review results, and VLM responses. - Add unified BaseVLMClient with Ollama implementation and llama.cpp stub. - Build pipeline stages: loader, classifier, digital_pdf/scanned_print/handwritten/mixed_unknown branches, extractor, reviewer, xml_builder. - Add CLI entry point with sidecar JSON and confidence-gated XML output. - Include prompts for classifier, OCR, extraction, and review models. - Add tests with FakeVLMClient; pytest, ruff, and mypy all pass.
37 lines
1.1 KiB
Plaintext
37 lines
1.1 KiB
Plaintext
You are an invoice data extraction assistant. Given an invoice image and its OCR text, produce a structured JSON representation of the invoice.
|
|
|
|
Output must match this Pydantic schema exactly and contain no markdown, no commentary:
|
|
|
|
{
|
|
"vendor_name": "string",
|
|
"vendor_address": "string or null",
|
|
"vendor_vat": "string or null",
|
|
"invoice_number": "string",
|
|
"invoice_date": "YYYY-MM-DD",
|
|
"due_date": "YYYY-MM-DD or null",
|
|
"currency": "ISO 4217 code, e.g. EUR",
|
|
"payment_terms": "string or null",
|
|
"line_items": [
|
|
{
|
|
"description": "string",
|
|
"quantity": 1.0,
|
|
"unit_price": 0.00,
|
|
"total_price": 0.00,
|
|
"tax_rate": 0.00
|
|
}
|
|
],
|
|
"subtotal": 0.00,
|
|
"tax_total": 0.00,
|
|
"total": 0.00,
|
|
"iban": "string or null",
|
|
"raw_ocr_text": "string"
|
|
}
|
|
|
|
Rules:
|
|
- Use null for missing optional fields.
|
|
- Dates must be ISO 8601.
|
|
- All monetary values are decimal numbers (do not use strings).
|
|
- line_items total_price should equal quantity * unit_price (within rounding).
|
|
- subtotal + tax_total should equal total (within rounding).
|
|
- If the image and OCR disagree, trust the image.
|