Skip to main content
GET /analyses/:analysisId devuelve más de 30 campos. Esta página no trata de definiciones de campos, sino del orden en que leerlos y de cómo interpretarlos. Para la lista de campos y sus tipos, consulte la referencia de la API; para la terminología, conceptos clave.

El orden de lectura

1

Compruebe status

No siga adelante si no es completed. En failed, registre error.code y error.message y revise el estado de los ítems.
2

Compruebe outputFormatting.status

extractedData sigue la estructura del output schema solo cuando systemMetadata.outputFormatting.status es formatted o validation_failed. Con skipped o fallback_raw no hay sobre (vea más abajo).
3

Bifurque según verificationStatus

verified → aprobar automáticamente, pending_review → cola de revisión, rejected → rechazar. Los veredictos de detalle vienen después.
4

Lea extractedData y details[]

Los valores están en el value del sobre, el motivo en reasoning, y la causa de un campo vacío es el reasonCode de details[].
5

Vaya a agentAuditLog si lo necesita

Qué paso decidió qué y con qué fundamentos, y si las llamadas a motores externos tuvieron éxito, está todo en el registro de auditoría.

El sobre de extractedData

Cada campo final del output schema lleva un objeto con tres claves en lugar de un valor suelto. Los objetos intermedios y las estructuras de array siguen su esquema exactamente.
Las reglas:
  • Un campo que no obtuvo valor mantiene su sitio, con value: null. La lista de campos de extractedData siempre coincide con el output schema.
  • Cuando el propio objeto padre no se produjo, las rutas por debajo no se crean. En ese caso, details[] lleva una entrada para el padre con reasonCode: "PARENT_MISSING".
  • reasoning se guarda en el momento en que el análisis se completa. Volver a leer el análisis nunca lo cambia.
  • sourceStep es un número de orden de ejecución, así que puede cambiar a partir del siguiente análisis si edita el workflow. Para señalar un paso de forma fiable, use agentAuditLog.steps[].work_id.
  • 0 y false son valores válidos. Vacío significa null / "" / [] / {}.

Cuando no hay sobre

fallback_raw es la causa más frecuente de “todos los campos del output schema parecen vacíos”. Bifurque según status antes de buscar valores por clave del esquema. validation_failed significa que el ensamblado funcionó pero algunas entradas no validan contra el esquema: el sobre es normal, y las discrepancias están en ajvErrors[].
Los análisis completados antes del 2026-08-14 no tienen outputFormatting. Para esos, decida si hay sobre comprobando si outputSchema es null.

Por qué un campo está vacío

Un campo que no recibió valor permanece en el sobre con value: null, y se añade a details[] una entrada con category: "JSON_OUTPUT" que baja outputCompleteness en el Analysis Score.
  • reasonCode es un enumerado ampliable. Maneje sin error un valor fuera de la tabla. Es un eje distinto de type (un conjunto fijo de seis, como OUTPUT_MISSING y OUTPUT_EMPTY).
  • reasonCode, message y stepId aparecen solo en entradas JSON_OUTPUT, nunca en entradas STEP ni TOOL.
  • message son los fundamentos que registró el paso responsable, mientras que el reasoning del sobre da el motivo a nivel de campo. Las dos frases pueden diferir, así que lea primero reasoning para el contexto del campo.
  • target es una ruta de instancia real. Los arrays se despliegan por índice, uno por elemento (ubo_register[0].name). Un array vacío, o una clave de array ausente, cuenta como una sola entrada ubo_register.
  • Omni no vuelve a examinar el documento original. Nunca afirma que “el valor no estaba en el documento”; lo máximo que dice es que “no se incluyó en el resultado de la extracción” (NOT_IN_FINAL_OUTPUT).

Cuando no se puede suministrar un motivo

reasoning: null no significa “no hubo fundamentos”, sino “no se pudo suministrar un motivo”. Los motivos no se generan de forma retroactiva para análisis anteriores.

No use extractionStatus

extractionStatus es un campo obsoleto que se mantiene por compatibilidad. Trabaja al nivel de las claves de primer nivel del esquema (extracted / missing), así que no distingue campos anidados ni elementos de array. Las integraciones nuevas deben usar el value del sobre junto con details[]. Su regla de vacío coincide con la del sobre (0 y false cuentan como extracted). En un análisis sin output schema, devuelve un mapa indexado por las claves de primer nivel de extractedData.

Leer los veredictos

La respuesta contiene tres niveles de veredictos con nombres parecidos, cada uno con un conjunto de valores distinto. El veredicto de nivel superior agrega los resultados de las acciones. Un failed lo convierte en rejected, todos passed en verified, y cualquier otra combinación en pending_review. summary.overall_decision es el mismo agregado, de modo que passedverified, needs_reviewpending_review y failedrejected. findings[].result es ese mismo resultado traducido para la interfaz (needs_review pasa a warning).

confidence frente a confidenceScore

Un confidenceScore alto puede convivir con un confidence.score bajo. El caso típico es que todos los pasos pasen mientras el output schema vuelve vacío. Incluya confidence.score y details[] junto a verificationStatus en sus condiciones de aprobación automática. Los pesos y los tramos de nivel están en conceptos clave.

Qué playbook produjo este veredicto

Un análisis congela el playbook tal como estaba al ejecutarse y lo devuelve como playbookSnapshot. Editar el workflow después deja intactos los fundamentos de los análisis anteriores. Si conserva los fundamentos con fines de auditoría, guarde el playbookSnapshot de los análisis marcados como frozen. outputSchema se congela del mismo modo.

Leer el registro de auditoría

agentAuditLog es el registro de ejecución paso a paso. A diferencia de los campos de nivel superior, usa snake_case (work_id, executed_at, duration_ms).
  • Identificar un paso: step es el orden de ejecución y work_id es el ID fijo de la acción del playbook. Se corresponde con workflowActions[].workId de GET /workflows/:workflowId.
  • Veredictos de paso: status (passed / needs_review / failed) y reasoning son lo que la pestaña Summary muestra como línea de razonamiento en el panel. rule es la instrucción que llevó a cabo ese paso.
  • Llamadas a motores externos: juzgue el fallo por success y error_code en mcpcalls[]. No hay código de estado HTTP. fallback_to_rag: true significa que, tras fallar el motor, se recurrió a la búsqueda documental.
  • Para ver esas mismas llamadas organizadas por acción, use rawActionResults.{acción}.mcpResults[]. Ese lado usa camelCase (durationMs, errorCode, fallbackToRag).
  • Un paso que nunca se ejecutó tampoco aparece en systemMetadata.workflowHistory[]. Las definiciones completas de los pasos están en workflowActions de la respuesta del workflow, y un paso no ejecutado queda registrado en details[] como STEP_NOT_EXECUTED.

Un patrón para el procesamiento posterior

  • Mostrar a un revisor el target, el reasonCode y el message de details[] junto al reasoning del sobre hace que encuentre la causa mucho antes.
  • Volver a analizar el mismo perfil tras mejorar los ítems emite un analysisId nuevo. El resultado anterior se conserva, y puede compararlos con el selector de ejecución del panel.
  • Cuando necesite un informe que pueda leer una persona, obtenga el PDF con GET /analyses/:analysisId/report.