T-067 - Gravar o resultado e publicar na exchange fanout
Descrição
Gravar o resultado decomposto na tabela do worker e publicar simulacao-concluida na exchange fanout, com job_id, referência, status, veredito, totais e desfecho das asserções.
O ponto em que o resultado entra no sistema. O worker grava a linha no Postgres e publica simulacao-concluida numa exchange fanout, para que api e codegen consumam de forma independente, cada um pela sua fila.
Se o evento se perder, o resultado não se perde junto: a linha é consultável e reconciliável depois.
Escopo
Dentro do escopo
INSERT do resultado decomposto na tabela do worker.
- Publicação de
simulacao-concluida na exchange fanout, com job_id, referência da linha, status, veredito, totais e desfecho das asserções.
- Ordem garantida: gravar antes de publicar.
- Testes com um consumidor desligado e com os dois ligados.
Fora do escopo
- Consumo pela
api (T-045) e pelo codegen (T-049).
- Cálculo do veredito (T-066).
- Limpeza do container (T-068).
- Reconciliação de resultado órfão, que é operação, não código desta sprint.
Requisitos
- O
worker tem apenas INSERT nessa tabela; nenhuma outra operação, em nenhuma outra tabela.
- Grava antes de publicar: um evento que referencia linha inexistente é pior do que um evento perdido.
- A exchange é fanout, com uma fila por consumidor: derrubar um consumidor não impede o outro de receber.
- O evento carrega os totais e o veredito além da referência, para que os consumidores não precisem ler o banco só para reagir.
Contexto técnico
- Entradas: resultado com veredito (T-066); usuário de banco do
worker (T-021); schema do evento (T-003).
- Saídas: linha de resultado gravada; evento publicado na fanout.
- Componentes afetados:
worker/; RabbitMQ; tabela de resultado.
- Restrições: claim-check - o conteúdo fica no banco, o evento leva a referência mais os poucos agregados previstos na §6.3.
- Referências: ARCHITECTURE.md §3.4 (publicação do resultado), §6.1 e §6.3; ADR-001.
Critérios de aceitação
Definição de concluído (DoD)
Observações / Decisões
Único ponto do sistema com exchange fanout. Os outros cinco eventos têm consumidor único e usam fila simples. A fanout existe aqui porque api e codegen reagem ao mesmo fato por motivos independentes, e nenhum deve esperar pelo outro.
Efeito cascata: fecha a trilha do worker e é pré-requisito de T-045 e T-076.
T-067 - Gravar o resultado e publicar na exchange fanout
Componente: worker
Estimativa: 3
Depende de: T-021, T-066
Data máxima: 2026-09-25 (sex)
Descrição
Gravar o resultado decomposto na tabela do
workere publicarsimulacao-concluidana exchange fanout, comjob_id, referência, status, veredito, totais e desfecho das asserções.O ponto em que o resultado entra no sistema. O
workergrava a linha no Postgres e publicasimulacao-concluidanuma exchange fanout, para queapiecodegenconsumam de forma independente, cada um pela sua fila.Se o evento se perder, o resultado não se perde junto: a linha é consultável e reconciliável depois.
Escopo
Dentro do escopo
INSERTdo resultado decomposto na tabela doworker.simulacao-concluidana exchange fanout, comjob_id, referência da linha, status, veredito, totais e desfecho das asserções.Fora do escopo
api(T-045) e pelocodegen(T-049).Requisitos
workertem apenasINSERTnessa tabela; nenhuma outra operação, em nenhuma outra tabela.Contexto técnico
worker(T-021); schema do evento (T-003).worker/; RabbitMQ; tabela de resultado.Critérios de aceitação
workerantes de o evento ser publicado.contracts/events/simulacao-concluida.schema.json.apiecodegenrecebem o mesmo evento, cada um pela sua fila.apidesligado, ocodegencontinua recebendo - e vice-versa.UPDATEna tabela de resultado falha por permissão.Definição de concluído (DoD)
Observações / Decisões
Único ponto do sistema com exchange fanout. Os outros cinco eventos têm consumidor único e usam fila simples. A fanout existe aqui porque
apiecodegenreagem ao mesmo fato por motivos independentes, e nenhum deve esperar pelo outro.Efeito cascata: fecha a trilha do
workere é pré-requisito de T-045 e T-076.