# Handoff parcial: frente de paridade LegadoPIX/LegadoSPB + integrações (04/07 noite, EM ANDAMENTO)

Plano-mestre com follow-ups numerados: `docs/plans/2026-07-04-paridade-legado-pix-spb-integracao.md`. Método: subagent-driven (implementador, spec reviewer independente, quality reviewer, fixes TDD vermelho-antes). Branch `feat/spb-cert-selfservice`; NADA desta frente foi pushado nem deployado ainda (o push/deploy do dia anterior parou em `f285c6e5`+flags AVIV).

## Fechadas com ciclo completo (commits em ordem)

| Task | Commits | Entrega resumida |
|---|---|---|
| P1 extrato canônico | `f6163149`+`f3d675d1`+`cfa01743` | Leituras na `messages` (tabela `transactions` aposentada de leitura), ACCC por direção (INBOUND=liquidada, P0 8d1769cc), RTRN visível, settled?/1 público, Decimal no summary, rotas summary destravadas. Fase 2 (escritores) registrada |
| P2 tracking pacs.004 saída | `38cd6885`+`8434f19c` | Linha própria da devolução (RtrId, unique particionado com operation_time determinístico), correlação pacs.002 por OrgnlInstrId (XSD prova obrigatório), evento `return.rejected` com estorno espelhado no Core, supressão do evento errado |
| P3 correlação camt.060 | `67bcc6c6`+`37b169e5` | Echo provado = Rpt/Stmt/Ntfctn Id (32 zeros = não solicitado); tabela camt060_requests; sweep 30min no StuckOutboundChecker; camt.054 com ISPB de config e fim do crash pré-existente |
| P4 alçada no envio manual | `47301a0b`+`feb88230` | SendGate no funil manual (ANS protegido; automático nem alcança o gate), 4-olhos com CAS (prova de concorrência real: 1 dispatch), acumulado dia-UTC, flag `ALCADA_PIPELINE_ENABLED` default OFF |
| P5 heartbeat watchdog | `30b34ffc` | HealthMonitor por idade de heartbeat ETS (chave=pid, beat init/loop/try-after), fim dos kills de long-poll saudável |
| P6 echo pibr.001 | `031bb5ff` | EchoProbeWorker 5min por canal EXPLÍCITO (auto-route mandaria tudo ao CSM), evidência em echo_probes, alimenta o breaker real; `ECHO_PROBE_ENABLED` default OFF |
| S1 predicado financeiro | `935425fe`+`bccd8172` | Domínio real F/N/D provado (1.475 linhas CSV), direção pelo catálogo (D/C; T pela tag TpDeb_Cred), BalanceGroup fonte única (fim da migração de grupo STR→SPB01), validação de domínio no loader |
| S2 DayAutoClose | `d1753c1e`+assert em `fd7c54bb` | STR0016 inbound confirmed como sinal de fechamento; force_close não transmite mais GEN0017 espúria ao BACEN |
| S3 value_tag | `ca28079f` | normalize_tag na carga (4 colunas), [VlrTit]/[VlrLanc]167x etc. destravados, [Null]→nil |
| S4 poison sidecar MQ | `d7c15c1e`+`4f64909e` | JMSXDeliveryCount client-side, quarentena via POST HMAC com commit só após 2xx, decode fail-closed (400), tabela mq_quarantine |
| S5 comandos de operação | `f0163bda`+`a185b1c7` | GEN0003/GEN0012 delegando ao funil canônico (herda alçada/auditoria), hold/release/revert por operação (validate_transition intocável; PendingQueue respeita hold) |
| S6 R-legs 5.11 | `87af1c19` (spec review em andamento) | 49 legs derivados com evidência tripla (CSV Evolution=HML vivo provado, AB_MGI nos backups, routes.json), todos N/N, seed 027 idempotente provado 2x; aplicar em HML: `bin/bacen_gateway eval "BacenGateway.Release.seed_catalog_v511_r_legs()"` |

## Estado em 05/07 madrugada (atualizado)

