راهاندازیهای واقعی Beancount
مقدمه
Beancount یک سیستم حسابداری متن ساده و همهکاره است و کاربرانش آن را برای طیف گستردهای از نیازهای واقعی شکل دادهاند. در این نمایش جامعه، نمونههای ناشناسشدهای را ارائه میدهیم از اینکه افراد مختلف چگونه گردشکارهای حسابداری Beancount خود را ساختاردهی و استفاده میکنند – از فریلنسرها و صاحبان کسبوکارهای کوچک تا علاقهمندان به امور مالی شخصی. این نمونهها شیوههای خلاقانهای مانند برچسبگذاری تراکنشها با فراداده، خودکارسازی بهروزرسانی دفتر با اسکریپتهای سفارشی، مدیریت چند ارز، بودجهبندی و پیشبینی، و گسترش Beancount با افزونهها یا یکپارچهسازیها (مانند رابط وب Fava) را برجسته میکنند. هدف این است که حسابداران، توسعهدهندگان و کاربران آشنا به امور مالی را دربارهٔ آنچه با سیستم انعطافپذیر Beancount ممکن است، الهامبخشیم و آگاه کنیم.
برای مرورهای زندهٔ همین خوشهٔ ابزاری، ببینید Beancount v3: چه چیز جدیدی دارد؟، افزونههای بومی ضروری Beancount که باید بشناسید، اکوسیستم Beancount، و مزیت فنی Beancount.

