پرش به محتوای اصلی

نمایشگاه انجمن: تنظیمات واقعی Beancount

تنظیمات واقعی Beancount

مقدمه

community-showcase

Beancount یک سیستم حسابداری متن ساده و چندمنظوره است و کاربران آن را برای مطابقت با طیف گسترده‌ای از نیازهای دنیای واقعی شکل داده‌اند. در این نمایشگاه انجمن، نمونه‌های ناشناس از نحوه سازماندهی و استفاده افراد مختلف از گردش‌کارهای حسابداری Beancount خود را ارائه می‌دهیم - از فریلنسرها و صاحبان مشاغل کوچک گرفته تا علاقه‌مندان به امور مالی شخصی. این مثال‌ها، رویه‌های خلاقانه‌ای مانند برچسب‌گذاری تراکنش‌ها با فراداده، خودکارسازی به‌روزرسانی‌های دفتر کل با اسکریپت‌های سفارشی، مدیریت ارزهای متعدد، بودجه‌بندی و پیش‌بینی، و گسترش Beancount با پلاگین‌ها یا ادغام‌ها (مانند رابط وب Fava) را برجسته می‌کنند. هدف این است که حسابداران، توسعه‌دهندگان و کاربران آگاه مالی را در مورد آنچه با سیستم انعطاف‌پذیر Beancount امکان‌پذیر است، الهام بخشیده و آگاه سازیم.

مثالی از رابط Fava: بسیاری از کاربران Beancount برای تجسم امور مالی خود به Fava - یک داشبورد وب منبع باز - تکیه می‌کنند. Fava می‌تواند یک دفتر کل Beancount را به گزارش‌ها و نمودارهای تعاملی تبدیل کند. به عنوان مثال، تصویر بالا یک درختواره از صورت سود و زیان را نشان می‌دهد که درآمد و هزینه‌ها را بر اساس دسته‌بندی تقسیم می‌کند و یک نمای کلی سریع از منشاء و مقصد پول ارائه می‌دهد. کاربران می‌توانند این نما را بر اساس زمان، حساب یا برچسب‌ها فیلتر کنند تا پروژه‌ها یا دوره‌های خاص را بررسی کنند. چنین تجسم‌هایی به دسترسی آسان‌تر به داده‌های متن ساده کمک می‌کنند و به کاربران امکان می‌دهند روندها و ناهنجاری‌ها را در یک نگاه تشخیص دهند.

هر تنظیم Beancount منحصر به فرد است، اما مضامین مشترکی ظاهر می‌شوند. در زیر، به بررسی سه سناریو می‌پردازیم - یک فریلنسر، یک صاحب کسب‌وکار کوچک و یک کاربر حرفه‌ای امور مالی شخصی - تا ببینیم چگونه حساب‌های خود را سازماندهی می‌کنند و از ویژگی‌های Beancount استفاده می‌کنند. تمام جزئیات شخصی حذف یا تعمیم داده شده‌اند و فقط بر روی تکنیک‌ها و تنظیمات تمرکز شده است.

فریلنسر: برچسب‌گذاری پروژه و ردیابی فاکتور

اولین مثال ما یک مشاور فریلنسر است که از Beancount به عنوان ستون فقرات امور مالی کسب‌وکار خود استفاده می‌کند. دفتر کل این فریلنسر برای ردیابی درآمد و هزینه‌ها به ازای هر پروژه و مدیریت فاکتورها برای مشتریان متعدد سازماندهی شده است. آن‌ها حساب‌های اختصاصی برای حساب‌های دریافتنی (A/R) تحت دارایی‌ها برای هر مشتری ایجاد کرده‌اند که به تفکیک بدهی‌ها کمک می‌کند. هنگامی که یک پروژه را تکمیل می‌کنند و برای یک مشتری فاکتور صادر می‌کنند، تراکنشی را ثبت می‌کنند که حساب A/R مشتری را بدهکار و یک حساب درآمد را بستانکار می‌کند. برای مثال، یک فاکتور جدید ممکن است به صورت زیر ثبت شود:

2025-08-01 * "پروژه X تکمیل شد" ^INV-0001
Assets:AccountsReceivable:ClientA 5,000 USD
Income:Consulting -5,000 USD

