Skip to content

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:

ScenarioMatching Engine OutputTrigger Reason
Assisted matchingWritten to match table, awaiting operations confirmationAmount within assisted tolerance but exceeds auto-crediting tolerance
Complete non-matchSkippedAll five dimensions (amount + currency + bank + date + card number) failed to match
Amount limit exceededMatched successfully but not auto-creditedExceeds auto-crediting limit (e.g. HKD > 2 million)
Statement with no applicationAbnormal deposit listUser transferred funds but did not submit an application

CRM Navigation Paths

FeatureCRM PathDescription
Match listDeposit Management -> Match ListView assisted matching records pending confirmation
Statement listDeposit Management -> Statement ListView all bank statements; filter by bank / status / date
Application listDeposit Management -> Deposit ApplicationsView all deposit applications; filter by UID / status / currency
Abnormal depositsDeposit Management -> Abnormal DepositsView orphan statements with no matching application
Deposit tasksDeposit Management -> Task ApprovalDeposit tasks generated after match confirmation

Operational Procedures

Runbook Format

Operations on this page are organized in standard Runbook format. Each scenario includes:

  1. Trigger — Under what circumstances this operation is needed
  2. Assessment — How to confirm the nature of the issue
  3. Action — Specific execution steps
  4. Verification — How to confirm success after completion

1. Assisted Matching Confirmation

CRM Path: Deposit Management -> Match List -> Filter "Pending Confirmation"

  1. Open the match list — the system displays statement-application pairs recommended by the matching engine
  2. For each pending record, verify the following fields:
Check ItemStatement FieldApplication FieldCriteria
AmountFlow.amountApply.amountDifference within bank tolerance range (varies by bank -> Tolerance Rules)
CurrencyFlow.currencyApply.currencyMust match exactly
NameFlow.en_name / Flow.cn_nameUser registered nameFormat differences allowed (name order, space/comma differences)
Card numberFlow.customer_accountApply.bank_card_numberLast digits match (intermediary bank may replace prefix in cross-bank transfers)
DateFlow.dateApply.create_timeWithin matching window (standard -3 to +2 days; BOCHK +/-15 days)
  1. Confirmed correct -> Click "Confirm Match" -> System auto-creates deposit task and credits the account
  2. 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

  1. In the statement list (Deposit Funds -> Pending), find the unmatched statement and filter by status = 0 Pending
  2. In the application list (Deposit Funds -> Client Deposit Instructions), find the potentially matching application and filter by status = 0 Pending, same currency, similar amount
  3. Compare field by field using the verification table above
  4. After confirmation, click "Manual Link" in the statement detail page and select the corresponding application
  5. System auto-executes crediting

3. Abnormal Deposit Handling (No Application)

CRM Path: Deposit Management -> Abnormal Deposits

  1. View the abnormal deposit list (AbnormalDepositJob auto-detects and generates every 30 minutes)
  2. The system has already attempted to identify the user via bank card number and name; results are displayed in the list
  3. 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

Matching Decision Flow

Auto Matching vs. Smart Reminder

Two systems run in parallel:

DimensionAuto MatchingSmart Reminder
FunctionDirectly auto-credits after successful matchOnly recommends match results; requires manual confirmation
Operating hoursHas time windows (see table below)24/7
Applicable scenarioNon-account-opening clients + post-first-deposit for account-opening clientsAll statements
Statements without nameNot supportedSupported (uses relaxed rules)
Post-match actionDirect crediting (after passing risk control review)Recommends to operations, awaits manual confirmation

Auto matching operating time windows:

CurrencyAuto Matching Operating Hours
HKD / CNHMonday 07:00 ~ Saturday 10:00
USDDaily 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:

