Returns, RMA, and Reverse Logistics

Returns are the forward process run backwards, and every step is harder. Reverse logistics typically costs 2–3× per unit versus forward, and returns rates run from 5% in B2B distribution to 30–40% in online apparel.

The flow

Return request ──▶ RMA authorisation ──▶ Return label / collection
                                              │
                          Goods receipt into returns stock (blocked)
                                              │
                                        Inspection
                                              │
              ┌──────────────┬────────────────┼───────────────┬──────────────┐
              ▼              ▼                ▼               ▼              ▼
          Restock as     Restock as        Repair /        Return to      Scrap
          unrestricted   B-grade           refurbish       vendor
              │              │                │               │              │
              └──────────────┴────────────────┴───────────────┴──────────────┘
                                              │
                                       Credit memo / refund / replacement

RMA — Return Material Authorisation

Never accept an unannounced return. The RMA is the control:

rma(
  id, rma_number, customer_id,
  original_order_id, original_invoice_id, original_delivery_id,
  reason_code, reason_text,
  requested_at, authorised_by, authorised_at,
  expires_at,                       -- returns must arrive within N days
  resolution_type,                  -- CREDIT | REPLACEMENT | REPAIR | REFUND
  restocking_fee_pct,
  freight_paid_by,                  -- CUSTOMER | US
  status
)
rma_line(rma_id, line, material_id, batch, serial_number,
         quantity_authorised, quantity_received, quantity_accepted,
         disposition, condition_on_arrival)

The RMA number goes on the return label. Goods arriving without one go to an “unidentified returns” area and someone has to work out where they came from — expensive, and a leak point for credit fraud.

Reason codes — the most valuable field

Reason codes must be mandatory and specific:

Category Codes
Product defect Manufacturing fault, DOA, failed within warranty, damaged in transit
Wrong item Wrong item picked, wrong item ordered, wrong size/colour
Quantity Over-shipped, short-shipped and re-sent
Customer changed mind No longer needed, found cheaper, ordered by mistake
Expiry / quality Near expiry, out of specification, contamination
Commercial Overstock return, end-of-season, contractual return right
Recall Safety recall, regulatory withdrawal

Why it matters:

  • Defect codes → quality management and supplier claims
  • Wrong item picked → warehouse process problem
  • Damaged in transit → carrier claim and packaging redesign
  • Changed mind → product description or sizing problem on the website
  • Recall → traceability and regulatory reporting

A returns dashboard by reason code, product, and channel is one of the highest-value reports you can build. It routinely finds a single SKU or a single product photo generating a disproportionate share of returns.

Disposition and its accounting

Disposition Inventory Accounting
Restock unrestricted Back to sellable stock at original cost Reverse COGS, reverse revenue via credit memo
Restock as B-grade New material/valuation type at written-down value Partial COGS reversal + write-down
Repair then restock To WIP, repair cost added Repair cost to expense or capitalised, depending on policy
Return to vendor Out of your stock Vendor credit claim; watch that you actually receive it
Scrap Written off Full loss of remaining value
Donate Written off Possible tax treatment
Sell via liquidation Moved to clearance stock at NRV Write-down to NRV

The classic bug: restocking a returned item at the current moving average price instead of the original cost. If the price moved, you’ve silently created a valuation gain or loss. Always restock at the cost the item left with, which means you must have stored it on the outbound movement.

The credit memo

Credit memo request → approval → credit memo → AR reduction

  Revenue (or sales returns)   Dr 1,000     ← contra-revenue is preferable
  Output tax                   Dr   150
    Accounts receivable           Cr 1,150

And if restocked:
  Inventory                    Dr   620
    Cost of goods sold            Cr   620

Notes:

  • Post to a sales returns contra-revenue account rather than debiting revenue directly. Gross sales and returns are then both visible, and returns rate is measurable from the ledger.
  • Credit memo requests should require approval — this is a control point. Anyone who can issue an unapproved credit memo can give away money.
  • Reference the original invoice. Tax authorities require it, and in e-invoicing regimes the credit note must carry the original document’s reference and often its clearance ID.
  • Restocking fees are separate revenue, not a reduction of the credit.

Warranty vs goodwill vs commercial returns

Type Cost lands on Approval
Warranty claim Warranty provision (already accrued) Warranty validation against installed base
Goodwill Marketing/customer service expense Manager approval, tracked separately
Contractual return right Sales returns provision Automatic within the window
Defect / supplier fault Recovered from the supplier Supplier claim raised

Keeping these separate is what makes returns cost analysable. Lumping all of it into “sales returns” hides where the money is going.

Provisions for returns

Under IFRS 15, if customers have a right of return, you may only recognise revenue for what you expect to keep:

Sales in the period                       1,000,000
Expected return rate (historical)              8%
  Revenue recognised                        920,000
  Refund liability                           80,000
  Return asset (inventory expected back)     48,000   ← at cost, less handling
  COGS recognised                            552,000

The return asset is a real balance-sheet line, not a memo. It’s remeasured each period as actual return experience updates. For online retail with 30%+ return rates, this is material and audited.

Supplier returns (return to vendor)

Return delivery to vendor → vendor credit note expected → AP reduction

Track: RTV authorisation number from the vendor,
       shipped date, credit received date, credit amount vs expected.

Unclaimed vendor credits are a real leak. Goods go back, nobody chases the credit, and it’s written off a year later. An ageing report of “returned to vendor, credit not received” is a genuinely valuable small build.

Recalls

A recall is a mass return driven by traceability. See Serial, Lot and Traceability.

Requirements the returns process must support:

  • Bulk RMA creation from a trace result
  • Free return shipping and no restocking fee
  • Mandatory scrap or quarantine disposition, never restock
  • Regulatory reporting on quantities recovered vs shipped
  • Recovery rate tracking (regulators ask what percentage you got back)

E-commerce returns specifics

  • Self-service returns portal — the customer creates the RMA, prints the label
  • Instant refunds before the goods arrive (a fraud-risk trade-off some retailers accept for conversion)
  • Returns fraud — wardrobing, empty-box returns, swapping a broken unit for a new one. Serial number capture at outbound is the defence
  • Try-before-you-buy — the “order” is provisional; only the kept items become a real sale
  • Return-to-store for omnichannel — the return happens at a store, the sale happened online. Two different entities’ books in some structures

Metrics

Metric Meaning
Return rate by SKU/category/channel/reason Where the problem is
Recovery rate Value recovered / original value
Return cycle time Request to credit issued — drives customer satisfaction
Restock rate % returned to sellable stock
Cost per return Freight + handling + inspection + write-down
Repeat returner % Fraud and abuse signal
Credit issued vs authorised Control gap

Developer rules

  1. RMA required before receipt. Unauthorised returns go to a quarantine location and a worklist.
  2. Reason codes mandatory and specific. Free text is not a reason code.
  3. Restock at the original cost, which means the outbound movement must have stored it.
  4. Returned goods go to blocked/inspection stock first, never straight to sellable.
  5. Credit memos reference the original invoice — required for tax and e-invoicing.
  6. Credit memo issuance is an approval-controlled action with a value threshold.
  7. Serial capture on outbound is what makes return fraud detectable.
  8. Track vendor credits owed to you with an ageing report.
  9. Returns provision if customers have return rights — it’s a revenue recognition requirement, not optional.

Next