Skip to content

Returns & Refunds

The Returns page (/point-of-sale/returns) provides a dedicated interface for processing product returns and customer refunds.

Returns Page

┌──────────────────────────────────────────────────────────┐
│ Search | Date range | Status filter | Refresh │
├──────────────────────────────────────────────────────────┤
│ Returns table │
│ - Return # | Date | Original order | Customer | Amount │
│ - Status | Items returned | Refund method │
│ - Actions: View detail | Print receipt │
└──────────────────────────────────────────────────────────┘

Navigate to Orders page (/point-of-sale/orders):

  1. Use Completed tab to find paid orders
  2. Search by order number, customer name, or date range
  3. Find the order you want to return
  4. Click Return/Refund icon in row actions

Orders List

Return Modal

Modal displays:

  • Order details (number, date, total)
  • Line items with checkboxes
  • Customer information
  • Return policy validation

⚠️ Customer requirement: Returns require a linked customer.

If order is walk-in (no customer):

  • Customer assignment panel appears
  • Search by name, phone, or email
  • Select customer to continue
  • Required for refund processing (store credit, loyalty points)

Items Selected

Item selection:

  • ✅ Catalog items: Show checkbox (can be returned)
  • ⚠️ Non-catalog items: Show warning (cannot be returned)
  • Select all: Check master checkbox at top
  • Partial returns: Check only specific items

Refund preview (updates in real-time):

Refund Preview
───────────────
Merchandise $45.00
Tax $ 3.38
───────────────
Total $48.38

Form Filled

Required fields:

  1. Refund reason (dropdown):

    • Damaged or defective product
    • Wrong item received
    • Not as described
    • Customer changed mind
    • Other (custom text input)
  2. Refund method (select one):

    MethodDescriptionWhen to use
    WalletE-wallet refund (MoMo, ZaloPay)Customer has digital wallet
    ManualCash refund at counterImmediate cash return
    OriginalRefund to original paymentCard reversal, same method
  3. Customer note (optional):

    • Additional details about return
    • Appears on return receipt

Click “Process Return” button:

  • Button shows spinner during processing
  • Server validates return policy
  • Creates return order (negative totals)
  • Processes refund via payment gateway
  • Adjusts inventory (adds items back)

Success indicators:

  • ✅ Green toast: “Return processed successfully”
  • Modal closes automatically
  • Orders list refreshes
  • Return appears in Returns page

Immediate effects:

  • Refund issued to customer (wallet/card/cash)
  • Inventory updated (if stock tracking enabled)
  • Customer account updated (loyalty points adjusted)
  • Return receipt printed (if auto-print enabled)

Return window:

  • Store-configurable (default: 30 days)
  • Orders older than limit are blocked
  • Error message shows: “Return window expired. This order is 45 days old (limit: 30 days)”

Auto-approve (POS only):

  • Returns immediately approve + refund
  • No manager approval needed
  • Instant customer refund at counter

Blocked returns:

  • ❌ Order already fully refunded
  • ❌ Return window expired
  • ❌ Order not completed (draft/cancelled)
  • ❌ Quick return disabled in store settings

After processing, returns are visible in:

  1. Returns page (/point-of-sale/returns) — Dedicated returns table
  2. Orders page — Original order shows “Refunded” status badge
  3. Customer account — Return history, adjusted points

The Returns page shows all processed returns:

Returns Page

ColumnContent
Return #Return order number (barcode format)
DateReturn processed timestamp
Original orderLink to original sale order
CustomerCustomer name (or ”—” for walk-in)
ItemsCount of returned items (e.g., “3 items”)
AmountRefund amount (negative, e.g., ”-$48.38”)
MethodRefund method (Wallet, Manual, Original)
StatusReturn processing status

Search:

  • Return number, customer name, original order number
  • Debounced 350ms

Date range:

  • Today, Yesterday, Last 7 days, Last 30 days
  • Custom date picker

Status filter:

  • All / Completed / Pending / Cancelled
StatusColorMeaning
CompletedGreenReturn processed, refund issued
PendingYellowAwaiting manager approval
CancelledRedReturn cancelled/voided
  • View detail — Opens return receipt preview modal
  • Print receipt — Sends return receipt to configured printer
  • View original order — Navigates to original order in Orders page

Return receipts show:

  • Return order number
  • Original order reference
  • Returned items with quantities
  • Refund amounts (merchandise + tax)
  • Refund method
  • Customer signature line (if applicable)

When to use: Customer paid with digital wallet (MoMo, ZaloPay, VNPay)

How it works:

  • Refund goes to customer’s wallet account
  • Processed through payment gateway
  • Usually instant (within minutes)
  • Customer receives notification from wallet app

Requirements:

  • Internet connection (online only)
  • Customer’s wallet account active
  • Original payment was via wallet

When to use: Quick cash refund at counter

How it works:

  • Cashier hands cash to customer immediately
  • No payment gateway involved
  • Works offline (Desktop app)
  • Fastest refund method

Use cases:

  • Original payment was cash
  • Customer prefers cash over card refund
  • Card terminal offline/unavailable

When to use: Refund to same payment method as original order

How it works:

  • Cash → Cash: Manual cash refund
  • Card → Card: Card terminal processes reversal
  • Wallet → Wallet: Gateway refunds to same wallet
  • Mixed payment: Proportional refund to each method

Card refunds:

  • Requires card terminal connected
  • Customer may need to present card (or tap/chip)
  • Takes 3-7 business days to appear on statement
  • Terminal shows “Refund approved” confirmation

Important: Card refunds cannot be processed offline (need terminal + network)

When return is processed:

  • Stock tracking enabled: Returned items added back to inventory
  • Stock tracking disabled: No inventory adjustment
  • Inventory log records return transaction
ActionRequired permission
Process returnpos write
View returnspos read
Void returnsettings read (manager)

Returns can be processed offline:

  • Return goes to local outbox
  • Auto-syncs when connection restored
  • Appears in Returns table immediately (local-first)
  • Card refunds require online connection (terminal needs network)
  • Store credit requires online (customer account must be updated)
  • Cash/exchange returns work fully offline

Error: “Return window expired”

Cause: Order older than store’s return policy limit (e.g., 30 days)

Solution:

  • Check order date in Orders list
  • Contact manager to override policy (if applicable)
  • Offer store credit or exchange as alternative

Error: “Customer required for return”

Cause: Order has no linked customer

Solution:

  1. Use customer assignment panel in return modal
  2. Search by name, phone, or email
  3. Select customer to continue

Error: “Cannot return non-catalog items”

Cause: Item not linked to catalog (custom line item)

Solution:

  • Only catalog-linked items can be returned
  • Contact manager for manual adjustment

Symptom: Terminal shows error during refund

Causes:

  • Terminal disconnected from Desktop bridge
  • Card declined by bank
  • Network timeout
  • Wrong card presented

Solution:

  1. Check terminal connection in Settings → Card Terminal
  2. Retry transaction with same card
  3. Try different card
  4. Offer cash or wallet refund as alternative
  5. If repeated failure, contact support

Cause 1: Date range filter

Solution: Expand date range to include return date

Cause 2: Offline and not synced (Desktop)

Solution:

  • Check outbox banner for pending sync
  • Wait for auto-sync (every 5 minutes)
  • Click manual sync button

Cause 3: Browser cache

Solution: Click Refresh button or press F5

Cause: Stock tracking disabled for product

Solution:

  • Check product settings in Items page
  • Enable “Track stock” if needed
  • Contact manager for manual inventory adjustment

What to do:

  1. Go to Orders page
  2. Search by customer name or date
  3. Find order in table
  4. Verify with customer (items, date, amount)
  5. Process return normally

No receipt required — system has full order history.

Example: Customer bought 5 items, returns 2

Steps:

  1. Open return modal
  2. Check only the 2 items being returned (uncheck others)
  3. Refund preview shows partial amount
  4. Process return

Original order remains valid for other items.

Steps:

  1. Process return normally
  2. Select reason: “Damaged or defective product”
  3. Add details in customer note (e.g., “Screen cracked on arrival”)
  4. Refund via customer’s preferred method
  5. Tag returned product for inspection/disposal

Steps:

  1. Process return for wrong item
  2. Select reason: “Wrong item received”
  3. Issue refund
  4. Start new sale for correct item
  5. Customer pays only if price difference

Tip: Use Manual refund for immediate cash, then ring up correct item.