Перейти до основного вмісту

Як Beancount та Fava забезпечують роботу інформаційних

Beancount і Fava перетворюють прості текстові бухгалтерські книги на інтерактивні інформаційні панелі: запитувані баланси

Вступ

Beancount — це відкрита система бухгалтерського обліку з подвійним записом, яка використовує текстові файли як бухгалтерську книгу. Вона наголошує на простоті, прозорості та гнучкості у відстеженні фінансів. Fava — це потужний веб-інтерфейс для Beancount, що надає інтерактивний інтерфейс для перегляду звітів, візуалізацій та керування вашою бухгалтерською книгою. У цьому звіті ми досліджуємо основні можливості Beancount та Fava, а також як досягти аналітики фінансів у реальному або близькому до реального часі за допомогою цих інструментів. Ми охоплюємо поради з налаштування для автоматизації та оновлення даних, функції візуалізації Fava (для миттєвого перегляду грошових потоків та виявлення тенденцій), інтеграцію із зовнішніми панелями (Grafana, Metabase тощо), приклади власних панелей та плагінів, кейси використання у персональних та малих бізнес-фінансах, порівняння з іншими платформами (Power BI, QuickBooks) та плюси/мінуси використання Fava + Beancount для аналітики на основі даних.

Ознайомтеся з прикладом живої бухгалтерської книги:

Відкрити Example Ledger у новій вкладці

Панель криптовалютного портфеля на beancount.io з відстеженням балансу Bitcoin, Ethereum та Solana з графіком чистої вартості

Переглянути живу бухгалтерську книгу →

Основні можливості Beancount та Fava

Beancount (двозначний движок для бухгалтерського обліку у простому тексті)

  • Двосторонній журнал у простому тексті: Beancount зберігає транзакції в одному текстовому файлі .beancount (або кількох файлах, включених разом). Кожна транзакція має бути збалансованою (загальні дебети = загальні кредити) між рахунками, забезпечуючи цілісність бухгалтерії. Формат простого тексту означає, що ваші дані читабельні людиною, контрольовані за версіями та не прив’язані до жодного постачальника.
  • Гнучкі, ієрархічні рахунки: Ви можете визначити будь-які рахунки (наприклад, Assets:Bank:Checking, Expenses:Food:Coffee) в ієрархії. Beancount не нав’язує структуру вашої плану рахунків, тому він підходить для особистих фінансів, бухгалтерії малого бізнесу, інвестицій тощо – це «гнучкий: підходить для особистих фінансів, бухгалтерії малого бізнесу, криптовалют, інвестицій у акції та інших сферах».
  • Декілька валют і товарів: Beancount має першокласну підтримку кількох валют та товарів (наприклад, акцій, криптовалюти). Ви можете реєструвати транзакції у різних валютах, визначати курси обміну (директиви ціни) і відстежувати базову вартість. Він може формувати звіти «за собівартістю» або «за ринковою вартістю», якщо надані дані про ціну. Це робить його придатним для портфелів і міжнародних фінансів.
  • Автоматизовані перевірки і врівноваження: Система підтримує балансові твердження (ви можете задекларувати, яким має бути баланс рахунку на певну дату, і Beancount виведе помилку, якщо баланс не співпаде) і балансові транзакції для закриття книг. Також підтримуються вступні/заключні проводки власного капіталу та розрахунок нерозподіленого прибутку для закриття періодів. Це допомагає гарантувати узгодженість ваших книг і вчасно виявляти помилки.
  • Потужний движок запитів і звітності: Beancount постачається з мовою запитів BQL (Beancount Query Language). Використовуйте bea query для BQL у терміналі та bea report для стандартних звітів; встановлюйте CLI швидкий старт, а не застарілі скрипти консолі. Ви можете запитувати журнал для отримання кастомізованих звітів (наприклад, список витрат за отримувачем, грошовий потік за період) – фактично використовуючи журнал як базу даних. Продуктивність залишається високою навіть при тисячах транзакцій. Експорт у CSV з bea query -f csv -o report.csv "BQL", замінюючи BQL на свій запит. Дивіться шаблони фінансової звітності для повних прикладів.
  • Розширюваність через плагіни: Beancount написаний на Python і дозволяє створювати власні плагіни для розширення функціональності. Плагіни можуть застосовувати додаткові правила або обчислення при обробці файлу. (Наприклад, існують плагіни для роботи з податковими партіями або для контролю, щоб жодна покупка не була без вартості.) Система плагінів і Python API дозволяють просунутим користувачам створювати сценарії для власної логіки або інтеграції Beancount з іншими системами.
  • Імпортери для зовнішніх даних: Важливою практичною функцією є фреймворк імпортерів у окремому пакеті beangulp (у версії Beancount 3.2.3 немає модуля beancount.ingest). Ви створюєте клас імпортера, який наслідує beangulp.Importer і реалізує identify, extract і account. Він розбирає завантажений файл (CSV, OFX, PDF-виписки тощо) і конвертує його в записи Beancount. Це необхідно для автоматизації (про це далі).
  • Аудит і контроль версій: Оскільки це простий текст, ви можете зберігати журнал у Git чи іншій системі контролю версій. Кожна зміна прозора, і ви маєте повну історію редагувань. Це спрощує аудит і перевірку змін (багато користувачів щодня комітять зміни у Git, забезпечуючи захищений від підробок журнал усіх фінансових записів). Такий рівень прозорості – це ключова відмінність від закритого бухгалтерського ПЗ – «без SaaS-прив’язки – просто чистий, прозорий облік із потужною звітністю.»

Fava (Веб-інтерфейс для Beancount)

  • Інтерактивний веб-інтерфейс: Fava надає локальний веб-сервер, який відображає ваш Beancount реєстр у вигляді багатого UI. Він показує основні звіти (Звіт про прибутки та збитки, Баланс тощо), реєстри рахунків і журнали у браузері з інтерактивним керуванням. Інтерфейс динамічний та зручний у порівнянні з командним рядком. Ви запускаєте його простою командою fava yourfile.beancount і отримуєте веб-додаток для ваших книг.
  • Вбудовані графіки та діаграми: Fava генерує графіки для візуалізації ваших даних. Наприклад, він включає лінійний графік Чистої вартості за часом, стовпчикові діаграми доходів проти витрат за місяць, а також кругові та деревовидні діаграми для розподілу витрат. Ці візуалізації оновлюються разом із вашими даними та підтримують різні види перегляду (наприклад, «по собівартості» проти «ринкової вартості» для інвестицій). Ми детально розглянемо ці можливості візуалізації пізніше.
  • Фільтрація та пошук: У верхній частині сторінок Fava розташований рядок фільтрації, який дозволяє розрізати й сортувати ваші дані в режимі реального часу. Ви можете фільтрувати за часом (наприклад, рік, квартал, місяць), за регулярним виразом для рахунку, за платником, за описом або за тегами/посиланнями. Це полегшує огляд даних у реальному часі – наприклад, швидко відфільтрувати «Tag=Travel» та «Year=2025», щоб побачити всі витрати на подорожі у 2025 році з підсумками. Інтерфейс підтримує складні запити через цей рядок фільтрації або через сторінку Запитів (де можна безпосередньо виконувати BQL-запити).
  • Підтримка кількох файлів і консолідація: Fava може завантажувати кілька файлів Beancount одночасно (корисно, якщо ви розділяєте реєстри) та перемикатися між ними. При потребі він також може консолідувати їх (наприклад, персональні та бізнес-реєстри, переглянуті разом).
  • Введення даних та редагування: Особливістю є те, що Fava не тільки для читання – він має редактор та форму для введення операцій. Ви можете додавати нові операції через веб-форму (вони будуть вставлені у ваш .beancount файл). Також можна відкрити вихідний файл у зовнішньому редакторі з Fava. Fava підтримує комбінації клавіш для досвідчених користувачів. Це перетворює Fava на легку бухгалтерську систему, де ви можете вводити та переглядати дані в одному інтерфейсі.
  • Звіти та деталізація рахунків: Fava надає стандартні бухгалтерські звіти: Звіт про прибутки та збитки, Баланс, Пробний баланс і список вкладень для інвестицій. Баланс і Звіт про прибутки та збитки інтерактивні – ви можете клацнути на рахунок, щоб розгорнути його деталі, або переключатися між переглядом по собівартості й ринковій вартості активів. Fava також показує «нереалізований прибуток» для інвестицій, якщо у вас є цінові дані. Він формує журнал всіх записів з можливістю фільтрування за різними критеріями (зручно для пошуку конкретних операцій).
  • Управління документами: Якщо ви додаєте чеки чи виписки, Fava допомагає зорієнтуватися серед них. Beancount має поняття папки з документами, а Fava дозволяє перетягувати файли на рахунки або операції – вони збережуться і додадуть запис про документ у ваш реєстр. Це корисно для збереження підтверджуючих документів, пов’язаних з даними реєстру.
  • Налаштування через розширення: Fava можна розширювати плагінами (написаними на Python) для додавання нових звітів або функцій. Деякі розширення йдуть у комплекті (наприклад, звіт список портфоліо для інвестицій). Ми обговоримо користувацькі розширення пізніше, але в основному дизайн Fava дозволяє додавати нові сторінки і навіть кастомний JavaScript через API розширень. Це означає, що якщо певна аналітика чи панель інструментів не вбудовані, просунутий користувач може їх додати.
  • Продуктивність: Fava працює ефективно – він завантажує дані в пам’ять та швидко віддає сторінки. Основний парсер Beancount швидкий, тому типові особисті реєстри завантажуються за секунду чи дві. На практиці Fava може обробляти багаторічні особисті реєстри, хоча надзвичайно великі файли (десятки тисяч операцій) можуть вимагати оптимізації (наприклад, архівування старих записів).
  • Веб-доступ і мобільність: Запускаючи Fava на сервері або навіть ноутбуці, ви можете отримувати доступ до своїх фінансів з будь-якого браузера. Деякі користувачі розміщують Fava на приватному сервері або Raspberry Pi, щоб перевіряти фінанси на ходу (можливо, захищаючи це паролем або VPN, оскільки в Fava немає вбудованої автентифікації). Це фактично дає вам самостійно розміщений «веб-додаток» для фінансів, без передачі даних третім особам.

Підсумовуючи, Beancount забезпечує надійну основу для прозорого бухгалтерського обліку на основі тексту з суворими правилами подвійного запису та підтримкою мультивалютності. Fava розвиває це, пропонуючи доступний інтерфейс з миттєвими оглядами (звітами, діаграмами) та можливістю взаємодії з вашими даними. Разом вони утворюють надзвичайно гнучку систему бухгалтерського обліку та аналітики, яку ви контролюєте від початку до кінця.

Аналітика в реальному (або майже реальному) часі з Beancount і Fava

Досягнення аналітики в реальному або майже реальному часі за допомогою Beancount і Fava передбачає автоматизацію потоку даних у ваш журнал та забезпечення відображення актуальної інформації в інструментах. За замовчуванням Beancount є пакетним процесом (ви додаєте записи до файлу, а потім переглядаєте звіти), а Fava помічає зміни і вимагає оновлення. Однак за правильного налаштування ви можете оптимізувати оновлення так, щоб нові транзакції та зміни з’являлися майже миттєво.

