Saltar al contenido
Constaia

OCR vs LLM: por qué validar documentos exige reglas deterministas

Qué hace un OCR, qué hace un LLM, por qué la autoconfianza del modelo no es una probabilidad y cómo combinar ambos con validadores deterministas en cascada.

Por Equipo Constaia6 min de lectura

También en: English

Hace unos años, "leer un documento" significaba OCR. Hoy muchos equipos mandan la foto directamente a un modelo de lenguaje multimodal y piden un JSON. Funciona sorprendentemente bien… hasta que un día el modelo devuelve un número de DNI que no aparece en la foto.

Este artículo explica qué hace cada pieza, por qué un LLM solo no basta para validar documentos y cómo combinarlos en una cascada donde la última palabra la tienen reglas deterministas.

Qué hace un OCR

Un OCR (reconocimiento óptico de caracteres) convierte píxeles en texto. Los modernos devuelven además:

  • coordenadas de cada palabra o bloque (bounding boxes),
  • confianza por palabra,
  • estructura: títulos, tablas, firmas.

Por ejemplo, Mistral OCR 4 devuelve bounding boxes, clasificación de bloques y puntuaciones de confianza en línea, y cuesta 4 $ por cada 1.000 páginas (2 $ con la API por lotes), según su anuncio de junio de 2026.

Lo que un OCR no hace: entender. No sabe que 12345678Z es un número de DNI, ni que la fecha de abajo a la derecha es la de caducidad, ni si el documento es un certificado médico o una receta.

Qué hace un LLM

Un LLM (o un modelo multimodal) sí entiende contexto. Sabe que en un DNI español el campo junto a "APELLIDOS" es el apellido, que un certificado médico deportivo suele terminar con una declaración de aptitud, y puede devolver los datos en un JSON Schema.

El problema es que un LLM genera texto plausible. Cuando la imagen es mala, no se queda en blanco: completa. En este hilo de Hacker News lo resumen bien: igual que un LLM puede corregir errores del OCR, puede "corregir" cosas que estaban bien y alucinar en su lugar. Para un resumen es tolerable. Para un número de documento, una fecha de caducidad o un IBAN, no.

La autoconfianza del LLM no es una probabilidad

La tentación es pedirle al modelo: "devuelve también tu confianza de 0 a 1". Esa cifra no es una probabilidad calibrada:

  • En Xiong et al., los autores evalúan cómo expresan su incertidumbre los LLM y concluyen que, al verbalizar su confianza, tienden a ser demasiado confiados.
  • Ya antes, Guo et al. mostraron que las redes neuronales modernas están mal calibradas: su confianza no refleja bien la probabilidad real de acertar.

Calibrada significa que, de todos los casos en que dices "0,9", aciertas en torno al 90 %. Un "0,95" escrito por el modelo es texto, no una medida. Por eso en una validación seria la confianza se construye con señales externas al modelo.

La arquitectura en cascada

La idea es sencilla: que cada pieza haga lo que hace bien y que las reglas duras decidan.

1. Ingesta y calidad

Detectar el tipo real de fichero, convertir formatos, enderezar la imagen y medir la calidad (tamaño, desenfoque). Si la foto es ilegible, se rechaza antes de gastar en OCR.

2. OCR con coordenadas

Texto, bloques y bounding boxes. Cada dato posterior se podrá señalar en la imagen.

3. Clasificación

Primero señales baratas (¿hay MRZ?, ¿aparecen ciertas palabras clave?) y, si hace falta, un LLM que elige entre una lista cerrada de tipos más "otro".

4. Extracción estructurada

Un LLM rellena un JSON Schema a partir del texto del OCR y devuelve, para cada campo, de qué bloque OCR sale. Si no puede señalar el origen, el dato es sospechoso.

5. Validadores deterministas

Código, no IA. Por ejemplo:

  • Letra del NIF/NIE: el número módulo 23 da la letra según la tabla oficial; en el NIE, X/Y/Z se sustituyen por 0/1/2 (Ministerio del Interior).
  • MRZ: dígitos de control ICAO 9303 con pesos 7-3-1 y módulo 10 (Wikipedia), y coherencia entre la MRZ y los datos impresos.
  • IBAN: ISO 13616, módulo 97 (Wikipedia).
  • Fechas: caducidad frente a hoy o a la fecha del evento, antigüedad máxima de un certificado, edad frente a la categoría.
  • Cuadres: base + IVA = total en una factura, importe esperado en un justificante.

