اکوسیستم بینکانت: یک تحلیل جامع
قابلیتهای اصلی و فلسفه Beancount
Beancount یک سیستم حسابداری دوطرفه متنباز است که از فایلهای متنی ساده برای ثبت تراکنشها استفاده میکند. در ه سته خود، Beancount دفتر کل شما را به عنوان یک مجموعه داده تعریف شده توسط یک گرامر ساده و دقیق در نظر میگیرد. هر رویداد مالی (تراکنشها، افتتاح حسابها، قیمت کالاها و غیره) یک دستورالعمل در یک فایل متنی است که Beancount آن را به یک پایگاه داده در حافظه از ورودیها تجزیه میکند. این طراحی، اصل حسابداری دوطرفه را اعمال میکند: هر تراکنش باید بدهکار و بستانکار را در حسابها تراز کند. نتیجه یک دفتر کل بسیار شفاف و قابل حسابرسی است که میتوانید آن را کنترل نسخه کنید، بازرسی کنید و به راحتی پرسوجو نمایید.
فلسفه – صحت و مینیمالیسم: طراحی Beancount یکپارچگی داده و سادگی را در اولویت قرار میدهد. خالق آن، مارتین بلایس، Beancount را "بدبینانه" توصیف میکند، زیرا فرض میکند کاربر اشتباه خواهد کرد و بنابراین بررسیها و محدودیتهای اضافی اعمال میکند. به عنوان مثال، Beancount به شما اجازه نمیدهد داراییهایی را که هرگز اضافه نشدهاند حذف کنید (از موجودی سهام منفی یا ماندههای نقدی جلوگیری میکند) و میتواند اعمال کند که هر حسابی قبل از استفا ده باز شود. این سیستم فاقد مفهوم "مجازی" یا ثبتهای خودکار تراز شده Ledger است – انتخابی عمدی برای اجبار به ورودیهای کاملاً تراز شده. Beancount به طور موثری "به شدت بر صحت تاکید میکند" با بررسیهای متقابل بیشتر از آنچه حسابداری دوطرفه پایه فراهم میکند. این رویکرد محتاطانه برای کاربرانی جذاب است که "به خودشان زیاد اعتماد ندارند" و میخواهند نرمافزار خطاهایشان را بگیرد.
گزینههای حداقل، حداکثر سازگاری: در مقابل پرچمهای خط فرمان و گزینههای تنظیم بیشمار Ledger، Beancount مینیمالیسم را انتخاب میکند. گزینههای سراسری بسیار کمی وجود دارد و هیچ کدام معنای تراکنش را خارج از فایل دفتر کل تغییر نمیدهند. تمام پیکربندیهایی که بر حسابداری تأثیر میگذارند (مانند روشهای مبنای بهای تمام شده کالا یا فرضیات ثبت) درون فایل از طریق دستورالعملها یا پلاگینها انجام میشود، که تضمین میکند بارگذاری همان فایل همیشه نتایج یکسانی را تولید میکند، صرف نظر از اینکه گزارشها چگونه تولید میشوند. این طراحی از پیچیدگی دکمههای متعدد Ledger و تعاملات ظریف بین آنها جلوگیری میکند. فلسفه Beancount این است که یک ابزار حسابداری باید یک خط لوله پایدار و قطعی از فایل ورودی تا گزارشها باشد. ای ن امر را با در نظر گرفتن دفتر کل به عنوان یک جریان مرتب از دستورالعملها که میتوانند به صورت برنامهنویسی به ترتیب پردازش شوند، به دست میآورد. حتی مواردی که Ledger آنها را به عنوان سینتکس خاص در نظر میگیرد (مانند ماندههای افتتاحیه یا بیانیههای قیمت) در مدل داده Beancount دستورالعملهای درجه یک هستند که سیستم را بسیار توسعهپذیر میکند.
قابلیت توسعه از طریق پلاگینها و زبان پرسوجو: Beancount در پایتون پیادهسازی شده است و نقاط اتصالی را برای تزریق منطق سفارشی به خط لوله پردازش فراهم میکند. کاربران میتوانند پلاگینهایی در پایتون بنویسند که بر روی جریان تراکنشها عمل میکنند (به عنوان مثال، برای اعمال یک قانون سفارشی یا تولید ورودیهای خودکار). این پلاگینها هنگام پردازش فایل اجرا میشوند و به طور موثری قابلیتهای اصلی Beancount را بدون نیاز به تغییر کد منبع گسترش میدهند. Beancount همچنین شامل یک زبان پرسوجوی قدرتمند (الهام گرفته از SQL) برای برش و تحلیل دفتر کل است. ابزار bean-query
دفتر کل تجزیه شده را به عنوان یک پایگاه داده در نظر میگیرد و به شما امکان میدهد پرسوجوهای تحلیلی را روی آن اجرا کنید – به عنوان مثال، جمعبندی هزینهها بر اساس دستهبندی یا استخراج تمام تراکنشها برای یک دریافتکننده مشخص. در Beancount 3.x، این قابلیت پرسوجو به یک بسته مستقل beanquery
منتقل شد، اما از دیدگاه کاربر همچنان گزارشدهی انعطافپذیر را از طریق پرسوجوهای شبیه SQL فراهم میکند.
متن ساده و کنترل نسخه: به عنوان یک ابزار حسابداری متن ساده، Beancount بر کنترل کاربر و ماندگاری دادهها تأکید دارد. دفتر کل به سادگی یک فایل متنی .beancount
است که میتوانید آن را در هر ویرایشگر متنی ویرایش کنید. این بدان معناست که کل تاریخچه مالی شما در قالبی قابل خواندن برای انسان ذخیره میشود و میتوانید آن را در Git یا یک سیستم کنترل نسخه دیگر قرار دهید تا تغییرات را در طول زمان ردیابی کنید. کاربران اغلب فایل Beancount خود را تحت کنترل نسخه نگه میدارند تا یک رد حسابرسی از هر ویرایش (با پیامهای کامیت که تغییرات را توصیف میکنند) حفظ کنند. این رویکرد با فلسفه Beancount همسو است که دادههای حسابداری، به ویژه امور مالی شخصی یا کسبوکارهای کوچک، باید شفاف و "مقاوم در برابر آینده" باشند – نه اینکه در یک پایگاه داده اختصاصی قفل شوند. به گفته خود مارتین بلایس، Beancount "کاری از روی عشق" است که برای جامعه ساده، بادوام و رایگان ساخته شده است. این سیستم برای اولین بار حدود سال ۲۰۰۷ توسعه یافت و از طریق بازنویسی های عمده (نسخه ۱ به نسخه ۲، و اکنون نسخه ۳ در سال ۲۰۲۴) تکامل یافته است تا طراحی خود را بهبود بخشد و در عین حال فلسفه اصلی خود یعنی مینیمالیسم و صحت را حفظ کند.
ابزارها، پلاگینها و افزونهها در اکوسیستم بینکانت
اکوسیستم بینکانت مجموعهای غنی از ابزارها، پلاگینها و افزونهها را در خود جای داده است که قابلیتهای اصلی دفتر کل را ارتقا میدهند. اینها شامل وارد کردن دادهها، ویرایش دفترهای کل، مشاهده گزارشها و افزودن ویژگیهای تخصصی حسابداری میشوند. در ادامه مروری بر اجزای کلیدی و افزودنیها در دنیای بینکانت ارائه شده است:
ابزارهای واردات داده (واردکنندهها)
یکی از مهمترین نیازها برای استفاده عملی، وارد کردن تراکنشها از بانکها، کارتهای اعتباری و سایر مؤسسات مالی است. بینکانت یک چارچوب واردات و اسکریپتهای وارداتی که توسط جامعه مشارکتکنندگان ارائه شدهاند را برای این منظور فراهم میکند. در بینکانت 2.x، ماژول داخلی beancount.ingest
(با دستوراتی مانند bean-extract
و bean-identify
) برای تعریف پلاگینهای واردکننده در پایتون و اعمال آنها بر صورتحسابهای دانلود شده استفاده میشد. در بینکانت 3.x، این با یک پروژه خارجی به نام بینگالپ جایگزین شده است. بینگالپ یک چارچوب اختصاصی برای واردکنندهها است که از beancount.ingest
تکامل یافته و اکنون روش توصیه شده برای خودکارسازی واردات تراکنشها برای بینکانت 3.0 است. این امکان نوشتن اسکریپتهای پایتون یا ابزارهای خط فرمان را فراهم میکند که فایلهای خارجی (مانند صورتحسابهای CSV یا PDF) را میخوانند و خروجی ورودیهای بینکانت را تولید میکنند. این رویکرد جدید، منطق واردات را از هسته بینکانت جدا میکند – برای مثال، دستور قدیمی bean-extract
در نسخه 3 حذف شده است، و به جای آن، اسکریپتهای وارداتی شما خودشان تراکنشها را از طریق رابط خط فرمان (CLI) بینگالپ تولید میکنند.
ده ها واردکننده آماده برای بانکها و فرمتهای مختلف وجود دارد که توسط جامعه مشارکتکنندگان ارائه شدهاند. اسکریپتهای واردکننده برای مؤسسات در سراسر جهان – از علیپی و ویچتپی در چین، تا بانکهای مختلف اروپایی (کومرزبانک، آیانجی، ایبیان آمرو و غیره)، تا بانکهای آمریکایی مانند چیس و امکس – موجود است. بسیاری از اینها در مخازن عمومی (اغلب در گیتهاب) یا در بستههایی مانند beancount-importers
جمعآوری شدهاند. به عنوان مثال، پروژه ابزارهای بینکانت تاریوخ (tariochbctools
) واردکنندههایی برای بانکهای سوئیس و بریتانیا فراهم میکند و حتی واردات تراکنشهای رمزنگاری را نیز مدیریت میکند. مثال دیگر لیزی بینکانت است که مجموعهای از واردکنندههای رایج (برای وایز، مونزو، ریوولوت، آیبیکیآر و غیره) را بستهبندی میکند و یک راهاندازی مبتنی بر داکر برای خودکارسازی آسان فراهم میآورد. مهم نیست از کدام بانک یا سرویس مالی استفاده میکنید، به احتمال زیاد کسی یک واردکننده بینکانت برای آن نوشته است – یا میتوانید با استفاده از چارچوب بینگالپ، واردکننده خود را بنویسید. انعطافپذیری پایتون به این معنی است که واردکنندهها میتوانند فایلهای CSV/اکسل، دانلودهای OFX/QIF، یا حتی اسکرپینگ APIها را تجزیه کنند، سپس تراکنشها را در فرمت استاندارد بینکانت منتشر کنند.
ویرایش و یکپارچهسازی با ویرایشگرها
از آنجایی که دفاتر حسابداری بینکانت (Beancount ledgers) صرفاً متن هستند، کاربران اغلب از ویرایشگرهای متنی یا IDEهای مورد علاقه خود برای نگهداری آنها استفاده میکنند. اکوسیستم، افزونههای پشتیبانی ویرایشگر را برای روانتر کردن این تجربه ارائه میدهد. افزونههایی برای بسیاری از ویرایشگرهای محبوب وجود دارد که قابلیتهایی مانند برجستهسازی نحو (syntax highlighting)، تکمیل خودکار نام حسابها و بررسی خطای بلادرنگ را اضافه میکنند:
- حالت بینکانت Emacs: یک حالت اصلی Emacs (
beancount-mode
) برای ویرایش فایلهای .beancount در دسترس است که ویژگیهایی مانند رنگآمیزی نحو و یکپارچهسازی با بررسیکننده بینکانت را ارائه میدهد. این حالت حتی میتواندbean-check
را در پسزمینه اجرا کند تا خطاها در دفتر حسابداری (مانند یک تراکنش نامتوازن) هنگام ویرایش علامتگذاری شوند. - افزونه VS Code: یک افزونه بینکانت در بازارچه VSCode، امکانات مشابهی را برای کاربران ویژوال استودیو کد فراهم میکند. این افزونه از برجستهسازی نحو، تراز کردن مبالغ، تکمیل خودکار برای حسابها/دریافتکنندگان و حتی بررسیهای تراز لحظهای هنگام ذخیره فایل پشتیبانی میکند. همچنین میتواند با فاوا (Fava) یکپارچه شود و به شما امکان میدهد رابط وب فاوا را از درون VSCode راهاندازی کنید.
- افزونهها یا حالتهایی نیز برای Vim، Atom و سایر ویرایشگرها وجود دارد. به عنوان مثال، یک گرامر Tree-sitter برای بینکانت وجود دارد که برجستهسازی نحو را در ویرایشگرهای مدرن تامین میکند و حتی در جزء ویرایشگر مبتنی بر وب فاوا نیز پذیرفته شده است. به طور خلاصه، هر محیط ویرایشی که داشته باشید، جامعه احتمالاً افزونهای را برای راحت و بدون خطا کردن ویرایش فایلهای بینکانت ارائه کرده است.
برای ورود سریع تراکنشها در خارج از ویرایشگرهای سنتی، ابزارهایی مانند Bean-add و برنامههای موبایل نیز وجود دارند. Bean-add یک ابزار خط فرمان است که امکان افزودن یک تراکنش جدید را از طریق یک اعلان یا دستور تکخطی فراهم میکند و پیشنهادات تاریخ و حساب را مدیریت میکند. در موبایل، پروژهای به نام بینکانت موبایل (Beancount Mobile) یک رابط کاربری ساده برای ورود تراکنشها در حین حرکت (به عنوان مثال، ثبت یک خرید نقدی از طریق تلفن شما) ارائه میدهد. علاوه بر این، یک ربات تلگرام بینکانت (Beancount Telegram Bot) برای ثبت تراکنشها از طریق پیامرسانی وجود دارد – میتوانید پیامی حاوی جزئیات تراکنش ارسال کنید و ربات آن را در فایل دفتر حسابداری شما قالببندی میکند.
رابطهای کاربری وب و ابزارهای بصریسازی
(Fava) رابط کاربری وب Fava یک داشبورد تعاملی برای Beancount فراهم میکند که شامل گزارشهایی مانند صورت سود و زیان با بصریسازیها (که در اینجا به صورت یک تریمپ از هزینهها بر اساس دستهبندی نشان داده شده است) در کنار جداول حسابها و ماندهها میباشد.
رابط کاربری اصلی Beancount، Fava است که یک رابط کاربری وب مدرن محسوب میشود. Fava به عنوان یک برنامه وب محلی اجرا میشود که فایل Beancount شما را میخواند و یک تجربه تعاملی غنی را در مرورگر شما ایجاد میکند. این ابزار مجموعه کاملی از گزارشها را ارائه میدهد: ترازنامه، صورت سود و زیان، ارزش خالص در طول زمان، داراییهای سبد سرمایهگذاری، نمودارهای عملکرد، بودجهها و موارد دیگر – همه به صورت آماده استفاده. کاربران اغلب Fava را به عنوان دلیل اصلی انتخاب Beancount نسبت به سایر ابزارهای حسابداری متنی ساده ذکر میکنند. با یک دستور واحد (fava ledger.beancount
)، میتوانید امور مالی خود را با نمودارها و جداول به جای متن مرور کنید. Fava از ویژگیهایی مانند: مشاهده جزئیات حسابها، فیلتر کردن تراکنشها بر اساس دریافتکننده یا برچسب، یک ویرایشگر کوئری (که به شما امکان میدهد کوئریهای Beancount را اجرا کرده و نتایج را در مرورگر ببینید)، و حتی یک ویرایشگر وب یکپارچه برای دفتر کل شما پشتیبانی میکند. این ابزار بسیار کاربرپسند است و حسابداری متنی ساده را برای کسانی که رابطهای کاربری بصری را ترجیح میدهند، قابل دسترس میسازد.
از نظر فنی، Fava با پایتون (Flask در بکاند) و جاوااسکریپت (Svelte در فرانتاند) نوشته شده است. این ابزار چرخه انتشار خاص خود را دارد و فعالانه نگهداری میشود. قابل ذکر است که Fava همگام با توسعه Beancount پیش رفته است – به عنوان مثال، Fava 1.30 پشتیبانی از Beancount v3 را اضافه کرد و برای استفاده داخلی به پکیجهای جدید beanquery
و beangulp
تغییر یافت. (این ابزار همچنان از Beancount 2 برای دفترهای کل قدیمیتر پشتیبانی میکند.) تمرکز Fava بر قابلیت استفاده شامل جزئیات کاربردی مانند تکمیل خودکار در ویرایشگر وب، و یک رابط کاربری شیک با حالت تاریک و نمودارهای واکنشگرا است. همچنین یک نسخه فرعی به نام Fava-GTK وجود دارد که Fava را در قالب یک برنامه دسکتاپ برای کاربران GNOME/Linux که حس برنامه بومی را ترجیح میدهند، بستهبندی میکند.
فراتر از Fava، گزینههای بصریسازی و تحلیل دیگری نیز وجود دارد. از آنجا که دادههای Beancount میتوانند به صورت جداول صادر یا کوئری شوند، کاربران اغلب از ابزارهایی مانند نوتبوکهای ژوپیتر یا پانداس برای تحلیل سفارشی استفاده میکنند. به عنوان مثال، یکی از کاربران توضیح میدهد که چگونه دادهها را از Beancount از طریق رابط کوئری به یک دیتافریم پانداس میکشد تا یک گزارش سفارشی آماده کند. همچنین اسکریپتهای مشارکتیافته توسط جامعه برای گزارشهای خاص وجود دارد – به عنوان مثال، یک ابزار تحلیل تخصیص سبد سرمایهگذاری یا یک نمودار کنترل فرآیند برای هزینهها در مقابل ارزش خالص. با این حال، برای اکثر افراد، Fava قدرت گزارشدهی بیش از حد کافی را بدون نیاز به نوشتن کد فراهم میکند. این ابزار حتی از افزونهها نیز پشتیبانی میکند: میتوانید فایلهای پایتون را قرار دهید که صفحات گزارش یا نمودارهای جدیدی را به Fava اضافه میکنند. یک افزونه قابل توجه، fava-envelope برای بودجهبندی پاکتی در Fava است. در مجموع، Fava به عنوان مرکز اصلی بصریسازی اکوسیستم Beancount عمل میکند.
ابزارهای خط فرمان و اسکریپتها
Beancount با ابزارهای CLI مختلفی همراه است (به ویژه در شاخه قدیمیتر v2، که برخی از آنها در v3 حذف شدند). این ابزارها بر روی فایل دفتر کل شما عمل میکنند تا آن را بررسی کنند یا گزارشهای خاصی را به صورت متنی یا HTML تولید کنند:
- bean-check: یک اعتبارسنج است که خطاهای نحوی یا خطاهای حسابداری را در فایل بررسی میکند. اجرای
bean-check myfile.beancount
شما را از هرگونه عدم توازن، حساب گمشده یا سایر مسائل آگاه میکند و در صورت عدم وجود خطا در فایل، هیچ خروجی ندارد. - bean-format: یک قالببند است که دفتر کل شما را با تراز کردن اعداد در ستونهای منظم، بسیار شبیه به اجرای یک قالببند کد بر روی کد منبع، مرتب میکند. این کار به تمیز و خوانا نگه داشتن فایل کمک میکند.
- bean-query: یک پوسته تعاملی یا ابزار دستهای برای اجرای زبان پرسوجوی Beancount بر روی دفتر کل شما است. میتوانید از آن برای تولید گزارشهای جدولی سفارشی استفاده کنید (به عنوان مثال،
bean-query myfile.beancount "SELECT account, sum(amount) WHERE ..."
). - bean-report: یک تولیدکننده گزارش همهکاره (در v2) است که میتواند گزارشهای از پیش تعریفشده (ترازنامه، صورت سود و زیان، تراز آزمایشی و غیره) را به کنسول یا فایلها خروجی دهد. به عنوان مثال،
bean-report file.beancount balances
مانده حسابها را چاپ میکند. (در عمل، بسیاری از این گزارشهای متنی با نمایش زیباتر فاوا جایگزین شدهاند.) - bean-web / bean-bake: یک رابط وب قدیمیتر بود که گزارشها را بر روی
localhost
ارائه میداد یا آنها را به عنوان فایلهای HTML ایستا "پخت" میکرد. اینها عمدتاً قبل از محبوبیت فاوا استفاده میشدند؛ bean-web یک نمای وب پایه از همان گزارشهایی که bean-report میتوانست تولید کند، ارائه میداد. در Beancount 3، bean-web حذف شده است (زیرا فاوا اکنون رابط کاربری وب توصیه شده است و تجربه برتری را ارائه میدهد). - bean-example: ابزاری برای تولید یک فایل دفتر کل نمونه (مفید برای تازهواردان تا یک الگو از ورودیهای Beancount را ببینند).
- bean-doctor: یک ابزار اشکالزدایی است که میتواند مسائل را در دفتر کل یا محیط شما تشخیص دهد.
قابل ذکر است که از Beancount v3، بسیاری از این ابزارها از پروژه اصلی خارج شدند. بسته اصلی Beancount بهینهسازی شد و ابزارهایی مانند موتور پرسوجو و واردکنندهها برای نگهداری آسانتر به بستههای جداگانه (beanquery، beangulp و غیره) تقسیم شدند. به عنوان مثال، قابلیت bean-query اکنون توسط ابزار beanquery
که به صورت جداگانه نصب میشود، ارائه میشود. از دیدگاه کاربر، قابلیت همچنان در دسترس است؛ فقط ماژولار شده است. جامعه آرچ لینوکس این تغییر را هنگام بهروزرسانی فاوا متوجه شد: بسته فاوا وابستگیهایی به beanquery و beangulp اضافه کرد تا از Beancount 3.x پشتیبانی کند. این رویکرد ماژولار همچنین به دیگران در جامعه اجازه میدهد تا به این ابزارهای کمکی مستقلتر از چرخه انتشار Beancount کمک کنند.
افزونهها و افزایههای Beancount
یکی از نقاط قوت برجسته اکوسیستم Beancount، سیستم افزونهها است. با افزودن خط plugin "module.name"
در فایل Beancount خود، میتوانید منطق سفارشی پایتون را که در طول پردازش دفتر کل اجرا میشود، اضافه کنید. جامعه کاربری افزونههای زیادی را برای گسترش قابلیتهای Beancount ایجاد کرده است:
- کیفیت داده و قوانین: نمونهها شامل
beancount-balexpr
است که به شما امکان میدهد معادلات شامل چندین حساب را تأیید کنید (مثلاً دارایی الف + دارایی ب = بدهی ایکس)، وbeancount-checkclosed
که به طور خودکار اظهارات تراز را هنگام بستن یک حساب وارد میکند تا اطمینان حاصل شود که خالص آن صفر است. حتی یک افزونه برای اطمینان از مرتب بودن تراکنشها در فایل بر اساس تاریخ (autobean.sorted
) وجود دارد تا ورودیهای نامرتب را شناسایی کند. - اتوماسیون: افزونه
beancount-asset-transfer
میتواند ورودیهای انتقال غیرنقدی بین حسابها را تولید کند (مفید برای جابجایی سهام بین کارگزاران در حالی که مبنای هزینه حفظ میشود). افزونه دیگری به نامautobean.xcheck
، دفتر کل Beancount شما را با صورتحسابهای خارجی برای یافتن مغایرتها مقایسه میکند. - تراکنشهای تکراری و بودجهبندی: افزونه "repeat" یا interpolate توسط Akuukis امکان تعریف تراکنشهای تکراری یا توزیع یک هزینه سالانه در طول ماهها را فراهم میکند. برای بودجهبندی، افزایه
fava-envelope
(که از طریق Fava استفاده میشود) از متدولوژی بودجهبندی پاکتی در متن ساده پشتیبانی میکند. همچنین MiniBudget توسط فرانک دیویس وجود دارد – یک ابزار مستقل کوچک با الهام از Beancount برای کمک به بودجهبندی برای استفاده شخصی یا کسبوکارهای کوچک. - مالیات و گزارشدهی: برخی افزونهها به حسابداری مالیاتی کمک میکنند، مانند افزونهای که سود سرمایه را به طور خودکار به کوتاهمدت در مقابل بلندمدت طبقهبندی میکند. افزونه دیگری (
fincen_114
توسط جاستوس پندلتون) گزارش FBAR را برای مالیاتدهندگان آمریکایی دارای حسابهای خارجی تولید میکند، که نشان میدهد چگونه دادههای Beancount میتوانند برای گزارشدهی نظارتی مورد استفاده قرار گیرند. - مخازن افزونههای جامعه کاربری: مجموعههای افزونههای منتخب مانند beancount-plugins (توسط دیو استفنز) وجود دارند که بر مواردی مانند ورودیهای استهلاک تمرکز دارند، و beancount-plugins-zack (توسط استفانو زاکیرولی) که شامل کمککنندههای متنوعی مانند دستورالعملهای مرتبسازی هستند.
علاوه بر افزونهها، سایر ابزارهای کاربردی مرتبط با Beancount نیازهای خاصی را برطرف میکنند. به عنوان مثال، beancount-black یک قالببند خودکار مشابه قالببند کد Black است، اما برای فایلهای دفتر کل Beancount. یک ربات Beancount (تلگرام/مترموست) برای افزودن تراکنشها از طریق چت وجود دارد که قبلاً ذکر شد، و یک گردش کار آلفرد برای macOS برای افزودن سریع تراکنشها به فایل شما. ابزاری به نام Pinto یک CLI "فوقالعاده" با ورود تعاملی (مانند یک bean-add پیشرفته) ارائه میدهد. برای کسانی که از سیستمهای دیگر مهاجرت میکنند، مبدلهایی (YNAB2Beancount, CSV2Beancount, GnuCash2Beancount, Ledger2Beancount) وجود دارند که به وارد کردن دادهها از جاهای دیگر کمک میکنند.
به طور خلاصه، اکوسیستم Beancount بسیار گسترده است. جدول ۱ در زیر برخی از ابزارها و افزایههای اصلی را با نقشهایشان فهرست میکند:
| ابزار/افزایه | توضیحات Beancount is a simple, plain- text accounting system. It is a command-line tool that helps you manage your finances. It is designed for people who want to keep track of their finances in a simple, plain-text format. It is also designed for people who want to automate their accounting processes.
Beancount Features
- Double-entry bookkeeping: Beancount uses the double-entry bookkeeping system, which is a fundamental concept in accounting. This system ensures that every transaction is recorded in at least two accounts, with equal and opposite effects. This helps to maintain the balance of the ledger and prevent errors.
- Plain-text format: Beancount stores your financial data in plain-text files. This makes it easy to read, edit, and manage your data using any text editor. It also makes it easy to version control your data using tools like Git.
- Command-line interface: Beancount provides a command-line interface (CLI) for interacting with your financial data. This allows you to quickly add, edit, and query your transactions using simple commands. It also makes it easy to integrate Beancount with other tools and scripts.
- Extensible plugin system: Beancount has a powerful plugin system that allows you to extend its functionality with custom scripts. You can use plugins to automate tasks, generate reports, and integrate with other services.
- Reporting and analysis: Beancount provides various reporting and analysis tools to help you understand your financial situation. You can generate reports such as balance sheets, income statements, and cash flow statements. You can also use Beancount to analyze your spending patterns and identify areas where you can save money.
- Multi-currency support: Beancount supports multiple currencies, allowing you to track transactions in different currencies. It also handles currency conversions automatically, making it easy to manage your international finances.
- Automated reconciliation: Beancount can help you reconcile your accounts with your bank statements. It can automatically match transactions and identify discrepancies, saving you time and effort.
- Privacy and security: Beancount stores your financial data locally on your computer, giving you full control over your data. It does not send your data to any third-party servers, ensuring your privacy and security.
Why Choose Beancount?
- Simplicity: Beancount is designed to be simple and easy to use. Its plain-text format and command-line interface make it accessible to anyone, regardless of their technical expertise.
- Flexibility: Beancount is highly flexible and customizable. Its plugin system allows you to tailor it to your specific needs and workflows.
- Control: With Beancount, you have full control over your financial data. You can store it locally, back it up, and manage it using your preferred tools.
- Transparency: Beancount's plain-text format makes your financial data transparent and auditable. You can easily see how your transactions are recorded and how your balances are calculated.
- Community: Beancount has a vibrant and supportive community of users and developers. You can find help, share tips, and contribute to the project.
Get Started with Beancount
Ready to take control of your finances with Beancount? Here's how you can get started:
- Install Beancount: Follow the instructions in the official documentation to install Beancount on your system.
- Create your first ledger: Start by creating a new plain-text file for your Beancount ledger.
- Add your transactions: Begin adding your financial transactions to your ledger using Beancount's simple syntax.
- Generate reports: Use Beancount's reporting tools to generate insights into your financial situation.
- Explore plugins: Discover and experiment with various plugins to extend Beancount's functionality.
Join the Beancount community today and experience the power of plain-text accounting!
مقایسه با لجر، اچلجر و سیستمهای مشابه
بینکانت (Beancount) به خانواده ابزارهای حسابداری دوطرفه متن ساده تعلق دارد که در میان آنها لجر CLI (Ledger CLI) (لجر جان ویگلی) و اچلجر (hledger) برجسته هستند. در حالی که همه این سیستمها ایده اصلی فایلهای دفتر کل متن ساده و حسابداری دوطرفه را به اشتراک میگذارند، اما در نحو، فلسفه و بلوغ اکوسیستم با یکدیگر تفاوت دارند. جدول زیر تفاوتهای کلیدی بین بینکانت، لجر و اچلجر را برجسته میکند:
| جنبه | بینکانت (پایتون)
سناریوهای استفاده از بینکانت
بینکانت به اندازه کافی منعطف است تا برای ردیابی مالی شخصی و همچنین (در برخی موارد) حسابداری کسبوکارهای کوچک استفاده شود. رویکرد اصلی حسابداری دوطرفه آن در هر دو سناریو یکسان است، اما مقیاس و رویههای خاص میتوانند متفاوت باشند.
مالیه شخصی
بسیاری از کاربران بینکانت از آن برای مدیریت امور مالی فردی یا خانوادگی خود استفاده میکنند. یک تنظیمات معمول مالیه شخصی در بینکانت ممکن است شامل حسابهای جاری و پسانداز، کارتهای اعتباری، سرمایهگذاریها، وامها، دستهبندیهای درآمد (حقوق، سود و غیره) و دستهبندیهای هزینه (اجاره، خواربار، سرگرمی و غیره) باشد. کاربران تراکنشهای روزمره را به صورت دستی (با وارد کردن رسیدها، صورتحسابها و غیره) یا با وارد کردن از صورتحسابهای بانکی با استفاده از ابزارهای واردکننده که قبلاً بحث شد، ثبت میکنند. مزایایی که بینکانت برای مالیه شخصی به ارمغان میآورد عبارتند از:
- یکپارچهسازی و تحلیل: تمام تراکنشهای شما میتوانند در یک فایل متنی (یا مجموعهای از فایلها) قرار گیرند که سالها سابقه مالی را نشان میدهد. این کار تحلیل روندهای بلندمدت را آسان میکند. با زبان پرسوجوی بینکانت یا با فاوا، میتوانید به سوالاتی مانند "در 5 سال گذشته چقدر برای سفر هزینه کردم؟" یا "میانگین قبض ماهانه خواربار من چقدر است؟" در عرض چند ثانیه پاسخ دهید. یکی از کاربران اشاره کرد که پس از روی آوردن به بینکانت، «تحلیل دادههای مالی (هزینهها، کمکها، مالیات و غیره) بسیار ساده است»، چه از طریق فاوا و چه با پرسوجو از دادهها و استفاده از ابزارهایی مانند Pandas. در اصل، دفتر کل شما به یک پایگاه داده مالی شخصی تبدیل میشود که میتوانید به دلخواه از آن پرسوجو کنید.
- بودجهبندی و برنامهریزی: در حالی که بینکانت یک سیستم بودجهبندی را تحمیل نمیکند، میتوانید آن را پیادهسازی کنید. برخی از کاربران با ایجاد حسابهای بودجه یا استفاده از افزونه
fava-envelope
، بودجهبندی پاکتی را ا نجام میدهند. برخی دیگر به سادگی از گزارشهای دورهای برای مقایسه هزینهها با اهداف استفاده میکنند. از آنجا که متن ساده است، یکپارچهسازی بینکانت با ابزارهای بودجهبندی خارجی یا صفحات گسترده (اکسل) ساده است (صادر کردن دادهها یا استفاده از خروجیهای CSV از پرسوجوها). - ردیابی سرمایهگذاریها و ارزش خالص دارایی: بینکانت به لطف مدیریت قوی مبنای بهای تمام شده و قیمتهای بازار، در ردیابی سرمایهگذاریها عالی عمل میکند. میتوانید خرید/فروش سهام، ارزهای دیجیتال و غیره را با جزئیات بهای تمام شده ثبت کنید و سپس از دستورات
Prices
برای پیگیری ارزش بازار استفاده کنید. فاوا میتواند نمودار ارزش خالص دارایی در طول زمان و تفکیک سبد سرمایهگذاری بر اساس طبقه دارایی را نشان دهد. این برای مدیریت ثروت شخصی بسیار مفید است – شما بینشهایی مشابه آنچه ابزارهای تجاری مانند Mint یا Personal Capital ارائه میدهند، به دست میآورید، اما کاملاً تحت کنترل خودتان. مدیریت چند ارزی نیز داخلی است، بنابراین اگر ارزهای خارجی یا ارزهای دیجیتال نگهداری میکنید، بینکانت میتواند آنها را ردیابی کرده و برای گزارشدهی تبدیل کند. - تطبیق و دقت: مالیه شخصی اغلب شامل تطبیق با صورتحسابهای بانکی است. با بینکانت، میتوان به طور منظم حسابها را با استفاده از اظهارات تراز (balance assertions) یا قابلیت اسناد تطبیق داد. به عنوان مثال، هر ماه ممکن است یک ورودی
balance Assets:Bank:Checking <date> <balance>
اضافه کنید تا تأیید کنید که دفتر کل شما با صورتحساب بانک در پایان ماه مطابقت دارد. ابزارbean-check
(یا نمایش خطای فاوا) در صورت عدم تطابق، به شما هشدار میدهد. یکی از کاربران به انجام تطبیق ماهانه تمام حسابها اشاره میکند که «به شناسایی هرگونه فعالیت غیرعادی کمک میکند» – یک روش خوب بهداشت مالی شخصی که بینکانت آن را تسهیل میکند. - اتوماسیون: افراد آشنا به فناوری، بخشهای بزرگی از گردش کار مالیه شخصی خود را با بینکانت خودکار کردهاند. با استفاده از واردکنندهها، کرون جابها و شاید کمی پایتون، میتوانید سیستم خود را طوری تنظیم کنید که، به عنوان مثال، هر روز تراکنشهای بانکی شما واکشی شده (برخی از OFX یا APIها استفاده میکنند) و به فایل بینکانت شما اضافه شوند، که بر اساس قوانین دستهبندی شدهاند. با گذشت زمان، دفتر کل شما عمدتاً به صورت خودکار بهروزرسانی میشود و شما فقط در صورت نیاز آن را بررسی و تنظیم میکنید. یکی از اعضای جامعه در Hacker News به اشتراک گذاشت که پس از 3 سال، دفاتر بینکانت آنها «95% خودکار» بودند. این سطح از اتوماسیون به دلیل باز بودن متن ساده بینکانت و قابلیتهای اسکریپتنویسی آن امکانپذیر است.
کاربران مالیه شخصی اغلب بینکانت را به صفحات گسترده (اکسل) یا برنامهها ترجیح میدهند زیرا مالکیت کامل دادهها را به آنها میدهد (عدم وابستگی به یک سرویس ابری که ممکن است تعطیل شود – نگرانی که با توقف Mint، به عنوان مثال، مطرح شد) و به این دلیل که عمق بینش زمانی که تمام دادههای شما یکپارچه شدهاند، بیشتر است. منحنی یادگیری ناچیز نیست – باید حسابداری پایه و نحو بینکانت را یاد گرفت – اما منابعی مانند مستندات رسمی و آموزشهای جامعه به تازهواردان کمک میکنند تا شروع کنند. پس از راهاندازی، بسیاری متوجه میشوند که داشتن تصویری واضح و قابل اعتماد از امور مالی خود در هر زمان، آرامش خاطر به ارمغان میآورد.
حسابداری کسبوکارهای کوچک
استفاده از بینکاونت (Beancount) برای یک کسبوکار کوچک (یا سازمان غیرانتفاعی، باشگاه و غیره) کمتر از استفاده شخصی رایج است، اما قطعاً امکانپذیر است و برخی با موفقیت این کار را انجام دادهاند. چارچوب حسابداری دوطرفه بینکاونت در واقع همان سیستمی است که زیربنای حسابداری شرکتی را تشکیل میدهد، فقط بدون برخی از ویژگیهای سطح بالاتر که نرمافزارهای حسابداری اختصاصی ارائه میدهند (مانند ماژولهای صدور فاکتور یا یکپارچهسازی حقوق و دستمزد). در ادامه نحوه انطباق بینکاونت با زمینه یک کسبوکار کوچک آورده شده است:
- دفتر کل و صورتهای مالی: یک کسبوکار کوچک میتواند فایل بینکاونت را به عنوان دفتر کل خود در نظر بگیرد. شما حسابهای دارایی برای حسابهای بانکی، حسابهای دریافتنی، شاید موجودی کالا؛ حسابهای بدهی برای کارتهای اعتباری، وامها، حسابهای پرداختنی؛ حقوق صاحبان سهام برای سرمایه مالک؛ حسابهای درآمد برای فروش یا خدمات؛ و حسابهای هزینه برای تمام هزینههای کسبوکار خواهید داشت. با نگهداری این دفتر کل، میتوانید در هر زمان با استفاده از گزارشها یا پرسوجوهای بینکاونت، صورت سود و زیان (سود و زیان) و ترازنامه تولید کنید. در واقع، گزارشهای داخلی بینکاونت یا فاوا (Fava) میتوانند در عرض چند ثانیه ترازنامه و صورت سود و زیان را تولید کنند که کاملاً با اصول حسابداری مطابقت دارند. این میتواند برای یک عملیات کوچک جهت ارزیابی سودآوری، وضعیت مالی و جریان نقدی (با کمی پرسوجو برای جریان نقدی، زیرا صورتهای جریان نقدی مستقیم داخلی نیستند اما قابل استخراج هستند) کافی باشد.
- فاکتورها و حسابهای دریافتنی، حسابهای پرداختنی: بینکاونت سیستم صدور فاکتور داخلی ندارد؛ کاربران معمولاً صدور فاکتور را در خارج از آن (مثلاً ایجاد فاکتور در ورد یا یک برنامه فاکتور) انجام میدهند و سپس نتایج را در بینکاونت ثبت میکنند. به عنوان مثال، هنگامی که فاکتوری صادر میکنید، یک ثبت حسابداری شامل بدهکار کردن حسابهای دریافتنی و بستانکار کردن درآمد را ثبت میکنید. هنگامی که پرداخت انجام میشود، حساب نقد/بانک را بدهکار و حسابهای دریافتنی را بستانکار میکنید. به این ترتیب، میتوانید با بررسی مانده حسابهای دریافتنی، مطالبات معوق را پیگیری کنید. همین امر در مورد صورتحسابها (حسابهای پرداختنی) نیز صدق میکند. اگرچه این روش دستیتر از نرمافزارهای حسابداری تخصصی است (که ممکن است یادآوری ارسال کنند یا با ایمیلها یکپارچه شوند)، اما کاملاً قابل انجام است. برخی از کاربران الگوها یا جریانهای کاری را به اشتراک گذاشتهاند که چگونه فاکتورها را با بینکاونت مدیریت میکنند و اطمینان حاصل میکنند که فاکتورهای باز را از دست نمیدهند (به عنوان مثال، با استفاده از فراداده یا پرسوجوهای سفارشی برای لیست کردن فاکتورهای پرداخت نشده).
- موجودی کالا یا بهای تمام شده کالای فروش رفته: برای کسبوکارهایی که محصولات میفروشند، بینکاونت میتواند خرید و فروش موجودی کالا را ردیابی کند، اما نیاز به ثبتهای دقیق و منظم دارد. شما میتوانید از ویژگیهای
موجودی کالا
و حسابداری بهای تمام شده استفاده کنید: خرید موجودی کالا یک حساب دارایی را افزایش میدهد (با بهای تمام شده مرتبط با اقلام)، فروش آن بهای تمام شده را به یک هزینه (بهای تمام شده کالای فروش رفته) منتقل میکند و درآمد را ثبت میکند. از آنجایی که بینکاونت بر تطبیق دستهها اصرار دارد، کاهش صحیح موجودی کالا با بهای تمام شده درست را اعمال میکند، که در صورت انجام صحیح میتواند دقت محاسبات سود ناخالص شما را تضمین کند. با این حال، هیچ ردیابی خودکار SKU یا موارد مشابه وجود ندارد – همه چیز در سطح مالی (مقدار و بهای تمام شده) است. - حقوق و دستمزد و تراکنشهای پیچیده: بینکاونت میتواند تراکنشهای حقوق و دستمزد (هزینه حقوق، کسورات مالیاتی و غیره) را ثبت کند، اما محاسبه این ارقام ممکن است به صورت خارجی یا از طریق ابزار دیگری انجام شود و سپس فقط در بینکاونت ثبت گردد. برای یک کسبوکار بسیار کوچک (مثلاً یک یا دو کارمند)، این کار قابل مدیریت است. به عنوان مثال، شما یک ثبت روزنامه و احد برای هر دوره پرداخت که دستمزدها، مالیات کسر شده، هزینه مالیات کارفرما، وجه نقد پرداخت شده و غیره را تفکیک میکند، ثبت خواهید کرد. انجام این کار به صورت دستی مشابه نحوه انجام آن در ثبتهای روزنامه QuickBooks است – نیاز به دانش در مورد اینکه کدام حسابها را تحت تأثیر قرار دهید، دارد.
- چند کاربره و حسابرسی: یکی از چالشها در محیط کسبوکار این است که آیا چندین نفر نیاز به دسترسی به دفاتر دارند یا یک حسابدار نیاز به بررسی آنها دارد. از آنجایی که بینکاونت یک فایل متنی است، به صورت بلادرنگ چند کاربره نیست. با این حال، میزبانی فایل در یک مخزن گیت (Git repository) میتواند همکاری را امکانپذیر سازد: هر شخص میتواند ویرایش و کامیت (commit) کند، و تفاوتها را میتوان ادغام (merge) کرد.
- انطباق با مقررات: برای اظهارنامه مالیاتی یا انطباق با مقررات، دادههای بینکاونت میتوانند برای تولید گزارشهای لازم استفاده شوند، اما ممکن است نیاز به پرسوجوهای سفارشی یا افزونهها داشته باشد. ما نمونهای از یک افزونه جامعه برای گزارشدهی انطباق با دولت هند و یکی برای گزارشدهی FinCEN FBAR را دیدیم. این نشان میدهد که با تلاش، بینکاونت میتواند برای برآورده کردن الزامات گزارشدهی خاص تطبیق یابد. کسبوکارهای کوچک در حوزههای قضایی با الزامات ساده (حسابداری نقدی یا تعهدی پایه) قطعاً میتوانند دفاتر را در بینکاونت نگهداری کرده و صورتهای مالی را برای اظهارنامههای مالیاتی تولید کنند. با این حال، ویژگیهایی مانند جداول استهلاک یا امورتایزیشن (amortization) ممکن است نیاز به ثبتهای دستی شما یا استفاده از یک افزونه داشته باشد (برای مثال، افزونههای استهلاک دیو استفنز به خودکارسازی آن کمک میکنند). هیچ رابط کاربری گرافیکی (GUI) برای «کلیک کردن برای استهلاک دارایی» مانند برخی نرمافزارهای حسابداری وجود ندارد؛ شما استهلاک را به عنوان تراکنشها کدگذاری میکنید (که به نوعی آن را از ابهام خارج میکند – همه چیز یک ثبت است که میتوانید آن را بررسی کنید).
در عمل، بسیاری از صاحبان کسبوکارهای کوچک با گرایش فنی، در صورتی که کنترل و شفافیت را به راحتی QuickBooks ترجیح دهند، از بینکاونت (یا لجر/اچلجر) استفاده کردهاند. یک بحث در ردیت (Reddit) اشاره کرد که برای حسابداری استاندارد کسبوکارهای کوچک با حجم محدود تراکنشها، بینکاونت به خوبی کار میکند. عامل محدودکننده معمولاً سطح راحتی است – اینکه آیا صاحب کسبوکار (یا حسابدار او) با یک ابزار مبتنی بر متن راحت است یا خیر. یکی از مزایا هزینه است: بینکاونت رایگان است، در حالی که نرمافزارهای حسابداری میتوانند برای یک کسبوکار کوچک گران باشند. از سوی دیگر، عدم پشتیبانی رسمی و ماهیت خودساخته آن به این معنی است که برای کسانی که هم صاحب کسبوکار هستند و هم تا حدودی از نظر فنی تمایل دارند، مناسبتر است. برای فریلنسرها یا صاحبان مشاغل انفرادی با مهارتهای برنامهنویسی، بینکاونت میتواند یک انتخاب جذاب برای مدیریت امور مالی بدون اتکا به خدمات حسابداری ابری باشد.
رویکردهای ترکیبی نیز امکانپذیر است: برخی از کسبوکارهای کوچک از یک سیستم رسمی برای فاکتورها یا حقوق و دستمزد استفاده میکنند، اما به صورت دورهای دادهها را برای تحلیل و بایگانی به بینکاونت وارد میکنند. به این ترتیب، آنها بهترین هر دو جهان را به دست میآورند – انطباق و سهولت برای عملیات روزمره، به علاوه قدرت بینکاونت برای بینش یکپارچه.
به طور خلاصه، بینکاونت میتواند حسابداری کسبوکارهای کوچک را مدیریت کند، مشروط بر اینکه کاربر مایل به مدیریت دستی مواردی باشد که نرمافزارهای تجاری آنها را خودکار میکنند. این امر درجه بالایی از شفافیت را تضمین میکند – شما دفاتر خود را عمیقاً درک میکنید زیرا خودتان آنها را مینویسید – و برای یک کاربر دقیق، میتواند دفاتر بینقصی تولید کند. هم کاربران شخصی و هم کاربران تجاری از نقاط قوت اصلی بینکاونت بهرهمند میشوند: یک موتور حسابداری قابل اعتماد، مسیر حسابرسی کامل، و انعطافپذیری برای انطباق با سناریوهای منحصر به فرد (از طریق اسکریپتنویسی و افزونهها). چه ردیابی بودجه خانوار باشد و چه امور مالی یک استارتاپ، بینکاونت ابزاری را برای انجام آن با دقت و شفافیت ارائه میدهد.
جامعه و فعالیت توسعه
بیانکونت (Beancount) دارای جامعهای اختصاصی و داستانی از توسعه است که ماهیت متنباز، خاص اما پرشور آن را منعکس میکند. در ادامه نکات کلیدی درباره جامعه، نگهدارندگان و پروژههای مرتبط با آن آورده شده است:
-
نگهداری پروژه: نویسنده اصلی بیانکونت، مارتین بلایس (Martin Blais) است که پروژه را حدود سال ۲۰۰۷ آغاز کرد و آن را در نسخههای متعدد هدایت کرده است. توسعه برای مدت طولانی عمدتاً تلاشی یکنفره بود (بهجز مشارکتهای جامعه در قالب پچها). فلسفه مارتین این بود که ابزار حسابداریای بسازد که "اول برای خودم مفید باشد، و همچنین برای دیگران، به سادهترین و بادوامترین شکل ممکن". این انگیزه شخصی پروژه را بهعنوان یک کار عاشقانه زنده نگه داشت. تا سال ۲۰۲۵، مارتین بلایس همچنان نگهدارنده اصلی است (نام او در کامیتها ظاهر میشود و او به سؤالات در لیست پستی/ردیاب مشکلات پاسخ میدهد)، اما اکوسیستم اطراف بیانکونت مشارکتکنندگان بسیاری در پروژههای مربوط به خود دارد.
-
گیتهاب و مخازن: کد منبع در گیتهاب تحت مخزن
beancount/beancount
میزبانی میشود. این پروژه تحت مجوز GPL-2.0 است و در طول سالها تعداد متوسطی از مشارکتکنندگان را جذب کرده است. در اواسط سال ۲۰۲۴، بیانکونت نسخه ۳ بهطور رسمی بهعنوان شاخه پایدار جدید منتشر شد. این انتشار شامل جداسازی برخی اجزا بود: بهعنوان مثال، مخزن beangulp (برای واردکنندهها) و مخزن beanquery (برای ابزار پرسوجو) اکنون بخشی از سازمان گیتهابbeancount
هستند و تا حدی مستقل نگهداری میشوند. مخزن اصلی بیانکونت بر موتور اصلی حسابداری و تحلیلگر فایل تمرکز دارد. تا سال ۲۰۲۵، گیتهاب بیانکونت بحثهای فعال در مورد مشکلات و توسعه در حال انجام را نشان میدهد – اگرچه حجم بالایی ندارد، اما مشکلات و درخواستهای پول (pull requests) بهتدریج وارد میشوند و بهروزرسانیهای گاهبهگاه برای رفع اشکالات یا بهبود ویژگیها انجام میشود. -
توسعه فاوا: فاوا (Fava)، رابط وب، بهعنوان یک پروژه جداگانه آغاز شد (ایجاد شده توسط دومینیک آومایر (Dominic Aumayr) که در سال ۲۰۱۶ حق کپیرایت آن را ثبت کرد). این پروژه جامعه مشارکتکنندگان خاص خود را دارد و همچنین در گیتهاب تحت
beancount/fava
قرار دارد. نگهدارندگان و مشارکتکنندگان فاوا (مانند یاکوب شنیتز (Jakob Schnetz)، استفان اوته (Stefan Otte) و دیگران در سالهای اخیر) بهطور فعال در حال بهبود رابط کاربری بودهاند و هر چند ماه یکبار نسخههای جدیدی منتشر میکنند. چت گیتِر (Gitter) فاوا (که در مستندات فاوا لینک شده است) و ردیاب مشکلات گیتهاب مکانهایی هستند که کاربران و توسعهدهندگان درباره ویژگیهای جدید یا اشکالات بحث میکنند. این پروژه از مشارکتها استقبال میکند، که با یادداشتی در CHANGELOG که از چندین عضو جامعه برای درخواستهای پولشان (PRs) تشکر میکند، مشهود است. همسویی نزدیک فاوا با توسعه بیانکونت (مانند افزودن سریع پشتیبانی از Beancount v3 و نحو جدید beanquery) نشاندهنده همکاری خوب بین دو پروژه است. -
لیستهای پستی و انجمنها: بیانکونت یک لیست پستی رسمی دارد (قبلاً در گروههای گوگل (Google Groups) با عنوان "Beancount" یا گاهی در لیست عمومی لِجر (Ledger) مورد بحث قرار میگرفت). این لیست پستی گنجینهای از دانش است – کاربران سؤالاتی درباره نحوه مدلسازی سناریوهای خاص میپرسند، اشکالات را گزارش میدهند و نکات را به اشتراک میگذارند. مارتین بلایس به پاسخهای دقیق در لیست پستی معروف است. علاوه بر این، جامعه گستردهتر حسابداری متن ساده همپوشانی زیادی دارد. لیست پستی Ledger CLI نیز اغلب سؤالاتی درباره بیانکونت را مطرح میکند، و یک انجمن در plaintextaccounting.org و یک سابردیت (subreddit) به نام r/plaintextaccounting وجود دارد که موضوعات بیانکونت بهطور مکرر در آن مطرح میشوند. کاربران در این پلتفرمها درباره مقایسهها بحث میکنند، تنظیمات شخصی خود را به اشتراک میگذارند و به تازهواردان کمک میکنند. لحن کلی جامعه بسیار تعاونی است – کاربران بیانکونت اغلب به کاربران لِجر کمک میکنند و بالعکس، با درک اینکه همه این ابزارها اهداف مشابهی دارند.
-
گروههای چت: علاوه بر لیستهای پستی، کانالهای چتی مانند اسلک/دیسکورد حسابداری متن ساده (که توسط جامعه سازماندهی شدهاند) و گیتِر فاوا وجود دارند. اینها روشهای کمتر رسمی و بلادرنگتری برای دریافت کمک یا بحث درباره ویژگیها هستند. بهعنوان مثال، ممکن است کسی به اسلک بپیوندد تا بپرسد آیا کسی واردکنندهای برای یک بانک خاص دارد یا خیر. همچنین یک کانال ماتریکس/IRC (که از لحاظ تاریخی #ledger یا #beancount در IRC بوده است) وجود دارد که برخی از کاربران قدیمی در آن حضور دارند. اگرچه این کانالها به اندازه جوامع نرمافزارهای اصلی پرجمعیت نیستند، اما افراد آگاهی در آنها حضور دارند که اغلب میتوانند به سؤالات حسابداری مبهم پاسخ دهند.
-
مشارکتکنندگان و اعضای کلیدی جامعه: چند نام در جامعه بیانکونت برجسته هستند:
- "رداستریت" (Red S): یک مشارکتکننده پرکار که بسیاری از افزونهها (مانند
beancount-balexpr
،sellgains
و غیره) را نوشته و اغلب پشتیبانی ارائه میدهد. او همچنین مجموعهای از اسکریپتهای واردکننده و ابزاری به نامbean-download
را برای واکشی صورتحسابها نگهداری میکند. - واسیلی ام (Evernight): نویسنده برخی چارچوبهای واردکننده و افزونهها مانند
beancount-valuation
، و مشارکت در فاوا در زمینه سرمایهگذاریها. - استفانو زاکیرولی (zack): یک توسعهدهنده دبیان (Debian) که
beancount-mode
را برای اِمکس (Emacs) و مخزن افزونههای خود را ایجاد کرده است. او همچنین از حسابداری متن ساده در محیطهای آکادمیک حمایت کرده است. - سایمون مایکل: در حالی که او عمدتاً رهبر hledger است، وبسایت plaintextaccounting.org را اداره میکند که شامل بیانکونت نیز میشود. این گردهافشانی متقابل به جلب توجه کاربران لِجر/hledger به بیانکونت کمک کرده است.
- فرانک هل (Tarioch): مشارکتکننده ابزارهای Tarioch Beancount Tools، مجموعهای بزرگ از واردکنندهها و واکشیکنندههای قیمت بهویژه برای مؤسسات اروپایی.
- سیدانت گوئل: یکی از اعضای جامعه که درباره بیانکونت وبلاگ مینویسد (بهعنوان مثال، راهنمای او برای مهاجرت به نسخه ۳) و برخی واردکنندهها را نگهداری میکند. پستهای وبلاگ او به بسیاری از کاربران جدید کمک کرده است.
این افراد و بسیاری دیگر، کد، مستندات و کمک در انجمنها را ارائه میدهند و اکوسیستم را با وجود اندازه نسبتاً کوچک آن، پویا نگه میدارند.
- "رداستریت" (Red S): یک مشارکتکننده پرکار که بسیاری از افزونهها (مانند
-
آمار گیتهاب و فورکها: مخزن گیتهاب بیانکونت چند صد ستاره (نشاندهنده علاقه) و فورک (انشعاب) جمعآوری کرده است. فورکهای قابل توجه خود بیانکونت نادر هستند – هیچ فورک واگرای شناختهشدهای وجود ندارد که سعی کند "بیانکونت با ویژگی X" باشد. در عوض، هنگامی که کاربران چیز متفاوت ی میخواستند، یا یک افزونه نوشتند یا از ابزار دیگری (مانند hledger) استفاده کردند، بهجای اینکه بیانکونت را فورک کنند. میتوان hledger را نوعی فورک لِجر (نه بیانکونت) و خود بیانکونت را بازتصویری مستقل از ایدههای لِجر در نظر گرفت، اما در داخل مخزن بیانکونت پروژههای انشعابی بزرگی وجود ندارد. جامعه بهطور کلی حول مخزن اصلی جمع شده و آن را از طریق رابط افزونه گسترش داده است، بهجای اینکه پایگاه کد را تکهتکه کند. این احتمالاً به این دلیل است که مارتین بلایس نسبت به مشارکتهای خارجی باز بود (مستندات او حتی بخشی برای قدردانی از مشارکتها و ماژولهای خارجی دارد) و معماری افزونه نیاز به نگهداری یک فورک برای اکثر
تحولات اخیر و ویژگیهای آتی
تا سال ۲۰۲۵، اکوسیستم Beancount شاهد تحولات قابل توجهی در چند سال گذشته بوده است، و بحثهای جاری در مورد بهبودهای آتی وجود دارد. در اینجا برخی از تحولات اخیر قابل توجه و نگاهی اجمالی به آنچه ممکن است در راه باشد، آورده شده است:
-
انتشار Beancount 3.0 (2024): پس از مدتها که Beancount 2.x استاندارد بود، نسخه ۳ به طور رسمی در اواسط سال ۲۰۲۴ منتشر شد. این یک نقطه عطف بزرگ بود زیرا نسخه ۳ نشاندهنده سادهسازی و مدرنسازی پایگاه کد است. مارتین بلایس نسخه ۳ را فرصتی برای "بازآرایی و سادهسازی" بیشتر سیستم تصور کرده بود. در حالی که در ابتدا تصور میشد یک بازنویسی بزرگ باشد، در عمل بهروزرسانی برای کاربران چندان مختلکننده نبود. تغییرات اصلی زیر کاپوت بودند: یک تجزیهکننده جدید، برخی بهبودهای عملکردی، و استخراج اجزای اختیاری از هسته. این انتشار به تدریج انجام شد (نسخه ۳ از سال ۲۰۲۲ در بتا بود، اما تا ژوئیه ۲۰۲۴ به نسخه پایدار توصیه شده تبدیل شد). کاربرانی مانند Siddhant Goel گزارش دادند که مهاجرت از ۲.x به ۳.x "عمدتاً بدون حادثه" و تنها با چند تغییر در گردش کار همراه بود.
-
ماژولار شدن – ابزارها به بستههای جداگانه منتقل شدند: یکی از تغییرات بزرگ با Beancount 3 این است که بسیاری از ابزارهایی که قبلاً در مخزن یکپارچه قرار داشتند، جدا شدند. به عنوان مثال، bean-query اکنون توسط بسته
beanquery
ارائه میشود، و beancount.ingest با بستهbeangulp
جایگزین شد. دستوراتی مانندbean-extract
وbean-identify
(برای واردات) از هسته Beancount حذف شدند. در عوض، فلسفه این است که از اسکریپتهای مستقل برای وارد کردن استفاده شود. این بدان معناست که اگر به نسخه ۳ ارتقا دهید، بایدbeangulp
را نصب کرده و اسکریپتهای واردکننده را اجرا کنید (هر واردکننده اساساً یک برنامه کوچک است) به جای داشتن یک فایل پیکربندی مرکزیbean-extract
. به طور مشابه، پرسوجوها از طریقbeanquery
اجرا میشوند که میتواند مستقل از هسته Beancount نصب و بهروزرسانی شود. این رویکرد پیمانهای برای آسانتر کردن نگهداری و تشویق مشارکتهای جامعه طراحی شده است. همچنین هسته Beancount را کوچکتر کرد، بنابراین هسته صرفاً بر تجزیه و منطق حسابداری تمرکز میکند، در حالی که قابلیتهای جانبی میتوانند به طور جداگانه تکامل یابند. از دیدگاه کاربر، پس از ارتقا، باید دستورات را تنظیم کرد (به عنوان مثال، استفاده ازbean-query
از beanquery، یا استفاده از Fava که این را به هر حال انتزاعی میکند). تاریخچه تغییرات Fava به صراحت این تغییرات را ذکر میکند: Fava اکنون به beanquery و beangulp وابسته است، و جریانهای کاری واردات را برای Beancount 3 در مقابل 2 به طور متفاوتی مدیریت میکند. -
بهبودهای عملکردی: عملکرد یکی از انگیزههای بازنگری در طراحی Beancount بود. برنامه نسخه ۳ (همانطور که در سند "اهداف V3" مارتین تشریح شده است) شامل بهینهسازی تجزیهکننده و احتمالاً سریعتر و کممصرفتر کردن فرآیند بارگذاری بود. تا سال ۲۰۲۵، برخی از این بهبودها محقق شدهاند. به طور غیررسمی، کاربران با دفترهای کل بسیار بزرگ (دهها هزار تراکنش، یا تعداد زیادی معاملات سهام) عملکرد بهتری را با آخرین نسخه گزارش کردهاند. به عنوان مثال، کاربری که با "تراکنشهای خرد سرمایهگذاری" سروکار داشت و با مشکلات عملکردی مواجه بود، این نگرانیها را در گروه Google مطرح کرد – این نوع بازخورد احتمالاً نسخه ۳ را شکل داده است. تجزیهکننده جدید کارآمدتر و به روشی واضحتر نوشته شده است که میتواند در آینده گسترش یابد. علاوه بر این، Fava 1.29 به یک مکانیزم نظارت بر فایل کارآمدتر (با استفاده از کتابخانه
watchfiles
) منتقل شد تا پاسخگویی را هنگام تغییر دفتر کل بهبود بخشد. با نگاه به آینده، جامعه ممکن است تجزیه افزایشی (فقط پردازش مجدد بخشهای تغییر یافته فایل به جای همه چیز) را برای مدیریت سریعتر دفترهای کل بزرگ بررسی کند – این در مستندات به عنوان ایده "سرور Beancount / ثبت افزایشی" اشاره شده بود. -
بهبودهای ردیابی سرمایهگذاری: کار مداومی برای بهبود گزارشدهی سرمایهگذاری و سبد سهام انجام شده است. به عنوان مثال، مدیریت مبنای میانگین هزینه در مقابل فایفو (FIFO) به تفصیل مورد بحث قرار گرفت. در حالی که Beancount تطبیق دستهها را اعمال میکند، برخی کاربران مبنای میانگین هزینه را برای حوزههای قضایی خاص ترجیح میدهند. یک پیشنهاد و بحث در مورد انعطافپذیرتر کردن ثبت مبنای هزینه (احتمالاً از طریق یک افزونه یا گزینه) وجود دارد. تا سال ۲۰۲۵، هیچ سوئیچ داخلی برای میانگین هزینه وجود ندارد، اما زیرساخت در نسخه ۳ (بازطراحی ثبت) پیادهسازی آن را برای افزونهها آسانتر میکند. یک افزونه جامعهای به نام "Gains Minimizer" منتشر شد که میتواند پیشنهاد کند کدام دستهها را برای به حداقل رساندن مالیات بفروشید، که نشاندهنده نوع ابزارهای پیشرفتهای است که در اطراف سرمایهگذاریها ساخته میشوند. Fava نیز ویژگیهایی مانند یک افزونه خلاصه سبد سهام (با محاسبات نرخ بازده) اضافه کرد. از نظر ویژگیهای آتی، میتوان انتظار بیشتری در این زمینه داشت: احتمالاً پیشنهادهای متعادلسازی خودکار سبد سهام یا تحلیل ریسک، که احتمالاً به عنوان ابزارهای خارجی که دادههای Beancount را میخوانند (زیرا تمام دادهها در آنجا موجود است) ارائه خواهند شد.
-
افزونهها و توسعههای جدید: اکوسیستم افزونهها به طور مداوم در حال رشد است. اضافات قابل توجه اخیر عبارتند از:
- ابزارهای گزارشدهی بودجه – به عنوان مثال، یک گزارشگر بودجه CLI ساده اگر کسی از رابط کاربری Fava استفاده نمیکند.
- رمزگذاری و امنیت – تنظیمات fava-encrypt، که امکان میزبانی آنلاین Fava را با دفتر کل رمزگذاری شده در حالت سکون فراهم میکند، معرفی شد و به نگرانی میزبانی شخصی امور مالی شما پاسخ داد.
- افزونههای بهبود کیفیت زندگی – مانند
autobean-format
(یک فرمتکننده جدید که میتواند موارد گوشهای بیشتری را با تجزیه و چاپ مجدد فایل مدیریت کند)، و یکپارچهسازیbeancheck
در ویرایشگرها (flymake برای Emacs).
با نگاه به آینده، جامعه احتمالاً به پر کردن شکافها از طریق افزونهها ادامه خواهد داد. به عنوان مثال، ممکن است شاهد افزونههای مرتبط با مالیات بیشتری باشیم (برخی کاربران اسکریپتهایی را برای مواردی مانند محاسبه فروشهای شستشو یا گزارشهای مالیاتی محلی خاص به اشتراک گذاشتهاند).
-
ویژگیهای بالقوه آتی: بر اساس بحثها در ردیاب مسائل و لیست پستی، چند ایده در افق هستند (اگرچه تضمین شده نیستند):
- تفکیک زمانی: در حال حاضر، Beancount فقط تاریخها (بدون برچسبهای زمانی) را برای تراکنشها ردیابی میکند. سوالاتی در مورد افزودن زمان (برای معاملات سهام یا ترتیب تراکنشهای همروزه) مطرح شده است. مارتین بلایس به صراحت تصمیم گرفت که برچسبهای زمانی زیر یک روز برای حفظ سادگی خارج از محدوده هستند. این بعید است به زودی تغییر کند – بنابراین نسخههای آتی احتمالاً تفکیک زمانی را اضافه نخواهند کرد و بر این موضع پایبند خواهند بود که اگر به زمان نیاز دارید، آن را در شرح یا یک حساب بگنجانید.
- ویرایش GUI پیشرفته: Fava به طور مداوم قابلیتهای ویرایش خود را بهبود میبخشد. یک امکان، یک ویرایشگر وب با قابلیتهای کاملتر (با پیشنهاد خودکار، شاید ورود مبتنی بر فرم برای تراکنشهای جدید) است. زیرساخت استفاده از tree-sitter در ویرایشگر Fava فراهم شده است. ممکن است شاهد تبدیل Fava نه تنها به یک نمایشگر بلکه به یک ویرایشگر قدرتمندتر باشیم، که نیاز به باز کردن یک ویرایشگر متن را برای بسیاری از وظایف کاهش میدهد.
- پشتیبانی بهتر از چندین دفتر کل: برخی کاربران چندین فایل Beancount را نگهداری میکنند (برای نهادهای مختلف یا برای تفکیک شخصی در مقابل تجاری). در حال حاضر، شامل کردن فایلها امکانپذیر است اما محدودیتهایی دارد (افزونهها در فایلهای شامل شده و غیره). یک افزونه اخیر
autobean.include
برای شامل کردن ایمن دفترهای کل خارجی ایجاد شد. در آینده، ممکن است شاهد پشتیبانی درجه یک برای تنظیمات چند فایلی باشیم – شاید مفهومی از یک "پروژه" Beancount با چندین فایل (این با ویژگیهایی مانند تنظیمbeancount.mainBeanFile
در افزونه VSCode اشاره شده است). این به کسانی که حسابداری چند نهادی را انجام میدهند یا میخواهند دفتر کل خود را ماژولار کنند، کمک خواهد کرد. - محاسبات بیدرنگ یا افزایشی: با رشد دفترهای کل، توانایی محاسبه مجدد سریع گزارشها اهمیت پیدا میکند. ایدهای از یک سرور Beancount وجود دارد که در حال اجرا باقی میماند و نتایج را با تغییر تراکنشها بهروزرسانی میکند. این میتواند به عنوان یک بهینهسازی در Fava یا یک دیمون که افزونههای ویرایشگر میتوانند از آن پرسوجو کنند، ظاهر شود. شاید یک نسخه آتی Fava از یک فرآیند Beancount در حال اجرا به طور مداوم برای پاسخگوتر کردن رابط کاربری برای دفترهای کل عظیم استفاده کند.
- حسابداری وجوه / ویژگیهای غیرانتفاعی: یک پیشنهاد بهبود در مورد حسابداری وجوه در Beancount وجود داشت. سازمانهای غیرانتفاعی نیازهای حسابداری (وجوه محدود شده در مقابل نامحدود) دارند که میتوانند با سلسله مراتب برچسب یا حساب Beancount مدلسازی شوند. بحث هنوز به ویژگیهای داخلی منجر نشده است، اما اگر سازمانهای غیرانتفاعی بیشتری Beancount را انتخاب کنند، این میتواند قابلیتهای جدیدی را به دنبال داشته باشد (شاید فقط بهترین شیوههای مستند شده یا افزونههایی برای ردیابی موجودی وجوه).
-
چشمانداز بلندمدت: مارتین بلایس اشاره کرد که آینده Beancount را در تبدیل هسته به یک موتور و انتقال قابلیتهای بیشتر به افزونهها