Перейти к основному содержимому

Что такое Beancount: бухгалтерские книги с двойной записью

Beancount — это бухгалтерия с двойной записью в обычном тексте для акций, криптовалют и повседневных книг — что это такое и почему инженеры её используют.

Это руководство обобщает лучшие практики ведения бухгалтерии в виде обычного текста с использованием мощного инструмента с открытым исходным кодом — Beancount. Оно охватывает основополагающую философию, синтаксис от базового до продвинутого, практические примеры для сложных активов и долгосрочные стратегии ведения главной книги.

Часть 1: «Зачем» — основы грамотного ведения учета

Прежде чем углубляться в «как», крайне важно понять «зачем». Эффективное ведение учета — это фундамент управления личными финансами и необходимый шаг на пути к финансовой ясности и свободе.

За рамками отслеживания расходов: путь к финансовой ясности

Простые приложения для отслеживания расходов говорят вам, куда ушли деньги. Надежная система учета говорит вам об этом и о многом другом: она дает полную картину вашего финансового здоровья, включая собственный капитал, денежные потоки и эффективность ваших инвестиций. Основная цель — наблюдаемость — получение четкого, основанного на данных понимания вашей финансовой жизни, что позволяет вам принимать обоснованные решения, оценивать риски и работать над долгосрочными целями, такими как выход на пенсию.

Почему двойная запись? Мощь сбалансированной системы

В отличие от простой бухгалтерии (простой список расходов), метод двойной записи фиксирует каждую транзакцию как поток стоимости между как минимум двумя счетами. Его основной принцип — фундаментальное бухгалтерское уравнение:

Активы=Обязательства+Собственный капитал (Чистая стоимость)\text{Активы} = \text{Обязательства} + \text{Собственный капитал (Чистая стоимость)}

Эта система гарантирует, что ваши книги всегда сбалансированы, что значительно снижает количество ошибок. Она обеспечивает полную финансовую картину, формируя необходимые отчеты, такие как балансовый отчет (что вы имеете и что должны) и отчет о прибылях и убытках (что вы заработали и потратили).

Часть 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 использует пять основных типов счетов верхнего уровня, которые образуют структуру вашей главной книги:

Тип счетаОписаниеТипичный баланс
АктивыТо, чем вы владеете (денежные средства, банковские счета, инвестиции, недвижимость).Положительный
ОбязательстваТо, что вы должны (задолженность по кредитным картам, кредиты, ипотека).Отрицательный
ДоходОткуда поступают деньги (зарплата, премии, проценты).Отрицательный
РасходыКуда уходят деньги (еда, аренда, поездки, налоги).Положительный
Собственный капиталВаша чистая стоимость; используется для начальных балансов.Отрицательный

Уравнение Beancount

Beancount обеспечивает соблюдение собственной версии бухгалтерского уравнения, согласно которой сумма всех проводок по всей вашей главной книге равна нулю:

Активы+Расходы+Обязательства+Доход+Собственный капитал=0\text{Активы} + \text{Расходы} + \text{Обязательства} + \text{Доход} + \text{Собственный капитал} = 0

Именно поэтому по соглашению счета Доход, Обязательства и Собственный капитал имеют отрицательные значения — они являются источниками средств, которые увеличивают ваши Активы и Расходы.

Часть 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

Обработка мультивалютных транзакций (@ и @@)

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"

Исправление ошибок и инициализация балансов

Когда вы начинаете вести главную книгу или обнаруживаете расхождение, которое не можете отследить, вам необходимо сделать корректировку. Стандартная практика — использовать специальный счет Собственный капитал.

; 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

Счет Собственный капитал:Начальные балансы содержит суммы, поступающие в вашу главную книгу из неизвестных или внешних источников.

Для быстрых исправлений, когда точное расхождение неважно, директива pad может автоматически скорректировать баланс счета, чтобы он соответствовал последующему балансовому утверждению, относя разницу на счет собственного капитала. Используйте это с осторожностью, так как это может скрыть более серьезные проблемы. Явные корректировки обычно безопаснее.

Часть 5: Продвинутые и реалистичные схемы транзакций

Отслеживание долгов: управление дебиторской и кредиторской задолженностью

Бухгалтерия с двойной записью идеально подходит для отслеживания денег, которые должны вам (Активы:Дебиторская задолженность) или которые должны вы (Обязательства:Кредиторская задолженность).

Пример: Вы платите за групповой ужин в размере $90, и ваш друг Боб должен вам свою долю в $45.

  1. Запишите первоначальный расход и дебиторскую задолженность:

    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
  2. Когда Боб возвращает вам деньги:

    2024-08-06 * "Bob" "Paid me back for dinner"
      Assets:Bank:US:Chase:Checking     45.00 USD
      Assets:Receivables:Bob           -45.00 USD

Счет Активы:Дебиторская задолженность:Боб теперь равен нулю, и ваши книги идеально сбалансированы.

Активы против расходов: покупка автомобиля и амортизация

Крупная покупка, такая как автомобиль, — это не простой расход; это приобретение актива, который со временем теряет стоимость (амортизация).

  1. Запишите покупку как актив:

    2023-01-15 * "Toyota Dealer" "Purchase of a new car"
      Assets:Car:ToyotaCamry         30000.00 USD
      Assets:Bank:US:Chase:Checking -30000.00 USD
  2. Запишите ежегодную амортизацию: Предположим, вы оцениваете, что автомобиль теряет $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: Учет недвижимости

