Skip to content

Withdrawal Approval Guide

About this page

What: What Operations needs to check, how to act, and how to handle common blockers at each step of the three-step withdrawal approval Audience: Operations staff responsible for withdrawal review Prerequisites: Withdrawal Lifecycle -- understand the three-step approval flow first Reading time: 3 minutes Owner: Withdrawal Operations Lead

Key takeaway: Withdrawal approval has three steps (Audit -> Confirm -> Remittance), each covering different dimensions. The most common blocker is method=null at the Confirm step -- the system cannot automatically select a channel, requiring manual selection.


CRM Navigation

FunctionCRM PathDescription
Withdrawal task listWithdrawal Management -> Withdrawal TasksView all withdrawal tasks; filter by step / status / template
Audit pending reviewWithdrawal Management -> Withdrawal Tasks -> Filter step=AuditView only tasks requiring high-risk review
Confirm pendingWithdrawal Management -> Withdrawal Tasks -> Filter step=ConfirmView only tasks requiring channel confirmation
Remittance pendingWithdrawal Management -> Withdrawal Tasks -> Filter step=RemittanceView only tasks requiring transfer execution
Auto-withdrawal settingsWithdrawal Management -> Auto-Withdrawal SettingsView / modify auto_settings (BST bank-securities)

Approval Flow at a Glance

Each withdrawal goes through up to three steps: Audit -> Confirm -> Remittance

StepWhen is manual action neededPermissionTarget SLA
AuditOnly for unusual templates (abnormal withdrawals)PERMISSION_CASH_TASKS_OUT_AUDIT2 hours
ConfirmWhen method = null or bank card info needs confirmationPERMISSION_CASH_TASKS_OUT_CONFIRM30 minutes
RemittanceWhen not all 6 auto-withdrawal conditions are metPERMISSION_CASH_TASKS_OUT_REMIT30 minutes

Most normal withdrawals use the default template (no Audit). When all auto-withdrawal conditions are met for the BST channel, Remittance also executes automatically -- Operations only needs to handle exceptions.

Runbook format

Each approval step below is organized in Runbook format: Trigger -> Checklist -> Action -> Verification.


Daily Withdrawal Processing Timeline

TimeEventDescription
08:30System auto-moves tasks to processingTasks submitted after 11:00 the previous day ("next-day processing") are automatically moved to "Processing"
08:30~11:00Same-day batch processing windowProcess the current batch (previous day 11:01 ~ today 10:59 submissions)
11:00Batch cutoffTasks submitted after 11:00 go into the next-day batch
After 11:00Export transfer filesExport transfer files by withdrawal method
After 11:00Upload to online bankingUpload transfer files to each bank's corporate online banking
After uploadDual-authorization approvalTwo authorized signers approve the transfer separately in online banking (see details below)
After bank confirmationMark as processedAfter confirming the bank has completed the transfer / cheque deposit, mark the day's withdrawal tasks as "Processed" in CRM
15:55BST cutoffBST bank-securities transfer daily cutoff; irreversible
AfternoonCheque depositCheques are deposited at bank branches by staff in the afternoon

Important restrictions

  • Withdrawals are not supported to: third-party platforms, credit cards, or e-wallets (Alipay, WeChat Pay, etc.)
  • Withdrawals may only be sent to the client's own bank account (including joint accounts in the client's name)
Dual-authorization approval instructions

Flow: Transfer file successfully imported into online banking -> First authorized signer approves -> Second authorized signer approves -> Transfer takes effect.

When an authorized signer is absent: Dual authorization is a hard requirement from the bank and cannot be completed by a single person. If an authorized signer is unavailable on a given day:

  1. Arrange a backup authorized signer in advance (must already have online banking approval rights set up with the bank)
  2. If no backup is available, that bank's withdrawal batch will be delayed until the next business day when both authorized signers are present
  3. Urgent withdrawals (e.g., client has a time-sensitive requirement) must be escalated to the Withdrawal Operations Lead for coordination

