Цей посібник узагальнює найкращі практики ведення бухгалтерії у звичайному тексті за допомогою потужного відкритого інструменту обліку у звичайному тексті Beancount. Він охоплює основоположну філософію, синтаксис від базового до просунутого, практичні приклади для складних активів і стратегії довгострокового управління журналом.
Часть 1: «Чому» — основи розумної бухгалтерії
Перш ніж заглиблюватися в "як", важливо зрозуміти "чому". Ефективне ведення книг — це фундамент особистого управління фінансами та необхідний крок до фінансової ясності й свободи.
За межами відстеженія витрат: шлях до финансовой ясности
Прості застосунки для відстеження витрат кажуть вам, куди пішли ваші гроші. Надійна система обліку каже вам це й набагато більше: вона дає повну картину вашого фінансового здоров'я, включно з вашим чистим капіталом, грошовим потоком і результативністю ваших інвестицій. Головна мета — спостережуваність: отримати чітке, засноване на даних розуміння вашого фінансового життя, яке дає змогу ухвалювати обґрунтовані рішення, оцінювати ризик і працювати над довгостроковими цілями, як-от вихід на пенсію.
Чому двоїне ведення? Сила збалансированої системи
На відміну від однократного запису (простий список витрат), метод подвійного запису фіксує кожну транзакцію як потік цінності між щонайменше двома рахунками. Його основний принцип — фундаментальне бухгалтерське рівняння:
Ця система гарантує, що ваші книги завжди збалансовані, що різко зменшує кількість помилок. Вона дає повну фінансову картину, генеруючи ключові звіти, як-от баланс (що ви маєте і що винні) та звіт про прибутки і збитки (що ви заробили і витратили).
Часть 2: Початок робот с Beancount
Beancount — це потужний інструмент на базі Python для ведення бухгалтерії у звичайному тексті.
Ваш перший погляд на Fava в Beancount.io
Beancount.io надає потужне середовище, яке поєднує рушій Beancount із мобільним застосунком (iOS, Android) і вебзастосунком — Fava, чудовий вебінтерфейс для візуалізації вашого журналу. Встановлення не потрібне. Коли ви користуєтеся платформою, ви безпосередньо взаємодієте з текстовим редактором для вашого файлу журналу (наприклад, main.bean) і бачите, як звіти, згенеровані Fava, оновлюються в реальному часі.
Fava бере звичайний текст, який ви пишете, і перетворює його на інтерактивні діаграми, фінансові звіти та списки транзакцій із фільтрацією, даючи вам чіткий огляд ваших фінансових звітів.
Або почніть у терміналі з bea
Якщо ви волієте працювати з оболонки, bea — це командний рядок Beancount.io. Обліковий запис не потрібен: встановіть його командою brew install bex-co/tap/bea або uv tool install beancount-io, і він створює, перевіряє, виконує запити та формує звіти на тому самому файлі у звичайному тексті. Швидкий старт CLI дає вам перший журнал за кілька хвилин, а Ваш перший місяць із bea закриває повний місяць від початку до кінця.
П'ять основних типів рахунків
Beancount використовує п'ять типів рахунків верхнього рівня, які формують структуру вашого журналу:
| Тип рахунку | Опис | Типовий баланс |
|---|---|---|
Assets | Те, що ви маєте (готівка, банківські рахунки, інвестиції, нерухомість). | Додатний |
Liabilities | Те, що ви винні (борг за кредитною карткою, позики, іпотеки). | Від'ємний |
Income | Звідки надходять гроші (зарплата, бонуси, відсотки). | Від'ємний |
Expenses | Куди йдуть гроші (їжа, оренда, подорожі, податки). | Додатний |
Equity | Ваш чистий капітал; використовується для початкових балансів. | Від'ємний |
Рівняння Beancount
Beancount застосовує власну версію бухгалтерського рівняння, де сума всіх проводок у всьому вашому журналі дорівнює нулю:
Ось чому, за домовленістю, рахунки Income, Liabilities і Equity мають від'ємні значення — вони є джерелами коштів, які збільшують ваші Assets і Expenses.
Часть 3: Язик Beancount — Основний синтаксис
Усі записи в Beancount — це директиви, які починаються з дати.
Визначення рахунків (open) и Товарів
Перш ніж використовувати рахунок, ви маєте оголосити його директивою open. Ви також можете за бажанням вказати валюти або "товари", які він міститиме.
; YYYY-MM-DD open Account:Name [Commodity1, Commodity2, ...]
2020-01-01 open Assets:Bank:US:Chase:Checking USD
2020-01-01 open Liabilities:CreditCard:US:Discover USD
2020-01-01 open Expenses:Food:Groceries
2020-01-01 open Income:Salary:GoogleТоварами можуть бути реальні валюти (наприклад, USD, JPY) або будь-яка визначена вами одиниця, як-от милі авіакомпанії (MILES_UA) чи біржові тікери (HOOL).
Запись вашей первой транзакції (*)
Транзакції — найпоширеніший тип запису. Вони починаються з дати, прапорця (* для завершеної транзакції або ! для незавершеної), необов'язкового отримувача платежу та опису. Кожен наступний рядок (з відступом у два пробіли) — це "проводка" на рахунок.
; YYYY-MM-DD * "Payee" "Description"
; Account1 Amount Commodity
; Account2 -Amount Commodity
2024-07-28 * "Trader Joe's" "Weekly groceries"
Expenses:Food:Groceries 125.50 USD
Liabilities:CreditCard:US:Discover -125.50 USDДля зручності, якщо транзакція має лише дві проводки, ви можете опустити суму в другому рядку, і Beancount обчислить її автоматично.
2024-07-28 * "Trader Joe's" "Weekly groceries"
Expenses:Food:Groceries 125.50 USD
Liabilities:CreditCard:US:DiscoverБалансування на рівні транзакції: Що важливіше для щоденного використання, кожна окрема транзакція також має балансуватися — сума всіх проводок у межах однієї транзакції має дорівнювати нулю. Якщо транзакція не балансується, Beancount покаже помилку, як ця:

