Công cụ ghi chép tài chính tuyệt vời Beancount - xem ty le keo
Sau nhiều năm ghi chép thu chi, tôi đã sử dụng qua nhiều công cụ khác nhau như随手记 (tạm dịch là Ghi Chú Nhanh), Excel hay thậm chí là Evernote. Thông thường, tôi chỉ ghi lại các khoản thu và chi mà không theo dõi sự thay đổi của các tài khoản tương ứng. Tôi biết rằng cách làm này khá sơ sài, dễ dẫn đến sai sót hoặc bỏ sót thông tin, đồng thời chỉ có thể phân tích thu chi chứ không thể nắm bắt được tổng quan về tình hình tài chính cá nhân. Kết quả là dù đã ghi chép trong vài năm nhưng tôi rất ít khi phân tích số liệu và tình trạng tài chính cá nhân cũng không cải thiện đáng kể.
Vài tháng trước, tôi thấy bài chia sẻ của byvoid về Beancount và nhận ra đây thực sự là một công cụ tuyệt vời cho việc ghi chép tài chính. Từ ngày 1 tháng 7, tôi đã chính thức sử dụng Beancount và sau hơn 3 tháng, tôi muốn chia sẻ một số kinh nghiệm và suy nghĩ.
Một. Ghi chép thông thường so với ghi chép kép
Phương pháp ghi chép của Beancount gọi là ghi chép kép.
Cách ghi chép chỉ thu và chi đơn giản được gọi là ghi chép thông thường. Giả sử: Ngày 1 tháng 7, bạn tốn 30 nghìn đồng để đi taxi bằng thẻ ngân hàng.
Trong ghi chép thông thường, chúng ta thường chỉ ghi ngày, hạng mục thu/chi và số tiền:
2019-08-28: Giao thông - Taxi -200 ngàn đồng
Trong khi đó, phương pháp ghi chép kép sẽ ghi cả sự thay đổi của tài khoản:
2019-08-28:
Giao thông - Taxi 200 ngàn đồng
Thẻ Ngân Hàng -200 ngàn đồng
Ghi chép kép ghi lại dòng xem ty le keo tiền của mỗi giao dịch, sự thay đổi của các tài khoản “có dương và âm, tổng dương âm bằng nhau”. Đây là nguyên lý cơ bản của ghi chép kép, còn được gọi là “phương trình kế toán”.
Hai. Khởi đầu với Beancount
Ghi chép kép là phương pháp, còn Beancount là công cụ hỗ trợ ghi chép kép.
- 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 bạn không cần lo lắng về 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ể nào, giúp dễ dàng di chuyển dữ liệu.
- Beancount là phần mềm mã nguồn mở.
Dưới đây là hướng dẫn cơ bản về cách sử dụng Beancount.
Cài đặt
Beancount là một dự án Python, sau khi cài đặt Python, bạn có thể chạy lệnh sau:
pip install beancount
pip install fava
Fava là phần mềm liên quan, cung cấp giao diện Web đẹp mắt cho Beancount (như hình 1/2/3), nên khuyến khích cài đặt cùng.
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 thứ nhất
Dưới đây là ví dụ hoàn chỉnh, bạn có thể 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" "VND" ;Tiền tệ chủ yếu của sổ cái
;【Hai、Thiết lập tài khoản】
;1、Mở tài khoản
1990-01-01 open Tài sản:Thẻ:1234 VND, USD ;Thẻ ngân hàng đuôi 1234, hỗ trợ VND và USD
1990-01-01 open Nợ phải trả:Thẻ tín dụng:5678 VND, USD ;Thẻ tín dụng song ngoại tệ
1990-01-01 open Thu nhập:Lương VND ;Thu nhập từ lương
1990-01-01 open Chi phí:Thuế VND ;Thuế phải nộp
1990-01-01 open Chi phí:Giao thông:Taxi VND ;Chi tiêu đi taxi, chỉ hỗ trợ VND
1990-01-01 open Vốn:Cân đối ban đầu ;Dùng cho 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 VND
Vốn:Cân đối ban đầu -10000.00 VND
;【Ba、Ký lục giao dịch】
2019-08-28
Chi phí:Giao thông:Taxi 200.00 VND
Tài sản:Thẻ:1234 -200.00 VND
2019-08-29
Tài sản:Thẻ:1234 -1100.00 VND
Nợ phải trả:Thẻ tín dụng:5678 1100.00 VND
2019-08-31
Tài sản:Thẻ:1234 12000.00 VND
Chi phí:Thuế 1000.00 VND
Thu nhập:Lương
Bước thứ hai
$ fava moneybook.bean
Chạy Fava trên ...
Sau đó mở trình duyệt và truy cập vào địa chỉ hiển thị để xem sổ cái, hình ảnh bên dưới lần lượt là bảng kết quả hoạt động kinh doanh, 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 hiệu quả, điều quan trọng là hiểu rõ định kèo bóng đá hôm nay dạng ghi chép của nó. Từ ví dụ trên, sổ cái bao gồm ba phần chính:
Thông tin sổ cái
Thông thường chỉ cần thiết lập tên sổ cái và loại tiền tệ chính:
option "title" "Sổ cái của tôi" ;Tên sổ cái
option "operating_currency" "VND" ;Tiền tệ chủ yếu của sổ cái
Thiết lập tài khoản
[Khởi tạo 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 khởi tạo open Tên tài khoản Loại tiền tệ
Beancount cho phép tên tài khoản có cấu trúc phân tầng, được phân cách bởi dấu hai chấm :
như Tài sản:Thẻ:1234
. Tầng đầu tiên phải là một trong năm loại tài khoản sau, tất cả các giao dịch hàng ngày đều có thể được phân loại vào một trong các hạng mục này.
Ngày khởi tạo có thể là ngày thật hoặc nếu quên, bạn có thể sử dụng sinh nhật của mình hoặc ngày hôm trước khi bắt đầu ghi chép kép (ví dụ: 2019-06-30).
Loại tiền tệ không bắt buộc khi mở tài khoản nhưng nên thêm vào để tránh lỗi khi ghi chép giao dịch với các loại tiền tệ không khớp. Có thể thiết lập nhiều loại tiền tệ, cách nhau bởi dấu phẩy (,).
Cuối cùng, nếu một tài khoản không còn sử dụng nữa, ví dụ như hủy thẻ tín dụng, có thể đóng tài khoản bằng lệnh close
như sau:
Ngày đóng close Tên tài khoản
[Khởi tạo]
Khi bắt đầu ghi chép, tài sản và nợ thường không bằng không nên cần khởi tạo tài khoản tài sản và nợ. Định dạng khởi tạo giống hệt phần ghi chép giao dịch, chỉ khác ở chỗ cần dùng tài khoản Vốn
. Ví dụ, tài khoản Tài sản:Thẻ:1234
, số dư ban đầu 10,000 đồng đến từ Vốn:Cân đối ban đầu
.
Ký lục giao dịch
Phần khởi tạo tài khoản có liên quan đến ghi chép giao dịch nên hãy tìm hiểu định dạng ghi chép giao dịch trước. Cấu trúc 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 đó: Số tiền đi kèm với tài khoản có 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) + Vốn = 0 Một giao dịch có thể liên quan đến hai 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 quy tắc “có dương và âm, tổng dương âm bằng nhau”.
Đến đây, bạn đã có thể bắt đầu ghi chép rồi. Mở tài khoản, khởi tạo và cuối cùng ghi chép giao dịch mỗi ngày.
Ba. Thực hành Beancount
Dưới đây là một số kinh nghiệm cá nhân:
Trình soạn thảo
Tôi sử dụng VSCode làm trình soạn thảo, kết hợp với phần mở rộng 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, cảnh báo lỗi, tăng cường hiệu suất ghi chép.
Chia nhỏ sổ cái
Sau một thời gian ghi chép theo cách trên, bạn sẽ nhận thấy rằng: khi số lượng giao dịch tăng lên, file sổ cái càng ngày càng lớn, khó bảo trì.
Beancount cho phép chia nhỏ sổ cái và kết nối các file này bằng cú pháp include
. Ví dụ, cấu trúc thư mục sổ cái của tôi như sau:
beancount
├── 2018
│ ├── 2018.bean
│ └── yuegangzhoudian.bean
├── 2019
│ ├── 2019.bean
│ ├── 0-default
│ │ ├── 00.bean
│ │ ├── 07-chi-phi.bean
│ │ ├── 08-chi-phi.bean
│ │ ├── 09-chi-phi.bean
│ │ ├── 10-chi-phi.bean
│ │ ├── event.bean
│ │ ├── thu-nhap.bean
│ │ └── chuyen-khoan.bean
│ ├── 1-bao-hiem
│ │ ├── 00.bean
│ ├── 2-du-lich
│ │ ├── 00.bean
│ │ ├── 20190708-ha-noi.bean
│ │ ├── 20190720-da-nang.bean
│ ├── 3-thuc-don
│ │ ├── 00.bean
│ │ ├── the-ngan-hang.bean
│ │ ├── the-tin-dung.bean
│ │ ├── chu-ky-chi-phi.bean
│ │ └── vay.bean
│ ├── 4-du-an
│ │ ├── 00.bean
│ └── 5-tai-lieu
│ ├── 2019-ghi-chu.md
│ ├── hoa-don-the-tin-dung
│ └── note.xlsx
├── tai-khoan
│ ├── tai-san.bean
│ ├── von.bean
│ ├── chi-phi.bean
│ ├── thu-nhap.bean
│ └── no-phai-tra.bean
|── main.bean
File main.bean
ở dưới cùng là sổ cái chính của tôi (chạy fava main.bean
để xem sổ cái). Nội dung file này như sau:
;==File main==
;【Một、Cài đặt sổ cái】
option "title" "Sổ cái của tôi"
option "operating_currency" "VND"
1990-01-01 custom "fava-option" "language" "vi"
;【Hai、Thiết lập tài khoản】
include "tai-khoan/tai-san.bean" ;Thiết lập và khởi tạo tài khoản tài sản
include "tai-khoan/no-phai-tra.bean" ;Thiết lập và khởi tạo tài khoản nợ phải trả
include "tai-khoan/chi-phi.bean" ;Thiết lập tài khoản chi phí
include "tai-khoan/thu-nhap.bean" ;Thiết lập tài khoản thu nhập
include "tai-khoan/von.bean" ;Thiết lập tài khoản vốn
;【Ba、Ký lục giao dịch】
include "2018/2018.bean" ;Tập hợp sổ cái lịch sử
include "2019/2019.bean" ;Tập hợp sổ cái năm 2019
Tôi sử dụng include
để nhập 7 file, trong đó có 5 file thiết lập tài khoản và 2 file sổ cái hàng năm.
File sổ cái năm 2019 của tôi như sau:
;==File 2019.bean==
;Mô tả từng file sổ cái năm 2019
include "0-default/00.bean" ;Thư mục mặc định, chi tiêu hàng tháng, thu nhập, chuyển khoản...
include "1-bao-hiem/00.bean" ;Thư mục bảo hiểm
include "2-du-lich/00.bean" ;Thư mục du lịch & công tác
include "3-thuc-don/00.bean" ;Thư mục chi phí định kỳ/giao dịch
include "4-du-an/00.bean" ;Thư mục dự án
File 2019.bean
vẫn chưa có ghi chép giao dịch mà tiếp tục nhập các sổ cái khác.
Tóm lại, cấu trúc sổ cái của tôi chia thành ba lớp:
Lớp 1: main.bean
là sổ cái chính, include các file tài khoản và sổ cái hàng năm. Lớp 2: Mỗi năm có một thư mục, bên dưới có file nam.bean
include các file 00.bean
trong các thư mục con. Lớp 3: File 00.bean
trong mỗi thư mục con include tất cả các file ghi chép chính thức trong thư mục đó.
Các chức năng của các thư mục con trong thư mục năm như sau: …
Ưu điểm của thiết kế này: …
Kiểm tra định kỳ
Trước đó, khi giới thiệu ưu điểm của ghi chép kép, tôi đã đề cập:
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 bằng lệnh balance
.
Giả sử vào ngày 17 tháng 10 lúc 24 giờ, số dư thẻ ngân hàng đuôi 1234 là 5000 đồng, ghi lại như sau:
2019-10-18 balance Tài sản:Thẻ:1234 5000.00 VND
Beancount sẽ tự động tổng hợp tất cả các giao dịch thu chi của thẻ ngân hàng đuôi 1234 trước ngày 17 tháng 10 (bao gồm cả ngày 17), nếu không có lỗi trong lịch sử giao dịch thì kết quả tính toán cũng sẽ là 5000 đồng. Nếu không đúng 5000 đồng, Beancount sẽ báo lỗi, nghĩa là có ban tien ca vấn đề trong lịch sử giao dịch.
Bạn sẽ nhận thấy rằng số dư lúc 24 giờ ngày 17 tháng 10 được kiểm tra vào ngày 18 tháng 10.
Tôi thường kiểm tra tất cả các tài khoản mỗi tháng một lần.
Xử lý lỗi/sai lệch
Nếu kiểm tra báo lỗi, tôi thường 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, tôi sẽ sử dụng Vốn:UFO
để ghi lại.
Giả sử khi kiểm tra phát hiện tài khoản Tài sản:Thẻ:1234
thiếu 200 đồng, thêm vào trước khi kiểm tra:
2019-10-18
Tài sản:Thẻ:1234 -200.00 VND
Vốn:UFO
Một trường hợp lỗi khác là sai lệch do làm tròn. Nếu có sai lệch do làm tròn, tôi sẽ xử lý bằng Vốn:Round
, ví dụ:
2019-10-09
Tài sản:Ngân hàng:CMB:XXXX -450.00 VND
Tài sản:Alipay:Quỹ 85.05 FD_110011 {5.2830 VND}
Chi phí:Hoa hồng:AlipayQuỹ 0.67 VND
Vốn:Round
Tài khoản Vốn
là một tài khoản đặc biệt, có thể xử lý các trường hợp biên. Tôi đã thiết lập bốn tài khoản Vốn
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ệ tùy theo thực tế. Ví dụ, thẻ Visa tiêu dùng bằng đô la Mỹ thì cần hỗ trợ đô la Mỹ.
Đối với tiêu dùng bằng đô la Mỹ nhưng ghi chép bằng đồng Việt Nam, có thể sử dụng @@
để chuyển đổi tiền tệ. Ví dụ, hóa đơn máy chủ blog của tôi là 3.71 đô la Mỹ được ghi bằng 26.57 đồng Việt Nam:
2019-10-04
Nợ phải trả:Thẻ tín dụng:SPDB:XXXX -26.57 VND
Chi phí:Số hóa:Phần mềm 3.71 USD @@ 26.57 VND
Trong option
có thể thiết lập loại tiền tệ chủ yếu của 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í:Ẩm thực
hoặc Chi phí:Hẹn hò:Ẩm thực
. Nếu chọn cách sau, số lượng tài khoản Ẩm thực
sẽ tăng lên, gây khó khăn trong việc duy trì.
Trong trường hợp này, tôi thường chọn cách trước và sử dụng nhãn của Beancount. Ví dụ:
2019-10-18
Tài sản:Thẻ:1234 -200.00 VND
Chi phí:Ẩm thực
Trong đó #Date
là nhãn, trong giao diện Fava có thể lọc theo nhãn để xem chi tiêu của các tài khoản dưới nhãn đó.
Ví dụ khác, mỗi chuyến du lịch, tôi sẽ gắn nhãn cho tất cả các chi phí trong chuyến đi với dạng #20191001-ha-noi
bao gồm ngày và điểm đến. Qua việc lọc nhãn, có thể dễ dàng xem chi phí ăn, ở, đi lại, giải trí trong chuyến đi.
Do các giao dịch du lịch thường nhiều, việc thêm nhãn từng giao dịch khá phức tạp, Beancount hỗ trợ sử dụng pushtag
và poptag
để thêm nhãn cho nhiều giao dịch.
pushtag #20191001-ha-noi
2019-10-18
Tài sản:Thẻ:1234 -200.00 VND
Chi phí:Ẩm thực:Buổi tối
2019-10-18
Tài sản:Thẻ:1234 -20.00 VND
Chi phí:Giao thông:Taxi
poptag #20191001-ha-noi
Như vậy, tất cả các giao dịch giữa pushtag
và poptag
sẽ có nhãn #20191001-ha-noi
.
Sự kiện
Trong cuộc sống có thể có những sự kiện mong muốn ghi lại, điều này không liên quan nhiều đến ghi chép tài chính nhưng Beancount vẫn hỗ trợ, cú pháp:
Ngày event "Loại sự kiện" "Chi tiết sự kiện"
Ví dụ về sự kiện của tôi:
;Sự kiện Beancount
2019-06-30 event "beancount" "Bắt đầu sử dụng Beancount"
;Sự kiện công việc
2019-08-30 event "work" "Last day tại công ty cũ"
2019-09-02 event "work" "Bắt đầu làm việc tại AE"
;Sự kiện du lịch hoặc công tác ghi lại location
2019-09-13 event "location" "Hà Nội -> Sài Gòn: Đi"
2019-09-15 event "location" "Sài Gòn -> Hà Nội: Về"
Giao diện Fava có phần xem sự kiện.
Bốn. Kết luận
Không ngờ viết dài đến vậy, ngắt quãng vài ngày mới hoàn thành, vẫn còn chút tiếc nuối.
Trong quá trình học tập, ngoài bài viết của byvoid, tôi còn tham khảo wzyboy và Beancount —— Ghi chép kép dòng lệnh và tài liệu chính thức.
Việc sử dụng cách này để ghi chép tài chính phần lớn 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 với hóa đơn từ ZaloPay và Momo, mất khoảng 3 phút để 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 hai giờ. Tôi cảm thấy cách import này cung cấp thông tin không đủ phong phú và chi tiết nên chưa nghiên cứu sâu.
Beancount còn có một số ứng dụng nâng cao, ví dụ như ghi chép đầu tư chứng khoán, sử dụ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ụ.
Giờ cập nhật gần nhất: 2019-10-19