Manual Matching Guide
About This Page
What: How operations manually completes matching and crediting when auto-matching between bank statements and deposit applications fails Audience: Operations staff responsible for deposit review Prerequisites: Matching & Auto Crediting — understand the auto-matching logic first Reading time: 3 minutes Owner: Deposit Operations Lead
Key takeaway: Manual matching covers four scenarios: assisted matching (system recommends but needs confirmation), complete non-match (no recommendations), amount-limit interception, and orphan statements with no application — each has a different workflow and risk level.
Onboarding Learning Path
If you are new, follow this reading order for the operations handbook: 1. CRM Operations Map (get familiar with the system interface) -> 2. This page (core daily work) -> 3. Withdrawal Approval Guide -> 4. eDDA Troubleshooting Guide -> 5. Reversal / Refund Guide -> 6. Scheduled Tasks & Monitoring
When Is Manual Matching Needed
The matching engine runs automatically every 3 minutes. If any of the following conditions are met, the statement will not be auto-credited and operations must intervene:
| Scenario | Matching Engine Output | Trigger Reason |
|---|---|---|
| Assisted matching | Written to match table, awaiting operations confirmation | Amount within assisted tolerance but exceeds auto-crediting tolerance |
| Complete non-match | Skipped | All five dimensions (amount + currency + bank + date + card number) failed to match |
| Amount limit exceeded | Matched successfully but not auto-credited | Exceeds auto-crediting limit (e.g. HKD > 2 million) |
| Statement with no application | Abnormal deposit list | User transferred funds but did not submit an application |
CRM Navigation Paths
| Feature | CRM Path | Description |
|---|---|---|
| Match list | Deposit Management -> Match List | View assisted matching records pending confirmation |
| Statement list | Deposit Management -> Statement List | View all bank statements; filter by bank / status / date |
| Application list | Deposit Management -> Deposit Applications | View all deposit applications; filter by UID / status / currency |
| Abnormal deposits | Deposit Management -> Abnormal Deposits | View orphan statements with no matching application |
| Deposit tasks | Deposit Management -> Task Approval | Deposit tasks generated after match confirmation |
Operational Procedures
Runbook Format
Operations on this page are organized in standard Runbook format. Each scenario includes:
- Trigger — Under what circumstances this operation is needed
- Assessment — How to confirm the nature of the issue
- Action — Specific execution steps
- Verification — How to confirm success after completion
1. Assisted Matching Confirmation
CRM Path: Deposit Management -> Match List -> Filter "Pending Confirmation"
- Open the match list — the system displays statement-application pairs recommended by the matching engine
- For each pending record, verify the following fields:
| Check Item | Statement Field | Application Field | Criteria |
|---|---|---|---|
| Amount | Flow.amount | Apply.amount | Difference within bank tolerance range (varies by bank -> Tolerance Rules) |
| Currency | Flow.currency | Apply.currency | Must match exactly |
| Name | Flow.en_name / Flow.cn_name | User registered name | Format differences allowed (name order, space/comma differences) |
| Card number | Flow.customer_account | Apply.bank_card_number | Last digits match (intermediary bank may replace prefix in cross-bank transfers) |
| Date | Flow.date | Apply.create_time | Within matching window (standard -3 to +2 days; BOCHK +/-15 days) |
- Confirmed correct -> Click "Confirm Match" -> System auto-creates deposit task and credits the account
- Uncertain -> Click "Ignore" -> This match pair will no longer be auto-recommended
2. Manual Matching (Complete Non-Match)
CRM Path: Deposit Management -> Statement List + Deposit Management -> Deposit Applications
- In the statement list (Deposit Funds -> Pending), find the unmatched statement and filter by
status = 0 Pending - In the application list (Deposit Funds -> Client Deposit Instructions), find the potentially matching application and filter by
status = 0 Pending, same currency, similar amount - Compare field by field using the verification table above
- After confirmation, click "Manual Link" in the statement detail page and select the corresponding application
- System auto-executes crediting
3. Abnormal Deposit Handling (No Application)
CRM Path: Deposit Management -> Abnormal Deposits
- View the abnormal deposit list (
AbnormalDepositJobauto-detects and generates every 30 minutes) - The system has already attempted to identify the user via bank card number and name; results are displayed in the list
- Processing options:
- Confirm crediting — Create an application on behalf of the user and credit the account (permission:
ABNORMAL_DEPOSIT_MODIFY) - Suspend — Wait for the user to submit an application for auto-matching
- Flag for follow-up — Contact the user to confirm intent
- Confirm crediting — Create an application on behalf of the user and credit the account (permission:
Matching Decision Flow
Auto Matching vs. Smart Reminder
Two systems run in parallel:
| Dimension | Auto Matching | Smart Reminder |
|---|---|---|
| Function | Directly auto-credits after successful match | Only recommends match results; requires manual confirmation |
| Operating hours | Has time windows (see table below) | 24/7 |
| Applicable scenario | Non-account-opening clients + post-first-deposit for account-opening clients | All statements |
| Statements without name | Not supported | Supported (uses relaxed rules) |
| Post-match action | Direct crediting (after passing risk control review) | Recommends to operations, awaits manual confirmation |
Auto matching operating time windows:
| Currency | Auto Matching Operating Hours |
|---|---|
| HKD / CNH | Monday 07:00 ~ Saturday 10:00 |
| USD | Daily 09:00 ~ 16:00 |
Statements outside these windows only go through Smart Reminder (manual recommendation confirmation).
Matching Rule Code Reference
Universal rule codes across all banks:
| Code | Meaning | Description |
|---|---|---|
| A | Basic matching conditions | Currency match, valid account, and other basic validations |
| B1 | Amount exactly equal | Statement amount = instruction amount, exact match |
| B2 | Overseas remittance tolerance | Cross-border remittance allows intermediary bank fee deduction: HKD/CNH <= 420, USD <= 60 |
| B3 | Online account opening first deposit threshold | First deposit minimum for online account opening clients: HKD/CNH >= 10,000, USD >= 1,500 |
| B4 | Local approximate equal | HKD/CNH: 0 <= instruction amount - statement amount <= 20; USD: <= 3 |
| C1 | Name matching (strict) | Used for auto-crediting, requires full match |
| C2 | Name matching (relaxed) | Used for smart reminder, supports fuzzy matching |
| D | General validation conditions | Date window, instruction status, and other general conditions |
| E | Account number validation | Used only for auto-matching; validates consistency between statement account and instruction bank card number (see details below) |
| F1 | Region: Hong Kong | Remitting bank located in Hong Kong (based on SWIFT or bank-provided region info; no region info is treated as not met) |
| F2 | Region: Prior authorization | The account has had a successful BST or eDDA authorization, inferring the region as Hong Kong |
Rule E (Account Number Validation) Full Logic
Rule E attempts the following checks in priority order; any hit is considered a match:
- BankCode + exact account match — Instruction account (including bank code prefix) exactly matches statement account
- Multiple BankCode matching — If the same bank has multiple codes, try each; prioritize the first one in system configuration
- Account only (without BankCode) match — Account numbers match after removing bank code prefix
- ICBC special rule — Remove the ICBC account trailing digits, then match using rules 1/2
- BOCHK 14-digit validation — BankCode + account must be 14 digits; non-14-digit is treated as non-match (excludes BOCHK smart accounts)
- Credit card exclusion — Account length > 15 digits and does not start with
621299-> treated as credit card, no match (621299prefix is CMB 16-digit account, not misidentified)
Rules F1/F2 Usage Scenarios
F1 and F2 are only used in the online account opening client + unverified bank card deposit scenario, combined with B3 to determine whether the deposit source is a Hong Kong bank account. Typical complete rule combination: A & B1 & C1 & D & E & B3 & (F1 | F2).
BOCHK Statement Type Routing Table
BOCHK statements are routed to different matching paths based on transfer type and whether the payer name is present:
Statements with name (supports auto-crediting):
| Transfer Type | Summary Prefix | Auto Matching Rules |
|---|---|---|
| Transfer | FPS* | A & B1 & C1 & D & E |
| Transfer | E-BANKING TRANSFER* | A & B1 & C1 & D & E |
| Transfer | CHATS* | A & B4 & C1 & D & E |
| Transfer | REMIT IN* | A & B2 & C1 & D & E |
| Transfer | Other | A & B4 & C1 & D & E |
| Transfer Transaction | CBS TRANSFER* / Other | A & B4 & C1 & D & E |
Statements without name (auto-crediting not supported, smart reminder only):
| Transfer Type | Smart Reminder Rules |
|---|---|
| Transfer (CBS TRANSFER*) | A & B4 & D |
| Interest | A & B4 & D |
| Clearing Cheque / Cheque Clearing | A & B4 & D |
| Returned Cheque | A & B4 & D |
| ATM Transfer | A & B4 & D |
| Other | A & B4 & D |
Note
- Transfer type and summary are both case-insensitive
- For online account opening clients whose bank card has not yet been approved, all the above auto-matching rules require the additional B3 (online account opening first deposit threshold) and F1 | F2 (region validation)
Auto Approval Risk Control Rules
After a successful auto-match, the following risk control rules may escalate a deposit to manual review:
| Risk Control Rule | Trigger Condition | Handling |
|---|---|---|
| Multiple UID conflict | One statement matches instructions from multiple different UIDs | No auto-approval; wait for manual processing |
| Rate limiting | Same UID has multiple instructions with different amounts on the same day; first 10 auto-approved, from the 11th onward | Escalated to manual approval |
| Amount limit | Single transaction exceeds limit | Auto-matched but escalated to manual review |
Auto-approval limits:
| Currency | Auto Approval Limit |
|---|---|
| HKD | 2 million |
| USD | 300,000 |
| CNH | 2 million |
Account Opening Deposit Special Rules
Hong Kong online account opening clients have additional restrictions:
| Rule | Description |
|---|---|
| First deposit minimum | HKD 10,000 / CNH 10,000 / USD 1,500 |
| Additional matching validation | Deposits from unverified bank cards require additional B3 (bank card verification) on top of standard rules |
| eDDA available for account opening | Only HSBC eDDA can be used for account opening deposits (authorization completed in real-time within the App) |
| eDDA not available for account opening | Hang Seng eDDA cannot be used for account opening deposits (requires authorization in the bank's app, not real-time) |
| After first deposit | Client can only use the same bank card from the first deposit for subsequent deposits and withdrawals |
Deposit Instruction Management
Five ways to create a deposit instruction:
| Creation Method | Trigger Scenario | Description |
|---|---|---|
| Transfer button | Client clicks "I've Transferred" on the deposit page | Most common; client manually submits |
| eDDA automatic | Client initiates eDDA debit | System auto-creates instruction |
| BST app-side | Client initiates BST deposit in the moomoo App | System auto-creates instruction |
| BST bank-side | Bank-side initiated deposit; after fund statement arrives | System creates instruction only after statement arrival |
| CRM manual | Operations staff creates directly in CRM | For special supplementary recording scenarios |
Special instruction operations:
| Operation | Description | Risk Level |
|---|---|---|
| Emergency deposit | Force-match an instruction to a statement, or credit directly without a statement | Warning: Extremely high — equivalent to directly adding funds to the client's account |
| Instruction lock | Lock abnormal / non-compliant instructions to prevent auto-matching and processing by others | Low |
| Instruction rejection | Missing deposit receipt or non-same-name deposit; return to client for resubmission | Low |
| Instruction auto-rejection | Different banks and deposit methods auto-reject based on instruction age / time | None (system automatic) |
Canary Release Impact on Matching
New matching rules are rolled out progressively using a canary strategy:
| Phase | Time Range | Canary Ratio |
|---|---|---|
| Phase 1 | Release day ~ next day 12:00 | First 2 statements per hour use new rules |
| Phase 2 | Next day 12:00 ~ 16:10 | First 10 statements per hour use new rules |
| Phase 3 | After next day 16:10 | Full rollout to new rules |
Operations Impact
During the canary period, some statements will bypass auto-matching. Monitor whether manual matching volume increases abnormally.
Escalation Path
Escalation chain: Operations Staff -> Deposit Product Manager -> Backend Developer -> Bank Liaison
| Scenario | Frontline Handling | Escalation Condition | Escalate To |
|---|---|---|---|
| Amount difference > assisted tolerance | Contact user to confirm source of discrepancy | User cannot explain | -> Deposit Product Manager |
| Name completely different | Contact user to confirm | May be third-party payment / someone else's transfer | -> Compliance Team |
| Same statement matches multiple users | Confirm each one | Cannot determine ownership | -> Deposit Product Manager + Risk Control |
| Statement backlog exceeds 50 | Check collection service | Collection service abnormal | -> Backend Developer / DevOps |
| Match rate declining for 3 consecutive rounds | Check tolerance configuration changes | System configuration issue | -> Deposit Product Manager |
| Bank API exception | Confirm bank-side announcements | Bank-side issue requiring coordination | -> Bank Liaison |
Assessment Checklist
When you receive an unmatched statement, check the following in order:
1. Amount: Is the difference between Flow.amount and Apply.amount within tolerance?
-> Tolerance standards: Deposit Rule Reference - Matching Tolerance Rules
2. Currency: Do Flow.currency and Apply.currency match?
-> Mismatch usually requires rejecting the application
3. Name: Does Flow.en_name match the user's registered English name?
-> Watch for format differences ("CHAN TAI MAN" vs "Tai Man Chan")
4. Card number: Does the Flow.customer_account last digits match Apply.bank_card_number?
-> Intermediary bank may replace card number in cross-bank transfers
5. Date: Is Flow.date within the matching window of Apply creation date?
-> Standard window: -3 days to +2 days (BOCHK B2E uses an independent +/-15 day window)
6. BOCHK card number: If the parsed account number starts with `/`, the system auto-removes it before storing
-> Note that the raw account number may have a `/` prefix when cross-checkingCommon Rejection Reasons
| Situation | Recommended Rejection Code | Action |
|---|---|---|
| Receipt is illegible | 1 (Information unclear) | Request supplementary documents |
| Bank account information missing | 4 | Request supplementary bank information |
| Securities account abnormal | 5 | Escalate to account team |
| Multiple duplicate applications | 8 (Duplicate application) | Keep one, reject the rest |
| Funds not received after timeout | 9 (Timeout) | System usually auto-rejects |
| Transferor does not match applicant | 14 (Account mismatch) | Contact user to confirm |
Full rejection reason codes -> Deposit Rule Reference - Rejection Reason Codes
Required Permissions
| Permission | Purpose |
|---|---|
CASH_IN_APPLY_VIEW | View deposit applications |
CASH_IN_FLOW_VIEW | View bank statements |
CASH_IN_TASK_APPROVAL | Confirm match, approve / reject deposits |
ABNORMAL_DEPOSIT_MODIFY | Process abnormal deposits (statements with no application) |
CASH_IN_APPLY_MODIFY | Modify application information for re-matching |
Processing SLA
| Scenario | Target Response Time | Description |
|---|---|---|
| Assisted matching confirmation | 1 hour | After receiving match notification during working hours |
| Abnormal deposit processing | 2 hours | After abnormal deposit is generated during working hours |
| Manual matching | 4 hours | After user reports "money didn't arrive" |
| Statement backlog alert | 15 minutes | Any time, 24/7 |
If requirements change: adjusting the manual matching process or rules
Code locations:
- Match list API:
deposit/src/app/Http/Controllers/MatchController.php - Manual matching operation:
deposit/src/app/Business/Match/ManualMatch.php(if exists) - Abnormal deposit detection:
deposit/src/app/Jobs/AbnormalDepositJob.php
Common change scenarios:
- Modify fields displayed in assisted matching -> Adjust the match list API response fields
- Modify abnormal deposit detection logic -> Adjust detection conditions in
AbnormalDepositJob - Add batch confirmation feature -> Add batch operation endpoint in MatchController
- Modify rejection reason code options -> Adjust the enum in
deposit/src/app/Common/RejectReason.php
Bank-Specific Matching Characteristics
For detailed matching rules, see Bank Channel Matrix - Deposit Matching Rules. The table below supplements bank-specific differences that operations should pay special attention to during daily matching.
| Bank | Amount Tolerance (HKD) | Date Window | Name Rule | Operations Notes |
|---|---|---|---|---|
| BOCHK | Local -20, Cross-border -420 | +/-15 days | Not validated | Particulars may fail to identify deposit method; manual selection required |
| HSBC | Standard -420, Auto -65 | -3 to +2 days | Not validated | Bank account number requires prefix removal for matching; auto-crediting tolerance is stricter |
| Hang Seng | -20 | -3 to +2 days | Not validated | Matched separately by statement type; pay attention to different types |
| EWB | -420 | -3 to +2 days | Not validated | "Other Deposit" type only checks amount, not other dimensions |
| CCB | -20 | -3 to +4 days | Exact match | English name must match exactly; watch for name order and spelling |
| DBS | -350 (auto) | -3 to +2 days | Not validated | Sub-accounts require historical verification; first deposit to a new sub-account needs manual confirmation |
| BST | Exact | Real-time | — | Direct channel; no statement matching needed |
| ICBC | — | — | — | Bank-enterprise direct statement collection; standard matching rules |
| BANKCOMM | -300 HKD / -45 USD / -300 CNH | -7 to +4 days | Not validated | Sub-account matching prioritized; larger tolerance |
Three Most Problematic Banks
- BOCHK — Particulars recognition failure is the most common matching failure cause (operations must manually select deposit method)
- CCB — Exact name matching leads to a higher rejection rate (watch name order)
- DBS — First deposit to a new sub-account will not auto-credit (requires manual confirmation)
Next Steps
| I want to... | Go to |
|---|---|
| Understand the five-dimension auto-matching logic | Matching & Auto Crediting |
| Look up tolerance values, timeout configurations, rejection codes | Deposit Rule Reference |
| Troubleshoot more deposit anomaly scenarios | Deposit Troubleshooting |
| Look up error codes and status codes | Unified Error Code Center |