# Handoff 2026-07-19 (madrugada) - migração infração DICT em PRD + relatório evidência integral + P4 batimento + P6 desenhos

Ponto de retomada da próxima sessão. Estado canônico no topo do `CLAUDE.md`; memórias persistentes `monetarie-migracao-infracao-dict212-0718` e `monetarie-batimento-apix-desenhos-p6-0719`; Serena `monetarie/live-state-2026-07-19`. `origin/main` equalizada com TUDO desta sessão.

## Revisões vivas

- **PRD**: core-api:71, **pix-api:65** (rollback :64; digest `sha256:2ebb6532...` = imagem validada em HML), spb-api:39, banking-ui:5, merchant-ui:3, admin-ui:24. ICOM CPM4+CSM4 reassumido no swap; TG healthy; DLQ 25/seq42 intacta.
- **HML**: pix-api:191 (rollback :190), core-api:174.
- Envs novos na task-def do pix-api (HML e PRD): `DICT_MED_CONTACT_EMAIL=compliance@monetarie.com`, `DICT_MED_CONTACT_PHONE=+5548991411426` (decisão do dono 18/07; domínio `.com` CONFIRMADO pelo dono em 19/07 pela manhã, sem `.br` - pendência fechada, task-defs corretas).
- Migration nova aplicada nos 2 ambientes via rpc ANTES dos swaps: `20260718200000_add_uq_infraction_report_tx` (migrate() das imagens novas provado no-op).

## O que fechou nesta sessão (tudo com prova, ver relatórios)

1. **Migração da abertura de infração DICT para o fluxo vigente 2.12.1** (frente P0): create cria/REUSA Recuperação de Valores; cancel recovery-bound com cura idempotente; caminho morto removido; shape 2.12 no funil (contato obrigatório + limites de grafo). Contrato do parceiro INALTERADO (core 28/0 sem mudança; paridade docs verde). Prova viva nos 2 ambientes deployados: BACEN respondeu `400 FundsRecoveryTransactionNotIndexed` assinado SERPRO (410 morto; shape aceito; recusa de negócio sobre raiz rejeitada); fail-closed zero espelho espúrio. Relatório: `docs/reports/2026-07-18-migracao-infracao-dict-212-validacao-viva.md`; plano executado: `docs/plans/2026-07-18-migracao-infracao-dict-212-plan.md`. Degrau final pendente: recovery ACEITA exige raiz LIQUIDADA (não existe em HML; 1ª chance real = sequências do cliente na segunda, abrir infração nelas = decisão do dono na hora).
2. **Relatório do cliente refeito com evidência integral** (o dono flagrou sumário + rótulo inferido): varredura 100% RE-EXECUTADA viva (69 chamadas, corpo enviado + retorno completo da MESMA execução, prova de saldo, 6 webhooks frescos, HMAC verificado na sessão com secret capturado na criação). PDF 43 páginas no Desktop; harness versionado `scripts/partner_validation_report/final_sweep_v2.py` + gerador `gen_pdf_v2.py`.
3. **Vigia do netting 00:30 UTC: SUCESSO** (linha 133 `CALCULATED`, INTRADAY, zeros, DLQ intacta). ACHADO: `netting_operations.net_amount` é numeric no banco e o schema `NettingResult` declara :integer - carregar a linha inteira pelo schema CRASHA (provado vivo). Follow-up de fix de schema com TDD.
4. **P4 - batimento APIX042026.xml vs restore AutBank EXECUTADO**: restore íntegro (balde 6/1 fecha AO CENTAVO: 5 internas = R$ 804.000,00); o arquivo do LEGADO subnotificou (abril teve 244 pacs.008 enviadas/243 aprovadas/189 recebidas/604 consultas DICT; arquivo declara 0 no balde SPI e 80 consultas) - defeito de geração do AutBank, provado por 3 tabelas independentes. Receita 586,03 não derivável dos backups PIX. Relatório: `docs/reports/2026-07-19-batimento-apix042026-vs-restore-autbank.md`.
5. **P6 - desenhos prontos** (decisões do brainstorm do dono embutidas): `docs/plans/2026-07-19-aceite-operador-transferencia-judicial-design.md` (escalação 2 níveis, nunca auto-executa, flag OFF), `2026-07-19-grade-nominal-emails-ccs-design.md` (transporte depois, CcsScheduleNotifier + 3 eventos novos), `2026-07-19-elo-ames-simba-design.md` (código já existe, falta UI + validação viva), `2026-07-19-wave2-ordem-e-remuneracao-spi-design.md` (remuneração SPI primeiro).

