Oracle Retail15 min readBy Priyanshu Pandey

Return to Vendor (RTV): Workflow and Ledger Impact

A comprehensive guide to Return to Vendor (RTV) processes in Oracle RMS. Learn how RTV_HEAD orchestrates returning damaged or unsold goods to suppliers, how RTV_QTY locks inventory, and how Tran Code 24 impacts the stock ledger.

Phase 5 · Inventory Management · Oracle RMS Series

Return to Vendor (RTV): Workflow & Ledger Impact

When goods arrive damaged, fail quality inspections, or simply don't sell, retailers return them to the supplier for credit. Learn how Oracle RMS manages the RTV lifecycle, locks inventory in the RTV_QTY bucket, and handles financial claims via Tran Code 24.

15 min read📅August 8, 2026✍️Priyanshu Pandey📚Oracle RMS Series

Retailers do not absorb the cost of defective merchandise. If a supplier ships shattered glass or expired food, the retailer issues a Return to Vendor (RTV). This process reverses the supply chain: shipping goods out of the warehouse and demanding financial compensation from the vendor.

Oracle RMS tracks this entire lifecycle—from the initial request to the final shipment—ensuring that inventory is properly locked and financial ledgers accurately reflect the vendor credit.



1. The RTV Lifecycle

An RTV operates like a Purchase Order in reverse.

  1. Input (Worksheet): An RTV is created in RMS (or initiated from SIM on the store floor). It specifies the items, quantities, and the reason for return (e.g., Damaged, Overstock, Quality Issue).
  2. Approved: The retailer internally approves the return. At this point, the retailer often contacts the vendor for a Return Merchandise Authorization (RMA) number.
  3. Shipped: The warehouse or store packs the goods and ships them back to the vendor via a carrier.
  4. Closed: The physical lifecycle is complete, and the financial claim is generated.

2. Inventory Impact: RTV_QTY

When an RTV is approved, the goods are still physically inside the retailer's building. However, they absolutely cannot be sold or transferred.

RMS handles this by incrementing the RTV_QTY column on ITEM_LOC_SOH.

  • STOCK_ON_HAND remains unchanged.
  • RTV_QTY increases.
  • Because RTV_QTY is an outbound reserved bucket, the Net Inventory Position drops. This correctly signals to the replenishment engine that these goods are gone, and new goods should be ordered to replace them.

When the goods are finally shipped out the door, both STOCK_ON_HAND and RTV_QTY are decreased simultaneously.


3. Financial Impact: Tran Code 24

When the RTV is shipped, RMS writes a TRAN_DATA record with Tran Code 24 (Return to Vendor).

The Debit Memo

A Tran Code 24 doesn't just lower inventory valuation—it represents money the vendor owes the retailer. RMS extracts these Tran Code 24 records and sends them to the financials system (like Oracle Retail Invoice Matching - ReIM). ReIM generates a Debit Memo, which automatically deducts the cost of the returned goods from the vendor's next payment.

ℹ️

Restocking Fees

If a vendor charges a 10% restocking fee for accepting a return, RMS handles this via RTV Cost Components. The debit memo sent to the vendor will be for the value of the goods minus the restocking fee.


4. Core Tables Reference

RTV_HEAD
The header record containing the supplier, location, RMA number, and status.
RTV_DETAIL
The line items being returned, including quantities and reason codes.
INV_STATUS_QTY
Used if goods are placed in a 'Trouble' status prior to formal RTV creation.

RTV Header (RTV_HEAD)

ColumnTypeDescription
RTV_ORDER_NO
NUMBER(10)The unique identifier for the return.
SUPPLIER
NUMBER(10)The vendor receiving the goods.
LOC
NUMBER(10)The retailer location shipping the goods.
STATUS
VARCHAR2(2)'I' (Input), 'A' (Approved), 'S' (Shipped), 'C' (Closed).
RMA_NO
VARCHAR2(30)The vendor's authorization code.
RESTOCK_FEE_IND
VARCHAR2(1)Indicates if a restocking fee applies ('Y' or 'N').

5. SQL Deep Dives

Auditing Stale Approved RTVs

This query finds RTVs that were approved more than 30 days ago but have never been physically shipped. This represents cash tied up in defective inventory sitting in a backroom.

Find un-shipped RTVs
sql
SELECT 
    rh.rtv_order_no,
    rh.supplier,
    rh.loc,
    rh.status,
    rh.created_date,
    SUM(rd.rtv_qty) AS total_units_to_return,
    SUM(rd.rtv_qty * ils.unit_cost) AS total_financial_value
FROM rtv_head rh
JOIN rtv_detail rd ON rh.rtv_order_no = rd.rtv_order_no
JOIN item_loc_soh ils ON rd.item = ils.item AND rh.loc = ils.loc
WHERE rh.status = 'A' -- Approved but not shipped
  AND rh.created_date < SYSDATE - 30
GROUP BY 
    rh.rtv_order_no, 
    rh.supplier, 
    rh.loc, 
    rh.status, 
    rh.created_date
ORDER BY total_financial_value DESC;

6. Official Oracle Resources

For further reading, consult the official Oracle documentation:

RetailCoder
All systems operational
v1.0 Live

RC:OMS

Multi-channel order management with double-entry inventory ledger. Amazon, Flipkart, Shopify, WooCommerce — one source of truth.

Launch demo →
v1.0 Live

RC:Storefront

Self-hosted headless e-commerce. Your server, your data, zero transaction fees. Native RC:OMS inventory sync.

Visit Storefront →
Pipeline

RC:Pulse

AI-powered retail analytics and demand forecasting — built natively on top of your RC:OMS and Storefront data.

Request early access →
Built in India 🇮🇳  ·  Architected by Priyanshu PandeyTalk to an engineer →