KBIZ Internet Banking Doanh nghiệp
Nền tảng Ngân hàng Doanh nghiệp — KienlongBank

Tổng quan
KBIZ là nền tảng Internet Banking doanh nghiệp cho KienlongBank, triển khai theo kiến trúc microservices (12+ dịch vụ độc lập). Hệ thống hỗ trợ phê duyệt maker-checker cho các thao tác nhạy cảm, chuyển tiền đơn lẻ và chuyển tiền hàng loạt có tính phí, đồng thời quản lý tiền gửi có kỳ hạn tích hợp Core Banking (Flexcube), kèm cập nhật trạng thái thời gian thực qua WebSocket. Tôi phụ trách module Chuyển tiền (chuyển tiền nội bộ, liên ngân hàng qua NAPAS247/CITAD, và chuyển tiền hàng loạt) và module Tiền gửi/Tiền gửi có kỳ hạn (mở sổ, rút một phần và tất toán).
Vấn đề & Thách thức
Ngân hàng doanh nghiệp cần kiểm soát tiền chặt chẽ, chuỗi phê duyệt đa bên và khả năng phục hồi an toàn khi xảy ra lỗi một phần. Thách thức trọng tâm là xây dựng pipeline chuyển tiền hàng loạt: upload Excel/CSV có idempotency, tính phí/VAT và validation theo từng dòng, đặt lệnh hold số tiền trên CoreBank bất đồng bộ qua Cadence, giải phóng hold theo cơ chế đã phê duyệt kèm retry exponential-backoff, thực thi theo kiểu chunked trong Cadence với theo dõi tiến độ từng dòng, chỉ retry có chọn lọc các dòng "retryable", đặt secondary hold cho phần tiền còn lại khi hoàn thành một phần, và hạch toán phí GL theo cách non-blocking (lỗi hạch toán được xử lý retry nền)—tích hợp Flexcube và đảm bảo audit đầy đủ.
Giao diện
Quy trình thực hiện
Chuyển tiền Hàng loạt — Kiến trúc 6 Giai đoạn
Thiết kế và triển khai vòng đời chuyển tiền hàng loạt end-to-end: (1) upload Excel/CSV có idempotency + parse theo từng dòng, (2) tính phí/VAT theo từng dòng và validation theo batch (hạn mức/trạng thái tài khoản), (3) tạo batch header/details và lưu với `holdStatus=NOT_STARTED`, (4) trigger async primary-hold workflow qua Cadence sau khi commit, (5) submit batch vào quy trình maker-checker approval, (6) sau phê duyệt, giải phóng lệnh hold số tiền trên CoreBank với exponential-backoff retry, (7) thực thi qua Cadence master workflow (chunking) đồng thời theo dõi per-row thành công/thất bại, (8) khi lỗi một phần, đặt secondary hold cho phần tiền còn lại, (9) chỉ retry những dòng "retryable" bằng per-row retryCount, và (10) hạch toán phí GL theo kiểu non-blocking từ các dòng thành công (lỗi hạch toán được xử lý retry nền).
Tiền gửi Có kỳ hạn — Vòng đời Đầy đủ
Triển khai vòng đời tiền gửi có kỳ hạn tích hợp Flexcube: (1) Mở sổ: xem trước online saving rates (GetOnlineSavingRates action=44), tính toán kỳ hạn và lãi, OTP verification, submit vào quy trình maker-checker approval, sau đó start async DepositHold workflow qua Cadence; (2) Rút một phần: gọi CoreBank redemption preview (ReviewCloseOnlineSavingAccount action=48 + GetTdRedemInfo action=492), validate điều kiện rút/tính khả dụng, OTP verification theo chính sách, tạo `SavingsWithdrawalRequest (PENDING_APPROVAL)` và submit approval workflow; (3) Tất toán/đóng sổ: build closure preview (ReviewCloseOnlineSavingAccount action=48 + GetOnlineAccTDDetail action=204), tính net interest (finalAmount - balance; có thể bao gồm phạt tất toán trước hạn từ CoreBank), OTP verification theo chính sách, tạo `SavingsClosureRequest (PENDING_APPROVAL)` và submit approval. Việc thực thi CoreBank được chặn bởi approval/workflow.
Định tuyến Thông minh & Chuyển tiền Đa kênh
Phát triển `SmartRoutingService` cho chuyển tiền đơn lẻ: gợi ý NAPAS247 khi ngân hàng thụ hưởng hỗ trợ và số tiền < 500 triệu VND; ngược lại gợi ý CITAD. Riêng chuyển tiền hàng loạt, phương thức chuyển được chọn rõ ngay từ lúc upload (không có smart routing theo từng dòng).
Quy trình Phê duyệt Maker-Checker
Tích hợp các yêu cầu chuyển tiền và tiền gửi nhạy cảm vào hệ thống phê duyệt multi-level maker-checker do `ApprovalWorkflowService` điều phối, kết hợp các workflow Cadence cho hold/execute. `AssignmentEngine` tự động gán checker/approver theo cấu hình workflow và quy tắc theo hạn mức/số tiền, đồng thời enforce nguyên tắc maker-checker (tự duyệt bị ràng buộc). OTP/TOTP được áp dụng cho các thao tác nhạy cảm lúc submit và cả lúc approval thông qua `SensitiveOperationVerificationService` (bao gồm `SavingsApprovalService`). Trạng thái thời gian thực được đẩy lên UI qua WebSocket.