Overview
The returns and refunds system allows managers to process customer returns for previously completed sales. The system validates return eligibility, tracks return reasons and conditions, optionally restocks inventory, and maintains complete audit trails.Transaction lookup
Search by receipt barcode or last 8 digits of transaction ID
Manager approval
Optional PIN authorization for returns over configured threshold
Automatic restocking
Good condition items automatically added back to inventory
Return reasons
Track why items are returned with customizable reason codes
Return policies
The returns system is highly configurable via System Settings:| Setting | Description | Default |
|---|---|---|
| Enable Returns | Master switch for returns functionality | false |
| Require Receipt | Customer must have original receipt | true |
| Return Time Limit | Days from sale date returns are accepted | 30 days |
| Manager Approval | All returns require manager PIN | true |
| Approval Amount | Returns over this amount require approval | $50.00 |
| Restock Items | Good condition items added back to inventory | true |
| Allow Defective Returns | Accept damaged/defective items | true |
Processing returns
Access returns screen
From Manager dashboard, click “Returns & Refunds”. Only managers and authorized users can access this screen.
Find original transaction
Enter the transaction ID from the customer’s receipt:Option 1: Scan the barcode on the receipt (full transaction ID)Option 2: Type the last 8 digits from the receiptExample receipt shows:
Transaction: ...12345678Click “Find Transaction” to search.Verify transaction eligibility
The system checks:
- Transaction exists in database
- Sale date is within return time limit
- Transaction hasn’t been fully returned already
- Transaction ID (last 8 digits)
- Sale date and time
- Original cashier name
- Original total amount
- List of purchased items
Select items to return
For each item in the original sale:
- Return Qty: Enter quantity to return (max = original quantity)
- Condition: Select “Good” or “Defective” (if enabled)
- Reason: Choose from configured return reasons
Review refund summary
The green summary box shows:
- Total refund amount
- Number of items selected
- Manager approval requirement (if applicable)
Enter manager PIN (if required)
If manager approval is needed:
- Modal prompts for manager PIN
- Enter 6-digit manager PIN
- Click “Approve Return”
- Invalid PIN rejects the return
Complete return
Click “Process Return” to finalize. The system:
- Validates all return items have reasons
- Verifies manager approval if required
- Creates return record with unique Return ID
- Restocks good condition items (if enabled)
- Logs complete return details
- Displays success confirmation with Return ID
Issue refund to customer
The system displays total refund amount. Process the refund using your store’s payment system (cash, card reversal, store credit, etc.).
The BMS POS system tracks returns but does not integrate with payment processors for automatic refunds. Refund processing must be done separately.
Transaction search
Search by last 8 digits
Receipts display the last 8 characters of the transaction ID:Search by barcode
If receipts include a barcode of the full transaction ID, scanning the barcode performs an exact match search.Transaction not found
If no matching transaction:- Typo in entered digits
- Transaction ID from different store/system
- Receipt is from before system deployment
- Transaction was voided or cancelled
Return eligibility checks
Time limit validation
If return time limit is configured:- Sale date: January 15, 2026
- Today: February 28, 2026
- Days since sale: 44 days
- Result: Return rejected (exceeds 30-day limit)
Duplicate return check
The system prevents returning the same items multiple times:Return items
Quantity validation
For each item, the system tracks:- Original purchase quantity
- Previously returned quantity
- Available to return = original - returned
- Customer bought 5 bottles of water
- Previously returned 2 bottles
- Attempting to return 4 more bottles
- Result: Rejected - only 3 bottles available to return
Item condition
If “Allow Defective Item Returns” is enabled:- Good - Item is resaleable, will be restocked
- Defective - Item is damaged, will NOT be restocked
Return reasons
Configured in System Settings → Return Reasons (comma-separated):Manager approval
When approval is required
Manager PIN is required if:| Setting | Return Amount | Needs Approval |
|---|---|---|
| Require Approval = true | Any amount | Yes |
| Require Approval = false, Threshold = $50 | $35.00 | No |
| Require Approval = false, Threshold = $50 | $75.00 | Yes |
| Require Approval = true, Threshold = $50 | $25.00 | Yes |
PIN validation
Manager PIN check:- Only employees with Role = “Manager” can approve
- PIN must match exactly (hashed comparison)
- Failed PIN attempts are not logged (consider adding for security)
- No rate limiting on PIN attempts (consider adding)
Inventory restocking
Automatic restocking
If “Restock Returned Items” is enabled:- Customer returns 3 bottles of Coca-Cola (good condition)
- Current stock: 15 bottles
- After return: 18 bottles
- Restock flag:
true
- Item condition is “Defective”
- Restock setting is disabled
- Product no longer exists in catalog
Restocking workflow
For defective items or when restocking is disabled:- Return is processed normally
RestockedToInventoryflag =false- Manager manually inspects items
- If resaleable, manually adjust stock in Inventory Management
- If not resaleable, dispose of items and record waste
Return records
Return ID format
RET-20260228-A1B2C3D4
- RET - Return identifier prefix
- 20260228 - Date (YYYYMMDD)
- A1B2C3D4 - Random 8-character hex
Return data structure
API endpoints
| Endpoint | Method | Purpose |
|---|---|---|
/api/sales | GET | Search for original transaction |
/api/returns | GET | List all returns |
/api/returns/{id} | GET | Get single return details |
/api/returns | POST | Process new return |
/api/system-settings | GET | Load return policy configuration |
Process return request
Endpoint:POST /api/returns
returnId
User activity logging
All returns are logged with full details:- Return ID
- Original transaction ID
- Items returned (quantity and names)
- Total refund amount
- Manager who approved (if applicable)
- Employee who processed
Return reports
Returns by date range
Returns by reason
Products most frequently returned
Best practices
For managers
For managers
- Verify customer has original receipt before processing
- Check photo ID for high-value returns
- Inspect returned items for condition before selecting “Good”
- Ask customer for return reason - don’t guess
- Keep manager PIN secure - don’t share with cashiers
- Review return reports weekly to identify trends
- Investigate employees with unusually high return rates
For store owners
For store owners
- Set return time limit based on product types (food vs. electronics)
- Configure manager approval threshold to balance security and convenience
- Regularly review return reasons to identify product issues
- Disable defective returns if you want to inspect all items manually
- Enable automatic restocking only if you trust condition assessments
- Create clear return policy signage based on system settings
For system administrators
For system administrators
- Back up return records - they’re important for accounting
- Test return time limit calculation with your local timezone
- Verify inventory restocking is working correctly after returns
- Monitor for duplicate returns (same transaction returned twice)
- Set up email alerts for high-value returns
- Regularly audit return records against physical inventory counts
Troubleshooting
Returns system not accessible
Returns system not accessible
Symptoms: Returns menu item missing or disabledSolutions:
- Check System Settings → Enable Returns is turned on
- Verify logged-in user has Manager role
- Refresh browser cache after enabling returns
- Check browser console for JavaScript errors
Transaction not found
Transaction not found
Symptoms: “Transaction ID not found” errorSolutions:
- Verify correct last 8 digits from receipt
- Try scanning receipt barcode instead of typing
- Check transaction exists: Manager → Sales History
- Confirm receipt is from this store/system
- Ensure transaction was completed (not voided)
Return period expired error
Return period expired error
Symptoms: “Return period expired. Returns allowed within X days.”Solutions:
- Verify receipt date is within policy window
- Check System Settings → Return Time Limit Days
- Consider policy exception for loyal customers (manual override not implemented)
- Adjust return time limit if too restrictive
Manager PIN rejected
Manager PIN rejected
Symptoms: “Invalid manager PIN” when approving returnSolutions:
- Verify PIN belongs to active Manager account
- Check PIN is exactly 6 digits
- Test manager login to verify PIN works
- Use Reset PIN in Employee Management if forgotten
- Ensure manager account is not deactivated
Items not restocking after return
Items not restocking after return
Symptoms: Stock quantity unchanged after good condition returnSolutions:
- Check System Settings → Restock Returned Items is enabled
- Verify item condition was marked “Good” (not “Defective”)
- Confirm product still exists in inventory
- Check return record
RestockedToInventoryflag in database - Look for errors in API logs during return processing
Cannot return full quantity
Cannot return full quantity
Symptoms: “Only X available to return” when trying to return all itemsSolutions:
- Check if transaction has existing partial returns
- Verify correct transaction selected (not similar transaction)
- Review return history for this transaction ID
- Check database for orphaned return records
- Contact support if data inconsistency detected
Related documentation
- Sales processing - Original transaction workflow
- Employee management - Manager PIN setup
- System settings - Return policy configuration
- User activity - Return audit trail