راهنمای دقت و رواداریها در Beancount
مدیریت دقت عددی، سنگ بنای حسابداری دوبل است. در دفترداری دیجیتال، به ویژه هنگام کار با ارزهای متعدد، قیمت سهام و سهام کسری، اختلافات کوچک ناشی از گرد کردن اعداد میتواند به سرعت منجر به خطاهای آزاردهنده تراز شود. Beancount یک سیستم پیچیده اما شهودی برای رسیدگی به دقت و تعیین رواداریهای قابل قبول ارائه میدهد. این راهنما شما را با نحوه عملکرد آن آشنا میکند. ⚙️
مفاهیم اصلی دقت
هدف اصلی Beancount اطمینان از این است که هر تراکنش به صفر برسد. با این حال، محاسباتی که شامل قیمتها یا هزینهها میشوند، اغلب نتایجی با رقم اعشار بیشتری از آنچه که عملاً قابل ثبت است، تولید میکنند. سیستم رواداری اجازه میدهد تا عدم ترازهای کوچک و قابل قبول وجود داشته باشد.
استنباط خودکار رواداری
به طور پیش فرض، Beancount رواداری مورد نیاز برای هر تراکنش را به طور خودکار استنباط میکند. این استنباط به صورت جداگانه برای هر تراکنش انجام میشود و به طور جداگانه برای هر ارز درگیر محاسبه میشود.
قانون ساده است: رواداری نصف آخرین رق م معنیدار اعداد موجود در سند حسابداری تراکنش است.
به عنوان مثال، این خرید را در نظر بگیرید:
2013-04-03 * "خرید صندوق"
Assets:Fund 10.22626 FUND {37.61 USD}
Assets:Cash -384.61 USD
Beancount رواداریها را به شرح زیر استنباط میکند:
- برای کالای
FUND، عدد10.22626دارای 5 رقم اعشار است. رواداری نصف آخرین رقم است، بنابراینFUND. - برای کالای
USD، عدد-384.61دارای 2 رقم اعشار است. رواداری نصف آخرین رقم است، بنابراینUSD.
قوانین وزن تراکنش
هنگام بررسی اینکه آیا یک تراکنش تراز است یا خیر، Beancount "وزن" هر سند حسابداری را محاسبه میکند. قوانین این محاسبه عبارتند از:
- مبلغ ساده: اگر یک سند حسابداری فقط یک مبلغ داشته باشد (مثلاً
Assets:Cash -100.00 USD)، وزن آن دقیقاً همان مبلغ است. - سند حسابداری قیمت: اگر یک سند حسابداری دارای قیمت واحد باشد (مثلاً
10 FUND @ 38.46 USD)، وزن آنمبلغ × قیمتاست. - سند حسابداری هزینه: اگر یک سند حسابداری دارای هزینه کل باشد (مثلاً
10 FUND {384.61 USD})، وزن آن مبلغ کل هزینه است. - هزینه و قیمت: اگر یک سند حسابداری دارای هزینه کل و قیمت واحد باشد (مثلاً
10 FUND {384.61 USD} @ 38.46 USD)، فقط هزینه کل برای تراز کردن استفاده میشود. قیمت واحد به عنوان یک نظر یا یادداشت در نظر گرفته میشود.
قوانین استنباط دقت
سیستم استنباط خودکار از چند قانون خاص پیروی میکند:
- فرمت عدد
- مبالغ صحیح (مثلاً
10 USD) در استنباط دقت مشارکت نمیکنند. - حداکثر رواداری که میتواند به طور خودکار استنباط شود،
0.05واحد است (مثلاً از عددی مانند10.1 USD). اگر به رواداری بزرگتری نیاز دارید، باید آن را به صورت دستی مشخص کنید. - هزینهها و قیمتها (مثلاً
{37.61 USD}) از استنباط رواداری مستثنی هستند. فقط مبالغ اصلی اسناد حسابداری استفاده میشوند. - اگر اسناد حسابداری برای یک ارز یکسان دارای دقتهای متفاوتی باشند (به عنوان مثال،
-10.10 USDو5.123 USD)، Beancount از درشتترین (بزرگترین) رواداری استفاده میکند. در این حالت، بر اساس-10.10 USDخواهد بود و رواداریUSDرا به دست میدهد.
-
رسیدگی پیش فرض اگر یک تراکنش هیچ عددی با رقم اعشار نداشته باشد که بتوان از آن استنباط کرد، میتوانید یک رواداری پیش فرض جهانی یا مختص ارز تعیین کنید.
; یک رواداری پیش فرض برای همه ارزها بدون قوانین صریح تعیین میکند
option "inferred_tolerance_default" "*:0.001"
; یک رواداری پیش فرض خاص برای USD تعیین میکند
option "inferred_tolerance_default" "USD:0.003" -
ضریب رواداری میتوانید به طور کلی همه رواداریهای استنباطی را با یک ضریب ثابت افزایش دهید. این برای کاهش بررسیها در کل فایل شما بدون تغییر هر تراکنش مفید است. ضریب
1.2همه رواداریهای استنباطی را 20٪ افزایش میدهد.option "inferred_tolerance_multiplier" "1.2" -
استنباط مبتنی بر هزینه در حالی که هزینهها به طور معمول برای استنباط رواداری نادیده گرفته میشوند، میتوانید به Beancount دستور دهید که از آنها استفاده کند. این زمانی مفید است که مبلغ نهایی (به عنوان مثال، برداشت نقدی) دقیقترین عدد در یک تراکنش باشد.
option "infer_tolerance_from_cost" "TRUE"
ادعاهای تراز
ادعاهای تراز (balance) برای تأیید اینکه تراز حساب شما با مقدار شناخته شده در یک تاریخ خاص مطابقت دارد، استفاده میشوند. آنها همچنین دارای یک رواداری مرتبط هستند.
فرمت پایه
مشابه تراکنشها، رواداری برای یک ادعای balance از تعداد ارقام اعشار در مبلغ استنباط میشود.
; ادعا میکند که تراز 4.271 RGAGX با رواداری ±0.0005 است
2015-05-08 balance Assets:Fund 4.271 RGAGX
; ادعا میکند که تراز 4.27 RGAGX با رواداری ±0.005 است
2015-05-08 balance Assets:Fund 4.27 RGAGX
تراز محاسبه شده باید در این محدوده قرار گیرد. برای مثال دوم، هر تراز بین و از بررسی عبور میکند.
رواداریهای صریح
اگر رواداری استنباطی مناسب نیست، میتوانید با استفاده از کاراکتر مد (~) یک رواداری را به صراحت مشخص کنید.
; ادعا میکند که تراز 4.271 RGAGX با رواداری سفارشی ±0.01 RGAGX است
2015-05-08 balance Assets:Fund 4.271 ~ 0.01 RGAGX
در اینجا، ادعا در صورتی موفقیت آمیز خواهد بود که تراز محاسبه شده بین و RGAGX باشد.
مدیریت گرد کردن
برای مواردی که پسماندهای کوچک ناشی از محاسبات مورد انتظار و قابل قبول هستند، Beancount ابزارهایی را برای مدیریت سیستماتیک آنها فراهم میکند.