One row per return (grain return_id). Carries disposition (restock/repair/recycle/scrap), reason (∈ {damaged, wrong_item, late_delivery, no_longer_needed, quality_defect}), cycle_time_days, units_returned, return_value, the parent order_id/site_id, and client_id. This is the per-return table the returns_rate metric aggregates over; read rows to name which returns and why. Client-scoped via the client_account_manager row policy on client_id. reason is a controlled enum, not free text — return narratives are not exposed here (that stays out of the structured layer entirely).
- highReading a return count as a return rate
These are raw return rows — a rate needs a shipped-order denominator. Use the returns_rate metric for the rate.
- highAssuming full visibility
Row policy scopes to the caller's client_id.
- mediumTreating disposition as reason
disposition is what happened to the goods (restock/scrap…); reason is why they came back (damaged/wrong_item/late_delivery/ no_longer_needed/quality_defect) — different columns.
- “Which returns for this client were scrapped last month?”
- “List the longest-to-process returns.”
- “Show damaged-goods returns by site.”