# Validacao local PIX Monetarie x mwbank - 2026-06-18

## Escopo executado

- Escopo considerado: `/Users/luizpenha/monetarie/pix` e `/Users/luizpenha/mwbank/pix`.
- `open-pix` ficou fora do escopo.
- `settlement_service` foi preservado na Monetarie por ser a integracao com o core proprio.
- Comparativo com mwbank foi usado como referencia funcional e de lacunas; nao houve copia cega da arquitetura mwbank.
- Validacao core real externa nao foi declarada, porque a rodada local nao recebeu transacoes/eventos reais do core. O que foi validado localmente foi a superficie Monetarie e os caminhos internos disponiveis.

## Estado local final

- Compose: `.local/docker-compose.pix-validation.yml`
- Projeto Compose: `monetarie-pix-validation`
- Admin local: `http://localhost:18080`
- APIs locais:
  - settlement/admin gateway: `http://localhost:14003`
  - dict: `http://localhost:14001`
  - spi: `http://localhost:14002`
- Containers finais saudaveis: postgres, redis, nats, api, admin.
- Imagens finais:
  - `monetarie/pix-api:validation-local` -> `sha256:305f68d277900ac937a02db9458827ccce6494e5b4a5a8a6f0424bd8ecdc2e4f`
  - `monetarie/pix-admin-ui:validation-local` -> `sha256:e565f8ead810deaf7ce8e6b2eaf88c1b4371be6200b54c8d2b4966e42af58752`

Evidencias:

- `.local/evidence/docker-build-api-final-20260618.log`
- `.local/evidence/docker-build-admin-final-20260618.log`
- `.local/evidence/docker-up-api-final-20260618.log`
- `.local/evidence/docker-up-admin-final-20260618.log`

## Comparativo mwbank x Monetarie

Base empirica:

- Monetarie: branch `main`, HEAD `af3c2c89b`.
- mwbank: branch `main`, HEAD `7d105ccf`.
- Apps backend Monetarie: `dict_service`, `settlement_service`, `shared`, `spi_service`.
- Apps backend mwbank: `admin_service`, `bacen_mock`, `dict_service`, `shared`, `spi_service`.
- Contagem excluindo `_build`, `deps`, `node_modules`, `dist`, `cover`, `.elixir_ls`, `.mix_root`:
  - Monetarie: `1234` arquivos.
  - mwbank: `1378` arquivos.
  - Comuns: `407`.
  - Apenas Monetarie: `827`.
  - Apenas mwbank: `971`.
  - Comuns diferentes: `280`.

Evidencias:

- `.local/evidence/mwbank-monetarie-file-comparison-20260618.tsv`
- `.local/evidence/only-mwbank-pix-files.txt`
- `.local/evidence/only-monetarie-pix-files.txt`
- `.local/evidence/mwbank-monetarie-changed-common-files.txt`

Conclusao do comparativo:

- A paridade nao e byte-a-byte e nem deve ser: Monetarie tem `settlement_service` e admin frontend proprio; mwbank tem `admin_service` e `bacen_mock`.
- Funcionalidades relevantes da mwbank foram tratadas/adaptadas no fluxo Monetarie: DICT simulator, MED/CID/fraude/refund, reconciliacao externa DICT, certificados, permissao/escopos, netting/sessoes, catalogo BACEN 5.12 preservado.
- O frontend Vue admin e especifico da Monetarie; a mwbank local nao possui o mesmo `frontend/admin/src/router/index.ts`, entao a paridade visual foi validada por superficie Monetarie e nao por diff de rotas Vue.

## Correcoes principais aplicadas

