Kế toán văn bản thuần (Plain Text Accounting, PTA)
(plaintextaccounting.org)- Plain Text Accounting (PTA) là cách ghi dữ liệu kế toán trong các tệp văn bản thuần và xử lý bằng các công cụ thân thiện với dòng lệnh như Ledger, hledger, Beancount; trang này là một cổng tập hợp các tài liệu liên quan tại một nơi
- Hoạt động cộng đồng được chia ra trên Matrix/IRC, diễn đàn, Reddit, Lemmy, Hacker News, Mastodon, X, Bluesky v.v., nên có thể theo dõi câu hỏi, tin tức và thảo luận theo từng dự án qua nhiều kênh
- Tài liệu học tập được sắp xếp thành so sánh ứng dụng, tài liệu chính thức, kiến thức kế toán cơ bản, tài liệu nhập môn, cheat sheet, cookbook, FAQ, slide và video, giúp cả người mới dùng PTA cũng có thể tiếp cận theo từng bước
- Hệ sinh thái ứng dụng cung cấp nhiều triển khai và ma trận tính năng xoay quanh Ledger, Beancount, hledger; 3 công cụ tiêu biểu lần lượt dựa trên C++/Python/Haskell và có lịch sử phát hành trong giai đoạn 2025~2026
- Từ nhập liệu/chuyển đổi, plugin cho trình soạn thảo, hóa đơn, tra cứu giá, báo cáo, ghi thời gian, UI, workflow đến thư viện, mọi thứ đều được kết nối để gắn dữ liệu kế toán văn bản thuần vào nhiều môi trường làm việc khác nhau
Khái niệm PTA và vai trò của plaintextaccounting.org
- Plain Text Accounting là phương pháp thực hiện ghi sổ và kế toán bằng các tệp văn bản thuần cùng phần mềm hiệu quả, thân thiện với dòng lệnh như Ledger, hledger, Beancount
- plaintextaccounting.org đóng vai trò là cổng dẫn tới công cụ, tài liệu, và các thực hành thực tế của cộng đồng PTA
- Có thể theo dõi cập nhật kho lưu trữ của trang, đồng thời trang cũng cung cấp báo cáo tài chính và hướng dẫn tài trợ
Cộng đồng và các kênh thảo luận
- Trò chuyện thời gian thực diễn ra qua Matrix
#plaintextaccounting, plaintextaccounting Matrix space, và kênh IRC#plaintextaccountingtrên Libera Chat - Thảo luận và tin tức được phân tán trên nhiều kênh công khai
- PTA forum
- /r/plaintextaccounting
- lemmy.world/c/plaintextaccounting
- Tìm kiếm stories/comments liên quan đến plain text accounting trên Hacker News
#plaintextaccounting,#ledgercli,#hledger,#beancounttrên Mastodon- Tìm kiếm và hashtag trên Twitter/X, Bluesky
- Trên Stack Exchange có cung cấp các thẻ
ledger-clivàhledgercùng liên kết tìm kiếm - Mailing list và chat theo từng dự án, cũng như
This Week In Hledger, cũng được liên kết sẵn
Tài liệu và học liệu
- Tài liệu so sánh ứng dụng bao gồm danh sách ứng dụng PTA, ma trận tính năng, FAQ “nên chọn ứng dụng PTA nào”, và Syntax Quick Reference
- Tài liệu chính thức của ứng dụng liên kết tới Ledger, hledger, Beancount, rustledger, Ledger(Go), Tackler, và tài liệu pta
- Tài liệu kiến thức kế toán cơ bản bao gồm PTA FAQ, Accounting basics/links của hledger, Double-Entry Counting Method của Beancount, “Accounting for Computer Scientists” v.v.
- Tài liệu nhập môn được chia theo từng điểm bắt đầu
- Cheat sheet, cookbook, FAQ, slide và video cũng được sắp xếp thành các mục riêng; trong mục video có ghi chú rằng khá khó tìm video PTA trên YouTube
Các ứng dụng PTA chính và so sánh tính năng
- Khi bắt đầu với PTA, có thể thử một hoặc nhiều ứng dụng được liệt kê trên trang, và nói chung có thể di chuyển dữ liệu giữa các ứng dụng
- Danh sách ứng dụng chính hiện tại tổng hợp nhiều dự án
- Ledger: C++, bắt đầu từ năm 2003, phát hành gần nhất năm 2025, khoảng 245 committer, khoảng 5.9k stars
- Beancount: Python, bắt đầu từ năm 2008, phát hành gần nhất năm 2026, khoảng 103 committer, khoảng 5.5k stars
- hledger: Haskell, bắt đầu từ năm 2007, phát hành gần nhất năm 2026, khoảng 194 committer, khoảng 4.4k stars
- Transity, Ledger(Go), Abandon, zhang, Tackler, rustledger, knut, acc, ledg cũng nằm trong danh sách hiện tại
- Các dự án cũ hoặc không còn hoạt động được tách riêng như placc, budget-cli, mynt, awk-pta, pta, blossom, .Net Ledger, monescript, Penny, UMM, cl-ledger v.v.
- Ma trận tính năng của Ledger, hledger, Beancount được cập nhật theo mốc 2024-09 và so sánh giao diện người dùng, cài đặt, trợ giúp, định dạng nhập/xuất, lệnh, cấu hình, khả năng mở rộng, tên tài khoản, ngân sách, biểu đồ, tra cứu giá, truy vấn, xác thực v.v.
- Những khác biệt tiêu biểu tập trung vào các mục ảnh hưởng trực tiếp đến việc chọn công cụ
- CLI liên kết tới
ledgercủa Ledger,hledgercủa hledger, vàbeanquerycủa Beancount - Mức độ dễ cài đặt và cấu hình được đánh dấu là
yescho Ledger/hledger, vànocho Beancount - hledger hỗ trợ các định dạng đầu ra text/html/csv/tsv/fods/beancount/sql/json
- Xác thực của Beancount được đánh dấu là luôn nghiêm ngặt, còn Ledger và hledger thì có thể cấu hình
- CLI liên kết tới
Hệ sinh thái phần mềm
- Mục AI bao gồm
accountant24, một tác tử AI đa mô hình ưu tiên cục bộ dùng hledger, cùng một bài viết cấu hình sử dụng Claude Code làm lớp tác tử với hledger và Obsidian vault - Các bản phân phối/cấu hình thay thế gồm Full-fledged hledger, hledger-flow, Lazy Beancount, hledger-youtube-business, rtrLEDGER, docker-finance
- Chuyển đổi/nhập dữ liệu chiếm tỷ trọng lớn; ngoài chức năng chuyển đổi CSV tích hợp của Ledger và hledger còn có công cụ import của Beancount v2,
banks2ledger,beancount-import,beancount2ledger,hledger2beancount,ledger2beancount,plaid2textv.v.- Các công cụ chuyển từ GnuCash, Intuit/QuickBooks/QIF, KMyMoney, YNAB sang *ledger hoặc Beancount cũng được sắp xếp trong các tiểu mục riêng
- Công cụ tạo dữ liệu được dùng để tạo giao dịch giá, khấu hao, lãi, giao dịch lặp lại, capital gains postings v.v.
- Plugin cho trình soạn thảo được chia cho Emacs, JetBrains IDE, Nano, Sublime, TextMate, Vim, VS Code
- Ví dụ:
ledger-mode,beancount-mode,hledger-mode,vim-ledger,vim-beancount,hledger-vscode,vscode-beancount
- Ví dụ:
- Các công cụ định dạng gồm
beancount-black,beancount-black web app,hledger-fmt - Về công cụ hóa đơn, bài giới thiệu đề cập đến
kairos, một công cụ Go tạo hóa đơn từ tệp hledger timedot
UI, báo cáo, workflow, thư viện
- Các công cụ tra cứu giá bao gồm
bean-pricecủa Beancount,hledger-stockquotes,ledger-get-prices,pricehist, cùng các công cụ tra giá cổ phiếu và tỷ giá dựa trên Yahoo Finance - Công cụ báo cáo mở rộng sang ngân sách, phân tích tài sản, báo cáo chênh lệch, tỷ suất hoàn vốn nội bộ, biểu đồ, Sankey, xuất PDF, tính lãi vốn v.v.
- Công cụ ghi thời gian gồm org, hook Taskwarrior, CSV Toggl, chuyển đổi timeclock, và các ví dụ ghi thời gian dựa trên hledger
- UI terminal như
hledger add,hledger-ui,hledger-iadd,bean-add,ledger xact,puffin,regdelhỗ trợ nhập, tra cứu và chỉnh sửa giao dịch - GUI, web, và mobile UI cũng được liên kết thành các công cụ riêng
- Web: fava, hledger-web, Paisa, BeanHub
- Mobile: Beancount Mobile CE, beancount-mobile, NanoLedger, cashier, cone, MoLe
- GUI: fruit-credits, Ledgera, Prudent, Surebeans v.v.
- Mục workflow đề cập đến các cấu hình tạo journal hledger từ CSV hoặc theo dõi và báo cáo tài chính truyền thống/crypto trên nền Docker
- Mục thư viện tập hợp các thành phần dành cho phát triển như Beancount parser, BeanHub API, hledger-lib, hledger-web JSON API, node-hledger, pyhledger để parse, truy vấn, báo cáo và tích hợp tệp PTA
1 bình luận
Ý kiến trên Hacker News
Những hệ thống yêu cầu phân loại nghiêm ngặt ngay lập tức không phù hợp với một số người. Ở công ty tôi từng làm, chúng tôi dùng cách 2 bước: trước hết ghi nhanh vào iPhone Notes kiểu
-50 Alice tools,+20 Bob returned loan, rồi sau đó một script sẽ phân tích ngày tháng, từ khóa, đối tác và các mục phân tích nội bộ để chuyển thành mẫu bút toán képNhững mục script không nhận ra thì phân loại thủ công, và nếu cần thì thêm vào danh sách quy tắc; đồng thời có danh sách ánh xạ riêng theo từng người để Alice và Bob không cần thống nhất cùng một hệ từ vựng
Khó mà tưởng tượng mỗi lần tiền ra vào, một người đang xếp hàng, đang lái xe hoặc đang nói chuyện lại điền đầy đủ định dạng như
Cat1:cat2:cat3. Rốt cuộc rất có thể họ sẽ quay lại ghi chú ngắn hoặc chat, hoặc không phải cuối ngày mà có lẽ đến cuối tuần mới cố “nhớ lại” để điềnVới công cụ dựa trên văn bản, bạn có thể tự do tạo luồng làm việc mình muốn, chẳng hạn gắn một script nhận ghi chú iPhone rồi chuyển thành định dạng ledger, nên tôi thấy hơi lạ nếu coi đó là điểm bất mãn
Mỗi quý tải CSV từ tài khoản ngân hàng, thẻ tín dụng và Zoho, rồi script Ruby nhìn vào trường ghi chú để chuyển thành tệp ledger. Script và kết quả đầu ra vẫn cần chỉnh chút ít, nhưng hơn 95% đã được tự động hóa
Thêm nữa, chúng tôi cũng thêm các kiểm tra tính nhất quán vào tệp ledger, như số dư có khớp với số dư nhận từ ngân hàng hay không, hay các mục có nằm trong kỳ hiện tại không
Tôi đã dùng ledger-cli gần 20 năm, gần như từ lúc bắt đầu tự kinh doanh, và dù không hoàn hảo nhưng rất hài lòng. Mọi thứ đều là văn bản thuần túy nên có thể xử lý bằng script, đọc trong VIM, và trích xuất dữ liệu dễ dàng
Tệp ledger của một trong các công ty tôi đang vận hành hiện là một tệp văn bản thuần túy 2MB, chứa các giao dịch từ năm 2016 đến nay. Tôi không thấy nhiều giá trị trong việc chia tài khoản/phân loại quá chi tiết, nhưng để theo dõi tổng thể thì đó là công cụ không thể thiếu
Việc học bút toán kép mà các công cụ như ledger sử dụng cũng thú vị; nhìn lại thì không khó, và tôi thấy đây là một kỹ năng hữu ích suốt đời
Về chiến lược tài khoản/phân loại, tôi dùng cách khớp với các nhóm chi phí mà Cơ quan Thuế vụ Canada yêu cầu trong tờ khai thuế. Ban đầu tôi tạo các phân loại hợp lý như chi phí hosting, chi phí nguyên mẫu/sản xuất, nhưng sau vài năm cứ phải ánh xạ lại sang phân loại của CRA, tôi nhận ra ngay từ đầu đặt theo phân loại thuế sẽ làm việc khai báo cuối năm đơn giản hơn nhiều
Nếu dữ liệu là SQLite thì triển khai sẽ dễ hơn nhiều, nhưng như vậy lại mất lợi thế có thể chỉnh sửa trực tiếp bằng trình soạn thảo văn bản
Nhờ LLM, việc duy trì kế toán văn bản thuần túy đã dễ hơn nhiều. Đặc biệt hữu ích khi đưa sao kê ngân hàng vào hledger và tránh phải nhập thủ công
Tôi dùng một tệp JSON để ánh xạ giao dịch ngân hàng sang tài khoản hledger; nếu có giao dịch chưa có ánh xạ mới, script Python sẽ tạo prompt cho Claude. Claude nhìn vào danh sách tài khoản, đề xuất ánh xạ cho giao dịch mới, rồi dựa trên đó trả về bút toán hledger
Sau đó một script khác in gọn gàng các bút toán hledger của giao dịch ngân hàng trong tháng, tôi chỉ chỉnh vài phút là chốt. Cả những hướng dẫn ánh xạ mà trước đây hẳn sẽ thành một đống regex và điều kiện mong manh, giờ cũng có thể viết bằng ngôn ngữ tự nhiên
Tôi thích quá trình học khi dùng Beancount, viết công cụ nhập dữ liệu, và tự tay xử lý kế toán. Nhưng lần gần nhất tôi nhập dữ liệu đã gần 1 năm trước; tôi từng định làm hằng tháng, nhưng dù đã tự động hóa khá nhiều, mỗi lần vẫn mất 30–60 phút nên khá phiền
Đến khi còn cần cả xác nhận trên di động thì tôi bỏ cuộc
Tôi cũng đã không nhập dữ liệu khoảng 1 năm rồi, và nếu muốn khôi phục lại thì tôi chỉ nghĩ ra cách chia nhỏ, tải lên từng tháng một trong vài ngày
https://plaid.com/
Dùng ledger cho ghi sổ và kế toán cá nhân cũng như nhiều LLC. Nếu bạn quen dùng terminal, thành thạo CLI, thường xuyên dùng vim hoặc emacs, các kiến thức cơ bản về sed/awk, và scripting bằng bash/python/perl/ruby, thì việc học ledger cùng kế toán kép rồi chuyển sang có khả năng sẽ khiến bạn hài lòng hơn nhiều so với cách đang dùng hiện tại
reckon rất hữu ích để nhập giao dịch nhanh: https://github.com/cantino/reckon
Tách vấn đề bằng
includecũng tốt.bal --dccó thể hơi quen thuộc với kế toán viên Mỹ, nhưng họ thường không hiểu đúng cách ledger dùng số âm, nên tôi thấy dễ hơn là viết vài script để chuyển sang kiểu DR/CR. Tôi đã ngạc nhiên khi thấy những kế toán viên mình làm việc cùng xử lý các tầng trừu tượng kém đến mức nàoNếu chỉ thêm một mẹo, thì đó là hãy gom mọi thứ lại bằng Makefile hoặc thứ tương tự. Khi có nhiều file giao dịch tách theo từng tài khoản, lệnh để include đúng file rất dễ trở nên dài
Tôi cũng không thể nhớ chính xác cú pháp của đủ loại script vẽ đồ thị và tóm tắt mỗi lần dùng, nhưng với make thì có thể gọi kiểu
make cashflow,make balance 'A=Checking',make balance-plot 'A=retirement'Tôi đã viết nhiều bài về các công thức thực chiến để dùng Ledger hiệu quả trong những tình huống phức tạp hơn mức tutorial cơ bản: https://felixcrux.com/blog/ledger-practices
Khi nhập giao dịch ngân hàng, trước tiên tôi gán vào tài khoản mang tên đối tác; rồi script dùng
ledger printđể tạo một file journal thứ hai theo từng đối tác, đảo chiều giao dịch gốc, sau đó tạm đưa vào các tiểu khoản dưới dự ánUnknownvà phân loạiUnknownSau đó người phụ trách sổ sách khớp giao dịch với hóa đơn cụ thể và gán vào tài khoản
Project:Category; nếu cần thì tách một khoản thanh toán đơn lẻ ra nhiều dự án/phân loại. Khi include toàn bộ journal giao dịch ngân hàng và journal theo đối tác, có thể dùngledger balđể kiểm tra xem việc ghi sổ đã hoàn tất chưaKế toán bằng văn bản thuần rất tuyệt, nhưng tôi nghĩ rào cản lớn nhất với nhiều người là tải dữ liệu ngân hàng xuống theo định dạng chuẩn
Các ngân hàng sẽ không tích cực hỗ trợ gì hơn CSV hay Excel, còn các nền tảng tổng hợp dữ liệu như Yodlee hay Plaid thì không thân thiện với mã nguồn mở hoặc người dùng làm vì sở thích
Trước đây có một công ty tên Wesabe(https://en.wikipedia.org/wiki/Wesabe) từng làm phần mềm đồng bộ ngân hàng trên desktop. Họ về cơ bản đã bị Mint.com lấn át, nhưng tôi vẫn nhớ cách tiếp cận đó và thấy có vẻ vẫn khả thi trong mã nguồn mở
Tôi chưa dùng thử, nhưng sau khi đã bỏ ra 4 tiếng trong vài ngày để giúp một công ty SaaS làm sổ sách xử lý vấn đề kết nối ngân hàng, tôi sẵn sàng dành thời gian cho nó
Mỗi lần đối soát giao dịch là lại phải vật lộn với một hệ thống mà mình không thể nhìn vào bên trong cũng không thể tự sửa. Giờ tôi bắt đầu nghi ngờ liệu công sức bỏ ra có đáng không, và nếu có công cụ dùng được thì có lẽ tự xử lý CSV sẽ tốt hơn. Nhân tiện, công ty đó cũng không hoàn tiền, nói rằng đó là “chuyện bình thường”
Có cả lint, và nếu hài lòng với kết quả thì có thể lưu script để import lại bất cứ lúc nào. Khi theo dõi những thứ như cổ phiếu, nó cũng hỗ trợ tải giá hàng hóa/tài sản
Biểu đồ thì với gu của tôi chưa đủ tổng quát nên tôi xuất dữ liệu sang nơi khác, nhưng để nhập dữ liệu thì rất tuyệt
Vì vậy tôi tải PDF xuống và trích xuất dữ liệu, nhưng việc này đau đớn quá mức cần thiết. Để cung cấp PDF dễ đọc bằng máy, chỉ cần tuân theo vài quy tắc đơn giản để có thể lấy ra 3–4 trường giao dịch và vài trường sao kê như ngày tháng, số dư mà không cần các heuristic mong manh
PDF có thương hiệu và dễ đọc với con người không hề mâu thuẫn với PDF dễ đọc bằng máy
Tôi từng định xử lý dữ liệu đó rồi đưa vào hệ thống kế toán, nhưng không thực hiện được; sau đó điện thoại hỏng và tôi cũng mất luôn action của Tasker. Giờ không còn động lực triển khai lại nữa
Domain liên quan vẫn còn nguyên. Bài năm 2023: https://news.ycombinator.com/item?id=36022005, bài năm 2021: https://news.ycombinator.com/item?id=28420797, bài năm 2016: https://news.ycombinator.com/item?id=11164330
Có thể xem thêm các nhắc đến khác về khái niệm này tại https://hn.algolia.com/?q=Plain+Text+Accounting
Tôi tò mò không biết người khác thực sự dùng các công cụ kế toán bằng văn bản thuần như thế nào. Muốn biết họ dùng để nắm thói quen chi tiêu và thay đổi hành vi, để theo dõi chi phí, doanh thu, giá trị tài sản ròng, hay vì chính quy trình có trật tự đó hấp dẫn
Mỗi lần thấy chủ đề này, tôi vừa có thôi thúc muốn đắm chìm hoàn toàn, vừa thấy tội lỗi vì những lần thử trước đây không duy trì được. Hiện giờ tôi chưa cập nhật sổ cái cá nhân được một tháng rưỡi, nên cảm giác tội lỗi lớn hơn
Rốt cuộc vì không chắc tại sao mình dùng thứ này, nên sau một thời gian việc ghi giao dịch trở thành cảm giác ghi chỉ để ghi
Chi phí công việc cũng tương tự. Tôi trả tiền thiết bị hoặc dịch vụ bằng thẻ của mình rồi báo cáo sau để được hoàn lại bằng tiền mặt hoặc chuyển khoản. Tuy vậy ở một số quốc gia hoặc doanh nghiệp thì cách này không dùng được
Chi tiêu cá nhân hằng ngày thì ngân hàng và kinh nghiệm đã cho biết rồi, nên không cần làm đến kế toán. Phải có động lực tài chính, chứ không phải động lực cảm xúc. Nếu biết rằng bỏ kế toán thì bạn mình sẽ mất vài trăm đô la tiền rượu hoặc công ty sẽ lấy miễn phí một sợi cáp HDMI, bạn sẽ nhập số tiền không chút do dự. Lý do kế toán cá nhân khó duy trì là vì thứ mất đi không phải tiền, mà chỉ là phân tích
Tôi cũng có vài script tự động hóa các quy trình như nhập giao dịch Wise hay theo dõi tỷ giá. Nhưng tôi không có đủ kỷ luật để dùng nó cho chi tiêu cá nhân hằng ngày hay quản lý ngân sách
Việc kiểm tra xem mỗi ngày mình đã lãng phí bao nhiêu vào ăn ngoài, rồi tính kết quả lãi kép nếu số tiền đó được đưa vào quỹ chỉ số, đã giúp tôi rất nhiều trong việc giảm thói quen ăn ngoài. Tôi cũng có thể phân biệt khoản phải thu từ khách hàng, dòng tiền thực tế và dòng tiền dựa trên thu nhập dự kiến
Khi chia số dư tài khoản tiết kiệm trong đầu kiểu “40% mục tiêu đầu tư, 1% quà tặng”, tôi ít bị nhìn thấy số dư lớn rồi tiêu bốc đồng hơn. Tôi cũng có một chương trình tạo biểu đồ về tăng trưởng tài sản, mức tăng/giảm chi tiêu theo phân loại, ghi chú liệu thay đổi đó có tác động ròng tích cực đến cuộc sống hay không rồi dump ra trang web; tôi dùng nó hằng năm khi lập kế hoạch tiếp theo
Tôi cũng có script Python chuyển đổi file ledger sang Excel để gửi cho kế toán làm khai thuế hằng năm. File ledger cho kinh doanh được tách riêng; tôi không tự quản lý thủ công mà xuất dữ liệu từ phần mềm của kế toán rồi tự tính ở nhà
Trong kinh doanh, tôi dùng nó để dự báo dòng tiền nhằm dự đoán chi tiêu sẽ tăng thế nào khi doanh thu tăng, phát hiện bất thường trong chi tiêu theo bộ phận, quyết định nên tăng tuyển dụng hay tăng chi marketing, và tính các chỉ số như ROIC
Kế toán kép giúp lấy sao kê ngân hàng để tạo ledger rồi phát hiện sai lệch kế toán. Tôi chia tài khoản theo mục đích như chi tiêu tùy ý, phúc lợi nhân viên, chi phí đầu vào cho kinh doanh, rồi để tài khoản chính chuyển tiền vào hằng tuần nhằm kiểm tra có bất thường không
Trước đây từng có chuyện kế toán không nói rõ ràng, đưa chi phí giả vào sổ sách để trông như tiết kiệm được nhiều thuế, rồi tôi phải ra tòa và trả một khoản phạt lớn cùng phụ thu chậm nộp. Giờ tôi không tin kế toán nữa và nhất định kiểm tra lại
Tôi có nhiều script tự động nhập dữ liệu từ Stripe, sao kê ngân hàng, sổ sách của kế toán, v.v., rồi dùng Python đối chiếu với nhau để tìm sai lệch. Với một lập trình viên như tôi, kế toán bằng văn bản thuần rất hợp, và tôi đã xây dựng hệ thống riêng của mình trên hledger trong nhiều năm