# Mapeamento: dashboard "Gestão Conta PI" (AutBank SPI) vs. o que temos hoje

Data: 2026-07-14. Pedido do dono: mapear tudo do dashboard principal do legado
(tela "PI AUTBANK - GESTÃO CONTA PI") para melhorarmos o nosso.

Referência visual: screenshot do AutBank SPI de 14/07/2026 (ambiente AWS deles),
7 painéis. Levantamento feito arquivo a arquivo no monorepo (evidência
arquivo:linha em cada item). Nada abaixo é inferência: onde não achei, está
escrito que não achei.

## Onde estamos hoje (visão geral)

O nosso "dashboard principal" da cabine PIX é
`pix/frontend/admin/src/views/DashboardView.vue` e está genérico: 4 stat cards
(transações/usuários/chaves/participantes), widget de saldo Conta PI
(`:360-393`), atividade recente com audit logs e ações rápidas. A inteligência
de Conta PI que o AutBank concentra em UMA tela está espalhada em três rotas
nossas: `/balance` (`BalanceDashboardView.vue`), `/camt060`
(`Camt060ToolView.vue`) e `/monitoring` (`MonitoringView.vue`). No coreadmin, a
tela rica é `core/apps/admin/src/views/treasury/SettlementBalanceView.vue`
(saldo da cabine, consolidado diário, movimentos).

Conclusão executiva: a maior parte do que o AutBank mostra JÁ EXISTE no nosso
backend. O grosso do trabalho é de COMPOSIÇÃO (trazer para um dashboard único o
que já está pronto em endpoints). Só dois itens são buraco de DADOS, não de UI:
saldo de participantes indiretos e fila de pagamentos agendados por D.

## Painel a painel

### 1. Situação da Conta PI (tabela Valor R$ / Quantidade, 12 linhas)

Linhas do legado: SALDO INICIAL, Aporte/Saque, Pagamentos Recebidos, Pagamentos
Enviados, SALDO ATUAL, Créditos em trânsito, Débitos em trânsito, SALDO ATUAL +
TRÂNSITO, SALDO PARTICIPANTES INDIRETOS, TOTAL CONSOLIDADO, Movimentos
Internos, Último pagamento efetivado.

O que já temos:
- Saldo atual/disponível/bloqueado: `spi_service/lib/spi_service/balances.ex`
  `get_balance/1` (`:40`), exposto em `GET /api/v1/balance/positions`
  (`balance_controller.ex:271`) e `GET /api/v1/balance/position/:ispb` (`:216`).
  Na tela: `BalanceDashboardView.vue:219-303`.
- Créditos/débitos em trânsito: `get_projected_balance/1` (`balances.ex:541`)
  calcula `pending_credits`/`pending_debits` de transações pendentes. Isso É o
  "trânsito" do legado.
- Saldo inicial/recebidos/enviados/saldo final por dia: hoje no coreadmin,
  consolidado diário de `SettlementBalanceView.vue:401-443` via
  `POST /treasury/settlement-balance/consolidated-statement`.

Gaps reais:
- Não existe a TABELA ÚNICA com as 12 linhas, par (Valor, Quantidade) e
  timestamp único.
- SALDO ATUAL + TRÂNSITO como linha derivada não é montado em lugar nenhum
  (os insumos existem).
- SALDO PARTICIPANTES INDIRETOS: o schema
  `shared/lib/shared/schemas/reda/indirect_participant.ex` só tem ciclo
  cadastral (ISPB, CNPJ, status). NÃO há fonte de saldo de indiretos. Buraco de
  dados.
- TOTAL CONSOLIDADO (PI + indiretos) e Movimentos Internos: não existem.
- Último pagamento efetivado: derivável de `monetarie_spi.messages`, não
  implementado.

Onde implementar: agregador novo `get_conta_pi_situation/1` em `balances.ex`
devolvendo as 12 linhas, endpoint em `balance_controller.ex`, componente
`SituacaoContaPiCard.vue` usado no dashboard e no `/balance`.

### 2. Saldo SPI BACEN (saldo real no BACEN + refresh)

O que já temos (cobertura forte):
- Ferramenta camt.060: `Camt060ToolView.vue` aba "saldo-atual" (`:40-46`),
  backend `spi_service/lib/spi_service/camt060.ex` +
  `camt060_controller.ex:46`. Fluxo assíncrono correto: pedido vai ao BACEN,
  saldo real chega pelo ICOM e materializa em `monetarie_spi.balances`;
  `balance_state/1` (`camt060.ex:134-142`) só marca "materialized" quando a
  fonte é camt.052/053/arquivo/reconciliação.
- No coreadmin: "Disponível agora" + "Atualizar agora"
  (`SettlementBalanceView.vue`, `POST /treasury/settlement-balance/refresh`).

Gap: falta o CARD no dashboard principal do pix-admin com valor, timestamp e
botão de refresh (o card equivalente de SPB foi removido de propósito,
`DashboardView.vue:395-397`). Backend pronto, só compor.

### 3. Reenvio / Rejeições (contadores do dia + valor)

O que já temos (parcial e disperso):
- RJCT por fluxo no `OperationsMonitorView.vue` (`:398-415`), agregação
  `get_operations_summary/1` (`spi_service/operations.ex:184`).
- Replay de DLQ (infra): `settlement_service_web/controllers/admin/dlq_controller.ex:38`.