Дом часто является вашим самым большим активом и обязательством. Вот как его можно смоделировать.

  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
  2. Запись покупки: Допустим, вы покупаете дом за $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
  3. Запись ежемесячных ипотечных платежей: Ваш ежемесячный платеж состоит из основной суммы (уменьшает обязательство) и процентов (расход).

    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
  4. Отслеживание удорожания (нереализованная прибыль): Рыночная стоимость дома меняется. Чтобы отслеживать это, не влияя на ваш официальный собственный капитал (так как прибыль не реализована, пока вы не продадите), вы можете использовать директиву цены с «виртуальной» валютой.

    ; 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 — это распространенная форма компенсации акциями. Их учет включает отслеживание первоначального гранта, событий перехода права собственности и удержания налогов.

  1. Первоначальная настройка: Создайте товары для акций, право собственности на которые перешло (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
  2. Запись первоначального гранта: Эта транзакция показывает весь грант, поступающий на счет не перешедших в собственность активов. Пока ничего не облагается налогом, поэтому вся запись выражена в отслеживаемом товаре HOOL.UNVEST.

    2021-02-01 * "Hooli" "Initial RSU Grant"
      Assets:Grant:Unvested        1000 HOOL.UNVEST
      Income:Grant:Awards         -1000 HOOL.UNVEST
  3. Запись события перехода права собственности: Это ключевая транзакция. Когда акции переходят в вашу собственность, вы признаете доход, работодатель удерживает акции для уплаты налога, а остальное остаётся у вас. Предположим, 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 сообщает об ошибке синтаксиса для проводок, следующих за ней.

Если ваш работодатель продает удержанные акции на открытом рынке, а не забирает их по цене перехода права собственности, продажа — это отдельная транзакция — уменьшение Активы:Брокерский счет:Etrade:HOOL против денежных средств — и любая разница между ценой продажи и основанием в $150,00 — это небольшая прибыль или убыток от прироста капитала. Не включайте это в запись о переходе права собственности.

Часть 7: Управление проектом для вашей главной книги

По мере роста вашей главной книги ключевым становится порядок.

Использование системы контроля версий (Git) для защиты ваших данных

Поскольку ваша главная книга — это текстовый файл, она идеально подходит для контроля версий с помощью Git. Это дает вам полную историю всех изменений, защищая от случайного удаления или ошибок. Предупреждение: Ваши финансовые данные очень чувствительны. Используйте частный репозиторий в таких сервисах, как GitHub/GitLab, или размещайте его самостоятельно.

Организация с помощью тегов (#) и ссылок (^)

Beancount предоставляет два способа группировки транзакций помимо счетов:

  • Теги (#): Используйте для событий или проектов. Например, вы можете отфильтровать все транзакции, связанные с конкретной поездкой. 2024-07-20 * "Отель" "Вена" #поездка-европа-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"

Надежная организационная стратегия, в порядке приоритета:

  1. По событию: Создайте отдельный файл для крупного самостоятельного события (например, поездка-европа-2024.bean).
  2. По категории/плательщику: Для очень регулярных повторяющихся транзакций, таких как счета за коммунальные услуги или зарплата, сгруппируйте их в отдельный файл (например, регулярная-аренда.bean).
  3. По счету: Для транзакций, тесно связанных с конкретным счетом (проценты, комиссии, платежи по кредитным картам), рассмотрите файл, специфичный для счета.
  4. По дате: Для всех остальных общих транзакций эффективно простое разделение по годам (2024.bean) или месяцам (2024/07.bean).

Часть 8: Заключение

Beancount имеет крутую кривую обучения, но вознаграждает за усилия непревзойденной мощью, гибкостью и контролем над вашими финансовыми данными. Приняв принципы бухгалтерии с двойной записью и практические инструменты, которые предоставляет Beancount, вы можете перейти от простого отслеживания расходов к полной, точной и прозорливой системе управления личными финансами. Ваша главная книга становится постоянным, частным и бесценным активом для понимания вашего прошлого и планирования будущего.

Начало работы с Beancount.io

Beancount.io — это современная облачная платформа управления финансами, которая преобразует ваши текстовые записи транзакций в комплексные финансовые отчеты, включая отчеты о прибылях и убытках, балансовые отчеты и пробные балансы. Сочетая надежность обычных текстовых файлов с мощными инструментами визуализации, Beancount.io помогает вам сохранять точный контроль над вашей финансовой жизнью, получая при этом ценную информацию об эффективности ваших инвестиций.

Начните свой финансовый путь с Beancount.io — ознакомьтесь с текущими тарифами и ценами, чтобы узнать, что включает каждый уровень.

Панель управления главной книги beancount.io, показывающая график изменения собственного капитала, балансы счетов и строку ИИ-ассистента

Изучите главную книгу в реальном времени →

Отчет о прибылях и убытках публичной главной книги Apple на beancount.io с графиком чистой прибыли и разбивкой доходов и расходов

Изучите главную книгу в реальном времени →

Балансовый отчет публичной главной книги Apple на beancount.io с графиком собственного капитала и деталями активов и обязательств

Изучите главную книгу в реальном времени →

Источник: https://beancount.io/ru/docs/introduction-to-beancount