- Seletor de instituicao: `MONETARIE` e a unica instituicao ativa em `monetarie_auth.institutions`; demais seeds ficam inativos para nao aparecerem como instituicao ativa.
- Dashboard: contagem de participantes ativos passa a vir da lista oficial BACEN em `monetarie_spi_ref.bacen_pix_participants`, nao de tenant/instituicoes do sistema.
- Lista diaria BACEN: criada tabela, parsers, importer e worker Oban para participantes ativos Pix.
- Fonte BACEN local importada:
  - CSV: `https://www.bcb.gov.br/content/estabilidadefinanceira/participantes_pix/lista-participantes-instituicoes-em-adesao-pix-20260618.csv`
  - PDF: `https://www.bcb.gov.br/content/estabilidadefinanceira/participantes_pix_pdf/lista-participantes-instituicoes-em-adesao-pix-20260618.pdf`
  - SHA-256: `2e041be83d7d155c17ccdaf9dd658cef4b5a28c4078b339b11b0ab4b3252100e`
- Branding: assets Monetarie aplicados no admin, favicon, sidebar e login; placeholder `CC` removido da marca.
- i18n: chaves visiveis corrigidas; checagem estatica de `t('...')` contra `pt-BR.json` terminou com `missingCount=0`.
- Certificados: tela e API admin para CPIA, CPIC e CERTQRC; localmente nao ha certificado real carregado.
- QR Codes: schema runtime alinhado com `id:uuid,type,status,payload,inserted_at`; endpoint `/api/v1/qr-codes` sem erro de coluna.
- Balance operations: removido retorno fabricado em `BalanceOperationController`; operacoes suportadas proxyam o SPI e list/detail sem contrato real retornam `501 not_implemented`.
- Audit logger: `user_id` so e gravado quando e UUID valido.
- Permissions/RBAC: endpoints de grupos/features serializam UUID como texto JSON valido.
- Release migrations: release passa a carregar/migrar repos de `shared`, `settlement_service`, `spi_service`, `dict_service`.
- RSA local: fallback so permitido explicitamente via `RSA_FALLBACK_ALLOWED=true` no compose local.

## Seeds e banco local

Evidencia SQL final: `.local/evidence/sql/local-db-validation-20260618.tsv`.

Pontos comprovados:

- `MONETARIE` ativa com ISPB `46026562`.
- `auth_active_count=1`.
- `auth_non_monetarie_active_count=0`.
- BACEN latest: `2026-06-18`, `901` participantes, `901` ativos.
- Monetarie consta na lista BACEN: linha `213`, ISPB `46026562`, CNPJ `00.512.839/0001-09`.
- `public.pix_participants` tem Monetarie `COOP`, status `active`.
- Certificados locais: `CPIA=0`, `CPIC=0`, `CERTQRC=0`.
- Settlement migrations criticas aplicadas: `8/8`.
- `ref_sources_gcp_count=0`.
- `auth_mw_fluxiq_count=0`.

## Validacao visual e funcional local

Playwright final:

- Base URL: `http://localhost:18080`
- Gerado em: `2026-06-18T13:57:01.520Z`
- Login: OK.
- Rotas: `79/79`.
- Console/page errors: `0`.
- API/network issues: `0`.
- Navigation aborts: `0`.
- Screenshots gerados: `91`.
- Branding no DOM: `Monetarie`, `PIX`, alt text `Monetarie Sociedade de Crédito Direto`.
- Seletor mostra Monetarie, nao BACEN como instituicao ativa.

Evidencias:

- `.local/evidence/playwright/admin-local/validation-summary.md`
- `.local/evidence/playwright/admin-local/validation-result.json`
- `.local/evidence/playwright/admin-local/console-network-summary-20260618.json`
- `.local/evidence/playwright/admin-local/screenshots/dashboard.png`
- `.local/evidence/playwright/admin-local/screenshots/02-institution-selector.png`
- `.local/evidence/playwright/admin-local/screenshots/participants.png`
- `.local/evidence/playwright/admin-local/screenshots/security-certificates.png`
- `.local/evidence/playwright/admin-local/screenshots/simulator.png`
- `.local/evidence/playwright/admin-local/screenshots/simulator-scenarios.png`
- `.local/evidence/playwright/admin-local/screenshots/simulator-exchanges.png`
- `.local/evidence/playwright/admin-local/screenshots/messages.png`
- `.local/evidence/playwright/admin-local/screenshots/messages-build.png`
- `.local/evidence/playwright/admin-local/screenshots/reports-transactions.png`
- `.local/evidence/playwright/admin-local/screenshots/balance-requests.png`

