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

Як 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 у багатому інтерфейсі. Він показує основні звіти (звіт про прибутки та збитки, баланс тощо), реєстри рахунків і журнали в браузері з інтерактивними елементами керування. Інтерфейс динамічний і зручний порівняно з командним рядком. Ви запускаєте його простою командою fava yourfile.beancount і отримуєте веб-застосунок для своїх книг.
  • Вбудовані графіки та діаграми: Fava генерує графіки, щоб допомогти візуалізувати ваші дані. Наприклад, вона включає лінійний графік власного капіталу в часі, стовпчикові діаграми доходів і витрат за місяць, а також кругові/деревоподібні діаграми для розподілу витрат. Ці візуалізації оновлюються разом із вашими даними та підтримують різні подання (наприклад, «за собівартістю» проти «ринкової вартості» для інвестицій). Ми детально розглянемо ці можливості візуалізації далі.
  • Фільтрація та пошук: У верхній частині сторінок Fava є панель фільтрів, яка дозволяє розбивати й аналізувати ваші дані в реальному часі. Ви можете фільтрувати за часом (наприклад, рік, квартал, місяць), за регулярним виразом рахунку, за одержувачем платежу, за описом або за тегами/посиланнями. Це полегшує перегляд даних у реальному часі – наприклад, швидко відфільтрувати «Tag=Travel» і «Year=2025», щоб побачити всі витрати на подорожі у 2025 році із підсумками. Інтерфейс підтримує складні запити через цю панель фільтрів або через сторінку Query (де ви можете напряму виконувати запити BQL).
  • Підтримка кількох файлів і консолідація: Fava може завантажувати кілька файлів Beancount одночасно (корисно, якщо ви розділяєте реєстри) і перемикатися між ними. Вона також може консолідувати їх за потреби (наприклад, особистий і бізнес-реєстри, переглянуті разом).
  • Введення та редагування даних: Унікальність Fava в тому, що вона не лише для читання – вона має редактор і форму для введення транзакцій. Ви можете додавати нові транзакції через веб-форму (вона вставить запис у ваш файл .beancount). Ви також можете відкрити вихідний файл у зовнішньому редакторі з Fava. Fava також підтримує гарячі клавіші для досвідчених користувачів. Це перетворює Fava на легку систему обліку, де ви можете вводити та переглядати дані з одного інтерфейсу.
  • Звіти та деталізація рахунків: Fava надає стандартні бухгалтерські звіти: звіт про прибутки та збитки (Profit & Loss), баланс, оборотно-сальдову відомість і список активів для інвестицій. Баланс і звіт про прибутки та збитки є інтерактивними – ви можете натиснути на рахунок, щоб переглянути його деталі, або перемикатися між переглядом за собівартістю та ринковою вартістю для активів. 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 (або включені файли) у редакторі, сторінка показує повідомлення «File change detected. Click to reload.» Fava опитує свою кінцеву точку get_changed. Коли спостерігач повідомляє про зміну, Fava перезавантажує реєстр на сервері, а повідомлення пропонує одним кліком оновити подання. На практиці це перезавантаження дуже швидке (зазвичай менше секунди для типових реєстрів). Це означає, що Fava може слугувати живим дашбордом, якщо ваш файл реєстру оновлюється часто. За замовчуванням вона чекає на ваш клік, щоб не переривати перегляд.

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

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

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

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

Оновлення даних у Fava: Коли ваші дані оновлюються, змусити Fava показати їх просто: перезавантаження браузера (F5) або натискання на повідомлення про перезавантаження завантажить останній стан реєстру. Зауважте, що fava --debug не надсилає зміни реєстру в браузер. Його довідковий текст — «Turn on debugging». Він запускає налагоджувач 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 на телефоні, наприклад) або зачекати на нічний імпорт. Цей гібридний підхід (переважно автоматизований, з можливістю ручного додавання ad-hoc) дає картину, близьку до реального часу. Інший підхід – тримати відкритою сторінку Journal Fava і використовувати її як реєстр: коли ви витрачаєте, ви швидко записуєте транзакцію (як запис у чековій книжці) – тоді ви і є стрічкою в реальному часі. Це більш ручний підхід, але деяким користувачам подобається усвідомленість, яку він приносить. Для справді потокових оновлень без ручних кроків вам потрібно інвестувати в написання скриптів і, можливо, використовувати сторонні API, як обговорювалося.

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

