Skip to content

helioneto144/financebr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FinanceBR Dashboard

💸 FinanceBR

Gerenciador de finanças pessoais open source feito para brasileiros.
Sincroniza automaticamente com seus bancos via Open Finance (Pluggy), categoriza transações com IA e exibe tudo em um dashboard local bonito.

Python FastAPI React License: MIT PRs Welcome


✨ O que é o FinanceBR?

O FinanceBR é uma aplicação 100% local que:

  • 🏦 Sincroniza com seus bancos via meu.pluggy.ai (Nubank, Itaú, Bradesco, BB, Santander, Inter, Caixa, C6 e mais de 150 instituições)
  • 🤖 Categoriza automaticamente suas transações com regras inteligentes + IA (Groq / Llama 3.3 70B)
  • 📊 Exibe um dashboard com receitas, despesas, evolução do saldo, gráficos por categoria e mais
  • 🔒 Tudo fica na sua máquina — seus dados financeiros nunca saem do seu computador

Pense no FinanceBR como um Organizze/Guiabolso open source que roda localmente, sem mensalidade e sem vender seus dados.


🏦 Como funciona a conexão com o banco?

O FinanceBR usa a plataforma Pluggy — a maior infraestrutura de Open Finance do Brasil, certificada pelo Banco Central e usada por fintechs como Nubank, XP, Stone, C6 e mais.

Passo a passo para conectar seu banco:

1. Crie uma conta gratuita em meu.pluggy.ai

2. Dentro do Pluggy, clique em "Adicionar conta" e selecione seu banco:

Conectar bancos no Pluggy

3. Faça o login no seu banco (o Pluggy usa OAuth/Open Finance — ele nunca vê sua senha, só um token de leitura)

4. Após conectar, volte para o terminal e execute o setup do FinanceBR — ele vai autenticar no Pluggy usando seu email e um magic link, e importar todas as suas contas e transações.

Bancos suportados (via Pluggy)

Banco Tipo
Nubank Conta e Cartão
Itaú Conta, Poupança e Cartão
Bradesco Conta, Poupança e Cartão
Banco do Brasil Conta e Poupança
Santander Conta e Cartão
Caixa Econômica Conta e Poupança
Inter Conta e Cartão
C6 Bank Conta e Cartão
XP Investimentos Conta
BTG Pactual Conta
+ 150 instituições Ver lista completa

🚀 Instalação

Pré-requisitos

  • Python 3.12+
  • Node.js 18+

1. Clone o repositório

git clone https://github.com/helioneto144/financebr.git
cd financebr

2. Crie o ambiente virtual e instale dependências

python3 -m venv .venv
source .venv/bin/activate        # Linux/Mac
# .venv\Scripts\activate         # Windows

pip install -e .
playwright install chromium      # Necessário para autenticar no Pluggy

3. Build do frontend

cd frontend
npm install
npm run build
cd ..

4. Configure suas credenciais

financebr setup

O wizard interativo vai pedir:

Dado Onde obter Onde é salvo
Email do meu.pluggy.ai Sua conta em meu.pluggy.ai ~/.financebr/config.json
Magic link Email que o Pluggy envia Usado para gerar cookies de sessão
Groq API Key Gratuita em console.groq.com ~/.financebr/config.json

🔒 Segurança: Todos os dados (config, cookies, banco SQLite) ficam em ~/.financebr/ no seu computador. Nada disso é enviado para a internet ou commitado no repositório.

5. Inicie o servidor

financebr start
# → http://localhost:5666

Abra o navegador em http://localhost:5666 e veja suas finanças! 🎉


🖥️ Comandos disponíveis

financebr setup          # Wizard de configuração inicial (faça isso primeiro!)
financebr start          # Inicia o servidor web em http://localhost:5666
financebr start --dev    # Modo dev com auto-reload
financebr sync           # Sincronização manual com o Pluggy
financebr recategorize   # Re-aplica as regras de categorização a todas as transações
financebr status         # Exibe o status do último sync

🤖 Como funciona a categorização automática?

O FinanceBR usa um sistema de categorização em 5 camadas, do mais específico ao mais genérico:

1. Overrides de descrição   → "Pagamento de Fatura Nubank" = Transferência
2. Mapa do Pluggy           → Categoria da API do Pluggy (eating out, groceries...)
3. Refinamento por sinal    → PIX positivo inesperado = Receita
4. Regras de regex (local)  → "iFood" = Comida, "Uber" = Transporte
5. LLM (Groq Llama 3.3 70B) → Fallback para transações desconhecidas

As categorias do LLM são cacheadas localmente na tabela merchant_categories — cada estabelecimento só é categorizado via IA uma vez.

Categorias disponíveis

Emoji Categoria Exemplos
🍔 Alimentação iFood, restaurantes, lanchonetes
🛒 Supermercado Carrefour, Pão de Açúcar, Extra
🚗 Transporte Uber, 99, combustível, pedágio
🏥 Saúde Farmácias, consultas, planos
🎬 Entretenimento Netflix, Spotify, academia, games
📦 E-commerce Amazon, Mercado Livre, Shopee
🛍️ Compras Lojas físicas, shoppings
📄 Contas Energia, internet, aluguel, escola
💼 Salário Depósitos de salário
💰 Receita Estornos, reembolsos, receitas extras
💸 Transferência PIX, TED, pagamento de fatura
📈 Investimentos Tesouro Direto, CDB, fundos
📌 Outros Tudo que não se encaixa acima

🏗️ Arquitetura

