Это руководство обобщает лучшие практики текстового бухгалтерского учёта с использованием мощного открытого инструмента для текстового учёта 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Привязка подтверждающих документов (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: Глубокое погружение — моделирование сложных реальных активов
Пример 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 ; 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: Отслеживание ограниченных акций (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: Управление проектом для вашей главной книги
По мере роста журнала организация становится ключевой.
Использование системы контроля версий (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 помогает вам поддерживать точный контроль над вашей финансовой жизнью, получая ценные сведения о доходности ваших инвестиций.
Начните свой финансовый путь с Beancount.io — посмотрите текущие планы и цены, чтобы узнать, что включает каждый уровень.


