# Handoff 2026-07-18 (noite 2) — Partner API 100% validada + 6 fixes em PRD + TODAS as pendências

Retomada da sessao que fechou a validacao viva 100% da Partner API em HML, corrigiu 6 defeitos, deployou os fixes em PRODUCAO e consolidou o estado. `origin/main = 5813a393`. Estado canonico completo no topo do `CLAUDE.md`; memorias `monetarie-validacao-100-partner-api-0718`, `monetarie-varredura-pos-wave1-0718`, `monetarie-wave1-executada-0718`; Serena `monetarie/live-state-2026-07-18`.

## O que foi feito nesta sessao (resumo)

1. **Varredura empirica de PRD pos-Wave1** (reconcile=0, COSIF 32/32 div=0, conta liquidacao exata, ICOM 4+4, DLQ 25/seq42, netting 0). O-2 (EVP tela IB) fechado (era o bug B1 de listagem; EVP viva do Gabriel funciona). Gate `SPB_CCS_SCHEDULER_ENABLED` (CCS legado da cabine desarmado). F4 tasks 11a-11e (docs das rotas F1, gate de paridade VERDE). Faxina de 26 worktrees + 20 branches.
2. **Validacao viva 100% da Partner API** com API key de parceiro NOVA em HML (nao a do cliente) + webhook do dono (webhook.site `793dba8d`, HMAC MATCH): **66/66 rotas, 68/68 conformes, zero divergencia.** Money-path real ao BACEN (PIX chave lookup-to-pay + TED Cecresa; holds devolvidos ao centavo).
3. **6 defeitos achados na validacao viva, corrigidos TDD e DEPLOYADOS EM PRD** (core-api:71, pix-api:64): exclusao de chave pela tela IB (id vs valor), partes (pagador+recebedor) nos webhooks `pix.payout.*` e `ted.*`, `situationType` da infracao em 2 elos (Core + cabine), secret do webhook na criacao.
4. **Deploy PRD verificado**: guard digest MATCH (core `sha256:707ae34e`, pix `sha256:89c51b55` — EXATAS as validadas em HML), rollbacks :70/:63, ICOM CPM4+CSM4 reassumido, TGs healthy, reconcile PRD=0, sidecar mtls preservado.
5. **Entregas**: PDF do cliente `~/Desktop/Monetarie-Validacao-Partner-API-2026-07-18.pdf` (gerador versionado `scripts/partner_validation_report/gen_pdf_v2.py`, ja com o fix de sobreposicao de tabela); relatorio interno `docs/reports/2026-07-18-validacao-viva-100-partner-api-key-nova.md`; docs-site escopos F1 (pt/en/es) build verde.

## Higiene do ambiente de teste HML (para reuso)

- Partner key de campanha: `client_id cli_cea592a4f005d96561af1a3e` (parceiro `380b4be3-aff9-4fad-aa00-3c1a92a89504`, documento 39053344705). Secret exibido uma vez (guardado no scratchpad local gitignorado; se perdido, rotacionar). ATIVA.
- Cliente 25362 (CPF 15350946056), conta 10024480 custeada R$10 via `Wallet.deposit` de teste; contas adicionais 10024512 (ENCERRADA) e 10024544. Chaves EVP de teste criadas e excluidas.
- Webhooks apontando ao token do dono (`793dba8d`) + espelho legivel; Api-Key do inbox do dono `36852785-8c2f-4a50-b339-e7c15605e0ff` (le entregas em `https://webhook.site/token/793dba8d.../requests`).
- **Nada disso em PRODUCAO.**

---

## PENDENCIAS (todas, por prioridade)

### P0 — Migracao do endpoint de infracao DICT do BACEN (unico item que impede 100% ponta a ponta)

