Todas las empresas procesan documentos que alguien vuelve a teclear en un sistema: facturas de proveedores, albaranes, actas de trabajos realizados, contratos, extractos bancarios, declaraciones aduaneras. El OCR tradicional con plantillas funcionaba para unos pocos formatos de gran volumen y se rompía cada vez que un proveedor cambiaba su maquetación. Los modelos de lenguaje con visión cambian la economía: un solo pipeline puede leer cientos de maquetaciones, en español y en inglés, desde PDF limpios hasta fotos hechas con el móvil. Esta guía describe cómo construyo estos pipelines para producción y por qué el modelo de extracción es la parte fácil.

El pipeline de un vistazo

Inbox / upload / scanner
   │
   ▼
1. Intake        → deduplicate, detect type, split multi-document PDFs
2. Preprocess    → text layer or page images, rotate, enhance scans
3. Extract       → LLM with schema (structured output)
4. Validate      → business rules, cross-checks against ERP data
5. Decide        → auto-post / human review / reject
6. Integrate     → create draft records in ERP, attach original
7. Learn         → corrections feed the eval set and prompts

Los pasos 4–7 deciden si el sistema ahorra tiempo o crea una nueva categoría de errores.

Pasos 1–2: recepción y preprocesamiento

Clasifica primero. Antes de extraer, determina el tipo de documento (factura, factura rectificativa, acta, contrato) con una llamada de clasificación barata. Cada tipo necesita su propio esquema y sus propias reglas.

Usa la capa de texto cuando exista. Los PDF generados digitalmente contienen texto; extraerlo (con la maquetación) es más barato y preciso que el OCR. Librerías como Docling convierten los PDF, tablas incluidas, en Markdown o JSON estructurado que los modelos leen bien.

Envía imágenes para escaneos y fotos. Los modelos actuales aceptan imágenes y PDF directamente y leen tanto el texto como la maquetación visual (soporte de PDF de Anthropic; visión). En escaneos de mala calidad, una mejora básica —enderezar, contraste, resolución suficiente— mejora los resultados de forma medible. Los documentos muy largos deben dividirse por rangos de páginas.

Gestiona los archivos con varios documentos. Un solo PDF escaneado contiene a menudo varias facturas. Detecta los límites antes de extraer o pide al modelo que devuelva un array de documentos con sus rangos de páginas.

Paso 3: extracción basada en esquemas

Define con precisión los datos de destino con un esquema y usa salida estructurada para que las respuestas siempre se puedan analizar:

from datetime import date
from decimal import Decimal
from pydantic import BaseModel, Field

class Line(BaseModel):
    description: str
    quantity: Decimal
    unit: str | None = Field(None, description="e.g. ud, kg, h, servicio")
    unit_price: Decimal = Field(description="Price per unit excluding VAT")
    vat_rate: Decimal | None = Field(None, description="VAT rate in percent, e.g. 21")
    amount: Decimal = Field(description="Line total excluding VAT")

class SupplierInvoice(BaseModel):
    supplier_name: str
    supplier_tax_id: str | None = Field(None, description="Spanish NIF/CIF, letters and digits, no spaces")
    invoice_number: str
    invoice_date: date
    currency: str = Field(description="ISO code, e.g. EUR, USD")
    lines: list[Line]
    total_without_vat: Decimal
    vat_amount: Decimal | None
    total_with_vat: Decimal
    iban: str | None = Field(None, description="ES + 22 digits if present")
    evidence: dict[str, str] = Field(
        default_factory=dict,
        description="For key fields, the exact text from the document they were taken from",
    )

Se aplican los principios de diseño de salidas estructuradas de LLM: campos que admiten nulos para la información que puede faltar, formatos claros en las descripciones y un campo evidence que cita el texto de origen. La evidencia acelera mucho la revisión humana y reduce los valores inventados, porque el modelo tiene que señalar de dónde salió cada valor.

Pautas de prompt específicas para documentos:

  • Explica las convenciones locales: "En las facturas españolas los importes suelen usar coma como separador decimal y punto como separador de miles". Si procesas documentos de varios países, indica qué identificador fiscal esperar en cada uno (NIF/CIF, RFC, CUIT…).
  • Indica al modelo qué hacer con la escritura a mano, los sellos y los valores tachados.
  • Pídele que devuelva null en lugar de adivinar y que nunca calcule totales que no estén impresos: los cálculos se hacen en código.

Paso 4: validación, de donde sale la fiabilidad

La salida del modelo es una propuesta. El código decide si es plausible:

Comprobación Ejemplo
Aritmética La suma de los importes de las líneas es igual a total_without_vat; el IVA es igual al tipo × base con tolerancia de redondeo
Formato Longitud y dígito de control del NIF/CIF; dígito de control del IBAN; fechas dentro de un rango plausible
Datos maestros El proveedor existe en el ERP por su identificador fiscal; el IBAN coincide con las cuentas conocidas del proveedor
Reglas de negocio La factura hace referencia a un pedido de compra abierto; importes dentro de la tolerancia del pedido
Duplicados El mismo proveedor + número + fecha ya se ha procesado

La comprobación del IBAN merece especial atención: una cuenta bancaria cambiada en una factura por lo demás normal es un patrón de fraude clásico. Nunca actualices automáticamente los datos bancarios a partir de un documento.

Paso 5: decidir, automatización con una persona en el bucle

