# Handoff 2026-07-19 (dia) - FECHAMENTO GERAL DAS FRENTES: tudo implementado, revisado e provado; próxima sessão = executar o pacote com o dono

Ponto de retomada da próxima sessão. Estado canônico no topo do `CLAUDE.md`; memórias persistentes `monetarie-fechamento-frentes-0719` (+ errata em `monetarie-batimento-apix-desenhos-p6-0719`); Serena `monetarie/live-state-2026-07-19`. Plano executado: `docs/plans/2026-07-19-plano-mestre-fechamento-frentes.md` (com ADENDO da retratação APIX).

## 1. Estado empírico no fecho

- **Git**: 30 commits da sessão na main (`c3094a0c..` até o commit deste handoff), PUSHADOS com autorização explícita do dono no fecho de 19/07 ("faça commit e push de tudo"). Working tree limpa. Conferir na retomada: `git log --oneline -5` e `git status --short`.
- **PRD INALTERADA nesta sessão**: core-api:71, pix-api:65 (rollbacks :70/:64), spb-api:39, banking-ui:5, merchant-ui:3, admin-ui:24. ICOM 4+4; DLQ 25/seq42 intacta. ZERO deploy, ZERO flag, ZERO purge, ZERO transmissão externa.
- **Gates finais rodados nesta sessão (prova, não inferência)**: core/backend `mix test --seed 0` = 8248 testes, 0 falhas (a única falha do primeiro run era colisão de offset de cron introduzida pela própria sessão, corrigida em `20c37d14` e re-provada 18/0 nos guardas); vitest admin 405/405. Cabine pix = shared 1831/0, settlement 1003/0, spi 967/0, dict 471/0 (2 seeds); vitest pix-admin 117/117; `mix format --check-formatted` do umbrella pix verde. Builds merchant e pix-admin verdes.
- **Método**: cada task com TDD (RED provado antes do GREEN) + revisão adversarial de spec e qualidade; 3 bloqueantes reais achados pelas revisões e corrigidos na hora (total stale no 01 judicial; re-POST de pacs.004 pós-terminal; envenenamento/versão de snapshot Cadoc1201).

## 2. O que fechou (por commit)

| Commits | Entrega |
|---|---|
| `f8cd8b27`, `527b5e9b`, `97d2701f` | NettingResult.net_amount :decimal + accessor centavos (crash de PRD morto) + validação de integralidade + format |
| `fa7d9074`, `b9625bd7` | MED sem report_details = 422 LOCAL antes de efeito externo (3 superfícies); report_details exige binário; poison put_env(nil) morto |
| `fa52c5e9`, `76398e8d` | Retry do create de infração = sucesso idempotente already_reported + log M-9 + warning de payload divergente |
| `527b5e9b` | FraudMarkerEnumMapper: COERCION->OTHER, UNKNOWN->UNKNOWN (lossy documentado) |
| `8904b6fa`, `d1a6c26a` | pacs.004 no 4xx-terminal atrás de `PIX_RETURN_4XX_TERMINAL_ENABLED` (OFF) + gate de redelivery por status da linha (mata re-POST/devolução dupla) + `return.rejected` ao Core no return_not_sent (fecha hold preso, consumidor provado idempotente) + comentários/runbook honestos (OFF real = PDNG eterno + DLQ silenciosa) |
| `c683046c` | PixInOrphanRecon resolve devolução pacs.004 concluída (caso Wise: linha RTRN fora do set de creditada) + reopen fail-safe + keyset/lotes/timeouts <= teto do pool (candidato dos Postgrex disconnects 2-6/h) |
| `68fe17a9`, `199f45a9`, `20c37d14` | ACEITE judicial 2 níveis flag OFF (`JUDICIAL_TRANSFER_ACCEPT_ENABLED`); fix pós-revisão: total do 01 SEMPRE fresco (provado com TB real no cenário do unblock), invariante espelha código 11, permissão no `diretor`, cron na família /10 |
| `ec88b225` | Grade CCS 8 slots (worker + tabela idempotência + crons parity) + transporte SES pela IAM role (`Swoosh.Adapters.ExAwsAmazonSES` + hackney explícito) |
| `3ee5e8e0`, `e541457c` | AMES-SIMBA: 5 defeitos reais corrigidos (500 em qualquer uso) + validação viva local por API e TELA com screenshots em `docs/reports/screenshots/2026-07-19-ames-simba/` |
| `86614600`, `225843c7` | Remuneração SPI ponta a ponta flag OFF: relatório tesouraria + sweep idempotente + sonda (cabine); stream durável `MONETARIE_PIX_REMUNERATION` + consumidor fail-closed por tag de tesouraria (core); revisão conjunta do fio = zero bloqueante |
| `32da38b8`, `85d3d4b8`, `73a133f6`, `6faff98f` | APIX: taxonomia oficial v2.6 no Cadoc1201 + overrides do operador + ciclo de vida do snapshot blindado (guard de versão, anti-envenenamento, supersede, mês-zero permitido) + projeção abril no mon_core LOCAL + batimento refeito |
| `9f28d256` | Natureza da ação judicial POPULADA da tabela oficial CNJ (layout SISBAJUD v1.11): 01 Cível, 02 Criminal, 03 Trabalhista, 04 Fiscal, 05 Alimentícia; D4 resolvida |
| `58e3c1f6` | Webhook test entrega SÓ ao alvo (era broadcast cross-tenant; 4 call sites; docs pt/en/es) + v2 dict 202-mascarado vira 422 + alreadyReported propagado ao parceiro |
| `6e041e7a`, `4a83f904`, `86c3ac49` | merchant delete-key (2 telas, valor+encode) + spec atendimento (date-rot provado, relógio congelado) + fraud marker form do pix-admin (fim do default APPLICATION=422) |
| `c3094a0c`, `6eeb9791` | Plano mestre + ADENDO + pacote + estado canônico |