FECHADAS com ciclo completo (dupla revisão + fixes) desde o parcial acima: S6 (`87af1c19`+`b2c817cc`), P7 baldes DICT (`f390acb2`+`f6caaba1`), P8 alertas (`583743df`+`f2f21a0e`), P9a statistics (`5cf82125`), P9b OTP (`3146808e`+`c8db31a1`+`14c01176` — via de reset EXPIRED fechada no re-review), P10 conciliação 3 vias (`6485c354`), P11 honestidades (`59f06cf1`, em re-review), I1 SpbStatusReconciliation (`b7af34ea`+`0045816f` — duplo-fee de tarifa eliminado, provado no re-review), I2 CabinStatusLookup fail-closed (`5d55f8bd`), I3 dedup determinístico (`8b631ff2`), I4 remove spi.status.rejected (`d0cc693f`), S7 design APROVADO pelo dono (`be4632ef`), S7a consolidação contábil (`b29f7ea2` — cálculo intocado provado). Workflow adversarial de revisão em `wf_9b6a76a7-dc4` pegou o duplo-fee (I1) e o lockout furável (P9b) que os testes dos implementadores não pegaram.

## Em andamento

- S7b (fail-fast contábil, 7 sites): código feito e compilando, terminando testes.
- P11: re-review de confirmação.

## Fila restante

S7c (consumer espelho spb_cosif_mirror no Core, flag cosif_to_core), S7d (seeds do Roteiro SPB + P11-FU1 seed COSIF cabine PIX + validação viva HML), S7e (follow-ups); deploy HML do pacote completo + validação T1-T5.

## Fatos vivos coletados nesta frente (não re-derivar)

- Aurora HML `message_type_config`: 1.471 linhas, E=382/R=1.089; SCG0005R1/STR0045R3/LPI0007R1 AUSENTES (provado via rpc no spb-api). 65 legs BASE também ausentes (S6-FU1).
- Baselines de teste: spi_service 618/0 pós-P6; settlement 3 falhas pré-existentes vivas (payload/sessions; o número 17 dos handoffs anteriores era de ambiente com mais drift); shared 15; dict 1; SPB suite ~75-82 com 1 flaky de ordem (CoreEventConsumerTransferRequest); core 99 falhas determinísticas com seed 0 (777-790 com seed aleatório = flakiness de ordenação pré-existente).
- Decisões do dono gravadas no topo do plano (contabilidade separada-mas-integrada; netting mantido; verify_dict ON; SOS/PAG-STR depois).

## Deploy desta frente (quando a fila fechar)

1. Migrations novas: pix `20260704150000` (unique return_id), `20260704170000` (camt060_requests), `20260704190000` (alcada_held), `20260704230000` (echo_probes); spb `20260704120000` (mq_quarantine), `20260704150000` (hold columns). Aplicar via rpc (gotcha EOF cosmético; conferir schema_migrations).
2. Seed S6 em HML (comando acima) + conferir contagens (R deve ir de 1.089 para 1.138).
3. Sidecar MQ: rebuild da imagem (tag mutável homolog-latest; conferir por digest).
4. Flags novas todas OFF por default (alçada, echo); ligar é decisão operacional.
5. Validação T1-T5 + prova viva da correlação camt.060 (P3) e do tracking pacs.004 (P2) quando o BACEN homolog cooperar; envio real segue bloqueado pelo HSM RTM.


## ACHADO CRÍTICO P11 (registrar como pré-condição de deploy)

A contabilidade da cabine PIX (`accounting.ex`) e as contas COSIF default de settlement (`1.1.2.10.01.10.001` / `4.9.8.10.01.10.002`) e as próprias tabelas contábeis NÃO têm seed nem migração no repo — existem só no dump de schema de produção. Antes do P11 isso ficava mascarado pelo `_ -> :ok` silencioso; agora o fail-fast do P11 o expõe (Logger.error + alerta accounting_failure + status "error"). CONFERIDO VIVO no Aurora HML (05/07 via rpc pix-api): as 4 tabelas (journal_entries/chart_of_accounts/accounting_events/cost_centers em monetarie_settlement) EXISTEM, mas `chart_of_accounts` tem 0 contas -> a contabilidade da cabine PIX esta CEGA em HML. PRÉ-CONDIÇÃO de deploy: criar seed do plano COSIF da cabine PIX (as ~44 contas + eventos) antes de esperar contabilidade viva; sem isso o P11 vai emitir accounting_failure em todo evento contabil (comportamento correto do fail-fast, mas ruidoso). Simetria com o S7 do SPB (trilha standalone). O fluxo de dinheiro NÃO é derrubado (a falha é auditada, a operação PIX segue), então é seguro deployar, mas a contabilidade da cabine fica cega até o seed.