در اینجا علامت ^INV-0001 یک لینک (یک ویژگی فراداده داخلی Beancount) است که برای برچسب‌گذاری این تراکنش با شماره فاکتور استفاده می‌شود. هنگامی که مشتری بخشی یا تمام آن فاکتور را پرداخت می‌کند، تراکنش پرداخت شامل همان لینک ^INV-0001 است که دو ورودی را به هم متصل می‌کند. این پیوند دادن، تخصیص پرداخت‌ها به فاکتورهای خاص و مشاهده مانده‌های معوق را آسان می‌کند. همانطور که یکی از اعضای انجمن توضیح داد، می‌توانید از چنین برچسب‌ها یا لینک‌هایی برای علامت‌گذاری پرداخت‌های جزئی - به عنوان مثال، پرداخت 20 دلاری در برابر فاکتور 30 دلاری - هم در ورودی فاکتور و هم در ورودی پرداخت استفاده کنید. با جستجوی دفتر کل برای آن لینک فاکتور، فریلنسر می‌تواند فوراً ببیند چه مقدار از فاکتور پرداخت شده است و چه چیزی باز مانده است.

علاوه بر لینک‌ها، فریلنسر به شدت از برچسب‌ها برای دسته‌بندی استفاده می‌کند. برچسب‌ها در Beancount برچسب‌هایی هستند که با # شروع می‌شوند و می‌توانند تراکنش‌ها را برای فیلتر کردن بعدی علامت‌گذاری کنند. این کاربر هر هزینه‌ای را که قابل پرداخت به یک مشتری است با کد پروژه، مانند #ProjectX، و هزینه‌های قابل بازپرداخت را با #Reimbursable برچسب‌گذاری می‌کند. به عنوان مثال، اگر بلیط هواپیما برای یک پروژه مشتری خریداری کنند، ورودی هزینه ممکن است شامل #ProjectX #Reimbursable باشد. این روش امکان تولید گزارش‌ها به ازای هر پروژه یا مشتری را با فیلتر کردن بر اساس برچسب‌ها فراهم می‌کند. پس از یک پروژه، فریلنسر می‌تواند یک پرس و جو اجرا کند تا تمام هزینه‌های #Reimbursable را برای آن پروژه فهرست کند و اطمینان حاصل کند که برای هر یک از آن‌ها برای مشتری فاکتور صادر می‌کند. یکی از کاربران Beancount خاطرنشان کرد که برچسب‌گذاری هزینه‌های سفر کاری به شناسایی هر گونه هزینه‌ای که بازپرداخت نشده است کمک می‌کند - در حالت ایده‌آل، هزینه‌های یک سفر کاری زمانی که تمام بازپرداخت‌ها از مشتری دریافت شود، به 0 دلار می‌رسد. این نشان می‌دهد که چگونه برچسب‌گذاری، همراه با قابلیت‌های پرس و جوی Beancount، یک لایه نظارتی اضافی برای فریلنسرهایی که هزینه‌های قابل پرداخت را مدیریت می‌کنند، فراهم می‌کند.

برای مدیریت وضعیت پرداخت‌های معوق، فریلنسر ما از یک قرارداد ویژه برای دریافتنی‌های معلق استفاده می‌کند. آن‌ها برچسب #UNRESOLVED را به هر تراکنش فاکتوری که هنوز به طور کامل پرداخت نشده است، اعمال می‌کنند. Beancount (و Fava) این برچسب را اعمال نمی‌کنند، اما این یک الگوی تثبیت شده در انجمن برای علامت‌گذاری تراکنش‌های در انتظار تسویه است. به عنوان مثال، تا زمانی که Client A مبلغ 5,000 دلار را به طور کامل پرداخت نکند، تراکنش فاکتور فوق شامل #UNRESOLVED خواهد بود. با فیلتر کردن بر اساس آن برچسب، فریلنسر می‌تواند در هر زمان تمام فاکتورهای باز را فهرست کند. پس از دریافت و اعمال پرداخت (تراکنش A/R مربوطه وارد می‌شود)، آن‌ها برچسب #UNRESOLVED را حذف یا نادیده می‌گیرند و حساب دریافتنی برای آن مشتری به صفر می‌رسد. این سیستم تضمین می‌کند که هیچ فاکتوری "از دست نمی‌رود". این اساساً یک گزارش سنی است که در متن ساده انجام می‌شود - اگر A/R غیر صفر باقی بماند و برچسب unresolved داشته باشد، نیاز به توجه دارد.

