Перейти к основному содержимому
Beancount.io Logo

Ваш первый месяц с bea

Откройте ledger, запишите неделю покупок, импортируйте банковскую выписку, сверьте её с балансом в 3206.81 USD и изучите отчёты за месяц с помощью командной строки bea.

Закройте один месяц учёта целиком с помощью 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 USD

init создаёт 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 всегда означает текущий месяц, к которому вы будете обращаться, когда приведёте книги в порядок.

Продолжение

Источник: https://beancount.io/ru/docs/Basics/bea-first-month