Керовані ціни для розміщених оцінок​

Live Prices надає підтримувані котирування оцінки для розміщених реєстрів Beancount.io. Завантажувач перевіряє нові дані, коли реєстр завантажується після п'ятихвилинного вікна оновлення; спостереження постачальника може бути старішим. Це не потокова стрічка.

Описані тут елементи керування Fava належать Fava. Додавання керованого include не додає цих елементів керування до розміщеного переглядача і не змінює подання за собівартістю на подання за ринковою вартістю. Upstream Fava потребує локальних файлів цін. Сумісна версія bea може їх експортувати; дивіться посібник із налаштування щодо сумісності.

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

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

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

  • Деревоподібна діаграма/сонячне сяйво доходів і витрат: На сторінці звіту про прибутки та збитки Fava може відображати ваші доходи та витрати як деревоподібну діаграму або діаграму сонячне сяйво. Вони чудово підходять для візуалізації грошових потоків «з першого погляду». Наприклад, якщо ваші щомісячні витрати показані як деревоподібна діаграма, площа кожного прямокутника відповідає величині кожної категорії витрат. Великі блоки одразу показують, куди пішла більшість ваших грошей (наприклад, оренда або іпотека, податки тощо), тоді як менші блоки показують незначні витрати. Це надзвичайно корисно для виявлення тенденцій у витратах – якщо блок «Dining Out» зростає з кожним місяцем, ви помітите це візуально. Ви можете перемкнутися на діаграму сонячне сяйво, щоб побачити ієрархічні розбивки (наприклад, зовнішнє кільце може показувати підкатегорії, як-от Groceries проти Restaurants у категорії Food). Ці діаграми оновлюються для будь-якого періоду, який ви відфільтрували (один місяць, з початку року тощо), даючи вам миттєву візуалізацію грошових потоків за цей період. Користувач на форумі з текстового обліку зазначив: “Я багато використовую деревоподібні діаграми доходів і витрат. Вони дають чудове візуальне відчуття наших фіскальних рухів.” – таке миттєве розуміння і є метою діаграм Fava.

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

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

  • Фільтрація в реальному часі та перегляд даних: Візуалізації у Fava не статичні; вони працюють у тандемі з фільтрацією Fava. Припустімо, ви хочете дослідити конкретний сценарій: «Як виглядають мої квартальні грошові потоки лише для бізнес-рахунків?» Ви можете встановити фільтр часу на Q1 2025 і відфільтрувати рахунки до вашої бізнес-ієрархії – Fava миттєво оновить діаграми, щоб показати чистий дохід, деревоподібну діаграму витрат тощо, але лише для цієї підмножини. Це інтерактивне розбиття означає, що ви можете робити ad-hoc аналіз дуже швидко, без написання запитів. Подання Journal також підтримує живу фільтрацію: ви можете шукати за підрядком одержувача платежу або опису й одразу бачити відфільтрований список транзакцій. Якщо ви дивитеся на дані в реальному часі (скажімо, ви щойно імпортували транзакції минулого тижня), ви могли б відфільтрувати за тегом, як-от #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"

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

        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). Ті самі запити виконуються без змін на сторінці Query Fava. Fava 1.30.16 відображає ті самі три рядки витрат як інтерактивну таблицю.

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

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

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

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

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

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

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

  • Metabase (ad-hoc запити та дашборди): Metabase — це зручний інструмент BI, який дозволяє виконувати запити та створювати дашборди без коду. Якщо ви експортуєте ваш реєстр у реляційний формат (через 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 була неінтуїтивною для його дружини – він використав реєстр у базі даних для керування цим користувацьким інтерфейсом. Якщо ви віддаєте перевагу JavaScript/TypeScript, ви могли б використати інструмент для перетворення реєстру на JSON і будувати з цього. Сама Fava надає свою сторінку Query через API запитів JSON, тож користувацький фронтенд може надсилати їй BQL і відображати повернені таблиці замість створення нового бекенду запитів.

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

Приклад із практики – ідея інтеграції з Grafana: Josh, користувач Beancount, запитав у списку розсилки про надсилання метрик Beancount до Prometheus і перегляд у Grafana. Основні розробники відповіли, що замість дублювання даних у Prometheus кращий підхід — плагін або сервіс Grafana, який безпосередньо робить запити до реєстру Beancount. Andreas поділився своїм розширенням 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'}" надходить як словник.

Приклад – розширення Auto-Commit: Вбудований 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.

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

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

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

Написання користувацького розширення: Припустімо, ви хочете користувацьку сторінку звіту, скажімо, «Receivables Aging» для рахунків-фактур. Ви могли б створити файл 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 ви тепер побачите сторінку «Receivables Aging».

Під капотом 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, додатково стає кінцевою точкою API JSON під розширенням. Зазвичай наданих хуків плюс шаблону достатньо.

Документація 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 для конфігурації.

Формат 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. Ви можете створити кілька дашбордів (кожен з'являється як вкладка або окрема сторінка). Це надзвичайно потужно для створення користувацьких фінансових дашбордів. Наприклад, ви могли б зробити дашборд «Budget vs Actual»: одна панель показує таблицю бюджету проти фактичних витрат за категоріями (через запит, що порівнює два набори рахунків), інша панель показує стовпчикову діаграму витрат з початку року проти попереднього року тощо. Усе це лише за допомогою конфігурації та мінімального написання скриптів, використовуючи дані вашого реєстру через 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 й перейдете до дашборду «Overview», він покаже ваш обчислений власний капітал. Потім ви можете вдосконалити шаблон або додати діаграми за потреби.

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

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

Приклад – користувацька метрика KPI у Fava: Скажімо, ви хочете відстежувати «Savings Rate» (відсоток заощадженого доходу). Ви могли б зробити це за допомогою розширення, яке обчислює його й показує невелике поле на головній сторінці. Або з 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 для підготовки звіту.”. Це демонструє, як особисті користувачі виграють як від вбудованого інтерфейсу, так і від можливості писати скрипти для користувацького аналізу за потреби.

  • Відстеження власного капіталу та цілей: Оскільки ви можете включити всі активи (банківські рахунки, інвестиції, навіть фізичні активи, якщо хочете) в один реєстр, ви отримуєте єдиний перегляд власного капіталу. Ентузіасти особистих фінансів використовують це для відстеження прогресу до цілей (наприклад, «число фінансової незалежності» або погашення боргу). Діаграми 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, записуючи рахунки-фактури, bills, зарплату тощо, і створювати баланс і звіти про прибутки та збитки. Beancount підтримує необхідний метод нарахування (ви можете позначити рахунки як дебіторську/кредиторську заборгованість і записувати рахунки-фактури з проведеннями на дохід і AR, а потім оплату для закриття AR). Fava тоді покаже їх у розділі Assets або Liabilities відповідно. У дискусії на Reddit запитували, чи підходить Beancount для компаній і чи може він генерувати належну фінансову звітність – так, він може створювати баланси, звіти про прибутки та збитки і (з деякою допомогою запитів) звіти про рух грошових коштів, оскільки це просто подання даних подвійного запису. Загвоздка в тому, що Beancount не забезпечує дотримання жодних конкретних бухгалтерських стандартів (це залежить від того, як ви його використовуєте). Тож обізнаний користувач (або бухгалтер) має правильно налаштувати план рахунків для бізнесу. Є приклади зі спільноти використання Beancount для стартапів – один коментатор на HN сказав: “Мені дуже подобається використовувати Beancount + Git для керування бухгалтерською книгою моєї власної стартап-компанії”, хоча вони зазначили, що періодично додавати записи було трохи виснажливо. Цю виснажливість можна полегшити автоматизацією імпорту, як ми бачили.

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

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

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

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

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

Реальні приклади: Інший користувач на HN сказав, що використовував це для консалтингової ТОВ і це добре працювало, але коли транзакції зросли, вони почали розділяти файли щороку для підтримки швидкості. Консенсус такий: для малого бізнесу (скажімо, десятки тисяч транзакцій на рік або менше) 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. Ви обмінюєте гнучкість на зручність.Дуже гнучко для аналізу та візуалізації. Ви можете створити майже будь-яку діаграму чи KPI, якщо дані доступні. Power BI може легко поєднувати фінансові дані з іншими даними (продажі, веб-аналітика тощо). Однак це не система обліку – вам потрібно мати підготовлені дані (які можуть бути з Beancount!). Він не забезпечує подвійного запису чи бухгалтерських принципів; це чистий аркуш. Гнучкість у візуалізації висока (користувацькі міри DAX тощо), але вимагає експертизи.
Швидкість реакції в реальному часіМайже реальний час із налаштуванням. Якщо ви автоматизуєте введення даних (стрічки або часті імпорти), Fava відобразить це, щойно реєстр оновлено й перезавантажено. За замовчуванням це не «push» у реальному часі (потрібне ручне оновлення), але ви можете оновлювати так часто, як забажаєте (щохвилини, щогодини). Швидкість оновлення дуже висока (розбір тексту за мілісекунди для невеликих змін). Ви контролюєте частоту – може бути безперервною, якщо запрограмовано. Жодного очікування циклів синхронізації постачальника.Спроєктований для майже реального часу для банківських транзакцій: “Банківські стрічки дозволяють бачити, як справи у вашому бізнесі, в реальному часі.” На практиці банківські стрічки в QuickBooks Online оновлюються раз на день або за запитом (залежить від банку). Він автоматично отримує нові транзакції та намагається їх категоризувати, тож вам не потрібно імпортувати вручну. Зміни з'являються на дашборді без ручного втручання. Однак деякі дані (як-от транзакції в очікуванні) можуть не відображатися, доки не будуть закриті. Крім того, певні звіти можуть не оновлюватися до виконання дії. Загалом хороша швидкість реакції для банківських даних; менша для таких речей, як ручні бухгалтерські проведення (усе ще реальний час, але їх ви вводите самі).Якщо налаштовано з живим з'єднанням, дашборди можуть оновлюватися в реальному часі або за розкладом. Наприклад, дашборд Power BI, що використовує DirectQuery до бази даних SQL, може оновлюватися щоразу, коли ви його відкриваєте, або навіть автоматично. У режимі Import ви оновлюєте за розкладом (наприклад, щогодини). Тож це може бути майже реальний час, але складність у підтримці конвеєра даних. Крім того, будь-яка зміна базових даних вимагає оновлення моделі чи запитів. Може бути невелика затримка залежно від конфігурації (і якщо використовується хмара Power BI, є обмеження на частоту автопоновлення в безкоштовних тарифах).
Автоматизація та введення данихІмпорт може бути високоавтоматизованим, але вимагає користувацького налаштування. Можливо, вам доведеться писати/підтримувати скрипти або використовувати імпортери спільноти для кожного банку чи джерела даних. Жодних готових банківських з'єднань (крім тих, що ви створите). Тож початкове налаштування автоматизації — це зусилля. З іншого боку, після налаштування воно може бути повністю автоматизованим без ручного введення (як деякі користувачі досягли ~95% автоматизації). Також підтримує ручне введення для того, що не можна автоматизувати (через веб-форму Fava або редагування тексту).Дуже автоматизовано для банківських стрічок/стрічок кредитних карток (жодного кодування не потрібно – просто підключіть свої рахунки в QuickBooks). Він також автоматично пропонує категорії (використовуючи минулі дані й трохи ML). “Кожна транзакція миттєво синхронізується й сортується для вас… QuickBooks рекомендує категорії й з часом стає розумнішим.”. Це велика перевага зручності – менше ручної роботи. Однак автоматизація переважно для фінансових рахунків; інші речі (як-от розділення витрати за класами) усе ще можуть потребувати ручного перегляду. Крім того, якщо банківська стрічка ламається, користувачу доводиться повторно підключатися або завантажувати файли.Power BI взагалі не про введення даних – він покладається на будь-яку автоматизацію, яку має джерело даних. Якщо ваше джерело даних — ручна електронна таблиця, то це не реальний час. Якщо це база даних, оновлювана якимось процесом ETL, це може бути близько до реального часу. Тож автоматизація залежить від того, що ви подаєте в Power BI. Сам Power BI можна запланувати для оновлення даних із джерел. Коротко кажучи, Power BI добре відображає автоматизовані дані, але не створює автоматизацію (у вас має бути автоматизований конвеєр даних, що його живить).
Співпраця та обмінСпівпраця через текст (наприклад, Git) потужна, але технічна. Кілька людей можуть долучитися, редагуючи файл(и) реєстру й об'єднуючи зміни. Fava можна розмістити лише для читання, щоб ділитися звітами з іншими, але їй бракує ролей користувачів чи гранульованого контролю доступу з коробки. Для одного користувача чи технічно підкованої команди це нормально. Аудиторам або бухгалтерам може знадобитися експорт даних (наприклад, оборотно-сальдова відомість в Excel), щоб працювати з ними, якщо вони не комфортні з форматом.Багатокористувацький веб-доступ із дозволами (QuickBooks Online підтримує бухгалтерів, кількох бізнес-користувачів із ролями). Легкий обмін – ваш бухгалтер може увійти й побачити книги наживо. Це сильна сторона для бізнесу. Для особистих фінансів багатокористувацький режим менш актуальний, але хмарний доступ з різних пристроїв — перевага (хоча ви так само можете запустити Fava на особистій хмарі/VPS). 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 проти QuickBooks: Beancount пропонує вищу прозорість (ви бачите й контролюєте все, і ваші дані не зникнуть і не будуть замкнені) та гнучкість (ви можете змоделювати будь-що в реєстрі, а не лише те, що очікує QuickBooks). Він вимагає більше самостійної роботи, особливо для автоматизації та приємних штрихів інтерфейсу. QuickBooks — це готове рішення, оптимізоване для потреб малого бізнесу – банківські стрічки, виставлення рахунків, зарплата (з додатками) – і забезпечує оновлення майже в реальному часі з мінімальними зусиллями користувача. Однак це багато в чому чорна скринька; ви довіряєте програмі правильну обробку ваших даних, і іноді це означає, що важко виправити помилки чи зрозуміти, як вона дійшла до числа. Багато користувачів Beancount — це люди, яких дратували ці чорні скриньки. Вони обмінюють трохи зручності на ясність.

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

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

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

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

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

Переваги​

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

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

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

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

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

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

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

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

Недоліки​

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

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

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

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

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

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

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

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

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

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

Джерела:

  • Blais, M. (2020). Beancount Documentation – Design principles and usage. [Online]. Available: beancount.github.io
  • Aumayr, D., Gerstmayr, A. (2025). Fava Documentation & GitHub Repository. [Online]. Available: beancount.github.io/fava/ and 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.” Personal Blog Post.
  • Google Groups – Beancount Forum. (2023). Discussion on Grafana integration (Josh D. and Andreas G.)
  • QuickBooks Marketing Page. “Bank Feeds – Understand all your transactions in an instant.” Intuit QuickBooks.
  • Watt, A. (2023). “Beancount for Personal Finance.” Alex Watt Blog.
  • Reddit – r/plaintextaccounting. Various discussions (2021-2023) on business use of Beancount and ledger visualization.
  • Fava Extension Documentation – Help: Extensions.
  • fava-dashboards GitHub README – Andreas Gerstmayr’s custom dashboards plugin.
  • Awesome Beancount list – community-curated resources for Beancount.

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