Ir al contenido

IDP Activities

Versión: 1.20.4  ·  ID: zoan-packages-idp  ·  Autor: Zoan Software

El paquete IDP (Intelligent Document Processing) lee documentos cuyo formato cambia de un emisor a otro: facturas, órdenes de compra, actas, formularios. La idea es describir qué significa cada dato en vez de dónde está, para que la misma configuración sirva para todos los formatos de un mismo tipo de documento. En el Designer en español aparece como Procesamiento de documentos (IDP).

  • Sin sesión: cada actividad recibe la ruta del documento (o el documento ya leído) y trabaja sobre él.
  • La ruta se decide sola: IDP — Load Document mira si el PDF tiene capa de texto. Si la tiene, la lee (gratis y exacta); si no, lo escanea con Azure Document Intelligence. Las dos rutas devuelven la misma estructura, así que lo que va detrás no cambia.
  • Las coordenadas están unificadas: todas las palabras salen en píxeles al dpi que pidas, con origen arriba-izquierda, venga de donde venga el documento.
  • IA y lectura incluidas en tu plan (desde la versión 1.20.0): sin credenciales en la actividad ni en el proyecto, el modelo y la lectura de escaneos van por Zoan Cloud, sin claves que configurar; el consumo (tokens y páginas) aparece en Consumo de IA. Con tus propias credenciales, las llamadas van directo a tus proveedores.
  • Los datos personales se ocultan antes de salir: IDP — Classify e IDP — Extract enmascaran cédulas, NIT, correos, teléfonos, cuentas, direcciones y nombres del texto antes de enviarlo al modelo (maskPii, activo por defecto) y restauran los valores reales en el resultado.

Cada palabra viene con su caja (x, y, width, height). Eso es lo que permite volver al documento desde un dato extraído: resaltar de dónde salió un número de factura, mostrárselo a una persona para que lo valide, o auditar una extracción meses después.

Si usas el mismo dpi en PDF To Images, las cajas caen exactamente encima de la página renderizada, sin conversión ninguna. Es la base sobre la que se dibuja cualquier revisión visual.

Las dos primeras son el camino normal. Las de abajo siguen ahí para quien necesite meterse entre medias.

ActividadTipoSalidaQué hace
IDP — Classifyidp-classifyobjectLee un documento, dice de qué tipo es y lo parte en segmentos. Devuelve el documento ya leído
IDP — Extractidp-extractobjectExtrae los campos de un proyecto de extracción, enruta al perfil del formato, localiza cada valor y guarda el resultado
IDP — Load Documentidp-load-documentobjectCarga un documento y devuelve su texto y sus palabras con posición
IDP — Build Classifieridp-build-classifierobjectConstruye el esquema que identifica de qué tipo es el documento
IDP — Build Schemaidp-build-schemaList<object>Trocea una taxonomía en los esquemas que caben en una llamada
IDP — Groundidp-groundobjectLocaliza cada valor extraído y marca lo que necesita revisión

Dos nodos:

IDP — Classify → ¿es del tipo que toca? → IDP — Extract

IDP — Classify devuelve el documento ya leído junto al veredicto, e IDP — Extract lo reusa: el archivo se lee una sola vez. Con un escaneo eso no es una optimización menor — releer es pagar Azure dos veces.

Van separadas a propósito. Qué hacer con un documento que no toca es una decisión tuya, no de una actividad: una que decide sola no hacer su trabajo esconde el control de flujo, y además impide lo único que de verdad hace falta cuando la cola trae de todo — clasificar una vez y enrutar al proyecto que corresponda.

Conviene tenerlas separadas en la cabeza porque protegen de cosas distintas:

  • Clasificar responde “¿es este documento del tipo que creo?”. Sin ese paso, una orden de compra procesada como factura puede colar un dato incorrecto con confianza alta.
  • Groundear responde “¿está este valor escrito en el documento?”. Detecta que el modelo se lo inventó, no que el documento sea el equivocado.

Ninguna cubre a la otra. Ver IDP — Build Classifier para el caso concreto que se escapa.

La ruta de escaneo usa Azure Document Intelligence (modelo prebuilt-layout), que lee manuscrito — importante porque en muchos documentos la parte que nadie ha digitalizado nunca (una firma, una anotación al margen, un formulario llenado a mano) está escrita a mano. No necesita entrenamiento ni etiquetado: funciona con cualquier documento desde el primer día.

Con la lectura incluida en tu plan, cada lectura admite hasta 50 MB y 2000 páginas, y cuenta en el cupo mensual de páginas. Un documento que no cabe en lo que queda se rechaza antes de leerlo, con las cifras, y nunca recibes una lectura a medias como si fuera completa (ver IDP — Load Document).

Encolar (una vez por lote):

List Files path = env("FACTURAS_DIR") pattern = "*.pdf" recursive → ficheros
Foreach items = ficheros itemVariable = ruta
Queue Add Item queueName = "facturas" reference = ruta
specificContent = { "path": ruta }

reference = la ruta. Es la clave de idempotencia de la cola y la que llevará el documento en Zoan Cloud, así que relanzarlo no duplica nada y desde el item se llega al documento.

Procesar:

Queue Process queueName = "facturas" itemVariable = item onError = continue
Set Variable name = contenido value = item.SpecificContent
IDP — Classify path = contenido["path"]
projects = ["factura-proveedor"]
dpi = 200
→ doc
If condition = doc["recognized"] == false
Queue Set Transaction Status item = item status = "successful"
output = { "descartado": true, "tipo": doc["documentType"] }
Continue
IDP — Extract document = doc ← ya leído: no se relee
path = contenido["path"]
reference = item.Reference
project = "factura-proveedor"
→ res
Queue Set Transaction Status item = item status = "successful"
output = { "documentId": res["documentId"],
"needsReview": res["needsReview"],
"values": res["values"] }

IDP — Extract guarda el documento y su extracción en Zoan Cloud, donde Zoan Cloud muestra las páginas en la estación de validación; no hace falta subirlo aparte con Documents — Upload.

Queue Process cierra cada item solo —successful si el cuerpo termina, failed si lanza— pero lo cierra con output vacío: tira el resultado. Con el auto-cierre, tu telemetría es “procesé 400, fallaron 12” y nada más.

Por eso el ejemplo llama a Queue Set Transaction Status a mano: si el cuerpo ya fijó el estado, el auto-cierre se aparta. Así cada documento deja su rastro consultable — qué se extrajo, con qué confianza, por qué fue a revisión, y por qué se descartó si se descartó.

Con eso tienes:

DóndeQué te da
GET /queues/:id/metricsTotal, cuentas por estado, tasa de éxito, throughput por hora, tiempos medio y p95.
GET /queues/:id/itemsCada documento con su reference, estado y el output que le pusiste.
Cola validacion-*Cuántos y cuáles necesitan una persona.