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

مقدمه ای بر Beancount.io

این راهنما، بهترین شیوه‌ها را برای حسابداری متن ساده با استفاده از ابزار قدرتمند، متن‌باز و حسابداری متن ساده Beancount، خلاصه می‌کند. این راهنما، فلسفه اساسی، دستور زبان (syntax) اولیه تا پیشرفته، مطالعات موردی عملی برای دارایی‌های پیچیده و استراتژی‌های مدیریت دفتر کل بلندمدت را پوشش می‌دهد.

بخش 1: "چرایی" - مبانی دفترداری هوشمند

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

فراتر از ردیابی هزینه: مسیری به سوی وضوح مالی

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

چرا حسابداری دوطرفه؟ قدرت یک سیستم متوازن

برخلاف دفترداری یکطرفه (یک لیست ساده از هزینه‌ها)، روش حسابداری دوطرفه هر تراکنش را به عنوان جریان ارزش بین حداقل دو حساب ثبت می‌کند. اصل اساسی آن، معادله اساسی حسابداری است:

دارایی‌ها=بدهی‌ها+حقوق صاحبان سهام (ارزش خالص)\text{دارایی‌ها} = \text{بدهی‌ها} + \text{حقوق صاحبان سهام (ارزش خالص)}

این سیستم تضمین می‌کند که دفاتر شما همیشه متوازن هستند و به طور چشمگیری خطاها را کاهش می‌دهد. این سیستم، با تولید گزارش‌های ضروری مانند ترازنامه (آنچه دارید و بدهکارید) و صورت سود و زیان (آنچه به دست آورده‌اید و خرج کرده‌اید)، یک تصویر مالی کامل ارائه می‌دهد.

بخش 2: شروع به کار با Beancount

Beancount یک ابزار قدرتمند مبتنی بر پایتون برای حسابداری متن ساده است.

اولین نگاه شما با Fava در Beancount.io

Beancount.io یک محیط قدرتمند فراهم می کند که موتور Beancount را با یک اپلیکیشن موبایل (iOS, Android) و اپلیکیشن وب - Fava، یک رابط مبتنی بر وب فوق العاده برای تجسم دفتر کل شما، ترکیب می کند. نیازی به نصب نیست. وقتی از این پلتفرم استفاده می‌کنید، مستقیماً با یک ویرایشگر متن برای فایل دفتر کل خود (به عنوان مثال، main.bean) تعامل دارید و می‌بینید که گزارش‌های تولید شده توسط Fava در زمان واقعی به‌روزرسانی می‌شوند.

Fava متن ساده ای را که می نویسید می گیرد و آن را به نمودارهای تعاملی، صورت های مالی و لیست های تراکنش قابل فیلتر تبدیل می کند و نمای واضحی از گزارش های مالی خود به شما می دهد.

پنج نوع حساب اصلی

Beancount از پنج نوع حساب سطح بالا استفاده می‌کند که ساختار دفتر کل شما را تشکیل می‌دهند:

نوع حسابشرحمانده معمول
دارایی‌ها (Assets)آنچه که شما دارید (وجه نقد، حساب‌های بانکی، سرمایه‌گذاری‌ها، ملک).مثبت
بدهی‌ها (Liabilities)آنچه که شما بدهکارید (بدهی کارت اعتباری، وام‌ها، رهن).منفی
درآمد (Income)منبع ورود پول (حقوق، پاداش، بهره).منفی
هزینه‌ها (Expenses)محل خروج پول (غذا، اجاره، سفر، مالیات).مثبت
حقوق صاحبان سهام (Equity)ارزش خالص شما؛ برای مانده‌های اولیه استفاده می‌شود.منفی

معادله Beancount

Beancount نسخه خود از معادله حسابداری را اعمال می‌کند که در آن مجموع تمام ثبت‌ها در کل دفتر کل شما برابر با صفر است:

دارایی‌ها+هزینه‌ها+بدهی‌ها+درآمد+حقوق صاحبان سهام=0\text{دارایی‌ها} + \text{هزینه‌ها} + \text{بدهی‌ها} + \text{درآمد} + \text{حقوق صاحبان سهام} = 0

به همین دلیل است که طبق قرارداد، حساب‌های درآمد (Income)، بدهی‌ها (Liabilities) و حقوق صاحبان سهام (Equity) مقادیر منفی دارند—آنها منابع وجوهی هستند که دارایی‌ها (Assets) و هزینه‌های (Expenses) شما را افزایش می‌دهند.

