# Port coreproviders para Monetarie - 2026-06-24

## Escopo desta rodada

Fonte consultada: `/Users/luizpenha/coreproviders/*`, com foco nos frontends
`frontends/banking`, `frontends/merchant`, `frontends/admin` e no handoff CADOC
1201/APIX001 do coreproviders.

Regra operacional adotada: preservar layout/fluxo/dashboard Monetarie quando ele ja
era superior, portar funcionalidades e contratos novos sem mover responsabilidades
das cabines. Assinatura/entrega PIX, STA e SPB continuam nas cabines.

## Entregue por frente

| Frente | Port realizado | Arquivos/areas principais | Estado |
| --- | --- | --- | --- |
| ib-front | Operacoes em transito, transacoes, contas/extrato, documentos, QR Codes/Open Finance, compliance/MED/infractions, webhooks/API keys, transferencias internas, cartoes operacionais, desenvolvimento e envio PIX atualizado pelo fluxo coreproviders | `core/apps/banking/src/router/index.ts`, `AuthenticatedLayout.vue`, `views/{in-transit,transactions,accounts,documents,initiation,between-accounts,compliance,infractions,webhooks,cards,development,pix}`, `components/InTransitCard.vue`, `utils/pixSendSession.ts`, `composables/{useInTransit,useBankAccounts,useDocuments,useWebhooks,useBalances,usePix}`, shims `http/api.ts`, `types.ts`, shared utils | `vue-tsc` e `build` OK |
| merchant-front | PIX granular, envio PIX com `keyType`/DICT/QR, transferencias, pagamentos, transacoes/detalhe, extrato, comprovantes, seguranca/acessos, API keys/webhooks, compliance/MED, infractions/defesa, settings 2FA/acessibilidade, em transito e fee splits recebidos | `core/apps/merchant/src/router/index.ts`, `MerchantLayout.vue`, `views/{pix,transfer,payments,transactions,statement,receipts,security,api-keys,compliance,infractions,settings,in-transit,fee-splits}`, `composables/{usePix,useTransfer,useReceiptDownloader,useInTransit,useFeeSplitReceived}`, `http/api.ts` | `vue-tsc` e `build` OK; adicionada dep `qrcode.vue` |
| coreadmin-front | CADOC 1201/APIX001 completo no fluxo regulatorio existente, mais paginas admin/operacionais portadas do coreproviders sem substituir dashboard/layout Monetarie | Router/menu admin, CADOC backend/front, clients, audit logs, fees/overrides, limits, analytics, regulatory dashboard/STA, compliance reports/config/quarantine/ranking, refunds, PIX OUT/DICT/MGMT/QR Codes, webhook deliveries, onboarding new, treasury settlement/reconciliation/caixa/fee report, admin users, security API keys, settings PIX | `vue-tsc` e `build` OK; backend CADOC compila; varias telas novas ainda dependem de endpoints locais listados abaixo |

## CADOC 1201 / APIX001

Portado do coreproviders:

- Schema `cadoc1201_records` e migration de criacao.
- Agregador mensal Pix/TEF/DICT adaptado para Monetarie: `transactions.amount`
  e `fee_amount` sao base units/subcentavos e viram centavos no XML.
- Serializer XML APIX001 v2.6 e XSD local `APIX001_2-6.xsd`.
- Geracao via `GenerateReportJob` com `report_type = CADOC_1201`.
- Exposicao no admin CADOC existente, preservando layout Monetarie: categoria Pix,
  geracao, listagem, XML, validacao, exclusao antes do envio e envio via STA.
- Escopo por entidade na API admin: listagem/leitura/validacao/exclusao/reenvio de
  CADOC 1201 so retornam arquivos da entidade corrente.
- Worker regulatorio preserva metadata existente ao gravar conteudo gerado.
- Mensagem operacional de ausencia de movimento: `Nao ha movimento no periodo MM/AAAA.`
- Roteamento STA explicito: `CADOC_1201 -> APIX001`.
- Unicidade de `regulatory_files` por entidade para permitir mesmo mes em entidades
  distintas sem abrir duplicidade para arquivos globais.

## PIX envio / DICT / QR

Portado e alinhado com o ajuste mais recente do coreproviders
(`9e37d42d fix(pix): forward keyType to send, truncate reservation used_at, map DICT 400 restriction`):

- `ib-front`: fluxo de envio PIX atualizado para nao carregar dados sensiveis em
  query string; estado de confirmacao fica em `sessionStorage` com fingerprint de
  idempotencia.
- `ib-front`: envio passa a preservar `keyType`, `reservationId`, `endToEndId`,
  `clientRequestId`, `initiationType` e `txId` quando vier de DICT/QR.
- `ib-front`: lookup/envio com MFA, selecao explicita de tipo de chave quando
  ambigua, e estado "em processamento" para retorno aceito/in-transit antes da
  liquidacao final.
