Chuyển tới nội dung chính

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ườngMô tả
MsgIdMessage Identifier - unique cho mỗi request
CreDtTmCreated Date Time - timestamp của request
ReqdMsgNmIdRequested Message Name - yêu cầu response type
BBANBasic Bank Account Number
AVLBAvailable 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

  • MsgId phả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)