بخش 3: زبان Beancount - دستور زبان اصلی

همه ورودی‌ها در Beancount دستورالعمل‌هایی هستند که با یک تاریخ شروع می‌شوند.

تعریف حساب‌ها (open) و کالاها

قبل از اینکه بتوانید از یک حساب استفاده کنید، باید آن را با دستورالعمل open اعلام کنید. همچنین می‌توانید به صورت اختیاری ارزها یا "کالاها"یی را که در آن نگهداری می‌شوند، مشخص کنید.

; YYYY-MM-DD open Account:Name [Commodity1, Commodity2, ...]
2020-01-01 open Assets:Bank:US:Chase:Checking USD
2020-01-01 open Liabilities:CreditCard:US:Discover USD
2020-01-01 open Expenses:Food:Groceries
2020-01-01 open Income:Salary:Google

کالاها می‌توانند ارزهای دنیای واقعی باشند (به عنوان مثال، USD، JPY) یا هر واحد سفارشی که تعریف می‌کنید، مانند مایل‌های پرواز (MILES_UA) یا نمادهای سهام (HOOL).

ثبت اولین تراکنش خود (*)

تراکنش‌ها رایج‌ترین ورودی هستند. آنها با یک تاریخ، یک علامت (* برای یک تراکنش کامل یا ! برای یک تراکنش ناقص)، یک پرداخت‌کننده اختیاری و یک شرح شروع می‌شوند. هر خطی که در ادامه می‌آید (با دو فاصله تورفتگی دارد) یک "ثبت" در یک حساب است.

; YYYY-MM-DD * "Payee" "Description"
; Account1 Amount Commodity
; Account2 -Amount Commodity

2024-07-28 * "Trader Joe's" "خواربار هفتگی"
Expenses:Food:Groceries 125.50 USD
Liabilities:CreditCard:US:Discover -125.50 USD

برای راحتی، اگر یک تراکنش فقط دو ثبت دارد، می‌توانید مقدار را در خط دوم حذف کنید و Beancount آن را به طور خودکار محاسبه می‌کند.

2024-07-28 * "Trader Joe's" "خواربار هفتگی"
Expenses:Food:Groceries 125.50 USD
Liabilities:CreditCard:US:Discover

تراز کردن در سطح تراکنش: مهم‌تر از آن برای استفاده روزمره، هر تراکنش جداگانه نیز باید متوازن باشد—مجموع تمام ثبت‌ها در یک تراکنش واحد باید برابر با صفر باشد. اگر یک تراکنش متوازن نباشد، Beancount یک خطا مانند این نشان می‌دهد:

Beancount Error Alert

مدیریت تراکنش‌های چند ارزی (@ و @@)

Beancount در حسابداری چند ارزی عالی است.

  • از @ برای مشخص کردن قیمت تبدیل به ازای هر واحد استفاده کنید.
  • از @@ برای مشخص کردن کل هزینه تبدیل استفاده کنید.
; خرید بلیط هواپیما به EUR با کارت USD
2024-08-01 * "Lufthansa" "پرواز به برلین"
Expenses:Travel:Flights 500.00 EUR @@ 545.00 USD ; 500 EUR برای من در مجموع 545 USD هزینه داشت
Liabilities:CreditCard:US:Discover -545.00 USD

بخش 4: اطمینان از صحت - هنر تطبیق

یک عمل کلیدی برای حفظ یک دفتر کل دقیق، تطبیق منظم است. این شامل مقایسه مانده‌ها در دفتر کل Beancount شما با صورت‌حساب‌های رسمی از مؤسسات مالی شما است.

خودکارسازی بررسی‌ها با ادعاهای مانده (balance)

دستورالعمل balance ابزار اصلی شما برای بررسی‌های خودکار است. شما ادعا می‌کنید که در یک تاریخ معین، یک حساب دارای یک مانده خاص بوده است. اگر مانده محاسبه شده آن با ادعای شما مطابقت نداشته باشد، Beancount یک خطا ایجاد می‌کند. این برای یافتن سریع خطاها بسیار ارزشمند است.

توجه: ادعای مانده، وضعیت حساب را در ابتدای روز مشخص شده (قبل از هر تراکنش در آن روز) بررسی می‌کند.

; از صورت حساب ماهانه کارت اعتباری شما
2024-08-01 balance Liabilities:CreditCard:US:Discover -1432.78 USD

پیوند دادن اسناد پشتیبان (document)

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

