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

Повний посібник з керування рахунками в Beancount та Fava

· 12 хв. читання
Mike Thrift
Mike Thrift
Marketing Manager

План рахунків -- це основа вашого облікового файлу Beancount. Добре продумана ієрархія рахунків робить кожен звіт зрозумілішим, кожен запит швидшим, а кожен податковий сезон менш болісним. У цьому посібнику ми розглянемо все, що потрібно знати про створення, перегляд, оновлення та закриття рахунків у Beancount та Fava -- від основ для початківців до просунутих шаблонів.

П'ять типів рахунків

Beancount використовує стандартну модель подвійного запису з рівно п'ятьма кореневими типами рахунків:

ТипПризначенняЗнак за замовчуваннямЗвіт
AssetsРесурси, якими ви володієте (готівка, інвестиції, нерухомість)Додатний (дебет)Баланс
LiabilitiesБорги, які ви маєте (кредитні картки, позики, іпотека)Від'ємний (кредит)Баланс
EquityВласний капітал, нерозподілений прибуток, початкові залишкиВід'ємний (кредит)Баланс
IncomeДжерела доходу (зарплата, відсотки, дивіденди)Від'ємний (кредит)Звіт про прибутки та збитки
ExpensesКатегорії витрат (харчування, оренда, комунальні послуги)Додатний (дебет)Звіт про прибутки та збитки

Основне бухгалтерське рівняння завжди виконується:

Assets + Expenses + Equity + Income + Liabilities = 0

Корисне правило: якщо суми мають значення лише за певний період часу (наприклад, "Скільки я витратив на харчування цього місяця?"), використовуйте Income або Expenses. Якщо вони відображають поточний залишок (наприклад, "Скільки грошей на моєму розрахунковому рахунку?"), використовуйте Assets або Liabilities.

Правила іменування рахунків

Назви рахунків у Beancount -- це ієрархічні ідентифікатори, розділені двокрапкою. Правила такі:

  • Назва повинна починатися з одного з п'яти кореневих типів: Assets, Liabilities, Equity, Income, Expenses
  • Кожен компонент починається з великої літери або цифри
  • Компоненти можуть містити літери, цифри та дефіси (без пробілів або підкреслень)
  • Потрібно щонайменше два компоненти (наприклад, Expenses:Food, а не просто Expenses)
  • Двокрапки (:) розділяють рівні ієрархії
; Правильні назви рахунків
Assets:US:BofA:Checking
Liabilities:CA:RBC:CreditCard
Equity:Retained-Earnings
Income:US:Acme:Salary
Expenses:Food:Groceries
Assets:Crypto:BTC-Holdings

; Неправильні назви рахунків
assets:checking ; кореневий тип з малої літери
Assets:my checking ; пробіли не дозволяються
Expenses ; лише один компонент

Рекомендований шаблон іменування для балансових рахунків:

Тип : Країна : Установа : Рахунок : Підрахунок

Наприклад: Assets:US:Vanguard:401k:VTSAX або Liabilities:US:Chase:Sapphire.

Для рахунків витрат та доходів використовуйте іменування за категоріями:

Expenses:Food:Groceries
Expenses:Housing:Utilities:Electric
Income:US:Employer:Salary

Налаштування кореневих назв

Ви можете перейменувати п'ять кореневих типів для локалізації або за особистими вподобаннями:

option "name_assets"       "Actifs"
option "name_liabilities" "Passifs"
option "name_equity" "Capital"
option "name_income" "Revenus"
option "name_expenses" "Depenses"

Створення рахунків (директива Open)

Кожен рахунок повинен бути оголошений за допомогою директиви open перед тим, як ви зможете проводити транзакції. Повний синтаксис:

YYYY-MM-DD open Account [ConstraintCurrency,...] ["BookingMethod"]

Базове відкриття

2014-05-01 open Assets:US:BofA:Checking

З обмеженнями валюти

Обмеження валют запобігає випадковому проведенню операцій у неправильній валюті:

2014-05-01 open Assets:US:BofA:Checking       USD
2014-05-01 open Assets:Cash USD,CAD,EUR
2012-03-01 open Assets:US:ETrade:Main:ITOT ITOT

З методами обліку лотів

Для інвестиційних рахунків вказуйте, як підбираються лоти при продажу:

2014-02-11 open Assets:US:ETrade:IVV   IVV   "FIFO"
2014-02-11 open Assets:US:Schwab:AAPL AAPL "LIFO"
2014-02-11 open Assets:US:Fidelity GOOG "STRICT"

Доступні методи обліку лотів:

МетодПоведінка
"STRICT"За замовчуванням. Вимагає точного зазначення лоту; помилка при неоднозначності
"FIFO"Перший прийшов -- перший пішов: спочатку зменшує найстаріші лоти
"LIFO"Останній прийшов -- перший пішов: спочатку зменшує найновіші лоти
"AVERAGE"Об'єднує всі лоти та перераховує середню вартість
"NONE"Без підбору лотів; будь-яка ціна приймається

З метаданими

2013-03-14 open Assets:US:BTrade:HOOLI
category: "taxable"
institution: "BTrade Corp"
account-number: "XX-1234-5678"

Стратегічний вибір дати відкриття

  • Використовуйте дату народження для універсальних рахунків, таких як Expenses:Groceries (це дасть вам суми за все життя)
  • Використовуйте дату початку роботи для рахунків доходу, пов'язаних з роботою
  • Використовуйте фактичну дату створення рахунку для рахунків у конкретних установах (банківські рахунки, кредитні картки)

Автоматичне відкриття за допомогою плагіна

Якщо ви хочете пропустити ручні директиви open під час прототипування:

plugin "beancount.plugins.auto_accounts"

Це автоматично генерує директиви open для будь-якого рахунку, на який є посилання в транзакціях. Однак це знижує виявлення помилок друку, тому не рекомендується для продакшн-використання.

Перегляд та запити рахунків

Використання bean-query (BQL)

# Список усіх рахунків із залишками
bean-query ledger.beancount "SELECT account, units(sum(position)) GROUP BY 1"

# Список лише рахунків витрат
bean-query ledger.beancount "SELECT account WHERE account ~ 'Expenses'"

# Виписка рахунку з поточним залишком
bean-query ledger.beancount \
"SELECT date, account, position, balance WHERE account ~ 'BofA:Checking'"

# Журнал для конкретного рахунку
bean-query ledger.beancount "JOURNAL 'Assets:US:BofA:Checking'"

Використання bean-report

# Пробний баланс (усі рахунки з кінцевими залишками)
bean-report ledger.beancount balances

# Балансовий звіт
bean-report ledger.beancount balsheet

# Звіт про прибутки та збитки
bean-report ledger.beancount income

# Журнал для конкретного рахунку
bean-report ledger.beancount journal -a Assets:US:BofA:Checking

Використання Fava

Fava надає багатий візуальний інтерфейс для дослідження рахунків:

  • Баланс: інтерактивне дерево всіх Assets, Liabilities та Equity
  • Звіт про прибутки та збитки: інтерактивне дерево всіх Income та Expenses
  • Сторінка рахунку: натисніть на назву будь-якого рахунку, щоб побачити вкладки "Журнал", "Зміни" та "Залишки"
  • Панель фільтрів: використовуйте регулярні вирази для відображення лише відповідних рахунків (наприклад, Assets:US)

Оновлення рахунків (перейменування та реорганізація)

У Beancount немає вбудованої директиви перейменування, але існує кілька підходів.

1. Пошук і заміна

Простий пошук і заміна працює, але будьте обережні -- Assets:Bank також збігатиметься з Assets:Bank:Cash. Використовуйте шаблони з урахуванням меж слів:

sed -i 's/Assets:US:OldBank:Checking/Assets:US:NewBank:Checking/g' *.beancount

2. Плагін rename_accounts

Пакет beancount_reds_plugins надає потужний плагін перейменування:

plugin "beancount_reds_plugins.rename_accounts.rename_accounts" "{
'Expenses:Taxes' : 'Income:Taxes',
'Assets:House:Capital-Improvements' : 'Expenses:House:Appliances',
}"

Цей плагін:

  • Використовує пошук за підрядком (Expenses:Taxes:Federal автоматично стає Income:Taxes:Federal)
  • Підтримує регулярні вирази зі зворотними посиланнями
  • Автоматично генерує директиви Open для перейменованих рахунків
  • Не змінює ваші вихідні файли -- лише змінює представлення в пам'яті
  • Може бути ввімкнений/вимкнений шляхом коментування рядка плагіна

3. Шаблон "Закрити та відкрити знову"

Для реальної міграції рахунків (наприклад, зміна банку):

; Старий рахунок
2010-01-01 open Assets:US:OldBank:Checking USD

; Закриваємо старий, відкриваємо новий
2024-06-15 close Assets:US:OldBank:Checking
2024-06-15 open Assets:US:NewBank:Checking USD

; Переводимо залишок
2024-06-15 * "Переказ до нового банку"
Assets:US:OldBank:Checking -5000.00 USD
Assets:US:NewBank:Checking 5000.00 USD

Закриття рахунків

Директива close позначає рахунок як більше неактивний:

