Skip to main content

Moneysite — Withdraw

Overview

Halaman Withdraw (Penarikan) adalah tempat dimana pemain dapat melakukan transaksi pencairan balance akun ke rekening bank mereka. Halaman ini menampilkan:

  • Saldo koin pemain saat ini
  • Informasi rekening bank penerima (untuk transfer)
  • Form pengajuan penarikan (opsional, tergantung status akun)
  • Riwayat penarikan (withdrawal history) dengan status setiap transaksi

Screenshot

Moneysite Withdraw Page Withdraw page showing account balance, bank details, and withdrawal history with transaction statuses

Access

  • URL: /withdraw
  • Role required: Authenticated player with verified bank account
  • Navigation path: Click "Withdraw" button in action bar (always visible at top)
  • Direct link: Accessible from any page in the platform

Page Layout

Header Area

Sama seperti home page - tetap menampilkan header dengan account info, action buttons, dan game category navigation.

Main Content Area

Section 1: Page Title

  • Title: "Penarikan" (Withdrawal)
  • Position: Below header

Section 2: Account Information (Summary)

Informasi akun pemain yang relevan dengan withdrawal.

ElementTypeDescription
Saldo Koin SayaDisplayCurrent coin balance (e.g. "2,500.74")
Coin IconImageVisual icon untuk balance
Akun Bank SayaLabel"My Bank Account" heading
Nama BankDisplayBank name (e.g. "BCA")
Nomor RekeningDisplayBank account number (e.g. "1234567788")
Nama RekeningDisplayAccount holder name (e.g. "TESTAFFBHTESTAF")

Notes:

  • Bank info adalah static display (read-only)
  • Data diambil dari profile/account settings
  • User harus verify bank account terlebih dahulu di Profile page

Section 3: Withdrawal Form (If Applicable)

Form untuk mengajukan penarikan dana. Catatan: Sesuai dengan test suite, form ini mungkin tidak selalu visible tergantung status akun.

| Field | Type | ID | Required | Description | |-------|------|----|-----------|-----------|| | Withdraw Amount | Number input | withdraw-amount | ✅ Required | Masukkan jumlah koin yang ingin ditarik | | Withdraw Real Amount | Text display (readonly) | withdraw-real-amount | - | Menampilkan jumlah dalam IDR (auto-calculated) |

Calculation Logic:

  • Formula: Nominal Koin × 1,000 = Nominal Transfer IDR
  • Contoh: 50 koin = IDR 50,000
  • Placeholder menampilkan format: "50,000"

Additional Elements:

  • Coin Balance Popover Button: [id^="headlessui-popover-button-"] - untuk menampilkan available balance
  • Kirim Button: Submit pengajuan withdrawal

Section 4: Withdrawal History

Riwayat penarikan pemain yang telah dibuat, ditampilkan sebagai daftar kartu/record.

Each Withdrawal Record Contains:

FieldLabelTypeDescription
Destination BankTujuanBadge + TextBank icon dan nama bank penerima (e.g. BCA)
Account NumberNomorDisplayBank account number, formatted (e.g. 123-4567-788)
Account NameNamaDisplayAccount holder name (e.g. TESTAFFBHTESTAF)
StatusStatusBadgeCurrent status of withdrawal
DateWaktuDisplayDate dan time of withdrawal request (e.g. 25-11-2025 09:36:40)
Transfer AmountTotal penarikanDisplayAmount in IDR (e.g. IDR1,000,000)
Coin AmountNominal KoinDisplayAmount in coins (e.g. 1,000)

Withdrawal Statuses

StatusLabel (Indonesian)DescriptionAktifUser Action Possible
DIMINTADIMINTARequested - Waiting for admin approval🟡 PendingMay be canceled (depends on system)
PENDINGPENDINGProcessing - In queue for transfer🟡 PendingWaiting for completion
DISETUJUIDISETUJUIApproved - Ready to process🟡 PendingWaiting for bank
DIKIRIMDIKIRIMSent - Transfer in progress🟡 ProcessingWaiting for bank confirmation
SELESAISELESAICompleted - Successfully transferred✅ DoneTransaction complete
DIHENTIKANDIHENTIKANCancelled/Stopped - Withdrawn or failed❌ FailedTransaction cancelled
DITOLAKDITOLAKRejected - Withdrawal denied❌ FailedAdmin rejected

Features

1. View Account & Coin Balance

Status: Display mode (read-only)

Displayed Information:

  • Current coin balance at top
  • Bank account details (name, account number, account holder)
  • These are pre-verified from player profile

2. Submit Withdrawal Request

Status: Form submission

User Flow:

  1. View withdrawal page
  2. Current balance displayed
  3. Verify bank information is correct
  4. Enter amount in coins in withdraw-amount field
  5. System auto-calculates IDR amount (shown in withdraw-real-amount placeholder)
  6. OR click popover button to auto-fill with full balance
  7. Click "Kirim" button to submit
  8. Success toast: "Permintaan withdraw berhasil" (Withdrawal request successful)
  9. Withdrawal record appears at top of history list with status "DIMINTA"

Validation:

  • Amount must be > 0
  • Amount must not exceed available balance
  • Amount must be >= minimum withdrawal (varies per system)
  • Bank account must be verified

Processing:

  • After submission, withdrawal enters approval queue
  • Admin reviews and approves/ rejects
  • Upon approval, funds transferred to bank account
  • Transfer usually completes within 1-24 hours
  • Player notified via in-game notification or email

3. View Withdrawal History

Status: Informational/Display

History Display:

  • Shows all withdrawal requests (approved, processed, rejected, cancelled)
  • Sorted by date (most recent first)
  • Each record shows full details of the request/transaction

Information Shown:

  • Destination bank and account details
  • Amount requested (coins and IDR)
  • Timestamp
  • Current status

4. Fast Input / Auto-Fill Balance

Status: Convenience feature

Mechanism:

  • Popover button shows current available balance
  • Clicking might auto-fill the withdrawal amount with full balance
  • User can then submit directly without manual entry

Test Reference:

  • In tests, this is detected via [id^="headlessui-popover-button-"]
  • Allows rapid "withdraw all" action

Withdrawal Limits & Rules

Amount Limits

LimitValueNotes
MinimumSystem-defined (typically IDR 10,000 / 10 coins)May vary by account type
MaximumSystem-definedMay vary by account type or daily limit
Daily LimitSystem-definedTotal withdrawals per day
Monthly LimitSystem-definedTotal withdrawals per month

Account Requirements

  • ✅ Bank account verified in profile
  • ✅ Player account verified/validated
  • ✅ No pending disputes or issues
  • ✅ Account not flagged/suspended

Processing Rules

  • Withdrawals processed during business hours (typically M-F 9AM-5PM)
  • Weekends/holidays may delay processing
  • Large amounts may require additional verification
  • Minimum processing time: 1-2 hours (best case)
  • Maximum processing time: 24-48 hours (typical)

UI Elements Reference

ComponentTypeLocationDescriptionInteractive
Page TitleHeadingTop"Penarikan"No
Saldo Koin SayaDisplayAccount InfoCurrent balance with iconClick to potentially open form
Akun Bank SayaHeadingAccount Info"My Bank Account" sectionNo
Bank DetailsDisplayAccount InfoName, account number, account holderNo
Withdraw Amount InputNumber inputForm (optional)Id: withdraw-amountType to enter amount
Withdraw Real AmountDisplay (readonly)Form (optional)Id: withdraw-real-amount, shows IDR placeholderRead-only
Balance PopoverButtonForm (optional)Id starts with headlessui-popover-button-Click to show/fill balance
Kirim ButtonButtonForm footerSubmit withdrawalClick to submit
Withdrawal RecordCardHistory sectionEach past withdrawalClick for details (if expandable)
Record - DestinationBadgeWithdrawal recordBank icon + nameDisplay
Record - NumberTextWithdrawal recordFormatted account numberDisplay
Record - NameTextWithdrawal recordAccount holder nameDisplay
Record - StatusBadgeWithdrawal recordCurrent status (colored)Display
Record - DateTextWithdrawal recordFormatted date/timeDisplay
Record - Amount IDRTextWithdrawal recordTotal withdrawal in IDRDisplay
Record - Amount CoinsTextWithdrawal recordTotal withdrawal in coinsDisplay

Validation Rules

Withdrawal Amount

RuleError MessageNotes
Required"Silakan masukkan nominal"Amount is mandatory
> 0"Nominal tidak boleh 0"Must be greater than zero
Numeric only"Nominal harus angka"Only numbers allowed
>= Min"Nominal di bawah minimum"Below system minimum
<= Max"Nominal melebihi maksimum"Exceeds system maximum
<= Available Balance"Saldo tidak cukup"Cannot exceed account balance

Account/Verification

RuleError MessageNotes
Bank verified"Rekening bank belum diverifikasi"Must verify in profile first
Account active"Akun terkunci/suspend"Account must be in good standing
No disputes"Ada transaksi pending"Cannot withdraw if pending issues

Data Displayed

Withdrawal History

Source: User withdrawal transactions from API (e.g. /api/withdrawals or /api/player/withdrawals)

Data Points:

  • Tujuan (Destination): Bank details
  • Nomor (Number): Account number
  • Nama (Name): Account holder name
  • Status: Transaction status
  • Waktu (Time): Timestamp
  • Total penarikan: Amount in IDR
  • Nominal Koin: Amount in coins

Order: Most recent first (descending by date) Refresh: Loads on page init, may auto-refresh periodically

Coin Balance

Source: Player wallet/balance API

Display: Large prominent number (e.g. 2,500.74) Refresh: Real-time or periodic update

Bank Account Info

Source: Player profile/KYC data

Display: Static fields showing verified bank details Refresh: Only updates when player changes bank account in profile


Behavior & Interactions

On Page Load

  1. Fetch player's current balance
  2. Fetch verified bank account info
  3. Fetch withdrawal history
  4. Display all information

Form Visibility

  • Form may not appear if:
    • Bank account not verified
    • Account suspended/flagged
    • KYC not complete
    • Other account restrictions

On Form Submission

  1. User enters amount and clicks "Kirim"
  2. Client-side validation performed
  3. If valid, submit to API /api/withdrawals or similar
  4. If valid on server:
    • Withdrawal created with status "DIMINTA"
    • Toast notification: "Permintaan withdraw berhasil"
    • New record appears in history at top
    • Form cleared or page refreshed
  5. If error:
    • Error toast displayed
    • Form retains data for correction

Status Updates

  • Status may update in real-time or require page refresh
  • DIMINTA → DISETUJUI → DIKIRIM → SELESAI (typical flow)
  • Or DIMINTA → DITOLAK / DIHENTIKAN (error flow)

On Balance Click (Popover)

  • Clicking balance-related popover shows current available amount
  • May auto-fill withdrawal form with full balance
  • Allows "withdraw all" quick action

Processing Timeline

Typical Withdrawal Timeline

StepStatusTimeWho
1. Request submittedDIMINTAT+0 minPlayer
2. Admin reviewDIMINTAT+5-30 minAdmin
3. ApprovedDISETUJUIT+30-60 minAdmin
4. Bank transfer initiatedDIKIRIMT+1-2 hoursSystem
5. Bank processesDIKIRIMT+1-24 hoursBank
6. Funds receivedSELESAIT+24-48 hoursBank/Player

Fast Track (if available)

  • Some accounts may have instant or faster withdrawals
  • VIP players might have priority processing

Error Cases & Edge Cases

Insufficient Balance

  • Error: "Saldo koin tidak cukup untuk penarikan"
  • Solution: Deposit more funds or reduce withdrawal amount

Unverified Bank Account

  • Error: "Rekening bank belum diverifikasi"
  • Solution: Go to Profile > Verify bank account

Account Restricted

  • Error: "Akun sementara dikunci, tidak bisa melakukan penarikan"
  • Reasons: Dispute, fraud check, KYC review
  • Solution: Contact support

Withdrawal Limit Reached

  • Error: "Batas penarikan harian telah tercapai"
  • Solution: Wait until next day or contact support

Duplicate/Rapid Requests

  • System may prevent multiple withdrawals in short time
  • Error: "Silakan tunggu sebelum melakukan penarikan lagi"
  • Solution: Wait before submitting another request

Bank Account Mismatch

  • If account details don't match verified account, transfer may fail
  • Status becomes DIHENTIKAN (Stopped)
  • Player must contact support or re-verify account

Processing Delay

  • If withdrawal not completed within expected timeframe:
    • Check status regularly
    • Contact support for update
    • Bank may have delays or issues
    • Funds may be returned to account

Mobile Responsiveness

  • Form fields and buttons optimized for touch
  • Responsive layout adapts to small screens
  • History records display in mobile-friendly card format
  • Popover button works with touch input
  • Bank details clearly readable on mobile

Security & Compliance

  • Verified Bank Account Required: Prevents unauthorized transfers
  • Amount Limits: Daily/monthly limits prevent abuse
  • Transaction Logging: All withdrawals logged and auditable
  • Approval Workflow: Admin review before processing
  • TLS Encryption: Secure data transmission
  • KYC/AML Compliance: Player verification required
  • Fraud Prevention: System monitors for suspicious patterns

  • Profile: /profile - Verify/manage bank account
  • Deposit: /deposit - Add funds to account
  • Transaction History: May be available elsewhere to view all transactions

Notes

  • Withdrawal Order: FIFO (First-in, First-out) - withdrawals processed in order received
  • Processing Days: Typically Monday-Friday only (banks closed weekends/holidays)
  • Bank Details: Must match verified account - mismatches cause transfers to fail
  • Refund Policy: If withdrawal fails, funds returned to account within 1-3 business days
  • Fees: No visible fees shown to player; may be deducted on backend
  • Minimum Withdrawal: Typically 10 coins (IDR 10,000) but verify per platform
  • Maximum Withdrawal: May be limited by account type, daily/monthly cap, or bank limits
  • Conversion Rate: Fixed 1 Koin = IDR 1,000
  • Language: Interface in Bahasa Indonesia
  • Currency: All transactions in Indonesian Rupiah (IDR)
  • Time Zone: Server may use specific time zone for daily limit resets

Test-Based Workflow Reference

Based on test suite (widhdraw.spec.ts):

Basic Withdraw Flow

1. Login as player with 'usrwd01' account
2. Navigate to /withdraw
3. Fill withdraw-amount input with coins (e.g. '50')
4. Verify withdraw-real-amount shows calculated IDR (e.g. '50,000')
5. Click Kirim button
6. Expect toast: 'Permintaan withdraw berhasil'
7. Stay on /withdraw page
8. Verify new record shows:
- status: 'DIMINTA'
- nominal_koin: '50'
- total_penarikan: 'IDR 50,000'

Fast Fill Withdraw Flow

1. Login as player with 'usrwd02' account
2. Navigate to /withdraw
3. Get balance from popover button element
4. DO NOT manually fill amount
5. Click Kirim with pre-filled value
6. Expect toast: 'Permintaan withdraw berhasil'
7. Verify withdrawal created with full balance amount

This documents the expected behavior based on the test implementation.