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

حساب‌های پرداختنی چیست؟ تعریف، مثال‌ها و تفاوت AP و AR (۲۰۲۶)

منتشر شده آخرین بهروزرسانی زمان مطالعه 19 دقیقهMike ThriftMike Thrift
حساب‌های پرداختنی چیست؟ تعریف، مثال‌ها و تفاوت AP و AR (۲۰۲۶)
فهرست مطالب این صفحه

حساب‌های پرداختنی (AP) پولی است که کسب‌وکار شما به تأمین‌کنندگان خود برای کالاها یا خدماتی که قبلاً دریافت کرده‌اید اما هنوز پرداخت نکرده‌اید، بدهکار است. در دنیای حسابداری، AP به‌عنوان یک بدهی جاری در ترازنامه شما طبقه‌بندی می‌شود—مبلغی که معمولاً ظرف یک سال آینده و اغلب طی ۳۰ تا ۶۰ روز باید پرداخت شود.

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


خلاصه سریع

قبل از پرداختن به جزئیات، اجازه دهید موارد ضروری را پوشش دهیم:

  • حساب‌های پرداختنی (AP) نشان‌دهنده بدهی‌های کوتاه‌مدت شما به فروشندگان است. آن را در بخش Liabilities ترازنامه خود خواهید یافت.
  • تعهدی در مقابل نقدی: AP مفهومی است که فقط در صورت نگهداری دفاتر بر مبنای تعهدی وجود دارد. Beancount کاملاً از گردش‌های کاری تعهدی پشتیبانی می‌کند و رابط وب آن، Fava، بدهی‌های شما را به‌درستی نمایش می‌دهد.
  • AP در مقابل AR: ساده است: پرداختنی‌ها چیزهایی هستند که شما بدهکارید، در حالی که دریافتنی‌ها (AR) چیزهایی هستند که دیگران به شما بدهکارند.

محل قرارگیری AP در Beancount (و Fava)

برای شروع پیگیری AP، ابتدا باید یک حساب برای آن در دفتر کل خود تعریف کنید. یک قرارداد استاندارد این است:

Liabilities:AccountsPayable

می‌توانید به‌صورت اختیاری زیرحساب‌هایی برای فروشندگان اصلی ایجاد کنید (مثلاً Liabilities:AccountsPayable:ForestPaintSupply).

در Fava، این حساب در ترازنامه شما تحت Liabilities ظاهر می‌شود. می‌توانید روی آن کلیک کنید تا جزئیات را ببینید و اقلام ثبت‌شده‌ای که مانده حساب را تشکیل می‌دهند مشاهده کنید. حتی می‌توانید این را در دفتر کل مثال عمومی Fava ببینید که شامل یک حساب Liabilities:AccountsPayable است.

قرارداد علامت: Beancount مانده بدهی‌ها را به‌صورت بستانکار (اعداد منفی) ذخیره می‌کند. مانده -500.00 USD در Liabilities:AccountsPayable به این معنی است که شما $۵۰۰ بدهکارید. گزارش اقلام باز زیر علامت را با -SUM(number) معکوس می‌کند تا هر صورتحساب پرداخت‌نشده یک مبلغ باقیمانده مثبت نشان دهد. یک صورتحساب کاملاً تسویه‌شده به صفر جمع می‌شود و توسط HAVING حذف می‌شود.


اجزای سازنده Beancount که استفاده خواهید کرد

یک گردش کار قوی AP در Beancount بر چند ویژگی اصلی تکیه دارد:

  1. حساب‌ها: شما عمدتاً از حساب Liabilities:AccountsPayable، یک حساب نقدی مانند Assets:Bank:Checking و حساب‌های هزینه مختلف خود (مثلاً Expenses:Supplies) استفاده خواهید کرد.
  2. فراداده: می‌توانید داده‌های کلید-مقدار را به هر تراکنش پیوست کنید. برای AP، از فراداده‌هایی مانند invoice:، due:، terms: و document: استفاده خواهید کرد. option "documents" را روی یک پوشه تنظیم کنید تا Beancount بتواند فایل‌ها را آنجا شناسایی کند؛ در Fava، رها کردن یک فایل روی یک ردیف دفتر کل، یک ورود فراداده document: درج می‌کند و فعال کردن plugin "fava.plugins.link_documents" آن ورودی‌ها را به دستورات Document شناسایی‌شده پیوند می‌دهد.
  3. برچسب‌ها و پیوندها: از #tags (مانند #ap) برای فیلتر کردن آسان و ^links (مانند ^INV-10455) برای اتصال برنامه‌نویسانه یک صورتحساب و پرداخت بعدی آن استفاده کنید. این یک مسیر حسابرسی واضح و قابل پیگیری در دفتر کل ایجاد می‌کند—اما پیوندها به تنهایی برای پرس‌وجوی صورتحساب باز زیر کافی نیستند.
  4. پرس‌وجوها (BQL): زبان پرس‌وجوی شبیه SQL بی‌کانت (BQL) به شما امکان می‌دهد گزارش‌های قدرتمندی اجرا کنید، مانند فهرست کردن تمام پرداختنی‌های باز مرتب‌شده بر اساس تاریخ سررسید، مستقیماً از خط فرمان با bean-query یا در صفحه "Query" فاوا.