Виявлення змін у файлі: Fava відстежує зміни у файлі журналу. Якщо ви редагуєте файл .beancount (або файли, що входять до нього) у редакторі, на сторінці з’являється повідомлення «Виявлено зміну файлу. Натисніть для перезавантаження.» Fava опитує свій кінцевий пункт get_changed. Коли спостерігач повідомляє про зміну, Fava перезавантажує журнал на стороні сервера, а повідомлення пропонує одним кліком оновити перегляд. На практиці це перезавантаження дуже швидке (зазвичай менше за секунду для типових журналів). Це означає, що Fava може слугувати як живий дашборд якщо файл журналу часто оновлюється. За замовчуванням він чекає вашого кліку, щоб не порушувати ваш перегляд.

Безперервний імпорт/оновлення: Щоб отримувати дані в реальному часі, потрібно автоматизувати додавання транзакцій у файл Beancount. Існує кілька поширених стратегій:

  • Заплановані завдання імпорту (Cron): Багато користувачів налаштовують cron-задачу (або плановане завдання) для періодичного отримання нових транзакцій від фінансових установ (наприклад, щовечора або щогодини) і додавання їх до бухгалтерської книги. Наприклад, ви могли б запустити імпортер beangulp для останнього банківського завантаження (CSV або OFX). Один з користувачів Beancount створив автоматизацію, завдяки якій його бухгалтерські записи оновлюються самі: “бачити, як моя бухгалтерська книга оновлюється без мого втручання в відкритому форматі, приносить мені чисту радість”. Для цього було використано підключення до банківських API і регулярне планування оновлень. Користувацький скрипт на Python, що використовує банківські API (наприклад Plaid), може запускатися за розкладом і записувати нові записи до бухгалтерської книги. Валідуйте кожен запуск за допомогою bea check, перш ніж він торкнеться вашого головного файлу. Після кожного запланованого імпорту, якщо у вас запущено Fava, ви просто оновлюєте Fava, щоб побачити нові дані.

  • Спостерігачі файлів та тригери: Замість планування за часом можна використовувати спостерігачі файлів для реагування на події. Наприклад, якщо ваш банк може надсилати вам щоденний звіт електронною поштою або ви кладете CSV-файл у папку, скрипт може виявити цей файл (використовуючи inotify на Linux або аналогічний інструмент) і одразу ж виконати процедуру імпорту, потім сигналізувати Fava про необхідність перезавантаження. Хоча Fava ще не підтримує автоматичне оновлення в браузері, у вас хоча б будуть актуальні дані, і при наступному відкритті сторінки чи натисканні на оновлення ви побачите нові записи. Деякі проєкти спільноти йдуть далі: для Ledger (побратим Beancount) один користувач створив невеликий сервер, який в реальному часі передає дані Ledger до Grafana, показуючи, що подібний підхід можна застосувати й до Beancount – власне, побудувати демон, який безперервно підживлює ваші інформаційні панелі.

  • Пряме інтегрування через API: Замість роботи з файлами досвідчені користувачі можуть безпосередньо підключатися до банківських API (наприклад Plaid або регіональних Open Banking API) для частого отримання транзакцій. Мотивована особа може автоматизувати “живий” імпорт у циклі (з дотриманням обмежень частоти запитів) – фактично опитувати банк на наявність нових даних кожні кілька хвилин. Немає перешкод для того, щоб “зареєструватися у Plaid API і робити так само [автоматизацію] локально”. Кожна нова транзакція може додаватися до файлу Beancount відразу після отримання. З таким підходом Fava справді стає інформаційною панеллю в реальному часі для ваших рахунків, конкуруючи з актуальними стрічками комерційних додатків.

Оновлення даних у Fava: Як тільки ваші дані оновлюються, відобразити їх у Fava досить просто: оновлення сторінки браузера (F5) або натискання сповіщення про перезавантаження завантажить найактуальніший стан головної книги. Зверніть увагу, що fava --debug не відсилає зміни головної книги до браузера. Його допоміжний текст - “Увімкнути налагодження”. Він запускає відлагоджувач Werkzeug і перезавантажувач коду для власного коду Fava та встановлює автоматичне перезавантаження шаблонів Jinja. Це перезавантажує серверний код і шаблони сторінок під час розробки розширень. Це не пов’язано з монітором файлів, який виявляє зміни в головній книзі. Альтернативно, якщо ви створюєте користувацький інтерфейс, ви можете налаштувати його на опитування кінцевої точки get_changed Fava і оновлюватися при виявленні нових даних.

Миттєві розрахунки: Швидкий парсинг Beancount означає, що навіть якщо ви оновлюєте файл головної книги кожні кілька хвилин, час від отримання даних → оновлення файлу → перезавантаження Fava дуже короткий. Наприклад, один користувач зазначає, що перезавантаження Fava після редагування файлу “ледь помітне… безумовно менше секунди” для головних книг розумного розміру. Таким чином, можна тримати вікно Fava відкритим і періодично натискати оновлення, щоб імітувати живу панель моніторингу. (Для справжнього живого досвіду можна створити невеликий скрипт для автоматичного оновлення браузера або скористатися функцією браузера оновлювати сторінку кожні N секунд.)

Звірка та сповіщення: Щоб довіряти даним у реальному часі, також потрібно часто звіряти баланси. Beancount полегшує це за допомогою тверджень про баланс і індикатора “актуальності”. Насправді, Fava підсвічує рахунки зеленим, жовтим або червоним, коли директива open містить метадані fava-uptodate-indication. Колір відображає, чи охоплюють останні перевірки балансу останні записи рахунку. Це можна використовувати для швидкого визначення, чи збігається баланс рахунку в головній книзі з останнім банківським виписом. У майже реальному часі можна автоматизувати щоденні перевірки балансу (щоб щоранку головна книга містила закриваючий баланс банку за вчора для кожного рахунку). Індикатор Fava тоді повідомить, чи пропущено щось в автоімпорті або є розбіжність, забезпечуючи впевненість, що “живі” дані, які ви бачите, є точними.

Приклад автоматизації: Припустимо, ви хочете щоденні оновлення грошових потоків. Ви можете налаштувати cron-завдання, яке запускається щоночі о 3-й годині: воно виконує скрипт Python, який використовує API вашого банку для отримання транзакцій за останній день, записує їх у import_today.beancount, а потім додає цей файл до вашої основної книги обліку. Також він записує баланс на кінець дня. Коли ви прокидаєтеся, відкриваєте Fava — вона показує всі транзакції до вчорашнього дня включно, і ви бачите оновлені доходи/витрати поточного місяця. Якщо протягом дня ви робите витрати, ви можете додати їх вручну (наприклад, через нову форму транзакцій у Fava на телефоні), або почекати нічного імпорту. Такий гібридний підхід (переважно автоматизований, з можливістю ручного додавання за потребою) дає майже в режимі реального часу картину. Інший варіант — залишити відкритою сторінку Journal у Fava і використовувати її як реєстр: коли ви витрачаєте, швидко записуєте транзакцію (як у чековій книжці) — таким чином ви сама пряма лінія даних у реальному часі. Це більш ручний метод, але деяким користувачам подобається така прозорість. Для справжніх потокових оновлень без ручних дій потрібно буде інвестувати в скриптування і, можливо, використовувати сторонні API, як описано вище.

Підсумовуючи, поєднуючи автоматизацію імпорту Beancount з швидким оновленням Fava, ви можете отримати фінансові дані майже в реальному часі. Це може бути не так просто, як натиснути кнопку для отримання такого ж рівня живого потоку, як у сервісів на кшталт QuickBooks (які автоматично підвантажують банківські потоки), але це можливо — і, що важливо, ви зберігаєте повний контроль і прозорість процесу. Як зазначив один прихильник обліку у plain-text, деякі початкові зусилля можуть дати автоматизовану систему, яка «набагато краща за комерційні рішення, і значно гнучкіша та розширювана». У наступному розділі ми побачимо, як можливості візуалізації Fava дозволяють вам одразу зрозуміти ці актуальні дані, перетворюючи сирі транзакції на інсайти.

Можливості візуалізації у Fava (грошові потоки, тенденції, інспекція в реальному часі)

(GitHub - beancount/fava: Fava - вебінтерфейс для Beancount) Звіт про прибутки та збитки Fava (у веб-інтерфейсі) підтримує багаті візуалізації, такі як treemaps (зображено) та діаграми сонячного променя для швидкого ознайомлення зі структурою доходів і витрат. У цій treemap кожен прямокутник представляє категорію витрат, розмір якої відповідає сумі – ви миттєво бачите, що Оренда (великий зелений блок) домінує у витратах. Верхня панель фільтрів та керування (у верхньому правому куті) дозволяють змінювати валюту, тип діаграми та період часу (наприклад, перегляд даних за місяць). Fava також надає лінійні діаграми (наприклад, чиста вартість з часом) та стовпчикові діаграми (наприклад, доходи проти витрат за місяць), щоб допомогти виявляти тенденції у ваших фінансових даних.

