دوره حسابداری، به سبک Beancount
صورتهای مالی به جادوی ظاهر نمیشوند. آنها محصول نهایی یک فرآیند ساختاریافته و قابل تکرار به نام دوره حسابداری هستند. در حالی که اصول جهانیاند، ابزارهایی که استفاده میکنید میتوانند تجربه را بهطرز چشمگیری تغییر دهند. این راهنما شما را در طول دوره حسابداری با تمرکز بر Beancount، ابزار قدرتمند حسابداری متنی، راهنمایی میکند.
خواهیم دید که رویکرد متنی‑اول Beancount چگونه گامهای خستهکننده را حذف میکند، چه مواردی را باید خودکار کنید و کدام گزارشها واضحترین تصویر از سلامت مالی شما را ارائه میدهند. 🧑💻
TL;DR: جریان کار Beancount
- Capture & Journal: هر تراکنش را بهصورت یک پستینگ دوبل‑انتری تمیز در فایل متنی
.beancount
خود ثبت کنید. - Validate & Reconcile: از ادعاهای
balance
برای تأیید تطابق دفتر کل با صورتحسابهای بانکی استفاده کنید وbean-check
را برای کشف خ طاها اجرا کنید. - Review: یک تراز آزمایشی بدون تنظیم برای بررسی سریع صحت دادهها تولید کنید.
- Adjust: ورودیهای مربوط به تعهدات، تعویقها، استهلاک و سایر موارد پایان دوره را پست کنید.
- Re-review: تراز آزمایشی تنظیمشده را بررسی کنید تا از صحت همه چیز اطمینان حاصل کنید.
- Publish & Close: صورتهای سود و زیان، ترازنامه و صورت جریان نقدی خود را تولید کنید. بستهبندی دفاتر در Beancount اختیاری است، زیرا گزارشها به تاریخ حساس هستند.
این جریان میتواند بهصورت زیر تجسم شود:
گام ۱: ثبت و ضبط تراکنشها
این گام پایهای است. هر رویداد مالی — فروش، خرید، هزینه بانکی — باید ثبت شود. در Beancount این کار را با ایجاد تراکنشها در یک فایل متنی ساده انجام میدهید که معمولاً نامش main.beancount
است یا بهصورت چندین فایل بر حسب سال سازماندهی میشود.
هر تراکنش باید قوانین حسابداری دوبل‑انتری را رعایت کند، به این معنی که مجموع تمام پستینگها باید صفر باشد. Beancount این را برای شما اعمال میکند.
2025-08-10 * "Walmart" "Purchase of office supplies"
Expenses:Office:Supplies 45.67 USD
Assets:Bank:Checking -45.67 USD
- نکته حرفهای: از برچسبهایی مثل
#project-phoenix
یا#client-acme
برای افزودن ابعاد به دادهها استفاده کنید. این کار بعداً پرسوجو و گزارشگیری را بهطرز فوقالعادهای انعطافپذیر میکند.
بهداشت تطبیق ✅
قویترین ویژگی برای اطمینان از دقت، ادعای توازن است. در پایان یک دوره (مثلاً پایان ماه) شما اعلام میکنید که موجودی یک حساب باید چه مقدار باشد.
2025-08-31 balance Assets:Bank:Checking 12345.67 USD
اگر مجموع تمام تراکنشهای مؤثر بر Assets:Bank:Checking
تا آن تاریخ برابر با 12345.67 USD
نباشد، Beancount خطا میدهد. این دستور ساده دفتر کل شما را به سندی خودحسابرسی تبدیل میکند.
برای کسانی که دادههای تاریخی را پستکمیل میکنند، دستور pad
میتواند بهصورت خودکار یک تراکنش متعادل ایجاد ک ند تا موجودیهای افتتاحیه با اولین ادعای شما مطابقت داشته باشد.
گام ۲: «پست به دفتر کل» (رایگان!)
در سیستمهای حسابداری سنتی ابتدا ورودیها را در «دفتر روزنامه» مینویسید و سپس یک گام جداگانه «پست» این مقادیر را به «دفتر کل عمومی» کپی میکند.
با Beancount، فایل .beancount
شما هم دفتر روزنامه است و هم دفتر کل. وقتی تراکنشی مینویسید و ذخیره میکنید، در واقع آن را پست کردهاید. گام جداگانهای وجود ندارد. این مستقیمبودن مزیت اصلی حسابداری متنی است — آنچه میبینید همان چیزی است که دارید.
گام ۳: تهیه تراز آزمایشی بدون تنظیم
قبل از انجام تنظیمات، نیاز به یک بررسی سریع «آیا همه چیز جمع میشود؟» دارید. تراز آزمایشی گزارشی ساده است که هر حساب و موجودی کل آن را فهرست میکند. مجموع کل بدهکارها باید برابر مجموع کل بستانکارها باشد.
میتوانید این را با یک پرسوجوی ساده تولید کنید:
bean-query main.beancount \
"SELECT account, sum(position) GROUP BY 1 ORDER BY 1"
یا برای رویکرد بصریتر، دفتر خود را در Fava (رابط وب Beancount) باز کنید و به گزارش «Trial Balance» بروید. به هر چیز غیرعادی نگاه کنید — حساب دارایی با موجودی بستانکار، یا هزینهای با مقدار عجیب.
گام ۴: ثبت ورودیهای تنظیمی
ورودیهای تنظیمی برای گزارش دقیق تحت مبنای تعهدی حسابداری حیاتیاند. آنها اطمینان میدهند که درآمدها زمانی که کسب میشوند شناسایی شوند و هزینهها زمانی که متحمل میشویم شناسایی شوند، صرفنظر از زمان دریافت یا پرداخت نقدی.
تنظیمات رایج شامل:
- تعهدات: ثبت درآمدی که کسب کردهاید اما هنوز فاکتور نشده است، یا هزینهای که متحمل شدهاید اما هنوز پرداخت نشده.
- تعویقها: مدیریت پیشپرداختها. اگر مشتری برای یک سال خدمات پیشپرداخت کند، آن را بهعنوان بدهی (
Liabilities:UnearnedRevenue
) ثبت میکنید و هر ماه ۱/۱۲ آن را بهعنوان درآمد شناسایی میکنید. - موارد غیرنقدی: ثبت مواردی مانند استهلاک داراییها.
- تصحیحات: رفع خطاها یا حساب کردن موارد از دست رفته در فیدهای بانکی، مثل پرداخت سود کوچک.
مثال: تعهد درآمد
پروژهای را در ۳۱ آگوست تمام کردید اما فاکتور را تا سپتامبر ارسال نمیکنید. برای شناسایی درآمد در دوره صحیح (آگوست) یک ورودی تنظیمی مینویسید:
2025-08-31 * "Accrue revenue for client project #1042"
Assets:AccountsReceivable 3000.00 USD
Income:Consulting -3000.00 USD
مثال: ثبت استهلاک
شرکت شما برنامهای برای استهلاک داراییها دارد. در پایان دوره این هزینه را ثبت میکنید:
2025-12-31 * "Annual depreciation on computer equipment"
Expenses:Depreciation 4800.00 USD
Assets:Fixed:AccumulatedDepreciation -4800.00 USD
گام ۵: اجرای تراز آزمایشی تنظیمشده و اعتبارسنجی
پس از ثبت ورودیهای تنظیمی، دوباره گزارش تراز آزمایشی را اجرا کنید. این تراز آزمایشی تنظیمشده است. این مجموعه نهایی اعداد است که برای ساخت صورتهای مالی استفاده میشود.
همچنین زمان مناسبی است برای اجرای بررسی داخلی Beancount:
bean-check main.beancount
این فرمان تمام سینتکس، قوانین توازن و ادعاها را بررسی میکند. اگر خروجی نداشته باشد، دفاتر شما از نظر مکانیکی سالم هستند.
گام ۶: انتشار صورتهای مالی 📊
این پاداش نهایی است. با استفاده از اعداد تراز آزمایشی تنظیمشده میتوانید گزارشهای کلیدی مالی را تولید کنید. سادهترین راه استفاده از Fava است که گزارشهای تعاملی و قابل کاوش را بهصورت پیشفرض فراهم میکند.
- صورت سود و زیان (Profit & Loss): درآمدها و هزینههای شما را در یک دوره نشان میدهد و به سود خالص یا زیان خالص میرسد.
- ترازنامه: تصویر لحظهای از آنچه دارید (داراییها) و آنچه بدهکارید (بدهیها) بههمراه ارزش خالص (سرمایه) در یک تاریخ خاص.
- صورت جریان نقدی: نقدینگی آغازین را با نقدینگی پایان مقایسه میکند و نشان میدهد پول از کجا آمده و به کجا رفته است.
برای گزارشهای سفارشی میتوانید از زبان پرسوجوی Beancount (BQL) استفاده کنید. در اینجا یک پرسوجو برای صورت سود و زیان ماهانه آورده شده است:
-- P&L for August 2025
SELECT account, sum(position)
WHERE account '^(Income|Expenses)'
AND date >= 2025-08-01 AND date <= 2025-08-31
GROUP BY account ORDER BY account;