Step 1: Audit (High-Risk Review)

Trigger

The system defines 6 approval templates; only those with the unusual suffix include Audit:

TemplateApplicable scenarioHas Audit?
defaultNormal withdrawalNo
unusualNormal account, abnormal withdrawalYes
omnibusOM account, normal withdrawalNo
om_unusualOM account, abnormal withdrawalYes
fundFund redemption withdrawalNo
fund_unusualFund redemption, abnormal withdrawalYes

Assessment

  1. User account status -- Any abnormal flags or freeze records
  2. Withdrawal destination -- Is the receiving bank card in the client's own name? Is it in a high-risk region?
  3. Amount reasonableness -- Is it proportionate to account asset size?
  4. Historical behavior -- Any pattern of frequent large withdrawals?

Action

  • Approve -> Click NEXT; the task advances to the Confirm step
  • Reject -> Select a rejection reason; notify the user

Step 2: Confirm (Instruction Confirmation)

All withdrawals pass through this step

The core task at Confirm is to determine "which channel the funds go out through."

Checklist

  1. Bank Card status -- Is the linked bank card valid and not expired?
  2. Withdrawal method -- Is the method field set?
    • Already set (e.g., auto_bs, ebank) -> Verify it is appropriate
    • method = null -> Operations must manually select a channel (this is the most common reason Confirm gets stuck)
  3. BST channel additional validation -- If this is a bank-securities withdrawal, verify the Mandate status is OPEN
    • Mandate is not OPEN -> Do not approve; guide the user to complete bank-securities authorization first

How to select a channel when method = null

When a task's method field is null, Operations must manually select a channel at the Confirm step. Decision logic:

Channel selection quick-reference (the selectable channel list in the CRM Confirm step comes from allSetMethod):

User's Bank CardRecommended ChannelChannel KeyFeeEstimated SLAApplicable Scenario
BOCBOC FPSboc_fpsFree~10 minHKD preferred via FPS, amount < 1M
BOCBOC same-bankbocFreeHoursUSD/CNH, or HKD >= 1M
HSBCHSBC E-BankinghsbcFree~30 minHKD/USD/CNH same-bank transfer
Hang SengHang Seng E-BankinghaseFree~30 minHKD/USD/CNH same-bank transfer
SCBSCB FPSscFree~10 minLocal HKD/CNH < 1M
CGBCGB FPScgb_fps_apiFree~10 minLocal HKD/CNH < 1M
ICBCICBC manualmanualFreeHoursHKD only; manually processed by Operations
CMB / CMBC / AirstarBST Bank-Securitiesauto_bsFreeMinutesRequires Mandate=OPEN; fastest channel
Overseas (BOC coverage)Cross-border T/Ttele_transferBank-dependent2~3 daysCross-border withdrawal
Overseas (EWB)EWB T/TewbBank-dependent2~3 daysCross-border withdrawal (EWB coverage area)
Special casesCHATS/RTGSchats_rtgsHKD/CNY 25 or USD 8HoursLocal cross-bank large-value or virtual bank USD
Special casesChequecheckFree3~5 daysRarely used; when no other channel qualifies

SCB same-bank channel

The CRM channel list shows an "SCB same-bank" option, but this channel is not yet enabled. SCB withdrawals currently go through FPS (sc); do not select SCB same-bank.

Action

  • All confirmed -> Click NEXT; the task advances to the Remittance step
  • Confirm does not execute the transfer -- the actual transfer happens at the Remittance step

Step 3: Remittance (Fund Disbursement)

Automatic vs. Manual

For the BST channel, the system checks 6 conditions. If all are met, it automatically calls startTransfer():

#ConditionWhen not met
1Channel is auto_bs (bank-securities)Non-BST channels can only be processed manually
2Auto-withdrawal switch is enabledCheck the auto_settings table
3Request is within business hoursOff-hours tasks are queued; auto-executed the next business day
4Amount does not exceed limits (Airstar HKD <= 3M / USD <= 500K)Large amounts require manual confirmation
5User's withdrawal count for the day <= 10Exceeding frequency requires manual confirmation
6User's available balance >= withdrawal amountInsufficient balance; notify the user