Обробка мультивалютных транзакцій (@ и @@)
Beancount чудово справляється з багатовалютним обліком.
- Використовуйте
@, щоб указати ціну конвертації за одиницю. - Використовуйте
@@, щоб указати загальну вартість конвертації.
; Buying a flight in EUR with a USD card
2024-08-01 * "Lufthansa" "Flight to Berlin"
Expenses:Travel:Flights 500.00 EUR @@ 545.00 USD ; 500 EUR cost me 545 USD in total
Liabilities:CreditCard:US:Discover -545.00 USDЧасть 4: Забезпеченіе точності — Искусство звірки
Ключова практика для підтримання точного журналу — регулярне звіряння. Воно полягає в порівнянні балансів у вашому журналі Beancount з офіційними виписками від ваших фінансових установ.
Автоматизация перевірок с балансовыми ствердженіями (balance)
Директива balance — ваш основний інструмент для автоматичних перевірок. Ви стверджуєте, що на певну дату рахунок мав конкретний баланс. Beancount видасть помилку, якщо обчислений ним баланс не збігається з вашим твердженням. Це безцінно для швидкого знаходження помилок.
Примітка: Перевірка балансу перевіряє стан рахунку на початку вказаного дня (до будь-яких транзакцій цього дня).
; From your monthly credit card statement
2024-08-01 balance Liabilities:CreditCard:US:Discover -1432.78 USDСвязыванiе поддерживающих документов (document)
Ви можете посилатися на зовнішні файли, як-от банківські виписки чи квитанції, створюючи слід, що піддається аудиту. Fava робить ці посилання клікабельними.
2024-08-01 document Liabilities:CreditCard:US:Discover "statements/discover-2024-07.pdf"Виправленіе ошибок и ініціализация балансов
Коли ви починаєте свій журнал або виявляєте розбіжність, яку не можете відстежити, вам потрібно зробити коригування. Стандартна практика — використовувати спеціальний рахунок Equity.
; Initializing a cash account when starting your ledger
2020-01-01 * "Initial Balance" "Setting up cash account"
Assets:Cash:Wallet 200.00 USD
Equity:Opening-Balances -200.00 USDРахунок Equity:Opening-Balances містить суми, які надходять до вашого журналу з невідомих або зовнішніх джерел.
Для швидких виправлень, де точна розбіжність неважлива, директива pad може автоматично скоригувати баланс рахунку, щоб задовольнити наступне твердження balance, відносячи різницю на рахунок власного капіталу. Використовуйте це з обережністю, оскільки це може приховати більші проблеми. Явні коригування зазвичай безпечніші.
Часть 5: Просунуті и реалистичні шаблони транзакцій
Відслеживаніе долгов: управленіе дебиторской и кредиторской задолженностью
Бухгалтерія подвійного запису ідеально підходить для відстеження грошей, які винні вам (Assets:Receivables) або які винні ви (Liabilities:Payable).
Приклад: Ви платите за групову вечерю $90, і ваш друг Боб винен вам свою частку в $45.
-
Запишіть початкову витрату та дебіторську заборгованість:
2024-08-05 * "Dinner Place" "Dinner with Bob" Expenses:Food:Restaurant 45.00 USD ; Your share Assets:Receivables:Bob 45.00 USD ; Bob owes you Assets:Bank:US:Chase:Checking -90.00 USD -
Коли Боб повертає вам гроші:
2024-08-06 * "Bob" "Paid me back for dinner" Assets:Bank:US:Chase:Checking 45.00 USD Assets:Receivables:Bob -45.00 USD
Рахунок Assets:Receivables:Bob тепер нульовий, і ваші книги ідеально збалансовані.
Активи проти витрат: покупка автомобіля и амортизация
Велика покупка, як-от автомобіль, — це не проста витрата; це придбання активу, який з часом втрачає вартість (амортизація).
-
Запишіть покупку як актив:
2023-01-15 * "Toyota Dealer" "Purchase of a new car" Assets:Car:ToyotaCamry 30000.00 USD Assets:Bank:US:Chase:Checking -30000.00 USD -
Запишіть річну амортизацію: Припустімо, ви оцінюєте, що авто втрачає $3,000 вартості щороку. Наприкінці року ви записуєте це як витрату.
2023-12-31 * "Depreciation" "Annual car value depreciation" Expenses:Depreciation:Car 3000.00 USD Assets:Car:ToyotaCamry -3000.00 USD
Після цього запису ваш рахунок Assets:Car:ToyotaCamry правильно відображає нову вартість авто ($27,000), і ви належно врахували витрати на використання як витрату за цей рік.
Часть 6: Погруженіе в детали — Моделированиe складних реальных активів
Кейс 1: Бухгалтерия для нерухомості
Дім часто є вашим найбільшим активом і зобов'язанням. Ось як його змоделювати.
-
Створіть рахунки та власний товар:
2022-01-01 commodity HOUSE_123MAIN name: "Property at 123 Main St" 2022-01-01 open Assets:Property:Home:123Main HOUSE_123MAIN 2022-01-01 open Liabilities:Mortgage:HomeLoan USD 2022-01-01 open Expenses:Home:Interest 2022-01-01 open Expenses:Home:PropertyTax -
Запишіть покупку: Скажімо, ви купуєте дім за $500k з початковим внеском $100k і позикою $400k.
2022-03-15 * "Settlement Company" "Purchase of 123 Main St" Assets:Property:Home:123Main 1 HOUSE_123MAIN {500000.00 USD} Assets:Bank:DownPayment -100000.00 USD Liabilities:Mortgage:HomeLoan -400000.00 USD -
Запишіть щомісячні платежі за іпотекою: Ваш щомісячний платіж складається з основної суми (зменшує зобов'язання) та відсотків (витрата).
2022-04-01 * "Mortgage Bank" "Monthly Mortgage Payment" Liabilities:Mortgage:HomeLoan 800.00 USD ; Principal Expenses:Home:Interest 1200.00 USD ; Interest Assets:Bank:US:Chase:Checking -2000.00 USD -
Відстеження зростання вартості (нереалізовані прибутки): Ринкова вартість дому змінюється. Щоб відстежувати це, не впливаючи на ваш офіційний чистий капітал (оскільки прибуток не реалізується до продажу), ви можете використати директиву ціни з "віртуальною" валютою.
Для підтримуваних ринкових активів і валютних пар Live Prices можуть підтримувати котирування оцінки в розміщеному журналі. Окремі об'єкти нерухомості все ще потребують ваших власних оцінок і датованих цін, як у прикладі нижче.
; The purchase price is the real cost basis 2022-03-15 price HOUSE_123MAIN 500000.00 USD ; An updated market estimate is an unrealized gain 2024-01-01 price HOUSE_123MAIN 550000.00 USD.UNREALIZED
Це дає вам змогу бачити оцінену вартість на діаграмах Fava, не завищуючи неналежним чином ваш баланс.
Ознайомтеся з живим прикладом журналу нерухомості з відстеженням іпотеки, амортизацією та продажем майна:
Кейс 2: Відслеживанiе обмеженних акцій (RSU)
RSU — поширена форма винагороди у вигляді акцій. Їхній облік передбачає відстеження початкового гранту, подій вестингу та утримання податків.
-
Початкове налаштування: Створіть товари для вестингових (
HOOL) і невестингових (HOOL.UNVEST) акцій, а також для кожного рахунку, якого торкаються подальші записи. Оголошення всіх їх наперед — це те, що дає змогу двом транзакціям нижче завантажуватися окремо.2021-01-01 commodity HOOL 2021-01-01 commodity HOOL.UNVEST 2021-01-01 open Assets:Brokerage:Etrade:HOOL HOOL 2021-01-01 open Assets:Grant:Unvested HOOL.UNVEST 2021-01-01 open Income:Grant:Awards HOOL.UNVEST 2021-01-01 open Expenses:Grant:Vested HOOL.UNVEST 2021-01-01 open Income:Salary:Hooli:RSU USD 2021-01-01 open Expenses:Taxes:Federal USD 2021-01-01 open Expenses:Taxes:State USD -
Запишіть початковий грант: Ця транзакція показує, як загальний грант переміщується на рахунок невестингових активів. Поки що нічого не оподатковується, тож весь запис номіновано в товарі відстеження
HOOL.UNVEST.2021-02-01 * "Hooli" "Initial RSU Grant" Assets:Grant:Unvested 1000 HOOL.UNVEST Income:Grant:Awards -1000 HOOL.UNVEST -
Запишіть подію вестингу: Це ключова транзакція. Коли акції вестуються, ви визнаєте дохід, роботодавець утримує акції для сплати податку, а решту ви залишаєте собі. Припустімо, 100 акцій вестуються за $150.00, тож:
- Валовий дохід: 100 × $150.00 = $15,000.00
- Акції, утримані для податку: 40 × $150.00 = $6,000.00 (федеральний $4,800.00 + штатний $1,200.00)
- Акції, які ви залишаєте: 60 × $150.00 = $9,000.00 бази витрат
- Готівка вам: $0.00 — усе утримання сплачено акціями
Ці суми є записом, і вони звіряються: $6,000.00 податку плюс $9,000.00 утриманих акцій — це саме $15,000.00 доходу.
2022-02-01 * "Hooli" "RSU Vesting Event" ; Ordinary income: 100 shares * $150.00 Income:Salary:Hooli:RSU -15000.00 USD ; Tax withheld, funded by 40 of the 100 shares (40 * $150.00 = $6,000.00) Expenses:Taxes:Federal 4800.00 USD Expenses:Taxes:State 1200.00 USD ; The 60 shares you keep, at their $150.00 vesting-day basis Assets:Brokerage:Etrade:HOOL 60 HOOL {150.00 USD} ; Retire the 100 unvested units the grant was tracking Assets:Grant:Unvested -100 HOOL.UNVEST Expenses:Grant:Vested 100 HOOL.UNVEST
Ця єдина, збалансована транзакція моделює всю подію: невестинговий грант зменшується, дохід визнається, податок утримується, а 60 чистих вестингових акцій з'являються на вашому брокерському рахунку з правильною базою витрат для майбутніх розрахунків приросту капіталу.
Дві деталі варто скопіювати у ваш власний журнал. По-перше, розпишіть утримання рахунок за рахунком, а не дозволяйте якомусь універсальному балансувальному рахунку поглинути його — якщо федеральна та штатна проводки не сумуються до вартості утриманих акцій, транзакція не збалансується, і Beancount вам про це скаже. По-друге, не залишайте порожнього рядка між проводками: порожній рядок завершує транзакцію, і Beancount повідомляє про синтаксичну помилку в проводках, що йдуть за ним.
Якщо ваш роботодавець продає утримані акції на відкритому ринку, а не забирає їх назад за ціною вестингу, продаж є окремою транзакцією — зменшенням Assets:Brokerage:Etrade:HOOL проти готівки — і будь-яка різниця між ціною продажу та базою $150.00 є невеликим приростом або збитком капіталу. Тримайте це окремо від запису вестингу.
Часть 7: Управленiе проектом для вашого реестра
У міру зростання вашого журналу організація стає ключовою.
Использованiе системи контролю версій (Git) для захисту ваших данных
Оскільки ваш журнал — це текстовий файл, він ідеально підходить для контролю версій за допомогою Git. Це дає вам повну історію всіх змін, захищаючи вас від випадкових видалень чи помилок. Попередження: Ваші фінансові дані надзвичайно чутливі. Використовуйте приватний репозиторій на сервісах, як-от GitHub/GitLab, або розмістіть власний.
Организация с помощью тегов (#) і посилань (^)
Beancount надає два способи групування транзакцій поза рахунками:
- Теги (
#): Використовуйте для подій або проєктів. Ви можете, наприклад, відфільтрувати всі транзакції, пов'язані з конкретною подорожжю.2024-07-20 * "Hotel" "Vienna" #trip-europe-2024 - Посилання (
^): Використовуйте, щоб пов'язати фінансово споріднені транзакції, які відбуваються в різний час, як-от зняття готівки та пов'язана з ним банківська комісія.
Масштабируема стратегия для структурирования ваших файлов (include)
Один величезний файл важко обслуговувати. Використовуйте директиву include, щоб розділити ваш журнал на кілька файлів.
main.bean:
; Main ledger file
; Global options
option "title" "My Personal Ledger"
option "operating_currency" "USD"
; Include account declarations and other files
include "accounts.bean"
include "years/2023.bean"
include "years/2024.bean"
include "events/trip-europe-2024.bean"Надійна стратегія організації, за порядком пріоритету:
- За подією: Створіть окремий файл для великої, самодостатньої події (наприклад,
trip-europe-2024.bean). - За категорією/отримувачем платежу: Для дуже регулярних, повторюваних транзакцій, як-от комунальні платежі чи зарплата, згрупуйте їх у власному файлі (наприклад,
recurring-rent.bean). - За рахунком: Для транзакцій, тісно пов'язаних із конкретним рахунком (відсотки, комісії, платежі за кредитною карткою), розгляньте файл, специфічний для рахунку.
- За датою: Для всіх інших загальних транзакцій ефективним є простий поділ за роком (
2024.bean) або місяцем (2024/07.bean).
Часть 8: Висновок
Beancount пропонує круту криву навчання, але винагороджує зусилля неперевершеною потужністю, гнучкістю та контролем над вашими фінансовими даними. Сприймаючи принципи бухгалтерії подвійного запису та практичні інструменти, які надає Beancount, ви можете перейти від простого відстеження витрат до повної, точної та проникливої системи особистого управління фінансами. Ваш журнал стає постійним, приватним і безцінним активом для розуміння вашого минулого та планування вашого майбутнього.
Початок работы с Beancount.io
Beancount.io — це сучасна хмарна платформа управління фінансами, яка перетворює ваші текстові записи транзакцій на комплексні фінансові звіти, включно зі звітами про прибутки і збитки, балансами та оборотно-сальдовими відомостями. Поєднуючи надійність файлів у звичайному тексті з потужними інструментами візуалізації, Beancount.io допомагає вам підтримувати точний контроль над вашим фінансовим життям, водночас отримуючи цінні insights про результативність ваших інвестицій.
Почніть свою фінансову подорож із Beancount.io — перегляньте поточні плани та ціни, щоб дізнатися, що включає кожен рівень.