Одна з найбільших переваг Fava полягає у тому, що вона миттєво перетворює дані бухгалтерської книги у візуальні, інтерактивні звіти. Як тільки бухгалтерська книга завантажена, Fava генерує діаграми, які дозволяють легко зрозуміти грошові потоки та тенденції з першого погляду:

  • Treemap/Sunburst доходів і витрат: На сторінці Звіту про прибутки та збитки Fava може відображати ваші доходи і витрати у вигляді treemap або sunburst діаграми. Вони чудово підходять для «швидкої» візуалізації грошових потоків. Наприклад, якщо ваші щомісячні витрати показані у вигляді treemap, площа кожного прямокутника відповідає величині кожної категорії витрат. Великі блоки одразу показують, куди пішло найбільше коштів (наприклад, оренда житла, іпотека, податки тощо), тоді як менші блоки – дрібні витрати. Це надзвичайно корисно для виявлення тенденцій у витратах – якщо блок «Відвідування ресторанів» щомісяця зростає, ви побачите це візуально. Ви можете переключитися на діаграму sunburst, щоб побачити ієрархічний поділ (наприклад, зовнішнє кільце може відображати підкатегорії, такі як Продукти харчування проти Ресторанів у категорії Їжа). Ці діаграми оновлюються відповідно до обраного періоду (один місяць, рік до дати тощо), даючи вам миттєву візуалізацію грошових потоків за відповідний період. Користувач на форумі plain-text accounting зауважив: “Я дуже часто використовую treemaps доходів і витрат. Вони дають чудове візуальне відчуття наших фінансових рухів.” – саме таке негайне розуміння і є метою діаграм Fava.

  • Чистий капітал і баланс у часі: Fava надає лінійний графік чистого капіталу у часі (на сторінці «Баланс» або «Статистика»). Цей графік відображає суму ваших активів за вирахуванням зобов'язань у кожен момент часу (щодня, щотижня або щомісяця). Це незамінно для виявлення тенденцій – ви можете бачити траєкторію ваших фінансів (наприклад, постійне зростання або падіння у певні періоди). Якщо у вас є інвестиції, ви можете переключатися між відображенням вартості за собівартістю та ринковою (якщо записані дані про ціни) – наприклад, чистий капітал за ринковою вартістю може коливатися з цінами на акції, а за собівартістю він плавніший. Fava також може відображати баланси рахунків у часі. Якщо ви клацнете на рахунок (наприклад, Assets:Bank:Checking), сторінка рахунку покаже графік історії балансу цього рахунку. Ви можете миттєво оцінити рухи готівки на своєму рахунку – що фактично є графіком грошового потоку (нахил лінії балансу вказує на чистий грошовий потік). Якщо він йде вниз, ви знаєте, що витрачаєте більше, ніж заробляєте у цей період. Аналізуючи ці тенденції, ви можете помітити закономірності, наприклад, «кожного грудня мої заощадження падають (святкові витрати)» або «мої інвестиції різко зросли цього кварталу».

  • Стовпчикові діаграми для порівняння за періодами: У вигляді Звіту про прибутки та збитки Fava має вкладки для «Щомісячний прибуток», «Щомісячний дохід», «Щомісячні витрати» тощо. Вибір цих вкладок показує стовпчикові діаграми за місяцями. Наприклад, Щомісячний чистий прибуток покаже надлишок чи дефіцит за кожен місяць у вигляді стовпчика, що полегшує порівняння результатів між місяцями. Ви швидко можете ідентифікувати аномалії (наприклад, великий негативний стовпчик у квітні означає, що в цьому місяці був незвичайний збиток або витрати). Аналогічно, стовпчикова діаграма «Щомісячні витрати» групує або складає витрати за категоріями по місяцях, тож ви можете бачити, які категорії коливаються. Це чудово для виявлення тенденцій у часі – наприклад, ви можете помітити піки витрат на «Подорожі» щоразу влітку або вищі рахунки за «Комунальні послуги» взимку. По суті, Fava надає деякі можливості додатка для бюджетування (відстеження тенденцій) із повною налаштовуваністю (оскільки ви визначаєте категорії та спосіб їх підсумовування).

  • Фільтрація в режимі реального часу та інспекція даних: Візуалізації у Fava не є статичними; вони працюють у тандемі з фільтрацією Fava. Припустимо, ви хочете перевірити певний сценарій: «Як виглядають мої щоквартальні грошові потоки лише для моїх бізнес-рахунків?» Ви можете встановити фільтр часу на Q1 2025 та відфільтрувати рахунки за вашою бізнес-ієрархією — Fava миттєво оновить діаграми, щоб показати чистий дохід, дендрограму витрат тощо, але лише для цієї підмножини. Така інтерактивна нарізка означає, що ви можете дуже швидко робити ад-хок аналіз, не пишучи запитів. Подання Журналу також підтримує живу фільтрацію: ви можете шукати за отримувачем або підрядком у нарації і одразу побачити відфільтрований список транзакцій. Якщо ви дивитесь на дані в реальному часі (наприклад, ви щойно імпортували транзакції минулого тижня), ви можете відфільтрувати за тегом #uncategorized, щоб побачити нові транзакції, які можуть потребувати категоризації, або за @pending (якщо ви позначаєте очікуючі записи), щоб побачити, що ще не очищено. Ця можливість інспекції в реальному часі також допомагає забезпечити якість даних — адже ви можете ізолювати та оперативно усувати аномалії.

  • Звіт про грошові потоки (непрямий): Хоча Beancount/Fava за замовчуванням не формує офіційний звіт про грошові потоки (розподіл на операційну, інвестиційну та фінансову діяльність), ви можете імітувати його за допомогою кастомних запитів або структуруючи рахунки. Наприклад, ви можете тегувати певні транзакції або використовувати конкретні рахунки для інвестування та фінансування, а потім запитувати підсумки. Інтерфейс запитів Fava виконує BQL, такий як SELECT sum(position) WHERE account ~ 'Assets:Bank:Checking'. Він повертає баланс чекінгового рахунку позаду діаграм. Наведений нижче приклад ілюструє повний цикл. Проте більшість особистих користувачів вважають достатнім комбінування трендів балансу з діаграмами доходів і витрат для розуміння грошових потоків.

  • Візуалізація активів і портфеля: На сторінці Holdings Fava показує ваші поточні активи комодітіз (наприклад, акції, облігації, криптовалюти) з кількістю, собівартістю, ринковою вартістю та нереалізованим прибутком. Хоч це й таблиця, а не графік, вона дуже корисна для оперативного огляду стану вашого портфеля. Деякі розширення спільноти (наприклад, fava-investor, описане далі) додають більше візуалізацій для портфелів, таких як кругові діаграми розподілу або графіки прибутковості. Навіть без розширень ви можете бачити, як змінюється вартість вашого фондового портфеля за останніми цінами — якщо ви регулярно оновлюєте котирування (що можна автоматизувати щодня), графіки Fava відображатимуть актуальну ринкову вартість ваших інвестицій у режимі реального часу.

Приклад на практиці: два місяці витрат

Цей приклад виконується цілком у Beancount 3.2.3 з beanquery 0.2.0. Збережіть бухгалтерську книгу як example.beancount. Вона містить два платежі зарплати і чотири витрати.

option "title" "Analytics example"
option "operating_currency" "USD"
 
2024-01-01 open Assets:Bank:Checking USD
2024-01-01 open Expenses:Food:Groceries USD
2024-01-01 open Expenses:Food:Dining USD
2024-01-01 open Expenses:Housing:Rent USD
2024-01-01 open Income:Salary USD
2024-01-01 open Equity:Opening-Balances USD
 
2024-01-05 * "Employer" "January salary"
  Income:Salary  -3000.00 USD
  Assets:Bank:Checking  3000.00 USD
 
2024-01-08 * "Grocery Store" "Weekly groceries"
  Expenses:Food:Groceries  120.00 USD
  Assets:Bank:Checking  -120.00 USD
 
2024-01-12 * "Restaurant" "Dinner out"
  Expenses:Food:Dining  80.00 USD
  Assets:Bank:Checking  -80.00 USD
 
2024-02-01 * "Landlord" "February rent"
  Expenses:Housing:Rent  1000.00 USD
  Assets:Bank:Checking  -1000.00 USD
 
2024-02-05 * "Employer" "February salary"
  Income:Salary  -3000.00 USD
  Assets:Bank:Checking  3000.00 USD
 
2024-02-10 * "Grocery Store" "Weekly groceries"
  Expenses:Food:Groceries  150.00 USD
  Assets:Bank:Checking  -150.00 USD

Спершу перевірте це. Потім виконайте запит витрат за категоріями.

bea --file example.beancount check
bea --file example.beancount query "SELECT account, sum(position) WHERE account ~ 'Expenses' GROUP BY account ORDER BY account"

Чиста бухгалтерська книга виходить з кодом 0 з bea check; помилки виводяться з ненульовим кодом виходу. Запит повертає по одному рядку на рахунок витрат.

        account          sum(position)
-----------------------  ------------
Expenses:Food:Dining        80.00 USD
Expenses:Food:Groceries    270.00 USD
Expenses:Housing:Rent     1000.00 USD

Ще два запити доповнюють картину. Загальний дохід і загальні витрати:

SELECT sum(position) WHERE account ~ 'Income'
SELECT sum(position) WHERE account ~ 'Expenses'

Вони повертають (-6000.00 USD) і (1350.00 USD). Отже, домогосподарство заробило 6,000.00 USD, витратило 1,350.00 USD і заощадило 77.5%. Баланс на розрахунковому рахунку це підтверджує:

SELECT sum(position) WHERE account ~ 'Assets:Bank:Checking'

Він повертає (4650.00 USD). Ті ж запити виконуються без змін на сторінці Запитів Fava. Fava 1.30.16 відображає ті ж три рядки витрат як інтерактивну таблицю.

На практиці візуальні звіти Fava оновлюються так само швидко, як і вихідні дані. Як тільки додається нова транзакція і сторінка перезавантажується, графіки перенакраховують. Немає потреби у тривалій повторній обробці. Це означає, що якщо у вас є напівавтоматичний конвеєр подачі даних протягом дня, ви можете тримати Fava відкритим і періодично оновлювати сторінку, щоб отримувати оновлені графіки — фактично, фінансовий моніторинг у реальному часі.

Наприклад, уявіть, що ви керуєте малим бізнесом і хочете контролювати готівку на руках і щоденні витрати. Ви могли б мати відкритий Fava на спеціальній панелі (можливо, використовуючи розширення або екран запитів), яка показує «Баланс готівкового рахунку сьогодні» і «Витрати – сьогодні порівняно з учора». Кожного разу при оновленні після надходження нових даних, ви бачили б оновлення цих чисел. Це схоже на те, що забезпечують дорогі інформаційні панелі в режимі реального часу, але з використанням інструментів з відкритим кодом. Різниця в тому, що вам, можливо, потрібно буде оновлювати або планувати оновлення вручну, тоді як ці інструменти автоматично надсилають оновлення. Але за функціоналом ви отримуєте той же інсайт, з додатковою перевагою можливості детально розглянути будь-яке число у Fava (натисніть на нього, щоб побачити підлеглі транзакції) — чого бракує багатьом BI-дашбордам.

Підсумовуючи, Fava перетворює ваші бухгалтерські дані на миттєві візуальні інсайти: деталі грошових потоків, лінії трендів, порівняння в часі та інтерактивне фільтрування — усе це допомагає побачити історію за числами. Чи то ви аналізуєте витрати минулого тижня на предмет аномалій, чи переглядаєте мульрічні тренди чистої вартості, графіки та звіти Fava забезпечують прозорість у режимі реального часу (одразу, як з’являються дані). Далі ми побачимо, як можна розширити ці можливості або інтегрувати їх із зовнішніми інструментами, якщо вам потрібна ще більш персоналізована аналітика.

Інтеграція з зовнішніми інформаційними панелями та інструментами візуалізації