هویت صورتحساب (الزامی برای پرس‌وجوهای صورتحساب باز): هر صورتحساب و هر پرداخت تسویه‌کننده—کامل، جزئی یا با تخفیف زودهنگام—باید همان فراداده تراکنش invoice: و due: را به همراه همان ^link داشته باشد. پرس‌وجو بر اساس payee، any_meta('invoice') و any_meta('due') گروه‌بندی می‌شود. اگر پرداختی آن کلیدها را حذف کند، ثبت AP آن در یک گروه جداگانه (payee, null, null) قرار می‌گیرد و یک صورتحساب تسویه‌شده همچنان باز به نظر می‌رسد. (payee, invoice) را در بین فروشندگان یکتا نگه دارید. فیلدهای اختیاری مخصوص صورتحساب مانند terms: و document: نیازی به تکرار روی پرداخت‌ها ندارند.


گردش کار اصلی AP در Beancount

مدیریت AP در دفتر کل شما شامل دو یا سه مرحله کلیدی است: ثبت صورتحساب، پرداخت آن و گاهی مدیریت پرداخت‌های جزئی یا تخفیف‌ها.

۱) ثبت صورتحساب فروشنده (این بدهی را ایجاد می‌کند)

ابتدا، وقتی صورتحساب می‌رسد، هزینه را ثبت کرده و پرداختنی را ایجاد می‌کنید.

; Optionally set your documents folder in your main Beancount file:
option "documents" "documents"
 
2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
  invoice: "INV-10455"
  due: "2025-09-04"
  terms: "2/10, n/30"
  document: "invoices/2025-08-05-forest-paint-INV-10455.pdf"
  Expenses:Supplies:Paint         500.00 USD
  Liabilities:AccountsPayable    -500.00 USD

این ورود واحد دو کار حیاتی انجام می‌دهد:

  1. بلافاصله هزینه $۵۰۰ را در دوره صحیح (اوت) شناسایی می‌کند—فقط یک بار. هزینه را در زمان پرداخت دوباره ثبت نکنید.
  2. به AP مبلغ $۵۰۰ بستانکار می‌کند (-500.00 USD)، و ثبت می‌کند که آن مبلغ را به Forest Paint Supply بدهکارید.

پیوند ^INV-10455 به همراه فراداده invoice: / due: هویت صورتحساب را تشکیل می‌دهند. هر پرداخت بعدی این صورتحساب باید هر سه مورد را دوباره استفاده کند.

۲) پرداخت صورتحساب (این بدهی را تسویه می‌کند)

وقتی صورتحساب را پرداخت می‌کنید، تراکنشی ایجاد می‌کنید که پول را از حساب بانکی شما برای تسویه بدهی منتقل می‌کند. invoice: و due: را از صورتحساب روی پرداخت کپی کنید تا هر دو ثبت یک گروه پرس‌وجو مشترک داشته باشند.

الف) پرداخت استاندارد (بدون تخفیف):

2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
  invoice: "INV-10455"
  due: "2025-09-04"
  Liabilities:AccountsPayable     500.00 USD
  Assets:Bank:Checking           -500.00 USD

این ورود مانده AP شما را به اندازه $۵۰۰ و مانده حساب چکی شما را به همان میزان کاهش می‌دهد. بدهی این صورتحساب اکنون تسویه شده است (مجموع AP گروه صفر است). هزینه روی صورتحساب اوت باقی می‌ماند—پرداخت به Expenses: دست نمی‌زند.