2024-08-01 document Liabilities:CreditCard:US:Discover "statements/discover-2024-07.pdf"

اصلاح خطاها و مقداردهی اولیه مانده‌ها

هنگامی که دفتر کل خود را شروع می‌کنید یا یک مغایرت پیدا می‌کنید که نمی‌توانید آن را ردیابی کنید، باید یک تعدیل انجام دهید. روش استاندارد استفاده از یک حساب حقوق صاحبان سهام (Equity) ویژه است.

; مقداردهی اولیه یک حساب نقدی هنگام شروع دفتر کل شما
2020-01-01 * "مانده اولیه" "تنظیم حساب نقدی"
Assets:Cash:Wallet 200.00 USD
Equity:Opening-Balances -200.00 USD

حساب Equity:Opening-Balances مبالغی را نگه می‌دارد که از منابع ناشناخته یا خارجی وارد دفتر کل شما می‌شوند.

برای رفع سریع جایی که مغایرت دقیق مهم نیست، دستورالعمل pad می‌تواند به طور خودکار مانده یک حساب را تنظیم کند تا با یک ادعای balance بعدی مطابقت داشته باشد و تفاوت را به یک حساب حقوق صاحبان سهام ثبت کند. این را با احتیاط استفاده کنید، زیرا می‌تواند مشکلات بزرگ‌تری را پنهان کند. تعدیلات صریح به طور کلی ایمن‌تر هستند.

بخش 5: الگوهای تراکنش پیشرفته و واقع بینانه

ردیابی بدهی‌ها: مدیریت حساب‌های دریافتنی و پرداختنی

حسابداری دوطرفه برای ردیابی پولی که به شما بدهکارند (Assets:Receivables) یا شما بدهکار هستید (Liabilities:Payable) عالی است.

مثال: شما هزینه یک شام گروهی 90 دلاری را پرداخت می‌کنید و دوستتان باب بابت سهم 45 دلاری‌اش به شما بدهکار است.

  1. هزینه اولیه و حساب دریافتنی را ثبت کنید:

    2024-08-05 * "Dinner Place" "شام با باب"
    Expenses:Food:Restaurant 45.00 USD ; سهم شما
    Assets:Receivables:Bob 45.00 USD ; باب به شما بدهکار است
    Assets:Bank:US:Chase:Checking -90.00 USD
  2. وقتی باب پول شما را پس می‌دهد:

    2024-08-06 * "Bob" "پول شام را پس داد"
    Assets:Bank:US:Chase:Checking 45.00 USD
    Assets:Receivables:Bob -45.00 USD

حساب Assets:Receivables:Bob اکنون صفر است و دفاتر شما کاملاً متوازن هستند.

دارایی‌ها در مقابل هزینه‌ها: خرید خودرو و استهلاک

یک خرید بزرگ مانند یک خودرو یک هزینه ساده نیست. این خرید یک دارایی است که با گذشت زمان ارزش خود را از دست می‌دهد (استهلاک).

  1. خرید را به عنوان یک دارایی ثبت کنید:

    2023-01-15 * "Toyota Dealer" "خرید یک خودروی جدید"
    Assets:Car:ToyotaCamry 30000.00 USD
    Assets:Bank:US:Chase:Checking -30000.00 USD
  2. استهلاک سالانه را ثبت کنید: فرض کنید تخمین می‌زنید که خودرو هر سال 3000 دلار از ارزش خود را از دست می‌دهد. در پایان سال، این را به عنوان یک هزینه ثبت می‌کنید.

    2023-12-31 * "استهلاک" "استهلاک سالانه ارزش خودرو"
    Expenses:Depreciation:Car 3000.00 USD
    Assets:Car:ToyotaCamry -3000.00 USD

پس از این ورودی، حساب Assets:Car:ToyotaCamry شما به درستی ارزش جدید خودرو (27000 دلار) را منعکس می‌کند و شما به درستی هزینه استفاده را به عنوان یک هزینه برای آن سال محاسبه کرده‌اید.

بخش 6: بررسی عمیق - مدل‌سازی دارایی‌های پیچیده دنیای واقعی

مطالعه موردی 1: حسابداری برای املاک و مستغلات