Хоча Fava пропонує багатий набір вбудованих звітів і графіків, ви можете захотіти інтегрувати дані Beancount з іншими бізнес-аналітичними (BI) або панельними інструментами, такими як Grafana, Metabase або кастомні веб-інтерфейси (наприклад, React-додаток). Мотивом може бути поєднання фінансових даних з іншими джерелами, використання розширених можливостей побудови графіків або обмін панелями у іншому форматі. Завдяки відкритості Beancount існує кілька способів досягти інтеграції:

  • Інтеграція з базою даних (BeanSQL / Beanpost): Прямий підхід полягає у тому, щоб експортувати або синхронізувати ваш журнал Beancount у SQL-базу даних. Опинившись у SQL, будь-який інструмент бізнес-аналітики може виконувати запити до даних. Насправді учасники спільноти створили інструменти для цього. Наприклад, Beanpost — це експериментальний проєкт, який відтворює журнал Beancount у базі даних PostgreSQL, реалізуючи більшість логіки Beancount як SQL-функції. Це забезпечує «гнучкий бекенд, який може інтегруватися з іншими інструментами, такими як вебзастосунки або системи звітності.» Ви можете запускати Beanpost для безперервної синхронізації вашого текстового журналу з Postgres. Потім інструмент, як-от Metabase або Tableau, може підключитися до цієї бази Postgres, і ви зможете створювати будь-які діаграми або інформаційні панелі за бажанням (із живим оновленням по мірі оновлення бази). Один користувач повідомив, що використовує Postgres + PostGraphile для автоматичного надання GraphQL API для даних журналу, а потім створює кастомний фронтенд на React поверх цього – фактично використовуючи журнал як веб-сервіс. Цей підхід вирішує випадки, де інтерфейс Fava може бути недостатнім (наприклад, багатокористувацький доступ або більш дружній інтерфейс для мобільних пристроїв). Це більш складно технічно, але демонструє потенціал: можна відносно легко інтегрувати Beancount з сучасними веб-стеками. Легший варіант — експорт результатів запитів у SQLite – запуск bea --file ledger.beancount query "SELECT ..." виводить таблицю, яку можна вставити або передати далі, а робота з CSV для таблиць через CLI чекає на нативні опції експорту для bea query. Дехто використовує SQLite як проміжний крок для підключення до інструментів, як Metabase (який може читати SQLite-файли через підключення).

  • Grafana (Панелі серій часових рядів): Grafana популярна для моніторингу та даних часових рядів. Фінансові дані з плином часу (витрати, баланси) можна розглядати як часові ряди. В спільноті обговорювалося підключення Beancount до Grafana. Однією з ідей був плагін для джерела даних Grafana (Data Source Plugin), який міг би взаємодіяти з BQL-запитами безпосередньо на файлі Beancount. Це дозволило б панелям Grafana напряму відображати, наприклад, «Баланс рахунку Checking» у вигляді гейджа або «Витрати за останні 30 днів» як графік, роблячи запити до бухгалтерського регістру. Станом на 2025 рік спеціального плагіна не опубліковано, але ентузіасти створили альтернативні рішення. Наприклад, користувач Reddit aquilax розробив простий сервер, який забезпечує доступ Grafana до даних Ledger CLI і поділився ним як grafana-ledger-datasource-server. Схожий підхід можна застосувати для Beancount: ви можете написати невеликий HTTP-сервер на Python, який завантажує бухгалтерський регістр Beancount (використовуючи API Beancount для запитів) і надає ендпоінти, які повертають JSON-фрейми даних для Grafana. Grafana має універсальний плагін для джерела JSON-даних, який може звертатися до цього API. Практично це означає, що ви можете створити панелі Grafana, наприклад, «Щомісячний дохід (стовпчаста діаграма)» або «Щоденний баланс готівки (лінійний графік)», і ці панелі будуть отримувати дані з вашого Beancount-API. Grafana надає різноманітні опції візуалізації (анімації, пороги, поєднання з метриками сервера тощо). Андреас Герштмайр (один із підтримувачів Fava) запропонував саме цей підхід і навіть згадав, що створив Fava extension під назвою fava-dashboards (про що йдеться нижче), для візуалізації графіків на основі BQL-запитів як альтернативу повноцінній конфігурації Grafana. Якщо ви віддаєте перевагу інтерфейсу Grafana, інтеграція цілком можлива — потрібно лише створити міст даних.

  • Metabase (Ad-hoc запити та панелі): Metabase — це зручний інструмент бізнес-аналітики, який дозволяє запускати запити та створювати панелі без коду. Якщо ви експортуєте свій бухгалтерський регістр у реляційний формат (через Beanpost або шляхом виведення таблиць транзакцій, проводок тощо), ви можете націлити Metabase на цю базу даних. Ви можете створити спеціальні таблиці, такі як expenses (date, category, amount), з вашого регістру, а потім у Metabase легко генерувати діаграми (наприклад, кругову діаграму витрат за категоріями за минулий місяць). Перевага в тому, що нетехнічні користувачі (або колеги) можуть взаємодіяти з даними через GUI Metabase, не торкаючись файлу Beancount. Недолік у тому, що потрібно підтримувати експорт/синхронізацію. Деякі користувачі автоматизували нічне перетворення регістру Beancount у SQLite, після чого дозволяють Metabase читати SQLite; інші можуть використовувати згаданий підхід з Postgres. Ключове — портативність даних Beancount це дозволяє — ви вільні дублювати дані у будь-який формат, необхідний вашому зовнішньому інструменту.

  • Користувацькі інтерфейси / додатки: Якщо у вас є специфічні потреби, ви завжди можете написати власний додаток поверх Beancount. Бібліотека Beancount для Python дає доступ до всіх проаналізованих записів, балансів тощо, тож можна використовувати будь-який веб-фреймворк Python (Flask, Django, FastAPI) для створення адаптованого додатку. Наприклад, малий бізнес може створити панель, що показує ключові показники ефективності (KPI), як-от валовий прибуток, щоденні продажі тощо, шляхом запитів до регістру і, можливо, поєднання з даними поза регістром (наприклад, кількість обслугованих клієнтів). Один з учасників спільноти створив мобільний веб-інтерфейс, бо Fava не був інтуїтивним для їхнього партнера — вони використали регістр у базі даних для керування цим кастомним UI. Якщо ви віддаєте перевагу JavaScript/TypeScript, можна скористатись інструментом для конвертації регістру у JSON і будувати звідти. Сам Fava відкриває сторінку запитів через JSON query API, тож кастомний фронтенд може надсилати йому BQL і рендерити повернені таблиці замість того, щоб створювати новий бекенд запитів.

  • Інтеграція з Excel/PowerBI: Варто зазначити, що ви навіть можете інтегруватися з Excel або PowerBI. Поки bea query не має нативного експорту CSV, використовуйте експорт на сторінці Запитів (Query) у Fava для файлів електронних таблиць, які Excel відкриває безпосередньо. Можливий робочий процес: нічне завдання генерує CSV-файл ключових фінансових даних з Beancount, і PowerBI налаштований на імпорт цього файлу. Це дещо опосередковано, але для організацій, які вже активно використовують Excel/PowerBI, це інтеграція з низьким бар'єром входу. PowerBI також підтримує джерела даних на Python, тому можна написати короткий скрипт на Python, що виконує BQL-запити, і використовувати його як джерело даних у PowerBI для безпосереднього з’єднання.

Кейс – ідея інтеграції з Grafana: Джош, користувач Beancount, запитав на розсилці про передачу метрик Beancount у Prometheus та перегляд їх у Grafana. Основні розробники відповіли, що замість дублювання даних у Prometheus, кращий підхід – плагін Grafana або сервіс, який звертається безпосередньо до реєстру Beancount. Андреас поділився своїм розширенням fava-dashboards, яке відтворює власні діаграми безпосередньо у Fava як приклад рішення. Висновок: у вас є варіанти – або інтегруватися через існуючу BI-інфраструктуру (Prometheus+Grafana або SQL+Metabase), або розширити Fava під свої потреби (наступний розділ саме про це).

Безпека та особливості мультикористування: При інтеграції із зовнішніми інструментами слід пам’ятати про конфіденційність даних. Прості текстові файли Beancount часто містять приватну фінансову інформацію, тож будь-який сервер, що її відкриває, має бути захищеним (авторизованим). Якщо ви переносите дані у хмарний BI-інструмент, можна втратити частину приватності. Самохостингові інструменти (відкриті версії Grafana/Metabase) можна запускати локально для мінімізації ризиків. Крім того, якщо декілька людей мають дивитися на панелі, може бути кращим варіантом зовнішня панель лише для читання, замість надання прямого доступу до Fava (де вони могли б випадково редагувати дані). Наприклад, стартап може використовувати Beancount внутрішньо, але дозволити керівникам відділів бачити витрати у порівнянні з бюджетом через Metabase без доступу до файлів реєстру.

Підсумовуючи, Beancount і Fava гарно взаємодіють з іншими інструментами. Ви можете використати всю екосистему інструментів для роботи з даними, додавши трохи коду-склеювача: передати дані бухгалтерії у SQL-базу даних для BI-інструментів, подавати їх через API для веб-додатків або навіть використовувати спеціалізовані бібліотеки для потокової передачі у системи часових рядів. Така гнучкість означає, що ви ніколи не застрягнете, якщо вбудовані візуалізації Fava не задовольняють якусь нішеву вимогу – завжди можна інтегруватися з іншою платформою, продовжуючи використовувати Beancount як ваш джерело правди. Далі ми розглянемо розширення Fava за допомогою плагінів і кастомних панелей, що часто є простішим шляхом, ніж зовнішня інтеграція, якщо вам потрібно кілька додаткових функцій.

Кастомні панелі та розширення Fava плагінами (Приклади коду)

Fava спроєктовано бути розширюваним: ви можете додавати нові сторінки, графіки та поведінку, пишучи плагіни Fava (розширення) на Python. Це дозволяє налаштувати веб-інтерфейс відповідно до ваших потреб без створення повноцінного окремого додатку. Ми розглянемо два ключові напрямки кастомізації: (1) Використання або написання розширень Fava, та (2) Налаштування кастомних панелей за допомогою плагінів спільноти, таких як fava-dashboards.

Розширення Fava (Кастомні плагіни)

Розширення Fava — це по суті Python-модуль, що визначає підклас fava.ext.FavaExtensionBase. Коли Fava запускається, воно може завантажити цей модуль і інтегрувати його в додаток. Розширення можуть реєструвати нові сторінки звітів, підключатися до подій та навіть включати кастомний JavaScript для інтерактивності. Fava 1.30.16 містить два: fava.ext.auto_commit і fava.ext.portfolio_list. Інші можна встановити через pip або написати з нуля.

Щоб увімкнути розширення, використайте кастомний директив Beancount у вашому файлі бухгалтерії:

2010-01-01 custom "fava-extension" "my_extension_module" "{'option': 'value'}"

Це говорить Fava завантажити вказаний модуль. Якщо ви встановили розширення через pip, тут варто вказати ім’я його модуля. Опційний рядок в кінці — це конфігурація для розширення. Fava розбирає її як Python-літерал, тож "{'option': 'value'}" приходить як словник.

Приклад – Розширення Автофіксації: У комплекті fava.ext.auto_commit автоматично комітить зміни в git, коли ви редагуєте файл через Fava. Щоб використати його, додайте:

2025-01-01 custom "fava-extension" "fava.ext.auto_commit"

Воно перевизначає after_write_source, after_insert_entry, after_entry_modified, after_delete_entry та after_insert_metadata. Кожен хуку запускає git commit у власній директорії файлу бухгалтерії. Отже, бухгалтерія має вже знаходитися у гілці git. Це демонструє, як розширення підключаються до подій редагування Fava.

Приклад – Розширення списку портфеля: Вбудований fava.ext.portfolio_list додає сторінку, що перелічає ваші інвестиційні рахунки. Він встановлює report_title = "Portfolio List" і поставляє шаблон. Fava це виявляє та додає новий пункт бічної панелі «Список портфеля» у розділі Звіти. Також встановлюється has_js_module = True для завантаження його супутнього JavaScript. Щоб увімкнути його явно, потрібно додати:

2025-01-01 custom "fava-extension" "fava.ext.portfolio_list"

(У цьому випадку конфігурація не потрібна.)

Написання власного розширення: Припустимо, ви хочете створити власну сторінку звіту, наприклад «Строки дебіторської заборгованості» для рахунків-фактур. Ви можете створити файл receivables.py так:

# receivables.py
from fava.ext import FavaExtensionBase
 
 
class ReceivablesReport(FavaExtensionBase):
    report_title = "Receivables Aging"
 
    def after_load_file(self):
        # Runs after Fava loads the ledger. Summarise open
        # invoices here so the template only renders.
        self.overdue = [
            txn for txn in self.ledger.all_entries
            if "invoice" in getattr(txn, "tags", set())
        ]

Ви також створите templates/ReceivablesReport.html поруч із модулем для визначення HTML сторінки. У цьому шаблоні можна читати атрибути, як-от self.overdue, які підготував ваш хук. Коли це розширення написано, додайте його у свій головний файл:

2025-01-01 custom "fava-extension" "receivables"

(припускаючи, що receivables.py знаходиться в каталозі файлів Beancount або у PYTHONPATH, Fava може знайти його за іменем). Під час запуску Fava ви побачите сторінку «Строки дебіторської заборгованості».

Fava викликає методи вашого розширення в певних точках. Доступні хуки у Fava 1.30.16: after_load_file, before_request, after_entry_modified, after_insert_entry, after_delete_entry, after_insert_metadata та after_write_source. Метод, декорований @extension_endpoint, додатково стає JSON API-ендпоінтом у розширенні. Зазвичай наданих хуків і шаблону достатньо.

Документація Fava зазначає, що система розширень все ще розвивається, але вона вже готова до використання. Насправді, багато просунутих функцій було прототиповано як розширення.

Власні інформаційні панелі з fava-dashboards (Спільнотне розширення)