- **Sintoma**: apos os fixes 3+5, abrir infracao (`POST /pix/infractions`) CHEGA ao BACEN, que responde **410 Gone: "This resource is deprecated since 2026-04-13"** para `POST /infraction-reports/` (`pix/backend/apps/shared/lib/shared/bacen/dict_client.ex:699`). Nosso lado esta correto (o `situationType` flui); o endpoint que a cabine chama foi descontinuado pelo BACEN.
- **Insumo fornecido pelo dono**: DICT oficial `https://www.bcb.gov.br/content/estabilidadefinanceira/pix/API-DICT.html` (+ XSDs em `/Users/luizpenha/cecresa/md/XSDDOCV512` e `mwbank/{md,LegadoPIX}`).
- **Escopo**: mapear o path/schema vigente de infracao/marcador de fraude (MED 2.0) na API-DICT atual, migrar `dict_client.ex` (create/get/list/acknowledge/close/cancel de infracao) e os builders XML/XSD; revalidar vivo em HML criando infracao real sobre uma transacao liquidada. Sessao dedicada. Listar/consultar/cancelar/defesa de infracao ja funcionam (recusa de protecao correta em id inexistente); MED open falha por `FundsRecoveryInvalid` (verdade BACEN: sem liquidacao a recuperar numa saida rejeitada, nao e defeito).

### P1 — Operacao e vigias

- **Vigia do netting 00:30 UTC de 19/07** (21:30 BRT 18/07): primeiro ciclo PENDING pos-DDL `20260718100000`. Receita e kit de sondas prontos em `docs/operator/2026-07-18-vigia-netting-0030utc-e-kit-sondas-prd.md`. Sucesso = 1 linha PENDING + DLQ inalterada (seq 42). Falha = ler a msg nova da DLQ ANTES de agir; seq 41/42 NUNCA redespachar.
- **Segunda 21/07: cliente roda sequencias PIX/TED.** O DONO e a UNICA interface com o cliente; suporte tecnico sob acionamento, perna a perna, reconciliacao antes/depois (kit de sondas no doc acima). **NUNCA deployar/reiniciar pix/spb durante a operacao ao vivo** (troca de lideranca ICOM perde mensagem do BACEN).
- **Proximo auto-return organico** (rota do espelho simetrico) e **snapshot COSIF diario** (card ~R$3,2M) sob observacao.

### P2 — Follow-ups tecnicos abertos (achados nesta sessao)

- **banking-ui NAO deployado em PRD** (delta cosmetico do delete-key: `usePix.ts` encodeURIComponent + `PixKeysView.vue` manda `.key`). O controller do core-api ja resolve id->valor, entao a tela em PRD funciona; e belt-and-suspenders. Deployar num proximo ciclo de UI, sem urgencia.
- **PixInOrphanRecon** flagra a entrada da Wise (E5958811120260717205916346PG2TJD, R$52,74) a cada ciclo em PRD: a entrada foi DEVOLVIDA (pacs.004 ACSP) e o reconciliador nao conhece o trilho do espelho de devolucao. Ensina-lo a auto-resolver o orfao quando a pacs.004 concluiu. Ruido conhecido, nao incidente.
- **Postgrex disconnects** 2-6/h o dia inteiro na cabine pix PRD (pre-existente, atravessa :61/:62/:63/:64): identificar o `Task.Supervised` periodico que segura conexao >15s. Se a frequencia subir muito, investigar antes.
- **DLQ PRD purge** (25 msgs triadas, historico) aguarda decisao do dono; seq 41/42 NUNCA redespachar (duplicaria o espelho Wise).
- **G3 do lote PIX** (flag `PIX_OUTBOUND_BATCH_ENABLED` OFF): runbook `docs/operator/2026-07-18-runbook-f5-lote-pix-deploy-janela.md` — rajada 12 = 2 POSTs vivos + rejeicao de envelope FORCADA (provar se o admi.002 referencia BizMsgIdr ou PI-ResourceId, M2 da revisao) + p95 por posicao. Ligar a flag = dono, bloqueado ao G3.

### P3 — Higiene de repo/infra (do full audit de 18/07)

