Extracción documental en dos fases: leer con IA, validar con código
Escrituras, facturas y notificaciones entran en formatos imposibles. Cómo separamos la lectura (probabilística) de la validación (determinista) para que ningún dato malo llegue a un expediente.
Todo lo que entra en un despacho llega en el peor formato posible: escrituras escaneadas del 2009, facturas en tres plantillas distintas del mismo proveedor, notificaciones judiciales fotografiadas con el móvil. La tentación es pedirle a un modelo multimodal que lo lea todo y confiar. Nosotros lo partimos en dos fases con contratos muy distintos.
Fase 1: leer (probabilística)
La primera fase es del modelo: clasificar el documento y extraer campos con salida estructurada — partes, importes, fechas, identificadores. Aquí aceptamos que el resultado es una hipótesis con una confianza, no un dato. El prompt pide exactamente los campos del esquema, en un formato que una máquina pueda verificar, y nada más.
Fase 2: validar (determinista)
La segunda fase no contiene ningún modelo. Cada campo extraído pasa una batería de validadores escritos en código:
- Formato: un DNI valida contra su dígito de control; un IBAN, contra su checksum; una fecha, contra el calendario.
- Rango: un importe de factura negativo o un interés del 400% no pasan, vengan de donde vengan.
- Coherencia interna: las líneas deben sumar el total; la fecha de vencimiento no puede ser anterior a la de emisión.
- Coherencia externa: el deudor extraído debe casar con el expediente al que el documento dice pertenecer.
Solo lo que pasa todas las validaciones se consolida. Lo que no, va a una cola de revisión con el documento, la extracción y el validador exacto que falló — el revisor humano corrige en segundos porque ve por qué se detuvo.
Reportar honesto o no reportar
Esta separación tiene un efecto lateral que nos importa mucho: podemos cambiar de modelo de lectura — mejor, más barato, más rápido — sin tocar una línea de la validación. La fase 1 compite en un mercado que mejora cada trimestre; la fase 2 es nuestra y no se negocia.