No todos los documentos deben contabilizarse automáticamente. Enruta según la validación y el riesgo:

  • Crea automáticamente un borrador cuando todas las comprobaciones pasan y el proveedor es conocido.
  • Revisión humana cuando falla alguna comprobación, un campo es nulo, el proveedor es nuevo o el importe supera un umbral. Muestra el documento junto a los campos extraídos con la evidencia resaltada.
  • Rechaza o escala cuando el documento es ilegible o sospechoso.

Las puntuaciones de "confianza" del modelo no están bien calibradas; basa el routing en una validación determinista y no en preguntarle al modelo cuán seguro está. Sigue la proporción de documentos procesados sin correcciones: esa es tu tasa real de automatización. Para excepciones complejas, como proveedores desconocidos o pedidos que no cuadran, un agente con herramientas de solo lectura puede preparar una propuesta de resolución para el revisor; consulta workflows frente a agentes.

Paso 6: integración con el ERP

Crea registros en borrador, nunca contabilizados, y adjunta el archivo original y el resultado de la extracción para la auditoría. En Odoo, la API externa permite crear facturas de proveedor con líneas, vincular contactos por identificador fiscal y adjuntar los PDF; mis patrones de integración están en integración de IA con Odoo mediante la API JSON-2. Odoo Enterprise también tiene sus propias funciones de digitalización de documentos; compáralas con un pipeline a medida antes de construir.

Haz la integración idempotente: un ID de documento o un hash del contenido evita facturas duplicadas cuando se reintenta un trabajo; consulta fiabilidad de las APIs de LLM.

Paso 7: medir y mejorar

Construye un conjunto etiquetado de 200–500 documentos reales de distintos proveedores y niveles de calidad, y mide:

  • Precisión por campo (coincidencia exacta tras normalizar).
  • Precisión a nivel de documento: proporción de documentos con todos los campos críticos correctos.
  • Recall de nulos: cuando falta un valor, ¿el modelo devuelve null en lugar de inventarlo?
  • Tasa de procesamiento directo: proporción de documentos que pasan la validación sin ediciones humanas.
  • Tiempo por documento de los revisores, antes y después.

Cada corrección humana es un ejemplo etiquetado. Añade una muestra al conjunto de evals cada semana y vuelve a ejecutarlo con cada cambio de prompt o de modelo; consulta evals de LLM.

Costes y rendimiento

  • Extraer una factura típica de una o dos páginas cuesta desde una fracción de céntimo hasta unos pocos céntimos, según el modelo y si envías texto o imágenes.
  • Usa un modelo más barato para la clasificación y los PDF digitales limpios, y uno más potente para escaneos, escritura a mano y tablas complejas.
  • Procesa en una cola con límites de concurrencia y usa APIs por lotes para los atrasos no urgentes; consulta optimización de costes de LLM.
  • Compara con la referencia: el coste total de la introducción manual suele ser de euros por documento, no de céntimos.

Privacidad y cumplimiento

Las facturas y los contratos contienen datos personales (nombres e identificadores fiscales de autónomos, firmas) y secretos comerciales. Usa proveedores con condiciones de tratamiento de datos adecuadas y retención nula o limitada, guarda los originales en tu propio almacenamiento, restringe el acceso a la interfaz de revisión y fija plazos de conservación. Para requisitos estrictos, la extracción puede ejecutarse con modelos de visión self-hosted. Los detalles están en privacidad en aplicaciones LLM. En la UE, comprueba si alguna decisión posterior (por ejemplo, comprobaciones de solvencia) entra en las categorías de alto riesgo de la Ley de IA.

Un plan de despliegue

  1. Semanas 1–2: recoge 300 documentos representativos, etiqueta 100 y define los esquemas y las reglas de validación.
  2. Semanas 3–4: construye el pipeline solo con borradores y una interfaz de revisión; mide la precisión con el conjunto etiquetado.
  3. Mes 2: piloto con un equipo; se revisan todos los documentos y se recogen las correcciones.
  4. Mes 3: activa el procesamiento directo para proveedores conocidos con todas las comprobaciones superadas; mantén auditorías por muestreo.

Preguntas frecuentes

¿Seguimos necesitando OCR? Para los PDF digitales, usa la capa de texto. Para los escaneos, los modelos de visión leen las imágenes directamente; un paso de OCR dedicado ayuda sobre todo con escaneos muy malos o cuando necesitas archivos de texto con búsqueda.

¿Qué precisión tiene? Con documentos limpios y esquemas bien diseñados, la precisión por campo suele ser muy alta; los escaneos, la escritura a mano y las maquetaciones inusuales la reducen. Mide con tus propios documentos: no hay una cifra universal.

¿Puede con documentos en español y en varios idiomas? Sí, los modelos multilingües potentes manejan documentos en español, inglés y otros idiomas, así como maquetaciones mixtas. Incluye ejemplos de cada uno en tu conjunto de evals.

¿Y los contratos y documentos largos? Extrae campos concretos (partes, duración, importes, cláusulas de rescisión) con citas como evidencia y procesa por secciones los documentos largos. Trata la interpretación jurídica como apoyo a la decisión, no como automatización.

Fuentes

  1. Anthropic. PDF support y vision.
  2. OpenAI. Structured outputs.
  3. Docling: conversión de documentos para IA.
  4. Kim et al. (2022). OCR-free Document Understanding Transformer (Donut).
  5. Huang et al. (2022). LayoutLMv3: Pre-training for Document AI with Unified Text and Image Masking.
  6. Odoo. External API documentation.