Bank Capability Matrix
About This Page
What: A single table overview of each bank's Deposit/Withdrawal/eDDA/FPS/BST capabilities, matching rule quick reference, and deposit/withdrawal method code mapping Audience: Product managers who need to quickly check what a given bank supports Prerequisites: None, consult anytime Reading time: Reference-style, search as needed Owner: Deposit & Withdrawal Product Team
Capability Matrix
| Bank | Deposit Statements | Withdrawal Remittance | eDDA/eDDI | FPS/BST |
|---|---|---|---|---|
| BOCHK | B2E | FTS | - | FPS |
| HSBC | MT910 | Online Banking | eDDA + eDDI | - |
| Hang Seng HASE | Hang Seng Statements | Online Banking | eDDA + eDDI | - |
| SCB | - | FPS | - | FPS |
| CGB | - | FPS API | - | FPS |
| ICBC | Bank-Enterprise Direct | - | - | - |
| CMB | BST | BST | - | BST |
| CMBC (MS) | BST | BST | - | BST |
| Airstar | API | API | - | BST |
| EWB | CSV | Wire Transfer | - | - |
| CCB | API | - | - | - |
| DBS | API | - | - | - |
| BANKCOMM | API | - | - | - |
| ZA | Sub-account | - | - | - |
Channel Classification: The 13 banks are divided into three categories by integration method — BST Channels (CMB/CMBC/Airstar, real-time bidirectional transfers), eDDA/Online Banking Channels (HSBC/Hang Seng, direct debit deposit + online banking withdrawal), FPS/Wire Transfer/Other (BOCHK/SCB/CGB etc., each with independent protocols). The sidebar is organized by these groups.
Integration Protocol Quick Reference
| Bank | Protocol Type | Transport | Core Service |
|---|---|---|---|
| BOCHK | B2E (Bank-to-Enterprise) | HTTP POST (XML) | bochk_flow_go (Go) |
| BOCHK Withdrawal | FTS (Fund Transfer) | SFTP S14/S16 (XML) | bochk_relay (Python) |
| HSBC | MT910 (SWIFT) | SFTP + GPG Encryption | hsbc_bank_flow_service (Python) |
| HSBC eDDI | eDDA/eDDI API | SRPC (Protobuf) | sba_hsbc_eddi (Python) |
| Hang Seng eDDI | eDDA/eDDI API | SRPC (Protobuf) | sba_hase_eddi (Python) |
| SCB | REST API | HTTPS (JSON) | scb_service (Go) |
| CGB | FPS Message | HTTPS (XML) | cgb_fps_service (Go) |
| ICBC | Bank-Enterprise Direct | HTTPS + RSA (JSON) | icbc_be_relay (Python) |
| CMB | Socket Binary | Dedicated TCP (GB18030) | cmb_stock_trans (Python) |
| CMBC | Socket Binary | Dedicated TCP (GB18030) | ms_stock_bank_transaction (Python) |
| Airstar | REST API | HTTPS (JSON) | airstar_service (Go) |
| EWB | File Import | CSV | — |
| CCB | REST API | HTTPS (JSON) | — |
| DBS | REST API | HTTPS (JSON) | — |
Deposit Matching Rules Quick Reference
When a bank statement arrives, the system needs to match it against the user's deposit application. Each bank has different matching tolerances:
| Bank | Amount Tolerance (HKD/CNH) | Amount Tolerance (USD) | Date Window | Special Rules |
|---|---|---|---|---|
| BOCHK | Local -20, Cross-border -420 | Local -3, Cross-border -60 | +/-15 days | FPS/Online Banking exact match, CHATS -20, Cross-border inward -420 |
| HSBC | Standard -420, Auto -65 | Standard -60, Auto -14 | No fixed window | Match by bank card number + amount, no date constraint |
| Hang Seng | -20 (WY/Default) / Exact (ATM/GT/ZP/BP) | -3 | -3~+2 (WY) / Batch time (ATM/GT) | Match separately by statement type |
| EWB | -420 | -60 | No fixed window | Match by currency + name + amount, no date constraint |
| CCB | -20 | -3 | -3~+4 days | English name exact match |
| DBS | -350 (auto-deposit) | -50 (auto-deposit) | No fixed window | Sub-account history verification takes priority, no date constraint |
| ICBC | -420 (auto) / -20 (CHATS) | -60 (auto) / -3 | +/-15 days | Dual old/new matching paths in parallel |
| BST (3 banks) | Exact match | Exact match | Real-time | Direct connection, no statement matching needed |
Amount Tolerance Explained: "-20" means CRM application amount - 20 <= bank statement amount <= CRM application amount. The deduction is for bank fees, so the statement amount is only allowed to be less than the application amount, never more.
Detailed Date Window Rules (from MatchRule.php)
| Rule Name | Window | Formula | Used By |
|---|---|---|---|
| daySimilar | -3~+2 days | Statement date - 3 <= Application date <= Statement date + 2 | Hang Seng (WY/ZP/Default) |
| daySimilarBoc | -3~+4 days | Statement date - 3 <= Application date < Statement date + 4 | CCB |
| — | — | — | HSBC, EWB, and DBS matching logic does not include date window validation. |
| daySimilarRealTime | Same day~+2 days | Statement time <= Application date <= Statement day + 2 | Real-time push banks |
| daySimilarRealTimeFps | -1 hour~+2 days | Statement time - 1h <= Application date < Statement day + 2 | FPS |
| BOC Custom | +/-15 days | Application date - 15 < Statement date < Application date + 15 | BOCHK |
Withdrawal Method Code Mapping
The withdrawal system uses the method field to determine which channel to use. The 12 method codes are:
| Method Code | Name | Corresponding Bank | Channel Type |
|---|---|---|---|
manual | ICBC Transfer | ICBC | Manual Processing |
auto_bs | BST (Bank-Securities Transfer) | CMB/CMBC/Airstar | BST Auto |
check | Cheque Transfer | — | Cheque |
tele_transfer | BOCHK Cross-border Wire | BOCHK | Cross-border Wire |
boc | BOCHK Same-bank Withdrawal | BOCHK | FTS Same-bank |
hase | Hang Seng Online Banking Withdrawal | Hang Seng | Corporate Online Banking |
hsbc | HSBC Online Banking Withdrawal | HSBC | Corporate Online Banking |
boc_fps | BOCHK FPS Withdrawal | BOCHK | FPS |
cgb_fps_api | FPS API (CGB) | CGB | FPS API |
ewb | EWB Wire Transfer | EWB | Wire Transfer |
chats_rtgs | CHATS/RTGS Withdrawal | — | Bank Clearing |
sc | SCB Online Banking Withdrawal | SCB | FPS |
Method Groups (Method.php)
| Group | Meaning | Included Methods |
|---|---|---|
| allEBankMethod | All electronic withdrawals | manual, boc, hase, hsbc, boc_fps, cgb_fps_api, chats_rtgs, sc |
| allTeleMethod | Wire transfer types | tele_transfer, ewb |
| allSetMethod | Configurable methods | All 9 except auto_bs, ewb, tele_transfer |
| allTabMethod | Visible in admin panel | allSetMethod + ewb + tele_transfer |
Deposit Bank ID Quick Reference
The deposit system identifies bank sources via import_bank_id:
| Bank ID | Bank | Notes |
|---|---|---|
| 7 | CMB | BST deposit |
| 8 | Hang Seng HASE | Statement deposit + eDDI Direct Debit |
| 9 | BOCHK | B2E statements |
| 10 | ICBC | Bank-Enterprise Direct statements |
| 11 | HSBC | MT910 statements + eDDI Direct Debit |
| 13 | CMBC (MS) | BST deposit |
| 15 | CCB | API statements |
| 16 | DBS | API statements |
| 21 | BANKCOMM | API statements |
| 12 | SCB | FPS withdrawal statements |
| 34 | EWB | CSV file import |
| 38 | EWB Sub-account | Sub-account CSV |
| 55 | Airstar | BST API |
Choose a Bank by Scenario
The matrix above shows "what does a bank support". The table below reverses it: "what do I need to do and which banks are available".
| I need... | Available Banks / Channels | Recommended | Reason |
|---|---|---|---|
| FPS instant deposit | BOCHK FPS, SCB, CGB | BOCHK | Broadest user coverage, auto statement collection |
| eDDA auto direct debit deposit | HSBC, Hang Seng | HSBC | Large user base, high OTP security level |
| BST real-time bidirectional transfer | CMB, CMBC, Airstar | Airstar | Only one supporting online account opening + Mandate authorization |
| Auto withdrawal (no manual ops) | CMB/CMBC/Airstar BST (auto_bs), CGB FPS API (cgb_fps_api) | BST | Most mature, all three already live |
| Large withdrawal (>HKD 1M) | Corporate online banking (hase/hsbc), CHATS/RTGS | Corporate Online Banking | No per-transaction limit, but requires manual operations |
| Cross-border withdrawal to Mainland | BOCHK cross-border wire (tele_transfer), EWB wire (ewb) | BOCHK | FTS direct connection, high automation |
| Sub-account independent deposit | DBS, EWB | DBS | API auto-collection, EWB requires CSV import |
| Lowest integration cost pilot | EWB (CSV file import) | EWB | Zero development effort, pure file import |
| Statement collection only (no withdrawal) | ICBC, CCB, DBS, BANKCOMM | — | Choose based on user demographics |
Operations Quick Reference: Service Hours & Maintenance Windows
| Bank | Deposit Service Hours | Withdrawal Service Hours | Scheduled Maintenance Window |
|---|---|---|---|
| BOCHK | B2E: 3 times daily (AM/PM/Evening) | FTS: Business days | Sunday 02:00~06:00 |
| HSBC | MT910: 7x24 real-time push | Online Banking: Business days | Ad-hoc (advance email notification) |
| Hang Seng HASE | Statements: Business days | Online Banking: Business days | Sunday early morning (advance notice) |
| SCB | — | FPS: 7x24 | Quarterly upgrade (advance notice) |
| CGB | — | FPS API: 7x24 | Ad-hoc |
| ICBC | Bank-Enterprise Direct: 7x24 | — | Saturday 23:00~Sunday 06:00 |
| CMB | BST: Business days 07:00~next day 04:00 | BST: Business days 07:00~15:55 | Sunday early morning |
| CMBC (MS) | BST: Business days 07:00~next day 04:00 | BST: Business days 07:00~15:55 | Sunday early morning |
| Airstar | BST API: Business days 08:00~22:00 | BST API: Business days 09:00~15:55 | Ad-hoc |
| EWB | CSV: Business days | Wire Transfer: Business days | — |
Impact of Maintenance Windows
During maintenance, deposit statements may be delayed and withdrawal instructions may fail to send. When encountering "timeout" alerts within maintenance windows, first confirm whether it falls within the maintenance period before deciding whether to escalate.
Channel Operational Status
Manually updated. Operations updates this table when channel anomalies are detected; restored to normal when service recovers.
| Bank | Deposit Status | Withdrawal Status | Recent Anomaly | Notes |
|---|---|---|---|---|
| BOCHK | 🟢 Normal | 🟢 Normal | — | — |
| HSBC | 🟢 Normal | 🟢 Normal | — | — |
| Hang Seng HASE | 🟢 Normal | 🟢 Normal | — | — |
| SCB | 🟢 Normal | 🟢 Normal | — | — |
| CGB | — | 🟢 Normal | — | — |
| ICBC | 🟢 Normal | — | — | Deposit only |
| CMB | 🟢 Normal | 🟢 Normal | — | — |
| CMBC (MS) | 🟢 Normal | 🟢 Normal | — | — |
| Airstar | 🟢 Normal | 🟢 Normal | — | — |
| EWB | 🟢 Normal | 🟢 Normal | — | — |
| CCB | 🟢 Normal | — | — | Deposit only |
| DBS | 🟢 Normal | — | — | Deposit only |
| BANKCOMM | 🟢 Normal | — | — | Deposit only |
If Requirements Change: Onboarding a New Bank
When adding a new bank, update the following locations (in order):
| # | File | Action |
|---|---|---|
| 1 | This page banks/matrix.md | Add a row to the Capability Matrix, Integration Protocol, and Bank ID tables |
| 2 | banks/ directory | Create a new standalone bank page (follow existing page structure) |
| 3 | docs/.vitepress/config.mts | Add entry to sidebar Part 3 |
| 4 | appendix/error-codes.md | Add error code section for the bank |
| 5 | ops/monitoring.md | If there are cron jobs/statement collection, add monitoring entries |
| 6 | deposit/matching.md | If the bank has deposit matching, add bank-specific rules |
| 7 | withdraw/channels.md | If the bank has withdrawal channels, add channel execution instructions |
| 8 | guide/glossary.md | Add entry to Bank ID table |
After Reading
| I want to... | Go to |
|---|---|
| Deep dive into a specific bank | Click the bank name link in the matrix table above |
| Understand the full matching engine logic | Matching & Auto-Deposit |
| See withdrawal channel execution details | Channel Execution Manual |
| Look up error codes and status codes | Unified Error Code Center |
| Check cron jobs and monitoring for each bank | Cron Jobs & Monitoring |