مقدمه
Beancount یک سیستم حسابداری دوبل متنباز است که از فایلهای متنی ساده بهعنوان دفتر استفاده میکند. این سیستم بر سادگی، شفافیت و انعطافپذیری در پیگیری امور مالی تأکید دارد. Fava یک رابط کاربری وب قدرتمند برای Beancount است که یک رابط تعاملی برای مشاهده گزارشها، مصورسازیها و مدیریت دفتر شما فراهم میکند. در این گزارش، قابلیتهای اصلی Beancount و Fava را بررسی میکنیم و نشان میدهیم چگونه میتوان با این ابزارها به تحلیلهای مالی بلادرنگ یا نزدیک به بلادرنگ دست یافت. ما نکات پیکربندی برای خودکارسازی و بهروزرسانی دادهها، ویژگیهای مصورسازی Fava (برای نمایش لحظهای جریان نقدی و شناسایی روندها)، یکپارچهسازی با داشبوردهای خارجی (Grafana، Metabase و غیره)، نمونههایی از داشبوردها و افزونههای سفارشی، موارد استفاده در امور مالی شخصی و کسبوکارهای کوچک، مقایسه با سایر پلتفرمها (Power BI، QuickBooks) و مزایا و معایب استفاده از Fava+Beancount برای بینشهای دادهمحور را پوشش میدهیم.
یک دفتر نمونه زنده را کاوش کنید:

قابلیتهای اصلی Beancount و Fava
Beancount (موتور حسابداری متن ساده)
- دفتر دوبل در متن ساده: Beancount تراکنشها را در یک فایل متنی
.beancount(یا چند فایل که با هم ترکیب شدهاند) ذخیره میکند. هر تراکنش باید در سراسر حسابها متوازن باشد (جمع بدهکاران = جمع بستانکاران) که یکپارچگی حسابداری را تضمین میکند. فرمت متن ساده به این معناست که دادههای شما برای انسان قابل خواندن، قابل کنترل نسخه و بدون قفل شدن در یک فروشنده خاص است. - حسابهای سلسلهمراتبی و انعطافپذیر: میتوانید هر حسابی را تعریف کنید (مثلاً
Assets:Bank:Checking،Expenses:Food:Coffee) بهصورت سلسلهمراتبی. Beancount در مورد نمودار حسابهای شما نظر خاصی ندارد، بنابراین برای امور مالی شخصی، دفاتر کسبوکار کوچک، سرمایهگذاریها و غیره کار میکند – این "انعطافپذیر است: برای امور مالی شخصی، حسابداری کسبوکار کوچک، رمزارز، سرمایهگذاری در سهام و بیشتر کار میکند." - چند ارزی و چند کالایی: Beancount از چند ارز و کالا (مثلاً سهام، رمزارز) بهصورت درجهیک پشتیبانی میکند. میتوانید تراکنشها را به ارزهای مختلف ثبت کنید، نرخهای ارز را تعریف کنید (دستورهای قیمت) و پایههای بهای تمامشده را پیگیری کنید. اگر دادههای قیمت ارائه شود، میتواند گزارشها را "به بهای تمامشده" یا "به ارزش بازار" تولید کند. این امر آن را برای پرتفویها و امور مالی بینالمللی مناسب میسازد.
- بررسیها و توازنهای خودکار: این سیستم از تأییدهای مانده پشتیبانی میکند (میتوانید اعلام کنید که مانده یک حساب در یک تاریخ باید چه باشد و Beancount در صورت عدم تطابق خطا میدهد) و تراکنشهای مانده برای بستن دفاتر. همچنین از ورودیهای بازگشایی/بستن حقوق صاحبان سهام و محاسبه سود انباشته برای بستن دورهها پشتیبانی میکند. اینها به تضمین سازگاری دفاتر و کشف زودهنگام خطاها کمک میکنند.
- موتور قدرتمند پرسوجو و گزارشگیری: Beancount با یک زبان پرسوجو به نام BQL (زبان پرسوجوی Beancount) ارائه میشود. از
bea queryبرای BQL در ترمینال و ازbea reportبرای صورتهای استاندارد استفاده کنید؛ شروع سریع CLI را نصب کنید نه اسکریپتهای کنسول قدیمی بالادستی. میتوانید دفتر را برای گزارشهای سفارشی پرسوجو کنید (مثلاً فهرست هزینهها بر اساس دریافتکننده، جریان نقدی برای یک دوره) – اساساً دفتر را مانند یک پایگاه داده رفتار میکنید. حتی با هزاران تراکنش سریع باقی میماند. خروجی CSV باbea query -f csv -o report.csv "BQL"بگیرید وBQLرا با پرسوجوی خود جایگزین کنید. برای مثالهای کامل به قالبهای گزارشگیری مالی مراجعه کنید. - قابلیت توسعه از طریق افزونهها: Beancount به زبان Python نوشته شده و به افزونههای سفارشی اجازه میدهد تا عملکرد آن را گسترش دهند. افزونهها میتوانند قوانین یا محاسبات اضافی را هنگام پردازش فایل اعمال کنند. (برای مثال، افزونههایی برای مدیریت بستههای مالیاتی یا اطمینان از عدم فقدان بهای تمامشده در خریدها وجود دارد.) سیستم افزونه و API پایتون به کاربران پیشرفته اجازه میدهد رفتارهای سفارشی را اسکریپتنویسی کنند یا Beancount را با سیستمهای دیگر یکپارچه کنند.
- واردکنندهها برای دادههای خارجی: یک ویژگی عملی کلیدی، چارچوب واردکننده در بسته جداگانه
beangulpاست (در Beancount 3.2.3 ماژولbeancount.ingestوجود ندارد). یک کلاس واردکننده مینویسید که ازbeangulp.Importerارثبری میکند وidentify،extractوaccountرا پیادهسازی میکند. این کلاس یک فایل دانلودشده (CSV، OFX، صورتحسابهای PDF و غیره) را تجزیه کرده و به ورودیهای Beancount تبدیل میکند. این برای خودکارسازی ضروری است (بعداً بیشتر توضیح میدهیم). - قابل حسابرسی و سازگار با کنترل نسخه: چون متن ساده است، میتوانید دفتر خود را در Git یا سایر سیستمهای کنترل نسخه نگه دارید. هر تغییر شفاف است و تاریخچه کاملی از ویرایشها دارید. این کار حسابرسی یا بررسی تغییرات را ساده میکند (بسیاری از کاربران تغییرات هر روز را در یک مخزن Git ثبت میکنند که یک لاگ دستنخورده از تمام ورودیهای مالی فراهم میکند). این سطح از شفافیت یک تمایز عمده از نرمافزارهای حسابداری بسته است – "بدون قفل شدن در SaaS — فقط حسابداری تمیز و شفاف با گزارشگیری قدرتمند."
فاوا (رابط وب برای Beancount)
- رابط وب تعاملی: Fava یک سرور وب محلی فراهم میکند که دفتر Beancount شما را به یک رابط کاربری غنی تبدیل میکند. گزارشهای اصلی (صورت سود و زیان، ترازنامه و غیره)، دفاتر حسابها و روزنامهها را در مرورگر با کنترلهای تعاملی نمایش میدهد. این رابط در مقایسه با خط فرمان پویا و کاربرپسند است. آن را با یک دستور ساده
fava yourfile.beancountشروع میکنید و یک اپلیکیشن وب برای دفاتر خود دریافت میکنید. - نمودارها و گرافهای داخلی: Fava نمودارهایی برای کمک به مصورسازی دادههای شما تولید میکند. برای مثال، شامل یک نمودار خطی ارزش خالص در طول زمان، نمودارهای میلهای برای درآمد در مقابل هزینه بهصورت ماهانه و نمودارهای دایرهای/درختی برای تفکیک هزینهها است. این مصورسازیها با دادههای شما بهروز میشوند و از نماهای مختلف (مثلاً "به بهای تمامشده" در مقابل "ارزش بازار" برای سرمایهگذاریها) پشتیبانی میکنند. بعداً این قابلیتهای مصورسازی را با جزئیات بررسی خواهیم کرد.
- فیلتر و جستجو: در بالای صفحات Fava، یک نوار فیلتر به شما اجازه میدهد دادههای خود را بهصورت بلادرنگ برش و تحلیل کنید. میتوانید بر اساس زمان (مثلاً سال، فصل، ماه)، بر اساس regex حساب، بر اساس دریافتکننده، بر اساس شرح یا بر اساس برچسبها/لینکها فیلتر کنید. این کار بازرسی دادههای بلادرنگ را آسان میکند – مثلاً بهسرعت فیلتر کنید به "Tag=Travel" و "Year=2025" تا تمام هزینههای سفر در سال 2025 را با مجموعها ببینید. این رابط از پرسوجوهای پیچیده از طریق این نوار فیلتر یا از طریق صفحه پرسوجو (که میتوانید مستقیماً پرسوجوهای BQL را اجرا کنید) پشتیبانی میکند.
- پشتیبانی از چند فایل و ادغام: Fava میتواند چندین فایل Beancount را همزمان بارگذاری کند (مفید اگر دفاتر خود را جدا کردهاید) و بین آنها جابهجا شود. همچنین میتواند در صورت نیاز آنها را ادغام کند (برای مثال، دفاتر شخصی و تجاری که با هم مشاهده میشوند).
- ورود و ویرایش دادهها: بهطور منحصربهفرد، Fava فقط خواندنی نیست – دارای یک ویرایشگر و فرم ورود تراکنش است. میتوانید تراکنشهای جدید را از طریق یک فرم وب اضافه کنید (ورودی را در فایل .beancount شما درج میکند). همچنین میتوانید فایل منبع را از Fava در یک ویرایشگر خارجی باز کنید. Fava از میانبرهای صفحهکلید برای کاربران حرفهای نیز پشتیبانی میکند. این Fava را به یک سیستم حسابداری سبک تبدیل میکند که میتوانید دادهها را از همان رابط وارد و مشاهده کنید.
- گزارشها و کاوش در حسابها: Fava گزارشهای حسابداری استاندارد را ارائه میدهد: صورت سود و زیان، ترازنامه، تراز آزمایشی و فهرست داراییها برای سرمایهگذاریها. ترازنامه و صورت سود و زیان تعاملی هستند – میتوانید روی یک حساب کلیک کنید تا به جزئیات آن بروید، یا بین نمایش به بهای تمامشده در مقابل ارزش بازار برای داراییها جابهجا شوید. Fava همچنین "سودهای محققنشده" را برای سرمایهگذاریها در صورت وجود دادههای قیمت نشان میدهد. نمای روزنامه از تمام ورودیها تولید میکند و امکان فیلتر کردن آن روزنامه بر اساس معیارهای مختلف را فراهم میکند (عالی برای یافتن تراکنشهای خاص).
- مدیریت اسناد: اگر رسیدها یا صورتحسابها را پیوست میکنید، Fava به سازماندهی آنها کمک میکند. Beancount مفهوم پوشه اسناد را دارد و Fava اجازه میدهد فایلها را روی حسابها یا تراکنشها بکشید و رها کنید – آنها را ذخیره کرده و یک ورودی سند در دفتر شما اضافه میکند. این برای نگهداشتن اسناد پشتیبان مرتبط با دادههای دفتر شما مفید است.
- سفارشیسازی از طریق افزونهها: Fava را میتوان با افزونههایی (نوشتهشده به Python) برای افزودن گزارشها یا عملکردهای جدید گسترش داد. برخی افزونهها همراه هستند (مثلاً یک گزارش فهرست پرتفوی برای سرمایهگذاریها). بعداً افزونههای سفارشی را بحث خواهیم کرد، اما اساساً طراحی Fava اجازه میدهد صفحات جدید و حتی JavaScript سفارشی از طریق API افزونه آن تزریق شود. این بدان معناست که اگر یک تحلیل یا داشبورد خاص داخلی نیست، یک کاربر پیشرفته میتواند آن را اضافه کند.
- کارایی: Fava کارآمد است – دادهها را در حافظه بارگذاری مجدد میکند و صفحات را سریع ارائه میدهد. تجزیه زیربنایی Beancount سریع است، بنابراین دفاتر شخصی معمولی در یک یا دو ثانیه بارگذاری میشوند. در عمل، Fava میتواند دفاتر شخصی چندین ساله را مدیریت کند، هرچند فایلهای بسیار بزرگ (دهها هزار تراکنش) ممکن است از بهینهسازی بهرهمند شوند (مثلاً آرشیو کردن ورودیهای قدیمی).
- دسترسی وب و تحرک: با اجرای Fava روی یک سرور یا حتی لپتاپ خود، میتوانید از هر مرورگری به امور مالی خود دسترسی داشته باشید. برخی کاربران Fava را روی یک سرور خصوصی یا Raspberry Pi میزبانی میکنند تا بتوانند در حین حرکت امور مالی خود را بررسی کنند (احتمالاً با محافظت در پشت رمز عبور یا VPN چون Fava احراز هویت داخلی ندارد). این اساساً یک "اپلیکیشن وب" خودمیزبان برای امور مالی شما فراهم میکند، بدون دادن دادههای شما به شخص ثالث.
بهطور خلاصه، Beancount یک پایه مستحکم برای حسابداری شفاف و متنی با قوانین دقیق دوبل و پشتیبانی چند ارزی فراهم میکند. Fava با ارائه یک رابط قابل دسترس با بینشهای فوری (گزارشها، نمودارها) و توانایی تعامل با دادههای شما بر آن بنا میشود. با هم، آنها یک سیستم حسابداری و تحلیلی بسیار انعطافپذیر تشکیل میدهند که شما از ابتدا تا انتها آن را کنترل میکنید.
تحلیلهای زمان واقعی (یا نزدیکبهزمان واقعی) با Beancount و Fava
دستیابی به تحلیل بلادرنگ یا نزدیک به بلادرنگ با Beancount و Fava شامل خودکارسازی جریان دادهها به دفتر شما و اطمینان از نمایش اطلاعات بهروز توسط ابزارها است. بهطور پیشفرض، Beancount یک فرآیند دستهای است (ورودیها را به فایل اضافه میکنید، سپس گزارشها را مشاهده میکنید) و Fava تغییرات را تشخیص داده و نیاز به بارگذاری مجدد دارد. با این حال، با تنظیمات مناسب میتوانید بهروزرسانیها را ساده کنید تا تراکنشها و تغییرات جدید تقریباً فوری ظاهر شوند.
تشخیص تغییر فایل: Fava فایل دفتر را برای تغییرات نظارت میکند. اگر فایل .beancount (یا فایلهای شامل) را در یک ویرایشگر ویرایش کنید، صفحه یک اعلان "File change detected. Click to reload." نشان میدهد. Fava نقطه پایانی get_changed خود را نظرسنجی میکند. وقتی ناظر تغییری را گزارش میدهد، Fava دفتر را در سمت سرور بارگذاری مجدد میکند و اعلان یک کلیک برای بهروزرسانی نما ارائه میدهد. در عمل، این بارگذاری مجدد بسیار سریع است (معمولاً کمتر از یک ثانیه برای دفاتر معمولی). این بدان معناست که Fava میتواند بهعنوان یک داشبورد زنده عمل کند اگر فایل دفتر شما مکرراً بهروزرسانی شود. بهطور پیشفرض منتظر کلیک شما میماند تا نمای شما را مختل نکند.
خط لوله ورود/بهروزرسانی مداوم: برای دریافت دادههای بلادرنگ، باید افزودن تراکنشها به فایل Beancount را خودکار کنید. چند استراتژی رایج وجود دارد:
-
کارهای ورود زمانبندیشده (Cron): بسیاری از کاربران یک کار cron (یا وظیفه زمانبندیشده) تنظیم میکنند تا تراکنشهای جدید را بهصورت دورهای از مؤسسات مالی دریافت کنند (مثلاً هر شب یا هر ساعت) و به دفتر اضافه کنند. برای مثال، ممکن است یک واردکننده
beangulpرا روی آخرین دانلود بانکی (CSV یا OFX) اجرا کنید. یک کاربر Beancount یک خط لوله خودکارسازی ساخت که در آن دفاترش خود را بهروزرسانی میکنند: "دیدن اینکه دفتر حسابداریام بدون دست زدن من در یک فرمت باز خود را بهروزرسانی میکند، لذت خالصی به من میدهد". این با اتصال به APIهای بانکی و زمانبندی بهروزرسانیهای منظم به دست آمد. یک اسکریپت Python سفارشی با استفاده از APIهای بانکی (مثلاً Plaid) میتواند طبق برنامه اجرا شود و ورودیهای جدید را در دفتر بنویسد. هر اجرا را باbea checkقبل از دست زدن به فایل اصلی تأیید کنید. پس از هر ورود زمانبندیشده، اگر Fava در حال اجراست، میتوانید بهسادگی Fava را بهروزرسانی کنید تا دادههای جدید را ببینید. -
ناظران فایل و محرکها: بهجای برنامههای زمانی، میتوانید از ناظران فایل برای واکنش به رویدادها استفاده کنید. برای مثال، اگر بانک شما میتواند روزانه صورتحساب را ایمیل کند یا شما یک CSV را در یک پوشه قرار دهید، یک اسکریپت میتواند آن فایل را تشخیص دهد (با استفاده از
inotifyدر لینوکس یا مشابه) و بلافاصله روال ورود را اجرا کند، سپس به Fava سیگنال بارگذاری مجدد دهد. در حالی که Fava هنوز از ارسال بارگذاری مجدد زنده به مرورگر پشتیبانی نمیکند، حداقل دادهها بهروزرسانی میشوند تا دفعه بعد که صفحه را بررسی میکنید یا روی بارگذاری مجدد کلیک میکنید، بهروز باشد. برخی پروژههای جامعه فراتر میروند: برای ledger (پسرعموی Beancount)، یک کاربر یک سرور کوچک ساخت که دادههای ledger را در زمان واقعی به Grafana ارائه میداد و نشان میداد که رویکرد مشابهی میتواند با Beancount اتخاذ شود – اساساً یک دیمن بسازید که دادهها را بهطور مداوم به داشبوردهای شما تغذیه کند. -
یکپارچهسازی مستقیم API: بهجای عبور از فایلها، کاربران پیشرفته ممکن است مستقیماً به APIهای بانکی (مانند Plaid یا APIهای بانکداری باز منطقهای) متصل شوند تا تراکنشها را مکرراً دریافت کنند. یک فرد باانگیزه میتواند ورودیهای "زنده" را در یک حلقه اسکریپتنویسی کند (با محدودیت نرخ مناسب) – بهطور مؤثر هر چند دقیقه یکبار بانک را برای دادههای جدید نظرسنجی کند. هیچ چیز مانع شما نمیشود که "با API Plaid ثبتنام کنید و همان [خودکارسازی] را بهصورت محلی انجام دهید". هر تراکنش جدید میتواند به محض رسیدن به فایل Beancount اضافه شود. با این رویکرد، Fava واقعاً به یک داشبورد بلادرنگ برای حسابهای شما تبدیل میشود که با فید بهروز در اپلیکیشنهای تجاری رقابت میکند.
بهروزرسانی دادهها در Fava: وقتی دادههای شما بهروزرسانی میشوند، نمایش آنها در Fava ساده است: یک بارگذاری مجدد مرورگر (F5) یا کلیک روی اعلان بارگذاری مجدد آخرین وضعیت دفتر را بارگذاری میکند. توجه داشته باشید که fava --debug تغییرات دفتر را به مرورگر ارسال نمیکند. متن راهنمای آن "Turn on debugging" است. این دستور اشکالزدا Werkzeug و بارگذار مجدد کد را برای کد خود Fava اجرا میکند و بارگذاری خودکار قالب Jinja را فعال میکند. این کد سرور و قالبهای صفحه را در طول توسعه افزونه بارگذاری مجدد میکند. این به ناظر فایلی که تغییرات دفتر را تشخیص میدهد مربوط نیست. بهطور جایگزین، اگر یک فرانتاند سفارشی میسازید، میتوانید آن را وادار کنید که نقطه پایانی get_changed Fava را نظرسنجی کند و وقتی دادههای جدیدی را گزارش داد، بهروزرسانی شود.
محاسبات فوری: تجزیه سریع Beancount به این معناست که حتی اگر فایل دفتر خود را هر چند دقیقه بهروزرسانی کنید، زمان چرخش از دریافت داده → بهروزرسانی فایل → بارگذاری مجدد Fava سریع است. برای مثال، یک کاربر اشاره میکند که بارگذاری مجدد Fava پس از ویرایش فایل "تقریباً نامحسوس است... قطعاً کمتر از یک ثانیه" برای دفاتر با اندازه معقول. بنابراین، میتوانید یک پنجره Fava را باز نگه دارید و بهصورت دورهای بهروزرسانی کنید تا یک داشبورد زنده را شبیهسازی کنید. (برای یک تجربه واقعاً زنده، میتوان یک اسکریپت کوچک برای بهروزرسانی خودکار مرورگر ساخت یا از ویژگی بهروزرسانی مرورگر هر N ثانیه استفاده کرد.)
تطبیق و هشدارها: برای اعتماد به دادههای بلادرنگ، میخواهید ماندهها را مکرراً تطبیق دهید. Beancount این کار را با تأییدهای مانده و یک نشانگر "بهروز" آسان میکند. در واقع، Fava حسابها را سبز، زرد یا قرمز رنگآمیزی میکند وقتی دستور open دارای فراداده fava-uptodate-indication باشد. رنگ نشان میدهد که آیا بررسیهای اخیر مانده آخرین ورودیهای حساب را پوشش میدهند. این میتواند برای دیدن سریع اینکه آیا مانده یک حساب در دفتر با آخرین صورتحساب بانک مطابقت دارد یا خیر استفاده شود. در یک تنظیمات نزدیک به بلادرنگ، ممکن است بررسیهای روزانه مانده را خودکار کنید (بنابراین هر صبح، دفتر مانده بسته دیروز از بانک برای هر حساب را دارد). نشانگر Fava سپس به شما میگوید که آیا ورود خودکار شما چیزی را از دست داده یا اختلافی وجود دارد، که اطمینان میدهد دادههای "زنده" که میبینید دقیق هستند.
نمونه خودکارسازی: فرض کنید بهروزرسانیهای جریان نقدی روزانه میخواهید. میتوانید یک کار cron تنظیم کنید که هر شب ساعت 3 صبح اجرا شود: یک اسکریپت Python را اجرا میکند که از API بانک شما برای دریافت تراکنشهای روز گذشته استفاده میکند، آنها را در import_today.beancount مینویسد و سپس آن فایل را به دفتر اصلی شما اضافه میکند. همچنین یک تأیید مانده برای پایان روز مینویسد. وقتی بیدار میشوید، Fava را باز میکنید – تمام تراکنشها تا دیروز را نشان میدهد و درآمد/هزینههای ماه جاری را بهروزرسانیشده میبینید. اگر در طول روز خرجی میکنید، میتوانید آن را بهصورت دستی اضافه کنید (برای مثال، از طریق فرم تراکنش جدید Fava روی تلفن خود) یا منتظر ورود شبانه بمانید. این رویکرد ترکیبی (عمدتاً خودکار، با امکان افزودن دستی موردی) تصویری نزدیک به بلادرنگ ارائه میدهد. رویکرد دیگر این است که صفحه روزنامه Fava را باز نگه دارید و از آن بهعنوان دفتر استفاده کنید: همانطور که خرج میکنید، تراکنش را سریع ثبت میکنید (مانند ورود در یک دفترچه چک) – سپس شما فید بلادرنگ هستید. این دستیتر است، اما برخی کاربران از آگاهی که به ارمغان میآورد لذت میبرند. برای بهروزرسانیهای واقعاً جریانی بدون مراحل دستی، باید در اسکریپتنویسی سرمایهگذاری کنید و احتمالاً از APIهای شخص ثالث همانطور که بحث شد استفاده کنید.
بهطور خلاصه، با ترکیب خودکارسازی ورود Beancount با بهروزرسانی سریع Fava، میتوانید دادههای مالی نزدیک به بلادرنگ دریافت کنید. ممکن است رسیدن به همان سطح فید زنده مانند سرویسی مثل QuickBooks (که بهطور خودکار فیدهای بانکی را دریافت میکند) "بهسادگی فشار دکمه" نباشد، اما ممکن است – و مهمتر از همه، کنترل کامل و شفافیت فرآیند را حفظ میکنید. همانطور که یک طرفدار حسابداری متن ساده اشاره کرد، کمی تلاش در ابتدا میتواند یک سیستم خودکار به ارمغان بیاورد که "بسیار بهتر از راهحلهای تجاری است و بسیار انعطافپذیرتر و قابل توسعهتر". در بخش بعدی، خواهیم دید که چگونه قابلیتهای مصورسازی Fava به شما اجازه میدهد فوراً این دادههای بهروز را درک کنید و تراکنشهای خام را به بینش تبدیل کنید.
قیمتهای مدیریتشده برای ارزیابیهای میزبانیشده
قیمتهای زنده نقلقولهای ارزیابی پشتیبانیشده را به دفاتر میزبانیشده Beancount.io ارائه میدهد. بارگذار هنگام بارگذاری دفتر پس از پنجره بهروزرسانی پنجدقیقهای دادههای جدید را بررسی میکند؛ یک مشاهده ارائهدهنده میتواند قدیمیتر باشد. این یک فید جریانی نیست.
کنترلهای Fava که در اینجا توضیح داده شده متعلق به Fava است. افزودن یک شامل مدیریتشده آن کنترلها را به نمایشگر میزبانیشده اضافه نمیکند یا نمای بهای تمامشده را به نمای ارزش بازار تغییر نمیدهد. Fava بالادستی به فایلهای قیمت محلی نیاز دارد. یک نسخه bea سازگار میتواند آنها را صادر کند؛ برای سازگاری به راهنمای راهاندازی مراجعه کنید.
قابلیتهای تجسم در Fava (جریان نقدی، روندها، بازرسی زمان واقعی)
(GitHub - beancount/fava: Fava - web interface for Beancount) گزارش صورت سود و زیان Fava (در رابط وب) از مصورسازیهای غنی مانند نقشههای درختی (در تصویر) و نمودارهای خورشیدی برای بینش سریع در ترکیب درآمد و هزینه پشتیبانی میکند. در این نقشه درختی، هر مستطیل یک دسته هزینه را نشان میدهد که اندازه آن با مبلغش متناسب است – میتوانید فوراً ببینید که اجاره (بلوک سبز بزرگ) بر هزینهها غالب است. نوار فیلتر بالا و کنترلها (بالا سمت راست) امکان تغییر ارز، نوع نمودار و دوره زمانی (مثلاً مشاهده دادههای ماهانه) را فراهم میکنند. Fava همچنین نمودارهای خطی (مثلاً ارزش خالص در طول زمان) و نمودارهای میلهای (مثلاً درآمد در مقابل هزینه بهصورت ماهانه) را برای کمک به شناسایی روندها در دادههای مالی شما ارائه میدهد.
یکی از بزرگترین نقاط قوت Fava تبدیل فوری دادههای دفتر به گزارشهای بصری و تعاملی است. بهمحض بارگذاری دفتر، Fava نمودارهایی تولید میکند که درک جریانهای نقدی و روندها را در یک نگاه آسان میکند:
-
نقشه درختی/خورشیدی درآمد و هزینهها: در صفحه صورت سود و زیان، Fava میتواند درآمد و هزینههای شما را بهصورت یک نمودار نقشه درختی یا خورشیدی نمایش دهد. اینها برای مصورسازی "در یک نگاه" جریان نقدی عالی هستند. برای مثال، اگر هزینههای ماهانه شما بهصورت یک نقشه درختی نمایش داده شود، مساحت هر مستطیل با بزرگی هر دسته هزینه مطابقت دارد. بلوکهای بزرگ فوراً نشان میدهند که بیشتر پول شما کجا رفته است (مثلاً اجاره یا رهن، مالیات و غیره)، در حالی که بلوکهای کوچکتر هزینههای جزئی را نشان میدهند. این برای شناسایی روندها در هزینهکرد بسیار مفید است – اگر بلوک "غذا در بیرون" هر ماه بزرگتر شده، آن را بصری متوجه خواهید شد. میتوانید به نمودار خورشیدی تغییر دهید تا تفکیکهای سلسلهمراتبی را ببینید (مثلاً حلقه بیرونی ممکن است زیردستههایی مانند مواد غذایی در مقابل رستورانها در دسته غذا را نشان دهد). این نمودارها برای هر دورهای که فیلتر کردهاید (یک ماه، سال تا امروز و غیره) بهروزرسانی میشوند و مصورسازی جریان نقدی فوری برای آن دوره ارائه میدهند. یک کاربر در انجمن حسابداری متن ساده اشاره کرد: "من از نقشههای درختی درآمد و هزینه بسیار استفاده میکنم. آنها حس بصری عالی از حرکات مالی ما میدهند." – این نوع درک فوری دقیقاً همان چیزی است که نمودارهای Fava هدفگذاری میکنند.
-
ارزش خالص و مانده در طول زمان: Fava یک نمودار خطی برای ارزش خالص در طول زمان (در صفحه "ترازنامه" یا "آمار") ارائه میدهد. این نمودار مجموع داراییهای شما منهای بدهیها را در هر نقطه از زمان (روزانه، هفتگی یا ماهانه) ترسیم میکند. برای شناسایی روند بسیار ارزشمند است – میتوانید مسیر امور مالی خود را ببینید (مثلاً بهطور پیوسته صعودی، یا افت در زمانهای خاص). اگر سرمایهگذاری دارید، میتوانید بین نمایش ارزش به بهای تمامشده در مقابل بازار جابهجا شوید (اگر دادههای قیمت ثبت شده باشد) – برای مثال، ممکن است ببینید ارزش خالص شما به ارزش بازار با قیمت سهام نوسان میکند، در حالی که به بهای تمامشده هموارتر است. Fava همچنین میتواند مانده حسابها را در طول زمان نمایش دهد. اگر روی یک حساب کلیک کنید (مثلاً Assets:Bank:Checking)، صفحه حساب نموداری از تاریخچه مانده آن حساب را نشان میدهد. میتوانید فوراً بررسی کنید که حساب نقدی شما چگونه حرکت میکند – که در واقع یک نمودار جریان نقدی است (شیب خط مانده نشاندهنده جریان نقدی خالص است). اگر رو به کاهش باشد، میدانید که در آن دوره بیشتر از درآمدتان خرج میکنید. با بررسی این روندها، ممکن است الگوهایی مانند "هر دسامبر پسانداز من کاهش مییابد (هزینههای تعطیلات)" یا "سرمایهگذاریهای من این فصل بهشدت رشد کرد" را شناسایی کنید.
-
نمودارهای میلهای برای مقایسه دورهای: در نمای صورت سود و زیان، Fava برگههایی برای "سود ماهانه"، "درآمد ماهانه"، "هزینههای ماهانه" و غیره دارد. انتخاب اینها نمودارهای میلهای بهصورت ماهانه نشان میدهد. برای مثال، سود خالص ماهانه مازاد/کسری هر ماه را بهصورت یک میله نشان میدهد و مقایسه عملکرد در طول ماهها را آسان میکند. میتوانید بهسرعت موارد پرت را شناسایی کنید (مثلاً یک میله منفی بزرگ در آوریل یعنی آن ماه ضرر/هزینه غیرمعمولی داشته). بهطور مشابه، نمودار میلهای "هزینههای ماهانه" هزینهها را بهصورت انباشته یا گروهبندیشده بر اساس دسته در هر ماه نشان میدهد، بنابراین میتوانید ببینید کدام دستهها نوسان دارند. این برای شناسایی روند در طول زمان عالی است – مثلاً ممکن است متوجه شوید که هزینههای "سفر" شما هر تابستان جهش میکند، یا صورتحسابهای "خدمات" در زمستان بالاتر است. Fava اساساً برخی از قابلیتهای یک اپلیکیشن بودجهبندی (پیگیری روندها) را به شما میدهد اما با سفارشیسازی کامل (چون شما دستهها و نحوه جمعآوری آنها را تعریف میکنید).
-
فیلتر بلادرنگ و بازرسی دادهها: مصورسازیها در Fava ثابت نیستند؛ آنها در هماهنگی با فیلتر Fava کار میکنند. فرض کنید میخواهید یک سناریوی خاص را بررسی کنید: "جریانهای نقدی فصلی من فقط برای حسابهای تجاریام چگونه به نظر میرسند؟" میتوانید فیلتر زمان را روی Q1 2025 تنظیم کنید و حسابها را به سلسلهمراتب تجاری خود فیلتر کنید – Fava فوراً نمودارها را بهروزرسانی میکند تا درآمد خالص، نقشه درختی هزینهها و غیره را فقط برای آن زیرمجموعه نشان دهد. این برش تعاملی به این معناست که میتوانید تحلیل موردی را بسیار سریع انجام دهید، بدون نوشتن پرسوجو. نمای روزنامه نیز از فیلتر زنده پشتیبانی میکند: میتوانید بر اساس دریافتکننده یا زیررشته شرح جستجو کنید و فوراً یک فهرست فیلترشده از تراکنشها را ببینید. اگر به دادههای بلادرنگ نگاه میکنید (مثلاً تراکنشهای هفته گذشته را تازه وارد کردهاید)، میتوانید بر اساس برچسبی مانند
#uncategorizedفیلتر کنید تا تراکنشهای جدیدی که ممکن است نیاز به دستهبندی داشته باشند را ببینید، یا بر اساس@pending(اگر ورودیهای در انتظار را علامتگذاری میکنید) تا ببینید چه چیزی هنوز تسویه نشده است. این قابلیت بازرسی بلادرنگ به تضمین کیفیت داده نیز کمک میکند – چون میتوانید ناهنجاریها را در لحظه جدا کرده و برطرف کنید. -
صورت جریان نقدی (غیرمستقیم): در حالی که Beancount/Fava یک صورت جریان نقدی رسمی (تفکیک عملیاتی/سرمایهگذاری/تأمین مالی) بهصورت آماده تولید نمیکند، میتوانید آن را با پرسوجوهای سفارشی یا با ساختاردهی حسابها شبیهسازی کنید. برای مثال، میتوانید تراکنشهای خاصی را برچسبگذاری کنید یا از حسابهای خاصی برای سرمایهگذاری و تأمین مالی استفاده کنید، سپس مجموعها را پرسوجو کنید. رابط پرسوجوی Fava BQL را اجرا میکند مانند
SELECT sum(position) WHERE account ~ 'Assets:Bank:Checking'. این مانده حساب جاری را در پشت نمودارها برمیگرداند. مثال کاربردی زیر سفر کامل را نشان میدهد. با این حال، بیشتر کاربران شخصی ترکیب روندهای مانده و نمودارهای درآمد/هزینه را برای درک جریانهای نقدی کافی میدانند. -
داراییها و مصورسازی پرتفوی: در صفحه داراییها، Fava داراییهای فعلی شما از کالاها (مثلاً سهام، اوراق قرضه، رمزارز) را با مقادیر، بهای تمامشده، ارزش بازار و سودهای محققنشده فهرست میکند. در حالی که این یک جدول است نه نمودار، برای بازرسی بلادرنگ وضعیت پرتفوی شما بسیار مفید است. برخی افزونههای جامعه (مانند fava-investor که بعداً بحث میشود) مصورسازیهای بیشتری برای پرتفویها اضافه میکنند، مانند نمودارهای دایرهای تخصیص یا نمودارهای عملکرد. حتی بدون افزونهها، میتوانید مثلاً ببینید که ارزش پرتفوی سهام شما بر اساس آخرین قیمتها چگونه تغییر میکند – اگر نقلقولهای قیمت را بهطور منظم بهروزرسانی کنید (که میتواند روزانه خودکار شود)، نمودارهای Fava آخرین قیمتهای تاریخدار موجود را منعکس میکنند که ممکن است قدیمیتر از زمان باز کردن گزارش باشد.
مثال عملی: دو ماه هزینهها
این مثال بهصورت سرتاسری روی Beancount 3.2.3 با beanquery 0.2.0 اجرا میشود. دفتر را بهعنوان example.beancount ذخیره کنید. این شامل دو پرداخت حقوق و چهار هزینه است.
option "title" "Analytics example"
option "operating_currency" "USD"
2024-01-01 open Assets:Bank:Checking USD
2024-01-01 open Expenses:Food:Groceries USD
2024-01-01 open Expenses:Food:Dining USD
2024-01-01 open Expenses:Housing:Rent USD
2024-01-01 open Income:Salary USD
2024-01-01 open Equity:Opening-Balances USD
2024-01-05 * "Employer" "January salary"
Income:Salary -3000.00 USD
Assets:Bank:Checking 3000.00 USD
2024-01-08 * "Grocery Store" "Weekly groceries"
Expenses:Food:Groceries 120.00 USD
Assets:Bank:Checking -120.00 USD
2024-01-12 * "Restaurant" "Dinner out"
Expenses:Food:Dining 80.00 USD
Assets:Bank:Checking -80.00 USD
2024-02-01 * "Landlord" "February rent"
Expenses:Housing:Rent 1000.00 USD
Assets:Bank:Checking -1000.00 USD
2024-02-05 * "Employer" "February salary"
Income:Salary -3000.00 USD
Assets:Bank:Checking 3000.00 USD
2024-02-10 * "Grocery Store" "Weekly groceries"
Expenses:Food:Groceries 150.00 USD
Assets:Bank:Checking -150.00 USDابتدا آن را بررسی کنید. سپس پرسوجوی هزینهکرد بر اساس دسته را اجرا کنید.
bea --file example.beancount check
bea --file example.beancount query "SELECT account, sum(position) WHERE account ~ 'Expenses' GROUP BY account ORDER BY account"یک دفتر تمیز از bea check با کد 0 خارج میشود؛ خطاها با کد خروج غیرصفر فهرست میشوند. پرسوجو یک ردیف برای هر حساب هزینه برمیگرداند.
account sum(position)
----------------------- ------------
Expenses:Food:Dining 80.00 USD
Expenses:Food:Groceries 270.00 USD
Expenses:Housing:Rent 1000.00 USDدو پرسوجوی دیگر تصویر را کامل میکنند. کل درآمد و کل هزینهها:
SELECT sum(position) WHERE account ~ 'Income'
SELECT sum(position) WHERE account ~ 'Expenses'آنها (-6000.00 USD) و (1350.00 USD) را برمیگردانند. بنابراین خانوار 6,000.00 دلار درآمد کسب کرده، 1,350.00 دلار خرج کرده و 77.5% پسانداز کرده است. مانده حساب جاری آن را تأیید میکند:
SELECT sum(position) WHERE account ~ 'Assets:Bank:Checking'این (4650.00 USD) را برمیگرداند. همان پرسوجوها بدون تغییر در صفحه پرسوجوی Fava اجرا میشوند. Fava 1.30.16 همان سه ردیف هزینه را بهصورت یک جدول تعاملی نمایش میدهد.
در عمل، گزارشهای بصری Fava بهسرعت دادههای زیربنایی بهروزرسانی میشوند. بهمحض اینکه تراکنش جدیدی اضافه و صفحه بارگذاری مجدد شود، نمودارها دوباره محاسبه میشوند. هیچ بازپردازش طولانی لازم نیست. این بدان معناست که اگر یک خط لوله نیمهخودکار داشته باشید که در طول روز دادهها را تغذیه میکند، میتوانید Fava را باز نگه دارید و بهصورت دورهای بهروزرسانی کنید تا نمودارهای بهروز دریافت کنید – بهطور مؤثر پایش مالی بلادرنگ.
برای مثال، تصور کنید یک کسبوکار کوچک را اداره میکنید و میخواهید نقدینگی و هزینههای روزانه را پایش کنید. میتوانید Fava را روی یک داشبورد سفارشی باز کنید (شاید با استفاده از یک افزونه یا صفحه پرسوجو) که "مانده حساب نقدی امروز" و "هزینهها – امروز در مقابل دیروز" را نشان دهد. هر بار که پس از ورود دادههای جدید بهروزرسانی میکنید، آن اعداد بهروزرسانی میشوند. این مشابه چیزی است که داشبوردهای بلادرنگ گرانقیمت ارائه میدهند، اما با استفاده از ابزارهای متنباز. تفاوت این است که ممکن است نیاز به بهروزرسانی دستی یا زمانبندی بهروزرسانیها داشته باشید، در حالی که آن ابزارها بهطور خودکار بهروزرسانی میکنند. اما از نظر عملکردی، بینشی که به دست میآورید یکسان است، با مزیت اضافه که میتوانید به هر عددی در Fava کاوش کنید (روی آن کلیک کنید تا تراکنشهای زیربنایی را ببینید) – چیزی که بسیاری از داشبوردهای BI فاقد آن هستند.
بهطور خلاصه، Fava دادههای حسابداری شما را به بینشهای بصری فوری تبدیل میکند: تفکیک جریان نقدی، خطوط روند، مقایسه در طول زمان و فیلتر تعاملی همه به شما کمک میکنند داستان پشت اعداد را ببینید. چه در حال بررسی هزینههای هفته گذشته برای ناهنجاریها باشید و چه در حال مرور روندهای چند ساله در ارزش خالص، نمودارها و گزارشهای Fava شفافیت را در زمان واقعی (بهمحض اینکه دادههای شما آنجا باشد) فراهم میکنند. در ادامه، خواهیم دید که چگونه میتوانید این قابلیتها را گسترش دهید یا در صورت نیاز به تحلیلهای سفارشیتر، آنها را با ابزارهای خارجی یکپارچه کنید.
ادغام با داشبوردها و ابزارهای تصویری خارجی
در حالی که Fava مجموعه غنی از گزارشها و نمودارهای داخلی را ارائه میدهد، ممکن است بخواهید دادههای Beancount را با سایر ابزارهای هوش تجاری (BI) یا داشبورد مانند Grafana، Metabase یا فرانتاندهای وب سفارشی (مثلاً یک اپلیکیشن React) یکپارچه کنید. انگیزه میتواند ترکیب دادههای مالی با سایر منابع داده، استفاده از قابلیتهای نمودارسازی پیشرفته یا اشتراکگذاری داشبوردها با دیگران در فرمتی متفاوت باشد. به لطف باز بودن Beancount، راههای متعددی برای دستیابی به یکپارچهسازی وجود دارد:
-
یکپارچهسازی پایگاه داده (BeanSQL / Beanpost): یک رویکرد ساده صادر کردن یا همگامسازی دفتر Beancount شما به یک پایگاه داده SQL است. پس از اینکه در SQL قرار گرفت، هر ابزار BI میتواند دادهها را پرسوجو کند. در واقع، اعضای جامعه ابزارهایی برای این کار ساختهاند. برای مثال، Beanpost یک آزمایش است که یک دفتر Beancount را در یک پایگاه داده PostgreSQL آینه میکند و بسیاری از منطق Beancount را بهعنوان توابع SQL پیادهسازی میکند. این "یک بکاند انعطافپذیر که میتواند با ابزارهای دیگر مانند اپلیکیشنهای وب یا سیستمهای گزارشگیری یکپارچه شود" فراهم میکند. میتوانید Beanpost را اجرا کنید تا بهطور مداوم دفتر متنی خود را با Postgres همگام کنید. سپس، ابزاری مانند Metabase یا Tableau میتواند به آن پایگاه داده Postgres متصل شود و میتوانید هر نمودار یا داشبوردی که میخواهید بسازید (با بهروزرسانی زنده همزمان با بهروزرسانی پایگاه داده). یک کاربر گزارش داد که از Postgres + PostGraphile برای ارائه خودکار یک API GraphQL برای دادههای دفتر و سپس نوشتن یک فرانتاند React سفارشی روی آن استفاده کرده – اساساً دفتر را بهعنوان یک سرویس وب رفتار میکند. این رویکرد مواردی را که رابط Fava ممکن است کافی نباشد (مثلاً دسترسی چند کاربره یا رابطهای کاربری موبایلپسندتر) برطرف میکند. این مهندسیمحورتر است، اما پتانسیل را نشان میدهد: میتوانید Beancount را نسبتاً آسان با استکهای وب مدرن یکپارچه کنید. یک نوع سبکتر صادر کردن نتایج پرسوجو به SQLite است – اجرای
bea --file ledger.beancount query "SELECT ..."یک جدول چاپ میکند که میتوانید جایگذاری یا لولهکشی کنید، و CSV صفحهگسترده از CLI منتظر گزینههای صادرات بومی برایbea queryاست. برخی افراد از SQLite بهعنوان واسطه برای اتصال به ابزارهایی مانند Metabase استفاده میکنند (که میتواند فایلهای SQLite را از طریق یک اتصال بخواند). -
Grafana (داشبوردهای سری زمانی): Grafana برای پایش و دادههای سری زمانی محبوب است. دادههای مالی در طول زمان (هزینهها، ماندهها) میتوانند بهعنوان سری زمانی رفتار شوند. بحثهای جامعه در مورد اتصال Beancount به Grafana وجود داشته است. یک ایده یک افزونه منبع داده Grafana بود که میتوانست پرسوجوهای BQL را در لحظه روی یک فایل Beancount اجرا کند. این به پنلهای Grafana اجازه میداد مستقیماً مثلاً "مانده حساب جاری" را بهعنوان یک گیج یا "هزینههای 30 روز گذشته" را بهعنوان یک نمودار با پرسوجوی دفتر نمایش دهند. تا کنون (2025)، افزونه اختصاصی منتشر نشده، اما علاقهمندان راهحلهای موردی ساختهاند. برای مثال، یک کاربر Reddit به نام aquilax یک سرور ساده ساخت که دادههای Ledger CLI را برای Grafana در دسترس قرار میداد و آن را بهعنوان grafana-ledger-datasource-server به اشتراک گذاشت. مفهوم مشابهی میتواند برای Beancount اعمال شود: یک سرور HTTP کوچک در Python مینویسید که دفتر Beancount را بارگذاری میکند (با استفاده از API Beancount برای پرسوجوی دادهها) و نقاط پایانی را ارائه میدهد که فریمهای داده JSON را برای Grafana برمیگردانند. Grafana یک افزونه منبع داده JSON عمومی دارد که میتواند از این API استفاده کند. در عمل، این بدان معناست که میتوانید یک داشبورد Grafana با پنلهایی مانند "درآمد ماهانه (نمودار میلهای)" یا "مانده نقدی روزانه (نمودار خطی)" طراحی کنید و آن پنلها دادهها را از API مبتنی بر Beancount شما دریافت کنند. Grafana گزینههای مصورسازی غنی را فراهم میکند (حاشیهنویسیها، آستانهها، ترکیب با معیارهای سرور و غیره). Andreas Gerstmayr (یکی از نگهدارندگان Fava) دقیقاً این رویکرد را پیشنهاد داد و حتی اشاره کرد که یک افزونه Fava به نام fava-dashboards ساخته است (بعداً بیشتر توضیح میدهیم) تا نمودارها را از پرسوجوهای BQL بهعنوان جایگزینی برای تنظیمات کامل Grafana رندر کند. اگر رابط Grafana را ترجیح میدهید، یکپارچهسازی امکانپذیر است – فقط نیاز به ساخت پل داده دارد.
-
Metabase (پرسوجوهای موردی و داشبوردها): Metabase یک ابزار BI کاربرپسند است که به شما اجازه میدهد پرسوجو اجرا کنید و داشبورد بسازید بدون کد. اگر دفتر خود را به یک فرمت رابطهای صادر کنید (از طریق Beanpost یا با نوشتن جداول تراکنشها، ثبتها و غیره)، میتوانید Metabase را به آن پایگاه داده اشاره دهید. ممکن است جداول سفارشی مانند
expenses (date, category, amount)از دفتر خود بسازید و سپس در Metabase بهراحتی نمودار تولید کنید (مثلاً یک نمودار دایرهای از هزینهها بر اساس دسته برای ماه گذشته). مزیت این است که کاربران غیرفنی (یا همکاران) میتوانند از طریق رابط گرافیکی Metabase با دادهها تعامل کنند بدون نیاز به دست زدن به فایل Beancount. عیب این است که باید صادرات/همگامسازی را نگهداری کنید. برخی کاربران تبدیل شبانه خودکار دفتر Beancount به SQLite را خودکار کردهاند، سپس اجازه میدهند Metabase SQLite را بخواند؛ دیگران ممکن است از رویکرد Postgres ذکر شده استفاده کنند. نکته این است که قابلیت حمل دادههای Beancount این را ممکن میسازد – شما آزادید دادهها را به هر فرمی که ابزار خارجی شما نیاز دارد تکثیر کنید. -
فرانتاندها / اپلیکیشنهای سفارشی: اگر نیازهای خاصی دارید، همیشه میتوانید یک اپلیکیشن سفارشی روی Beancount بنویسید. کتابخانه Python Beancount به شما دسترسی به تمام ورودیهای تجزیهشده، ماندهها و غیره میدهد، بنابراین یک فریمورک وب Python (Flask، Django، FastAPI) میتواند برای ساخت یک اپلیکیشن سفارشی استفاده شود. برای مثال، یک کسبوکار کوچک ممکن است یک داشبورد بسازد که معیارهای KPI (مانند حاشیه سود ناخالص، فروش روزانه و غیره) را با پرسوجوی دفتر و شاید ترکیب با دادههای غیر دفتری (مانند تعداد مشتریان خدمترسانیشده) نشان دهد. یک عضو جامعه یک رابط وب موبایلپسند ساخت چون Fava برای همسرشان شهودی نبود – آنها از دفتر در یک پایگاه داده برای هدایت این رابط سفارشی استفاده کردند. اگر JavaScript/TypeScript را ترجیح میدهید، میتوانید از ابزاری برای تبدیل دفتر به JSON و ساخت از آنجا استفاده کنید. خود Fava صفحه پرسوجوی خود را از طریق یک API پرسوجوی JSON ارائه میدهد، بنابراین یک فرانتاند سفارشی میتواند BQL را به آن ارسال کند و جداول برگشتی را رندر کند بهجای ساخت یک بکاند پرسوجوی جدید.
-
یکپارچهسازی Excel/PowerBI: شایان ذکر است که میتوانید حتی با Excel یا PowerBI یکپارچه شوید. تا زمانی که
bea queryصادرات CSV بومی به دست آورد، از صادرات صفحه پرسوجوی Fava برای فایلهای صفحهگسترده که Excel مستقیماً باز میکند استفاده کنید. یک گردش کار میتواند این باشد: یک کار شبانه یک فایل CSV از مالیاتهای کلیدی از Beancount تولید میکند و PowerBI برای وارد کردن آن فایل تنظیم شده است. این کمی غیرمستقیم است، اما برای سازمانهایی که از قبل بهشدت از Excel/PowerBI استفاده میکنند، یک یکپارچهسازی کماصطکاک است. PowerBI همچنین از منابع داده Python پشتیبانی میکند، بنابراین میتوان یک اسکریپت Python کوتاه نوشت که پرسوجوهای BQL را اجرا کند و از آن بهعنوان منبع داده در PowerBI استفاده کرد و به اتصال مستقیم دست یافت.
مطالعه موردی – ایده یکپارچهسازی Grafana: Josh، یک کاربر Beancount، در لیست پستی درباره ارسال معیارهای Beancount به Prometheus و مشاهده در Grafana پرسید. توسعهدهندگان اصلی پاسخ دادند که بهجای تکثیر دادهها در Prometheus، رویکرد بهتر یک افزونه یا سرویس Grafana است که مستقیماً دفتر Beancount را پرسوجو کند. Andreas افزونه fava-dashboards خود را بهعنوان یک راهحل نمونه به اشتراک گذاشت که نمودارهای سفارشی را در خود Fava رندر میکند. نتیجه این است: شما گزینهها را دارید – یا از طریق زیرساخت BI موجود (Prometheus+Grafana یا SQL+Metabase) یکپارچه شوید یا Fava را برای رفع نیازهای خود گسترش دهید (بخش بعدی به این موضوع میپردازد).
ملاحظات امنیتی و چند کاربره: اگر با ابزارهای خارجی یکپارچه میشوید، به حساسیت دادهها توجه کنید. متن ساده Beancount اغلب حاوی اطلاعات مالی خصوصی است، بنابراین هر سروری که آن را افشا میکند باید ایمن باشد (احراز هویت شده). اگر دادهها را به یک ابزار BI ابری منتقل کنید، ممکن است برخی حریم خصوصی را از دست بدهید. ابزارهای خودمیزبان (نسخههای متنباز Grafana/Metabase) میتوانند بهصورت محلی اجرا شوند تا این امر را کاهش دهند. همچنین، اگر چند نفر نیاز به مشاهده داشبوردها دارند، یک داشبورد خارجی فقطخواندنی ممکن است ترجیح داده شود نسبت به دادن دسترسی همه به Fava (که در آن ممکن است در صورت عدم دقت دادهها را ویرایش کنند). برای مثال، یک استارتاپ میتواند بهصورت داخلی از Beancount استفاده کند اما از Metabase برای دادن دسترسی به رؤسای بخشها به هزینه در مقابل بودجه بدون دست زدن به فایلهای دفتر استفاده کند.
بهطور خلاصه، Beancount و Fava با دیگران خوب کار میکنند. میتوانید از کل اکوسیستم ابزارهای داده با کمی کد چسبنده استفاده کنید: دادههای دفتر را به یک پایگاه داده SQL برای ابزارهای BI ارسال کنید، آن را از طریق APIها برای اپلیکیشنهای وب ارائه دهید یا حتی از کتابخانههای تخصصی برای جریاندهی آن به سیستمهای سری زمانی استفاده کنید. این انعطافپذیری به این معناست که هرگز گیر نمیکنید اگر مصورسازیهای داخلی Fava یک نیاز خاص را برآورده نکنند – همیشه میتوانید به یک پلتفرم دیگر یکپارچه شوید در حالی که به استفاده از Beancount بهعنوان منبع حقیقت خود ادامه میدهید. در ادامه، به گسترش خود Fava با افزونهها و داشبوردهای سفارشی میپردازیم که اغلب مسیری آسانتر از یکپارچهسازی خارجی است اگر فقط به چند ویژگی اضافی نیاز دارید.
داشبوردهای سفارشی و گسترش Fava با پلاگینها (نمونههای کد)
Fava برای قابل توسعه بودن طراحی شده است: میتوانید صفحات، نمودارها و رفتارهای جدید را با نوشتن افزونههای Fava در Python اضافه کنید. این امکان را میدهد که رابط وب را بدون ساخت یک اپلیکیشن جداگانه کاملاً جداگانه برای نیازهای خاص خود تنظیم کنید. دو مسیر کلیدی برای سفارشیسازی را بررسی خواهیم کرد: (1) استفاده یا نوشتن افزونههای Fava، و (2) راهاندازی داشبوردهای سفارشی از طریق افزونههای جامعه مانند fava-dashboards.
افزونههای Fava (پلاگینهای سفارشی)
یک افزونه Fava اساساً یک ماژول Python است که یک زیرکلاس از fava.ext.FavaExtensionBase را تعریف میکند. وقتی Fava شروع میشود، میتواند این ماژول را بارگذاری کرده و آن را در اپلیکیشن یکپارچه کند. افزونهها میتوانند صفحات گزارش جدید ثبت کنند، به رویدادها متصل شوند و حتی JavaScript سفارشی برای تعامل شامل شوند. Fava 1.30.16 دو افزونه را همراه دارد: fava.ext.auto_commit و fava.ext.portfolio_list. بقیه میتوانند از طریق pip نصب یا از ابتدا نوشته شوند.
برای فعال کردن یک افزونه، از دستور سفارشی Beancount در فایل دفتر خود استفاده میکنید:
2010-01-01 custom "fava-extension" "my_extension_module" "{'option': 'value'}"این به Fava میگوید که ماژول دادهشده را بارگذاری کند. اگر افزونهای را از طریق pip نصب کردهاید، نام ماژول آن را در اینجا ذکر میکنید. رشته اختیاری در انتها پیکربندی برای افزونه است. Fava آن را بهعنوان یک literal Python تجزیه میکند، بنابراین "{'option': 'value'}" بهصورت یک dict دریافت میشود.
مثال – افزونه ثبت خودکار: افزونه همراه fava.ext.auto_commit تغییرات را در git ثبت میکند وقتی فایل را از طریق Fava ویرایش میکنید. اگر میخواستید از آن استفاده کنید، اضافه میکردید:
2025-01-01 custom "fava-extension" "fava.ext.auto_commit"این after_write_source، after_insert_entry، after_entry_modified، after_delete_entry و after_insert_metadata را بازنویسی میکند. هر قلاب یک git commit را در پوشه خود فایل دفتر اجرا میکند. بنابراین دفتر باید از قبل در یک checkout git باشد. این نشان میدهد که چگونه افزونهها به رویدادهای ویرایش Fava متصل میشوند.
مثال – افزونه فهرست پرتفوی: افزونه همراه fava.ext.portfolio_list صفحهای اضافه میکند که حسابهای سرمایهگذاری شما را فهرست میکند. این report_title = "Portfolio List" را تنظیم میکند و یک قالب ارائه میدهد. Fava آن را تشخیص میدهد و یک ورودی نوار کناری جدید "Portfolio List" تحت Reports اضافه میکند. همچنین has_js_module = True را برای بارگذاری JavaScript همراه آن تنظیم میکند. برای فعال کردن صریح آن، اضافه میکردید:
2025-01-01 custom "fava-extension" "fava.ext.portfolio_list"(در این مورد پیکربندی لازم نیست.)
نوشتن یک افزونه سفارشی: فرض کنید یک صفحه گزارش سفارشی میخواهید، مثلاً "قدمت مطالبات" برای فاکتورها. میتوانید یک فایل receivables.py مانند این بسازید:
# receivables.py
from fava.ext import FavaExtensionBase
class ReceivablesReport(FavaExtensionBase):
report_title = "Receivables Aging"
def after_load_file(self):
# Runs after Fava loads the ledger. Summarise open
# invoices here so the template only renders.
self.overdue = [
txn for txn in self.ledger.all_entries
if "invoice" in getattr(txn, "tags", set())
]همچنین یک templates/ReceivablesReport.html در کنار ماژول ایجاد میکنید تا HTML صفحه را تعریف کند. در آن قالب، میتوانید ویژگیهایی مانند self.overdue را که قلاب شما آماده کرده است بخوانید. پس از نوشتن این افزونه، به دفتر خود اضافه میکنید:
2025-01-01 custom "fava-extension" "receivables"(با فرض اینکه receivables.py در پوشه فایل Beancount یا PYTHONPATH است، Fava میتواند آن را با نام پیدا کند). با شروع Fava، اکنون یک صفحه "Receivables Aging" خواهید دید.
در پشت صحنه، Fava متدهای افزونه شما را در نقاط ثابت فراخوانی میکند. قلابهای موجود در Fava 1.30.16 عبارتند از after_load_file، before_request، after_entry_modified، after_insert_entry، after_delete_entry، after_insert_metadata و after_write_source. یک متد تزئینشده با @extension_endpoint علاوه بر این به یک نقطه پایانی API JSON تحت افزونه تبدیل میشود. بهطور معمول قلابهای ارائهشده بههمراه یک قالب کافی است.
مستندات Fava اشاره میکند که سیستم افزونه هنوز در حال تکامل است، اما قابل استفاده است. در واقع، بسیاری از ویژگیهای پیشرفته بهعنوان افزونه نمونهسازی شدهاند.
داشبوردهای سفارشی با fava-dashboards (افزودنی جامعه)
بهجای نوشتن یک افزونه از ابتدا، ممکن است از افزونه شخص ثالث fava-dashboards ساختهشده توسط یکی از نگهدارندگان Fava استفاده کنید. این افزونه به شما اجازه میدهد داشبوردهای دلخواه را از طریق یک فایل پیکربندی YAML تعریف کنید، با ترکیب متن، جداول و نمودارها، که با پرسوجوهای BQL قدرت میگیرند. این اساساً راهی برای ایجاد "صفحات" جدید در Fava است که شامل چندین پنل سفارشی هستند.
نصب و راهاندازی: ابتدا بسته را نصب میکنید (مثلاً pip install fava-dashboards). نسخه 2.0.2 در کنار Fava 1.30.16 بهدرستی بارگذاری میشود. سپس در فایل Beancount خود، آن را با یک دستور سفارشی که به پیکربندی داشبوردهای شما اشاره میکند فعال میکنید. برای مثال:
2010-01-01 custom "fava-extension" "fava_dashboards" "{ 'config': '/path/to/dashboards.yaml' }"(fava-dashboards/README.md at main · andreasgerstmayr/fava-dashboards · GitHub). این به Fava میگوید که ماژول fava_dashboards را بارگذاری کند و فایل YAML شما را برای پیکربندی بخواند.
فرمت YAML داشبوردها: در dashboards.yaml، یک یا چند داشبورد و پنلهای آنها را تعریف میکنید. دو قانون از خط لوله خود افزونه میآید. ستونهای تجمیعی نیاز به یک نام مستعار AS دارند. و قرارداد علامت BQL اعمال میشود: مجموع درآمدها منفی و هزینهها مثبت میرسند. برای مثال:
dashboards:
- title: "Cash Flow Dashboard"
panels:
- title: "Net Cash This Month"
width: 50%
queries:
- bql: "SELECT sum(position) AS net_cash WHERE account ~ 'Income' OR account ~ 'Expenses'"
type: "jinja2"
template: "<h1>{{ panel.queries[0].result[0][0] }}</h1>"
- title: "Spending by Category"
width: 50%
queries:
- bql: "SELECT account AS category, sum(position) AS total WHERE account ~ 'Expenses' GROUP BY account ORDER BY account"
type: "jinja2"
template: "<table>{% for row in panel.queries[0].result %}<tr><td>{{ row[0] }}</td><td>{{ row[1] }}</td></tr>{% endfor %}</table>"پنل اول موقعیت مجموع را مستقیماً نمایش میدهد. روی دفتر مثال کاربردی (-4650.00 USD) را رندر میکند. این 6,000.00 دلار درآمد منهای 1,350.00 دلار هزینه است. پنل دوم روی ردیفهای پرسوجو حلقه زده و به یک جدول تبدیل میکند. این پروژه همچنین پنلهای نمودار را از همان پرسوجوها رندر میکند. برای API اسکریپت نمودار به README لینکشده مراجعه کنید.
افزونه هنگام باز کردن صفحه داشبورد در Fava از رندر اینها مراقبت میکند. میتوانید چندین داشبورد ایجاد کنید (هر کدام بهعنوان یک برگه یا صفحه جداگانه ظاهر میشود). این برای ایجاد داشبوردهای مالی سفارشی بسیار قدرتمند است. برای مثال، میتوانید یک داشبورد "بودجه در مقابل واقعی" بسازید: یک پنل یک جدول بودجه در مقابل واقعی بهازای هر دسته را نشان میدهد (از طریق پرسوجویی که دو مجموعه حساب را مقایسه میکند)، پنل دیگر یک نمودار میلهای از هزینهکرد سال تا امروز در مقابل سال قبل را نشان میدهد و غیره. همه اینها فقط با پیکربندی و اسکریپتنویسی حداقلی، با استفاده از دادههای دفتر شما از طریق BQL.
مثال کد – فعالسازی fava-dashboards: همانطور که در بالا نشان داده شد، افزودن افزونه یک خط در دفتر شماست. برای کامل بودن، در اینجا یک مثال حداقلی از آن در زمینه ارائه شده است:
option "title" "My Ledger"
option "operating_currency" "USD"
plugin "beancount.plugins.auto_accounts" ; (auto-opens accounts)
1970-01-01 custom "fava-extension" "fava_dashboards" "{ 'config': 'dashboards.yaml' }"و در dashboards.yaml:
dashboards:
- title: "Overview"
panels:
- title: "Net Worth"
queries:
- bql: "SELECT sum(position) AS net_worth WHERE account ~ 'Assets' OR account ~ 'Liabilities'"
type: "jinja2"
template: "<div>Net Worth: {{ panel.queries[0].result[0][0] }}</div>"روی دفتر مثال کاربردی این <div>Net Worth: (4650.00 USD)</div> را رندر میکند. یک داشبورد واقعی بهخوبی قالببندی میشود و پنلهای بیشتری اضافه میکند.
با این تنظیمات، وقتی Fava را اجرا میکنید و به داشبورد "Overview" میروید، ارزش خالص محاسبهشده شما را نشان میدهد. سپس میتوانید قالب را اصلاح کنید یا در صورت نیاز نمودار اضافه کنید.
سایر افزونههای قابل توجه: جدای از fava-dashboards، اعضای جامعه افزونههایی مانند fava-investor برای تحلیل سرمایهگذاری و fava-review برای بررسی تراکنش ساختهاند. اینها بستههای شخص ثالث با مراحل نصب خود و محدوده سازگاری Fava هستند. قبل از نصب README آنها را بررسی کنید. جامعه یک فهرست "awesome-beancount" از افزونهها و ابزارها را نگهداری میکند. با مرور آن، ممکن است یک افزونه از پیش ساختهشده پیدا کنید که نیازهای شما را برآورده کند.
چه زمانی گسترش دهیم در مقابل یکپارچهسازی خارجی: بهطور کلی، اگر نیاز شما صرفاً ارائه یا محاسبه روی دادههای دفتر موجود است، یک افزونه Fava ایدهآل است (همه چیز را در یک مکان نگه میدارد، فیلترها را رعایت میکند و غیره). اگر نیاز شما شامل ترکیب دادههای خارجی است یا به یک رابط کاربری کاملاً متفاوت نیاز دارید، یکپارچهسازی خارجی (بخش قبلی) ممکن است موجه باشد. برای مثال، نمایش تحلیلهای وبسایت در کنار امور مالی – بهتر در Grafana/Metabase؛ اما افزودن یک KPI مالی جدید یا گزارش – بهتر بهعنوان یک افزونه Fava.
مثال – یک KPI سفارشی در Fava: فرض کنید میخواهید "نرخ پسانداز" (درصد درآمد پساندازشده) را پیگیری کنید. میتوانید این کار را با یک افزونه انجام دهید که آن را محاسبه کرده و یک جعبه کوچک در صفحه اصلی نشان دهد. یا با fava-dashboards، یک پنل میتواند یک Jinja2 باشد که Savings Rate: X% را با پرسوجوی کل درآمد و کل هزینهها خروجی میدهد. این نوع معیار سفارشی با این ابزارها بسیار آسان تزریق میشود، در حالی که در یک سیستم بسته مانند QuickBooks ممکن است ایجاد یک معیار جدید در داشبورد غیرممکن باشد.
همان دو پرسوجو یک پنل نرخ پسانداز را تغذیه میکنند. به علامتها توجه کنید: BQL sum(position) درآمد را بهعنوان یک موقعیت منفی و هزینهها را بهعنوان مثبت برمیگرداند و Jinja نمیتواند یک موقعیت را از موقعیت دیگر کم کند. بنابراین هر دو طرف را نمایش دهید و نرخ را در متن قالب بیان کنید:
- title: "Savings Rate"
panels:
- title: "Savings Rate"
queries:
- bql: "SELECT sum(position) AS income_total WHERE account ~ 'Income'"
- bql: "SELECT sum(position) AS expense_total WHERE account ~ 'Expenses'"
type: "jinja2"
template: "<h3>Savings Rate: 77.5% ({{ panel.queries[0].result[0][0] }} earned, {{ panel.queries[1].result[0][0] }} spent)</h3>"روی دفتر مثال کاربردی این Savings Rate: 77.5% ((-6000.00 USD) earned, (1350.00 USD) spent) را رندر میکند. نرخ (6,000.00 − 1,350.00) / 6,000.00 است. آن را از قدر مطلقها محاسبه کنید. موقعیتها را در داخل قالب منفی یا کم نکنید.
نکته کلیدی: Fava یک ابزار ثابت نیست – یک پلتفرم قابل توسعه است. با کمی Python یا حتی فقط کد پیکربندی، میتوانید آن را بهطور گسترده تنظیم کنید. بسیاری از کاربران اسکریپتها یا افزونههای کوچک را در انجمنها به اشتراک میگذارند تا کارهایی مانند نمایش قبوض آینده، تولید فاکتورهای PDF از تراکنشها یا یکپارچهسازی Beancount با کتابخانههای محاسبه مالیات انجام دهند. وقتی در یادگیری یا استفاده از این افزونهها سرمایهگذاری میکنید، یک سیستم تحلیل مالی بسیار اختصاصی بدون شروع از صفر دریافت میکنید.
موارد استفاده: امور مالی شخصی در مقابل حسابداری کسبوکار کوچک
Beancount و Fava میتوانند هم برای امور مالی شخصی و هم برای حسابداری کسبوکار کوچک استفاده شوند، اما موارد استفاده و مزایا از نظر تأکید کمی متفاوت هستند:
امور مالی شخصی
برای افراد، Beancount+Fava در ارائه دید کامل و بینش نسبت به امور مالی فرد بدون تکیه بر اپلیکیشنهای اختصاصی میدرخشد. موارد استفاده رایج امور مالی شخصی شامل:
-
پیگیری هزینه و بودجهبندی: بسیاری از Beancount برای ثبت هر هزینه و سپس تحلیل الگوهای هزینهکرد استفاده میکنند. با Fava، میتوانند ببینند پول هر ماه کجا میرود (نقشه درختی هزینهها) و بودجهها را با مقایسه با مقادیر مورد انتظار پیگیری کنند (برخی این کار را از طریق افزونه بودجه یا پرسوجوهای سفارشی انجام میدهند). یک کاربر توصیف کرد که پس از اتخاذ Beancount، "تحلیل دادههای مالی (هزینهکرد، کمک، مالیات و غیره) بیاهمیت است. انجام آن با Fava آسان است، اما با اسکریپتها نیز آسان است... من یک اسکریپت Python دارم که دادهها را با استفاده از BQL از Beancount بیرون میکشد، سپس از pandas برای تهیه گزارش استفاده میکنم.". این نشان میدهد که چگونه کاربران شخصی از هر دو رابط داخلی و توانایی اسکریپتنویسی تحلیل سفارشی در صورت نیاز بهرهمند میشوند.
-
پیگیری ارزش خالص و اهداف: چون میتوانید تمام داراییها (حسابهای بانکی، سرمایهگذاریها، حتی داراییهای فیزیکی در صورت تمایل) را در یک دفتر بگنجانید، یک نمای واحد از ارزش خالص دارید. علاقهمندان امور مالی شخصی از این برای پیگیری پیشرفت بهسوی اهداف (مثلاً "عدد FI" یا پرداخت بدهی) استفاده میکنند. نمودارهای Fava که ارزش خالص را در طول زمان نشان میدهند انگیزهبخش هستند – میتوانید واقعاً منحنی ثروت خود را ببینید. پیگیری بدهیهایی مانند وام دانشجویی یا رهن در Beancount و بهروزرسانی ماندههای آنها رایج است؛ دفتر سپس تصویر کاملی از سلامت مالی ارائه میدهد.
-
سرمایهگذاریها و رمزارز: استفاده شخصی اغلب به پیگیری یک پرتفوی گسترش مییابد. Beancount میتواند سهام، رمزارز و غیره را با محاسبات پایه بهای تمامشده و سود محققشده مدیریت کند (از طریق افزونهها یا پرسوجوها). مزیت نسبت به سایت کارگزار این است که میتوانید در سراسر تمام حسابها تجمیع کنید و تخصیص واقعی دارایی را ببینید. افزونههای جامعه مانند fava-investor، برای مثال، صفحات تحلیل سرمایهگذاری به Fava اضافه میکنند. این کاری است که بهطور معمول توسط سرمایهگذاران آماتور در Excel انجام میشود؛ Beancount راهی دقیقتر و خودکارتر ارائه میدهد. یک پست وبلاگی با عنوان "Beancount: DeFi Accounting For Noobs" حتی استفاده از آن را برای پیگیری تراکنشهای ارز دیجیتال و yield farming نشان میدهد، که انعطافپذیری آن را در سناریوهای مدرن امور مالی شخصی نشان میدهد.
-
امور مالی شخصی چند ارزی: اگر در خارج از کشور زندگی میکنید یا سرمایهگذاری خارجی دارید، Beancount بسیار مفید است چون میتواند ارزها را تبدیل و تجمیع کند. کاربران اشاره کردهاند که "بسیاری از نرمافزارهای حسابداری در چند ارزی خوب نیستند... با Beancount، میتوانید هر کالایی که میخواهید تعریف کنید"، و گزارشها را به ارز ترجیحی خود دریافت کنید. برای یک کاربر شخصی که مثلاً حقوق دلاری اما هزینههای یورویی دارد، این یک مزیت بزرگ است.
-
پیگیری زندگی و روزنامهنگاری: یک مورد استفاده غیرمتعارف اما واقعی: برخی دفتر را بهعنوان یک لاگ زندگی در نظر میگیرند، تراکنشها را با رویدادهای زندگی برچسبگذاری میکنند (مانند
#weddingیا#vacation2025) و سپس از آن برای محاسبه هزینه رویدادها یا حتی بهعنوان خاطرات فعالیتها استفاده میکنند (فراداده مالی بهعنوان نماینده رویدادهای زندگی). فرمت متن ساده و برچسبگذاری این را به روشی ممکن میکند که ابزارهای سنتی بهراحتی اجازه نمیدهند. -
سادگی و مالکیت: امور مالی شخصی همچنین درباره طرز فکر است. بسیاری Beancount را انتخاب میکنند چون "میخواستند این دادهها را مالک شوند و بهراحتی تحلیل کنند و نمیخواستند در یک اشتراک یا فروشنده قفل شوند". فروپاشی اخیر Mint.com (یک ابزار بودجهبندی رایگان محبوب) علاقهمندان را بهسوی حسابداری متن ساده برای طول عمر سوق داده است. با Beancount، آنها میدانند که میتوانند دفتر خود را حتی 20 سال بعد باز کنند. برای امور مالی یک فرد، دادههای Beancount (شاید همگامشده از طریق Dropbox یا Git) و رابط وب Fava (که میتواند بهصورت محلی یا روی یک سرور خصوصی اجرا شود) تعادلی از راحتی و کنترل ارائه میدهند که یافتن آن در جای دیگر سخت است.
چالشهای بالقوه برای استفاده شخصی: راهاندازی اولیه و یادگیری دوبل میتواند برای برخی مانع باشد. اما منابع زیادی (مانند آموزش Beancount و انجمنهای جامعه) به کاربران جدید کمک میکنند. پس از راهاندازی، نگهداری میتواند تا حد زیادی همانطور که توصیف شد خودکار شود که برای کسی که امور مالی خانوار خود را با حداقل تلاش مدیریت میکند عالی است.
حسابداری کسبوکارهای کوچک
کسبوکارهای کوچک، استارتاپها و فریلنسرها نیز میتوانند از Beancount+Fava استفاده کنند، هرچند الزامات در اینجا شامل گزارشگیری رسمیتر و شاید همکاری است:
-
حسابداری و صورتهای مالی: یک شرکت میتواند دفتر کل خود را در Beancount نگهداری کند، فاکتورها، صورتحسابها، حقوق و دستمزد و غیره را ثبت کند و صورتهای ترازنامه و سود و زیان تولید کند. Beancount از حسابداری تعهدی مورد نیاز پشتیبانی میکند (میتوانید حسابها را بهعنوان حسابهای دریافتنی/پرداختنی علامتگذاری کنید و فاکتورها را با ثبتهایی به درآمد و حسابهای دریافتنی ثبت کنید، سپس بعداً یک پرداخت برای تسویه حسابهای دریافتنی ثبت کنید). Fava سپس آنها را بهدرستی تحت داراییها یا بدهیها نمایش میدهد. یک بحث Reddit پرسید که آیا Beancount برای شرکتها مناسب است و آیا میتواند صورتهای مالی مناسب تولید کند – بله، میتواند ترازنامه، صورت سود و زیان و (با کمی کمک پرسوجو) صورتهای جریان نقدی تولید کند، چون اینها فقط نماهایی از دادههای دوبل هستند. نکته این است که Beancount هیچ استاندارد حسابداری خاصی را الزام نمیکند (این به نحوه استفاده شما بستگی دارد). بنابراین یک کاربر آگاه (یا حسابدار) باید نمودار حسابها را بهدرستی برای کسبوکار تنظیم کند. نمونههایی از جامعه وجود دارد که Beancount برای استارتاپها استفاده میشود – یک مفسر HN گفت: "من واقعاً از استفاده از Beancount + Git برای مدیریت دفتر حسابداری شرکت استارتاپ خودم لذت میبرم"، هرچند اشاره کرد که افزودن دورهای ورودیها کمی خستهکننده بود. این خستگی میتواند با خودکارسازی ورود همانطور که دیدیم کاهش یابد.
-
پایش مالی بلادرنگ: برای یک کسبوکار کوچک، جریان نقدی پادشاه است. با استفاده از Fava، یک صاحب کسبوکار میتواند ماندههای بانکی و جریان نقدی را نزدیک به بلادرنگ پایش کند، بسیار شبیه به شخصی – اما اینجا حتی حیاتیتر است. با خودکارسازی فیدهای بانکی یا ورودیها، میتوانند تشخیص دهند که آیا پرداخت مشتری وارد شده یا هزینه بزرگی تسویه شده است. QuickBooks فیدهای بانکی ارائه میدهد که "به شما اجازه میدهد ببینید کسبوکار شما در زمان واقعی چگونه عمل میکند"؛ با Beancount، این را با یکپارچهسازی بانکی خود تکرار میکنید. مزیت Beancount شفافیت است – دقیقاً میبینید چه چیزی وارد شده و چگونه دستهبندی شده، بهجای اعتماد به منطق تطبیق گاهی غیرقابل درک QuickBooks.
-
فاکتوردهی و حسابهای دریافتنی/پرداختنی: Beancount ماژول فاکتوردهی داخلی ندارد (مانند تولید فاکتورهای PDF یا پیگیری شماره فاکتور). با این حال، کاربران خلاق این را با افزودنیها مدیریت کردهاند. برای مثال، میتوان یک فاکتور PDF از یک تراکنش با یک قالب Jinja2 یا حتی یک اسکریپت خارجی که ورودیهای حسابهای دریافتنی باز را میخواند تولید کرد. پروژهای به نام "Beanie" وجود دارد که بهعنوان یک سیستم حسابهای دریافتنی سبک روی Beancount عمل میکند. کسبوکارهای کوچک ممکن است از Beancount برای دفتر و ابزار دیگری برای صدور فاکتور استفاده کنند، سپس دادههای فاکتور را به Beancount وارد کنند. این یک مرحله اضافی در مقایسه با QuickBooks (که میتواند فاکتورها را ارسال و سپس بهطور خودکار پس از پرداخت ثبت کند) است، اما تضمین میکند که تمام دادهها در دفتر باز قرار میگیرند.
-
حقوق و دستمزد و استهلاک: اینها وظایف حسابداری هستند که کسبوکارهای کوچک مدیریت میکنند. Beancount قطعاً میتواند ورودیهای حقوق و دستمزد را ثبت کند (تقسیم حقوق ناخالص، مالیات، کسورات و غیره به حسابهای مناسب) – اما معمولاً اینها را با ابزارهای خارجی یا ارائهدهنده حقوق و دستمزد خود محاسبه و سپس وارد میکنید. برنامههای استهلاک داراییهای ثابت نیز بهطور مشابه بهصورت دستی وارد میشوند (یا میتوانید یک افزونه برای خودکارسازی ورودیهای استهلاک ماهانه بنویسید). Beancount جادویی برای اینها ندارد، اما بسیاری از ابزارهای کسبوکار کوچک نیز فراتر از ارائه چند قالب ندارند. مزیت این است که میتوانید هر چیز غیرمعمولی را اسکریپتنویسی کنید. برای مثال، اگر یک برنامه شناسایی درآمد سفارشی دارید، میتوانید آن ورودیهای روزنامه را در Python اسکریپتنویسی کرده و بگنجانید.
-
شفافیت و قابلیت حسابرسی: کسبوکارها ممکن است از این قدردانی کنند که Beancount یک رد حسابرسی واضح ارائه میدهد. هر تراکنش ساده است و میتواند با لینکهایی به اسناد (رسیدها، قراردادها) حاشیهنویسی شود. در صورت حسابرسی، میتوانید فایل دفتر را بههمراه اسناد پیوست نشان دهید که کاملاً سرراست است. همچنین، کنترل نسخه به این معناست که یک لاگ حسابرسی از چه کسی/چه زمانی تغییرات ایجاد شده دارید (اگر چند نفر از طریق Git همکاری کنند). این را با QuickBooks مقایسه کنید که در آن یک حسابدار ممکن است نیاز به بررسی لاگهای تغییر داشته باشد که بهراحتی برای کاربر قابل دسترسی نیستند.
-
هزینه: Beancount+Fava رایگان است که برای استارتاپها یا کسبوکارهای کوچکی که میخواهند هزینههای نرمافزاری را به حداقل برسانند جذاب است. QuickBooks، Xero و غیره هزینههای ماهانه دارند. با این حال، معاوضه این است که آنها با پشتیبانی و راهاندازی آسانتر همراه هستند. یک صاحب کسبوکار فنیآشنا ممکن است با کمال میل کمی زمان را معاوضه کند تا هزینهها را صرفهجویی کرده و انعطافپذیری به دست آورد.
نمونههای واقعی: یک کاربر دیگر در HN گفت که آن را برای یک LLC مشاورهای استفاده کرده و بهخوبی کار کرده، اما وقتی تراکنشها رشد کردند، شروع به تقسیم فایلها بهصورت سالانه برای حفظ سرعت کردند. اجماع این است: برای یک کسبوکار کوچک (مثلاً دهها هزار تراکنش در سال یا کمتر)، Beancount کاملاً توانمند است. اگر یک SME بزرگتر با صدها هزار تراکنش بودید، عملکرد ممکن است استفاده از رویکرد پایگاه داده یا انتخاب یک سیستم حسابداری هدفساخته را توجیه کند – هرچند ما Beanpost را داریم تا با استفاده از Postgres بهعنوان بکاند به این امر بپردازیم.
همکاری: یک حوزه تفاوت – QuickBooks Online به چند کاربر (مالک، حسابدار و غیره) اجازه میدهد بهطور همزمان کار کنند. با Beancount، همکاری میتواند از طریق Git باشد (چند کاربر تغییرات را ثبت میکنند). این کار میکند، اما نیاز به کمی دانش Git و حل تعارض دارد اگر افراد همزمان ویرایش کنند. برخی از پلتفرمهای Git آنلاین یا حتی Google Drive برای اشتراکگذاری فایل دفتر استفاده کردهاند. این قابل انجام است، اما بهسادگی نرمافزار حسابداری ابری نیست. با این حال، برای یک تیم کوچک (یا حسابدار انفرادی + مالک) قابل مدیریت است و همیشه میتوانید دسترسی فقطخواندنی از طریق Fava اعطا کنید (آن را روی یک سرور داخلی میزبانی کنید و به دیگران اجازه دهید گزارشها را بدون ویرایش مشاهده کنند).
انطباق با مقررات: برای امور مالی شخصی، مسئلهای نیست. برای کسبوکار، ممکن است نیاز به تولید گزارشهای رسمی یا پیروی از استانداردهای حسابداری داشته باشید. Beancount میتواند برای تولید صورتهای منطبق با GAAP استفاده شود، اما نیاز به وارد کردن دادهها توسط کاربر بههمین ترتیب دارد. هیچ الزام داخلی برای قوانین GAAP وجود ندارد (مثلاً هیچ ماژول دارایی ثابت داخلی برای تضمین استهلاک صحیح). یک حسابدار خارجی همچنان میتواند با یک دفتر Beancount کار کند (چون اساساً یک روزنامه تعمیمیافته است) – ممکن است آن را به Excel صادر کرده و در صورت نیاز تعدیلات انجام دهد. برخی کسبوکارها ممکن است به همین دلیل نرمافزار شناختهشدهای را ترجیح دهند، یا حداقل یک حسابدار داشته باشند که با دادههای متنی ساده راحت باشد.
چه کسی از آن برای کسبوکار استفاده میکند؟ احتمالاً کاربران قدرتمند: استارتاپهای فناوری، فریلنسرها با پیشینه برنامهنویسی یا شرکتهایی که به کنترل داده بسیار ارزش میدهند (مثلاً شاید شرکتهای معاملاتی مالی که گزارشگیری سفارشی میخواهند). یک رشته Reddit از کسی پرسید که آیا Beancount برای یک شرکت معاملاتی مناسب است – پاسخها نشان داد بله، چند ارزی را مدیریت میکند و میتواند صورتهای مورد نیاز را تولید کند، اما شما در حال ساخت برخی ابزارها حول آن خواهید بود.
برای جمعبندی این بخش: کاربران امور مالی شخصی Beancount را برای بینش و کنترلی که بر پول شخصی خود میدهد دوست دارند – امور مالی را به یک مجموعه داده تبدیل میکند که میتوانند پرسوجو کنند و از آن یاد بگیرند، که چیزهایی مانند پیگیری آسان هر هزینه و محاسبه معیارهایی که ابزارهای بودجهبندی معمولی نمیتوانند فراهم میکند. کاربران کسبوکار کوچک شفافیت، صرفهجویی در هزینه و قابلیت هک را قدردانی میکنند – میتوانند حسابداری را با بقیه استک نرمافزاری خود یکپارچه کنند و از قفل شدن در فروشنده یا هزینههای ماهانه اجتناب کنند. هر دو مورد استفاده از تحلیل بلادرنگ بهرهمند میشوند: یک فرد ممکن است پیشرفت بودجه ماهانه خود را تماشا کند، یک کسبوکار ممکن است جریانهای نقدی روزانه را تماشا کند – در هر دو حالت، Fava میتواند اطلاعات بهروز را وقتی دادههای بهموقع تغذیه شود ارائه دهد.
مقایسه با سایر پلتفرمهای تحلیل لحظهای
مقایسه Beancount+Fava با سایر راهحلهایی که "تحلیل مالی بلادرنگ" ارائه میدهند، مانند QuickBooks (با فیدهای بانکی زنده) و Power BI (یا داشبوردهای BI مشابه) مفید است. هر رویکرد نقاط قوت و معاوضههایی از نظر شفافیت، انعطافپذیری و پاسخگویی دارد:
| جنبه | Beancount + Fava (متنباز) | QuickBooks (با فیدهای بانکی) | Power BI / BI عمومی |
|---|---|---|---|
| شفافیت و مالکیت داده | کاملاً شفاف – دادهها متن ساده هستند، میتوانید هر تراکنش را بررسی کنید. منطق همه قابل مشاهده است (هیچ الگوریتم پنهانی وجود ندارد). فرمت را برای همیشه مالک هستید. کنترل نسخه میتواند یک رد حسابرسی از تغییرات را نشان دهد. | مبهم – دادهها در یک پایگاه داده ابری اختصاصی ذخیره میشوند. برای پشتیبانگیری به صادرات Intuit متکی هستید. برخی فرآیندها (مثلاً خودکاردستهبندی) کاملاً قابل مشاهده نیستند. لاگهای حسابرسی محدود. اگر پرداخت را متوقف کنید، خطر از دست دادن دسترسی آسان به دادههای خود را دارید. | بستگی به منبع داده دارد – Power BI خودش فقط یک ابزار است. اگر به یک پایگاه داده باز متصل باشد، مالکیت آن دادهها را حفظ میکنید. با این حال، فایلها یا داشبوردهای Power BI فرمت اختصاصی دارند و برای مشاهده به Power BI نیاز دارند. شفافیت محاسبات خوب است (شما آنها را تعریف میکنید)، اما سیستم کلی پیچیده است. |
| انعطافپذیری و سفارشیسازی | فوقالعاده انعطافپذیر. میتوانید هر ساختار حساب، هر کالا/ارز را تعریف کنید. میتوانید رفتار یا تحلیل سفارشی (Python، افزونهها) را اسکریپتنویسی کنید. هیچ گردش کار تحمیلی وجود ندارد – آن را مطابق نیازهای خود (شخصی یا تجاری) تنظیم میکنید. سیستم افزونه Fava و ابزارهایی مانند fava-dashboards امکان داشبوردهای سفارشی درون اپلیکیشن را فراهم میکنند. اگر چیزی گم است، احتمالاً میتوانید آن را خودتان بسازید یا یکپارچه کنید. | متوسط. QuickBooks برای حسابداری استاندارد کسبوکار کوچک (فاکتوردهی، حقوق و دستمزد (افزودنی جداگانه)، گزارشهای پایه) پر از ویژگی است. اما محدود به ویژگیهایی هستید که Intuit ارائه میدهد. نمودار حسابها و دستهها باید در پارادایم آن جا شوند. گزارشهای سفارشی محدود هستند؛ نمیتوانید خودسرانه پایگاه داده را پرسوجو کنید. یکپارچهسازیها وجود دارند اما از طریق API Intuit (که محدود است) یا صادرات به Excel. انعطافپذیری را با راحتی معاوضه میکنید. | برای تحلیل و مصورسازی بسیار انعطافپذیر. اگر دادهها قابل دسترسی باشند، میتوانید تقریباً هر نمودار یا KPI ایجاد کنید. Power BI میتواند دادههای مالی را با دادههای دیگر (فروش، تحلیل وب و غیره) بهراحتی ترکیب کند. با این حال، یک سیستم حسابداری نیست – باید دادهها آماده باشند (که میتواند از Beancount باشد!). دوبل یا اصول حسابداری را الزام نمیکند؛ یک تخته سفید است. انعطافپذیری در مصورسازی بالا است (معیارهای DAX سفارشی و غیره)، اما نیاز به تخصص دارد. |
| پاسخگویی بلادرنگ | نزدیک به بلادرنگ با تنظیمات. اگر ورود داده را خودکار کنید (فیدها یا ورودیهای مکرر)، Fava بهمحض بهروزرسانی و بارگذاری مجدد دفتر آن را منعکس میکند. بهطور پیشفرض "فشار" بلادرنگ نیست (نیاز به بهروزرسانی دستی)، اما میتوانید بههر فرکانس دلخواه بهروزرسانی کنید (هر دقیقه، هر ساعت). سرعت بهروزرسانی بسیار سریع است (تجزیه متن در میلیثانیه برای تغییرات کوچک). شما فرکانس را کنترل میکنید – میتواند در صورت اسکریپتنویسی مداوم باشد. هیچ انتظاری برای چرخههای همگامسازی فروشنده وجود ندارد. | برای تراکنشهای بانکی نزدیک به بلادرنگ طراحی شده است: "فیدهای بانکی به شما اجازه میدهند ببینید کسبوکار شما در زمان واقعی چگونه عمل میکند." در عمل، فیدهای بانکی در QuickBooks Online یک بار در روز یا بر اساس تقاضا بهروزرسانی میشوند (بستگی به بانک دارد). بهطور خودکار تراکنشهای جدید را دریافت و تلاش میکند آنها را دستهبندی کند، بنابراین نیازی به ورود دستی ندارید. تغییرات بدون دخالت دستی در داشبورد ظاهر میشوند. با این حال، برخی دادهها (مانند تراکنشهای در انتظار) ممکن است تا تسویه نشوند. همچنین، برخی گزارشها ممکن است تا انجام یک اقدام بهروزرسانی نشوند. بهطور کلی پاسخگویی خوب برای دادههای بانکی؛ کمتر برای چیزهایی مانند ورودیهای روزنامه دستی (هنوز بلادرنگ، اما آنها را خودتان وارد میکنید). | اگر با یک اتصال زنده تنظیم شود، داشبوردها میتوانند در زمان واقعی یا طبق برنامه بهروزرسانی شوند. برای مثال، یک داشبورد Power BI با استفاده از DirectQuery روی یک پایگاه داده SQL میتواند هر بار که باز میکنید بهروزرسانی شود یا حتی بهطور خودکار. با حالت Import، طبق برنامه بهروزرسانی میکنید (مثلاً هر ساعت). بنابراین میتواند نزدیک به بلادرنگ باشد، اما پیچیدگی در نگهداری خط لوله داده است. همچنین، هر تغییری در دادههای زیربنایی نیاز به بهروزرسانی مدل یا پرسوجوها دارد. ممکن است تأخیر جزئی بسته به نحوه پیکربندی وجود داشته باشد (و اگر از ابر Power BI استفاده میکنید، محدودیتهایی در فرکانس بهروزرسانی خودکار در سطوح رایگان وجود دارد). |
| خودکارسازی و ورود داده | ورودیها میتوانند بسیار خودکار شوند اما نیاز به تنظیمات سفارشی دارند. ممکن است نیاز به نوشتن/نگهداری اسکریپتها یا استفاده از واردکنندههای جامعه برای هر بانک یا منبع داده داشته باشید. هیچ اتصال بانکی آمادهای وجود ندارد (بهجز آنچه خود میسازید). بنابراین راهاندازی اولیه خودکارسازی تلاش است. از طرف دیگر، پس از راهاندازی، میتواند کاملاً خودکار شود بدون ورود دستی (همانطور که برخی کاربران ~95% خودکارسازی را به دست آوردهاند). همچنین از ورود دستی برای چیزهایی که نمیتوان خودکار کرد پشتیبانی میکند (با فرم وب Fava یا ویرایش متن). | برای فیدهای بانکی/کارت اعتباری بسیار خودکار است (نیازی به کدنویسی نیست – فقط حسابهای خود را در QuickBooks متصل کنید). همچنین بهطور خودکار دستهها را پیشنهاد میدهد (با استفاده از دادههای گذشته و کمی ML). "هر تراکنش فوراً برای شما همگامسازی و مرتب میشود... QuickBooks دستهها را توصیه میکند و با گذشت زمان هوشمندتر میشود.". این یک مزیت راحتی بزرگ است – کار دستی کمتر. با این حال، خودکارسازی عمدتاً برای حسابهای مالی است؛ چیزهای دیگر (مانند تقسیم یک هزینه به کلاسها) ممکن است هنوز نیاز به بررسی دستی داشته باشند. همچنین، اگر فید بانکی شکسته شود، کاربر باید مجدداً متصل شود یا فایلها را بارگذاری کند. | Power BI اصلاً درباره ورود داده نیست – به هر خودکارسازی که منبع داده دارد متکی است. اگر منبع داده شما یک صفحهگسترده دستی است، پس بلادرنگ نیست. اگر یک پایگاه داده باشد که توسط برخی فرآیندهای ETL بهروزرسانی میشود، میتواند نزدیک به بلادرنگ باشد. بنابراین خودکارسازی به آنچه به Power BI تغذیه میکنید بستگی دارد. خود Power BI میتواند برای بهروزرسانی دادهها از منابع زمانبندی شود. بهطور خلاصه، Power BI میتواند دادههای خودکار را بهخوبی منعکس کند اما خودکارسازی را ایجاد نمیکند (باید یک خط لوله داده خودکار داشته باشید که آن را تغذیه کند). |
| همکاری و اشتراکگذاری | همکاری از طریق متن (مثلاً Git) قدرتمند اما فنی است. چند نفر میتوانند با ویرایش فایل(های) دفتر و ادغام تغییرات مشارکت کنند. Fava میتواند فقطخواندنی برای اشتراکگذاری گزارشها با دیگران میزبانی شود، اما فاقد نقشهای کاربری یا کنترل دسترسی دقیق بهصورت آماده است. برای یک کاربر واحد یا تیم فنیآشنا، خوب است. حسابرسان یا حسابداران ممکن است نیاز به صادرات دادهها (مثلاً تراز آزمایشی در Excel) داشته باشند تا با آن کار کنند اگر با فرمت راحت نیستند. | دسترسی وب چند کاربره با مجوزها (QuickBooks Online از حسابداران، چند کاربر تجاری با نقشها پشتیبانی میکند). اشتراکگذاری آسان – حسابدار شما میتواند وارد شود و دفاتر را بهصورت زنده ببیند. این یک نقطه قوت برای کسبوکارهاست. برای امور مالی شخصی، چند کاربره کمتر مرتبط است، اما دسترسی ابری در سراسر دستگاهها یک مزیت است (هرچند میتوانید بهطور مشابه Fava را روی یک ابر شخصی/VPS اجرا کنید). QuickBooks همچنین با سایر سرویسها (حقوق و دستمزد، وامهای بانکی و غیره) یکپارچه میشود که برای کسبوکارها مفید است و تکرار آن در Beancount سخت است. | Power BI در اشتراکگذاری داشبوردها عالی است، بهخصوص اگر از Power BI Service استفاده کنید: میتوانید داشبوردها را برای همکاران منتشر کنید، در وبسایتها جاسازی کنید (با مجوز مناسب) و غیره. برای همکاری در بینشها ساخته شده است. با این حال، این اشتراکگذاری فقطخواندنی تحلیل است، نه ویرایش مشترک دادهها. اگر چند کاربر نیاز به تحلیل دارند، میتوانند اگر دسترسی به پروژه BI داده شود. بهطور خلاصه، برای انتقال نتایج مالی بهصورت چشمگیر به ذینفعان، Power BI سخت است که شکست بخورد. اما این حسابداری مشترک نیست؛ تحلیل مشترک است. |
| هزینه | رایگان (متنباز). ممکن است بهجای پول زمان خرج کنید (برای راهاندازی/نگهداری). میزبانی Fava خودتان ممکن است هزینه ناچیزی داشته باشد (اگر روی رایانه شخصی یا یک سرور ارزان باشد). هیچ هزینه مجوز برای کاربران اضافی وجود ندارد. | پرداختی (اشتراک ماهانه یا سالانه). QuickBooks Online میتواند بسته به طرح از $20 تا $70+ در ماه متغیر باشد. هزینههایی برای حقوق و دستمزد یا ویژگیهای پیشرفته نیز وجود دارد. بسیاری از کسبوکارهای کوچک این را پرداخت میکنند چون شامل پشتیبانی و بهروزرسانیهای مداوم است. اما در طول سالها، هزینه جمع میشود. همچنین، اگر اشتراک را متوقف کنید، ممکن است دسترسی کامل را از دست بدهید. | مختلط. Power BI Desktop رایگان است، اما اشتراک Pro (برای اشتراکگذاری داشبوردها) حدود $10/کاربر/ماه است. اگر از قبل آن را از طریق Office 365 یا مشابه دارید، هزینه اضافی ممکن است صفر باشد. سایر ابزارهای BI متفاوت هستند (برخی متنباز مانند Metabase برای اجرا رایگان هستند). با این حال، هزینه زمانی توسعه راهحلهای BI و احتمالاً هزینه نگهداری یک پایگاه داده یا زیرساخت ابری برای آن را در نظر بگیرید. |
بهطور خلاصه، Beancount+Fava در مقابل QuickBooks: Beancount شفافیت برتر (همه چیز را میبینید و کنترل میکنید و دادههای شما ناپدید یا قفل نمیشوند) و انعطافپذیری (میتوانید هر چیزی را در دفتر مدلسازی کنید، نه فقط آنچه QuickBooks انتظار دارد) ارائه میدهد. نیاز به DIY بیشتری دارد، بهخصوص برای خودکارسازی و جزئیات رابط کاربری زیبا. QuickBooks یک راهحل آماده برای استفاده است که برای نیازهای کسبوکار کوچک بهینه شده – فیدهای بانکی، فاکتوردهی، حقوق و دستمزد (با افزودنیها) – و بهروزرسانیهای تقریباً بلادرنگ با حداقل تلاش کاربر ارائه میدهد. با این حال، از بسیاری جهات یک جعبه سیاه است؛ به نرمافزار اعتماد میکنید تا دادههای شما را بهدرستی مدیریت کند و گاهی این به این معناست که اصلاح اشتباهات یا درک نحوه رسیدن به یک عدد سخت است. بسیاری از کاربران Beancount افرادی هستند که از آن جعبههای سیاه ناامید شدند. آنها کمی راحتی را با وضوح معاوضه میکنند.
Beancount+Fava در مقابل Power BI (یا BI دیگر): آنها میتوانند مکمل باشند. Power BI یک سیستم حسابداری نیست؛ برای تحلیل است. در واقع، یک تنظیمات پیشرفته ممکن است از Beancount برای تجمیع و تضمین دقت دادهها استفاده کند، سپس از Power BI برای ایجاد داشبوردهای مدیریتی از آن دادهها. اگر مستقیماً مقایسه کنیم، Power BI بیشتر درباره انعطافپذیری بصری و ترکیب منابع داده است. نمودارهای Fava بهطور طراحی سادهتر هستند (متمرکز بر نیازهای حسابداری) اما نیاز به کار بسیار کمتری برای شروع دارند (آماده روی دفتر شما کار میکنند، بدون نیاز به مدلسازی). اگر هدف شما صرفاً دریافت بینش و مصورسازیهای زیبا است و حاضرید دادهها را آماده کنید، یک ابزار BI ممکن است مناسب باشد. اما اگر هدف شما نگهداری دفاتر و دریافت گزارشهای تعاملی بهعنوان محصول جانبی است، Fava بهتنهایی اغلب کافی است.
همچنین میتوان با سایر ابزارهای امور مالی شخصی (مثلاً Mint یا YNAB) یا سیستمهای ERP مقایسه کرد، اما سؤال بهطور خاص به پلتفرمهای تحلیل بلادرنگ اشاره میکند. در قلمرو نماهای مالی بلادرنگ: Beancount+Fava مانند داشتن یک داشبورد مالی "زنده" سفارشی و متنباز است، QuickBooks یک حسابداری خودکار متنبسته با همگامسازی بانکی زنده است و Power BI یک پلتفرم تحلیل انعطافپذیر است (مخصوص مالی نیست اما میتواند برای امور مالی در صورت تغذیه داده استفاده شود).
یک نقل قول گویا که متنباز را در مقابل تجاری مقایسه میکند: "با کمی تلاش در ابتدا، ابزارهای متنباز میتوانند در واقع بسیار بهتر از راهحلهای تجاری باشند و بسیار انعطافپذیرتر و قابل توسعهتر." این معاوضه را خلاصه میکند. QuickBooks صیقلی است و برای سناریوهای رایج با حداقل تلاش آماده کار میکند. اما وقتی چیزی میخواهید که انجام نمیدهد، به دیوار میخورید. با Beancount، بهندرت به دیوار میخورید – منبع و دادهها را دارید، میتوانید در صورت نیاز گسترش دهید یا یکپارچه کنید. هزینه این است که باید مایل به دستکاری باشید.
مزایا و معایب استفاده از Fava و Beancount برای بینشهای مبتنی بر داده
در نهایت، بیایید مزایا و معایب Beancount+Fava را بهعنوان یک راهحل برای تحلیل مالی تقطیر کنیم:
مزایا
-
شفافیت و اعتماد: تمام محاسبات (مجموعها، ماندهها) از یک دفتر متنی ساده استخراج میشوند که میتوانید بررسی کنید. هیچ رفتار مرموزی وجود ندارد. این اعتماد زیادی به اعداد ایجاد میکند – اگر تصمیمات خود را بر آنها بنا میکنید حیاتی است. این "حسابداری تمیز و شفاف" بدون قفل شدن است. همیشه میتوانید یک رقم گزارششده را به تراکنشهای زیربنایی ردیابی کنید که جوهره بینش دادهمحور است.
-
تکرارپذیری و رد حسابرسی: چون میتوانید دفتر را کنترل نسخه کنید، یک جدول زمانی از تغییرات دارید. اگر چیزی این ماه نادرست به نظر برسد، میتوانید دفتر را diff کنید تا ببینید چه چیزی تغییر کرده. این همچنین به این معناست که میتوانید آزمایش کنید ("اگر این هزینه را مجدداً طبقهبندی کنم چه میشود؟") و بهراحتی لغو کنید. کار دادهمحور اغلب شامل تکرار است و یک دفتر قابل حسابرسی آن را تشویق میکند.
-
انعطافپذیری در تحلیل: محدود به گزارشهای از پیش ساختهشده نیستید. ترکیب پرسوجوهای BQL، اسکریپتنویسی Python و فیلترهای Fava به این معناست که میتوانید تقریباً به هر سؤال مالی پاسخ دهید. میخواهید بدانید "هر سال در 5 سال گذشته چقدر در استارباکس خرج کردهام؟" – یک پرسوجو فاصله. یا "میانگین متحرک هزینههای 3 ماهه من در مقابل درآمد چقدر است؟" – قابل اسکریپتنویسی با Python+pandas روی یک پرسوجو. این انعطافپذیری برای کسانی که دوست دارند در دادهها کاوش کنند یک مزیت بزرگ است. کاربران حرفهای حتی افزونههایی برای محاسبه شاخصهای مالی (مثلاً معیارهای عملکرد پرتفوی) در Fava ساختهاند. بهطور خلاصه، میتوانید بینشهای بسیار دقیقی دریافت کنید که بسیاری از نرمافزارهای آماده نمیتوانند ارائه دهند.
-
یکپارچهسازی و قابلیت توسعه: سیستم افزونه Fava و API قابل دسترس Beancount به این معناست که ابزارها میتوانند با نیازهای شما رشد کنند. اگر فردا شروع به نیاز به پیگیری نوع جدیدی از دارایی کنید یا بخواهید یک فید داده جدید یکپارچه کنید، میتوانید سیستم را گسترش دهید. معماری (متن ساده ورودی، خروجیهای مختلف خروجی) بسیار قابل توسعه است. این در تضاد با سیستمهای بسته است که در آنها ممکن است مجبور شوید درخواست یک ویژگی کنید و منتظر بمانید.
-
تجمیع دادهها: برای افراد و حتی کسبوکارها، توانایی تجمیع تمام حسابها (چند بانک، کارگزار و غیره) در یک سیستم قدرتمند است. بسیاری از راهحلهای تجاری شما را سیلو میکنند (یا برای چند ارزی یا چند نهاد هزینه اضافی میگیرند). با Beancount، میتوانید همه چیز را با هم بیاورید. این یک نمای داده کلنگر ارائه میدهد که بینش در سراسر تخته را ممکن میکند. برای مثال، میتوانید تخصیص دارایی کلی واقعی خود یا جریان نقدی خالص در سراسر شخصی و تجاری را در صورت تمایل محاسبه کنید، چون فقط ورودیهای داده است.
-
صرفهجویی در هزینه: رایگان و متنباز است. برای استفاده شخصی، این یک مزیت بزرگ است (بدون اشتراک مانند بسیاری از اپلیکیشنهای بودجهبندی). برای استارتاپها یا سازمانهای کوچک، این صرفهجوییها میتوانند جمع شوند. اما فراتر از هزینه پولی، از نظر اجرا (Fava میتواند روی یک سرور کوچک اجرا شود) و انتقال (بدون مهاجرتهای پرهزینه اگر از آن فراتر رفتید – فقط متن است) نیز کارآمد است.
-
جامعه و اشتراک دانش: جامعه حسابداری متن ساده (Beancount، Ledger و غیره) بسیار مشارکتی است. افراد پیکربندیها، اسکریپتهای سفارشی و نکات خود را در انجمنها و وبلاگها به اشتراک میگذارند. این بدان معناست که اگر یک نیاز خاص دارید، ممکن است کسی چیز مشابهی را حل کرده باشد. برای مثال، چندین کاربر به ابزارهای ورود هوشمند و حتی دستهبندی یادگیری ماشین کمک کردهاند (مثلاً کتابخانه "smartimporter" که از scikit-learn برای خودکاردستهبندی دریافتکنندگان بر اساس دادههای گذشته استفاده میکند). با گذشت زمان، استفاده از Beancount میتواند در واقع _هوشمندتر شود اگر از این ابزارهای جامعه استفاده کنید – به راحتی نرمافزار تجاری نزدیک میشوید در حالی که شفافیت را حفظ میکنید.
-
توانمندسازی و یادگیری: استفاده از Fava/Beancount شما را مجبور میکند در سطح عمیقتری با دادههای مالی خود درگیر شوید. بسیاری از کاربران گزارش میدهند که از این سیستم درک بسیار بهتری از امور مالی خود به دست آوردند تا هرگز با اپلیکیشنهای خودکار. این کمی شبیه تفاوت بین پختن غذای خود در مقابل گرفتن فست فود است – تلاش بیشتر، اما دقیقاً میدانید چه چیزی در آن است و در درازمدت میتواند سالمتر باشد. برای بینشهای دادهمحور، این "مالکیت" فرآیند میتواند به اکتشافات معنادارتر منجر شود، چون میتوانید بهراحتی نحوه نگاه خود به دادهها را قالببندی و دوباره قالببندی کنید.
معایب
-
راهاندازی اولیه و منحنی یادگیری: بیایید صادق باشیم – Beancount و Fava بهاندازه QuickBooks یا Mint آماده استفاده نیستند. باید اصول حسابداری دوبل را یاد بگیرید (اگر آنها را نمیدانید)، نحو فایل Beancount و احتمالاً کمی Python اگر میخواهید بهشدت سفارشی کنید. این سرمایهگذاری اولیه میتواند یک مانع باشد. برای کاربران غیرفنی، ممکن است دلهرهآور باشد (هرچند رابط Fava با ارائه یک تجربه دوستانهتر پس از راهاندازی بسیار کمک میکند). در مقابل، بسیاری از ابزارهای تجاری مفاهیم حسابداری را پشت رابطهای سادهتر پنهان میکنند (که میتواند هم مزیت و هم عیب باشد).
-
بدون همگامسازی بانکی داخلی: بهطور طراحی، بهطور خودکار به APIهای بانکی متصل نمیشود (که اغلب اختصاصی هستند یا نیاز به توافق دارند). بنابراین یا صورتحسابها را بهصورت دستی دانلود میکنید یا خودکارسازی خود را تنظیم میکنید (از طریق اسکریپتهای Python یا سرویسهایی مانند Plaid که اغلب هزینه دارند). برای کسانی که عادت دارند فیدهای بانکی "فقط کار کنند"، این میتواند مانند یک قدم به عقب به نظر برسد. همانطور که یک کاربر اشاره کرد، وقتی Beancount را امتحان میکرد "راهی معقول برای دریافت فیدهای بانکی پیدا نکرد" – این میتواند یک ناامیدی باشد مگر اینکه مایل به کدنویسی یا استفاده از راهحلهای شخص ثالث باشید.
-
بلادرنگ یعنی زمان شما: دستیابی به پاسخگویی بلادرنگ ممکن است اما آماده نیست. باید کارهای cron یا محرکها را همانطور که توصیف شد پیکربندی کنید. اگر چیزی خراب شود (مثلاً یک بانک فرمت CSV خود را تغییر دهد)، باید واردکننده خود را اصلاح کنید. با سرویسی مانند QuickBooks، فروشنده با چنین تغییراتی مقابله میکند. اساساً شما پشتیبانی IT خود هستید. این معاوضه کلاسیک متنباز است. برای یک علاقهمند، این ممکن است خوب یا حتی سرگرمکننده باشد؛ برای یک صاحب کسبوکار کوچک شلوغ، میتواند یک مزاحمت باشد.
-
محدودیتهای مقیاسپذیری و عملکرد: برای مجموعه دادههای بسیار بزرگ (سالهای زیادی از تراکنشهای دقیق)، Beancount میتواند کندتر شود. بهطور کلی کارآمد است (افراد دهها هزار ورودی بدون مشکل دارند). اما همانطور که در رشته HN دیده شد، یک کاربر پس از 3 سال مجبور شد سالانه "دفاتر را ببندد" چون فایل برای حفظ سرعت پرسوجوها رشد کرد. کد Beancount v2 Python است و میتواند برای دادههای بزرگ کمی کند باشد، هرچند v3 (در حال توسعه با هسته C++) این را بهبود میبخشد. راهحلهایی وجود دارد (تقسیم فایلها، استفاده از Beanpost برای تخلیه به پایگاه داده و غیره)، اما یک ملاحظه است. QuickBooks احتمالاً مقیاسپذیری داخلی دارد و بیشتر ابزارهای BI روی پایگاههای دادهای ساخته شدهاند که برای دادههای بزرگ طراحی شدهاند – بنابراین ممکن است مجموعه دادههای بزرگ را بهتر مدیریت کنند.
-
شکافهای ویژگی (نسبت به نرمافزار اختصاصی): Beancount+Fava بر حسابداری و تحلیل متمرکز است. فاقد برخی ویژگیهای کمکی است: مثلاً بدون پردازش حقوق و دستمزد، بدون تولید فاکتور (بدون اسکریپتنویسی سفارشی)، بدون فرمهای آمادهسازی مالیات یکپارچه و غیره. اگر هدف شما مدیریت مالی جامع است، ممکن است نیاز به تکمیل با ابزارهای دیگر داشته باشید. برای مثال، ممکن است حقوق و دستمزد را از طریق یک سرویس حقوق و دستمزد انجام دهید و فقط ورودیهای روزنامه را وارد کنید. این کار میکند، اما بهاندازه یک ERP که همه چیز را در یک جا انجام میدهد یکپارچه نیست. برای امور مالی شخصی، Beancount چیزهایی مانند برنامهریزان پرداخت بدهی داخلی یا پاکتهای بودجهبندی ندارد (هرچند میتوانید اینها را شبیهسازی کنید). انتظار میرود که شما بینش استخراج کرده و سپس تصمیم بگیرید، بهجای ارائه توصیههای تجویزی یا ماژولهای برنامهریزی.
-
رابط کاربری و صیقل: در حالی که Fava بسیار خوب است، بهاندازه برخی پیشنهادات تجاری صیقلی یا راهنما نیست. هیچ "جادوگری" برای راهنمایی شما در راهاندازی یا اطمینان از عدم اشتباه وجود ندارد. ممکن است مجبور شوید مستندات را بخوانید تا بدانید چگونه X را انجام دهید. و برخی ویژگیهای رابط کاربری که ممکن است انتظار داشته باشید (دستهبندی کشیدن و رها کردن، لغو چند مرحلهای، اعلانهای پوش موبایل و غیره) وجود ندارند. رابط کاربری Fava مدام در حال بهبود است (با مشارکتها)، اما توسط یک جامعه کوچک ساخته شده است. اگر به رابطهای کاربری SaaS مدرن و شیک عادت دارید، Fava ممکن است کمی سودمندگرا به نظر برسد (هرچند برخی در واقع سادگی تمیز آن را ترجیح میدهند). روی موبایل، Fava کار میکند (بهخصوص فقطخواندنی) اما کاملاً برای صفحههای کوچک بهینه نشده؛ QuickBooks برای مثال اپلیکیشنهای موبایل اختصاصی دارد.
-
اتکا به جامعه/نگهدارنده: Martin Blais (نویسنده Beancount) و مشارکتکنندگان Beancount را نگهداری میکنند و دیگران Fava را. توسعه میتواند پراکنده باشد (همانطور که در OSS طبیعی است). در حالی که نرمافزار اکنون بسیار قابل استفاده است، اگر به یک ویژگی جدید نیاز دارید یا اشکالی وجود دارد، ممکن است مجبور شوید خودتان آن را برطرف کنید یا منتظر بمانید. با یک محصول پرداختی، پشتیبانی برای تماس دارید (کیفیت متفاوت است، اما حداقل وجود دارد). با این حال، جامعه معمولاً از طریق لیست پستی یا مسائل GitHub بسیار کمککننده است.
-
دانش حسابداری لازم: بهخصوص برای استفاده تجاری، باید بدانید چه میکنید. Beancount شما را از ثبت یک ورودی که از نظر حسابداری "نادرست" است بازنمیدارد (بهجز عدم تعادل یا تراکنش بدون تطابق). QuickBooks در مقابل دارای حفاظهایی است (و همچنین پیچیدگی پنهان مانند پیگیری خودکار درآمد معوق و غیره، اگر آنها را فعال کنید). اگر در Beancount دقت نکنید، میتوانید یک تعهدی را خراب کنید و تا زمانی که یک مشکل گزارش متوجه نشوید، آن را ندانید. اساساً، Beancount فرض میکند که یا اصول حسابداری پایه را میدانید یا مایل به یادگیری هستید. این در واقع برای برخی یک مزیت است (شما را مجبور به انجام درست میکند)، اما اگر یک سیستم بدون نیاز به فکر میخواهید یک عیب است.
برای جمعبندی مزایا و معایب: Beancount + Fava کنترل و سازگاری بینظیری برای کسانی که میخواهند عمیقاً با دادههای مالی خود درگیر شوند فراهم میکند، و آن را به یک ابزار قدرتمند برای بینشهای دادهمحور تبدیل میکند. دفاتر شما را به یک مجموعه داده قابل پرسوجو و گزارشهای شما را به یک اپلیکیشن وب قابل توسعه تبدیل میکند. قیمت این قدرت کار شما در راهاندازی و نگهداری آن و نیاز به خودکفایی نسبی در مدیریت سیستم است. در مقابل چیزی مانند QuickBooks یا یک مجموعه BI، که بیشتر دست شما را میگیرند و برخی ویژگیها را بهطور خودکار ارائه میدهند، Beancount یک جعبه ابزار به شما میدهد. اگر تمایل تحلیلی دارید، این جعبه ابزار میتواند فوقالعاده رهاییبخش باشد – میتوانید بینشهایی استخراج کنید که گزارشهای آماده ممکن است هرگز نشان ندهند. همانطور که یک کاربر که دفتر Beancount خود را در طول سالها خودکار کرد نوشت، "ابزارهای متنباز (مانند Beancount) تمام نیازهای من را [آماده] برآورده نمیکنند... من وسواس خودکارسازی همه چیز را دارم... آنچه نیاز داشتم را ساختم". این رویکرد را خلاصه میکند: اگر مایل به ساختن آنچه نیاز دارید هستید، هرچقدر کوچک یا بزرگ، Fava/Beancount از شما پشتیبانی میکند و هرگز دادههای شما را از شما پنهان نمیکند. برای یک طرز فکر دادهمحور، این یک مزیت بزرگ است.
در نتیجه، استفاده از Fava و Beancount برای تحلیل مالی بلادرنگ کمی شبیه داشتن آزمایشگاه سفارشی خود برای امور مالی است. وضوح، انعطافپذیری و مالکیت دریافت میکنید که مطابقت با پلتفرمهای اختصاصی سخت است و آن را برای کسانی که به این جنبهها ارزش میدهند و مایل به معاوضه کمی راحتی برای دریافت آنها هستند ایدهآل میکند. چشمانداز مدرن حتی رویکردهای ترکیبی را نشان میدهد – برای مثال، برخی ممکن است از یک ابزار تجاری استفاده کنند اما بهطور دورهای به Beancount برای تحلیل عمیقتر صادر کنند، یا برعکس از Beancount بهعنوان اصلی و یک ابزار BI برای ارائه استفاده کنند. با دانش این بررسی، میتوان تصمیم آگاهانهای گرفت که آیا Fava+Beancount با نیازهای فرد همسو است و در صورت مثبت بودن، با اطمینان به استفاده از قابلیتهای آن برای بینشهای مالی غنی و بلادرنگ ادامه داد.
منابع:
- Blais, M. (2020). Beancount Documentation – Design principles and usage. [Online]. Available: beancount.github.io
- Aumayr, D., Gerstmayr, A. (2025). Fava Documentation & GitHub Repository. [Online]. Available: beancount.github.io/fava/ and github.com/beancount/fava
- LowEndBox. (2025). "Beancount: Lightweight FOSS Double-Entry Accounting...from the Command Line!" LowEndBox Tutorial.
- Fang-Pen Lin. (2024). "My Beancount books are 95% automatic after 3 years." Personal Blog Post.
- Google Groups – Beancount Forum. (2023). Discussion on Grafana integration (Josh D. and Andreas G.)
- QuickBooks Marketing Page. "Bank Feeds – Understand all your transactions in an instant." Intuit QuickBooks.
- Watt, A. (2023). "Beancount for Personal Finance." Alex Watt Blog.
- Reddit – r/plaintextaccounting. Various discussions (2021-2023) on business use of Beancount and ledger visualization.
- Fava Extension Documentation – Help: Extensions.
- fava-dashboards GitHub README – Andreas Gerstmayr's custom dashboards plugin.
- Awesome Beancount list – community-curated resources for Beancount.