2016-11-28 close Liabilities:CreditCard:CapitalOne

Що робить закриття

  • Генерує помилку, якщо будь-які проводки відбуваються після дати закриття
  • Фільтрує рахунок зі звітів поза його активним періодом
  • Повідомляє Fava приховати рахунок у деревоподібних переглядах (налаштовується)

Коли закривати рахунки

  • Коли ви закриваєте реальний банківський рахунок або кредитну картку
  • Коли ви змінюєте роботодавця
  • Коли ви консолідуєте або реорганізуєте план рахунків
  • Коли ви продаєте нерухомість або закриваєте інвестиційну позицію

Завжди перевіряйте нульовий залишок перед закриттям

Beancount не перевіряє нульовий залишок автоматично при закритті. Додайте ручну перевірку:

2023-12-31 balance Assets:US:OldBank:Savings  0.00 USD
2023-12-31 close Assets:US:OldBank:Savings

Організація плану рахунків

Починайте просто, вдосконалюйте з часом

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

Поширені шаблони організації

Шаблон 1: За установою (для балансових рахунків)

Assets:US:BofA:Checking
Assets:US:BofA:Savings
Assets:US:Vanguard:401k:VTSAX
Assets:US:Vanguard:401k:VBTLX
Liabilities:US:Amex:Platinum
Liabilities:US:Chase:Sapphire

Шаблон 2: За категорією (для рахунків доходів та витрат)

Expenses:Food:Groceries
Expenses:Food:Restaurant
Expenses:Food:Coffee
Expenses:Housing:Rent
Expenses:Housing:Insurance
Expenses:Housing:Utilities:Electric
Expenses:Housing:Utilities:Water
Expenses:Transport:Subway
Expenses:Transport:Gas
Expenses:Health:Medical
Expenses:Health:Dental

Шаблон 3: За географією (для фінансів у кількох країнах)

Assets:US:BofA:Checking
Assets:CA:RBC:Checking
Assets:UK:HSBC:Current
Income:US:Acme:Salary
Income:CA:Freelance:Consulting

Шаблон 4: За об'єктом або проєктом (для нерухомості або бізнесу)

Assets:US:Loft4530:Property
Income:US:Loft4530:Rental
Expenses:Loft4530:Electricity
Expenses:Loft4530:Insurance
Expenses:Loft4530:Maintenance

Шаблон 5: Дзеркальне відображення пов'язаних рахунків (однаковий компонент установи)

Assets:US:ETrade:Cash
Assets:US:ETrade:AAPL
Income:US:ETrade:Dividends
Income:US:ETrade:PnL
Expenses:US:ETrade:Commissions

Наскільки глибокими мають бути ієрархії?

  • 2-3 рівні -- типово для категорій витрат (Expenses:Food:Restaurant)
  • 3-4 рівні -- для структурованих балансових статей (Assets:US:Vanguard:401k:VTSAX)
  • Уникайте більше 5 рівнів, якщо у вас немає вагомої причини для звітності
  • Глибокі ієрархії добре працюють, коли Fava згортає їх у деревоподібних переглядах

Приклад з реального життя

Ось практичний план рахунків для особистих фінансів:

; -- Активи --
Assets:US:BofA:Checking USD
Assets:US:BofA:Savings USD
Assets:US:Vanguard:401k:VTSAX VTSAX
Assets:US:Vanguard:Roth:VTSAX VTSAX
Assets:US:ETrade:Cash USD
Assets:US:ETrade:AAPL AAPL
Assets:Cash:Wallet USD

; -- Зобов'язання --
Liabilities:US:Amex:Platinum USD
Liabilities:US:Chase:Freedom USD
Liabilities:US:BofA:Mortgage USD

; -- Доходи --
Income:US:Employer:Salary
Income:US:Employer:Bonus
Income:US:Employer:Match401k
Income:US:ETrade:Dividends
Income:US:BofA:Interest

; -- Витрати --
Expenses:Food:Groceries
Expenses:Food:Restaurant
Expenses:Food:Coffee
Expenses:Housing:Rent
Expenses:Housing:Insurance
Expenses:Housing:Utilities:Electric
Expenses:Housing:Utilities:Water
Expenses:Transport:Subway
Expenses:Transport:Taxi
Expenses:Transport:Gas
Expenses:Health:Medical
Expenses:Health:Dental
Expenses:Health:Pharmacy
Expenses:Shopping:Clothing
Expenses:Shopping:Electronics
Expenses:Entertainment:Streaming
Expenses:Entertainment:Books
Expenses:Travel:Flights
Expenses:Travel:Hotels
Expenses:Taxes:Federal
Expenses:Taxes:State
Expenses:Taxes:SocialSecurity
Expenses:Taxes:Medicare

