راهاندازیهای واقعی Beancount
مقدمه
Beancount یک سیستم حسابداری متنساده و همهکاره است و کاربران آن را برای تطبیق با طیف وسیعی از نیازهای واقعی شکل دادهاند. در این نمایشگاه جامعه کاربران، ما نمونههای ناشناسِ نحوه ساختاردهی و استفاده افراد مختلف از گردشهای کاری حسابداری Beancount خود را ارائه میدهیم – از فریلنسرها و صاحبان مشاغل کوچک تا علاقهمندان به امور مالی شخصی. این نمونهها شیوههای خلاقانهای مانند برچسبگذاری تراکنشها با فراداده، خودکارسازی بهروزرسانی دفتر کل با اسکریپتهای سفارشی، مدیریت چند ارزی، بودجهبندی و پیشبینی، و گسترش Beancount با افزونهها یا ادغامها (مانند رابط وب Fava)
For living overviews of the same tooling cluster, see Beancount v3: What's New?, Essential Beancount Native Plugins You Should Know, The Beancount Ecosystem, and Beancount's Technical Edge. را برجسته میکنند. هدف، الهام بخشیدن و اطلاعرسانی به حسابداران، توسعهدهندگان و کاربران آگاه مالی درباره امکانات سیستم انعطافپذیر Beancount است.