- **Mover `diversos/` para fora do repo** (chaves privadas de PRD no disco; gitignorado, mas tratar como exposto a tooling local).
- **ECR sem lifecycle policy** (~600 imagens untagged nos 3 repos principais); centenas de task-defs ACTIVE antigas.
- **Terraform HML: DRIFT PERIGOSO** (plan = 26 add/15 change/9 destroy; NATS/TigerBeetle/OpenVPN de HML seriam RECRIADOS). REGRA: NUNCA `apply` sem reconciliacao previa do state.
- **Indice `batch_message_id` em PRD** e a variante anterior da migration (btree cheio, nome `_index`); HML tem a forma final (parcial `_idx`). Funcionalmente indexado; convergir = DDL manual ou aceitar o drift documentado (LOW).
- **CLAUDE.md 126KB**: blocos "Estado anterior" antigos sao candidatos a migrar para docs/ numa higiene futura.

### P4 — Mandato do dono (sessao dedicada)

- **Batimento `APIX042026.xml`** (Desktop; APIX001 abril/2026 do legado) vs restore AutBank ao valor + provar geracao 100% nossa. Gate de tudo APIX. Retomar por `docs/handoff/2026-07-18-gap-analysis-6-docs-cliente-handoff.md`.

### P5 — Decisoes do dono pendentes (NAO inferir, PERGUNTAR na hora)

- SMTP vs SES + destinatarios (e-mail hoje fail-safe Logger sem SMTP).
- Publicacao do portal do parceiro (proposta `docs/reports/2026-07-18-proposta-publicacao-portal-parceiro.md`; opcao A docs-portal + takedown docs-h).
- `SPB_AUTO_RETURN_ENABLED` (OFF hoje).
- Incluir `pacs.004` no 4xx-terminal (H1, hoje fora).
- Tabela oficial da natureza da acao judicial.
- Ligar o lote PIX (bloqueado ao G3).

### P6 — Desenhos novos mapeados

- ACEITE do operador na transferencia judicial (money-path; doc BACENJUD exige; hoje automatica).
- Grade nominal de e-mails CCS.
- Elo AMES -> SIMBA.
- **Wave 2** (via `docs/handoff/2026-07-18-gap-analysis-6-docs-cliente-handoff.md`): remuneracao SPI, SLB, PIX in/out, volumetria, R13 STA.

---

## Regras inegociaveis (reforcadas)

- BACEN e a verdade; provar empiricamente antes de afirmar; em producao NAO existe teste.
- Validacao de tela/fluxo NUNCA com fixture do caminho feliz — so sobre dado real.
- NUNCA deployar/reiniciar pix/spb durante o dono operando money-path ao vivo.
- Migrations ANTES do swap; nunca LIKE full-scan em banco vivo; terraform HML NUNCA `apply`.
- Push/deploy PRD so com autorizacao explicita do dono naquele momento (nesta sessao o dono autorizou push + main equalizada + build + deploy PRD dos 6 fixes).
- Docs sem travessao de IA, pt-br; relatorio do cliente nunca expoe defeito interno (4xx so como recusa de protecao).

## Receita rpc PRD/HML (read-only, provada)

```bash
awsmon() { env -u AWS_ACCESS_KEY_ID -u AWS_SECRET_ACCESS_KEY -u AWS_SESSION_TOKEN AWS_PROFILE=vulcimonetarie AWS_REGION=sa-east-1 aws "$@"; }
CORE_TASK=$(awsmon ecs list-tasks --cluster monetarie-greenfield-prod --service-name core-api --query 'taskArns[0]' --output text)
# escreve o .exs, base64 e roda (base64 mata o escaping; SSM corta output longo, fatiar):
B64=$(base64 -i probe.exs | tr -d '\n')
awsmon ecs execute-command --cluster monetarie-greenfield-prod --task $CORE_TASK --container core-api --interactive --command "bin/monetarie rpc \"Code.eval_string(Base.decode64!(~s|$B64|))\""
```

Tunel SSM para HML (a sessao de port-forward expira ~30min, reabrir quando precisar):
```bash
awsmon ssm start-session --target i-02ce3a3b6b3ad0d37 --document-name AWS-StartPortForwardingSessionToRemoteHost \
  --parameters host="internal-monetarie-internal-homolog-45-2129766573.sa-east-1.elb.amazonaws.com",portNumber="80",localPortNumber="18080"
# depois: curl -H 'Host: coreapi-h.monetarie.internal' http://127.0.0.1:18080/health
```
