Ir al contenido

Tutorial: crear y ejecutar un proyecto de extracción

Esta guía te lleva de la mano, de principio a fin, para sacar datos estructurados de documentos con Zoan Automation: crear el proyecto de extracción en el portal, extraer con un playbook, revisar lo que sacó una persona, y entregar los datos al siguiente paso. No hace falta experiencia previa.

Usaremos un ejemplo concreto: la hoja de vida de un equipo biomédico (serial, fabricante, fechas, historial de mantenimiento). Cambia los campos y ya tienes cualquier otro documento.

Documento (PDF)
idp-extract ──── lee, extrae y localiza cada valor ──── el PROYECTO gobierna todo
Zoan Cloud (store) ── guarda el documento + la extracción, rinde las páginas
├── ¿campos por debajo del umbral? → Estación de validación (una persona corrige)
Cola de salida ── el bot de tu negocio recoge los datos ya validados

La idea central: el proyecto de extracción lleva toda la configuración (qué campos, qué modelo, credenciales, retención). El playbook solo dice qué proyecto y de dónde sale el documento. Quien sabe qué campos importan trabaja en el portal, sin tocar el playbook.

PiezaQué esDónde vive
Proyecto de extracciónEl contrato del documento: esquema canónico + perfiles de formato + config.Portal (Zoan Cloud)
Actividad IDP ExtractExtrae los campos del proyecto de un documento.Playbook (Designer)
Store de documentosGuarda el documento, la extracción y las páginas rendidas.Zoan Cloud
Estación de validaciónDonde una persona revisa los campos que no llegaron al umbral.Portal
Cola de salidaEl hand-off al bot que procesa los datos aguas abajo.Zoan Cloud
Estación de clasificaciónPara archivos con varios documentos: confirmar el troceo antes de extraer.Portal

Necesitas:

  • Un entorno creado en Zoan Cloud (p.ej. producción o pruebas).
  • Un agente instalado y conectado a ese entorno (donde correrá el playbook). Ver Instalación del agente.
  • Una credencial del modelo: la API key de Anthropic guardada como credencial de Zoan Cloud (lo hacemos en el paso 2).

En el portal, entra al menú Proyectos de extracción y pulsa Nuevo proyecto. El proyecto se crea solo con su identidad y el resto se configura después, en pestañas.

CampoEjemploQué es
Nombrehoja-de-vidaEl nombre por el que lo llama el playbook. Sin espacios.
Tipo de documentohoja de vidaDescriptivo, para las bandejas.
DescripciónHoja de vida de equipos biomédicosAyuda al modelo a saber qué documento es.
ÁmbitoGlobal o De este entornoGlobal = compartido por todos los entornos; de entorno = solo ese (tiene prioridad).

Es el contrato de salida: los campos que el proyecto entrega, siempre con el mismo nombre, aunque el layout del documento cambie. En la pestaña Esquema canónico, añade un campo por fila:

NombreTipoUmbralDescripción (la lee el modelo)
serialstring0.85El número de serie del equipo.
fabricantestring0.80El fabricante del equipo.
fecha_instalaciondate0.90La fecha de instalación.
mantenimientostable0.80El historial de mantenimiento (columnas: fecha, acción, técnico).

Dos ideas clave:

  • La descripción es lo que el modelo usa para saber qué dato va en cada campo. Escríbela como se lo dirías a una persona.
  • El umbral (0 a 1) es por campo: un valor con confianza por debajo de su umbral va a revisión humana. Lo pone el negocio: un serial importa más que una nota.

La confianza no se la preguntamos al modelo. Se mide localizando el valor en el documento (grounding). Eso es lo que hace fiable el umbral.

Si el mismo tipo de documento viene en varios layouts (distintos fabricantes, distintas plantillas), creas un perfil por formato en la pestaña Formatos. Cada perfil:

  • tiene un router key (el código impreso que identifica ese formato), y
  • puede sobrescribir campos del canónico (una descripción distinta, otro umbral) sin cambiar el contrato.

Si solo hay un layout, no necesitas perfiles.

En la pestaña Lectura y modelo:

CampoValor típicoQué es
Modeloclaude-haiku-4-5El LLM que extrae.
Modo de lecturaautoauto usa la capa de texto del PDF y solo escanea si no la hay; text nunca escanea; azure-di siempre escanea (para PDFs que son foto).
Credencial del modeloanthropic-keyLa credencial de Zoan Cloud con la API key (paso 2).
Endpoint / credencial de OCR(vacío)Solo para escaneos: el recurso de Azure Document Intelligence.

En la pestaña Gobernanza y retención:

CampoQué es
Retención (días)Cuántos días se guardan los documentos subidos. Es responsabilidad legal: guarda lo justo.
Muestreo QAFracción de auto-aceptados que igual se revisa, para vigilar la calidad.
Auto-aceptarAprobar sin revisión los documentos sin campos bajo umbral. Actívalo solo tras calibrar.
Cola de salidaEl nombre de la cola a la que van los documentos extraídos como trabajo para el bot downstream. Vacío = sin cola (los datos quedan en el store).

Cuando el proyecto está listo, pulsa Publicar. Esto congela la versión que usa el runtime: a partir de ahí, editar el esquema o los perfiles no rompe las extracciones en vuelo — el borrador se edita aparte y solo aplica cuando vuelves a publicar. El estado se ve en el editor: Publicado / Cambios sin publicar / Sin publicar.


En Credenciales del entorno, crea una credencial:

CampoValor
Nombreanthropic-key
Valor(tu API key de Anthropic)

