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

1 پست با برچسب "workflow"

مشاهده همه برچسب‌ها

دوره حسابداری، به سبک Beancount

· 9 دقیقه مطالعه
Mike Thrift
Mike Thrift
Marketing Manager

صورت‌های مالی به جادوی ظاهر نمی‌شوند. آن‌ها محصول نهایی یک فرآیند ساختاریافته و قابل تکرار به نام دوره حسابداری هستند. در حالی که اصول جهانی‌اند، ابزارهایی که استفاده می‌کنید می‌توانند تجربه را به‌طرز چشمگیری تغییر دهند. این راهنما شما را در طول دوره حسابداری با تمرکز بر Beancount، ابزار قدرتمند حسابداری متنی، راهنمایی می‌کند.

خواهیم دید که رویکرد متنی‑اول Beancount چگونه گام‌های خسته‌کننده را حذف می‌کند، چه مواردی را باید خودکار کنید و کدام گزارش‌ها واضح‌ترین تصویر از سلامت مالی شما را ارائه می‌دهند. 🧑‍💻

2025-08-13-the-accounting-cycle-beancount-style


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;

گام ۷: بسته‌بندی دفاتر (اختیاری)

در حسابداری سنتی، فرآیند «بسته شدن» شامل ایجاد ورودی‌های روزنامه برای صفر کردن تمام حساب‌های موقت (درآمد و هزینه) و انتقال سود خالص به حساب سرمایه‌ای به نام سود انباشته است. این کار حساب‌های موقت را برای سال بعد بازنشانی می‌کند.

در Beancount این گام معمولاً نیازی نیست. گزارش‌های Fava به تاریخ حساس هستند؛ اگر درخواست صورت سود و زیان ۲۰۲۵ را بدهید، فقط از داده‌های ۲۰۲۵ استفاده می‌کند. موجودی‌ها «ریخت» نمی‌شوند. اکثر کاربران به سادگی موجودی‌ها را همان‌جا می‌گذارند.

با این حال، اگر برای انطباق یا گزارش به سهامداران نیاز به بسته شدن رسمی داشته باشید، می‌توانید با یک تراکنش پایان سال کل درآمد و هزینه را به Equity:Retained-Earnings منتقل کنید.


چک‌لیست بسته‌بندی ماهانه عملی

در اینجا یک چک‌لیست قابل تکرار برای بسته‌بندی دفاتر هر ماه با استفاده از Beancount آورده شده است.

  • Capture: تمام تراکنش‌های بانکی و کارت‌اعتبار را وارد کنید. هر هزینه نقدی یا موارد خارج از باند را به‌صورت دستی وارد کنید.
  • Reconcile: ادعاهای balance را برای تمام حساب‌های بانکی، کارت‌های اعتباری و حساب‌های وام اضافه کنید و با صورت‌حساب‌ها مطابقت دهید.
  • Review: تراز آزمایشی بدون تنظیم را در Fava اسکن کنید. هر موجودی عجیب یا غیرمنتظره را بررسی کنید. فاکتورهای پرداخت‌نشده قدیمی (Assets:AccountsReceivable) یا صورتحساب‌های معوق (Liabilities:AccountsPayable) را بررسی کنید.
  • Adjust: ورودی‌های مربوط به درآمد/هزینه تعهدی، درآمد تعویقی و هر تصحیح لازم را ثبت کنید.
  • Validate: bean-check را اجرا کنید. تراز آزمایشی تنظیم‌شده نهایی را مرور کنید.
  • Publish: صورت سود و زیان و ترازنامه را تولید کنید. آن‌ها را برای ذینفعان ارسال کنید یا برای سوابق خود ذخیره کنید.
  • Wrap-up: در صورت نیاز به بسته شدن رسمی، ورودی بسته شدن را انجام دهید. یک نسخه از فایل‌های .beancount دوره را بایگانی کنید.

چرا Beancount برای دوره حسابداری می‌درخشد

  • شفافیت و قابلیت حسابرسی: دفتر کل شما یک فایل متنی است. می‌توانید از git برای کنترل نسخه تاریخچه مالی، مرور تغییرات با diff و همکاری با حسابدار خود در قالبی واضح و بدون ابهام استفاده کنید.
  • کنترل کامل: نمودار حساب‌های خود را تعریف می‌کنید. در ساختار نرم‌افزارهای تجاری قفل نمی‌شوید. داده‌های شما برای همیشه در قالب باز و مال شماست.
  • قدرت بی‌نظیر: ترکیب پرس‌و‌جوهای شبیه‑SQL (BQL) و رابط وب غنی (Fava) به شما قدرتی بی‌نظیر برای برش، خرد کردن و درک داده‌های مالی می‌دهد.

قطعه‌های کپی‑پست برای شروع

نمودار ساده حساب‌ها:

option "title" "My Personal Ledger"
option "operating_currency" "USD"

;; --- Accounts ---
1970-01-01 open Assets:Bank:Checking
1970-01-01 open Assets:AccountsReceivable
1970-01-01 open Liabilities:CreditCard
1970-01-01 open Liabilities:UnearnedRevenue
1970-01-01 open Equity:Owner:Capital
1970-01-01 open Equity:Retained-Earnings
1970-01-01 open Income:Consulting
1970-01-01 open Expenses:Office:Supplies
1970-01-01 open Expenses:Software
1970-01-01 open Expenses:Depreciation

پرس‌و‌جوی مفید BQL:

-- Find all customers with an outstanding balance
SELECT payee, sum(position)
WHERE account = 'Assets:AccountsReceivable'
GROUP BY payee
HAVING sum(position) > 0
ORDER BY sum(position) DESC;

با نگاشت دوره حسابداری بی‌زمان به ابزارهای مدرن متنی Beancount، سیستمی قوی، شفاف و ماندگار به دست می‌آورید. حسابداری خوشایند!