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

3 پست با برچسب "double-entry accounting"

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

ثبت مالیات‌ها در Beancount (روش عملی)

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

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

در ادامه یک الگوی عملی، بدون حاشیه که می‌توانید در یک فایل Beancount شخصی یا کسب‌وکار کوچک بگنجانید، آورده شده است. این یک سیستم ساده برای مدیریت حقوق، پرداخت‌های مالیاتی و حتی آن بازپرداخت‌های مزاحمی است که به سال جدید می‌رسند. ما حساب‌های اساسی مورد نیاز را مرور می‌کنیم، مثال‌های واقعی را قدم‌به‑قدم می‌زنیم و دقیقاً پرس‌و‌جوهایی را که برای دریافت پاسخ‌ها نیاز دارید نشان می‌دهیم.

2025-08-25-recording-taxes-in-beancount


اصول اصلی

قبل از اینکه به کد بپردازیم، چند قانون ساده را بپذیریم. این اصول کارها را منطقی نگه می‌دارند و از سردردهای آینده جلوگیری می‌کنند.

  • «چه» را از «چه‌وقت» که پول حرکت می‌کند جدا کنید. 🗓️
    این مهم‌ترین مفهوم است. هزینه مالیاتی به سالی تعلق دارد که درآمد را کسب کرده‌اید (مثلاً ۲۰۲۴)، حتی اگر صورتحساب را در آوریل ۲۰۲۵ به IRS پرداخت کنید. اگر زمان هزینه را از زمان پرداخت نقدی جدا نکنید، گزارش‌های سال به‌سال شما به‌هم ریخته و گمراه‌کننده می‌شوند.

  • سلسله مراتب حساب‌های خود را ساده و کسل‌کننده نگه دارید. 📁
    حساب‌های خود را بر پایه نوع مالیات (مثلاً IncomeTax، SocialSecurity) به‌وضوح نام‌گذاری کنید. این کار پرس‌و‌جوهای شما را فوق‌العاده ساده می‌کند. نام حساب‌ها را با نام فروشنده یا شماره فرم‌ها مثل «W‑2» یا «1099» شلوغ نکنید؛ برای آن جزئیات از متادیتا و برچسب‌ها استفاده کنید.

  • برای تنظیمات پایان‑سال از روش تعهدی (accrual) استفاده کنید. ⚖️
    حتی برای یک دفتر شخصی، استفاده از یک ورودی تعهدی ساده در پایان سال پاک‌ترین راه برای دقیق کردن گزارش‌هاست. این به معنای شناسایی هزینه یا بازپرداخت در سال صحیح است، حتی اگر پول تا سال بعد جابه‌جا نشود. این یک گام کوچک اضافه است که بعداً شما را از انجام تمرینات ذهنی نجات می‌دهد.

  • برای خود آینده‌تان بنویسید. 🧠
    هدف شما وضوح است. فقط در صورتی جزئیات اضافی مثل سال مالیاتی را به نام حساب اضافه کنید که واقعاً پرس‌و‌جوهای شما را آسان‌تر می‌کند. از ایجاد مجموعه‌ای جدید از حساب‌ها برای هر سال (Expenses:Taxes:2024:Federal، Expenses:Taxes:2025:Federal و غیره) مگر اینکه دلیل قانع‌کننده‌ای داشته باشید، خودداری کنید. یک ساختار صاف اغلب مدیریت آسان‌تری دارد.


اسکلت حسابی حداقل

در اینجا یک مجموعه پایه‌ای از حساب‌ها برای شروع آورده شده است. این ساختار متمرکز بر ایالات متحده است، اما می‌توانید به‌راحتی نام‌ها را برای سیستم مالیاتی کشور خود تطبیق دهید. فقط این دستورات open را در فایل Beancount خود بگذارید.

