Estudo de Open Finance com a Pluggy
Wallet
Projeto pessoal de ponta a ponta para estudar API de Open Finance: a conta bancária conectada pela Pluggy traz transação e posição de investimento sem digitação, e o backend assume o trabalho de conciliar o extrato, classificar e resumir.
- Papel
- Backend e frontend
- Período
- 2025
- Situação
- Código aberto

O que o sistema faz
- Conexão da conta bancária por Open Finance, com o consentimento dentro do widget do agregador.
- Despesa e receita vindas da conta conectada, ao lado do lançamento manual, na mesma listagem.
- Conciliação do extrato: compra no crédito, pagamento de fatura e transferência entre contas do próprio titular tratados antes de virar gasto.
- Posição de investimento por tipo e subtipo, com instituição emissora e taxa de doze meses.
- Resumo mensal e exportação em planilha, por mês, por categoria e por ano.
Arquitetura
- API em NestJS com TypeORM sobre PostgreSQL, com prefixo global e documentação Swagger.
- Sete módulos no backend, com o de conexão bancária dividido em três controladores, token de conexão, item bancário e transações, mais o submódulo de investimento.
- Consentimento bancário dentro do widget do agregador: o servidor troca credencial de cliente por uma chave de API e devolve o token de conexão, e a credencial do banco é digitada no widget, nunca na aplicação.
- Autenticação por token do Firebase verificado no servidor, em guard de rota. O mesmo guard provisiona o usuário na primeira requisição autenticada, sem rota de cadastro.
- Contrato uniforme na saída: um interceptor envelopa toda resposta de sucesso e um filtro global trata a exceção. Na entrada, ValidationPipe com whitelist e recusa de campo desconhecido.
- Gasto chega por dois caminhos e sai por um: a listagem junta a transação da conta conectada e o lançamento manual na mesma resposta, cada item marcado com a origem, e o resumo mensal soma as duas.
- Investimento como domínio próprio: entidade de posição com vinte e oito subtipos e seis tipos em enum, instituição como entidade separada, e um assembler que traduz o vocabulário do agregador na borda da resposta.
- Esquema versionado em cinco migrações, sem sincronização automática.
- Log estruturado com Pino, rota de health check e três exportações em planilha com exceljs.
- Web em Next.js com gráficos em Recharts, consumindo a API diretamente com o token do Firebase no cabeçalho.
Detalhes de implementação
- A conciliação do cartão desconta o pagamento da fatura e dez categorias excluídas, para a compra não ser contada duas vezes.
- A sincronização é sob demanda: não há agendamento nem webhook, o item bancário é atualizado quando o cliente pede.
- A deduplicação de investimento usa o ISIN do ativo como chave.
Tecnologias
- TypeScript
- Linguagem dos dois repositórios.
- NestJS
- Framework da API, com guard, interceptor e filtro global.
- TypeORM
- Entidades e as cinco migrações versionadas.
- PostgreSQL
- Banco de despesa, receita, posição e instituição.
- Pluggy
- Agregador de Open Finance: token de conexão, transação e investimento.
- Firebase
- Identidade, com o token verificado no servidor.
- Pino
- Log estruturado da API.
- exceljs
- As três exportações em planilha.
- Swagger
- Documentação da API.
- Next.js
- Aplicação web, com a tela de investimento e a de despesa.
- Recharts
- Gráfico de despesa por mês e por categoria.
- Docker
- Imagem multi estágio da API, com usuário sem privilégio.
Quer conversar sobre arquitetura, decisão técnica e entrega em produção?
