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

36 پست با برچسب "Beancount"

مشاهده همه برچسب‌ها

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

· 3 دقیقه مطالعه
Mike Thrift
Mike Thrift
Marketing Manager

تراکنش‌های املاک و مستغلات ممکن است بزرگترین فعالیت مالی در طول زندگی یک خانواده را تشکیل دهند. این مقاله توضیح می‌دهد که چگونه املاک و مستغلات را در بین‌کانت مدل‌سازی کنیم. من املاک و مستغلات را به عنوان یک دارایی و افزایش ارزش خانه را به عنوان سود تحقق‌نیافته در نظر می‌گیرم. علاوه بر این، وام مسکن به عنوان یک بدهی و بهره آن به عنوان یک هزینه مدل‌سازی می‌شود.

فرض کنیم آقای الف در تاریخ 1 ژانویه 2020، یک خانه لوکس واقع در خیابان ABC 123، شهر XYZ، کالیفرنیا، 12345 را به قیمت 1 میلیون دلار خریداری کرد. نرخ بهره 3.0%، پیش‌پرداخت 20% و مبلغ وام 800,000 دلار است.

موردمبلغ
مبلغ وام مسکن800,000
نرخ بهره3%
دوره وام مسکن30 سال
کل هزینه وام مسکن1,478,219.62
پرداخت‌های ماهانه4,106.17
بیمه خانه1,300 در سال (39,000 کل)
مالیات ملک7,500 در سال (225,000 کل)
تسویه وامدسامبر 2049
کل بهره پرداخت شده414,219.62

2023-06-09-tracking-real-estate

تصویر جزئیات وام مسکن

ایجاد حساب‌ها

ابتدا، خانه را به عنوان یک دارایی در نظر می‌گیریم. از آنجا که خانه به عنوان یک دارایی فهرست می‌شود، باید یک واحد به آن اختصاص داده شود. در این حالت، مقدار واحد فقط یک است، بعید است که چندین واحد وجود داشته باشد، و حتی اگر خانه n-ام باشد، ما می‌خواهیم آن را در یک دارایی جداگانه ثبت کنیم. یعنی، یک خانه معادل یک دارایی است، و این دارایی دارای یک واحد خاص است که ارزش آن فقط می‌تواند 1 باشد.

2019-12-31 commodity HOUSE.ABC
name: "123 ABC Street, XYZ City, CA, 12345"

2019-12-31 open Assets:Property:US:CA:123ABC HOUSE.ABC
2019-12-31 open Liabilities:Bank:US:SomeBank:Mortgage:Loan USD

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

خرید

با تنظیم حساب‌ها به روش بالا، عمل خرید خانه معادل است با:

قرض گرفتن پول (بدهی) + خرج کردن پول (پیش‌پرداخت) = 1 خانه در دارایی

مهمترین مرجع هنگام خرید ملک، احتمالاً صورت‌حساب تسویه خریدار است که جریان پول را به وضوح مشخص می‌کند.

2020-01-01 * "Buying the house"
Assets:Property:US:CA:123ABC 1 HOUSE.ABC {1,000,000 USD}
Assets:Bank:US:SomeBankA -100,000 USD
Assets:Bank:US:SomeBankB -101,000 USD
Liabilities:Bank:US:SomeBank:Mortgage:Loan -800,000.00 USD
Expenses:Home:Insurance 1,000 USD
Expenses:Home:Mortgage:Loan:ClosingCost

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

بازپرداخت وام‌های مسکن

بر اساس سابقه خرید فوق، ما در حال حاضر 800,000 دلار بدهکاریم. به دلیل بهره، و با توجه به اینکه تمام وام‌ها در ایالات متحده از نظر اصل و بهره به طور مساوی مستهلک می‌شوند، پرداخت ماهانه شامل بخشی برای بهره و بخشی برای اصل وام است. در مراحل اولیه، بهره بخش عمده را تشکیل می‌دهد.

برای ثبت بازپرداخت وام، تنها کاری که باید انجام دهید این است که صورت‌حساب

درک حساب‌های دریافتنی و پرداختنی در Beancount

· 3 دقیقه مطالعه
Mike Thrift
Mike Thrift
Marketing Manager

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

درک این اصطلاحات برای استفاده مؤثر از Beancount (یا هر سیستم حسابداری دوطرفه) بسیار مهم است. اما اگر مبتدی هستید نگران نباشید – ما همه چیز را گام به گام توضیح خواهیم داد!

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

2023-05-30-receiveable-and-payable

در حسابداری، «حساب‌های دریافتنی» و «حساب‌های پرداختنی» اصطلاحاتی هستند که برای ردیابی پولی که بدهکار است استفاده می‌شوند. «حساب‌های دریافتنی» به پولی اشاره دارد که دیگران به شما بدهکارند، در حالی که «حساب‌های پرداختنی» به پولی اشاره دارد که شما به دیگران بدهکارید.

بیایید یک مثال بزنیم:

  1. حساب‌های دریافتنی (A/R): فرض کنید شما یک کتابفروشی دارید و مشتری کتابی را به صورت نسیه می‌خرد. پولی که آن‌ها بابت کتاب به شما بدهکارند، یک حساب دریافتنی است.

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

در Beancount، این موارد معمولاً از طریق حساب‌های مربوطه ردیابی می‌شوند. مزیت اصلی در اینجا این است که تصویری واضح و دقیق از وضعیت مالی شما در هر زمان ارائه می‌دهد.

راه‌اندازی حساب‌های دریافتنی و پرداختنی در Beancount

ساختار فایل Beancount شما می‌تواند به همان اندازه که نیاز دارید ساده یا پیچیده باشد. برای حساب‌های دریافتنی و پرداختنی، احتمالاً می‌خواهید حساب‌های جداگانه‌ای را در بخش‌های دارایی‌ها و بدهی‌های خود ایجاد کنید.

در اینجا یک مثال ساده آورده شده است:

1970-01-01 open Assets:AccountsReceivable
1970-01-01 open Liabilities:AccountsPayable

ردیابی تراکنش‌ها

سمت دریافت‌کننده

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

2023-05-29 * "Sold books to customer on credit"
Assets:AccountsReceivable 100 USD
Income:BookSales -100 USD

در اینجا، شما ۱۰۰ دلار به حساب‌های دریافتنی خود اضافه می‌کنید زیرا مشتری این مبلغ را به شما بدهکار است. همزمان، درآمد خود را به همان میزان کاهش می‌دهید تا تعادل حفظ شود (زیرا هنوز پول را دریافت نکرده‌اید).

هنگامی که مشتری در نهایت پرداخت می‌کند، آن را به این صورت ثبت خواهید کرد:

2023-06-01 * "Received payment from customer"
Assets:Bank:Savings 100 USD
Assets:AccountsReceivable -100 USD

سمت پرداخت‌کننده

همین اصل برای حساب‌های پرداختنی نیز اعمال می‌شود، اما با علائم معکوس:

2023-05-30 * "Bought books from publisher on credit"
Liabilities:AccountsPayable 200 USD
Expenses:BookPurchases -200 USD

و هنگامی که بدهی خود را پرداخت می‌کنید:

2023-06-02 * "Paid off debt to publisher"
Liabilities:AccountsPayable -200 USD
Assets:Bank:Checking 200 USD

جمع‌بندی

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

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

معرفی مجدد طرح رایگان برای مشتریان جدید

· 2 دقیقه مطالعه
Mike Thrift
Mike Thrift
Marketing Manager

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

معرفی طرح رایگان جدید برای مشتریان جدید

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

2023-04-28-start-serving-free-users

مشتریان جدیدی که پس از اول ماه مه ۲۰۲۳ ثبت‌نام کنند، به طرح رایگان دسترسی خواهند داشت.

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

اگر هرگونه سؤال یا نگرانی دارید، لطفاً در تماس با ما تردید نکنید. ما همیشه اینجا هستیم تا به بازخورد شما گوش دهیم و هر مشکلی را که ممکن است داشته باشید، برطرف کنیم. از حمایت مداوم شما متشکریم و مشتاقانه منتظر ارائه بهترین خدمات ممکن به شما هستیم.

راهنمای سریع Beancount

· 2 دقیقه مطالعه
Mike Thrift
Mike Thrift
Marketing Manager

مثال نام حساب

Assets:US:BofA:Checking

cheatsheet-en

انواع حساب

Assets          +
Liabilities -
Income -
Expenses +
Equity -

کالاها

CNY, EUR, CAD, AUD
GOOG, AAPL, RBF1005
HOME_MAYST, AIRMILES
HOURS

دستورالعمل‌ها

نحو کلی

YYYY-MM-DD <Directive> <Parameters...>

باز کردن و بستن حساب‌ها

2001-05-29 open Expenses:Restaurant
2001-05-29 open Assets:Checking USD,EUR ; محدودیت‌های ارزی

2015-04-23 close Assets:Checking

اعلام کالاها (اختیاری)

1998-07-22 commodity AAPL
name: "Apple Computer Inc."

قیمت‌ها

2015-04-30 price AAPL   125.15 CNY
2015-05-30 price AAPL 130.28 CNY

یادداشت‌ها

2013-03-20 note Assets:Checking "برای پرسیدن در مورد تخفیف تماس گرفته شد"

اسناد

2013-03-20 document Assets:Checking "path/to/statement.pdf"

تراکنش‌ها

2015-05-30 * "شرحی در مورد این تراکنش"
Liabilities:CreditCard -101.23 CNY
Expenses:Restaurant 101.23 CNY

2015-05-30 ! "Cable Co" "Phone Bill" #tag ˆlink
id: "TW378743437" ; فراداده
Expenses:Home:Phone 87.45 CNY
Assets:Checking ; می‌توانید یکی از مبالغ را خالی بگذارید

ثبت‌ها

  ...    123.45 USD                             ساده