; --- مالیات‌های فدرال درآمد و حقوقی ایالات متحده ---
; برای پولی که از حقوق شما کسر می‌شود
2024-01-01 open Expenses:Taxes:Federal:IncomeTax:Withheld USD
; برای پرداخت‌های تخمینی یا صورتحساب‌های روز مالیاتی که مستقیماً می‌پردازید
2024-01-01 open Expenses:Taxes:Federal:IncomeTax:Payments USD
; برای بازپرداخت‌های مالیاتی که دریافت می‌کنید
2024-01-01 open Expenses:Taxes:Federal:IncomeTax:Refunds USD

; مشارکت‌های FICA شما
2024-01-01 open Expenses:Taxes:Federal:SocialSecurity USD
2024-01-01 open Expenses:Taxes:Federal:Medicare USD

; --- سایر مالیات‌های رایج ---
; برای مالیات فروش/استفاده که در خریدها می‌پردازید
2024-01-01 open Expenses:Taxes:Sales USD

; --- حساب‌ها برای تنظیمات پایان‑سال (اختیاری اما توصیه‌شده!) ---
; حساب موقت برای مالیاتی که بدهکارید اما هنوز پرداخت نکرده‌اید
2024-01-01 open Liabilities:AccruedTaxes:Federal:Income USD
; حساب موقت برای بازپرداختی که حق دریافت آن را دارید اما هنوز دریافت نکرده‌اید
2024-01-01 open Assets:Tax:Receivable USD

این تنظیمات مالیات‌های کسر شده را از پرداخت‌های مستقیم و بازپرداخت‌ها جدا می‌کند و به‌راحتی می‌توانید ببینید پول شما دقیقاً به کجا رفته است. حساب‌های Liabilities و Assets سلاح مخفی ما برای نگه داشتن گزارش‌های پایان‑سال دقیق هستند.


مثال ۱: حقوق

بیایید یک حقوق معمولی را ثبت کنیم که مالیات‌ها به‌صورت خودکار کسر می‌شوند. کلید این است که ابتدا درآمد ناخالص را ثبت کنید، سپس نشان دهید که چگونه به‌صورت مالیات و پولی که واقعاً به حساب بانکی‌تان می‌رسد تقسیم شده است.

2025-07-15 * "Employer Inc." "Salary for first half of July"
Income:Work:Salary -6,000.00 USD
Expenses:Taxes:Federal:IncomeTax:Withheld 1,200.00 USD
Expenses:Taxes:Federal:SocialSecurity 372.00 USD
Expenses:Taxes:Federal:Medicare 87.00 USD
Assets:Cash:Checking 4,341.00 USD

این تراکنش واحد تمام داستان را می‌گوید:

  • شما ۶,۰۰۰ دلار درآمد ناخالص کسب کردید.
  • ۱,۲۰۰ دلار از آن به IRS برای مالیات فدرال درآمدی ارسال شد.
  • ۳۷۲ دلار به Social Security و ۸۷ دلار به Medicare رفت.
  • باقی‌مانده ۴,۳۴۱ دلار همان مبلغی است که به‌دست آوردید.

نکته حرفه‌ای: می‌توانید متادیتاهای استب‌استوب خود (مانند pay_period_end: "2025-07-15") را به تراکنش اضافه کنید تا ردپای حسابرسی آسان‌تری داشته باشید.


مثال ۲: پر کردن اظهارنامه (مشکل عبور سال)

سناریویی که مردم را سردرگم می‌کند این است: در آوریل ۲۰۲۵، شما در حال پر کردن مالیات ۲۰۲۴ خود هستید. پس از تمام کسرهای خود، متوجه می‌شوید که هنوز باید ۳,۰۰۰ دلار اضافه پرداخت کنید.

چگونه این را ثبت کنید؟ می‌خواهید هزینه به‌سوی ۲۰۲۴ محاسبه شود، اما پرداخت نقدی در ۲۰۲۵ انجام می‌شود. دو روش عالی برای این کار وجود دارد.