خانه اغلب بزرگترین دارایی و بدهی شماست. در اینجا نحوه مدل‌سازی آن آمده است.

  1. ایجاد حساب‌ها و یک کالای سفارشی:

    2022-01-01 commodity HOUSE_123MAIN
    name: "ملک در 123 Main St"
    2022-01-01 open Assets:Property:Home:123Main HOUSE_123MAIN
    2022-01-01 open Liabilities:Mortgage:HomeLoan USD
    2022-01-01 open Expenses:Home:Interest
    2022-01-01 open Expenses:Home:PropertyTax
  2. ثبت خرید: فرض کنید یک خانه 500 هزار دلاری با 100 هزار دلار پیش پرداخت و یک وام 400 هزار دلاری می‌خرید.

    2022-03-15 * "Settlement Company" "خرید 123 Main St"
    Assets:Property:Home:123Main 1 HOUSE_123MAIN {500000.00 USD}
    Assets:Bank:DownPayment -100000.00 USD
    Liabilities:Mortgage:HomeLoan -400000.00 USD
  3. ثبت پرداخت‌های ماهانه رهن: پرداخت ماهانه شما شامل اصل (کاهش بدهی) و بهره (یک هزینه) است.

    2022-04-01 * "Mortgage Bank" "پرداخت ماهانه رهن"
    Liabilities:Mortgage:HomeLoan 800.00 USD ; اصل
    Expenses:Home:Interest 1200.00 USD ; بهره
    Assets:Bank:US:Chase:Checking -2000.00 USD
  4. ردیابی افزایش ارزش (سودهای تحقق نیافته): ارزش بازار یک خانه تغییر می‌کند. برای ردیابی این بدون تأثیر بر ارزش خالص رسمی خود (زیرا سود تا زمان فروش تحقق نمی‌یابد)، می‌توانید از یک دستورالعمل price با یک ارز "مجازی" استفاده کنید.

    ; قیمت خرید، مبنای هزینه واقعی است
    2022-03-15 price HOUSE_123MAIN 500000.00 USD

    ; یک تخمین بازار به‌روزرسانی‌شده یک سود تحقق نیافته است
    2024-01-01 price HOUSE_123MAIN 550000.00 USD.UNREALIZED

این به شما امکان می‌دهد ارزش تخمینی را در نمودارهای Fava بدون افزایش نادرست ترازنامه خود مشاهده کنید.

مطالعه موردی 2: ردیابی سهام محدودشده (RSU)

RSUها یک شکل رایج از جبران خسارت سهام هستند. حسابداری برای آنها شامل ردیابی اعطای اولیه، رویدادهای واگذاری و مالیات است.

  1. تنظیم اولیه: کالاهایی را برای سهام واگذار شده (HOOL) و واگذار نشده (HOOL.UNVEST)، به همراه حساب‌های لازم ایجاد کنید.

    2021-01-01 commodity HOOL
    2021-01-01 commodity HOOL.UNVEST
    2021-01-01 open Assets:Brokerage:Etrade:HOOL HOOL
    2021-01-01 open Assets:Grant:Unvested HOOL.UNVEST
    2021-01-01 open Income:Salary:Hooli:RSU
    2021-01-01 open Expenses:Taxes:Federal
  2. ثبت اعطای اولیه: این تراکنش کل اعطای منتقل شده به یک حساب دارایی واگذار نشده را نشان می‌دهد.

    2021-02-01 * "Hooli" "اعطای اولیه RSU"
    Assets:Grant:Unvested 1000 HOOL.UNVEST
    Income:Grant:Awards -1000 HOOL.UNVEST
  3. ثبت یک رویداد واگذاری: این تراکنش کلیدی است. هنگامی که سهام واگذار می‌شود، شما درآمد را شناسایی می‌کنید، مالیات می‌پردازید (اغلب با فروش برخی از سهام) و سهام خالص را دریافت می‌کنید. فرض کنید 100 سهم با قیمت 150 دلار به ازای هر سهم واگذار می‌شود.

    2022-02-01 * "Hooli" "رویداد واگذاری RSU"
    ; شناسایی کل درآمد 100 * 150 دلار = 15000 دلار
    Income:Salary:Hooli:RSU -15000.00 USD

    ; نشان دادن مالیات پرداخت شده از این درآمد
    Expenses:Taxes:Federal 4000.00 USD
    Expenses:Taxes:State 1000.00 USD

    ; شما سهام خالص (فرض کنید 60 سهم) را با مبنای هزینه آنها دریافت می‌کنید
    Assets:Brokerage:Etrade:HOOL 60 HOOL {150.00 USD}

    ; 40 سهم دیگر برای پوشش 6000 دلار مالیات فروخته شد.
    ; این تراکنش درآمد، مالیات و سهام دریافت شده را متوازن می‌کند.
    ; ما همچنین باید کاهش در سهام واگذار نشده را نشان دهیم.
    Assets:Grant:Unvested -100 HOOL.UNVEST
    Expenses:Grant:Vested 100 HOOL.UNVEST