El playbook nunca ve la key: la nombra por su nombre y Zoan Cloud la resuelve. Ver Gestión de credenciales.


En el Designer, crea un playbook. El caso normal es de dos nodos: listar los ficheros y extraer cada uno.

List Files path = "D:\hojas-de-vida\entrada"
pattern = "*.pdf"
recursive = true
→ output: archivos
For Each items = = archivos
itemVariable = archivo
└── IDP Extract path = = archivo
project = "hoja-de-vida"

Eso es todo lo que necesitas para extraer. IDP Extract hace por dentro todo lo caro: lee el documento, enruta al perfil, extrae en una sola llamada al modelo, localiza cada valor (grounding), y persiste el documento + la extracción en el store. Zoan Cloud rinde las páginas para la revisión, y si el proyecto tiene cola de salida, encola los documentos limpios.

No hay pdf-to-images ni documents-upload: eso lo hace la plataforma.

ParámetroQué es
projectEl nombre del proyecto de extracción. De ahí sale todo: esquema, modelo, credenciales, modo de lectura.
pathLa ruta del documento.
referenceClave estable (idempotencia): si ese documento ya se extrajo, reusa lo guardado y no vuelve a pagar Azure/LLM. Por defecto, el nombre del fichero.
pagesQué páginas leer ("1-3"). Vacío = todas.
documentUn documento que ya leyó IDP Classify — para no releerlo (útil en bundles).

credential, azureCredential, dpi, mode y el endpoint no los pones aquí: los gobierna el proyecto. Solo aparecen como override avanzado.


Pulsa Run en el Designer. En los logs verás algo así:

list-files: ... → 3 entries
idp-extract: routed to format 'nuevo-formato'.
idp-extract: 1 call(s), 5023 input + 410 output tokens.
idp-ground: 42 of 45 field(s) accepted; 3 need review.
idp-extract: persisted extraction as document 07d0fca7-... (reference 'hoja-de-vida-2506193.pdf').
enqueued document 07d0fca7-... → queue 'hojas-de-vida-carga' (new item ...)

Qué pasó: se leyó una vez, se extrajeron los 45 campos en una llamada, se localizaron (3 quedaron bajo umbral → revisión), se guardó el documento, y como no necesitaba revisión completa se encoló para el bot downstream.

Si vuelves a correr, verás already extracted — reusing the stored result, skipping OCR+LLM: la idempotencia evita re-pagar.


Los documentos con campos bajo umbral aparecen en Documentos → Por revisar del entorno. Ábrelo: es la estación de validación.

  • A la izquierda, las páginas del documento (las rinde Zoan Cloud).
  • Sobre cada valor, una caja con su confianza. Los que necesitan revisión salen primero.
  • Corriges el valor si hace falta y pulsas Dar por bueno.

Al validar, el documento pasa a validado y, si el proyecto tiene cola de salida, entra a la cola con sus valores corregidos. Un botón Volver te regresa sin validar.


Los documentos ya listos (limpios al extraer, revisados al validar) están en la cola de salida. Un segundo playbook los procesa:

Process Queue queueName = "hojas-de-vida-carga"
itemVariable = item
├── Set Variable name = datos
│ value = = item.SpecificContent
├── (aquí va tu carga real: item.SpecificContent["values"]
│ tiene los campos; carga en tu sistema destino)
└── Set Transaction Status item = = item
status = successful

El item lleva los datos (values) + un documentId para trazar. El performer los carga en tu sistema y cierra la transacción. Ningún bot queda esperando la revisión: es asíncrona.


Si un PDF trae varios documentos pegados (hoja de vida + reporte + calibración), usa IDP Classify antes de extraer. Clasifica cada página (su tipo y si inicia un documento nuevo) y devuelve segments.

IDP Classify path = = archivo
projects = ["hoja-de-vida", "reporte-mantenimiento"]
→ output: doc
  • Si el troceo es claro, el playbook extrae cada segmento por su rango y su tipo.
  • Si es incierto (doc["splitNeedsReview"] es true), sube el bundle a la estación de clasificación con documents-classify-bundle y sigue. Una persona confirma las fronteras/tipos en Documentos → Clasificar, y el playbook idp-extraer-confirmados extrae los confirmados con documents-take-classified.

Así, sin importar cómo lleguen los documentos, siempre hay forma de que el troceo quede bien.


  • Una sola llamada al modelo. La extracción pide todos los campos de una, sin gramática estricta, y valida el resultado. El documento se lee una vez (antes eran ~10 llamadas re-enviando el documento).
  • Confianza medida, no declarada. El grounding localiza el literal en la página; de ahí sale la confianza y la caja. Un valor que no se localiza queda marcado.
  • Idempotencia. IDP Extract no re-paga OCR/LLM si el documento (por su reference) ya se extrajo.
  • Versionado. El runtime extrae contra la versión publicada; editar el proyecto es un borrador hasta que vuelves a publicar.
  • Retención. Los documentos caducan según la retención del proyecto/entorno; un barrendero los borra.
  • Páginas. Zoan Cloud rinde las páginas del documento bajo demanda desde el fichero — no las sube el playbook.

ActividadPara quéDoc
IDP ExtractExtraer los campos de un proyecto de un documento.Ver
IDP ClassifyDecir de qué tipo es cada página y trocear un bundle.Ver
Documents Classify BundleEnviar un bundle incierto a la estación de clasificación.
Documents Take ClassifiedTomar los bundles ya confirmados para extraerlos.
Add Queue Item / Process QueueEncolar y procesar el trabajo downstream.Colas