v2.15.0
v2.15.0 — Channel returns and the honest ATP strip
New - **Channel Returns** (Warehouse Operations): receive marketplace removals and channel customer returns that have no local sales order.
New
- Channel Returns (Warehouse Operations): receive marketplace removals and channel customer returns that have no local sales order. One document, two types — Removal carries expected lines and refuses over-receipt with a named error; Customer return scans and classifies each unit as it arrives. Every classify event keeps the scanned barcode as witness, and a relabeled FBA return resolves to its SKU through the alternate barcode. A DISCONTINUED product refuses replenishment but never refuses goods standing on the dock.
- Case labels on receipts are remainder-aware: 55 pieces at 54 per case reads
1 CASE + 1 PCS, never1 cs.
Fixed
- The ATP strip reads the backend’s own availability fields instead of re-deriving them: chips show
pick available/bulk available/allocated(no minus), and a helper names where the allocation sits. Kit products no longer render their derived ATP as pick-face stock.
Migration
- One, additive (
20260830120000_mp_returns_01_channel_return_orders): channel return tables and the shared disposition writer. Code rollback to v2.14.1 is safe without touching the database.