Tổng quan ba module lõi
Hầu hết các hệ thống Core Banking đều được tổ chức xoay quanh ba domain nghiệp vụ này. Hiểu rõ chúng giúp bạn đọc đặc tả yêu cầu của khách hàng (ngân hàng) và chuyển thành thiết kế hệ thống chính xác.
Module 1: CIF — Customer Information File
CIF là nền tảng định danh khách hàng của toàn hệ thống. Mỗi khách hàng — dù là cá nhân hay doanh nghiệp — đều có một mã CIF duy nhất. Mọi sản phẩm khác (tài khoản, khoản vay, thẻ) đều được liên kết với CIF này.
Tại sao CIF lại quan trọng?
Nếu không có CIF được thiết kế tốt, bạn sẽ gặp tình trạng “Customer 360” bị vỡ — ngân hàng không biết rằng người mở tài khoản tiết kiệm và người vay tiền là cùng một người, dẫn đến không thể xét duyệt tín dụng chính xác.
Thiết kế CIF cơ bản
CREATE TABLE customers (
cif_number VARCHAR(20) PRIMARY KEY, -- Mã CIF duy nhất
customer_type VARCHAR(10) NOT NULL, -- 'INDIVIDUAL' hoặc 'CORPORATE'
full_name VARCHAR(255) NOT NULL,
id_number VARCHAR(20) UNIQUE NOT NULL, -- CMND/CCCD/MST
id_type VARCHAR(20) NOT NULL, -- 'NATIONAL_ID', 'PASSPORT', 'TAX_CODE'
date_of_birth DATE,
nationality CHAR(3), -- ISO 3166 country code
kyc_status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
-- 'PENDING', 'VERIFIED', 'REJECTED', 'EXPIRED'
risk_rating VARCHAR(10), -- 'LOW', 'MEDIUM', 'HIGH'
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
eKYC & AML Integration
CIF không thể tồn tại một mình — nó phải tích hợp với:
- eKYC System: Xác minh danh tính điện tử (kết nối VNPT eKYC, VneID).
- AML (Anti-Money Laundering): Kiểm tra danh sách đen, phát hiện giao dịch đáng ngờ.
- CIC (Credit Information Center): Kiểm tra lịch sử tín dụng trước khi cho vay.
Module 2: CASA — Current Account & Savings Account
CASA là nơi lưu trữ tiền của khách hàng. Đây là module tạo ra nguồn vốn giá rẻ nhất cho ngân hàng vì lãi suất thanh toán rất thấp.
Phân loại tài khoản
| Loại | Đặc điểm | Lãi suất điển hình |
|---|---|---|
| Current Account (Tài khoản thanh toán) | Rút/nạp tự do, không kỳ hạn | 0.1% - 0.5%/năm |
| Savings Account - Demand (Tiết kiệm không kỳ hạn) | Rút tự do, tính lãi hàng ngày | 0.5% - 1%/năm |
| Savings Account - Term (Tiết kiệm có kỳ hạn) | Khóa theo kỳ hạn (1,3,6,12,24 tháng) | 5% - 8%/năm |
Thiết kế cơ sở dữ liệu cho CASA
CREATE TABLE accounts (
account_number VARCHAR(20) PRIMARY KEY,
cif_number VARCHAR(20) NOT NULL REFERENCES customers(cif_number),
account_type VARCHAR(30) NOT NULL,
-- 'CURRENT', 'SAVINGS_DEMAND', 'SAVINGS_TERM'
currency CHAR(3) NOT NULL DEFAULT 'VND',
status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
-- 'ACTIVE', 'DORMANT', 'BLOCKED', 'CLOSED'
current_balance BIGINT NOT NULL DEFAULT 0, -- Số dư hiện tại (đơn vị: đồng)
available_balance BIGINT NOT NULL DEFAULT 0, -- Số dư khả dụng (trừ hold)
interest_rate DECIMAL(6,4), -- Lãi suất (%/năm)
maturity_date DATE, -- Ngày đáo hạn (nếu có kỳ hạn)
opened_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
Business Rule quan trọng: Số dư khả dụng vs Số dư hiện tại
Đây là điểm nhiều developer hay nhầm:
current_balance = Tổng tiền thực tế trong tài khoản
available_balance = current_balance - hold_amount
Hold (phong toả) xảy ra khi:
- Khách hàng dùng thẻ để đặt phòng khách sạn (chưa thanh toán thực)
- Tài khoản đang bị phong toả theo lệnh thi hành án
- Đặt cọc cho giao dịch chưa hoàn tất
Khi khách hàng rút tiền, hệ thống chỉ được phép rút từ available_balance, không phải current_balance.
Tính lãi suất hàng ngày (Daily Interest Accrual)
Đây là một trong những quy trình batch quan trọng nhất chạy mỗi đêm (EOD - End of Day):
Lãi tích lũy hàng ngày = (Số dư cuối ngày × Lãi suất / 365)
Ví dụ:
- Số dư: 100.000.000 VNĐ
- Lãi suất: 5.5%/năm
- Lãi 1 ngày = 100.000.000 × 0.055 / 365 = 15.068 VNĐ/ngày
Module 3: Lending — Nghiệp vụ Tín Dụng
Lending (cho vay) là module tạo ra doanh thu chính của ngân hàng. Đây cũng là module phức tạp nhất.
Vòng đời một khoản vay
[Khởi tạo hồ sơ] → [Thẩm định] → [Phê duyệt] → [Giải ngân]
→ [Hoạt động (Thu nợ định kỳ)] → [Đóng khoản vay]
Các khái niệm bắt buộc phải hiểu
| Thuật ngữ | Ý nghĩa |
|---|---|
| Principal | Vốn gốc đang còn dư nợ |
| Outstanding Balance | Tổng dư nợ = Vốn gốc + Lãi phát sinh |
| EMI | Khoản thanh toán cố định hàng kỳ (vốn gốc + lãi) |
| Amortization Schedule | Bảng phân kỳ trả nợ (schedule) |
| NPA | Non-Performing Asset — khoản nợ xấu (quá hạn >90 ngày) |
| Provisioning | Trích lập dự phòng rủi ro tín dụng |
Công thức tính EMI (Equated Monthly Installment)
EMI = P × r × (1 + r)^n / ((1 + r)^n - 1)
Trong đó:
P = Số tiền vay ban đầu (Principal)
r = Lãi suất theo kỳ (ví dụ: 12%/năm → r = 1%/tháng = 0.01)
n = Số kỳ thanh toán (tháng)
Ví dụ: Vay 500.000.000 VNĐ, 12%/năm, 60 tháng
r = 0.01, n = 60
EMI = 500.000.000 × 0.01 × (1.01)^60 / ((1.01)^60 - 1)
≈ 11.122.222 VNĐ/tháng
Phân loại nợ (Debt Classification) — Quy định của NHNN Việt Nam
| Nhóm | Tình trạng | Yêu cầu trích lập dự phòng |
|---|---|---|
| Nhóm 1 | Nợ đủ tiêu chuẩn (< 10 ngày quá hạn) | 0% |
| Nhóm 2 | Nợ cần chú ý (10 - 90 ngày) | 5% |
| Nhóm 3 | Nợ dưới tiêu chuẩn (90 - 180 ngày) | 20% |
| Nhóm 4 | Nợ nghi ngờ (180 - 360 ngày) | 50% |
| Nhóm 5 | Nợ có khả năng mất vốn (> 360 ngày) | 100% |
Đây là quy định pháp lý — hệ thống Core Banking phải tự động phân loại và trích lập dự phòng theo các nhóm này trong quy trình EOD hàng ngày.
Tóm tắt mối quan hệ giữa ba module
Customer (CIF) ──── 1:N ──── Accounts (CASA)
Customer (CIF) ──── 1:N ──── Loans (Lending)
Accounts ──── 1:N ──── Ledger Entries
Loans ──── 1:N ──── Ledger Entries
Bây giờ bạn đã hiểu nghiệp vụ. Tiếp theo, chúng ta sẽ đi sâu vào kỹ thuật đảm bảo tính chính xác của dữ liệu trong môi trường cực kỳ nhiều giao dịch đồng thời. Đọc tiếp Phần 3 — Thiết kế Database cho Giao dịch Tài chính (ACID & Concurrency).