از آنجایی که فریلنسرها اغلب با روش‌های پرداخت متعدد و گاهی اوقات ارزهای متعدد سروکار دارند، تنظیم Beancount به طور یکپارچه این موضوع را در خود جای می‌دهد. در مثال ما، مشاور ممکن است برای برخی از مشتریان با دلار آمریکا و برای برخی دیگر با یورو فاکتور صادر کند. مدیریت چند ارزی در Beancount ساده است: هر حساب می‌تواند چندین کالا (ارزها به عنوان کالا در نظر گرفته می‌شوند) داشته باشد. فریلنسر می‌تواند حساب‌های فرعی جداگانه برای هر ارز (مثلاً Assets:AccountsReceivable:ClientA:EUR در مقابل ...:USD) نگه دارد، یا به سادگی تراکنش‌ها را با ارز مناسب تحت همان حساب ثبت کند. Beancount به طور خودکار مانده‌ها را به ازای هر ارز ردیابی می‌کند. یکی از کاربران تأکید کرد که چقدر خوب است که "Beancount می‌تواند مقادیر را به هر ارزی، چه دلار آمریکا و چه نماد سهام، ردیابی کند"، همه در یک دفتر کل. فریلنسر ما از این مزیت استفاده می‌کند و هر زمان که نیاز به تبدیل ارزها برای گزارش‌دهی دارد، نرخ ارز را با دستورالعمل‌های price ثبت می‌کند. او می‌تواند یک گزارش درآمد تبدیل شده به ارز مبدأ خود را پس از وارد کردن نرخ ارز یا قیمت‌های بازار دوره‌ای، تولید کند.

در نهایت، این فریلنسر دفتر کل Beancount خود را با ابزارهای کاربردی برای ساده‌سازی گردش کار خود ادغام می‌کند. برای مثال، آن‌ها نسخه‌های PDF هر فاکتور را با استفاده از فراداده سند به دفتر کل پیوست می‌کنند. یک ورودی پرداخت فاکتور معمولی ممکن است به صورت زیر باشد:

2025-08-30 * "ClientA" "پرداخت برای 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 را برای حفظ کنترل کامل داده‌ها انتخاب کردند. در طول چند سال، آن‌ها به طور مکرر ابزارهای سفارشی را توسعه دادند تا به یک فرآیند دفترداری 95٪ خودکار دست یابند.

واردات و تطبیق خودکار: یکی از اولین چالش‌ها وارد کردن تراکنش‌ها از منابع مختلف (حساب‌های بانکی، کارت‌های اعتباری، پردازشگرهای پرداخت) به دفتر کل بود. این کاربر به جای تایپ کردن هر تراکنش، اسکریپت‌های واردات را برای واکشی و ترجمه داده‌ها به فرمت Beancount تنظیم کرد. آن‌ها واردکننده‌های پایتون سفارشی برای فرمت CSV یا API هر موسسه مالی نوشتند، به طوری که با یک دستور می‌توانند تراکنش‌های جدید را بکشند و آن‌ها را به دفتر کل اضافه کنند. به عنوان مثال، با استفاده از چارچوب bean-extract Beancount، بنیانگذار می‌تواند اسکریپتی را اجرا کند که یک پوشه دانلودها را برای صورت‌حساب‌های جدید اسکن می‌کند و آن‌ها را به عنوان ورودی‌های Beancount خروجی می‌دهد. کاربر دیگری، Rhyd Lewis، یک تنظیم مشابه را توصیف کرد که در آن اسکریپت‌های واردکننده جداگانه برای هر بانک دارد و می‌تواند آن‌ها را از طریق یک دستور ساده (با استفاده از Justfile) برای به‌روزرسانی دفتر کل خود فراخوانی کند. صاحب کسب‌وکار کوچک ما همین کار را انجام می‌دهد - تمام تراکنش‌های بانکی، کارت‌های اعتباری و حتی تراکنش‌های PayPal یا Stripe به طور خودکار واکشی و به دفاتر اضافه می‌شوند و با حساب‌های مناسب دسته‌بندی می‌شوند.

