Розмістіть майбутні транзакції в окремому сценарному реєстрі, щоб прогнозувати грошові потоки, витрати та борг у ваших фінансових звітах. Цей посібник використовує звичайні записи 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 USD2. Обмежте кількість подій і відокремте основну суму кредиту від відсотків
Припустимо, автокредит має 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 USD | 10 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 USD | 2 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для фактичних результатів. Коли платіж відбувається, записуйте там його фактичну суму та видаляйте відповідне припущення з наступного сценарію, щоб не рахувати його двічі. - Перегляньте горизонт: зберігайте датований знімок, коли зберігаєте сценарій. Продовження його кінцевої дати означає додавання конкретних подій і повторну перевірку розподілу кредиту, дат скасування та округлення.