Pular para o conteúdo principal

Prevendo Transações Futuras

Construa um cenário separado e validado no Beancount com receitas, despesas e pagamentos de empréstimos com datas futuras.

Coloque transações com datas futuras em um razão de cenário separado para projetar caixa, despesas e dívidas em seus relatórios financeiros. Este tutorial usa lançamentos comuns do Beancount e um período de planejamento fixo. Seus livros realizados permanecem separados das suas suposições.

Compatibilidade, verificada em 7 de setembro de 2026: os exemplos foram testados com o Beancount padrão 3.2.3, beanquery 0.2.0 e Fava 1.30.16. Essa versão do Fava não inclui um plugin de previsão. A fonte personalizada do Beancount.io contém uma implementação fava.plugins.forecast; esse é um ambiente de execução diferente, e a disponibilidade da fonte não estabelece a versão implantada na sua conta. O fluxo de trabalho portátil abaixo não precisa de extensão.

Etapa 1: Habilitar o Plugin de Previsão

Pule a ativação do plugin para este fluxo de trabalho. Adicionar plugin "fava.plugins.forecast" à instalação padrão testada produz um erro de importação. Para configuração geral de plugins, veja o guia de plugins; um módulo deve realmente estar instalado antes que um razão possa carregá-lo.

Pré-requisitos: um ambiente Python local com beancount==3.2.3, beanquery==0.2.0 e fava==1.30.16 instalados. Siga a configuração fixa do Fava para criar esse ambiente. Salve todos os três arquivos abaixo no mesmo diretório e execute os comandos lá.

Crie books.beancount com este exemplo completo de instantâneo. Sua data base é 31 de dezembro de 2023, após a transação de abertura. A conta Checking contém 10.000,00 USD e o principal do empréstimo do carro em aberto é 14.400,00 USD. O Patrimônio Líquido equilibra este instantâneo simplificado.

; books.beancount — realized balances as of 2023-12-31
option "operating_currency" "USD"
2023-12-31 open Assets:Checking USD
2023-12-31 open Liabilities:Auto-Loan USD
2023-12-31 open Equity:Opening-Balances USD
2023-12-31 open Income:Salary USD
2023-12-31 open Expenses:Housing:Rent USD
2023-12-31 open Expenses:Food:Groceries USD
2023-12-31 open Expenses:Health:Gym USD
2023-12-31 open Expenses:Insurance:Auto USD
2023-12-31 open Expenses:Transportation:Interest USD
 
2023-12-31 * "Opening snapshot"
  Assets:Checking                  10000.00 USD
  Liabilities:Auto-Loan            -14400.00 USD
  Equity:Opening-Balances           4400.00 USD

Crie scenario.beancount como o ponto de entrada do planejamento. Seus dois includes carregam o instantâneo realizado e as suposições que você escreverá a seguir. O Beancount lê os caminhos de include relativos a este arquivo.

; scenario.beancount — planning entry point
option "title" "January 2024 planning scenario"
option "operating_currency" "USD"
include "books.beancount"
include "scenario-2024-01.beancount"

Nunca inclua scenario.beancount ou scenario-2024-01.beancount a partir de books.beancount. O ponto de entrada realizado não deve carregar transações planejadas, mesmo que suas datas já tenham passado.

Etapa 2: Criar uma Transação de Previsão

Crie scenario-2024-01.beancount com esta primeira entrada. Adicione os quatro blocos de cenário posteriores a esse mesmo arquivo uma vez cada. Esses são blocos de transações contextuais: suas declarações de contas vêm de books.beancount, e você os valida através de scenario.beancount.

2024-01-01 ! "Scenario: January rent" #forecast
  Expenses:Housing:Rent              2500.00 USD
  Assets:Checking                  -2500.00 USD

A flag ! marca uma transação para revisão; #forecast é uma tag de transação comum. Nenhuma delas cria recorrências ou exclui transações de relatórios. O ponto de entrada separado controla a inclusão. Use esta tag apenas em entradas planejadas para que você possa identificá-las durante a revisão.