Gaps: não existe contador dedicado "rejeições do dia + valor R$" nem contador
de "reenvios" de pagamento. Implementar `get_resend_reject_counters/1` em
`operations.ex` (status_id=8 do dia com soma de valor) e card no dashboard.

### 4. Evolução do Saldo PI (gráfico intradiário 00:00-24:00)

O que já temos (dados sim, gráfico quase não):
- `GET /api/v1/balance/intraday` (`balance_controller.ex:286`) com
  `get_intraday_movements/2` e histórico horário (`balances.ex:160`).
- Saldo Mínimo como parâmetro: `BalanceParametersView.vue` +
  `balance.ts` `minBalancePI/criticalBalancePI` (`:73-88`).
- Padrão de gráfico de linha já existe no core
  (`SettlementBalanceView.vue:243-298`, vue-chartjs), mas por DIAS.

Gaps: no pix-admin não há gráfico de saldo nenhum; faltam as 3 séries do
legado (Saldo Corrente, Saldo Comparativo do dia anterior, linha vermelha de
Saldo Mínimo), o toggle Valores/Quantidade e o seletor de data intradiário. O
comparativo do dia anterior exige uma query nova no backend (intraday de D-1).

Onde implementar: componente `EvolucaoSaldoPiChart.vue` no pix-admin
consumindo `getIntradayMovements` (`balance.ts:279`) + parâmetros (linha de
mínimo) + query nova de D-1 em `balances.ex`.

### 5. Solicitar Aporte / Saque

O que já temos (pronto, e mais robusto que o legado): fluxo dedicado com
justificativa e dupla alçada LSO/RSO. `LiquidityInjectionView.vue`,
`CreditRequestView.vue`, `DebitRequestView.vue` (rotas
`/balance/request/credit|debit|aporte`, router `index.ts:547-558`), backend
`balance_operation_controller.ex:200` `create_injection` que faz proxy para
`POST /api/v1/admin/balance/:ispb/inject` (`spi_service_web/router.ex:227`).

Gaps menores: mini-form inline no dashboard (valor + dois botões) e a listagem
de injeções que hoje devolve `not_implemented`
(`balance_operation_controller.ex:214-224`).

### 6. Pagamentos Agendados (D0, D0 Part. Ind., D+1)

O que já temos (só infra): sessões de liquidação D+0/D+1/D+2 em
`settlement_service/lib/settlement_service/sessions.ex` (`:6-7`) e recorrências
pain.009/011/012 em `spi_service/lib/spi_service/recurrences.ex` (tela
`RecurrenceListView.vue`).

Gaps: não existe painel agregando agendados por D com Valor e Quantidade; não
achei PIX agendado de execução única como fila consultável; a dimensão de
participantes indiretos depende do buraco de dados do painel 1. Antes de fazer
a UI é preciso DEFINIR a fonte de "agendado" (recorrências vs. sessões vs.
fila própria).

### 7. Histórico de Alertas

O que já temos (praticamente pronto no backend):
- `settlement_service/lib/settlement_service/monitoring/alert_engine.ex`,
  engine persistente em `monetarie_spi.operational_alerts` com dedup, count,
  first/last_seen, ack e resolve. O moduledoc (`:3-6`) cita paridade com os 39
  tipos de alerta do AutBank.
- O alerta exato do screenshot ("Falha ao realizar teste de conectividade") é
  o nosso `echo_fail` (`alert_engine.ex:433-457`, probe pibr.001).
- Endpoints: `GET /api/v1/monitoring/alerts` (+ acknowledge/resolve) em
  `monitoring_controller.ex:136-170`. Frontend: `services/monitoring.ts:42` e
  `MonitoringView.vue`.

Gap: os alertas não aparecem no dashboard principal (que mostra audit logs).
Card de "últimos N alertas" resolve.

## Plano de melhoria recomendado (por esforço x valor)

Onda A (composição pura, backend pronto, maior valor imediato):
1. Card "Saldo SPI BACEN" no dashboard (painel 2).
2. Card "Histórico de Alertas" no dashboard (painel 7).
3. Gráfico "Evolução do Saldo PI" intradiário com linha de saldo mínimo
   (painel 4, sem o comparativo de D-1 na primeira entrega).
4. Mini-form Aporte/Saque no dashboard reutilizando o fluxo com alçada
   (painel 5).

Onda B (backend pequeno + UI):
5. Contadores "Reenvio/Rejeições do dia" com valor (painel 3).
6. Tabela "Situação da Conta PI" com as linhas que já têm fonte (saldo,
   trânsito, recebidos/enviados, último pagamento) (painel 1 parcial).
7. Série comparativa D-1 no gráfico (painel 4 completo).

Onda C (exige decisão de modelo de dados, validar com o dono antes):
8. Saldo de participantes indiretos + TOTAL CONSOLIDADO (fonte de dados nova).
9. Pagamentos agendados por D0/D0-Ind/D+1 (definir a fonte de "agendado").
10. Movimentos internos (definir o conceito no nosso modelo).

Observação de arquitetura: o AutBank concentra operação de Conta PI em uma tela
só e isso é o valor da referência. A recomendação é evoluir o
`DashboardView.vue` do pix-admin para ser essa tela (a cabine PIX é quem
opera a Conta PI), mantendo o coreadmin com a visão de tesouraria/reconciliação
que já tem.