Observacao sobre exports:

- O Playwright identificou um candidato de export em `/reports/transactions`, mas ele nao estava clicavel/habilitado com a base vazia.
- Nenhum download foi gerado nessa rodada. Isso foi registrado em `exportResults`; nao foi declarado export funcional sem evidencia.

## Validacoes backend/frontend

Backend:

- `MIX_ENV=test mix compile --warnings-as-errors` passou.
- `MIX_ENV=test mix test` passou:
  - `shared`: `1079 tests, 0 failures`.
  - `settlement_service`: `579 tests, 0 failures, 5 skipped`.
  - `spi_service`: `366 tests, 0 failures, 6 skipped (3 excluded)`.
  - `dict_service`: `205 tests, 0 failures, 2 skipped`.

Frontend:

- `pix/frontend/admin`: `npm run build:typecheck` passou.
- `pix/simulator-frontend`: `npm run build` passou.
- Aviso remanescente do Vite: chunk principal > 500 kB. Nao bloqueia funcionalidade, mas e debito de code splitting.

Evidencias:

- `.local/evidence/backend-compile-test-20260618.log`
- `.local/evidence/backend-full-test-20260618.log`
- `.local/evidence/frontend-admin-build-typecheck-20260618.log`
- `.local/evidence/frontend-i18n-static-check-20260618.json`
- `.local/evidence/simulator-frontend-build-20260618.log`

## Logs finais

Filtro aplicado nos logs da API desde o inicio do Playwright final:

- `[error]`, `[warning]`, `500`, `404`, `undefined_column`, `DictRateLimit`, `AuditLogger`, `Jason.EncodeError`, `RSA_PRIVATE_KEY`, exceptions comuns.
- Resultado: sem matches.

Evidencia:

- `.local/evidence/api-logs-after-playwright-20260618.log`

## Endpoints HTTP comprovados

- Auth local: `.local/evidence/http/auth-login-20260618.json`
- Dashboard stats: `.local/evidence/dashboard-stats-20260618.json`
  - `participants.active=901`
  - `participants.source=bacen_pix_participants`
  - `participants.source_date=2026-06-18`
- BACEN participants summary: `.local/evidence/http/bacen-pix-participants-summary-20260618.json`
- Instituicoes tenant: `.local/evidence/http/institutions-selector-20260618.json`
  - `total_count=10`
  - ativa: apenas `MONETARIE`, ISPB `46026562`.
- Certificados status: `.local/evidence/http/certificates-status-20260618.json`
  - `total_active=0`, porque nenhum certificado real foi carregado localmente.
- Balance operation debit listing: `.local/evidence/http/balance-operations-debits-20260618.txt`
  - `HTTP_STATUS=501`, intencional para nao declarar listagem inexistente como sucesso.

## Sobre homologacao BACEN

Nao estou declarando o sistema homologado com BACEN real a partir desta rodada local.

O que esta pronto/localmente comprovado:

- catalogo 5.12 preservado;
- rotas e telas admin sem erro de console/rede;
- lista oficial BACEN importada;
- seeds Monetarie coerentes;
- certificados CPIA/CPIC/CERTQRC com superficie de upload e status;
- DICT simulator e fluxos MED/CID/fraude/refund expandidos;
- reconciliacao DICT externa criada;
- mocks de sucesso falso removidos onde encontrados em operacao de saldo.

O que ainda exige evidencia de ambiente:

- upload/ativacao de certificados reais CPIA, CPIC e CERTQRC;
- chamadas BACEN homologacao real via mTLS;
- DICT/ICOM real com credenciais e conectividade do ambiente;
- transacoes reais vindas do core Monetarie;
- export/download com dataset habilitante.
