Sau vài năm ghi chép tài chính, tôi đã thử qua nhiều công cụ khác nhau như随手记, Excel và thậm chí là Evernote. Hầu hết chỉ ghi lại thu chi mà không theo dõi sự thay đổi của các tài khoản liên quan. Tôi biết rằng cách làm này khá sơ sài, dễ dẫn đến sai sót và thiếu hụt thông tin, chỉ có thể phân tích thu chi chứ không nắm bắt được toàn cảnh tài chính cá nhân.
Mãi đến vài tháng trước, khi đọc bài chia sẻ về Beancount của byvoid, tôi mới thực sự tìm thấy một công cụ kế toán xuất sắc. Từ ngày 1 tháng 7, tôi đã chính thức sử dụng Beancount và sau hơn 3 tháng, xin được chia sẻ một số kinh nghiệm.
Một: Kế Toán Thông Thường So Với Kế Toán Song Song
Phương pháp ghi chép của Beancount được gọi là kế toán song song (double-entry accounting).
Ví dụ: Ngày 1 tháng 7, bạn đi taxi với chi phí 30 tệ bằng thẻ ngân hàng.
- Ghi chép thông thường sẽ bao gồm ngày tháng, hạng mục thu chi và số tiền:
2019-08-28: Giao thông - Taxi -200 tệ
- Kế toán song song sẽ ghi nhận cả sự thay đổi của tài khoản:
2019-08-28:
Giao thông - Taxi 200 tệ
Thẻ Ngân Hàng -200 tệ
Kế toán song song ghi nhận dòng chảy tài chính của mỗi giao dịch, các tài khoản thay đổi “có âm có dương, âm dương tương đương”. Đây là nguyên lý cơ bản của kế toán song song, còn được gọi là “phương trình kế toán”
Hai: Khởi Đầu Với Beancount
Kế toán song song là phương pháp luận, còn Beancount là công cụ hỗ trợ phương pháp này
- Dữ liệu tài chính cá nhân rất nhạy cảm, Beancount lưu trữ cục bộ nên không lo rò rỉ dữ liệu.
- Sổ cái dạng văn bản thuần túy, không phụ thuộc vào phần mềm đặc thù, thuận tiện cho việc di chuyển dữ liệu.
- Beancount là phần mềm mã nguồn mở.
Tiếp theo sẽ giới thiệu cách sử dụng cơ bản của Beancount.
Cài Đặt
Beancount là dự án Python, sau khi cài đặt Python, chạy lệnh:
pip install beancount
pip install fava
Fava là phần mềm liên kết, cung cấp giao diện Web đẹp mắt cho Beancount (như hình 1/2/3), khuyến nghị cài đặt cùng lúc.
Ví Dụ Sổ Cái
Sử dụng Beancount rất đơn giản, tóm tắt thành hai bước:
Bước Một
Dưới đây là ví dụ hoàn chỉnh, lưu dưới dạng moneybook.bean
(định dạng file của Beancount là .bean
)
;【Một, Thông Tin Sổ Cái】
option "title" "Sổ Cái Của Tôi" ;Tên sổ cái
option "operating_currency" "CNY" ;Đơn vị tiền tệ chủ yếu
;【Hai, Cấu Hình Tài Khoản】
;1, Mở Tài Khoản
1990-01-01 open Tài sản:Thẻ:1234 CNY, USD ;Thẻ số cuối 1234, hỗ trợ CNY và USD
1990-01-01 open Nợ phải trả:Thẻ tín dụng:5678 CNY, USD ;Thẻ tín dụng song tệ
1990-01-01 open Thu nhập:Lương CNY ;Thu nhập từ lương
1990-01-01 open Chi phí:Thuế CNY ;Nộp thuế
1990-01-01 open Chi phí:Giao thông:Taxi CNY ;Chi tiêu taxi, chỉ hỗ trợ CNY
1990-01-01 open Quyền sở hữu:Mở Số dư ;Dùng để khởi tạo tài khoản, hỗ trợ mọi loại tiền tệ
;2, Khởi tạo tài khoản
2019-08-27
Tài sản:Thẻ:1234 10000.00 CNY
Quyền sở hữu:Mở Số dư -10000.00 CNY
;【Ba, Nhật ký giao dịch】
2019-08-28
Chi phí:Giao thông:Taxi 200.00 CNY
Tài sản:Thẻ:1234 -200.00 CNY
2019-08-29
Tài sản:Thẻ:1234 -1100.00 CNY
Nợ phải trả:Thẻ tín dụng:5678 1100.00 CNY
2019-08-31
Tài sản:Thẻ:1234 12000.00 CNY
Chi phí:Thuế 1000.00 CNY
Thu nhập:Lương
Bước Hai
$ fava moneybook.bean
Chạy Fava trên
Sau đó mở trình duyệt và truy cập đường dẫn
, bạn sẽ thấy sổ cái, hình bên dưới lần lượt là bảng báo cáo lợi nhuận/lỗ, bảng cân đối kế toán và nhật ký giao dịch.
Định Dạng Ghi Chép
Sử dụng Beancount, điều quan trọng là hiểu định dạng ghi chép của nó. Từ ví dụ trên, sổ cái bao gồm ba phần:
Thông Tin Sổ Cái
Thông thường chỉ cần thiết lập tên sổ cái và đơn vị tiền tệ chủ yếu.
option "title" "Sổ Cái Của Tôi" ;Tên sổ cái
option "operating_currency" "CNY" ;Đơn vị tiền tệ chủ yếu
Cấu Hình Tài Khoản
[Mở Tài Khoản] Trước khi ghi chép, cần có tài khoản, định dạng mở tài khoản như sau:
Ngày mở open Tên tài khoản Loại tiền tệ
Beancount hỗ trợ cấu trúc phân cấp cho tên tài khoản, dùng dấu hai chấm :
để phân cách, ví dụ Tài sản:Thẻ:1234
. Nhưng tầng đầu tiên phải là một trong năm tài khoản chính sau, tất cả các giao dịch hàng ngày đều có thể xếp vào một trong các hạng mục này:
Khi mở tài khoản, có thể dùng ngày thật hoặc nếu quên, tôi thường dùng sinh nhật hoặc ngày trước khi bắt đầu kế toán song song (2019-06-30).
Loại tiền tệ không bắt buộc khi mở tài khoản nhưng khuyến khích thêm vào, Beancount sẽ báo lỗi nếu loại tiền tệ không khớp khi ghi chép giao dịch. Có thể thêm nhiều loại tiền tệ, dùng dấu phẩy (,) để phân cách.
Cuối cùng, nếu một tài khoản không còn sử dụng nữa, ví dụ hủy thẻ tín dụng, có thể dùng lệnh close
để đóng tài khoản. Ví dụ:
Ngày đóng close Tên tài khoản
[Tiến Hành Khởi Tạo]
Khi bắt đầu ghi chép, tài sản và nợ phải trả thường không bằng không, do đó cần tiến hành khởi tạo tài khoản. Định dạng khởi tạo giống hệt nhật ký giao dịch,
khác biệt duy nhất là khởi tạo cần dùng đến tài khoản Quyền sở hữu. Ví dụ tài khoản Tài sản:Thẻ:1234
, số dư ban đầu 10000 tệ đến từ Quyền sở hữu:Mở Số dư
.
Nhật Ký Giao Dịch
Cấu hình tài khoản khởi tạo liên quan đến nhật ký giao dịch, vì vậy trước tiên hãy giới thiệu định dạng ghi chép nhật ký giao dịch. Như sau:
Ngày
Tài khoản Số tiền Tiền tệ
Tài khoản Số tiền Tiền tệ
Trong đó
Ngoài ra, số tiền sau tên tài khoản mang dấu, ví dụ:
*Chi tiêu là dương, thu nhập là âm,
(Tài sản + Chi phí) + (Nợ phải trả + Thu nhập) + Quyền sở hữu = 0 Một giao dịch có thể liên quan đến 2 tài khoản trở lên, ví dụ như “thu nhập từ lương”, lúc này tổng số tiền của nhiều tài khoản cũng phải thỏa mãn “có âm có dương, âm dương tương đương”
Đến đây, bạn đã có thể bắt tay vào ghi chép rồi. Mở tài khoản, sau đó khởi tạo, cuối cùng ghi chép giao dịch mỗi ngày.
Ba: Thực Tiễn Sử Dụng Beancount
Dưới đây là một số kinh nghiệm cá nhân:
Trình Biên Tập
Tôi sử dụng trình biên tập VSCode, kết hợp với plugin Beancount
(bởi Lencerf), giúp tô màu cú pháp, tự động hoàn thành tài khoản, căn chỉnh số theo dấu thập phân, thông báo lỗi, nâng cao hiệu suất ghi chép.
Phân Chia Sổ Cái
Theo phương pháp trên, sau một thời gian bạn sẽ nhận thấy:
*Khi số lượng giao dịch tăng lên, file sổ cái ngày càng lớn, khó khăn trong việc bảo trì
Beancount cho phép phân chia sổ cái, sau đó sử dụng cú pháp include
để liên kết các sổ cái lại với nhau. Ví dụ, cấu trúc thư mục sổ cái của tôi như sau:
[…]
Kiểm Tra Định Kỳ
Trước đó đã nhắc đến ưu điểm của kế toán song song:
Cách này đảm bảo độ chính xác của ghi chép. Trong Beancount, kiểm tra tài khoản được thực hiện thông qua lệnh
balance
. Giả sử vào 24 giờ ngày 17 tháng 10, số dư thẻ ngân hàng số cuối 1234 là 5000 tệ, ghi lại như sau:
2019-10-18 balance Tài sản:Thẻ:1234 5000.00 CNY
Beancount sẽ tự động tổng hợp tất cả thu chi của thẻ số cuối 1234 trước ngày 17 tháng 10 (bao gồm), nếu lịch sử giao dịch chính xác, kết quả tính toán cũng nên là 5000 tệ. Nếu không phải game quay hũ 5000 tệ, Beancount sẽ báo lỗi, nghĩa là lịch sử giao dịch có vấn đề. Bạn sẽ nhận thấy, số dư ngày 24 giờ ngày 17 tháng 10, khi sử dụng lệnh balance thì dùng ngày 2019-10-18. Tôi thường *kiểm tra định kỳ tất cả tài khoản mỗi tháng một lần
Xử Lý Sai Lầm / Sai Lệch
Nếu kiểm tra báo lỗi, thường tôi sẽ truy ngược lại, vì thói quen kiểm tra hàng tháng nên tối đa chỉ cần truy ngược lại một tháng dữ liệu. Nếu không thể truy ngược, sẽ sử dụng Quyền sở hữu:UFO
để ghi nhận.
Giả sử khi kiểm tra phát hiện Tài sản:Thẻ:1234
thiếu 200 tệ, thì thêm trước khi kiểm tra:
2019-10-18
Tài sản:Thẻ:1234 -200.00 CNY
Quyền sở hữu:UFO
Một trường hợp sai lệch khác là do làm tròn. Nếu có sai lệch do làm tròn, tôi sử dụng Quyền sở hữu:Làm tròn
để xử lý, ví dụ:
2019-10-09
Tài sản:Ngân hàng:CMB:XXXX -450.00 CNY
Tài sản:Alipay:Quỹ 85.05 FD_110011 {5.2830 CNY}
Chi phí:Hoa hồng:AlipayQuỹ 0.67 CNY
Quyền sở hữu:Làm tròn
Tài khoản Quyền sở hữu
là một tài khoản đặc biệt, có thể xử lý các trường hợp ngoại lệ. Tôi thiết lập bốn tài khoản Quyền sở hữu
như sau:
[…]
Nhiều Loại Tiền Tệ Và Chuyển Đổi Tiền Tệ
Tài khoản có thể thiết lập nhiều loại tiền tệ theo thực tế. Ví dụ thẻ Visa tiêu dùng bằng đô la Mỹ thì cần hỗ trợ đô la.
Đối với tiêu dùng bằng đô la nhưng ghi nhận bằng nhân dân tệ, có thể sử dụng @@
để chuyển đổi tiền tệ. Ví dụ hóa đơn máy chủ blog, 3.71 đô la ghi nhận bằng 26.57 nhân dân tệ.
2019-10-04
Nợ phải trả:Thẻ tín dụng:SPDB:XXXX -26.57 CNY
Chi phí:Kỹ thuật:Dịch vụ 3.71 USD @@ 26.57 CNY
Trong option
có thể thiết lập *loại sổ cái
Nhãn
Một câu hỏi: Bữa ăn trong buổi hẹn hò nên ghi vào tài khoản nào?
Có thể ghi vào Chi phí:Ăn uống
hoặc Chi phí:Hẹn hò:Ăn uống
. Nếu dùng后者, tài khoản về ăn uống sẽ ngày càng nhiều, gây khó khăn trong việc bảo trì.
Lúc này, tôi thường dùng前者 và tận dụng chức năng nhãn của Beancount. Ví dụ:
2019-10-18
Tài sản:Thẻ:1234 -200.00 CNY
Chi phí:Ăn uống
Trong đó #Date
là nhãn, trong giao diện Fava có thể lọc theo nhãn, xem chi tiết thu chi của các tài khoản có nhãn này.
Ví dụ khác, mỗi chuyến du lịch, tôi sẽ gắn nhãn kiểu #20191001-hangzhou
cho tất cả chi phí trong chuyến đi, bao gồm ngày và địa điểm. Qua việc lọc nhãn, dễ dàng xem chi phí ăn, ở, đi lại, vui chơi trong chuyến đi.
Gắn nhãn từng giao dịch trong chuyến đi khá phức tạp, Beancount hỗ trợ sử dụng pushtag
và poptag
để gắn nhãn cho nhiều giao dịch.
pushtag #20191001-hangzhou
2019-10-18
Tài sản:Thẻ:1234 -200.00 CNY
Chi phí:Ăn uống:Buổi tối
2019-10-18
Tài sản:Thẻ:1234 -20.00 CNY
Chi phí:Giao thông:Taxi
poptag #20191001-hangzhou
Như vậy, tất cả các giao dịch giữa pushtag
và poptag
sẽ có nhãn #20191001-hangzhou
.
Sự Kiện
Trong cuộc sống có thể có những sự kiện muốn ghi lại, điều này đã vượt xa phạm vi ghi chép tài chính nhưng Beancount vẫn hỗ trợ, định dạng:
Ngày event "Loại sự kiện" "Chi tiết sự kiện"
Ví dụ sự kiện của tôi:
;beancount sự kiện
2019-06-30 event "beancount" "Bắt đầu sử dụng beancount"
;Công việc sự kiện
2019-08-30 event "work" "Shenma lastday"
2019-09-02 event "work" "Bắt đầu làm việc tại AE"
;Sự kiện du [ban ca](/posts/bb9ef1d58c0e8394/) lịch hoặc công tác ghi location
2019-09-13 event "location" "Hangzhou->Suzhou: Đi"
2019-09-15 event "location" "Suzhou->Hangzhou: Về"
Giao diện Fava có phần xem sự kiện.
Tư: Kết Luận
Không ngờ viết nhiều đến vậy, mất nhiều ngày viết lắt nhắt, vẫn còn nhiều điều muốn chia sẻ. Trong quá trình học tập, ngoài bài viết của byvoid, tôi còn tham khảo bài viết của wzyboy và tài liệu chính thức của Beancount —— Kế toán song song dòng lệnh. Có thể áp dụng cách này để ghi chép tài chính nhờ sự phổ biến của thanh toán di động. Sau khi thành thạo, mỗi tối chỉ cần đối chiếu hóa đơn Alipay và WeChat, 3 phút là có thể ghi chép xong. Tất nhiên, đây vẫn chưa phải là cách tốt nhất, wzyboy đã thực hiện import, mỗi tháng chỉ cần xử lý trong một hoặc hai giờ là đủ. Tôi nghĩ cách import không cung cấp đủ thông tin phong phú và chi tiết nên chưa nghiên cứu sâu. Beancount còn có nhiều ứng dụng nâng cao, ví dụ như ghi chép đầu tư chứng khoán, sử dụng ngôn ngữ BQL để thống kê phân tích. Rất phù hợp cho những người thích khám phá công cụ.
Cập nhật gần nhất: 2019-10-19
Sửa đổi lần cuối vào 2025-03-20