6. Confianza y veredicto

La confianza combina la del OCR, el resultado de los validadores y, si hay dudas, la concordancia con una segunda pasada. Con eso se decide: válido, inválido o revisión humana.

La gracia de la cascada es que un error del LLM choca con una regla. Si el modelo "inventa" un dígito del DNI, la letra deja de cuadrar. Si confunde la fecha de emisión con la de caducidad, la coherencia con la MRZ falla. El fallo no desaparece, pero se detecta y acaba en review en lugar de pasar como válido.

¿Y si lo hago yo?

Es una opción real. Un artículo de Beri.net de agosto de 2026 propone combinar un OCR de 1,50 $ por 1.000 páginas con un modelo tipo Gemini Flash para extraer, por unos 3,20 $ por cada 1.000 páginas, y lo compara con el paquete de Textract, veinte veces más caro según sus cálculos. Además conserva las coordenadas para que un revisor vea de dónde sale cada dato.

Si tienes equipo, volumen y tiempo, puede tener sentido. Lo que ese pipeline no trae de serie es lo que más cuesta: validadores por tipo de documento, reglas de negocio (vigencia para una fecha, titular que coincide con la inscripción), confianza calibrada con datos etiquetados, mensajes explicables, borrado de ficheros y cumplimiento del RGPD. Decide con esa lista delante, no solo con el precio por página.

Honestidad: un checksum válido no prueba nada sobre autenticidad

Los validadores deterministas detectan errores de lectura e incoherencias. No detectan falsificaciones bien hechas. Los algoritmos de la letra del NIF o de la MRZ son públicos, y existen generadores de MRZ con dígitos de control válidos pensados para datos de prueba. Un documento inventado puede pasar todos los checksums.

Por eso:

  • "Checksum correcto" significa "bien leído y coherente", no "auténtico".
  • Las señales de manipulación (foto de pantalla, edición) son indicios.
  • Si necesitas verificar identidad de verdad, con biometría y prueba de vida, necesitas un proveedor de KYC.

Cómo lo hace Constaia

Constaia sigue esta cascada: Mistral OCR en la UE, clasificación en cascada, extracción con LLM en AWS Bedrock eu-central-1 citando los bloques de origen (source.bbox en cada campo) y validadores deterministas de código abierto (@constaia/validators: NIF/NIE, MRZ, IBAN, fechas). Nunca exponemos la autoconfianza cruda del LLM: la confidence de la respuesta combina OCR, validadores y, si hay dudas, una segunda pasada con otro modelo.

curl https://api.constaia.com/v1/analyze \
  -H "Authorization: Bearer $CONSTAIA_API_KEY" \
  -F file=@dni_valid.jpg \
  -F 'options={"expect":"es_dni","checks":{"not_expired":true},"storage":"none","language":"es"}'

En la respuesta, checks lista cada validador determinista con passed y un mensaje; fields trae cada dato con su confidence, si se ha validado y su posición en la página. Con una clave ck_test_… puedes probarlo sin coste con ficheros como dni_valid.jpg o blurry.jpg (modo test).

Más detalle en veredictos, checks y la referencia de /v1/analyze.

En resumen

  • El OCR lee píxeles y da coordenadas; el LLM entiende contexto pero puede inferir en vez de leer.
  • La confianza que declara un LLM no es una probabilidad calibrada.
  • Una cascada OCR → clasificación → extracción con origen → validadores deterministas → veredicto convierte los errores silenciosos en casos de revisión.
  • Un checksum válido demuestra coherencia, no autenticidad.

Si quieres ver la cascada con tus propios documentos, crea una cuenta gratis: 250 créditos al mes y claves de test que no consumen créditos.

Fuentes

  1. 01Hacker News — LLMs for OCR is super risky…
  2. 02Xiong et al. — Can LLMs Express Their Uncertainty? (arXiv 2306.13063)
  3. 03Guo et al. — On Calibration of Modern Neural Networks (arXiv 1706.04599)
  4. 04Mistral AI — Mistral OCR 4
  5. 05Beri.net — Document extraction: Textract vs Azure Document Intelligence vs LLM (2026)
  6. 06Ministerio del Interior — Cálculo del dígito de control del NIF/NIE
  7. 07Wikipedia — Machine-readable passport (MRZ)
  8. 08Wikipedia — International Bank Account Number
  9. 09GitHub — mrz-passport-generator