نمونه رابط: بسیاری از کاربران Beancount برای نمایش بصری امور مالی خود به Fava – یک داشبورد وب متنباز – یا معادل میزبانیشده آن در beancount.io تکیه میکنند. این ابزارها دفتر کل Beancount را به گزارشها و نمودارهای تعاملی تبدیل میکنند. برای مثال، این نمای صورت سود و زیان، درآمد و هزینهها را بر اساس دستهبندی در طول زمان تفکیک میکند و نمای کلی سریعی از منابع و مصارف پول ارائه میدهد. کاربران میتوانند این نما را بر اساس زمان، حساب یا برچسبها فیلتر کنند تا به پروژهها یا دورههای خاص نفوذ کنند. چنین تجسمهایی به قابلدسترستر شدن دادههای متنساده کمک میکنند و به کاربران امکان میدهند روندها و ناهنجاریها را در یک نگاه شناسایی کنند.
هر راهاندازی Beancount منحصر به فرد است، اما مضامین مشترکی ظاهر میشوند. در ادامه، به سه سناریو میپردازیم – یک فریلنسر، یک صاحب کسبوکار کوچک و یک کاربر حرفهای امور مالی شخصی – تا ببینیم چگونه حسابهای خود را سازماندهی میکنند و از ویژگیهای Beancount بهره میبرند. تمام جزئیات شخصی حذف یا کلی شدهاند و فقط بر تکنیکها و پیکربندیها تمرکز شده است.
فریلنسر: برچسبگذاری پروژه و پیگیری فاکتور
اولین نمونه ما یک مشاور فریلنسر است که از Beancount به عنوان ستون فقرات امور مالی کسبوکار خود استفاده میکند. دفتر کل این فریلنسر برای پیگیری درآمد و هزینهها به ازای هر پروژه و مدیریت فاکتورها برای چندین مشتری سازماندهی شده است. آنها حسابهای اختصاصی برای حسابهای دریافتنی (A/R) تحت داراییها برای هر مشتری ایجاد کردهاند که به تفکیک بدهیها کمک میکند. وقتی پروژهای را تکمیل میکنند و به مشتری فاکتور میدهند، تراکنشی ثبت میکنند که حساب دریافتنی مشتری را بدهکار و یک حساب درآمدی را بستانکار میکند. برای مثال، یک فاکتور جدید ممکن است به این صورت ثبت شود:
2025-08-01 * "Project X Completed" ^INV-0001
Assets:AccountsReceivable:ClientA 5,000 USD
Income:Consulting -5,000 USDدر اینجا نماد ^INV-0001 یک پیوند (یک ویژگی فراداده داخلی Beancount) است که برای برچسبگذاری این تراکنش با شماره فاکتور استفاده میشود. وقتی مشتری بخشی یا تمام آن فاکتور را پرداخت میکند، تراکنش پرداخت شامل همان پیوند ^INV-0001 است که این دو ورودی را به هم مرتبط میکند. این پیوند، تخصیص پرداختها به فاکتورهای خاص و مشاهده ماندههای معوق را آسان میکند. همانطور که یکی از اعضای جامعه توضیح داد، میتوانید از چنین برچسبها یا پیوندهایی برای علامتگذاری پرداختهای جزئی استفاده کنید – به عنوان مثال، پرداخت ۲۰ دلار در برابر فاکتور ۳۰ دلاری – هم در ورودی فاکتور و هم در ورودی پرداخت. با پرسوجو از دفتر کل برای آن پیوند فاکتور، فریلنسر میتواند فوراً ببیند چه مقدار از فاکتور پرداخت شده و چه مقدار باز مانده است.
علاوه بر پیوندها، فریلنسر به شدت از برچسبها برای دستهبندی استفاده میکند. برچسبها در Beancount برچسبهایی با پیشوند # هستند که میتوانند تراکنشها را برای فیلتر کردن بعدی علامتگذاری کنند. این کاربر هر هزینه قابل قبولی را که به مشتری قابل ارجاع است با کد پروژه، مانند #ProjectX، برچسبگذاری میکند و هزینههای قابل بازپرداخت را با #Reimbursable برچسب میزند. برای مثال، اگر برای یک پروژه مشتری بلیط هواپیما بخرد، ورودی هزینه ممکن است شامل #ProjectX #Reimbursable باشد. این روش امکان تولید گزارشهای هر پروژه یا مشتری را با فیلتر کردن بر اساس برچسبها فراهم میکند. پس از یک پروژه، فریلنسر میتواند پرسوجویی اجرا کند تا تمام هزینههای #Reimbursable آن پروژه را فهرست کند و مطمئن شود برای هر یک از مشتری فاکتور صادر شده است. یکی از کاربران Beancount اشاره کرد که برچسبگذاری هزینههای سفر کاری به شناسایی مواردی که بازپرداخت نشدهاند کمک کرد – در حالت ایدهآل، هزینههای یک سفر کاری وقتی تمام بازپرداختها از مشتری دریافت شود، به صفر میرسد. این نکته برجسته میکند که چگونه برچسبگذاری، همراه با قابلیتهای پرسوجوی Beancount، لایهای اضافی از نظارت را برای فریلنسرهایی که هزینههای قابل ارجاع را مدیریت میکنند فراهم میکند.
برای مدیریت وضعیت پرداختهای معوق، فریلنسر ما از یک قرارداد خاص برای دریافتنیهای در انتظار استفاده میکند. آنها برچسب #UNRESOLVED را به هر تراکنش فاکتوری که هنوز به طور کامل پرداخت نشده اعمال میکنند. Beancount (و Fava) این برچسب را اعمال نمیکند، اما این یک الگوی تثبیتشده در جامعه برای علامتگذاری تراکنشهای در انتظار تسویه است. برای مثال، تا زمانی که مشتری A مبلغ کامل ۵٬۰۰۰ دلار را پرداخت نکند، تراکنش فاکتور بالا شامل #UNRESOLVED خواهد بود. با فیلتر کردن بر روی آن برچسب، فریلنسر میتواند در هر زمان تمام فاکتورهای باز را فهرست کند. پس از دریافت و اعمال پرداخت (ورود تراکنش دریافتنی مربوطه)، آنها برچسب #UNRESOLVED را حذف یا نادیده میگیرند و حساب دریافتنی آن مشتری به صفر میرسد. این سیستم تضمین میکند که هیچ فاکتوری «از بین نرود». این اساساً یک گزارش سنی است که به صورت متنساده انجام میشود – اگر یک دریافتنی غیرصفر باقی بماند و به عنوان حلنشده برچسب خورده باشد، نیاز به توجه دارد.
از آنجا که فریلنسرها اغلب با روشهای پرداخت متعدد و گاهی ارزهای متعدد سر و کار دارند، راهاندازی Beancount به طور یکپارچه این را پشتیبانی میکند. در مثال ما، مشاور ممکن است به برخی مشتریان به دلار و برخی دیگر به یورو فاکتور بدهد. مدیریت چند ارزی در Beancount ساده است: هر حسابی میتواند چندین کالا را نگه دارد (ارزها به عنوان کالا در نظر گرفته میشوند). فریلنسر میتواند حسابهای فرعی جداگانه برای هر ارز نگه دارد (به عنوان مثال Assets:AccountsReceivable:ClientA:EUR در مقابل ...:USD)، یا به سادگی تراکنشها را به ارز مناسب تحت همان حساب ثبت کند. Beancount ماندهها را به ازای هر ارز به طور خودکار پیگیری میکند. یک کاربر تأکید کرد که چقدر خوب است که «Beancount میتواند مقادیر را در هر ارزی، چه USD و چه یک نماد سهام، در یک دفتر کل پیگیری کند.» فریلنسر ما با ثبت نرخهای ارز با دستورالعملهای price هر زمان که برای گزارشگیری نیاز به تبدیل ارز دارد، از این مزیت بهره میبرد. آنها میتوانند پس از وارد کردن نرخهای ارز دورهای یا قیمتهای بازار، گزارش درآمدی تبدیلشده به ارز اصلی خود تولید کنند.
در نهایت، این فریلنسر دفتر کل Beancount خود را با ابزارهای عملی برای سادهسازی گردش کار خود یکپارچه میکند. برای مثال، آنها نسخههای PDF هر فاکتور را با استفاده از فراداده سند به دفتر کل پیوست میکنند. یک ورودی پرداخت فاکتور معمولی ممکن است به این شکل باشد:
2025-08-30 * "ClientA" "Payment for INV-0001" ^INV-0001
Assets:Bank:Checking 5,000 USD
Assets:AccountsReceivable:ClientA -5,000 USD
document: "Invoices/ClientA/INV-0001.pdf"دستورالعمل document Beancount یا فراداده امکان مرتبطسازی فایلها با ورودیها را فراهم میکند و Fava یک پیوند برای این پیوستها نشان میدهد. این بدان معناست که فریلنسر (یا حسابدارش) میتواند مستقیماً از گزارش دفتر کل روی پیوند کلیک کند تا PDF فاکتور اصلی را مشاهده کند و دسترسی آسان به اسناد پشتیبان تضمین شود. فریلنسر همچنین از گزارشهای Fava برای نظارت بر کسبوکار خود استفاده میکند: با فیلتر کردن صورت سود و زیان یا ترازنامه بر اساس مشتری، میتواند سودآوری هر مشتری را ببیند و مطمئن شود همه پروژهها پرداخت شدهاند. به طور خلاصه، سیستم Beancount این فریلنسر استفاده گسترده از برچسبگذاری و پیوند دادن برای مدیریت حسابداری مبتنی بر پروژه را نشان میدهد. این سیستم، دفتر کل متنساده را به یک ابزار حسابداری فریلنسری قدرتمند تبدیل میکند، با دید واضح به هزینههای پروژه، درآمد چند ارزی و وضعیت فاکتورها.
روشهای کلیدی در راهاندازی فریلنسر: استفاده از برچسبها برای گروهبندی تراکنشها بر اساس پروژه یا هدف، پیوند دادن فاکتورها و پرداختها با شناسههای منحصر به فرد، علامتگذاری دریافتنیهای معوق با برچسب #UNRESOLVED، پیوست کردن اسناد فاکتور به ورودیهای دفتر کل برای مرجع، و بهرهگیری از پشتیبانی چند ارزی Beancount برای فاکتور کردن مشتریان بینالمللی بدون دردسر. همه اینها با ورودیهای متنساده به همراه چند ابزار کمکی به دست میآید و قدرت فراداده در Beancount را نشان میدهد.
کسبوکار کوچک: اتوماسیون و حسابداری چند ارزی
در ادامه، به یک صاحب کسبوکار کوچک – به طور خاص یک بنیانگذار استارتاپ – نگاه میکنیم که Beancount را برای اداره دفاتر شرکت به کار گرفته است. کسبوکارهای کوچک نیازهایی مشابه فریلنسرها دارند (فاکتورها، هزینهها، چند ارزی) اما اغلب در مقیاس بزرگتر و با تأکید بیشتر بر اتوماسیون، سازگاری و همکاری. در این مورد، بنیانگذار از نظر فنی ماهر بود و یک گردش کار بسیار خودکار Beancount برای به حداقل رساندن دفترداری دستی ساخت. پس از ارزیابی نرمافزارهای حسابداری سنتی مانند QuickBooks، آنها رویکرد متنساده Beancount را برای حفظ کنترل کامل بر دادهها انتخاب کردند. در طول چند سال، آنها به طور تکراری ابزارهای سفارشی را برای دستیابی به یک فرآیند دفترداری ۹۵٪ خودکار توسعه دادند.
واردات و تطبیق خودکار: یکی از اولین چالشها وارد کردن تراکنشها از منابع مختلف (حسابهای بانکی، کارتهای اعتباری، پردازندههای پرداخت) به دفتر کل بود. به جای تایپ هر تراکنش، این کاربر اسکریپتهای واردات را برای دریافت و ترجمه دادهها به فرمت Beancount راهاندازی کرد. آنها importers سفارشی Python برای فرمت CSV یا API هر مؤسسه مالی نوشتند، به طوری که با یک فرمان میتوانند تراکنشهای جدید را دریافت کرده و به دفتر کل اضافه کنند. برای مثال، با استفاده از importers beangulp، بنیانگذار میتواند اسکریپتی را اجرا کند که پوشه دانلودها را برای صورتحسابهای جدید اسکن کرده و آنها را به عنوان ورودیهای Beancount خروجی میدهد. کاربر دیگری، Rhyd Lewis، راهاندازی مشابهی را توصیف کرد که در آن اسکریپتهای importer جداگانه برای هر بانک دارد و میتواند آنها را با یک فرمان ساده (با استفاده از Justfile) برای بهروزرسانی دفتر کل خود فراخوانی کند. صاحب کسبوکار کوچک ما نیز همین کار را انجام میدهد – تمام تراکنشهای بانکی، کشیدن کارت اعتباری و حتی تراکنشهای PayPal یا Stripe به طور خودکار دریافت و به حسابها اضافه میشوند و با حسابهای مناسب دستهبندی میشوند.
برای اطمینان از یکپارچگی دادهها حتی زمانی که این ورودیها به طور خودکار اضافه میشوند، آنها دفتر کل را قبل از هر commit اعتبارسنجی میکنند و از افزونههای Beancount استفاده میکنند. برای مثال، افزونه beancount.plugins.noduplicates برای جلوگیری از وارد کردن تصادفی همان تراکنش دو بار فعال است و beancount.plugins.nounused هر حسابی را که ورودی ندارد علامتگذاری میکند (برای تمیز کردن حسابهای قدیمی مفید است). ما bea check را برای آن مرحله اعتبارسنجی توصیه میکنیم. بنیانگذار همچنین از یک فرمتکننده جامعه (مانند beancount-black) برای ثابت نگه داشتن سبک فایل دفتر کل استفاده میکند. این مهم است زیرا با ویرایشهای خودکار زیاد، داشتن یک سبک یکنواخت، بررسی diff و ممیزی را آسانتر میکند. در واقع، بنیانگذار دفتر کل را در یک مخزن Git نگه میدارد و بهروزرسانیهای دفتر کل را مانند تغییرات کد در نظر میگیرد. هر دسته جدید از تراکنشهای وارد شده به یک commit گیت تبدیل میشود و آنها میتوانند diffها را بررسی کنند تا ببینند چه چیزی تغییر کرده است. در یک اسکرینشات، آنها تاریخچه گیت را نشان میدهند که در آن یک تراکنش کارت اعتباری برای «Costco» از وضعیت در انتظار به تسویهشده در دفتر کل تغییر میکند، همه بدون دخالت دستی. کنترل نسخه یک مسیر حسابرسی فراهم میکند: آنها میتوانند دقیقاً ببینند چه زمانی یک تراکنش اضافه یا تغییر داده شده و حتی اگر چیزی اشتباه وارد شده باشد، تغییرات را بازگردانند. این یک مثال عالی از آوردن بهترین شیوههای توسعه نرمافزار (مانند کنترل منبع) به سوابق حسابداری است.
تراکنشهای چند ارزی و بینالمللی: کسبوکارهای کوچک اغلب با ارزهای متعدد معامله میکنند – برای مثال، یک استارتاپ ممکن است هزینههای دلاری داشته باشد اما همچنین پرداختهایی به یورو دریافت کند یا حساب بانکی پوندی داشته باشد. شرکت نمایشی ما از ویژگیهای چند ارزی Beancount برای تجمیع همه اینها در یک دفتر کل استفاده میکند. آنها حسابهای جداگانهای برای هر ارز باز کردند (به عنوان مثال Assets:Bank:Checking:USD و Assets:Bank:Checking:EUR)، که یک رویکرد رایج است. با این حال، حتی اگر ارزهای مختلف یک حساب مشترک داشته باشند، Beancount مانده هر ارز را جداگانه پیگیری میکند و نیاز دارد تراکنشها به ازای هر ارز متوازن باشند. بنیانگذار مرتباً گزارشهای ارزشگذاری را برای دیدن مانده کل شرکت تبدیلشده به ارز پایه اجرا میکند. از آنجا که Beancount از جستجوی قیمت پشتیبانی میکند، او فیدهای قیمت روزانه برای نرخهای ارز (و قیمت سهام برای هر سرمایهگذاری) را با استفاده از یک اسکریپت برنامهریزیشده دریافت سهام راهاندازی کرد. نتیجه این است که در هر زمان میتواند ترازنامهای به عنوان مثال به دلار تولید کند که شامل حساب یورو با آخرین نرخ تبدیل شده باشد. اعضای جامعه اشاره میکنند که مدیریت چند ارز در حسابداری دفتر کل ساده است – فقط تراکنشها را به ارز دادهشده اضافه میکنید و نرخهای ارز را در صورت نیاز ثبت میکنید. برای مثال، یک کاربر نمونهای از تبدیل USD به EUR به CAD از طریق حسابهای واسطه به عنوان راهی برای مدیریت تبدیل ارز در Beancount به اشتراک گذاشت. در مورد ما، کسبوکار کوچک لزوماً ارزها را در تراکنشها تبدیل نمیکند (آنها را به ارز اصلی نگه میدارد) اما از گزارشها برای تجمیع استفاده میکند. این انعطافپذیری با گسترش جهانی استارتاپ حیاتی بوده است.
اسکریپتها و افزونههای سفارشی: همه چیزهایی که بنیانگذار نیاز داشت به صورت آماده موجود نبود، بنابراین او Beancount را با افزونههای سفارشی گسترش داد. در طول زمان، آنها در نهایت یک کتابخانه تجزیهگر، یک ابزار قالببندی و یک importer تراکنش مبتنی بر قانون نوشتند و بسیاری از اینها را به عنوان بستههای متنباز منتشر کردند. برای مثال، آنها یک موتور واردات مبتنی بر قانون ساختند که از یک پیکربندی YAML برای دستهبندی خودکار تراکنشها استفاده میکند. یک بخش از این پیکربندی نشان میدهد که چگونه پرداختکنندهها یا توضیحات خاص (مانند «Comcast» یا «PG&E») به حسابهای هزینه و شرح خاصی نگاشت میشوند، به طوری که وقتی آنها در فید بانکی ظاهر میشوند، ورودی صحیح Beancount بدون ویرایش دستی تولید شود. این اساساً یک اتوماسیون سفارشی برای اعمال قوانین حسابداری (برای قبوض آب و برق، اشتراکها و غیره) در لحظه است. افزونه دیگری تضمین میکند که دفتر کل همیشه متوازن و قالببندیشده باقی بماند. همه این ابزارها به عنوان بخشی از گردش کار بنیانگذار هر زمان که داده جدید دریافت میشود اجرا میشوند. نتیجه دفتر کل است که با حداقل دخالت «خود را بهروز میکند»، چیزی که بنیانگذار میگوید به عنوان یک توسعهدهنده وسواس اتوماسیون «لذت خالص» برایش به ارمغان میآورد.
امنیت و دسترسپذیری نیز دغدغه بودند. بنیانگذار میخواست تیم مالی او (و حتی همسرش، به عنوان ناظر) بتوانند به راحتی کتابها را مشاهده کنند. برای این کار، او یک استقرار خصوصی Fava در ابر راهاندازی کرد. هر بار که یک commit جدید دفتر کل را به مخزن Git خصوصی فشار میدهد، یک خط لوله CI (با استفاده از GitHub Actions و AWS Elastic Beanstalk) یک نمونه بهروزرسانیشده Fava را مستقر میکند. رابط وب پشت یک رمز عبور است (با استفاده از یک پراکسی Nginx با اعتبارسنجی پایه)، بنابراین فقط افراد مجاز میتوانند آن را ببینند. به این ترتیب، آخرین صورتهای مالی همیشه از طریق یک داشبورد مرورگر در دسترس هستند، بدون نیاز به نصب چیزی به صورت محلی. نمودار معماری زیر این راهاندازی را نشان میدهد: فایل Beancount و پیکربندی لازم به همراه Fava در یک تصویر Docker بستهبندی میشوند و در AWS ارائه میشوند و Cloudflare در جلو برای امنیت است.
flowchart LR
A[Edit ledger locally] --> B[Push to private Git repo]
B --> C[CI builds Docker image<br/>Fava + Nginx basic auth]
C --> D[Deploy to AWS<br/>Elastic Beanstalk]
D --> E[Cloudflare proxy]
E --> F[Owner & team view<br/>reports in browser]خودکارسازی Beancount در ابر: کاربر فایل دفتر کل را به صورت محلی بهروزرسانی میکند و به Git فشار میدهد؛ یک کانتینر Docker (شامل Fava و Nginx برای احراز هویت) ساخته شده و به سرور AWS Beanstalk مستقر میشود و Cloudflare به عنوان یک پروکسی عمل میکند. نتیجه یک پورتال وب امن است که در آن دادههای مالی کسبوکار کوچک از هر مکان (توسط مالک یا تیم) در زمان واقعی قابل دسترسی است. این راهاندازی پیشرفته نشان میدهد که چگونه یک کسبوکار کوچک میتواند Beancount را با ابزارهای ابری مدرن ادغام کند تا بدون از دست دادن مالکیت داده، راحتی به دست آورد.
در استفاده روزمره، تمرکز صاحب کسبوکار کوچک بر مدیریت استثناها است تا ورود داده. هر ماه، او به طور خلاصه تراکنشهای وارد شده به صورت خودکار را مرور میکند (با استفاده از diffهای Git یا نمای مجله Fava) تا هر ورودی دستهبندینشده یا نادرست را شناسایی کند. او همچنین از تأییدهای مانده Beancount برای تطبیق حسابها استفاده میکند. برای مثال، پس از وارد کردن تمام تراکنشهای ژوئن، ممکن است یک بررسی مانده اضافه کند تا تأیید کند که مانده پایانی حساب بانکی با صورتحساب مطابقت دارد؛ اگر نه، Beancount خطا میدهد و نشان میدهد چیزی کم است یا اشتباه وارد شده است. این امر صحت کتابها را تضمین میکند.
روشهای کلیدی در راهاندازی کسبوکار کوچک: اتوماسیون سنگین از طریق importers و اسکریپتهای سفارشی (ساخت دفتر کل «۹۵٪ خودکار»)، استفاده از کنترل نسخه برای مسیرهای حسابرسی و همکاری، حسابداری چند ارزی با فیدهای قیمت برای ارزشگذاری، و استقرار Fava برای دسترسی آسان و قابل اشتراکگذاری به گزارشهای مالی. سناریوی کسبوکار کوچک نشان میدهد که با تلاش مهندسی میتوان Beancount را تا کجا پیش برد – تبدیل حسابداری به یک خط لوله عمدتاً خودکار و در عین حال حفظ شفافیت و انعطافپذیری. حتی اگر یک برنامهنویس نباشید، بسیاری از این مزایا را میتوان با استفاده از افزونههای جامعه (برای قالببندی، تشخیص تکراری و غیره) و اتخاذ گردش کار متنساده که بررسیها و پشتیبانگیریهای مکرر را تشویق میکند، به دست آورد.
علاقهمند به امور مالی شخصی: بودجهبندی و تحلیل سفارشی
نمایش پایانی ما یک علاقهمند به امور مالی شخصی است – فردی که از Beancount برای مدیریت امور مالی خانوار و سرمایهگذاریها با سطح بالایی از جزئیات استفاده میکند. این کاربر امور مالی شخصی خود را با دقت یک حسابدار و کنجکاوی یک تحلیلگر داده مدیریت میکند. نتیجه دفتر کل Beancount است که نه تنها هر ریال را پیگیری میکند، بلکه به عنوان پایهای برای بودجهبندی، پیشبینی و آزمایشهای تحلیلی عمل میکند.
سازماندهی دفتر کل شخصی: بسیاری از افراد با یک فایل Beancount واحد برای تمام حسابهای خود شروع میکنند و این علاقهمند نیز تفاوتی ندارد. آنها یک دفتر کل اصلی (مثلاً main.beancount) نگهداری میکنند که شامل تمام حسابها (حسابهای بانکی، کارتهای اعتباری، وامها، پرتفوی سرمایهگذاری و غیره) و تراکنشها است. در طول زمان، آنها با تقسیم بخشهایی ساختاری را معرفی کردند – برای مثال، فایلی برای افتتاح/بستن حسابها و فایلهای جداگانه برای تراکنشهای سالانه دارند که در فایل اصلی گنجانده میشوند. این سازماندهی مدولار پیمایش سالها داده را آسانتر میکند (میتوان سالهای قدیمی را در فایلهای جداگانه بایگانی کرد) و در عین حال به طور منطقی یک دفتر کل واحد است. یک کاربر شخصی دیگر در انجمن جامعه چیدمان مشابهی را توصیف کرد: یک فایل اصلی که دیگران را بر اساس دسته شامل میشود (مثلاً Income.beancount، Expenses.beancount، Investments.beancount). علاقهمند ما فعلاً آن را ساده نگه میدارد: یک فایل که در دستگاهها همگامسازی میشود.
در مورد همگامسازی، چون امور مالی شخصی است، این کاربر میخواهد تراکنشها را در هر کجا که هست ثبت کند. آنها از یک برنامه موبایل به نام Beancount Mobile برای افزودن سریع ورودیها در حال حرکت استفاده میکنند (به عنوان مثال، ثبت یک هزینه نقدی درست در فروشگاه). فایل دفتر کل از طریق یک همگامسازی ابری (در این مورد، Syncthing) به اشتراک گذاشته میشود تا تلفن، لپتاپ و یک VPS (سرور) همه آخرین نسخه را داشته باشند. در رایانه، آنها ترجیح میدهند از Emacs با beancount-mode برای ویرایش راحت با برجستهسازی نحو استفاده کنند. این راهاندازی تضمین میکند که چه پشت میز باشند و چه بیرون، بتوانند فوراً تراکنشها را ثبت کنند و از فراموش کردن چیزی جلوگیری کنند. این یک مثال عالی از تطبیق ابزارهای فنی برای راحتی شخصی است – در واقع ساخت جایگزین خودمیزبان برای برنامههای بودجهبندی تجاری.
برچسبگذاری و فراداده برای پیگیری دانهای: این کاربر از برچسبها برای افزودن یک بعد دوم به دادههای خود فراتر از نمودار حسابها بهره میبرد. برای دستههای بودجهبندی منظم، حسابها کافی هستند (آنها حسابهایی مانند Expenses:Groceries، Expenses:Rent و غیره دارند)، اما برای مضامین متقاطع مانند رویدادها یا اهداف، از برچسبها استفاده میکنند. برای مثال، تمام تراکنشهای مربوط به پروژه بازسازی خانه خود را با #HomeReno برچسبگذاری میکنند، چه خرید چوب از فروشگاه سختافزار (هزینه) باشد چه دریافت تخفیف از تولیدکننده (درآمد). به این ترتیب، میتوانند به راحتی گزارشی از هزینه کل پروژه تولید کنند بدون اینکه آن هزینهها تحت حسابهای مختلف جدا شوند. یک کاربر Reddit این رویکرد را با برچسبگذاری هزینههایی مانند #garage-improvement یا #lighting-improvement برای پروژههای خانه نشان داد و فیلتر و جمعبندی آنها را از طریق پرسوجوهای Beancount بیاهمیت کرد. علاقهمند ما نیز همین کار را برای تعطیلات (#ItalyTrip2025)، خریدهای بزرگ و رویدادهای یکباره انجام میدهد.
فراداده (جفتهای کلید-مقدار روی تراکنشها) نیز برای برخی اهداف خاص استفاده میشود. برای مثال، آنها یک فراداده location: ... برای هزینههای بزرگ اضافه میکنند تا مکان هزینه را پیگیری کنند، یا یک note: ... برای زمینه اضافی فراتر از پرداختکننده و شرح. در چند مورد، آنها حتی فیلدهای فراداده سفارشی برای کمک به پیشبینی ایجاد کردند. یک مثال اضافه کردن budget: X و frequency: monthly به برخی هزینههای دورهای است – ایدهای الهامگرفته از بحثی در لیست پستی Beancount که در آن کاربری پیشبینیهای بودجه را در فراداده برای هر هزینه ذخیره میکرد. آن فیلدهای فراداده بر هسته Beancount تأثیر نمیگذارند، اما علاقهمند یک اسکریپت کوچک Python نوشت که آنها را میخواند و هزینه واقعی را با بودجه پیشبینیشده مقایسه میکند. این جایگزینی برای استفاده از بودجههای داخلی Fava (که در زیر توضیح داده شده) است و نشان میدهد که چگونه فراداده را میتوان به میل کاربر خم کرد. همانطور که خالق Beancount اشاره کرد، فراداده «فقط برای شماست [برای استفاده در اسکریپتهای سفارشی] – Beancount آن را تجزیه میکند اما خودش آن را نادیده میگیرد». به طور خلاصه، این کاربر از گسترش دفتر کل با اطلاعات اضافی برای کمک به تحلیل شخصی خود هراسی ندارد.
بودجهبندی با Beancount: یکی از اهداف اصلی این کاربر پایبندی به بودجه ماهانه است. آنها قبلاً از یک برنامه بودجهبندی (YNAB) استفاده میکردند و میخواستند برخی از مفاهیم بودجهبندی پاکتی آن را بازسازی کنند. راههای مختلفی برای بودجهبندی در Beancount وجود دارد، اما سادهترین آن استفاده از دستورالعملهای بودجه Fava است. علاقهمند ما ورودیهای budget را در دفتر کل به این صورت اضافه میکند:
2025-01-01 custom "budget" Expenses:Groceries "monthly" 500 USD
2025-01-01 custom "budget" Expenses:DiningOut "monthly" 200 USD
2025-01-01 custom "budget" Expenses:Travel "yearly" 3000 USDهر خط یک بودجه برای یک حساب (دسته) در یک دوره تعیین میکند. سپس Fava نمودارهای بودجه در مقابل واقعی را در رابط وب نمایش میدهد و به کاربر اجازه میدهد ببیند، برای مثال، این ماه ۴۸۰ دلار از ۵۰۰ دلار بودجه را برای خواربار هزینه کرده و شاید ۲۲۰ دلار برای غذاخوری بیرون (بیش از بودجه). علاقهمند به طور منظم گزارشهای صورت سود و زیان و هزینهها Fava را بررسی میکند که هم مجموع ماهانه و هم اهداف بودجه را نشان میدهند. Fava به راحتی بودجههای روزانه/هفتگی را به بازههای زمانی مناسب تبدیل میکند. با استفاده از رابط کاربری Fava برای این کار، کاربر نیازی به یک صفحهگسترده جداگانه برای بودجهبندی ندارد؛ همه چیز یکپارچه است. (آنها همچنین یک سیستم «پاکتی» خودکارتر را با انتقال وجوه به حسابهای ساختگی در ابتدای هر ماه، همانطور که در انجمنها پیشنهاد شده، آزمایش کردند، اما دستورالعملهای بودجه سفارشی را سادهتر برای نگهداری یافتند.)
برای پیشبینی، فراتر از بودجهها، آنها مراقب قبوض آینده هستند. برخی از اعضای جامعه افزونههایی برای تولید تراکنشهای آینده برای اشتراکها یا برنامههای بازپرداخت وام ساختهاند، اما این کاربر رویکرد سادهتری را انتخاب کرد: آنها بخش جداگانهای از دفتر کل با تراکنشهای تاریخدار آینده برای موارد شناختهشده (مانند اجاره ماه آینده یا پرداخت سالانه بیمه آینده) نگهداری میکنند. آنها در دفتر کل باقی میمانند اما بر ماندههای امروز تأثیر نمیگذارند و وقتی تاریخ فرا رسید و تراکنش جاری شد، به عنوان یادآوری عمل میکند (و مبلغ را در صورت نیاز برای مطابقت با هزینه واقعی تنظیم میکنند). این یک راه حل موقتی است، اما برای پیشبینی جریان نقدی بدون ابزار پیچیده کار میکند.
پیگیری سرمایهگذاری و حسابداری چند کالایی: به عنوان یک علاقهمند مالی، این کاربر همچنین از Beancount برای تجمیع حسابهای سرمایهگذاری – سهام، صندوقهای سرمایهگذاری مشترک و ارزهای دیجیتال – در کنار حسابهای نقدی استفاده میکند. آنها حسابهای کارگزاری دارند که داراییهایشان (به عنوان مثال سهام AAPL، GOOG و غیره) به عنوان کالا در Beancount ثبت میشود. برای مثال، خرید ۱۰ سهم اپل ورودی است که کارگزاری نقدی را بستانکار و یک حساب دارایی را با 10 AAPL به عنوان مقدار کالا بدهکار میکند. توانایی Beancount در مدیریت هر کالایی در اینجا بسیار مفید است؛ میتوان آزادانه ارزها و سهام را مخلوط کرد. «Beancount میتواند مقادیر را در هر ارزی، چه USD و چه یک نماد سهام پیگیری کند»، همانطور که یک کاربر اشاره کرد، که این یک پیشرفت بزرگ نسبت به برنامههای مالی شخصی بود که اغلب موقعیتهای سهام را به خوبی پشتیبانی نمیکنند. علاقهمند ما از یک کار cron شبانه برای دریافت آخرین قیمتهای بازار برای تمام اوراق بهادار و ارزهای خارجی خود استفاده میکند. هر شب ساعت ۴ صبح، یک اسکریپت قیمتها را (از Yahoo Finance یا منبع دیگری) دریافت کرده و رکوردهای قیمت را برای آن روز به دفتر کل اضافه میکند. به این ترتیب، دفعه بعد که Fava را باز میکنند یا گزارشی اجرا میکنند، میتوانند ارزش پرتفوی بهروز و حتی عملکرد سرمایهگذاری در طول زمان را ببینند. کل دارایی خالص، در حسابهای بانکی، صندوقهای بازنشستگی و کیف پولهای ارز دیجیتال، در یک نمای واحد در دسترس است. این یک رویا برای یک سرمایهگذار مبتنی بر داده است: بدون نیاز به ورود به چندین پلتفرم برای دیدن تصویر کامل. آنها اساساً یک داشبورد مالی شخصی با نیروی Beancount ساختهاند.
تحلیل و یکپارچهسازی: چیزی که این کاربر حرفهای امور مالی شخصی را واقعاً متمایز میکند نحوه تحلیل دادهها پس از ورود به Beancount است. با تمام تراکنشها در یک پایگاه داده SQLite (Beancount میتواند دادهها را از طریق زبان پرسوجوی داخلی خود که شبیه SQL است پرسوجو کند)، کاربر میتواند تحلیل سفارشی انجام دهد. آنها اسکریپتهای Python نوشتند تا به سوالاتی مانند «میانگین متحرک ۳ ماهه هزینه خواربار من چقدر است؟» یا «هزینه امسال من برای آب و برق در مقایسه با سال گذشته چگونه است؟» پاسخ دهند. یک اسکریپت دفتر کل را برای برچسبهای خاص پرسوجو میکند و نتایج را به یک dataframe پاندا خروجی میدهد. از آنجا که دفتر کل متنساده است، آنها همچنین از Jupyter notebooks برای آزمایش تجسمهای مختلف (فراتر از آنچه Fava ارائه میدهد) استفاده کردهاند. برای مثال، نمودار میلهای سفارشی از نرخ پسانداز ماهانه با استفاده از Matplotlib با تجمیع دادههای Beancount در Python تولید کردند. این نوع تحلیل موردی فقط به این دلیل ممکن است که Beancount دادهها را قابل دسترس و ماشینخوان نگه میدارد. همانطور که یک کاربر گفت، استخراج دادهها بیاهمیت است – «من یک اسکریپت Python دارم که دادهها را با استفاده از زبان پرسوجو از Beancount بیرون میکشد، و سپس از یک dataframe پاندا برای آمادهسازی دادهها برای گزارش استفاده میکنم». علاقهمند ما مخزنی از اسکریپتهای کوچک مانند این دارد که برای بررسی سالانه مالی خود اجرا میکند.
البته، همه چیز به کدنویسی نیاز ندارد – در بسیاری از مواقع، آنها به نمودارهای داخلی Fava تکیه میکنند. Fava یک نمودار خطی دارایی خالص، روند درآمد در مقابل هزینه و حتی نمودار درختی هزینهها (همانطور که قبلاً نشان داده شد) ارائه میدهد که همه فقط یک کلیک فاصله دارند. کاربر قدردانی میکند که کل تاریخچه امور مالی او از سال ۲۰۱۸ قابل پرسوجو و حسابرسی است. برای مثال، اگر تعجب کند «در ۵ سال گذشته چقدر برای تعمیرات ماشین خرج کردهام»، میتواند یک پرسوجوی سریع بنویسد یا در Fava فیلتر کند تا پاسخ را بگیرد، به جای جستجو در رسیدها. این توانمندی دقیقاً چیزی است که آنها را به Beancount جذب کرد: مالکیت کامل داده و انعطافپذیری بینهایت در تحلیل. به عنوان یک امتیاز، دفتر کل متنساده ضد آینده است – میتوان آن را نسخهبندی، انتقال یا در صورت نیاز توسط ابزارهای دیگر تجزیه کرد. برخلاف یک برنامه متنبسته، هیچ خطری برای از دست دادن دسترسی به تاریخچه مالی وجود ندارد.
روشهای کلیدی در راهاندازی شخصی: استفاده از ابزارهای موبایل و دسکتاپ برای ورود داده آسان، استفاده از برچسبها و فراداده سفارشی برای پیگیری رویدادهای زندگی و گروهبندیهای بین دستهای، اجرای بودجهها از طریق دستورالعملهای budget Fava برای اهداف هزینهای مداوم، پیگیری سرمایهگذاریها و ارزهای متعدد در همان دفتر کل (با بهروزرسانی خودکار قیمت)، و انجام تحلیل سفارشی با پرسوجو مستقیم از دادههای دفتر کل. این مورد نشان میدهد که با کمی راهاندازی، حتی علاقهمندان به امور مالی شخصی میتوانند به سطحی از بینش و کنترل دست یابند که معمولاً برای مشاغل محفوظ است – همه اینها در حالی که برای یک کاربر فناوریمحور سرگرمکننده و جذاب باقی میماند.
نتیجهگیری
در این نمونههای جامعه، یک مضمون واضح این است که انعطافپذیری Beancount یک سیستم حسابداری بسیار شخصیسازیشده را ممکن میسازد. کاربران حرفهای جامعه از فایلهای متنی ساده برای ساختن راهحلهایی استفاده کردهاند که از نظر قابلیت با نرمافزارهای تجاری رقابت میکند، با این حال متناسب با گردشهای کاری خاص آنها ساخته شدهاند. فریلنسرها ورودیها را برچسبگذاری و پیوند میدهند تا پروژهها و فاکتورهای مشتری را به راحتی مدیریت کنند. صاحبان کسبوکارهای کوچک کارهای دفترداری خستهکننده را اسکریپتنویسی میکنند و Beancount را با زیرساختهای مدرن برای امور مالی همیشه بهروز ادغام میکنند. علاقهمندان به امور مالی شخصی از دفتر کل به عنوان یک منبع واحد حقیقت برای بودجهبندی، سرمایهگذاری و تصمیمگیری استفاده میکنند و آن را با برچسبها و ابزارها برای پاسخ به تقریباً هر سوالی درباره پول خود تقویت میکنند. همه اینها در حالی به دست میآید که مزایای اصلی حسابداری متنساده حفظ میشود: شفافیت، قابلیت حسابرسی و کنترل بر دادههای خود.
جامعه Beancount همچنین یک اکوسیستم غنی از افزونهها و ادغامها تولید کرده است. از حالتهای ویرایشگر و برنامههای موبایل برای ورودی، تا رابط وب Fava برای تجسم، تا تعداد بیشماری importer و ابزار در GitHub، منابعی برای تقریباً هر نیازی وجود دارد. کاربران مرتباً راهاندازی دفتر کل خود را در انجمنها و وبلاگها به اشتراک میگذارند تا دیگران بتوانند یاد بگیرند و بهترین شیوهها را اتخاذ کنند. مهمتر از همه، اطلاعات حساس را میتوان خصوصی نگه داشت (یا به راحتی برای اشتراکگذاری پاک کرد) به دلیل فرمت قابل خواندن برای انسان – همانطور که در این نمایشگاه انجام دادیم. نمونههای بالا نشان میدهد که چه یک توسعهدهنده فریلنسر باشید، چه بنیانگذار استارتاپ، چه یک فنفن مالی شخصی، میتوانید Beancount را به میل خود خم کنید. با استفاده خلاقانه از برچسبگذاری و فراداده، خودکارسازی در صورت امکان، مدیریت تراکنشهای چند ارزی، برنامهریزی با بودجهها و گسترش از طریق افزونهها، جامعه همچنان مرزهای ممکن در متنساده را به جلو میبرد. نتیجه دفترهای کل حسابداری در سطح حرفهای است که نگهداری آنها نیز لذتبخش است و به کاربران هم شفافیت و هم کنترل بر امور مالی خود میدهد.