گزینه A: تعهدی دو‑مرحله‌ای دستی

این روش صرفاً با Beancount است، بدون نیاز به افزونه. یک فرآیند واضح دو‑مرحله‌ای است.

مرحله ۱: شناسایی هزینه در پایان سال مالیاتی.
در آخرین روز ۲۰۲۴، یک ورودی «true‑up» ایجاد می‌کنید. هنوز پولی جابه‌جا نمی‌شود؛ فقط هزینه را می‌شناسید و در یک حساب تعهدی موقت پارک می‌کنید.

2024-12-31 * "Federal income tax true-up for 2024"
Expenses:Taxes:Federal:IncomeTax:Payments 3,000.00 USD
Liabilities:AccruedTaxes:Federal:Income -3,000.00 USD

اکنون صورت سود و زیان ۲۰۲۴ شما این هزینه ۳,۰۰۰ دلاری را نشان می‌دهد.

مرحله ۲: ثبت پرداخت نقدی وقتی رخ می‌دهد.
در آوریل ۲۰۲۵، وقتی واقعاً پول را به IRS می‌فرستید، تعهد را پاک می‌کنید.

2025-04-15 * "IRS" "Payment for 2024 tax return"
Liabilities:AccruedTaxes:Federal:Income 3,000.00 USD
Assets:Cash:Checking -3,000.00 USD

گزارش‌های ۲۰۲۴ شما درست هستند و جریان نقدی ۲۰۲۵ نیز صحیح است. این همان الگو برای بازپرداخت هم کار می‌کند—فقط به جای حساب تعهدی از Assets:Tax:Receivable استفاده کنید.

گزینه B: خودکارسازی با افزونه

اگر ترجیح می‌دهید پرداخت را در یک تراکنش واحد بنویسید، افزونهٔ جامعه‌ای به نام beancount_reds_plugins.effective_date می‌تواند کمک کند. این افزونه به شما اجازه می‌دهد «effective date» متفاوتی برای یک خط آیتم تعیین کنید.

ابتدا افزونه را در فایل اصلی Beancount فعال کنید:
plugin "beancount_reds_plugins.effective_date"

سپس می‌توانید یک تراکنش واحد بنویسید. افزونه به‌صورت خودکار آن را پشت صحنه تقسیم می‌کند تا گزارش‌های شما دقیق باشند.

; یک ورودی؛ افزونه بقیه را مدیریت می‌کند
2025-04-15 * "IRS" "Payment for 2024 tax return"
Assets:Cash:Checking -3,000.00 USD
Expenses:Taxes:Federal:IncomeTax:Payments 3,000.00 USD
effective_date: 2024-12-31

در اینجا بخش نقدی در ۱۵ آوریل ۲۰۲۵ ثبت می‌شود، اما بخش هزینه به‌صورت بازگشتی به ۳۱ دسامبر ۲۰۲۴ اعمال می‌شود. همان نتیجهٔ گزینه A را با جریان کاری متفاوت به‌دست می‌آورید.


مالیات فروش چه می‌شود؟

برای اکثر دفاتر شخصی، مالیات فروش ساده است. اگر آن را بازپس نمی‌گیرید، فقط در هنگام خرید به‌عنوان هزینهٔ جداگانه تقسیم کنید.

2025-07-19 * "Local Grocery Store"
Expenses:Groceries 12.32 USD
Expenses:Taxes:Sales 1.28 USD
Assets:Cash:Checking -13.60 USD

این کار به‌راحتی به شما نشان می‌دهد در طول سال چه مقدار برای مالیات فروش هزینه می‌کنید. اگر کسب‌وکاری دارید که با VAT سروکار دارد، از یک سیستم رسمی‌تر با حساب‌های پرداختی و دریافتنی استفاده می‌کنید، اما اصل همان است.


پرس‌و‌جوهایی که واقعاً اجرا می‌کنید