ب) تخفیف پرداخت زودهنگام (مثلاً "2/10, n/30")—دقیقاً یک روش را انتخاب کنید:

اگر شرایط "2/10, n/30" باشد، اگر ظرف ۱۰ روز پرداخت کنید، می‌توانید ۲٪ تخفیف بگیرید. برای صورتحساب $۵۰۰ ما، این یک تخفیف $۱۰ است. کد زیر دو جایگزین متقابل انحصاری نشان می‌دهد: گزینه ۱ فعال است؛ گزینه ۲ کاملاً کامنت شده است تا یک paste نتواند هر دو را ثبت کند. برای استفاده از گزینه ۲ به جای آن، گزینه ۱ را کامنت کرده و گزینه ۲ را از کامنت خارج کنید. هرگز هر دو را فعال نگذارید—این کار AP را دو بار تسویه می‌کند و منفعت $۱۰ دومی اختراع می‌کند. اینکه از کدام حساب درآمد در مقابل هزینه استفاده می‌کنید، یک انتخاب سیاست حسابداری برای دفاتر شماست؛ Beancount یکی را بر دیگری الزام نمی‌کند.

; Pick EXACTLY ONE of the two transactions below for a given invoice.
; Do not paste both into the same ledger — that clears AP twice.
 
; Option 1: Record the discount as other income
2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
  invoice: "INV-10455"
  due: "2025-09-04"
  Liabilities:AccountsPayable     500.00 USD
  Assets:Bank:Checking           -490.00 USD
  Income:Discounts:Payables       -10.00 USD
 
; Option 2: Reduce the original expense directly
; 2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
;   invoice: "INV-10455"
;   due: "2025-09-04"
;   Liabilities:AccountsPayable     500.00 USD
;   Assets:Bank:Checking           -490.00 USD
;   Expenses:Supplies:Paint         -10.00 USD

در هر یک از دو جایگزین به تنهایی، کل بدهی $۵۰۰ را تسویه می‌کنید، مانده بانکی خود را به اندازه $۴۹۰ که واقعاً پرداخت کرده‌اید کاهش می‌دهید و منفعت $۱۰ را حساب می‌کنید. تراکنش پرداخت کامل استاندارد را با جایگزین انتخاب‌شده عوض کنید—پرداخت تخفیف را روی پرداخت نقدی $۵۰۰ سوار نکنید و این کد را با بخش ۲الف برای همان صورتحساب ترکیب نکنید.

۳) مدیریت پرداخت‌های جزئی

در هر قسط از همان هویت invoice: / due: / ^link استفاده کنید تا هر پرداخت همان گروه صورتحساب باز را کاهش دهد.

; Invoice for $1,200
2025-08-10 * "Acme Parts" "INV-9001" ^INV-9001
  invoice: "INV-9001"
  due: "2025-09-09"
  Expenses:Parts                 1200.00 USD
  Liabilities:AccountsPayable   -1200.00 USD
 
; First payment of $400
2025-08-20 * "Acme Parts" "Payment INV-9001 (1/3)" ^INV-9001
  invoice: "INV-9001"
  due: "2025-09-09"
  Liabilities:AccountsPayable     400.00 USD
  Assets:Bank:Checking           -400.00 USD
 
; Final payment of $800
2025-09-05 * "Acme Parts" "Payment INV-9001 (final)" ^INV-9001
  invoice: "INV-9001"
  due: "2025-09-09"
  Liabilities:AccountsPayable     800.00 USD
  Assets:Bank:Checking           -800.00 USD

پس از پرداخت اول، مجموع AP گروه صورتحساب -800.00 USD است (هنوز $۸۰۰ بدهکارید). پس از پرداخت نهایی صفر می‌شود. فیلتر کردن دفتر کل با ^INV-9001 همچنان تاریخچه کامل را نشان می‌دهد.


پرس‌وجوهای مفید (BQL)

می‌توانید این پرس‌وجوها را در تب "Query" فاوا یا از خط فرمان با bean-query اجرا کنید (مرجع BQL). در زیر با Beancount 3.2.3 و beanquery 0.2.0 تأیید شده است.

نکته: تابع any_meta() ابتدا یک کلید فراداده را روی ثبت (posting) جستجو می‌کند و سپس به تراکنش برمی‌گردد—بنابراین مقادیر invoice: / due: در سطح تراکنش در مجموعه نتایج ظاهر می‌شوند.

