Реальні налаштування Beancount
Вступленіе
Beancount — це універсальна система бухгалтерського обліку у простому тексті, і її користувачі пристосували її до найрізноманітніших реальних потреб. У цій вітрині спільноти ми представляємо анонімізовані приклади того, як різні люди структурують і використовують свої робочі процеси обліку в Beancount — від фрілансерів і власників малого бізнесу до ентузіастів особистих фінансів. Ці приклади висвітлюють творчі практики, як-от позначення транзакцій метаданими, автоматизація оновлень реєстру за допомогою власних скриптів, робота з кількома валютами, бюджетування та прогнозування, а також розширення Beancount за допомогою плагінів чи інтеграцій (наприклад, вебінтерфейс Fava). Мета — надихнути та поінформувати бухгалтерів, розробників і фінансово підкованих користувачів про те, що можливо завдяки гнучкій системі Beancount.
Для актуальних оглядів того ж кластера інструментів дивіться Beancount v3: What's New?, Essential Beancount Native Plugins You Should Know, The Beancount Ecosystem та Beancount's Technical Edge.

Приклад інтерфейсу: Багато користувачів 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 враховує це безперешкодно. У нашому прикладі консультант може виставляти рахунки деяким клієнтам у доларах США, а іншим — у євро. Робота з кількома валютами у 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, але найпростіший — використовувати директиви бюджету 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 для цього, користувач не потребує окремої електронної таблиці для бюджетування; усе інтегровано. (Він також експериментував із більш автоматизованою «конвертною» системою, переміщуючи кошти на фіктивні рахунки на початку кожного місяця, як пропонувалося на форумах, але виявив, що власні директиви бюджету простіше підтримувати.)
Для прогнозування, окрім бюджетів, він стежить за майбутніми рахунками. Деякі учасники спільноти створили плагіни для генерації майбутніх транзакцій для підписок чи графіків амортизації позик, але цей користувач обрав простіший підхід: він веде окрему секцію реєстру з транзакціями з майбутніми датами для відомих статей (як-от оренда наступного місяця чи майбутній щорічний страховий платіж). Вони залишаються в реєстрі, але не впливають на сьогоднішні залишки, і коли дата настає й транзакція стає поточною, вона слугує нагадуванням (і він скоригує суму за потреби, щоб вона відповідала фактичному списанню). Це трохи хакерський метод, але він працює для прогнозування грошового потоку без складних інструментів.
Відстеження інвестицій та облік у кількох товарах: Як ентузіаст фінансів, цей користувач також використовує 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. Такий спеціальний аналіз можливий лише тому, що Beancount зберігає дані доступними та машинозчитуваними. Як висловився один користувач, отримувати дані тривіально — «У мене є один скрипт на Python, який витягує дані з Beancount за допомогою мови запитів, а потім я використовую датафрейм pandas, щоб підготувати дані до звіту». Наш ентузіаст має репозиторій таких маленьких скриптів, які він запускає для свого щорічного фінансового огляду.
Звісно, не все потребує програмування — здебільшого він покладається на вбудовані графіки Fava. Fava надає лінійний графік чистого капіталу, тенденцію доходів проти витрат і навіть деревоподібну діаграму розподілу (як показано раніше), до яких можна дістатися одним клацанням. Користувач цінує те, що вся історія його фінансів із 2018 року доступна для запитів і аудиту. Наприклад, якщо він замислиться «скільки я витратив на ремонт автомобіля за останні 5 років», він може написати швидкий запит чи фільтр у Fava, щоб отримати відповідь, замість копатися в чеках. Це розширення можливостей — саме те, що привабило його до Beancount: повне володіння даними та безмежна гнучкість в аналізі. Бонусом реєстр у простому тексті є перспективним — його можна контролювати версіями, мігрувати чи навіть аналізувати іншими інструментами за потреби. На відміну від застосунку із закритим кодом, немає ризику втратити доступ до своєї фінансової історії.
Ключові практики в особистому налаштуванні: Використання мобільних і настільних інструментів для зручного введення даних, використання тегів і власних метаданих для відстеження життєвих подій і міжкатегорійних групувань, впровадження бюджетів через директиви budget Fava для постійних цілей витрат, відстеження інвестицій і кількох валют в одному реєстрі (з автоматичними оновленнями цін) та виконання власного аналізу шляхом прямого запиту даних реєстру. Цей випадок показує, що з невеликим налаштуванням навіть ентузіасти особистих фінансів можуть досягти рівня розуміння та контролю, зазвичай призначеного для бізнесу — і все це залишаючи процес цікавим і захопливим для технічно підкованого користувача.
Для хостованого еквівалента скриптів отримання цін із цих прикладів використовуйте Live Prices. Виберіть підтримувані активи та валюту оцінки, а потім додайте згенеровані включення до вашого хостованого реєстру. Локальні налаштування Fava все ще потребують локальних файлів цін. Автоматичні ціни оновлюють дані оцінки; вони не змінюють транзакції чи витрати на партії в цих налаштуваннях.
Висновок
У цих прикладах спільноти чіткою темою є те, що гнучкість Beancount уможливлює високо персоналізовану систему обліку. Досвідчені користувачі спільноти використали прості текстові файли, щоб створити рішення, які за можливостями не поступаються комерційному програмному забезпеченню, але при цьому спеціально адаптовані під їхні робочі процеси. Фрілансери тегують і зв'язують записи, щоб легко керувати клієнтськими проєктами й рахунками. Власники малого бізнесу скриптами позбуваються нудних бухгалтерських завдань і інтегрують Beancount із сучасною інфраструктурою для завжди актуальних фінансових даних. Ентузіасти особистих фінансів використовують реєстр як єдине джерело істини для бюджетування, інвестування та прийняття рішень, доповнюючи його тегами й інструментами, щоб відповісти практично на будь-яке запитання про свої гроші. Усе це досягається зі збереженням основних переваг обліку у простому тексті: прозорості, можливості аудиту та контролю над власними даними.
Спільнота Beancount також створила багатий екосистемний набір плагінів та інтеграцій. Від режимів редакторів і мобільних застосунків для введення до вебінтерфейсу Fava для візуалізації й незліченних імпортерів та утиліт на GitHub — є ресурси, які задовольняють майже будь-яку потребу. Користувачі часто діляться своїми налаштуваннями реєстрів на форумах і в блогах, тож інші можуть вчитися й переймати найкращі практики. Важливо, що чутливу інформацію можна тримати приватною (або легко приховати для поширення) завдяки формату, зрозумілому людині — як ми зробили в цій вітрині. Наведені приклади демонструють, що незалежно від того, чи ви фрілансер-розробник, засновник стартапу чи поціновувач особистих фінансів, ви можете підлаштувати Beancount під себе. Творчо використовуючи тегування й метадані, автоматизуючи де можливо, працюючи з транзакціями в кількох валютах, плануючи з бюджетами та розширюючи через плагіни, спільнота продовжує розсувати межі можливого у простому тексті. Результат — бухгалтерські реєстри професійного рівня, які також цікаво вести, даючи користувачам як ясність, так і контроль над своїми фінансами.