Преминете към основното съдържание

Финансов анализ в реално време с Fava и Beancount

Въведение

Beancount е система за двойно счетоводство с отворен код, която използва обикновени текстови файлове като счетоводна книга. Тя набляга на простотата, прозрачността и гъвкавостта при проследяване на финансите. Fava е мощен уеб-базиран интерфейс за Beancount, предоставящ интерактивен интерфейс за преглед на отчети, визуализации и управление на вашата счетоводна книга. В този отчет ще проучим основните възможности на Beancount и Fava и как да постигнем финансов анализ в реално време или почти в реално време с тези инструменти. Ще разгледаме съвети за конфигуриране за автоматизация и опресняване на данните, функциите за визуализация на Fava (за незабавни изгледи на паричния поток и откриване на тенденции), интеграция с външни табла (Grafana, Metabase и т.н. ), примери за персонализирани табла и плъгини, случаи на употреба в личните финанси и финансите на малкия бизнес, сравнения с други платформи (Power BI, QuickBooks) и предимствата/недостатъците на използването на Fava + Beancount за анализи, базирани на данни.

analytics

Основни възможности на Beancount и Fava

Beancount (Механизъм за счетоводство в обикновен текст)

  • Двойно счетоводство в обикновен текст: Beancount съхранява транзакциите в един .beancount текстов файл (или няколко файла, включени заедно). Всяка транзакция трябва да балансира (общо дебити = общо кредити) в сметките, налагайки счетоводна цялост. Форматът на обикновен текст означава, че вашите данни са четими от човека, контролирани от версии и не са заключени към никой доставчик.
  • Гъвкави, йерархични сметки: Можете да дефинирате всякакви сметки (напр. Assets:Bank:Checking, Expenses:Food:Coffee) в йерархия. Beancount не е натрапчив относно вашата сметкоплан, така че работи за лични финанси, счетоводни книги за малък бизнес, инвестиции и т.н. - "гъвкав: работи за лични финанси, счетоводство за малък бизнес, крипто, инвестиции в акции и други."
  • Множество валути и стоки: Beancount има първокласна поддръжка за множество валути и стоки (напр. акции, крипто). Можете да записвате транзакции в различни валути, да дефинирате валутни курсове (ценови директиви) и да проследявате себестойността. Той може да генерира отчети "по себестойност" или "по пазарна стойност", ако са предоставени ценови данни. Това го прави подходящ за портфейли и международни финанси.
  • Автоматизирани проверки и баланси: Системата поддържа потвърждения на баланса (можете да декларирате какъв трябва да бъде балансът на една сметка към дадена дата и Beancount ще върне грешка, ако не съвпада) и балансиращи транзакции за закриване на книги. Той също така поддържа вноски за откриване/закриване на собствен капитал и запазва изчисляването на неразпределената печалба за закриване на периода. Те помагат да се гарантира, че книгите ви остават последователни и откриват грешки рано.
  • Мощна машина за заявки и отчитане: Beancount се предлага с език за заявки BQL (Beancount Query Language) и инструменти от командния ред като bean-balance, bean-register и bean-query за генериране на отчети. Можете да правите заявки към счетоводната книга за персонализирани отчети (напр. списък на разходите по платец, паричен поток за период) - по същество третиране на счетоводната книга като база данни. Той е бърз дори с хиляди транзакции и може да извежда в CSV или дори директно в Excel/LibreOffice (с опционални добавки).
  • Разширяемост чрез плъгини: Beancount е написан на Python и позволява персонализирани плъгини за разширяване на функционалността му. Плъгините могат да налагат допълнителни правила или изчисления, когато файлът се обработва. (Например, има плъгини за обработка на данъчни партиди или за гарантиране, че никоя покупка не липсва себестойност.) Системата за плъгини и Python API позволяват на напредналите потребители да програмират персонализирано поведение или да интегрират Beancount с други системи.
  • Импортери за външни данни: Ключова практическа функция е рамката ingest на Beancount за импортиране на данни (напр. от банкови извлечения). Можете да пишете или използвате плъгини за импортиране, които анализират CSV, OFX, PDF извлечения и т.н., и ги преобразуват в записи в Beancount. Това е от съществено значение за автоматизацията (повече за това по-късно).
  • Подлежащ на одит и благоприятен за контрол на версиите: Тъй като е обикновен текст, можете да запазите своята счетоводна книга в Git или друг контрол на версиите. Всяка промяна е прозрачна и имате пълна история на редакциите. Това прави одитите или прегледите на промените лесни (много потребители извършват промените за всеки ден в Git хранилище, предоставяйки доказателство за подправяне на всички финансови записи). Това ниво на прозрачност е основен диференциатор от затворения счетоводен софтуер - "няма SaaS заключване - просто чисто, прозрачно счетоводство с мощно отчитане."