AP باز بر اساس فروشنده (نمای مانده):

این پرس‌وجو موجودی بدهی هر تأمین‌کننده را جمع می‌زند. مجموع بستانکار (منفی) همان چیزی است که هنوز به آن فروشنده بدهکارید.

SELECT payee, COST(SUM(position)) AS amount
WHERE account ~ "^Liabilities:AccountsPayable"
GROUP BY payee
ORDER BY payee;

صورتحساب‌های باز تا تاریخ مشخص (گزارش اقلام باز):

گزارش اقلام باز به این سؤال پاسخ می‌دهد که «چه چیزی پرداخت‌نشده باقی مانده است؟» باید (۱) در یک تاریخ مبنای صریح قطع شود تا پرداخت‌های بعدی نتوانند یک snapshot قبلی را بی‌صدا پاک کنند، (۲) بر اساس هویت صورتحساب مشترک (payee + invoice: + due:) گروه‌بندی شود، (۳) گروه‌های تسویه‌شده (صفر) را حذف کند و (۴) یک مبلغ باقیمانده مثبت نشان دهد—نه یک بستانکار AP امضا‌شده خام.

تاریخ گزارش‌دهی که در سراسر زیر استفاده شده است: 2025-09-04.

دفتر کل شروع‌کننده AP قابل دانلود

accounts-payable-starter.bean را دانلود کنید—یک دفتر کل خودکفا که از کد کامل زیر تولید شده است (افتتاح حساب‌ها، وجه نقد افتتاحیه فرضی، صورتحساب‌های تسویه‌شده / جزئی / پرداخت‌نشده، تا تاریخ 2025-09-04). هر نام و مبلغ داده نمونه فرضی است. هیچ PDF صورتحساب، پوشه اسناد یا فایل دیگری برای اعتبارسنجی یا پرس‌وجو از آن لازم نیست.

اجرای اول از یک پوشه موقت تمیز (با پین Beancount 3.2.3 / beanquery 0.2.0):

# Save the download as accounts-payable-starter.bean in this directory, then:
uvx --from beancount==3.2.3 bean-check accounts-payable-starter.bean
 
uvx --from beanquery==0.2.0 --with beancount==3.2.3 bean-query accounts-payable-starter.bean \
  "SELECT payee, any_meta('invoice') AS invoice, any_meta('due') AS due, -SUM(number) AS outstanding WHERE account ~ '^Liabilities:AccountsPayable' AND date <= 2025-09-04 GROUP BY payee, invoice, due HAVING SUM(number) < 0 ORDER BY due, payee"

bean-check با کد خروج ۰ و بدون خروجی خارج می‌شود. پرس‌وجو پنج ردیف باز را در جدول مورد انتظار زیر برمی‌گرداند (Forest غایب است؛ Acme باقیمانده 800.00؛ مجموع باقیمانده‌های مثبت = 1500.00). دانلود تعهد‌شده را با yarn generate:ap-starter پس از ویرایش کد بازتولید کنید؛ yarn generate:ap-starter --check اگر مصنوع کهنه باشد ناموفق می‌شود.

این فیکسچر کامل را paste کنید (افتتاح‌ها + وجه نقد افتتاحیه + سه شکل صورتحساب، به علاوه ردیف‌های سررسید-امروز / معوق / لبه برای پیری). جایگزین‌های تخفیف زودهنگام برای INV-10455 کاملاً کامنت می‌مانند—دقیقاً یکی را فقط در صورتی فعال کنید که پرداخت استاندارد Forest را جایگزین کنید؛ هرگز هر دو گزینه تخفیف را همراه با آن پرداخت فعال نگذارید.

; accounts-payable-starter — complete runnable AP workflow
option "operating_currency" "USD"
 
2025-01-01 open Assets:Bank:Checking USD
2025-01-01 open Equity:Opening-Balances USD
2025-01-01 open Liabilities:AccountsPayable USD
2025-01-01 open Expenses:Supplies:Paint USD
2025-01-01 open Expenses:Parts USD
2025-01-01 open Expenses:Office USD
2025-01-01 open Income:Discounts:Payables USD
 
; Fictional opening cash — enough to cover every payment in this ledger
2025-01-01 * "Opening balance"
  Assets:Bank:Checking           5000.00 USD
  Equity:Opening-Balances       -5000.00 USD
 