Fora do repo: `diversos/` (13 itens com chaves de PRD) movido para `/Users/luizpenha/monetarie-diversos-sensivel/` (chmod 700); zero referência de código ao caminho (provado por grep).

## 3. RETRATAÇÃO APIX (ler antes de falar de retificação com qualquer pessoa)

A instrução oficial de preenchimento APIX001 v2.6 do BCB (baixada e citada 2x por agentes independentes, citações literais nos moduledocs do `Cadoc1201.Aggregator` e no relatório) prova: grupo Transacoes do doc 1201 cobre SOMENTE liquidação FORA do SPI (código 5 = Liquidante de participantes indiretos, privativo; 6 = clientes próprios; 7 = rejeitadas por fraude; transações INICIADAS apenas) e QtdConsultas = consultas resolvidas na cópia LOCAL do DICT sem consultar o DICT. Logo: **o arquivo do legado de abril estava CORRETO nos baldes** (0 no 5; 5/R$804.000,00 no 6), a tese "legado subnotificou" caiu nos baldes e ficou indeterminada nas consultas; o defeito de taxonomia era NOSSO e está corrigido. **Veredito: NÃO RETIFICAR** (única célula sem verificação possível: origem da receita fonte 1 = 586,03). Relatório canônico: `docs/reports/2026-07-19-apix-abril-batimento-semantica-oficial.md` (o relatório da madrugada tem ERRATA no topo). O XML v2 local coincide com o legado ao centavo; o v1 foi renomeado `NAOTRANSMITIR`.

## 4. PRÓXIMO PASSO ÚNICO: executar `docs/operator/2026-07-19-pacote-acoes-prd-ok-unico.md` com o dono

O pacote tem 12 seções, cada uma com comando e rollback. Ordem sugerida de execução na próxima sessão (cada degrau com OK do dono no momento):
1. ~~Push~~ (FEITO no fecho desta sessão com autorização).
2. **Deploy HML** (build arm64 + tag imutável) -> validação viva -> **Deploy PRD** (retag por digest): serviços core-api, pix-api, core-admin-ui, core-banking-ui, core-merchant-ui, pix-admin-ui. **Migrations via rpc ANTES do swap**: core `20260719103000` + `20260719110000` + `20260719130000`; pix `20260719130000` + `20260719140000` (todas aditivas, migrate() da imagem nova sera no-op).
3. **Pré-condição CADOC** antes de qualquer generate/resend 1201: varrer `cadoc1201_records` com `metadata->>'aggregation_version' IS DISTINCT FROM '3'` nos 2 ambientes (SQL completo no pacote §2).
4. **Pós-deploy pix**: `bin/monetarie_pix rpc "SpiService.Workers.PixInOrphanReconciliation.run_reconciliation(lookback_hours: 72)"` e sonda do E2E da Wise (esperado `resolved / return_completed`).
5. **Flips** (decisão por flag, pré-condições no pacote §3): SPB_AUTO_RETURN (pronto, pós-segunda); PIX_RETURN_4XX_TERMINAL (recomendado no deploy); EMAIL_TRANSPORT=ses (ANTES: verificar domínio no SES sa-east-1 + ses:SendRawEmail na task role + definir CCS_NOTIFICATION_EMAILS); JUDICIAL_TRANSFER_ACCEPT (HML primeiro: provar reapresentação do registro 07); SPI_REMUNERATION_SWEEP (core novo bootado ANTES + tag `spi_remuneration` nas 2 tabelas de tesouraria + relatório validado em HML).
6. Demais: G3 do lote (janela HML própria), purge DLQ (seq 41/42 NUNCA redespachar), portal opção A + takedown (rebuild do dist VitePress primeiro: a doc fonte de webhooks mudou), ECR lifecycle, drift Terraform (runbook, NUNCA apply), rotação das chaves do antigo diversos/.