این تراکنش واحد و متوازن به درستی کل رویداد را مدل‌سازی می‌کند: اعطای واگذار نشده کاهش می‌یابد، درآمد شناسایی می‌شود، مالیات پرداخت می‌شود و سهام واگذار شده خالص با مبنای هزینه صحیح برای محاسبات سود سرمایه آتی در حساب کارگزاری شما ظاهر می‌شود.

بخش 7: مدیریت پروژه برای دفتر کل شما

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

استفاده از کنترل نسخه (Git) برای محافظت از داده‌های خود

از آنجایی که دفتر کل شما یک فایل متنی است، برای کنترل نسخه با Git عالی است. این به شما یک تاریخچه کامل از همه تغییرات می‌دهد و از شما در برابر حذف‌های تصادفی یا اشتباهات محافظت می‌کند. هشدار: داده‌های مالی شما بسیار حساس هستند. از یک مخزن خصوصی در سرویس‌هایی مانند GitHub/GitLab استفاده کنید یا میزبانی خود را انجام دهید.

سازماندهی با برچسب‌ها (#) و پیوندها (^)

Beancount دو راه برای گروه‌بندی تراکنش‌ها فراتر از حساب‌ها ارائه می‌دهد:

  • برچسب‌ها (#): برای رویدادها یا پروژه‌ها استفاده کنید. برای مثال، می‌توانید همه تراکنش‌های مربوط به یک سفر خاص را فیلتر کنید. 2024-07-20 * "Hotel" "Vienna" #trip-europe-2024
  • پیوندها (^): برای اتصال تراکنش‌های مالی مرتبط که در زمان‌های مختلف رخ می‌دهند، مانند برداشت نقدی و هزینه بانکی مرتبط، استفاده کنید.

یک استراتژی مقیاس‌پذیر برای ساختاربندی فایل‌های خود (include)

مدیریت یک فایل بزرگ و واحد دشوار است. از دستورالعمل include برای تقسیم دفتر کل خود به چند فایل استفاده کنید. main.bean:

; فایل اصلی دفتر کل

; گزینه‌های سراسری
option "title" "دفتر کل شخصی من"
option "operating_currency" "USD"

; شامل اعلامیه‌های حساب و سایر فایل‌ها
include "accounts.bean"
include "years/2023.bean"
include "years/2024.bean"
include "events/trip-europe-2024.bean"

یک استراتژی سازمانی قوی، به ترتیب تقدم:

  1. بر اساس رویداد: یک فایل جداگانه برای یک رویداد اصلی و مستقل ایجاد کنید (به عنوان مثال، trip-europe-2024.bean).
  2. بر اساس دسته‌بندی/پرداخت‌کننده: برای تراکنش‌های بسیار منظم و مکرر مانند قبوض آب و برق یا حقوق، آنها را در فایل خود گروه‌بندی کنید (به عنوان مثال، recurring-rent.bean).
  3. بر اساس حساب: برای تراکنش‌هایی که به شدت با یک حساب خاص مرتبط هستند (بهره، کارمزد، پرداخت کارت اعتباری)، یک فایل خاص حساب را در نظر بگیرید.
  4. بر اساس تاریخ: برای سایر تراکنش‌های عمومی، یک تقسیم ساده بر اساس سال (2024.bean) یا ماه (2024/07.bean) مؤثر است.

بخش 8: نتیجه‌گیری

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

شروع به کار با Beancount.io

Beancount.io یک پلتفرم مدرن مدیریت مالی مبتنی بر ابر است که سوابق تراکنش متنی شما را به صورت‌های مالی جامع، از جمله صورت سود و زیان، ترازنامه و تراز آزمایشی تبدیل می‌کند. Beancount.io با ترکیب قابلیت اطمینان فایل‌های متنی ساده با ابزارهای تجسم قدرتمند، به شما کمک می‌کند تا کنترل دقیقی بر زندگی مالی خود داشته باشید و در عین حال بینش‌های ارزشمندی در مورد عملکرد سرمایه‌گذاری خود به دست آورید.

سفر مالی خود را با Beancount.io شروع کنید - در طول دوره تبلیغاتی ما رایگان است!

Expenses

Income Statement

Balance Sheet