Đối soát chuyển khoản tự động (Automated Reconciliation) là quá trình sử dụng phần mềm để ghép nối (matching) một giao dịch ngân hàng với một đơn hàng hoặc khoản phải thu cụ thể. Trái ngược với việc kế toán phải dò từng dòng sao kê bằng mắt, quy trình tự động yêu cầu các quy tắc thuật toán rõ ràng và xử lý được các trường hợp không hoàn hảo (ngoại lệ).

1. Thiết kế mã thanh toán chuẩn mực

Khó khăn lớn nhất của đối soát tự động là khách hàng thường nhập sai hoặc thiếu mã đơn hàng trong nội dung chuyển khoản. Để hệ thống có thể bóc tách (parsing) dữ liệu dễ dàng, bạn cần tuân thủ các nguyên tắc sau khi sinh mã thanh toán:

  • Ngắn gọn và dễ nhìn: Ví dụ: PAY1024, DH9981. Tránh các chuỗi quá dài như DONHANG202610249981.
  • Chữ và số, không dấu: Không sử dụng các ký tự đặc biệt (!, @, #) hoặc tiếng Việt có dấu, vì một số ứng dụng ngân hàng sẽ tự động xóa hoặc biến đổi chúng.
  • Sử dụng VietQR: Cách tốt nhất để đảm bảo khách hàng nhập ĐÚNG số tiền và nội dung là sinh ra một mã QR động (Dynamic QR Code) theo chuẩn VietQR. Khách chỉ cần quét, mọi thông tin sẽ được điền sẵn 100%.

2. Thuật toán đối soát (Matching Logic) cơ bản

Khi nhận được dữ liệu từ API hoặc Webhook ngân hàng, hệ thống của bạn nên chạy qua các bước kiểm tra sau:

  1. Lọc giao dịch: Chỉ xử lý các giao dịch báo CÓ (Tiền vào, Credit) và chưa từng được xử lý trước đó.
  2. Trích xuất mã đơn (Regex): Dùng biểu thức chính quy (Regular Expression) để tìm mã thanh toán trong chuỗi nội dung. Ví dụ: Nếu mã đơn có tiền tố PAY, dùng regex /PAY\d+/i để lấy ra PAY1024.
  3. Truy vấn đơn hàng: Tìm đơn hàng có mã PAY1024 trong Database. Kiểm tra xem đơn hàng này có đang ở trạng thái "Chờ thanh toán" (Pending) hay không.
  4. So khớp số tiền: Kiểm tra số tiền nhận được (transaction_amount) có bằng đúng số tiền cần thanh toán (order_total) hay không.
  5. Cập nhật trạng thái: Nếu tất cả đều khớp, sử dụng Database Transaction để vừa cập nhật đơn hàng thành "Đã thanh toán" (Paid), vừa đánh dấu giao dịch ngân hàng là "Đã sử dụng" (Used).

3. Xử lý các tình huống ngoại lệ (Exception Handling)

Trong thực tế, khách hàng có thể chuyển sai số tiền hoặc sai nội dung. Tự động hóa không có nghĩa là mù quáng gạch nợ. Dưới đây là cách xử lý:

Tình huốngNguyên nhânCách hệ thống xử lý
Đúng mã đơn, Thiếu tiềnKhách nhập tay số tiền bị thiếu một số 0.Cập nhật trạng thái đơn thành "Thanh toán một phần". Gửi email/SMS yêu cầu khách chuyển nốt phần còn thiếu kèm mã QR mới.
Đúng mã đơn, Thừa tiềnKhách bấm nhầm số hoặc cố tình bo thêm.Vẫn cập nhật đơn thành "Đã thanh toán". Đưa phần chênh lệch (Overpayment) vào một bảng theo dõi riêng để kế toán hoàn trả hoặc ghi nhận doanh thu khác.
Không tìm thấy mã đơnKhách ghi nội dung như "Mua áo thun" thay vì mã PAY1024.Đánh dấu giao dịch là "Chờ xử lý thủ công" (Unmatched). Kế toán sẽ vào Dashboard, tìm đơn hàng tương ứng với tên người chuyển hoặc số tiền để gán tay (Manual Match).
Đơn đã thanh toán rồiKhách chuyển khoản 2 lần do mạng lag.Bỏ qua việc cập nhật đơn, ghi log cảnh báo "Giao dịch lặp lại" để bộ phận CSKH liên hệ hoàn tiền.

4. Webhook nhanh, API chắc

Mô hình đối soát hoàn hảo nhất là kết hợp cả Webhook và API Polling:

  • Dùng Webhook làm mũi nhọn: Xử lý ngay lập tức 99% các giao dịch bình thường để mang lại trải nghiệm Real-time cho khách hàng mua sắm.
  • Dùng API Polling làm lưới an toàn: Chạy một Cronjob vào lúc 2h sáng mỗi ngày, gọi API ngân hàng lấy toàn bộ sao kê ngày hôm trước. So sánh danh sách này với bảng webhook_logs để tìm ra những giao dịch bị rớt mạng và đối soát bổ sung.

Triển khai luồng đối soát tự động

Khám phá cách tích hợp API Bank để tối ưu hóa quy trình kế toán của doanh nghiệp bạn ngay hôm nay.

Xem tài liệu API