نمونه رابط: بسیاری از کاربران Beancount به Fava – یک داشبورد وب متنباز – یا معادل میزبانیشدهٔ آن در beancount.io برای تجسم امور مالی خود تکیه میکنند. این ابزارها یک دفتر Beancount را به گزارشها و نمودارهای تعاملی تبدیل میکنند. برای مثال، این نمای صورت سود و زیان درآمد و هزینهها را به تفکیک دسته در طول زمان تقسیم میکند و نمای کلی سریعی از اینکه پول از کجا میآید و به کجا میرود ارائه میدهد. کاربران میتوانند این نما را بر اساس زمان، حساب یا برچسب فیلتر کنند تا به پروژهها یا دورههای خاص عمیقتر نگاه کنند. چنین تجسمهایی به دسترسیپذیرتر کردن دادههای متن ساده کمک میکنند و به کاربران امکان میدهند روندها و ناهنجاریها را در یک نگاه تشخیص دهند.
هر راهاندازی Beancount منحصربهفرد است، اما مضامین مشترکی پدیدار میشوند. در ادامه، به سه سناریو میپردازیم – یک فریلنسر، یک صاحب کسبوکار کوچک، و یک کاربر قدرتمند امور مالی شخصی – تا ببینیم چگونه حسابهای خود را سازماندهی میکنند و از ویژگیهای Beancount بهره میبرند. تمام جزئیات شخصی حذف یا تعمیم داده شدهاند و تنها بر تکنیکها و پیکربندیها تمرکز شده است.
فریلنسر: برچسبگذاری پروژه و پیگیری فاکتور
اولین نمونهٔ ما یک مشاور فریلنسر است که از Beancount بهعنوان ستون فقرات امور مالی کسبوکارش استفاده میکند. دفتر این فریلنسر بهگونهای سازماندهی شده که درآمد و هزینهها را به تفکیک پروژه پیگیری کند و فاکتورها را برای چندین مشتری مدیریت کند. او حسابهای اختصاصی برای حسابهای دریافتنی (A/R) زیر داراییها برای هر مشتری ایجاد کرده است که به تفکیک اینکه چه کسی چقدر بدهکار است کمک میکند. وقتی پروژهای را کامل میکند و برای مشتری فاکتور صادر میکند، تراکنشی ثبت میکند که حساب 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 خواهد بود. با فیلتر بر اساس آن برچسب، فریلنسر میتواند در هر زمان همهٔ فاکتورهای باز را فهرست کند. زمانی که پرداخت دریافت و اعمال شد (تراکنش A/R مربوطه وارد شد)، برچسب #UNRESOLVED را حذف یا نادیده میگیرند و حساب دریافتنی آن مشتری به صفر متعادل میشود. این سیستم تضمین میکند هیچ فاکتوری «از شکافها نیفتد». این اساساً یک گزارش سنبندی است که در متن ساده انجام میشود – اگر یک A/R غیرصفر و برچسبخورده بهعنوان حلنشده باقی بماند، نیاز به توجه دارد.
از آنجا که فریلنسرها اغلب با روشهای پرداخت متعدد و گاهی چندین ارز سر و کار دارند، راهاندازی Beancount این را بهطور یکپارچه پوشش میدهد. در مثال ما، مشاور ممکن است برخی مشتریان را به دلار و برخی دیگر را به یورو صورتحساب کند. مدیریت چند ارز در Beancount ساده است: هر حساب میتواند چندین کالا (ارزها بهعنوان کالا در نظر گرفته میشوند) نگه دارد. فریلنسر میتواند زیرحسابهای جداگانه برای هر ارز نگه دارد (مثلاً Assets:AccountsReceivable:ClientA:EUR در مقابل ...:USD)، یا بهسادگی تراکنشها را در ارز مناسب تحت همان حساب ثبت کند. Beancount بهطور خودکار ماندهها را به تفکیک ارز پیگیری میکند. یکی از کاربران تأکید کرد که چقدر خوب است که «Beancount میتواند مقادیر را در هر ارزی، چه دلار و چه نماد سهام، پیگیری کند»، همه در یک دفتر. فریلنسر ما از این مزیت بهره میبرد و هر زمان که برای گزارشگیری نیاز به تبدیل ارز دارد، نرخهای ارز را با دستورهای 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 ترجمه کنند. او برای هر مؤسسهٔ مالی، واردکنندههای پایتون سفارشی برای قالب CSV یا API آن نوشت، بهطوریکه با یک فرمان بتواند تراکنشهای جدید را واکشی و به دفتر اضافه کند. برای مثال، با استفاده از واردکنندههای beangulp، بنیانگذار میتواند اسکریپتی اجرا کند که پوشهٔ دانلودها را برای صورتحسابهای جدید بررسی و آنها را بهعنوان ورودیهای Beancount خروجی دهد. کاربر دیگری، Rhyd Lewis، راهاندازی مشابهی را توصیف کرد که در آن اسکریپتهای واردکنندهٔ جداگانه برای هر بانک دارد و میتواند آنها را با یک فرمان ساده (با استفاده از یک Justfile) برای بهروزرسانی دفترش فراخوانی کند. صاحب کسبوکار کوچک ما هم همین کار را میکند – همهٔ تراکنشهای بانکی، کشیدن کارت اعتباری و حتی تراکنشهای PayPal یا Stripe بهطور خودکار واکشی و با حسابهای مناسب دستهبندی به دفاتر اضافه میشوند.
برای تضمین یکپارچگی دادهها حتی وقتی این ورودیها بهطور خودکار اضافه میشوند، او قبل از هر تعهد دفتر را اعتبارسنجی میکند و از افزونههای Beancount استفاده میکند. برای مثال، افزونهٔ beancount.plugins.noduplicates فعال شده تا از وارد کردن تصادفی یک تراکنش دو بار جلوگیری کند، و beancount.plugins.nounused هر حسابی که ورودی ندارد را علامتگذاری میکند (برای پاکسازی حسابهای بیاستفاده مفید است). ما برای آن گام اعتبارسنجی، bea check را توصیه میکنیم. بنیانگذار همچنین از یک قالببند جامعه (مانند beancount-black) استفاده میکند تا فایل دفتر را بهطور یکدست نگه دارد. این مهم است زیرا با ویرایشهای خودکار زیاد، داشتن سبک یکنواخت تفاوتها و حسابرسیها را آسانتر میکند. در واقع، بنیانگذار دفتر را در یک مخزن Git نگه میدارد و بهروزرسانیهای دفتر را مانند تغییرات کد در نظر میگیرد. هر دستهٔ جدید تراکنشهای واردشده به یک تعهد Git تبدیل میشود و او میتواند تفاوتها را بررسی کند تا ببیند چه چیزی تغییر کرده است. در یک تصویر، او تاریخچهٔ Git را نشان میدهد که در آن یک تراکنش کارت اعتباری برای «Costco» از حالت در انتظار به تسویهشده در دفتر میرود، همه بدون دخالت دستی. کنترل نسخه یک رد حسابرسی فراهم میکند: او میتواند دقیقاً ببیند چه زمانی یک تراکنش اضافه یا اصلاح شد و حتی در صورت وارد شدن اشتباه، تغییرات را برگرداند. این نمونهٔ عالی از آوردن بهترین شیوههای توسعه نرمافزار (مانند کنترل منبع) به سوابق حسابداری است.
چند ارز و تراکنشهای بینالمللی: کسبوکارهای کوچک اغلب در چندین ارز تراکنش میکنند – برای مثال، یک استارتاپ ممکن است هزینههای دلاری داشته باشد اما پرداختهایی به یورو نیز دریافت کند یا یک حساب بانکی پوند داشته باشد. شرکت نمایشی ما از ویژگیهای چند ارزی Beancount برای تجمیع همهٔ اینها در یک دفتر استفاده میکند. آنها حسابهای جداگانه برای هر ارز باز کردند (مثلاً Assets:Bank:Checking:USD و Assets:Bank:Checking:EUR) که یک رویکرد رایج است. با این حال، حتی اگر ارزهای مختلف یک حساب را به اشتراک بگذارند، Beancount ماندهٔ هر ارز را جداگانه پیگیری میکند و ایجاب میکند که تراکنشها به تفکیک ارز متعادل باشند. بنیانگذار مکرراً گزارشهای ارزشگذاری را اجرا میکند تا ماندههای کل شرکت را که به ارز پایه تبدیل شدهاند ببیند. چون Beancount از جستوجوی قیمت پشتیبانی میکند، او با استفاده از یک اسکریپت زمانبندیشدهٔ واکشی نرخ، خوراکهای قیمت روزانه برای نرخهای ارز (و قیمت سهام برای هر سرمایهگذاری) راهاندازی کرد. نتیجه این است که در هر زمان میتواند یک ترازنامه بهعنوان مثال به دلار تولید کند که شامل حساب یورو با آخرین نرخ تبدیلشده باشد. اعضای جامعه اشاره میکنند که مدیریت چند ارز در حسابداری به سبک دفتری ساده است – فقط تراکنشها را به ارز دادهشده اضافه میکنید و نرخهای ارز را در صورت نیاز ثبت میکنید. برای مثال، یکی از کاربران نمونهای از تبدیل دلار به یورو به دلار کانادا از طریق حسابهای میانی را بهعنوان راهی برای مدیریت تبدیل ارز در Beancount به اشتراک گذاشت. در مورد ما، کسبوکار کوچک لزوماً ارزها را در تراکنشها تبدیل نمیکند (آنها را به ارز بومی نگه میدارد) اما از گزارشها برای تجمیع استفاده میکند. این انعطافپذیری با جهانی شدن استارتاپ حیاتی بوده است.
اسکریپتها و توسعههای سفارشی: همهچیز مورد نیاز بنیانگذار آماده در دسترس نبود، بنابراین او Beancount را با افزونههای سفارشی گسترش داد. با گذشت زمان، او در نهایت یک کتابخانهٔ تجزیهکننده، یک ابزار قالببندی و یک واردکنندهٔ تراکنش مبتنی بر قانون نوشت و بسیاری از اینها را بهعنوان بستههای متنباز منتشر کرد. برای مثال، او یک موتور وارد کردن مبتنی بر قانون ساخت که از پیکربندی YAML برای دستهبندی خودکار تراکنشها استفاده میکند. بخشی از این پیکربندی نشان میدهد چگونه پرداختکنندگان یا توصیفات خاص (مانند «Comcast» یا «PG&E») به حسابهای هزینه و روایتهای معین نگاشت میشوند، بهطوریکه وقتی آنها در خوراک بانکی ظاهر شوند، ورودی صحیح Beancount بدون ویرایش دستی تولید میشود. این اساساً یک خودکارسازی سفارشی برای اعمال قواعد دفترداری (برای آب و برق، اشتراکها و غیره) بهصورت لحظهای است. افزونهٔ دیگری تضمین میکند دفتر همیشه متعادل و قالببندیشده بماند. همهٔ این ابزارها هر بار که دادهٔ جدیدی وارد میشود، بهعنوان بخشی از گردشکار بنیانگذار اجرا میشوند. نتیجه دفتری است که «خودش را بهروزرسانی میکند» با کمترین دخالت، که به گفتهٔ بنیانگذار بهعنوان یک توسعهدهندهٔ وسواس در خودکارسازی، «لذت محض» برای او به ارمغان میآورد.
امنیت و دسترسیپذیری نیز نگرانیهایی بودند. بنیانگذار میخواست تیم مالیاش (و حتی همسرش که نقش ناظر را داشت) بتوانند دفاتر را بهراحتی ببینند. برای این کار، او یک استقرار خصوصی Fava در فضای ابری راهاندازی کرد. هر بار که او تعهد دفتری جدید را به مخزن خصوصی 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 را با ابزارهای ابری مدرن یکپارچه کند تا بدون واگذاری مالکیت داده، به راحتی دست یابد.
در استفادهٔ روزمره، تمرکز صاحب کسبوکار کوچک بر رسیدگی به استثناها است، نه ورود داده. هر ماه، او بهطور مختصر تراکنشهای خودکار واردشده را بررسی میکند (با استفاده از تفاوتهای Git یا نمای ژورنال Fava) تا هر ورودی دستهبندینشده یا نادرست را بگیرد. او همچنین از تأییدهای مانده Beancount برای تطبیق حسابها استفاده میکند. برای مثال، پس از وارد کردن همهٔ تراکنشهای ژوئن، ممکن است یک بررسی مانده اضافه کند تا تأیید کند که ماندهٔ پایانی حساب بانکی با صورتحساب مطابقت دارد؛ اگر نه، Beancount خطا میدهد و نشان میدهد چیزی جا افتاده یا اشتباه وارد شده است. این تضمین میکند دفاتر دقیق باقی بمانند.
شیوههای کلیدی در راهاندازی کسبوکار کوچک: خودکارسازی گسترده از طریق واردکنندهها و اسکریپتهای سفارشی (دفتری «۹۵٪ خودکار»)، استفاده از کنترل نسخه برای ردهای حسابرسی و همکاری، حسابداری چند ارزی با خوراکهای قیمت برای ارزشگذاری، و استقرار 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 تأثیری ندارند، اما علاقهمند یک اسکریپت پایتون کوچک نوشت که آنها را میخواند و هزینهٔ واقعی را با بودجهٔ پیشبینیشده مقایسه میکند. این جایگزینی برای استفاده از بودجههای داخلی Fava (که در ادامه توضیح داده شده) است و نشان میدهد چگونه میتوان فراداده را به میل کاربر خم کرد. همانطور که خالق Beancount اشاره کرد، فراداده «فقط برای شماست [تا در اسکریپتهای سفارشی استفاده کنید] – Beancount آن را تجزیه میکند اما خودش آن را نادیده میگیرد». بهطور خلاصه، این کاربر از گسترش دفتر با اطلاعات اضافی برای کمک به تحلیل شخصی خود نمیترسد.
بودجهبندی با Beancount: یکی از اهداف اصلی این کاربر، پایبندی به یک بودجهٔ ماهانه است. او قبلاً از یک اپ بودجهبندی (YNAB) استفاده میکرد و میخواست برخی از مفاهیم بودجهبندی پاکتی آن را بازسازی کند. چند راه برای بودجهبندی در Beancount وجود دارد، اما سادهترین آن استفاده از دستورهای budget در 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 نوارهای بودجه در برابر واقعی را در رابط وب نمایش میدهد و به کاربر امکان میدهد ببیند، برای مثال، او این ماه ۴۸۰ دلار از بودجهٔ ۵۰۰ دلاری خود را برای Groceries خرج کرده و شاید ۲۲۰ دلار برای DiningOut (بیش از بودجه). علاقهمند ما بهطور منظم گزارشهای صورت سود و زیان و هزینهها در Fava را بررسی میکند که هم مجموعهای ماهانه و هم اهداف بودجه را نشان میدهند. Fava بهراحتی بودجههای روزانه/هفتگی را به بازههای زمانی مناسب تجمیع میکند. با استفاده از رابط کاربری Fava برای این کار، کاربر به یک صفحهٔ گستردهٔ جداگانه برای بودجهبندی نیاز ندارد؛ همه یکپارچه است. (او همچنین با یک سیستم «پاکتی» خودکارتر با انتقال وجوه به حسابهای ساختگی در ابتدای هر ماه، همانطور که در انجمنها پیشنهاد شده بود، آزمایش کرد، اما دستورهای بودجهٔ سفارشی را سادهتر برای نگهداری یافت.)
برای پیشبینی، فراتر از بودجهها، او صورتحسابهای پیشرو را زیر نظر دارد. برخی اعضای جامعه افزونههایی برای تولید تراکنشهای آینده برای اشتراکها یا برنامههای استهلاک وام ساختهاند، اما این کاربر رویکرد سادهتری را انتخاب کرد: او بخش جداگانهای از دفتر را با تراکنشهای تاریخآینده برای اقلام شناختهشده (مانند اجارهٔ ماه آینده یا پرداخت سالانهٔ بیمهٔ پیشرو) نگه میدارد. آنها در دفتر میمانند اما بر ماندههای امروز تأثیری ندارند و زمانی که تاریخ فرا میرسد و تراکنش جاری میشود، بهعنوان یادآور عمل میکند (و در صورت لزوم مقدار را با هزینهٔ واقعی تطبیق میدهد). این کمی یک ترفند است، اما برای پیشبینی جریان نقدی بدون ابزار پیچیده کار میکند.
پیگیری سرمایهگذاری و حسابداری چند کالایی: بهعنوان یک علاقهمند به امور مالی، این کاربر از Beancount برای تجمیع حسابهای سرمایهگذاری – سهام، صندوقهای مشترک و رمزارز – در کنار حسابهای نقدی استفاده میکند. او حسابهای کارگزاری دارد که داراییهایشان (برای مثال، سهام AAPL، GOOG و غیره) بهعنوان کالا در Beancount ثبت میشوند. برای مثال، خرید ۱۰ سهم اپل ورودیای خواهد بود که نقد کارگزاری را بستانکار و یک حساب دارایی را با 10 AAPL بهعنوان مقدار کالا بدهکار میکند. توانایی Beancount در مدیریت هر کالایی اینجا بسیار مفید است؛ میتوان آزادانه ارزها و سهام را با هم مخلوط کرد. همانطور که یکی از کاربران اشاره کرد، «Beancount میتواند مقادیر را در هر ارزی، چه دلار و چه نماد سهام، پیگیری کند» که بهبود بزرگی نسبت به اپهای امور مالی شخصی بود که اغلب از موقعیتهای سهامی بهخوبی پشتیبانی نمیکنند. علاقهمند ما از یک وظیفهٔ زمانبندیشدهٔ شبانه برای واکشی آخرین قیمتهای بازار برای همهٔ اوراق بهادار و ارزهای خارجیاش استفاده میکند. هر شب ساعت ۴ صبح، یک اسکریپت قیمتها را (از Yahoo Finance یا منبعی دیگر) واکشی و سوابق قیمت را برای آن روز به دفتر اضافه میکند. به این ترتیب، بار بعد که Fava را باز میکند یا گزارشی اجرا میکند، میتواند ارزشهای بهروز سبد و حتی عملکرد سرمایهگذاری در طول زمان را ببیند. کل دارایی خالص، در سراسر حسابهای بانکی، صندوقهای بازنشستگی و کیفپولهای رمزارز، در یک نمای یکپارچه در دسترس است. این برای یک سرمایهگذار دادهمحور رؤیایی است: نیازی به ورود به چندین پلتفرم برای دیدن تصویر کامل نیست. او اساساً یک داشبورد مالی شخصی ساخته که با Beancount کار میکند.
تحلیل و یکپارچهسازی: چیزی که واقعاً این کاربر قدرتمند امور مالی شخصی را متمایز میکند این است که چگونه دادهها را پس از ورود به Beancount تحلیل میکند. با همهٔ تراکنشها در یک پایگاه دادهٔ SQLite (Beancount میتواند داده را از طریق زبان پرسوجوی داخلی خود که شبیه SQL است جستوجو کند)، کاربر میتواند تحلیل سفارشی انجام دهد. او اسکریپتهای پایتون نوشت تا به سؤالاتی مانند «میانگین متحرک ۳ ماههٔ هزینهٔ خواربار من چقدر است؟» یا «هزینهٔ امسال من برای آب و برق در مقایسه با سال گذشته چگونه است؟» پاسخ دهد. یک اسکریپت دفتر را برای برچسبهای خاص جستوجو و نتایج را به یک دیتافریم Pandas برای محاسبات بیشتر خروجی میدهد. چون دفتر متن ساده است، او همچنین از دفترچههای Jupyter برای آزمایش تجسمهای مختلف (فراتر از آنچه Fava ارائه میدهد) استفاده کرده است. برای مثال، او با تجمیع دادههای Beancount در پایتون، یک نمودار میلهای سفارشی از نرخ پسانداز ماهانه با Matplotlib تولید کرد. این نوع تحلیل موردی فقط به این دلیل ممکن است که Beancount دادهها را در دسترس و ماشینخوان نگه میدارد. همانطور که یکی از کاربران گفت، استخراج داده بیدردسر است – «من یک اسکریپت پایتون دارم که با استفاده از زبان پرسوجو داده را از Beancount بیرون میکشد و سپس از یک دیتافریم pandas برای آمادهسازی داده در یک گزارش استفاده میکنم». علاقهمند ما مخزنی از اسکریپتهای کوچک اینچنینی دارد که برای بررسی مالی سالانهاش اجرا میکند.
البته همهچیز نیازمند کدنویسی نیست – بیشتر اوقات، او به نمودارهای داخلی Fava تکیه میکند. Fava یک نمودار خطی دارایی خالص، روند درآمد در برابر هزینه، و حتی یک تفکیک نقشهدرختی (همانطور که پیشتر نشان داده شد) ارائه میدهد که همه با یک کلیک در دسترس هستند. کاربر قدردان این است که کل تاریخچهٔ امور مالی او از سال ۲۰۱۸ قابل پرسوجو و حسابرسی است. برای مثال، اگر کنجکاو شود «در ۵ سال گذشته چقدر برای تعمیرات خودرو خرج کردهام»، میتواند یک پرسوجو یا فیلتر سریع در Fava بنویسد تا پاسخ را بگیرد، بهجای جستوجو در رسیدها. این توانمندسازی دقیقاً همان چیزی است که او را به Beancount جذب کرد: مالکیت کامل دادهها و انعطاف بینهایت در تحلیل. بهعنوان یک امتیاز، دفتر متن ساده آیندهنگر است – میتوان آن را تحت کنترل نسخه قرار داد، مهاجرت داد، یا حتی در صورت نیاز توسط ابزارهای دیگر تجزیه کرد. برخلاف یک اپ بسته، هیچ خطری برای از دست دادن دسترسی به تاریخچهٔ مالی وجود ندارد.
شیوههای کلیدی در راهاندازی شخصی: استفاده از ابزارهای موبایل و دسکتاپ برای ورود راحت داده، استفاده از برچسبها و فرادادهٔ سفارشی برای پیگیری رویدادهای زندگی و گروهبندیهای مقطعی، پیادهسازی بودجهها از طریق دستورهای budget در Fava برای اهداف هزینهٔ مستمر، پیگیری سرمایهگذاری و چندین ارز در همان دفتر (با بهروزرسانیهای خودکار قیمت)، و انجام تحلیل سفارشی با پرسوجوی مستقیم دادهٔ دفتر. این مورد نشان میدهد که با کمی راهاندازی، حتی علاقهمندان به امور مالی شخصی میتوانند به سطحی از بینش و کنترل دست یابند که معمولاً برای کسبوکارها محفوظ است – همه در حالی که همهچیز را برای کاربری آشنا به فناوری سرگرمکننده و جذاب نگه میدارند.
برای معادل میزبانیشدهٔ اسکریپتهای واکشی قیمت در این مثالها، از قیمتهای زنده استفاده کنید. داراییهای پشتیبانیشده و یک ارز ارزشگذاری انتخاب کنید، سپس درجهای تولیدشده را به دفتر میزبانیشدهٔ خود اضافه کنید. راهاندازیهای محلی Fava همچنان به فایلهای قیمت محلی نیاز دارند. قیمتهای خودکار دادهٔ ارزشگذاری را بهروزرسانی میکنند؛ آنها تراکنشها یا هزینهٔ قطعه را در این راهاندازیها تغییر نمیدهند.
نتیجهگیری
در سراسر این نمونههای جامعه، یک مضمون روشن این است که انعطافپذیری Beancount یک سیستم حسابداری بسیار شخصیسازیشده را ممکن میسازد. کاربران قدرتمند جامعه از فایلهای متن ساده استفاده کردهاند تا راهحلهایی بسازند که در توانمندی با نرمافزارهای تجاری رقابت میکنند، اما متناسب با گردشکارهای خودشان ساخته شدهاند. فریلنسرها ورودیها را برچسب و پیوند میزنند تا پروژهها و فاکتورهای مشتریان را بهراحتی مدیریت کنند. صاحبان کسبوکارهای کوچک وظایف خستهکنندهٔ دفترداری را اسکریپتنویسی میکنند و Beancount را با زیرساخت مدرن یکپارچه میکنند تا صورتهای مالی همیشه بهروز داشته باشند. علاقهمندان به امور مالی شخصی از دفتر بهعنوان یک منبع واحد حقیقت برای بودجهبندی، سرمایهگذاری و تصمیمگیری استفاده میکنند و آن را با برچسبها و ابزارها تقویت میکنند تا تقریباً به هر سؤالی دربارهٔ پول خود پاسخ دهند. همهٔ اینها در حالی به دست میآید که مزایای اصلی حسابداری متن ساده حفظ میشود: شفافیت، قابلیت حسابرسی و کنترل بر دادههای خود.
جامعهٔ Beancount همچنین یک اکوسیستم غنی از افزونهها و یکپارچهسازیها تولید کرده است. از حالتهای ویرایشگر و اپهای موبایل برای ورودی، تا رابط وب Fava برای تجسم، تا واردکنندهها و ابزارهای بیشمار در GitHub، منابعی برای پوشش تقریباً هر نیازی وجود دارد. کاربران مکرراً راهاندازیهای دفتر خود را در انجمنها و وبلاگها به اشتراک میگذارند تا دیگران بتوانند بیاموزند و بهترین شیوهها را بپذیرند. مهمتر از همه، بهدلیل قالب قابل خواندن توسط انسان، اطلاعات حساس میتوانند خصوصی بمانند (یا برای اشتراکگذاری بهراحتی ویرایش شوند) – همانطور که در این نمایش انجام دادیم. مثالهای بالا نشان میدهند که چه توسعهدهندهٔ فریلنسر باشید، چه بنیانگذار استارتاپ، یا چه علاقهمند به امور مالی شخصی، میتوانید Beancount را به میل خود خم کنید. با استفادهٔ خلاقانه از برچسبگذاری و فراداده، خودکارسازی در هر جا که ممکن است، مدیریت تراکنشهای چند ارزی، برنامهریزی با بودجهها، و گسترش از طریق افزونهها، جامعه همچنان مرزهای آنچه در متن ساده ممکن است را جابجا میکند. نتیجه، دفترهای حسابداری در سطح حرفهای است که نگهداریشان نیز جذاب است و به کاربران هم شفافیت و هم کنترل بر امور مالیشان میدهد.