Repository navigation
Closed
Labels
raiztarefas que dizem repseito à raiz do monorepotarefas que dizem repseito à raiz do monorepo
Milestone
Description
T-309 - Definir o contrato das fontes de dados da simulação
- Componente:
contracts/, sujeito a autorização. - Depende de: T-304 no
develop, porque a resposta da consulta de auditoria ganha o campo. - Data máxima: 09/11/2026
- Estimativa: 2 pontos (Fibonacci)
Entregável
- Schema
contracts/domain/resultado-fontes.schema.json, com exemplo registrado no manifesto. - Campo opcional
fontesnos resultados da resposta deGET /auditoria/jobs/{id}.
Descrição
A US04 exige que o registro de auditoria contenha a origem de cada dado processado e a vincule ao id da simulação, ao horário e à versão da regra. Hoje nada registra quais bases de dados uma execução usou. O worker já confere os arquivos de base contra o sha256 registrado no manifesto dos baselines, mas não grava isso. Esta tarefa define o formato desse registro, que o worker grava em resultados_simulacao.fontes (T-311) e a API expõe (T-310).
Contexto e decisões tomadas
- O manifesto (
worker/sandbox/data/domrock/baselines/manifesto.json) registraversao,congelamento, o sha256 de cada arquivo de base emfontes_sha256e, por competência, o arquivo e o sha256 do baseline embaselines. - O worker lê e confere cinco arquivos (
rh.jsonl,vendas.jsonl,comissoes.jsonl,eventos_rh.jsonleregras_competencia.jsonl, emARQUIVOSdeworker/app/execucao/bases.py). - O registro fica no resultado, e não na trilha. O resultado já se liga ao código, à versão da regra, à simulação e ao horário, então as fontes ficam vinculadas a tudo isso pela mesma linha, que é imutável.
- O registro é referência e identificação das bases, sem conteúdo de dados.
Escopo
Dentro do escopo
- O schema de domínio, o exemplo, o registro no manifesto de exemplos e o campo na resposta da consulta de auditoria em
contracts/http/openapi.yaml.
Fora do escopo
- Migration, gravação pelo worker e leitura pela API.
- Os eventos
executar-codigoesimulacao-concluida, que continuam sem as fontes.
Requisitos
- Antes de editar, pedir autorização conforme contract-change (
.agents/skills/contract-change/SKILL.md), informando o schema novo, o produtor (worker), o consumidor (API), a compatibilidade (campo novo e opcional) e as validações. - Criar
resultado-fontes.schema.json, um objeto commanifesto(versaoecongelamento),competencias(formato AAAA-MM, como emcomum.schema.json),arquivos(lista denomeesha256) ebaselines(lista decompetencia,arquivoesha256). Todos obrigatórios, semadditionalProperties: false. Osha256tem 64 caracteres hexadecimais minúsculos. - A descrição do schema diz que o registro identifica as bases que o worker conferiu contra o manifesto antes de executar, e que as imagens do worker e do sandbox copiam os dados do mesmo diretório do repositório.
- Criar
contracts/examples/domain/resultado-fontes.jsoncom os valores do manifesto atual para duas competências e registrá-lo emcontracts/examples/manifesto.json. - Na resposta de
GET /auditoria/jobs/{id}, acrescentar aos resultados o campo opcionalfontes, referenciando o schema novo, ausente nos resultados gravados antes do campo e nos deerro_infra.
Contexto técnico
- Entradas: o manifesto dos baselines.
- Saídas: schema e exemplo das fontes, e o campo na resposta de auditoria.
- Componentes afetados:
contracts/. - Restrições: evolução aditiva; nenhum dado de base no registro.
- Referências:
worker/app/execucao/bases.py, manifesto dos baselines (worker/sandbox/data/domrock/baselines/manifesto.json),contracts/domain/comum.schema.json, contract-change (.agents/skills/contract-change/SKILL.md).
Critérios de aceitação
-
python contracts/validar-exemplos.pypassa com o exemplo novo. - Um registro com
sha256em maiúsculas ou com competência fora do formato é rejeitado.
Definição de concluído (DoD)
- Autorização registrada antes da edição.
python contracts/validar-exemplos.pyegit diff --checksem falha, e gate dos quatro componentes verde.
Metadata
Metadata
Assignees
Labels
raiztarefas que dizem repseito à raiz do monorepotarefas que dizem repseito à raiz do monorepo
Activity