Entendendo a Sintaxe de Previsão

Cada entrada datada representa uma ocorrência. Narração como [MONTHLY] não tem efeito de recorrência no Beancount padrão. As instruções mais antigas UNTIL, REPEAT e SKIP pertencem a uma convenção de plugin personalizado, não ao núcleo da linguagem. Este fluxo de trabalho expressa suas datas pretendidas explicitamente.

O cenário cobre 1 a 31 de janeiro de 2024, inclusive. Todas as datas planejadas são posteriores à data base fixa e anteriores a 1 de fevereiro. Essas datas históricas tornam o exemplo reproduzível; nada depende da data de hoje. Ao adaptá-lo, escolha uma nova data base e um horizonte finito antes de adicionar entradas.

Frequência

Escreva uma transação para cada data de vencimento dentro do período de planejamento. O exemplo completo de janeiro usa estas regras:

ItemAgendaDatas incluídas em janeiro
AluguelMensal, no dia 11 de janeiro
MercadoA cada 7 dias, a partir de 1 de janeiro1, 8, 15, 22, 29 de janeiro
SalárioA cada 14 dias, a partir de 5 de janeiro5, 19 de janeiro
AcademiaMensal, no dia 1515 de janeiro
Pagamento do empréstimoMensal, no dia 2525 de janeiro
Seguro do carroA cada 3 meses civis, a partir de 15 de janeiro15 de janeiro; o próximo pagamento em 15 de abril está fora deste horizonte

Para outros planos diários ou anuais, enumere as datas de vencimento reais da mesma forma. Defina uma política para datas como dia 31 ou 29 de fevereiro antes de estender uma agenda. Não os mova silenciosamente nem presuma que todos os meses têm o mesmo número de dias.

Condições (Opcional)

1. Defina uma data de término explicitamente

Suponha que a assinatura da academia termine em 31 de dezembro de 2024. Sua ocorrência em janeiro está abaixo. O cenário de janeiro para em 31 de janeiro, então não contém entradas de fevereiro a dezembro. Se você estender o horizonte, escreva cada pagamento posterior até 15 de dezembro e pare aí.

2024-01-15 ! "Scenario: gym membership" #forecast
  Expenses:Health:Gym                  80.00 USD
  Assets:Checking                    -80.00 USD

2. Limite ocorrências e separe principal de juros do empréstimo

Suponha que o empréstimo do carro tenha 36 pagamentos restantes. Inclua apenas o primeiro pagamento neste horizonte de janeiro. Para esta parcela hipotética, assuma que seu pagamento em dinheiro de 450,00 USD consiste em 400,00 USD de principal e 50,00 USD de juros. Essas são suposições de cenário; nenhum pagamento posterior é gerado.

2024-01-25 ! "Scenario: car loan payment 1 of 36" #forecast
  Liabilities:Auto-Loan               400.00 USD
  Expenses:Transportation:Interest     50.00 USD
  Assets:Checking                   -450.00 USD

O lançamento de passivo positivo reduz o saldo da dívida de −14.400,00 USD para −14.000,00 USD. O caixa diminui em 450,00 USD, e apenas 50,00 USD é uma despesa. Os lançamentos平衡 porque 400.00 + 50.00 - 450.00 = 0. Um lançamento de passivo negativo aumentaria a dívida.

Não repita a mesma divisão principal/juros para todos os 36 pagamentos sem uma agenda de apoio. Os juros futuros e o pagamento final podem diferir. Use a tabela de amortização do credor ao estender este exemplo; veja amortização para a distinção entre reconhecimento de despesas e reembolso de dívida.

3. Escreva intervalos irregulares como datas reais

Para um salário quinzenal a partir de 5 de janeiro, as datas de janeiro são 5 e 19 de janeiro. A próxima ocorrência é 2 de fevereiro, fora deste cenário. Quinzenal significa a cada 14 dias, não duas vezes por mês civil.

2024-01-05 ! "Scenario: salary" #forecast
  Assets:Checking                   3000.00 USD
  Income:Salary                    -3000.00 USD
 
