مقدمه
Beancount یک سیستم حسابداری دوطرفه متنباز است که از فایلهای متنی ساده (plain text) به عنوان دفتر کل استفاده میکند. این سیستم بر سادگی، شفافیت و انعطافپذیری در ردیابی امور مالی تأکید دارد. 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 پشتیبانی درجهیکی از ارزهای مختلف و کالاها (مانند سهام و کریپتو) دارد. شما میتوانید تراکنشها را با ارزهای مختلف ثبت کنید، نرخهای ارز (Price directives) را تعریف کنید و بهای تمام شده را رهگیری نمایید. این سیستم میتواند گزارشها را بر اساس «بهای تمام شده» یا «ارزش بازار» (در صورت وجود دادههای قیمتی) ارائه دهد که آن را برای سبدهای سرمایهگذاری و امور مالی بینالمللی ایدهآل میکند.
- بررسیها و کنترلهای خودکار: این سیستم از تاییدیه تراز (balance assertions) پشتیبانی میکند (شما میتوانید اعلام کنید که مانده یک حساب در یک تاریخ خاص چقدر باید باشد و اگر مطابقت نداشته باشد، Beancount خطا میدهد) و همچنین از تراکنشهای ترازکننده برای بستن دفاتر حمایت میکند. علاوه بر این، از ثبتهای افتتاحیه/اختتامیه حقوق صاحبان سهام و محاسبه سود انباشته برای بستن دوره مالی پشتیبانی میکند. این ویژگیها کمک میکنند تا دفاتر شما منسجم باقی بمانند و خطاها در مراحل اولیه شناسایی شوند.
- موتور پرسوجو و گزارشگیری قدرتمند: Beancount دارای یک زبان پرسوجو به نام BQL (Beancount Query Language) و ابزارهای خط فرمان مانند
bean-balance،bean-registerوbean-queryبرای تولید گزارش است. شما میتوانید برای دریافت گزارشهای سفارشی (مانند لیست هزینهها بر اساس ذینفع، یا جریان نقدی یک دوره خاص) از دفتر کل پرسوجو کنید – در واقع با دفتر کل مانند یک پایگاه داده رفتار میکنید. این سیستم حتی با هزاران تراکنش نیز سریع عمل میکند و میتواند خروجی CSV یا حتی مستقیم به Excel/LibreOffice (با افزونههای اختیاری) ارائه دهد. - قابلیت گسترش از طریق افزونهها: Beancount با زبان پایتون نوشته شده است و اجازه میدهد با استفاده از افزونههای (plugins) سفارشی، عملکردهای آن را گسترش دهید. افزونهها میتوانند قوانین یا محاسبات اضافی را هنگام پردازش فایل اعمال کنند. (برای مثال، افزونههایی برای مدیریت دستههای مالیاتی یا اطمینان از اینکه هیچ خریدی بدون قیمت ثبت نشده باشد وجود دارد.) سیستم افزونهها و API پایتون به کاربران حرفهای اجازه میدهد رفتارهای سفارشی را برنامهنویسی کرده یا Beancount را با سیستمهای دیگر ادغام کنند.
- واردکنندهها برای دادههای خارجی: یک ویژگی کاربردی کلیدی، چارچوب ingest در Beancount برای وارد کردن دادهها (مثلاً از صورتحسابهای بانکی) است. شما میتوانید افزونههای واردکنندهای بنویسید یا از موارد موجود استفاده کنید که فایلهای CSV، OFX، صورتحسابهای PDF و غیره را تجزیه کرده و آنها را به ورودیهای Beancount تبدیل میکنند. این موضوع برای اتوماسیون حیاتی است.
- قابل حسابرسی و سازگار با کنترل نسخه: از آنجا که دادهها به صورت متن ساده هستند، میتوانید دفتر کل خود را در Git یا سایر سیستمهای کنترل نسخه نگه دارید. هر تغییری شفاف است و تاریخچه کامل ویرایشها را در اختیار دارید. این امر حسابرسی یا بررسی تغییرات را بسیار ساده میکند (بسیاری از کاربران تغییرات هر روز را در یک مخزن Git ثبت میکنند که یک گزارش غیرقابل دستکاری از تمام ورودیهای مالی فراهم میکند). این سطح از شفافیت تفاوت بزرگی با نرمافزارهای حسابداری بسته ایجاد میکند – "بدون وابستگی به SaaS؛ فقط حسابداری پاک و شفاف با گزارشگیری قدرتمند."
Fava (رابط تحت وب برای Beancount)
- رابط کاربری وب تعاملی: Fava یک سرور وب محلی فراهم میکند که دفتر کل Beancount شما را به یک رابط کاربری غنی تبدیل میکند. این ابزار گزارشهای اصلی (صورت سود و زیان، ترازنامه و غیره)، ریز حسابها و دفتر روزنامه را با کنترلهای تعاملی در مرورگر نمایش میدهد. در مقایسه با خط فرمان، این رابط کاربری پویا و کاربرپسند است. شما آن را با یک دستور ساده
fava yourfile.beancountاجرا میکنید و یک اپلیکیشن وب برای دفاتر مالی خود خواهید داشت. - گرافها و نمودارهای داخلی: Fava نمودارهایی را برای کمک به تصویرسازی دادههای شما تولید میکند. به عنوان مثال، شامل نمودار خطی ارزش خالص (Net Worth) در طول زمان، نمودارهای میلهای برای مقایسه درآمد در برابر هزینهها در هر ماه، و نمودارهای دایرهای/درختی برای تفکیک هزینهها است. این تصاویر با دادههای شما بهروز میشوند و از نماهای مختلف (مانند «بهای تمام شده» در مقابل «ارزش بازار» برای سرمایهگذاریها) پشتیبانی میکنند.
- فیلتر کردن و جستجو: در بالای صفحات Fava، یک نوار فیلتر به شما اجازه میدهد دادههای خود را به صورت بلادرنگ کالبدشکافی کنید. شما میتوانید بر اساس زمان (سال، فصل، ماه)، عبارات باقاعده (regex) حسابها، ذینفع، شرح تراکنش، یا برچسبها/لینکها فیلتر انجام دهید. این کار بازرسی بلادرنگ دادهها را آسان میکند – مثلاً به سرعت با فیلتر کردن "Tag=Travel" و "Year=2025" تمام هزینههای سفر در سال ۲۰۲۵ را با مجموع مبالغ مشاهده کنید. این رابط از طریق نوار فیلتر یا صفحه Query (جایی که میتوانید مستقیماً دستورات BQL را اجرا کنید) از پرسوجوهای پیچیده پشتیبانی میکند.
- پشتیبانی از چندین فایل و تجمیع: Fava میتواند چندین فایل Beancount را به طور همزمان بارگذاری کند (مفید برای زمانی که دفاتر جداگانه دارید) و بین آنها جابهجا شود. همچنین در صورت نیاز میتواند آنها را تجمیع کند (مثلاً مشاهده همزمان دفاتر شخصی و تجاری).
- ورود و ویرایش دادهها: به شکلی منحصربهفرد، Fava فقط خواندنی نیست؛ بلکه دارای یک ویرایشگر و فرم ورود تراکنش است. شما میتوانید تراکنشهای جدید را از طریق یک فرم وب اضافه کنید (که ورودی را در فایل
.beancountشما درج میکند). همچنین میتوانید فایل منبع را در یک ویرایشگر خارجی از داخل Fava باز کنید. Fava حتی برای کاربران حرفهای از میانبرهای کیبورد "به سبک Gmail" پشتیبانی میکند (با زدن کلید?در رابط کاربری میتوانید آنها را ببینید). این قابلیت Fava را به یک سیستم حسابداری سبک تبدیل میکند که در آن میتوانید دادهها را از همان رابط کاربری وارد و مشاهده کنید. - گزارشها و جزئیات حسابها: Fava گزارشهای استاندارد حسابداری را ارائه میدهد: صورت سود و زیان (P&L)، ترازنامه، تراز آزمایشی و لیستی از داراییها برای سرمایهگذاریها. ترازنامه و صورت سود و زیان تعاملی هستند؛ میتوانید روی یک حساب کلیک کنید تا وارد جزئیات آن شوید، یا بین نمای بهای تمام شده و ارزش بازار برای داراییها جابهجا شوید. Fava همچنین در صورت داشتن دادههای قیمتی، "سود تحققنیافته" سرمایهگذاریها را نشان میدهد. این ابزار نمای دفتر روزنامه از تمام ورودیها را تولید کرده و اجازه میدهد آن را بر اساس معیارهای مختلف فیلتر کنید (بسیار عالی برای پیدا کردن تراکنشهای خاص).
- مدیریت اسناد: اگر رسیدها یا صورتحسابها را ضمیمه کنید، Fava به سازماندهی آنها کمک میکند. Beancount مفهومی به نام پوشه اسناد دارد و Fava به شما اجازه میدهد فایلها را روی حسابها یا تراکنشها بکشید و رها کنید (Drag-and-drop) – سیستم آنها را ذخیره کرده و یک ورودی سند در دفتر کل شما اضافه میکند. این ویژگی برای پیوند دادن اسناد پشتیبان با دادههای دفتر کل بسیار کاربردی است.
- سفارشیسازی از طریق اکستنشنها: Fava را میتوان با افزونههایی (نوشته شده به زبان پایتون) برای افزودن گزارشها یا عملکردهای جدید گسترش داد. برخی اکستنشنها به صورت پیشفرض همراه برنامه هستند (مانند گزارش لیست سبد سهام). طراحی Fava اجازه میدهد صفحات جدید و حتی جاوااسکریپت سفارشی را از طریق API اکستنشن خود تزریق کنید. این یعنی اگر تحلیل یا داشبورد خاصی به صورت داخلی وجود نداشته باشد، یک کاربر پیشرفته میتواند آن را اضافه کند.
- عملکرد: Fava کارآمد است؛ دادهها را در حافظه بارگذاری کرده و صفحات را به سرعت نمایش میدهد. تجزیه و تحلیل زیرساختی Beancount بسیار سریع است (در نسخههای جدید با C++ بهینه شده است)، بنابراین حتی دفتر کلهای بزرگ در یک یا دو ثانیه بارگذاری میشوند. در عمل، Fava میتواند دفتر کلهای شخصی چندین ساله را مدیریت کند، هرچند فایلهای بسیار بزرگ (دهها هزار تراکنش) ممکن است از برخی بهینهسازیها (مانند بایگانی کردن ورودیهای قدیمی) بهرهمند شوند.
- دسترسی تحت وب و قابلیت جابهجایی: با اجرای Fava روی یک سرور یا حتی لپتاپ خود، میتوانید از هر مرورگری به امور مالی خود دسترسی داشته باشید. برخی کاربران Fava را روی یک سرور خصوصی یا Raspberry Pi میزبانی میکنند تا بتوانند در حال حرکت امور مالی خود را چک کنند (احتمالاً با ایمنسازی پشت یک رمز عبور یا VPN، زیرا Fava سیستم احراز هویت داخلی ندارد). این کار در واقع به شما یک "اپلیکیشن وب" میزبانی شده توسط خودتان برای امور مالیتان میدهد، بدون اینکه دادههایتان را در اختیار شخص ثالث قرار دهید.
به طور خلاصه، Beancount زیربنای محکمی برای حسابداری شفاف و متنمحور با قوانین دقیق دوطرفه و پشتیبانی از چندین ارز فراهم میکند. Fava با ارائه یک رابط کاربری قابل دسترس همراه با بینشهای فوری (گزارشها، نمودارها) و توانایی تعامل با دادهها، بر روی این پایه بنا شده است. این دو در کنار هم یک سیستم حسابداری و تحلیلی بسیار منعطف را تشکیل میدهند که شما کنترل کامل آن را از ابتدا تا انتها در دست دارید.
تحلیل و آنالیز آنی (یا نزدیک به آنی) با Beancount و Fava
دستیابی به تحلیل و آنالیز آنی یا نزدیک به آنی با Beancount و Fava مستلزم خودکارسازی جریان دادهها به دفتر کل و اطمینان از نمایش اطلاعات بهروز توسط ابزارهاست. بهطور پیشفرض، Beancount یک فرآیند دستهای (batch) است (شما ورودیها را به فایل اضافه میکنید و سپس گزارشها را مشاهده میکنید) و Fava تغییرات را شناسایی کرده و نیاز به بازخوانی (refresh) دارد. با این حال، با تنظیمات صحیح، میتوانید بهروزرسانیها را سادهسازی کنید تا تراکنشها و تغییرات جدید تقریباً بلافاصله ظاهر شوند.
تشخیص تغییرات فایل: Fava فایل دفتر کل را برای تغییرات زیر نظر میگیرد. اگر فایل .beancount (یا فایلهای ضمیمه) را در یک ویرایشگر تغییر دهید، Fava بنر «تغییرات شناسایی شد - برای بارگذاری مجدد کلیک کنید» را نشان میدهد. با کلیک کردن (یا فشردن دکمه بازخوانی)، دادهها را مجدداً بارگذاری کرده و نما را بهروز میکند. در عمل، این بارگذاری مجدد بسیار سریع است (معمولاً برای دفترهای کل معمولی کمتر از یک ثانیه زمان میبرد). این بدان معناست که اگر فایل دفتر کل شما بهطور مکرر بهروز شود، Fava میتواند به عنوان یک داشبورد زنده عمل کند. (در حالت دیباگ، Fava حتی میتواند با تغییرات فایل بهطور خودکار بازخوانی شود، اگرچه بهطور پیشفرض برای جلوگیری از اختلال در مشاهده شما، منتظر تأیید کاربر میماند.)
خط لوله واردات/بهروزرسانی مداوم: برای دریافت دادههای آنی، باید اضافه شدن تراکنشها به فایل Beancount را خودکار کنید. چند استراتژی رایج وجود دارد:
-
وظایف واردات زمانبندیشده (Cron): بسیاری از کاربران یک کرونجاب (یا وظیفه زمانبندیشده) تنظیم میکنند تا تراکنشهای جدید را بهطور دورهای (مثلاً هر شب یا هر ساعت) از مؤسسات مالی دریافت کرده و به دفتر کل اضافه کند. به عنوان مثال، میتوانید از افزونههای واردکننده (importer plugins) Beancount برای دریافت آخرین تراکنشهای بانکی از طریق API یا دانلود OFX استفاده کنید. یکی از کاربران Beancount یک خط لوله خودکارسازی ساخته است که دفتر حسابداریاش خودش را بهروز میکند: «دیدن اینکه دفتر حسابداریام بدون دخالت من و در یک قالب باز بهروز میشود، برایم لذت محض است». این کار با اتصال به APIهای بانکی و زمانبندی بهروزرسانیهای منظم انجام شده است. ابزارهایی مانند
bean-fetch(برای OFX) یا اسکریپتهای پایتون سفارشی با استفاده از APIهای بانکی (مانند Plaid) میتوانند طبق برنامه اجرا شده و ورودیهای جدید را در دفتر کل بنویسند. پس از هر واردات زمانبندیشده، اگر Fava در حال اجرا باشد، میتوانید به سادگی Fava را بازخوانی کنید تا دادههای جدید را ببینید. -
شنودگرهای فایل و تریگرها (File Watchers): به جای برنامههای زمانی، میتوانید از شنودگرهای فایل برای واکنش به رویدادها استفاده کنید. برای مثال، اگر بانک شما میتواند صورتحساب روزانه را برایتان ایمیل کند یا شما یک فایل CSV را در پوشهای قرار میدهید، یک اسکریپت میتواند آن فایل را شناسایی کرده (با استفاده از
inotifyدر لینوکس یا موارد مشابه) و بلافاصله روتین واردات را اجرا کند و سپس به Fava سیگنال دهد که بازخوانی شود. در حالی که Fava هنوز از ارسال بازخوانی زنده به مرورگر پشتیبانی نمیکند، حداقل دادههای شما بهروز خواهد بود تا دفعه بعد که صفحه را چک میکنید یا روی بازخوانی کلیک میکنید، اطلاعات جاری باشد. برخی از پروژههای جامعه فراتر میروند: برای ledger (پسرعموی Beancount)، یک کاربر سرور کوچکی ساخته است که دادههای ledger را بهصورت آنی در Grafana نمایش میدهد، که نشان میدهد رویکرد مشابهی را میتوان با Beancount نیز اتخاذ کرد – در واقع ساختن یک دیمون (daemon) که دادهها را بهطور مداوم به داشبوردهای شما تغذیه میکند. -
ادغام مستقیم API: به جای عبور از فایلها، کاربران پیشرفته ممکن است مستقیماً به APIهای بانکی (مانند Plaid یا APIهای بانکداری باز منطقهای) متصل شوند تا تراکنشها را بهطور مکرر دریافت کنند. یک فرد با انگیزه میتواند واردات «زنده» را در یک حلقه (با محدودیت نرخ مناسب) اسکریپتنویسی کند – و در واقع هر چند دقیقه یک بار وضعیت بانک را برای دادههای جدید بررسی کند. هیچچیز مانع شما برای «ثبتنام در Plaid API و انجام همان [خودکارسازی] بهصورت محلی» نیست. هر تراکنش جدید میتواند به محض رسیدن به فایل Beancount اضافه شود. با این رویکرد، Fava واقعاً به یک داشبورد آنی برای حسابهای شما تبدیل میشود که با فیدهای بهروز در اپلیکیشنهای تجاری رقابت میکند.
بازخوانی دادهها در Fava: هنگامی که دادههای شما در حال بهروزرسانی هستند، نمایش آنها در Fava ساده است: یک بازخوانی مرورگر (F5) یا کلیک بر روی بنر بازخوانی، آخرین وضعیت دفتر کل را بارگذاری میکند. اگر ترجیح میدهید حتی کلیک هم نکنید، اجرای Fava با سوئیچ --debug قابلیت بازخوانی خودکار را برای توسعه افزونه فعال میکند که برخی از آن برای اجبار به بازخوانی فوری صفحه هنگام تغییرات استفاده کردهاند. متناوباً، اگر در حال ساخت یک فرانتاند سفارشی هستید، میتوانید آن را طوری تنظیم کنید که یک API کوچک را فراخوانی کند که آخرین موجودی یا موارد مشابه را از دفتر کل طبق برنامه برمیگرداند.
محاسبات فوری: تجزیه و تحلیل سریع Beancount به این معنی است که حتی اگر فایل دفتر کل خود را هر چند دقیقه یک بار بهروز کنید، چرخه دریافت داده ← بهروزرسانی فایل ← بازخوانی Fava بسیار سریع است. به عنوان مثال، یک کاربر خاطرنشان میکند که بازخوانی Fava پس از ویرایش فایل «بهسختی قابل تشخیص است... قطعاً کمتر از یک ثانیه» برای دفترهای کل با اندازه معقول. بنابراین، میتوانید یک پنجره Fava را باز نگه دارید و بهطور دورهای دکمه بازخوانی را بزنید تا یک داشبورد زنده را شبیهسازی کنید. (برای یک تجربه واقعاً زنده، میتوان اسکریپت کوچکی برای بازخوانی خودکار مرورگر نوشت یا از ویژگی بازخوانی خودکار مرورگر در هر N ثانیه استفاده کرد.)
مغایرتگیری و هشدارها: برای اعتماد به دادههای آنی، باید موجودیها را نیز بهطور مکرر مغایرتگیری کنید. Beancount این کار را با تأییدیههای موجودی (balance assertions) و یک «نشانگر بهروز بودن» آسان میکند. در واقع، Fava نشانگرهای رنگی در کنار حسابها ارائه میدهد اگر آنها را با متادیتای خاصی علامتگذاری کنید (مثلاً میتوانید یک حساب را با متادیتای fava-uptodate علامتگذاری کنید و Fava بر اساس اینکه آخرین ورودی یک بررسی موجودی اخیر است یا خیر، آن را به رنگ قرمز/زرد/سبز در میآورد). این میتواند برای دیدن سریع اینکه آیا موجودی یک حساب در دفتر کل با آخرین صورتحساب بانک مطابقت دارد یا خیر، استفاده شود. در یک تنظیمات نزدیک به آنی، ممکن است بررسیهای موجودی روزانه را خودکار کنید (به طوری که هر صبح، دفتر کل دارای موجودی بسته شده دیروز بانک برای هر حساب باشد). نشانگر Fava سپس به شما میگوید که آیا واردات خودکار شما چیزی را از قلم انداخته است یا اختلافی وجود دارد، که باعث ایجاد اطمینان از دقیق بودن دادههای «زندهای» که میبینید میشود.
مثال خودکارسازی: فرض کنید بهروزرسانیهای روزانه جریان وجوه نقد را میخواهید. میتوانید یک کرونجاب تنظیم کنید تا هر شب ساعت ۳ بامداد اجرا شود: این کار یک اسکریپت پایتون را اجرا میکند که از API بانک شما برای دریافت تراکنشهای روز گذشته استفاده میکند، آنها را در import_today.beancount مینویسد و سپس آن فایل را به دفتر کل اصلی شما ضمیمه میکند. همچنین یک تأییدیه موجودی برای پایان روز مینویسد. وقتی بیدار میشوید، Fava را باز میکنید – تمام تراکنشها تا دیروز را نشان میدهد و میبینید که درآمد/هزینه ماه جاری بهروز شده است. اگر در طول روز هزینهای انجام دادید، میتوانید آن را بهصورت دستی اضافه کنید (مثلاً از طریق فرم تراکنش جدید Fava در گوشی خود) یا منتظر واردات شبانه بمانید. این رویکرد ترکیبی (بیشتر خودکار، با قابلیت اضافه کردن دستی موارد خاص) تصویری نزدیک به واقعیت ارائه میدهد. رویکرد دیگر این است که صفحه Journal در Fava را باز بگذارید و از آن به عنوان دفتر روزنامه استفاده کنید: همانطور که خرج میکنید، سریعاً تراکنش را ثبت میکنید (مانند وارد کردن در دسته چک) – در این صورت خود شما فید آنی هستید. این روش دستیتر است، اما برخی کاربران از آگاهیبخشی آن لذت میبرند. برای بهروزرسانیهای واقعاً جریانی بدون مراحل دستی، باید روی اسکریپتنویسی سرمایهگذاری کنید و احتمالاً از APIهای شخص ثالث همانطور که بحث شد استفاده کنید.
بهطور خلاصه، با ترکیب خودکارسازی واردات Beancount با بازخوانی سریع Fava، میتوانید به دادههای مالی نزدیک به آنی دست یابید. ممکن است دستیابی به همان سطح از فید زنده مانند سرویسی مثل QuickBooks (که بهطور خودکار فیدهای بانکی را میکشد) «به سادگی فشردن یک دکمه» نباشد، اما امکانپذیر است – و مهمتر از آن، شما کنترل کامل و شفافیت فرآیند را حفظ میکنید. همانطور که یکی از طرفداران حسابداری متنساده اشاره کرده است، کمی تلاش اولیه میتواند سیستمی خودکار ایجاد کند که «بسیار بهتر از راهحلهای تجاری و به مراتب منعطفتر و توسعهپذیرتر» است. در بخش بعدی، خواهیم دید که چگونه قابلیتهای بصریسازی Fava به شما اجازه میدهد بلافاصله از این دادههای بهروز استفاده کنید و تراکنشهای خام را به بینشهای مالی تبدیل کنید.
قابلیتهای بصریسازی در فاوا (جریانهای نقدی، روندها، بازرسی لحظهای)
(GitHub - beancount/fava: Fava - web interface for Beancount) گزارش صورت سود و زیان فاوا (در رابط کاربری وب) از بصریسازیهای غنی مانند نقشههای درختی (در تصویر) و نمودارهای خورشیدی برای درک سریع ترکیب درآمد و هزینهها پشتیبانی میکند. در این نقشه درختی، هر مستطیل نشاندهنده یک دستهبندی هزینه است که اندازه آن بر اساس مبلغ تعیین شده است – شما میتوانید بلافاصله ببینید که اجاره (بلاک سبز بزرگ) بخش عمده هزینهها را تشکیل میدهد. نوار فیلتر بالایی و کنترلها (بالا سمت راست) امکان تغییر ارز، نوع نمودار و بازه زمانی (به عنوان مثال مشاهده دادههای ماهانه) را فراهم میکنند. فاوا همچنین نمودارهای خطی (مانند ارزش خالص در طول زمان) و نمودارهای میلهای (مانند درآمد در مقابل هزینهها به تفکیک ماه) را برای کمک به شناسایی روندها در دادههای مالی شما ارائه میدهد.
یکی از بزرگترین نقاط قوت فاوا، تبدیل آنی دادههای دفتر کل به گزارشهای بصری و تعاملی است. به محض بارگذاری دفتر کل، فاوا نمودارهایی تولید میکند که درک جریانهای نقدی و روندها را در یک نگاه آسان میسازد:
-
نقشه درختی/خورشیدی درآمد و هزینهها: در صفحه صورت سود و زیان (Income Statement)، فاوا میتواند درآمد و هزینههای شما را به صورت نمودار نقشه درختی (Treemap) یا خورشیدی (Sunburst) نمایش دهد. اینها برای بصریسازی جریان نقدی "در یک نگاه" عالی هستند. به عنوان مثال، اگر هزینههای ماهانه شما به صورت یک نقشه درختی نشان داده شود، مساحت هر مستطیل با مقدار آن دسته از هزینهها مطابقت دارد. بلاکهای بزرگ فوراً نشان میدهند که بخش عمده پول شما کجا خرج شده است (مثلاً اجاره یا وام، مالیات و غیره)، در حالی که بلاکهای کوچکتر هزینههای جزئی را نشان میدهند. این قابلیت برای شناسایی روندها در مخارج بسیار مفید است – اگر بلاک "غذای بیرون" هر ماه بزرگتر شده باشد، شما آن را به صورت بصری متوجه خواهید شد. میتوانید به نمودار خورشیدی سوئیچ کنید تا سلسلهمراتب هزینهها را ببینید (مثلاً حلقه بیرونی ممکن است زیرمجموعههایی مانند خواربار در مقابل رستوران را در دسته مواد غذایی نشان دهد). این نمودارها برای هر دورهای که فیلتر کردهاید (یک ماه، سال تا به امروز و غیره) بهروزرسانی میشوند و بصریسازی آنی جریان نقدی را برای آن دوره فراهم میکنند. یکی از کاربران انجمن حسابداری متنمحور خاطرنشان کرده است: «من استفاده زیادی از نقشههای درختی درآمد و هزینه میکنم. آنها حس بصری فوقالعادهای از جابجاییهای مالی ما میدهند.» – این نوع درک فوری دقیقاً همان چیزی است که نمودارهای فاوا هدف قرار دادهاند.
-
ارزش خالص و مانده حساب در طول زمان: فاوا یک نمودار خطی برای ارزش خالص (Net Worth) در طول زمان (در صفحه "ترازنامه" یا "آمار") ارائه میدهد. این نمودار مجموع داراییهای شما منهای بدهیها را در هر نقطه از زمان (به صورت روزانه، هفتگی یا ماهانه) ترسیم میکند. این ابزار برای شناسایی روندها بینظیر است – میتوانید مسیر حرکت امور مالی خود را ببینید (مثلاً صعود پایدار، یا افت در زمانهای خاص). اگر سرمایهگذاری دارید، میتوانید بین نمایش ارزش بر اساس قیمت تمامشده در مقابل قیمت بازار (در صورت ثبت دادههای قیمت) جابجا شوید – به عنوان مثال، ممکن است ببینید ارزش خالص شما با قیمت بازار با نوسانات بورس تغییر میکند، در حالی که با قیمت تمامشده منحنی نرمتری دارد. فاوا همچنین میتواند مانده حسابها را در طول زمان نمایش دهد. اگر روی یک حساب کلیک کنید (مثلاً Assets:Bank:Checking)، صفحه حساب نموداری از تاریخچه مانده آن حساب را نشان میدهد. شما میتوانید فوراً بررسی کنید که حساب نقدی شما چگونه تغییر میکند – که در واقع یک نمودار جریان نقدی است (شیب خط مانده، نشاندهنده جریان نقدی خالص است). اگر روند نزولی دارد، متوجه میشوید که در آن دوره بیش از درآمدتان خرج کردهاید. با بررسی این روندها، ممکن است الگوهایی مانند «هر آذرماه پسانداز من کم میشود (هزینههای یلدا یا تعطیلات)» یا «سرمایهگذاریهای من در این فصل رشد شدیدی داشته است» را شناسایی کنید.
-
نمودارهای میلهای برای مقایسه دورهای: در نمای صورت سود و زیان، فاوا تبهایی برای "سود ماهانه"، "درآمد ماهانه"، "هزینههای ماهانه" و غیره دارد. انتخاب این گزینهها نمودارهای میلهای را به تفکیک ماه نشان میدهد. برای مثال، سود خالص ماهانه مازاد یا کسری هر ماه را به صورت یک میله نشان میدهد و مقایسه عملکرد در ماههای مختلف را آسان میکند. میتوانید به سرعت موارد پرت را شناسایی کنید (مثلاً یک میله منفی بزرگ در فروردین به معنای آن است که آن ماه ضرر یا هزینه غیرمعمولی داشته است). به همین ترتیب، نمودار میلهای "هزینههای ماهانه" هزینهها را بر اساس دستهبندی در هر ماه دستهبندی یا گروه میبندی میکند تا بتوانید ببینید کدام دستهها نوسان دارند. این برای شناسایی روندها در طول زمان عالی است – مثلاً ممکن است متوجه شوید هزینههای "سفر" شما هر تابستان اوج میگیرد، یا قبضهای "آب و برق" در زمستان بیشتر است. فاوا اساساً برخی از قابلیتهای یک اپلیکیشن بودجهبندی (رهگیری روندها) را با قابلیت سفارشیسازی کامل (چون خودتان دستهها را تعریف میکنید) در اختیارتان قرار میدهد.
-
فیلتر کردن لحظهای و بازرسی دادهها: بصریسازیها در فاوا ایستا نیستند؛ آنها در تعامل با سیستم فیلتر فاوا عمل میکنند. فرض کنید میخواهید یک سناریوی خاص را بررسی کنید: «جریانهای نقدی فصلی من فقط برای حسابهای تجاریام چگونه است؟» میتوانید فیلتر زمان را روی Q1 2025 تنظیم کنید و حسابها را به سلسلهمراتب تجاری خود (Business) محدود کنید – فاوا فوراً نمودارها را برای نشان دادن درآمد خالص، نقشه درختی هزینهها و غیره، اما فقط برای آن زیرمجموعه، بهروزرسانی میکند. این برش و تحلیل تعاملی به این معنی است که میتوانید تحلیلهای موردی (ad-hoc) را بسیار سریع و بدون نوشتن پرسوجو (Query) انجام دهید. نمای دفتر روزنامه (Journal) نیز از فیلتر زنده پشتیبانی میکند: میتوانید بر اساس نام طرف حساب یا بخشی از شرح تراکنش جستجو کنید و لیست فیلتر شده تراکنشها را بلافاصله ببینید. اگر به دادههای لحظهای نگاه میکنید (مثلاً تراکنشهای هفته گذشته را همین الان وارد کردهاید)، میتوانید با تگی مانند
#uncategorizedفیلتر کنید تا تراکنشهای جدیدی که نیاز به دستهبندی دارند را ببینید، یا با@pending(اگر ورودیهای معلق را علامتگذاری میکنید) ببینید چه مواردی هنوز تسویه نشدهاند. این قابلیت بازرسی لحظهای به اطمینان از کیفیت دادهها نیز کمک میکند – زیرا میتوانید ناهنجاریها را در لحظه شناسایی و رفع کنید. -
صورت جریان وجوه نقد (غیرمستقیم): اگرچه Beancount/Fava به صورت پیشفرض صورت جریان وجوه نقد رسمی (تفکیک عملیاتی/سرمایهگذاری/تأمین مالی) تولید نمیکند، اما میتوانید با پرسوجوهای سفارشی یا ساختاربندی حسابها آن را شبیهسازی کنید. برای مثال، میتوانید تراکنشهای خاصی را تگ کنید یا از حسابهای مشخصی برای سرمایهگذاری و تأمین مالی استفاده کنید و سپس مجموع آنها را گزارش بگیرید. رابط پرسوجوی فاوا به شما اجازه میدهد یک کوئری BQL مانند این اجرا کنید:
SELECT sum(amount) WHERE account ~ "Assets:Bank" AND year = 2025تا جریان نقدی سال را به دست آورید. با این حال، اکثر کاربران شخصی ترکیب روندهای مانده حساب و نمودارهای درآمد/هزینه را برای درک جریانهای نقدی کافی میدانند. -
بصریسازی داراییها و پورتفولیو: در صفحه Holdings، فاوا لیست داراییهای فعلی شما از کالاها و ارزها (مانند سهام، اوراق قرضه، رمزارز) را با مقادیر، بهای تمامشده، ارزش بازار و سودهای تحققنیافته نشان میدهد. اگرچه این یک جدول است و نه یک نمودار، اما برای بازرسی لحظهای وضعیت پورتفولیو بسیار مفید است. برخی افزونهها (مانند fava-investor) بصریسازیهای بیشتری برای پورتفولیوها اضافه میکنند، مانند نمودارهای دایرهای تخصیص دارایی یا نمودارهای عملکرد. حتی بدون افزونه، میتوانید ببینید که مثلاً ارزش پورتفولیو سهام شما با آخرین قیمتها چگونه تغییر میکند – اگر قیمتها را به طور منظم بهروزرسانی کنید (که میتواند روزانه خودکار شود)، نمودارهای فاوا ارزش بازار لحظهای سرمایهگذاریهای شما را منعکس میکنند.
در عمل، گزارشهای بصری فاوا به همان سرعتی که دادههای زیرساختی تغییر میکنند، بهروز میشوند. به محض اضافه شدن یک تراکنش جدید و بارگذاری مجدد صفحه، نمودارها دوباره محاسبه میشوند. نیازی به پردازش طولانی نیست. این بدان معناست که اگر یک خط لوله نیمهخودکار دارید که دادهها را در طول روز تغذیه میکند، میتوانید فاوا را باز نگه دارید و به طور دورهای دکمه رفرش را بزنید تا نمودارهای بهروز شده را دریافت کنید – که در واقع یک نظارت مالی لحظهای است.
به عنوان مثال، تصور کنید یک کسبورفت کوچک را اداره میکنید و میخواهید نقدینگی موجود و هزینههای روزانه را نظارت کنید. میتوانید فاوا را روی یک داشبورد سفارشی باز کنید (شاید با استفاده از یک افزونه یا صفحه پرسوجو) که "مانده حساب نقدی امروز" و "هزینهها – امروز در مقابل دیروز" را نشان دهد. هر بار که پس از ورود دادههای جدید رفرش میکنید، شاهد بهروزرسانی آن اعداد خواهید بود. این مشابه همان چیزی است که داشبوردهای گرانقیمت لحظهای ارائه میدهند، اما با استفاده از ابزارهای متنباز. تفاوت در این است که شما ممکن است نیاز داشته باشید به صورت دستی رفرش کنید یا رفرشهای زمانبندی شده تنظیم کنید، در حالی که آن ابزارها بهروزرسانیها را به صورت خودکار ارسال میکنند. اما از نظر عملکردی، بینشی که به دست میآورید یکسان است، با این مزیت اضافه که میتوانید روی هر عددی در فاوا کلیک کنید تا تراکنشهای زیرمجموعه آن را ببینید – چیزی که بسیاری از داشبوردهای BI فاقد آن هستند.
به طور خلاصه، فاوا دادههای حسابداری شما را به بینشهای بصری فوری تبدیل میکند: تفکیک جریانهای نقدی، خطوط روند، مقایسههای دورهای و فیلتر کردن تعاملی همگی به شما کمک میکنند تا داستان پشت اعداد را ببینید. چه در حال بازرسی مخارج هفته گذشته برای یافتن ناهنجاریها باشید و چه در حال بررسی روندهای چندساله ارزش خالص، نمودارها و گزارشهای فاوا وضوح را در لحظه (به محض حضور دادههای شما) فراهم میکنند. در ادامه، خواهیم دید که چگونه میتوانید این قابلیتها را گسترش دهید یا در صورت نیاز به تحلیلهای سفارشیتر، آنها را با ابزارهای خارجی ادغام کنید.
ادغام با داشبوردها و ابزارهای تجسم داده خارجی
در حالی که Fava مجموعهای غنی از گزارشها و نمودارهای داخلی را ارائه میدهد، ممکن است بخواهید دادههای Beancount را با سایر ابزارهای هوش تجاری (BI) یا ابزارهای داشبورد مانند Grafana، Metabase یا فرانتاندهای وب سفارشی (مانند یک اپلیکیشن React) ادغام کنید. انگیزه این کار میتواند ترکیب دادههای مالی با سایر منابع داده، استفاده از قابلیتهای پیشرفته ترسیم نمودار، یا به اشتراکگذاری داشبوردها با دیگران در قالبی متفاوت باشد. به لطف ماهیت باز Beancount، روشهای متعددی برای دستیابی به این ادغام وجود دارد:
-
ادغام با پایگاه داده (BeanSQL / Beanpost): یک رویکرد مستقیم، صادر کردن (export) یا همگامسازی دفتر کل Beancount با یک پایگاه داده SQL است. پس از انتقال به SQL، هر ابزار BI میتواند دادهها را پرسوجو کند. در واقع، اعضای جامعه ابزارهایی برای این کار ایجاد کردهاند. به عنوان مثال، Beanpost یک پروژه آزمایشی است که دفتر کل Beancount را در یک پایگاه داده PostgreSQL کپی میکند و بخش زیادی از منطق Beancount را به صورت توابع SQL پیادهسازی میکند. این ابزار «یک بکاند منعطف فراهم میکند که میتواند با ابزارهای دیگر مانند اپلیکیشنهای وب یا سیستمهای گزارشگیری ادغام شود.» شما میتوانید Beanpost را برای همگامسازی مداوم دفتر کل متنی خود با Postgres اجرا کنید. سپس، ابزاری مانند Metabase یا Tableau میتواند به آن پایگاه داده Postgres متصل شود و شما میتوانید هر نمودار یا داشبوردی که دوست دارید بسازید (که با بهروزرسانی پایگاه داده، بهطور زنده بهروز میشود). یکی از کاربران گزارش داده است که از Postgres + PostGraphile برای ارائه خودکار یک API GraphQL برای دادههای دفتر کل استفاده کرده و سپس یک فرانتاند سفارشی React روی آن نوشته است – که اساساً با دفتر کل مانند یک سرویس وب رفتار میکند. این رویکرد برای مواردی که رابط کاربری Fava کافی نیست (مانند دسترسی چند کاربره یا رابطهای کاربری مناسبتر برای موبایل) پاسخگو است. این روش از نظر مهندسی سنگینتر است، اما پتانسیل بالایی را نشان میدهد: شما میتوانید Beancount را نسبتاً آسان با پشتههای وب مدرن ادغام کنید. یک نسخه سبکتر، استفاده از پشتیبانی داخلی Beancount از SQLite است – اجرای پرسوجویی مانند
bean-query -e ledger.beancount "SELECT ..."میتواند نتایج را خروجی دهد، یا استفاده از API پایتون Beancount برای دریافت دادهها و درج آنها در یک پایگاه داده SQLite. برخی افراد از SQLite به عنوان واسط برای اتصال به ابزارهایی مانند Metabase (که میتواند فایلهای SQLite را بخواند) استفاده میکنند. -
Grafana (داشبوردهای سری زمانی): Grafana برای مانیتورینگ و دادههای سری زمانی محبوب است. دادههای مالی در طول زمان (هزینهها، موجودیها) را میتوان به عنوان سری زمانی در نظر گرفت. بحثهایی در جامعه کاربران درباره اتصال Beancount به Grafana وجود داشته است. یک ایده، ساخت یک پلاگین منبع داده (Data Source Plugin) برای Grafana بود که بتواند پرسوجوهای BQL را بهطور لحظهای روی فایل Beancount اجرا کند. این کار به پنلهای Grafana اجازه میدهد تا به طور مستقیم مواردی مانند «موجودی حساب جاری» را به صورت یک گیج (gauge) یا «هزینههای ۳۰ روز گذشته» را به صورت نمودار، با پرسوجو از دفتر کل نمایش دهند. تا کنون (۲۰۲۵)، پلاگین اختصاصی منتشر نشده است، اما علاقهمندان راهحلهای موردی ساختهاند. برای مثال، کاربری به نام aquilax یک سرور ساده ساخته است که دادههای Ledger CLI را در دسترس Grafana قرار میدهد و آن را با نام grafana-ledger-datasource-server به اشتراک گذاشته است. مفهوم مشابهی را میتوان برای Beancount به کار برد: شما یک سرور HTTP کوچک در پایتون مینویسید که دفتر کل Beancount را بارگذاری میکند (با استفاده از API پایتون برای پرسوجوی دادهها) و نقاط انتهایی (endpoints) ایجاد میکند که فریمهای داده JSON را برای Grafana برمیگرداند. Grafana یک پلاگین منبع داده JSON عمومی دارد که میتواند دادهها را از این API دریافت کند. در عمل، این بدان معناست که شما میتوانید یک داشبورد Grafana با پنلهایی مانند «درآمد ماهیانه (نمودار میلهای)» یا «موجودی نقدی روزانه (نمودار خطی)» طراحی کنید و این پنلها دادهها را از API مبتنی بر Beancount شما واکشی کنند. Grafana گزینههای تجسم غنی (یادداشتها، آستانهها، ترکیب با معیارهای سرور و غیره) را فراهم میکند. Andreas Gerstmayr (یکی از نگهدارندگان Fava) دقیقاً همین رویکرد را پیشنهاد کرد و حتی ذکر کرد که یک افزونه Fava به نام fava-dashboards ایجاد کرده است (توضیحات بیشتر در ادامه) تا نمودارها را از پرسوجوهای BQL رندر کند، که جایگزینی برای راهاندازی کامل Grafana است. اگر رابط کاربری Grafana را ترجیح میدهید، ادغام امکانپذیر است – فقط نیاز به ساخت پل ارتباطی داده دارد.
-
Metabase (پرسوجوها و داشبوردهای موردی): Metabase یک ابزار BI کاربرپسند است که به شما اجازه میدهد بدون کدنویسی، پرسوجو اجرا کنید و داشبورد بسازید. اگر دفتر کل خود را به یک قالب رابطهای صادر کنید (از طریق Beanpost یا با نوشتن جداول تراکنشها، ثبتها و غیره)، میتوانید Metabase را به آن پایگاه داده متصل کنید. شما میتوانید جداول سفارشی مانند
expenses (date, category, amount)را از دفتر کل خود ایجاد کنید و سپس در Metabase به راحتی نمودار بسازید (مثلاً یک نمودار دایرهای از هزینهها به تفکیک دستهبندی برای ماه گذشته). مزیت این کار این است که کاربران غیرفنی (یا همکاران) میتوانند از طریق رابط گرافیکی Metabase با دادهها تعامل داشته باشند بدون اینکه نیازی به لمس فایل Beancount داشته باشند. عیب آن این است که باید فرآیند صادر کردن/همگامسازی را نگهداری کنید. برخی کاربران تبدیل خودکار شبانه دفتر کل Beancount به SQLite را پیادهسازی کردهاند و سپس به Metabase اجازه میدهند SQLite را بخواند؛ برخی دیگر ممکن است از رویکرد Postgres استفاده کنند. نکته کلیدی این است که قابلیت حمل دادههای Beancount این امکان را فراهم میکند – شما آزادید دادهها را به هر شکلی که ابزار خارجی شما نیاز دارد، کپی کنید. -
فرانتاندهای سفارشی / اپلیکیشنها: اگر نیازهای خاصی دارید، همیشه میتوانید یک اپلیکیشن سفارشی روی Beancount بنویسید. کتابخانه پایتون Beancount به شما اجازه دسترسی به تمام ورودیهای تجزیه شده، موجودیها و غیره را میدهد، بنابراین یک فریمورک وب پایتون (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 همچنین از منابع داده پایتون پشتیبانی میکند، بنابراین میتوان یک اسکریپت کوتاه پایتون نوشت که پرسوجوهای BQL را اجرا کرده و از آن به عنوان منبع داده در PowerBI استفاده کرد و به یک اتصال مستقیم دست یافت.
مطالعه موردی – ایده ادغام با Grafana: جاش، یکی از کاربران Beancount، در لیست ایمیل درباره ارسال معیارهای Beancount به Prometheus و مشاهده آنها در Grafana سوال کرد. توسعهدهندگان اصلی پاسخ دادند که به جای کپی کردن دادهها در Prometheus، رویکرد بهتر یک پلاگین یا سرویس Grafana است که مستقیماً از دفتر کل Beancount پرسوجو کند. آندریاس افزونه fava-dashboards خود را به اشتراک گذاشت که نمودارهای سفارشی را به عنوان یک راهکار نمونه در داخل خود Fava رندر میکند. نتیجه این است که شما گزینههایی دارید – یا از طریق زیرساختهای BI موجود (Prometheus+Grafana یا SQL+Metabase) ادغام شوید یا Fava را برای رفع نیازهای خود گسترش دهید (در بخش بعدی به این موضوع خواهیم پرداخت).
ملاحظات امنیتی و چند کاربره: هنگام ادغام در ابزارهای خارجی، مراقب حساسیت دادهها باشید. متن ساده Beancount اغلب حاوی اطلاعات مالی خصوصی است، بنابراین هر سروری که آن را در معرض دید قرار میدهد باید ایمن (دارای احراز هویت) باشد. اگر دادهها را به یک ابزار BI ابری منتقل کنید، ممکن است مقداری از حریم خصوصی خود را از دست بدهید. ابزارهای خود-میزبانی (نسخههای متنباز Grafana/Metabase) میتوانند به صورت محلی اجرا شوند تا این خطر کاهش یابد. همچنین، اگر چندین نفر نیاز به مشاهده داشبوردها دارند، یک داشبورد خارجی فقط-خواندنی (read-only) ممکن است به دادن دسترسی Fava به همه (جایی که ممکن است در صورت عدم دقت دادهها را ویرایش کنند) ترجیح داده شود. به عنوان مثال، یک استارتاپ میتواند در داخل از Beancount استفاده کند اما از Metabase استفاده کند تا مدیران بخشها بتوانند هزینهها را در مقابل بودجه ببینند بدون اینکه به فایلهای دفتر کل دست بزنند.
به طور خلاصه، Beancount و Fava با دیگران به خوبی تعامل دارند. شما میتوانید با مقدار کمی کد واسط از کل اکوسیستم ابزارهای داده بهره ببرید: دادههای دفتر کل را برای ابزارهای BI به یک پایگاه داده SQL بفرستید، آنها را از طریق API برای اپلیکیشنهای وب ارائه دهید، یا حتی از کتابخانههای تخصصی برای استریم کردن آنها به سیستمهای سری زمانی استفاده کنید. این انعطافپذیری به این معنی است که اگر تصاویر داخلی Fava نیاز خاصی را برآورده نکرد، هرگز به بنبست نمیخورید – همیشه میتوانید در حالی که به استفاده از Beancount به عنوان منبع واحد حقیقت (source of truth) ادامه میدهید، با پلتفرم دیگری ادغام شوید. در مرحله بعد، نگاهی به گسترش خود Fava با پلاگینها و داشبوردهای سفارشی خواهیم داشت که اغلب اگر فقط به چند ویژگی اضافی نیاز دارید، راه آسانتری نسبت به ادغام خارجی است.
داشبوردهای سفارشی و گسترش Fava با پلاگینها (نمونه کدها)
Fava بهگونهای طراحی شده است که قابلگسترش باشد: شما میتوانید با نوشتن پلاگینهای Fava (اکستنشنها) به زبان پایتون، صفحات، نمودارها و رفتارهای جدیدی به آن اضافه کنید. این امر به شما اجازه میدهد رابط کاربری وب را بدون نیاز به ساخت یک اپلیکیشن مجزا، مطابق با نیازهای خاص خود سفارشیسازی کنید. ما دو مسیر کلیدی را برای سفارشیسازی بررسی خواهیم کرد: (۱) استفاده یا نوشتن اکستنشنهای Fava، و (۲) راهاندازی داشبوردهای سفارشی از طریق پلاگینهای جامعه کاربری مانند fava-dashboards.
اکستنشنهای Fava (پلاگینهای سفارشی)
یک اکستنشن Fava در اصل یک ماژول پایتون است که زیرکلاسی از FavaExtensionBase را تعریف میکند. هنگامی که Fava شروع به کار میکند، میتواند این ماژول را بارگذاری کرده و با اپلیکیشن ادغام کند. اکستنشنها میتوانند صفحات گزارش جدید ثبت کنند، به رویدادها متصل شوند و حتی شامل جاوااسکریپت سفارشی برای تعاملپذیری باشند. برخی اکستنشنها به صورت داخلی با Fava ارائه میشوند (مثلاً portfolio_list برای صفحه نمای کلی سبد سهام). بقیه را میتوان از طریق pip نصب کرد یا از ابتدا نوشت.
برای فعالسازی یک اکستنشن، از دستور سفارشی (custom directive) Beancount در فایل دفتر کل خود استفاده میکنید:
2010-01-01 custom "fava-extension" "my_extension_module" "{'option': 'value'}"این دستور به Fava میگوید که ماژول داده شده را بارگذاری کند. برای مثال، اکستنشن داخلی Portfolio List نیز به روشی مشابه فعال میشود. اگر اکستنشنی را از طریق pip نصب کردهاید، باید نام ماژول آن را در اینجا بیاورید. بخش JSON اختیاری در انتها، تنظیمات مربوط به اکستنشن است (که به صورت رشته به آن پاس داده میشود).
مثال – اکستنشن ثبت خودکار (Auto-Commit): Fava یک اکستنشن نمونه به نام fava.ext.auto_commit (به صورت داخلی) دارد که وقتی فایلی را از طریق ویرایشگر Fava ویرایش میکنید، تغییرات را بهطور خودکار در سیستم کنترل نسخه (VCS) ثبت (commit) میکند. اگر بخواهید از آن استفاده کنید، این خط را اضافه میکنید:
2025-01-01 custom "fava-extension" "fava.ext.auto_commit" "{'repo': '/path/to/git/repo'}"این اکستنشن یک هوک (hook) ثبت میکند که پس از هر بار ویرایش فایل، عملیات git commit را انجام دهد. این مثال نشان میدهد که چگونه اکستنشنها میتوانند به رویدادهای Fava (در اینجا، پس از ذخیره فایل) متصل شوند.
مثال – اکستنشن لیست سبد سهام (Portfolio List): این اکستنشن صفحهای اضافه میکند که سرمایهگذاریهای شما را بر اساس کلاس دارایی و غیره دستهبندی کرده و نشان میدهد. این اکستنشن دارای مقدار report_title = "Portfolio List" است و شامل یک قالب (template) برای رندر کردن دادهها میباشد. Fava آن را شناسایی کرده و یک ورودی جدید به نام "Portfolio List" در نوار کناری زیر بخش گزارشها (Reports) اضافه میکند. این اکستنشن همچنین شامل مقداری جاوااسکریپت (با تنظیم has_js_module = True) برای بهبود صفحه است (شاید برای نمودارهای تعاملی در آن صفحه). برای فعالسازی آن (اگر به صورت پیشفرض فعال نبود)، به این صورت عمل میکنید:
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 on_page_load(self):
# این میتواند هوکی برای جمعآوری دادهها باشد
passهمچنین باید یک فایل templates/ReceivablesReport.html برای تعریف HTML صفحه بسازید. در آن قالب، میتوانید به self.ledger (شیء دفتر کل Beancount) دسترسی داشته باشید و محاسبات را انجام دهید. برای مثال، در تراکنشها پیمایش کنید تا مواردی که به عنوان فاکتور تگ شدهاند و هنوز پرداخت نشدهاند را پیدا کنید و آنها را بر اساس سن (تاریخ) گروهبندی کنید. پس از نوشتن این اکستنشن، آن را به دفتر کل خود اضافه میکنید:
2025-01-01 custom "fava-extension" "receivables"(با فرض اینکه receivables.py در دایرکتوری فایل Beancount یا در PYTHONPATH باشد، Fava میتواند آن را با نام پیدا کند). با شروع Fava، اکنون صفحه "Receivables Aging" را مشاهده خواهید کرد.
در پسزمینه، Fava متدهای اکستنشن شما را در زمانهای مناسب فراخوانی میکند. شما میتوانید متدهایی مانند after_load_file (برای انجام محاسبات پس از بارگذاری دفتر کل) را بازنویسی کنید یا از هوکهایی مانند before_request استفاده کنید. اکستنشن همچنین در صورت نیاز میتواند مسیرها (routes) یا نقاط پایانی API تعریف کند، اما معمولاً استفاده از هوکهای ارائه شده و یک قالب کافی است.
مستندات Fava اشاره میکنند که سیستم اکستنشن هنوز در حال تکامل است، اما کاملاً قابل استفاده است. در واقع، بسیاری از ویژگیهای پیشرفته ابتدا به عنوان اکستنشن نمونهسازی شدهاند.
داشبوردهای سفارشی با fava-dashboards (اکستنشن جامعه کاربری)
بهجای نوشتن یک اکستنشن از ابتدا، میتوانید از پلاگین fava-dashboards که توسط یکی از نگهدارندگان Fava ساخته شده است، استفاده کنید. این اکستنشن به شما اجازه میدهد داشبوردهای دلخواه خود را از طریق یک فایل تنظیمات YAML (یا JSON)، با ترکیبی از متن، جداول و نمودارها که توسط پرسوجوهای BQL قدرت گرفتهاند، تعریف کنید. این در واقع راهی برای ایجاد "صفحات" جدید در Fava است که شامل چندین پنل سفارشی هستند.
نصب و راهاندازی: ابتدا بسته را نصب میکنید (مثلاً pip install fava-dashboards). سپس در فایل 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 میگوید که اکستنشن را بارگذاری کرده و از فایل YAML شما برای تنظیمات استفاده کند.
فرمت YAML داشبوردها: در فایل dashboards.yaml یک یا چند داشبورد و پنلهای آنها را تعریف میکنید. برای نمونه:
dashboards:
- title: "Cash Flow Dashboard"
panels:
- title: "Net Cash This Month"
width: 50%
queries:
- bql: "SELECT sum(position) WHERE account ~ 'Income' OR account ~ 'Expenses'"
type: "jinja2"
template: "<h1>{{ panel.queries[0].result | float }} USD</h1>"
- title: "Cash Balance Trend"
width: 50%
queries:
- bql: "SELECT date, balance WHERE account = 'Assets:Bank:Checking'"
type: "echarts"
script: |
const dates = {{ panel.queries[0].result | safe }}.map(row => row[0]);
const balances = {{ panel.queries[0].result | safe }}.map(row => row[1]);
return {
xAxis: { type: 'category', data: dates },
yAxis: { type: 'value' },
series: [{ data: balances, type: 'line' }]
};این یک مثال فرضی برای نمایش قابلیتهاست. پنل اول خالص وجه نقد (درآمد منهای هزینهها) را برای فیلتر فعلی محاسبه کرده و آن را به صورت یک عدد بزرگ نمایش میدهد (با استفاده از قالب Jinja2). پنل دوم یک پرسوجو برای دریافت موجودی روزانه حساب جاری اجرا کرده و سپس از اسکریپت ECharts (یک کتابخانه نمودار جاوااسکریپتی) برای ترسیم نمودار خطی استفاده میکند. fava-dashboards از انواع پنلها پشتیبانی میکند: html, jinja2, echarts, d3_sankey و غیره، و دادهها را در اختیار اسکریپتها قرار میدهد. در اصل، این ابزار به شما انعطافپذیری کامل برای طراحی داشبورد با اجزای متعدد را میدهد – بدون اینکه نیاز باشد یک اکستنشن کامل Fava را از ابتدا بنویسید.
هنگامی که صفحه داشبورد را در Fava باز میکنید، اکستنشن مسئولیت رندر کردن آنها را بر عهده میگیرد. شما میتوانید چندین داشبورد بسازید (هر کدام به صورت یک تب یا صفحه جداگانه ظاهر میشوند). این برای ایجاد داشبوردهای مالی سفارشی بسیار قدرتمند است. برای مثال، میتوانید داشبورد "بودجه در مقابل واقعیت" بسازید: یک پنل جدولی از بودجه در برابر هزینههای واقعی هر دسته را نشان میدهد (از طریق پرسوجویی که دو مجموعه حساب را مقایسه میکند)، پنل دیگر نمودار میلهای هزینههای سال جاری در مقایسه با سال قبل را نشان میدهد و غیره. همه اینها تنها با تنظیمات و حداقل اسکریپتنویسی، و با بهرهگیری از دادههای دفتر کل شما از طریق BQL امکانپذیر است.
نمونه کد – فعالسازی fava-dashboards: همانطور که در بالا نشان داده شد، اضافه کردن اکستنشن تنها یک خط در دفتر کل شماست. برای تکمیل موضوع، در اینجا یک مثال حداقلی در متن آورده شده است:
option "title" "My Ledger"
option "operating_currency" "USD"
plugin "beancount.plugins.auto_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) where account ~ 'Assets|Liabilities'"
type: "jinja2"
template: "<div>Net Worth: {{ panel.queries[0].result[0,0] }}</div>"(این مثال ارزش خالص را در یک div ساده نشان میدهد؛ یک مثال واقعی ظاهر بهتری خواهد داشت و پنلهای بیشتری اضافه میکند.)
با این تنظیمات، وقتی Fava را اجرا میکنید و به داشبورد "Overview" میروید، ارزش خالص محاسبه شده شما را نشان میدهد. سپس میتوانید قالب را اصلاح کنید یا در صورت نیاز نمودار اضافه کنید.
سایر اکستنشنهای قابل توجه: علاوه بر fava-dashboards، پلاگینهایی مانند fava-investor وجود دارند که تحلیلهای پیشرفته سرمایهگذاری را ارائه میدهند (نمودارهای تخصیص دارایی، ابزارهای برداشت ضرر مالیاتی و غیره). فعالسازی fava-investor (پس از pip install fava-investor) چندین صفحه گزارش مربوط به سرمایهگذاری اضافه میکند. مورد دیگر fava-review است (برای مرور تراکنشها در طول زمان) و موارد دیگر. جامعه کاربری لیست "awesome-beancount" را نگهداری میکند که شامل پلاگینها و ابزارهای مختلف است. با مرور این لیست، ممکن است اکستنشن از پیش ساخته شدهای پیدا کنید که نیازهای شما را برآورده کند.
چه زمانی گسترش دهیم و چه زمانی به صورت خارجی ادغام کنیم: بهطور کلی، اگر نیاز شما صرفاً ارائه یا محاسبات روی دادههای موجود در دفتر کل است، اکستنشن Fava ایدهآل است (همه چیز را در یک جا نگه میدارد، به فیلترها احترام میگذارد و غیره). اگر نیاز شما شامل ترکیب دادههای خارجی است یا به رابط کاربری بسیار متفاوتی نیاز دارید، ادغام خارجی (بخش قبلی) ممکن است توجیه داشته باشد. برای مثال، نمایش آمار وبسایت در کنار امور مالی – در Grafana یا Metabase بهتر است؛ اما اضافه کردن یک شاخص کلیدی عملکرد (KPI) مالی یا گزارش جدید – به عنوان پلاگین Fava بهتر است.
مثال – یک KPI سفارشی در Fava: فرض کنید میخواهید "نرخ پسانداز" (درصد درآمد پسانداز شده) را پیگیری کنید. میتوانید این کار را با اکستنشنی انجام دهید که آن را محاسبه کرده و در یک کادر کوچک در صفحه اصلی نشان دهد. یا با fava-dashboards، یک پنل میتواند از نوع Jinja2 باشد که با پرسوجوی مجموع درآمد و مجموع هزینهها، مقدار Savings Rate: X% را خروجی دهد. تزریق این نوع معیارهای سفارشی با این ابزارها بسیار آسان است، در حالی که در یک سیستم بسته مانند QuickBooks ممکن است ایجاد یک معیار جدید در داشبورد غیرممکن باشد.
برای نشان دادن اینکه چقدر میتواند مختصر باشد، در اینجا یک شبهکد با استفاده از fava-dashboards در YAML آورده شده است:
- title: "Savings Rate"
panels:
- title: "Savings Rate"
queries:
- bql: "SELECT sum(position) WHERE account ~ 'Income'"
- bql: "SELECT sum(position) WHERE account ~ 'Expenses'"
type: "jinja2"
template: |
{% set income = panel.queries[0].result[0][0] %}
{% set expense = -panel.queries[1].result[0][0] %} {# هزینهها در صورتحساب درآمد منفی هستند #}
{% set rate = (income - expense) / income * 100 if income != 0 else 0 %}
<h3>Savings Rate: {{ rate|round(1) }}%</h3>این کد نرخ پسانداز را محاسبه کرده (با فرض اینکه مجموع حسابهای درآمدی مثبت و هزینهها در متن پرسوجوی BQL منفی به دست میآیند) و آن را نمایش میدهد.
نکته کلیدی: Fava یک ابزار ایستا نیست – بلکه یک پلتفرم توسعهپذیر است. با کمی کدنویسی پایتون یا حتی فقط کد تنظیمات، میتوانید آن را به میزان گستردهای سفارشی کنید. بسیاری از کاربران اسکریپتها یا اکستنشنهای کوچکی را در انجمنها به اشتراک میگذارند تا کارهایی مانند نمایش صورتحسابهای آتی، تولید فاکتورهای PDF از تراکنشها یا ادغام Beancount با کتابخانههای محاسبات مالیاتی را انجام دهند. وقتی برای یادگیری یا استفاده از این اکستنشنها وقت میگذارید، صاحب یک سیستم تحلیل مالی بسیار اختصاصی میشوید بدون اینکه نیاز باشد همه چیز را از صفر شروع کنید.
موارد استفاده: امور مالی شخصی در مقابل حسابداری کسبوکارهای کوچک
Beancount و Fava میتوانند برای هر دو نوع حسابداری شخصی و کسبوکارهای کوچک مورد استفاده قرار گیرند، اما موارد استفاده و مزایای آنها در هر بخش تفاوتهای اندکی در اولویتبندی دارد:
امور مالی شخصی
برای افراد، ترکیب Beancount+Fava در ارائه دید کامل و بینش عمیق نسبت به امور مالی فردی بدون تکیه بر اپلیکیشنهای اختصاصی میدرخشد. موارد استفاده رایج در امور مالی شخصی عبارتند از:
-
ردیابی هزینهها و بودجهبندی: بسیاری از کاربران از Beancount برای ثبت تکتک هزینهها و سپس تحلیل الگوهای مخارج استفاده میکنند. با Fava، آنها میتوانند ببینند که پول در هر ماه به کجا میرود (نمودار درختی هزینهها) و با مقایسه مقادیر واقعی با مقادیر مورد انتظار، بودجه را ردیابی کنند (برخی این کار را از طریق افزونه Budgets یا کوئریهای سفارشی انجام میدهند). یکی از کاربران توضیح داده است که پس از استفاده از Beancount، «تحلیل دادههای مالی (مخارج، بخششها، مالیات و غیره) بسیار ساده شده است. انجام این کار با Fava آسان است، اما با اسکریپتنویسی هم به راحتی انجام میشود... من یک اسکریپت پایتون دارم که دادهها را با استفاده از BQL از Beancount استخراج میکند و سپس از کتابخانه pandas برای تهیه گزارش استفاده میکنم.» این نشان میدهد که کاربران شخصی چگونه از رابط کاربری داخلی و هم از توانایی اسکریپتنویسی برای تحلیلهای سفارشی بهره میبرند.
-
ردیابی ارزش خالص دارایی و اهداف: از آنجایی که میتوانید تمام داراییها (حسابهای بانکی، سرمایهگذاریها و حتی داراییهای فیزیکی) را در یک دفتر کل بگنجانید، نمای واحدی از ارزش خالص دارایی (Net Worth) خود خواهید داشت. علاقهمندان به امور مالی شخصی از این قابلیت برای ردیابی پیشرفت به سمت اهداف (مانند «عدد استقلال مالی» یا بازپرداخت بدهی) استفاده میکنند. نمودارهای Fava که ارزش خالص دارایی را در طول زمان نشان میدهند بسیار انگیزهبخش هستند؛ شما به معنای واقعی کلمه میتوانید منحنی ثروت خود را ببینید. ردیابی بدهیهایی مانند وامهای دانشجویی یا وام مسکن در Beancount و بهروزرسانی مانده آنها رایج است؛ سپس دفتر کل تصویر کاملی از سلامت مالی ارائه میدهد.
-
سرمایهگذاریها و رمزارزها: استفاده شخصی اغلب به ردیابی سبد سهام نیز گسترش مییابد. Beancount میتواند سهام، رمزارز و موارد دیگر را با محاسبات مبنای هزینه (Cost Basis) و سود محققشده (از طریق افزونهها یا کوئریها) مدیریت کند. مزیت آن نسبت به سایت کارگزاری این است که میتوانید تمام حسابها را تجمیع کرده و تخصیص واقعی داراییها را ببینید. به عنوان مثال، افزونه fava-investor توسط یکی از اعضای جامعه برای انجام تحلیل سرمایهگذاری در Fava ساخته شده است که شامل مواردی مانند نمودارهای درختی تخصیص دارایی و شاخصهای عملکرد است. اینها کارهایی هستند که معمولاً سرمایهگذاران آماتور در اکسل انجام میدهند؛ Beancount روشی دقیقتر و خودکارتر ارائه میدهد. یک پست وبلاگی با عنوان «Beancount: حسابداری دیفای برای تازهواردها» حتی استفاده از آن را برای ردیابی تراکنشهای ارز دیجیتال و ییلد فارمینگ (Yield Farming) نشان میدهد که گویای انعطافپذیری آن در سناریوهای مدرن امور مالی شخصی است.
-
امور مالی شخصی چندارزی: اگر در خارج از کشور زندگی میکنید یا سرمایهگذاریهای خارجی دارید، Beancount بسیار کاربردی است زیرا میتواند ارزها را تبدیل و تجمیع کند. کاربران اشاره کردهاند که «بسیاری از نرمافزارهای حسابداری در مدیریت چندارزی ضعیف هستند... با Beancount، میتوانید هر کالایی (Commodity) که میخواهید تعریف کنید» و گزارشها را به ارز دلخواه خود دریافت کنید. برای یک کاربر شخصی که مثلاً حقوق دلاری دریافت میکند اما هزینههایش به یورو است، این یک مزیت بزرگ محسوب میشود.
-
ثبت وقایع زندگی و دفتر خاطرات: یک مورد استفاده غیرمتعارف اما واقعی: برخی از کاربران با دفتر کل مانند یک لاگ ثبت وقایع زندگی رفتار میکنند و تراکنشها را با رویدادهای زندگی (مانند
#weddingیا#vacation2025) برچسبگذاری میکنند. سپس از آن برای محاسبه هزینههای رویدادها یا حتی به عنوان دفتر خاطرات فعالیتها استفاده میکنند (فرادادههای مالی به عنوان نمادی از رویدادهای زندگی). فرمت متنساده و قابلیت برچسبگذاری، این کار را به شکلی ممکن میسازد که ابزارهای سنتی به راحتی اجازه نمیدهند. -
سادگی و مالکیت: امور مالی شخصی به ذهنیت افراد نیز مربوط میشود. بسیاری Beancount را انتخاب میکنند چون «میخواستند مالک این دادهها باشند و به راحتی آنها را تحلیل کنند و نمیخواستند درگیر حق اشتراک یا محدودیتهای یک شرکت خاص شوند». توقف فعالیت اخیر Mint.com (یک ابزار بودجهبندی رایگان محبوب) باعث شده علاقهمندان برای پایداری طولانیمدت به سمت حسابداری متنساده بروند. با Beancount، آنها میدانند که ۲۰ سال دیگر هم میتوانند دفتر کل خود را باز کنند. برای امور مالی یک فرد، دادههای Beancount (که شاید از طریق Dropbox یا Git همگامسازی شده باشند) و رابط وب Fava (که میتواند به صورت محلی یا روی یک سرور شخصی اجرا شود) تعادلی بین راحتی و کنترل ایجاد میکنند که در جای دیگر به سختی یافت میشود.
چالشهای احتمالی برای استفاده شخصی: تنظیمات اولیه و یادگیری دفترداری دوطرفه میتواند برای برخی یک مانع باشد. اما منابع بسیاری (مانند آموزشهای Beancount و انجمنهای گفتگو) به کاربران جدید کمک میکنند. پس از تنظیم، نگهداری آن میتواند تا حد زیادی خودکار شود که برای کسی که امور مالی خانواده را با حداقل تلاش مدیریت میکند، عالی است.
حسابداری کسبوکارهای کوچک
کسبوکارهای کوچک، استارتاپها و فریلنسرها نیز میتوانند از Beancount+Fava استفاده کنند، اگرچه الزامات در اینجا شامل گزارشدهی رسمیتر و شاید همکاری تیمی است:
-
دفترداری و صورتهای مالی: یک شرکت میتواند دفتر کل اصلی خود را در Beancount نگهداری کند، فاکتورها، قبضها، لیست حقوق و دستمزد و غیره را ثبت کرده و ترازنامه و صورت سود و زیان تهیه کند. Beancount از حسابداری تعهدی مورد نیاز پشتیبانی میکند (میتوانید حسابها را به عنوان حسابهای دریافتنی/پرداختنی علامتگذاری کنید و فاکتورها را با ثبت در درآمد و حساب دریافتنی ثبت کنید و بعداً پرداختی را برای تسویه حساب دریافتنی وارد کنید). Fava سپس این موارد را به درستی زیر بخش داراییها یا بدهیها نشان میدهد. در یک بحث در Reddit پرسیده شده بود که آیا Beancount برای شرکتها مناسب است و آیا میتواند صورتهای مالی مناسب تولید کند؟ پاسخ مثبت است؛ این ابزار میتواند ترازنامه، صورت سود و زیان و (با کمک برخی کوئریها) صورت جریان وجوه نقد تولید کند، زیرا اینها صرفاً نماهایی از دادههای دوطرفه هستند. نکته اینجاست که Beancount هیچ استاندارد حسابداری خاصی را اجبار نمیکند (این بستگی به نحوه استفاده شما دارد). بنابراین یک کاربر آگاه (یا یک حسابدار) باید سرفصلهای حسابداری (Chart of Accounts) را به درستی برای کسبوکار تنظیم کند. نمونههایی از جامعه کاربری وجود دارد که نشان میدهد Beancount برای استارتاپها استفاده شده است؛ یکی از نظردهندگان در HN گفت: «من واقعاً از استفاده از Beancount + Git برای مدیریت دفتر حسابداری استارتاپ خودم لذت میبرم»، هرچند اشاره کرد که اضافه کردن دورهای ورودیها کمی خستهکننده بود. این خستگی را میتوان با اتوماسیون وارد کردن دادهها (Import)، همانطور که دیدیم، کاهش داد.
-
نظارت مالی در لحظه: برای یک کسبوکار کوچک، جریان نقدی حیاتی است. با استفاده از Fava، صاحب کسبوکار میتواند مانده حسابهای بانکی و جریان نقدی را تقریباً در لحظه نظارت کند. با خودکارسازی فیدهای بانکی یا ایمپورت دادهها، آنها میتوانند متوجه شوند که آیا پرداختی مشتری وصول شده یا هزینه بزرگی کسر شده است. QuickBooks فیدهای بانکی ارائه میدهد که «اجازه میدهد ببینید کسبوکارتان در لحظه چگونه عمل میکند»؛ با Beancount، شما این کار را با یکپارچهسازی بانکی خودتان شبیهسازی میکنید. مزیت Beancount شفافیت است؛ شما دقیقاً میبینید چه چیزی وارد شده و چگونه دستهبندی شده است، به جای اینکه به منطق تطبیقِ گاهی غیرقابل درکِ QuickBooks اعتماد کنید.
-
صدور فاکتور و حسابهای دریافتنی/پرداختنی: Beancount ماژول داخلی صدور فاکتور ندارد (مانند تولید فاکتورهای PDF یا ردیابی شماره فاکتورها). با این حال، کاربران خلاق با افزونهها این کار را مدیریت کردهاند. به عنوان مثال، میتوان با استفاده از یک قالب Jinja2 یا حتی یک اسکریپت خارجی که ورودیهای بازِ حسابهای دریافتنی را میخواند، یک فاکتور PDF از یک تراکنش تولید کرد. پروژهای به نام «Beanie» وجود دارد که به عنوان یک سیستم سبکِ حسابهای دریافتنی روی Beancount عمل میکند. کسبوکارهای کوچک ممکن است از Beancount برای دفتر کل و از ابزار دیگری برای صدور فاکتور استفاده کنند و سپس دادههای فاکتور را به Beancount وارد کنند. این یک مرحله اضافی نسبت به QuickBooks است (که میتواند فاکتور بفرستد و پس از پرداخت به طور خودکار ثبت کند)، اما تضمین میکند که تمام دادهها در دفتر کل متنباز نهایی میشوند.
-
حقوق و دستمزد و استهلاک: اینها وظایف حسابداری هستند که کسبوکارهای کوچک با آنها سر و کار دارند. Beancount قطعاً میتواند ورودیهای حقوق و دستمزد را ثبت کند (تفکیک حقوق ناخالص، مالیاتها، کسورات و غیره در حسابهای مناسب)، اما معمولاً باید آنها را با ابزارهای خارجی یا ارائهدهنده خدمات حقوق و دستمزد محاسبه کرده و سپس وارد کنید. جداول استهلاک داراییهای ثابت نیز به همین ترتیب به صورت دستی وارد میشوند (یا میتوانید افزونهای برای خودکارسازی ورودیهای استهلاک ماهانه بنویسید). Beancount برای این موارد جادو نمیکند، اما بسیاری از نرمافزارهای کسبوکارهای کوچک نیز فراتر از ارائه چند قالب، کار خاصی انجام نمیدهند. مزیت این است که میتوانید هر مورد غیرعادی را اسکریپتنویسی کنید. به عنوان مثال، اگر جدول زمانی شناسایی درآمد سفارشی دارید، میتوانید آن سندهای حسابداری را در پایتون اسکریپت کرده و شامل کنید.
-
شفافیت و قابلیت حسابرسی: کسبوکارها ممکن است از این واقعیت قدردانی کنند که Beancount یک ردپای حسابرسی (Audit Trail) شفاف ارائه میدهد. هر تراکنش واضح است و میتواند با لینکهایی به اسناد (رسیدها، قراردادها) ضمیمه شود. در صورت حسابرسی، میتوانید فایل دفتر کل را به همراه اسناد پیوست شده نشان دهید که بسیار سرراست است. همچنین، کنترل نسخه (Version Control) به این معنی است که شما یک لاگ حسابرسی دارید که چه کسی و چه زمانی تغییرات را اعمال کرده است (اگر چندین نفر از طریق Git همکاری کنند). این را با QuickBooks مقایسه کنید که در آن ممکن است یک حسابدار نیاز داشته باشد لاگهای تغییراتی را بررسی کند که به راحتی در دسترس کاربر نیستند.
-
هزینه: ترکیب Beancount+Fava رایگان است که برای استارتاپها یا کسبوکارهای کوچکی که سعی در به حداقل رساندن هزینههای نرمافزاری دارند، جذاب است. QuickBooks ،Xero و موارد مشابه هزینههای ماهانه دارند. با این حال، معامله این است که آنها همراه با پشتیبانی و تنظیمات آسانتر عرضه میشوند. یک صاحب کسبوکار مسلط به فناوری ممکن است با کمال میل مقداری زمان صرف کند تا در هزینهها صرفهجویی کرده و انعطافپذیری به دست آورد.
نمونههای واقعی: کاربر دیگری در HN گفته است که از آن برای یک شرکت مشاوره LLC استفاده کرده و به خوبی جواب داده است، اما با افزایش تراکنشها، شروع به تقسیم فایلها به صورت سالانه کرده تا سرعت حفظ شود. اجماع کلی این است: برای یک کسبوکار کوچک (مثلاً ده هزار تراکنش در سال یا کمتر)، Beancount کاملاً توانمند است. اگر شما یک شرکت متوسط بزرگتر با صدها هزار تراکنش بودید، عملکرد سیستم ممکن بود استفاده از رویکرد پایگاهداده یا انتخاب یک سیستم حسابداری تخصصی را ایجاب کند - هرچند ما پروژه Beanpost را داریم که سعی میکند با استفاده از Postgres به عنوان بکاند، این مشکل را حل کند.
همکاری: یک حوزه تفاوت در این است که QuickBooks Online به چندین کاربر (مالک، حسابدار و غیره) اجازه میدهد به طور همزمان کار کنند. در Beancount، همکاری میتواند از طریق Git باشد (چندین کاربر تغییرات را کامیت میکنند). این روش کار میکند اما نیاز به دانش Git و حل تعارضات (Conflict Resolution) در صورت ویرایش همزمان دارد. برخی از پلتفرمهای آنلاین Git یا حتی Google Drive برای اشتراکگذاری فایل دفتر کل استفاده کردهاند. این کار شدنی است اما به اندازه نرمافزارهای حسابداری ابری یکپارچه نیست. با این حال، برای یک تیم کوچک (یا یک دفتردار تنها + مالک) قابل مدیریت است و همیشه میتوانید از طریق Fava دسترسی فقط خواندنی (Read-only) بدهید (آن را روی یک سرور داخلی میزبانی کنید و اجازه دهید دیگران بدون امکان ویرایش، گزارشها را مشاهده کنند).
انطباق با قوانین: برای امور مالی شخصی، این موضوع مطرح نیست. برای کسبوکار، ممکن است نیاز به تولید گزارشهای رسمی یا پیروی از استانداردهای حسابداری داشته باشید. Beancount میتواند برای تولید صورتهای مالی مطابق با GAAP استفاده شود، اما مستلزم آن است که کاربر دادهها را بر همان اساس وارد کند. هیچ اجبار داخلی برای قوانین GAAP وجود ندارد (مثلاً ماژول داخلی داراییهای ثابت برای اطمینان از استهلاک صحیح وجود ندارد). یک حسابدار خارجی همچنان میتواند با دفتر کل Beancount کار کند (چون اساساً یک دفتر روزنامه عمومی است)؛ آنها ممکن است آن را به اکسل صادر کرده و در صورت نیاز اصلاحات انجام دهند. برخی کسبوکارها ممکن است به همین دلیل یک نرمافزار شناختهشده را ترجیح دهند، یا حداقل حسابداری داشته باشند که با دادههای متنساده راحت باشد.
چه کسانی از آن برای کسبوکار استفاده میکنند؟ احتمالاً کاربران حرفهای: استارتاپهای فناوری، فریلنسرهای با پیشزمینه برنامهنویسی، یا شرکتهایی که برای کنترل دادهها ارزش زیادی قائل هستند (مثلاً شاید شرکتهای معاملات مالی که گزارشدهی سفارشی میخواهند). در یک رشته گفتگو در Reddit کسی پرسیده بود که آیا Beancount برای یک شرکت بازرگانی مناسب است یا خیر؛ پاسخها نشان داد که بله، این ابزار چندارزی را مدیریت میکند و میتواند صورتهای مالی مورد نیاز را تولید کند، اما شما باید برخی ابزارها را حول آن بسازید.
برای نتیجهگیری این بخش: کاربران امور مالی شخصی عاشق Beancount هستند به خاطر بینش و کنترلی که بر پول شخصیشان میدهد؛ این ابزار امور مالی را به مجموعهای از دادهها تبدیل میکند که میتوانند از آن کوئری بگیرند و یاد بگیرند، که منجر به مواردی مانند ردیابی آسان هر هزینه و محاسبه شاخصهایی میشود که ابزارهای بودجهبندی معمولی قادر به انجامش نیستند. کاربران کسبوکارهای کوچک از شفافیت، صرفهجویی در هزینه و قابلیت هک کردن آن قدردانی میکنند؛ آنها میتوانند حسابداری را با بقیه زیرساختهای نرمافزاری خود یکپارچه کنند و از وابستگی به فروشنده یا هزینههای ماهانه اجتناب کنند. هر دو مورد استفاده از تحلیلهای در لحظه بهره میبرند: یک فرد ممکن است پیشرفت بودجه ماهانه خود را تماشا کند، یک کسبوکار ممکن است جریانهای نقدی روزانه را زیر نظر بگیرد - در هر دو مورد، Fava میتواند اطلاعات بهروز را در صورت تغذیه بهموقع دادهها ارائه دهد.
مقایسه با سایر پلتفرمهای تحلیل بلادرنگ (Real-Time)
مقایسه Beancount+Fava با سایر راهکارهایی که تحلیلهای مالی «بلادرنگ» ارائه میدهند، مانند QuickBooks (با فیدهای زنده بانکی) و Power BI (یا داشبوردهای BI مشابه) مفید است. هر رویکرد نقاط قوت و ضعف خاص خود را در زمینههای شفافیت، انعطافپذیری و پاسخگویی دارد:
| جنبه | Beancount + Fava (متنباز) | QuickBooks (با فیدهای بانکی) | Power BI / ابزارهای BI عمومی |
|---|---|---|---|
| شفافیت و مالکیت دادهها | کاملاً شفاف – دادهها به صورت متن ساده (plain text) هستند و شما میتوانید هر تراکنش را بازرسی کنید. تمام منطق سیستم قابل مشاهده است (هیچ الگوریتم پنهانی وجود ندارد). مالکیت فرمت برای همیشه در اختیار شماست. سیستم کنترل نسخه (Version control) میتواند تاریخچه تغییرات را برای حسابرسی نشان دهد. | غیرشفاف – دادهها در یک پایگاه داده ابری اختصاصی ذخیره میشوند. شما برای پشتیبانگیری به قابلیت خروجی گرفتن (export) شرکت Intuit وابسته هستید. برخی فرآیندها (مانند دستهبندی خودکار) کاملاً شفاف نیستند. گزارشهای حسابرسی (audit logs) محدود هستند. اگر پرداخت حق اشتراک را متوقف کنید، خطر از دست دادن دسترسی آسان به دادههای خود را خواهید داشت. | بستگی به منبع داده دارد – خود Power BI صرفاً یک ابزار است. اگر به یک پایگاه داده باز متصل باشد، مالکیت دادهها در اختیار شما باقی میماند. با این حال، فایلها یا داشبوردهای Power BI فرمت اختصاصی دارند و برای مشاهده به نرمافزار Power BI نیاز است. شفافیت محاسبات خوب است (چون خودتان آنها را تعریف میکنید)، اما کل سیستم پیچیده است. |
| انعطافپذیری و شخصیسازی | بسیار انعطافپذیر. میتوانید هر ساختار حساب یا هر نوع کالا و ارزی را تعریف کنید. میتوانید رفتارهای سفارشی یا تحلیلهای خاص را برنامهنویسی کنید (با پایتون و افزونهها). هیچ جریان کاری اجباری وجود ندارد – شما آن را بر اساس نیاز خود (شخصی یا تجاری) تنظیم میکنید. سیستم افزونههای Fava و ابزارهایی مانند fava-dashboards اجازه ساخت داشبوردهای سفارشی درون برنامه را میدهند. اگر چیزی کم باشد، احتمالاً خودتان میتوانید آن را بسازید یا یکپارچه کنید. | متوسط. QuickBooks برای حسابداری استاندارد کسبوکارهای کوچک (صدور فاکتور، حقوق و دستمزد، گزارشهای پایه) امکانات غنی دارد. اما شما محدود به ویژگیهایی هستید که Intuit ارائه میدهد. سرفصل حسابها و دستهبندیها باید در چارچوب آن بگنجند. گزارشهای سفارشی محدود هستند؛ شما نمیتوانید به طور آزادانه از پایگاه داده کوئری بگیرید. یکپارچهسازیها از طریق API شرکت Intuit (که محدود است) یا خروجی اکسل انجام میشوند. شما انعطافپذیری را با راحتی معاوضه میکنید. | برای تحلیل و بصریسازی بسیار انعطافپذیر است. اگر دادهها در دسترس باشند، میتوانید تقریباً هر نوع نمودار یا شاخص کلیدی عملکرد (KPI) را ایجاد کنید. Power BI میتواند دادههای مالی را به راحتی با دادههای دیگر (فروش، تحلیل وب و غیره) ترکیب کند. با این حال، این یک سیستم حسابداری نیست – شما باید دادهها را از قبل آماده داشته باشید (که میتواند از Beancount تامین شود!). این ابزار اصول حسابداری را اجبار نمیکند؛ مانند یک بوم سفید است. انعطافپذیری در بصریسازی بالا است، اما نیاز به تخصص دارد. |
| پاسخگویی بلادرنگ (Real-Time) | با انجام تنظیمات، نزدیک به بلادرنگ است. اگر ورود دادهها را خودکار کنید (فیدها یا وارد کردن مکرر)، Fava به محض بهروزرسانی و بارگذاری مجدد دفترکل، آن را منعکس میکند. به طور پیشفرض حالت "Push" بلادرنگ نیست (نیاز به رفرش دستی دارد)، اما میتوانید هر چقدر که بخواهید بهروزرسانی کنید. سرعت بهروزرسانی بسیار بالاست (تجزیه متن برای تغییرات کوچک در چند میلیثانیه). فرکانس بهروزرسانی در کنترل شماست و نیازی به انتظار برای چرخههای همگامسازی فروشنده نیست. | برای تراکنشهای بانکی به صورت نزدیک به بلادرنگ طراحی شده است. در عمل، فیدهای بانکی در QuickBooks Online یک بار در روز یا به صورت دستی (بسته به بانک) بهروز میشوند. این سیستم تراکنشهای جدید را دریافت کرده و سعی میکند آنها را دستهبندی کند. تغییرات بدون دخالت دستی در داشبورد ظاهر میشوند. با این حال، برخی دادهها (مانند تراکنشهای معلق) ممکن است تا زمان نهایی شدن نشان داده نشوند. به طور کلی پاسخگویی خوبی برای دادههای بانکی دارد؛ اما برای مواردی مانند سندهای دستی (journal entries) کمتر است. | اگر با اتصال زنده (live connection) تنظیم شود، داشبوردها میتوانند به صورت بلادرنگ یا بر اساس زمانبندی بهروز شوند. برای مثال، استفاده از DirectQuery روی یک پایگاه داده SQL میتواند با هر بار باز شدن یا به طور خودکار بهروز شود. در حالت Import، بهروزرسانی طبق زمانبندی (مثلاً ساعتی) انجام میشود. بنابراین میتواند نزدیک به بلادرنگ باشد، اما پیچیدگی در نگهداری خط لوله دادهها (data pipeline) است. هر تغییری در دادههای زیربنایی مستلزم رفرش مدل یا کوئریهاست. |
| اتوماسیون و ورود دادهها | وارد کردن دادهها میتواند بسیار خودکار باشد اما نیاز به تنظیمات سفارشی دارد. ممکن است نیاز به نوشتن اسکریپتها یا استفاده از ایمپورترهای جامعه کاربری داشته باشید. هیچ اتصال بانکی آمادهای در ابتدا وجود ندارد، بنابراین راهاندازی اولیه زمانبر است. در مقابل، پس از تنظیم، میتواند کاملاً خودکار و بدون ورود دستی باشد (برخی کاربران به ۹۵٪ اتوماسیون رسیدهاند). همچنین از ورود دستی (از طریق فرم وب Fava یا ویرایش متن) پشتیبانی میکند. | برای فیدهای بانکی و کارت اعتباری بسیار خودکار است (نیازی به کدنویسی نیست). همچنین دستهبندیها را به طور خودکار پیشنهاد میدهد. این یک مزیت بزرگ از نظر راحتی و کاهش کار دستی است. با این حال، اتوماسیون بیشتر برای حسابهای مالی است؛ موارد دیگر (مانند تقسیم یک هزینه به کلاسهای مختلف) هنوز ممکن است نیاز به بررسی دستی داشته باشند. همچنین اگر فید بانکی قطع شود، کاربر باید دوباره آن را متصل کند. | Power BI اصلاً برای ورود داده نیست – به اتوماسیون منبع داده متکی است. اگر منبع داده یک فایل اکسل دستی باشد، بلادرنگ نخواهد بود. اگر یک پایگاه داده باشد که توسط فرآیند ETL بهروز میشود، میتواند نزدیک به بلادرنگ باشد. خود Power BI را میتوان برای رفرش دادهها از منابع زمانبندی کرد. به طور خلاصه، Power BI میتواند دادههای خودکار را به خوبی نمایش دهد اما خودِ اتوماسیون را ایجاد نمیکند. |
| همکاری و اشتراکگذاری | همکاری از طریق متن (مانند Git) بسیار قدرتمند اما فنی است. چندین نفر میتوانند با ویرایش فایلهای دفترکل و ادغام (merge) تغییرات مشارکت کنند. Fava میتواند به صورت فقط-خواندنی (read-only) برای اشتراکگذاری گزارشها میزبانی شود، اما فاقد نقشهای کاربری پیشرفته است. حسابرسان یا حسابداران ممکن است برای کار با دادهها نیاز به خروجی اکسل داشته باشند اگر با فرمت متنی Beancount راحت نباشند. | دسترسی وب چندکاربره با مجوزهای مشخص. اشتراکگذاری آسان – حسابدار شما میتواند وارد شود و دفاتر را به صورت زنده ببیند. این یک نقطه قوت بزرگ برای کسبوکارهاست. دسترسی ابری در دستگاههای مختلف یک مزیت است (اگرچه Fava را هم میتوان روی سرور شخصی/VPS اجرا کرد). QuickBooks همچنین با سرویسهای دیگر مانند حقوق و دستمزد و وامهای بانکی یکپارچه میشود که در Beancount دشوار است. | Power BI در اشتراکگذاری داشبوردها عالی است: میتوانید داشبوردها را برای همکاران منتشر کنید یا در وبسایتها قرار دهید. این ابزار برای همکاری روی تحلیلها ساخته شده است. با این حال، این اشتراکگذاری به صورت فقط-خواندنی است، نه ویرایش مشارکتی دادههای حسابداری. برای ارائه نتایج مالی به ذینفعان به شکلی جذاب، Power BI بیرقیب است، اما این یک ابزار تحلیل مشارکتی است نه دفترداری مشارکتی. |
| هزینه | رایگان (متنباز). ممکن است به جای پول، زمان خود را صرف تنظیم و نگهداری کنید. میزبانی Fava روی رایانه شخصی یا یک سرور ارزانقیمت هزینه ناچیزی دارد. هیچ هزینه لایسنسی برای کاربران اضافی وجود ندارد. | پولی (اشتراک ماهانه یا سالانه). هزینه QuickBooks Online بسته به طرح انتخابی میتواند از ۲۰ تا ۷۰ دلار یا بیشتر در ماه باشد. هزینههای اضافی برای حقوق و دستمزد یا ویژگیهای پیشرفته نیز وجود دارد. در طول سالها، این هزینهها قابل توجه میشوند. همچنین در صورت قطع اشتراک، دسترسی کامل به دادهها ممکن است محدود شود. | ترکیبی. نسخه Desktop رایگان است، اما اشتراک Pro (برای اشتراکگذاری داشبوردها) هزینه ماهانه دارد. اگر از قبل لایسنس Office 365 داشته باشید، ممکن است هزینه اضافی نداشته باشد. با این حال، هزینه زمانی توسعه راهکارهای BI و هزینه احتمالی نگهداری پایگاه داده یا زیرساخت ابری را باید در نظر گرفت. |
در مجموع، مقایسه Beancount+Fava با QuickBooks: Beancount شفافیت برتر (شما همه چیز را میبینید و کنترل میکنید و دادههایتان هرگز قفل نمیشوند) و انعطافپذیری بالایی ارائه میدهد. این سیستم نیاز به تلاش شخصی بیشتری دارد، بهویژه برای اتوماسیون و رابط کاربری. QuickBooks یک راهکار آماده (Plug-and-play) است که برای نیازهای کسبوکارهای کوچک بهینه شده و بهروزرسانیهای نزدیک به بلادرنگ را با حداقل تلاش کاربر فراهم میکند. با این حال، QuickBooks از بسیاری جهات یک «جعبه سیاه» است؛ شما باید به نرمافزار اعتماد کنید که دادههایتان را درست مدیریت کند و گاهی اصلاح اشتباهات یا درک چگونگی رسیدن به یک عدد خاص در آن دشوار است. بسیاری از کاربران Beancount کسانی هستند که از این جعبههای سیاه ناامید شدهاند و ترجیح میدهند راحتی را با شفافیت معاوضه کنند.
مقایسه Beancount+Fava با Power BI: این دو میتوانند مکمل یکدیگر باشند. Power BI یک سیستم حسابداری نیست بلکه برای تحلیل است. در واقع، یک ساختار پیشرفته ممکن است از Beancount برای تجمیع و اطمینان از صحت دادهها استفاده کند و سپس از Power BI برای ایجاد داشبوردهای مدیریتی از آن دادهها بهره ببرد. اگر مستقیماً مقایسه کنیم، Power BI بیشتر بر انعطافپذیری بصری و ترکیب منابع داده متمرکز است. نمودارهای Fava بر اساس نیازهای حسابداری طراحی شدهاند و برای شروع به کار نیاز به تلاش بسیار کمتری دارند (آنها به صورت خودکار روی دفترکل شما کار میکنند). اگر هدف شما صرفاً کسب بینش و تصاویر زیباست و حاضرید دادهها را از قبل آماده کنید، Power BI مناسب است. اما اگر هدف شما نگهداری دفاتر و دریافت گزارشهای تعاملی به عنوان محصول جانبی است، Fava به تنهایی کفایت میکند.
همچنین میتوان این سیستمها را با ابزارهای مدیریت مالی شخصی (مانند Mint یا YNAB) یا سیستمهای ERP مقایسه کرد. در دنیای مشاهدههای مالی بلادرنگ: Beancount+Fava مانند داشتن یک داشبورد مالی زنده، متنباز و سفارشی است، QuickBooks یک دفترداری خودکار و بسته با همگامسازی بانکی زنده است و Power BI یک پلتفرم تحلیل انعطافپذیر (غیر اختصاصی برای مالی اما قابل استفاده در آن) محسوب میشود.
یک نقلقول معروف تفاوت بین ابزارهای متنباز و تجاری را به خوبی بیان میکند: «با کمی تلاش اولیه، ابزارهای متنباز میتوانند در واقع بسیار بهتر از راهکارهای تجاری باشند و انعطافپذیری و قابلیت گسترش بسیار بیشتری را ارائه دهند.» این خلاصه این انتخاب است. QuickBooks صیقلخورده است و برای سناریوهای رایج با حداقل تلاش کار میکند، اما به محض اینکه چیزی فراتر از تواناییاش بخواهید، به دیوار برخورد میکنید. با Beancount، شما به ندرت به دیوار برخورد میکنید – شما کد منبع و دادهها را در اختیار دارید و میتوانید هر طور که نیاز است آن را گسترش دهید. هزینه آن، تمایل شما به کلنجار رفتن و شخصیسازی سیستم است.
مزایا و معایب استفاده از Fava و Beancount برای بینشهای دادهمحور
در نهایت، اجازه دهید مزایا و معایب Beancount + Fava را به عنوان راهکاری برای تحلیلهای مالی بررسی کنیم:
مزایا
-
شفافیت و اعتماد: تمام محاسبات (مجموعها، ترازها) از یک دفتر کل متنساده استخراج میشوند که خودتان میتوانید آن را بازرسی کنید. هیچ رفتار مرموزی وجود ندارد. این موضوع اعتماد زیادی به اعداد ایجاد میکند – که اگر تصمیمات خود را بر پایه آنها بنا میکنید، امری حیاتی است. این یک «حسابداری شفاف و پاک» بدون وابستگی به فروشنده (lock-in) است. شما همیشه میتوانید یک رقم گزارششده را تا تراکنشهای زیربنایی آن دنبال کنید، که این جوهرهی بینش دادهمحور است.
-
بازتولیدپذیری و ردپای حسابرسی: از آنجایی که میتوانید دفتر کل را تحت کنترل نسخه (version-control) قرار دهید، خط زمانی تغییرات را در اختیار دارید. اگر در این ماه چیزی درست به نظر نمیرسد، میتوانید تفاوتهای (diff) دفتر کل را بررسی کنید تا ببینید چه چیزی تغییر کرده است. این همچنین به این معنی است که میتوانید آزمایش کنید («اگر این هزینه را دوباره طبقهبندی کنم چه میشود؟») و به راحتی تغییرات را به حالت قبل برگردانید. کارهای دادهمحور اغلب شامل تکرار هستند و یک دفتر کل قابل حسابرسی این امر را تشویق میکند.
-
انعطافپذیری در تحلیل: شما محدود به گزارشهای پیشفرض نیستید. ترکیب پرسوجوهای BQL، اسکریپتنویسی پایتون و فیلترهای Fava به این معنی است که میتوانید تقریباً به هر سؤال مالی پاسخ دهید. میخواهید بدانید «در ۵ سال گذشته هر سال چقدر در استارباکس خرج کردهام؟» – فقط یک پرسوجو فاصله دارید. یا «میانگین متحرک هزینههای ۳ ماهه من در مقابل درآمد چیست؟» – با پایتون و کتابخانه pandas روی نتایج پرسوجو قابل اسکریپتنویسی است. این انعطافپذیری برای کسانی که دوست دارند در دادهها عمیق شوند، یک مزیت بزرگ است. کاربران حرفهای حتی افزونههایی برای محاسبه شاخصهای مالی (مانند معیارهای عملکرد سبد سهام) در داخل Fava ساختهاند. به طور خلاصه، شما میتوانید بینشهای بسیار جزئی به دست آورید که بسیاری از نرمافزارهای آماده قادر به ارائه آنها نیستند.
-
یکپارچگی و قابلیت گسترش: سیستم پلاگین Fava و ایپیآی (API) در دسترس Beancount به این معنی است که ابزارها میتوانند با نیازهای شما رشد کنند. اگر فردا نیاز به ردیابی نوع جدیدی از دارایی داشتید یا خواستید یک فید داده جدید را یکپارچه کنید، میتوانید سیستم را گسترش دهید. معماری (ورودی متنساده، خروجیهای متنوع) بسیار توسعهپذیر است. این در تضاد با سیستمهای بسته است که ممکن است مجبور شوید درخواست یک ویژگی را بدهید و منتظر بمانید.
-
تجمیع دادهها: برای افراد و حتی کسبوکارها، توانایی تجمیع تمام حسابها (چندین بانک، کارگزار و غیره) در یک سیستم بسیار قدرتمند است. بسیاری از راهکارهای تجاری شما را محدود میکنند (یا برای چندارزی بودن یا چندین نهاد هزینه اضافی دریافت میکنند). با Beancount، میتوانید همه چیز را کنار هم بیاورید. این یک نمای دادهای کلنگر (holistic) ایجاد میکند و بینشهایی را در تمام سطوح ممکن میسازد. به عنوان مثال، اگر بخواهید میتوانید تخصیص دارایی واقعی یا جریان نقدی خالص خود را در تمام بخشهای شخصی و تجاری محاسبه کنید، زیرا همه آنها فقط ورودیهای داده هستند.
-
مقرونبهصرفه بودن: این ابزار رایگان و متنباز است. برای استفاده شخصی، این یک مزیت بزرگ است (بدون حق اشتراک مانند بسیاری از اپلیکیشنهای بودجهبندی). برای استارتاپها یا سازمانهای کوچک، این صرفهجوییها میتواند قابل توجه باشد. اما فراتر از هزینه پولی، از نظر اجرا (Fava میتواند روی یک سرور کوچک اجرا شود) و انتقال (در صورت رشد نیازها، مهاجرت پرهزینهای وجود ندارد – فقط متن است) نیز کارآمد است.
-
جامعه کاربری و اشتراک دانش: جامعه حسابداری متنساده (Beancount، Ledger و غیره) بسیار همکار و صمیمی است. افراد پیکربندیها، اسکریپتهای سفارشی و نکات خود را در تالارهای گفتگو و وبلاگها به اشتراک میگذارند. این بدان معنی است که اگر نیاز خاصی داشته باشید، احتمالاً کسی قبلاً با مورد مشابهی دست و پنجه نرم کرده است. به عنوان مثال، چندین کاربر در ساخت ابزارهای واردکننده هوشمند و حتی دستهبندی با یادگیری ماشین مشارکت داشتهاند (مانند کتابخانه “smart_importer” که از scikit-learn برای دستهبندی خودکار پرداختکنندگان بر اساس دادههای گذشته استفاده میکند). با گذشت زمان، استفاده از Beancount با بهرهگیری از این ابزارهای جامعه کاربری میتواند در واقع _هوشمندتر_ شود – و در عین حفظ شفافیت، به راحتیِ نرمافزارهای تجاری نزدیک شود.
-
توانمندسازی و یادگیری: استفاده از Fava/Beancount شما را مجبور میکند در سطحی عمیقتر با دادههای مالی خود درگیر شوید. بسیاری از کاربران گزارش میدهند که از طریق این سیستم، درک بسیار بهتری از امور مالی خود نسبت به اپلیکیشنهای خودکار پیدا کردهاند. این کمی شبیه تفاوت بین پختن غذای خودتان در مقابل گرفتن فستفود است – تلاش بیشتری میطلبد، اما دقیقاً میدانید چه چیزی در آن است و در درازمدت میتواند سالمتر باشد. برای بینشهای دادهمحور، این «مالکیت» فرآیند میتواند به کشفیات معنادارتری منجر شود، زیرا میتوانید به راحتی نحوه نگاه خود به دادهها را قالببندی و بازبینی کنید.
معایب
-
نصب اولیه و منحنی یادگیری: بیایید صادق باشیم – Beancount و Fava به اندازه ابزارهایی مثل QuickBooks یا Mint ساده و آماده اجرا نیستند. شما باید اصول حسابداری دوطرفه (اگر نمیدانید)، سینتکس فایل Beancount و احتمالاً کمی پایتون (اگر میخواهید سفارشیسازی بالایی داشته باشید) را یاد بگیرید. این سرمایهگذاری اولیه میتواند یک مانع باشد. برای کاربران غیرفنی، ممکن است دلهرهآور باشد (اگرچه رابط کاربری Fava پس از راهاندازی با ارائه تجربهای دوستانهتر کمک زیادی میکند). در مقابل، بسیاری از ابزارهای تجاری مفاهیم حسابداری را پشت رابطهای کاربری سادهتر پنهان میکنند ( که میتواند هم مزیت و هم عیب باشد).
-
عدم همگامسازی داخلی با بانک: طبق طراحی، این ابزار به طور خودکار به ایپیآیهای بانکی متصل نمیشود (که اغلب انحصاری هستند یا نیاز به قرارداد دارند). بنابراین شما یا باید صورتحسابها را به صورت دستی دانلود کنید یا اتوماسیون خود را (از طریق اسکریپتهای پایتون یا خدماتی مانند Plaid که اغلب هزینه دارند) راهاندازی کنید. برای کسانی که به فیدهای بانکی که «فقط کار میکنند» عادت دارند، این میتواند مانند یک قدم به عقب باشد. همانطور که یکی از کاربران اشاره کرد، هنگام امتحان Beancount او «راه معقولی برای دریافت فیدهای بانکی پیدا نکرد» – این میتواند کلافهکننده باشد مگر اینکه مایل به کدنویسی یا استفاده از راهکارهای شخص ثالث باشید.
-
بلادرنگ بودن یعنی زمان شما: دستیابی به پاسخگویی بلادرنگ امکانپذیر است اما به صورت پیشفرض وجود ندارد. شما باید cron jobها یا تریگرها را همانطور که توضیح داده شد پیکربندی کنید. اگر چیزی خراب شود (مثلاً یک بانک فرمت CSV خود را تغییر دهد)، باید واردکننده (importer) خود را اصلاح کنید. با سرویسی مانند QuickBooks، فروشنده با چنین تغییراتی برخورد میکند. در اصل، شما پشتیبان IT خودتان هستید. این همان موازنه کلاسیک دنیای متنباز است. برای یک علاقمند، این موضوع ممکن است خوب یا حتی سرگرمکننده باشد؛ اما برای یک صاحب کسبوکار کوچک و پرمشغله، میتواند آزاردهنده باشد.
-
محدودیتهای مقیاسپذیری و عملکرد: برای مجموعهدادههای بسیار بزرگ (چندین سال تراکنشهای دقیق)، Beancount ممکن است کند شود. به طور کلی کارآمد است (افراد دهها هزار ورودی بدون مشکل دارند). اما همانطور که در ترد HN مشاهده شد، یک کاربر مجبور شد پس از ۳ سال برای حفظ سرعت پرسوجوها، دفترهای خود را سالانه «ببندد». کد Beancount نسخه ۲ با پایتون است و میتواند برای دادههای عظیم کمی کند باشد، اگرچه نسخه ۳ (که با هسته C++ در حال توسعه است) این مورد را بهبود میبخشد. راهکارهایی برای کاهش این مشکل وجود دارد (تقسیم فایلها، استفاده از Beanpost برای انتقال به پایگاهداده و غیره)، اما این یک مورد قابل تامل است. QuickBooks احتمالاً مقیاسبندی داخلی دارد و اکثر ابزارهای هوش تجاری (BI) روی پایگاهدادههایی ساخته شدهاند که برای دادههای بزرگ طراحی شدهاند – بنابراین ممکن است با مجموعهدادههای بزرگ با ظرافت بیشتری برخورد کنند.
-
کمبود ویژگیها (نسبت به نرمافزارهای اختصاصی): تمرکز Beancount + Fava بر دفترداری و تحلیل است. این ابزار فاقد برخی ویژگیهای جانبی است: به عنوان مثال، پردازش حقوق و دستمزد، صدور فاکتور (بدون اسکریپتنویسی سفارشی)، فرمهای آماده مالیاتی یکپارچه و غیره در آن وجود ندارد. اگر هدف شما مدیریت مالی جامع است، ممکن است نیاز باشد آن را با ابزارهای دیگر تکمیل کنید. به عنوان مثال، ممکن است حقوق و دستمزد را از طریق یک سرویس مجزا انجام دهید و فقط اسناد روزنامه را وارد کنید. این روش کار میکند، اما به اندازه چیزی مثل یک ERP که همه کارها را در یک سیستم انجام میدهد، یکپارچه نیست. برای امور مالی شخصی، Beancount مواردی مانند برنامهریزهای پرداخت بدهی داخلی یا بودجهبندی پاکتی ندارد (اگرچه میتوانید اینها را شبیهسازی کنید). انتظار میرود شما بینشها را استخراج کرده و سپس تصمیمگیری کنید، نه اینکه نرمافزار توصیههای تجویزی یا ماژولهای برنامهریزی ارائه دهد.
-
رابط کاربری و صیقلخوردگی: اگرچه Fava بسیار خوب است، اما به اندازه برخی محصولات تجاری صیقلخورده یا راهنمامحور نیست. هیچ «جادوگر» (wizard) یا راهنمای گامبهگامی برای هدایت شما در راهاندازی یا اطمینان از عدم اشتباه وجود ندارد. ممکن است مجبور شوید برای دانستن نحوه انجام کاری، مستندات را بخوانید. همچنین برخی ویژگیهای رابط کاربری که ممکن است انتظار داشته باشید (دستهبندی با کشیدن و رها کردن، بازگشت به عقب چندمرحلهای، اعلانهای موبایلی و غیره) در آن وجود ندارد. رابط کاربری Fava همیشه در حال بهبود است (با مشارکتهای کاربران)، اما توسط یک جامعه کوچک ساخته شده است. اگر به رابطهای کاربری مدرن و براق SaaS عادت دارید، Fava ممکن است کمی کاربردی و ساده به نظر برسد (هرچند برخی سادگی تمیز آن را ترجیح میدهند). در موبایل، Fava کار میکند (مخصوصاً برای حالت فقطخواندنی) اما برای صفحهنمایشهای کوچک کاملاً بهینه نشده است؛ در حالی که برای مثال QuickBooks اپلیکیشنهای اختصاصی موبایل دارد.
-
اتکا به جامعه کاربری/نگهدارنده: مارتین بلیس (نویسنده Beancount) و مشارکتکنندگان، Beancount را نگهداری میکنند و دیگران Fava را. توسعه میتواند پراکنده باشد (که در دنیای متنباز عادی است). اگرچه نرمافزار در حال حاضر بسیار قابل استفاده است، اما اگر به ویژگی جدیدی نیاز داشته باشید یا با باگی مواجه شوید، ممکن است مجبور شوید یا خودتان آن را رفع کنید یا منتظر بمانید. با یک محصول پولی، شما پشتیبانی برای تماس دارید (کیفیت متفاوت است، اما حداقل وجود دارد). با این حال، جامعه کاربری معمولاً از طریق لیستهای ایمیلی یا ایشوهای گیتهاب بسیار کمککننده است.
-
نیاز به دانش حسابداری: به خصوص برای استفاده تجاری، باید بدانید چه کار میکنید. Beancount جلوی شما را برای ثبت ورودی که از نظر حسابداری «غلط» است نمیگیرد (به جز در موارد عدم تراز یا تراکنشهای نامنطبق). در مقابل، QuickBooks دارای حفاظهایی است (و همچنین پیچیدگیهای پنهانی مانند ردیابی خودکار درآمدهای معوق و غیره، در صورت فعالسازی). اگر در Beancount دقت نکنید، ممکن است در یک حساب تعهدی (accrual) اشتباه کنید و تا زمانی که متوجه مشکلی در گزارش نشوید، متوجه آن نشوید. در اصل، Beancount فرض میکند که شما یا اصول حسابداری را بلدید یا مایل به یادگیری هستید. این موضوع برای برخی یک مزیت است (مجبور کردن به انجام درست کار)، اما اگر به دنبال سیستمی هستید که نیاز به فکر کردن نداشته باشد، یک عیب محسوب میشود.
برای خلاصه کردن مزایا و معایب: Beancount + Fava کنترل و سازگاری بینظیری را برای کسانی که میخواهند عمیقاً با دادههای مالی خود درگیر شوند، فراهم میکند و آن را به ابزاری قدرتمند برای بینشهای دادهمحور تبدیل میکند. این ابزار دفترهای شما را به یک مجموعهداده قابل پرسوجو و گزارشهای شما را به یک وباپلیکیشن توسعهپذیر تبدیل میکند. بهای این قدرت، تلاشی است که برای راهاندازی و نگهداری آن صرف میکنید و نیاز به این است که تا حدی در مدیریت سیستم خود خودکفا باشید. در تضاد با چیزی مانند QuickBooks یا یک مجموعه BI که راهنمایی بیشتری میکنند و ویژگیهای خاصی را به طور خودکار ارائه میدهند، Beancount به شما یک جعبهابزار میدهد. اگر ذهنیت تحلیلی دارید، این جعبهابزار میتواند به طرز شگفتآوری رهاییبخش باشد – شما میتوانید بینشهایی استخراج کنید که گزارشهای آماده ممکن است هرگز نشان ندهند. همانطور که یکی از کاربرانی که دفتر کل Beancount خود را طی سالها خودکار کرده بود نوشت: «ابزارهای متنباز (مانند Beancount) تمام نیازهای من را [به صورت آماده] برآورده نمیکنند... من وسواس زیادی برای خودکارسازی همه چیز دارم... من آنچه را که نیاز داشتم ساختم». این جوهرهی این رویکرد است: اگر مایل هستید آنچه را که نیاز دارید بسازید، هر چقدر هم کوچک یا بزرگ، Fava/Beancount از شما پشتیبانی میکند و هرگز دادههایتان را از شما پنهان نمیکند. برای یک ذهنیت دادهمحور، این یک مزیت بزرگ است.
در نتیجه، استفاده از Fava و Beancount برای تحلیلهای مالی بلادرنگ، کمی شبیه به داشتن آزمایشگاه شخصی و قابل سفارشیسازی برای امور مالیتان است. شما به وضوح، انعطافپذیری و مالکیتی دست مییابید که در پلتفرمهای انحصاری به سختی یافت میشود و این موضوع آن را برای کسانی که برای این جنبهها ارزش قائل هستند و مایلند برای به دست آوردن آنها کمی از راحتیِ آماده صرفنظر کنند، ایدهآل میکند. چشمانداز مدرن حتی رویکردهای ترکیبی را نیز نشان میدهد – برای مثال، برخی ممکن است از یک ابزار تجاری استفاده کنند اما به صورت دورهای برای تحلیلهای عمیقتر دادهها را به Beancount صادر کنند، یا برعکس از Beancount به عنوان سیستم اصلی و از یک ابزار BI برای ارائه گزارشها استفاده کنند. با دانش حاصل از این بررسی، میتوان تصمیمی آگاهانه در مورد اینکه آیا Fava + Beancount با نیازهایشان همخوانی دارد یا خیر، گرفت و در صورت مثبت بودن، با اطمینان برای بهرهگیری از قابلیتهای آن جهت دستیابی به بینشهای مالی غنی و بلادرنگ اقدام کرد.
منابع:
- بلیس، م. (۲۰۲۰). مستندات Beancount – اصول طراحی و کاربرد. [آنلاین]. در دسترس در: beancount.github.io
- اومایر، د.، گرستمایر، آ. (۲۰۲۵). مستندات Fava و مخزن گیتهاب. [آنلاین]. در دسترس در: beancount.github.io/fava/ و github.com/beancount/fava
- LowEndBox. (۲۰۲۵). «Beancount: حسابداری دوطرفه سبک و متنباز... از خط فرمان!» آموزش LowEndBox.
- فانگ-پن لین. (۲۰۲۴). «دفترهای Beancount من بعد از ۳ سال ۹۵٪ خودکار هستند.» پست وبلاگ شخصی.
- گروههای گوگل – انجمن Beancount. (۲۰۲۳). بحث در مورد یکپارچگی با Grafana (جاش دی. و آندریاس جی.)
- صفحه بازاریابی QuickBooks. «فیدهای بانکی – تمام تراکنشهای خود را در یک لحظه درک کنید.» Intuit QuickBooks.
- وات، آ. (۲۰۲۳). «Beancount برای امور مالی شخصی.» وبلاگ الکس وات.
- ردیت – r/plaintextaccounting. بحثهای مختلف (۲۰۲۱-۲۰۲۳) در مورد استفاده تجاری از Beancount و بصریسازی دفتر کل.
- مستندات افزونه Fava – راهنما: افزونهها.
- مخزن fava-dashboards در گیتهاب – پلاگین داشبوردهای سفارشی آندریاس گرستمایر.
- لیست Awesome Beancount – منابع منتخب جامعه کاربری برای Beancount.