Nghiệp vụ 1: Truy vấn số dư tiền (không hold)
Truy vấn số dư tiền mà không thực hiện hold.
Loại Message
camt.060 - Account Reporting Request
camt.052 - Account Report (Response)
Mục đích
Công ty chứng khoán truy vấn số dư tiền của khách hàng tại Ngân hàng Lưu ký để xác định khả năng giao dịch, nhưng không thực hiện hold tiền.
REQUEST - Broker → UFG → Custody Bank
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.060.001.05">
<AcctRptgReq>
<GrpHdr>
<MsgId>BRK00-20250126-001</MsgId>
<CreDtTm>2025-01-26T10:30:00Z</CreDtTm>
</GrpHdr>
<RptgReq>
<ReqdMsgNmId>camt.052</ReqdMsgNmId>
<Acct>
<Id>
<Othr>
<Id>0821234567</Id> <!-- Số tài khoản khách hàng -->
<SchmeNm>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
</Acct>
<AcctOwnr>
<Nm>NGUYEN VAN A</Nm>
</AcctOwnr>
<ReqTp>
<Cd>AVLB</Cd> <!-- Available Balance -->
</ReqTp>
</RptgReq>
</AcctRptgReq>
</Document>
Giải thích các trường quan trọng
| Trường | Mô tả |
|---|---|
MsgId | Message Identifier - unique cho mỗi request |
CreDtTm | Created Date Time - timestamp của request |
ReqdMsgNmId | Requested Message Name - yêu cầu response type |
BBAN | Basic Bank Account Number |
AVLB | Available Balance - số dư khả dụng |
RESPONSE - Custody Bank → UFG → Broker
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.08">
<BkToCstmrAcctRpt>
<GrpHdr>
<MsgId>CUSTODY00-20250126-001</MsgId>
<CreDtTm>2025-01-26T10:30:01Z</CreDtTm>
</GrpHdr>
<Rpt>
<Id>RPT-001</Id>
<Acct>
<Id>
<Othr>
<Id>0821234567</Id>
</Othr>
</Id>
</Acct>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>XPCD</Cd> <!-- Expected Balance - không hiện số dư thực -->
</CdOrPrtry>
</Tp>
<Amt Ccy="VND">0</Amt> <!-- Luôn trả về 0 -->
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt>
<Dt>2025-01-26</Dt>
</Dt>
<Avlbty>
<Dt>
<ActlDt>2025-01-26</ActlDt>
</Dt>
<Amt Ccy="VND">0</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
</Avlbty>
</Bal>
<!-- Thông tin trạng thái -->
<AddtlRptInf>SUFFICIENT</AddtlRptInf> <!-- Hoặc INSUFFICIENT -->
</Rpt>
</BkToCstmrAcctRpt>
</Document>
Lưu ý quan trọng
Response LUÔN trả về <Amt>0</Amt> để bảo mật. Thông tin thực tế về khả năng thanh toán nằm trong <AddtlRptInf>:
- SUFFICIENT: Tài khoản có đủ số dư
- INSUFFICIENT: Tài khoản không đủ số dư
Use Cases
1. Kiểm tra trước khi đặt lệnh mua
Trước khi khách hàng đặt lệnh mua chứng khoán, công ty chứng khoán cần kiểm tra số dư tiền.
2. Xác thực khả năng thanh toán
Sau khi khớp lệnh, xác nhận khách hàng có đủ khả năng thanh toán.
Flow Diagram
Lưu ý kỹ thuật
Idempotency
MsgIdphải unique cho mỗi request- Format:
{MEMBER_ID}-{YYYYMMDD}-{SEQUENCE} - Custody Bank track MsgId để tránh duplicate processing
Timeout
- Request timeout: 30 giây
- Nếu không nhận được response, retry với MsgId mới
Error Handling
- Nếu tài khoản không tồn tại: Response với error code
NACT(No Account) - Nếu tài khoản bị khóa: Response với error code
CLOS(Closed)