کلید این ساختار این است که به‌دست آوردن پاسخ‌ها آسان باشد. در اینجا چند پرس‌و‌جوی BQL برای دیدن تصویر مالیاتی شما آورده شده است.

۱. کل مالیات فدرال درآمدی من برای ۲۰۲۴ چقدر بود؟

SELECT cost(sum(position))
WHERE account "Expenses:Taxes:Federal:IncomeTax"
AND date >= 2024-01-01 AND date < 2025-01-01;

۲. آن مجموع چگونه بین کسرهای مالیاتی، پرداخت‌ها و بازپرداخت‌ها تقسیم می‌شود؟

SELECT account, cost(sum(position))
WHERE account "Expenses:Taxes:Federal:IncomeTax"
AND date >= 2024-01-01 AND date < 2025-01-01
GROUP BY account
ORDER BY account;

۳. آیا بدهی‌های مالیاتی یا دریافتنی‌های معوقی دارم؟ (برای بررسی کارتان مفید است!)

SELECT account, units(sum(position))
WHERE account "Liabilities:AccruedTaxes" OR account "Assets:Tax"
GROUP BY account
ORDER BY account;

اگر این پرس‌و‌جو مقادیر غیرصفر برگرداند، به این معناست که تعهداتی دارید که هنوز تسویه نشده‌اند.


پرسش‌های سریع

  • آیا واقعاً به حساب‌های سالانه مثل Expenses:Taxes:2024 نیاز دارم؟
    احتمالاً نه. روش تعهدی (یا افزونه) ساختار حسابی صاف و خوانا را حفظ می‌کند. فقط در صورتی حساب‌های سالانه بسازید که برای پرس‌و‌جوهای خاص شما مفید باشد.

  • آیا Beancount می‌تواند مالیات‌های من را محاسبه کند؟
    به‌صورت مستقیم نه، اما می‌تواند داده‌ها را آماده کند. برخی کاربران پیشرفته اسکریپت‌هایی می‌نویسند تا نتایج پرس‌و‌جوی BQL را به نرم‌افزارهای محاسبه مالیات بفرستند؛ این کار برای برآورد بدهی در طول سال بسیار مفید است.

  • آیا این مشاورهٔ مالیاتی است؟
    نه. این فقط یک الگوی حسابداری برای سازماندهی داده‌هاست. حسابداری صحیح است، اما برای مشاورهٔ خاص به وضعیت خود حتماً با یک متخصص مالیاتی مشورت کنید.


چک‌لیست آماده برای استفاده

آماده‌اید تا شروع کنید؟

  1. اسکلت حسابی را به فایل Beancount خود اضافه کنید (و نام‌ها را برای کشور خود تطبیق دهید).
  2. حقوق‌ها را ثبت کنید؛ ابتدا درآمد ناخالص را بنویسید و سپس مالیات‌ها را جدا کنید.
  3. در پایان سال، هر تعهدی را با استفاده از حساب تعهدی/دارایی ثبت کنید (یا از افزونهٔ effective_date استفاده کنید).
  4. بازپرداخت‌ها را به‌عنوان دریافتنی‌ها پیگیری کنید و وقتی پول رسید، حساب را پاک کنید.
  5. پرس‌و‌جوهای BQL بالا را اجرا کنید تا مجموعها را پیش از پر کردن اظهارنامه بررسی کنید.

ساده، منسجم و ثابت بمانید؛ و فصل مالیاتی شما در نهایت فقط بخشی دیگر از داستان مالی شما خواهد بود—نه معمایی برای حل.

دوره حسابداری، به سبک 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، سیستمی قوی، شفاف و ماندگار به دست می‌آورید. حسابداری خوشایند!

مقایسه Beancount.io با نرم‌افزارهای حسابداری سنتی: کدام یک برای شما مناسب‌تر است؟

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

