Returns and Exchanges
Hyvä POS is in closed beta
Hyvä POS is currently in a closed beta (pilot phase) with a small group of merchants. It is not yet generally available: the App Store release follows the pilot, and features and configuration may still change, possibly in backwards-incompatible ways, before the general release. Want to take part? Sign up at hyva.io/pos.
A customer comes back with a shirt that has a stain. On the free tier you can take the product in, refund the money, or swap it for something else, in one transaction at the register, with no extra returns setup on the Magento side.
Returns at the Register
Look up the original sale (or Magento order), select the lines and quantities coming back, and refund. Every refund is a regular Magento credit memo against the original order, so in-store returns appear in your books, your ERP and your refund reporting like online ones. On the free tier the register creates it through the standard sales API; on PRO it goes through the module's return routes (see PRO returns). Each refund also posts an audit comment on the order: memo number, amount, and the terminal refund ID when a card terminal was involved.
The refund form uses the same terms as the Magento admin:
- Refund Shipping: appears when the order charged shipping. The amount goes into the credit memo's own shipping field, so Magento reverses the shipping tax and the order's shipping-refunded bookkeeping stays correct.
- Adjustment Refund and Adjustment Fee: compensate a customer without returning items, or hold back a restocking fee. An adjustment-only refund with no lines selected works too.
- Email Credit Memo to Customer: a per-refund toggle, off by default, that sends Magento's own credit-memo email, the same one the admin checkbox sends. There is no store-wide setting; the cashier decides per refund.
- Comment: lands on the credit memo and in the order history.
Refund Online, In Store or to Store Credit
Every refund picks a channel. The default follows the order's origin (register sales prefer in-store, web orders prefer online), and the cashier can override either way. A third channel, Store Credit, sits beside the two: it puts the refund on the customer's store credit balance. It needs PRO and a store-credit provider, so on the free tier the channel is shown disabled with a "PRO only" note. On PRO, when the store's credit provider refunds to store credit by default, the refund dialog opens with Store Credit selected.
Refund In Store routes the refund through checkout, so the cashier hands cash back from the drawer or processes the terminal refund with the customer present. The credit memo is created only after settlement, the same moment an order is created for a new sale.
Refund Online creates the credit memo directly:
- A terminal-paid sale refunds through the terminal provider's API first (Mollie or PAY.); the memo is then marked settled so Magento does not refund a second time. A retried refund cannot double-charge: the provider call is idempotent per attempt.
- Any other card sale refunds through the online memo, which the payment provider's Magento module returns to the customer's card automatically.
- Sales recorded with a manual reference are reversed on the standalone terminal by hand, as usual.
On the free tier the refund is capped at what the original sale was paid in money, less what was refunded before. A web order paid partly with store credit, a gift card or reward points cannot be refunded past that figure here; PRO splits such a refund between the money and each credit balance.
If the cashier abandons the flow midway, the order detail offers Finish Refund and Abort Refund, and no memo is created for an unsettled refund. A return parked for a counter refund has the same pair beside Process Return: Resume Refund, or Cancel Refund to choose the settlement again (PRO, module 1.3.0). Reopened through Process Return, the return's items, quantities and resolutions are fixed, as they are in Adobe Commerce once a return is received; the settlement and its adjustments (goodwill, restocking fee, shipping) are what the cashier picks again. Closing an open return from the wizard's Existing Returns list, the cross beside the row, puts back out of stock what the register put in when it received the items, and creates no memo; the return's history names what went out (module 1.3.0; an older module closes the return and leaves the stock in).
Exchanges in One Transaction
Returns and new items share one cart: the returned lines count negative, the new items positive, and the customer pays or receives only the difference. The receipt shows the whole exchange.
Refund Math
Refund amounts are computed from the original order, per item and per VAT rate, after discounts, the same way Magento computed the sale:
- A partial return of two items from a mixed-VAT order produces a credit memo whose tax breakdown matches those two items, so the refund receipt, the credit memo and your VAT return agree.
- A line that carried an allocated cart discount refunds what the customer paid, not the pre-discount price.
- Split-tender originals are reconstructed leg by leg, from the local sale record when it exists and from the order's payment metadata otherwise, so a sale rung on another device refunds to the right tenders.
A returned unit gives its fixed product tax back with the goods. Three bowls at 75.00 with a 0.05 recycling fee refund 75.05 each, and the credit memo Magento writes carries the fee in its own columns; where your store charges VAT on the fee, that comes back too. The refund receipt names the fee under the returned line the way the sale receipt does, following Display Prices in Sales Documents: "Incl. Recycling fee -0.05" under the bowl, or -0.06 where the fee is taxed.
What the Cashier Sees
- Open the sale from Receipts, or the order from Orders, and tap Refund.
- Tick the lines and quantities coming back; add shipping or an adjustment when it applies.
- Pick the channel, Refund In Store or Refund Online, and optionally flip Email Credit Memo to Customer.
- In-store: settle in checkout (cash from the drawer or terminal refund), receipt prints, memo lands in Magento. Online: the memo and the gateway refund are created directly.
Where PRO Takes Over
The free tier covers the refund at the counter. PRO handles returns as a process:
- Staged RMA: request, receive and credit as separate steps, for returns that arrive by post or need inspection before money moves. At the counter the wizard collapses the steps into one.
- A returns queue: open RMAs per location, oldest first, with statuses visible in Magento.
- Refund to store credit: keep the money in the store, including via provider bridges (Aheadworks, Amasty and others).
- Receipt reconstruction: refund a sale rung on another terminal or long since gone from this device, looked up from the central receipt store.
- Automatic closure: an RMA resolves itself the moment its resolution order is placed.
- Return periods (module 1.3.0): the register asks the store's returns provider whether an order can still be returned. An order outside the provider's return period is refused at the register with the period named, for example "This order is outside the store's return period of 15 days and cannot be returned at the register. A return outside the period can be made in the Magento admin." Such a return is made in the Magento admin. The built-in provider sets no return period.
Merchants who run an external RMA module as their main returns system can hide the free tier's standalone refund tile from global settings.
PRO
PRO returns route through the full RMA workflow, refund to store credit, and reconstruct receipts for sales made on other terminals.