Manual Trigger Scenarios

When not all conditions are met, Operations confirms there is no risk and clicks "Execute Transfer" to manually trigger startTransfer().

Note: Once executed, funds are frozen and the bank instruction is sent -- the operation is irreversible (can only be reversed after the fact).

Post-Manual-Trigger Verification

After executing startTransfer(), confirm the following:

#Verification ItemExpected Result
1Task statusUpdated to "Completed" or "Processing" (awaiting bank callback)
2Fund freezeWithdrawal amount has been frozen from available balance
3Bank instructionSent to the bank (check task log)
4User notification"Withdrawal in progress" notification sent

Six Withdrawal Methods Runbook

1. Bank-Securities Transfer (BST)

DimensionDescription
Supported banksCMB (HKD/USD), CMBC (HKD/USD)
Cutoff timeSame day 15:55; irreversible
Large-amount rulesHKD >= 3M / USD >= 500K: requires two withdrawal staff to click "Process," and accounting must be notified to monitor account balance
StepsConfirm sufficient balance in the bank-securities account -> Batch process -> Funds are transferred out of the bank-securities account immediately

Large BST withdrawals

When processing large BST withdrawals, two withdrawal staff members must confirm separately, and the accounting team must be notified simultaneously to monitor balance changes in the bank-securities account.

2. Same-Bank Transfer

DimensionDescription
Supported receiving banksICBC (HKD only), BOC, Hang Seng (HASE), HSBC (HKD/USD/CNH)
Verification key pointsClient name and account number must match the account-opening credentials
Information mismatchReject the task with reason; ask the client to provide correct information
Bank returnReject the withdrawal instruction based on the bank's return reason

3. FPS

DimensionDescription
ScopeLocal bank accounts other than ICBC / BOC / Hang Seng / HSBC
Supported currenciesHKD and CNH, amount < 1M
ChannelVia BOC FPS
Verification key pointsClient name and account number must match credentials

4. Cheque

DimensionDescription
ScopeTasks that do not qualify for same-bank transfer or FPS: HKD/CNH >= 1M; non-BOC/Hang Seng/HSBC USD withdrawals
Signature requirementAfter printing, two authorized signers must sign
Deposit methodStaff deposit cheques at respective bank branches in the afternoon
Incorrect client infoReject based on the bank's return reason

5. CHATS / RTGS

DimensionDescription
Virtual bank USDVirtual banks do not support USD cheque deposit -> Use CHATS/RTGS; fee: USD 8
HKD/CNH >= 1MFPS does not support amounts over 1M -> Use CHATS/RTGS; fee: HKD/CNY 25
Client confirmationSystem pop-up informs the client of the fee; client must enter the trading password to confirm

6. Cross-Border Telegraphic Transfer (T/T)

DimensionDescription
ScopeCross-border withdrawal tasks
NSS screeningEvery cross-border withdrawal must pass NSS (Name Screening System) check on the beneficiary name
ActionAfter authentication, click "Batch Process" -> Task enters the cross-border T/T processing queue
VerificationClient name and account number must match credentials

High-Risk Approval Flows

The system imposes additional approval requirements for high-risk clients and high-risk regions.

High-Risk Client Deposits

StepDescription
System processingHigh-risk client deposits are processed automatically by the system (non-blocking)
End-of-day notificationDaily at 16:00, the deposit/withdrawal team is notified via email / Feishu
Operations actionStaff register the entry in the "Deposit/Withdrawal Team Third-Party, Joint, High-Risk Table" (Feishu cloud doc)
Monthly spot checkMonthly spot check of suspicious client transaction records

High-Risk Client Withdrawals

StepDescription
Operations actionStaff first register in the Feishu spreadsheet, then approve the withdrawal
Monthly spot checkMonthly spot check of suspicious client transaction records

