1. Bối cảnh doanh nghiệp & phạm vi
Bạn là QA Lead tại VietCredit Bank, phụ trách mảng cho vay tiêu dùng và vay tín chấp cá nhân, phục vụ khoảng 800.000 khách hàng vay đang hoạt động với dư nợ trung bình 45 triệu đồng/khoản vay. Mỗi ngày hệ thống tiếp nhận khoảng 6.000 hồ sơ vay mới, trong đó khoảng 35% được phê duyệt và giải ngân trong vòng 48 giờ theo cam kết SLA với khách hàng. Sản phẩm trọng yếu quý này là tái thiết kế luồng khởi tạo khoản vay (loan origination) để rút ngắn thời gian thẩm định từ 3 ngày xuống còn 1 ngày làm việc, đồng thời bổ sung chấm điểm tín dụng tự động qua Trung tâm Thông tin Tín dụng Quốc gia (CIC).
Yêu cầu từ Ban Quản lý Rủi ro (Risk Management) và Bộ phận Tuân thủ đặt ra ràng buộc nghiêm ngặt: mọi khoản vay trên 100 triệu đồng phải qua phê duyệt tối thiểu 2 cấp (chuyên viên tín dụng và trưởng phòng rủi ro), khoản vay trên 500 triệu phải có thêm cấp giám đốc rủi ro khu vực. Ngân hàng Nhà nước yêu cầu báo cáo chính xác tổng dư nợ giải ngân hàng ngày, khớp tuyệt đối với hợp đồng đã ký và lịch trả nợ đã đăng ký. Vì đây là luồng 'chạm tiền thật' ở quy mô lớn, một lỗi giải ngân trùng lặp (double disbursement) có thể gây thiệt hại hàng trăm triệu đồng chỉ trong một ngày vận hành, nên chiến lược kiểm thử phải đặt trọng tâm vào tính đúng đắn tài chính hơn là giao diện.
Phạm vi tự động hoá của tài liệu này
- Luồng khởi tạo khoản vay đầu-cuối: nộp hồ sơ → thẩm định điều kiện → chấm điểm tín dụng CIC → phê duyệt nhiều cấp → ký hợp đồng → giải ngân → sinh lịch trả nợ.
- Các ca lỗi tài chính: idempotency giải ngân, từ chối giữa chừng ở cấp phê duyệt cao hơn, timeout khi gọi CIC, vượt hạn mức cho vay theo hồ sơ khách hàng.
- Nghiệp vụ hậu kiểm: đối soát tổng giải ngân trong ngày với sổ cái Core Banking, kiểm tra tính cân bằng của mọi lịch trả nợ đã sinh.
- Đưa toàn bộ vào CI/CD chạy trên mỗi pull request, kèm giám sát tỉ lệ phê duyệt và thời gian xử lý trung bình.
- Tích hợp AI Agent để soạn ca kiểm thử biên và điều tra log lỗi phê duyệt — có ranh giới rõ giữa việc AI được làm và việc con người phải giữ.
2. Kiến trúc & luồng nghiệp vụ
Trước khi thiết kế ca kiểm thử, QA phải nắm được luồng khởi tạo khoản vay đi qua những thành phần nào và đâu là ranh giới đồng bộ/bất đồng bộ, vì chính ranh giới này quyết định cách chờ kết quả và cách mock trong test.
Phần đồng bộ diễn ra ngay khi khách hàng gửi hồ sơ: Loan Origination Service kiểm tra hồ sơ đủ điều kiện (đủ tuổi, chưa có nợ xấu nhóm 3 trở lên), sau đó gọi Credit Scoring Engine nội bộ kết hợp dữ liệu từ CIC Bureau — một hệ thống bên thứ ba nằm ngoài tầm kiểm soát của ngân hàng. Việc gọi CIC có thể mất từ 2 đến 15 giây tuỳ tải hệ thống của họ, và đôi khi timeout hoàn toàn, nên đây là điểm đầu tiên cần mock ổn định trong môi trường test.
Phần bất đồng bộ và phức tạp nhất là workflow phê duyệt nhiều cấp: hồ sơ dưới 100 triệu chỉ cần chuyên viên tín dụng duyệt, từ 100-500 triệu cần thêm trưởng phòng rủi ro, trên 500 triệu cần thêm giám đốc rủi ro khu vực. Mỗi cấp có thể APPROVE, REJECT, hoặc REQUEST_MORE_INFO (yêu cầu bổ sung giấy tờ, đưa hồ sơ về trạng thái chờ khách hàng). Toàn bộ workflow này có thể kéo dài từ vài phút đến vài ngày làm việc, và một hồ sơ bị REJECT ở cấp cao hơn phải huỷ mọi tác vụ chờ ở các cấp thấp hơn — đây là nguồn bug phổ biến nếu không xử lý race condition đúng.
3. Mô hình dữ liệu & bất biến nghiệp vụ
Mô hình dữ liệu cốt lõi gồm 3 thực thể chính: LoanApplication (hồ sơ vay, gắn với trạng thái state machine), ApprovalDecision (mỗi bản ghi ứng với 1 quyết định ở 1 cấp phê duyệt, có approverId, level, decision, timestamp), và RepaymentSchedule (danh sách các kỳ trả nợ với gốc, lãi, tổng trả, dư nợ còn lại). Hiểu đúng mô hình này là điều kiện tiên quyết để định nghĩa oracle — kết quả kỳ vọng chính xác — thay vì chỉ kiểm tra thông báo hiển thị trên màn hình.
Bốn bất biến phải đúng ở MỌI thời điểm
- Bảo toàn gốc: tổng số tiền đã giải ngân cho một khoản vay LUÔN bằng đúng số gốc ghi trong hợp đồng đã ký — không thừa, không thiếu.
- Cân bằng lịch trả: SUM(gốc từng kỳ trong lịch trả nợ) = gốc hợp đồng, và dư nợ ở kỳ cuối cùng phải bằng đúng 0.
- Idempotency giải ngân: cùng một loanId và cùng một idempotency-key dù gọi lệnh giải ngân bao nhiêu lần cũng chỉ tạo ĐÚNG MỘT giao dịch chuyển tiền.
- Trạng thái khoản vay hợp lệ duy nhất: mỗi khoản vay tại mọi thời điểm chỉ ở đúng một trạng thái trong tập hợp lệ, không tồn tại trạng thái mâu thuẫn (ví dụ vừa REJECTED vừa DISBURSED).
💬 Bình luận (0)
Chưa có bình luận nào. Hãy là người đầu tiên!