Dùng Python + AI Đọc File XML Hóa Đơn Điện Tử: Lập Bảng Kê Đầu Vào Tự Động Trong Vài Giây
Mục lục (7 mục)
Giới thiệu
Mỗi tháng, kế toán thuế nhận về hàng trăm hóa đơn đầu vào qua email: file PDF để xem, file XML là bản gốc có giá trị pháp lý. Công việc quen thuộc là mở từng file, gõ lại ký hiệu, số hóa đơn, ngày lập, MST người bán, tiền hàng, tiền thuế vào Excel để lập bảng kê, đối chiếu với tờ khai và phần mềm kế toán.
Gõ tay 200 hóa đơn mất nửa ngày, và chỉ cần sai một chữ số MST hay tiền thuế là lệch bảng kê. Tin tốt: file XML hóa đơn điện tử có cấu trúc dữ liệu thống nhất theo định dạng chuẩn của Tổng cục Thuế (nay là Cục Thuế). Nghĩa là máy đọc được — và bạn có thể nhờ AI viết một đoạn Python ngắn để tự động đọc cả thư mục XML, xuất ra một file Excel bảng kê trong vài giây.
Bài này dành cho kế toán chưa biết lập trình: bạn sẽ hiểu cấu trúc file XML, có sẵn đoạn code mẫu, và biết cách ra lệnh cho AI chỉnh code theo nhu cầu riêng.
File XML hóa đơn điện tử chứa gì?
Mở một file XML bằng Notepad, bạn sẽ thấy dữ liệu được bọc trong các "thẻ" (tag). Các thẻ quan trọng theo định dạng chuẩn:
| Thẻ XML | Ý nghĩa | Vị trí |
|---|---|---|
KHMSHDon | Ký hiệu mẫu số (1 = HĐ GTGT, 2 = HĐ bán hàng…) | TTChung |
KHHDon | Ký hiệu hóa đơn (ví dụ C26TAA) | TTChung |
SHDon | Số hóa đơn | TTChung |
NLap | Ngày lập (yyyy-mm-dd) | TTChung |
NBan/Ten, NBan/MST | Tên, MST người bán | NDHDon |
NMua/Ten, NMua/MST | Tên, MST người mua | NDHDon |
TgTCThue | Tổng tiền chưa thuế | TToan |
TgTThue | Tổng tiền thuế GTGT | TToan |
TgTTTBSo | Tổng tiền thanh toán bằng số | TToan |
MCCQT | Mã của cơ quan thuế (với hóa đơn có mã) | Cuối file |
Cấu trúc rút gọn trông như sau:
<HDon> <DLHDon> <TTChung> <KHMSHDon>1</KHMSHDon> <KHHDon>C26TAA</KHHDon> <SHDon>1258</SHDon> <NLap>2026-09-18</NLap> </TTChung> <NDHDon> <NBan><Ten>CÔNG TY TNHH ABC</Ten><MST>0312345678</MST></NBan> <NMua><Ten>CÔNG TY CP XYZ</Ten><MST>0109876543</MST></NMua> <TToan> <TgTCThue>20000000</TgTCThue> <TgTThue>1600000</TgTThue> <TgTTTBSo>21600000</TgTTTBSo> </TToan> </NDHDon> </DLHDon> <MCCQT>00A1B2C3D4E5F6...</MCCQT> </HDon>
Chỉ cần biết "đường dẫn" đến từng thẻ, Python sẽ lấy ra chính xác — không bao giờ gõ nhầm.
Đoạn code Python mẫu: đọc cả thư mục XML ra Excel
Chuẩn bị: cài Python (python.org), mở Command Prompt và chạy pip install pandas openpyxl. Đặt toàn bộ file XML vào một thư mục, ví dụ D:\HoaDon\Thang09.
import glob import xml.etree.ElementTree as ET import pandas as pd THU_MUC = r"D:\HoaDon\Thang09" # thư mục chứa file XML MST_CONG_TY = "0109876543" # MST của doanh nghiệp bạn def lay(node, path): """Lấy text của thẻ theo đường dẫn, không có thì trả về rỗng.""" el = node.find(path) return el.text.strip() if el is not None and el.text else "" def so(text): try: return float(text) except ValueError: return 0.0 dong = [] for file in glob.glob(THU_MUC + r"\*.xml"): try: root = ET.parse(file).getroot() hd = root.find(".//DLHDon") dong.append({ "File": file.split("\\")[-1], "Mẫu số": lay(hd, "TTChung/KHMSHDon"), "Ký hiệu": lay(hd, "TTChung/KHHDon"), "Số HĐ": lay(hd, "TTChung/SHDon"), "Ngày lập": lay(hd, "TTChung/NLap"), "Người bán": lay(hd, "NDHDon/NBan/Ten"), "MST người bán": lay(hd, "NDHDon/NBan/MST"), "MST người mua": lay(hd, "NDHDon/NMua/MST"), "Tiền chưa thuế": so(lay(hd, "NDHDon/TToan/TgTCThue")), "Tiền thuế": so(lay(hd, "NDHDon/TToan/TgTThue")), "Tổng thanh toán": so(lay(hd, "NDHDon/TToan/TgTTTBSo")), "Mã CQT": lay(root, ".//MCCQT"), }) except ET.ParseError: dong.append({"File": file.split("\\")[-1], "Ghi chú": "File XML lỗi, không đọc được"}) df = pd.DataFrame(dong) # Các cột kiểm tra tự động df["Sai MST người mua"] = df["MST người mua"] != MST_CONG_TY df["Lệch tổng tiền"] = (df["Tiền chưa thuế"] + df["Tiền thuế"] - df["Tổng thanh toán"]).abs() > 1 df["Trùng hóa đơn"] = df.duplicated(subset=["MST người bán", "Ký hiệu", "Số HĐ"], keep=False) df.to_excel(THU_MUC + r"\BangKe_DauVao.xlsx", index=False) print(f"Đã đọc {len(df)} hóa đơn. Xem file BangKe_DauVao.xlsx")
Chạy bằng lệnh python bangke.py. Kết quả là một file Excel, mỗi dòng một hóa đơn, kèm 3 cột cảnh báo.
Ba cột kiểm tra giúp kế toán bắt lỗi sớm
Giá trị lớn nhất của code không phải là "gõ hộ", mà là kiểm tra hộ:
- Sai MST người mua: hóa đơn ghi MST không phải của công ty bạn → không đủ điều kiện khấu trừ thuế GTGT đầu vào, phải yêu cầu người bán xử lý sai sót.
- Lệch tổng tiền: tiền chưa thuế + tiền thuế ≠ tổng thanh toán (cho phép lệch 1 đồng do làm tròn) → dấu hiệu hóa đơn lập sai hoặc có chiết khấu cần xem lại.
- Trùng hóa đơn: cùng MST người bán + ký hiệu + số hóa đơn xuất hiện 2 lần → thường do nhà cung cấp gửi email 2 lần, tránh kê khai trùng.
Ví dụ kết quả thực tế sau khi chạy 186 file XML tháng 9/2026 của một doanh nghiệp thương mại:
| Kiểm tra | Số hóa đơn bị đánh dấu | Xử lý |
|---|---|---|
| File XML lỗi | 2 | Yêu cầu NCC gửi lại file gốc |
| Sai MST người mua | 1 | Đề nghị NCC lập hóa đơn điều chỉnh/thay thế |
| Lệch tổng tiền | 3 | Mở PDF kiểm tra — 2 hóa đơn có chiết khấu thương mại, 1 hóa đơn sai thật |
| Trùng hóa đơn | 7 cặp | Loại bỏ bản trùng trước khi kê khai |
Kiểm tra bằng mắt 186 hóa đơn rất dễ sót những lỗi này; code chỉ mất vài giây.
Nhờ AI chỉnh code theo nhu cầu riêng
Bạn không cần tự viết thêm. Dán đoạn code trên vào ChatGPT/Claude và ra lệnh bằng tiếng Việt, ví dụ:
Đây là đoạn Python đọc XML hóa đơn điện tử ra Excel. Hãy sửa giúp tôi: 1. Thêm sheet thứ 2 chi tiết từng dòng hàng hóa (thẻ DSHHDVu/HHDVu: THHDVu, DVTinh, SLuong, DGia, ThTien, TSuat). 2. Thêm sheet tổng hợp tiền thuế theo từng thuế suất (0%, 5%, 8%, 10%). 3. Tô màu đỏ các dòng có cảnh báo. Giải thích từng thay đổi ngắn gọn để tôi hiểu.
Một số yêu cầu hữu ích khác:
- "Tách bảng kê theo từng người bán, mỗi người bán một sheet."
- "Đọc thêm file Excel tôi xuất từ phần mềm kế toán, đối chiếu số hóa đơn nào có trong XML nhưng chưa hạch toán."
- "Đổi định dạng ngày sang dd/mm/yyyy và định dạng số có dấu phân cách hàng nghìn."
Lưu ý: định dạng XML có thể khác nhẹ giữa các nhà cung cấp hóa đơn (một số đặt thẻ tiền trong nhánh khác). Nếu cột nào trống bất thường, hãy gửi cho AI một file XML mẫu đã che thông tin và nhờ nó chỉnh lại đường dẫn thẻ.
Ứng dụng thực tế và giới hạn cần biết
Nên dùng khi:
- Doanh nghiệp nhận từ 50 hóa đơn đầu vào/tháng trở lên.
- Kế toán dịch vụ làm cho nhiều khách hàng — một đoạn code dùng chung, chỉ đổi thư mục và MST.
- Cần soát nhanh trước khi kê khai thuế GTGT tháng/quý.
Giới hạn cần nhớ:
- Code không thay thế việc tra cứu trạng thái hóa đơn trên cổng hoadondientu.gdt.gov.vn (hóa đơn đã bị hủy, điều chỉnh, thay thế hay chưa) và tình trạng hoạt động của MST người bán. Đây vẫn là bước bắt buộc với hóa đơn giá trị lớn hoặc nhà cung cấp mới.
- Code không kiểm tra chữ ký số của người bán. Hãy dùng phần mềm đọc hóa đơn chuyên dụng (như iTaxViewer) hoặc tính năng kiểm tra của phần mềm kế toán cho bước này.
- Điều kiện khấu trừ thuế (thanh toán không dùng tiền mặt từ 5 triệu đồng trở lên, hàng hóa dùng cho hoạt động chịu thuế…) vẫn cần kế toán đánh giá.
- File XML là dữ liệu của doanh nghiệp: chạy code trên máy của bạn, chỉ gửi cho AI đoạn code và file mẫu đã che thông tin.
Kết luận
File XML hóa đơn điện tử là "kho dữ liệu có sẵn" mà nhiều kế toán chưa tận dụng. Với khoảng 50 dòng Python do AI hỗ trợ viết và chỉnh sửa, bạn có thể biến việc gõ tay bảng kê hóa đơn đầu vào thành thao tác vài giây, đồng thời tự động bắt 3 lỗi phổ biến: sai MST người mua, lệch tổng tiền và hóa đơn trùng.
Hãy bắt đầu nhỏ: chép 10 file XML của tháng này vào một thư mục, chạy đoạn code mẫu, so sánh với bảng kê bạn làm tay. Khi kết quả khớp, bạn sẽ không muốn quay lại cách cũ nữa.
Bài viết liên quan

AI Cho Văn Phòng 2026: Bắt Đầu Từ Đâu Và Lộ Trình 30 Ngày
Xu hướng AI agent đang thay đổi công việc văn phòng năm 2026. Đây là hướng dẫn chọn việc thử trước và lộ trình 30 ngày cho người mới bắt đầu.

Đối Chiếu Sổ Phụ Ngân Hàng Với Sổ Cái Bằng Excel Và AI: Prompt Mẫu Dùng Ngay
Hướng dẫn kế toán đối chiếu sổ phụ ngân hàng với sổ cái bằng Excel kết hợp AI, kèm prompt mẫu dùng ngay và lưu ý bảo mật dữ liệu khi làm việc với AI.
Dùng AI Đối Chiếu Sao Kê Ngân Hàng Với Sổ TK 112: Mẫu Prompt Và Bảng Điều Hòa Cuối Tháng
Hướng dẫn dùng AI đối chiếu sao kê ngân hàng với sổ TK 112: chuẩn bị dữ liệu, mẫu prompt dò khớp, lập bảng điều hòa và tự kiểm tra lại kết quả cuối tháng.