Pular para o conteúdo

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
Tela do Wallet consumindo o contrato real da API.

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?

Retrato de Thiago Sanches

Dados de contato

Disponível para trabalho remoto em times internacionais

Nome
Thiago Sanches
Localização
Brasil · UTC−3 · trabalho remoto
Idiomas
Português nativo · inglês com fluência profissional
Baixar currículo

Experiência

  • 5 anos

    em sistemas corporativos

  • 70%

    menos tempo por relatório novo

  • 50%

    menos latência em GraphQL

  • Workers

    processos assíncronos com filas em Redis