; -- Власний капітал --
Equity:Opening-Balances
Equity:Retained-Earnings

Функції, специфічні для Fava

Індикатори актуальності

Одна з найкращих функцій Fava для керування рахунками. Додайте ці метадані до будь-якого рахунку:

2014-05-01 open Assets:US:BofA:Checking  USD
fava-uptodate-indication: TRUE

Після цього Fava показує кольорові точки поруч із рахунком:

  • Зелена точка: остання запис -- це успішна перевірка залишку (рахунок звірений)
  • Червона точка: останній запис -- це невдала перевірка залишку (потребує уваги)
  • Жовта точка: останній запис існує, але це не перевірка залишку (ще не звірений)
  • Сіра точка: немає активності протягом періоду огляду

Налаштування порогу для сірої точки:

2016-06-14 custom "fava-option" "uptodate-indicator-grey-lookback-days" "60"

Керування деревоподібним переглядом

Керуйте тим, як Fava відображає рахунки:

; Показувати закриті рахунки в дереві
2016-06-14 custom "fava-option" "show-closed-accounts" "true"

; Показувати рахунки без транзакцій
2016-06-14 custom "fava-option" "show-accounts-with-zero-transactions" "true"

; Показувати рахунки з нульовим залишком
2016-06-14 custom "fava-option" "show-accounts-with-zero-balance" "true"

Шаблони згортання

Згортання глибоко вкладених рахунків за замовчуванням:

; Згорнути всі рахунки з глибиною 3+ рівні
2016-06-14 custom "fava-option" "collapse-pattern" ".*:.*:.*"

; Згорнути конкретні піддерева
2016-06-14 custom "fava-option" "collapse-pattern" "Assets:US:Vanguard:.*"

Включення дочірніх рахунків у журнал

При перегляді журналу рахунку у Fava включати проводки з дочірніх рахунків:

2016-06-14 custom "fava-option" "account-journal-include-children" "true"

Інверсія знаків для зручності читання

За замовчуванням доходи та зобов'язання відображаються як від'ємні числа (їхній природний знак). Щоб відображати їх як додатні:

2016-06-14 custom "fava-option" "invert-income-liabilities-equity" "true"

Керування документами

Fava інтегрує роботу з документами у вашу ієрархію рахунків. Встановіть кореневу директорію документів:

option "documents" "/path/to/documents"

Потім організуйте файли за шляхом рахунку:

/path/to/documents/
Assets/
US/
BofA/
Checking/
2024-01-15.january-statement.pdf
2024-02-15.february-statement.pdf
Liabilities/
US/
Amex/
Platinum/
2024-03-15.march-bill.pdf

Файли, що починаються з YYYY-MM-DD, автоматично виявляються Fava та з'являються в журналі рахунку.

Поширені помилки та як їх уникнути

1. Помилки друку в назвах рахунків

Одна помилка друку, наприклад Expenses:Grocries, створює абсолютно новий, непередбачений рахунок.

Рішення: Не використовуйте плагін auto_accounts у продакшні. Вимагайте явні директиви open. Beancount негайно видасть помилку для будь-якого неоголошеного рахунку:

ERROR: Invalid reference to unknown account 'Expenses:Grocries'

2. Відсутність обмежень валюти

Без обмежень валюти ви можете випадково провести EUR на рахунку, призначеному лише для USD.

Рішення: Завжди вказуйте валюти в директивах open:

2014-01-01 open Assets:US:BofA:Checking  USD

3. Нерегулярна перевірка залишків

Без регулярних перевірок залишків помилки можуть залишатися непоміченими місяцями.

Рішення: Додавайте щомісячні перевірки залишків для кожного активного рахунку:

2024-01-01 balance Assets:US:BofA:Checking   5,432.10 USD
2024-02-01 balance Assets:US:BofA:Checking 4,890.55 USD
2024-03-01 balance Assets:US:BofA:Checking 6,123.00 USD

4. Непослідовні правила іменування

Змішування шаблонів (наприклад, Expenses:Food проти Expenses:US:Food) робить запити та звіти заплутаними.

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

5. Закриття без перевірки нульового залишку

Директива close не перевіряє залишок. Ви можете закрити рахунок, на якому ще є кошти.

Рішення: Завжди поєднуйте close з перевіркою залишку:

2023-12-31 balance Assets:US:OldBank:Savings  0.00 USD
2023-12-31 close Assets:US:OldBank:Savings

Просунуті шаблони

Поради щодо мультивалютності

Оголосіть ваші основні валюти для окремих стовпців у звітах:

