Refund a sale

Return money to a customer — full or partial — and put the stock back exactly where it came from.

3 min readUpdated 10 September 2026

Refunds return money to a customer AND put the product back into stock. RxShelf handles both sides atomically — never one without the other. Sale stays on the books; the refund is recorded against it with its own reference (REF-000123).

Find the sale, pick items, submit.
Demo coming soon
Find the sale, pick items, submit.

Void vs refund — pick the right one

SituationUse
The wrong sale was rung up and the customer is still at the counter — hasn't left with goodsVoid — reverses the sale entirely, excluded from reports. Owner/manager only.
Customer left with goods and later returns for a refundRefund — sale stays on the books; refund recorded against it.

Void has no time-limit rule but only works on unaltered completed sales (no refunds against them). Refunds have no time limit at all — you can refund a sale from any date.

Refund flow

  1. Find the sale — go to Sales → History, search by reference number (e.g. SAL-0000042) or date. Click the sale to open the detail.
  2. Click Refund.
  3. Pick items and quantities:
    • Full refund — leave all lines selected at their full quantity.
    • Partial refund — untick lines you're keeping, or reduce a line's quantity (e.g. customer bought 20 tablets, returning 10 → change 20 to 10).
  4. Pick refund method — cash, transfer, card, or other. Independent of the original payment method — you decide how to return the money.
  5. Enter a reason — required. Documented reasons make audits easy: "Damaged pack", "Wrong drug dispensed", "Customer changed mind".
  6. Confirm refund.

A refund receipt with its own reference (REF-000123) is generated.

What actually happens

  • Stock is returned to the same batches it came from. RxShelf snapshots the batch of every dispensed unit at sale time, so a refund puts the units back into the exact batches that gave them out. Batch numbers and expiry dates on the shelf reflect reality.
  • Discount is pro-rated. If the original sale had a discount, refunding a unit returns what was actually paid, not the list price. A ₦1,000 product sold at 10% off refunds at ₦900.
  • Cumulative refunds are capped at the total. You can't refund more than the customer paid, across any number of refund events.
  • Sale status updates automatically:
    • All items refunded → sale marked refunded (excluded from reports).
    • Some items refunded → sale marked partially refunded (included at NET).

Who can refund

  • Owner and Manager — by default.
  • Dispenser — no by default. Owner can grant manage_refunds as a per-staff override (see Set per-staff permissions).
  • Accountant — cannot refund. This can't be overridden.

Where refunds show up

  • Sales → History — refunded and partially-refunded sales carry a status badge; open the sale to see the refund history.
  • Sales → Refunds — a dedicated list of every refund with filters (date, who processed).
  • Reports → Sales — refunds are netted against the sale they refund, so all totals (staff performance, product performance, revenue trend) show the true amount that landed. See Run the sales report.

Next steps