CYBERSOFT
Đăng nhập

Thực chiến ngân hàng: khởi tạo khoản vay, thẩm định tín dụng & giải ngân end-to-end

Thực chiến doanh nghiệpNgân hàngAPIPlaywrightCI/CDThực tế
🗓 1 tháng trước22 phút đọc·👁 675 lượt xem👤 435 người đọc

Bài toán thực chiến ngân hàng: khởi tạo khoản vay, chấm điểm tín dụng CIC, phê duyệt nhiều cấp, giải ngân và lịch trả nợ — kiểm thử theo bất biến tài chính (bảo toàn gốc, idempotency, cân bằng lịch trả).

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ữ.
Bài này thuộc LOẠI 'Thực chiến doanh nghiệp' (thucchien) — giải một bài toán THẬT end-to-end trên domain ngân hàng, đối chiếu độ sâu với bài mẫu flagship trong hệ thống.

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.

Kiến trúc luồng khởi tạo & giải ngân khoản vay · Loan origination & disbursement architecture Web/App KHnộp hồ sơ vay Loan Origination Svcworkflow · state machine Credit Scoring Engine CIC Bureau (bên thứ ba) Approval Workflowphê duyệt nhiều cấp Core Bankinggiải ngân · lịch trả Đồng bộ: nộp hồ sơ → kiểm tra hồ sơ đủ điều kiện → gọi CIC lấy điểm tín dụng. Bất đồng bộ: phê duyệt nhiều cấp (chuyên viên → trưởng phòng → giám đốc rủi ro), có thể mất 1-3 ngày làm việc. Sync: submission → eligibility check → CIC credit bureau call. Async: multi-level approval (officer → manager → risk director), can take 1-3 business days. Điểm khó kiểm thử · Hard-to-test • CIC là bên thứ ba — cần mock ổn định• Phê duyệt nhiều cấp, có thể bị từ chối giữa chừng• Giải ngân phải khớp đúng số tiền hợp đồng• Lịch trả nợ phải cân bằng toán học Chiến lược · Strategy • Seed hồ sơ + mock CIC qua API test-only• Test từng cấp phê duyệt độc lập + luồng nối tiếp• Assert tổng giải ngân = gốc hợp đồng• Test idempotency lệnh giải ngân trùng
Kiến trúc luồng khởi tạo & giải ngân khoản vay, phân tách phần đồng bộ và phê duyệt bất đồng bộ.

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.

💡 Vẽ máy trạng thái (state machine) của khoản vay TRƯỚC khi viết test: DRAFT → SCORING → PENDING_APPROVAL → APPROVED/REJECTED → DISBURSED → CLOSED. Mỗi cạnh chuyển tiếp là một ca cần phủ, và mọi trạng thái phải có đường thoát — không được có trạng thái 'kẹt' vô thời hạn.

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.

Lịch trả nợ (amortization) — khoản vay 240.000.000đ, 12 tháng, lãi suất 12%/năm KỳGốc kỳLãi kỳTổng trảDư nợ còn lại 118.947.0002.400.00021.347.000221.053.000 219.136.0002.211.00021.347.000201.917.000 1220.912.000209.00021.121.0000 Bất biến: SUM(gốc kỳ) = gốc hợp đồng (240.000.000đ) · dư nợ kỳ cuối = 0 · mỗi kỳ: gốc + lãi = tổng trả. Nếu khách trả trước hạn (prepayment): lịch phải tính lại lãi trên dư nợ mới, không được thu thừa lãi của các kỳ chưa phát sinh. Test tài chính phải assert TOÀN BỘ lịch trả bằng công thức amortization, không chỉ kiểm tra số tiền kỳ đầu.
Lịch trả nợ (amortization) cho khoản vay 240 triệu đồng, kỳ hạn 12 tháng, lãi suất 12%/năm.

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).
🔒

Nội dung bị khoá

Bạn đang xem bản xem trước. Đăng nhập để mở khoá toàn bộ bài viết và tất cả tài liệu Tester/QA.

Đã xem 25% nội dung
  • Đọc trọn vẹn mọi bài viết
  • Lưu bài & ghi chú cá nhân
  • Theo dõi tiến độ đã đọc
  • Luyện phỏng vấn, ISTQB, Mock
Đăng nhập để đọc tiếp

Chưa có mã? Lấy mã qua Fanpage / Zalo CyberSoft.

0

💬 Bình luận (0)

Bạn có thể đọc mọi bình luận. Đăng nhập để bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!