این راهنما بهترین شیوههای حسابداری متنی ساده را با استفاده از ابزار قدرتمند، متنباز و متنی ساده حسابداری، Beancount، تلفیق میکند. این راهنما فلسفه بنیادی، نحو مقدماتی تا پیشرفته، مطالعات موردی عملی برای داراییهای پیچیده، و استراتژیهای مدیریت بلندمدت دفتر را پوشش میدهد.
بخش ۱: «چرا» - پایههای حسابداری هوشمند
پیش از فرو رفتن در «چگونه»، درک «چرا» حیاتی است. دفترداری مؤثر، سنگ بنای مدیریت مالی شخصی و گامی ضروری به سوی شفافیت و آزادی مالی است.
فراتر از ردیابی هزینه: مسیر شفافیت مالی
اپلیکیشنهای ساده ردیابی هزینه به شما میگویند پولتان کجا رفت. یک سیستم حسابداری قوی این را و بسیار بیشتر به شما میگوید: تصویری کامل از سلامت مالی شما، از جمله ارزش خالص، جریان نقدی و عملکرد سرمایهگذاریهایتان را فراهم میکند. هدف اصلی مشاهدهپذیری است—دستیابی به درکی روشن و مبتنی بر داده از زندگی مالیتان، که شما را قادر میسازد تصمیمهای آگاهانه بگیرید، ریسک را ارزیابی کنید، و به سوی اهداف بلندمدت مانند بازنشستگی گام بردارید.
چرا دوبلانتری؟ قدرت یک سیستم متوازن
برخلاف دفترداری یکطرفه (فهرست سادهای از هزینهها)، روش دوطرفه هر تراکنش را بهعنوان جریان ارزش بین حداقل دو حساب ثبت میکند. اصل بنیادی آن، معادله اساسی حسابداری است:
این سیستم تضمین میکند که دفترهای شما همیشه متوازن باشند و خطاها را بهشدت کاهش میدهد. با تولید گزارشهای اساسی مانند ترازنامه (آنچه دارید و بدهکارید) و صورت سود و زیان (آنچه کسب کرده و خرج کردهاید)، تصویری مالی کامل ارائه میدهد.
بخش ۲: شروع کار با Beancount
Beancount ابزاری قدرتمند و مبتنی بر پایتون برای حسابداری متنی ساده است.
اولین نگاه شما با Fava در Beancount.io
Beancount.io محیطی قدرتمند فراهم میکند که موتور Beancount را با یک اپلیکیشن موبایل (iOS، Android) و اپلیکیشن وب - Fava، رابطی فوقالعاده مبتنی بر وب برای مصورسازی دفتر شما، ترکیب میکند. نیازی به نصب نیست. هنگام استفاده از این پلتفرم، مستقیماً با یک ویرایشگر متن برای فایل دفتر خود (مثلاً main.bean) تعامل میکنید و گزارشهای تولیدشده توسط Fava را بهصورت لحظهای میبینید که بهروز میشوند.
Fava متن سادهای که مینویسید را میگیرد و آن را به نمودارهای تعاملی، صورتهای مالی، و فهرستهای تراکنش قابل فیلتر تبدیل میکند و نمای روشنی از گزارشهای مالیتان به شما میدهد.
یا در ترمینال با bea شروع کنید
اگر ترجیح میدهید از پوسته کار کنید، bea خط فرمان Beancount.io است. نیازی به حساب کاربری نیست: آن را با brew install bex-co/tap/bea یا uv tool install beancount-io نصب کنید، و همان فایل متنی ساده را ایجاد، اعتبارسنجی، پرسوجو و گزارشگیری میکند. شروع سریع CLI شما را در چند دقیقه به نخستین دفتر میرساند، و ماه اول شما با bea یک ماه کامل را از ابتدا تا انتها میبندد.
پنج نوع حساب اصلی
Beancount از پنج نوع حساب سطح بالا استفاده میکند که ساختار دفتر شما را تشکیل میدهند:
| نوع حساب | توضیح | مانده معمول |
|---|---|---|
Assets | آنچه دارید (نقد، حسابهای بانکی، سرمایهگذاریها، املاک). | مثبت |
Liabilities | آنچه بدهکارید (بدهی کارت اعتباری، وامها، رهنی). | منفی |
Income | پول از کجا میآید (حقوق، پاداش، بهره). | منفی |
Expenses | پول کجا میرود (غذا، اجاره، سفر، مالیات). | مثبت |
Equity | ارزش خالص شما؛ برای ماندههای اولیه استفاده میشود. | منفی |
معادله Beancount
Beancount نسخه خودش از معادله حسابداری را اعمال میکند که در آن مجموع تمام ثبتها در کل دفتر شما برابر صفر است:
به همین دلیل، بنا بر قرارداد، حسابهای Income، Liabilities و Equity مقادیر منفی نگه میدارند—آنها منابع وجوهی هستند که Assets و Expenses شما را افزایش میدهند.
بخش ۳: زبان 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" "Weekly groceries"
Expenses:Food:Groceries 125.50 USD
Liabilities:CreditCard:US:Discover -125.50 USDبرای راحتی، اگر تراکنشی فقط دو ثبت داشته باشد، میتوانید مبلغ را در خط دوم حذف کنید، و Beancount آن را بهصورت خودکار محاسبه میکند.
2024-07-28 * "Trader Joe's" "Weekly groceries"
Expenses:Food:Groceries 125.50 USD
Liabilities:CreditCard:US:Discoverتوازن در سطح تراکنش: مهمتر برای استفاده روزمره، هر تراکنش منفرد نیز باید متوازن باشد—مجموع تمام ثبتها در یک تراکنش واحد باید برابر صفر باشد. اگر تراکنشی متوازن نباشد، Beancount خطایی مانند این نشان میدهد:

مدیریت تراکنشهای چندارزی (@ و @@)
Beancount در حسابداری چندارزی عالی است.
- از
@برای تعیین قیمت تبدیل هر واحد استفاده کنید. - از
@@برای تعیین هزینه کل تبدیل استفاده کنید.
; Buying a flight in EUR with a USD card
2024-08-01 * "Lufthansa" "Flight to Berlin"
Expenses:Travel:Flights 500.00 EUR @@ 545.00 USD ; 500 EUR cost me 545 USD in total
Liabilities:CreditCard:US:Discover -545.00 USDبخش ۴: تضمین دقت - هنر تطبیق
یک شیوه کلیدی برای حفظ دفتری دقیق، تطبیق منظم است. این کار شامل مقایسه ماندههای دفتر Beancount شما با صورتحسابهای رسمی از مؤسسات مالیتان است.
خودکارسازی بررسیها با تأیید مانده (balance)
دستور balance ابزار اصلی شما برای بررسیهای خودکار است. شما تأیید میکنید که در تاریخی معین، یک حساب مانده مشخصی داشت. Beancount اگر مانده محاسبهشدهاش با تأیید شما مطابقت نداشته باشد، خطایی ایجاد میکند. این برای یافتن سریع خطاها بسیار ارزشمند است.
توجه: تأیید مانده وضعیت حساب را در آغاز روز مشخصشده بررسی میکند (پیش از هر تراکنشی در آن روز).
; From your monthly credit card statement
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 است.
; Initializing a cash account when starting your ledger
2020-01-01 * "Initial Balance" "Setting up cash account"
Assets:Cash:Wallet 200.00 USD
Equity:Opening-Balances -200.00 USDحساب Equity:Opening-Balances مبالغی را نگه میدارد که از منابع ناشناخته یا خارجی وارد دفتر شما میشوند.
برای اصلاحات سریع که اختلاف دقیق مهم نیست، دستور pad میتواند بهصورت خودکار مانده یک حساب را تنظیم کند تا با تأیید balance بعدی مطابقت داشته باشد و تفاوت را به یک حساب حقوق صاحبان سهام ثبت کند. از این با احتیاط استفاده کنید، چون میتواند مشکلات بزرگتر را پنهان کند. تعدیلهای صریح عموماً ایمنتر هستند.
بخش ۵: الگوهای تراکنش پیشرفته و واقعبینانه
ردیابی بدهیها: مدیریت مطالبات و بدهیهای قابل پرداخت
حسابداری دوطرفه برای ردیابی پولی که به شما بدهکارند (Assets:Receivables) یا شما به آنها بدهکارید (Liabilities:Payable) بینقص است.
مثال: شما هزینه شام گروهی ۹۰ دلار را میپردازید، و دوستتان باب سهم ۴۵ دلاری خود را به شما بدهکار است.
-
ثبت هزینه اولیه و مطالبه:
2024-08-05 * "Dinner Place" "Dinner with Bob" Expenses:Food:Restaurant 45.00 USD ; Your share Assets:Receivables:Bob 45.00 USD ; Bob owes you Assets:Bank:US:Chase:Checking -90.00 USD -
وقتی باب به شما بازپرداخت میکند:
2024-08-06 * "Bob" "Paid me back for dinner" Assets:Bank:US:Chase:Checking 45.00 USD Assets:Receivables:Bob -45.00 USD
حساب Assets:Receivables:Bob اکنون صفر است، و دفترهای شما کاملاً متوازن هستند.
داراییها در مقابل هزینهها: خرید خودرو و استهلاک
خریدی بزرگ مانند خودرو یک هزینه ساده نیست؛ تحصیل داراییای است که با گذر زمان ارزش خود را از دست میدهد (استهلاک).
-
ثبت خرید بهعنوان دارایی:
2023-01-15 * "Toyota Dealer" "Purchase of a new car" Assets:Car:ToyotaCamry 30000.00 USD Assets:Bank:US:Chase:Checking -30000.00 USD -
ثبت استهلاک سالانه: فرض کنید تخمین میزنید خودرو هر سال ۳٬۰۰۰ دلار از ارزشش را از دست میدهد. در پایان سال، این را بهعنوان هزینه ثبت میکنید.
2023-12-31 * "Depreciation" "Annual car value depreciation" Expenses:Depreciation:Car 3000.00 USD Assets:Car:ToyotaCamry -3000.00 USD
پس از این ورودی، حساب Assets:Car:ToyotaCamry شما بهدرستی ارزش جدید خودرو (۲۷٬۰۰۰ دلار) را نشان میدهد، و شما هزینه استفاده را بهدرستی بهعنوان هزینه آن سال لحاظ کردهاید.
بخش ۶: کاوش عمیق - مدلسازی داراییهای پیچیده دنیای واقعی
مطالعه موردی ۱: حسابداری املاک و مستغلات
خانه اغلب بزرگترین دارایی و بدهی شماست. در اینجا نحوه مدلسازی آن آمده است.
-
ایجاد حسابها و یک کالای سفارشی:
2022-01-01 commodity HOUSE_123MAIN name: "Property at 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 -
ثبت خرید: فرض کنید خانهای ۵۰۰ هزار دلاری با ۱۰۰ هزار دلار پیشپرداخت و وامی ۴۰۰ هزار دلاری میخرید.
2022-03-15 * "Settlement Company" "Purchase of 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 -
ثبت پرداختهای ماهانه رهن: پرداخت ماهانه شما شامل اصل وام (بدهی را کاهش میدهد) و بهره (یک هزینه) است.
2022-04-01 * "Mortgage Bank" "Monthly Mortgage Payment" Liabilities:Mortgage:HomeLoan 800.00 USD ; Principal Expenses:Home:Interest 1200.00 USD ; Interest Assets:Bank:US:Chase:Checking -2000.00 USD -
ردیابی افزایش ارزش (سود تحققنیافته): ارزش بازار یک خانه تغییر میکند. برای ردیابی این بدون تأثیر بر ارزش خالص رسمیتان (زیرا سود تا زمانی که نفروشید محقق نمیشود)، میتوانید از یک دستور قیمت با یک ارز «مجازی» استفاده کنید.
برای داراییهای بازار و جفتارزهای پشتیبانیشده، قیمتهای زنده میتواند نقلقولهای ارزشگذاری را در یک دفتر میزبانیشده نگه دارد. املاک منفرد همچنان به ارزیابیها و قیمتهای تاریخدار خودتان نیاز دارند، همانطور که در مثال زیر آمده است.
; The purchase price is the real cost basis 2022-03-15 price HOUSE_123MAIN 500000.00 USD ; An updated market estimate is an unrealized gain 2024-01-01 price HOUSE_123MAIN 550000.00 USD.UNREALIZED
این به شما امکان میدهد ارزش تخمینی را در نمودارهای Fava ببینید بدون آنکه بهنادرستی ترازنامهتان را متورم کنید.
یک دفتر نمونه زنده املاک و مستغلات با ردیابی رهن، استهلاک، و فروش ملک را کاوش کنید:
مطالعه موردی ۲: ردیابی واحدهای سهام محدود (RSU)
RSUها شکل رایجی از غرامت سهام هستند. حسابداری آنها شامل ردیابی اعطای اولیه، رویدادهای واگذاری، و کسر مالیات است.
-
راهاندازی اولیه: کالاهایی برای سهام واگذارشده (
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:Grant:Awards HOOL.UNVEST 2021-01-01 open Expenses:Grant:Vested HOOL.UNVEST 2021-01-01 open Income:Salary:Hooli:RSU USD 2021-01-01 open Expenses:Taxes:Federal USD 2021-01-01 open Expenses:Taxes:State USD -
ثبت اعطای اولیه: این تراکنش نشان میدهد که کل اعطا به یک حساب دارایی واگذارنشده منتقل میشود. هنوز چیزی مشمول مالیات نیست، بنابراین کل ورودی به کالای ردیابی
HOOL.UNVESTارز شده است.2021-02-01 * "Hooli" "Initial RSU Grant" Assets:Grant:Unvested 1000 HOOL.UNVEST Income:Grant:Awards -1000 HOOL.UNVEST -
ثبت یک رویداد واگذاری: این تراکنش کلیدی است. وقتی سهام واگذار میشود، درآمد شناسایی میکنید، کارفرما سهام را برای پرداخت مالیات کسر میکند، و شما بقیه را نگه میدارید. فرض کنید ۱۰۰ سهم به قیمت ۱۵۰٫۰۰ دلار واگذار میشود، بنابراین:
- غرامت ناخالص: ۱۰۰ × ۱۵۰٫۰۰ دلار = ۱۵٬۰۰۰٫۰۰ دلار
- سهام کسرشده برای مالیات: ۴۰ × ۱۵۰٫۰۰ دلار = ۶٬۰۰۰٫۰۰ دلار (فدرال ۴٬۸۰۰٫۰۰ دلار + ایالتی ۱٬۲۰۰٫۰۰ دلار)
- سهامی که نگه میدارید: ۶۰ × ۱۵۰٫۰۰ دلار = ۹٬۰۰۰٫۰۰ دلار بهای تمامشده
- نقد به شما: ۰٫۰۰ دلار — کل کسر بهصورت سهام پرداخت میشود
این مبالغ همان ورودی هستند، و آنها تطبیق میکنند: ۶٬۰۰۰٫۰۰ دلار مالیات بهعلاوه ۹٬۰۰۰٫۰۰ دلار سهام نگهداشتهشده دقیقاً همان ۱۵٬۰۰۰٫۰۰ دلار درآمد است.
2022-02-01 * "Hooli" "RSU Vesting Event" ; Ordinary income: 100 shares * $150.00 Income:Salary:Hooli:RSU -15000.00 USD ; Tax withheld, funded by 40 of the 100 shares (40 * $150.00 = $6,000.00) Expenses:Taxes:Federal 4800.00 USD Expenses:Taxes:State 1200.00 USD ; The 60 shares you keep, at their $150.00 vesting-day basis Assets:Brokerage:Etrade:HOOL 60 HOOL {150.00 USD} ; Retire the 100 unvested units the grant was tracking Assets:Grant:Unvested -100 HOOL.UNVEST Expenses:Grant:Vested 100 HOOL.UNVEST
این تراکنش واحد و متوازن، کل رویداد را مدلسازی میکند: اعطای واگذارنشده کاهش مییابد، درآمد شناسایی میشود، مالیات کسر میشود، و ۶۰ سهم خالص واگذارشده با بهای تمامشده صحیح برای محاسبات آتی سود سرمایه در حساب کارگزاری شما ظاهر میشود.
دو نکته ارزش کپی کردن در دفتر خودتان را دارند. نخست، کسر مالیات را حساب به حساب بنویسید بهجای آنکه اجازه دهید یک حساب متوازنکننده جامع آن را جذب کند — اگر ثبتهای فدرال و ایالتی به ارزش سهام کسرشده جمع نشوند، تراکنش متوازن نخواهد شد و Beancount به شما خواهد گفت. دوم، بین ثبتها خط خالی نگذارید: خط خالی تراکنش را پایان میدهد، و Beancount روی ثبتهای پس از آن خطای نحوی گزارش میدهد.
اگر کارفرمای شما سهام کسرشده را در بازار آزاد بفروشد بهجای آنکه آنها را به قیمت واگذاری بازگرداند، فروش یک تراکنش جداگانه است — کاهشی در Assets:Brokerage:Etrade:HOOL در برابر نقد — و هر تفاوتی بین قیمت فروش و بهای ۱۵۰٫۰۰ دلار یک سود یا زیان سرمایه کوچک است. آن را خارج از ورودی واگذاری نگه دارید.
بخش ۷: مدیریت پروژه برای دفتر کل شما
با رشد دفتر شما، سازماندهی کلیدی میشود.
استفاده از کنترل نسخه (Git) برای ایمنسازی دادههای شما
از آنجا که دفتر شما یک فایل متنی است، برای کنترل نسخه با Git بینقص است. این به شما تاریخچه کاملی از تمام تغییرات میدهد و شما را از حذفها یا اشتباهات تصادفی محافظت میکند. هشدار: دادههای مالی شما بسیار حساس هستند. از یک مخزن خصوصی در سرویسهایی مانند GitHub/GitLab استفاده کنید، یا خودتان میزبانی کنید.
سازماندهی با برچسبها (#) و پیوندها (^)
Beancount دو راه برای گروهبندی تراکنشها فراتر از حسابها فراهم میکند:
- برچسبها (
#): برای رویدادها یا پروژهها استفاده کنید. میتوانید همه تراکنشهای مربوط به یک سفر مشخص را فیلتر کنید، برای مثال.2024-07-20 * "Hotel" "Vienna" #trip-europe-2024 - پیوندها (
^): برای اتصال تراکنشهای مالی مرتبط که در زمانهای مختلف رخ میدهند، مانند برداشت نقد و کارمزد بانکی مرتبط، استفاده کنید.
یک استراتژی مقیاسپذیر برای ساختاردهی فایلهای شما (include)
یک فایل واحد و عظیم مدیریتش دشوار است. از دستور include برای تقسیم دفتر خود به چندین فایل استفاده کنید.
main.bean:
; Main ledger file
; Global options
option "title" "My Personal Ledger"
option "operating_currency" "USD"
; Include account declarations and other files
include "accounts.bean"
include "years/2023.bean"
include "years/2024.bean"
include "events/trip-europe-2024.bean"یک استراتژی سازمانی قوی، به ترتیب اولویت:
- بر اساس رویداد: یک فایل جداگانه برای یک رویداد بزرگ و خودکفا ایجاد کنید (مثلاً
trip-europe-2024.bean). - بر اساس دسته/دریافتکننده: برای تراکنشهای بسیار منظم و مکرر مانند قبوض آب و برق یا حقوق، آنها را در فایل خودشان گروهبندی کنید (مثلاً
recurring-rent.bean). - بر اساس حساب: برای تراکنشهایی که محکم به یک حساب خاص گره خوردهاند (بهره، کارمزدها، پرداختهای کارت اعتباری)، یک فایل مخصوص آن حساب را در نظر بگیرید.
- بر اساس تاریخ: برای همه سایر تراکنشهای عمومی، یک تقسیم ساده بر اساس سال (
2024.bean) یا ماه (2024/07.bean) مؤثر است.
بخش ۸: نتیجهگیری
Beancount منحنی یادگیری سختی ارائه میدهد اما این تلاش را با قدرتی بینظیر، انعطافپذیری، و کنترل بر دادههای مالیتان پاداش میدهد. با پذیرش اصول حسابداری دوطرفه و ابزارهای عملی که Beancount فراهم میکند، میتوانید از ردیابی ساده هزینه به یک سیستم کامل، دقیق و بینشبخش مدیریت مالی شخصی حرکت کنید. دفتر شما به داراییای دائمی، خصوصی و ارزشمند برای درک گذشته و برنامهریزی آیندهتان تبدیل میشود.
شروع کار با Beancount.io
Beancount.io یک پلتفرم مدرن مبتنی بر ابر برای مدیریت مالی است که سوابق تراکنش متنی شما را به صورتهای مالی جامع، از جمله صورت سود و زیان، ترازنامه، و تراز آزمایشی تبدیل میکند. Beancount.io با ترکیب قابلیت اطمینان فایلهای متنی ساده با ابزارهای قدرتمند مصورسازی، به شما کمک میکند کنترل دقیقی بر زندگی مالیتان حفظ کنید و در عین حال بینشهای ارزشمندی درباره عملکرد سرمایهگذاریتان به دست آورید.
سفر مالی خود را با Beancount.io آغاز کنید — برای اینکه هر سطح شامل چه چیزهایی است، طرحها و قیمتگذاری فعلی را ببینید.


