Финансови анализи в реално време с Fava и Beancount
Въведение
Beancount е система за счетоводство с двойно записване с отворен код, която използва текстови файлове като главна книга. Тя акцентира върху простотата, прозрачността и гъвкавостта при проследяването на финансите. Fava е мощен уеб-базиран интерфейс за Beancount, предоставящ интерактивен панел за преглед на отчети, визуализации и управление на вашата главна книга. В този доклад изследваме основните възможности на Beancount и Fava и как да постигнете финансови анализи в реално време или близо до реалното време с тези инструменти. Покриваме съвети за конфигуриране за автоматизация и опресняване на данни, функциите за визуализация на Fava (за незабавен преглед на паричните потоци и откриване на тенденции), интеграция с външни дашбордове (Grafana, Metabase и др.), примери за персонализирани табла и плъгини, случаи на употреба в личните финанси и финансите на малкия бизнес, сравнения с други платформи (Power BI, QuickBooks) и предимствата/недостатъците на използването на Fava + Beancount за прозрения, базирани на данни.
Основни възможности на Beancount и Fava
Beancount (Ядро за счетоводство в обикновен текст)
- Главна книга с двойно записване в обикновен текст: Beancount съхранява транзакциите в единичен
.beancountтекстов файл (или множество файлове, включени заедно). Всяка транзакция трябва да бъде балансирана (общ дебит = общ кредит) по сметките, което налага счетоводна цялост. Форматът на обикновен текст означава, че вашите данни са четими от човек, подлежат на контрол на версиите и не са заключени към конкретен доставчик. - Гъвкави, йерархични сметки: Можете да дефинирате всякакви сметки (напр.
Assets:Bank:Checking,Expenses:Food:Coffee) в йерархия. Beancount не налага стриктна структура на вашия сметкоплан, така че той работи за лични финанси, счетоводство на малки предприятия, инвестиции и т.н. – той е „гъвкав: работи за лични финанси, счетоводство на малки фирми, криптовалути, инвестиции в акции и др.“. - Множество валути и стоки: Beancount има първокласна поддръжка за множество валути и стоки (напр. акции, криптовалути). Можете да записвате транзакции в различни валути, да дефинирате обменни курсове (ценови директиви) и да проследявате цената на придобиване. Може да генерира отчети „по цена на придобиване“ или „по пазарна стойност“, ако са предоставени данни за цените. Това го прави подходящ за портфейли и международни финанси.
- Автоматизирани проверки и баланси: Системата поддържа потвърждения на баланса (balance assertions – можете да декларирате какъв трябв а да бъде балансът на дадена сметка към определена дата и Beancount ще даде грешка, ако той не съвпада) и балансови транзакции за приключване на книгите. Също така поддържа встъпителни/заключителни записи на капитала и изчисляване на неразпределената печалба за приключване на периоди. Те помагат да се гарантира, че вашите книги остават последователни и грешките се улавят рано.
- Мощен механизъм за заявки и отчети: Beancount идва с език за заявки BQL (Beancount Query Language) и инструменти за команден ред като
bean-balance,bean-registerиbean-queryза генериране на отчети. Можете да правите заявки към главната книга за персонализирани отчети (напр. списък с разходи по получател, паричен поток за период) – по същество третирате главната книга като база данни. Той е бърз дори с хиляди транзакции и може да експортира към CSV или директно към Excel/LibreOffice (с опционални добавки). - Разширяемост чрез плъгини: Beancount е написан на Python и позволява персонализирани плъгини за разширяване на неговата функционалност. Плъгините могат да налагат допълнителни правила или изчисления при обработка на файла. (Например има плъгини за работа с данъчни партиди или за гарантиране, че никоя покупка не е без цена на придобиване.) Системата за плъгини и Python API позволяват на напредналите потребители да създават скриптове за персонализирано поведение или да интегрират Beancount с други системи.
- Импортори за външни данни: Ключова практическа функция е рамката на Beancount за импортиране на данни (напр. от банкови извлечения). Можете да пишете или използвате плъгини за импортиране, които анализират CSV, OFX, PDF извлечения и др., и ги конвертират в записи на Beancount. Това е от съществено значение за автоматизацията.
- Подходящ за одит и контрол на версиите: Тъй като е обикновен текст, можете да съхранявате вашата главна книга в Git или други системи за контрол на версиите. Всяка промяна е прозрачна и имате пълна история на редакциите. Това прави одитите или прегледа на промените лесни (много потребители записват промените за деня в Git хранилище, осигурявайки защитен от подправяне дневник на всички финансови записи). Това ниво на прозрачност е основна разлика от затворения счетоводен софтуер – „без заключване към SaaS – просто чисто, прозрачно счетоводство с мощно отчитане“.
Fava (Уеб интерфейс за Beancount)
- Интерактивен уеб интерфейс: Fava предоставя локален уеб сървър, който визуализира вашата главна книга на Beancount в богат потребителски интерфейс. Той показва основни отчети (Отчет за приходите и разходите, Счетоводен баланс и др.), регистри на сметки и дневници в браузъра с интерактивни контроли. Интерфейсът е динамичен и лесен за използване в сравнение с командния ред. Стартирате го с проста команда
fava yourfile.beancountи получавате уеб приложение за вашите книги. - Вградени графики и диаграми: Fava генерира графики, които помагат за визуализиране на вашите данни. Например, тя включва линейна диаграма на Нетното състояние във времето, стълбови диаграми за приходи срещу разходи на месец и кръгови/дървовидни диаграми за разбивка на разходите. Тези визуализации се актуализират с вашите данни и поддържат различни изгледи (напр. „по цена на придобиване“ спрямо „пазарна стойност“ за инвестиции).
- Филтриране и търсене: В горната част на страниците на Fava лентата за филтриране ви позволява да анализирате данните си в реално време. Можете да филтрирате по време (напр. година, тримесечие, месец), по регулярен израз за сметка, по получател, по описание или по тагове/връзки. Това улеснява проверката на данни в реално време – например бързо филтриране по „Tag=Travel“ и „Year=2025“, за да видите всички пътни разходи за 2025 г. с общите суми.
- Поддръжка на множество файлове и консолидация: Fava може да зарежда няколко Beancount файла едновременно (полезно, ако разделяте регистрите си) и да превключва между тях. Тя може също да ги консолидира, ако е необходимо (например преглед на лични и бизнес регистри заедно).
- Въвеждане и редактиране на данни: Уникалното е, че Fava не е само за четене – тя има редактор и форма за въвеждане на транзакции. Можете да добавяте нови транзакции чрез уеб форма (тя ще вмъкне записа във вашия .beancount файл). Можете също така да отворите изходния файл във външен редактор директно от Fava. Fava дори поддържа клавишни комбинации „в стил Gmail“ (натиснете
?в интерфейса, за да ги видите) за опитни потребители. - Отчети и детайлно разглеждане на сметки: Fava предоставя стандартни счетоводни отчети: Отчет за приходите и разходите (Profit & Loss), Счетоводен баланс, Оборотна ведомост и списък с активи за инвестиции. Балансът и ОПР са интерактивни – можете да кликнете върху сметка, за да разгледате детайлите ѝ, или да превключвате между изглед по цена на придобиване и пазарна стойност за активите. Fava показва и „нереализирани печалби“ за инвестиции, ако имате данни за цените.
- Управление на документи: Ако прикачвате касови бележки или извлечения, Fava помага за тяхното организиране. Beancount има концепция за папка с документи, а Fava ви позволява да влачите и пускате файлове върху сметки или транзакции – тя ще ги съхрани и ще добави запис за документ във вашата главна книга.
- Персонализация чрез разширения: Fava може да бъде разшире на с плъгини (написани на Python) за добавяне на нови отчети или функционалности. Някои разширения са вградени (напр. отчет за портфолио за инвестиции). Дизайнът на Fava позволява вмъкване на нови страници и дори персонализиран JavaScript чрез нейното API за разширения.
- Производителност: Fava е ефективна – тя презарежда данните в паметта и обслужва страниците бързо. Базовият парсинг на Beancount е доста бърз (оптимизиран на C++ в последната версия), така че дори големи регистри се зареждат за секунда-две. На практика Fava може да се справи с лични регистри за много години напред.
- Уеб достъп и мобилност: Като стартирате Fava на сървър или дори на вашия лаптоп, можете да достъпвате финансите си от всеки браузър. Някои потребители хостват Fava на частен сървър или Raspberry Pi, за да могат да проверяват финансите си в движение (евентуално защитени с парола или VPN, тъй като Fava няма вградена автентификация). Това по същество ви дава самохоствано „уеб приложение“ за вашите финанси, без да предавате данните си на трета страна.
В обобщение, Beancount осигурява стабилна основа за прозрачно, текстово базирано счетоводство със строги правила за двойно записване и поддръжка на множество валути. Fava надгражда това, като предлага достъпен интерфейс с незабавни прозрения (отчети, графики) и възможност за взаимодействие с вашите данни. Заедно те формират изключително гъвкава система за счетоводство и анализи, която контролирате изцяло.
Анализ в реално време (или почти в реално време) с Beancount и Fava
Постигането на анализ в реално време или почти в реално време с Beancount и Fava включва автоматизиране на потока от данни към вашата главна книга и осигуряване на актуална информация в инструментите. По подразбиране Beancount е пакетен процес (добавяте записи във файла, след което преглеждате отчетите), а Fava открива промените и изисква опресняване. Въпреки това, с правилната настройка, можете да оптимизирате актуализациите така, че новите трансакции и промени да се появяват почти мигновено.
Откриване на промени във файловете: Fava наблюдава файла на главната книга за промени. Ако редактирате файла .beancount (или включените файлове) в редактор, Fava ще покаже банер „Открити са промени – щракнете за презареждане“. При щракване (или натискане на бутона за презареждане), тя презарежда данните и актуализира изгледа. На практика това презареждане е много бързо (обикновено под секунда за типични главни книги). Това означава, че Fava може да служи като табло за управление в реално време, ако вашият файл на главната книга се актуализира често. (В режим на отстраняване на грешки Fava може дори автоматично да се презарежда при промени във файла, въпреки че по подразбиране изчаква потвърждение от потребителя, за да избегне прекъсване на прегледа.)
Тръбопровод за непрекъснат импорт/актуализация: За да получите данни в реално време, трябва да автоматизирате добавянето на трансакции към файла на Beancount. Има няколко често срещани стратегии:
-
Планирани задачи за импортиране (Cron): Много потребители настройват cron задача (или планирана задача), за да извличат периодично нови трансакции от финансови институции (например всяка вечер или на всеки час) и да ги добавят към главната книга. Например, можете да използвате плъгини за импортиране на Beancount, за да изтеглите най-новите банкови трансакции чрез API или OFX изтегляне. Един потребител на Beancount е изградил тръбопровод за автоматизация, така че счетоводните му книги да се актуализират сами: „да виждам как моята счетоводна книга се актуализира сама, без да я докосвам, в отворен формат, ми носи чиста радост“. Това е постигнато чрез свързване с банкови API и планиране на редовни актуализации. Инструменти като
bean-fetch(за OFX) или персонализирани скриптове на Python, използващи банкови API (напр. Plaid), могат да се изпълняват по график и да записват нови записи в главната книга. След всеки планиран импорт, ако имате стартирана Fava, можете просто да я опресните, за да видите новите данни. -
Проследяване на промени във файлове (File Watchers) и тригери: Вместо графици, базирани на времето, можете да използвате инструменти за проследяване на промени във файлове, за да реагирате на събития. Например, ако вашата банка може да ви изпраща по имейл ежедневно извлечение или пуснете CSV файл в папка, скрипт може да открие този файл (използвайки
inotifyв Linux или подобен) и незабавно да изпълни процедурата по импортиране, след което да сигнализира на Fava да го презареди. Въпреки че Fava все още не поддържа автоматично презареждане (push live reload) в браузъра, поне ще имате актуализирани данни, така че следващия път, когато проверите страницата или щракнете върху презареждане, тя да е актуална. Някои общностни проекти отиват по-далеч: за ledger (сродна на Beancount програма), един потребител е създал малък сървър, който предоставя данни от ledger на Grafana в реално време, показвайки, че подобен подход може да се приложи и с Beancount – по същество изграждане на демон (daemon), който непрекъснато подава данни към вашите табла за управление. -
Директна интеграция на API: Вместо да преминават през файлове, напредналите потребители могат да се свържат директно с банкови API (като Plaid или регионални Open Banking API), за да изтеглят трансакции често. Мотивиран потребител може да напише скрипт за импортиране „на живо“ в цикъл (с подходящо ограничаване на честотата на заявките) – ефективно анкетирайки банката за нови данни на всеки няколко минути. Нищо не ви пречи да се „регистрирате в Plaid API и да направите същата [автоматизация] локално“. Всяка нова трансакция може да бъде добавена към файла на Beancount в момента на пристигането й. С този подход Fava наистина се превръща в табло за управление в реално време за вашите акаунти, съперничещо на актуалните потоци от данни в търговските приложения.
Опресняване на данните във Fava: След като данните ви се актуализират, показването им във Fava е лесно: опресняване на браузъра (F5) или щракване върху банера за презареждане ще зареди последното състояние на главната книга. Ако предпочитате дори да не щраквате, стартирането на Fava с --debug активира автоматично презареждане за р азработка на разширения, което някои са използвали за принудително незабавно презареждане на страницата при промени. Като алтернатива, ако изграждате персонализиран интерфейс, можете да го настроите да анкетира малък API, който връща последния баланс или други данни от главната книга по график.
Незабавни изчисления: Бързото парсване на Beancount означава, че дори ако актуализирате файла на главната книга на всеки няколко минути, времето от извличане на данни → актуализиране на файл → презареждане на Fava е кратко. Например, един потребител отбелязва, че презареждането на Fava след редактиране на файла „е едва забележимо... определено по-малко от секунда“ за главни книги с разумен размер. По този начин можете да държите прозорец на Fava отворен и периодично да натискате опресняване, за да имитирате табло за управление на живо. (За наистина изживяване на живо, човек би могъл да създаде малък скрипт за автоматично опресняване на браузъра или да използва функцията на браузъра за опресняване на всеки N секунди.)
Равняване и известия: За да се доверите на данните в реално време, трябва също така често да равнявате балансите. Beancount прави това лесно с балансови потвърждения (balance assertions) и индикатор за актуалност. Всъщност Fava предлага цветни индикатори до сметките, ако ги маркирате с определени метаданни (напр. можете да маркирате сметка с метаданни fava-uptodate и Fava ще я оцвети в червено/жълто/зелено въз основа на това дали последният запис е скорошна проверка на баланса). Това може да се използва за бърза проверка дали балансът на дадена сметка в главната книга съвпада с последното извлечение от банката. В настройка почти в реално време можете да автоматизирате ежедневните проверки на баланса (така че всяка сутрин главната книга да има крайния баланс от предходния ден от банката за всяка сметка). Тогава индикаторът на Fava ще ви каже дали вашият автоматичен импорт е пропуснал нещо или има несъответствие, давайки ви увереност, че данните „на живо“, които виждате, са точни.
Пример за автоматизация: Да приемем, че искате ежедневни актуализации на паричните потоци. Можете да настр оите cron задача, която да се изпълнява в 3 часа сутринта всяка вечер: тя изпълнява Python скрипт, който използва API на вашата банка, за да извлече трансакциите за последния ден, записва ги в import_today.beancount и след това добавя този файл към основната ви главна книга. Той също така записва балансово потвърждение за края на деня. Когато се събудите, отваряте Fava – тя показва всички трансакции до вчера и виждате актуализирани приходи/разходи за текущия месец. Ако направите разход през деня, можете да го добавите ръчно (например чрез формата за нова трансакция на Fava на вашия телефон) или да изчакате нощния импорт. Този хибриден подход (предимно автоматизиран, с възможност за ръчно добавяне при нужда) дава картина, близка до реалното време. Друг подход е да оставите отворена страницата Journal във Fava и да я използвате като регистър: докато харчите, бързо записвате трансакцията (подобно на вписване в чекова книжка) – тогава вие сте потокът от данни в реално време. Това е по-ръчен процес, но някои потребители се наслаждават на осъзнатостта, която той носи. За наистина стрийминг актуализации без ръчни стъпки, щ е трябва да инвестирате в скриптове и евентуално да използвате API на трети страни, както беше обсъдено.
В обобщение, чрез комбиниране на автоматизацията на импорта на Beancount с бързото опресняване на Fava, можете да получите финансови данни в почти реално време. Може да не е „лесно като натискане на един бутон“ да се постигне същото ниво на поток на живо като услуга като QuickBooks (която автоматично изтегля банкови потоци), но е възможно – и което е важно, вие запазвате пълния контрол и прозрачност на процеса. Както отбеляза един защитник на счетоводството в обикновен текст, малко усилия в началото могат да доведат до автоматизирана система, която е „много по-добра от търговските решения и далеч по-гъвкава и разширяема“. В следващия раздел ще видим как възможностите за визуализация на Fava ви позволяват незабавно да осмислите тези актуални данни, превръщайки необработените трансакции в прозрения.
Визуализационни възможности във Fava (Парични потоци, тенденции, инспекция в реално време)
(GitHub - beancount/fava: Fava – уеб интерфейс за Beancount) Отчетът за приходите и разходите (Income Statement) на Fava (в уеб интерфейса) поддържа богати визуализации като дървовидни карти (на снимката) и sunburst диаграми за бърза представа за състава на приходите и разходите. В тази дървовидна карта всеки правоъгълник представлява категория разход, оразмерен според неговата сума – можете незабавно да видите, че Наемът (големият зелен блок) доминира в разходите. Горната лента за филтриране и контролите (горе вдясно) позволяват промяна на валутата, типа диаграма и периода (напр. преглед на месечни данни). Fava също така предоставя линейни диаграми (напр. нетно състояние във времето) и стълбовидни диаграми (напр. пр иходи спрямо разходи по месеци), за да ви помогне да забележите тенденции във вашите финансови данни.
Една от най-големите сили на Fava е незабавното превръщане на данните от счетоводната книга във визуални, интерактивни отчети. Веднага след зареждане на книгата, Fava генерира диаграми, които улесняват разбирането на паричните потоци и тенденциите от пръв поглед:
-
Дървовидна карта/Sunburst за приходи и разходи: На страницата на Отчета за приходите и разходите (Income Statement) Fava може да покаже вашите приходи и разходи като дървовидна карта (treemap) или sunburst диаграма. Те са чудесни за визуализация на паричния поток „от пръв поглед“. Например, ако месечните ви разходи са показани като дървовидна карта, площта на всеки правоъгълник съответства на величината на всяка категория разходи. Големите блокове веднага показват къде са отишли повечето от парите ви (напр. наем или ипотека, данъци и т.н.), докато по-малките блокове показват незначителни разходи. Това е изключително полезно за забелязване на тенденции в харченето – ако блокът „Хранене навън“ расте всеки месец, ще го забележи те визуално. Можете да превключите към sunburst диаграма, за да видите йерархично разбиване (напр. външният пръстен може да показва подкатегории като „Хранителни стоки“ спрямо „Ресторанти“ в категорията „Храна“). Тези диаграми се актуализират за периода, който сте филтрирали (един месец, от началото на годината и т.н.), давайки ви незабавна визуализация на паричния поток за този период. Потребител във форума за plain-text accounting отбеляза: „Използвам много дървовидните карти за приходи и разходи. Те дават страхотно визуално усещане за нашите фискални движения.“ – точно към такова незабавно разбиране се стремят диаграмите на Fava.
-
Нетно състояние и баланс във времето: Fava предоставя линейна диаграма за нетното състояние във времето (на страницата „Balance Sheet“ или „Statistics“). Тази диаграма очертава сумата на вашите активи минус пасивите във всеки момент от времето (по дни, седмици или месеци). Тя е безценна за проследяване на тенденции – можете да видите траекторията на вашите финанси (напр. постоянно нагоре или спадове в определени моменти). Ако имате инвестиции, можете да превключвате между показване на стойността по цена на придобиване спрямо пазарна стойност (ако са записани данни за цените) – например може да видите как нетното ви състояние по пазарна стойност варира спрямо цените на акциите, докато по цена на придобиване е по-плавно. Fava също така може да показва балансите на сметките във времето. Ако кликнете върху сметка (да кажем Assets:Bank:Checking), страницата на сметката показва графика на историята на нейния баланс. Можете незабавно да проверите как се движи вашата парична сметка – което на практика е графика на паричния поток (наклонът на линията на баланса показва нетния паричен поток). Ако тя върви надолу, знаете, че харчите повече, отколкото печелите в този период. Изследвайки тези тенденции, можете да забележите модели като „всеки декември спестяванията ми спадат (празнични разходи)“ или „инвестициите ми нараснаха рязко през това тримесечие“.
-
Стълбовидни диаграми за периодично сравнение: В изгледа на Отчета за приходите и разходите Fava има раздели за „Месечна печалба“, „Месечни приходи“, „Месечни разходи“ и т.н. Избирането им показва стълбовидни диаграми по месеци. Например, Месечна нетна печалба ще покаже излишъка/дефицита за всеки месец като стълб, което улеснява сравняването на представянето през месеците. Можете бързо да идентифицирате отклонения (напр. голям отрицателен стълб през април означава, че този месец е имал необичайна загуба/разход). По същия начин стълбовидната диаграма „Месечни разходи“ подрежда или групира разходите по категории на месец, така че да можете да видите кои категории варират. Това е чудесно за проследяване на тенденции във времето – например може да забележите, че разходите ви за „Пътуване“ скачат всяко лято или сметките за „Комунални услуги“ са по-високи през зимата. Fava по същество ви дава някои от възможностите на приложение за бюджетиране (проследяване на тенденции), но с пълна възможност за персонализиране (тъй като вие определяте категориите и как те се групират).
-
Филтриране в реално време и инспекция на данни: Визуализациите във Fava не са статични; те работят в тандем с филтрирането на Fava. Да предположим, че искате да инспектирате специфичен сценарий: „Как изглеждат тримесечните ми парични потоци само за моите бизнес сметки?“ Можете да настроите филтъра за време на Q1 2025 и да филтрирате сметките до вашата бизнес йерархия – Fava незабавно ще актуализира диаграмите, за да покаже нетния доход, дървовидната карта на разходите и т.н., но само за този подкомплект. Това интерактивно сегментиране означава, че можете да правите ad-hoc анализи много бързо, без да пишете заявки. Изгледът Journal (Журнал) също поддържа филтриране на живо: можете да търсите по платец или подниз от описанието и веднага да видите филтриран списък с транзакции. Ако разглеждате данни в реално време (да речем, току-що сте импортирали транзакциите от миналата седмица), можете да филтрирате по таг като
#uncategorized, за да видите нови транзакции, които може да се нуждаят от категоризация, или по@pending(ако маркирате предстоящи записи), за да видите какво все още не е изчистено. Тази възможност за инспекция в реално време помага и за осигуряване на качеството на данните – защото можете да изолирате и коригирате аномалии в движение. -
Отчет за паричните потоци (непряк): Въпреки че Beancount/Fava не генерира официален отчет за паричните потоци (разбивка Оперативна/Инвестиционна/Финансова дейност) директно, можете да го симулирате с персонализирани заявки или чрез структуриране на сметките. Например, можете да тагвате определени транзакции или да използвате специфични сметки за инвестиране и финансиране, след което да извличате общите суми. Интерфейсът за заявки на Fava ви позволява да стартирате BQL заявка като:
SELECT sum(amount) WHERE account ~ "Assets:Bank" AND year = 2025, за да получите паричния поток за годината и т.н. Въпреки това, повечето индивидуални потребители смятат комбинацията от тенденции в баланса и диаграми на приходите/разходите за достатъчна за разбиране на паричните потоци. -
Визуализация на наличности и портфейл: На страницата Holdings (Наличности) Fava изброява текущите ви наличности от активи (напр. акции, облигации, криптовалут и) с количества, цена на придобиване, пазарна стойност и нереализирани печалби. Въпреки че това е таблица, а не диаграма, тя е много полезна за инспекция в реално време на състоянието на вашето портфолио. Някои разширения (като fava-investor, обсъдено по-късно) добавят повече визуализации за портфейли, като например кръгови диаграми за разпределение или графики на представянето. Дори без разширения можете да видите например как се променя стойността на вашия портфейл от акции според последните цени – ако актуализирате котировките на цените редовно (което може да бъде автоматизирано ежедневно), диаграмите на Fava ще отразяват пазарната стойност на вашите инвестиции към момента.
На практика визуалните отчети на 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, за да изложи автоматично GraphQL API за данните от главната книга и след това е написал персонализиран React фронтенд върху него – по същество третирайки главната книга като уеб услуга. Този подход адресира случаи, в които интерфейсът на Fava може да не е достатъчен (например достъп за множество потребители или по-подходящи за мобилни устройства потребителски интерфейси). Той изисква повече инженерни усилия, но показва потенциала: можете сравнително лесно да интегрирате Beancount със съвременни уеб стекове. По-лек вариант е използването на вградената поддръжка на SQLite в Beancount – изпълнението на заявка като
bean-query -e ledger.beancount "SELECT ..."може да изведе резултати, или използването на Python API на Beancount за извличане на данни и вмъкването им в SQLite БД. Някои хора използват SQLite като посредник за включване в инструменти като Metabase (който може да чете SQLite файлове чрез връзка). -
Grafana (Табла за времеви редове): Grafana е популярна за мониторинг и данни от времеви редове. Финансовите данни във времето (разходи, салда) могат да се разглеждат като времеви редове. В общността има дискусии за свързване на Beancount към Grafana. Една идея беше Grafana Data Source Plugin, който да изпълнява 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 позволява богати опции за визуализация (анотации, прагове, комбиниране със сървърни метрики и др.). Андреас Герстмайер (един от поддържащите Fava) предложи точно този подход и дори спомена, че е създал разширение за Fava, наречено fava-dashboards (повече за него по-долу), за изобразяване на диаграми от BQL заявки като алтернатива на цялостна инсталация на Grafana. Ако предпочитате потребителския интерфейс на Grafana, интеграцията е осъществима – тя просто изисква изграждане на мост за данни.
-
Metabase (Ad-hoc заявки и табла): Metabase е лесен за използване BI инструмент, който ви позволява да изпълнявате заявки и да правите табла без писане на код. Ако експортирате вашата главна книга в релационен формат (чрез Beanpost или чрез записване на таблици с транзакции, осчетоводявания и т.н.), можете да насочите Metabase към тази база данни. Можете да създадете персонализирани таблици като
expenses (date, category, amount)от вашата главна книга и след това в Metabase лесно да генерирате диаграми (например кръгова диаграма на разходите по категории за миналия месец). Предимството е, че нетехнически потребители (или колеги) след това биха могли да взаимодействат с данните чрез графичния интерфейс на Metabase, без да е необходимо да докосват файла на Beancount. Недостатъкът е, че трябва да поддържате процеса на експорт/синхронизация. Някои потребители са автоматизир али нощно преобразуване на главната книга на Beancount в SQLite, след което оставят Metabase да чете SQLite; други използват подхода с Postgres. Ключът е, че преносимостта на данните в Beancount позволява това – вие сте свободни да дублирате данните във всякаква форма, от която се нуждае вашият външен инструмент. -
Персонализирани фронтенд приложения: Ако имате специфични нужди, винаги можете да напишете персонализирано приложение върху Beancount. Python библиотеката на Beancount ви дава достъп до всички анализирани записи, салда и т.н., така че Python уеб рамка (Flask, Django, FastAPI) може да се използва за изграждане на адаптирано приложение. Например малък бизнес може да изгради табло, което показва KPI метрики (като брутен марж, ежедневни продажби и др.) чрез заявки към главната книга и евентуално комбиниране с данни извън нея (като брой обслужени клиенти). Един член на общността изгради мобилно уеб приложение, тъй като Fava не е била достатъчно интуитивна за неговия партньор – те са използвали главната книга в база данни, за да управляват този персонализиран интерфейс. Ако предпочитате JavaScript / TypeScript, можете да използвате инструмент за конвертиране на главната книга в JSON и да изграждате оттам. Някои проекти като beancount-web или beancount-query-server се появиха в общността, за да излагат данни от Beancount чрез API, въпреки че API-то на Fava (ако работи в режим „headless“) също може да се използва – Fava има API крайна точка за вътрешни заявки.
-
Интеграция с Excel / PowerBI: Струва си да се отбележи, че можете дори да се интегрирате с Excel или PowerBI. Beancount (и Fava чрез добавка) може да експортира резултатите от заявките в CSV или Excel файлове. Работният процес може да бъде следният: нощна задача генерира Excel файл с ключови финансови показатели от 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.