BANKCOMM (Bank of Communications)
About This Page
What: BANKCOMM channel-side interface specification + moomoo-side adaptation logic Audience: PMs understanding integration details / developers locating code / operations understanding bank characteristics Prerequisites: Bank Capability MatrixReading time: 4 minutes Owner: Deposit & Withdrawal Product Team
Key takeaway: BANKCOMM is a standard deposit channel using API statement collection mode.
Capability Overview
| Capability | Supported | Protocol/Channel | Core Service |
|---|---|---|---|
| Deposit Statement Collection | ✅ | API scheduled push | BankFlow standard message |
| Deposit Matching | ✅ | Sub-account + BOCO cross-border standard | BankcommMatch.php |
| Auto-deposit | ❌ | — | — |
| Withdrawal | ❌ | — | — |
| eDDA/eDDI | ❌ | — | — |
| BST | ❌ | — | — |
BANKCOMM is a deposit-only channel — it collects statements via API, uses sub-account + BOCO cross-border standard for match recommendations, but does not support auto-deposit or withdrawal. All match results require operations manual confirmation before crediting.
Core Parameters Quick Reference
| Parameter | Value | Description |
|---|---|---|
| IMPORT_BANK_ID | 21 | System bank identifier (BANKCOMM) |
| TransType | 203 | Deposit transaction type |
| Matching Engine | BankcommMatch | Sub-account + BOCO cross-border standard |
| Auto-deposit | ❌ Not supported | Assisted match recommendation only |
| Withdrawal | ❌ Not supported | — |
Deposit: API Statement Collection
Collection Method
BANKCOMM provides statement data via scheduled API push. Unlike BOCHK's B2E active pull, BANKCOMM proactively pushes new statements to moomoo on a schedule. The system receives and converts them to standard BankFlow message format.
Data Flow
Statement Field Mapping
| Channel-Side Field | moomoo-Side Field | Description |
|---|---|---|
| Statement account | sub_account_no | Sub-account number, used for matching |
| Transaction amount | amount | Deposit amount |
| Transaction currency | currency | HKD/USD |
| Transaction date | tx_date | Transaction occurrence date |
| Transaction sequence | tx_seq | Unique identifier, used for deduplication |
| Payer info | payer_info | Remitter name and account |
Deduplication Mechanism
The system deduplicates based on the sub_account_no + tx_seq + currency + tx_date composite unique key, preventing duplicate statement entries from repeated API pushes.
Matching Rules: BankcommMatch
What is the BOCO Cross-Border Standard
BOCO stands for Bank of China Overseas cross-border standard. Although the name originates from the BOC system, this standard has been reused for all cross-border deposit matching scenarios, including BANKCOMM.
Core characteristics of the BOCO standard:
- Wider date window: Cross-border remittance transit time is unpredictable, requiring larger date tolerance
- Larger amount tolerance: Intermediary banks may deduct fees, causing actual received amount to differ from remitted amount
- Adapts to cross-border uncertainty: Overall design goal is to reduce matching failures caused by cross-border remittance delays and fees
Matching Dimensions
BankcommMatch uses three-dimensional matching: sub-account verification + amount tolerance + date window.
1. Sub-Account Verification
| Dimension | Rule | Description |
|---|---|---|
| Sub-account | Statement account must be in user's historical sub-account list | Queried via SubAccountSDK |
BANKCOMM deposit statements are linked to users via sub-account numbers. The system maintains a historical sub-account list for each user. During matching, it first verifies whether the account in the statement belongs to a user's sub-account. Only statements that pass sub-account verification proceed to amount and date matching.
SubAccountSDK Call Logic
SubAccountSDK::getSubAccountList($user_id)
→ Returns list of all BANKCOMM sub-accounts bound to user
→ Checks bank_flow.sub_account_no IN list2. Amount Tolerance (BOCO Cross-Border Standard)
| Currency | Tolerance Range | Description |
|---|---|---|
| HKD | CRM - 300 ≤ Statement ≤ CRM | Allows intermediary bank fees up to 300 HKD |
| USD | CRM - 45 ≤ Statement ≤ CRM | Allows intermediary bank fees up to 45 USD |
CRM refers to the user-submitted deposit application amount (CRM = Customer Request Money).
Why is the tolerance so large? BANKCOMM deposit scenarios are primarily cross-border remittances. Cross-border transfers pass through one or more intermediary banks, each potentially charging fees. These fees are unknown at remittance time, requiring larger amount tolerance to cover this uncertainty:
- HKD 300 tolerance covers scenarios of 1-2 intermediary banks each charging 100-150 HKD
- USD 45 tolerance roughly corresponds to HKD 300 at exchange rate
Comparison with Local Transfer Tolerance
Local banks (e.g., BOCHK FPS) typically have HKD tolerance of only -20, since local transfers have no intermediary bank fees. BANKCOMM's -300 is a typical value among cross-border banks.
3. Date Window (BOCO Window)
| Dimension | Range | Description |
|---|---|---|
| Date Window | Application date -7 ~ +4 days | The widest date window among all banks |
Why -7 ~ +4 days?
This is the widest date window among all banks, for three reasons:
- Long cross-border transit time: Funds from mainland BANKCOMM to Hong Kong may take 2-5 business days, potentially longer during holidays
- Users submit applications early: Some users submit deposit applications before remitting, so the system needs to look back 7 days
- Bank processing delays: Bank-side may delay crediting due to compliance reviews, so the system needs to look forward 4 days
Comparison with Other Banks' Date Windows
| Bank | Date Window | Scenario |
|---|---|---|
| BANKCOMM | -7 ~ +4 days | Cross-border remittance (widest) |
| BOCHK | +/-15 days | Local + cross-border (largest absolute value, but symmetric) |
| SCB | -3 ~ +2 days | Local transfer (standard window) |
Matching Flow
Why Auto-Deposit is Not Supported
BANKCOMM doesn't support auto-deposit because:
- High cross-border complexity: Intermediary bank fee amounts are uncertain, match confidence is lower than local transfers
- Limited sub-account information: Sub-account number and amount alone cannot achieve 100% certainty matching like BST
- Risk control requirements: Cross-border deposits involve anti-money laundering compliance, requiring operations manual confirmation of remittance source
Therefore, BankcommMatch results are only presented as recommendations to operations, who manually confirm before crediting.
Bilateral Feature Matrix
| Function | Channel-Side (BANKCOMM) | moomoo-Side | Field Mapping | Description |
|---|---|---|---|---|
| Statement Collection | API scheduled push | BankFlow standard message | Direct mapping | BANKCOMM pushes, moomoo receives |
| Sub-account Management | Provides sub-account info | SubAccountSDK | sub_account_no | Matching prerequisite |
| Matching | — | BankcommMatch.php | Sub-account + BOCO standard | Three-dimensional matching |
| Auto-deposit | — | ❌ Not supported | — | Manual confirmation only |
| Withdrawal | — | ❌ Not supported | — | — |
| Reconciliation | Provides reconciliation files | Manual reconciliation | — | No automated reconciliation |
Exception Scenarios
Common Exceptions
| Exception Scenario | Manifestation | Handling |
|---|---|---|
| API push delay | Statements arrive late, users complain about slow deposits | Wait for next push; contact BANKCOMM in urgent cases |
| Sub-account not in list | Statement cannot match to any user | Check if user has bound that sub-account; manually add if necessary |
| Amount difference exceeds tolerance | Intermediary bank fees abnormally high | Operations manually verify then credit |
| Duplicate statements | Same statement pushed multiple times | System auto-deduplicates, no action needed |
| Date exceeds window | Remittance in transit exceeds 7 days | Operations manual match; expand window query if necessary |
Exception Escalation Path
Discover exception → Operations self-check (sub-account/amount/date)
→ Developer involvement (BankcommMatch logs)
→ Bank investigation (contact BANKCOMM liaison)Operations Guide
Daily Operations
| Operation | Frequency | Description |
|---|---|---|
| Review match recommendation list | Daily | Confirm or reject BankcommMatch recommendations |
| Check unmatched statements | Daily | Investigate if users report deposits not arrived |
| Sub-account maintenance | As needed | Update when users add or change sub-accounts |
Deposit Review Key Points
When operations confirm BANKCOMM deposit matches, pay attention to:
- Verify sub-account ownership: Confirm the sub-account number in the statement actually belongs to that user
- Verify amount reasonableness: Whether fee deduction is within normal range (HKD typically 50-200)
- Verify remitter information: Whether remitter name matches the user themselves (AML requirement)
- Watch for large deposits: Deposits exceeding certain thresholds require additional review
Scheduled Tasks
| Task | Frequency | Description |
|---|---|---|
| Statement Collection | API push triggered | Receive BANKCOMM-pushed statement data |
| match:bankcomm | Scheduled execution | Execute BankcommMatch matching |
| Sub-account Sync | Daily | Sync user's latest sub-account information |
Change Guide
| Change Requirement | Modification Location | Description |
|---|---|---|
| Modify amount tolerance | BankcommMatch.php → BOCO tolerance parameters | Adjust HKD/USD tolerance thresholds |
| Modify date window | BankcommMatch.php → daySimilarBoco() | Adjust -7~+4 day range |
| Enable auto-deposit | BankcommMatch.php → add depositInstance return | Requires risk control impact assessment |
| Modify sub-account logic | BankcommMatch.php → SubAccountSDK | Adjust sub-account query and verification logic |
| Add supported currency | BankcommMatch.php → BOCO tolerance table | Add new currency tolerance configuration |
| Adjust matching frequency | deposit/doc/crontab.sh → match:bankcomm | Adjust cron interval |
| Modify push receiving logic | Statement receiving service → BankFlow conversion logic | Adapt to BANKCOMM API changes |
Enabling Auto-Deposit Requires Caution
If business requires enabling auto-deposit:
- Assess cross-border matching false positive risk
- May need to add name matching dimension
- Requires consultation with risk control team
- Recommend grayscale validation on small traffic first
Comparison with Other Cross-Border Banks
| Dimension | BANKCOMM | CGB | BOCHK Cross-border |
|---|---|---|---|
| Deposit Method | API push | FPS statement collection | B2E API pull |
| Matching Standard | BOCO cross-border | Local standard | Local + cross-border dual standard |
| HKD Amount Tolerance | -300 | -20 | -420 (cross-border) / -20 (local) |
| Date Window | -7 ~ +4 days | -3 ~ +2 days | +/-15 days |
| Auto-deposit | ❌ | ✅ | ✅ |
| Withdrawal | ❌ | ❌ | ✅ (FTS/FPS) |
Code Location Quick Reference
| Module | Path | Description |
|---|---|---|
| Matching Engine | deposit/src/app/Business/Match/BankcommMatch.php | Core matching logic |
| BOCO Tolerance | BankcommMatch.php → BOCO tolerance parameters | Amount tolerance configuration |
| BOCO Date | BankcommMatch.php → daySimilarBoco() | Date window logic |
| Sub-account Query | SubAccountSDK | User sub-account list query |
| Scheduled Tasks | deposit/doc/crontab.sh | match:bankcomm scheduling |
Monitoring & Alerts
| Alert Item | Trigger Condition | Severity | Handling Steps |
|---|---|---|---|
| API connection timeout | BANKCOMM API unresponsive | Medium | Check network, confirm BANKCOMM-side service status |
| BOCO date offset | Statement date inconsistent with BANKCOMM system date | Medium | Confirm BOCO date conversion rules, check timezone |
| Duplicate statement collection | Same statement collected multiple times | Medium | Check deduplication logic, confirm statement unique identifier |
API Interface Field Details
Statement Query Request
| Field | Type | Required | Description |
|---|---|---|---|
acct_no | string | ✅ | BANKCOMM account number |
start_date | string | ✅ | Query start date. BOCO format |
end_date | string | ✅ | Query end date. BOCO format |
currency | string | ❌ | Currency filter |
Statement Response Fields
| Field | Type | Description |
|---|---|---|
txn_date | string | Transaction date (BOCO format, needs conversion) |
txn_amount | decimal | Transaction amount |
balance | decimal | Balance after transaction |
txn_type | string | Transaction type code |
counterparty | string | Counterparty information |
narrative | string | Transaction summary |
Comparison with CCB/DBS BOCO
BANKCOMM, CCB, and DBS all use similar API statement collection models but differ in implementation details:
| Dimension | BANKCOMM | CCB | DBS |
|---|---|---|---|
| Interface Protocol | REST API (JSON) | REST API (JSON) | SubAccountSDK |
| Date Format | BOCO standard | BOCO standard | ISO 8601 |
| Name Matching | Not required | Exact match | Not required |
| Amount Tolerance (HKD) | -300 | -20 | -350 (auto) |
| Date Window | -7~+4 days | -3~+4 days | -3~+2 days |
| Sub-account | ✅ Supported | ❌ Not supported | ✅ Supported |
| Multi-currency | HKD / USD / CNH | HKD / USD | HKD / USD |
| Withdrawal Capability | ❌ Deposit only | ❌ Deposit only | ❌ Deposit only |
Common Characteristics of These Three Banks
All three banks currently only have deposit statement collection integrated, without withdrawal support. Users needing to withdraw must use other bank channels (such as BST, corporate online banking, FPS, etc.).
After Reading
| I want to... | Go to |
|---|---|
| See BANKCOMM's position among all banks | Bank Capability Matrix |
| Understand the full matching engine logic | Matching & Auto-Deposit |
| Understand BOCO standard applied at other banks | BOCHK |
| Look up TransType and Bank ID reference | Deposit Reference |
| See other deposit-only banks | CCB, ICBC |