برای اطمینان از یکپارچگی داده‌ها حتی با افزودن خودکار این ورودی‌ها، آن‌ها همچنین از ابزارهای اعتبارسنجی و پلاگین‌های Beancount استفاده می‌کنند. برای مثال، پلاگین beancount.plugins.noduplicates فعال شده است تا از وارد کردن تصادفی یک تراکنش دو بار جلوگیری کند، و beancount.plugins.nounused هر حسابی را که هیچ ورودی ندارد، پرچم‌گذاری می‌کند (برای پاکسازی حساب‌های قدیمی مفید است). بنیانگذار همچنین از یک قالب‌بندی کننده (مانند bean-format یا ابزار انجمن beancount-black) برای حفظ سبک ثابت فایل دفتر کل استفاده می‌کند. این مهم است زیرا با بسیاری از ویرایش‌های خودکار، داشتن یک سبک یکنواخت، diffs و ممیزی‌ها را آسان‌تر می‌کند. در واقع، بنیانگذار دفتر کل را در یک مخزن Git نگه می‌دارد و به‌روزرسانی‌های دفتر کل را مانند تغییرات کد در نظر می‌گیرد. هر دسته جدید از تراکنش‌های وارد شده به یک commit Git تبدیل می‌شود و آن‌ها می‌توانند diffs را بررسی کنند تا ببینند چه چیزی تغییر کرده است. در یک تصویر، آن‌ها یک تاریخچه Git را نشان می‌دهند که در آن یک تراکنش کارت اعتباری برای "Costco" از حالت معلق به تسویه شده در دفتر کل تبدیل می‌شود، همه اینها بدون دخالت دستی. کنترل نسخه یک ردیابی ممیزی ارائه می‌دهد: آن‌ها می‌توانند دقیقاً ببینند چه زمانی یک تراکنش اضافه یا اصلاح شده است و حتی در صورت وارد کردن نادرست چیزی، تغییرات را لغو کنند. این یک مثال عالی از وارد کردن بهترین شیوه‌های توسعه نرم‌افزار (مانند کنترل منبع) به سوابق حسابداری است.

تراکنش‌های چند ارزی و بین‌المللی: کسب‌وکارهای کوچک اغلب در ارزهای متعدد تراکنش می‌کنند - برای مثال، یک استارتاپ ممکن است هزینه‌هایی با دلار آمریکا داشته باشد، اما همچنین پرداخت‌هایی با یورو دریافت کند یا یک حساب بانکی با پوند انگلیس داشته باشد. شرکت نمایشگاه ما از ویژگی‌های چند ارزی Beancount برای تجمیع همه اینها در یک دفتر کل استفاده می‌کند. آن‌ها حساب‌های جداگانه برای هر ارز باز کردند (مثلاً Assets:Bank:Checking:USD و Assets:Bank:Checking:EUR) که یک رویکرد رایج است. با این حال، حتی اگر ارزهای مختلف یک حساب را به اشتراک بگذارند، Beancount مانده هر ارز را به طور جداگانه ردیابی می‌کند و می‌خواهد که تراکنش‌ها به ازای هر ارز متعادل باشند. بنیانگذار به طور مکرر گزارش‌های ارزیابی را اجرا می‌کند تا مانده‌های کل شرکت را که به ارز پایه تبدیل شده‌اند، ببیند. از آنجایی که Beancount از جستجوی قیمت پشتیبانی می‌کند، او فیدهای قیمت روزانه را برای نرخ ارز (و قیمت سهام برای هر گونه سرمایه‌گذاری) با استفاده از ابزار bean-price یا یک پلاگین تنظیم کرد. نتیجه این است که در هر زمان می‌تواند یک ترازنامه را، به عنوان مثال، با دلار آمریکا تولید کند که شامل حساب EUR ترجمه شده با آخرین نرخ است. اعضای انجمن اشاره می‌کنند که مدیریت ارزهای متعدد در حسابداری به سبک دفتر کل ساده است - شما فقط تراکنش‌ها را در ارز معین اضافه می‌کنید و نرخ ارز را در صورت نیاز ثبت می‌کنید. برای مثال، یک کاربر نمونه‌ای از تبدیل دلار آمریکا به یورو به دلار کانادا را از طریق حساب‌های واسطه به عنوان راهی برای مدیریت تبدیل ارز در Beancount به اشتراک گذاشت. در مورد ما، کسب‌وکار کوچک لزوماً ارزها را در تراکنش‌ها تبدیل نمی‌کند (آنها را در ارز محلی نگه می‌دارند) اما از گزارش‌ها برای تجمیع استفاده می‌کند. این انعطاف‌پذیری با گسترش جهانی استارتاپ بسیار مهم بوده است.

اسکریپت‌ها و افزونه‌های سفارشی: هر چیزی که بنیانگذار نیاز داشت به صورت خارج از جعبه در دسترس نبود، بنابراین Beancount را با پلاگین‌های سفارشی گسترش داد. با گذشت زمان، او در نهایت یک کتابخانه تجزیه‌کننده، یک ابزار قالب‌بندی و یک واردکننده تراکنش مبتنی بر قانون نوشت و بسیاری از اینها را به عنوان بسته‌های منبع باز منتشر کرد. برای مثال، او یک موتور واردات مبتنی بر قانون ساخت که از یک پیکربندی YAML برای دسته‌بندی خودکار تراکنش‌ها استفاده می‌کند. یک قطعه از این پیکربندی نشان می‌دهد که چگونه پرداخت‌کنندگان یا توضیحات خاص (مانند "Comcast" یا "PG&E") به حساب‌ها و روایات هزینه خاصی نگاشت می‌شوند، به طوری که وقتی آن

ها در فید بانکی ظاهر می‌شوند، ورودی صحیح Beancount بدون ویرایش دستی تولید می‌شود. این اساساً یک اتوماسیون سفارشی برای اعمال قوانین دفترداری (برای خدمات، اشتراک‌ها و غیره) در حین پرواز است. پلاگین دیگری تضمین می‌کند که دفتر کل همیشه متعادل و قالب‌بندی شده باقی می‌ماند. تمام این ابزارها به عنوان بخشی از گردش کار بنیانگذار هر زمان که داده‌های جدید وارد می‌شوند، اجرا می‌شوند. نتیجه یک دفتر کل است که با حداقل مداخله "خودش را به‌روزرسانی می‌کند"، که بنیانگذار می‌گوید به عنوان یک توسعه‌دهنده وسواس اتوماسیون به او "لذت خالص" می‌بخشد.

امنیت و دسترسی نیز از نگرانی‌ها بودند. بنیانگذار می‌خواست تیم مالی‌اش (و حتی همسرش که به عنوان ناظر عمل می‌کند) بتوانند به راحتی دفاتر را مشاهده کنند. برای این کار، او یک استقرار خصوصی از Fava را در ابر تنظیم کرد. هر بار که او یک commit جدید دفتر کل را به مخزن خصوصی Git فشار می‌دهد، یک خط لوله CI (با استفاده از GitHub Actions و AWS Elastic Beanstalk) یک نمونه Fava به‌روزرسانی شده را مستقر می‌کند. رابط وب پشت یک رمز عبور است (با استفاده از پروکسی Nginx با احراز هویت اولیه)، بنابراین فقط افراد مجاز می‌توانند آن را ببینند. به این ترتیب، آخرین صورت‌های مالی همیشه از طریق یک داشبورد مرورگر در دسترس هستند، بدون نیاز به نصب چیزی به صورت محلی. نمودار معماری زیر این تنظیم را نشان می‌دهد: فایل Beancount و پیکربندی لازم همراه با Fava در یک تصویر Docker بسته‌بندی شده و روی AWS ارائه می‌شوند و Cloudflare در جلو برای امنیت عمل می‌کند.

خودکارسازی Beancount در ابر: این نمودار یک خط لوله استقرار برای دفتر کل Beancount + Fava را نشان می‌دهد. کاربر فایل دفتر کل را به صورت محلی به‌روزرسانی می‌کند و به Git فشار می‌دهد. یک کانتینر Docker (از جمله Fava و Nginx برای احراز هویت) ساخته شده و در یک سرور AWS Beanstalk مستقر می‌شود و Cloudflare به عنوان یک پروکسی عمل می‌کند. نتیجه یک پورتال وب امن است که داده‌های مالی کسب‌وکار کوچک از هر کجا (توسط مالک یا تیم) در زمان واقعی قابل دسترسی است. این تنظیم پیشرفته نشان می‌دهد که چگونه یک کسب‌وکار کوچک می‌تواند Beancount را با ابزارهای ابری مدرن ادغام کند تا بدون از دست دادن مالکیت داده، به راحتی دست یابد.

در استفاده روزمره، تمرکز صاحب کسب‌وکار کوچک بر مدیریت استثناها است تا ورود داده‌ها. هر ماه، او به طور خلاصه تراکنش‌های وارد شده خودکار را (با استفاده از Git diffs یا نمای مجله Fava) بررسی می‌کند تا هر ورودی دسته‌بندی نشده یا نادرست را شناسایی کند. او همچنین از ادعاهای تعادل Beancount برای تطبیق حساب‌ها استفاده می‌کند. برای مثال، پس از وارد کردن تمام تراکنش‌های ژوئن، او ممکن است یک بررسی تعادل اضافه کند تا تأیید کند که مانده پایانی حساب بانکی با صورت‌حساب مطابقت دارد. اگر اینطور نباشد، Beancount خطا می‌دهد و نشان می‌دهد که چیزی گم شده یا به اشتباه وارد شده است. این اطمینان می‌دهد که دفاتر دقیق باقی می‌مانند.

رویه‌های کلیدی در تنظیم کسب‌وکار کوچک: اتوماسیون سنگین از طریق واردکنندگان و اسکریپت‌های سفارشی (ایجاد "95٪ خودکار" دفتر کل)، استفاده از کنترل نسخه برای مسیرهای حسابرسی و همکاری، حسابداری چند ارزی با فیدهای قیمت برای ارزیابی و استقرار 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 وجود دارد، اما ساده‌ترین راه استفاده از دستورالعمل‌های بودجه 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 نوارهای بودجه در مقابل واقعی را در رابط وب نمایش می‌دهد و به کاربر اجازه می‌دهد، برای مثال، ببیند که 480 دلار آمریکا برای مواد غذایی در این ماه از 500 بودجه هزینه کرده‌اند و شاید 220 دلار برای غذا خوردن در بیرون (بیش از بودجه). علاقه‌مند به طور مرتب گزارش‌های صورت سود و زیان و هزینه‌ها Fava را بررسی می‌کند که هم جمع کل ماهانه و هم اهداف بودجه را نشان می‌دهند. Fava به راحتی بودجه‌های روزانه/هفتگی را در بازه‌های زمانی مناسب جمع می‌کند. با استفاده از رابط کاربری Fava برای این کار، کاربر نیازی به صفحه گسترده جداگانه برای بودجه‌بندی ندارد. همه چیز یکپارچه است. (آنها همچنین با یک سیستم "پاکت" خودکارتر با انتقال وجوه به حساب‌های ساختگی در ابتدای هر ماه، همانطور که در انجمن‌ها پیشنهاد شده بود، آزمایش کردند، اما دستورالعمل‌های بودجه سفارشی را ساده‌تر برای حفظ یافتند.)

برای پیش‌بینی، فراتر از بودجه‌ها، آنها مراقب صورتحساب‌های آتی هستند. برخی از اعضای انجمن افزونه‌هایی برای تولید تراکنش‌های آتی برای اشتراک‌ها یا برنامه‌های استهلاک وام ایجاد کرده‌اند، اما این کاربر رویکرد ساده‌تری را انتخاب کرد: آنها یک بخش جداگانه از دفتر کل را با تراکنش‌های تاریخ دار برای اقلام شناخته شده (مانند اجاره ماه آینده یا پرداخت بیمه سالانه آتی) نگه می‌دارند. آنها در دفتر کل باقی می‌مانند اما بر مانده‌های امروز تأثیر نمی‌گذارند و هنگامی که تاریخ فرا می‌رسد و تراکنش جاری می‌شود، به عنوان یادآوری عمل می‌کند (و در صورت لزوم مبلغ را برای مطابقت با هزینه واقعی تنظیم می‌کنند). این یک هک است، اما برای پیش‌بینی جریان نقدی بدون ابزارهای پیچیده کار می‌کند.