برای دهه‌ها، دنیای حسابداری کسب‌وکار تحت سلطه سیستم‌های بسته و مبتنی بر رابط کاربری گرافیکی (GUI) مانند QuickBooks، Xero و FreshBooks بوده است. آن‌ها استاندارد را تعیین کرده‌اند و سهولت استفاده و گردش‌های کاری بصری را ارائه می‌دهند که برای کاربران غیرفنی مناسب است. اما برای توسعه‌دهندگان، کاربران حرفه‌ای و هر کسی که برای شفافیت و کنترل مطلق ارزش قائل است، رویکردی کاملاً متفاوت پدیدار شده است: Beancount.io.

این مقاله مقایسه مستقیمی از Beancount.io با نرم‌افزارهای حسابداری سنتی ارائه می‌دهد. ما تفاوت‌های اصلی آن‌ها در فلسفه، انعطاف‌پذیری، هزینه و قابلیت نگهداری طولانی‌مدت را تجزیه و تحلیل می‌کنیم تا به شما در تصمیم‌گیری در مورد اینکه کدام سیستم واقعاً متناسب با نیازهای شماست، کمک کنیم.

2025-08-08-beancount-io-vs-traditional-accounting-software

۱. فلسفه و گردش کار

اساسی‌ترین تفاوت بین این دو رویکرد در فلسفه اصلی آن‌ها نهفته است.

Beancount.io Beancount.io بر اساس فلسفه حسابداری متن ساده ساخته شده است. در قلب آن، هر تراکنش مالی یک ورودی در یک فایل متنی ساده است. این مدل «حسابداری به عنوان کد» به سوابق قابل خواندن توسط انسان و قابل کنترل نسخه اولویت می‌دهد. داده‌های مالی شما در قالبی باز و بی‌زمان که کاملاً متعلق به شماست، قرار دارد - هرگز نمی‌تواند توسط یک فروشنده قفل شود. این گردش کار برای کاربرانی طراحی شده است که با ویرایشگرهای کد، سیستم‌های کنترل نسخه مانند Git و ابزارهای خط فرمان راحت هستند.

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

حکم: اگر به کنترل کامل، مالکیت داده‌ها، شفافیت و اتوماسیون اولویت می‌دهید، Beancount.io برنده قطعی است. اگر به رابط کاربری «کلیک و اجرا» با حداقل منحنی یادگیری نیاز دارید، نرم‌افزار سنتی طبیعی‌تر به نظر می‌رسد.

۲. انعطاف‌پذیری و سفارشی‌سازی

نرم‌افزار چقدر می‌تواند با نیازهای خاص شما سازگار شود؟

Beancount.io ۱۰۰٪ اسکریپت‌پذیر بودن، قدرت فوق‌العاده Beancount.io است. این نرم‌افزار به طور یکپارچه با پایتون ادغام می‌شود و به شما امکان می‌دهد به هر API متصل شوید، واکشی داده‌ها را از فیدهای بانکی به صورت خودکار انجام دهید، تراکنش‌ها را بر اساس قوانین پیچیده به صورت برنامه‌ریزی شده برچسب‌گذاری کنید و گزارش‌های سفارشی متناسب با مشخصات دقیق خود ایجاد کنید. توانایی شما برای گسترش و سفارشی‌سازی عملاً نامحدود است و عاری از هرگونه محدودیت اعمال شده توسط فروشنده است.

نرم‌افزار سنتی این پلتفرم‌ها مجموعه‌ای از ادغام‌ها را با ابزارهای محبوب مانند PayPal، Stripe و سرویس‌های مختلف حقوق و دستمزد ارائه می‌دهند. اگرچه راحت است، اما شما در باغ محصور فروشنده فعالیت می‌کنید. سفارشی‌سازی محدود به چیزی است که پلتفرم اجازه می‌دهد و گزارش‌دهی پیشرفته یا اتوماسیون اغلب نیاز به ارتقاء به طرح سطح بالاتر یا خرید افزونه‌های شخص ثالث دارد. می‌توانید با APIهای آن‌ها کار کنید، اما همیشه به قوانین و محدودیت‌های نرخ اکوسیستم آن‌ها محدود خواهید شد.

حکم: Beancount.io انعطاف‌پذیری بی‌نظیری را برای توسعه‌دهندگان و کاربران فنی فراهم می‌کند. ابزارهای سنتی برای گردش‌های کاری استاندارد و plug-and-play با برنامه‌های تجاری محبوب مناسب‌تر هستند.

۳. همکاری و شفافیت

نحوه کار شما با دیگران و حسابرسی سوابق شما به طور قابل توجهی متفاوت است.

Beancount.io همکاری در Beancount.io از طریق Git مدیریت می‌شود. این امر باعث می‌شود که هر تغییری در دفتر کل مالی شما کاملاً شفاف و قابل حسابرسی باشد. می‌توانید ببینید چه کسی، چه چیزی را، چه زمانی و چرا تغییر داده است - درست مانند گردش کار بررسی کد. این برای تیم‌های توزیع‌شده که از ابزارهایی مانند GitHub یا GitLab استفاده می‌کنند، ایده‌آل است. علاوه بر این، هیچ محاسبه پنهانی وجود ندارد. هر عدد در یک گزارش را می‌توان به ورودی دقیق ردیف در فایل دفتر کل شما ردیابی کرد و از حسابرسی کامل اطمینان حاصل کرد.

نرم‌افزار سنتی همکاری از طریق نقش‌ها و مجوزهای کاربر داخلی مدیریت می‌شود. می‌توانید حسابدار، دفتردار یا شرکای تجاری خود را دعوت کنید تا مستقیماً از طریق رابط وب به دفاتر دسترسی داشته باشند. این برای مشاغلی که از مدل سنتی نظارت مالی پیروی می‌کنند بسیار مؤثر است. نکته منفی این است که برخی از عملیات داخلی، مانند محاسبات مالیات یا تنظیمات خودکار موجودی، می‌توانند «جعبه‌های سیاه» مات باشند و تأیید مستقل منطق را دشوار می‌کنند.

حکم: Beancount.io برای تیم‌هایی که برای حسابرسی دقیق و همکاری به سبک کد ارزش قائل هستند، عالی است. سیستم‌های سنتی برای دسترسی GUI مشترک و بلادرنگ، حسابدارپسندتر هستند.

۴. هزینه و مالکیت

مدل‌های مالی و مفهوم مالکیت داده‌ها دنیایی از هم جدا هستند.

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

نرم‌افزار سنتی این سرویس‌ها بر اساس مدل اشتراک کار می‌کنند که معمولاً ماهانه یا سالانه صورتحساب می‌شوند. قیمت‌گذاری اغلب بر اساس ویژگی‌ها طبقه‌بندی می‌شود و ممکن است با هزینه‌های هر کاربر یا هر شرکت که با سازمان شما مقیاس می‌شوند، مواجه شوید. این وابستگی ایجاد می‌کند. اگر پرداخت را متوقف کنید، خطر از دست دادن دسترسی به داده‌های خود و عملکرد نرم‌افزار را دارید. این قفل فروشنده یک خطر قابل توجه در درازمدت است.

حکم: Beancount.io در درازمدت به طور قابل توجهی مقرون به صرفه‌تر است، به ویژه برای تیم‌های فنی که برای حاکمیت داده‌ها ارزش قائل هستند. نرم‌افزار سنتی هزینه‌های اشتراک قابل پیش‌بینی را ارائه می‌دهد اما وابستگی طولانی‌مدت ایجاد می‌کند.

۵. منحنی یادگیری و پذیرش

چقدر سریع می‌توانید شروع به کار کنید؟

