Реальні настройки Beancount
Вступленіе
Beancount — це універсальна система бухгалтерії у вигляді простого тексту, і його користувачі пристосували його до широкого спектру реальних потребностей. В цій вітрині спільноти ми представимо анонімні приклади того, як різні люди структурируют і використовують свои бухгалтерські workflows Beancount – від фрилансерів і владельців малого бізнесу до ентузіастів особистых фінансів. Ці приклади иллюстрируют творческие практики, такі як тегированіе транзакцій метаданными, автоматизацію оновленій журналу за допомогою власных скриптів, обробку мультивалютних операцій, бюджетування і прогнозування, а також розширеніе Beancount плагинами або інтеграціями (наприклад, веб-інтерфейс Fava).
For living overviews of the same tooling cluster, see Beancount v3: What's New?, Essential Beancount Native Plugins You Should Know, The Beancount Ecosystem, and Beancount's Technical Edge. Мета – надихнути і інформувати бухгалтерів, разработчиків і фінансово-грамотных користувачів про те, що можливо з гнучкою системою 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) не примушує этот тег, но это устоявшася в спільноті практика для позначеня транзакцій, очікучих оплату. Наприклад, поки Client 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"Директива Beancount document або метаданні дозволяют зв'язувати файли с записами, і Fava буде показувати гиперпосилання на ці прикріпленії. Це означає, що фрилансер (або его бухгалтер) може клікнути прямо зі звіту журналу, щоб побачити оригинальний PDF рахунку, гарантуючи простий доступ до документації. Фрилансер також використовує звіти Fava для моніторингу своего бізнесу: фильтруя Звіт про доходи або Баланс по клієнтам, він може побачити прибутковість по клієнтам і переконатись, що всі проекти оплачені. В підсумку, система Beancount цого фрилансера демонстрирует активное використання тегування і зв'язування для управленія проект-оріентированною бухгалтерією. Це превращает простий текстовый журнал в надійный інструмент бухгалтерії для фрилансерів, з ясною видимістю проектних расходів, мультивалютных доходів і статусів рахунків.
Ключові практики в настройці фрилансера: Використання тегів для группування транзакцій по проектам або цілям, зв'язування рахунків і платежів унікальными ідентификаторами, позначеніе несплачених платежів тегом #UNRESOLVED, прикріпленіе документів рахунків до записів журналу для довідок, і використання мультивалютної підтримки Beancount для виставленія рахунків іноземним клієнтам без проблем. Всі ці можливості досягаються за допомогою простих текстових записів і кількох допоміжних інструментів, демонстрируя мощь метаданних в Beancount.
Малый бізнес: Автоматизація і мультивалютная бухгалтеріїя
Дальше мы розглянем владельца малого бізнесу – конкретно засновтеля стартапу – который прийнял Beancount для веденія компанійських книг. Малі бізнеси имеют потребности, подібні до потребностей фрилансерів (рахунки, расходи, мультивалютність), але часто в більшому масштабі и с більшим акцентом на автоматизацію, послідовність і колаборацію. В цому випадку засновтель был технічно грамотним і создал высокоавтоматизированный workflow 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 без вручного редактирования. Це, по суті, власна автоматизація для применения бухгалтерських правил (для коммунальних платежів, підписок і т.д.) на льоту. Інший плагін гарантирует, що журнал завжди залишається збалансованим і відформатованим. Всі ці інструменти запускаются как части work-флоу засновтеля, коли нові данні інгестуються. Результат — журнал, который "оновляє себе" с мінімальным втручанням, що, по словам засновтеля, приносе его "чисту радость" як одержимому автоматизацією розробнику.
Безопасность и доступность также были важны. Засновтель хотел, щоб его фінансова команда (и даже его дружина, як наглядатель) могли легко переглядати книги. Для цого він настроил приватне розгортання 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 з інженерними затратами – превращая бухгалтерію в високоавтоматизированный пайплайн, зберегая прозрачность і гнучкість. Навіть якщо він не програміст, багато з цих переваг можут бути досягнуті за допомогою плагін від спільноти (для форматирования, детекції дубликатів і т.д.) і прийняття текстового work-флоу, который заохочує часті перегляди і резервні копії.
Ентузіаст особистих фінансів: Бюджетування і власний аналіз
Наш фінальний показ – це ентузіаст особистих фінансів – ктось, кто використовує 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 на DiningOut (понад бюджет). Ентузіаст регулярно перевіряє звіти Доходів и Расходів Fava, які показують як місячні підсумки, так і бюджетні цілі. Fava зручно згортоває денні/тижденні бюджети в відповідні часові періоди. Використовуючи інтерфейс Fava для цого, користувачу не потрібна окремна таблица для бюджетування; все інтегровано. (Він також експериментував с більш автоматизованною "конвертною" системою, переводя гроши в фіктивні рахунки на початку місяца, як пропонувалось на форумах, но знайшов власні бюджетні директиви простішими для підтримки.)
Для прогнозування, окромі бюджетів, він відслежує майбутні рахунки. Декілька членів спільноти создали плагіни для генерації майбутніх транзакцій для підписок або графіків амортизації кредитів, но цей користувач выбрав більш простий підход: він тримає окремний розділ журналу с транзакціями, датованими в майбутньому, для відомих позицій (таких как оренда на майбутній місяць або майбутній річний страховий платіж). Ці транзакції залишаются в журналі, но не впливают на сьогоднішні баланси, і коли настає дата і транзакція стає актуальною, він служе нагадуванням (и він зкоректує сумму, якщо потрібно, щоб відповідати фактичному платежу). Це невеликий хак, но він робить для прогнозування грошового потоку без складних інструментів.
Відслежування інвестицій і мультитоварная бухгалтерія: Як фінансовий ентузіаст, цей користувач також використовує Beancount, щоб консолидувати інвестиційні рахунки – акції, інвестиційні фонди і криптовалюти – поряд з грошовими рахунками. У він є брокерські рахунки, чиї активы (наприклад, акції AAPL, GOOG і т.д.) записані в Beancount як товары. Наприклад, купівля 10 акцій Apple буде записом, который кредитує брокерську грошову рахунок і дебетує рахунк активів з 10 AAPL как кількість товару. Здатність Beancount обробляти любой товар тут дуже користна; можно вільно мішати валюти и акції. "Beancount може відслежувати кількості в любої валюті, будь то USD або символ акції," як відмітив один користувач, що було великим покращеніем порівняно с застосунками особистих фінансів, які часто не добре поддержують позиції акцій. Наш ентузіаст використовує нічний cron-задачу для загрузки останніх риночних цін на всі його цінні папери і іноземні валюти. Кожен вечер о 4 ранці, скрипт загружає ціни (з Yahoo Finance або іншого джерела) и додає записи цін в журнал за той день. Таким образом, наступний раз, коли він відкриє Fava або запустить звіт, він може побачити актуальні вартості портфелю і навіть історію інвестиційної дохідності. Весь чистий капітал, включаючи банковські рахунки, пенсіонні фонди і крипто-гаманки, доступен в одному єдиному вигляді. Це мечта для data-driven інвестора: не треба логінитись в кілька платформ, щоб побачити всю картину. Він, по суті, создал власний фінансовий дашборд, живлений Beancount.
Аналіз і інтеграція: Те, що дійсно відрізняє цого особистого фінансового power-user'а, – це те, как він аналізує данні, коли вони в Beancount. З всеми транзакціями в базі SQLite (Beancount може запитувати данні через свою вбудовану мову запитів, яка схожа на SQL), користувач може робити власний аналіз. Він написав Python-скрипты, щоб відповідати на питання такі как "Який 3-місячний рухомый середній моїх расходів на продукти?" або "Как цей рік расходів на комунальні послуги порівняється с попередним?" Один скрипт запитує журнал за конкретні теги і виводить результати в dataframe Pandas для дальнього аналізу. Оскільки журнал – це простий текст, він також використовував Jupyter-ноутбуки для експериментів с різними візуализаціями (окромі того, що пропонує Fava). Наприклад, він зробив власну бар-чарту місячной нормы заощаджень, використовуючи Matplotlib, агрегуючи данні Beancount в Python. Цей вид ad-hoc аналізу можливий только тому, що Beancount тримає данні доступними і machine-readable. Как відмітив один користувач, извлеченіе данних тривіально – "у меня є один Python-скрипт, который витягує данні з Beancount за допомогою мови запитів, а потім я використовую pandas dataframe, щоб подготовити данні до звіту". Наш ентузіаст має репозиторій таких маленьких скриптів, которые він запускає для своєї річної фінансової перевірки.
Звісно, не все потребує кодингу – багато часу він покладається на вбудовані графіки Fava. Fava надає лінійний графік чистого капіталу, тренд доходів проти расходів, і навіть treemap-разбивку (як показувалось ранiше), які всі є одним кліком. Користувач цінує те, що вся історія его фінансів з 2018 року запитуема і аудиторськи перевірюема. Наприклад, если він задумуєсь "скільки я потратив на ремонт автомобіля за останні 5 років," він може написати швидкий запит або відфільтрувати в Fava, щоб получити відповід, заміст того, щоб ритись в чеках. Ця емповермент – те, що притягнуло его до Beancount: повна власність над данними і безкінечна гнучкість в аналізі. Как бонус, простий текст журналу є future-proof – его можно версіонувати, мігрирувати або навіть парсити іншими інструментами, якщо потрібно. На відміну від закритого ПЗ, немає риску втрати доступу до своєї фінансової історії.
Ключові практики в особистій настройці: Використання мобильных і десктопних інструментів для зручного вводу данних, використання тегів і власних метаданних для відслежування життєвых подій і пересічних группувань, впровадженіе бюджетів через директиви budget Fava для поточних цільових расходів, відслежування інвестицій і кількох валют в одному журналі (с автоматичными оновленіями цін), і виконання власного аналізу, запитуючи данні журналу напряму. Цей случай показує, що з невеликою настройкою навіть ентузіасти особистих фінансів можут досягти рівня інсайту і контролю, зазвичай зарезервованого для бізнесів – все, зберігаючи веселіе і залученіе для tech-savvy користувача.
Висновок
По всім цим прикладам спільноти ясна тема: гнучкість Beancount забезпечує високо персоналізовану бухгалтерську систему. Power-користувачі в спільноті використовують прости текстові файли, щоб побудувати рішенія, які конкурують з коммерційным ПЗ по возможностям, но при том є tailor-made під их workflows. Фрилансери тегують і зв'язують записи, щоб управляти клієнтськими проектами і рахунками з легкістю. Владельці малого бізнесу скриптують нудні бухгалтерські задачі и інтегрують Beancount с современной інфраструктурою для всегда оновленних фінансів. Ентузіасти особистих фінансів використовують журнал как єдине джерело правди для бюджетування, інвестування і прийнятія рішень, дополняючи его тегами і інструментами, щоб відповідати на почти любое запитання про свои гроши. Все це досягается, зберігаючи головні переваги бухгалтерії в вигляді простого тексту: прозрачность, аудиторську перевірюемость і контроль над своєю данною.
Спільнота Beancount також произведла богату екосистему плагін і інтеграцій. Від режимів редакторів і мобильных застосунків для вводу, до веб-інтерфейсу Fava для візуализації, до незлiчних імпортерів і утиліт на GitHub, існують ресурси, щоб задовольнити почти любу потребность. Користувачі часто поділяться своими настройками журналу на форумах і блогах, так что інші можут вчиться и приймати кращі практики. Важно, що чутлива інформація може бути збережена приватною (або легко відредагована для ділення) завдяки люду-читаемому формату – як мы зробили в цій вітрині. Приклади вищі демонстрируют, що будь вы фриланс-розработник, засновтель стартапу або фінансовий нерд, вы можете пригнути Beancount до своей волі. Використовуючи тегування і метаданні творчески, автоматизуючи там, де можливо, обробляя мультивалютні транзакції, плануючи с бюджетами і розширюючи через плагіни, спільнота продолжает розширювати границі того, что можливо в простому тексті. Результат — професіональні бухгалтерські журнали, які також є залучающими для веденія, даючи користувачам як ясність, так і контроль над своими фінансами.