Введение в Beancount.io
Это руководс тво обобщает лучшие практики ведения учета в формате plain-text с использованием мощного инструмента с открытым исходным кодом, Beancount. Оно охватывает фундаментальную философию, базовый и продвинутый синтаксис, практические примеры для сложных активов и долгосрочные стратегии управления книгой учета.
Часть 1: "Зачем" - Основы грамотного ведения учета
Прежде чем углубляться в "как", важно понять "зачем". Эффективное ведение учета является основой управления личными финансами и необходимым шагом к финансовой ясности и свободе.
Выход за рамки отслеживания расходов: путь к финансовой ясности
Простые приложения для отслеживания расходов сообщают вам, куда ушли ваши деньги. Надежная система учета говорит вам это и многое другое: она предоставляет полную картину вашего финансового здоровья, включая ваш собственный капитал, денежный поток и эффективность ваших инвестиций. Основная цель - наблюдаемость — получение четкого, основанного на данных понимания вашей финансовой жизни, что позволяет вам принимать обоснованные решения, оценивать риски и работать над долгосрочными целями, такими как выход на пенсию.
Зачем двойная запись? Сила сбалансированной системы
В отличие от одинарной бухгалтерии (простой список расходов), метод двойной записи регистрирует каждую транзакцию как поток стоимости между как минимум двумя счетами. Его основной принцип - фундаментальное бухгалтерское уравнение:
Эта система гарантирует, что ваши книги всегда сбалансированы, что значительно снижает количество ошибок. Она предоставляет полную финансовую картину, генерируя важные отчеты, такие как бухгалтерский баланс (что вы имеете и что должны) и отчет о прибылях и убытках (что вы заработали и потратили).
Часть 2: Начало работы с Beancount
Beancount — это мощный инструмент на базе Python для ведения учета в формате plain-text.
Ваш первый взгляд с Fava на Beancount.io
Beancount.io предоставляет мощную среду, которая сочетает в себе движок Beancount с мобильным приложением (iOS, Android) и веб-приложением - Fava, фантастическим веб-интерфейсом для визуализации вашей книги учета. Установка не требуется. Когда вы используете платформу, вы напрямую взаимодействуете с текстовым редактором для вашего файла книги учета (например, main.bean) и видите, как отчеты, сгенерированные Fava, обновляются в режиме реального времени.
Fava берет введенный вами plain-text и превращает его в интерактивные графики, финансовые отчеты и списки транзакций с возможностью фильтрации, предоставляя вам четкое представление о ваших финансовых отчетах.
Пять основных типов счетов
Beancount использует пять типов счетов верхнего уровня, которые формируют структуру вашей книги учета:
| Тип счета | Описание | Типичный баланс |
|---|---|---|
Assets (Активы) | Чем вы владеете (наличные, банковские счета, инвестиции, недв ижимость). | Положительный |
Liabilities (Обязательства) | Что вы должны (долги по кредитным картам, кредиты, ипотека). | Отрицательный |
Income (Доход) | Откуда поступают деньги (зарплата, премии, проценты). | Отрицательный |
Expenses (Расходы) | Куда уходят деньги (еда, аренда, поездки, налоги). | Положительный |
Equity (Собственный капитал) | Ваша чистая стоимость; используется для начальных остатков. | Отрицательный |
Уравнение Beancount
Beancount применяет собственную версию бухгалтерского уравнения, где сумма всех проводок по всей вашей книге учета равна нулю:
Именно поэтому, по соглашению, счета Income (Доход), Liabilities (Обязательства) и Equity (Собственный капитал) содержат отрицательные значения — они являются источниками средств, которые увеличивают ваши Assets (Активы) и Expenses (Расходы).
Часть 3: Язык Beancount - Основной синтаксис
Все записи в Beancount — это директивы, которые начинаются с даты.
Определение счетов (open) и товаров (Commodities)
Прежде чем использовать счет, вы должны объявить его с помощью директивы 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
Привязка подтверждающих документов (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 ; Ваша доля
Assets:Receivables:Bob 45.00 USD ; Боб должен вам
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 -
Запишите годовую амортизацию: Предположим, вы оцениваете, что автомобиль теряет 3000 долларов в год. В конце года вы записываете это как расход.
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: Глубокое погружение - Моделирование сложных реальных активов
Пример 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 -
Запишите покупку: Допустим, вы покупаете дом за 500 тысяч долларов с первоначальным взносом в 100 тысяч долларов и кредитом в 400 тысяч долларов.
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 ; Основная сумма
Expenses:Home:Interest 1200.00 USD ; Проценты
Assets:Bank:US:Chase:Checking -2000.00 USD -
Отслеживание повышения стоимости (нереализованная прибыль): Рыночная стоимость дома меняется. Чтобы отслеживать это, не влияя на вашу официальную чистую стоимость (поскольку прибыль не реализуется до продажи), вы можете использовать директиву
priceс "виртуальной" валютой.; 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: Отслеживание ограниченных акций (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:Salary:Hooli:RSU
2021-01-01 open Expenses:Taxes:Federal -
Запишите первоначальное предоставление: Эта транзакция показывает общее предоставление, перемещающееся на счет активов без права наделения.
2021-02-01 * "Hooli" "Initial RSU Grant"
Assets:Grant:Unvested 1000 HOOL.UNVEST
Income:Grant:Awards -1000 HOOL.UNVEST -
Запишите событие наделения правами: Это ключевая транзакция. Когда акции наделяются правами, вы признаете доход, платите налоги (часто путем продажи некоторых акций) и получаете чистые акции. Предположим, 100 акций наделяются правами по цене 150 долларов за акцию.
2022-02-01 * "Hooli" "RSU Vesting Event"
; Recognize total income of 100 * $150 = $15,000
Income:Salary:Hooli:RSU -15000.00 USD
; Show taxes paid from this income
Expenses:Taxes:Federal 4000.00 USD
Expenses:Taxes:State 1000.00 USD
; You receive the net shares (assume 60 shares) at their cost basis
Assets:Brokerage:Etrade:HOOL 60 HOOL {150.00 USD}
; The other 40 shares were sold to cover $6000 in taxes.
; This transaction balances the income, taxes, and received shares.
; We must also show the reduction in unvested shares.
Assets:Grant:Unvested -100 HOOL.UNVEST
Expenses:Grant:Vested 100 HOOL.UNVEST
Эта единственная сбалансированная транзакция правильно моделирует все событие: уменьшается предоставление без права наделения, признается доход, уплачиваются налоги, и чистые наделенные правами акции появляются на вашем брокерском счете с правильной стоимостью для будущих расчетов прироста капитала.
Часть 7: Управление проектами для вашей книги учета
По мере роста вашей книги учета организация становится ключевой.
Использование системы контроля версий (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, вы можете перейти от простого отслеживания расходов к полной, точной и информативной системе управления личными финансами. Ваша книга учета становится постоянным, частным и бесценным активом для понимания вашего прошлого и планирования вашего будущего.