; Settled before as-of — must disappear from the open report
2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
  invoice: "INV-10455"
  due: "2025-09-04"
  Expenses:Supplies:Paint         500.00 USD
  Liabilities:AccountsPayable    -500.00 USD
 
2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
  invoice: "INV-10455"
  due: "2025-09-04"
  Liabilities:AccountsPayable     500.00 USD
  Assets:Bank:Checking           -500.00 USD
 
; Early-payment discount alternatives for INV-10455 — mutually exclusive with
; the standard payment above AND with each other. To take 2/10 instead: delete
; (or comment out) the 2025-09-01 payment, then uncomment EXACTLY ONE option.
; Never leave both options active — that clears AP twice.
;
; Option 1: Record the discount as other income
; 2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
;   invoice: "INV-10455"
;   due: "2025-09-04"
;   Liabilities:AccountsPayable     500.00 USD
;   Assets:Bank:Checking           -490.00 USD
;   Income:Discounts:Payables       -10.00 USD
;
; Option 2: Reduce the original expense directly
; 2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
;   invoice: "INV-10455"
;   due: "2025-09-04"
;   Liabilities:AccountsPayable     500.00 USD
;   Assets:Bank:Checking           -490.00 USD
;   Expenses:Supplies:Paint         -10.00 USD
 
; Partial before as-of; final $800 payment is AFTER 2025-09-04
2025-08-10 * "Acme Parts" "INV-9001" ^INV-9001
  invoice: "INV-9001"
  due: "2025-09-09"
  Expenses:Parts                 1200.00 USD
  Liabilities:AccountsPayable   -1200.00 USD
 
2025-08-20 * "Acme Parts" "Payment INV-9001 (1/3)" ^INV-9001
  invoice: "INV-9001"
  due: "2025-09-09"
  Liabilities:AccountsPayable     400.00 USD
  Assets:Bank:Checking           -400.00 USD
 
2025-09-05 * "Acme Parts" "Payment INV-9001 (final)" ^INV-9001
  invoice: "INV-9001"
  due: "2025-09-09"
  Liabilities:AccountsPayable     800.00 USD
  Assets:Bank:Checking           -800.00 USD
 
; Unpaid — not yet due as of 2025-09-04
2025-08-15 * "Bright Office Co" "INV-220" ^INV-220
  invoice: "INV-220"
  due: "2025-09-14"
  Expenses:Office                 300.00 USD
  Liabilities:AccountsPayable    -300.00 USD
 
; Unpaid — due today (as-of == due)
2025-08-20 * "Helix Industries" "INV-440" ^INV-440
  invoice: "INV-440"
  due: "2025-09-04"
  Expenses:Parts                  200.00 USD
  Liabilities:AccountsPayable    -200.00 USD
 
; Unpaid — 30 days overdue as of 2025-09-04
2025-07-06 * "Metro Hardware" "INV-77" ^INV-77
  invoice: "INV-77"
  due: "2025-08-05"
  Expenses:Parts                  150.00 USD
  Liabilities:AccountsPayable    -150.00 USD
 
; Overpayment — credit balance (not an amount due; see edge cases)
2025-08-01 * "Credit Vendor" "INV-C1" ^INV-C1
  invoice: "INV-C1"
  due: "2025-08-20"
  Expenses:Parts                  100.00 USD
  Liabilities:AccountsPayable    -100.00 USD
 
2025-08-18 * "Credit Vendor" "Overpay INV-C1" ^INV-C1
  invoice: "INV-C1"
  due: "2025-08-20"
  Liabilities:AccountsPayable     150.00 USD
  Assets:Bank:Checking           -150.00 USD
 
; Missing due metadata — still open; age into a separate bucket, do not drop
2025-08-12 * "No Due Co" "INV-ND" ^INV-ND
  invoice: "INV-ND"
  Expenses:Office                  50.00 USD
  Liabilities:AccountsPayable     -50.00 USD

پرس‌وجوی اقلام باز (beanquery 0.2.0 از HAVING SUM(number) < 0 پشتیبانی می‌کند؛ از مقایسه یک inventory با 0 با COST(SUM(position)) != 0 پشتیبانی نمی‌کند):

SELECT payee,
       any_meta('invoice') AS invoice,
       any_meta('due')     AS due,
       -SUM(number)        AS outstanding
WHERE account ~ "^Liabilities:AccountsPayable"
  AND date <= 2025-09-04
GROUP BY payee, invoice, due
HAVING SUM(number) < 0
ORDER BY due, payee;