- `merchant-front`: `pixApi` legado foi alinhado para usar
  `/accounts/:account_id/pix/send` com idempotencia quando houver conta selecionada,
  e `/pix/dict` para consulta DICT.
- `ib-front` e `merchant-front`: erro DICT de restricao do destinatario passa a ser
  tratado como `[DICT_RESTRITA]`, sem cair no erro generico de indisponibilidade.
- Backend local: criadas rotas top-level/account-scoped usadas pelos fronts
  (`/accounts/:account_id/pix/send`, `/pix/dict`, `/pix/fee-preview`,
  `/accounts/:account_id/in-transit`, chaves PIX, claims DICT, QR Code e favoritos).
- Backend local: envio PIX account-scoped valida ownership da conta autenticada,
  preserva idempotencia, encaminha `keyType`, `reservationId`, `endToEndId`,
  `txId`, `initiationType` e `recipientIspb`, e retorna estrutura compativel para
  estados `completed`, `processing/accepted` e `failed`.
- Backend local: payload outbound PIX normalizado passou a carregar `tx_id`, para
  nao perder o identificador vindo de QR dinamico/estatico.

## Dependencias abertas de backend/cabines

| Area | Front/fluxo | Dependencia |
| --- | --- | --- |
| Merchant fee splits | `/dashboard/fee-splits` | Backend Monetarie ainda precisa expor/confirmar `/fee-splits/received` e `/fee-splits/has-received`. |
| Admin account ranking | `/dashboard/compliance/account-ranking` | Front usa `/admin/analytics/compliance/account-ranking`; nao encontrei rota local equivalente. |
| Admin infraction config | `/dashboard/compliance/config` | Front usa `/admin/infraction-configs/*`; backend local tem MED config, mas nao encontrei infraction-configs. |
| Admin quarantine PIX | `/dashboard/compliance/quarantine*` | Front usa `/admin/quarantine/*`; confirmar/implementar backend local. |
| Admin PIX OUT queue | `/dashboard/pix-out-queue*` | Front usa `/admin/pix-out-queue/*`; depende da cabine PIX/OnZ e endpoints locais equivalentes. |
| Admin QR Codes | `/dashboard/qr-codes*` | Front usa `/admin/qr-codes/*`; existe schema QR local, mas endpoint admin cross-client precisa ser confirmado/implementado. |
| Admin MED integration tokens | `/dashboard/integrations/med-tokens` | Front usa `/admin/med-integration-tokens`; nao encontrei rota local. |
| Admin fee overrides | `/dashboard/fees/override` | Front usa `/fee-overrides`; confirmar se o backend local expoe override operacional nesse path/contrato. |
| Admin webhook deliveries | `/dashboard/webhooks/deliveries` | Backend local expoe entregas por webhook (`/webhooks/:id/deliveries`) e replay, mas nao listagem global `GET /webhooks/deliveries`. |
| CADOC 1201 STA real | Admin CADOC | Core enfileira `APIX001` e preserva metadata; falta validar ponta a ponta com cabine STA/SPB em ambiente integrado. |
| CADOC 1201 dados Pix | Agregacao mensal | Depende de `transactions.entity_id`, `dict_lookup_events.entity_id`, status/liquidacao e timestamps corretos no core/cabine Pix. |
| PIX DICT reservation reuse | `ib-front` e `merchant-front` envio PIX | Coreproviders cria/reusa reserva DICT e trunca `used_at` em segundos. Backend local ainda nao tem fluxo/tabela equivalente de reserva DICT; o contrato preserva `reservationId` e `endToEndId`, mas a reutilizacao real precisa ser implementada/alinhada com cabine PIX. |
| PIX envio ponta a ponta | `/accounts/:account_id/pix/send` | Validar em ambiente integrado com cabine PIX se `keyType`, `endToEndId`, `txId`, `initiationType`, `recipientIspb` e `clientRequestId` estao sendo consumidos no PACS.008/QRCode/DICT conforme esperado. |
| PIX DICT restriction provider | `/pix/dict` e envio por chave | Fronts agora exibem `[DICT_RESTRITA]`; falta validar que backend/cabine mantem o mapeamento consistente para retorno OnZ 400/restricao do destinatario, sem mascarar como indisponibilidade. |

## Handoff RBAC admin

Escopo: rotas novas ou reexpostas no port do coreproviders que nao receberam
`requiredRbac` granular especifico, ou receberam uma feature ampla provisoria porque
o backend/seed local ainda nao tem feature de menor granularidade.

