Análise Financeira em Tempo Real com Fava e Beancount
Introdução
O Beancount é um sistema de contabilidade de partidas dobradas de código aberto que utiliza arquivos de texto simples como livro-razão. Ele enfatiza a simplicidade, a transparência e a flexibilidade no acompanhamento das finanças. O Fava é uma poderosa interface web para o Beancount, proporcionando um ambiente interativo para visualizar relatórios, visualizações e gerir o seu livro-razão. Neste relatório, exploramos as capacidades principais do Beancount e do Fava, e como obter análises financeiras em tempo real ou quase em tempo real com estas ferramentas. Cobrimos dicas de configuração para automação e atualização de dados, funcionalidades de visualização do Fava (para vistas instantâneas de fluxo de caixa e deteção de tendências), integração com dashboards externos (Grafana, Metabase, etc.), exemplos de dashboards e plugins personalizados, casos de uso em finanças pessoais e de pequenas empresas, comparações com outras plataformas (Power BI, QuickBooks) e os prós / contras de usar Fava + Beancount para insights orientados por dados.
Capacidades Principais do Beancount e do Fava
Beancount (Mecanismo de Contabilidade em Texto Simples)
- Livro-razão de Partidas Dobradas em Texto Simples: O Beancount armazena transações num único arquivo de texto
.beancount(ou múltiplos arquivos incluídos). Cada transação deve bater (total de débitos = total de créditos) entre as contas, reforçando a integridade contabilística. O formato de texto simples significa que os seus dados são legíveis por humanos, controláveis por versão e não estão presos a nenhum fornecedor. - Contas Hierárquicas e Flexíveis: Pode definir quaisquer contas (ex.:
Ativos:Banco:Corrente,Despesas:Alimentação:Café) numa hierarquia. O Beancount não impõe um plano de contas específico, por isso funciona para finanças pessoais, contabilidade de pequenas empresas, investimentos, etc. – é “flexível: funciona para finanças pessoais, escrituração de pequenas empresas, cripto, investimentos em ações e muito mais.” - Múltiplas Moedas e Commodities: O Beancount possui suporte de primeira classe para múltiplas moedas e commodities (ex.: ações, cripto). Pode registar transações em diferentes moedas, definir taxas de câmbio (diretivas de preço) e acompanhar bases de custo. Pode gerar relatórios “ao custo” ou “ao valor de mercado” se os dados de preço forem fornecidos. Isto torna-o adequado para portfólios e finanças internacionais.
- Verificações e Balanços Automatizados: O sistema suporta asserções de saldo (pode declarar qual deveria ser o saldo de uma conta numa data, e o Beancount emitirá um erro se não coincidir) e transações de saldo para fechar livros. Também suporta lançamentos de abertura / fecho de capital e cálculo de lucros acumulados para fecho de períodos. Estes ajudam a garantir que os seus livros permanecem consistentes e detetam erros precocemente.
- Poderoso Mecanismo de Consulta e Relatórios: O Beancount vem com uma linguagem de consulta BQL (Beancount Query Language) e ferramentas de linha de comando como
bean-balance,bean-registerebean-querypara gerar relatórios. Pode consultar o livro-razão para relatórios personalizados (ex.: lista de despesas por beneficiário, fluxo de caixa de um período) – tratando essencialmente o livro-razão como uma base de dados. É rápido mesmo com milhares de transações e pode exportar para CSV ou até diretamente para Excel / LibreOffice (com add-ons opcionais). - Extensibilidade via Plugins: O Beancount é escrito em Python e permite plugins personalizados para estender a sua funcionalidade. Os plugins podem impor regras ou cálculos adicionais quando o arquivo é processado. (Por exemplo, existem plugins para gerir lotes fiscais ou para garantir que nenhuma compra careça de custo). O sistema de plugins e a API Python permitem que utilizadores avançados criem scripts de comportamentos personalizados ou integrem o Beancount com outros sistemas.
- Importadores para Dados Externos: Uma funcionalidade prática fundamental é a estrutura de ingestão do Beancount para importar dados (ex.: de extratos bancários). Pode escrever ou usar plugins de importação que analisam CSV, OFX, extratos em PDF, etc., e os convertem em entradas do Beancount. Isto é essencial para a automação (mais sobre isto adiante).
- Auditável e Amigável ao Controlo de Versões: Por ser texto simples, pode manter o seu livro-razão no Git ou noutro controlo de versões. Cada alteração é transparente e possui um histórico completo de edições. Isto torna auditorias ou revisões de alterações simples (muitos utilizadores confirmam as alterações de cada dia num repositório Git, fornecendo um registo inviolável de todas as entradas financeiras). Este nível de transparência é um grande diferencial em relação a softwares de contabilidade fechados – “sem aprisionamento tecnológico (SaaS lock-in) — apenas uma contabilidade limpa e transparente com relatórios poderosos.”
Fava (Interface Web para Beancount)
- UI Web Interativa: O Fava fornece um servidor web local que renderiza o seu livro-razão Beancount numa interface rica. Exibe relatórios principais (Demonstração de Resultados, Balanço Patrimonial, etc.), registos de contas e diários no navegador com controlos interativos. A UI é dinâmica e intuitiva em comparação com a linha de comando. Inicia-o com um simples
fava o-seu-arquivo.beancounte obtém uma aplicação web para os seus livros. - Gráficos Integrados: O Fava gera gráficos para ajudar a visualizar os seus dados. Por exemplo, inclui um gráfico de linhas de Património Líquido ao longo do tempo, gráficos de barras para receitas vs. despesas por mês e gráficos de pizza / treemap para detalhamento de despesas. Estes elementos visuais atualizam-se com os seus dados e suportam diferentes vistas (ex.: “ao custo” vs “valor de mercado” para investimentos). Exploraremos estas capacidades de visualização em detalhe mais tarde.
- Filtragem e Pesquisa: No topo das páginas do Fava, uma barra de filtro permite segmentar os seus dados em tempo real. Pode filtrar por tempo (ex.: ano, trimestre, mês), por regex de conta, por beneficiário, por descrição ou por tags / links. Isto facilita a inspeção de dados em tempo real – por exemplo, filtrar rapidamente por “Tag=Viagem” e “Ano=2025” para ver todas as despesas de viagem em 2025, com totais. A interface suporta consultas complexas através desta barra de filtro ou via página de Consulta (Query), onde pode executar diretamente consultas BQL.
- Suporte a Múltiplos Arquivos e Consolidação: O Fava pode carregar múltiplos arquivos Beancount simultaneamente (útil se separar livros-razão) e alternar entre eles. Também pode consolidá-los se necessário (por exemplo, visualizar livros-razão pessoais e empresariais em conjunto).
- Introdução e Edição de Dados: Excecionalmente, o Fava não é apenas de leitura – possui um editor e um formulário de introdução de transações. Pode adicionar novas transações através de um formulário web (ele inserirá a entrada no seu arquivo .beancount). Também pode abrir o arquivo de origem num editor externo a partir do Fava. O Fava suporta inclusivamente atalhos de teclado “estilo Gmail” (pressione
?na UI para os ver) para utilizadores avançados. Isto transforma o Fava num sistema de contabilidade leve onde pode introduzir e visualizar dados na mesma interface. - Relatórios e Detalhamento de Contas: O Fava fornece relatórios contabilísticos padrão: Demonstração de Resultados (Ganhos e Perdas), Balanço Patrimonial, Balancete de Verificação e uma lista de posições para investimentos. O Balanço Patrimonial e a Demonstração de Resultados são interativos – pode clicar numa conta para detalhar as suas informações ou alternar entre a visualização ao custo vs valor de mercado para ativos. O Fava também mostra “ganhos não realizados” para investimentos se tiver dados de preços. Gera uma vista de diário de todas as entradas e permite filtrar esse diário por vários critérios (excelente para encontrar transações específicas).
- Gestão de Documentos: Se anexar recibos ou extratos, o Fava ajuda a organizá-los. O Beancount possui o conceito de uma pasta de documentos, e o Fava permite arrastar e largar arquivos em contas ou transações – ele irá armazená-los e adicionar uma entrada de documento no seu livro-razão. Isto é útil para manter documentos de suporte vinculados aos dados do seu livro-razão.
- Personalização via Extensões: O Fava pode ser estendido com plugins (escritos em Python) para adicionar novos relatórios ou funcionalidades. Algumas extensões já vêm incluídas (ex.: um relatório de lista de portfólio para investimentos). Discutiremos extensões personalizadas mais tarde, mas essencialmente o design do Fava permite injetar novas páginas, e até JavaScript personalizado, através da sua API de extensões. Isto significa que, se uma determinada análise ou dashboard não estiver integrada, um utilizador avançado pode adicioná-la.
- Desempenho: O Fava é eficiente – recarrega os dados em memória e serve as páginas rapidamente. A análise (parsing) subjacente do Beancount é bastante rápida (otimizada em C++ na versão mais recente), pelo que mesmo livros-razão grandes carregam num segundo ou dois. Na prática, o Fava consegue lidar com livros-razão pessoais de muitos anos, embora arquivos extremamente grandes (dezenas de milhares de transações) possam beneficiar de alguma otimização (ex.: arquivar entradas antigas).
- Acesso Web e Mobilidade: Ao executar o Fava num servidor ou mesmo no seu portátil, pode aceder às suas finanças a partir de qualquer navegador. Alguns utilizadores alojam o Fava num servidor privado ou Raspberry Pi para poderem verificar as suas finanças em qualquer lugar (possivelmente protegendo-o com uma palavra-passe ou VPN, uma vez que o Fava não possui autenticação integrada). Isto dá-lhe essencialmente uma “aplicação web” auto-hospedada para as suas finanças, sem ceder os seus dados a terceiros.
Em resumo, o Beancount fornece uma base robusta para uma contabilidade transparente e baseada em texto, com regras rigorosas de partidas dobradas e suporte multimoeda. O Fava baseia-se nisso, oferecendo uma interface acessível com insights imediatos (relatórios, gráficos) e a capacidade de interagir com os seus dados. Juntos, formam um sistema de contabilidade e análise altamente flexível que o utilizador controla de ponta a ponta.
Análises em Tempo Real (ou Quase em Tempo Real) com Beancount & Fava
Alcançar análises em tempo real ou quase em tempo real com o Beancount e o Fava envolve automatizar o fluxo de dados para o seu livro razão e garantir que as ferramentas exibam informações atualizadas. Por padrão, o Beancount é um processo em lote (você adiciona entradas ao arquivo e depois visualiza os relatórios), e o Fava detectará alterações e solicitará uma atualização. No entanto, com a configuração correta, você pode otimizar as atualizações para que novas transações e mudanças apareçam quase instantaneamente.
Detecção de Alterações de Arquivo: O Fava monitora o arquivo do livro razão em busca de alterações. Se você editar o arquivo .beancount (ou arquivos incluídos) em um editor, o Fava exibirá um banner "Alterações detectadas – clique para recarregar". Ao clicar (ou pressionar recarregar), ele recarrega os dados e atualiza a visualização. Na prática, esse recarregamento é muito rápido (geralmente menos de um segundo para livros razão típicos). Isso significa que o Fava pode servir como um painel de controle ao vivo se o seu arquivo de livro razão estiver sendo atualizado com frequência. (No modo de depuração, o Fava pode até recarregar automaticamente após alterações no arquivo, embora, por padrão, ele aguarde a confirmação do usuário para evitar interromper a sua visualização).
Pipeline de Importação/Atualização Contínua: Para obter dados em tempo real, você precisa automatizar a adição de transações ao arquivo do Beancount. Existem algumas estratégias comuns:
-
Tarefas de Importação Agendadas (Cron): Muitos usuários configuram uma tarefa cron (ou tarefa agendada) para buscar novas transações de instituições financeiras periodicamente (por exemplo, todas as noites ou a cada hora) e anexá-las ao livro razão. Por exemplo, você pode usar os plugins de importação do Beancount para obter as transações bancárias mais recentes via API ou download OFX. Um usuário do Beancount construiu um pipeline de automação de tal forma que seus livros se atualizam sozinhos: "ver meu livro de contabilidade se atualizando sem eu tocá-lo em um formato aberto me traz pura alegria". Isso foi alcançado conectando-se a APIs bancárias e agendando atualizações regulares. Ferramentas como o
bean-fetch(para OFX) ou scripts Python personalizados usando APIs bancárias (ex: Plaid) podem ser executados em um cronograma e gravar novas entradas no livro razão. Após cada importação agendada, se você tiver o Fava em execução, basta atualizar o Fava para ver os novos dados. -
Observadores de Arquivo (File Watchers) e Gatilhos: Em vez de cronogramas baseados em tempo, você pode usar observadores de arquivo para reagir a eventos. Por exemplo, se o seu banco puder enviar por e-mail um extrato diário ou se você colocar um CSV em uma pasta, um script poderá detectar esse arquivo (usando
inotifyno Linux ou similar) e executar imediatamente a rotina de importação, sinalizando em seguida para o Fava recarregar. Embora o Fava ainda não suporte o envio de um recarregamento ao vivo para o navegador, você teria pelo menos os dados atualizados para que, na próxima vez que verificar a página ou clicar em recarregar, eles estejam atuais. Alguns projetos da comunidade vão além: para o ledger (um "primo" do Beancount), um usuário criou um pequeno servidor que expõe dados do ledger para o Grafana em tempo real, mostrando que uma abordagem semelhante pode ser tomada com o Beancount – essencialmente construindo um daemon que alimenta seus painéis de controle continuamente. -
Integração Direta via API: Em vez de passar por arquivos, usuários avançados podem se conectar diretamente a APIs bancárias (como Plaid ou APIs regionais de Open Banking) para extrair transações com frequência. Um indivíduo motivado pode programar importações "ao vivo" em um loop (com a limitação de taxa apropriada) – efetivamente consultando o banco em busca de novos dados a cada poucos minutos. Não há nada que o impeça de "se inscrever na API do Plaid e fazer a mesma [automação] localmente". Cada nova transação pode ser anexada ao arquivo do Beancount à medida que chega. Com essa abordagem, o Fava torna-se verdadeiramente um painel em tempo real para suas contas, rivalizando com o feed atualizado de aplicativos comerciais.
Atualização de Dados no Fava: Uma vez que seus dados estejam sendo atualizados, fazer o Fava exibi-los é simples: uma atualização do navegador (F5) ou clicar no banner de recarregamento carregará o estado mais recente do livro razão. Se você preferir nem sequer clicar, executar o Fava com --debug habilita um recarregamento automático para desenvolvimento de extensões, que alguns usam para forçar recarregamentos imediatos de página em caso de alterações. Alternativamente, se você estiver construindo um front-end personalizado, poderia fazê-lo consultar uma pequena API que retorna o saldo mais recente ou algo do tipo do livro razão em um cronograma.
Cálculos Instantâneos: O processamento rápido do Beancount significa que, mesmo que você atualize seu arquivo de livro razão a cada poucos minutos, o tempo de resposta entre a busca de dados → atualização do arquivo → recarregamento do Fava é rápido. Por exemplo, um usuário observa que recarregar o Fava após editar o arquivo "é quase imperceptível... definitivamente menos de um segundo" para livros razão de tamanho razoável. Assim, você pode manter uma janela do Fava aberta e apertar o botão de atualizar periodicamente para simular um painel ao vivo. (Para uma experiência verdadeiramente ao vivo, poder-se-ia criar um pequeno script para atualizar automaticamente o navegador ou usar o recurso de atualização a cada N segundos do navegador).
Reconciliação e Alertas: Para confiar nos dados em tempo real, você também deseja reconciliar saldos com frequência. O Beancount facilita isso com asserções de saldo e um "indicador de atualização". Na verdade, o Fava oferece indicadores coloridos ao lado das contas se você as marcar com determinados metadados (ex: você pode marcar uma conta com o metadado fava-uptodate e o Fava a colorirá de vermelho/amarelo/verde com base no fato de a última entrada ser uma verificação de saldo recente). Isso pode ser usado para ver rapidamente se o saldo de uma conta no livro razão corresponde ao extrato mais recente do banco. Em uma configuração de tempo quase real, você pode automatizar verificações de saldo diárias (assim, a cada manhã, o livro razão tem o saldo de fechamento de ontem do banco para cada conta). O indicador do Fava diria então se sua importação automática esqueceu algo ou se há uma discrepância, proporcionando confiança de que os dados "ao vivo" que você vê são precisos.
Exemplo de Automação: Suponha que você queira atualizações diárias de fluxo de caixa. Você pode configurar uma tarefa cron para rodar às 3h todas as noites: ela executa um script Python que usa a API do seu banco para buscar as transações do último dia, as grava em import_today.beancount e, em seguida, anexa esse arquivo ao seu livro razão principal. Ela também grava uma asserção de saldo para o final do dia. Quando você acorda, abre o Fava – ele mostra todas as transações até ontem, e você vê as receitas/despesas do mês atual atualizadas. Se você fizer um gasto durante o dia, pode adicioná-lo manualmente (através do formulário de nova transação do Fava no seu celular, por exemplo) ou esperar pela importação noturna. Essa abordagem híbrida (majoritariamente automatizada, com capacidade de adição manual ad-hoc) oferece uma imagem próxima do tempo real. Outra abordagem é deixar a página do Journal do Fava aberta e usá-la como um registro: conforme você gasta, registra rapidamente a transação (como preencher um canhoto de cheque) – então você é o feed em tempo real. Isso é mais manual, mas alguns usuários apreciam a consciência que isso traz. Para atualizações verdadeiramente em streaming sem etapas manuais, você precisará investir em scripts e possivelmente usar APIs de terceiros, conforme discutido.
Em resumo, ao combinar a automação de importação do Beancount com a atualização rápida do Fava, você pode obter dados financeiros em tempo quase real. Pode não ser "tão fácil quanto apertar um botão" para alcançar o mesmo nível de feed ao vivo de um serviço como o QuickBooks (que puxa automaticamente os feeds bancários), mas é possível – e, mais importante, você mantém o controle total e a transparência do processo. Como observou um defensor da contabilidade em texto simples, um pequeno esforço inicial pode gerar um sistema automatizado que é "muito melhor que as soluções comerciais e muito mais flexível e extensível". Na seção seguinte, veremos como as capacidades de visualização do Fava permitem que você entenda imediatamente esses dados atualizados, transformando transações brutas em insights.