CodeMeaningDescription
ABasic matching conditionsCurrency match, valid account, and other basic validations
B1Amount exactly equalStatement amount = instruction amount, exact match
B2Overseas remittance toleranceCross-border remittance allows intermediary bank fee deduction: HKD/CNH <= 420, USD <= 60
B3Online account opening first deposit thresholdFirst deposit minimum for online account opening clients: HKD/CNH >= 10,000, USD >= 1,500
B4Local approximate equalHKD/CNH: 0 <= instruction amount - statement amount <= 20; USD: <= 3
C1Name matching (strict)Used for auto-crediting, requires full match
C2Name matching (relaxed)Used for smart reminder, supports fuzzy matching
DGeneral validation conditionsDate window, instruction status, and other general conditions
EAccount number validationUsed only for auto-matching; validates consistency between statement account and instruction bank card number (see details below)
F1Region: Hong KongRemitting bank located in Hong Kong (based on SWIFT or bank-provided region info; no region info is treated as not met)
F2Region: Prior authorizationThe 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:

  1. BankCode + exact account match — Instruction account (including bank code prefix) exactly matches statement account
  2. Multiple BankCode matching — If the same bank has multiple codes, try each; prioritize the first one in system configuration
  3. Account only (without BankCode) match — Account numbers match after removing bank code prefix
  4. ICBC special rule — Remove the ICBC account trailing digits, then match using rules 1/2
  5. BOCHK 14-digit validation — BankCode + account must be 14 digits; non-14-digit is treated as non-match (excludes BOCHK smart accounts)
  6. Credit card exclusion — Account length > 15 digits and does not start with 621299 -> treated as credit card, no match (621299 prefix 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 TypeSummary PrefixAuto Matching Rules
TransferFPS*A & B1 & C1 & D & E
TransferE-BANKING TRANSFER*A & B1 & C1 & D & E
TransferCHATS*A & B4 & C1 & D & E
TransferREMIT IN*A & B2 & C1 & D & E
TransferOtherA & B4 & C1 & D & E
Transfer TransactionCBS TRANSFER* / OtherA & B4 & C1 & D & E

Statements without name (auto-crediting not supported, smart reminder only):

Transfer TypeSmart Reminder Rules
Transfer (CBS TRANSFER*)A & B4 & D
InterestA & B4 & D
Clearing Cheque / Cheque ClearingA & B4 & D
Returned ChequeA & B4 & D
ATM TransferA & B4 & D
OtherA & 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 RuleTrigger ConditionHandling
Multiple UID conflictOne statement matches instructions from multiple different UIDsNo auto-approval; wait for manual processing
Rate limitingSame UID has multiple instructions with different amounts on the same day; first 10 auto-approved, from the 11th onwardEscalated to manual approval
Amount limitSingle transaction exceeds limitAuto-matched but escalated to manual review

Auto-approval limits:

CurrencyAuto Approval Limit
HKD2 million
USD300,000
CNH2 million

Account Opening Deposit Special Rules

Hong Kong online account opening clients have additional restrictions:

RuleDescription
First deposit minimumHKD 10,000 / CNH 10,000 / USD 1,500
Additional matching validationDeposits from unverified bank cards require additional B3 (bank card verification) on top of standard rules
eDDA available for account openingOnly HSBC eDDA can be used for account opening deposits (authorization completed in real-time within the App)
eDDA not available for account openingHang Seng eDDA cannot be used for account opening deposits (requires authorization in the bank's app, not real-time)
After first depositClient 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 MethodTrigger ScenarioDescription
Transfer buttonClient clicks "I've Transferred" on the deposit pageMost common; client manually submits
eDDA automaticClient initiates eDDA debitSystem auto-creates instruction
BST app-sideClient initiates BST deposit in the moomoo AppSystem auto-creates instruction
BST bank-sideBank-side initiated deposit; after fund statement arrivesSystem creates instruction only after statement arrival
CRM manualOperations staff creates directly in CRMFor special supplementary recording scenarios

Special instruction operations:

OperationDescriptionRisk Level
Emergency depositForce-match an instruction to a statement, or credit directly without a statementWarning: Extremely high — equivalent to directly adding funds to the client's account
Instruction lockLock abnormal / non-compliant instructions to prevent auto-matching and processing by othersLow
Instruction rejectionMissing deposit receipt or non-same-name deposit; return to client for resubmissionLow
Instruction auto-rejectionDifferent banks and deposit methods auto-reject based on instruction age / timeNone (system automatic)

Canary Release Impact on Matching

New matching rules are rolled out progressively using a canary strategy:

PhaseTime RangeCanary Ratio
Phase 1Release day ~ next day 12:00First 2 statements per hour use new rules
Phase 2Next day 12:00 ~ 16:10First 10 statements per hour use new rules
Phase 3After next day 16:10Full 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

ScenarioFrontline HandlingEscalation ConditionEscalate To
Amount difference > assisted toleranceContact user to confirm source of discrepancyUser cannot explain-> Deposit Product Manager
Name completely differentContact user to confirmMay be third-party payment / someone else's transfer-> Compliance Team
Same statement matches multiple usersConfirm each oneCannot determine ownership-> Deposit Product Manager + Risk Control
Statement backlog exceeds 50Check collection serviceCollection service abnormal-> Backend Developer / DevOps
Match rate declining for 3 consecutive roundsCheck tolerance configuration changesSystem configuration issue-> Deposit Product Manager
Bank API exceptionConfirm bank-side announcementsBank-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-checking

Common Rejection Reasons

SituationRecommended Rejection CodeAction
Receipt is illegible1 (Information unclear)Request supplementary documents
Bank account information missing4Request supplementary bank information
Securities account abnormal5Escalate to account team
Multiple duplicate applications8 (Duplicate application)Keep one, reject the rest
Funds not received after timeout9 (Timeout)System usually auto-rejects
Transferor does not match applicant14 (Account mismatch)Contact user to confirm

Full rejection reason codes -> Deposit Rule Reference - Rejection Reason Codes

Required Permissions

PermissionPurpose
CASH_IN_APPLY_VIEWView deposit applications
CASH_IN_FLOW_VIEWView bank statements
CASH_IN_TASK_APPROVALConfirm match, approve / reject deposits
ABNORMAL_DEPOSIT_MODIFYProcess abnormal deposits (statements with no application)
CASH_IN_APPLY_MODIFYModify application information for re-matching

Processing SLA

ScenarioTarget Response TimeDescription
Assisted matching confirmation1 hourAfter receiving match notification during working hours
Abnormal deposit processing2 hoursAfter abnormal deposit is generated during working hours
Manual matching4 hoursAfter user reports "money didn't arrive"
Statement backlog alert15 minutesAny 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.

BankAmount Tolerance (HKD)Date WindowName RuleOperations Notes
BOCHKLocal -20, Cross-border -420+/-15 daysNot validatedParticulars may fail to identify deposit method; manual selection required
HSBCStandard -420, Auto -65-3 to +2 daysNot validatedBank account number requires prefix removal for matching; auto-crediting tolerance is stricter
Hang Seng-20-3 to +2 daysNot validatedMatched separately by statement type; pay attention to different types
EWB-420-3 to +2 daysNot validated"Other Deposit" type only checks amount, not other dimensions
CCB-20-3 to +4 daysExact matchEnglish name must match exactly; watch for name order and spelling
DBS-350 (auto)-3 to +2 daysNot validatedSub-accounts require historical verification; first deposit to a new sub-account needs manual confirmation
BSTExactReal-timeDirect channel; no statement matching needed
ICBCBank-enterprise direct statement collection; standard matching rules
BANKCOMM-300 HKD / -45 USD / -300 CNH-7 to +4 daysNot validatedSub-account matching prioritized; larger tolerance

Three Most Problematic Banks

  1. BOCHK — Particulars recognition failure is the most common matching failure cause (operations must manually select deposit method)
  2. CCB — Exact name matching leads to a higher rejection rate (watch name order)
  3. 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 logicMatching & Auto Crediting
Look up tolerance values, timeout configurations, rejection codesDeposit Rule Reference
Troubleshoot more deposit anomaly scenariosDeposit Troubleshooting
Look up error codes and status codesUnified Error Code Center
Was this page helpful?

内部业务文档 · 仅限 moomoo 团队使用