Замість написання розширення з нуля ви можете використати сторонній плагін fava-dashboards, створений одним із розробників Fava. Це розширення дозволяє визначати довільні інформаційні панелі через YAML-конфігураційний файл, змішуючи текст, таблиці та графіки, що живляться запитами BQL. Це фактично спосіб створити нові «сторінки» у Fava, які містять кілька власних панелей.

Встановлення та налаштування: Спершу встановіть пакет (наприклад, pip install fava-dashboards). Версія 2.0.2 працює коректно поруч із Fava 1.30.16. Потім у вашому файлі Beancount активуйте його за допомогою власної директиви, що вказує на конфігурацію дашбордів. Наприклад:

2010-01-01 custom "fava-extension" "fava_dashboards" "{ 'config': '/path/to/dashboards.yaml' }"

(fava-dashboards/README.md at main · andreasgerstmayr/fava-dashboards · GitHub). Це інструктує Fava завантажити модуль fava_dashboards та прочитати ваш YAML-файл для конфігурації.

Формат Dashboards YAML: У dashboards.yaml ви визначаєте одну або кілька панелей приборної дошки та їхні панелі. Існують два правила, що випливають з власного конвеєра розширення. Агреговані колонки потребують псевдоніму AS. А також застосовується конвенція знаків BQL: суми доходів надходять зі знаком мінус, витрати — зі знаком плюс. Наприклад:

dashboards:
  - title: "Cash Flow Dashboard"
    panels:
      - title: "Net Cash This Month"
        width: 50%
        queries:
          - bql: "SELECT sum(position) AS net_cash WHERE account ~ 'Income' OR account ~ 'Expenses'"
        type: "jinja2"
        template: "<h1>{{ panel.queries[0].result[0][0] }}</h1>"
      - title: "Spending by Category"
        width: 50%
        queries:
          - bql: "SELECT account AS category, sum(position) AS total WHERE account ~ 'Expenses' GROUP BY account ORDER BY account"
        type: "jinja2"
        template: "<table>{% for row in panel.queries[0].result %}<tr><td>{{ row[0] }}</td><td>{{ row[1] }}</td></tr>{% endfor %}</table>"

Перша панель відображає сумарну позицію безпосередньо. На прикладному обліковому журналі вона рендерить (-4650.00 USD). Це 6,000.00 USD доходу за вирахуванням 1,350.00 USD витрат. Друга панель проходить по рядках запиту у таблицю. Проєкт також рендерить панелі графіків з тих самих запитів. Дивіться посилання у README для API скриптів графіків.

Розширення дбає про рендеринг цих панелей, коли ви відкриваєте сторінку приборної дошки у Fava. Ви можете створити кілька приборних дошок (кожна з’являється як вкладка або окрема сторінка). Це надзвичайно потужно для створення кастомних фінансових приборних дошок. Наприклад, ви можете зробити приборну дошку «Бюджет проти факту»: одна панель показує таблицю бюджету проти фактичних даних по категоріях (через запит, що порівнює два набори рахунків), інша панель показує гістограму витрат року до дати проти попереднього року тощо. Все це лише за допомогою конфігурації та мінімального скриптування, використовуючи ваші дані журналу через BQL.

Приклад коду – Активування fava-dashboards: Як показано вище, додавання розширення — це один рядок у вашому журналі. Для повноти картини, ось мінімальний приклад в контексті:

option "title" "My Ledger"
option "operating_currency" "USD"
 
plugin "beancount.plugins.auto_accounts"  ; (auto-opens accounts)
 
1970-01-01 custom "fava-extension" "fava_dashboards" "{ 'config': 'dashboards.yaml' }"

І в dashboards.yaml:

dashboards:
  - title: "Overview"
    panels:
      - title: "Net Worth"
        queries:
          - bql: "SELECT sum(position) AS net_worth WHERE account ~ 'Assets' OR account ~ 'Liabilities'"
        type: "jinja2"
        template: "<div>Net Worth: {{ panel.queries[0].result[0][0] }}</div>"

У прикладному обліковому журналі це рендерить <div>Net Worth: (4650.00 USD)</div>. Реальна приборна дошка була б відформатована гарно і мала б більше панелей.

З цим налаштованим, коли ви запускаєте Fava і переходите на приборну дошку «Огляд», вона покаже ваш обчислений чистий капітал. Ви можете потім доопрацювати шаблон або додати графіки за потребою.

Інші помітні розширення: Окрім fava-dashboards, учасники спільноти створили плагіни, такі як fava-investor для інвестиційного аналізу та fava-review для перегляду транзакцій. Це сторонні пакети з власними кроками встановлення та діапазонами сумісності з Fava. Перед встановленням перевірте їхні README. Спільнота підтримує список „awesome-beancount“ плагінів та інструментів. Переглядаючи його, ви можете знайти готове розширення, яке відповідає вашим потребам.

Коли розширювати vs інтегрувати зовнішньо: Загалом, якщо вам потрібна лише презентація чи обчислення на наявних даних журналу, розширення Fava є ідеальним (все зберігається в одному місці, враховуються фільтри тощо). Якщо ж потрібно поєднати зовнішні дані або потрібен принципово інший інтерфейс, може знадобитися зовнішня інтеграція (попередній розділ). Наприклад, показувати аналітику сайту поруч з фінансами – краще в Grafana/Metabase; а додати новий фінансовий KPI чи звіт – краще у вигляді плагіна Fava.

Приклад – Користувацький KPI у Fava: Припустимо, ви хочете відстежувати «Рівень заощаджень» (відсоток від доходу, що збережений). Це можна зробити за допомогою розширення, яке обчислює його і показує невеликий блок на головній сторінці. Або з fava-dashboards – одна панель може бути Jinja2, що виводить Savings Rate: X%, запитуючи загальний дохід і загальні витрати. Такий користувацький показник дуже легко ввести за допомогою цих інструментів, тоді як у закритій системі, як QuickBooks, створення нового показника на панелі могло б бути неможливим.

Ті ж два запити використовуються для панелі рівня заощаджень. Зверніть увагу на знаки: BQL sum(position) повертає дохід як негативну позицію, а витрати – як позитивну, і Jinja не може відняти одну позицію від іншої. Тож відобразіть обидві категорії і вкажіть рівень у тексті шаблону:

- title: "Savings Rate"
  panels:
    - title: "Savings Rate"
      queries:
        - bql: "SELECT sum(position) AS income_total WHERE account ~ 'Income'"
        - bql: "SELECT sum(position) AS expense_total WHERE account ~ 'Expenses'"
      type: "jinja2"
      template: "<h3>Savings Rate: 77.5% ({{ panel.queries[0].result[0][0] }} earned, {{ panel.queries[1].result[0][0] }} spent)</h3>"

У прикладі журналу це відображає Savings Rate: 77.5% ((-6000.00 USD) earned, (1350.00 USD) spent). Рівень обчислюється як (6,000.00 − 1,350.00) / 6,000.00. Обчислюйте це з величин. Не міняйте знак і не виконуйте віднімання позицій у шаблоні.

Головне: Fava – це не статичний інструмент, це розширювана платформа. З невеликим скриптом на Python або просто налаштуванням конфігурації ви можете значно її адаптувати. Багато користувачів діляться невеликими скриптами чи розширеннями на форумах, щоб робити речі на кшталт показу майбутніх рахунків, генерації PDF-фактур із транзакцій або інтеграції Beancount з бібліотеками податкових розрахунків. Інвестуючи час у навчання чи використання цих розширень, ви отримуєте дуже індивідуалізовану систему фінансової аналітики без початку з нуля.

Сценарії використання: особисті фінанси проти обліку малого бізнесу

Beancount та Fava можна використовувати як для особистих, так і для обліку малого бізнесу, але напрямки та переваги дещо відрізняються за акцентами:

Особисті фінанси

