Ir al contenido

IDP Classify

Lee un documento y dice de cuál de los tipos que le listas es. Devuelve el documento ya leído junto al veredicto, para que IDP Extract no tenga que releerlo. Y si el fichero trae varios documentos pegados, los parte en segmentos para extraer cada uno por separado.

IDP Classify path = = contenido["path"]
projects = ["hoja-de-vida-equipo-biomedico", "reporte-mantenimiento"]
credential = = credential("anthropic-key")
→ output: doc
If condition = = doc["recognized"] == false
Log message = = "No es ninguno de los que conozco: " + doc["reason"]

El parámetro projects recibe los nombres de proyectos de extracción del entorno. Cada proyecto declara su tipo de documento y una descripción; eso es lo que el clasificador lee para distinguirlos. Así el mismo sitio donde configuras qué extraer define también qué tipos hay que distinguir — no se mantienen dos listas.

ParámetroTipoQué es
pathtextoLa ruta del documento.
projectslistaLos tipos a distinguir: nombres de proyectos de extracción del entorno. Uno solo es un caso legítimo. Para CI también acepta un JSON de resolución en línea.
credentialcredencialCredencial de Zoan Cloud con la API key. Usa = credential("nombre").
modeltextoClasificar es fácil comparado con extraer: un modelo pequeño sobra.
modeenumauto, text o azure-di.
dpiintEl dpi en el que vendrán las cajas. Viaja con el documento hasta IDP Extract, así que se dice una vez.
pagestextoQué páginas leer. Vacío = todas.
endpoint / azureCredentialAzure Document Intelligence, solo para escaneos.

Es el documento entero —el mismo que devuelve IDP Load Document— más el veredicto y los segmentos:

CampoQué es
documentTypeEl tipo, o unknown.
recognizedfalse cuando el tipo es unknown. La señal para tu If: si es false, no extraigas — a cuarentena/revisión.
reasonQué del documento le hizo decidir, citando el texto en el que se apoyó.
segmentsLos documentos lógicos que trae el fichero, cada uno { pageStart, pageEnd, type, recognized }. Cada segmento lleva su tipo real.
splitNeedsReviewtrue cuando el troceo es de baja confianza (hay páginas sin reconocer, o se partió en varios sin ninguna marca impresa). Es la señal para mandar el bundle a la estación de clasificación.

Pásaselo tal cual a IDP Extract en su parámetro document y el fichero no se vuelve a leer.

Parte los ficheros que traen varios documentos

Sección titulada «Parte los ficheros que traen varios documentos»

Un cliente entrega un solo PDF con la hoja de vida, el reporte de mantenimiento, la calibración y anexos, todo pegado. IDP Classify clasifica cada página: su tipo y si inicia un documento nuevo. Una frontera se abre cuando cambia el tipo, cuando el modelo detecta un inicio (membrete, encabezado nuevo, un campo que solo sale en la página 1) o cuando aparece la marca impresa «página 1 de N». Con eso agrupa las páginas en segments contiguos, cada uno con su tipo real.

Un fichero de un solo documento sale como un único segmento — el caso normal no cambia.

For Each segmento in = doc["segments"]
IDP Extract path = = archivo
project = = segmento["type"]
pages = = segmento["pageStart"] + "-" + segmento["pageEnd"]

Cuando el troceo no está claro: la estación de clasificación

Sección titulada «Cuando el troceo no está claro: la estación de clasificación»

Partir varios documentos del mismo tipo pegados sin marca es ambiguo. Cuando la confianza es baja, IDP Classify lo señala con splitNeedsReview = true. En ese caso, en vez de extraer a ciegas, envías el bundle a la estación de clasificación con Documents Classify Bundle, una persona confirma las fronteras/tipos, y Documents Take Confirmed los extrae.

If condition = = doc["splitNeedsReview"] == true
then:
Documents Classify Bundle path = = archivo, reference = = archivo,
segments = = doc["segments"], pages = = doc["pages"], dpi = 200
Continue

El enum del clasificador incluye siempre ese valor, y no es un detalle.

Sin una salida honesta, el modelo elige el tipo menos malo de la lista — porque el esquema le obliga a elegir uno. Y un documento equivocado clasificado como bueno es el fallo caro: el grounding no lo detecta, porque verifica que el texto esté en el documento, no que el documento sea el que crees. Una factura tiene números que parecen números de serie, y saldrían localizados y con confianza alta.

«¿Esto es una hoja de vida, sí o no?» es la pregunta más común en una cola de un solo tipo. Con un proyecto, el enum es ["hoja-de-vida-equipo-biomedico", "unknown"] — y esa segunda opción es la que hace que la pregunta tenga sentido.

Porque qué hacer con un documento que no toca es una decisión del playbook. Una actividad que decide sola no hacer su trabajo esconde el control de flujo, y además impide clasificar una vez y enrutar al proyecto que corresponda — que es el caso real de una cola con documentos mezclados.

Es el mismo diseño que UiPath (Classify DocumentExtract Document Data), y por la misma razón.

Clasificar cuesta una llamada corta: entran las páginas, salen el veredicto y los segmentos. Extraer cuesta una sola llamada por documento (todos los campos de una).

Sobre una hoja de vida de 3 páginas, clasificar cuesta unos $0,003 y extraer unos $0,041. Descartar antes de extraer ahorra el 95 % del coste de un documento equivocado — y evita meter datos plausibles y falsos en tu sistema.