Закройте один месяц учёта целиком с помощью bea, инструмента командной строки Beancount.io. Вы откроете ledger, запишете покупки, импортируете банковскую выписку, сверьте её с балансом 3206.81 USD и изучите отчёт о прибылях и убытках и балансовый отчёт за месяц.
Месяц — август 2026 года, и ledger начинается с 1 250 USD на чековом счёте. Вам не нужно писать код на Python или задавать запросы.
Сначала установите bea, если ещё не сделали этого: Краткое руководство по Beancount CLI охватывает Homebrew и uv. Для локального учёта аккаунт Beancount.io не нужен.
Работайте в пустой директории. Скачайте в неё два входных файла перед началом:
- first-month.csv — банковская выписка, которую вы импортируете на третьей неделе.
- rules.toml — правила категоризации для этой выписки.
Каждая команда указывает на ledger с помощью --file august/main.bean, поэтому вы можете запускать их из этой директории, не переходя в каталог ledger.
Неделя 1 — настройка учёта
Создайте ledger, затем откройте единственный счёт, отсутствующий в шаблоне для этого месяца.
bea --no-input init august --currency USD --date 2026-08-01 \
--opening-balance "Assets:Checking 1250"
bea --file august/main.bean add open --date 2026-08-01 --account Expenses:Transport:Fuel -c USDinit создаёт august/main.bean с четырнадцатью счетами, включая Expenses:Uncategorized. Импорт помещает туда строки, которые не может категоризировать.
Неделя 2 — запись ежедневных покупок
Записывайте покупки по мере их совершения. Дата по умолчанию — сегодня, поэтому для задним числом используйте флаг --date.
bea --file august/main.bean add transaction "Coffee" --date 2026-08-03 \
--posting "Expenses:Dining 4.50" --posting "Assets:Checking"
bea --file august/main.bean add transaction "Weekly groceries" --date 2026-08-05 \
--posting "Expenses:Groceries 62.30" --posting "Assets:Checking"
bea --file august/main.bean add transaction --date 2026-08-07 --payee "Employer" \
--narration "August salary" --posting "Assets:Checking 2100" --posting "Income:Salary"Каждое добавление проверяется по всему ledger перед заменой файла. Вторая проводка остаётся пустой, поэтому Beancount заполняет балансирующую сумму.
Неделя 3 — импорт банковской выписки
Выписка за остаток августа содержит три строки:
Date,Payee,Amount
2026-08-10,Whole Foods,-28.40
2026-08-12,Shell,-35.00
2026-08-20,Mystery Shop,-9.99Файл правил сопоставляет получателя счёту. Правила применяются в порядке файла, и первое совпадение побеждает.
[[rule]]
match = "whole foods|trader joe|corner market"
account = "Expenses:Groceries"
[[rule]]
match = "shell|chevron|exxon"
account = "Expenses:Transport:Fuel"
[[rule]]
match = "salary|payroll|employer"
account = "Income:Salary"Сопоставьте колонки выписки с помощью --csv, просмотрите результат, затем повторите с --apply, чтобы записать его.
bea --file august/main.bean import first-month.csv \
--csv date=Date,amount=Amount,payee=Payee --account Assets:Checking --rules rules.toml
bea --file august/main.bean import first-month.csv --applyПредпросмотр выводит одну строку за раз с совпавшим правилом и точным diff, который будет записан. Ничего не записывается до --apply.
Вторая команда не требует флагов: сопоставление колонок, счёт и правила запоминаются для этого файла. Каждая запись содержит строку import-id, поэтому повторный импорт той же выписки пропускает уже добавленное в ledger.
Две строки совпадают с правилом. Третья, Mystery Shop, не совпадает ни с чем, поэтому попадает на Expenses:Uncategorized с флагом ! — это ваша очередь для проверки позже.
Для формата колонок дебета и кредита, других валют и импортеров на Python см. Импорт банковских выписок с помощью CLI.
Неделя 4 — сверка с выпиской
Согласно августовской выписке, остаток на чековом счёте — 3206.81 USD. В ваших книгах — 3209.81 USD. Разница — комиссия банка 3.00 USD, которую выписка пропустила.
Запишите комиссию, затем подтвердите баланс выписки. Beancount проверяет assertion в начале дня, поэтому assertion от 1 сентября охватывает все августовские транзакции.
bea --file august/main.bean add transaction "Bank fee" --date 2026-08-31 \
--posting "Expenses:Fees 3.00" --posting "Assets:Checking"
bea --file august/main.bean add balance --date 2026-09-01 --account Assets:Checking \
--amount "3206.81 USD"
bea --file august/main.bean list transaction --flag '!' --detailsВ очереди одна транзакция — строка Mystery Shop. --details выводит её файл и номер строки.
Откройте эту строку в редакторе. Измените проводку Expenses:Uncategorized на нужный счёт — в данном случае Expenses:Dining — и измените флаг с ! на *, чтобы отметить её как проверенную. Сохраните строку import-id, чтобы повторный импорт всё ещё пропускал эту строку.
Затем убедитесь, что ledger загружается и очередь пуста:
bea --file august/main.bean check
bea --file august/main.bean list transaction --flag '!' --detailsЧистый ledger завершается с кодом 0. Нарушенное assertion или неизвестный счёт выводятся с ненулевым кодом. Очередь теперь выводит No transactions found.
Изучение месяца
bea --file august/main.bean report income-statement --time 2026-08
bea --file august/main.bean report balance-sheet
bea --file august/main.bean report income-statement --time monthОтчёт о прибылях и убытках сопоставляет зарплату 2 100.00 USD с расходами 143.19 USD, давая чистую прибыль 1 956.81 USD. Балансы счетов выводятся в знаках Beancount, поэтому строки доходов отрицательные. Балансовый отчёт показывает чековый счёт на 3 206.81 USD, что совпадает с выпиской, с которой вы сверялись.
--time 2026-08 фиксирует месяц этого руководства. --time month всегда означает текущий месяц, к которому вы будете обращаться, когда приведёте книги в порядок.
Продолжение
- Импорт банковских выписок с помощью CLI — о проверке дубликатов, других макетах колонок и повторных импортах.
- Автоматизация учёта с bea — о JSON-конверте, кодах выхода и запусках без участия.
- Справочник Beancount CLI — о каждой команде и опции.