| Menu / rota | Gate atual | Feature granular sugerida | Observacao |
| --- | --- | --- | --- |
| `/dashboard/clients`, `/dashboard/clients/:id` | `requiredPermission: member_view` | `cooperados.lista.view` ou nova `clientes.lista.view` | `cooperados.lista` existe no seed; confirmar se o dominio "clients" deve reaproveitar cooperados ou ganhar modulo proprio. |
| `/dashboard/accounts/:id/statement` | `requiredPermission: account_view` | `contas.extratos.view` | `contas.extratos` existe no seed; rota ficou com gate legado para nao quebrar permissao antiga. |
| `/dashboard/onboarding/new` | `requiredPermission: onboarding_view` | Criar `onboarding.cadastro.create` / `onboarding.fila.view` | Nao encontrei feature `onboarding.*` no seed RBAC local. |
| `/dashboard/webhooks/deliveries` | `requiredPermission: admin` | `integracoes.webhooks.view` ou nova `integracoes.webhook_entregas.view` | `integracoes.webhooks` existe, mas a tela e endpoint global de entregas precisam definicao de dominio e backend. |
| `/dashboard/regulatory/dashboard`, `/dashboard/regulatory/sta` | `compliance.cadoc.view` | `compliance.regulatorio.view` e `integracoes.sta.configure/view` | Usei CADOC como gate amplo porque STA/regulatorio geral nao existem no seed local. |
| `/dashboard/compliance/account-ranking`, `/reports`, `/content`, `/config`, `/dict-bucket`, `/dict-monitoring` | `compliance.pldft.view` | `compliance.ranking.view`, `compliance.relatorios.view`, `compliance.conteudo.view`, `compliance.configuracoes.view`, `operacoes.dict.view` | `compliance.pldft` existe e e o melhor gate amplo local; separar depois para perfis operacionais. |
| `/dashboard/compliance/quarantine*`, `/refunds*`, `/pix-out-queue*`, `/pix/consulta-mgmt`, `/qr-codes*`, `/integrations/med-tokens` | `operacoes.pix.view` | `operacoes.pix_quarentena.view`, `operacoes.pix_devolucoes.view`, `operacoes.pix_out.view`, `operacoes.pix_mgmt.view`, `operacoes.qrcodes.view`, `integracoes.med_tokens.view` | `operacoes.pix` existe; granularidade por fluxo PIX ainda nao existe no seed local. |
| `/dashboard/treasury/settlement`, `/reconciliation`, `/caixa-institucional` | `tesouraria.movimentacoes.view` | `tesouraria.liquidacao.view`, `tesouraria.reconciliacao.view`, `tesouraria.caixa_institucional.view` | `tesouraria.movimentacoes` existe; subfeatures de tesouraria nao existem no seed. |
| `/dashboard/treasury/relatorio-taxas`, `/dashboard/fees*` | `conta_corrente.tarifas.view` | Manter ou separar `conta_corrente.tarifas.override/view/export` | Feature existe, mas overrides e relatorio podem exigir flags/acoes especificas. |
| `/dashboard/security/api-keys`, `/dashboard/settings/pix` | `admin.seguranca.view` / `configuracoes.parametros.view` | `admin.api_keys.view` e `configuracoes.pix.view` | Usei gates amplos existentes para nao inventar feature sem seed/backend. |

## Validacao executada

- `mix format` nos arquivos Elixir alterados.
- `mix compile` em `core/backend`: passou.
- `mix compile --warnings-as-errors`: bloqueado por warnings preexistentes fora deste corte.
- `mix test test/monetarie/use_cases/regulatory/sta_delivery_pcodes_test.exs`: bloqueado antes dos testes por `FATAL 28P01 password authentication failed for user "monetarie"` no Postgres local.
- `pnpm exec vue-tsc --noEmit` em `core/apps/admin`, `core/apps/banking`, `core/apps/merchant`: passou.
- `pnpm build` em `core/apps/admin`, `core/apps/banking`, `core/apps/merchant`: passou com warnings normais de chunk grande.
- Apos o ajuste de PIX envio/DICT: `mix compile` em `core/backend`, `pnpm build`
  em `core/apps/banking`, `pnpm build` em `core/apps/merchant` e
  `git diff --check` passaram.
- `git diff --check`: passou apos o handoff final.

## Proximos cortes recomendados

1. Corrigir as dependencias de backend listadas acima antes de considerar as telas novas como E2E prontas.
2. Rodar migracoes e teste real CADOC 1201 por entidade com mes sem movimento e mes com movimento.
3. Validar entrega `APIX001` com STA/SPB cabin, sem mover assinatura para o core.
4. Fechar RBAC granular no seed/backend e trocar os gates amplos/legados do router/menu.
5. Auditar arquivos paralelos em PIX/SPB/infra antes de commit para evitar overlap com sessoes Claude.
6. Depois da integracao, adicionar testes com banco para CADOC 1201 e testes de contrato para endpoints admin novos.
7. Implementar ou alinhar no backend/cabine PIX o ciclo completo de reserva DICT do
   coreproviders antes de considerar `reservationId` validado ponta a ponta.