## 5. Follow-ups menores mapeados (não bloqueiam nada; ordem livre)

- Formatter: Elixir local 1.19.5 diverge do canônico do repo (1.18); 6 arquivos do core da sessão só podem ser confirmados/formatados no toolchain do container antes de mexer neles de novo (lista no log do gate; a suíte compila e passa igual).
- Runbook do flip 4xx: anotar que 4xx ambíguos (404 de propagação, 409) terminalizam também com a flag ON (mesma exposição já aceita para pacs.008 desde o B8/F5; alerta crítico cobre).
- Sonda cross-sistema da remuneração no kit: linhas `pix_remuneration_sweeps` em `processing` com idade > 2h no core.
- `FraudMarkerDetailView.vue:66` tem colorista morto para 'APPLICATION' (cosmético).
- `alreadyReported` não documentado campo a campo no portal do parceiro (a doc de infrações não descreve shape; opcional).
- Auth notifier do core (password reset etc.) é stub que só loga (pré-existente, mapeado; ligar ao Swoosh é frente própria).
- Emissão ATIVA de 5302 pós-decisão do aceite judicial: hoje a decisão sai na reapresentação do registro 07 (validar em HML); se o BCB não reapresentar, construir gerador ativo vira P1.
- AMES-SIMBA deliver real ao STA em HML (receita em `docs/reports/2026-07-19-ames-simba-validacao.md`).
- Wave 2 restante na ordem já decidida pelo dono: relatórios PIX/volumetria -> tarifa SLB -> R13 STA (usuários/perfil).

## 6. Segunda 21/07 (inalterado e inegociável)

Cliente roda sequências PIX/TED. O DONO é a única interface; suporte por acionamento, perna a perna, reconciliação antes/depois com `docs/operator/2026-07-18-vigia-netting-0030utc-e-kit-sondas-prd.md`. **NUNCA deployar/reiniciar pix/spb durante a operação.** Se houver deploy antes, janela própria com validação completa. Primeira transação LIQUIDADA real habilita o degrau final da infração/MED sobre raiz liquidada (abrir = decisão do dono na hora).

## 7. Receitas rápidas (reuso)

- rpc PRD/HML + kit de sondas: `docs/operator/2026-07-18-vigia-netting-0030utc-e-kit-sondas-prd.md` (awsmon + base64 + fatiar output; canal SSM trunca ~8KB).
- Túnel SSM HML: port-forward 18080 via `i-02ce3a3b6b3ad0d37` (expira ~30min). EC2 NATS PRD: `i-0c9cd61aa15983b89`.
- Partner key de campanha HML: `cli_cea592a4f005d96561af1a3e` (cliente 25362, conta 10024480); webhook do dono `webhook.site/793dba8d...`.
- Restore AutBank: container `monetarie-bak-mssql` (docker start se parado); sqlcmd `-U sa -P "$MSSQL_SA_PASSWORD"` (env interno).
- Projeção APIX local: `scripts/apix_abril/project_restore_to_core.py` (idempotente, `--cleanup` remove TUDO incluindo entity/snapshot/trackers); geração: `scripts/apix_abril/generate_apix_local.exs`.
- TB de teste local para integração judicial: container `avivpay-tigerbeetle-test` em `127.0.0.1:3002` (`TB_ADDRESSES=127.0.0.1:3002 mix test ... --include sisbajud_integration`).
- Gotcha 15432: conferir `lsof -i :15432` antes de suítes do core (OrbStack ok; túnel SSM não).

## 8. Regras invioláveis (reforçadas pelo dono em 19/07)

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; deploy PRD e ações externas só com OK explícito do dono naquele momento (o push desta sessão FOI autorizado no fecho); relatório do cliente nunca expõe defeito interno; docs pt-br sem travessão de IA; commits locais escopados por `git add` de arquivos nomeados; NUNCA git stash/reset em árvore compartilhada com trilhas paralelas.