... 10 GOOG {502.12 USD} با بهای تمام شده هر واحد
... 10 GOOG {{5021.20 USD}} با بهای تمام شده کل
... 10 GOOG {502.12 # 9.95 USD} با هر دو بهای تمام شده
... 1000.00 USD @ 1.10 CAD با قیمت هر واحد
... 10 GOOG {502.12 USD} @ 1.10 CAD با بهای تمام شده و قیمت
... 10 GOOG {502.12 USD, 2014-05-12} با تاریخ
! ... 123.45 USD ... با پرچم

تأییدیه‌های موجودی و پر کردن (Padding)

; مبلغ را فقط برای ارز مشخص شده تأیید می‌کند:
2015-06-01 balance Liabilities:CreditCard -634.30 CNY

; درج خودکار تراکنش برای برآورده کردن تأییدیه زیر:
2015-06-01pad Assets:Checking Equity:Opening-Balances

رویدادها

2015-06-01 event "location" "New York, USA"
2015-06-30 event "address" "123 May Street"

گزینه‌ها

option "title" "دفتر کل شخصی من"

سایر

pushtag #trip-to-peru
...
poptag #trip-to-peru
; نظرات با یک نقطه ویرگول شروع می‌شوند

بهبود تجربه Beancount شما با لینک‌ها و پرس‌وجوهای سفارشی

· 4 دقیقه مطالعه
Mike Thrift
Mike Thrift
Marketing Manager

Beancount، سیستم حسابداری دوطرفه که مورد علاقه توسعه‌دهندگان و علاقه‌مندان به امور مالی است، در سادگی خود قدرتمند است. اما برای کسانی که کنترل بیشتر و ناوبری سریع‌تر در Fava، رابط وب Beancount، می‌خواهند، لینک‌های سفارشی نوار کناری و پرس‌وجوهای SQL می‌توانند گردش کار شما را به سطح بعدی ببرند.

در این راهنما، به شما نشان خواهیم داد که چگونه:

  • لینک‌های دسترسی سریع را به نوار کناری Fava اضافه کنید
  • از پرس‌وجوهای SQL برای فیلتر کردن و تحلیل پیشرفته استفاده کنید
  • گردش کار خود را برای بررسی‌های ماهانه یا تشخیص ناهنجاری سفارشی کنید

چرا Fava را سفارشی کنیم؟

Fava از قبل یک رابط کاربری زیبا برای مشاهده دفتر کل Beancount شما است، اما با رشد دفتر روزنامه شما، نیاز به میانبرهای بهتر و پرس‌وجوهای هوشمندتر نیز افزایش می‌یابد.

مشکلاتی که این راه حل می‌کند:

  • ناوبری مکرر در بازه‌های زمانی
  • فیلتر کردن تراکنش‌ها در حساب‌های تو در تو
  • شناسایی سریع‌تر مانده‌های منفی یا ناهنجاری‌ها

✨ لینک‌های سفارشی نوار کناری

بیایید با بهبود گردش کار روزانه شما با میانبرهای ساده نوار کناری شروع کنیم. این لینک‌ها در نوار کناری سمت چپ Fava ظاهر می‌شوند و می‌توانند شما را مستقیماً به نماهای فیلتر شده مانند تراکنش‌های این ماه یا درآمد ماه گذشته ببرند.

این خطوط را به فایل Beancount خود اضافه کنید:

2021-01-01 custom "fava-sidebar-link" "Current Month" "/jump?time=month"
2021-01-01 custom "fava-sidebar-link" "Last Month" "/jump?time=month-1"
2021-01-01 custom "fava-sidebar-link" "Clear All" "/jump?account=&time=&filter="

آنها چه کاری انجام می‌دهند:

  • ماه جاری: نمای تراکنش‌ها را فیلتر شده بر اساس ماه جاری باز می‌کند.
  • ماه گذشته: فوراً به ماه قبل می‌پرد—عالی برای بررسی‌های پایان ماه.
  • پاک کردن همه: فیلترها را بازنشانی می‌کند و دوباره همه ورودی‌ها را نمایش می‌دهد.

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

🔍 پرس‌وجوهای سفارشی SQL

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

SELECT account, units(sum(position)), sum(position)
WHERE number(units(position)) < 0
AND account ~ '.*:BCM:.*'
AND date >= DATE(2021,12,9)
AND date < DATE(2022,1,9)

توضیح:

  • account ~ '.*:BCM:.*': حساب‌هایی را که شامل :BCM: در نام خود هستند، فیلتر می‌کند.
  • number(units(position)) < 0: مانده‌های منفی (مانند بودجه‌های بیش از حد مصرف شده) را علامت‌گذاری می‌کند.
  • فیلترهای تاریخ، نتیجه را به یک بازه زمانی ۱ ماهه خاص محدود می‌کنند.

موارد استفاده:

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

🛠 نکته حرفه‌ای: ترکیب لینک‌ها + پرس‌وجوها

در حالی که Fava امکان لینک مستقیم به پرس‌وجوهای سفارشی را نمی‌دهد، می‌توانید با انجام موارد زیر یک عادت بررسی ماهانه ایجاد کنید:

  • استفاده از لینک «ماه جاری» برای شروع بررسی خود
  • باز کردن تب پرس‌وجوهای ذخیره شده خود در یک پنجره دیگر
  • بررسی همزمان هر دو—ابتدا فیلتر کنید، سپس عمیق شوید

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

افکار نهایی

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

پاداش: اگر از گزارش‌های سفارشی Fava استفاده می‌کنید، حتی می‌توانید داشبوردهای کاملی متناسب با روال‌های مالی شخصی خود بسازید.

آماده‌اید کنترل را به دست بگیرید؟

کوچک شروع کنید: لینک «ماه جاری» را اضافه کنید. سپس پرس‌وجوهای خود را بسازید. خود آینده‌تان از شما تشکر خواهد کرد.

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

پیش‌بینی تراکنش‌های آتی در Beancount

· 1 دقیقه مطالعه
Mike Thrift
Mike Thrift
Marketing Manager

یک افزونه برای Beancount وجود دارد که تراکنش‌های تکرارشونده آتی را پیش‌بینی می‌کند. چگونه آن را در beancount.io اعمال کنیم؟ محتوای زیر را در فایل دفتر کل خود قرار دهید.

; افزونه را وارد کنید
plugin "fava.plugins.forecast"

; اضافه کردن هزینه ماهانه HOA
2022-05-30 # "HOA fee [MONTHLY]"
Expenses:Hoa 1024.00 USD
Assets:Checking -1024.00 USD

اسکرین‌شات افزونه پیش‌بینی

2022-05-30-forecast-plugin

و سپس، پیش‌بینی را در نمودار سود خالص مشاهده خواهید کرد.

افزونه پیش‌بینی

تگ [MONTHLY] در بالا به این معنی است که تراکنش برای همیشه تکرار خواهد شد. اگر شرایط بیشتری برای اعمال دارید، می‌توانید از [MONTHLY UNTIL 2022-06-01]، [MONTHLY REPEAT 5 TIMES]، [YEARLY REPEAT 5 TIMES]، یا [WEEKLY SKIP 1 TIME REPEAT 5 TIMES] استفاده کنید.

ایجاد و پیگیری فاکتورها با Beancount

· 6 دقیقه مطالعه
Mike Thrift
Mike Thrift
Marketing Manager

یک الگوی متن ساده، یک گردش کار تکرارپذیر، و یک پرس و جوی واحد برای «چه کسی هنوز به من بدهکار است؟»


2022-02-12-crafting-tracking-invoices-with-beancount

صدور فاکتور می‌تواند مانند یک کار طاقت‌فرسا باشد، گیر کرده بین کاری که تمام کرده‌اید و پرداختی که منتظرش هستید. اما یک فرآیند صدور فاکتور خوب، ستون فقرات جریان نقدی سالم است. این کار دو وظیفه را انجام می‌دهد: به وضوح به مشتریان شما می‌گوید که چه چیزی و چه زمانی بدهکار هستند، و به سیستم حسابداری شما حقایق غیرقابل انکاری را که نیاز دارد، می‌دهد.

در حالی که برنامه‌های SaaS اختصاصی می‌توانند فایل‌های PDF شیک و خودکار ارسال کنند، اغلب با هزینه‌های ماهانه همراه هستند و داده‌های شما را در یک silo اختصاصی قفل می‌کنند. یک رویکرد سبک و متن ساده با استفاده از Beancount جایگزین قدرتمندی ارائه می‌دهد. می‌توانید هر فاکتور را به مجموعه‌ای واضح از ورودی‌های حسابداری تبدیل کنید و از مزایای کنترل نسخه، ابرداده‌های قدرتمند و پرس و جوی فوری بهره‌مند شوید - بدون نیاز به اشتراک.


حداقل فاکتور قابل قبول (فیلدهایی که هرگز نباید از آنها صرف نظر کنید)

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

  • جزئیات فروشنده: نام و آدرس فیزیکی کسب و کار شما.
  • جزئیات مشتری: نام مشتری شما و (در صورت امکان) آدرس آنها.
  • شماره فاکتور: یک شناسه منحصر به فرد و متوالی که هرگز دوباره استفاده نمی‌شود. INV-045 بعد از INV-044 می‌آید.
  • تاریخ صدور و سررسید: به وضوح بیان کنید که فاکتور چه زمانی صادر شده و چه زمانی انتظار پرداخت می‌رود.
  • اقلام فاکتور: شرح واضحی از خدمات یا محصولات، همراه با کمیت، نرخ و جمع کل هر ردیف.
  • جمع جزئی، مالیات و جمع کل: محاسبات را نشان دهید تا مشتری بتواند به راحتی آن را دنبال کند.
  • یادداشت‌های اختیاری: مکانی برای تشکر، دستورالعمل‌های واریز یا شماره سفارش خرید ارائه شده توسط مشتری.

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

الگوهای ما را از اینجا دریافت کنید: beancount.io/invoice‑templates (موجود در قالب‌های Google Docs، Word، Sheets، Excel و PDF)


ثبت فاکتور در دفتر کل شما

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

1. هنگام صدور فاکتور:

شما تراکنشی ایجاد می‌کنید که کل مبلغ را از حساب Income شما به Assets:AccountsReceivable منتقل می‌کند. این یک IOU دیجیتال در دفاتر شما ایجاد می‌کند.

; 1404-05-01 فاکتور #045  طراحی وب برای شرکت Acme
2025-07-21 * "شرکت Acme" "INV-045 طراحی وب"
Assets:AccountsReceivable 3500.00 USD ; due:2025-08-04
Income:Design:Web
invoice_id: "INV-045"
contact_email: "ap@acme.example"
link: "docs/invoices/2025-07-21_Acme_INV-045.pdf"

در اینجا، شما AccountsReceivable را بدهکار و حساب Income خود را بستانکار می‌کنید. به ابرداده‌های غنی توجه کنید: تاریخ سررسید، invoice_id منحصر به فرد و حتی یک link: مستقیم به PDF که ارسال کرده‌اید.

2. هنگام پرداخت مشتری:

وقتی پول به حساب بانکی شما واریز می‌شود، تراکنش دومی را برای "بستن" IOU ثبت می‌کنید. این موجودی را از AccountsReceivable به حساب جاری شما منتقل می‌کند.

2025-08-01 * "شرکت Acme" "پرداخت INV-045"
Assets:Bank:Checking 3500.00 USD
Assets:AccountsReceivable
invoice_id: "INV-045"

موجودی INV-045 در Assets:AccountsReceivable اکنون صفر است و دفاتر شما کاملاً متعادل هستند.

پیوست کردن PDF: کلید ابرداده link: به ویژه هنگام استفاده با Fava، رابط وب Beancount، قدرتمند است. Fava یک لینک قابل کلیک را مستقیماً در نمای تراکنش ارائه می‌دهد، بنابراین سند منبع هرگز بیش از یک کلیک فاصله ندارد. این گردش کار در اوایل سال 2016 در یک درخواست ویژگی (GitHub) پیش‌بینی شده بود.


یک پرس و جو برای فهرست کردن همه فاکتورهای باز

بنابراین، چه کسی هنوز به شما پول بدهکار است؟ با این سیستم، نیازی به جستجو در ایمیل‌ها یا صفحات گسترده ندارید. شما فقط به یک پرس و جوی ساده نیاز دارید.

موارد زیر را به عنوان فایلی با نام open-invoices.sql ذخیره کنید:

SELECT
meta('invoice_id') AS id,
payee,
narration,
date,
number(balance) AS outstanding
WHERE
account = "Assets:AccountsReceivable"
AND balance != 0
ORDER BY
date;

حالا، آن را از خط فرمان خود اجرا کنید:

bean-query books.beancount open-invoices.sql

در چند ثانیه، یک گزارش دقیق و به‌روز از همه فاکتورهای معوق، شامل شناسه فاکتور، مشتری، تاریخ صدور و مبلغ بدهی دریافت خواهید کرد. بدون نیاز به نرم‌افزار اضافی.


خودکارسازی کارهای تکراری

زیبایی متن ساده، قابلیت اسکریپت نویسی آن است. می‌توانید بخش‌های خسته‌کننده این گردش کار را خودکار کنید.

  • قالب + Pandoc = PDF: الگوی فاکتور خود را در Markdown نگه دارید. یک اسکریپت کوچک پایتون می‌تواند متغیرها (نام مشتری، اقلام فاکتور، شماره فاکتور) را پر کند و ابزار خط فرمان Pandoc می‌تواند فوراً آن را به یک PDF حرفه‌ای تبدیل کند.
  • قلاب Git Pre-commit: اگر دفتر کل خود را در Git ذخیره می‌کنید، یک قلاب pre-commit ساده می‌تواند قبل از ذخیره کار شما، بررسی‌هایی را انجام دهد. می‌تواند تأیید کند که هر invoice_id جدید منحصر به فرد است، که ارسال‌های تراکنش به صفر می‌رسد و فایلی که در ابرداده link: به آن ارجاع داده شده است واقعاً وجود دارد.
  • Cron Job: یک کار زمان‌بندی شده (cron job) تنظیم کنید تا پرس و جوی open-invoices.sql شما هر شب اجرا شود و خلاصه را برای شما ایمیل کند. شما هر روز را با دانستن دقیق اینکه چه کسی به یک یادآوری دوستانه نیاز دارد، شروع خواهید کرد.

یک هشدار واقع‌بینانه

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

برای اکثر فریلنسرها و فروشگاه‌های کوچک، این مرحله دستی قیمت کمی برای یک سیستم حسابداری ضدگلوله، قابل حسابرسی و رایگان است که شما کاملاً مالک و کنترل آن هستید (beancount.io).


مراحل بعدی

آماده‌اید تا کنترل صدور فاکتور خود را به دست بگیرید؟ در اینجا نحوه شروع آمده است.

  1. یک الگو دانلود کنید و از آن برای ایجاد فاکتور واقعی بعدی خود استفاده کنید و مطمئن شوید که از یک شماره فاکتور متوالی استفاده می‌کنید.
  2. فایل‌های PDF ارسال شده خود را در یک پوشه اختصاصی مانند docs/invoices/ ذخیره کنید و از کلید ابرداده link: در تراکنش Beancount خود برای ارجاع به آنها استفاده کنید.
  3. پرس و جوی open-invoices.sql را ذخیره کنید و اجرای آن را بخشی از بررسی مالی هفتگی خود قرار دهید.

حسابداری متن ساده به معنای کنار گذاشتن دقت یا کنترل نیست - فقط به این معنی است که پایگاه داده قابل grep است. با یک الگوی ساده و قطعه کدهای بالا، سریعتر پول دریافت می‌کنید و دفاتر خود را بی‌عیب و نقص نگه می‌دارید.

ثبت‌های تعدیلی در Beancount: تنظیمات پایان ماه شما

· 5 دقیقه مطالعه
Mike Thrift
Mike Thrift
Marketing Manager

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

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

2022-01-25-adjusting-entries-in-beancount-your-month-end-tune-up


چرا ثبت‌های تعدیلی مهم هستند

انجام این تنظیمات برای حسابداری صحیح اساسی است. آنها اطمینان می‌دهند که صورت‌های مالی شما دقیق و قابل اعتماد هستند.

  • دقت تعهدی: ثبت‌های تعدیلی موتور حسابداری تعهدی هستند. آنها درآمد و هزینه‌ها را به دوره‌ای که واقعاً کسب یا متحمل شده‌اند منتقل می‌کنند، صرف نظر از اینکه چه زمانی پول نقد رد و بدل شده است. این امر اصول اصلی شناسایی درآمد و تطبیق را که پایه و اساس حسابداری مدرن را تشکیل می‌دهند، برآورده می‌کند (AccountingCoach.com).

  • شاخص‌های کلیدی عملکرد قابل اعتماد: شاخص‌های کلیدی عملکرد تنها به اندازه داده‌های پشت آنها خوب هستند. معیارهایی مانند حاشیه ناخالص، درآمد خالص و پیش‌بینی‌های جریان نقدی تنها زمانی حقیقت را می‌گویند که تعویق‌ها، تعهدات و برآوردها به درستی ثبت شده باشند (Corporate Finance Institute).

  • رد حسابرسی شفاف: تنظیمات صریح پایان ماه سابقه روشنی از استدلال مالی شما ایجاد می‌کند. این به حسابرسان (و خود آینده شما) کمک می‌کند تا به راحتی ردیابی کنند که چه چیزی تغییر کرده و چرا، و اعتماد به اعداد شما را ایجاد می‌کند (Accountingverse).


شش دسته بندی رایج (با قطعه کدهای Beancount)

در اینجا شش نوع رایج از ثبت‌های تعدیلی، با مثال‌هایی از نحوه ثبت آنها در دفتر کل Beancount شما آورده شده است. به استفاده از فراداده‌هایی مانند adj:"accrual" توجه کنید تا این ثبت‌ها به راحتی در آینده پیدا و تجزیه و تحلیل شوند.

۱. درآمد تعهدی

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

2025-07-31 * "مشاوره - ساعات جولای"
Assets:AccountsReceivable 12000.00 USD
Income:Consulting
; adj:"accrual" period:"Jul-25"

۲. هزینه تعهدی

هزینه‌ای که متحمل شده‌اید اما هنوز آن را پرداخت نکرده‌اید، مانند قبض آب و برق که ماه آینده می‌رسد.

2025-07-31 * "وکیل - حق الوکاله جولای"
Expenses:Legal 2500.00 USD
Liabilities:AccruedPayables
; adj:"accrual"

۳. درآمد معوق (کسب نشده)

این زمانی اعمال می‌شود که مشتری از قبل به شما پرداخت می‌کند. شما بخشی از آن درآمد را به مرور زمان که کسب می‌شود، شناسایی می‌کنید.

2025-07-31 * "پیش پرداخت SaaS سالانه (شناسایی ۱/۱۲)"
Liabilities:UnearnedRevenue 833.33 USD
Income:SaaS
; adj:"deferral"

۴. هزینه پیش پرداخت شده (معوق)

هنگامی که برای یک هزینه از قبل پرداخت می‌کنید (مانند بیمه نامه سالانه)، هر ماه بخشی از آن را هزینه می‌کنید.

2025-07-31 * "بیمه - هزینه ۱ ماه از پیش پرداخت"
Expenses:Insurance 400.00 USD
Assets:PrepaidInsurance
; adj:"deferral"

۵. استهلاک و مستهلک شدن

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

2025-07-31 * "استهلاک مک استودیو"
Expenses:Depreciation 1250.00 USD
Assets:Computers:AccumDepr
; asset_id:"MAC-03" adj:"estimate"

۶. ذخیره مطالبات مشکوک الوصول

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

2025-07-31 * "تامین بدهی سوخت شده (۲٪ از مطالبات)"
Expenses:BadDebt 700.00 USD
Assets:AllowanceForBadDebt
; basis:"A/R" rate:0.02 adj:"estimate"

یک گردش کار تکرارپذیر

برای اینکه بسته شدن پایان ماه شما کارآمد و بدون خطا باشد، یک گردش کار ثابت را اتخاذ کنید.

  • از یک فایل جداگانه استفاده کنید. تمام تنظیمات یک دوره را در یک مکان نگه دارید، مانند adjustments-2025-07.bean. در فایل دفتر کل اصلی خود، از دستورالعمل include برای وارد کردن آن در آخر استفاده کنید. این تضمین می‌کند که تنظیمات درست قبل از تولید گزارش‌های نهایی اعمال می‌شوند.

  • فراداده‌های خود را استاندارد کنید. همیشه از کلیدها و مقادیر فراداده ثابت استفاده کنید، مانند adj:"accrual|deferral|estimate" و period:"Jul-25". این امر جستجو و بررسی انواع خاصی از تنظیمات را آسان می‌کند.

  • یک بررسی پیش از پرواز انجام دهید. قبل از اعمال تغییرات خود در Git، bean-check را روی فایل تنظیمات خود اجرا کنید تا هرگونه اشتباه تایپی یا ثبت نامتوازن را پیدا کنید.

  • یک بررسی سلامت تک خطی انجام دهید. این پرس و جو تایید می‌کند که تمام تنظیمات شما برای دوره متعادل هستند و به شما اطمینان می‌دهد که خطایی وارد نکرده‌اید.

    bean-query main.bean "SELECT account, SUM(number) WHERE meta('adj') AND meta('period') = 'Jul-25' GROUP BY account"

نکات سریع عیب‌یابی 🤔

  • آیا مانده Liabilities:UnearnedRevenue شما در حال افزایش است؟ مراحل قرارداد خود را بررسی کنید. ممکن است درآمد را خیلی کندتر از کاری که ارائه می‌دهید، شناسایی کنید.

  • آیا مانده Assets:PrepaidInsurance شما منفی است؟ احتمالاً آن را سریعتر از برنامه دارایی هزینه می‌کنید. برنامه مستهلک شدن خود را دوباره بررسی کنید.

  • آیا روزهای فروش معوق (DSO) شما پس از تعهدات بدتر می‌شود؟ درآمد تعهدی شما ممکن است مشکلات وصول اساسی را پنهان کند. این شاخص کلیدی عملکرد را با یک گزارش پیری مطالبات جفت کنید تا مشتریان دیرپرداخت را قبل از اینکه به مشکل جریان نقدی تبدیل شود، شناسایی کنید.


افکار پایانی

ثبت‌های تعدیلی می‌توانند خسته‌کننده به نظر برسند، اما ارزش آنها زمانی آشکار می‌شود که صورت‌های سود و زیان "قبل" و "بعد" خود را مقایسه کنید - تفاوت اغلب مادی است. با Beancount، این تنظیمات به وصله‌های کوچک و قابل جستجو تبدیل می‌شوند که می‌توانید مانند کد آنها را خودکار و بررسی کنید.

عادت پایان ماه را ایجاد کنید، و اعداد شما به اندازه مهندسی شما دقیق خواهند ماند.

موفق باشید!

تحول در مدیریت امور مالی شخصی با Beancount.io

· 4 دقیقه مطالعه
Mike Thrift
Mike Thrift
Marketing Manager

حسابداران Beancount (Beancounters) به طور سنتی از ابزارهای خط فرمان یا سرورهای خودمیزبان با شبکه‌های خصوصی استفاده می‌کنند، جایی که باید از طریق رایانه یا یک ویرایشگر متن عمومی در موبایل کار کنند. Beancount.io با ارائه اپلیکیشن‌های موبایل متن‌باز اندروید و iOS و یک ابر امن، مشکلات را کاهش می‌دهد تا دفتر کل شما اکنون تنها چند ضربه با اثر انگشت شما فاصله داشته باشد.

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

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

2022-01-08-instant-access-to-your-beancount-cloud-ledger-anytime-anywhere

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

برای کارهای سنگین، حسابداران Beancount همچنان می‌توانند از رایانه‌های خود برای ویرایش یا مشاهده دفتر کل با مرورگرهای خود با مراجعه به https://beancount.io یا همگام‌سازی با Dropbox استفاده کنند. این کار انعطاف‌پذیری ابزارهای خط فرمان را حفظ می‌کند، در حالی که دسترسی بین دستگاهی راه‌حل مبتنی بر ابر را از دست نمی‌دهد.

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

مایک تریفت، مهندس بک‌اند که روی این محصول کار می‌کند، می‌گوید:

من قبلاً هر روز برای خودم یادآوری تنظیم می‌کردم که لپ‌تاپم را باز کنم و سوابق را در فایل‌های Beancount خود وارد کنم. اکنون، با Beancount.io، ویرایش دفتر کل من هر زمان که به آن نیاز داشته باشم، حتی زمانی که در بیرون از خانه در حال خرید چیزی در فروشگاه هستم، بسیار آسان‌تر است.

ژی لی، مهندس نرم‌افزار از فیس‌بوک، به ما می‌گوید:

من تمام فایل‌های Beancount خود را به Beancount.io منتقل کرده‌ام، و اکنون برای استفاده روزمره من کاملاً کار می‌کند. من برای ویژگی‌های Pro مانند پشتیبان‌گیری خودکار داده‌ها هزینه پرداخت کرده‌ام، اما احساس می‌کنم کارهای بیشتری وجود دارد که شما می‌توانید برای بهبود خدمات انجام دهید.

اکنون می‌توانید در https://beancount.io/sign-up/ ثبت‌نام کنید یا اپلیکیشن iOS یا اپلیکیشن اندروید را دانلود کنید. ما ثبت‌نام را ساده‌سازی کرده‌ایم تا حداقل اطلاعات ممکن را از شما برای راه‌اندازی سرویس جمع‌آوری کنیم. سپس یک دفتر کل خالی از پیش تعیین شده دریافت خواهید کرد که آماده است تا بلافاصله یک ورودی به آن اضافه کنید.

سوالات متداول

آیا Beancount.io داده‌های دفتر کل من را به شخص ثالثی می‌فروشد؟

  • خیر. ما متعهد به حفظ امنیت و حریم خصوصی داده‌های شما هستیم و هرگز داده‌های دفتر کل شما را نخواهیم فروخت.

آیا داده‌های من امن است؟

  • بله. ما ایمیل و دفتر کل شما را با AES256، رمز عبور شما را با BCrypt، و درخواست‌های شبکه شما را با SSL محافظت می‌کنیم.

آیا داده‌های دفتر کل من به صورت سرتاسری رمزگذاری شده است؟

  • خیر. به دلیل محدودیت‌های فنی، ما همچنان باید داده‌های شما را هنگام فهرست‌بندی فایل دفتر کل در سرورهای تولیدی، در حافظه رمزگشایی کنیم. بنابراین، دسترسی مستقیم هر یک از اعضای تیم خود را محدود می‌کنیم. متأسفانه، به دلیل هزینه‌های بالا نمی‌توانیم این کار را در Intel SGX یا هر گاوصندوق امنیتی دیگری انجام دهیم.

آیا این یک سرویس قابل اعتماد است که بتوانم برای چند سال آینده به آن اعتماد کنم؟

  • بله. ما Beancount.io را در تاریخ ۴ جولای ۲۰۱۹ راه‌اندازی کردیم، و بیش از دو سال است که این سرویس را به صورت امن و قابل اعتماد اداره کرده‌ایم. بنابراین، دلیلی برای عدم ادامه سرویس در آینده نداریم.

آیا می‌توانم ویژگی‌های جدید درخواست کنم و از پروژه حمایت مالی کنم؟

راهنمای جامع مهاجرت از QuickBooks به Beancount

· 35 دقیقه مطالعه
Mike Thrift
Mike Thrift
Marketing Manager

مرحله ۱: استخراج داده‌ها از QuickBooks

مهاجرت داده‌های پنج ساله با خارج کردن تمام سوابق QuickBooks در یک فرمت قابل استفاده آغاز می‌شود. QuickBooks Desktop و QuickBooks Online گزینه‌های خروجی‌گیری متفاوتی دارند:

2021-12-01-from-quickbooks-to-plain-text-a-migration-playbook

۱.۱ QuickBooks Desktop – گزینه‌های خروجی‌گیری

IIF (Intuit Interchange Format): نرم‌افزار QuickBooks Desktop می‌تواند لیست‌ها (مانند سرفصل حساب‌ها، مشتریان، فروشندگان) را به فایل‌های متنی .IIF خروجی بگیرد. در QuickBooks Desktop، به مسیر File → Utilities → Export → Lists to IIF بروید، سپس لیست‌های مورد نیاز خود (مانند Chart of Accounts، Customers، Vendors) را انتخاب کنید. این کار یک فایل متنی تولید می‌کند که شامل نام حساب‌ها، انواع آن‌ها و داده‌های لیست است. IIF یک فرمت اختصاصی اما مبتنی بر متن ساده است که تجزیه (parse) آن نسبتاً آسان است. از آن برای استخراج سرفصل حساب‌ها (Chart of Accounts) و لیست مخاطبین خود برای ارجاع در Beancount استفاده کنید.

دفتر کل/دفتر روزنامه از طریق CSV: برای داده‌های تراکنش، QuickBooks Desktop یک خروجی کامل با یک کلیک ارائه نمی‌دهد، اما می‌توانید از گزارش‌ها استفاده کنید. روش پیشنهادی، خروجی گرفتن از دفتر روزنامه عمومی (General Journal) (شامل تمام تراکنش‌ها) در بازه زمانی مورد نظر است. در QuickBooks Desktop، به مسیر Reports → Accountant & Taxes → Journal بروید، تاریخ‌ها را از اولین تراکنش تا امروز تنظیم کنید و روی Export → Excel کلیک کنید. پس از حذف هرگونه سرصفحه/پاصفحه گزارش و ستون‌های خالی، نتیجه را به صورت CSV ذخیره کنید. اطمینان حاصل کنید که داده‌های عددی تمیز هستند: شامل سنت (مثلاً 3.00 نه 3)، بدون علامت نقل قول اضافی، و بدون نماد ارز یا منفی‌های دوگانه در CSV باشند. فایل CSV باید ستون‌هایی مانند Date, Trans #, Name, Account, Memo, Debit, Credit, Balance (یا یک ستون Amount واحد بسته به فرمت گزارش) داشته باشد.

نکته: QuickBooks Desktop 2015 به بعد همچنین می‌تواند تراکنش‌ها را از طریق کادر محاوره‌ای Find خروجی بگیرد. از مسیر Edit → Find → Advanced استفاده کنید، بازه زمانی را برای پنج سال تنظیم کنید، سپس نتایج را به CSV خروجی بگیرید. هشدار: برخی نسخه‌ها خروجی را به 32,768 خط محدود می‌کنند. اگر داده‌های بسیار بزرگی دارید، برای جلوگیری از بریده شدن داده‌ها، سال به سال (یا در بخش‌های کوچکتر) خروجی بگیرید و بعداً آن‌ها را ترکیب کنید. اطمینان حاصل کنید که بازه‌های زمانی برای جلوگیری از تکرار، همپوشانی نداشته باشند.

فرمت‌های دیگر (QBO/QFX/QIF): نرم‌افزار QuickBooks Desktop می‌تواند تراکنش‌های بانکی را از طریق فایل‌های .QBO (Web Connect) یا .QFX/.OFX وارد کند، اما برای خروجی گرفتن از QuickBooks، این فرمت‌ها معمول نیستند. اگر هدف شما فقط استخراج تراکنش‌های بانکی است، ممکن است قبلاً آن‌ها را در فرمت QBO/OFX از بانک خود داشته باشید. با این حال، برای خروجی کامل دفتر کل، به IIF و CSV پایبند باشید. QuickBooks Desktop نمی‌تواند مستقیماً بدون ابزارهای شخص ثالث به فرمت QIF (Quicken Interchange Format) خروجی بگیرد. اگر راهی برای دریافت QIF پیدا کردید، توجه داشته باشید که برخی از ابزارهای دفتر کل (مانند Ledger 2.x قدیمی) می‌توانستند QIF را بخوانند، اما بهتر است در این فرآیند با CSV کار کنیم.


۱.۲ QuickBooks Online – گزینه‌های خروجی‌گیری

خروجی داخلی Excel/CSV: نسخه آنلاین QuickBooks (QBO) ابزاری به نام Export Data ارائه می‌دهد. به Settings ⚙ → Tools → Export Data بروید. در کادر محاوره‌ای خروجی، از تب Reports برای انتخاب داده‌ها (مانند General Ledger یا Transaction List) و از تب Lists برای لیست‌ها (سرفصل حساب‌ها و غیره) استفاده کنید، All dates را انتخاب کرده و به Excel خروجی بگیرید. QuickBooks Online یک فایل ZIP حاوی چندین فایل Excel برای گزارش‌ها و لیست‌های انتخاب شده (به عنوان مثال، سود و زیان، ترازنامه، دفتر کل، مشتریان، فروشندگان، سرفصل حساب‌ها و غیره) دانلود می‌کند. سپس می‌توانید این فایل‌های Excel را برای پردازش به CSV تبدیل کنید.

گزارش جزئیات تراکنش: اگر خروجی پیش‌فرض QBO شامل یک فایل دفتر کل واحد نباشد، می‌توانید به صورت دستی یک گزارش دقیق تهیه کنید:

  1. به Reports بروید و Transaction Detail by Account (یا General Ledger در برخی نسخه‌های QBO) را پیدا کنید.
  2. Report period را روی بازه کامل پنج ساله تنظیم کنید.
  3. زیر گزینه‌های گزارش، Group by = None را تنظیم کنید (تا تراکنش‌های فردی بدون جمع‌های فرعی لیست شوند).
  4. ستون‌ها را سفارشی کنید تا حداقل شامل این موارد باشند: Date، Transaction Type، Number، Name (Payee/Customer)، Memo/Description، Account، Debit، Credit (یا یک ستون Amount واحد) و Balance. در صورت استفاده، هرگونه class یا location را نیز شامل کنید.
  5. گزارش را اجرا کرده و سپس Export to Excel را بزنید.

این کار یک دفتر کل دقیق از تمام تراکنش‌ها را به دست می‌دهد. آن را به صورت CSV ذخیره کنید. هر خط نشان‌دهنده یک آرتیکل (پستینگ) از یک تراکنش است. بعداً برای تبدیل، باید خطوط را بر اساس تراکنش گروه‌بندی کنید.

سرفصل حساب‌ها و لیست‌های دیگر: در QuickBooks Online می‌توانید سرفصل حساب‌ها را از طریق Accounting → Chart of Accounts → Batch Actions → Export to Excel خروجی بگیرید. این کار را برای دریافت نام‌ها و انواع حساب‌ها انجام دهید. به همین ترتیب، اگر می‌خواهید نام‌ها را برای فراداده (metadata) حفظ کنید، لیست مشتریان، فروشندگان و غیره را نیز خروجی بگیرید.

API QuickBooks Online (اختیاری): برای یک رویکرد برنامه‌نویسی، Intuit یک REST API برای داده‌های QBO ارائه می‌دهد. کاربران پیشرفته می‌توانند یک اپلیکیشن QuickBooks Online ایجاد کنند (نیاز به حساب توسعه‌دهنده دارد) و از API برای دریافت داده‌ها در فرمت JSON استفاده کنند. به عنوان مثال، می‌توانید از نقطه پایانی (endpoint) Account برای سرفصل حساب‌ها و از نقاط پایانی گزارش JournalEntry یا GeneralLedger برای تراکنش‌ها کوئری بگیرید. SDKهای پایتون مانند python-quickbooks وجود دارند که API را در خود جای داده‌اند. با این حال، استفاده از API شامل احراز هویت OAuth است و برای یک مهاجرت یک‌باره، مگر اینکه اتوماسیون را ترجیح دهید، بیش از حد پیچیده است. برای اکثر موارد، خروجی دستی به CSV/Excel ساده‌تر و کمتر مستعد خطا است.


مرحله ۲: تبدیل و پاک‌سازی داده‌ها

هنگامی که داده‌های QuickBooks را در فرمت CSV (و/یا IIF) در اختیار دارید، مرحله بعدی تبدیل آن به فرمت دفتر کل متنی ساده Beancount است. این شامل تجزیه خروجی‌ها، نگاشت حساب‌های QuickBooks به سرفصل حساب‌های Beancount و فرمت‌بندی تراکنش‌ها با سینتکس Beancount است.

۲.۱ تجزیه خروجی‌های QuickBooks با پایتون

استفاده از پایتون دقت و تکرارپذیری را برای تبدیل تضمین می‌کند. ما اسکریپت‌هایی را برای دو وظیفه کلیدی تشریح می‌کنیم: وارد کردن سرفصل حساب‌ها و تبدیل تراکنش‌ها.

واردات و نگاشت حساب‌ها: بسیار مهم است که قبل از افزودن تراکنش‌ها، حساب‌های خود را در Beancount تنظیم کنید. حساب‌های QuickBooks دارای انواع (بانک، حساب‌های دریافتنی، هزینه و غیره) هستند که ما آنها را به سلسله مراتب Beancount (دارایی‌ها، بدهی‌ها، درآمد، هزینه‌ها و غیره) نگاشت خواهیم کرد. به عنوان مثال، می‌توانیم از نگاشتی مانند این استفاده کنیم:

# نگاشت نوع حساب کوییک‌بوکس به دسته‌بندی ریشه در بین‌کانت
AccountTypeMap = {
'BANK': 'Assets',
'CCARD': 'Liabilities',
'AR': 'Assets', # حساب‌های دریافتنی به عنوان دارایی
'AP': 'Liabilities', # حساب‌های پرداختنی به عنوان بدهی
'FIXASSET': 'Assets',
'OASSET': 'Assets', # سایر دارایی‌ها
'OCASSET': 'Assets', # سایر دارایی‌های جاری
'LTLIAB': 'Liabilities', # بدهی‌های بلندمدت
'OCLIAB': 'Liabilities', # سایر بدهی‌های جاری
'EQUITY': 'Equity',
'INC': 'Income',
'EXP': 'Expenses',
'EXINC': 'Income', # سایر درآمدها
'EXEXP': 'Expenses', # سایر هزینه‌ها
}

با استفاده از خروجی IIF کوییک‌بوکس دسکتاپ یا CSV لیست حساب‌های QBO، نام و نوع هر حساب را بازیابی می‌کنیم. سپس:

  • ایجاد نام حساب‌های Beancount: کوییک‌بوکس گاهی از علامت دو نقطه (:) در نام حساب‌ها برای نشان دادن حساب‌های فرعی استفاده می‌کند (مثلاً “Current Assets:Checking). Beancount از همین علامت دو نقطه برای سلسله مراتب استفاده می‌کند. اغلب می‌توانید نام را مستقیماً استفاده کنید. اگر نام حساب‌های کوییک‌بوکس با یک دسته‌بندی شروع نمی‌شود، دسته‌بندی نگاشت شده را به ابتدای آن اضافه کنید. برای مثال، یک حساب کوییک‌بوکس از نوع BANK به نام "Checking" در Beancount به Assets:Checking تبدیل می‌شود. یک حساب EXP (هزینه) به نام "Meals" به Expenses:Meals تبدیل می‌شود و غیره.

  • اطمینان از نام‌گذاری معتبر: کاراکترهایی که ممکن است Beancount را گیج کنند حذف یا جایگزین کنید. کوییک‌بوکس کاراکترهایی مانند & یا / را در نام‌ها مجاز می‌داند. عاقلانه است که کاراکترهای خاص را حذف یا جایگزین کنید (مثلاً & را با and جایگزین کنید، اسلش‌ها یا فاصله‌ها را حذف کنید). همچنین، اطمینان حاصل کنید که تمام نام‌های حساب پس از تبدیل منحصر به فرد هستند – ممکن است کوییک‌بوکس اجازه دهد نام حساب فرعی یکسانی زیر والدین مختلف وجود داشته باشد که مشکلی ندارد، اما در Beancount نام کامل (با والدین) باید منحصر به فرد باشد. در صورت لزوم، برای تمایز، نام را تغییر دهید یا یک شناسه به آن اضافه کنید.

  • خروجی گرفتن افتتاح حساب‌ها: در Beancount، هر حسابی که استفاده می‌شود باید با دستور open افتتاح شود. می‌توانید تاریخی قبل از اولین تراکنش خود انتخاب کنید (مثلاً اگر داده‌های ۲۰۱۹-۲۰۲۳ را منتقل می‌کنید، از 2018-12-31 یا تاریخی حتی زودتر برای همه افتتاح‌ها استفاده کنید). اسکریپت خطوطی مانند این را خواهد نوشت: 2018-12-31 open Assets:Checking USD 2018-12-31 open Expenses:Meals USD برای هر حساب (با فرض اینکه USD ارز اصلی است). از ارز مناسب برای هر حساب استفاده کنید (به یادداشت‌های چند ارزی در ادامه مراجعه کنید).

تبدیل تراکنش: چالش اصلی تبدیل خروجی تراکنش‌های QuickBooks (CSV) به ورودی‌های Beancount است. هر تراکنش QuickBooks (فاکتور، قبض، چک، سند روزنامه و غیره) می‌تواند چندین آرتیکل (خط) داشته باشد که باید در یک تراکنش Beancount جمع‌آوری شوند.

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

import csv
from collections import defaultdict

# خواندن تمام خطوط از فایل CSV دفتر روزنامه کوییک‌بوکس
rows = []
with open('quickbooks_exported_journal.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for line in reader:
rows.append(line)

# گروه‌بندی خطوط بر اساس تراکنش (با فرض اینکه 'Trans #' تراکنش‌ها را مشخص می‌کند)
transactions = defaultdict(list)
for line in rows:
trans_id = line.get('Trans #') or line.get('Transaction ID') or line.get('Num')
transactions[trans_id].append(line)

اکنون transactions یک دیکشنری است که هر کلید آن یک شناسه/شماره تراکنش است و مقدار آن لیستی از آرتیکل‌های آن تراکنش است. در ادامه، هر گروه را به فرمت Beancount تبدیل می‌کنیم:

def format_date(qb_date):
# تاریخ‌های کوییک‌بوکس ممکن است مانند "12/31/2019" باشند
m, d, y = qb_date.split('/')
return f"{y}-{int(m):02d}-{int(d):02d}"

output_lines = []
for trans_id, splits in transactions.items():
# مرتب‌سازی آرتیکل‌ها بر اساس ترتیب خط در صورت نیاز (معمولاً به ترتیب می‌آیند)
splits = sorted(splits, key=lambda x: x.get('Line') or 0)
first = splits[0]
date = format_date(first['Date'])
payee = first.get('Name', "").strip()
memo = first.get('Memo', "").strip()
# سربرگ تراکنش
output_lines.append(f"{date} * \"{payee}\" \"{memo}\"")
if first.get('Num'): # اضافه کردن شماره مرجع در صورت وجود
output_lines.append(f" number: \"{first['Num']}\"")
# حلقه روی هر آرتیکل/پستینگ
for split in splits:
acct_name = split['Account'].strip()
# نگاشت نام حساب کوییک‌بوکس به حساب بین‌کانت (با استفاده از نگاشت قبلی)
beancount_acct = account_map.get(acct_name, acct_name)
# تعیین مبلغ با علامت:
amount = split.get('Amount') or ""
debit = split.get('Debit') or ""
credit = split.get('Credit') or ""
if amount:
# برخی خروجی‌ها یک ستون Amount واحد دارند (منفی برای بستانکار)
amt_str = amount
else:
# اگر ستون‌های بدهکار/بستانکار جدا باشند
amt_str = debit if debit else f"-{credit}"
# برای اطمینان، هرگونه کاما را در اعداد حذف کنید
amt_str = amt_str.replace(",", "")
# اضافه کردن ارز
currency = split.get('Currency') or "USD"
amt_str = f"{amt_str} {currency}"
# شرح/یادداشت برای آرتیکل
line_memo = split.get('Memo', "").strip()
comment = f" ; {line_memo}" if line_memo else ""
output_lines.append(f" {beancount_acct:<40} {amt_str}{comment}")
# پایان تراکنش – خط خالی
output_lines.append("")

منطق این اسکریپت کارهای زیر را انجام می‌دهد:

  • تاریخ را برای Beancount به فرمت YYYY-MM-DD تبدیل می‌کند.
  • از طرف حساب (Name) و شرح (Memo) برای روایت تراکنش استفاده می‌کند. به عنوان مثال: 2020-05-01 * "ACME Corp" "Invoice payment" (اگر طرف حسابی وجود نداشته باشد، می‌توانید از نوع تراکنش کوییک‌بوکس استفاده کنید یا طرف حساب را خالی بگذارید).
  • اگر شماره مرجعی وجود داشته باشد (شماره چک، شماره فاکتور و غیره)، یک فراداده number اضافه می‌کند.
  • روی هر خط آرتیکل تکرار می‌کند:
    • نام حساب QuickBooks را با استفاده از یک دیکشنری account_map (که از مرحله سرفصل حساب‌ها پر شده) به حساب Beancount نگاشت می‌کند.
    • مبلغ را تعیین می‌کند. بسته به خروجی شما، ممکن است یک ستون Amount واحد (با مقادیر مثبت/منفی) یا ستون‌های Debit و Credit جداگانه داشته باشید. کد بالا هر دو حالت را مدیریت می‌کند. این کد تضمین می‌کند که مبالغ بستانکار به عنوان مقادیر منفی نمایش داده شوند (زیرا در Beancount، برای هر پستینگ از یک عدد با علامت استفاده می‌شود).
    • ارز را ضمیمه می‌کند (با فرض USD مگر اینکه ستون ارز دیگری وجود داشته باشد).
    • خط پستینگ Beancount را با حساب، مبلغ و یک کامنت با شرح خط می‌نویسد. به عنوان مثال: Assets:Checking 500.00 USD ; Deposit Income:Sales -500.00 USD ; Deposit این نشان‌دهنده یک واریز ۵۰۰ دلاری است (از درآمد به حساب جاری).
  • پس از لیست کردن تمام آرتیکل‌ها، یک خط خالی تراکنش را جدا می‌کند.

مدیریت چند ارزی: اگر داده‌های QuickBooks شما شامل چندین ارز باشد، کد ارز را در هر پستینگ (همانطور که در بالا نشان داده شد) درج کنید. اطمینان حاصل کنید که حساب‌هایی که به ارزهای خارجی هستند با همان ارز افتتاح شوند. به عنوان مثال، اگر یک حساب بانکی به یورو (EUR) دارید، باید open Assets:Bank:Checking EUR را خروجی بگیرید و تراکنش‌های آن حساب از EUR استفاده خواهند کرد. Beancount از دفترهای کل چند ارزی پشتیبانی می‌کند و تبدیل‌های ضمنی را ردیابی خواهد کرد، اما اگر می‌خواهید در گزارش‌ها تبدیل به یک ارز پایه داشته باشید، ممکن است نیاز به اضافه کردن ورودی‌های قیمت برای نرخ‌های ارز داشته باشید. همچنین توصیه می‌شود که ارز عملیاتی اصلی خود را در بالای فایل Beancount اعلام کنید (مثلاً option "operating_currency" "USD").

اجرای تبدیل: اسکریپت پایتون را (به عنوان مثال، با نام qb_to_beancount.py) ذخیره کرده و آن را بر روی فایل‌های خروجی گرفته شده خود اجرا کنید. این باید یک فایل .beancount حاوی تمام حساب‌ها و تراکنش‌ها تولید کند.


۲.۲ مدیریت موارد خاص و پاک‌سازی داده‌ها

در طول تبدیل، به این مشکلات رایج و نحوه رسیدگی به آنها توجه داشته باشید:

  • عدم تطابق نام حساب‌ها: ممکن است نام حساب‌های QuickBooks با نام‌های سلسله‌مراتبی Beancount تداخل داشته باشد. به عنوان مثال، QuickBooks می‌تواند دو حساب والد مختلف داشته باشد که هر کدام یک حساب فرعی به نام "Insurance" دارند. در Beancount، Expenses:Insurance باید منحصر به فرد باشد. این مشکل را با تغییر نام یکی از آنها (مثلاً "Insurance-Vehicle" در مقابل "Insurance-Health") قبل از خروجی‌گیری یا نگاشت آنها به حساب‌های منحصر به فرد Beancount در اسکریپت خود حل کنید. قراردادهای نام‌گذاری سازگار (بدون کاراکترهای خاص و استفاده از سلسله مراتب) از سردردهای بعدی جلوگیری می‌کند. در صورت لزوم از رویکرد فایل نگاشت مجدد استفاده کنید: یک CSV یا دیکشنری از نام قدیمی → نام جدید Beancount نگهداری کنید و آن را در طول تبدیل اعمال کنید (کد نمونه ما از account_map استفاده می‌کند و می‌تواند موارد جایگزین را از یک فایل بارگیری کند).

  • تاریخ‌ها و فرمت‌ها: اطمینان حاصل کنید که تمام تاریخ‌ها به طور یکنواخت فرمت‌بندی شده‌اند. اسکریپت بالا فرمت M/D/Y را به فرمت ISO نرمال می‌کند. همچنین، مراقب مسائل مربوط به سال مالی در مقابل سال تقویمی باشید اگر بازه پنج ساله شما از پایان سال عبور می‌کند. Beancount به مرزهای سال مالی اهمیتی نمی‌دهد، اما ممکن است بعداً بخواهید برای راحتی کار، فایل‌ها را بر اساس سال تقسیم کنید.

  • دقت عددی: QuickBooks ارز را با سنت مدیریت می‌کند، بنابراین کار با سنت معمولاً مشکلی ایجاد نمی‌کند. همه مبالغ باید در CSV ایده‌آل دو رقم اعشار داشته باشند. اگر هر مبلغی به عدد صحیح (بدون اعشار) تبدیل شده یا دارای کاما/پرانتز (برای مقادیر منفی) است، آنها را در اسکریپت پاک کنید (کاماها را حذف کنید، (100.00) را به -100.00 تبدیل کنید و غیره). خروجی CSV اگر به درستی انجام شود (طبق دستورالعمل) باید از این مشکلات فرمت‌بندی جلوگیری کند.

  • مبالغ منفی و علائم: گزارش‌های QuickBooks گاهی مقادیر منفی را به صورت -100.00 یا (100.00) یا حتی --100.00 در برخی خروجی‌های Excel نشان می‌دهند. مرحله پاک‌سازی باید این موارد را مدیریت کند. اطمینان حاصل کنید که بدهکار و بستانکار هر تراکنش به صفر می‌رسد. Beancount این را اعمال خواهد کرد (اگر تراز نباشد، در هنگام وارد کردن خطا می‌دهد).

  • تراکنش‌های تکراری: اگر مجبور شدید تراکنش‌ها را به صورت دسته‌ای خروجی بگیرید (مثلاً سال به سال یا حساب به حساب)، مراقب باشید که آنها را بدون همپوشانی ادغام کنید. بررسی کنید که اولین تراکنش یک سال، آخرین تراکنش دسته قبلی نباشد. به راحتی ممکن است چند تراکنش در مرزها به طور تصادفی تکرار شوند. اگر به تکراری بودن شک دارید، می‌توانید ورودی‌های نهایی Beancount را بر اساس تاریخ مرتب کرده و به دنبال ورودی‌های یکسان بگردید، یا از تگ‌های تراکنش منحصر به فرد Beancount برای شناسایی آنها استفاده کنید. یک استراتژی این است که شماره تراکنش QuickBooks را به عنوان فراداده (metadata) اضافه کنید (مثلاً از Trans # یا شماره فاکتور به عنوان تگ txn یا فراداده quickbooks_id استفاده کنید) و سپس اطمینان حاصل کنید که هیچ شناسه تکراری وجود ندارد.

  • آرتیکل‌های نامتوازن / حساب‌های معلق: ممکن است QuickBooks موارد عجیبی مانند یک تراکنش با عدم توازن داشته باشد که QuickBooks به طور خودکار آن را به "Opening Balance Equity" یا "Retained Earnings" منتقل کرده است. به عنوان مثال، هنگام تنظیم مانده‌های اولیه حساب، QuickBooks اغلب تفاوت‌ها را به یک حساب حقوق صاحبان سهام پست می‌کند. این موارد در تراکنش‌های خروجی گرفته شده ظاهر می‌شوند. Beancount نیاز به تراز کردن صریح دارد. ممکن است لازم باشد یک حساب حقوق صاحبان سهام برای مانده‌های افتتاحیه (معمولاً Equity:Opening-Balances) معرفی کنید تا رفتار QuickBooks را تقلید کند. این یک رویه خوب است که یک ورودی مانده افتتاحیه در روز اول دفتر کل خود داشته باشید که مانده‌های اولیه همه حساب‌ها را ایجاد می‌کند (به مرحله ۵ مراجعه کنید).

  • موارد خاص چند ارزی: اگر از چند ارز استفاده می‌کنید، خروجی QuickBooks ممکن است تمام مبالغ را به ارز اصلی یا به ارز بومی خودشان لیست کند. ایده‌آل این است که داده‌ها را به ارز بومی برای هر حساب دریافت کنید (گزارش‌های QuickBooks Online معمولاً این کار را انجام می‌دهند). در Beancount، هر پستینگ یک ارز دارد. اگر QuickBooks نرخ‌های ارز یا تبدیل به ارز اصلی را ارائه داده باشد، ممکن است آنها را نادیده بگیرید و به ورودی‌های قیمت Beancount تکیه کنید. اگر QuickBooks نرخ‌های ارز را خروجی نگرفته باشد، ممکن است بخواهید به صورت دستی سوابق قیمت را (مثلاً با استفاده از دستور price در Beancount) برای تاریخ‌های کلیدی اضافه کنید تا ارزیابی مطابقت داشته باشد. با این حال، برای یکپارچگی اولیه دفتر کل، کافی است که تراکنش‌ها در ارزهای اصلی خود تراز شوند – سود/زیان‌های تحقق نیافته نیازی به ثبت صریح ندارند مگر اینکه بخواهید گزارش‌های یکسانی داشته باشید.

  • حساب‌های دریافتنی / حساب‌های پرداختنی: کوییک‌بوکس جزئیات فاکتورها و قبوض (تاریخ سررسید، وضعیت پرداخت و غیره) را ردیابی می‌کند که در یک دفتر کل ساده به طور کامل منتقل نمی‌شوند. شما تراکنش‌های A/R (حساب‌های دریافتنی) و A/P (حساب‌های پرداختنی) را دریافت خواهید کرد (فاکتورها A/R را افزایش می‌دهند، پرداخت‌ها A/R را کاهش می‌دهند و غیره)، اما نه اسناد فاکتور یا مانده مشتریان به ازای هر فاکتور. در نتیجه، پس از مهاجرت، باید تأیید کنید که مانده حساب‌های A/R و A/P شما در Beancount با مانده‌های باز مشتریان/فروشندگان در QuickBooks برابر است. اگر نیاز به ردیابی فاکتورها دارید، می‌توانید از فراداده Beancount استفاده کنید (مثلاً یک تگ invoice یا لینک اضافه کنید). شماره فاکتورهای QuickBooks باید در فیلدهای Num یا Memo آمده باشد – اسکریپت ما Num را به عنوان number: "..." در فراداده تراکنش حفظ می‌کند.

  • حساب‌های غیرفعال یا بسته شده: خروجی IIF ممکن است شامل حساب‌های غیرفعال باشد (اگر انتخاب کرده باشید که آنها را شامل شود). وارد کردن آنها مشکلی ندارد (آنها فقط هیچ تراکنشی نخواهند داشت و اگر واقعاً غیرفعال باشند مانده صفر خواهند داشت). می‌توانید پس از تاریخ آخرین تراکنش، آنها را با دستور close در Beancount به عنوان بسته شده علامت‌گذاری کنید. این کار دفتر کل شما را مرتب نگه می‌دارد. به عنوان مثال: 2023-12-31 close Expenses:OldAccount ; closed after migration این کار اختیاری است و بیشتر برای تمیزی است.

با پاک‌سازی و نگاشت دقیق داده‌ها به روش بالا، یک فایل دفتر کل Beancount خواهید داشت که از نظر ساختاری داده‌های QuickBooks شما را منعکس می‌کند. مرحله بعدی تأیید این است که از نظر عددی نیز QuickBooks را منعکس می‌کند.


مرحله ۳: اعتبارسنجی و مغایرت‌گیری داده‌ها

اعتبارسنجی یک مرحله حیاتی در مهاجرت داده‌های حسابداری است. ما باید اطمینان حاصل کنیم که دفتر کل Beancount با دفاتر QuickBooks تا آخرین ریال مطابقت دارد. چندین استراتژی و ابزار می‌توانند مورد استفاده قرار گیرند:

۳.۱ مغایرت‌گیری تراز آزمایشی

گزارش تراز آزمایشی (trial balance) مانده پایانی همه حساب‌ها را (با بدهکار و بستانکار یا مثبت/منفی مشخص شده) لیست می‌کند و جمع آن باید صفر باشد. اجرای یک تراز آزمایشی در هر دو سیستم برای یک تاریخ مشخص، سریع‌ترین راه برای تأیید صحت کلی است.

  • در QuickBooks: یک گزارش Trial Balance برای آخرین روز سال نهایی (مثلاً ۳۱ دسامبر ۲۰۲۳) اجرا کنید. این گزارش مانده هر حساب را نشان می‌دهد. آن را خروجی بگیرید یا ارقام کلیدی را یادداشت کنید.

  • در Beancount: از گزارش‌گیری Beancount برای تولید یک تراز آزمایشی استفاده کنید. یک روش آسان از طریق خط فرمان است:

    bean-report migrated.beancount balances

    گزارش balances یک تراز آزمایشی است که تمام حساب‌ها و مانده‌های آنها را لیست می‌کند. همچنین می‌توانید فایل را در Fava (رابط کاربری وب Beancount) باز کرده و به بخش Balances یا Balance Sheet نگاه کنید. مانده هر حساب در Beancount باید با تراز آزمایشی QuickBooks مطابقت داشته باشد. به عنوان مثال، اگر QuickBooks نشان دهد Accounts Receivable = 5,000،حسابAssets:AccountsReceivableدرBeancountبایددرمجموع۵,۰۰۰دلار(بدهکار)باشد.اگرSalesIncome=5,000*، حساب Assets:Accounts Receivable در Beancount باید در مجموع ۵,۰۰۰ دلار (بدهکار) باشد. اگر *Sales Income = 200,000، حساب Income:Sales در Beancount باید ۲۰۰,۰۰۰ دلار (بستانکار، که ممکن است به صورت -200,000 نمایش داده شود اگر از تراز آزمایشی استفاده می‌کنید که بستانکار را به عنوان منفی نشان می‌دهد) باشد.

اگر مغایرتی وجود داشت، آنها را مشخص کنید:

  • بررسی کنید که آیا یک حساب به طور کامل حذف شده یا اضافی است (آیا یک حساب را فراموش کرده‌ایم یا حسابی را که قبل از دوره مهاجرت بسته شده بود، وارد کرده‌ایم؟).
  • اگر مانده‌ای اشتباه است، جزئیات را بررسی کنید: QuickBooks می‌تواند یک Account QuickReport یا جزئیات دفتر کل برای آن حساب اجرا کند، و شما می‌توانید آن را با رجیستر Beancount برای آن حساب (bean-report migrated.beancount register -a AccountName) مقایسه کنید. گاهی اوقات تفاوت‌ها از یک تراکنش گمشده یا تکراری ناشی می‌شوند.

همچنین تأیید کنید که جمع تمام حساب‌ها در تراز آزمایشی Beancount صفر است (این ابزار یک جمع کل چاپ می‌کند که باید صفر یا بسیار نزدیک به صفر باشد). Beancount سیستم حسابداری دوطرفه را اعمال می‌کند، بنابراین اگر هرگونه عدم توازن غیرصفری داشته باشید، به این معنی است که دارایی‌ها منهای بدهی‌ها-حقوق صاحبان سهام به صفر نرسیده است، که نشان‌دهنده یک مشکل است (که QuickBooks معمولاً اجازه آن را نمی‌دهد، اما اگر برخی داده‌ها حذف شده باشند ممکن است اتفاق بیفتد).


۳.۲ مقایسه مانده حساب‌ها

علاوه بر تراز آزمایشی، می‌توانید صورت‌های مالی خاصی را مقایسه کنید:

  • ترازنامه (Balance Sheet): یک ترازنامه QuickBooks برای تاریخ نهایی و یک ترازنامه Beancount (bean-report migrated.beancount balsheet) اجرا کنید. این مشابه تراز آزمایشی است اما بر اساس دارایی‌ها، بدهی‌ها و حقوق صاحبان سهام سازماندهی شده است. اعداد باید از نظر دسته‌بندی مطابقت داشته باشند. برای بررسی دقیق‌تر، مجموع حساب‌های اصلی را مقایسه کنید: وجه نقد، حساب‌های دریافتنی، دارایی‌های ثابت، حساب‌های پرداختنی، حقوق صاحبان سهام و غیره.

  • سود و زیان (صورت درآمد): یک گزارش سود و زیان برای دوره پنج ساله (یا سال به سال) در QuickBooks و در Beancount (bean-report migrated.beancount income برای صورت درآمد دوره کامل) اجرا کنید. سود خالص از Beancount باید با QuickBooks برای هر دوره برابر باشد. اگر تمام پنج سال را منتقل کرده‌اید، سود خالص تجمعی باید مطابقت داشته باشد. همچنین می‌توانید مجموع درآمدهای فردی و هزینه‌ها را مقایسه کنید تا اطمینان حاصل کنید که هیچ دسته‌ای جا نیفتاده یا دو بار حساب نشده است.

  • نمونه‌گیری تصادفی تراکنش: چند تراکنش تصادفی (به ویژه از هر سال و هر حساب اصلی) را انتخاب کرده و تأیید کنید که به درستی منتقل شده‌اند. به عنوان مثال، یک فاکتور از ۳ سال پیش را در QuickBooks پیدا کنید و سپس مبلغ یا شرح آن را در فایل Beancount جستجو کنید (چون تمام تراکنش‌ها متنی هستند، می‌توانید فایل .beancount را در یک ویرایشگر متن باز کنید یا از ابزارهای جستجو استفاده کنید). بررسی کنید که تاریخ، مبالغ و حساب‌ها مطابقت دارند. این به شناسایی هرگونه مشکل در فرمت‌بندی تاریخ یا نگاشت اشتباه حساب‌ها کمک می‌کند.

۳.۳ بررسی‌های یکپارچگی خودکار

از ابزارهای اعتبارسنجی خود Beancount استفاده کنید:

  • bean-check: دستور bean-check migrated.beancount را اجرا کنید. این دستور فایل را تجزیه کرده و هرگونه خطای سینتکسی یا عدم تراز را گزارش می‌دهد. اگر اسکریپت چیزی مانند یک حساب افتتاح نشده یا یک تراکنش نامتوازن را از قلم انداخته باشد، bean-check آن را علامت‌گذاری می‌کند. یک اجرای تمیز (بدون خروجی) به این معنی است که فایل حداقل از نظر داخلی سازگار است.

  • تأیید مانده (Balance Assertions): می‌توانید به عنوان یک بررسی اضافی، تأییدهای مانده صریح را در دفتر کل برای حساب‌های کلیدی اضافه کنید. به عنوان مثال، اگر مانده حساب بانکی را در یک تاریخ خاص می‌دانید، یک خط اضافه کنید: 2023-12-31 balance Assets:Bank:Checking 10000.00 USD سپس bean-check اطمینان حاصل می‌کند که در دفتر کل، تا آن تاریخ، مانده واقعاً ۱۰,۰۰۰ دلار است. این کار اختیاری است اما می‌تواند برای حساب‌های با اهمیت بالا مفید باشد. می‌توانید مانده‌های پایانی را از QuickBooks (مثلاً پایان هر سال) بگیرید و آنها را در فایل Beancount تأیید کنید. اگر هر تأییدی شکست بخورد، Beancount تفاوت را گزارش می‌دهد.

  • بررسی دوره‌ای تراز: اگر ترجیح می‌دهید، می‌توانید یک بررسی دوره‌ای انجام دهید. برای هر سال، تغییر خالص را مقایسه کنید. به عنوان مثال، سود خالص در QuickBooks 2020 در مقابل Beancount 2020، و غیره، تا اطمینان حاصل کنید که هر سال به درستی به حقوق صاحبان سهام بسته شده است (QuickBooks به طور خودکار سود خالص را به سود انباشته در هر سال جدید منتقل می‌کند؛ در Beancount شما فقط حقوق صاحبان سهام تجمعی را خواهید دید). اگر تفاوت‌هایی مشاهده کردید، ممکن است نشان‌دهنده مشکلی در داده‌های یک سال خاص باشد.

  • تعداد تراکنش‌ها و تکرارها: تعداد تراکنش‌ها را در QuickBooks در مقابل Beancount بشمارید. QuickBooks به راحتی تعداد مستقیم را نشان نمی‌دهد، اما می‌توانید با شمردن خطوط در CSV (هر سربرگ تراکنش در مقابل آرتیکل‌ها) تخمین بزنید. در Beancount، یک راه سریع شمارش رخدادهای txn یا * " در فایل است. آنها باید برابر یا کمی بیشتر از QuickBooks باشند (اگر تراکنش‌های مانده افتتاحیه یا تعدیلات اضافه کرده‌اید). یک عدم تطابق قابل توجه به این معنی است که ممکن است چیزی حذف یا تکرار شده باشد. استفاده ما از شناسه‌های منحصر به فرد در فراداده می‌تواند کمک کند: اگر به تکرار شک دارید، فایل Beancount را برای شماره چک یا شماره فاکتور یکسانی که دو بار ظاهر می‌شود در حالی که نباید، جستجو کنید.

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


مرحله ۴: نهایی کردن دفتر کل Beancount

پس از پاک‌سازی و اعتبارسنجی، زمان آن رسیده است که داده‌ها را در ساختار دفتر کل Beancount خود رسمی کنید. "نهایی کردن" در اینجا هم به معنای نهایی کردن فایل‌های دفتر کل و هم به طور بالقوه ثبت آنها در یک سیستم کنترل نسخه برای قابلیت حسابرسی است.

۴.۱ سازماندهی فایل‌های دفتر کل و پیکربندی

تصمیم بگیرید که چگونه فایل‌های دفتر کل Beancount را ساختار دهید. برای داده‌های پنج ساله، می‌توانید همه چیز را در یک فایل نگه دارید یا بر اساس سال یا دسته‌بندی تقسیم کنید. یک ساختار رایج و واضح به این صورت است:

  • فایل اصلی دفتر کل: به عنوان مثال، ledger.beancount – این نقطه ورود است که می‌تواند فایل‌های دیگر را include کند. ممکن است حاوی گزینه‌های سراسری باشد و سپس فایل‌های سالانه را شامل شود.
  • فایل حساب‌ها: سرفصل حساب‌ها و مانده‌های افتتاحیه را تعریف کنید. به عنوان مثال، accounts.beancount با تمام دستورات open (همانطور که توسط اسکریپت تولید شده است). همچنین ممکن است کالاها (ارزها) را در اینجا لیست کنید.
  • فایل‌های تراکنش: یکی برای هر سال، به عنوان مثال، 2019.beancount، 2020.beancount، و غیره، که حاوی تراکنش‌های آن سال است. این کار باعث می‌شود هر فایل اندازه قابل مدیریتی داشته باشد و به شما امکان می‌دهد در صورت لزوم روی یک سال تمرکز کنید. به طور متناوب، می‌توانید بر اساس نهاد یا حساب تقسیم کنید، اما تقسیم بر اساس زمان برای داده‌های مالی ساده است.

مثال فایل اصلی:

option "title" "دفتر کل کسب و کار من"
option "operating_currency" "USD"

include "accounts.beancount"
include "2019.beancount"
include "2020.beancount"
...
include "2023.beancount"

به این ترتیب، تمام داده‌ها هنگام اجرای گزارش‌ها agregated می‌شوند، اما شما نظم را حفظ می‌کنید.

Beancount نیازی به چندین فایل ندارد – می‌توانید یک فایل بزرگ داشته باشید – اما ساختار بالا وضوح و کنترل نسخه را بهبود می‌بخشد. طبق بهترین شیوه‌های Beancount، خوب است که از سربرگ‌های بخش واضح استفاده کنید و ورودی‌های مرتبط را به طور منطقی گروه‌بندی کنید.

۴.۲ تنظیم مانده‌های افتتاحیه و حقوق صاحبان سهام

اگر مهاجرت شما از یک شروع کاملاً صفر نیست، باید مانده‌های افتتاحیه را مدیریت کنید. دو سناریو وجود دارد:

  • دفاتر از ابتدا شروع می‌شوند: اگر دوره پنج ساله در زمان تأسیس کسب و کار شروع شود (مثلاً شما از ژانویه ۲۰۱۹ با تمام حساب‌های صفر شده به جز حقوق صاحبان سهام اولیه شروع به استفاده از QuickBooks کرده‌اید)، ممکن است به یک تراکنش مانده افتتاحیه جداگانه نیازی نداشته باشید. اولین تراکنش‌ها در سال ۲۰۱۹ (مانند تأمین مالی اولیه به یک حساب بانکی) به طور طبیعی مانده‌های اولیه را ایجاد می‌کنند. فقط اطمینان حاصل کنید که هرگونه سرمایه اولیه یا سود انباشته قبلی از طریق تراکنش‌های حقوق صاحبان سهام حساب شده است.

  • دفاتر در میانه راه (تاریخچه جزئی): اگر شما QuickBooks را زودتر شروع کرده‌اید و ۲۰۱۹ یک نقطه میانی است، پس از ۱ ژانویه ۲۰۱۹ هر حساب یک مانده انتقالی داشته است. QuickBooks آنها را به عنوان مانده افتتاحیه یا سود انباشته داشته است. در Beancount، معمول است که یک ورودی مانده افتتاحیه در روز قبل از تاریخ شروع خود ایجاد کنید:

    • از یک حساب حقوق صاحبان سهام به نام Equity:Opening-Balances (یا مشابه) برای جبران جمع تمام مبالغ افتتاحیه استفاده کنید.
    • مثال: اگر در 2018-12-31، وجه نقد ۱۰,۰۰۰ دلار و حساب‌های دریافتنی ۵,۰۰۰ دلار و حساب‌های پرداختنی ۳,۰۰۰ دلار (بستانکار) بود، یک تراکنش می‌نوشتید: 2018-12-31 * "Opening Balances" Assets:Cash 10000.00 USD Assets:Accounts Receivable 5000.00 USD Liabilities:Accounts Payable -3000.00 USD Equity:Opening-Balances -12000.00 USD این کار باعث می‌شود مانده Opening-Balances با جمع منفی (۱۲,۰۰۰- دلار) باقی بماند که ورودی را تراز می‌کند. اکنون تمام حساب‌های دارایی/بدهی سال ۲۰۱۹ را با مانده‌های صحیح شروع می‌کنند. این باید هرگونه "سود انباشته" یا مانده‌های انتقالی QuickBooks را منعکس کند.
    • به طور متناوب، از دستورات pad و balance در Beancount استفاده کنید: برای هر حساب، می‌توانید آن را از Opening-Balances پد (pad) کنید و مانده را تأیید کنید. این یک روش خودکارتر است. به عنوان مثال: 2018-12-31 pad Assets:Cash Equity:Opening-Balances 2018-12-31 balance Assets:Cash 10000.00 USD این به Beancount می‌گوید که هر ورودی لازم را (به Opening-Balances) درج کند تا وجه نقد در آن تاریخ برابر با ۱۰۰۰۰ دلار شود. این کار را برای هر حساب انجام دهید. نتیجه مشابه است، اما نوشتن یک تراکنش صریح مانند روش اول نیز ساده است.
  • سود انباشته (Retained Earnings): کوییک‌بوکس به صراحت یک تراکنش "سود انباشته" را خروجی نمی‌گیرد - فقط آن را محاسبه می‌کند. پس از مهاجرت، ممکن است متوجه شوید که اگر آن را ایجاد نکرده باشید، Equity:Retained Earnings صفر است. در Beancount، سود انباشته فقط سود سال‌های قبل است. می‌توانید یک حساب سود انباشته ایجاد کنید و سودهای قبلی را در روز اول هر سال جدید به آن منتقل کنید، یا به سادگی اجازه دهید حقوق صاحبان سهام جمع تمام درآمدها/هزینه‌ها باشد (که در بخش حقوق صاحبان سهام در گزارش‌ها ظاهر می‌شود). برای شفافیت، برخی از کاربران سالانه ورودی‌های بستن حساب را ثبت می‌کنند. این اختیاری است و عمدتاً برای نمایش است. از آنجا که ما تمام تراکنش‌ها را منتقل کرده‌ایم، سود هر سال به طور طبیعی در صورت اجرای گزارش برای هر سال، جمع می‌شود.

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

۴.۳ نهایی‌سازی و کنترل نسخه

اکنون که داده‌ها در فرمت Beancount و ساختار یافته هستند، عاقلانه است که فایل‌ها را به یک مخزن کنترل نسخه (مانند git) کامیت کنید. هر تغییر در دفتر کل قابل ردیابی است و شما یک سابقه حسابرسی از تمام تغییرات دارید. این یک مزیت عمده حسابداری متنی ساده است. به عنوان مثال، در QuickBooks تغییرات ممکن است به راحتی قابل مقایسه (diff) نباشند، اما در Beancount، می‌توانید تفاوت‌ها را خط به خط ببینید. همانطور که برخی کاربران اشاره می‌کنند، با Beancount شما شفافیت و توانایی بازگرداندن تغییرات در صورت لزوم را به دست می‌آورید - هر ورودی می‌تواند به یک تاریخچه تغییرات مرتبط باشد.

در نظر بگیرید که کامیت این مهاجرت اولیه را به عنوان v1.0 یا مشابه تگ‌گذاری کنید، تا بدانید که وضعیت دفاتر را همانطور که از QuickBooks وارد شده، نشان می‌دهد. از این به بعد، تراکنش‌های جدید را مستقیماً در Beancount وارد خواهید کرد (یا از فیدهای بانکی و غیره وارد می‌کنید) و می‌توانید از شیوه‌های توسعه نرم‌افزار معمولی استفاده کنید (کامیت روزانه یا ماهانه، استفاده از شاخه‌ها برای آزمایش‌ها و غیره).

راه‌اندازی Fava یا ابزارهای دیگر: Fava یک رابط وب برای Beancount است که مشاهده گزارش‌ها را آسان می‌کند. پس از کامیت، fava ledger.beancount را اجرا کنید تا صورت‌های مالی را مرور کرده و آنها را برای آخرین بار با گزارش‌های QuickBooks خود مقایسه کنید. ممکن است تفاوت‌های کوچک را در یک رابط کاربری راحت‌تر تشخیص دهید (به عنوان مثال، حسابی که باید صفر باشد اما مانده کوچکی نشان می‌دهد، نشان‌دهنده یک ورودی بستن حساب گمشده یا یک تراکنش سرگردان است).

قراردادهای نام‌گذاری و ثبات: اکنون کنترل کامل دارید، بنابراین از ثبات اطمینان حاصل کنید:

  • همه حساب‌ها باید نام‌های واضحی داشته باشند که با نام‌های دسته‌بندی با حروف بزرگ شروع شوند (Assets, Liabilities و غیره). اگر هر کدام عجیب به نظر می‌رسد (مثلاً Assets:assets:SomeAccount به دلیل عدم تطابق حروف از QuickBooks)، آنها را در فایل حساب‌ها تغییر نام دهید و تراکنش‌ها را به‌روز کنید (یک جستجو/جایگزینی سریع در فایل می‌تواند این کار را انجام دهد، یا از bean-format Beancount یا چند مکان‌نما ویرایشگر استفاده کنید).
  • نمادهای کالا (کدهای ارز) باید سازگار باشند. برای دلار آمریکا، از USD در همه جا استفاده کنید (نه $ یا US$). برای دیگران، از کدهای استاندارد (EUR، GBP و غیره) استفاده کنید. این ثبات برای جستجوی قیمت و گزارش‌های Beancount مهم است.
  • هرگونه حساب موقت یا ساختگی که ممکن است ایجاد شده باشد را حذف کنید (به عنوان مثال، اگر از Expenses:Miscellaneous برای حساب‌های ناشناخته در اسکریپت به عنوان یک راه حل کلی استفاده کرده‌اید، سعی کنید با نگاشت صحیح همه حساب‌ها آنها را حذف کنید).

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

  • اگر این یک محیط شرکتی است، در نظر بگیرید که تمام اسناد منبع QuickBooks (فاکتورها، قبوض، رسیدها) را برای سوابق خروجی بگیرید، زیرا اینها در Beancount وجود نخواهند داشت مگر اینکه آنها را به صورت دستی ضمیمه کنید.
  • یک نسخه پشتیبان از داده‌های QuickBooks (هم فایل شرکت و هم فایل‌های خروجی) را نگه دارید.
  • از این به بعد، دفتر کل Beancount را به عنوان سیستم اصلی ثبت سوابق نگهداری کنید.

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


مرحله ۵: حسابرسی پس از مهاجرت و مثال‌ها

برای نشان دادن موفقیت مهاجرت، یک مقایسه قبل و بعد از صورت‌های مالی و احتمالاً یک مقایسه (diff) از تراکنش‌ها تهیه کنید. این شواهدی را ارائه می‌دهد که دفاتر سازگار هستند.

۵.۱ تأیید صورت‌های مالی

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

  • ترازنامه در تاریخ ۳۱ دسامبر ۲۰۲۳: مجموع دارایی‌ها، بدهی‌ها و حقوق صاحبان سهام را خط به خط مقایسه کنید. آنها باید مطابقت داشته باشند. به عنوان مثال، اگر QuickBooks نشان می‌داد کل دارایی‌ها = ۱۵۰,۰۰۰ دلار و کل بدهی‌ها + حقوق صاحبان سهام = ۱۵۰,۰۰۰ دلار، ترازنامه Beancount باید همان مجموع‌ها را نشان دهد. اگر حساب‌ها را کمی متفاوت ساختار داده‌اید (مثلاً برخی از حساب‌های فرعی را ادغام کرده‌اید)، در مقایسه آن را تنظیم کنید یا برای اطمینان از برابر بودن مجموع‌ها، به سطح بعدی جزئیات بروید.

  • سود و زیان ۲۰۱۹-۲۰۲۳: اطمینان حاصل کنید که کل درآمد، کل هزینه‌ها و سود خالص برای هر سال (یا کل دوره) یکسان است. تفاوت‌های جزئی ممکن است به دلیل گرد کردن QuickBooks در گزارش‌ها ایجاد شود، اما تراکنش‌ها معمولاً سنت را دقیقاً حمل می‌کنند بنابراین سود خالص باید دقیق باشد. اگر سود هر سالی متفاوت باشد، به داده‌های آن سال بپردازید - این اغلب نشان‌دهنده یک ورودی گمشده یا تکراری در آن دوره است.

  • تفاوت‌های تراز آزمایشی: در صورت امکان، یک صفحه گسترده ایجاد کنید که در آن هر حساب و مانده از QuickBooks در مقابل Beancount را لیست کنید. از آنجا که انتظار داریم آنها مطابقت داشته باشند، این ممکن است یک ستون تفاوت تماماً صفر باشد. این اساساً همان بررسی متقاطع تراز آزمایشی است که بحث کردیم، اما نوشتن آن به مستندسازی کمک می‌کند.

۵.۲ مثال مقایسه (قبل در مقابل بعد)

در زیر یک قطعه مثال برای نشان دادن ثبات داده‌ها آورده شده است. فرض کنید تراز آزمایشی QuickBooks ما برای ۳۱ دسامبر ۲۰۲۳ به این صورت بود:

حسابمانده QuickBooks (۳۱ دسامبر ۲۰۲۳)
دارایی‌ها
  Assets:Bank:Checking۱۲,۵۰۰.۰۰ دلار (بدهکار)
  Assets:Accounts Receivable۳,۲۰۰.۰۰ دلار (بدهکار)
بدهی‌ها
  Liabilities:Credit Card۱,۲۰۰.۰۰- دلار (بستانکار)
  Liabilities:Loans Payable۵,۰۰۰.۰۰- دلار (بستانکار)
حقوق صاحبان سهام
  Equity:Opening-Balances۷,۵۰۰.۰۰- دلار (بستانکار)
  Equity:Retained Earnings۲,۰۰۰.۰۰- دلار (بستانکار)
  Equity:Current Year Profit۰.۰۰ دلار

در Beancount، پس از وارد کردن و ثبت تمام تراکنش‌ها تا سال ۲۰۲۳، یک bean-report balances (تراز آزمایشی) خروجی می‌دهد:

حسابمانده Beancount (۳۱ دسامبر ۲۰۲۳)
دارایی‌ها
  Assets:Bank:Checking12,500.00 USD (بدهکار)
  Assets:Accounts Receivable3,200.00 USD (بدهکار)
بدهی‌ها
  Liabilities:Credit Card-1,200.00 USD (بستانکار)
  Liabilities:Loans Payable-5,000.00 USD (بستانکار)
حقوق صاحبان سهام
  Equity:Opening-Balances-7,500.00 USD (بستانکار)
  Equity:Retained Earnings-2,000.00 USD (بستانکار)
  Equity:Profit (2019-2023)0.00 USD

(توجه: بخش‌های حقوق صاحبان سهام ممکن است به طور متفاوتی ساختار یافته باشند؛ نکته کلیدی این است که مجموع‌ها مطابقت دارند. در اینجا، "سود (۲۰۱۹-۲۰۲۳)" در Beancount نقش سود سال جاری/سود انباشته ترکیبی را ایفا می‌کند، که صفر نشان می‌دهد زیرا سود به سود انباشته بسته شده است.)

همانطور که نشان داده شده است، هر حساب تا آخرین سنت مطابقت دارد. جمع بدهکارها برابر با جمع بستانکارها در هر دو طرف است.

علاوه بر این، اگر یک صورت سود و زیان برای سال ۲۰۲۳ اجرا کنیم:

  • QuickBooks: درآمد ۵۰,۰۰۰ دلار، هزینه‌ها ۴۸,۰۰۰ دلار، سود خالص ۲,۰۰۰ دلار.
  • Beancount: درآمد ۵۰,۰۰۰ دلار، هزینه‌ها ۴۸,۰۰۰ دلار، سود خالص ۲,۰۰۰ دلار (که سپس به سود انباشته بسته شده یا در ترازنامه پایان سال زیر حقوق صاحبان سهام ظاهر می‌شود).

در صورت نیاز می‌توانید یک مقایسه (diff) از تراکنش‌ها ایجاد کنید، اما از آنجا که داده‌های QuickBooks به فرمت دفتر کل نیستند، تکیه بر گزارش‌ها مؤثرتر است. می‌توان هر دو CSV QuickBooks و تراکنش‌های Beancount را بر اساس تاریخ مرتب کرد و فیلدهای کلیدی را به عنوان یک بررسی نهایی مقایسه کرد (این کار را می‌توان در Excel یا با یک اسکریپت انجام داد). با این حال، با توجه به اینکه به اعتبارسنجی قبلی خود اعتماد داریم، بررسی صورت‌های مالی معمولاً کافی است.

۵.۳ نکات حسابرسی

  • اگر یک حسابرس یا ذینفع نیاز به اطمینان دارد، صورت‌های مالی قبل و بعد را در کنار هم ارائه دهید. شفافیت Beancount در واقع می‌تواند حسابرسی را ساده کند زیرا می‌توانید هر عددی را از یک صورت مالی به سرعت به ورودی منبع ردیابی کنید (به ویژه با استفاده از قابلیت drill-down در Fava).
  • پشتیبان QuickBooks و CSVهای خروجی گرفته شده را به عنوان بخشی از سابقه حسابرسی خود نگه دارید. هرگونه تعدیلی که در طول مهاجرت انجام شده است را مستند کنید (به عنوان مثال، "تغییر نام حساب X به Y برای ثبات" یا "تقسیم تراکنش Z به دو ورودی برای وضوح" اگر چنین تغییراتی را انجام داده‌اید).
  • از این به بعد، بررسی‌های منظم را در Beancount پیاده‌سازی کنید. به عنوان مثال، مغایرت‌گیری ماهانه حساب‌های بانکی و تأیید مانده پایانی آنها به شناسایی هرگونه مشکل داده یا اشتباه در ورود کمک می‌کند. مهاجرت یک مبنای خوب ایجاد می‌کند؛ حفظ نظم در سیستم جدید، دقت مداوم را تضمین خواهد کرد.

در نهایت، اتمام مهاجرت را جشن بگیرید: شما با موفقیت پنج سال داده‌های حسابداری را از QuickBooks به Beancount منتقل کرده‌اید. داده‌ها اکنون در یک فرمت متنی سبک، با کنترل نسخه و با یکپارچگی کامل حسابداری دوطرفه قرار دارند. شما داده‌ها را استخراج کرده، با اسکریپت‌های پایتون تبدیل کرده، یکپارچگی را از طریق ترازهای آزمایشی و گزارش‌ها تأیید کرده و آن را در یک دفتر کل Beancount به خوبی سازماندهی شده نهایی کرده‌اید. این فرآیند جامع تضمین می‌کند که دفتر کل Beancount یک کپی دقیق و وفادار از دفاتر QuickBooks شما در طول دوره پنج ساله است و شما را برای حسابداری کارآمد در آینده آماده می‌کند.