Реальные конфигурации Beancount
Введение
Beancount — это универсальная система учёта в виде обычного текста, и её пользователи приспособили её под самые разные реальные задачи. В этом обзоре сообщества мы представляем анонимизированные примеры того, как разные люди структурируют и используют свои рабочие процессы учёта Beancount — от фрилансеров и владельцев малого бизнеса до энтузиастов личных финансов. Эти примеры демонстрируют творческие подходы: маркировку транзакций с помощью метаданных, автоматизацию обновления книги с помощью собственных скриптов, работу с несколькими валютами, бюджетирование и прогнозирование, а также расширение Beancount с помощью плагинов или интеграций (например, веб-интерфейса Fava). Цель — вдохновить бухгалтеров, разработчиков и финансово подкованных пользователей и показать, что возможно с гибкой системой Beancount.
Актуальные обзоры того же набора инструментов см. в статьях Beancount v3: Что нового?, Основные нативные плагины Beancount, которые вам стоит знать, Экосистема Beancount и Техническое преимущество Beancount.

Пример интерфейса: Многие пользователи Beancount полагаются на Fava — веб-панель с открытым исходным кодом — или её аналог с хостингом на beancount.io для визуализации своих финансов. Эти инструменты превращают книгу Beancount в интерактивные отчёты и графики. Например, это представление Отчёта о прибылях и убытках разбивает доходы и расходы по категориям во времени, давая быстрый обзор того, откуда приходят деньги и куда уходят. Пользователи могут фильтровать это представление по времени, счёту или тегам, чтобы углубиться в конкретные проекты или периоды. Такие визуализации делают данные в виде обычного текста более доступными, позволяя замечать тенденции и аномалии с первого взгляда.
Каждая конфигурация Beancount уникальна, но есть и общие темы. Ниже мы рассмотрим три сценария — фрилансер, владелец малого бизнеса и продвинутый пользователь личных финансов — чтобы увидеть, как они организуют свои счета и используют возможности Beancount. Все личные данные удалены или обобщены, акцент сделан только на техниках и конфигурациях.
Фрилансер: отслеживание проектов по тегам и управление счетами-фактурами
Наш первый пример — консультант-фрилансер, использующий Beancount как основу своих деловых финансов. Книга этого фрилансера организована так, чтобы отслеживать доходы и расходы по каждому проекту и управлять счетами для нескольких клиентов. Он настроил отдельные счета дебиторской задолженности (A/R) в разделе активов для каждого клиента, что помогает разделять, кто сколько должен. Когда он завершает проект и выставляет клиенту счёт, он записывает транзакцию, дебетуя счёт A/R клиента и кредитуя счёт доходов. Например, новый счёт может быть записан так:
2025-08-01 * "Project X Completed" ^INV-0001
Assets:AccountsReceivable:ClientA 5,000 USD
Income:Consulting -5,000 USDЗдесь запись ^INV-0001 — это ссылка (встроенная функция метаданных Beancount), используемая для маркировки этой транзакции номером счёта. Когда клиент оплачивает часть или весь этот счёт, транзакция платежа включает ту же ссылку ^INV-0001, что связывает две записи вместе. Такая связка позволяет легко распределять платежи по конкретным счетам и видеть непогашенные остатки. Как объяснил один участник сообщества, такие теги или ссылки можно использовать для отметки частичных платежей — например, платежа в $20 против счёта на $30 — как в записи счёта, так и в записи платежа. Запрашивая книгу по ссылке этого счёта, фрилансер может мгновенно увидеть, какая часть счёта оплачена, а какая остаётся открытой.
Помимо ссылок, фрилансер активно использует теги для категоризации. Теги в Beancount — это метки с префиксом #, которые могут помечать транзакции для последующей фильтрации. Этот пользователь помечает каждый расход, оплачиваемый клиентом, кодом проекта, например #ProjectX, а возмещаемые расходы — тегом #Reimbursable. Например, если он покупает авиабилеты для проекта клиента, запись расхода может включать #ProjectX #Reimbursable. Такая практика позволяет формировать отчёты по проекту или клиенту, фильтруя по тегам. После проекта фрилансер может выполнить запрос, чтобы перечислить все расходы с тегом #Reimbursable по этому проекту, и убедиться, что он выставил клиенту счёт за каждый из них. Один пользователь Beancount отметил, что маркировка расходов в рабочей поездке помогла выявить те, что не были возмещены — в идеале расходы рабочей поездки должны свестись к $0, когда все возмещения от клиента получены. Это показывает, как маркировка в сочетании с возможностями запросов Beancount обеспечивает дополнительный уровень контроля для фрилансеров, управляющих оплачиваемыми расходами.
Чтобы управлять статусом непогашенных платежей, наш фрилансер использует специальное соглашение для ожидаемой дебиторской задолженности. Он применяет тег #UNRESOLVED к любой транзакции счёта, которая ещё не полностью оплачена. Beancount (и Fava) не требует этот тег, но это установленный сообществом шаблон для отметки транзакций, ожидающих расчёта. Например, пока Клиент A не оплатит полностью $5 000, транзакция счёта выше будет включать #UNRESOLVED. Фильтруя по этому тегу, фрилансер может в любой момент перечислить все открытые счета. Как только платёж получен и применён (внесена соответствующая транзакция A/R), он удаляет или игнорирует тег #UNRESOLVED, и счёт дебиторской задолженности этого клиента обнулится. Эта система гарантирует, что ни один счёт не «ускользнёт из виду». По сути, это отчёт о старении задолженности, выполненный в обычном тексте — если A/R остаётся ненулевым и помечен как неразрешённый, на это нужно обратить внимание.
Поскольку фрилансеры часто имеют дело с несколькими способами оплаты, а иногда и с несколькими валютами, конфигурация Beancount без труда это учитывает. В нашем примере консультант может выставлять счета одним клиентам в USD, а другим в EUR. Работа с несколькими валютами в Beancount проста: любой счёт может содержать несколько товаров (валюты рассматриваются как товары). Фрилансер может либо вести отдельные субсчета для каждой валюты (например, Assets:AccountsReceivable:ClientA:EUR против ...:USD), либо просто проводить транзакции в соответствующей валюте по одному и тому же счёту. Beancount автоматически будет отслеживать остатки по каждой валюте. Один пользователь подчеркнул, как удобно, что «Beancount может отслеживать количества в любой валюте, будь то USD или тикер акции», всё в одной книге. Наш фрилансер пользуется этим, записывая обменные курсы директивами price всякий раз, когда нужно конвертировать валюты для отчётности. Он может сформировать отчёт о доходах, конвертированный в его домашнюю валюту, как только введёт периодические обменные курсы или рыночные цены.
Наконец, этот фрилансер интегрирует свою книгу Beancount с практичными инструментами для оптимизации рабочего процесса. Например, он прикрепляет PDF-копии каждого счёта к книге с помощью метаданных документа. Типичная запись об оплате счёта может выглядеть так:
2025-08-30 * "ClientA" "Payment for INV-0001" ^INV-0001
Assets:Bank:Checking 5,000 USD
Assets:AccountsReceivable:ClientA -5,000 USD
document: "Invoices/ClientA/INV-0001.pdf"Директива document или метаданные Beancount позволяют связывать файлы с записями, и Fava покажет гиперссылку на эти вложения. Это означает, что фрилансер (или его бухгалтер) может прямо из отчёта книги перейти по ссылке и просмотреть исходный PDF счёта, обеспечивая лёгкий доступ к подтверждающей документации. Фрилансер также использует отчёты Fava для мониторинга своего бизнеса: фильтруя Отчёт о прибылях и убытках или Баланс по клиенту, он может видеть прибыльность по каждому клиенту и проверять, что все проекты оплачены. В итоге система Beancount этого фрилансера демонстрирует активное использование тегов и ссылок для управления учётом по проектам. Она превращает книгу в виде обычного текста в надёжный инструмент бухгалтерии фрилансера с ясной видимостью расходов по проектам, доходов в нескольких валютах и статусов счетов.
Ключевые практики в конфигурации фрилансера: использование тегов для группировки транзакций по проекту или назначению, связывание счетов и платежей уникальными идентификаторами, отметка непогашенной дебиторской задолженности тегом #UNRESOLVED, прикрепление документов счетов к записям книги для справки и использование поддержки нескольких валют в Beancount для лёгкого выставления счетов международным клиентам. Всё это достигается с помощью записей в виде обычного текста плюс несколько вспомогательных инструментов, что демонстрирует силу метаданных в Beancount.
Малый бизнес: автоматизация и учет в нескольких валютах
Далее мы рассмотрим владельца малого бизнеса — конкретно основателя стартапа — который внедрил Beancount для ведения книг компании. Потребности малого бизнеса схожи с потребностями фрилансеров (счета, расходы, несколько валют), но часто в большем масштабе и с большим акцентом на автоматизацию, согласованность и совместную работу. В этом случае основатель был технически подкован и построил высокоавтоматизированный рабочий процесс Beancount, чтобы свести ручной бухгалтерский учёт к минимуму. Оценив традиционное бухгалтерское ПО вроде QuickBooks, он выбрал подход Beancount с обычным текстом, чтобы сохранить полный контроль над данными. За несколько лет он итеративно разработал собственные инструменты, достигнув 95% автоматизации бухгалтерского процесса.
Автоматизированный импорт и сверка: одной из первых задач был импорт транзакций из различных источников (банковские счета, кредитные карты, платёжные процессоры) в книгу. Вместо ввода каждой транзакции вручную этот пользователь настроил скрипты импорта для получения и преобразования данных в формат Beancount. Он написал собственные импортёры на Python для CSV или API каждого финансового учреждения, так что одной командой можно получить новые транзакции и добавить их в книгу. Например, используя импортёры beangulp, основатель может запустить скрипт, который сканирует папку загрузок на наличие новых выписок и выводит их в виде записей Beancount. Другой пользователь, Rhyd Lewis, описал похожую схему, где у него есть отдельные скрипты-импортёры для каждого банка, которые можно вызвать простой командой (используя Justfile) для обновления книги. Наш владелец малого бизнеса делает то же самое — все банковские транзакции, операции по кредитным картам и даже транзакции PayPal или Stripe автоматически получаются и добавляются в книги с категоризацией по соответствующим счетам.
Чтобы обеспечить целостность данных даже при автоматическом добавлении этих записей, он проверяет книгу перед каждым коммитом и использует плагины Beancount. Например, включён плагин beancount.plugins.noduplicates, чтобы предотвратить случайный повторный импорт одной и той же транзакции, а beancount.plugins.nounused помечает счета без записей (полезно для очистки устаревших счетов). Мы рекомендуем bea check для этого этапа проверки. Основатель также использует форматер из сообщества (например, beancount-black), чтобы поддерживать единообразный стиль файла книги. Это важно, потому что при множестве автоматических правок единый стиль упрощает просмотр диффов и аудит. Фактически основатель хранит книгу в репозитории Git, относясь к обновлениям книги как к изменениям кода. Каждая новая партия импортированных транзакций становится коммитом Git, и он может просматривать диффы, чтобы видеть, что изменилось. На одном скриншоте он показывает историю Git, где транзакция по кредитной карте для «Costco» переходит из состояния ожидания в состояние подтверждённой в книге — без ручного вмешательства. Контроль версий обеспечивает аудиторский след: видно точно, когда транзакция была добавлена или изменена, и можно даже откатить изменения, если что-то было импортировано неправильно. Это отличный пример внесения лучших практик разработки ПО (например, контроля версий) в бухгалтерские записи.
Несколько валют и международные транзакции: малый бизнес часто совершает операции в нескольких валютах — например, у стартапа могут быть расходы в USD, но также поступления в EUR или банковский счёт в GBP. Наша компания из обзора использует возможности Beancount для работы с несколькими валютами, чтобы объединить всё это в одной книге. Они открыли отдельные счета для каждой валюты (например, Assets:Bank:Checking:USD и Assets:Bank:Checking:EUR) — это один из распространённых подходов. Однако даже если разные валюты используют один счёт, Beancount будет отслеживать остаток по каждой валюте отдельно и требовать, чтобы транзакции балансировались по каждой валюте. Основатель часто запускает отчёты об оценке, чтобы видеть общие остатки компании, конвертированные в базовую валюту. Поскольку Beancount поддерживает поиск цен, он настроил ежедневные ценовые потоки для обменных курсов (и цен на акции для любых инвестиций) с помощью скрипта запланированного получения котировок. В результате в любой момент он может сформировать баланс, скажем, в USD, включающий счёт в EUR, пересчитанный по последнему курсу. Участники сообщества отмечают, что работа с несколькими валютами в учёте в стиле книги проста — вы просто добавляете транзакции в нужной валюте и записываете обменные курсы по мере необходимости. Например, один пользователь поделился примером конвертации USD в EUR в CAD через промежуточные счета как способа управления конвертацией валют в Beancount. В нашем случае малый бизнес не обязательно конвертирует валюты в транзакциях (они хранят их в исходной валюте), но использует отчёты для консолидации. Эта гибкость была критически важна по мере глобального расширения стартапа.
Собственные скрипты и расширения: не всё, что нужно основателю, было доступно из коробки, поэтому он расширил Beancount собственными плагинами. Со временем он написал библиотеку парсинга, инструмент форматирования и импортёр транзакций на основе правил, выпустив многие из них как пакеты с открытым исходным кодом. Например, он создал движок импорта на основе правил, использующий конфигурацию YAML для автоматической категоризации транзакций. Фрагмент этой конфигурации показывает, как конкретные получатели или описания (например, «Comcast» или «PG&E») сопоставляются с определёнными счетами расходов и нарративами, так что когда они появляются в банковском потоке, правильная запись Beancount генерируется без ручного редактирования. По сути, это собственный механизм автоматизации для применения правил бухгалтерского учёта (для коммунальных услуг, подписок и т. д.) на лету. Другой плагин гарантирует, что книга всегда остаётся сбалансированной и отформатированной. Все эти инструменты работают как часть рабочего процесса основателя всякий раз, когда поступают новые данные. Результатом становится книга, которая «обновляет себя» с минимальным вмешательством, что, по словам основателя, приносит ему «чистое удовольствие» как разработчику, одержимому автоматизацией.
Безопасность и доступность также были вопросами беспокойства. Основатель хотел, чтобы его финансовая команда (и даже его супруга, выступающая в роли наблюдателя) могли легко просматривать книги. Для этого он настроил приватное развёртывание Fava в облаке. Каждый раз, когда он отправляет новый коммит книги в приватный репозиторий Git, CI-конвейер (используя GitHub Actions и AWS Elastic Beanstalk) развёртывает обновлённый экземпляр Fava. Веб-интерфейс защищён паролем (с использованием прокси Nginx с базовой аутентификацией), так что только авторизованные люди могут его видеть. Таким образом, последние финансовые отчёты всегда доступны через браузерную панель без необходимости что-либо устанавливать локально. Диаграмма архитектуры ниже иллюстрирует эту схему: файл Beancount и необходимая конфигурация упаковываются в образ Docker вместе с Fava и обслуживаются на AWS, а Cloudflare стоит впереди для безопасности.
flowchart LR
A[Edit ledger locally] --> B[Push to private Git repo]
B --> C[CI builds Docker image<br/>Fava + Nginx basic auth]
C --> D[Deploy to AWS<br/>Elastic Beanstalk]
D --> E[Cloudflare proxy]
E --> F[Owner & team view<br/>reports in browser]Автоматизация Beancount в облаке: пользователь обновляет файл книги локально и отправляет в Git; контейнер Docker (включая Fava и Nginx для аутентификации) собирается и развёртывается на сервере AWS Beanstalk, а Cloudflare выступает в роли прокси. Результатом становится защищённый веб-портал, где финансовые данные малого бизнеса доступны откуда угодно (владельцу или команде) в реальном времени. Эта продвинутая схема демонстрирует, как малый бизнес может интегрировать Beancount с современными облачными инструментами, добиваясь удобства без отказа от владения данными.
В повседневном использовании внимание владельца малого бизнеса сосредоточено на обработке исключений, а не на вводе данных. Каждый месяц он кратко просматривает автоматически импортированные транзакции (используя диффы Git или представление журнала в Fava), чтобы отловить некатегоризированные или неверные записи. Он также использует проверки баланса Beancount для сверки счетов. Например, после ввода всех транзакций за июнь он может добавить проверку баланса, чтобы подтвердить, что конечный остаток банковского счёта совпадает с выпиской; если нет, Beancount выдаст ошибку, указывая, что что-то пропущено или введено неверно. Это гарантирует, что книги остаются точными.
Ключевые практики в конфигурации малого бизнеса: активная автоматизация через собственные импортёры и скрипты (делающая книгу «на 95% автоматической»), использование контроля версий для аудиторского следа и совместной работы, учёт в нескольких валютах с ценовыми потоками для оценки и развёртывание Fava для лёгкого, доступного для совместного использования доступа к финансовым отчётам. Сценарий малого бизнеса показывает, как далеко можно продвинуть Beancount с инженерными усилиями — превратив бухгалтерию в преимущественно автоматизированный конвейер, сохраняя при этом прозрачность и гибкость. Даже если вы не программист, многие из этих преимуществ можно получить, используя плагины сообщества (для форматирования, обнаружения дубликатов и т. д.) и приняв рабочий процесс с обычным текстом, который поощряет частые проверки и резервные копии.
Энтузиаст личных финансов: бюджетирование и пользовательский анализ
Наш последний пример — энтузиаст личных финансов, использующий Beancount для управления домашними финансами и инвестициями с высоким уровнем детализации. Этот пользователь относится к своим личным финансам со строгостью бухгалтера и любопытством аналитика данных. Результатом становится книга Beancount, которая не только отслеживает каждый цент, но и служит основой для бюджетирования, прогнозирования и аналитических экспериментов.
Организация личной книги: многие люди начинают с одного файла Beancount для всех своих счетов, и этот энтузиаст не исключение. Он ведёт одну главную книгу (например, main.beancount), которая включает все счета (банковские счета, кредитные карты, кредиты, инвестиционные портфели и т. д.) и транзакции. Со временем он ввёл некоторую структуру, выделив разделы — например, у него есть файл для открытия/закрытия счетов и отдельные файлы для транзакций по годам, — которые включаются в главный файл. Такая модульная организация упрощает навигацию по годам данных (можно архивировать старые годы в отдельные файлы), оставаясь логически одной книгой. Другой личный пользователь на форуме сообщества описал похожую структуру: главный файл, который включает другие по категориям (например, Income.beancount, Expenses.beancount, Investments.beancount). Наш энтузиаст пока держит всё просто: один файл, синхронизируемый между устройствами.
Кстати о синхронизации: поскольку это личные финансы, этот пользователь хочет фиксировать транзакции везде, где бы он ни находился. Он использует мобильное приложение Beancount Mobile для быстрого добавления записей на ходу (например, чтобы записать расход наличными прямо в магазине). Файл книги распространяется через облачную синхронизацию (в данном случае Syncthing), так что телефон, ноутбук и VPS (сервер) имеют последнюю копию. На компьютере он предпочитает Emacs с beancount-mode для комфортного редактирования с подсветкой синтаксиса. Такая схема гарантирует, что где бы он ни находился — за столом или в пути, — он может сразу записать транзакции и ничего не забыть. Это отличный пример адаптации технических инструментов для личного удобства — по сути, создания собственного аналога коммерческих приложений для бюджетирования.
Маркировка и метаданные для детального отслеживания: этот пользователь использует теги, чтобы добавить к своим данным второе измерение помимо плана счетов. Для обычных категорий бюджета достаточно счетов (у него есть счета вроде Expenses:Groceries, Expenses:Rent и т. д.), но для сквозных тем, таких как события или цели, он использует теги. Например, он помечает все транзакции, связанные с его проектом ремонта дома, тегом #HomeReno, будь то покупка пиломатериалов в хозяйственном магазине (расход) или получение возврата от производителя (доход). Так он может легко сформировать отчёт об общей стоимости проекта, не разделяя эти расходы по разным счетам. Один пользователь Reddit продемонстрировал этот подход, помечая расходы вроде #garage-improvement или #lighting-improvement для домашних проектов, что делает фильтрацию и суммирование по ним через запросы Beancount тривиальными. Наш энтузиаст делает то же самое для отпусков (#ItalyTrip2025), крупных покупок и разовых событий.
Метаданные (пары ключ-значение на транзакциях) также используются для некоторых конкретных целей. Например, он добавляет метаданные location: ... к крупным расходам, чтобы отслеживать, где были потрачены деньги, или note: ... для дополнительного контекста помимо получателя и нарратива. В некоторых случаях он даже создавал собственные поля метаданных для помощи в прогнозировании. Один из примеров — добавление budget: X и frequency: monthly к определённым регулярным расходам — идея, вдохновлённая обсуждением в списке рассылки Beancount, где пользователь хранил бюджетные прогнозы в метаданных для каждого расхода. Эти поля метаданных не влияют на ядро Beancount, но энтузиаст написал небольшой скрипт на Python, который читает их и сравнивает фактические траты с запланированным бюджетом. Это альтернатива встроенным бюджетам Fava (описанным ниже), показывающая, как метаданные можно приспособить под волю пользователя. Как отметил создатель Beancount, метаданные «существуют только для вас [чтобы использовать в собственных скриптах] — Beancount их разбирает, но сам игнорирует». Короче говоря, этот пользователь не боится дополнять книгу дополнительной информацией для помощи своему личному анализу.
Бюджетирование с Beancount: одна из главных целей этого пользователя — придерживаться месячного бюджета. Раньше он использовал приложение для бюджетирования (YNAB) и хотел воспроизвести некоторые из его концепций бюджетирования по конвертам. Есть несколько способов делать бюджетирование в Beancount, но самый простой — использовать директивы budget в Fava. Наш энтузиаст добавляет записи budget в книгу так:
2025-01-01 custom "budget" Expenses:Groceries "monthly" 500 USD
2025-01-01 custom "budget" Expenses:DiningOut "monthly" 200 USD
2025-01-01 custom "budget" Expenses:Travel "yearly" 3000 USDКаждая строка устанавливает бюджет для счёта (категории) на период. Затем Fava отображает в веб-интерфейсе полосы «бюджет против факта», позволяя пользователю видеть, например, что он потратил 480 USD на продукты в этом месяце из 500 запланированных, и, возможно, 220 на питание вне дома (сверх бюджета). Энтузиаст регулярно проверяет отчёты Отчёт о прибылях и убытках и Расходы в Fava, которые показывают как месячные итоги, так и бюджетные цели. Fava удобно сводит дневные/недельные бюджеты в соответствующие временные интервалы. Используя интерфейс Fava для этого, пользователю не нужна отдельная таблица для бюджетирования; всё интегрировано. (Он также экспериментировал с более автоматизированной системой «конвертов», перемещая средства на фиктивные счета в начале каждого месяца, как предлагалось на форумах, но нашёл, что собственные директивы budget проще поддерживать.)
Для прогнозирования, помимо бюджетов, он следит за предстоящими счетами. Некоторые участники сообщества создали плагины для генерации будущих транзакций для подписок или графиков погашения кредитов, но этот пользователь выбрал более простой подход: он ведёт отдельный раздел книги с транзакциями с будущими датами для известных статей (например, арендная плата за следующий месяц или предстоящий годовой страховой платёж). Они остаются в книге, но не влияют на сегодняшние остатки, а когда наступает дата и транзакция становится текущей, она служит напоминанием (и он корректирует сумму при необходимости, чтобы соответствовать фактическому списанию). Это немного хак, но он работает для прогнозирования денежного потока без сложных инструментов.
Отслеживание инвестиций и учёт нескольких товаров: как энтузиаст финансов, этот пользователь также использует Beancount для консолидации инвестиционных счетов — акций, паевых фондов и криптовалют — наряду с денежными счетами. У него есть брокерские счета, активы которых (например, акции AAPL, GOOG и т. д.) записаны в Beancount как товары. Например, покупка 10 акций Apple будет записью, кредитующей денежные средства брокера и дебетующей счёт активов на 10 AAPL как количество товара. Способность Beancount обрабатывать любой товар здесь очень полезна; можно свободно смешивать валюты и акции. «Beancount может отслеживать количества в любой валюте, будь то USD или тикер акции», — как отметил один пользователь, что было большим улучшением по сравнению с приложениями для личных финансов, которые часто плохо поддерживают позиции по акциям. Наш энтузиаст использует ночную задачу cron для получения последних рыночных цен на все свои ценные бумаги и иностранные валюты. Каждую ночь в 4 утра скрипт получает цены (из Yahoo Finance или другого источника) и добавляет записи о ценах в книгу на этот день. Так, при следующем открытии Fava или запуске отчёта он может увидеть актуальные стоимости портфеля и даже динамику инвестиций во времени. Весь собственный капитал — по банковским счетам, пенсионным фондам и криптокошелькам — доступен в одном едином представлении. Это мечта для инвестора, ориентированного на данные: не нужно входить в несколько платформ, чтобы увидеть полную картину. По сути, он построил личную финансовую панель на основе Beancount.
Анализ и интеграция: что действительно отличает этого продвинутого пользователя личных финансов, так это то, как он анализирует данные после того, как они попали в Beancount. Со всеми транзакциями в базе данных SQLite (Beancount может запрашивать данные через встроенный язык запросов, похожий на SQL) пользователь может проводить собственный анализ. Он написал скрипты на Python, отвечающие на вопросы вроде «Каково трёхмесячное скользящее среднее моих расходов на продукты?» или «Как расходы на коммунальные услуги в этом году соотносятся с прошлым годом?». Один скрипт запрашивает книгу по определённым тегам и выводит результаты в датафрейм Pandas для дальнейших вычислений. Поскольку книга — это обычный текст, он также использовал блокноты Jupyter для экспериментов с разными визуализациями (помимо того, что предлагает Fava). Например, он построил собственную столбчатую диаграмму месячной нормы сбережений с помощью Matplotlib, агрегируя данные Beancount в Python. Такой анализ ad-hoc возможен только потому, что Beancount сохраняет данные доступными и машиночитаемыми. Как выразился один пользователь, извлечение данных тривиально — «У меня есть один скрипт на Python, который извлекает данные из Beancount с помощью языка запросов, а затем я использую датафрейм pandas, чтобы подготовить данные для отчёта». У нашего энтузиаста есть репозиторий таких маленьких скриптов, которые он запускает для своего годового финансового обзора.
Конечно, не всё требует программирования — большую часть времени он полагается на встроенные графики Fava. Fava предоставляет линейный график собственного капитала, тренд доходов против расходов и даже разбивку в виде древовидной карты (как показано ранее), и всё это в один клик. Пользователь ценит, что вся история его финансов с 2018 года доступна для запросов и аудита. Например, если ему интересно «сколько я потратил на ремонт автомобиля за последние 5 лет», он может написать быстрый запрос или фильтр в Fava, чтобы получить ответ, вместо того чтобы копаться в чеках. Это расширение возможностей — именно то, что привлекло его к Beancount: полное владение данными и бесконечная гибкость в анализе. В качестве бонуса книга в виде обычного текста перспективна на будущее — её можно версионировать, переносить или даже разбирать другими инструментами при необходимости. В отличие от приложения с закрытым исходным кодом, здесь нет риска потерять доступ к своей финансовой истории.
Ключевые практики в личной конфигурации: использование мобильных и настольных инструментов для удобного ввода данных, использование тегов и собственных метаданных для отслеживания жизненных событий и сквозных группировок, внедрение бюджетов через директивы budget в Fava для текущих целей по расходам, отслеживание инвестиций и нескольких валют в одной книге (с автоматическим обновлением цен) и выполнение собственного анализа путём прямого запроса данных книги. Этот случай показывает, что при небольшой настройке даже энтузиасты личных финансов могут достичь уровня понимания и контроля, обычно свойственного бизнесу, — и всё это остаётся увлекательным и интересным для технически подкованного пользователя.
Для хостингового аналога скриптов получения цен из этих примеров используйте Live Prices. Выберите поддерживаемые активы и валюту оценки, затем добавьте сгенерированные включения в вашу хостинговую книгу. Локальные конфигурации Fava по-прежнему нуждают в локальных файлах цен. Автоматические цены обновляют данные оценки; они не изменяют транзакции или стоимости лотов в этих конфигурациях.
Заключение
Во всех этих примерах сообщества прослеживается чёткая тема: гибкость Beancount позволяет создать высокоперсонализированную систему учёта. Продвинутые пользователи сообщества использовали простые текстовые файлы для создания решений, которые по возможностям соперничают с коммерческим ПО, но при этом идеально подогнаны под их рабочие процессы. Фрилансеры помечают и связывают записи, чтобы легко управлять проектами клиентов и счетами. Владельцы малого бизнеса скриптуют утомительные бухгалтерские задачи и интегрируют Beancount с современной инфраструктурой для всегда актуальной финансовой отчётности. Энтузиасты личных финансов используют книгу как единый источник истины для бюджетирования, инвестирования и принятия решений, дополняя её тегами и инструментами, чтобы ответить практически на любой вопрос о своих деньгах. Всё это достигается при сохранении ключевых преимуществ учёта в виде обычного текста: прозрачности, возможности аудита и контроля над своими данными.
Сообщество Beancount также создало богатую экосистему плагинов и интеграций. От режимов редакторов и мобильных приложений для ввода до веб-интерфейса Fava для визуализации и бесчисленных импортёров и утилит на GitHub — есть ресурсы почти для любой потребности. Пользователи часто делятся своими конфигурациями книг на форумах и в блогах, чтобы другие могли учиться и перенимать лучшие практики. Что важно, конфиденциальную информацию можно держать в тайне (или легко вырезать для публикации) благодаря человекочитаемому формату — как мы сделали в этом обзоре. Примеры выше демонстрируют, что будь вы разработчиком-фрилансером, основателем стартапа или фанатом личных финансов, вы можете подстроить Beancount под себя. Творчески используя теги и метаданные, автоматизируя где возможно, обрабатывая транзакции в нескольких валютах, планируя с помощью бюджетов и расширяя функциональность через плагины, сообщество продолжает раздвигать границы возможного в обычном тексте. Результат — бухгалтерские книги профессионального уровня, которые при этом интересно вести, давая пользователям как ясность, так и контроль над своими финансами.