2024-01-19 ! "Scenario: salary" #forecast
  Assets:Checking                   3000.00 USD
  Income:Salary                    -3000.00 USD

Exemplo Prático: Um Orçamento Mensal

Complete seu orçamento mensal anexando as entradas de mercado e seguro do carro abaixo a scenario-2024-01.beancount. Junto com aluguel, academia, pagamento do empréstimo e ambas as entradas de salário acima, isso produz 11 transações planejadas.

2024-01-01 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-08 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-15 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-22 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-29 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-15 ! "Scenario: quarterly car insurance" #forecast
  Expenses:Insurance:Auto             450.00 USD
  Assets:Checking                   -450.00 USD

Valide ambos os pontos de entrada e, em seguida, consulte seus saldos finais. date < 2024-02-01 inclui todos os lançamentos de janeiro. A consulta dos livros usa o limite fixo da data base date < 2024-01-01.

bea --file books.beancount check
bea --file scenario.beancount check
bea --file books.beancount query "SELECT account, sum(position) WHERE date < 2024-01-01 GROUP BY account ORDER BY account"
bea --file scenario.beancount query "SELECT account, sum(position) WHERE date < 2024-02-01 GROUP BY account ORDER BY account"

Ambos os comandos bea check devem terminar com sucesso. Reconcilie os resultados da consulta com estes cálculos independentes:

ResultadoLivros realizados, 31 de dezembroCenário de janeiro, 31 de janeiro
Checking10.000,00 USD10.000 + 6.000 − 2.500 − 750 − 80 − 450 − 450 = 11.770,00 USD
Saldo do empréstimo−14.400,00 USD−14.400 + 400 = −14.000,00 USD
Lançamento de receita de salário0,00 USD−6.000,00 USD
Total de lançamentos de despesas0,00 USD2.500 + 750 + 80 + 450 + 50 = 3.830,00 USD

O lucro projetado de janeiro é 2.170,00 USD: 6.000 de receita menos 3.830 de despesas. O Checking aumenta em 1.770,00 USD porque o reembolso adicional de 400 do principal reduz a dívida em vez do lucro.

Abra o cenário no Fava padrão:

fava scenario.beancount

Defina o filtro de Tempo do Fava para 2024-01. Sua filtragem de tempo carrega saldos anteriores de ativos e passivos para o período e remove entradas posteriores. Verifique o balanço patrimonial para 11.770,00 USD em caixa e 14.000,00 USD em dívida em aberto. A demonstração de resultados deve mostrar 2.170,00 USD de lucro projetado. Abrir books.beancount em vez disso dá o instantâneo realizado.

Solução de Problemas e Melhores Práticas

  • Erro de importação para o plugin antigo: remova a linha de ativação ao usar este fluxo de trabalho portátil. Uma instalação padrão do Fava não fornece os módulos personalizados do Beancount.io.
  • Conta desconhecida ou arquivo de include ausente: salve todos os três arquivos no mesmo diretório, copie as aberturas e valide scenario.beancount em vez do fragmento de cenário sozinho.
  • Previsões ausentes no Fava: carregue scenario.beancount e defina o filtro de Tempo para 2024-01. Uma tag ou narração não gera entradas.
  • Saldos inesperados: compare as 11 datas e valores planejados com a tabela. Carregar uma ocorrência duas vezes dobra seu efeito financeiro, mesmo quando todas as transações se平衡.
  • Mantenha as previsões separadas: flags, tags e datas futuras comuns não impedem que entradas afetem um relatório sem filtro. Use books.beancount para resultados reais. Quando um pagamento acontecer, registre seu valor real lá e remova a suposição correspondente do seu próximo cenário para evitar contá-lo duas vezes.
  • Revise o horizonte: preserve um instantâneo datado ao salvar um cenário. Estender sua data de término significa adicionar ocorrências específicas e verificar divisões de empréstimo, datas de cancelamento e arredondamentos novamente.

Fonte: https://beancount.io/pt/docs/Tips/forecast-plugin