ردیف‌های مورد انتظار تا 2025-09-04 (به‌طور مستقل از تراکنش‌ها مشتق شده است: صورتحساب − پرداخت‌های تاریخ‌گذاری ≤ تاریخ مبنا؛ Forest به صفر می‌رسد و غایب است):

payeeinvoicedueoutstanding
No Due CoINV-ND(خالی)50.00
Metro HardwareINV-772025-08-05150.00
Helix IndustriesINV-4402025-09-04200.00
Acme PartsINV-90012025-09-09800.00
Bright Office CoINV-2202025-09-14300.00

مجموع باقیمانده‌های مثبت = 1,500.00. صورتحساب $۵۰۰ Forest حذف شده است. Acme همچنان $۸۰۰ نشان می‌دهد ($۱٬۲۰۰ − $۴۰۰)؛ پرداخت $۸۰۰ در 2025-09-05 بعد از تاریخ مبنا است، بنابراین نمی‌تواند این snapshot را ببندد.

تطبیق با بدهی AP در همان نقطه برش:

SELECT COST(SUM(position)) AS ap_balance
WHERE account ~ "^Liabilities:AccountsPayable"
  AND date <= 2025-09-04;

مورد انتظار: ap_balance = (-1450.00 USD). به‌طور مستقل: باقیمانده باز $۱٬۵۰۰ منهای بستانکار فروشنده $۵۰ (در زیر) = $۱٬۴۵۰ بدهی ← موجودی بدهی -1450.00 USD.

تاریخ مبنا را یک روز بعد ببرید (date <= 2025-09-05) و پرس‌وجوی اقلام باز را دوباره اجرا کنید: ردیف Acme ناپدید می‌شود (پرداخت نهایی شامل می‌شود) و ap_balance به (-650.00 USD) تبدیل می‌شود. پرداختی بعد از تاریخ گزارش‌دهی هرگز گزارش قبلی را بازنویسی نمی‌کند.

بستانکارهای فروشنده / پرداخت‌های اضافی: HAVING SUM(number) < 0 فقط مبالغی را نگه می‌دارد که هنوز بدهکارید. یک پرداخت اضافی مجموع AP گروه را مثبت می‌کند. آن‌ها را جداگانه فهرست کنید—مانده AP مثبت را به‌عنوان «مبلغ سررسید» تلقی نکنید:

SELECT payee,
       any_meta('invoice') AS invoice,
       any_meta('due')     AS due,
       SUM(number)         AS credit
WHERE account ~ "^Liabilities:AccountsPayable"
  AND date <= 2025-09-04
GROUP BY payee, invoice, due
HAVING SUM(number) > 0
ORDER BY payee;

مورد انتظار: یک ردیف—Credit Vendor / INV-C1 / 2025-08-20 / credit = 50.00 (شما $۵۰ اضافه پرداخت کرده‌اید).

due: از دست رفته: INV-ND همچنان در گزارش باز با due خالی ظاهر می‌شود. آن را در یک سطل اختصاصی missing-due (در زیر) پیر کنید؛ هرگز آن را بی‌صدا حذف نکنید.

فهرست صورتحساب‌های دارای PDF پیوست:

SELECT date, payee, any_meta('invoice') AS invoice, any_meta('document') AS file
WHERE account ~ "^Liabilities:AccountsPayable"
ORDER BY date DESC;

محل مشاهده AP در Fava

  • ترازنامه: به Balance SheetLiabilitiesAccountsPayable بروید تا مانده کل را ببینید و به جزئیات تراکنش نفوذ کنید.
  • دفتر کل: دفتر کل را با account:Liabilities:AccountsPayable یا یک پیوند خاص مانند ^INV-xxxx فیلتر کنید تا چرخه عمر کامل یک صورتحساب را ببینید.
  • اسناد: با تنظیم option "documents"، Beancount فایل‌ها را در آن درخت شناسایی می‌کند. نماهای Documents فاوا و پلاگین link_documents (به بالا مراجعه کنید) آن فایل‌ها را به تراکنش‌هایی که فراداده document: دارند متصل می‌کنند.

پیری AP، گردش و آگاهی از جریان نقدی

