Pular para o conteúdo principal
O Reporter tem 17 definições de eventos de negócio emitidos. São mensagens CloudEvents 1.0 no modo binário. Todo evento trafega pelo RabbitMQ quando STREAMING_ENABLED=true. Quando STREAMING_KAFKA_BROKERS também está definido, o worker publica report.finished e report.partial também no Kafka. Quando o streaming está desligado, o Reporter não publica eventos.

Envelope e roteamento

Todo evento usa ce-source reporter e um ce-type qualificado pela fonte no formato studio.lerian.reporter.<resource>.<event>. O payload é JSON com chaves em snake_case. As duas cópias carregam o mesmo ce-id. Use o envelope compartilhado para o contrato completo de header do CloudEvents.

Semântica de entrega

O Reporter emite o evento depois que a mudança de estado de negócio recebe commit. Erros de publicação não falham a operação subjacente.
  • Importante: publicação direta, com fallback de outbox durável quando o circuito do broker está aberto.
  • Crítico: o Reporter pula a publicação direta. Ele sempre persiste o evento no outbox durável para despacho e nova tentativa.
  • As duas políticas solicitam on_routable_failure, mas as rotas não definem um destino DLQ explícito. O publicador vê uma falha roteável. Nenhuma cópia vai para uma rota dead-letter.
  • A entrega do broker é pelo menos uma vez. Os consumidores devem ser idempotentes e fazer deduplicação com (ce-source, ce-id).

Catálogo de eventos emitidos

Uma remessa regulatória emite regulatory.draft_ready em vez de report.finished. Uma execução de remessa que falha emite report.errored.

Identificadores de eventos

O Reporter define um ce-id determinístico nestes eventos: Todas as variantes de report.errored usam o mesmo ce-id. Por isso, um consumidor que faz deduplicação por (ce-source, ce-id) mantém apenas o primeiro report.errored recebido para um report_id. Os eventos de template, report.requested e os eventos de criação, atualização e exclusão de prazo carregam um identificador gerado.

Contratos data completos

Estas declarações no estilo TypeScript refletem o formato do JSON na rede. ? significa que a propriedade é opcional. | null significa que a propriedade está presente, mas pode ser null em JSON.
document_type carrega a categoria do template. Ele contém uma string vazia na variante de falha do worker que não carrega template_id. Trate um valor vazio como ausência de categoria. document_id e document_version em report.errored nomeiam o documento regulatório quando uma inscrição gerou o relatório, e são strings vazias nos demais casos. artifact_object_key em report.finished, report.partial e regulatory.filing_approved é a chave de armazenamento do arquivo exatamente como o Reporter a gravou, e nunca é vazia. Use-a como está. Não a reconstrua a partir de outros campos. Em regulatory.filing_approved, verifique o objeto armazenado contra artifact_sha256 antes de enviá-lo. parameters carrega os parâmetros de geração sem os que começam com system.. binding_gaps_count em regulatory.version_adopted conta os campos da versão adotada que o mapeamento existente deixa sem mapear. O campo mapping_broken é true quando o Reporter não conseguiu avaliar o mapeamento existente contra a versão adotada. Nesse caso, binding_gaps_count é 0.

Canal de comando interno separado

O manager envia ao worker um comando JSON que não é CloudEvents pelo RabbitMQ. Ele usa RABBITMQ_EXCHANGE, RABBITMQ_GENERATE_REPORT_KEY e RABBITMQ_GENERATE_REPORT_QUEUE, com entrega persistente. Esse comando não faz parte do catálogo público de eventos, e o formato dele não é um contrato público.

Status de eventos de entrada

O Reporter não consome nenhum evento de negócio público. O subscriber do Hub está indisponível: habilitá-lo é rejeitado na inicialização.