Saltar al contenido principal
Reporter publica un evento de negocio cada vez que una plantilla, un informe, un plazo o una presentación regulatoria cambia de estado. Suscríbete a esos eventos y sabrás que un informe terminó sin sondear GET /v1/reports/{id} para averiguarlo. GET /v1/streaming/manifest describe el contrato en formato legible por máquina. Esta página cubre el lado del consumidor: qué te dice el manifiesto, qué llega por el cable y qué transporta cada evento.

La operación de manifiesto


Streaming events devuelve el catálogo estático de eventos. Requiere autenticación como cualquier otra operación. Responde con Cache-Control: no-store, y responde independientemente de si este despliegue publica eventos o no. Léelo al arrancar para confirmar que tu consumidor y Reporter coinciden en el contrato. La respuesta expone la identidad de la aplicación y el catálogo:

Recibir los eventos


El manifiesto indica el tema, pero no el broker. Los eventos de Reporter te llegan por el Streaming Hub, nunca por el RabbitMQ propio de Reporter. Crea una suscripción con origin definido como reporter y las claves de evento que necesitas, como report.finished o deadline.delivery_reverted, guiones bajos incluidos. El Hub entrega cada evento al destino de webhook, de cola o de pull que elijas. RabbitMQ lleva solo la cola interna de informes de Reporter. No lleva ningún evento de negocio.

El catálogo de eventos


Existen diecisiete definiciones de evento entre los dos modos de ejecución. Este canal es solo de publicación. Reporter emite estos eventos y no consume ninguno de ellos.

Entrega


Todo evento del manifiesto tiene la clase fact. Reporter envía todo evento, por el outbox de streaming durable de Mongo después del commit del estado de negocio, y un dispatcher lo reproduce tras una interrupción del broker. Nunca publica directo al broker. La escritura del estado y la inserción en el outbox son operaciones separadas, no una única transacción atómica de aplicación. Ese hueco es una ventana de falla: una caída o una inserción fallida en el outbox después del commit del estado pierde el evento. Ninguna conciliación lo recupera. La pérdida deja solo un registro de error y una métrica. Una vez que la fila está en el outbox, el dispatcher reintenta hasta lograr la entrega. La emisión ocurre después del commit y nunca hace fallar el trabajo. Un problema de publicación no convierte un informe almacenado en uno con error.
La entrega es al menos una vez. Deduplica según el id de evento del Hub: X-Lerian-Event-Id en webhook, ceId en pull, con una suscripción fijada a origin reporter. Todos los eventos usan un identificador determinista.

El envelope de CloudEvents


Los mensajes viajan en modo binario de CloudEvents, versión 1.0. Los atributos de contexto viajan como headers del mensaje. El Streaming Hub reentrega el mensaje: un consumidor de webhook lee X-Lerian-Event-Id y X-Lerian-Tenant-Id, y un consumidor de pull lee ceId. Consulta consumir eventos. La tabla siguiente es el envelope del productor. Reporter siempre estampa un valor de tenant.

Qué transporta un payload


Las claves del payload son snake_case, a diferencia de la superficie REST en camelCase. Un cuerpo de report.finished:
artifact_object_key es la clave de objeto exacta que informa el almacenamiento después de la escritura, no una ruta que los consumidores deban reconstruir. Usa el valor tal cual. Si validas su segmento de tenant, compáralo con el tenant vinculado a tu suscripción autenticada, no con otro campo del mismo mensaje. Una clave vacía en report.finished o report.partial es una violación del contrato. Descargar un informe sigue siendo la forma admitida de obtener un informe en estado Finished. report.partial agrega section_failures y failed_section_count junto a los mismos campos de artefacto. Una clave resoluble no significa que el informe esté completo. Entrega un informe de plantilla solo desde report.finished, y una presentación regulatoria solo desde regulatory.filing_approved. Decodifica estrictamente el campo status en lugar de usar la presencia de la clave como discriminador. regulatory.filing_approved nombra el archivo aprobado en artifact_object_key y lleva artifact_sha256, artifact_size_bytes, delivery_attempt y approved_by. document_type lleva la categoría de la plantilla. report.errored reemplaza los campos de artefacto por error_code y error_summary, y agrega document_id y document_version, que nombran el documento regulatorio cuando una suscripción generó el informe. Que le falte un campo de artefacto no demuestra que no se escribió ningún objeto: el almacenamiento puede tener éxito antes de que falle la persistencia del estado terminal, dejando un objeto que ningún evento nombra. Ambos campos de error provienen de un vocabulario fijo: report_generation_failed, report_generation_timeout, report_generation_canceled o report_worker_lost. Cada código tiene un resumen fijo. El texto de error crudo nunca viaja por el cable, de modo que un payload no puede filtrar una consulta, una cadena de conexión ni datos de tenant. Ramifica la lógica según error_code.

Habilitar la publicación de eventos


La publicación de eventos es una decisión de despliegue, que se configura con STREAMING_ENABLED. Actívala y Reporter valida estos ajustes al arrancar: Cuando la publicación está apagada, STREAMING_CLOUDEVENTS_SOURCE puede quedar sin definir. Si está definido, igual debe ser exactamente reporter. Reporter rechaza cualquier otro valor no vacío al arrancar aun con la publicación apagada. Cuando la publicación está encendida, Reporter también se niega a arrancar si un ajuste obligatorio está en blanco, de modo que un despliegue mal configurado falla al arrancar en lugar de descartar eventos en silencio.

Próximos pasos


API REST de Reporter

Las 69 operaciones, la autenticación, la paginación y los errores.

Referencia de API

La operación de manifiesto de streaming, con la forma completa de su respuesta.

Variables de entorno

Cada ajuste detrás de las superficies de streaming y modo de ejecución.

¿Qué es Reporter?

Plantillas, informes, plazos y dónde encajan.