option "operating_currency" "USD"
option "operating_currency" "EUR"

Для мультивалютних рахунків перелічіть усі дозволені валюти:

2014-01-01 open Assets:Cash  USD,CAD,EUR

Перевірки залишків для рахунків з кількома валютами потрібно робити окремо для кожної валюти:

2024-01-01 balance Assets:Cash     562.00 USD
2024-01-01 balance Assets:Cash 210.00 CAD
2024-01-01 balance Assets:Cash 60.00 EUR

Pad та Balance для початкового налаштування

Використовуйте директиву pad для встановлення початкових залишків без ручного обчислення сум:

2000-05-28 open Assets:US:BofA:Checking  USD
2000-05-28 pad Assets:US:BofA:Checking Equity:Opening-Balances
2024-07-01 balance Assets:US:BofA:Checking 12,345.67 USD

Beancount автоматично синтезує коригувальну транзакцію. Важливе застереження: перевірки залишків перевіряють залишок на початок зазначеної дати. Тобто pad від 2 січня потребує перевірки залишку від 3 січня або пізніше.

Метадані рахунків для категоризації

Використовуйте метадані в директивах open для власної звітності:

2014-01-01 open Assets:US:BofA:Checking  USD
category: "liquid"
tax-status: "taxable"

2014-01-01 open Assets:US:Vanguard:401k USD
category: "retirement"
tax-status: "tax-deferred"

Запити метаданих за допомогою BQL:

SELECT account, META("category") WHERE META("tax-status") = "taxable"

Примітки до історії рахунку

Додавайте датовані примітки до журналу будь-якого рахунку:

2024-03-20 note Assets:US:BofA:Checking "Зателефонував щодо оспорюваного платежу, номер заявки #12345"
2024-06-01 note Liabilities:US:Chase:Sapphire "Щорічну плату скасовано після дзвінка до відділу утримання клієнтів"

Ці примітки з'являються в журналі рахунку у Fava, забезпечуючи аудиторський слід.

Відстеження рахунків та цільове призначення коштів

У Beancount немає віртуальних проводок, як у Ledger, але ви можете використовувати підрахунки для цільового призначення:

; Відстеження резервного фонду в межах розрахункового рахунку
Assets:US:BofA:Checking:EmergencyFund USD
Assets:US:BofA:Checking:Operating USD

; Відстеження відшкодувань
Assets:Receivables:Employer:Travel USD
Assets:Receivables:Friend:SharedDinner USD

Категорії витрат, зручні для оподаткування

Структуруйте рахунки витрат так, щоб полегшити підготовку податкової звітності:

Expenses:Health:Medical:Deductible
Expenses:Charity:Deductible
Expenses:Business:Office
Expenses:Business:Equipment
Expenses:Education:Professional

Короткий довідник

ЗавданняСинтаксис
Відкрити рахунок2024-01-01 open Assets:US:BofA:Checking USD
Закрити рахунок2024-12-31 close Assets:US:OldBank:Savings
Перевірити залишок2024-01-01 balance Assets:US:BofA:Checking 5,432.10 USD
Вирівняти до залишку2024-01-01 pad Assets:Cash Equity:Opening-Balances
Додати примітку2024-01-15 note Assets:US:BofA:Checking "Щомісячну звірку завершено"
Прикріпити документ2024-01-15 document Assets:US:BofA:Checking "/path/to/statement.pdf"
Додати метаданіВідступний рядок "ключ-значення" після open
Автовідкриття (розробка)plugin "beancount.plugins.auto_accounts"
Обмежити валюту2024-01-01 open Assets:Cash USD,EUR
Встановити метод обліку лотів2024-01-01 open Assets:US:ETrade:AAPL AAPL "FIFO"

Підсумок

Правильне керування рахунками -- це основа ефективного обліку в Beancount. Ось ключові висновки:

  1. Завжди використовуйте явні директиви open -- вони виявляють помилки друку та забезпечують дисципліну
  2. Додавайте обмеження валюти для запобігання кросвалютним помилкам
  3. Використовуйте послідовну конвенцію іменування -- за установою для балансових рахунків, за категорією для доходів/витрат
  4. Починайте просто та вдосконалюйте -- розділяйте рахунки в міру зростання потреб у звітності
  5. Регулярно перевіряйте залишки -- щомісячна звірка виявляє помилки на ранніх етапах
  6. Правильно закривайте рахунки -- з перевіркою нульового залишку
  7. Використовуйте можливості Fava -- індикатори актуальності, шаблони згортання та інтеграцію документів
  8. Використовуйте метадані для власної категоризації та звітності

Успішного обліку!

References: