Switch the register to Return mode, verify against the original receipt so quantities can't be over-returned, and refund in cash or back to the card. Exchanges and trade-ins run inside the same transaction.
Returns are where a sloppy process costs real money, so PHP Point Of Sale makes the safe path the easy one: look up the original sale, return only what was actually bought, and refund the way the customer paid. A return is a type of sale internally, so the screen works exactly like the Sales screen — same cart, same customer panel, same price and payment sections — with totals shown as negative numbers because money is leaving the store. Exchanges and trade-ins ride along in the same transaction, so nothing needs a second ticket.
Everything on this page is gated by the Process Returns permission on the Sales module: employees without it don't even see Return in the register's mode dropdown. See permissions and templates.
Start a return
There are three ways in, and they end up on the same Return screen:
- Switch modes. On the Sales screen, open the register mode dropdown next to the item search bar (it shows Sale) and choose Return. If a sale is already in progress the register asks "Convert all items in sale to return?" — the cart is kept and its quantities flip negative, for the customer who mentions the return after you've started ringing. (Switching back asks "Convert all items in return to sale?".)
- Scan the old receipt. Scan the barcode on a printed receipt into the item search bar; the register asks whether you want to EDIT or RETURN that sale, and choosing Return loads the sale's items as a return.
- From the receipt screen. Look up the sale (... menu → Lookup Receipt) and press the Return button on the receipt — the whole sale loads as a return.
Then add or adjust the items coming back exactly as you would on a sale — scan, search, or use the item grid — check the (negative) totals, record the refund in the payment section and press Complete Sale.
Verified returns: pick the items from the original receipt
The safest return starts from the receipt, and the register has a dedicated flow for it. Choose Verified Return — it lives in the register mode dropdown and in the 3-dot (...) menu:
- In the Verified Return window, scan or type the receipt number into Scan or enter receipt # and press Find Receipt.
- Don't have the receipt? Use Search Receipts instead: enter the Item purchased, the Customer, or both, and matching receipts are listed with date, customer and total (the newest matches first). Press Select on the right one. At least one search field is required.
- The receipt's lines appear with four columns: Sold (quantity originally bought), Returned (already returned on previous visits), Remaining (still returnable), and Return Qty for what is coming back today. Enter the quantities — anything above the remaining amount is rejected with "Return quantity exceeds the remaining returnable quantity".
- Check the Estimated Refund preview, then press Load Return. The chosen lines land on the Return screen tied to the original sale, and a green banner shows "Verified return for receipt POS ..." (with your own sale prefix).
Because the return is tied to the source receipt, the system enforces more than quantities: the return price cannot exceed the original receipt price for an item, the refund cannot exceed what is still refundable, and an item that was never on the receipt is refused ("... is not on the original receipt").
To make receipt-based returns the only kind your store accepts, enable Store Config → Returns → Require Verified Returns (returns must be picked from a receipt). Switching the register to Return then opens the Verified Return window automatically, and until a receipt is verified the Return screen carries an amber banner — "This store requires verified returns. Items must be picked from the original receipt." — with a Find Receipt button that reopens the window. Once the receipt is loaded, the green "Verified return for receipt ..." banner replaces it; free-form returns stay blocked throughout.
Put your return policy into the register
All of these live in Store Config → Returns and default to off (Return Reasons defaults to empty):
- Return Reasons — a list you define (damaged, wrong size, changed mind...). With reasons defined, completing a return offers a Return Reason selector, so reports explain why goods came back.
- Require customer for Return — the return cannot complete without a customer attached, keeping customer purchase history and loyalty accurate.
- Require Receipt for Return — "Receipt is required for return": the return must reference an original sale.
- Require Verified Returns (returns must be picked from a receipt) — the strictest option, described above.
- Prompt for Sale ID on return — entering Return mode pops "Please Enter or Scan the Sale ID (POS XXX)", nudging clerks to find the original sale without hard-requiring it.
Refund the customer
The payment section on a return records money going out. Choose the refund method — cash, check, gift card, store account credit, or card — enter the amount and Add Payment, then Complete Sale. Refunds can be partial: returning one item from a large sale refunds just that line's value. The register will not let you refund more than the sale total.
With an integrated card processor, the refund can go back to the customer's card, and voiding or refunding the original charge is handled from the card transaction — see taking card payments and PHP POS Payments. If you later void/delete a completed card return, the register offers Void and Cancel Return so the card side is reversed too.
Refunding to Store Account credits the customer's account instead of handing back cash — see store accounts and credit. Refunding a gift card purchase can go back onto a gift card — see gift cards.
Edit, cancel or delete a return
Returns are edited exactly like sales:
- Before completing — press Cancel Sale above the customer panel to abandon the return.
- After completing — open the ... menu, choose Show last sale receipt (or Lookup Receipt with the Sale ID), press Edit on the receipt, confirm the warning that edits replace the current record, adjust, and press Complete Sale again.
- Void/Delete — while editing, press Void/Delete to remove the return from your records and correct inventory. Requires the Delete Sale permission.
Exchanges: one transaction, both directions
An exchange mixes returned and purchased items in a single transaction — return the medium, sell the large, settle only the difference, and get one receipt with inventory adjusted on both sides.
- Open the 3-dot (...) menu on the Sales screen and choose Exchange. Confirm the prompt ("You are about to start an Exchange. Items returned will be exchanged against new items.").
- In the exchange window, attach the Customer (or quick-add a new one). The chosen customer shows in a green confirmation bar with a Clear Selection link for picking someone else.
- Under Items returned from customer, search your inventory — or type a brand-new item name — pick the Category, set the Exchange Price and quantity, and press Add Item for each returned good. An item that isn't in your inventory yet is created on the spot in the chosen category (typing a new category name creates the category too), priced at the exchange price, so it can be resold later.
- Under Customer Buys From Us, scan or search the regular POS items the customer is taking.
- Press Apply Exchange. Both sides land in the cart — returned lines negative, purchased lines positive — and you take payment (or give a refund) for the net difference as usual. To do it in one step, the dropdown arrow beside Apply Exchange offers Complete Sale, which applies the exchange and completes the sale at once.
With Store Config → Taxes → Do not apply tax to items exchanged enabled, the returned side carries no tax and the register notes "Taxes disabled for Exchanges".
Trade-ins
Trade In (also in the 3-dot menu) opens the same two-sided window retitled Trade In — the price field becomes Trade In Price and the apply button Apply Trade In — tuned for taking customer goods into stock as part of a purchase, common for equipment, instruments and used-goods stores:
- Choose Trade In and confirm the prompt ("Items returned will be traded in and new items can be added to the sale.").
- Enter the goods the customer is handing over with their Trade In Price — you can pick an existing item or type a new item name and category, which creates the item so it can be resold.
- Add what the customer is buying, then press Apply Trade In (or use the dropdown arrow's Complete Sale to apply and complete in one step).
Where your jurisdiction taxes only the difference, enable Store Config → Taxes → Do not apply tax to items traded in; the register shows "Taxes disabled for Trade In" and the trade-in credit reduces the taxable amount. Switching between Exchange and Trade In mid-flow asks for confirmation, and Exit Mode leaves either mode.
What happens to inventory
- A completed return puts the returned quantity back into stock at your location automatically.
- A returned serialized item's serial number is re-activated so the exact unit becomes sellable again — unless Store Config → Application Settings → Do NOT add serial back to item when doing a return is enabled, for stores that inspect before restocking. See serialized items and special item types.
- Goods that come back unsellable shouldn't quietly re-enter stock. Every return line's details carry a Number Damaged/Not return to stock field (as labeled in the app): enter how many of the returned units are unsellable, and when the return completes those units are kept out of sellable stock and written to the damaged items log with the reason "Return" — the same log the damaged-stock workflow feeds. See stock levels, adjustments and damaged items.
- Returns appear as negative sales in your reporting, with items-returned counts in sales and closeout reports.
Common questions
Why doesn't my employee see the Return option? The Process Returns permission is missing on their Sales module. Without it the Return mode, negative quantities and negative price edits are all blocked.
How do I stop over-returning — someone returning three when they bought two? Use verified returns. The verified-return flow tracks Sold, Returned and Remaining per receipt line and rejects anything above the remaining quantity, even across multiple visits. Enable Require Verified Returns to make it mandatory.
Can I do a return without the original receipt? Yes, unless your store enables Require Receipt for Return or Require Verified Returns. In the verified-return window you can also find the receipt by searching the item purchased and the customer name.
How do I refund back onto the customer's credit card? Complete the return with Credit as the (negative) payment through your integrated processor, or void/refund the original card transaction — see taking card payments.
Can the refund price differ from what the customer paid? On a free-form return you control the line prices (permission-gated like any price edit). On a verified return the price is capped at the original receipt price for each item.
How do exchanges affect the money owed? Only the difference changes hands: if the returned goods are worth more than the new ones, the register shows a refund due; if less, an amount due. One payment or refund settles the whole exchange.
We only exchange, never refund cash. Can the register enforce that? Refund the return to Store Account or a gift card instead of cash, and make it policy to start exchanges from the Exchange flow so both directions live in one transaction. There is no single switch that blocks cash refunds outright.
Where do I see all returns for the day? Open the 3-dot menu → Sales for the day for today's transactions, or run the sales reports filtered to returns — see sales and closeout reports.
Comments
0 comments
Please sign in to leave a comment.