مقدمه
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 Query Language) ارائه میشود. از
bea queryبرای BQL در ترمینال وbea reportبرای گزارشهای استاندارد استفاده کنید؛ بسته CLI quick start را به جای اسکریپتهای قدیمی بالا دستی نصب کنید. میتوانید دفتر را برای گزارشهای سفارشی (مثلاً فهرست هزینهها به تفکیک پرداختکننده، جریان نقدی یک دوره) پرسوجو کنید – اساساً دفتر را مانند یک پایگاه داده در نظر بگیرید. حتی با هزاران معامله، سرعت حفظ میشود. خروجی CSV باbea query -f csv -o report.csv "BQL"تهیه کنید وBQLرا با پرسوجوی خود جایگزین کنید. نمونههای کامل را در قالبهای گزارشگیری مالی ببینید. - قابل توسعه با افزونهها: Beancount بهزبان پایتون نوشته شده و اجازه میدهد افزونههای سفارشی برای گسترش قابلیتها ساخته شود. افزونهها میتوانند هنگام پردازش فایل قوانین یا محاسبات اضافی اعمال کنند. (مثلاً افزونههایی برای مدیریت دستههای مالیاتی یا اطمینان از اینکه خریدی بدون هزینه ثبت نشده است وجود دارد.) سیستم افزونه و API پایتون این امکان را به کاربران پیشرفته میدهد تا رفتارهای سفارشی بنویسند یا Beancount را با سیستمهای دیگر یکپارچه کنند.
- ورودیخوانها برای دادههای خارجی: یک ویژگی کلیدی کاربردی، چارچوب ورودیخوان در بسته مجزای
beangulpاست (ماژولbeancount.ingestدر Beancount 3.2.3 وجود ندارد). شما یک کلاس ورودیخوان مینویسید که ازbeangulp.Importerارث میبرد وidentify،extractوaccountرا پیادهسازی میکند. این کلاس فایلهای دانلود شده (CSV، OFX، صورتحسابهای PDF و غیره) را تجزیه و به ورودیهای Beancount تبدیل میکند. این برای اتوماسیون ضروری است (بعداً بیشتر توضیح داده میشود). - قابل حسابرسی و سازگار با کنترل نسخه: چون متن ساده است، میتوانید دفتر را در Git یا هر سیستم کنترل نسخه دیگر نگه دارید. هر تغییر شفاف است و تاریخچه کامل ویرایشها حفظ میشود. این باعث میشود حسابرسی یا بازبینی تغییرات بسیار ساده باشد (بسیاری از کاربران هر تغییر روزانه را به یک مخزن Git منتقل میکنند، که لاگی قابل اثبات از تمام ورودیهای مالی فراهم میکند). این سطح شفافیت تفاوت عمدۀ Beancount با نرمافزارهای حسابداری بسته است – «بدون قفل شدن در SaaS — فقط حسابداری شفاف و تمیز با گزارشگیری قدرتمند.»
فاوا (رابط وب برای Beancount)
- رابط وب تعاملی: Fava یک سرور وب محلی فراهم میکند که دفتر کل Beancount شما را به یک رابط کاربری غنی تبدیل میکند. این رابط گزارشهای اصلی (صورت سود و زیان، ترازنامه و غیره)، ثبت حسابها و دفاتر را در مرورگر با کنترلهای تعاملی نمایش میدهد. رابط کاربری نسبت به خط فرمان پویا و کاربرپسند است. شما با استفاده از یک
fava yourfile.beancountساده آن را راهاندازی میکنید و یک اپلیکیشن وب برای دفاتر خود دریافت میکنید. - نمودارها و گرافها به صورت داخلی: Fava نمودارهایی ایجاد میکند تا به شما در تجسم دادههایتان کمک کند. برای مثال، نمودار خطی ارزش خالص در طول زمان، نمودارهای میلهای برای درآمد در مقابل هزینهها به تفکیک ماه، و نمودارهای دایرهای/درختی برای تفکیک هزینهها دارد. این تصاویر با دادههای شما بهروزرسانی میشوند و از نماهای مختلف پشتیبانی میکنند (مثلاً «بها تمامشده» در مقابل «ارزش بازار» برای سرمایهگذاریها). بعداً به طور مفصل این قابلیتهای تجسم را بررسی خواهیم کرد.
- فیلترکردن و جستجو: در بالای صفحات Fava، یک نوار فیلتر وجود دارد که به شما امکان میدهد دادهها را به صورت آنی برش دهید و تجزیهوتحلیل کنید. میتوانید فیلتر بر اساس زمان (مثلاً سال، فصل، ماه)، بر اساس الگوی حساب، پرداختکننده، توضیحات یا برچسبها/لینکها اعمال کنید. این امکان بازرسی دادهها در زمان واقعی را آسان میکند – مثلاً سریعاً فیلتر کنید به «Tag=Travel» و «Year=2025» تا همه هزینههای سفر در سال ۲۰۲۵ را با مجموعها ببینید. رابط کاربری پرسوجوهای پیچیده را از طریق این نوار فیلتر یا صفحه پرسوجو (که میتوانید مستقیماً کوئریهای BQL اجرا کنید) پشتیبانی میکند.
- پشتیبانی و تلفیق چند فایل: Fava میتواند چندین فایل Beancount را به صورت همزمان بارگذاری کند (مفید اگر دفاتر را جدا کردهاید) و بین آنها سوئیچ کند. همچنین میتواند در صورت نیاز آنها را تلفیق کند (برای مثال، دفاتر شخصی و کسبوکار را به صورت مشترک مشاهده نمایید).
- ورود و ویرایش داده: به طور منحصر به فرد، Fava فقط حالت مشاهده نیست – دارای ویرایشگر و فرم ورود تراکنش است. میتوانید تراکنشهای جدید را از طریق فرم وب اضافه کنید (این ورودی را در فایل .beancount شما درج خواهد کرد). همچنین میتوانید فایل منبع را از Fava در ویرایشگر خارجی باز کنید. Fava همچنین برای کاربران حرفهای کلیدهای میانبر صفحهکلید را پشتیبانی میکند. این باعث میشود Fava به یک سیستم حسابداری سبک تبدیل شود که شما بتوانید دادهها را از همان رابط وارد و مشاهده کنید.
- گزارشها و تحلیل حسابها: Fava گزارشهای استاندارد حسابداری ارائه میکند: صورت سود و زیان، ترازنامه، تراز آزمایشی، و فهرست داراییها برای سرمایهگذاریها. ترازنامه و صورت سود و زیان تعاملی هستند – میتوانید روی یک حساب کلیک کنید تا جزئیات آن را بررسی کنید یا بین مشاهده بر اساس بها تمامشده و ارزش بازار داراییها جابجا شوید. اگر داده قیمت دارید، Fava همچنین «سود تحقق نیافته» برای سرمایهگذاریها را نشان میدهد. نمای دفاتر کلیه ورودیها را تولید میکند و امکان فیلتر این دفتر را با معیارهای مختلف فراهم میکند (بسیار مناسب برای پیدا کردن تراکنشهای خاص).
- مدیریت اسناد: اگر رسید یا صورتحساب پیوست کنید، Fava به سازماندهی آنها کمک میکند. Beancount مفهوم پوشه اسناد را دارد و Fava به شما اجازه میدهد فایلها را به حسابها یا تراکنشها بکشید و رها کنید – آنها را ذخیره میکند و یک مدرک به دفتردار شما اضافه میکند. این برای نگهداری اسناد پشتیبان مرتبط با دادههای دفتردار شما مفید است.
- سفارشیسازی با افزونهها: Fava قابل افزایش با افزونههایی است (نوشته شده به Python) برای افزودن گزارشها یا قابلیتهای جدید. برخی افزونهها بستهبندی شدهاند (مثلاً گزارش فهرست پرتفوی برای سرمایهگذاریها). ما بعداً درباره افزونههای سفارشی بحث خواهیم کرد، اما اساساً طراحی Fava اجازه میدهد صفحات جدید و حتی کد جاوااسکریپت سفارشی از طریق API افزونهها اضافه شود. این یعنی اگر تحلیل یا داشبورد خاصی به صورت پیشفرض موجود نباشد، کاربر پیشرفته میتواند آن را اضافه کند.
- کارایی: Fava کارآمد است – دادهها را در حافظه بارگذاری میکند و صفحات را سریع ارائه میدهد. پردازش Beancount زیرساخت سریع است، بنابراین دفاتر شخصی معمولی در یک یا دو ثانیه بارگذاری میشوند. در عمل، Fava میتواند دفاتر شخصی چندین ساله را مدیریت کند، اگرچه فایلهای بسیار بزرگ (دهها هزار تراکنش) ممکن است از بهینهسازیهایی مانند بایگانی ورودیهای قدیمی بهرهمند شوند.
- دسترسی وب و قابلیت حمل: با اجرای Fava در یک سرور یا حتی لپتاپ خود، میتوانید از هر مرورگری به امور مالی خود دسترسی داشته باشید. برخی کاربران Fava را روی سرور خصوصی یا Raspberry Pi میزبانی میکنند تا هنگام حرکت به امور مالی خود دسترسی داشته باشند (احتمالاً پشت رمز عبور یا VPN چون Fava احراز هویت داخلی ندارد). این اساساً به شما یک «اپلیکیشن وب» خودمیزبان برای امور مالی میدهد، بدون اینکه دادههایتان را به شخص ثالثی بسپارید.
در خلاصه، Beancount پایهای قوی برای حسابداری شفاف مبتنی بر متن با قوانین دقیق دفتر دوبل و پشتیبانی چند ارزی فراهم میکند. Fava با ارائه یک رابط کاربری در دسترس همراه با دیدگاههای فوری (گزارشها، نمودارها) و امکان تعامل با دادههای شما این کار را توسعه میدهد. این دو با هم یک سیستم حسابداری و تحلیلی بسیار منعطف ایجاد میکنند که شما از ابتدا تا انتها کنترل آن را در اختیار دارید.
تحلیلهای زمان واقعی (یا نزدیکبهزمان واقعی) با Beancount و Fava
دستیابی به تحلیلهای زمان واقعی یا نزدیکبهزمان واقعی با Beancount و Fava شامل خودکارسازی جریان دادهها به دفتر کل شما و اطمینان از نمایش اطلاعات بهروز توسط ابزارها است. به طور پیشفرض، Beancount یک فرآیند دستهای است (شما ورودیها را به فایل اضافه میکنید، سپس گزارشها را مشاهده میکنید)، و Fava تغییرات را تشخیص میدهد و نیاز به تازهسازی دارد. با این حال، با تنظیم مناسب، میتوانید بهروزرسانیها را به گونهای ساده کنید که معاملات جدید و تغییرات تقریباً بلافاصله ظاهر شوند.
شناسایی تغییر فایل: Fava فایل دفتر کل را برای تغییرات نظارت میکند. اگر فایل .beancount (یا فایلهای الحاقی) را در یک ویرایشگر ویرایش کنید، صفحه یک اعلان “تغییر فایل شناسایی شد. برای بارگذاری مجدد کلیک کنید.” نمایش میدهد. Fava نقطه پایانی get_changed خود را نظرسنجی میکند. وقتی ناظر تغییر را گزارش دهد، Fava دفتر کل را سمت سرور بارگذاری مجدد میکند و اعلان یک کلیک برای تازهسازی نما ارائه میدهد. در عمل، این بارگذاری مجدد بسیار سریع است (معمولاً کمتر از یک ثانیه برای دفاتر معمولی). این بدان معناست که Fava میتواند به عنوان یک داشبورد زنده عمل کند اگر فایل دفتر کل شما به صورت مکرر بهروزرسانی شود. به طور پیشفرض، برای جلوگیری از اختلال در دید شما صبر میکند تا روی اعلان کلیک کنید.
خط لوله واردات/بهروزرسانی پیوسته: برای دریافت دادههای زمان واقعی، باید اضافه کردن معاملات به فایل Beancount را خودکار کنید. چند استراتژی معمول وجود دارد:
-
شغلهای واردسازی زمانبندیشده (کرون): بسیاری از کاربران یک شغل کرون (یا کار زمانبندیشده) برای دریافت تراکنشهای جدید از مؤسسات مالی به صورت دورهای (مثلاً هر شب یا هر ساعت) تنظیم میکنند و آنها را به دفتر کل اضافه میکنند. برای مثال، ممکن است یک واردکننده
beangulpرا روی آخرین دانلود بانک (CSV یا OFX) اجرا کنید. یک کاربر Beancount یک خط لوله خودکار ساخت بهطوریکه دفاترشان بهصورت خودکار بهروزرسانی شود: “دیدن بهروزرسانی خودکار کتاب حسابداریام بدون اینکه دستم به آن بخورد و در قالب باز باشد، برایم شادی محض است”. این با اتصال به APIهای بانکی و زمانبندی بهروزرسانیهای منظم محقق شد. یک اسکریپت پایتون سفارشی که از APIهای بانکی (مثل Plaid) استفاده میکند میتواند به صورت زمانبندیشده اجرا شود و ورودیهای جدید را به دفتر کل بنویسد. هر اجرا را باbea checkقبل از تاثیرگذاری روی فایل اصلی خود اعتبارسنجی کنید. پس از هر واردسازی زمانبندیشده، اگر Fava در حال اجرا باشد، میتوانید به سادگی صفحه Fava را تازهسازی کنید تا دادههای جدید را ببینید. -
ناظران فایل و محرکها: به جای برنامههای مبتنی بر زمان، میتوانید از ناظران فایل برای واکنش به رویدادها استفاده کنید. برای مثال، اگر بانک شما میتواند یک صورتحساب روزانه ایمیل کند یا شما یک فایل CSV را در یک پوشه قرار دهید، یک اسکریپت میتواند آن فایل را شناسایی کند (با استفاده از
inotifyدر لینوکس یا مشابه) و فوراً روال واردسازی را اجرا کرده و سپس به Fava علامت دهد که رفرش شود. اگرچه Fava هنوز پشتیبانی از بارگذاری زنده به مرورگر را ندارد، اما حداقل دادهها بهروزرسانی میشوند تا دفعه بعد که صفحه را بازدید یا رفرش میکنید، دادهها بهروز باشند. برخی پروژههای جامعه حتی جلوتر میروند: برای ledger (یکی از شاخههای Beancount)، یک کاربر یک سرور کوچک ساخت که دادههای ledger را به صورت زنده به Grafana ارائه میدهد، نشان میدهد که رویکرد مشابهی را میتوان با Beancount اتخاذ کرد – اساساً ساخت یک سرویس پسزمینه که به طور مستمر دادهها را به داشبوردهای شما منتقل میکند. -
ادغام مستقیم API: به جای استفاده از فایلها، کاربران پیشرفته ممکن است مستقیماً به APIهای بانکی (مانند Plaid یا APIهای Open Banking منطقهای) متصل شوند تا تراکنشها را به صورت مکرر دریافت کنند. یک فرد پویا میتواند واردسازیهای «زنده» را در یک حلقه بنویسد (با محدودیت نرخ مناسب) – عملاً از بانک هر چند دقیقه یکبار دادههای جدید را پرسوجو کند. هیچ چیزی مانع شما نمیشود که “در API Plaid ثبت نام کنید و همین [اتوماسیون] را به صورت محلی انجام دهید”. هر تراکنش جدید میتواند بلافاصله به فایل Beancount افزوده شود. با این رویکرد، Fava واقعاً به داشبوردی با بهروزرسانی لحظهای برای حسابهای شما تبدیل میشود که با فید بهروز برنامههای تجاری رقابت میکند.
تازهسازی دادهها در Fava: وقتی دادههای شما بهروزرسانی میشوند، نمایش آنها در Fava ساده است: تازهسازی مرورگر (F5) یا کلیک روی اعلان بارگذاری مجدد، جدیدترین وضعیت دفتر کل را بارگیری میکند. توجه داشته باشید که fava --debug تغییرات دفتر کل را به مرورگر نمیفرستد. متن راهنمای آن «فعالکردن عیبیابی» است. این ابزار عیبیاب Werkzeug و بازلودر کد را برای کد خود Fava اجرا میکند و بارگذاری خودکار قالبهای Jinja را تنظیم مینماید. این عملکرد باعث بارگذاری مجدد کد سرور و قالب صفحات در حین توسعه افزونه میشود. این مورد ربطی به ناظر فایل که تغییرات دفتر کل را تشخیص میدهد، ندارد. Alternatively, if you’re building a custom front-end, you could have it poll Fava’s get_changed endpoint and refresh when it reports new data.
محاسبات فوری: تجزیه سریع Beancount به این معنی است که حتی اگر هر چند دقیقه یکبار فایل دفتر کل خود را بهروزرسانی کنید، زمان لازم از واکشی داده → بهروزرسانی فایل → بارگذاری مجدد Fava سریع است. به عنوان مثال، یک کاربر گزارش داده است که بارگذاری مجدد Fava پس از ویرایش فایل «تقریباً قابل تشخیص نیست… قطعاً کمتر از یک ثانیه» برای دفاتر کل با اندازه معقول است. بنابراین، میتوانید یک پنجره Fava را باز نگه دارید و بهطور دورهای با زدن بهروزرسانی، داشبورد زنده را شبیهسازی کنید. (برای تجربه واقعاً زنده، میتوان یک اسکریپت کوچک برای تازهسازی خودکار مرورگر ساخت یا از ویژگی تازهسازی مرورگر هر N ثانیه استفاده کرد.)
تطبیق و هشدارها: برای اعتماد به دادههای زمان واقعی، همچنین باید به دفعات موجودیها را تطبیق دهید. Beancount این کار را با تاییدیههای موجودی و یک «شاخص بهروز بودن» آسان میکند. در واقع، Fava حسابها را سبز، زرد یا قرمز رنگ میکند وقتی دستور open دارای فراداده fava-uptodate-indication باشد. رنگ نشان میدهد آیا بررسیهای موجودی اخیر شامل آخرین ثبتهای آن حساب است یا خیر. این میتواند برای مشاهده سریع اینکه موجودی حساب در دفتر کل با جدیدترین صورتحساب بانک مطابقت دارد یا نه استفاده شود. در یک تنظیم نزدیک به زمان واقعی، ممکن است بررسیهای موجودی روزانه خودکار انجام شود (بنابراین هر صبح، دفتر کل دارای موجودی بستهشده دیروز از بانک برای هر حساب است). سپس شاخص Fava به شما میگوید که آیا واردات خودکار چیزی را از دست داده یا اختلافی وجود دارد، و اطمینان میدهد که دادههای «زنده» مشاهده شده دقیق است.
مثال خودکارسازی: فرض کنید میخواهید بهروزرسانیهای روزانه جریان نقدی داشته باشید. میتوانید یک کرون جاب تنظیم کنید که هر شب ساعت 3 صبح اجرا شود: این برنامه یک اسکریپت پایتون را اجرا میکند که از API بانک شما برای دریافت تراکنشهای روز گذشته استفاده میکند، آنها را در import_today.beancount مینویسد، و سپس آن فایل را به دفتر کل اصلی شما پیوست میکند. همچنین یک تأیید موجودی پایان روز مینویسد. وقتی بیدار میشوید، Fava را باز میکنید – همه تراکنشها تا دیروز را نشان میدهد و درآمد/هزینههای ماه جاری بهروزرسانی شدهاند. اگر در طول روز هزینهای انجام دهید، میتوانید آن را به صورت دستی اضافه کنید (مثلاً از طریق فرم تراکنش جدید Fava روی تلفن همراهتان)، یا منتظر وارد کردن شبانه باشید. این روش ترکیبی (عمدتاً خودکار، با امکان افزودن دستی به صورت موردی) تصویری نزدیک به زمان واقعی ارائه میدهد. روش دیگر این است که صفحه دفتر روزنامه Fava را باز بگذارید و از آن به عنوان یک ثبت استفاده کنید: هنگام خرج کردن، تراکنش را به سرعت ثبت میکنید (مانند وارد کردن در دفتر چک) – پس شما فید زمان واقعی هستید. این روش دستیتر است، اما برخی کاربران از آگاهیای که به همراه دارد لذت میبرند. برای بهروزرسانیهای واقعاً جریان بدون مراحل دستی، باید در اسکریپتنویسی سرمایهگذاری کنید و احتمالاً از APIهای شخص ثالث همانطور که بحث شد استفاده کنید.
به طور خلاصه، با ترکیب خودکارسازی وارد کردن دادههای Beancount و بهروزرسانی سریع Fava، میتوانید دادههای مالی نزدیک به زمان واقعی دریافت کنید. شاید به راحتی با فشار دادن یک دکمه نتوان به همان سطح فید زنده مانند سرویسی مثل QuickBooks (که به طور خودکار فیدهای بانکی را میکشد) دست یافت، اما این امکانپذیر است – و مهمتر اینکه کنترل و شفافیت کامل فرایند را حفظ میکنید. همانطور که یکی از مدافعان حسابداری متن-باز اشاره کرده، کمی تلاش اولیه میتواند یک سیستم خودکار ایجاد کند که “خیلی بهتر از راهحلهای تجاری است و بسیار انعطافپذیرتر و توسعهپذیرتر”. در بخش بعدی، خواهیم دید چگونه قابلیتهای تجسم Fava به شما اجازه میدهد فوراً این دادههای بهروز شده را درک کنید و تراکنشهای خام را به بینش تبدیل کنید.
قابلیتهای تجسم در Fava (جریان نقدی، روندها، بازرسی زمان واقعی)
(GitHub - beancount/fava: Fava - رابط وب برای Beancount) گزارش صورت سود و زیان Fava (در رابط وب) از تصاویر پیشرفتهای مانند نقشههای درختی (تصویر شده) و نمودارهای خورشیدی برای درک سریع ترکیب درآمد و هزینهها پشتیبانی میکند. در این نقشه درختی، هر مستطیل نمایانگر یک دسته هزینه است که با اندازه آن مشخص شده – شما میتوانید بلافاصله ببینید که اجاره (بلوک بزرگ سبز) بیشترین هزینهها را تشکیل میدهد. نوار فیلتر بالا و کنترلها (بالا سمت راست) امکان تغییر ارز، نوع نمودار و دوره زمانی (مثلاً مشاهده دادههای ماهانه) را فراهم میکنند. Fava همچنین نمودارهای خطی (مثلاً ارزش خالص در طول زمان) و نمودارهای میلهای (مثلاً درآمد در مقابل هزینهها به تفکیک ماه) دارد تا به شناسایی روندها در دادههای مالی شما کمک کند.
یکی از بزرگترین قابلیتهای Fava تبدیل فوری دادههای دفتر کل به گزارشهای بصری و تعاملی است. به محض بارگذاری دفتر کل، Fava نمودارهایی تولید میکند که در یک نگاه جریانهای نقدی و روندها را به راحتی قابل فهم میسازد:
-
نقشه درختی/خورشیدی درآمد و هزینه: در صفحه صورت سود و زیان، Fava میتواند درآمد و هزینههای شما را به صورت نقشه درختی یا نمودار خورشیدی نمایش دهد. اینها برای «درک سریع» جریان نقدی فوقالعاده هستند. به عنوان مثال، اگر هزینههای ماهانه شما به شکل نقشه درختی نمایش داده شود، مساحت هر مستطیل مربوط به بزرگی هر دسته هزینه است. بلوکهای بزرگ فوراً نشان میدهند که بیشتر پول شما کجا خرج شده است (مثلاً اجاره یا وام مسکن، مالیات و غیره)، در حالی که بلوکهای کوچکتر هزینههای جزئیتر را نشان میدهند. این برای شناسایی روندها در هزینهها بسیار مفید است – اگر بلوک «خوردن بیرون» هر ماه بزرگتر شود، شما این را به صورت دیداری متوجه میشوید. میتوانید به نمودار خورشیدی تغییر حالت دهید تا تجزیهوتحلیل سلسلهمراتبی ببینید (مثلاً حلقه بیرونی ممکن است زیرمجموعههایی مانند خرید مواد غذایی در برابر رستورانها در دسته غذا را نشان دهد). این نمودارها برای هر بازه زمانی که فیلتر کردهاید (یک ماه، سال جاری و غیره) بهروزرسانی میشوند و تصویر فوری جریان نقدی برای آن دوره فراهم میآورند. یکی از کاربران فروم حسابداری متنباز گفته است: “من خیلی از نقشههای درآمد و هزینه استفاده میکنم. آنها درک بصری عالیای از جابجاییهای مالی ما میدهند.” – این نوع درک فوری دقیقاً هدف نمودارهای Fava است.
-
خالص دارایی و ترازنامه در طول زمان: فاوا یک نمودار خطی برای خالص دارایی در طول زمان ارائه میدهد (در صفحه «ترازنامه» یا «آمار»). این نمودار مجموع داراییها منهای بدهیهای شما را در هر نقطه زمانی (بر اساس روز، هفته یا ماه) ترسیم میکند. این برای شناسایی روندها بسیار ارزشمند است – میتوانید مسیر مالی خود را ببینید (مثلاً به طور پیوسته رو به بالا باشد یا در زمانهای خاصی افت داشته باشد). اگر سرمایهگذاری دارید، میتوانید بین نمایش ارزش بر اساس هزینه یا ارزش بازار (اگر داده قیمت ثبت شده باشد) جابجا شوید – برای مثال، ممکن است خالص دارایی شما بر اساس ارزش بازار با قیمت سهام نوسان کند، در حالی که بر اساس هزینه این روند نرمتر است. فاوا همچنین میتواند مانده حسابها را در طول زمان نمایش دهد. اگر روی یک حساب کلیک کنید (مثلاً Assets:Bank:Checking)، صفحه حساب نموداری از سابقه مانده آن حساب نمایش میدهد. میتوانید فوراً ببینید حساب نقدی شما چگونه حرکت میکند – که در واقع نمودار جریان نقدی است (شیب خط مانده نشاندهنده جریان خالص نقدی است). اگر روند نزولی داشته باشد، میدانید که در آن دوره بیشتر از درآمد خرج کردهاید. با بررسی این روندها، ممکن است الگوهایی مانند «هر دسامبر پسانداز من کاهش مییابد (هزینههای تعطیلات)» یا «سرمایهگذاریهای من در این فصل به شدت رشد کردهاند» را شناسایی کنید.
-
نمودارهای میلهای برای مقایسه دورهای: در نمای صورتحساب سود و زیان، فاوا تبهای «سود ماهانه»، «درآمد ماهانه»، «هزینههای ماهانه» و غیره دارد. انتخاب این تبها نمودارهای میلهای بر اساس ماه نمایش میدهد. به عنوان مثال، سود خالص ماهانه هر مازاد/کسری ماه را به صورت میلهای نشان میدهد، که مقایسه عملکرد در ماههای مختلف را آسان میکند. میتوانید به سرعت موارد غیرمعمول را شناسایی کنید (مثلاً میله منفی بزرگ در آوریل نشان میدهد که آن ماه زیان/هزینه غیرمعمول داشته است). به طور مشابه، نمودار میلهای «هزینههای ماهانه» هزینهها را بر اساس دستهبندی هر ماه روی هم قرار میدهد یا گروهبندی میکند، تا ببینید کدام دستهها نوسان دارند. این برای شناسایی روندها در طول زمان عالی است – مثلاً ممکن است متوجه شوید هزینههای «سفر» شما هر تابستان افزایش مییابد یا قبضهای «خدمات عمومی» در زمستان بالاتر است. فاوا اساساً برخی از قابلیتهای یک اپلیکیشن بودجهبندی (پیگیری روندها) را با قابلیت تنظیم کامل (زیرا شما دستهها و نحوه گروهبندی آنها را تعریف میکنید) به شما ارائه میدهد.
-
فیلتر و بازرسی دادهها در زمان واقعی: تجسمها در Fava ایستا نیستند؛ آنها بهصورت همزمان با فیلترهای Fava کار میکنند. فرض کنید میخواهید یک سناریوی خاص را بررسی کنید: «جریانهای نقدی سهماهه من فقط برای حسابهای کسبوکارم چگونه است؟» میتوانید فیلتر زمان را روی سهماهه اول ۲۰۲۵ تنظیم کرده و حسابها را به سلسلهمراتب کسبوکار خود محدود کنید – Fava بلافاصله نمودارها را بهروزرسانی میکند تا درآمد خالص، نمودار درختی هزینهها و غیره را فقط برای آن زیرمجموعه نشان دهد. این برش تعاملی به شما امکان میدهد تحلیلهای لحظهای را بسیار سریع انجام دهید، بدون نوشتن پرسوجوها. نمای دفتر روزنامه نیز از فیلترهای زنده پشتیبانی میکند: میتوانید به دنبال پرداختکننده یا زیررشته روایت بگردید و بلافاصله فهرست فیلترشدهای از تراکنشها را ببینید. اگر به دادههای زمان واقعی نگاه میکنید (مثلاً همین هفته گذشته تراکنشها را وارد کردهاید)، میتوانید با برچسبی مثل
#uncategorizedفیلتر کنید تا تراکنشهای جدیدی را که ممکن است نیاز به دستهبندی داشته باشند ببینید، یا با@pending(اگر ورودیهای در حال انتظار را علامتگذاری کرده باشید) مشاهده کنید که چه مواردی هنوز تسویه نشدهاند. این قابلیت بازرسی در زمان واقعی همچنین به تضمین کیفیت داده کمک میکند — زیرا میتوانید ناهنجاریها را بهصورت فوری جدا و رسیدگی کنید. -
صورت جریان نقدی (غیرمستقیم): در حالی که Beancount/Fava بهطور پیشفرض صورت جریان نقدی رسمی (تقسیمبندی عملیاتی/سرمایهگذاری/تأمین مالی) تولید نمیکند، میتوانید آن را با پرسوجوهای سفارشی یا ساختاردهی حسابها شبیهسازی کنید. به عنوان مثال، میتوانید برخی تراکنشها را برچسبگذاری کنید یا از حسابهای خاصی برای سرمایهگذاری و تأمین مالی استفاده کنید، سپس مجموع آنها را پرسوجو کنید. رابط پرسوجوی Fava BQL را مانند
SELECT sum(position) WHERE account ~ 'Assets:Bank:Checking'اجرا میکند. این مورد مانده حساب جاری پشت نمودارها را برمیگرداند. مثال کار شده زیر، کل روند کامل را نشان میدهد. با این حال، اکثر کاربران شخصی ترکیب روند مانده و نمودارهای درآمد/هزینه را برای درک جریانهای نقدی کافی میدانند. -
نمایش داراییها و پورتفولیو: در صفحه Holdings، Fava داراییهای فعلی شما از کالاها (مثل سهام، اوراق قرضه، ارزهای دیجیتال) را به همراه مقادیر، هزینه، ارزش بازار و سود تحقق نیافته فهرست میکند. اگرچه این یک جدول است و نمودار نیست، برای بررسی بلادرنگ وضعیت پورتفولیوی شما بسیار مفید است. برخی افزونههای جامعه (مانند fava-investor که بعداً بحث میشود) نمایشهای تصویری بیشتری برای پورتفولیوها اضافه میکنند، مانند نمودارهای دایرهای تخصیص یا نمودارهای عملکرد. حتی بدون افزونهها، میتوانید ببینید مثلاً ارزش پورتفولیوی سهام شما بر اساس آخرین قیمتها چگونه تغییر میکند – اگر قیمتها را به طور منظم بهروزرسانی کنید (که میتواند روزانه خودکار شود)، نمودارهای Fava ارزش بازار لحظهای سرمایهگذاریهای شما را نشان خواهند داد.
مثال عملی: دو ماه هزینهها
این مثال به طور کامل روی Beancount 3.2.3 با beanquery 0.2.0 اجرا میشود. دفتر کل را به عنوان example.beancount ذخیره کنید. شامل دو پرداخت حقوق و چهار هزینه است.
option "title" "Analytics example"
option "operating_currency" "USD"
2024-01-01 open Assets:Bank:Checking USD
2024-01-01 open Expenses:Food:Groceries USD
2024-01-01 open Expenses:Food:Dining USD
2024-01-01 open Expenses:Housing:Rent USD
2024-01-01 open Income:Salary USD
2024-01-01 open Equity:Opening-Balances USD
2024-01-05 * "Employer" "January salary"
Income:Salary -3000.00 USD
Assets:Bank:Checking 3000.00 USD
2024-01-08 * "Grocery Store" "Weekly groceries"
Expenses:Food:Groceries 120.00 USD
Assets:Bank:Checking -120.00 USD
2024-01-12 * "Restaurant" "Dinner out"
Expenses:Food:Dining 80.00 USD
Assets:Bank:Checking -80.00 USD
2024-02-01 * "Landlord" "February rent"
Expenses:Housing:Rent 1000.00 USD
Assets:Bank:Checking -1000.00 USD
2024-02-05 * "Employer" "February salary"
Income:Salary -3000.00 USD
Assets:Bank:Checking 3000.00 USD
2024-02-10 * "Grocery Store" "Weekly groceries"
Expenses:Food:Groceries 150.00 USD
Assets:Bank:Checking -150.00 USDابتدا آن را بررسی کنید. سپس پرسوجوی هزینهها بر اساس دستهبندی را اجرا کنید.
bea --file example.beancount check
bea --file example.beancount query "SELECT account, sum(position) WHERE account ~ 'Expenses' GROUP BY account ORDER BY account"دفتر کل پاک با خروجی 0 از bea check پایان مییابد؛ خطاها با خروجی غیر صفر لیست میشوند. پرسوجو یک ردیف به ازای هر حساب هزینه باز میگرداند.
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) را بازمیگرداند. همان پرسوجوها بدون تغییر در صفحه Query فاو اجراء میشوند. 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 را از طریق اتصال بخواند) وصل شوند. -
گرافانا (داشبوردهای سریزمانی): گرافانا برای نظارت و دادههای سریزمانی بسیار محبوب است. دادههای مالی در طول زمان (هزینهها، ماندهها) میتوانند به عنوان سریزمانی در نظر گرفته شوند. در جامعه کاربران بحثهایی درباره اتصال بینکانت به گرافانا وجود داشته است. یک ایده، پلاگین منبع داده گرافانا بود که میتوانست کوئریهای BQL را مستقیماً روی فایل بینکانت اجرا کند. این امکان را میداد که پنلهای گرافانا مثلاً "مانده حساب جاری" را به صورت نقالهای یا "هزینههای ۳۰ روز گذشته" را به صورت نمودار نمایش دهند، با کوئریکردن دفترکل. تا سال ۲۰۲۵، پلاگین اختصاصی منتشر نشده است، اما علاقهمندان راهحلهای کارساز ساختهاند. برای مثال، یک کاربر ردیت به نام aquilax یک سرور ساده ساخته که دادههای Ledger CLI را برای گرافانا فراهم میکند و آن را با نام grafana-ledger-datasource-server منتشر کرده است. همین ایده میتواند برای بینکانت هم اعمال شود: شما میتوانید یک سرور HTTP کوچک به زبان پایتون بنویسید که دفترکل بینکانت را بارگذاری میکند (با استفاده از API بینکانت برای کوئری داده) و نقاط انتهایی (endpoints) ارائه کند که فریمهای دادهای JSON برای گرافانا برمیگردانند. گرافانا یک پلاگین منبع داده JSON عمومی دارد که میتواند از این API داده بکشد. در عمل، این یعنی میتوانید داشبورد گرافانا با پنلهایی مثل "درآمد ماهانه (نمودار میلهای)" یا "مانده نقدی روزانه (نمودار خطی)" طراحی کنید و این پنلها دادهها را از API مبتنی بر بینکانت شما دریافت کنند. گرافانا گزینههای متنوعی برای مصورسازی فراهم میکند (حاشیهنویسیها، آستانهها، ترکیب با معیارهای سرور و غیره). آندریاس گرستمایر (یکی از نگهدارندگان فاوا) دقیقاً همین روش را پیشنهاد کرد و حتی اشاره کرد که یک افزونه فاوا به نام fava-dashboards ایجاد کرده است (در ادامه بیشتر توضیح داده شده) تا نمودارها را از کوئریهای BQL رندر کند، به عنوان جایگزینی برای راهاندازی کامل گرافانا. اگر رابط کاربری گرافانا را ترجیح میدهید، یکپارچهسازی آن ممکن است – تنها نیازمند ساخت پل داده است.
-
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 صفحه Query را از طریق API کوئری JSON ارائه میدهد، بنابراین رابط سفارشی میتواند BQL ارسال کند و جداول بازگشتی را رندر کند بدون اینکه بکاند کوئری جدید بسازید.
-
ادغام Excel/PowerBI: قابل ذکر است که حتی میتوانید با Excel یا PowerBI ادغام کنید. تا زمانی که
bea queryقابلیت صادر کردن بومی CSV را بهدست نیاورد، از صفحه Query فاوَا برای صادر کردن فایلهای صفحهگستردهای استفاده کنید که Excel مستقیماً باز میکند. یک روند کاری میتواند این باشد: یک کار شبانه یک فایل CSV شامل گزارشهای کلیدی مالی از Beancount تولید کند و PowerBI طوری تنظیم شود که آن فایل را وارد کند. این کمی غیرمستقیم است، اما برای سازمانهایی که از قبل خیلی زیاد از Excel/PowerBI استفاده میکنند، ادغام کمدردسری است. PowerBI همچنین از منابع داده Python پشتیبانی میکند، بنابراین میتوان یک اسکریپت کوتاه Python نوشت که پرسوجوهای BQL را اجرا کند و از آن به عنوان منبع داده در PowerBI استفاده کرد و اتصال مستقیمی بهدست آورد.
مطالعه موردی – ایده ادغام Grafana: جاش، یکی از کاربران Beancount، در لیست پستی درباره ارسال معیارهای Beancount به Prometheus و مشاهده آنها در Grafana پرسید. توسعهدهندگان اصلی پاسخ دادند که به جای تکرار دادهها در Prometheus، روش بهتر افزونهای برای Grafana یا سرویسی است که مستقیماً دفتر کل Beancount را پرسوجو کند. آندریاس نمونه راه حل خود را که افزونه fava-dashboards اوست و نمودارهای سفارشی را مستقیماً داخل فاوَا نشان میدهد، به اشتراک گذاشت. نتیجه این است: شما گزینه دارید – یا با زیرساخت BI موجود ادغام کنید (Prometheus+Grafana یا SQL+Metabase) یا فاوَا را برای برآوردن نیازهایتان توسعه دهید (بخش بعدی به این موضوع خواهد پرداخت).
ملاحظات امنیتی و کاربران چندگانه: اگر در حال ادغام در ابزارهای خارجی هستید، مراقب حساسیت دادهها باشید. متن ساده Beancount معمولاً شامل اطلاعات مالی خصوصی است، بنابراین هر سروری که آن را در معرض قرار میدهد باید ایمن (معتبرسازی شده) باشد. اگر دادهها را به یک ابزار BI ابری منتقل کنید، ممکن است مقداری از حریم خصوصی خود را از دست بدهید. ابزارهای خودمیزبانی شده (نسخ متنباز Grafana/Metabase) میتوانند به صورت محلی اجرا شوند تا این مشکل کاهش یابد. همچنین اگر چندین نفر نیاز به مشاهده داشبوردها دارند، داشبورد فقط خواندنی خارجی ممکن است بهتر باشد تا دادن دسترسی به همه به فاوَا (جایی که در صورت بیدقتی امکان ویرایش داده وجود دارد). برای مثال، یک استارتاپ میتواند 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 شروع میشود، میتواند این ماژول را بارگذاری کرده و آن را در اپلیکیشن ادغام کند. افزونهها میتوانند صفحات گزارش جدید ثبت کنند، به رویدادها متصل شوند و حتی شامل جاوااسکریپت سفارشی برای تعامل بیشتر باشند. Fava نسخه 1.30.16 دو افزونه را به صورت بستهبندی شده دارد: fava.ext.auto_commit و fava.ext.portfolio_list. سایر افزونهها میتوانند از طریق pip نصب شوند یا از ابتدا نوشته شوند.
برای فعالسازی یک افزونه، از دستور custom directive Beancount در فایل دفتر کل خود استفاده میکنید:
2010-01-01 custom "fava-extension" "my_extension_module" "{'option': 'value'}"این به Fava میگوید که ماژول داده شده را بارگذاری کند. اگر افزونهای را از طریق pip نصب کردهاید، نام ماژول آن را اینجا ارجاع میدهید. رشته اختیاری در پایان، پیکربندی افزونه است. Fava آن را به عنوان یک مقدار Python پارس میکند، بنابراین "{'option': 'value'}" به شکل یک دیکشنری دریافت میشود.
مثال – افزونه خودکار کامیت: افزونه بستهبندی شده fava.ext.auto_commit هنگام ویرایش فایل از طریق 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 را override میکند. هر hook یک git commit در دایرکتوری فایل دفتر کل اجرا میکند. پس دفتر کل باید قبلاً در یک checkout گیت باشد. این مثال نشان میدهد چطور افزونهها به رویدادهای ویرایش Fava متصل میشوند.
مثال – افزودنی فهرست پرتفوی: افزونهٔ بستهبندیشده fava.ext.portfolio_list صفحهای اضافه میکند که حسابهای سرمایهگذاری شما را فهرست میکند. این افزونه report_title = "Portfolio List" را تنظیم کرده و یک قالب ارسال میکند. فوا این را تشخیص داده و یک ورودی جدید در نوار کناری با نام «فهرست پرتفوی» زیر گزارشها اضافه میکند. همچنین 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 باشد، فوا میتواند آن را با نام پیدا کند). هنگام شروع فوا، اکنون صفحه «بدهکاریهای پیرایش شده» را خواهید دید.
در باطن، فوا روشهای افزودنی شما را در نقاط ثابت فراخوانی میکند. قلابهای در دسترس در فوا 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 تزئین شود، علاوه بر این، به یک نقطه پایانی JSON API زیر افزودنی تبدیل میشود. معمولاً قلابهای فراهمشده به همراه یک قالب کافی است.
مستندات فوا اشاره میکند که سیستم افزودنی هنوز در حال تکامل است، اما قابل استفاده است. در واقع، بسیاری از ویژگیهای پیشرفته به صورت افزودنی نمونهسازی شدهاند.
داشبوردهای سفارشی با fava-dashboards (افزودنی جامعه)
به جای نوشتن افزودنی از ابتدا، ممکن است از افزونهٔ شخص ثالث fava-dashboards استفاده کنید که توسط یکی از نگهدارندگان فوا ساخته شده است. این افزودنی به شما اجازه میدهد داشبوردهای دلخواه خود را از طریق یک فایل پیکربندی YAML تعریف کنید، که شامل متن، جدول و نمودار، مبتنی بر پرسوجوهای BQL است. اساساً روشی برای ایجاد صفحات جدید در فوا است که شامل چند پنل سفارشی میباشد.
نصب و راهاندازی: ابتدا بسته را نصب میکنید (برای مثال pip install fava-dashboards). نسخه 2.0.2 به صورت منظم در کنار فوا 1.30.16 بارگذاری میشود. سپس در فایل Beancount خود، آن را با یک دستور سفارشی که به پیکربندی داشبوردهای شما اشاره میکند، فعال کنید. به عنوان مثال:
2010-01-01 custom "fava-extension" "fava_dashboards" "{ 'config': '/path/to/dashboards.yaml' }"(fava-dashboards/README.md در 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 و رفتن به داشبورد «نمای کلی»، خالص دارایی محاسبه شده شما نمایش داده میشود. سپس میتوانید قالب را بهبود بخشید یا نمودارها را بهدلخواه اضافه کنید.
افزونههای قابل توجه دیگر: علاوه بر 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 یک ابزار ایستا نیست – بلکه یک پلتفرم قابل توسعه است. با کمی پایتون یا حتی فقط کد پیکربندی، میتوانید آن را گسترده سفارشی کنید. بسیاری از کاربران اسکریپتها یا توسعههای کوچک را در انجمنها به اشتراک میگذارند تا کارهایی مانند نمایش قبوض آینده، تولید فاکتور PDF از تراکنشها یا ادغام Beancount با کتابخانههای محاسبه مالیات را انجام دهند. وقتی در یادگیری یا استفاده از این توسعهها سرمایهگذاری کنید، سیستم تحلیل مالی بسیار سفارشی و پیشرفتهای بدون شروع از صفر خواهید داشت.
موارد استفاده: امور مالی شخصی در مقابل حسابداری کسبوکار کوچک
Beancount و Fava را میتوان برای هر دو حسابداری شخصی و کسبوکار کوچک استفاده کرد، اما موارد استفاده و مزایا کمی در تأکید متفاوت است:
امور مالی شخصی
برای افراد، ترکیب Beancount+Fava در ارائه دید کامل و بینش به امور مالی خود به خوبی میدرخشد بدون آنکه به برنامههای مالکیتی وابسته باشند. موارد معمول استفاده امور مالی شخصی شامل:
-
پیگیری هزینهها و بودجهبندی: بسیاری از کاربران از Beancount برای ثبت هر هزینه استفاده میکنند و سپس الگوهای خرج کردن را تحلیل میکنند. با Fava، آنها میتوانند ببینند پول هر ماه کجا میرود (نقشه درختی هزینهها) و بودجهها را با مقایسه با مقادیر مورد انتظار پیگیری کنند (برخی این کار را از طریق افزونه Budgets یا کوئریهای سفارشی انجام میدهند). یکی از کاربران توضیح داد که پس از پذیرش Beancount، «تحلیل دادههای مالی (خرج کردن، کمک مالی، مالیات و غیره) بسیار آسان است. انجام آن با Fava ساده است، اما با اسکریپتها هم راحت است... من یک اسکریپت پایتون دارم که دادهها را با استفاده از BQL از Beancount استخراج میکند، سپس از pandas برای تهیه گزارش استفاده میکنم.» این نشان میدهد چگونه کاربران شخصی از هر دو قابلیت رابط کاربری داخلی و امکان اسکریپتنویسی برای تحلیلهای سفارشی بهرهمند میشوند.
-
ارزش خالص و پیگیری اهداف: چون میتوانید همه داراییها (حسابهای بانکی، سرمایهگذاریها، حتی داراییهای فیزیکی اگر بخواهید) را در یک دفتر کل وارد کنید، دید واحدی از ارزش خالص به دست میآورید. علاقهمندان به امور مالی شخصی از این برای پیگیری پیشرفت به سمت اهداف (مثلاً «عدد FI» یا پرداخت بدهی) استفاده میکنند. نمودارهای Fava که ارزش خالص را در طول زمان نشان میدهند انگیزهبخش هستند – شما میتوانید منحنی افزایش ثروت خود را بهصورت واضح ببینید. معمول است که بدهیهایی مانند وامهای دانشجویی یا وام مسکن را در Beancount ثبت و ترازهای آنها را بهروزرسانی کنید؛ دفتر کل سپس تصویر کاملی از سلامت مالی ارائه میدهد.
-
سرمایهگذاریها و رمز ارزها: استفاده شخصی اغلب شامل پیگیری یک پرتفوی میشود. Beancount میتواند سهام، رمز ارز و غیره را مدیریت کند، با محاسبه بهای تمامشده و سود واقعی (از طریق افزونهها یا کوئریها). مزیت نسبت به سایتهای کارگزاری این است که میتوانید همه حسابها را یکپارچه کنید و تخصیص واقعی داراییها را ببینید. افزونههای جامعه مانند fava-investor، بهعنوان مثال، صفحات تحلیل سرمایهگذاری به Fava اضافه میکنند. این کاری است که معمولاً سرمایهگذاران علاقهمند در Excel انجام میدهند؛ Beancount راهی دقیقتر و خودکار فراهم میکند. یک پست وبلاگی به نام «Beancount: حسابداری DeFi برای مبتدیها» حتی نحوه استفاده از آن برای پیگیری تراکنشهای رمز ارز و کشاورزی بازده (yield farming) را نشان میدهد، که انعطافپذیری آن را در سناریوهای مدرن امور مالی شخصی به نمایش میگذارد.
-
امور مالی شخصی چندارزی: اگر در خارج از کشور زندگی میکنید یا سرمایهگذاریهای خارجی دارید، Beancount بسیار مفید است چون میتواند ارزها را تبدیل و جمعبندی کند. کاربران اشاره کردهاند که «بسیاری از نرمافزارهای حسابداری در مدیریت چندارزی خوب نیستند... با Beancount میتوانید هر کالایی که میخواهید را تعریف کنید» و گزارشها را به ارز ترجیحی خود دریافت کنید. برای یک کاربر شخصی که مثلاً حقوق به دلار آمریکا و هزینهها به یورو دارد، این یک مزیت بزرگ است.
-
ردیابی زندگی و دفترچه خاطرات: یک مورد استفاده غیرمعمول اما واقعی: برخی دفتر کل را به عنوان یک لاگ زندگی در نظر میگیرند و تراکنشها را با رویدادهای زندگی (مانند
#weddingیا#vacation2025) برچسبگذاری میکنند و سپس از آن برای محاسبه هزینههای رویدادها یا حتی به عنوان روزنامه فعالیتها (اطلاعات مالی به عنوان نماینده رویدادهای زندگی) استفاده میکنند. فرمت متن ساده و برچسبگذاری این امکان را به روشی فراهم میکند که ابزارهای سنتی به راحتی اجازه نمیدهند. -
سادگی و مالکیت: مالیات شخصی همچنین مربوط به ذهنیت است. بسیاری Beancount را انتخاب میکنند زیرا «میخواستند این دادهها را مالک باشند و به آسانی آنها را تحلیل کنند و نمیخواستند در دام اشتراک یا فروشندهای گرفتار شوند». از بین رفتن اخیر Mint.com (یک ابزار رایگان بودجهبندی محبوب) علاقهمندان را به سمت حسابداری متن ساده برای دوام بیشتر سوق داده است. با Beancount، آنها میدانند که میتوانند در ۲۰ سال آینده نیز دفتر کل خود را باز کنند. برای مالیات یک فرد، دادههای 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 جادوگری در این زمینه ندارد، اما بسیاری از نرمافزارهای کسبوکار کوچک فراتر از ارائه چند قالب کاری انجام نمیدهند. مزیت این است که میتوانید هر چیز غیرمعمولی را اسکریپت کنید. مثلاً اگر برنامه شناسایی درآمد سفارشی دارید، میتوانید آن ورودیهای دفتر روزنامه را در پایتون اسکریپت کنید و وارد نمایید.
-
شفافیت و قابل حسابرسی بودن: کسبوکارها ممکن است قدردان باشند که 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 کار کند (چون اساساً یک دفتر روزنامه تعمیمیافته است) – ممکن است آن را به اکسل صادر کند و تنظیمات لازم را انجام دهد. برخی کسبوکارها ممکن است به همین دلیل نرمافزار شناختهشدهای را ترجیح دهند یا حداقل حسابداری را داشته باشند که با داده متنی خام راحت باشد.
چه کسانی برای کسبوکار از آن استفاده میکنند؟ احتمالاً کاربران حرفهای: استارتاپهای فناوری، فریلنسرهایی با سابقه برنامهنویسی، یا شرکتهایی که کنترل داده را بسیار ارزشمند میدانند (مثلاً شاید شرکتهای معاملاتی مالی که گزارش دهی سفارشی میخواهند). یک موضوع در Reddit بود که کسی پرسید آیا Beancount برای یک شرکت معاملاتی مناسب است – پاسخها نشان داد بله، این نرمافزار چندارزی را پشتیبانی میکند و میتواند صورتهای مالی مورد نیاز را تولید کند، ولی شما باید ابزارهای جانبی حول آن بسازید.
برای جمعبندی این بخش: کاربران امور مالی شخصی بیکانت را بهخاطر بینش و کنترل دقیقی که روی پول شخصیشان میدهد دوست دارند – این نرمافزار امور مالی را به یک مجموعه داده تبدیل میکند که میتوانند آن را جستجو و از آن یاد بگیرند، و کارهایی مانند ردیابی آسان هر هزینه و محاسبه شاخصهایی که ابزارهای بودجهبندی معمول نمیتوانند ارائه دهند را ممکن میسازد. کاربران کسبوکارهای کوچک شفافیت، صرفهجویی در هزینه و قابلیت هکپذیری را میپسندند – آنها میتوانند حسابداری را با بقیه پشته نرمافزاری خود یکپارچه کنند و از قفل شدن به فروشنده یا پرداخت هزینههای ماهانه اجتناب کنند. هر دو مورد استفاده از تحلیلهای لحظهای بهره میبرند: یک شخص ممکن است پیشرفت بودجه ماهانه خود را بررسی کند، یک کسبوکار ممکن است جریانهای نقدی روزانه را رصد کند – در هر دو حالت، Fava میتواند هنگام دریافت دادههای بهموقع اطلاعات بهروز را ارائه دهد.
مقایسه با سایر پلتفرمهای تحلیل لحظهای
مقایسه Beancount+Fava با سایر راهحلهایی که تحلیلهای مالی «لحظهای» ارائه میدهند، مانند QuickBooks (با فیدهای بانکی زنده) و Power BI (یا داشبوردهای BI مشابه) مفید است. هر رویکرد دارای نقاط قوت و محدودیتهایی از نظر شفافیت، انعطافپذیری و پاسخگویی است:
| جنبه | Beancount + Fava (متنباز) | QuickBooks (با بانک فید) | Power BI / هوش تجاری عمومی |
|---|---|---|---|
| شفافیت و مالکیت دادهها | کاملاً شفاف – دادهها به صورت متن ساده هستند، میتوانید هر تراکنش را بازبینی کنید. منطق همه قابل مشاهده است (بدون الگوریتمهای مخفی). فرمت برای همیشه مال شماست. کنترل نسخه میتواند ردیابی تغییرات را نشان دهد. | مبهم – دادهها در یک پایگاه داده ابری اختصاصی ذخیره میشوند. شما به صادرات Intuit برای پشتیبانگیری وابستهاید. برخی فرایندها (مثلاً دستهبندی خودکار) کاملاً قابل مشاهده نیستند. لوگهای حسابرسی محدود است. اگر پرداخت را متوقف کنید، ممکن است دسترسی آسان به دادههای خود را از دست بدهید. | بسته به منبع داده – Power BI خود یک ابزار است. اگر به پایگاه داده باز متصل باشد، مالکیت آن دادهها را حفظ میکنید. با این حال، فایلها یا داشبوردهای Power BI قالب اختصاصی دارند و مشاهده آنها نیاز به Power BI دارد. شفافیت محاسبات خوب است (شما آنها را تعریف میکنید) اما کل سیستم پیچیده است. |
| انعطافپذیری و سفارشیسازی | بسیار انعطافپذیر. میتوانید هر ساختار حسابی و هر کالای/ارز را تعریف کنید. میتوانید رفتار یا تحلیل سفارشی را با اسکریپت (پایتون، افزونهها) بسازید. جریان کاری تحمیلی وجود ندارد – آن را مطابق نیازهای شخصی یا کسبوکار خود تنظیم میکنید. سیستم افزونههای Fava و ابزارهایی مانند fava-dashboards امکان داشبوردهای سفارشی در داخل برنامه را میدهد. اگر چیزی کم باشد، احتمالاً میتوانید خودتان بسازید یا ادغام کنید. | متوسط. QuickBooks برای حسابداری استاندارد کسبوکارهای کوچک ویژگیمحور است (صدور فاکتور، حقوق و دستمزد (افزونه جداگانه)، گزارشهای پایه). اما شما محدود به ویژگیهای ارائه شده توسط Intuit هستید. نمودار حسابها و دستهها باید در قالب آن قرار بگیرند. گزارشهای سفارشی محدود هستند؛ نمیتوانید به دلخواه پایگاه داده را جستجو کنید. ادغامها از طریق API محدود Intuit یا خروجی به اکسل هستند. شما انعطافپذیری را به خاطر راحتی معامله میکنید. | بسیار انعطافپذیر برای تحلیل و مصورسازی. میتوانید تقریباً هر نمودار یا KPI را بسازید اگر دادهها قابل دسترس باشند. Power BI میتواند دادههای مالی را به راحتی با دادههای دیگر (فروش، تحلیل وب و غیره) ترکیب کند. با این حال، این یک سیستم حسابداری نیست – باید دادهها آماده باشند (که ممکن است از Beancount آمده باشد!). اصول دوطرفه یا حسابداری را اعمال نمیکند؛ یک صفحه خالی است. انعطافپذیری در مصورسازی بالاست (مقیاسهای سفارشی DAX و غیره) اما نیاز به تخصص دارد. |
| پاسخگویی به صورت بلادرنگ | نزدیک به بلادرنگ با راهاندازی مناسب. اگر ورود دادهها را خودکار کنید (فیدها یا وارد کردن مکرر) Fava به محض بهروزرسانی و بارگذاری مجدد دفتر کل آن را نشان میدهد. به طور پیشفرض «فشار» بلادرنگ نیست (نیاز به تازهسازی دستی) اما میتوانید هرچقدر خواستید بهروزرسانی کنید (دقیقهای، ساعتی). سرعت بهروزرسانی بسیار سریع است (تجزیه متن در میلیثانیه برای تغییرات کوچک). شما کنترل فرکانس را دارید – میتواند اگر اسکریپت شود پیوسته باشد. منتظر چرخه همگامسازی فروشنده نمیمانید. | برای تراکنشهای بانکی نزدیک به بلادرنگ طراحی شده: «فیدهای بانکی اجازه میدهد در زمان واقعی کسبوکارتان را ببینید.» در عمل، فیدهای بانکی QuickBooks آنلاین یکبار در روز یا به درخواست بهروزرسانی میشوند (بسته به بانک). به طور خودکار تراکنشهای جدید را میکشد و سعی میکند دستهبندی کند، پس نیازی به وارد کردن دستی نیست. تغییرات بدون دخالت دستی روی داشبورد ظاهر میشوند. با این حال، برخی دادهها (مانند تراکنشهای در انتظار) ممکن است تا زمان تسویه نمایش داده نشوند. همچنین برخی گزارشها ممکن است تا اقدام خاصی بهروزرسانی نشوند. عموماً پاسخگویی خوب برای دادههای بانکی؛ کمتر برای ورودیهای روزنامه دستی (هنوز بلادرنگ است اما شما خودتان وارد میکنید). | اگر با اتصال زنده تنظیم شود، داشبوردها میتوانند بهصورت بلادرنگ یا زمانبندی شده بهروزرسانی شوند. مثلاً داشبورد Power BI با DirectQuery روی پایگاه داده SQL میتواند هر بار که باز میکنید یا حتی خودکار بهروزرسانی شود. با حالت واردات، باید طبق زمانبندی (مثلاً ساعتی) تازهسازی کنید. پس میتواند نزدیک به بلادرنگ باشد ولی پیچیدگی در نگهداری خط لوله داده است. همچنین هر تغییر در دادههای پایه نیاز به تازهسازی مدل یا پرسوجوها دارد. شاید کمی تأخیر باشد بسته به تنظیمات (و اگر از Power BI ابری استفاده کنید محدودیتهایی در فرکانس تازهسازی خودکار در پلنهای رایگان وجود دارد). |
| اتوماسیون و ورود داده | واردات میتواند بسیار خودکار شود اما نیاز به راهاندازی سفارشی دارد. ممکن است لازم باشد اسکریپت بنویسید/نگهداری کنید یا از واردکنندههای انجمنی برای هر بانک یا منبع داده استفاده کنید. اتصال بانک از پیش آماده وجود ندارد (جز آنچه خود ایجاد کنید). بنابراین راهاندازی اولیه اتوماسیون تلاش میطلبد. اما وقتی راهاندازی شد، میتواند کاملاً خودکار باشد با کمترین ورود دستی (برخی کاربران ~۹۵٪ اتوماسیون را محقق کردند). همچنین از ورود دستی برای موارد غیرقابل اتوماسیون پشتیبانی میکند (با فرم وب Fava یا ویرایش متن). | بسیار خودکار برای فیدهای بانکی/کارت اعتباری (نیاز به کد ندارد – فقط حسابها را در QuickBooks متصل کنید). همچنین دستهها را خودکار پیشنهاد میدهد (بر اساس دادههای گذشته و کمی یادگیری ماشین). «هر تراکنش فوراً همگام و مرتب میشود ... QuickBooks دستهها را پیشنهاد میکند و هوشمندتر میشود.» این یک مزیت بزرگ در راحتی است – کار دستی کمتر. اما اتوماسیون بیشتر برای حسابهای مالی است؛ موارد دیگر (مثل تقسیم هزینه به کلاسها) ممکن است نیاز به بازبینی دستی داشته باشند. همچنین اگر فید بانکی خراب شود، کاربر باید دوباره وصل یا فایلها را آپلود کند. | Power BI اصلاً مربوط به ورود داده نیست – به اتوماسیون منبع داده وابسته است. اگر منبع دادهتان صفحه گسترده دستی باشد، پس بلادرنگ نیست. اگر پایگاه دادهای باشد که با فرایند ETL بهروزرسانی شود، میتواند نزدیک به بلادرنگ باشد. پس اتوماسیون بستگی دارد به دادهای که به Power BI میدهید. خود Power BI میتواند طبق زمانبندی دادهها را تازهسازی کند. خلاصه، Power BI میتواند دادههای خودکار را خوب بازتاب دهد اما اتوماسیون را خودش ایجاد نمیکند (باید خط لوله داده خودکار داشته باشید که آن را تغذیه کند). |
| همکاری و به اشتراکگذاری | همکاری از طریق متن (مثلاً Git) قوی اما فنی است. چند نفر میتوانند با ویرایش فایل(های) دفتر کل و ادغام تغییرات مشارکت کنند. Fava میتواند به صورت فقط خواندنی برای به اشتراکگذاری گزارشها میزبانی شود اما نقشی برای کاربران یا کنترل دسترسی دقیق بهصورت پیشفرض ندارد. برای یک کاربر واحد یا تیم فنی مناسب است. حسابرسان یا حسابداران ممکن است نیاز به صادرات داده داشته باشند (مثلاً تراز آزمایشی در اکسل) اگر با فرمت راحت نباشند. | دسترسی چندکاربره وب با مجوزها (QuickBooks آنلاین از حسابدارها و چند کاربر کسبوکار با نقشها پشتیبانی میکند). اشتراکگذاری آسان – حسابدار شما میتواند لاگین و کتابها را زنده ببیند. این یک نقطه قوت برای کسبوکارهاست. برای مالیات شخصی، چندکاربره کمتر مرتبط است اما دسترسی ابری در دستگاههای مختلف مزیت است (اگرچه میتوان Fava را روی ابر شخصی/VPS اجرا کرد). QuickBooks همچنین با سرویسهای دیگر (حقوق و دستمزد، وام بانکی و غیره) ادغام دارد که برای کسبوکار مفید و در Beancount سخت قابل تقلید است. | Power BI در به اشتراکگذاری داشبوردها عالی است، به ویژه اگر Power BI Service استفاده شود: میتوانید داشبوردها را به همکاران منتشر کنید، در وب سایتها جاسازی کنید (با مجوز مناسب) و غیره. برای همکاری روی بینشها ساخته شده است. با این حال این اشتراکگذاری فقط خواندنی تحلیل است، نه ویرایش تعاملی دادهها. اگر چند کاربر بخواهند تحلیل کنند، میتوانند اگر دسترسی به پروژه BI بدهید. در کل برای برقراری ارتباط نتایج مالی به شکلی جذاب به ذینفعان، Power BI سخت قابل رقابت است. اما کتابداری تعاملی نیست؛ تحلیل تعاملی است. |
| هزینه | رایگان (متنباز). به جای صرف پول، ممکن است زمان صرف راهاندازی و نگهداری کنید. میزبانی Fava روی رایانه شخصی یا سرور ارزان هزینه ناچیزی دارد. هزینه مجوز برای کاربران اضافی ندارد. | پرداختی (اشتراک ماهیانه یا سالیانه). QuickBooks آنلاین از حدود ۲۰ تا ۷۰+ دلار در ماه بسته به پلن متغیر است. هزینههایی هم بابت حقوق و دستمزد یا ویژگیهای پیشرفته وجود دارد. بسیاری از کسبوکارهای کوچک این هزینه را میپردازند چون پشتیبانی و بهروزرسانی مداوم دارد. ولی در طول سالها هزینه جمع میشود. همچنین اگر اشتراک را قطع کنید، ممکن است دسترسی کامل را از دست بدهید. | ترکیبی. Power BI Desktop رایگان است، ولی اشتراک Pro (برای به اشتراکگذاری داشبوردها) حدود ۱۰ دلار برای هر کاربر در ماه است. اگر قبلاً از طریق Office 365 یا مشابه آن دارید، هزینه اضافی ممکن است صفر باشد. ابزارهای BI دیگر متفاوتند (بعضی متنباز مثل Metabase رایگان اجرا میشوند). با این حال، به زمان توسعه راهحل BI و احتمالاً هزینه نگهداری پایگاه داده یا زیرساخت ابری توجه کنید. |
در خلاصه، Beancount+Fava در مقابل QuickBooks: Beancount شفافیت برتر ارائه میدهد (شما همه چیز را میبینید و کنترل میکنید، و دادههای شما ناپدید نمیشوند یا قفل نمیشوند) و انعطافپذیری دارد (میتوانید هر چیزی را در دفتر کل مدلسازی کنید، نه فقط آنچه QuickBooks انتظار دارد). این نیازمند خودانجامی بیشتر است، به ویژه برای اتوماسیون و تزیینات رابط کاربری زیبا. QuickBooks یک راهحل آماده و پیشفرض است که برای نیازهای کسبوکارهای کوچک بهینه شده است – خوراکهای بانکی، صدور فاکتور، حقوق و دستمزد (با افزونهها) – و بهروزرسانیهایی تقریبا لحظهای با کمترین تلاش کاربر ارائه میدهد. با این حال، از جهاتی مانند جعبه سیاه است؛ شما به نرمافزار اعتماد میکنید که دادههای شما را صحیح مدیریت کند، و گاهی این به این معناست که تصحیح اشتباهات یا درک نحوه رسیدن به یک عدد دشوار است. بسیاری از کاربران Beancount افرادی هستند که از آن جعبههای سیاه ناامید شدهاند. آنها برخی از راحتی را به خاطر وضوح معامله میکنند.
Beancount+Fava در مقابل Power BI (یا سایر ابزارهای BI): اینها میتوانند مکمل یکدیگر باشند. Power BI یک سیستم حسابداری نیست؛ برای تحلیل است. در واقع، یک تنظیم پیشرفته ممکن است از Beancount برای تجمیع و اطمینان از صحت دادهها استفاده کند، سپس Power BI را برای ایجاد داشبوردهای مدیریتی از آن دادهها بهکار گیرد. اگر مستقیماً مقایسه کنیم، Power BI بیشتر درباره انعطافپذیری بصری و ترکیب منابع داده است. نمودارهای Fava به طور طراحی سادهترند (متمرکز بر نیازهای حسابداری) اما به مراتب کار کمتری برای راهاندازی نیاز دارند (آنها بلافاصله در دفتر کل شما کار میکنند، نیازی به مدلسازی نیست). اگر هدف شما صرفاً کسب دانش و تصاویر زیبا است و آمادهسازی دادهها را میپذیرید، ابزار BI ممکن است مناسب باشد. اما اگر هدف شما نگهداری دفاتر و دریافت گزارشهای تعاملی به عنوان محصول فرعی است، معمولاً فقط Fava کافی است.
میتوان همچنین با سایر ابزارهای مالی شخصی (مثلاً Mint یا YNAB) یا سیستمهای ERP مقایسه کرد، اما سؤال به طور خاص به پلتفرمهای تحلیل لحظهای اشاره دارد. در زمینه دیدهای مالی لحظهای: Beancount+Fava مانند داشتن یک داشبورد مالی “زنده” متنباز و سفارشی است، QuickBooks یک دفترداری خودکار با همگامسازی زنده بانک و کد بسته است، و Power BI یک پلتفرم تحلیلی انعطافپذیر است (نه مختص مالی اما اگر داده دریافت کند میتواند برای امور مالی مورد استفاده قرار گیرد).
یک نقل قول گویا که منبعباز و تجاری را مقایسه میکند: “با کمی تلاش اولیه، ابزارهای منبعباز میتوانند واقعاً بسیار بهتر از راهحلهای تجاری باشند و بسیار انعطافپذیرتر و قابل توسعهتر.” این خلاصهای از ترید-آف است. QuickBooks صیقلی است و برای سناریوهای رایج بهصورت آماده کار میکند با حداقل تلاش. اما وقتی بخواهید کاری بکنید که آن انجام نمیدهد، به دیوار میخورید. با Beancount، به ندرت به دیوار میخورید – شما سورس و داده را دارید، میتوانید گسترش دهید یا بهصورت لازم ادغام کنید. هزینهاش این است که باید حاضر باشید دستکاری کنید.
مزایا و معایب استفاده از Fava و Beancount برای بینشهای مبتنی بر داده
در نهایت، بیایید مزایا و معایب Beancount+Fava را به عنوان راهحلی برای تحلیل مالی استخراج کنیم:
مزایا
-
شفافیت و اعتماد: تمام محاسبات (جمعها، ماندهها) از دفتر کل متنی ساده استخراج میشوند که میتوانید آن را بررسی کنید. هیچ رفتار مرموزی وجود ندارد. این اعتماد بسیار زیادی به اعداد ایجاد میکند – که اگر بر اساس آنها تصمیمگیری میکنید بسیار حیاتی است. این حسابداری «پاک و شفاف» است که هیچ قفلی ندارد و همیشه میتوانید یک رقم گزارششده را به تراکنشهای زیرساختی دنبال کنید، که جوهره بینش مبتنی بر داده است.
-
بازتولیدپذیری و مسیر حسابرسی: چون میتوانید دفتر کل را تحت کنترل نسخه داشته باشید، یک خط زمانی از تغییرات دارید. اگر این ماه چیزی به نظر نامنظم آمد، میتوانید دفتر کل را مقایسه کنید تا ببینید چه تغییر کرده است. این همچنین به این معنی است که میتوانید آزمایش کنید («اگر این هزینه را دوباره طبقهبندی کنم چه میشود؟») و به آسانی بازگردید. کار مبتنی بر داده اغلب شامل تکرارهاست و یک دفتر کل قابل حسابرسی این را تشویق میکند.
-
انعطافپذیری در تحلیل: شما محدود به گزارشهای از پیشساخته نیستید. ترکیب پرسوجوهای BQL، اسکریپتنویسی پایتون و فیلترهای فاؤا به این معناست که میتوانید تقریباً به هر سؤال مالی پاسخ دهید. میخواهید بدانید «چقدر در ۵ سال گذشته سالانه در استارباکس هزینه کردهام؟» – یک پرسوجو فاصله دارد. یا «میانگین متحرک هزینههای سه ماهه نسبت به درآمدم چقدر است؟» – قابل اسکریپتنویسی با پایتون+pandas بر اساس یک پرسوجو. این انعطافپذیری برای کسانی که دوست دارند در دادهها کاوش کنند، یک مزیت بزرگ است. کاربران حرفهای حتی افزونههایی برای محاسبه شاخصهای مالی (مثلاً معیارهای عملکرد پرتفوی) درون فاؤا ساختهاند. به طور خلاصه، میتوانید بینشهای بسیار دقیق به دست آورید که بسیاری از نرمافزارهای آماده قادر به ارائه آن نیستند.
-
یکپارچگی و توسعهپذیری: سیستم پلاگین فاؤا و API قابلدسترسی Beancount به ابزارها اجازه میدهد با نیازهای شما رشد کنند. اگر فردا به ردیابی نوع جدیدی از دارایی نیاز داشته باشید یا بخواهید یک منبع داده جدید را وصل کنید، میتوانید سیستم را توسعه دهید. معماری (ورودی متنی ساده، خروجیهای متنوع) بسیار توسعهپذیر است. این برخلاف سیستمهای بستهای است که ممکن است مجبور شوید درخواست ویژگی کنید و منتظر بمانید.
-
تجمیع دادهها: برای افراد و حتی کسبوکارها، توانایی تجمیع همه حسابها (چندین بانک، واسطه و غیره) در یک سیستم بسیار قدرتمند است. بسیاری از راهحلهای تجاری شما را جدا میکنند (یا برای چندارزی یا چند نهاد هزینه اضافی میگیرند). با Beancount، همه چیز را میتوانید کنار هم بیاورید. این دیدگاه کلی به دادهها میدهد که بینشهای جامع فراهم میکند. مثلاً میتوانید تخصیص دارایی کلی واقعی یا جریان نقدی خالص را در حسابهای شخصی و تجاری محاسبه کنید، چون صرفاً ورودیهای داده هستند.
-
صرفهجویی در هزینه: این نرمافزار رایگان و متنباز است. برای استفاده شخصی، این یک نکته مثبت بزرگ است (مثل بسیاری از اپهای بودجهبندی اشتراک نمیخواهد). برای استارتاپها یا سازمانهای کوچک، این économی میتواند جمع شود. اما فراتر از هزینه مالی، از نظر اجرا (فاؤا میتواند روی سرور کوچک اجرا شود) و انتقال (هیچ مهاجرت هزینهبری اگر رشد کنید نیاز نیست – فقط متن است) هم بهینه است.
-
جامعه و به اشتراکگذاری دانش: جامعه حسابداری متنی ساده (Beancount، Ledger و غیره) بسیار تعاملی است. افراد پیکربندیها، اسکریپتهای سفارشی و نکات خود را در انجمنها و وبلاگها به اشتراک میگذارند. این یعنی اگر نیازی خاص داشته باشید، احتمالاً کسی قبلاً موضوع مشابهی را حل کرده است. برای مثال، چندین کاربر به ابزارهای واردسازی هوشمند و حتی دستهبندی با یادگیری ماشین کمک کردهاند (مثلاً کتابخانه “smartimporter” که از scikit-learn برای دستهبندی خودکار ذینفعان بر اساس دادههای گذشته استفاده میکند). با گذشت زمان، استفاده از Beancount میتواند _هوشمندتر شود اگر از این ابزارهای جامعه بهره ببرید – که به راحتی نرمافزارهای تجاری نزدیک میشود با حفظ شفافیت.
-
توانمندسازی و یادگیری: استفاده از Fava/Beancount شما را ملزم میکند که با دادههای مالی خود به صورت عمیقتری درگیر شوید. بسیاری از کاربران گزارش دادهاند که از طریق این سیستم درک بسیار بهتری از امور مالی خود پیدا کردهاند نسبت به برنامههای خودکار. این تفاوت مثل تفاوت بین پختن غذای خودتان و گرفتن فستفود است – تلاش بیشتری میخواهد، اما دقیقاً میدانید داخلش چیست و در بلندمدت میتواند سالمتر باشد. برای بینشهای مبتنی بر داده، این «مالکیت» فرایند میتواند به کشفهای معنادارتر منجر شود، چون میتوانید به راحتی نحوه نگاه کردن به دادهها را قاببندی و دوباره قاببندی کنید.
معایب
-
راهاندازی اولیه و منحنی یادگیری: بیایید روراست باشیم – Beancount و Fava به سادگی برنامههایی مانند QuickBooks یا Mint نیستند که فقط وصلشان کنی و استفاده کنی. شما باید اصول حسابداری دوبل را یاد بگیرید (اگر بلد نیستید)، نحو پرونده Beancount را بشناسید و احتمالاً اگر میخواهید شخصیسازی زیادی انجام دهید، کمی پایتون هم بلد باشید. این سرمایهگذاری اولیه میتواند مانعی باشد. برای کاربران غیرتخصصی ممکن است دلهرهآور باشد (اگرچه رابط Fava خیلی کمک میکند چون بعد از تنظیم تجربه کاربری دوستانهتری ارائه میدهد). در مقابل، بسیاری از ابزارهای تجاری مفاهیم حسابداری را پشت رابطهای سادهتر پنهان میکنند (که هم مزیت است و هم عیب).
-
عدم همگامسازی خودکار با بانک: طبق طراحی، به صورت خودکار به APIهای بانک متصل نمیشود (که اغلب اختصاصی هستند یا نیاز به قرارداد دارند). بنابراین باید یا صورتحسابها را دستی دانلود کنید یا اتوماسیون خودتان را (از طریق اسکریپتهای پایتون یا سرویسهایی مانند Plaid که اغلب هزینه دارد) راهاندازی کنید. برای کسانی که به فیدهای بانکی «که خودکار کار میکنند» عادت دارند، این میتواند یک گام به عقب به نظر برسد. همانطور که یک کاربر اشاره کرده بود، وقتی Beancount را امتحان میکردند، "راه معقولی برای دریافت فیدهای بانکی پیدا نکردند" – این میتواند ناامیدکننده باشد مگر اینکه مایل به برنامهنویسی یا استفاده از راهحلهای شخص ثالث باشید.
-
زمان واقعی یعنی زمان شما: دستیابی به پاسخگویی در زمان واقعی ممکن است اما خارج از جعبه نیست. باید کارهای cron یا ماشهها را همانطور که توضیح داده شده پیکربندی کنید. اگر چیزی خراب شود (مثلاً بانک فرمت CSV را تغییر دهد)، باید وارداتکننده خود را تعمیر کنید. با خدماتی مانند QuickBooks، فروشنده با چنین تغییراتی سروکار دارد. اساساً، شما مسئول پشتیبانی فناوری اطلاعات خود هستید. این معادل معامله کلاسیک متنباز است. برای یک علاقهمند ممکن است خوب یا حتی سرگرمکننده باشد؛ اما برای یک کسبوکار کوچک پرمشغله ممکن است دردسرساز باشد.
-
محدودیتهای مقیاسپذیری و عملکرد: برای مجموعه دادههای بسیار بزرگ (سالها تراکنشهای دقیق) ممکن است Beancount کند شود. معمولاً کارآمد است (افراد دهها هزار ورودی بدون مشکل دارند). اما همانطور که در بحث HN دیده شده، یک کاربر مجبور شد هر سال پس از سه سال "دفترها را ببندد" چون فایل بزرگ شده بود تا پرسشها سریع بماند. کد Beancount نسخه ۲ با پایتون است و ممکن است برای دادههای بزرگ کمی کند باشد، هرچند نسخه ۳ (در حال توسعه با هسته C++) این را بهبود میبخشد. راهکارهایی هست (فایلها را تقسیم کنید، از Beanpost برای انتقال به پایگاه داده استفاده کنید و غیره)، اما این یک نکته است. QuickBooks احتمالاً مقیاسپذیری داخلی دارد و اکثر ابزارهای BI روی پایگاه دادههایی ساخته شدهاند که برای دادههای بزرگ طراحی شدهاند – بنابراین بهتر از پس دادههای بزرگ برمیآیند.
-
کمبود ویژگیها (نسبت به نرمافزارهای اختصاصی): Beancount+Fava روی دفترداری و تحلیل تمرکز دارد. برخی ویژگیهای کمکی را ندارد: مثلاً پردازش حقوق و دستمزد، تولید فاکتور (بدون اسکریپتنویسی سفارشی)، فرمهای یکپارچه مالیاتی و غیره. اگر هدف شما مدیریت مالی جامع است، ممکن است نیاز باشد با ابزارهای دیگر تکمیل کنید. مثلاً ممکن است حقوق و دستمزد را از طریق سرویس حقوق و دستمزد انجام دهید و فقط ورودیهای دفتر را وارد کنید. این کار میکند اما یکپارچگی به اندازه مثالهایی مانند ERP که همه چیز را یکجا انجام میدهد، نیست. برای امور مالی شخصی، Beancount امکاناتی مانند برنامهریز پرداخت بدهی داخلی یا پاکتهای بودجهبندی ندارد (هرچند میتوانید آنها را شبیهسازی کنید). انتظار میرود خودتان بینشها را استخراج کرده و تصمیم بگیرید، نه اینکه توصیههای قطعی یا ماژولهای برنامهریزی ارائه دهد.
-
رابط کاربری و پرداخت نهایی: اگرچه Fava خیلی خوب است، به اندازه برخی از محصولات تجاری صیقلی یا راهنماییکننده نیست. هیچ "جادویی" برای راهنمایی در راهاندازی یا اطمینان از عدم اشتباه وجود ندارد. ممکن است لازم باشد مستندات را بخوانید تا بدانید چگونه کاری را انجام دهید. و ویژگیهای رابط کاربری که ممکن است انتظار داشته باشید (دستهبندی کشیدن و رها کردن، لغو چندمرحلهای، اعلانهای موبایل و غیره) وجود ندارند. رابط Fava همیشه در حال بهبود است (با مشارکت افراد)، اما توسط یک جامعه کوچک ساخته شده است. اگر به رابطهای SaaS مدرن و شیک عادت دارید، Fava ممکن است کمی سادهگرایانه به نظر برسد (اگرچه بعضیها سادگی پاک آن را ترجیح میدهند). در موبایل، Fava کار میکند (به ویژه حالت فقط خواندنی) اما به طور کامل برای صفحههای کوچک بهینه نیست؛ برای مثال QuickBooks اپلیکیشنهای موبایل اختصاصی دارد.
-
وابستگی به جامعه/نگهدارنده: مارتین بلیس (نویسنده Beancount) و مشارکتکنندگان Beancount را نگهداری میکنند و افراد دیگری Fava را. توسعه میتواند پراکنده باشد (که در نرمافزار متنباز طبیعی است). در حالی که نرمافزار الان بسیار قابل استفاده است، اگر به ویژگی جدید نیاز دارید یا باگی وجود دارد، ممکن است خودتان مجبور شوید آن را رفع کنید یا منتظر بمانید. در محصول پولی، پشتیبانی برای تماس وجود دارد (کیفیت متغیر است، اما حداقل وجود دارد). با این حال، جامعه معمولاً از طریق لیست ایمیل یا گیتهاب بسیار مفید است.
-
نیاز به دانش حسابداری: بهویژه برای استفاده در کسبوکار، باید بدانید که چه کاری انجام میدهید. Beancount مانع از ثبت ورودیای نمیشود که از دیدگاه حسابداری «اشتباه» باشد (به جز عدم توازن یا تراکنشهای مطابقتنداده). در مقابل، QuickBooks محدودیتهایی دارد (و همچنین پیچیدگیهای پنهانی مانند ردیابی خودکار درآمد تعویقافتاده و غیره، در صورت فعالسازی آنها). اگر در Beancount محتاط نباشید، ممکن است یک تعهد مالی را اشتباه انجام دهید و تا زمانی که مشکل گزارش را نبینید متوجه نشوید. اساساً، Beancount فرض میکند یا دانش پایه حسابداری دارید یا آماده یادگیری هستید. این واقعاً برای برخی یک مزیت است (آن را مجبور به درست انجام دادن میکند)، اما برای کسانی که سیستم بدون نیاز به فکر میخواهند، یک نقطه ضعف است.
برای جمعبندی مزایا و معایب: Beancount + Fava کنترل و سازگاری بینظیری را برای کسانی که میخواهند عمیقاً با دادههای مالی خود درگیر شوند فراهم میکند و آن را به ابزاری قدرتمند برای بینشهای مبتنی بر داده تبدیل میکند. این مجموعه کتابهای شما را به یک دادهکاوی قابل پرسوجو و گزارشهای شما را به یک برنامه وب قابل توسعه تبدیل میکند. هزینه این قدرت، کاری است که باید برای راهاندازی و نگهداری آن انجام دهید و نیاز به خودکفایی نسبی در مدیریت سیستم خود دارید. برخلاف چیزهایی مانند QuickBooks یا مجموعه BI که بیشتر راهنمایی میکنند و برخی امکانات را بهصورت خودکار ارائه میدهند، Beancount یک جعبهابزار در اختیار شما قرار میدهد. اگر علاقهمند به تحلیل باشید، این جعبهابزار میتواند بسیار آزادکننده باشد – شما میتوانید دیدگاههایی را استخراج کنید که گزارشهای آماده هرگز نشان نمیدهند. همانطور که یکی از کاربران که سالها دفتر حساب Beancount خود را خودکارسازی کرده بود نوشت، "ابزارهای متنباز (مانند Beancount) همه نیازهای من را [از ابتدا] برآورده نمیکنند... من به خودکارسازی همه چیز وسواس دارم... آنچه نیاز داشتم را ساختم". این رویکرد را خلاصه میکند: اگر مایل به ساخت آنچه نیاز دارید باشید، هر چقدر هم کوچک یا بزرگ باشد، Fava/Beancount از شما حمایت خواهد کرد و هرگز دادههای شما را از شما مخفی نخواهد کرد. برای ذهنیت مبتنی بر داده، این یک مزیت بزرگ است.
در نتیجه، استفاده از Fava و Beancount برای تحلیلهای مالی در زمان واقعی کمی شبیه داشتن یک آزمایشگاه قابل تنظیم برای امور مالی شما است. شما وضوح، انعطافپذیری و مالکیتی به دست میآورید که در پلتفرمهای اختصاصی به سختی میتوان مشابهی برای آن یافت، که این موضوع آن را برای کسانی که این جنبهها را ارزشمند میدانند و مایل به معامله کمی راحتی برای کسب آنها هستند، ایدهآل میکند. چشمانداز مدرن حتی رویکردهای ترکیبی را نیز نشان میدهد – برای مثال، برخی ممکن است از ابزار تجاری استفاده کنند اما به طور دورهای به Beancount صادر کنند برای تحلیل عمیقتر، یا برعکس از Beancount به عنوان ابزار اصلی استفاده کنند و از ابزار BI برای ارائه استفاده نمایند. با دانش به دست آمده از این بررسی، میتوان تصمیمی آگاهانه گرفت که آیا Fava+Beancount با نیازهایشان همخوانی دارد و در این صورت با اطمینان از قابلیتهای آن برای بهدست آوردن دیدگاههای مالی غنی و بهروز بهره برداری کنند.
منابع:
- Blais، M. (2020). مستندات Beancount – اصول طراحی و استفاده. [آنلاین]. در دسترس: beancount.github.io
- Aumayr، D.، Gerstmayr، A. (2025). مستندات Fava و مخزن GitHub. [آنلاین]. در دسترس: beancount.github.io/fava/ و github.com/beancount/fava
- LowEndBox. (2025). “Beancount: حسابداری دوطرفه سبک و متنباز... از خط فرمان!” آموزش LowEndBox.
- Fang-Pen Lin. (2024). “کتابهای Beancount من پس از ۳ سال ۹۵٪ خودکار هستند.” پست وبلاگ شخصی.
- گروههای گوگل – انجمن Beancount. (2023). بحث در مورد ادغام Grafana (Josh D. و Andreas G.)
- صفحه بازاریابی QuickBooks. “Bank Feeds – همه تراکنشهای خود را در یک لحظه درک کنید.” Intuit QuickBooks.
- Watt، A. (2023). “Beancount برای امور مالی شخصی.” وبلاگ الکس وات.
- Reddit – r/plaintextaccounting. بحثهای مختلف (2021-2023) درباره استفاده تجاری از Beancount و تجسم دفتر.
- مستندات افزونه Fava – راهنما: افزونهها.
- README GitHub fava-dashboards – افزونه داشبوردهای سفارشی Andreas Gerstmayr.
- فهرست Awesome Beancount – منابع منتخب جامعه برای Beancount.