برنامه پیری (صادرات قابل تکرار + سطل‌ها): beanquery 0.2.0 می‌تواند ردیف‌های اقلام باز بالا را تولید کند، اما یک عبارت سطل پیری داخلی روی فراداده due ارائه نمی‌دهد. گزارش باز را صادر کنید، سپس به‌صورت قطعی در برابر همان تاریخ مبنا سطل‌بندی کنید.

bean-query -f csv -o open-ap.csv accounts-payable-starter.bean \
  "SELECT payee, any_meta('invoice') AS invoice, any_meta('due') AS due, -SUM(number) AS outstanding WHERE account ~ '^Liabilities:AccountsPayable' AND date <= 2025-09-04 GROUP BY payee, invoice, due HAVING SUM(number) < 0 ORDER BY due, payee"

ستون‌های CSV: payee, invoice, due, outstanding.

قانون سطل برای تاریخ مبنا D = 2025-09-04 و due هر ردیف (ISO YYYY-MM-DD):

شرطسطل
due خالیmissing-due
due > Dnot-yet-due
due == Ddue-today
1 ≤ (D − due) ≤ 301-30-overdue
31 ≤ (D − due) ≤ 6031-60-overdue
(D − due) ≥ 6161+-overdue

پایتون فشرده (فقط کتابخانه استاندارد) که آن جدول را پیاده‌سازی می‌کند:

from datetime import date
 
AS_OF = date(2025, 9, 4)
# Apply bucket() to each CSV row's due column (ISO YYYY-MM-DD or empty).
 
def bucket(due: str | None) -> str:
    if not due:
        return "missing-due"
    days = (AS_OF - date.fromisoformat(due)).days
    if days < 0:
        return "not-yet-due"
    if days == 0:
        return "due-today"
    if days <= 30:
        return "1-30-overdue"
    if days <= 60:
        return "31-60-overdue"
    return "61+-overdue"

پیری مورد انتظار برای ردیف‌های باز تا 2025-09-04:

invoicedueروزهای معوقسطلoutstanding
INV-ND(خالی)missing-due50.00
INV-772025-08-05301-30-overdue150.00
INV-4402025-09-040due-today200.00
INV-90012025-09-09−5not-yet-due800.00
INV-2202025-09-14−10not-yet-due300.00

سررسید-امروز در «جاری» تلفیق نمی‌شود: due == تاریخ مبنا سطل خودش است. سررسید-نشده نیاز به due > تاریخ مبنا دارد.

  • نسبت گردش AP: کل خریدهای تأمین‌کننده ÷ میانگین AP. یک معیار مرتبط، روزهای پرداخت‌مانده (DPO)، تقریباً 365 ÷ نسبت گردش است.
  • اگر نمی‌توانید به‌موقع پرداخت کنید: AP برای بدهی کوتاه‌مدت است. اگر فروشنده با بازپرداخت رسمی بلندمدت موافقت کند، از AP به یک اسکناس پرداختنی بازطبقه‌بندی کنید—همان هویت صورتحساب را در تبدیل حفظ کنید تا گروه AP تسویه شود.
2025-10-01 * "Helix Industries" "Convert overdue AP to 12-month note" ^INV-1110
  invoice: "INV-1110"
  due: "2025-09-15"
  Liabilities:AccountsPayable    2000.00 USD
  Liabilities:NotesPayable      -2000.00 USD

بهترین شیوه‌ها برای AP در دفتر کل متن‌محور

  • بدون کاغذ بروید: PDFهای صورتحساب را در درخت اسناد خود ذخیره کنید و با کلید فراداده document: پیوست کنید (و آپلود Fava / link_documents وقتی از Fava استفاده می‌کنید).
  • هویت صورتحساب را روی پرداخت‌ها دوباره استفاده کنید: همان invoice:، due: و ^link را روی صورتحساب و هر پرداختی که آن را تسویه می‌کند قرار دهید.
  • گزارش در برابر تاریخ مبنا: پرس‌وجوهای اقلام باز و پیری را با date <= YYYY-MM-DD قطع کنید تا پرداخت بعدی نتواند snapshot قبلی را بازنویسی کند؛ با همان D پیر کنید.
  • فراداده را مرتب نگه دارید: استفاده مداوم از invoice:، due: و terms: جستجو، پرس‌وجوها و بررسی‌های مالی را بهبود می‌بخشد.
  • تعهدی تا آخر: اگر گزارش‌دهی مفید AP می‌خواهید، متعهد شوید که دفاتر خود را بر مبنای تعهدی نگه دارید. Beancount و Fava مانده‌های تعهدی را در ترازنامه بدون پلاگین‌های خاص مدیریت می‌کنند.