Fava (Уеб интерфейс за Beancount)

  • Интерактивен уеб интерфейс: Fava предоставя локален уеб сървър, който визуализира вашата счетоводна книга на Beancount в богат потребителски интерфейс. Той показва основни отчети (Отчет за приходите, Баланс и т.н. ), регистри на сметки и дневници в браузъра с интерактивни контроли. Потребителският интерфейс е динамичен и удобен за потребителя в сравнение с командния ред. Започвате го с просто fava yourfile.beancount и получавате уеб приложение за вашите книги.
  • Вградени графики и диаграми: Fava генерира графики, за да помогне за визуализиране на вашите данни. Например, той включва линейна графика Нетна стойност във времето, стълбовидни диаграми за приходи спрямо разходи на месец и кръгови/дървовидни диаграми за разбивки на разходите. Тези визуализации се актуализират с вашите данни и поддържат различни изгледи (напр. "по себестойност" спрямо "пазарна стойност" за инвестиции). Ще проучим тези възможности за визуализация подробно по-късно.
  • Филтриране и търсене: В горната част на страниците на Fava, лентата за филтриране ви позволява да анализирате данните си в реално време. Можете да филтрирате по време (напр. година, тримесечие, месец), по регулярен израз на сметка, по платец, по описание или по тагове/връзки. Това улеснява извършването на проверка на данни в реално време - например, бързо филтрирайте до "Tag=Travel" и "Year=2025", за да видите всички разходи за пътуване през 2025 г. със суми. Интерфейсът поддържа сложни заявки чрез тази лента за филтриране или чрез страницата за заявки (където можете директно да изпълнявате BQL заявки).
  • Поддръжка на няколко файла и консолидиране: Fava може да зарежда няколко Beancount файла едновременно (полезно, ако разделяте счетоводните книги) и да превключва между тях. Той може също така да ги консолидира, ако е необходимо (например, лични и бизнес счетоводни книги, прегледани заедно).
  • Въвеждане и редактиране на данни: Уникалното е, че Fava не е само за четене - той има редактор и формуляр за въвеждане на транзакции. Можете да добавяте нови транзакции чрез уеб формуляр (той ще вмъкне записа във вашия .beancount файл). Можете също така да отворите изходния файл във външен редактор от Fava. Fava дори поддържа "Gmail-стил" клавишни комбинации (натиснете ? в потребителския интерфейс, за да ги видите) за опитни потребители. Това превръща Fava в лека счетоводна система, където можете да въвеждате и преглеждате данни от един и същ интерфейс.
  • Отчети и задълбочаване на сметки: Fava предоставя стандартни счетоводни отчети: Отчет за приходите (Печалба и загуба), Баланс, Оборотна ведомост и списък с холдинги за инвестиции. Балансът и Отчетът за приходите са интерактивни - можете да щракнете върху сметка, за да се задълбочите в нейните детайли, или да превключвате между преглед по себестойност спрямо пазарна стойност за активи. 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, можете просто да опресните Fava, за да видите новите данни.

  • Наблюдатели на файлове и тригери: Вместо графици, базирани на времето, можете да използвате наблюдатели на файлове, за да реагирате на събития. Например, ако вашата банка може да ви изпрати по имейл ежедневно извлечение или пуснете CSV в папка, скрипт може да открие този файл (използвайки inotify на Linux или подобен) и незабавно да стартира рутината за импортиране, след което да сигнализира на Fava да презареди. Въпреки че Fava все още не поддържа предаване на живо презареждане към браузъра, поне ще имате актуализирани данни, така че следващия път, когато проверите страницата или щракнете върху презареждане, тя е актуална. Някои проекти на общността отиват по-далеч: за ledger (братовчед на Beancount), един потребител създаде малък сървър, който излага ledger данни на Grafana в реално време, показвайки, че подобен подход може да бъде приет с Beancount - по същество да се изгради демон, който непрекъснато подава данни към вашите табла.

  • Директна API интеграция: Вместо да преминават през файлове, напредналите потребители могат да се свързват директно към банкови API (като Plaid или регионални Open Banking API), за да изтеглят транзакции често. Мотивиран човек може да програмира "живи" импортирания в цикъл (с подходящо ограничение на скоростта) - ефективно да анкетира банката за нови данни на всеки няколко минути. Нищо не ви спира да "се регистрирате с Plaid API и да направите същото [автоматизация] локално". Всяка нова транзакция може да бъде добавена към файла на Beancount, когато пристигне. С този подход Fava наистина се превръща в табло в реално време за вашите сметки, съперничейки на актуалната емисия в търговските приложения.

