План рахунків -- це основа вашого облікового файлу 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' *.beancount2. Плагін 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 USD3. Нерегулярна перевірка залишків
Без регулярних перевірок залишків помилки можуть залишатися непоміченими місяцями.
Рішення: Додавайте щомісячні перевірки залишків для кожного активного рахунку:
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 USD4. Непослідовні правила іменування
Змішування шаблонів (наприклад, 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 EURPad та 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 USDBeancount автоматично синтезує коригувальну транзакцію. Важливе застереження: перевірки залишків перевіряють залишок на початок зазначеної дати. Тобто 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. Ось ключові висновки:
- Завжди використовуйте явні директиви
open-- вони виявляють помилки друку та забезпечують дисципліну - Додавайте обмеження валюти для запобігання кросвалютним помилкам
- Використовуйте послідовну конвенцію іменування -- за установою для балансових рахунків, за категорією для доходів/витрат
- Починайте просто та вдосконалюйте -- розділяйте рахунки в міру зростання потреб у звітності
- Регулярно перевіряйте залишки -- щомісячна звірка виявляє помилки на ранніх етапах
- Правильно закривайте рахунки -- з перевіркою нульового залишку
- Використовуйте можливості Fava -- індикатори актуальності, шаблони згортання та інтеграцію документів
- Використовуйте метадані для власної категоризації та звітності
Успішного обліку!