Beancount.io منحنی یادگیری بدون شک شیب‌دارتر است. پذیرش این سیستم مستلزم راحتی با ویرایش مبتنی بر متن، درک نحو اولیه و آشنایی با ابزارهایی مانند Git است. با این حال، سرمایه‌گذاری اولیه نتیجه می‌دهد. پس از تسلط، Beancount گردش‌های کاری فوق‌العاده سریع و تکرارپذیر را فعال می‌کند و درک عمیق‌تر و اساسی‌تری از تصویر مالی شما ارائه می‌دهد.

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

حکم: اگر مایل به سرمایه‌گذاری زمان برای یادگیری یک سیستم قدرتمند هستید، Beancount.io انتخاب مناسبی است. نرم‌افزار سنتی برای کاربران غیرفنی که به نتایج فوری نیاز دارند، سریع‌تر شروع می‌شود.

مقایسه کنار هم

ویژگیBeancount.ioنرم‌افزار حسابداری سنتی
فلسفه اصلیحسابداری به عنوان کد؛ دفتر کل متن سادهمبتنی بر رابط کاربری گرافیکی؛ فرم محور
قالب دادهباز (متن ساده)اختصاصی (پایگاه داده)
مالکیت داده۱۰۰٪ متعلق به کاربر و قابل حملکنترل شده توسط فروشنده؛ قفل احتمالی
انعطاف‌پذیرینامحدود؛ کاملاً اسکریپت‌پذیر با پایتونمحدود به اکوسیستم و APIهای فروشنده
همکاریمبتنی بر Git؛ تاریخچه تغییرات شفافمجوزهای کاربر مبتنی بر نقش
شفافیتکاملاً قابل حسابرسی؛ بدون محاسبات پنهانبرخی از محاسبات می‌توانند مات باشند
مدل هزینههسته متن‌باز؛ پرداخت برای میزبانی/اتوماسیوناشتراک ماهانه/سالانه (SaaS)
منحنی یادگیریبرای کاربران غیرفنی شیب‌دارترکم؛ برای شروع سریع طراحی شده است
کاربر ایده‌آلتوسعه‌دهندگان، کاربران حرفه‌ای، تحلیلگران دادهصاحبان SMB، تیم‌های غیرفنی

چه زمانی هر کدام را انتخاب کنیم

تصمیم نهایی به مهارت‌ها، اولویت‌ها و گردش کار تیم شما بستگی دارد.

Beancount.io را انتخاب کنید اگر:

  • توسعه‌دهنده، تحلیلگر داده یا کاربر حرفه‌ای با گرایش فنی هستید.
  • برای شفافیت مطلق، کنترل و قابلیت حمل داده‌های بلندمدت بیش از هر چیز دیگری ارزش قائل هستید.
  • می‌خواهید حسابداری خود را به طور کامل خودکار کنید و آن را عمیقاً در گردش‌های کاری سفارشی خود ادغام کنید.
  • با برخورد با سوابق مالی خود با همان دقت کد منبع راحت هستید.

نرم‌افزار حسابداری سنتی را انتخاب کنید اگر:

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

افکار نهایی

Beancount.io سعی نمی‌کند QuickBooks بهتری باشد - این یک روش اساساً متفاوت برای تفکر است. این حسابداری را به عنوان کد نشان می‌دهد. برای متخصصان فنی، این تغییر همان جهش رو به جلویی را ارائه می‌دهد که کنترل نسخه با Git برای توسعه نرم‌افزار به ارمغان آورد: شفافیت کامل، تکرارپذیری کامل و کنترل نهایی.

در عین حال، نرم‌افزار حسابداری سنتی همچنان در سهولت استفاده از جعبه و ادغام‌های آماده برای تیم‌های غیرفنی برنده است. انتخاب درست در مورد اینکه کدام یک به طور کلی «بهتر» است نیست، بلکه در مورد اینکه کدام یک برای گردش کار شما، اولویت‌های شما و میزان کنترلی که بر داده‌های مالی خود می‌طلبید، مناسب است.