Опресняване на данни във Fava: След като вашите данни се актуализират, карането на Fava да го покаже е лесно: опресняване на браузъра (F5) или щракване върху банера за презареждане ще зареди най-новото състояние на счетоводната книга. Ако предпочитате дори да не щраквате, стартирането на Fava с --debug позволява автоматично презареждане за разработка на разширения, което някои са използвали, за да принудят незабавно презареждане на страницата при промени. Алтернативно, ако изграждате персонализиран интерфейс, можете да го накарате да анкетира малък API, който връща последния баланс или нещо подобно от счетоводната книга по график.

Незабавни изчисления: Бързото анализиране на Beancount означава, че дори ако актуализирате файла на счетоводната си книга на всеки няколко минути, времето за обработка от извличане на данни → актуализация на файла → презареждане на Fava е бързо. Например, един потребител отбелязва, че презареждането на Fava след редактиране на файла "едва се забелязва... определено по-малко от секунда" за счетоводни книги с разумен размер. По този начин можете да държите отворен прозорец на Fava и периодично да натискате опресняване, за да имитирате активно табло за управление. (За наистина активно изживяване, може да се изгради малък скрипт за автоматично опресняване на браузъра или да се използва функцията за опресняване на браузъра на всеки N секунди.)

Съгласуване и сигнали: За да се доверите на данните в реално време, вие също искате да съгласувате балансите често. Beancount улеснява това с потвърждения на баланса и индикатор за актуалност. Всъщност, Fava предлага цветни индикатори до сметките, ако ги маркирате с определени метаданни (напр. можете да маркирате сметка с метаданни fava-uptodate и Fava ще я оцвети в червено/жълто/зелено в зависимост от това дали последният запис е скорошна проверка на баланса). Това може да се използва за бързо да видите дали балансът на сметката в счетоводната книга съвпада с най-новото извлечение от банката. В настройка почти в реално време, можете да автоматизирате ежедневните проверки на баланса (така че всяка сутрин, счетоводната книга да има вчерашния краен баланс от банката за всяка сметка). Индикаторът на Fava след това ще ви каже дали вашият автоматичен импорт е пропуснал нещо или има несъответствие, осигурявайки увереност, че "активните" данни, които виждате, са точни.

Пример за автоматизация: Да предположим, че искате ежедневни актуализации на паричния поток. Можете да настроите cron задание да работи в 3 сутринта всяка вечер: то изпълнява Python скрипт, който използва API на вашата банка, за да извлече транзакциите от последния ден, записва ги в import_today.beancount и след това добавя този файл към вашата основна счетоводна книга. Той също така записва потвърждение на баланса за края на деня. Когато се събудите, отваряте Fava - той показва всички транзакции до вчера и виждате актуализираните приходи/разходи за текущия месец. Ако направите разход през деня, можете ръчно да го добавите (чрез формуляра за нова транзакция на Fava на телефона си, например), или да изчакате нощния импорт. Този хибриден подход (предимно автоматизиран, с възможност за ръчно добавяне на ad-hoc) дава картина, близка до реално време. Друг подход е да оставите отворена страницата Дневник на Fava и да я използвате като регистър: докато харчите, бързо записвате транзакцията (като въвеждане в чекова книжка) - тогава сте активната емисия. Това е по-ръчно, но някои потребители се радват на осъзнаването, което носи. За наистина поточни актуализации без ръчни стъпки, ще трябва да инвестирате в програмиране и евентуално да използвате API на трети страни, както беше обсъдено.

В обобщение, чрез комбиниране на автоматизацията на импортиране на Beancount с бързото опресняване на Fava, можете да получите финансови данни почти в реално време. Може да не е "лесно като натискане на бутон", за да постигнете същото ниво на активна емисия като услуга като QuickBooks (която автоматично изтегля банкови емисии), но е възможно - и важното е, че запазвате пълен контрол и прозрачност на процеса. Както отбеляза един защитник на счетоводството с обикновен текст, малко усилия отпред могат да доведат до автоматизирана система, която е "много по-добра от търговските решения и много по-гъвкава и разширяема". В следващия раздел ще видим как възможностите за визуализация на Fava ви позволяват незабавно да разберете тези актуални данни, превръщайки суровите транзакции в анализи.

Възможности за визуализация във Fava (Парични потоци, Тенденции, Проверка в реално време)

(GitHub - beancount/fava: Fava - уеб интерфейс за Beancount) Отчетът за приходите на Fava (в уеб интерфейса) поддържа богати визуализации като дървовидни карти (на снимката) и слънчеви диаграми за бърз поглед върху състава на приходите и разходите. В тази дървовидна карта всеки правоъгълник представлява категория разходи, оразмерена по своята сума - можете веднага да видите, че Наемът (голям зелен блок) доминира разходите. Горната лента за филтриране и контролите (в горния десен ъгъл) позволяват промяна на валутата, типа на диаграмата и периода от време (напр. преглед на месечни данни). Fava също така предоставя линейни графики (напр. нетна стойност във времето) и стълбовидни диаграми (напр. приходи спрямо разходи по месеци), за да помогне за откриване на тенденции във вашите финансови данни.