## PENDÊNCIAS por prioridade

### P0 operacional - segunda 21/07
Cliente roda sequências PIX/TED. O DONO é a única interface; suporte técnico por acionamento, perna a perna, reconciliação antes/depois com o kit (`docs/operator/2026-07-18-vigia-netting-0030utc-e-kit-sondas-prd.md`). **NUNCA deployar/reiniciar pix/spb durante a operação.** Oportunidade: primeira transação LIQUIDADA real habilita o degrau final da infração/MED (decisão do dono).

### P1 - decisões do dono abertas
- **APIX (gate)**: (a) gerar números CORRETOS de abril + avaliar retificação ao BACEN (recomendado) vs reproduzir o arquivo defeituoso do legado; (b) gerador oficial único (recomendado: `Cadoc1201` do core, completando Disponibilidade real + Devoluções/Bloqueios/Autorizações vivos).
- Implementação dos desenhos P6: qual começa (candidatos: ACEITE judicial ou remuneração SPI).
- Antigas: SMTP vs SES + destinatários; publicação do portal; `SPB_AUTO_RETURN_ENABLED`; pacs.004 no 4xx-terminal; tabela natureza ação judicial; ligar lote PIX (G3, runbook pronto); purge DLQ PRD; COERCION no FraudMarkerEnumMapper.

### P2 - follow-ups técnicos novos desta sessão
- `NettingResult.net_amount` :integer vs numeric (full-row load crasha; fix de schema TDD).
- `POST /webhooks/{id}/test` do partner faz BROADCAST de `webhook.test` aos inscritos em vez de entregar ao webhook testado.
- MED sem `details` vira 503 tardio em vez de 4xx local; retry do create de infração = 422 changeset (polir para `already_reported`); sweep do anti-padrão `put_env(nil)` em testes (1 corrigido, ao menos 1 resta); menores no relatório da migração.
- Projeção do acervo AutBank de abril nas tabelas do gerador APIX escolhido (o ETL antigo foi para `cc_pix.cecresa_spi.*` que nenhum gerador lê; container da projeção removido - a fonte mssql `monetarie-bak-mssql` segue disponível parada).

### P3 - backlog anterior (inalterado)
banking-ui delete-key; PixInOrphanRecon Wise 52,74; Postgrex disconnects; `diversos/` fora do repo; ECR lifecycle; drift Terraform HML (NUNCA apply); R13 STA depois da Wave 2.

## Receitas rápidas

- rpc PRD/HML e kit de sondas: `docs/operator/2026-07-18-vigia-netting-0030utc-e-kit-sondas-prd.md` (awsmon + base64 + fatiar output).
- Túnel SSM HML: port-forward 18080 via `i-02ce3a3b6b3ad0d37` (expira ~30min).
- Partner key de campanha HML: `cli_cea592a4f005d96561af1a3e` (secret no scratchpad da sessão de 18/07, gitignorado); cliente 25362, conta 10024480 (saldo 1000 subcent); webhook do dono `webhook.site/793dba8d...` (Api-Key de leitura no mesmo scratchpad).
- Restore AutBank: `docker start monetarie-bak-mssql`; sqlcmd com `-U sa -P "$MSSQL_SA_PASSWORD"` (env interno do container).

## Regras inegociáveis (reforçadas)
BACEN é a verdade; provar empiricamente, zero inferência; em produção não existe teste; validação nunca com fixture; NUNCA deployar pix/spb durante operação do dono; migrations antes do swap; nunca LIKE full-scan em banco vivo; terraform HML nunca apply; push/deploy PRD só com OK explícito do dono naquele momento; relatório do cliente nunca expõe defeito interno; docs pt-br sem travessão de IA.