Для фізичних осіб Beancount+Fava вигідні тим, що дають повний огляд і прозорість фінансів без залежності від пропрієтарних додатків. Загальні сценарії використання особистих фінансів включають:

  • Відстеження витрат і бюджетування: Багато хто використовує Beancount, щоб записувати кожен витрат і потім аналізувати шаблони витрат. З Fava вони можуть бачити, куди йдуть гроші щомісяця (карта витрат) і відстежувати бюджети, порівнюючи з очікуваними значеннями (деякі роблять це за допомогою розширення Budgets або власних запитів). Один користувач описав, що після впровадження Beancount, «аналіз фінансових даних (витрати, пожертви, податки тощо) є простим. Це легко зробити з Fava, але також просто з скриптами... У мене є один Python-скрипт, який витягує дані з Beancount за допомогою BQL, потім я використовую pandas для підготовки звіту.». Це демонструє, як особисті користувачі отримують переваги як від вбудованого інтерфейсу, так і можливості написання власного аналізу за потреби.

  • Чистий капітал і відстеження цілей: Оскільки ви можете включити всі активи (банківські рахунки, інвестиції, навіть фізичні активи, якщо бажаєте) в один журнал, ви отримуєте єдиний огляд чистого капіталу. Ентузіасти особистих фінансів використовують це для відстеження прогресу до цілей (наприклад, «число FI» або погашення боргу). Діаграми Fava, що показують чисту вартість у часі, мотивують – ви буквально бачите криву свого багатства. Зазвичай у Beancount відстежують зобов’язання, як-от студентські позики чи іпотеки, й оновлюють їхні залишки; журнал тоді дає повну картину фінансового стану.

  • Інвестиції та криптовалюта: Особисте використання часто розширюється до відстеження портфеля. Beancount може працювати з акціями, криптовалютою тощо, із розрахунком собівартості та реалізованого прибутку (через плагіни або запити). Перевага над сайтом брокера в тому, що ви можете консолідувати всі акаунти й бачити реальний розподіл активів. Спільнотні плагіни, такі як fava-investor, наприклад, додають сторінки аналітики інвестицій у Fava. Це те, що зазвичай роблять в Excel любительські інвестори; Beancount пропонує більш строгий, автоматизований спосіб. Блог-пост під назвою «Beancount: DeFi Accounting For Noobs» навіть ілюструє його використання для відстеження криптовалютних транзакцій і yield farming, що демонструє його гнучкість у сучасних сценаріях особистих фінансів.

  • Багатовалютні особисті фінанси: Якщо ви живете за кордоном або маєте іноземні інвестиції, Beancount надзвичайно корисний, бо він може конвертувати й агрегувати валюти. Користувачі зазначали, що «багато бухгалтерського програмного забезпечення погано працює з багатовалютністю… З Beancount ви можете визначити будь-яку потрібну вам комодіті», і отримувати звіти в обраній валюті. Для особистого користувача, який отримує, наприклад, зарплату в USD, але витрачає в EUR, це великий плюс.

  • Відстеження життя та ведення щоденника: Нетрадиційний, але реальний випадок використання: деякі розглядають бухгалтерську книгу як журнал життя, позначаючи транзакції життєвими подіями (наприклад #wedding або #vacation2025) і потім використовують це для розрахунку витрат на події або навіть як щоденник діяльності (фінансові метадані як замінник життєвих подій). Проста текстова форма та маркування роблять це можливим так, як традиційні інструменти не дозволяють легко зробити.

  • Простота та контроль: Особисті фінанси — це також менталітет. Багато хто обирає Beancount, тому що вони «хотіли володіти цими даними та легко їх аналізувати, і не хотіли бути прив’язаними до підписки чи продавця». Недавнє закриття Mint.com (популярного безкоштовного інструменту для бюджету) спонукало ентузіастів перейти на облік у вигляді простого тексту задля довговічності. З Beancount вони знають, що зможуть відкрити свою бухгалтерську книгу й через 20 років. Для фінансів однієї людини дані Beancount (можливо, синхронізовані через Dropbox або Git) і веб-інтерфейс Fava (який можна запускати локально або на приватному сервері) дають баланс зручності та контролю, який важко знайти в інших місцях.

Потенційні виклики для особистого використання: початкова настройка і вивчення подвійного запису можуть бути перешкодою для деяких. Але багато ресурсів (наприклад, посібник Beancount та спільнотні форуми) допомагають новим користувачам. Після налаштування підтримка може бути значною мірою автоматизованою, як описано, що є чудовим для тих, хто керує домашніми фінансами з мінімальними зусиллями.

Облік малого бізнесу

Малі підприємства, стартапи та фрилансери також можуть використовувати Beancount+Fava, хоча тут вимоги включають більш формальну звітність і можливо співпрацю:

  • Бухгалтерський облік та фінансова звітність: Компанія може вести свій головний бухгалтерський журнал у Beancount, записуючи рахунки-фактури, рахунки, заробітну плату тощо, і формувати Балансовий звіт та Звіт про прибутки/збитки. Beancount підтримує необхідний нарахувальний облік (ви можете позначати рахунки як Дебіторська/Кредиторська заборгованість та записувати рахунки-фактури з проводками до доходів і дебіторської заборгованості, а пізніше — платіж для погашення дебіторської заборгованості). Fava потім відповідним чином покаже їх у розділах Активи або Пасиви. У дискусії на Reddit було запитання, чи підходить Beancount для компаній і чи може він генерувати належні фінансові звіти – так, він може формувати балансові звіти, звіти про доходи та (за допомогою деяких запитів) звіти про рух грошових коштів, оскільки це просто уявлення подвійних записів. Суть у тому, що Beancount не примушує дотримуватися жодних конкретних бухгалтерських стандартів (це залежить від того, як ви його використовуєте). Тож обізнаний користувач (або бухгалтер) повинен правильно налаштувати план рахунків для бізнесу. Є приклади з спільноти використання Beancount для стартапів – один коментар на HN зазначив: “Мені дуже подобається використовувати Beancount + Git для ведення бухгалтерської книги моєї власної стартап-компанії”, хоча й додав, що періодично додавати записи було трохи нудно. Цю рутину можна зменшити завдяки автоматизації імпорту, як ми бачили.

  • Моніторинг фінансів у реальному часі: Для малого бізнесу рух грошових коштів — це найважливіше. Використовуючи Fava, власник бізнесу може відстежувати банківські баланси та рух грошових коштів у майже реальному часі, подібно до особистих фінансів — але тут це ще критичніше. Автоматизуючи банківські дані або імпорт, він може побачити, чи надійшов платіж від клієнта або чи списали великий витрат. QuickBooks пропонує банківські дані, що “дають змогу бачити, як працює ваш бізнес у реальному часі”; у Beancount це можна відтворити за допомогою власної інтеграції банку. Перевага Beancount у прозорості – ви точно бачите, що було імпортовано і як це класифіковано, а не покладаєтесь на іноді незрозумілу логіку співставлення QuickBooks.

  • Рахунки-фактури та дебіторська/кредиторська заборгованість: У Beancount немає вбудованого модуля для виставлення рахунків (наприклад, генерування PDF рахунків або відстеження номерів рахунків). Проте креативні користувачі вирішували це за допомогою плагінів. Наприклад, можна згенерувати PDF рахунок з транзакції, використовуючи шаблон Jinja2 або навіть зовнішній скрипт, який читає відкриті записи дебіторської заборгованості. Існує проєкт «Beanie», який працює як легка система AR поверх Beancount. Малі підприємства можуть використовувати Beancount для головної книги, а інший інструмент — для випуску рахунків, а потім імпортувати дані рахунків у Beancount. Це додатковий крок у порівнянні з QuickBooks (який може відправляти рахунки й автоматично їх записувати після оплати), але це гарантує, що всі дані в кінцевому підсумку зберігаються у відкритій головній книзі.

  • Зарплата та амортизація: Це завдання бухгалтерії, які виконують малі підприємства. Beancount безсумнівно може записувати записи щодо зарплати (розподіляючи валову оплату, податки, утримання тощо по відповідних рахунках), але зазвичай ці розрахунки роблять зовнішні інструменти або постачальник послуг з нарахування зарплати, а потім вводять у систему. Графіки амортизації основних засобів також зазвичай вводяться вручну (або можна написати плагін для автоматизації щомісячних записів амортизації). У Beancount немає чарівництва для цього, але й у багатьох програмах для малого бізнесу, окрім шаблонів, теж немає. Перевага у тому, що ви можете скриптувати будь-які нестандартні операції. Наприклад, якщо у вас є власний графік визнання доходів, ви можете написати ці журнальні записи на Python і включити їх у систему.

  • Прозорість і аудит: Підприємства можуть оцінити, що Beancount забезпечує чіткий аудиторський слід. Кожна транзакція є відкритою і може бути анотована посиланнями на документи (квитанції, контракти). Під час аудиту ви можете показати файл головної книги разом із прикріпленими документами, що досить просто. Крім того, контроль версій дає аудиторський журнал про те, хто і коли вносив зміни (якщо кілька осіб працюють через Git). Порівняйте це з QuickBooks, де бухгалтеру може знадобитися переглядати журнали змін, які користувачу не так просто отримати.

  • Вартість: Beancount+Fava безкоштовні, що привабливо для стартапів або малих підприємств, які прагнуть мінімізувати вартість програмного забезпечення. QuickBooks, Xero тощо мають щомісячну оплату. Проте в обмін на це вони пропонують підтримку і простіше налаштування. Технічно підкований власник бізнесу охоче пожертвує трохи часу, щоб заощадити кошти і отримати гнучкість.

Реальні приклади: Інший користувач на HN сказав, що використовував Beancount для консалтингової ТОВ і це добре працювало, але коли кількість транзакцій зросла, вони почали розбивати файли щорічно, щоб підтримувати швидкість. Загальна думка така: для невеликого бізнесу (скажімо, десятки тисяч транзакцій на рік або менше), Beancount цілком підходить. Якщо ви більший МСП з сотнями тисяч транзакцій, можливо, знадобиться або підхід із базою даних, або вибір системи обліку, створеної спеціально для цього – хоча у нас є Beanpost, щоб спробувати вирішити це через використання Postgres як бекенду.

Співпраця: Однією з відмінностей є те, що QuickBooks Online дозволяє кільком користувачам (власнику, бухгалтеру тощо) працювати одночасно. У Beancount співпраця можлива через Git (кілька користувачів роблять коміти змін). Це працює, але вимагає певних знань Git та вирішення конфліктів, якщо люди редагують одночасно. Деякі використовували онлайн-платформи Git або навіть Google Drive для спільного доступу до файлу журналу. Це можливо, але не так плавно, як у хмарних бухгалтерських програм. Проте для невеликої команди (або одного бухгалтера + власника) це кероване, і ви завжди можете надати доступ лише для читання через Fava (розмістіть на внутрішньому сервері, щоб інші могли переглядати звіти без редагування).

Відповідність нормативам: Для особистих фінансів це не проблема. Для бізнесу може бути необхідно видавати офіційні звіти або дотримуватися стандартів бухгалтерського обліку. Beancount можна використовувати для генерації звітів, що відповідають GAAP, але користувачу потрібно вводити дані відповідно. Вбудованого контролю правил GAAP немає (наприклад, немає вбудованого модуля основних засобів для правильного нарахування амортизації). Зовнішній бухгалтер все одно може працювати з журналом Beancount (адже це по суті узагальнений журнал) – він може експортувати його в Excel і виконувати корекції за потреби. Деякі бізнеси віддають перевагу відомому ПЗ з цієї причини або мати бухгалтера, який комфортно працює з даними у звичайному тексті.

Хто використовує його для бізнесу? Ймовірно, просунуті користувачі: технологічні стартапи, фрілансери з досвідом кодування або компанії, які дуже цінують контроль над даними (наприклад, можливо, фінансові торгові фірми, які хочуть створювати власні звіти). На Reddit була тема, де хтось питав, чи підходить Beancount для торгової компанії – відповіді вказували, що так, він підтримує мультивалютність і може генерувати потрібні звіти, але вам доведеться створювати додаткові інструменти навколо нього.

На завершення цього розділу: користувачі, які ведуть особисті фінанси, люблять Beancount за інсайти та контроль, які він дає над їхніми особистими грошима – він перетворює фінанси на набір даних, який можна запитувати та вивчати, що дозволяє легко відстежувати кожну витрату і розраховувати метрики, які типові інструменти бюджетування не можуть. Користувачі малого бізнесу цінують прозорість, економію витрат і можливість модифікації – вони можуть інтегрувати бухгалтерію з рештою свого програмного стеку і уникати прив’язки до постачальників або щомісячних плат. Обидва сценарії використання отримують користь від аналітики в реальному часі: особа може слідкувати за прогресом свого місячного бюджету, бізнес – за щоденними грошовими потоками – в обох випадках Fava може показувати актуальну інформацію при своєчасному надходженні даних.

Порівняння з іншими платформами аналітики в реальному часі

Корисно порівняти Beancount+Fava з іншими рішеннями, які пропонують «аналітику в реальному часі», такими як QuickBooks (з живими банківськими стрічками) і Power BI (або подібні BI панелі). Кожен підхід має свої сильні сторони і компроміси щодо прозорості, гнучкості та швидкодії:

АспектBeancount + Fava (Відкритий код)QuickBooks (з банківськими підключеннями)Power BI / Загальний BI
Прозорість та власність данихПовністю прозорий – дані у вигляді звичайного тексту, ви можете переглянути кожну транзакцію. Вся логіка видима (немає прихованих алгоритмів). Формат належить вам назавжди. Контроль версій показує аудит змін.Непрозорий – дані зберігаються у власній хмарній базі даних. Ви залежите від експорту Intuit для резервних копій. Деякі процеси (наприклад, автоматична категоризація) не повністю видимі. Обмежені журнали аудиту. Якщо перестанете платити, ризикуєте втратити легкий доступ до своїх даних.Залежить від джерела даних – Power BI сам по собі лише інструмент. Якщо він підключений до відкритої бази даних, ви зберігаєте власність на ці дані. Однак файли або панелі Power BI мають власницький формат і потребують Power BI для перегляду. Прозорість розрахунків хороша (ви їх визначаєте), але загальна система складна.
Гнучкість та налаштуванняНадзвичайно гнучкий. Ви можете визначити будь-яку структуру рахунків, будь-яку валюту/товар. Можна писати скрипти для кастомної поведінки або аналізу (Python, плагіни). Відсутній нав’язаний робочий процес – ви налаштовуєте під свої потреби (особисті чи бізнес). Система розширень Fava та інструменти типу fava-dashboards дозволяють створювати кастомні панелі у додатку. Якщо чогось немає – можна це створити або інтегрувати самотужки.Помірна. QuickBooks багатофункціональний для стандартного малого бізнесу (виставлення рахунків, зарплата (окремий додаток), базові звіти). Але ви обмежені функціями Intuit. План рахунків та категорії мають відповідати їхній парадигмі. Кастомні звіти обмежені; довільні запити до бази неможливі. Інтеграції існують, але через API Intuit (який обмежений) або експорт у Excel. Ви жертвуєте гнучкістю заради зручності.Дуже гнучкий для аналізу та візуалізації. Можна створити практично будь-який графік чи КІП за умови доступних даних. Power BI легко комбінує фінансові дані з іншими (продажі, веб-аналітика тощо). Проте це не облікова система – потрібен підготовлений набір даних (може бути з Beancount!). Не забезпечує подвійний запис чи облікові принципи; це чистий аркуш. Візуалізація дуже адаптивна (кастомні DAX-метрики тощо), але потребує досвіду.
Відповідь у реальному часіМайже в режимі реального часу за умови налаштування. Якщо ви автоматизуєте введення даних (потоки або часті імпорти), Fava відобразить це відразу після оновлення та перезавантаження реєстру. За замовчуванням не підтримує «push»-реальне час (потрібне ручне оновлення), але можна оновлювати скільки завгодно часто (хвилинно, щогодини). Оновлення дуже швидке (парсинг тексту за мілісекунди при невеликих змінах). Частоту контролюєте ви – може бути безперервною при скриптуванні. Немає часу очікування циклів синхронізації вендора.Спроектовано для майже реального часу для банківських транзакцій: «Банківські підключення дають змогу бачити стан бізнесу в реальному часі». Насправді банківські підключення в QuickBooks Online оновлюються раз на день або за запитом (залежить від банку). Програма автоматично завантажує нові транзакції і намагається їх категоризувати, тому не потрібно імпортувати вручну. Зміни відображаються на панелі без втручання. Проте деякі дані (наприклад, очікувані транзакції) можуть з’явитись лише після очищення. Також деякі звіти оновлюються після дії. Загалом хороша відповідь для банківських даних; трохи гірше для ручних журналів (які ви вводите самі).Якщо налаштовано живе підключення, панелі можна оновлювати в реальному часі або за розкладом. Наприклад, панель Power BI з DirectQuery до SQL-бази оновлюється при відкритті або автоматично. В режимі імпорту оновлення за розкладом (щогодини). Отже, майже реальний час можливий, але складність у підтримці конвеєра даних. Будь-яка зміна даних вимагає оновлення моделі або запитів. Може бути невелике запізнення залежно від налаштувань (якщо в хмарі Power BI, існують обмеження на частоту автооновлення у безкоштовних планах).
Автоматизація та введення данихІмпорти можуть бути повністю автоматизовані, але потребують індивідуального налаштування. Можливо, доведеться писати і підтримувати скрипти або використовувати імпортери спільноти для кожного банку чи джерела. З коробки банківських підключень немає (окрім того, що ви створите). Тож початкова автоматизація потребує зусиль. Водночас після налаштування може бути 100% автоматизація без ручного введення (деякі користувачі досягли ~95%). Підтримується і ручне введення для того, що не можна автоматизувати (через веб-форму Fava або текстове редагування).Дуже автоматизовано для банків/кредиток (без коду – просто під'єднуєте рахунки в QuickBooks). Також автоматично пропонує категорії (на основі минулих даних і ML). «Кожна транзакція миттєво синхронізується та сортується… QuickBooks рекомендує категорії і стає розумнішим з часом». Велика зручність – менше ручної роботи. Проте автоматизація здебільшого для фінансових рахунків; інші речі (поділ витрат на класи) можуть потребувати ручної перевірки. Якщо підключення банку обривається, користувачу треба перепідключитись або завантажити файли.Power BI не призначений для введення даних – він спирається на автоматизацію джерела даних. Якщо джерело – ручна таблиця, то реального часу немає. Якщо база оновлюється ETL-процесом, може бути близько до реального часу. Отже, автоматизація залежить від того, що подаєте в Power BI. Сам Power BI можна налаштувати на розклад оновлення даних з джерел. Коротко: Power BI добре відображає автоматизовані дані, але не створює автоматизацію (автоматизований конвеєр повинен бути окремо).
Співпраця та обмінСпівпраця через текст (наприклад, Git) потужна, але технічна. Кілька людей можуть редагувати файл(-и) журналу і об’єднувати зміни. Fava можна розгорнути у режимі тільки для читання для спільного користування звітами, але бракує ролей користувачів і детального контролю доступу з коробки. Для одного користувача або технічно підкованої команди цього достатньо. Аудитори або бухгалтери можуть потребувати експорт даних (наприклад, пробний баланс в Excel), щоб працювати з ними, якщо не комфортно з форматом.Веб-доступ для кількох користувачів з правами (QuickBooks Online підтримує бухгалтерів, кілька користувачів бізнесу з ролями). Легкий обмін – бухгалтер може увійти і бачити книги в реальному часі. Це великий плюс для бізнесу. Для особистих фінансів багатокористувацькість менш актуальна, але хмарний доступ з різних пристроїв — зручність (теж можна запустити Fava на особистому хмарному сервері). QuickBooks інтегрується з іншими сервісами (зарплата, банківські кредити тощо), що корисно для бізнесу і важко відтворити у Beancount.Power BI має перевагу в спільному використанні панелей, особливо через Power BI Service: можна публікувати панелі колегам, вставляти на сайти (з відповідною ліцензією) тощо. Це орієнтовано на співпрацю в аналітиці. Однак це лише читання аналітики, а не спільне редагування даних. Якщо декілька користувачів хочуть аналізувати, вони можуть при наданні доступу до BI-проєкту. Підсумок: для показу фінансових результатів у привабливий спосіб для зацікавлених осіб Power BI важко перевершити. Але це не спільний бухгалтерський облік, а спільний аналіз.
ВартістьБезкоштовно (відкритий код). Ви витрачаєте час замість грошей (на налаштування/підтримку). Хостинг Fava може мати незначну вартість (на вашому ПК чи дешевому сервері). Ліцензійні збори за додаткових користувачів відсутні.Платно (місячна або річна підписка). QuickBooks Online коштує від $20 до $70+ на місяць залежно від плану. Є також додаткові збори за зарплату чи розширені функції. Багато малих бізнесів платять цю суму за підтримку та постійні оновлення. Але з часом сума накопичується. Якщо підписку скасувати, можете втратити повний доступ.Змішано. Power BI Desktop безкоштовний, але підписка Pro (для обміну панелями) коштує близько $10/користувач/місяць. Якщо вже маєте в Office 365 або подібному, додаткових витрат може не бути. Інші BI-інструменти різняться (деякі відкриті, як Metabase, безкоштовні у використанні). Однак слід врахувати час на розробку BI-рішень і можливі витрати на підтримку бази даних або хмарної інфраструктури.

У підсумку, Beancount+Fava vs QuickBooks: Beancount пропонує вищу прозорість (ви бачите і контролюєте все, і ваші дані не зникнуть і не будуть заблоковані) та гнучкість (ви можете моделювати все, що хочете у головній книзі, а не лише те, що очікує QuickBooks). Він вимагає більше самостійної роботи, особливо для автоматизації та приємних UI-дотиків. QuickBooks — це рішення типу «підключи та працюй», оптимізоване для потреб малого бізнесу — банківські потоки, виставлення рахунків, зарплата (з доповненнями) — і забезпечує оновлення в режимі близькому до реального часу з мінімальними зусиллями користувача. Однак, він у багатьох аспектах є чорною скринькою; ви довіряєте програмі обробляти ваші дані правильно, і іноді це означає, що важко виправляти помилки або зрозуміти, як отримали число. Багато користувачів Beancount — це ті, хто розчарувався в цих чорних скриньках. Вони жертвують деякою зручністю заради прозорості.

Beancount+Fava vs Power BI (або інші BI): Вони можуть бути доповнюючими. Power BI — це не бухгалтерська система; це інструмент для аналізу. Насправді, просунута налаштування може використовувати Beancount для консолідації і забезпечення точності даних, а потім Power BI для створення виконавчих панелей на основі цих даних. Якщо порівнювати безпосередньо, Power BI більше орієнтований на візуальну гнучкість та поєднання джерел даних. Діаграми Fava спрощені за задумом (зосереджені на потребах бухгалтерії), але потребують значно менше зусиль для запуску (вони працюють з коробки на вашій головній книзі, моделювання не потрібне). Якщо ваша мета — виключно отримати інсайти та гарні візуалізації і ви готові готувати дані, BI-інструмент може бути доречним. Але якщо ваша мета — вести бухгалтерію і отримувати інтерактивні звіти як побічний продукт, часто достатньо лише Fava.

Також можна порівняти з іншими інструментами для персональних фінансів (наприклад, Mint або YNAB) або ERP-системами, але питання конкретно стосується платформ для аналітики в реальному часі. У сфері реальних фінансових оглядів: Beancount+Fava — це як кастомна, відкрита “жива” фінансова панель, QuickBooks — це закрита автоматизована бухгалтерія з живою синхронізацією банку, а Power BI — це гнучка аналітична платформа (не специфічна для фінансів, але може використовуватись для фінансів, якщо надати дані).

Влучна цитата, що протиставляє open-source та комерційні продукти: «Із невеликими початковими зусиллями інструменти з відкритим кодом можуть бути значно кращими за комерційні рішення, а також набагато гнучкішими та розширюваними.» Це підсумовує компроміс. QuickBooks відшліфований та працює з коробки для типових сценаріїв із мінімальними зусиллями. Але щойно вам потрібно щось, чого він не підтримує, ви упираєтесь у стіну. З Beancount ви рідко зіштовхуєтесь із обмеженнями – у вас є доступ до коду і даних, ви можете розширювати або інтегруватися за потребою. Вартість такого підходу – готовність експериментувати.

Переваги та недоліки використання Fava і Beancount для аналізу даних

Нарешті, підсумуємо переваги і недоліки Beancount+Fava як рішення для фінансової аналітики:

Переваги

  • Прозорість і довіра: Всі обчислення (підсумки, баланси) походять із простого текстового реєстру, який ви можете перевірити. Жодної загадкової поведінки немає. Це створює велику довіру до цифр – що є ключовим, якщо ви базуєте на них свої рішення. Це «чистий, прозорий облік» без примусової прив’язки. Ви завжди можете відстежити звітуване значення до основних транзакцій, що є сутністю аналітики, основаної на даних.

  • Відтворюваність і звітність: Оскільки ви можете керувати версіями реєстру, у вас є хронологія змін. Якщо щось викликає сумнів цього місяця, ви можете порівняти реєстр, щоб побачити, що змінилося. Це також означає, що можна експериментувати («а що, якщо я перекласифікую цей витрат?») і легко відмінити зміни. Робота з даними часто передбачає ітерації, і аудитований реєстр цьому сприяє.

  • Гнучкість у аналізі: Ви не обмежені готовими звітами. Поєднання запитів BQL, сценаріїв на Python і фільтрів Fava дозволяє відповісти майже на будь-яке фінансове питання. Хочете знати «Скільки я витратив у Starbucks за кожен з останніх 5 років?» – лише один запит. Або «Яке рухоме середнє моїх тримісячних витрат порівняно з доходами?» – можна написати скрипт на Python+pandas поверх запиту. Ця гнучкість є величезною перевагою для тих, хто любить заглиблюватися у дані. Просунуті користувачі навіть створили розширення для розрахунку фінансових індикаторів (наприклад, метрики продуктивності портфеля) безпосередньо у Fava. В короткому підсумку, ви можете отримати дуже детальні аналітичні дані, яких багато стандартного ПЗ не надає.

  • Інтеграція та розширюваність: Система плагінів Fava та доступний API Beancount означають, що інструменти можуть рости разом із вашими потребами. Якщо завтра вам знадобиться відстежувати новий тип активів або інтегрувати новий потік даних, ви можете розширити систему. Архітектура (вхід – простий текст, вихід – різноманітні формати) дуже розширювана. Це різко контрастує з закритими системами, де доводиться замовляти функції та чекати.

  • Консолідація даних: Для фізичних осіб і навіть бізнесу можливість консолідувати всі рахунки (декілька банків, брокерів тощо) в одну систему є потужною. Багато комерційних рішень ділять вас на ізольовані офіси (або стягують додаткову плату за мультивалютність чи кілька юросіб). З Beancount ви можете об’єднати все. Це дає цілісний огляд даних, що дозволяє розуміти картину в цілому. Наприклад, ви можете порахувати реальне загальне розподілення активів чи чистий грошовий потік між особистими та бізнесовими рахунками, якщо побажаєте, адже це просто записані дані.

  • Економічність: Це безкоштовно та з відкритим кодом. Для особистого користування це великий плюс (немає підписки, як у багатьох бюджетних застосунках). Для стартапів чи малих організацій ці заощадження можуть накопичуватись. Але окрім грошових витрат, це також ефективно з точки зору запуску (Fava може працювати на маленькому сервері) та перенесення (немає дорогих міграцій, якщо ви виросли зі системи – це просто текст).

  • Спільнота та обмін знаннями: Спільнота plaintext обліку (Beancount, Ledger тощо) дуже колаборативна. Люди діляться своїми конфігураціями, кастомними скриптами і порадами на форумах і блогах. Це означає, що якщо у вас є нішева потреба, дехто міг уже її вирішити. Наприклад, кілька користувачів сприяли створенню смарт-інструментів імпорту і навіть категоризації на основі машинного навчання (наприклад, бібліотека "smartimporter", що використовує scikit-learn для автоматичної категоризації отримувачів на основі історичних даних). З часом використання Beancount може стати _розумнішим, якщо ви користуєтеся цими інструментами спільноти – наближаючись до зручності комерційного ПЗ, зберігаючи прозорість.

  • Розширення можливостей і навчання: Використання Fava/Beancount змушує вас глибше взаємодіяти зі своїми фінансовими даними. Багато користувачів зазначають, що отримали набагато краще розуміння своїх фінансів завдяки цій системі, ніж коли-небудь за допомогою автоматизованих додатків. Це трохи схоже на різницю між приготуванням власної їжі та швидким харчуванням – більше зусиль, але ви точно знаєте, що в ній, і з часом це може бути здоровішим. Для аналітики на основі даних така “власність” процесу може призвести до більш значущих відкриттів, оскільки ви можете легко змінювати спосіб, яким ви дивитесь на дані.

Недоліки

  • Початкове налаштування та крива навчання: Будьмо чесними — Beancount та Fava не такі прості у використанні, як, наприклад, QuickBooks чи Mint. Потрібно вивчити основи подвійного бухгалтерського обліку (якщо ви їх не знаєте), синтаксис файлу Beancount і, можливо, трохи Python, якщо хочете суттєво налаштувати систему. Ця початкова інвестиція може стати перешкодою. Для нетехнічних користувачів це може бути лякаючим (проте інтерфейс Fava значно допомагає, забезпечуючи зручніший досвід після налаштування). Для порівняння, багато комерційних інструментів приховують бухгалтерські концепції за простішими інтерфейсами (що може бути як перевагою, так і недоліком).

  • Відсутність вбудованої синхронізації з банком: За задумом, він не підключається автоматично до банківських API (які часто є власницькими або вимагають угод). Тому доводиться або вручну завантажувати виписки, або налаштовувати власну автоматизацію (через Python-скрипти чи сервіси на кшталт Plaid, які часто платні). Для тих, хто звик, що банк-фіди «просто працюють», це може здаватися кроком назад. Як зазначив один користувач, коли пробував Beancount, він «не знайшов прийнятного способу отримати банк-фіди» — це може викликати розчарування, якщо ви не готові писати код або користуватися сторонніми рішеннями.

  • Реальний час означає ваш час: Досягти реакції в реальному часі можливо, але не з коробки. Потрібно налаштовувати cron-завдання або тригери, як описано. Якщо щось ламається (наприклад, банк змінює формат CSV), ви маєте виправляти імпортер. У випадку з QuickBooks, постачальник сам справляється з такими змінами. По суті, ви є власною ІТ-підтримкою. Це класична плата за відкритий код. Для аматора це може бути нормально або навіть цікаво; для зайнятого малого підприємця — це може бути незручно.

  • Обмеження масштабування та продуктивності: Для дуже великих наборів даних (багато років докладних транзакцій) Beancount може сповільнюватися. Він загалом ефективний (нетрохи користувачів має десятки тисяч записів без проблем). Але, як видно зі сторінки HN, один користувач мусив «закривати книги» щороку після 3 років, оскільки файл розростався, щоб запити були швидкими. Код Beancount v2 написаний на Python і може бути трохи повільним для величезних обсягів, хоча v3 (у розробці з C++-ядром) це покращує. Є обходи (розбиття файлів, використання Beanpost для передачі в БД тощо), але це варто враховувати. QuickBooks, ймовірно, має внутрішнє масштабування, а більшість BI-інструментів побудовані на базах даних, розрахованих на великі дані — тож вони можуть краще справлятися з великими обсягами.

  • Прогалини в функціональності (порівняно з спеціалізованим ПЗ): Beancount+Fava орієнтовані на бухгалтерський облік та аналіз. Відсутні деякі допоміжні функції: наприклад, немає обробки зарплат, генерації рахунків-фактур (без кастомних скриптів), інтегрованих податкових форм тощо. Якщо ваша ціль — всеохопне фінансове управління, можливо, доведеться доповнити іншими інструментами. Наприклад, ви можете здійснювати розрахунок зарплати через сервіс і просто імпортувати відповідні проведення. Це працює, але не так плавно, як ERP-система, що робить усе в одному. Для особистих фінансів в Beancount немає вбудованих планувальників погашення боргів чи бюджетних конвертів (хоча ці речі можна симулювати). Очікується, що ви отримуєте висновки і приймаєте рішення самі, а не отримуєте призначені поради чи модулі планування.

  • Інтерфейс користувача і довершеність: Хоча Fava досить гарний, він не такий довершений чи інтуїтивний, як деякі комерційні продукти. Тут немає «майстра», який проведе вас через налаштування і допоможе уникнути помилок. Можливо, доведеться читати документацію, щоб дізнатися, як зробити те чи інше. І певні UI-функції, які очікують: перетягування категорій, багатокрокове скасування, пуш-повідомлення на мобільних тощо, відсутні. Інтерфейс Fava постійно покращується (завдяки внескам), але його створює невелика спільнота. Якщо ви звикли до гладких сучасних SaaS UI, Fava може здатися трохи утилітарним (хоча деякі саме цінують його чисту простоту). На мобільних пристроях Fava працює (особливо у режимі тільки для читання), але не повністю оптимізований для маленьких екранів; наприклад, QuickBooks має окремі мобільні додатки.

  • Залежність від спільноти/підтримки розробників: Мартін Бле (автор Beancount) та інші учасники підтримують Beancount, а Fava підтримують інші. Розробка може бути нерегулярною (що типово для відкритого ПЗ). Хоча програма наразі дуже придатна до використання, якщо потрібна нова функція або є помилка, доведеться або самому це виправляти, або чекати. У комерційному продукті є служба підтримки (якість різниться, але вона є). Проте спільнота зазвичай досить допоміжна через розсилки або GitHub issues.

  • Потрібні знання бухгалтерії: Особливо для бізнесу потрібно розуміти, що ви робите. Beancount не зупинить вас, якщо ви внесете запис, який з бухгалтерської точки зору є «неправильним» (крім незбалансованих або неспівпадаючих транзакцій). QuickBooks навпаки має захисні механізми (а також приховану складність, наприклад, автоматичне відстеження відкладених доходів тощо, якщо їх увімкнути). Якщо бути необережним у Beancount, можна помилитися з нарахуваннями і не помітити цього до того, як виникне проблема у звіті. По суті, Beancount передбачає, що ви або володієте базовими навичками бухгалтерії, або готові вчитися. Це є перевагою для деяких (змушує робити все правильно), але недоліком, якщо ви хочете систему без необхідності думати.

Підсумовуючи переваги та недоліки: Beancount + Fava забезпечують неперевершений контроль і адаптивність для тих, хто хоче глибоко працювати зі своїми фінансовими даними, роблячи це потужним інструментом для аналізу даних. Вони перетворюють ваші книги в запитуваний набір даних, а ваші звіти — в розширюваний веб-додаток. Ціною за цю потужність є праця, яку ви вкладаєте у налаштування і підтримку, а також необхідність бути досить самостійним у керуванні своєю системою. На відміну від таких рішень, як QuickBooks або BI-системи, які більше допомагають і автоматично надають певні функції, Beancount дає вам набір інструментів. Якщо ви схильні до аналітики, цей набір може бути надзвичайно звільняючим – ви можете отримувати такі інсайти, яких не покажуть готові звіти. Як колись написав користувач, який автоматизував свій бухгалтерський журнал Beancount протягом багатьох років, “інструменти з відкритим кодом (такі як Beancount) не задовольняють усі мої потреби з коробки… я одержимий автоматизацією усього… я створив те, що мені потрібно”. Це ілюструє підхід: якщо ви готові створити те, що вам потрібно, будь то мало чи багато, Fava/Beancount вас підтримає і ніколи не приховає від вас ваші дані. Для орієнтованих на дані це величезна перевага.

На завершення, використання Fava та Beancount для аналітики фінансів у реальному часі схоже на наявність власної налаштовуваної лабораторії для ваших фінансів. Ви отримуєте прозорість, гнучкість та контроль, які важко знайти у пропрієтарних платформах, що робить цей інструмент ідеальним для тих, хто цінує ці аспекти і готовий пожертвувати деякою зручністю заради них. Сучасний ландшафт навіть показує гібридні підходи – наприклад, деякі можуть використовувати комерційний інструмент, але періодично експортувати дані в Beancount для глибшого аналізу, або навпаки, використовувати Beancount як основний інструмент, а BI-систему — для презентації. Маючи знання з цього дослідження, можна прийняти обґрунтоване рішення, чи відповідає Fava+Beancount вашим потребам і, якщо так, впевнено використовувати його можливості для багатої аналітики фінансів у реальному часі.

Джерела:

  • Blais, M. (2020). Beancount DocumentationDesign principles and usage. [Онлайн]. Доступно: beancount.github.io
  • Aumayr, D., Gerstmayr, A. (2025). Fava Documentation & GitHub Repository. [Онлайн]. Доступно: beancount.github.io/fava/ і github.com/beancount/fava
  • LowEndBox. (2025). “Beancount: Lightweight FOSS Double-Entry Accounting...from the Command Line!” LowEndBox Tutorial.
  • Fang-Pen Lin. (2024). “My Beancount books are 95% automatic after 3 years.” Особистий блог.
  • Google Groups – Beancount Forum. (2023). Обговорення інтеграції з Grafana (Josh D. та Andreas G.)
  • QuickBooks Marketing Page. “Bank Feeds – Understand all your transactions in an instant.” Intuit QuickBooks.
  • Watt, A. (2023). “Beancount for Personal Finance.” Блог Алекс Ватта.
  • Reddit – r/plaintextaccounting. Різні обговорення (2021-2023) щодо бізнес-використання Beancount та візуалізації звітності.
  • Fava Extension DocumentationHelp: Extensions.
  • fava-dashboards GitHub README – плагін кастомних дашбордів Андреаса Герстмайра.
  • Awesome Beancount list – спільнотно кураторовані ресурси для Beancount.

Джерело: https://beancount.io/uk/docs/Solutions/analytics