High-Risk Region Deposits

A secondary review is required before deposit approval -- proactively contact the client with the following questions:

Client inquiry template

"Dear client, because the bank card you added requires special approval, please answer the following questions:

  1. Why are you depositing / withdrawing from [relevant region]?
  2. Has your address moved to [relevant region]? (If yes, please update your address in CRM)
  3. Is this a one-time transaction, or will you continue to deposit / withdraw from [relevant region]?"

High-Risk Region Withdrawals

StepDescription
Before new bank card approvalThe client must first be asked using the template above
RegistrationRegister in the Feishu spreadsheet
Monthly spot checkSpot check suspicious client transaction records

Handling Unsatisfactory Client Responses

After contacting the client, Operations must assess whether the response is reasonable:

Client ResponseAssessmentNext Step
Clear, reasonable explanationPassRegister and proceed with normal approval
Vague answer but no obvious suspicionUncertainEscalate to Risk Control & Compliance team for a go/no-go decision; Operations must not approve independently
Clearly suspicious (refuses to answer, contradictions)RejectSuspend approval + escalate to Risk Control & Compliance team + document detailed communication

Key principle

Operations staff must not approve high-risk transactions on their own when uncertain. It is better to escalate than to mistakenly approve -- the consequences of a compliance issue far outweigh a processing delay.

Monthly Spot-Check Process

StepDetails
1. Pull dataExtract transaction records for high-risk clients / high-risk regions
2. Line-by-line reviewConfirm client behavior is consistent with declarations; check for abnormal transaction behavior from the high-risk month to the review date; check for abnormal deposit/withdrawal behavior
3. Team reviewTeam members review and document; team lead performs secondary review
4. EscalationIf suspicious activity is found, escalate to the Compliance team

Highly suspicious indicators:

  • Client deposit amount significantly deviates from declared assets
  • Frequent deposits/withdrawals in a short period with no trading activity

Maximum Withdrawable Amount Calculation

The maximum amount a client can withdraw is the minimum of the following three values:

MetricSourceDescription
Real-time net assetsSettlement systemIncludes unsettled amounts
Minimum equity value (Min_ELV)Risk Control systemMinimum net asset value calculated by Risk Control
Maximum credit limitRisk Control systemMaximum credit line for margin accounts

Formula: Max Withdrawable = MIN(Real-time Net Assets, Min_ELV, Max Credit Limit)


Large Withdrawal Thresholds and Service Hours

Airstar BST Large-Amount Thresholds

Airstar withdrawals exceeding the following thresholds follow a non-automatic flow:

CurrencyLarge-Amount Threshold
HKD8M
USD2M
RMB8M

Airstar BST Service Hours (Full-Day Market)

Margin accounts:

Time WindowAuto-WithdrawalLarge AmountEstimated Arrival
Trading day 09:00~10:55Auto--Same day, within 5 min
Trading day 09:00~10:55Non-auto> thresholdNext day before 15:55
Trading day 09:00~10:55Non-auto<= thresholdSame day before 15:55
Other timesAuto--Next day before 09:00
Other timesNon-auto--Next day before 15:55

Non-margin accounts:

Time WindowAuto-WithdrawalLarge AmountEstimated Arrival
Trading day 09:00~15:55Auto--Same day, within 5 min
Trading day 09:00~15:55Non-auto> thresholdNext day before 15:55
Trading day 09:00~15:55Non-auto<= thresholdSame day before 15:55
Trading day 00:00~09:00Auto--Same day before 09:05
Other timesAuto--Next day before 09:00
Other timesNon-auto--Next day before 15:55

Non-trading days

No withdrawals are processed on non-trading days.


Withdrawal Pre-Validation Checklist

The system automatically runs the following validations when a client initiates a withdrawal. If any validation fails, the request is rejected:

Validation ItemError CodeError MessageTrigger Point
Authorization expired140670001Authorization expired; deposit/withdrawal not allowedOn submission
Authorized bank card does not exist140670002Authorized bank card does not exist; deposit/withdrawal not allowedOn submission
Risk Control restriction140670003Risk Control restriction; deposit/withdrawal not allowedOn submission
Account deficit140670004Account has outstanding debt; withdrawal not allowedOn submission
Insufficient balance140670005Securities account balance insufficient; withdrawal not allowedOn submission
Dormant account140670006Dormant account; deposit not allowedOn page load
Account closed140670007Securities account does not exist / has been closedOn page load
NSS incomplete140670008NSS questionnaire not completed; withdrawal not allowedOn confirmation
GDCA incomplete140670009GDCA not completed; deposit/withdrawal not allowedOn confirmation
Insufficient initial deposit140670011Online account user has not yet deposited over 10,000On confirmation
Review rejected140670012Review rejected the withdrawal requestAfter review
System error140670099System error; deposit/withdrawal not allowedAny time
Other business validations (no error codes)
Validation ItemDescription
Dormant accountDormant / inactive account; withdrawal not supported
No linked bank cardBank card does not exist
Bank not verifiedBank account has not been verified (except Airstar BST)
BlacklistedAccount is restricted from withdrawing funds
Mainland China bank cardWithdrawal to Mainland China bank accounts is not supported
A-Share Connect restrictionRMB funds in A-Share Connect accounts can only be withdrawn to Hong Kong bank accounts
Currency mismatchWithdrawal currency does not match the bank account currency

Four scenarios that trigger withdrawal rejection:

  1. Pre-validation failure
  2. Deduction failure (balance changed)
  3. Auto-withdrawal conditions not met; Operations manually rejects
  4. Bank transfer failure

Common Blockers

IssueCauseResolution
Task stuck at Audit for a long timeQueued or overlookedCheck the Risk Control flag reason; review and advance
Confirm cannot proceedmethod = nullManually select a withdrawal channel
Confirm shows Mandate errorBST authorization incomplete / expiredGuide the user to re-authorize
Remittance does not execute automaticallyOne of the 6 conditions is not metConfirm and manually trigger
Bank callback failureBank-side rejection or timeoutCheck the error code; switch channels and retry if necessary
Withdrawal rejection scenariosPre-validation / deduction failure / Operations rejection / bank failureSee the 4 scenarios in Withdrawal Pre-Validation Checklist above

Required Permissions

PermissionPurpose
PERMISSION_CASH_TASKS_OUT_AUDITAudit step review
PERMISSION_CASH_TASKS_OUT_CONFIRMConfirm step confirmation
PERMISSION_CASH_TASKS_OUT_REMITRemittance transfer execution
If requirements change: Modifying the withdrawal approval flow

Code locations:

  • Approval templates: withdraw/src/app/Business/Task.php -> $stepTemplates
  • Step logic: withdraw/src/app/Business/Tasks/Step/{Audit,Confirm,Remittance}.php
  • Auto-withdrawal conditions: withdraw/src/app/Business/Tasks/Step/Remittance.php -> canAutoTransfer()
  • Channel selection: withdraw/src/app/Business/CreatorBase.php -> calcMethod()

Common change scenarios:

  • Add an approval step (e.g., compliance review) -> Create a new Step class implementing the IFStep interface; add it to the corresponding template in $stepTemplates
  • Change channel recommendation when method=null -> Adjust the calcMethod() routing logic or the CRM frontend display
  • Change auto-withdrawal conditions -> Modify the canAutoTransfer() method in Remittance.php
  • Adjust auto_settings limits -> Modify the auto_settings table via the CRM backend, or modify the validation logic in AutoSetting.php

After Reading

I want to...Go to
Understand the full approval flowWithdrawal Lifecycle
Check auto-withdrawal conditions and limitsWithdrawal Rules Handbook
Look up callback codes and status codesWithdrawal Data Dictionary
Troubleshoot withdrawal issuesWithdrawal Troubleshooting
Learn about BST channel bank-side detailsBST Overview
Was this page helpful?

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