financebr/
├── backend/
│   ├── main.py              # FastAPI app + configuração de rotas
│   ├── models.py            # SQLAlchemy models (Account, Transaction, Category...)
│   ├── schemas.py           # Pydantic schemas para a API
│   ├── database.py          # Engine SQLite async + seed de categorias
│   ├── config.py            # Leitura/escrita de ~/.financebr/config.json
│   ├── scheduler.py         # APScheduler para sync periódico
│   ├── cli.py               # CLI com Click (financebr setup/start/sync...)
│   ├── scraper/
│   │   ├── transactions.py  # Playwright: scraping + interception da API do Pluggy
│   │   └── auth.py          # Autenticação via magic link
│   ├── categorizer/
│   │   ├── rules.py         # Regras regex + overrides de alta prioridade
│   │   └── llm.py           # Integração Groq com cache de merchants
│   └── routers/
│       ├── accounts.py      # GET /api/accounts
│       ├── transactions.py  # GET/PATCH /api/transactions + summary/monthly/top
│       ├── categories.py    # GET/POST /api/categories + breakdown
│       ├── sync.py          # POST /api/sync + status/logs/debug
│       ├── insights.py      # GET /api/insights (gerado por IA)
│       └── settings.py      # GET/PATCH /api/settings
└── frontend/
    └── src/
        ├── pages/
        │   ├── DashboardPage.tsx   # Dashboard principal
        │   ├── TransactionsPage.tsx # Lista e filtragem de transações
        │   └── ...
        ├── api/client.ts           # Funções para chamar o backend
        └── types/index.ts          # Tipos TypeScript

Stack técnico

Camada Tecnologia
Backend Python 3.12 + FastAPI + SQLAlchemy async
Banco de dados SQLite (aiosqlite) — fica em ~/.financebr/
Scraper Playwright (Chromium headless)
IA Groq SDK → Llama 3.3 70B
Agendamento APScheduler
Frontend Vite + React 18 + TypeScript + Recharts
CLI Click

🧪 Testes

# Instalar dependências de teste
pip install pytest pytest-asyncio httpx

# Rodar os 105 testes
python -m pytest tests/ -v

# Resultado esperado:
# 105 passed in ~1.2s

Os testes cobrem parsers de moeda/data brasileira, regras de categorização, todos os endpoints da API e casos de borda.


🛠️ Desenvolvimento

Backend (com hot-reload)

source .venv/bin/activate
uvicorn backend.main:app --reload --port 5666

Frontend (com HMR)

cd frontend
npm run dev    # → http://localhost:5173 (proxy para :5666)

Rodar tudo junto (dev)

financebr start --dev &
cd frontend && npm run dev

🤝 Contribuindo

Pull requests são muito bem-vindos! O FinanceBR é pensado para ser um projeto comunitário de brasileiros para brasileiros.

Como contribuir

  1. Fork o repositório
  2. Crie uma branch para sua feature: git checkout -b feature/minha-feature
  3. Commit suas mudanças: git commit -m 'feat: adiciona suporte a X'
  4. Push para sua branch: git push origin feature/minha-feature
  5. Abra um Pull Request com uma descrição clara do que foi feito

Áreas onde a ajuda é bem-vinda

  • 🏦 Mais regras de categorização — conhece um estabelecimento que está sendo mal-categorizado? Adicione uma regra em backend/categorizer/rules.py!
  • 🐛 Bug reports — abra uma Issue com o máximo de detalhes possível
  • 💡 Novas features — discuta no Discussions antes de implementar
  • 🧪 Mais testes — cobertura nunca é demais
  • 📱 UI/UX melhorias — ideias pro dashboard ou para novas páginas
  • 📖 Documentação — melhorias neste README ou wiki

Convenções de commit

Usamos Conventional Commits:

feat: nova funcionalidade
fix: correção de bug
docs: atualização de documentação
test: adição ou correção de testes
refactor: refatoração sem mudança de comportamento
chore: tarefas de manutenção

Reportando bugs

Ao abrir uma Issue de bug, inclua:

  • Versão do Python (python --version)
  • Sistema operacional
  • Trecho do log de erro (encontrado com financebr status ou no terminal)
  • Passos para reproduzir o problema

❓ FAQ

Q: Minhas senhas ficam guardadas no app?
A: Não. O FinanceBR usa o Pluggy como intermediário via Open Finance. Você autentica no seu banco diretamente pelo site do Pluggy, e o FinanceBR recebe apenas um token de leitura. Sua senha nunca passa pelo FinanceBR.

Q: Meus dados vão para a nuvem?
A: Não. O banco SQLite e as configurações ficam exclusivamente em ~/.financebr/ na sua máquina. A única comunicação externa é: (1) com o meu.pluggy.ai para buscar transações e (2) com a API do Groq para categorizar transações desconhecidas.

Q: Preciso de uma conta paga no Groq?
A: Não. O plano gratuito do Groq é suficiente — ele oferece tokens mais que suficientes para categorizar novas transações. Após a primeira categorização de cada estabelecimento, o resultado é cacheado localmente e não consome mais tokens.

Q: A sessão do Pluggy expira?
A: Sim, eventualmente. Quando isso acontecer, o sync vai falhar com erro de autenticação. Execute financebr setup novamente para renovar a sessão.

Q: Posso rodar em um servidor/Raspberry Pi?
A: Sim! O backend roda em qualquer Python 3.12+. O Playwright (necessário para autenticação) requer uma instalação do Chromium — playwright install chromium instala automaticamente.


📄 Licença

MIT © Hélio Neto — use, modifique e distribua à vontade.


Feito com ❤️ no Brasil 🇧🇷

⭐ Star o projeto se ele te ajudou!
🐛 Abrir Issue · 💬 Discussions · 🔀 Pull Request

About

Integração Não-Oficial com o Pluggy para gerar relatórios e insights sobre seus gastos, 100% local e open-source :)

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors