BOCHK (Bank of China Hong Kong)
About This Page
What: BOCHK's B2E deposit collection, FTS/FPS withdrawal remittance, matching rules, and scheduled tasks complete business rules, plus channel-side interface field details and moomoo-side adaptation mapping Audience: PMs needing in-depth understanding of BOCHK integration details Prerequisites: Bank Capability MatrixReading time: 12 minutes Owner: Deposit Product Manager
Key takeaway: BOCHK is the largest deposit source bank, collecting statements via B2E batch files — file pull frequency and parsing logic directly determine BOCHK users' deposit waiting time.
Capability Overview
| Capability | Supported | Protocol/Channel | Core Service |
|---|---|---|---|
| Deposit Statement Collection | ✅ | B2E (Bank-to-Enterprise) XML API | bochk_flow_go (Go) |
| Withdrawal Remittance | ✅ | FTS file channel (S14/S16) | bochk_fts_mgr (Python) |
| Withdrawal FPS | ✅ | FPS (via BOCHK FPS channel) | boc_fps method |
| Withdrawal Same-bank Transfer | ✅ | FTS same-bank | boc method |
| Withdrawal Cross-border Wire | ✅ | Wire transfer | tele_transfer method |
| eDDA/eDDI | ❌ | — | — |
| BST | ❌ | — | — |
BOCHK is the largest source bank for deposit statements — most Hong Kong users deposit via BOCHK transfers, with the system collecting statements via B2E API and matching them to deposit applications.
Channel Interface Overview
| Dimension | Description |
|---|---|
| Protocol Type | HTTP/HTTPS + XML (B2E Bank-Enterprise Direct) |
| Authentication | Digital certificate + UserId/Password + ECertName/ECertPwd triple authentication |
| Data Format | XML (UTF-8 encoding), requests/responses use BOCHKE2B as root node |
| Collection Mode | Active pull (3 daily scheduled + every 2 hours Flow Converter conversion) |
| Certificate Rotation | 900-day cycle, must renew 30 days in advance |
| Connection Timeout | 30 seconds |
| Rate Limiting | Bank-side rate limit returns RJ0002, does not trigger failover |
| Deduplication | acct_no + seq_no + currency + boc_date unique key, UPSERT operation |
Comparison with Other Banks
BOCHK is the only bank using XML protocol — HSBC/Hang Seng use SFTP files, SCB uses HTTPS JSON, CGB uses FPS notification push. B2E XML features fixed structure and clear fields, but debugging requires attention to XML namespaces and encoding issues.
Deposit: B2E Statement Collection
What is B2E
B2E (Bank-to-Enterprise) is BOCHK's standard API interface for enterprise customers. moomoo queries company receiving account transaction statements via the B2E interface, then matches them with user deposit applications.
Receiving Accounts
moomoo has 5 currency receiving accounts at BOCHK; each user transfer goes into the corresponding currency account:
| Currency | Account Number | Config Key |
|---|---|---|
| HKD | 01267600088450 | HKCUR |
| USD | 01267608014549 | USCUR |
| CNY | 01267606013676 | CNCUR |
| JPY | 01287521127472 | JPCUR |
| SGD | 01287526723084 | SGCUR |
Configuration Location
bochk_flow_go/conf/conf.toml → [conf.futu_account.account_numbers]
B2E Three Query Interfaces
The system collects statements through three B2E interfaces at different times to ensure no missed records:
| Interface | Schedule | What It Queries | Target Table |
|---|---|---|---|
| TodayActivity | Daily 06:00 | Current day real-time transactions | acct_trd_record |
| AcctStatement | Daily 07:00 | Previous day complete statement | acct_trd_record (is_addendum marked) |
| AcctActivity | Daily 08:00 | Detailed account activity (with balance) | boc_transaction_record |
Additionally, a Flow Converter runs every 2 hours, converting raw records to the unified boc_bank_flow format for the matching engine.
Data Flow
B2E Protocol Key Points
- Transport: HTTP POST, XML request/response body
- Authentication: Token authentication (
Ecert Name: FUTU1), Token 900-day rotation cycle - Timeout: 30 seconds
- Deduplication: Based on
acct_no + seq_no + currency + boc_dateunique key, UPSERT operation - Error Handling:
E11071/GE11012: No data (normal, not failure)RJ0002: Request rate limit (does not trigger failover)- Other errors: Log and retry next time
Channel-Side Interface Details
Below are the complete request/response field definitions for the three B2E interfaces. All interfaces share the same authentication header (Head); differences are in request body and response fields.
Common Request Header (BOCHKE2B > Head)
Each B2E request has XML root node BOCHKE2B, with the Head section carrying authentication and routing information:
| Field | Type | Required | Description |
|---|---|---|---|
| PackageId | string(17) | ✅ | Package ID, auto-generated 17-digit number, unique per request. e.g. "12345678901234567" |
| CBSAcctNo | string | ✅ | CBS account number (enterprise master account). e.g. "01227468128899" |
| UserId | string | ✅ | User ID. e.g. "FUTU1" |
| Password | string | ✅ | Password (encrypted in transit) |
| ECertName | string | ✅ | Digital certificate name. e.g. "FUTU1" |
| ECertPwd | string | ✅ | Digital certificate password (encrypted in transit) |
Authentication Security
Password and ECertPwd are encrypted before transmission; certificate files are stored in protected server directories. Do not log plaintext values of these two fields.
Common Response Header
All B2E interface responses contain these header fields for determining request success:
| Field | Type | Description | Example |
|---|---|---|---|
| TxStatus | string | Transaction status, "S" = Success, "F" = Failure | "S" |
| ErrorCode | string | Error code (empty on success) | "E11071" |
| ErrorDesc | string | Error description (empty on success) | "No Record Found" |
| TxRefNo | string | Bank transaction reference number | "BOCHK20260429001" |
| TxDate | string | Transaction date (YYYYMMDD) | "20260429" |
| TxTime | string | Transaction time (HHMMSS) | "100530" |
Interface 1: TodayActivity (Same-day Transaction Query)
Schedule: ~06:00 (first daily pull of current day real-time transactions)
Purpose: Query all transactions occurring today for a specified account. This is the earliest interface to get current day statements, used to match deposit applications as quickly as possible.
Request Parameters (TodayActivityREQ)
| Field | Type | Required | Description |
|---|---|---|---|
| AcctNo | string | ✅ | Bank account number (i.e., receiving account number). e.g. "01267600088450" |
Request XML Example
<BOCHKE2B>
<Head>
<PackageId>12345678901234567</PackageId>
<CBSAcctNo>01227468128899</CBSAcctNo>
<UserId>FUTU1</UserId>
<Password>***</Password>
<ECertName>FUTU1</ECertName>
<ECertPwd>***</ECertPwd>
</Head>
<TodayActivityREQ>
<AcctNo>01267600088450</AcctNo>
</TodayActivityREQ>
</BOCHKE2B>Response Fields (Per Transaction Record)
| Field | Type | Description | Example |
|---|---|---|---|
| SeqNo | string | Same-day transaction sequence, 6 digits left-padded. Format NN (numeric sequence) | "000001" |
| Cur | string | Currency code. Format 3-char ISO 4217 | "HKD" / "USD" |
| Time | string | Transaction time (24-hour). Format HH:mm:ss | "10:05:30" |
| TxRefNo | string | Transaction reference number (globally unique). Format 16 characters | "1234567890123456" |
| Amount | string | Transaction amount (2 decimal places). Format decimal(16,2) | "100000.00" |
| Particulars | string | Transaction description/summary, used to identify transaction type. ≤200 characters | "E-BANKING TRANSFER" |
| TxDetail | string | Transaction type identifier. ≤50 characters | "Transfer" |
| PayerOrPayeeName | string | Payer/payee name. ≤140 characters | "CHAN TAI MAN" |
| PayerOrPayeeAcctNo | string | Payer/payee account number. ≤34 characters | "01287500123456" |
Field Notes
- SeqNo: Increments within a day but resets across days. Deduplication must combine with date.
- TxRefNo: 16-character globally unique transaction reference, the core field for matching and deduplication.
- Particulars: The most critical business field — the system identifies FPS, online banking, CHATS and other transaction types by its prefix.
- PayerOrPayeeName: Used for name matching; for deposits, this is the payer's name. Note case may be inconsistent.
Interface 2: AcctStatement (Account Statement Query)
Schedule: ~07:00 (queries previous business day's complete statement)
Purpose: Supplements TodayActivity by pulling the previous day's complete statement. Written to database with is_addendum marker, deduplicated and merged with current day real-time data.
Request Parameters (AcctStatementREQ)
| Field | Type | Required | Description |
|---|---|---|---|
| AcctNo | string | ✅ | Bank account number. e.g. "01267600088450" |
| Cur | string | ✅ | Currency (HKD/USD/CNY/JPY/SGD). e.g. "HKD" |
| Date | string | ✅ | Query date (YYYYMMDD), usually previous business day. e.g. "20260428" |
Response Fields: Same structure as TodayActivity (SeqNo, Cur, Time, TxRefNo, Amount, Particulars, TxDetail, PayerOrPayeeName, PayerOrPayeeAcctNo).
Note
AcctStatement requires separate requests for each currency. The system iterates through the 5 receiving accounts' currencies, requesting HKD, USD, CNY, JPY, SGD statements separately. If a currency has no transactions, the interface returns E11071, which is normal.
Interface 3: AcctActivity (Account Activity Detail Query)
Schedule: ~08:00 (supports date range query, obtains most detailed account activity)
Purpose: This is the most field-rich interface, including balance information, GPI tracking, etc. beyond transaction details. Written to boc_transaction_record table, providing detailed data for reconciliation and audit.
Request Parameters (AcctActivityREQ)
| Field | Type | Required | Description |
|---|---|---|---|
| AcctNo | string | ✅ | Bank account number. e.g. "01267600088450" |
| BicCode | string | ❌ | BIC code (filter specific bank). e.g. "BKCHHKHH" |
| Region | string | ❌ | Region code |
| StartDate | string | ✅ | Start date (YYYYMMDD). e.g. "20260428" |
| EndDate | string | ✅ | End date (YYYYMMDD). e.g. "20260429" |
| TransFlag | string | ❌ | Transaction direction filter: C = Credit (incoming), D = Debit (outgoing). e.g. "C" |
| TransCur | string | ❌ | Filter specific currency. e.g. "HKD" |
| MinAmt | string | ❌ | Minimum amount filter. e.g. "1000.00" |
| MaxAmt | string | ❌ | Maximum amount filter. e.g. "999999.99" |
Optional Parameter Usage
- TransFlag: During deposit collection, usually set to
"C"(credit/incoming only), reducing irrelevant data. For reconciliation, omit this parameter to get all records. - MinAmt / MaxAmt: Used for large transaction monitoring scenarios; not used in routine collection.
- BicCode: Used to filter transactions from specific source banks; not used in routine collection.
Response Fields (Per Transaction Record)
| Field | Type | Description | Example |
|---|---|---|---|
| TransType | string | Transaction type identifier | "Transfer" |
| TransRef | string | Unique transaction reference. Format 16 characters | "1234567890123456" |
| Particular | string | Transaction description/summary. ≤200 characters | "FPS Transfer" |
| Cur | string | Currency. Format 3 characters | "HKD" |
| Amt | string | Transaction amount. Format decimal(16,2) | "50000.00" |
| TransFlag | string | C = Credit (incoming), D = Debit (outgoing). Format 1 character | "C" |
| PayerOrPayeeName | string | Payer/payee name. ≤140 characters | "CHAN TAI MAN" |
| PayerOrPayeeAcctNo | string | Payer/payee account number. ≤34 characters | "01287500123456" |
| TransDate | string | Transaction date time (with timezone). Format YYYY/MM/DD HH:mm GMT+08:00 | "2026/04/29 10:05 GMT+08:00" |
| ValueDate | string | Value date. Format YYYY/MM/DD | "2026/04/29" |
| AcctNo | string | Own account number | "01267600088450" |
| LedBal | string | Ledger balance (after transaction). Format decimal(16,2) | "5000000.00" |
| AvalBal | string | Available balance (after transaction). Format decimal(16,2) | "4800000.00" |
| GPIFlag | string | SWIFT GPI indicator (has value for cross-border remittance) | "Y" |
| GPIId | string | SWIFT GPI tracking ID | "d2fca123-..." |
| ChequeNo | string | Cheque number (has value for cheque transactions) | "CHQ001234" |
AcctActivity Unique Fields
Compared to TodayActivity and AcctStatement, AcctActivity has these additional key fields:
- LedBal / AvalBal: Balance information, used for reconciliation and balance monitoring
- GPIFlag / GPIId: SWIFT GPI tracking, for full-flow tracking of cross-border remittances
- ChequeNo: Cheque number, needed for cheque deposit scenarios
- ValueDate: Value date, may differ from transaction date (common in cross-border remittances)
- TransFlag: Explicitly marks debit/credit direction; TodayActivity needs to determine this from amount sign
B2E Error Code Quick Reference
| Error Code | Meaning | Handling Strategy |
|---|---|---|
E11071 | No data (No Record Found) | Normal, don't retry — no transactions in that period |
GE11012 | Alternate no-data marker | Equivalent to E11071, don't retry |
RJ0002 | Request rate limit | Wait then retry, do not trigger failover |
E99999 | Generic system error | Exponential backoff retry (30s → 60s → 120s) |
E10001 | Authentication failure | Check if certificate/password expired |
E10002 | Account unauthorized | Contact bank to confirm B2E permissions |
About RJ0002
RJ0002 is the bank-side rate limiting response; it should not trigger failover to a backup channel. The correct approach is to wait 30 seconds then retry. If RJ0002 occurs continuously, check whether multiple instances are pulling simultaneously.
B2E XML Field Mapping
| XML Field | Database Field | Description |
|---|---|---|
| SeqNo | seq_no | Transaction sequence |
| Currency | currency | Currency |
| Amount | amount | Amount |
| BOCDate | boc_date | Transaction date (YYYYMMDD) |
| BOCTime | boc_time | Transaction time |
| TxRefNo | tx_ref_no | Transaction reference |
| Particulars | particulars | Transaction summary (used to identify transaction type) |
| PayerOrPayeeName | payer_or_payee_name | Payer/payee name |
| PayerOrPayeeAcctNo | payer_or_payee_acct_no | Payer/payee account |
moomoo-Side Adaptation
B2E interface raw fields cannot be directly used by the matching engine — they must be standardized through Flow Converter and written to the boc_bank_flow table. Below is the complete field mapping and conversion logic.
Statement Standardization Mapping
| B2E Raw Field | BankFlow Standard Field | Conversion Logic | Description |
|---|---|---|---|
| TxRefNo | transaction_id | "BOC_" + YYYYMMDD + "_" + TxRefNo | Add prefix to prevent cross-bank ID conflicts |
| Amount | credit | Direct mapping decimal(16,2) | Deposit statements take credit amount |
| Cur | ccy | Direct mapping (HKD/USD/CNY/JPY/SGD) | ISO 4217 three-character code |
| Time | time | HH:mm:ss → HHMMSS (remove colons) | Unified to 6-digit number format |
| Particulars | remarks | Direct mapping | Preserve original description for transaction type identification |
| PayerOrPayeeName | en_name | Direct mapping | Payer English name |
| PayerOrPayeeAcctNo | customer_account | Direct mapping | Payer bank account |
| TxDetail | type | Transaction type identifier | Used for classification statistics |
| BOCDate | boc_date | YYYYMMDD → DATE | Transaction date |
| AcctNo | acct_no | Direct mapping | Payee account (moomoo's account) |
| SeqNo | seq_no | Direct mapping | Transaction sequence |
transaction_id Generation Rule
transaction_id = "BOC_" + boc_date + "_" + tx_ref_no
Example: TxRefNo is 1234567890123456, date is 20260429, generates: BOC_20260429_1234567890123456
This ID is globally unique and is the core identifier for deduplication and matching.
Transaction Type Auto-Identification
The system automatically identifies transaction types through the statement's particulars (transaction summary) field. Different types have different matching rules and fee tolerances:
| Particulars Keyword | Identified As | Auto-deposit | Fee Characteristics |
|---|---|---|---|
FPS Transfer | FPS Faster Payment | ✅ | No fees, exact match. Most common deposit method |
E-BANKING TRANSFER | Online banking transfer | ✅ | No fees, exact match. BOCHK online banking arrival |
CHATS Transfer | CHATS local clearing | ✅ | May have fees, local tolerance. Instant payment settlement |
REMIT IN | Cross-border remittance | ✅ | Intermediary bank fees, cross-border tolerance. Overseas inward, largest tolerance |
CBS TRANSFER | CBS internal transfer | ❌ Match only | Special handling. BOCHK system internal transfer, requires manual review |
ATM Transfer | ATM transfer | ❌ | Cannot verify source, record only |
Cheque Clearing | Cheque deposit | ❌ | Cheque has dishonour risk, requires manual confirmation |
Interest | Interest income | ❌ | Not a deposit statement, auto-ignored |
Corresponding Code
deposit/src/app/Business/Match/BocMatch.php → NewMatchRule() method, routes to different rules based on remarks field regex matching.
Matching Rules Detail (BocMatch)
FPS Faster Payment Rules
| Dimension | Rule |
|---|---|
| Identification | particulars starts with "FPS" |
| Amount Match | Exact match (statement amount = CRM application amount) |
| Name Match | Exact match → auto-deposit; similar match → manual confirmation |
| Date Window | Application date ± 15 days |
| Auto-deposit | ✅ Auto-deposit when amount exact + name exact |
| Card Number Check | BOC card number must be 14 digits |
Online Banking Transfer Rules
| Dimension | Rule |
|---|---|
| Identification | particulars starts with "E-BANKING TRANSFER" |
| Amount Match | Exact match (no fee deduction) |
| Name Match | Exact match → auto-deposit; similar match → manual confirmation |
| Date Window | Application date ± 15 days |
| Auto-deposit | ✅ Auto-deposit when amount exact + name exact |
| Special Handling | Online banking transfers usually include complete payer information, high match success rate |
CHATS Local Clearing Rules
| Dimension | Rule |
|---|---|
| Identification | particulars starts with "CHATS" |
| HKD/CNH/JPY Amount Tolerance | CRM - 20 ≤ Statement ≤ CRM |
| USD/SGD Amount Tolerance | CRM - 3 ≤ Statement ≤ CRM |
| Name Match | Exact match → auto-deposit; similar match → manual confirmation |
| Date Window | Application date ± 15 days |
| Auto-deposit | ✅ Auto-deposit when within tolerance + name exact |
Cross-border Remittance Rules (REMIT IN)
| Dimension | Rule |
|---|---|
| Identification | particulars starts with "REMIT IN" |
| HKD/CNH/JPY Amount Tolerance | CRM - 420 ≤ Statement ≤ CRM |
| USD/SGD Amount Tolerance | CRM - 60 ≤ Statement ≤ CRM |
| Name Match | Exact match → auto-deposit; similar match → manual confirmation |
| Date Window | Application date ± 15 days |
| Auto-deposit | ✅ Auto-deposit when within tolerance + name exact |
| Note | Cross-border remittances passing through intermediary banks deduct 20-400 HKD in fees, hence tolerance is set to -420 |
CBS / ATM Rules
| Type | Identification | Auto-deposit | Reason |
|---|---|---|---|
| CBS Internal Transfer | particulars starts with "CBS TRANSFER" | ❌ Match only | May involve group internal fund transfers, need to distinguish customer deposits from operational transfers |
| ATM Transfer | particulars starts with "ATM" | ❌ | Lacks payer information, cannot reliably verify source |
Why is cross-border tolerance much larger? Cross-border remittances pass through intermediary banks that may deduct 20-400 HKD in fees; cross-border tolerance is set to -420, far larger than local's -20.
Why is the date window ±15 days? BOCHK is the largest deposit source; some users transfer then submit deposit applications much later (or vice versa); the 15-day window covers most delay scenarios.
Large Online Deposit Threshold
For online deposits triggered by bank card binding (bind_card, notice_type), there are also minimum amount limits:
- HKD/CNH/JPY: Statement amount ≥ 10,000
- USD/SGD: Statement amount ≥ 1,500
Deposit Timeout Configuration
Expected arrival times and timeout thresholds for different transfer methods, bank types, and currencies:
FPS Faster Payment
| Dimension | Time |
|---|---|
| Expected arrival | Instant (usually 1-5 minutes) |
| System timeout | 30 minutes |
| Timeout handling | Mark for manual verification |
| Applicable currencies | HKD, CNY |
Online Banking Transfer (BOCHK Same-bank)
| Dimension | Time |
|---|---|
| Expected arrival | Instant - 2 hours (depends on bank processing time) |
| System timeout | 4 hours |
| Timeout handling | Mark for manual verification |
| Applicable currencies | HKD, USD, CNY, JPY, SGD |
CHATS Local Clearing
| Dimension | Time |
|---|---|
| Expected arrival | Same day (processed during business day 09:00-17:30) |
| System timeout | T+1 business day |
| Timeout handling | Mark for manual verification |
| Applicable currencies | HKD |
| Note | CHATS submitted outside business hours processed next business day |
Cross-border Remittance (REMIT IN)
| Dimension | HKD/CNY | USD | JPY/SGD |
|---|---|---|---|
| Expected arrival | T+1 - T+2 | T+1 - T+3 | T+2 - T+5 |
| System timeout | T+3 business days | T+5 business days | T+7 business days |
| Timeout handling | Mark for manual verification | Mark for manual verification | Mark for manual verification |
| Note | Intermediary bank processing time uncertain | Involves SWIFT clearing | Minor currency clearing chains are longer |
Scheduled Tasks
| Task | Frequency | Description |
|---|---|---|
| B2E TodayActivity | Daily 06:00 | Pull current day statements |
| B2E AcctStatement | Daily 07:00 | Pull previous day statement |
| B2E AcctActivity | Daily 08:00 | Pull detailed account activity |
| Flow Converter | Every 2 hours | Convert raw records to boc_bank_flow |
| match:boc | Every 3 minutes | Execute BOC statement matching |
Withdrawal: FTS File Channel
What is FTS
FTS (Fund Transfer Service) is BOCHK's batch remittance file channel. moomoo uploads withdrawal instructions to BOCHK's SFTP server in S14 format; BOCHK processes them and generates S16 result files for download.
Data Flow
S14/S16 File Formats
| File Type | Direction | Content |
|---|---|---|
| S14 | moomoo → BOCHK | Withdrawal instructions (payee info, amount, currency) |
| S16 | BOCHK → moomoo | Processing results (transaction status, actual amount, balance) |
S16 files are fixed-width format (1024+ characters per record), supporting multiple encodings (UTF-8, Big5HKSCS, GBK).
S16 File Key Fields
| Field | Description |
|---|---|
| seq_no | Transaction sequence (16 digits, unique identifier) |
| futu_account | Futu regulatory account (14 digits) |
| t_date | Transaction date (YYYYMMDD) |
| v_date | Value date (YYYYMMDD) |
| ccy | Currency (HKD/USD/CNY...) |
| amount | Transaction amount |
| borrowing_direction | C=Credit (incoming) / D=Debit (outgoing) |
| ledger_balance | Balance after transaction |
| account | Counterparty account |
| name | Counterparty name |
| settlement_method | Settlement method |
| fee | Bank service fee |
| abstract | Transaction summary |
Relay Layer
bochk_relay is the B2E request relay layer (SRPC service), providing 5 RPC interfaces:
| RPC Method | Timeout | Purpose |
|---|---|---|
| InternalTrans | 60s | Internal transfer instruction |
| QueryInternalTrans | 30s | Query transfer status |
| QueryAcctBalance | 30s | Query account balance |
| QueryTodayActivity | 50s | Query today's activity |
| QueryAcctStatement | 50s | Query account statement |
S14/S16 Consistency Check
The system compares key fields between S14 (instructions) and S16 (results) to ensure data consistency:
| Monitoring Metric | Meaning |
|---|---|
| 1946146 | S14/S16 statement mismatch (needs attention) |
| 1946147 | S16 has more complete information than S14 (normal) |
| 1946148 | S14 and S16 completely consistent |
Withdrawal: BOC FPS
Besides the FTS file channel, BOCHK also supports withdrawal via FPS (Faster Payment System) channel, with method code boc_fps.
Eligibility Conditions
| Condition | Requirement |
|---|---|
| Receiving bank location | Hong Kong |
| Currency | HKD or CNY |
| Amount limit | < 1 million |
| Bank card status | Verified (checked=1) |
| Excluded receiving banks | ICBC(10), Hang Seng(8), BOCHK(9), HSBC(11) |
Why exclude these banks? These banks have their own dedicated withdrawal channels (e.g., Hang Seng uses hase online banking, HSBC uses hsbc online banking); using FPS might actually be slower or have limit restrictions.
Withdrawal: Same-bank Transfer & Cross-border Wire
| Channel | Method Code | Applicable Scenario |
|---|---|---|
| BOCHK Same-bank Withdrawal | boc | Payee is also a BOCHK account |
| BOCHK Cross-border Wire | tele_transfer | Cross-border remittance to overseas bank |
Change Guide
If you need to modify BOCHK-related business rules, here are the specific modification locations:
| Change Requirement | Modification Location | Description |
|---|---|---|
| Add receiving currency | bochk_flow_go/conf/conf.toml | Add new currency account mapping |
| Modify deposit matching tolerance | BocMatch.php → localTransferSimilarAmount / isDifAreaSimilarAmount | Adjust amount tolerance thresholds |
| Add transaction type identification | BocMatch.php → NewMatchRule() | Add new particulars regex rules |
| Modify matching date window | BocMatch.php → daySimilar | Adjust day parameters |
| Modify FPS withdrawal limit | BOCFPS.php → make_able_where | Modify amount threshold |
| Adjust FPS excluded banks | BOCFPS.php → make_able_where | Modify bank_id exclusion list |
| Modify B2E pull frequency | bochk_flow_go/conf/conf.toml → cron expressions | Adjust scheduled tasks |
| Modify matching frequency | deposit/doc/crontab.sh → match:boc | Adjust cron interval |
| FTS timeout/retry | bochk_relay various RPC method timeout parameters | Adjust timeout durations |
| Add FTS monitoring metrics | bochk_fts_mgr → cus_fmonitor.py | Add new monitoring IDs |
| Modify statement standardization mapping | bochk_flow_go → Flow Converter module | Adjust B2E → BankFlow field mapping |
| Modify deposit timeout thresholds | Matching engine configuration | Adjust timeout duration per transfer method |
Common Customer Complaints Top 3
| # | User Feedback | Cause | CS Script |
|---|---|---|---|
| 1 | "FPS deposit didn't arrive" | particulars couldn't identify deposit method, statement marked unidentified | "Your transfer is being processed, we will complete the matching as soon as possible" |
| 2 | "Cross-border remittance had fees deducted" | Intermediary/receiving bank fee deductions are normal | "Cross-border remittances may incur bank service fees, actual credited amount is after bank deductions" |
| 3 | "Deposit waited several days" | BOCHK date window ±15 days, matching cycle is longer | "BOCHK deposit matching cycle is longer, please wait patiently; contact customer service if it exceeds 3 business days" |
After Reading
| I want to... | Go to |
|---|---|
| See BOCHK's position among all banks | Bank Capability Matrix |
| Understand the full matching engine logic | Matching & Auto-Deposit |
| See withdrawal channel execution details | Channel Execution Manual |
| Check B2E error codes and FTS status codes | Unified Error Code Center |
| Look up TransType and Bank ID reference | Deposit Reference |