Една от най-големите силни страни на Fava е превръщането на данните от счетоводната книга във визуални, интерактивни отчети незабавно. Веднага щом счетоводната книга бъде заредена, Fava генерира диаграми, които улесняват разбирането на паричните потоци и тенденциите с един поглед:

  • Дървовидна карта/слънчева диаграма на приходи и разходи: На страницата на Отчета за приходите, Fava може да показва вашите приходи и разходи като дървовидна карта или слънчева диаграма. Те са чудесни за визуализация на паричния поток "с един поглед". Например, ако месечните ви разходи са показани като дървовидна карта, площта на всеки правоъгълник съответства на величината на всяка категория разходи. Големите блокове веднага показват къде са отишли повечето ви пари (напр. наем или ипотека, данъци и т.н. ), докато по-малките блокове показват незначителни разходи. Това е изключително полезно за откриване на тенденции в разходите - ако блокът "Вечеря навън" нараства всеки месец, ще го забележите визуално. Можете да превключите към слънчева диаграма, за да видите йерархични разбивки (напр. външният пръстен може да показва подкатегории като Хранителни стоки спрямо Ресторанти в категорията Храна). Тези диаграми се актуализират за който и да е период, който сте филтрирали (един месец, година до момента и т.н. ), като ви дават незабавна визуализация на паричния поток за този период. Потребител във форума за счетоводство с обикновен текст отбеляза: "Използвам много дървовидните карти на приходите и разходите. Те дават чудесно визуално усещане за нашите фискални движения." - този вид незабавно разбиране е точно това, към което се стремят диаграмите на Fava.

  • Нетна стойност и баланс във времето: Fava предоставя линейна графика за нетната стойност във времето (на страницата "Баланс" или "Статистика"). Тази графика изобразява сумата на вашите активи минус пасивите във всяка точка от времето (по ден, седмица или месец). Това е безценно за откриване на тенденции - можете да видите траекторията на вашите финанси (напр. стабилно нагоре или спадове в определени моменти). Ако имате инвестиции, можете да превключвате между показване на стойност по себестойност спрямо пазарна стойност (ако са записани ценови данни) - например, може да видите, че нетната ви стойност по пазарна стойност се колебае с цените на акциите, докато по себестойност е по-плавна. Fava също така може да показва балансите на сметките във времето. Ако щракнете върху сметка (да речем Assets:Bank:Checking), страницата на сметката показва графика на историята на баланса на тази сметка. Можете незабавно да проверите как се движи вашата парична сметка - което е ефективно графика на паричния поток (наклонът на линията на баланса показва нетния паричен поток). Ако има тенденция надолу, знаете, че харчите повече, отколкото печелите през този период. Като изследвате тези тенденции, може да забележите модели като "всеки декември спестяванията ми спадат (празнични разходи)" или "инвестициите ми нараснаха рязко през това тримесечие".

  • Стълбовидни диаграми за периодично сравнение: В изгледа Отчет за приходите, Fava има раздели за "Месечна печалба", "Месечни приходи", "Месечни разходи" и т.н. Избирането на тези показва стълбовидни диаграми по месеци. Например, Месечната нетна печалба ще покаже излишъка/дефицита на всеки месец като стълб, което улеснява сравняването на производителността между месеците. Можете бързо да идентифицирате отклонения (напр. голям отрицателен стълб през април означава, че този месец е имал необичайна загуба/разход). По същия начин, стълбовидната диаграма "Месечни разходи" подрежда или групира разходите по категории на месец, така че можете да видите кои категории се колебаят. Това е чудесно за откриване на тенденции във времето - напр. може да забележите, че разходите ви за "Пътуване" нарастват всеки летен сезон или сметките ви за "Комунални услуги" са по-високи през зимата. Fava по същество ви дава някои от възможностите на приложение за бюджетиране (проследяване на тенденциите), но с пълна възможност за персонализиране (тъй като вие дефинирате категориите и как се сумират).

  • Филтриране и проверка на данни в реално време: Визуализациите във Fava не са статични; те работят в тандем с филтрирането на Fava. Да предположим, че искате да проверите конкретен сценарий: "Как изглеждат тримесечните ми парични потоци само за моите бизнес сметки?" Можете да зададете филтъра за време на Q1 2025 и да филтрирате сметки към вашата бизнес йерархия - Fava незабавно ще актуализира диаграмите, за да покаже нетния доход, дървовидна карта на разходите и т.н., но само за този подмножество. Това интерактивно разчленяване означава, че можете да извършвате ad-hoc анализ много б