ردیابی سرمایه‌گذاری و حسابداری چند کالایی: این کاربر به عنوان یک علاقه‌مند به امور مالی، همچنین از Beancount برای تجمیع حساب‌های سرمایه‌گذاری - سهام، صندوق‌های سرمایه‌گذاری مشترک و ارزهای دیجیتال - در کنار حساب‌های نقدی استفاده می‌کند. آنها حساب‌های کارگزاری دارند که دارایی‌های آنها (به عنوان مثال، سهام AAPL، GOOG و غیره) در Beancount به عنوان کالا ثبت می‌شوند. برای مثال، خرید 10 سهم اپل ورودی‌ای خواهد بود که نقدی کارگزاری را بستانکار و یک حساب دارایی را با 10 AAPL به عنوان مبلغ کالا بدهکار می‌کند. توانایی Beancount برای مدیریت هر کالایی در اینجا بسیار مفید است. می‌توان ارزها و سهام را آزادانه با هم ترکیب کرد. همانطور که یکی از کاربران اشاره کرد، "Beancount می‌تواند مقادیر را در هر ارزی، چه دلار آمریکا و چه نماد تیکر، ردیابی کند"، که بهبود بزرگی نسبت به برنامه‌های مالی شخصی بود که اغلب از موقعیت‌های سهام به خوبی پشتیبانی نمی‌کنند. علاقه‌مند ما از ابزار bean-price در یک کار cron شبانه برای واکشی آخرین قیمت‌های بازار برای تمام اوراق بهادار و ارزهای خارجی خود استفاده می‌کند. هر شب ساعت 4 صبح، یک اسکریپت bean-price را اجرا می‌کند که قیمت‌ها را (از Yahoo Finance یا منبع دیگری) می‌کشد و سوابق قیمت را برای آن روز به دفتر کل اضافه می‌کند. به این ترتیب، دفعه بعد که Fava را باز می‌کنند یا گزارشی را اجرا می‌کنند، می‌توانند مقادیر پرتفوی به‌روز و حتی عملکرد سرمایه‌گذاری را در طول زمان مشاهده کنند. کل ارزش خالص، در سراسر حساب‌های بانکی، صندوق‌های بازنشستگی و کیف پول‌های ارز دیجیتال، در یک نمای یکپارچه در دسترس است. این یک رویا برای یک سرمایه‌گذار داده محور است: نیازی به ورود به سیستم عامل‌های متعدد برای دیدن کل تصویر نیست. آنها اساساً یک داشبورد مالی شخصی با Beancount ساخته‌اند.

تجزیه و تحلیل و ادغام: آنچه واقعاً این کاربر قدرتمند مالی شخصی را متمایز می‌کند، نحوه تجزیه و تحلیل داده‌ها پس از ورود به Beancount است. با تمام تراکنش‌ها در یک پایگاه داده SQLite (Beancount می‌تواند داده‌ها را از طریق زبان پرس و جوی داخلی خود که شبیه SQL است، پرس و جو کند)، کاربر می‌تواند تجزیه و تحلیل سفارشی انجام دهد. آنها اسکریپت‌های پایتون را برای پاسخ به سوالاتی مانند "میانگین متحرک 3 ماهه هزینه‌های مواد غذایی من چقدر است؟" یا "هزینه‌های امسال برای خدمات شهری در مقایسه با سال گذشته چگونه است؟" نوشتند. یک اسکریپت دفتر کل را برای برچسب‌های خاص پرس و جو می‌کند و نتایج را به یک قاب داده پاندا برای پردازش بیشتر اعداد خروجی می‌دهد. از آنجایی که دفتر کل متن ساده است، آنها همچنین از نوت‌بوک‌های Jupyter برای آزمایش تجسم‌های مختلف (فراتر از آنچه Fava ارائه می‌دهد) استفاده کرده‌اند. برای مثال، آنها یک نمودار میله‌ای سفارشی از نرخ پس‌انداز ماهانه با استفاده از Matplotlib با جمع‌آوری داده‌های Beancount در پایتون تولید کردند. این نوع تجزیه و تحلیل موردی تنها به این دلیل امکان‌پذیر است که Beancount داده‌ها را در دسترس و قابل خواندن توسط ماشین نگه می‌دارد. به قول یکی از کاربران، استخراج داده‌ها بی‌اهمیت است - "من یک اسکریپت پایتون دارم که داده‌ها را با استفاده از زبان پرس و جو از Beancount بیرون می‌کشد و