Đây là bước biến công sức thành giá trị: agent ghi dữ liệu đã trích và kiểm tra vào phần mềm kế toán/ERP mà không cần con người gõ. Nhưng ghi tự động cũng là bước nguy hiểm nhất — sai một dòng là sai sổ sách thật. Bài này về ghi liệu một cách an toàn.
Ba cách kết nối hệ thống đích
- API chính thức — tốt nhất. Có kiểm tra dữ liệu, trả lỗi rõ, có thể idempotent.
- Import file (CSV/Excel theo mẫu) — khi hệ thống không có API. Agent sinh file đúng mẫu, người vận hành nạp.
- RPA/tự động hóa giao diện — gõ vào màn hình như người dùng. Chỉ dùng khi hai cách trên bất khả thi; giòn và dễ gãy khi UI đổi.
Nguyên tắc số 1: Idempotency (ghi lặp không nhân đôi)
Agent sẽ chạy lại (lỗi mạng, khởi động lại). Nếu không có khóa chống trùng, một hóa đơn bị ghi hai lần. Luôn dùng khóa duy nhất tự nhiên của tài liệu:
def write_invoice(inv, db):
key = f"{inv['mst_nguoi_ban']}:{inv['so_hoa_don']}"
if db.exists(key): # đã ghi rồi thì bỏ qua
return "SKIP_DUPLICATE"
record_id = erp_api.create_bill({
"vendor_tax": inv["mst_nguoi_ban"],
"number": inv["so_hoa_don"],
"date": inv["ngay"],
"amount": inv["tong_tien"],
})
db.save(key, record_id) # lưu ánh xạ để lần sau nhận diện
return record_id
Khóa MST:số_hóa_đơn là duy nhất tự nhiên — chạy lại bao nhiêu lần cũng chỉ một bản ghi.
Nguyên tắc số 2: Chỉ ghi làn Xanh, tự động
Gắn cổng chặn ngay trước khi ghi:
def process(inv):
issues = validate_invoice(inv, approved_msts)
lane = decide_lane(inv["do_tin_cay"], issues)
if lane == "XANH":
return write_invoice(inv, db)
else:
queue_for_review(inv, issues, lane) # KHÔNG ghi thẳng
return f"QUEUED_{lane}"
Nguyên tắc số 3: Ghi có thể lần vết (audit trail)
Mỗi lần ghi phải lưu: file gốc, JSON đã trích, danh sách kiểm tra, ai/cái gì đã duyệt, ID bản ghi trong ERP. Khi kiểm toán hỏi "số này ở đâu ra?", bạn truy ngược trong 10 giây.
Khung tư duy: coi mỗi lần ghi như giao dịch ngân hàng
- Trước khi ghi: đủ điều kiện chưa (làn Xanh)?
- Khi ghi: có chống trùng (idempotent) không?
- Sau khi ghi: có bằng chứng lần vết không?
- Nếu lỗi giữa chừng: có rollback hoặc đánh dấu "chưa hoàn tất" để chạy lại an toàn?
Ví dụ cụ thể: xử lý lỗi bán chừng
Agent tạo hóa đơn trong ERP thành công nhưng mất mạng trước khi lưu ánh xạ key -> record_id. Lần chạy sau, db.exists(key) trả False → định ghi lại → nhân đôi! Cách chống: hoặc dùng API idempotency-key phía ERP, hoặc lưu ánh xạ trong cùng transaction với ghi ERP, hoặc kiểm tra ERP theo so_hoa_don trước khi tạo mới.
Các bước triển khai
- Chọn kênh ghi theo thứ tự ưu tiên: API > Import > RPA.
- Xác định khóa duy nhất tự nhiên cho mỗi loại tài liệu.
- Cài cổng làn Xanh trước mọi lệnh ghi.
- Bọc ghi bằng kiểm tra tồn tại (idempotent).
- Ghi audit trail đầy đủ mỗi giao dịch.
- Thiết kế an toàn khi chạy lại: lỗi giữa chừng không gây trùng.
Checklist nhập liệu
- [ ] Ưu tiên API, có xử lý lỗi trả về
- [ ] Khóa chống trùng duy nhất
- [ ] Chỉ làn Xanh mới ghi tự động
- [ ] Audit trail: file gốc → JSON → duyệt → ID ERP
- [ ] Chạy lại nhiều lần không nhân đôi bản ghi
Sai lầm thường gặp
- Ghi không idempotent — mạng chập chờn là sổ sách nhân đôi. Luôn có khóa duy nhất.
- Cho làn Vàng ghi thẳng — vô hiệu hóa toàn bộ tầng kiểm tra ở bài 4.
- Chọn RPA khi có API — bảng nhập đổi vị trí là gãy toàn bộ.
- Không lưu lần vết — kiểm toán không truy được nguồn, mất uy tín agent.