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 usace-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 umce-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 usaRABBITMQ_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.

