Skip to content

T-245 - Montar os casos de referência dos construtos tipados - #333

Merged
pedro-fs-garcia merged 2 commits into
developfrom
feature/t-245-casos-construtos-tipados
Oct 16, 2026
Merged

pedro-fs-garcia merged 2 commits into
developfrom
feature/t-245-casos-construtos-tipados

Conversation

@pablorafael0709

Copy link
Copy Markdown
Contributor

Acrescenta os casos de referência dos cinco construtos tipados e uma regra que os combina, no formato da T-243, para que a geração de cada construto (T-246 a T-250) possa ser provada no avaliador. Cada caso fixa, no campo leitura, a interpretação do construto que a geração e a extração (T-205 a T-209) precisam seguir.

Alterações

  • tests/fixtures/casos_geracao/: seis casos, cada um com caso.json, referencia.py e o esperado.json gravado por scripts.gravar_esperado:
    • exclusao-gerente: núcleo de 2,5% na marca 30 e exclusão do cargo 150 (regra real de outubro), em 2025-10.
    • bonus-fixo-lista-e-filtro: bônus por lista (as oito matrículas reais de agosto, mais MATRIC-133, que está fora do quadro em agosto) e por filtro (cargo 100 admitido até 10/10/2025), em 2025-08 e 2025-10.
    • janela-datas-black-friday: a janela real de 24 a 30/11 com +1 p.p., em 2025-11.
    • faixa-valor-dezembro: as três faixas reais de dezembro das marcas 10 e 20, com a faixa aberta em 1.000.000.000 (T-208), em 2025-12.
    • condicao-limiar-loja: venda da loja >= R$ 50.000 liberando o núcleo de 3% (exemplo do contrato e da T-209), nas cinco competências.
    • combinado-elementos: contracts/examples/domain/representacao-regra-elementos.json sem alteração, nas cinco competências.
  • tests/scripts/test_casos_geracao.py: os testes que fixavam os três casos da T-243 passam a contar os nove; novos testes conferem o construto de cada caso, quais elementos têm contribuição e que o combinado usa o exemplo do contrato.
  • tests/scripts/test_avaliar_geracao_integration.py (docker): o avaliador aprova as nove referências, e cada construto sem efeito, ainda declarado, é reprovado apontando o elemento.
  • docs/t243-avaliador-de-geracao.md: a tabela de casos ganha os seis da T-245.

Decisões

  • Todo caso tem núcleo com percentual, porque a validação de domínio barra regra sem ele. O percentual substitui a comissão do baseline no recorte, como diz o prompt de geração; cada construto soma sobre ele.
  • O núcleo deixa o cargo 150 de fora nos casos de bônus, faixas e limiar. O prompt de geração aplica o percentual sobre a venda da matrícula, e a DEC-084 e a regra 5b da especificação aplicam o do gerente sobre a venda da loja. Fora do núcleo, o caso prova só o construto. Pergunta: quando o núcleo inclui gerentes, qual das duas vale?
  • Faixas: cada faixa vale no próprio intervalo, com os dois limites incluídos, sem preencher o espaço até a seguinte; um total entre 50.000 e 50.001 não ganharia bônus. Nenhum total do dataset cai nesses espaços.
  • Limiar: a venda da loja é somada por mês, pelo cod_loja das vendas, como nas regras base, e a pessoa pertence à loja de lotação.
  • Combinado: a exclusão do exemplo do contrato fica sem efeito, porque o núcleo já é só cargo 100; o efeito dela é provado em exclusao-gerente. As cinco competências testam a vigência de novembro.
  • Construto sem efeito: o teste neutraliza a constante do construto na referência e mantém a declaração, para que só os números possam reprová-lo.
  • Os centavos fora do inteiro (elem.2 654.000,09 no bônus, elem.1 17.499,99 no combinado) vêm do harness, que põe o centavo de arredondamento de cada linha no elemento de maior valor.

Verificação

Executado em Linux (Ubuntu 24.04 no WSL), com Docker:

  • Os testes novos falharam antes dos casos existirem (38 falhas por caso ausente).
  • poetry run python -m scripts.gravar_esperado --check: as nove referências conferem.
  • tests/scripts: 92 testes sem Docker e 24 docker passando, com as 8 variações de construto sem efeito reprovadas.
  • Defeitos introduzidos nas referências e pegos pelos testes: exclusão esquecida, bônus em dobro, núcleo com gerente, janela sobre a comissão, faixa cumulativa, limiar no escopo da pessoa e combinado sem vigência.
  • EXIGIR_DOCKER=1 sh verify.sh: Ruff e formatação ok, mypy sem erros em 52 arquivos, 1.121 testes sem marcação e 115 docker passando.
  • Job "Verificar worker" reproduzido numa cópia limpa, com venv novo e CI=true: verify.sh com saída 0.
  • git diff --check: ok.

Não verificado

  • A geração com o modelo real contra estes casos, que é das T-246 a T-250.
  • O dia 10/10 no filtro de bonus_fixo e data_ref no lugar de data_venda na janela: com estes dados, os dois não mudam o número, e as leituras registram a limitação.
  • Os testes marcados postgres, pulados sem Postgres; localmente, 9 testes rabbitmq do consumidor do worker também dependem dele.

- um caso por construto tipado e um combinado, no formato da T-243, com o
  esperado gravado pelo script
- a leitura de cada construto fica no caso, inclusive a premissa das lacunas
  entre faixas
- nos casos de bônus, faixas e limiar o núcleo deixa o gerente de fora, para o
  caso não depender de como o percentual se aplica a ele
- os testes conferem a contribuição ou a declaração de cada elemento e que o
  avaliador reprova cada construto sem efeito
- os testes da T-243 que fixavam três casos passam a contar os nove

Review: human
- a tabela de casos da doc do avaliador ganha os seis casos da T-245, com o
  esperado de cada um

Review: human
@pedro-fs-garcia
pedro-fs-garcia merged commit 9a26124 into develop Oct 16, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants