Перейти до основного вмісту

Прогнозування майбутніх транзакцій

Створіть окремий перевірений сценарний реєстр Beancount із майбутніми доходами, витратами та платежами за кредитом.

Розмістіть майбутні транзакції в окремому сценарному реєстрі, щоб прогнозувати грошові потоки, витрати та борг у ваших фінансових звітах. Цей посібник використовує звичайні записи Beancount та фіксований плановий період. Ваші фактичні книги залишаються окремими від ваших припущень.

Сумісність, перевірено 7 вересня 2026 року: приклади тестувалися зі стандартним Beancount 3.2.3, beanquery 0.2.0 та Fava 1.30.16. Ця версія Fava не включає плагін прогнозування. Власний вихідний код Beancount.io містить реалізацію fava.plugins.forecast; це інше середовище виконання, і наявність вихідного коду не підтверджує версію, розгорнуту у вашому обліковому записі. Нижченаведений переносний робочий процес не потребує жодних розширень.

Крок 1: Увімкнення плагіна прогнозування

Пропустіть активацію плагіна для цього робочого процесу. Додавання plugin "fava.plugins.forecast" до перевіреної стандартної інсталяції призведе до помилки імпорту. Загальні налаштування плагінів дивіться в посібнику з плагінів; модуль має бути фактично встановлений, перш ніж реєстр зможе його завантажити.

Передумови: локальне середовище Python із встановленими beancount==3.2.3, beanquery==0.2.0 та fava==1.30.16. Дотримуйтесь фіксованого налаштування Fava, щоб створити таке середовище. Збережіть усі три файли нижче в одному каталозі та виконуйте команди там.

Створіть books.beancount із цим повним прикладом знімка. Його дата відліку — 31 грудня 2023 року, після вступної транзакції. На чековому рахунку 10 000,00 USD, а непогашена основна сума автокредиту становить 14 400,00 USD. Власний капітал збалансовує цей спрощений вступний знімок.

; 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

Створіть scenario.beancount як точку входу планування. Його два включення завантажують фактичний знімок і припущення, які ви напишете далі. Beancount читає шляхи включення відносно цього файлу.

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

Ніколи не включайте scenario.beancount або scenario-2024-01.beancount із books.beancount. Фактична точка входу не повинна завантажувати заплановані транзакції, навіть після того, як їх дати минули.

Крок 2: Створення прогнозної транзакції

Створіть scenario-2024-01.beancount із цим першим записом. Додайте чотири наступні блоки сценарію до цього ж файлу по одному разу кожен. Це контекстні блоки транзакцій: їхні оголошення рахунків надходять із books.beancount, і ви перевіряєте їх через scenario.beancount.

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

Прапорець ! позначає транзакцію для перегляду; #forecast — це звичайний тег транзакції. Жоден із них не створює повторень і не виключає транзакцію зі звітів. Окрема точка входу контролює включення. Використовуйте цей тег лише для запланованих записів, щоб мати змогу їх ідентифікувати під час перегляду.

Розуміння синтаксису прогнозування

Кожен запис із датою представляє одну подію. Текст опису, наприклад [MONTHLY], не має ефекту повторення у стандартному Beancount. Старіші інструкції UNTIL, REPEAT і SKIP належать до конвенції власного плагіна, а не до основної мови. Цей робочий процес явно вказує їхні передбачувані дати.

Сценарій охоплює період з 1 по 31 січня 2024 року включно. Усі заплановані дати знаходяться після фіксованої дати відліку та до 1 лютого. Ці історичні дати роблять приклад відтворюваним; нічого не залежить від сьогоднішньої дати. Адаптуючи його, оберіть нову дату відліку та кінцевий горизонт перед додаванням записів.

Періодичність

Запишіть одну транзакцію для кожної дати платежу в межах планового періоду. Повний січневий приклад використовує такі правила:

ПозиціяГрафікДати, включені в січні 2024 року
ОрендаЩомісяця, 1-го числа1 січня
ПродуктиКожні 7 днів, починаючи з 1 січня1, 8, 15, 22, 29 січня
ЗарплатаКожні 14 днів, починаючи з 5 січня5, 19 січня
СпортзалЩомісяця, 15-го числа15 січня
Платіж за кредитомЩомісяця, 25-го числа25 січня
АвтострахуванняКожні 3 календарні місяці, починаючи з 15 січня15 січня; наступний платіж 15 квітня — поза цим горизонтом

Для інших щоденних або щорічних планів перелічіть фактичні дати платежів так само. Встановіть політику для таких дат, як 31-ше число або 29 лютого, перш ніж продовжувати графік. Не переносьте їх мовчки та не припускайте, що кожен місяць має однакову кількість днів.

Умови (необов’язково)

1. Встановіть кінцеву дату явно

Припустимо, членство у спортзалі закінчується 31 грудня 2024 року. Його січнева подія наведена нижче. Січневий сценарій зупиняється 31 січня, тому він не містить записів за лютий–грудень. Якщо ви розширюєте горизонт, записуйте кожен наступний платіж до 15 грудня та зупиняйтеся там.

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

2. Обмежте кількість подій і відокремте основну суму кредиту від відсотків

Припустимо, автокредит має 36 платежів, що залишилися. Включіть лише перший платіж у цей січневий горизонт. Для цього гіпотетичного внеску припустімо, що грошовий платіж у розмірі 450,00 USD складається з 400,00 USD основної суми та 50,00 USD відсотків. Це припущення сценарію; жодні подальші внески не генеруються.

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

Позитивна проводка за зобов’язанням зменшує залишок боргу з −14 400,00 USD до −14 000,00 USD. Готівка зменшується на 450,00 USD, і лише 50,00 USD є витратою. Проводки збалансовані, оскільки 400.00 + 50.00 - 450.00 = 0. Негативна проводка за зобов’язанням збільшила б борг.

Не повторюйте той самий розподіл основної суми та відсотків для всіх 36 платежів без підтверджувального графіка. Майбутні відсотки та остаточний платіж можуть відрізнятися. Використовуйте графік платежів кредитора, розширюючи цей приклад; дивіться амортизацію для розрізнення визнання витрат і погашення боргу.

3. Записуйте нерегулярні інтервали як фактичні дати

Для двотижневої зарплати, що починається 5 січня, січневі дати — 5 і 19 січня. Наступна подія — 2 лютого, поза цим сценарієм. Двотижневий означає кожні 14 днів, а не двічі на календарний місяць.

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

Практичний приклад: щомісячний бюджет

Завершіть ваш щомісячний бюджет, додавши записи про продукти та автострахування нижче до scenario-2024-01.beancount. Разом із орендою, спортзалом, платежем за кредитом та обома записами зарплати вище це дає 11 запланованих транзакцій.

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

Перевірте обидві точки входу, а потім запитайте їхні кінцеві залишки. date < 2024-02-01 включає всі січневі проводки. Запит для фактичних книг використовує фіксовану межу відліку 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"

Обидві команди bea check мають завершитися успішно. Звірте результати запитів із цими незалежними розрахунками:

РезультатФактичні книги, 31 грудняСічневий сценарій, 31 січня
Чековий рахунок10 000,00 USD10 000 + 6 000 − 2 500 − 750 − 80 − 450 − 450 = 11 770,00 USD
Залишок кредиту−14 400,00 USD−14 400 + 400 = −14 000,00 USD
Проводка доходу від зарплати0,00 USD−6 000,00 USD
Загальні проводки витрат0,00 USD2 500 + 750 + 80 + 450 + 50 = 3 830,00 USD

Прогнозований прибуток за січень становить 2 170,00 USD: 6 000 доходу мінус 3 830 витрат. Чековий рахунок збільшується на 1 770,00 USD, оскільки додаткові 400 основної суми зменшують борг, а не прибуток.

Відкрийте сценарій у стандартній Fava:

fava scenario.beancount

Встановіть фільтр часу Fava на 2024-01. Його фільтрація за часом переносить попередні залишки активів і зобов’язань у період та видаляє пізніші записи. Перевірте балансовий звіт на 11 770,00 USD готівки та 14 000,00 USD непогашеного боргу. Звіт про прибутки та збитки має показати 2 170,00 USD прогнозованого прибутку. Відкриття books.beancount натомість дає фактичний знімок.

Усунення несправностей і найкращі практики

  • Помилка імпорту старого плагіна: видаліть рядок активації, використовуючи цей переносний робочий процес. Стандартна інсталяція Fava не надає власних модулів Beancount.io.
  • Невідомий рахунок або відсутній файл включення: збережіть усі три файли в одному каталозі, скопіюйте оголошення рахунків і перевіряйте scenario.beancount, а не лише фрагмент сценарію.
  • Прогнози відсутні у Fava: завантажте scenario.beancount і встановіть фільтр часу на 2024-01. Тег або опис не генерують записи.
  • Неочікувані залишки: порівняйте 11 запланованих дат і сум із таблицею. Завантаження події двічі подвоює її фінансовий ефект, навіть якщо кожна транзакція збалансована.
  • Тримайте прогнози окремо: звичайні прапорці, теги та майбутні дати не запобігають впливу записів на нефільтрований звіт. Використовуйте books.beancount для фактичних результатів. Коли платіж відбувається, записуйте там його фактичну суму та видаляйте відповідне припущення з наступного сценарію, щоб не рахувати його двічі.
  • Перегляньте горизонт: зберігайте датований знімок, коли зберігаєте сценарій. Продовження його кінцевої дати означає додавання конкретних подій і повторну перевірку розподілу кредиту, дат скасування та округлення.

Джерело: https://beancount.io/uk/docs/Tips/forecast-plugin