سیستم موجودی Beancount یک ویژگی قدرتمند برای ردیابی داراییهایی است که در طول زمان خرید و فروش میشوند، مانند سهام، صندوقهای سرمایهگذاری مشترک یا ارزهای خارجی. این سیستم امکان ردیابی دقیق مبنای هزینه را فراهم میکند که برای محاسبه سود سرمایه و درک عملکرد پرتفوی ضروری است. این آموزش مکانیکهای اصلی مدیریت موجودیها در دفتر کل شما را پوشش میدهد.
مفاهیم اصلی
در هسته خود، مدیریت موجودی حول ردیابی موقعیتها میچرخد. یک "موقعیت" صرفاً مقدار یک کالا است که در یک حساب نگهداری میشود. Beancount بین دو نوع اساسی از موقعیتها تمایز قائل میشود.
انواع موقعیت
-
موقعیت ساده (بدون هزینه): این یک ثبت استاندارد مانده است. این نشاندهنده مقدار یک کالا بدون هیچ هزینه تحصیل مرتبط است. برای وجه نقد یا تأیید مانده ساده مناسب است.
Assets:Bank:Checking 100.00 USD -
موقعیت با مبنای هزینه: این نوع موقعیت نه تنها تعداد واحدها و کالا، بلکه هزینهای که با آن تحصیل شده است را نیز شامل میشود. این اساس ردیابی موجودی است. هزینه در داخل آکولاد
{}مشخص میشود.Assets:Invest:VTSAX 10 VTSAX {100.00 USD, "lot-1"}در این مثال، ما 10 واحد از
VTSAXرا نگهداری میکنیم. هر واحد با هزینه 100.00 دلار آمریکا تحصیل شده است. این دسته خاص از سهام به عنوان یک "لات" شناسایی میشود.
عملیات موجودی
دو عملیات اصلی وجود دارد که میتوانید روی یک موجودی انجام دهید:
-
افزایش (افزودن به موجودی): وقتی یک کالا میخرید، موجودی خود را افزایش میدهید. شما یک لات جدید با تعداد مشخصی واحد و یک مبنای هزینه ایجاد میکنید.
2024-01-15 * "خرید سهام" Assets:Invest:STOCK 50 STOCK {25.00 USD, "lot-1"} Assets:Bank:Checking -1250.00 USDدر اینجا، ما 50 واحد از
STOCKرا با هزینه 25.00 دلار آمریکا به ازای هر واحد میخریم. این یک لات در حسابAssets:Invest:STOCKایجاد میکند. -
کاهش (حذف از موجودی): وقتی یک کالا میفروشید، موجودی خود را کاهش میدهید. باید مشخص کنید که از کدام لات میفروشید. این کار با ارائه اطلاعات منطبق در آکولاد انجام میشود.
2024-01-20 * "فروش سهام" Assets:Invest:STOCK -25 STOCK {25.00 USD} Assets:Bank:Checking 625.00 USDدر این تراکنش، ما 25 واحد از
STOCKرا از لاتی که با قیمت 25.00 دلار آمریکا به ازای هر واحد خریداری شده بود، میفروشیم.
روشهای ثبت
وقتی یک موجودی را کاهش میدهید، Beancount به یک قانون نیاز دارد تا تصمیم بگیرد اگر چندین لات مطابقت دارند یا اگر تطابق مبهم است، از کدام لات خاص استفاده کند. این قانون "روش ثبت" نامیده میشود. شما میتوانید یک روش پیشفرض برای کل فایل خود یا یک روش برای هر حساب مشخص کنید.
1. STRICT (سختگیرانه) (پیشفرض)
روش STRICT روش پیشفرض و امنترین روش ثبت است. این روش تطابق صریح و بدون ابهام را اعمال میکند.
2024-01-01 open Assets:Invest:STOCK "STRICT"- نیازمند تطابق دقیق لات: شما باید اطلاعات کافی را در ثبت کاهش (
{...}) ارائه دهید تا لات فروخته شده را به طور منحصر به فرد شناسایی کنید. - خطا در تطابق مبهم: اگر اطلاعات ارائه شده با چندین لات مطابقت داشته باشد، Beancount یک خطا ایجاد میکند و شما را مجبور میکند دقیقتر باشید.
- استثنا: اگر یک ثبت کاهش دقیقاً تعداد کل واحدهای نگهداری شده در یک حساب را حذف کند، یک مشخصکننده هزینه خالی (
{}) مجاز است.
2. FIFO (اولین ورود، اولین خروج)
روش FIFO به طور خودکار کاهشها را در برابر قدیمیترین لاتهای موجود ثبت میکند.
2024-01-01 open Assets:Invest:STOCK "FIFO"- حل خودکار: با انتخاب قدیمیترین لاتهای منطبق، ابهام را برطرف میکند.
- تطابق زمانی: این یک روش حسابداری رایج است که در آن فرض میکنید داراییهایی را که طولانیترین زمان نگهداری کردهاید، میفروشید. این روش مورد نیاز برای اهداف مالیاتی در بسیاری از کشورها است.
3. LIFO (آخرین ورود، اولین خروج)
روش LIFO برعکس FIFO است. این روش کاهشها را در برابر جدیدترین لاتهای موجود ثبت میکند.
2024-01-01 open Assets:Invest:STOCK "LIFO"- ترتیب زمانی معکوس: جدیدترین لاتهای تحصیل شده را که با معیارهای کاهش مطابقت دارند، انتخاب میکند.
- بهینهسازی مالیاتی: در برخی حوزههای قضایی، این روش میتواند برای بهینهسازی مالیاتی استفاده شود، به عنوان مثال، با فروش سهامی که بالاترین مبنای هزینه را دارند ابتدا برای به حداقل رساندن سود سرمایه.
4. NONE (هیچکدام)
روش NONE تطابق لات را به طور کامل غیرفعال میکند.
2024-01-01 open Assets:Invest:STOCK "NONE"- بدون تطابق لات: Beancount سعی نمیکند کاهشها را با افزایشها مطابقت دهد.
- اجازه علائم مختلط: این به یک حساب اجازه میدهد تا همزمان ماندههای مثبت و منفی از یک کالا را نگه دارد. این رفتار مشابه نحوه مدیریت کالاها توسط ابزار Ledger CLI است.
مشخصات لات
یک "لات" یک بلوک خاص از یک کالا است که در زمان و قیمت خاصی تحصیل شده است. وقتی یک موقعیت ایجاد یا کاهش میدهید، میتوانید ویژگیهای لات آن را با جزئیات مشخص کنید.
مشخصات کامل
هنگام افزایش یک موجودی (خرید)، میتوانید تا سه ویژگی برای لات مشخص کنید:
Assets:Invest:STOCK 10 STOCK {
100.00 USD, # مبنای هزینه (هزینه به ازای هر واحد)
2024-01-15, # تاریخ تحصیل
"شناسه-لات" # یک برچسب رشته منحصر به فرد
}در حالی که هر سه اختیاری هستند، ارائه حداقل مبنای هزینه یک روش استاندارد است.
روشهای تطبیق
هنگام کاهش یک موجودی (فروش)، از همان نحو برای مشخص کردن اینکه از کدام لات(ها) بفروشید استفاده میکنید.
-
تطبیق با هزینه: این رایجترین روش است.
Assets:Invest:STOCK -5 STOCK {100.00 USD} -
تطبیق با تاریخ: اگر هزینهها یکسان هستند، میتوانید با استفاده از تاریخ تحصیل ابهام را برطرف کنید.
Assets:Invest:STOCK -5 STOCK {2024-01-15} -
تطبیق با برچسب: برچسبها یک روش بدون خطا برای شناسایی یک لات فراهم میکنند.
Assets:Invest:STOCK -5 STOCK {"شناسه-لات"} -
تطبیق هر لات: یک مجموعه آکولاد خالی
{}با هر لات موجود مطابقت خواهد داشت. این اغلب با ثبتFIFOیاLIFOاستفاده میشود، جایی که لات خاص به طور خودکار انتخاب میشود.Assets:Invest:STOCK -5 STOCK {}
مدیریت قیمت
درک تفاوت بین مبنای هزینه ({}) و قیمت (@) بسیار مهم است. آنها اهداف متفاوتی دارند و قابل تعویض نیستند.
قیمت در مقابل هزینه
{cost}: هزینه تحصیل یک دارایی را تعریف میکند. این بخشی از خود لات موجودی است و برای ثبت کاهشها و محاسبه سود سرمایه استفاده میشود.@ price: یک حاشیهنویس که قیمت بازار را در زمان یک تراکنش ثبت میکند. برای تبدیل ارز یا ذکر ارزش بازار در یک تاریخ خاص استفاده میشود.
در اینجا سه سناریو وجود دارد:
-
حاشیهنویس قیمت (تبدیل): از
@برای تبدیل از یک ارز به ارز دیگر استفاده کنید.Assets:Forex 1000 USD @ 0.85 EUR -
مبنای هزینه (تحصیل): هنگام خرید یک دارایی از
{}برای تعیین هزینه آن استفاده کنید.Assets:Invest 10 STOCK {100.00 USD} -
هر دو (فروش با ثبت قیمت): هنگام فروش یک دارایی، از
{}برای شناسایی لات فروخته شده و از@برای ثبت قیمت فروش استفاده کنید. این امکان محاسبه خودکار سود سرمایه را فراهم میکند.Assets:Invest -10 STOCK {100.00 USD} @ 105.00 USDاین ورودی 10
STOCKرا از لاتی که هر کدام 100.00 دلار قیمت داشتند، با قیمت فروش 105.00 دلار به ازای هر واحد میفروشد.
قوانین استفاده از قیمت
- حاشیهنویسهای قیمت (
@) تأثیری بر اینکه کدام لات ثبت میشود ندارند. تطابق لات منحصراً توسط مبنای هزینه ({}) و روش ثبت حساب مدیریت میشود. - نماد
@فقط برای موارد زیر استفاده میشود:
- تبدیل ارز.
- ثبت ارزش بازار یک دارایی در زمان یک تراکنش.
- ارائه قیمت فروش برای محاسبات سود سرمایه.
پیکربندی
شما میتوانید روشهای ثبت را به صورت سراسری یا به صورت جداگانه برای هر حساب پیکربندی کنید.
روش ثبت سراسری
شما میتوانید یک روش ثبت پیشفرض برای کل فایل Beancount خود با استفاده از دستور option تنظیم کنید.
option "booking_method" "STRICT"گزینههای موجود عبارتند از "STRICT"، "FIFO"، "LIFO" و "NONE".
لغو تنظیمات به ازای هر حساب
اغلب مفید است که روشهای متفاوتی برای حسابهای مختلف داشته باشید. به عنوان مثال، ممکن است برای یک حساب بازنشستگی FIFO بخواهید اما برای یک حساب کارگزاری مشمول مالیات STRICT تا اطمینان حاصل کنید که لاتهای مالیاتی خاصی را میفروشید. شما میتوانید روش ثبت را هنگام باز کردن حساب تنظیم کنید.
2024-01-01 open Assets:Retirement:401K "FIFO"
2024-01-01 open Assets:Taxable:Stock "STRICT"بهترین روشها
-
سازماندهی موجودی: برای تمیز و ساده نگه داشتن دفتر کل خود، به شدت توصیه میشود از حسابهای جداگانه برای هر کالای منحصر به فردی که نگهداری میکنید استفاده کنید.
# خوب: حسابهای جداگانه بر اساس کالا Assets:Invest:VTSAX ; فقط موقعیتهای VTSAX در اینجا Assets:Invest:VFIAX ; فقط موقعیتهای VFIAX در اینجااز مخلوط کردن سهام یا صندوقهای مختلف در یک حساب خودداری کنید، زیرا مدیریت موجودی را پیچیده میکند.
-
مدیریت لات:
-
از برچسبهای معنادار برای لاتها استفاده کنید، به ویژه برای تراکنشهای خاص مانند برداشت زیان مالیاتی یا اعطای سهام کارکنان.
Assets:Invest:STOCK 10 STOCK {100.00 USD, "tax-loss-harvest-2024"} -
معاملات خود را با نظرات مستند کنید. این کار دفتر کل شما را برای خواندن و درک بعدی آسانتر میکند.
Assets:Invest:STOCK -10 STOCK {100.00 USD} @ 110.00 USD ; سود: 10%
- اشکالزدایی: اگر با خطاها یا رفتار غیرمنتظره مواجه شدید، Beancount ابزارهایی برای بازرسی وضعیت موجودی شما فراهم میکند.
-
بررسی وضعیت موجودی: ابزار
bean-doctorمیتواند وضعیت دقیق همه موجودیها را در هر نقطه از فایل شما نشان دهد.<LINENO>را با شماره خط درست بعد از یک تراکنش جایگزین کنید تا تأثیر آن را مشاهده کنید. -
تأیید تطابق لات: ابزار
bean-checkکل فایل شما را اعتبارسنجی میکند. این ابزار هر گونه خطای ثبت، مانند تطابق مبهم لات در حالتSTRICTرا میگیرد.