درک ثبتهای روزنامهای در Beancount
ثبتهای روزنامهای ستون فقرات حسابداری دوطرفه هستند و در Beancount، هر تراکنش *
که مینویسید یک ثبت روزنامهای است. این راهنما اصول اساسی—بدهکار و بستانکار، ثبتهای تعدیلکننده و معکوسکننده—را توضیح میدهد و نشان میدهد چگونه بهصورت تمیز به سینتکس متنی ساده Beancount مینقشند. شما یاد میگیرید چگونه با حداقل مراسم کتابهای دقیق داشته باشید.
مرور سریع: ثبت روزنامهای چیست؟
ثبت روزنامهای رکورد رسمی و تاریخدار یک معامله مالی است. این رکورد با بدهکار و بستانکار بیان میشود که معادله بنیادی حسابداری را متعادل نگه میدارند:
در یک سیستم دوطرفه، هر معامله حداقل دو حساب را تحت تأثیر قرار میدهد و مجموع بدهکارها باید برابر مجموع بستانکارها باشد. این قانون ساده است که گزارشهای مالی پاییندست مانند صورت سود و زیان و ترازنامه را قابل اعتماد و دقیق میکند.
بدهکار و بستانکار در یک دقیقه
مفهوم بدهکار و بستانکار در ابتدا میتواند گیجکننده باشد، اما به چند قانون ساده خلاصه میشود. اینگونه فکر کنید: «ارزش از کجا آمد؟» (بستانکار) و «ارزش به کجا رفت؟» (بدهکار).
در اینجا یک برگه تقلب برای نحوه افزایش پنج نوع حساب اصلی آورده شده است:
نوع حساب | افزایش با |
---|---|
داراییها | بدهکار |
هزینهها | بدهکار |
بدهیها | بستانکار |
حقوق مالکانه | بستانکار |
درآمد | بستانکار |
شکل یک ثبت روزنامهای در Beancount
Beancount از دستورات متنی ساده و قابل خواندن برای انسان استفاده میکند تا تراکنشها را ثبت کند. هر تراکنش باید برای هر کالا (مثلاً USD، EUR، سهام AAPL) به صفر متعادل شود. اگر اینطور نباشد، Beancount خطا میدهد.
در اینجا یک تراکنش پایه برای خرید قهوه آورده شده است:
2025-09-10 * "Coffee Bar" "Team coffee"
Expenses:Food:Coffee 18.00 USD
Assets:Bank:Checking -18.00 USD
دقت کنید که دو پست (خطهای حساب) به صفر میرسند: $18.00 + (-$18.00) = 0
.
شما میتوانید با استفاده از برچسبها (مانند #clientX
) برای فیلتر کردن و لینکها (مانند ^INV-2025-001
) برای ارتباط بین ورودیهای مرتبط، زمینه قدرتمندی را مستقیماً در روایت اضافه کنید.
به عنوان مثال، اینجا نحوه لینککردن یک فاکتور به پرداخت آن را میبینید:
; ابتدا فاکتور ارسالی به مشتری را ثبت میکنیم
2025-09-15 * "Acme Corp" "Invoice 2025-001 #clientX ^INV-2025-001"
Assets:AccountsReceivable 1000.00 USD
Income:Consulting -1000.00 USD
; سپس پرداخت را ثبت میکنیم و به فاکتور اصلی لینک میکنیم
2025-09-28 * "Acme Corp" "Payment on ^INV-2025-001"
Assets:Bank:Checking 1000.00 USD
Assets:AccountsReceivable -1000.00 USD
برچسب #clientX
به شما امکان میدهد بهراحتی تمام تراکنشهای این مشتری را فیلتر کنید و لینک ^INV-2025-001
ارتباطی بین دو ورودی ایجاد میکند که میتوانید در گزارشها دنبال کنید.
ثبتهای روزنامهای رایج (آماده برای کپی)
در ادامه چند تراکنش تجاری رایج به فرمت Beancount آورده شده است.
سرمایهگذاری نقدی توسط مالک
یک مالک برای راهاندازی کسبوکار، وجوه شخصی خود را سرمایهگذاری میکند.
2025-01-01 * "Owner" "Initial capital contribution"
Assets:Bank:Checking 10000.00 USD
Equity:Owner-Capital -10000.00 USD
فروش نقدی با مالیات فروش
یک مشتری بهصورت نقدی محصولی میخرد که شامل ۸٪ مالیات فروش است که بعداً باید به دولت پرداخت شود.
2025-01-05 * "Walk-in Customer" "Cash sale with 8% tax"
Assets:Cash 108.00 USD
Income:Sales -100.00 USD
Liabilities:Tax:Sales -8.00 USD
فروش اعتباری (فاکتور) و دریافت پرداخت
شما خدمتی ارائه میدهید و برای مشتری فاکتور میگیرید، سپس بعداً پرداخت را دریافت میکنید.
2025-01-10 * "Acme Corp" "Consulting invoice ^INV-2025-002"
Assets:AccountsReceivable 2500.00 USD
Income:Consulting -2500.00 USD
2025-01-30 * "Acme Corp" "Payment on ^INV-2025-002"
Assets:Bank:Checking 2500.00 USD
Assets:AccountsReceivable -2500.00 USD
هزینه با کارت اعتباری
شما لوازم اداری را با کارت اعتباری شرکت خریداری میکنید.
2025-01-12 * "OfficeMax" "Supplies on credit card"
Expenses:Office:Supplies 75.00 USD
Liabilities:CreditCard -75.00 USD
حقوق (مدل ساده)
شما حقوق کارکنان را پردازش میکنید و هزینه کل حقوق، کسورات مالیاتی کارمند و پرداخت خالص از حساب بانکی را ثبت میکنید.
2025-01-31 * "Payroll" "January wages and withholdings"
Expenses:Payroll:Wages 2000.00 USD
Liabilities:Taxes:Withheld -400.00 USD
Assets:Bank:Checking -1600.00 USD
استهلاک ماهانه
هزینه استهلاک ماهانه یک دارایی، مانند لپتاپ، را ثبت میکنید.
2025-01-31 * "Depreciation" "Laptop, straight-line"
Expenses:Depreciation 100.00 USD
Assets:Equipment:AccumDepr -100.00 USD
هزینه پیشپرداخت و استهلاک ماهانه
شما برای یک سال بیمه بهصورت پیشپرداخت هزینه میکنید، سپس هزینه یک ماه را بهعنوان هزینه شناسایی میکنید.
; 1. پرداخت حق بیمه سالانه
2025-01-01 * "InsureCo" "Annual insurance premium"
Assets:Prepaid:Insurance 1200.00 USD
Assets:Bank:Checking -1200.00 USD
; 2. شناسایی یک ماه هزینه در پایان ژانویه
2025-01-31 * "InsureCo" "Amortize 1/12 of insurance"
Expenses:Insurance 100.00 USD
Assets:Prepaid:Insurance -100.00 USD
درآمد نامعین و شناسایی ماهانه
یک مشتری برای اشتراک ۳ ماهه پیشپرداخت میکند. شما نقدینگی را ثبت میکنید و سپس یک ماه درآمد را شناسایی میکنید.
; 1. پیشپرداخت مشتری برای سرویس
2025-02-01 * "Subscriber" "3-month plan prepaid"
Assets:Bank:Checking 300.00 USD
Liabilities:Unearned:Subs -300.00 USD
; 2. شناسایی یک ماه درآمد پس از ارائه سرویس
2025-02-28 * "Recognition" "Recognize month 1 of 3"
Liabilities:Unearned:Subs 100.00 USD
Income:Subscriptions -100.00 USD
ذخیرهسازی بدهی مشکوک و حذف بدهی
شما برای فاکتورهای احتمالی غیرقابل وصول یک ذخیره ایجاد میکنید و سپس یک فاکتور معین را حذف میکنید.
; 1. ایجاد ذخیره بر پایه ۲٪ از حسابهای دریافتنی
2025-03-31 * "Provision" "2% of A/R for doubtful accounts"
Expenses:BadDebt 200.00 USD
Assets:AllowanceForDoubtful -200.00 USD
; 2. حذف فاکتور معینی که میدانید پرداخت نخواهد شد
2025-04-15 * "Write-off" "Customer XYZ invoice"
Assets:AllowanceForDoubtful 150.00 USD
Assets:AccountsReceivable -150.00 USD
موجودی دورهای و تنظیم هزینه کالای فروختهشده (COGS)
در پایان دوره، هزینه کالای فروختهشده را با تنظیم حساب موجودی محاسبه میکنید.
2025-03-31 * "COGS adjustment" "Periodic inventory method"
Expenses:COGS 4500.00 USD
Assets:Inventory -4500.00 USD
ثبتهای تعدیلکننده در مقابل ثبتهای معکوسکننده
ثبتهای تعدیلکننده در پایان یک دوره حسابداری (مثلاً ماه یا سهماهه) ثبت میشوند تا درآمدها و هزینهها به دورهای که واقعاً کسب یا صرف شدهاند، منطبق شوند. این شامل تعهدات، تعویقها و برآوردهایی مانند استهلاک میشود.
ثبتهای معکوسکننده ورودیهای اختیاری هستند که در اولین روز دوره جدید انجام میشوند و دقیقاً یک ثبت تعدیلکننده خاص از دوره قبلی را معکوس میکنند. هدف آن سادهسازی کتابداری است. با معکوس کردن یک تعهد، میتوانید تراکنش نقدی بعدی را بهصورت استاندارد ثبت کنید بدون اینکه به یاد داشته باشید آن را مقابل حساب بدهی قرار دهید.
مثال: تعهد هزینههای خدمات عمومی و معکوس آن
فرض کنید باید هزینه خدمات عمومی ژانویه را ثبت کنید، اما صورتحساب تا فوریه دریافت نمیشود.
; 1. تخمین هزینه در پایان ژانویه
2025-01-31 * "Accrual" "Estimate January utilities expense"
Expenses:Utilities 500.00 USD
Liabilities:Accrued:Utilities -500.00 USD
; 2. (اختیاری) معکوس کردن تعهد در اولین روز دوره بعدی
2025-02-01 * "Reversal" "Undo January utilities accrual"
Liabilities:Accrued:Utilities 500.00 USD
Expenses:Utilities -500.00 USD
; 3. ثبت پرداخت واقعی وقتی که در فوریه میرسد
; صورتحساب واقعی 520 دلار است. بهدلیل معکوسسازی میتوانید
; کل مبلغ را به حساب هزینه بزنید بدون مشکل.
; هزینه خالص فوریه برابر است با 520 - 500 = 20 دلار.
2025-02-10 * "City Utilities" "Payment for January bill"
Expenses:Utilities 520.00 USD
Assets:Bank:Checking -520.00 USD
توجه: مثال در طرح اصلی نشان میدهد که پرداخت نهایی تقسیم میشود. روش معکوسسازی یک گزینه برای سادهسازی ثبت نهایی است.
چکلیست برای هر ثبت روزنامهای در Beancount
این مراحل را دنبال کنید تا ورودیهای شما تمیز و صحیح باشند:
- با تاریخ (YYYY-MM-DD) و یک پرچم تراکنش (
*
) شروع کنید. - یک طرف حساب و یک شرح توصیفی اضافه کنید. از
#برچسبها
و^لینکها
برای جستجوپذیری استفاده کنید. - حداقل دو خط پست داشته باشید که برای هر کالا به صفر متعادل شوند.
- از نامهای حساب صحیح تحت پنج نوع استفاده کنید:
Assets
,Liabilities
,Equity
,Income
,Expenses
. - بهصورت اختیاری، متادیتا مانند
document: "invoices/INV-2025-001.pdf"
برای ردی ابی اضافه کنید.
اشتباهات رایج (و نحوه کمک Beancount)
- پستهای نامتعادل: اگر بدهکارها و بستانکارها به صفر نرسند، Beancount ورود را رد میکند. این ویژگی اصلی است که از خطاها جلوگیری میکند. حتی میتوانید یک مقدار را خالی بگذارید و Beancount بهصورت خودکار آن را محاسبه میکند.
- علامت نادرست روی حساب: بهراحتی میتوانید فراموش کنید که
Income
،Equity
وLiabilities
با بستانکار (که معمولاً در Beancount عدد منفی است) افزایش مییابند. اگر اشتباه کنید، گزارشهایتان عجیب بهنظر میرسند، اما قانون تعادل همچنان یک شبکه امنیتی فراهم میکند. - عدم وجود لینک بین ورودیها: فراموش کردن لینک فاکتور به پرداخت آن، ردیابی ماندهها را دشوار میکند. استفاده مداوم از
^لینکها
این مشکل را با ایجاد ردپای قابل حسابرسی حل میکند.
مسیرهای بعدی
- زبان Beancount و قوانین تعادل: به مستندات رسمی عمیقتر بپردازید.
- برگه تقلب سینتکس: مرجع مفیدی برای تمام دستورات Beancount.
- مقدمهای بر بدهکار/بستانکار: نقطه شروع عالی اگر با قوانین حسابداری تازهکار هستید.
- ثبتهای تعدیلکننده/معکوسکننده: مقالات دقیقتر درباره نظریه حسابداری.
پیوست: نقشهٔ اصطلاحات حسابداری → Beancount
این راهنمای ترجمه سریع میتواند به شما کمک کند تا دستورات حسابداری را به سینتکس Beancount تبدیل کنید.
دستور حسابداری | عمل Beancount |
---|---|
بدهکار کردن یک هزینه | مقدار مثبت به حساب Expenses: |
بستانکار کردن یک بدهی | مقدار منفی به حساب Liabilities: |
تعهد درآمد | Assets:AccountsReceivable + Income:* - |
تعویق درآمد | Assets:Bank:* + Liabilities:Unearned:* - |
شناسایی درآمد تعویقخورده | Liabilities:Unearned:* + Income:* - |
با این الگوها و مثالها میتوانید تقریباً هر رویداد تجاری را بهصورت تمیز در Beancount مدلسازی کنید و اطمینان حاصل کنید که گزارشهای مالیتان بدون شگفتیایی همراستا هستند.