مدیریت موجودی در Beancount
سیستم موجودی 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, # تاریخ تحصیل
"lot-identifier" # یک برچسب رشته ای منحصر به فرد
}
در حالی که هر سه مورد اختیاری هستند، ارائه حداقل مبنای بهای تمام شده یک عمل استاندارد است.
روشهای تطبیق
هنگام کاهش یک موجودی (فروش)، از همان نحو برای تعیین اینکه از کدام لات(ها) بفروشید استفاده میکنید.
-
تطبیق بر اساس هزینه: این رایجترین روش است.
Assets:Invest:STOCK -5 STOCK {100.00 USD} -
تطبیق بر اساس تاریخ: اگر هزینهها یکسان باشند، میتوانید با استفاده از تاریخ تحصیل ابهام زدایی کنید.
Assets:Invest:STOCK -5 STOCK {2024-01-15} -
تطبیق بر اساس برچسب: برچسبها راهی مطمئن برای شناسایی لات ارائه میدهند.
Assets:Invest:STOCK -5 STOCK {"lot-identifier"} -
تطبیق هر لات: یک مجموعه آکولاد خالی
{}با هر لات موجود مطابقت خواهد دا شت. این اغلب با ثبت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را شناسایی میکند.