شروع‌کننده کپی-پیست: صورتحساب فروشنده + پرداخت

برای گردش کار کامل اقلام باز (تسویه‌شده + جزئی + پرداخت‌نشده، تاریخ مبنا، پیری)، شروع‌کننده AP قابل دانلود بالا را ترجیح دهید. جفت حداقلی صورتحساب+پرداخت زیر همچنان هویت را روی هر دو پا نشان می‌دهد—ابتدا حساب‌ها را باز کنید (یا این افتتاح‌ها را در دفتر کل اصلی خود بگنجانید). فراداده اختیاری document: در اینجا حذف شده است تا هیچ چیزی خارج از دفتر کل لازم نباشد.

option "operating_currency" "USD"
 
2025-01-01 open Assets:Bank:Checking USD
2025-01-01 open Liabilities:AccountsPayable USD
2025-01-01 open Expenses:Supplies:Paint USD
 
; ---- Bill ----
2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
  invoice: "INV-10455"
  due: "2025-09-04"
  Expenses:Supplies:Paint         500.00 USD
  Liabilities:AccountsPayable    -500.00 USD
 
; ---- Payment (no discount) ----
2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
  invoice: "INV-10455"
  due: "2025-09-04"
  Liabilities:AccountsPayable     500.00 USD
  Assets:Bank:Checking           -500.00 USD

با Beancount 3.2.3 و beanquery 0.2.0، بارگذاری این شروع‌کننده هیچ خطایی تولید نمی‌کند، حساب AP به صفر خالص می‌شود و پرس‌وجوی invoice+due یک گروه واحد (Forest Paint Supply, INV-10455, 2025-09-04) برمی‌گرداند که مبلغ آن خالی است (تسویه‌شده)—نه یک ردیف صورتحساب‌شده به اضافه یک ردیف پرداخت یتیم (…, null, null).


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

مراجع و مطالعه بیشتر:

این مقاله را به‌اشتراک بگذارید

منبع: https://beancount.io/fa/blog/2025/08/20/what-is-accounts-payable

منتشر شده: ۲۹ مرداد ۱۴۰۴

آخرین بهروزرسانی: ۲۴ شهریور ۱۴۰۵

زمان مطالعه 13 دقیقه

ثبتهای اختتامیه پایان سال: چگونه حسابهای درآمد و هزینه را صفر کنید و سود را به سود انباشته منتقل کنید

بستن حساب‌های درآمد، هزینه و سود سهام از طریق خلاصه درآمد به سود انباشته. چهار…

accounting
accounting-basics
زمان مطالعه 14 دقیقه

درآمد متا در سه‌ماهه دوم ۲۰۲۶: ۲۸٪ رشد، اما سود برای اولین بار در عصر هوش مصنوعی کاهش یافت

درآمد متا پلتفرمز در سه‌ماهه دوم ۲۰۲۶ با ۲۸٪ رشد به ۶۰.۸ میلیارد دلار رسید، اما…

financial-reporting
financial-management
زمان مطالعه 14 دقیقه

سود فصل دوم ۲۰۲۶ رابینهود: یک فصل بی‌سابقه، اولین بدهی در تاریخ شرکت، و سود یک‌باره‌ای که در دیدرس است

درآمد رابینهود در فصل دوم ۲۰۲۶ با ۳۲٪ افزایش به رکورد ۱.۳۱ میلیارد دلار رسید و…

financial-reporting
financial-management
زمان مطالعه 13 دقیقه

درآمدهای سه‌ماهه اول ۲۰۲۶ متا: فراتر از همه پیش‌بینی‌ها، اما سهام ۷٪ سقوط کرد

درآمد متا در سه‌ماهه اول ۲۰۲۶ با رشد ۳۳٪ به ۵۶.۳ میلیارد دلار رسید و سود خالص…

financial-reporting
financial-management
زمان مطالعه 13 دقیقه

درآمدهای سه‌ماهه اول ۲۰۲۶ رابینهود: بازارهای پیش‌بینی از ارزهای دیجیتال پیشی گرفتند — و سهام همچنان جریمه شد

درآمد سه‌ماهه اول ۲۰۲۶ رابینهود با رشد ۱۵ درصدی به ۱.۰۷ میلیارد دلار رسید و از…

financial-reporting
financial-management