Sistema de contabilidade pessoal por partidas dobradas usando Beancount + Fava. Gerencia contas de múltiplos membros da família. Python 3.12, gerenciado com Pipenv.
# Instalar dependências
pipenv install
# Rodar testes
pipenv run pytest
# Extrair transações de CSVs/OFXs baixados
./extract_transactions_from_csv.sh
# Importar Nubank via API
python -m importers.nubank.nubank_api_importer
# Abrir interface Fava
fava transactions.beancounttransactions.beancount- Livro-razão principal. Inclui os outros viainclude.2019.beancount- Histórico desde 2017. Definição de moedas (BRL, USD, VOO, SELIC, BTC) e abertura de contas antigas.prices.beancount- Cotações de commodities separadas do livro principal.
importers/inter/importer.py- Extratos e faturas CSV- Classes:
ExtractImporter{Pessoa1,Pessoa2,Pessoa3},FaturaImporter{Pessoa1,Pessoa2}
importers/nubank/nubank_ofx_importer.py- Fatura via OFX com categorização automática (434 regras)importers/nubank/nubank_api_importer.py- Importação via API pynubank com categorização por tags- Gera:
out_personal.txteout_pythonpro.txt
importers/telegram/reconcile_ofx.py- Conciliação OFX via Telegramimporters/telegram/reconcile_inter_csv.py- Conciliação CSV Inter via Telegram- Ver gist: https://gist.github.com/renzon/f502114d4308eba40a0a8139f0807bce
config.py- Registra todos os importadores para uso combean-extract/bean-file
| Importador | Arquivo esperado |
|---|---|
| ExtractImporterPessoa1 | ExtratoPessoa1.csv |
| ExtractImporterPessoa2 | ExtratoPessoa2.csv |
| ExtractImporterPessoa3 | ExtratoPessoa3.csv |
| FaturaImporterPessoa1 | FaturaPessoa1.csv |
| FaturaImporterPessoa2 | FaturaPessoa2.csv |
| CreditCardImporter (Nubank) | Nubank_YYYY-MM-DD.ofx |
Assets:Caixa:Inter:{Pessoa}- Contas correntes Banco InterAssets:Caixa:Nubank:{Pessoa}- Contas correntes NubankAssets:Investimentos:RendaFixa:Nubank:{Pessoa}- RDB/Caixinhas NubankAssets:Investimentos:Inter:EUA:{Pessoa}:Cash- Conta Global Inter (USD)Assets:Investimentos:Inter:EUA:{Ticker}:{Pessoa}- Ações/ETFsAssets:Recebiveis:{Nome}- Empréstimos a receber
Liabilities:Cartoes:Inter:{Pessoa}- Cartões de crédito InterLiabilities:Cartoes:Nubank- Cartão de crédito Nubank
Expenses:Mercado- Supermercado, feiraExpenses:Restaurante- Alimentação fora de casaExpenses:Casa- Aluguel, utilidades, manutençãoExpenses:Lazer- Entretenimento, viagensExpenses:Transporte:Carro- Combustível, estacionamento, manutençãoExpenses:Transporte:Uber- Uber, 99, etcExpenses:Transporte:Moto- Manutenção motoExpenses:Familia:{Pessoa}- Gastos pessoais específicosExpenses:Familia:Filhos- Escola, brinquedos, roupas infantisExpenses:Familia:Saude- Plano de saúde, médicos, farmáciaExpenses:Familia:Mae- Gastos com mãeExpenses:Cachorro- Pet shop, veterinárioExpenses:Faxina- Serviços de limpezaExpenses:Impostos:IR- Imposto de rendaExpenses:SeguroDeVida- SegurosExpenses:Unknown- Transações não categorizadas (força revisão)
Income:Work:MEI:{Pessoa}- Receita MEIIncome:Work:PythonPro:{Pessoa}:{ProLabore|Distribuicao}- PythonProIncome:Work:DevPro:{Pessoa}:{ProLabore|Distribuicao}- DevProIncome:Business:Investimentos:RendaFixa:Nubank:{Pessoa}- Juros RDBIncome:Business:Nubank:Desconto- Descontos antecipação
| Padrão na Descrição | Conta | Tipo |
|---|---|---|
ESCOLA MOPPE LTDA |
Expenses:Familia:Filhos |
Escola |
PORTO SEGURO |
Expenses:Familia:Saude |
Plano de saúde |
RECEITA FEDERAL |
Expenses:Impostos:IR |
IR |
Pagamento fatura cartao |
Liabilities:Cartoes:Inter:{Pessoa} |
Pagamento fatura |
Detran |
Expenses:Transporte:Carro |
IPVA, licenciamento |
MUNICIPIO DE ... |
Expenses:Casa |
IPTU |
EDP |
Expenses:Casa |
Energia elétrica |
| Nomes de pessoas na fatura | Expenses:Mercado |
Feirantes |
| Shopping, lojas de roupa | Expenses:Familia:{Pessoa} |
Compras pessoais |
| Parques de diversão | Expenses:Familia:Filhos |
Entretenimento infantil |
BIG JUMP, RI HAPPY |
Expenses:Familia:Filhos |
Brinquedos/parques |
| Esmalteria, cabeleireiro | Expenses:Familia:{Pessoa} |
Beleza |
POPULAR PET |
Expenses:Cachorro |
Pet shop |
| Pix entre contas próprias | Assets:Caixa:{Banco}:{Pessoa} |
Transferência interna |
- Destinatário desconhecido: usar
Expenses:Unknowne marcar transação com!(flag de revisão) - Transferências internas: usar conta da outra pessoa como contrapartida
- Pagamentos de fatura: usar
Liabilities:Cartoes:...correspondente - Balance assertions: incluir no final do extrato
- Parcelas: Importador Inter lança valor total na parcela 1/N, ignora parcelas seguintes
- Nubank OFX: usa
nubank_idno metadata - Inter CSV: usa combinação data + descrição + valor
- Telegram importers: detectam automaticamente transações já lançadas
- Moeda operacional: BRL
- Pró-labore fixo: R$ 1.100 (diferencia de distribuição)
- Parcelas: Importador lança valor total na primeira parcela
- Pagamentos "PAGAMENTO ON LINE": ignorados (já aparecem no extrato)
- Conta
Expenses:Unknown: NÃO é aberta propositalmente para forçar revisão
# Extrair transações dos arquivos baixados
bean-extract config.py Downloads/ -e transactions.beancount > out.txt
# Revisar e editar out.txt conforme necessário
# Adicionar ao ledger
cat out.txt >> transactions.beancount
# Validar
bean-check transactions.beancount- Enviar arquivo OFX ou CSV para o bot
- Bot processa e mostra preview com categorização
- Confirmar ou cancelar
- Bot adiciona ao ledger automaticamente
Ver: https://gist.github.com/renzon/f502114d4308eba40a0a8139f0807bce
# Arquivar documentos importados
bean-file config.py Downloads/ -o .# Abrir interface web
fava transactions.beancount
# Acesse: http://localhost:5000.
├── transactions.beancount # Ledger principal
├── 2019.beancount # Histórico antigo
├── prices.beancount # Cotações
├── config.py # Config bean-extract
├── importers/
│ ├── inter/
│ │ └── importer.py # Inter CSV
│ ├── nubank/
│ │ ├── nubank_ofx_importer.py
│ │ └── nubank_api_importer.py
│ └── telegram/ # Novos importadores
│ ├── reconcile_ofx.py
│ ├── reconcile_inter_csv.py
│ └── README.md
├── Assets/ # Arquivos arquivados
│ └── Caixa/Inter/{Pessoa}/
├── Liabilities/
│ └── Cartoes/
│ ├── Inter/{Pessoa}/
│ └── Nubank/
└── out_csv.txt # Output temporário
- Beancount: https://beancount.github.io/docs/
- Fava: https://github.com/beancount/fava
- Importadores Telegram: https://gist.github.com/renzon/f502114d4308eba40a0a8139f0807bce
- Importador Inter: https://gist.github.com/renzon/9304614017d7ed01ef70a6839d7a5c84
- Importador Nubank OFX: https://gist.github.com/renzon/6d90ccfee88731259e52292f7c07ac10
- NUNCA comitar sem pedido explícito do usuário
- Idioma dos commits e mensagens: português
- Validar com
bean-checkantes de comitar - Manter documentação atualizada