Every stocked line was graded twice: once for the cash a disciplined exit would return, and once for the gross profit not booked when demand arrived and stock didn't — weighted by what the customer actually did next: waited, substituted, or bought elsewhere. This is not a service-level report. Lines are ranked by net cash and margin impact.
Only 1 of 144 stocked lines carries a healthy cover position. The median stocked line holds roughly 12–17 months of demand. Eleven leather & accessories SKUs alone hold $389.1K of excess cost — 54% of the total surplus — led by the Black Leather Jacket (item 106): 552 units on hand against 90 sold in twelve months, 73.6 months of cover.
Grading scale. A ≤ 6 months cover (healthy) · B 6–12 (trim replenishment, sells through at ~95% of cost) · C 12–24 (markdown program, ~70%) · D > 24 (clearance / channel liquidation, ~50%) · E zero sales in 12 months (liquidate or write down, ~30%).
| Gr | Item (internal id) | Category | On hand | Value $ | Mo. cover | Sold 12m | GM % | Excess units | Excess cost $ | Cash release $ | Write-down $ |
|---|---|---|---|---|---|---|---|---|---|---|---|
| D | Black Leather Jacket106 | Leather & Acc. | 552 | 110,400 | 73.6 | 90 | 28.7 | 487 | 97,400 | 48,700 | 48,700 |
| D | Black Leather Valise107 | Leather & Acc. | 584 | 75,336 | 79.6 | 88 | 62.9 | 539 | 69,531 | 34,766 | 34,766 |
| D | Brown Leather Satchel108 | Leather & Acc. | 209 | 62,698 | 35.3 | 71 | 22.3 | 174 | 52,048 | 26,024 | 26,024 |
| D | Gold Watch w/ Leather Strap114 | Leather & Acc. | 270 | 59,400 | 44.4 | 73 | 37.4 | 233 | 51,150 | 25,575 | 25,575 |
| D | Brown Leather Valise109 | Leather & Acc. | 283 | 45,280 | 39.0 | 87 | 36.2 | 240 | 38,320 | 19,160 | 19,160 |
| D | Canvas Backpack111 | Leather & Acc. | 328 | 40,016 | 80.3 | 49 | 49.9 | 304 | 37,027 | 18,514 | 18,514 |
| D | Indigo Relaxed Fit117 | Apparel | 525 | 36,750 | 94.0 | 67 | 48.5 | 492 | 34,405 | 17,203 | 17,203 |
| D | Olive Utility Pack120 | Leather & Acc. | 276 | 27,600 | 48.7 | 68 | 48.1 | 242 | 24,200 | 12,100 | 12,100 |
| C | The Bindel Jacket130 | Apparel | 71 | 19,880 | 12.7 | 67 | 10.0 | 37 | 10,220 | 7,154 | — |
| B | SER_Box Spring283 | Mattress | 63 | 18,900 | 9.9 | 76 | 40.0 | 25 | 7,500 | 7,125 | — |
| B | Patriarch Luxury Firm T B238 | Mattress | 35 | 14,000 | 11.7 | 36 | 54.9 | 17 | 6,800 | 6,460 | — |
| C | Patriarch Luxury Firm T M236 | Mattress | 36 | 14,400 | 17.3 | 25 | 54.8 | 23 | 9,000 | 6,300 | — |
| C | Estes Park Chair28 | Furniture | 54 | 16,605 | 21.6 | 30 | 2.7 | 29 | 8,918 | 6,242 | — |
| B | Patriarch Luxury Firm F B239 | Mattress | 32 | 12,800 | 12.0 | 32 | 54.9 | 15 | 6,000 | 5,700 | — |
| C | Estes Park Queen Poster Headboard35 | Furniture | 45 | 15,210 | 12.3 | 44 | 48.6 | 23 | 7,774 | 5,442 | — |
| B | Estes Park Chest34 | Furniture | 48 | 16,512 | 10.9 | 53 | 48.9 | 17 | 5,676 | 5,392 | — |
| B | Silver Watch w/ Leather Strap123 | Leather & Acc. | 69 | 13,800 | 10.3 | 80 | 36.5 | 27 | 5,400 | 5,130 | — |
| C | Ascend Sofa Table39 | Furniture | 57 | 10,745 | 18.0 | 38 | 48.5 | 38 | 7,163 | 5,014 | — |
| D | Black Leather Belt105 | Leather & Acc. | 300 | 11,100 | 51.4 | 70 | 18.4 | 265 | 9,805 | 4,903 | 4,903 |
| C | Patriarch Luxury Firm F M237 | Mattress | 32 | 12,800 | 12.4 | 31 | 54.8 | 17 | 6,600 | 4,620 | — |
| C | Skinny Tinted124 | Apparel | 111 | 8,880 | 22.6 | 59 | 45.5 | 82 | 6,520 | 4,564 | — |
| B | Estes Park Sofa Table33 | Furniture | 53 | 10,150 | 11.8 | 54 | 48.5 | 25 | 4,788 | 4,548 | — |
| B | Estes Park Rect Cocktail Table30 | Furniture | 49 | 9,531 | 10.7 | 55 | 38.5 | 22 | 4,182 | 3,973 | — |
| B | Estes Park End Table - Chairside32 | Furniture | 50 | 8,400 | 11.8 | 51 | 51.2 | 25 | 4,116 | 3,910 | — |
| C | Estes Park End Table31 | Furniture | 59 | 10,443 | 12.9 | 55 | 48.6 | 32 | 5,576 | 3,903 | — |
| B | Estes Park Ottoman29 | Furniture | 48 | 13,848 | 9.8 | 59 | 48.8 | 14 | 3,895 | 3,700 | — |
| B | Baja Round End Table43 | Furniture | 51 | 8,747 | 10.4 | 59 | 48.5 | 22 | 3,687 | 3,503 | — |
| C | Ascend Round Cocktail Table38 | Furniture | 49 | 9,433 | 12.3 | 48 | 48.5 | 25 | 4,813 | 3,369 | — |
| C | Ascend Round End Table40 | Furniture | 52 | 8,710 | 12.5 | 50 | 48.5 | 27 | 4,523 | 3,166 | — |
| B | Contour Rhapsody Breeze T B232 | Mattress | 40 | 12,000 | 8.3 | 58 | 38.2 | 11 | 3,300 | 3,135 | — |
| Remaining 114 graded lines (mostly B/C beauty, bath & body, apparel colorways; E-grade electronics & components) | 175,319 | 116,586 | — | ||||||||
| Total — 144 lines | 715,656 | 425,881 | 249,723 | ||||||||
Grades D and E carry $249.7K of implied write-down if exited at assumed recovery rates. Eighteen E-grade lines ($39.9K at cost) recorded zero invoiced sales in twelve months — including the ASUS PG348Q monitor ($9.1K), 2-Layer Copper stock ($7.8K), BLT001/CAP001 components ($10.5K), and Solder Mask inventory ($3.9K). One anomaly worth a separate look: Estes Park Chair (28) is selling at a 2.7% gross margin — effectively at cost — while holding 21.6 months of supply.
Behavior classification, from evidence. Order-to-ship latency was measured for every item that shipped in twelve months (ItemShip lines joined back to their sales orders via createdfrom). The median item ships same-day; genuine waits exist on only four items — the configurator assemblies AS_MBK001 / AS_SAF001 (42–45 days average, and customers demonstrably wait), Posh Collection Eye Shadow, and one add-on line. Where a line's demand was closed unshipped, that demand is treated as bought elsewhere — realized loss, not risk. The item-substitution field (custcol_scm_itemsub_original_item) is unused in this account, so substitution could not be observed directly; the walk-probability curve absorbs it.
| Line age (open, unshipped) | P(customer walks) | Rationale |
|---|---|---|
| ≤ 14 days | 10% | Normal fulfillment window for a same-day-ship business |
| 15–30 days | 25% | Beyond norm; patience decaying |
| 31–60 days | 45% | Well past expectations, no wait precedent |
| > 60 days | 70% | Order effectively abandoned |
| Proven-wait items | × 0.5 | Halved — history shows these customers wait (made-to-order assemblies) |
| Item (internal id) | Category | Behavior signal | Unshipped qty | GP on open lines $ | Avg age (d) | P(walk) | Expected GP loss $ |
|---|---|---|---|---|---|---|---|
| Estes Park Chest34 | Furniture | At risk — aged, no wait history | 5 | 1,617 | 82 | 0.70 | 1,132 |
| Estes Park Nightstand36 | Furniture | At risk — aged, no wait history | 13 | 2,497 | 40 | 0.45 | 1,124 |
| Samsung Odyssey G5 32"19790 | IT / demo | Likely waiting — young line | 8 | 3,432 | 15 | 0.25 | 858 |
| AS_SAF001 assembly17317 | Configurator | Waited — proven 42d avg, ships | 41 | 14,431 | 14 | 0.05 | 722 |
| Estes Park Chair28 | Furniture | At risk — aged, no wait history | 22 | 1,418 | 34 | 0.45 | 638 |
| Estes Park Upholstered Couch37 | Furniture | At risk — aged, no wait history | 5 | 884 | 82 | 0.70 | 619 |
| AS_MBK001 assembly17316 | Configurator | Waited — proven 45d avg, ships | 10 | 10,093 | 3 | 0.05 | 505 |
| Canvas Backpack111 | Leather & Acc. | Likely waiting — young line | 15 | 1,920 | 15 | 0.25 | 480 |
| Olive Utility Pack120 | Leather & Acc. | Likely waiting — young line | 20 | 1,900 | 15 | 0.25 | 475 |
| Ascend Round Cocktail Table38 | Furniture | Likely waiting — young line | 6 | 1,875 | 19 | 0.25 | 469 |
| AS_Keyboard assembly17759 | Electronics | Likely waiting — young line | 10 | 1,645 | 25 | 0.25 | 411 |
| Estes Park Rect Cocktail Table30 | Furniture | Likely waiting — young line | 4 | 1,462 | 19 | 0.25 | 366 |
| Posh Collection Lipstick MA/PL/PU17726–28 | Beauty | At risk — 103 days aged | 60 | 943 | 103 | 0.70 | 660 |
| All other open lines (36 items) | — | — | — | — | — | — | 4,129 |
| Expected GP loss — behavior-weighted | 12,588 | ||||||
$15.2K of demand was closed unshipped in the last twelve months — customers who stopped waiting. It concentrates in special-order/add-on lines (items 17741 $4.0K, 17745 $8.0K, 17740 $2.1K) whose lines carry no estimated GP in NetSuite (estgrossprofit = 0), so it is reported as revenue foregone, not margin. It is excluded from the $12.6K expected-loss figure to avoid double counting; treat it as a floor on last year's actual stockout cost.
The flattery trap this analysis avoids: a conventional fill-rate metric would score this account ~97% and hide that two-thirds of the weighted loss sits in just eight furniture and configurator SKUs — while awarding a "failure" to gift-wrap add-ons that carry zero margin. Weighted by GP and behavior, the picture inverts.
Four items appear on both lists — simultaneously overstocked and failing demand: Canvas Backpack (111), Olive Utility Pack (120), Black Leather Valise (107) and Estes Park Chair (28). Stock exists but isn't where or how demand needs it (328 backpacks on hand, 15 unshipped on an open order). That is an allocation/fulfillment defect, not a buying defect — it costs nothing to fix and is the fastest win in this report.
| Parameter | Value | Rationale & sensitivity |
|---|---|---|
| Target cover | 6 months of trailing 12-mo unit sales | Generous for a same-day-ship retailer (industry norm 2–3 mo). A 3-mo target raises excess to ~$800K; results are robust to this choice. |
| Excess valuation | Average cost per unit (on-hand value ÷ qty from inventoryitemlocations.onhandvaluemli) | Matches the balance-sheet carrying value. |
| Recovery rates | B 95% · C 70% · D 50% · E 30% | Conservative liquidation-channel norms; grade D/E items retain brand value (leather goods) so 50%/30% may understate recovery. |
| Carrying cost | 20% per annum on excess cost | Capital + storage + shrink + obsolescence; mid-range of the standard 18–25% band. |
| Committed stock | Excluded from excess (netted out first) | Committed units are spoken for; grading them would overstate surplus. |
| Stockout GP | Per-line estgrossprofit, prorated to the unshipped fraction; fallback to item's realized 12-mo margin | Uses NetSuite's own line-level margin estimate at order entry. |
| Walk probability | Age curve 10/25/45/70%, halved for proven-wait items, floored at 70% for high-cancel items | Calibrated to this account's measured behavior: median ship latency ≈ 0 days; only 4 items have wait precedent. |
| Backorders | Priced at unit GP × 50% | Only ~$42 of exposure; immaterial. |
| Sales window | Invoices + cash sales, 12 mo to 26 Aug 2026, elimination subsidiary (id 4) excluded | CashSale volume exceeds CustInvc in this account; both included. |
| Zero-cost anomalies | IT-* items (avg cost 0) graded but release value = 0 | Recently loaded demo/IT gear with no cost basis — flagged, not monetized. |
estgrossprofit is NetSuite's order-entry estimate; actual margin varies with costing method and timing.SELECT i.id AS item_id, i.itemid AS sku, ROUND(MAX(i.averagecost), 2) AS avg_cost, SUM(iil.quantityonhand) AS qty_on_hand, ROUND(SUM(iil.onhandvaluemli), 2) AS on_hand_value, SUM(NVL(iil.quantitycommitted,0)) AS qty_committed, SUM(NVL(iil.quantitybackordered,0)) AS qty_backordered, SUM(NVL(iil.quantityonorder,0)) AS qty_on_order FROM item i JOIN inventoryitemlocations iil ON iil.item = i.id WHERE i.itemtype IN ('InvtPart', 'Assembly') GROUP BY i.id, i.itemid HAVING SUM(iil.quantityonhand) <> 0 OR SUM(iil.quantitybackordered) <> 0 ORDER BY SUM(iil.onhandvaluemli) DESC
SELECT tl.item AS item_id, SUM(ABS(tl.quantity)) AS qty_sold_12m, ROUND(SUM(ABS(tl.netamount)), 2) AS rev_12m, ROUND(SUM(ABS(NVL(tl.costestimate,0))), 2) AS cogs_12m, COUNT(DISTINCT t.id) AS order_count_12m, TO_CHAR(MAX(t.trandate), 'YYYY-MM-DD') AS last_sale FROM transaction t JOIN transactionline tl ON tl.transaction = t.id WHERE t.type IN ('CustInvc', 'CashSale') AND tl.mainline = 'F' AND tl.taxline = 'F' AND tl.item IS NOT NULL AND tl.subsidiary <> 4 -- exclude elimination sub AND t.trandate >= ADD_MONTHS(TRUNC(SYSDATE), -12) GROUP BY tl.item
SELECT tl.item AS item_id, SUM(ABS(tl.quantity) - NVL(tl.quantityshiprecv,0)) AS open_unshipped_qty, ROUND(SUM(NVL(tl.estgrossprofit,0) * (ABS(tl.quantity) - NVL(tl.quantityshiprecv,0)) / NULLIF(ABS(tl.quantity),0)), 2) AS open_unshipped_gp, ROUND(AVG(TRUNC(SYSDATE) - TRUNC(t.trandate)), 0) AS avg_line_age_days, MAX(TRUNC(SYSDATE) - TRUNC(t.trandate)) AS max_line_age_days, COUNT(*) AS open_lines FROM transaction t JOIN transactionline tl ON tl.transaction = t.id WHERE t.type = 'SalesOrd' AND tl.mainline = 'F' AND tl.taxline = 'F' AND tl.item IS NOT NULL AND tl.subsidiary <> 4 AND tl.isclosed = 'F' AND t.status <> 'G' AND ABS(tl.quantity) - NVL(tl.quantityshiprecv,0) > 0 GROUP BY tl.item
SELECT tl.item AS item_id, COUNT(*) AS closed_lines, SUM(ABS(tl.quantity) - NVL(tl.quantityshiprecv,0)) AS qty_cancelled, ROUND(SUM(ABS(NVL(tl.foreignamount,0)) * (ABS(tl.quantity) - NVL(tl.quantityshiprecv,0)) / NULLIF(ABS(tl.quantity),0)), 2) AS cancelled_amount FROM transaction t JOIN transactionline tl ON tl.transaction = t.id WHERE t.type = 'SalesOrd' AND tl.mainline = 'F' AND tl.taxline = 'F' AND tl.item IS NOT NULL AND tl.subsidiary <> 4 AND (tl.isclosed = 'T' OR t.status = 'G') AND ABS(tl.quantity) - NVL(tl.quantityshiprecv,0) > 0 AND t.trandate >= ADD_MONTHS(TRUNC(SYSDATE), -12) GROUP BY tl.item
SELECT tls.item AS item_id, COUNT(*) AS ship_lines, ROUND(AVG(TRUNC(ts.trandate) - TRUNC(so.trandate)), 1) AS avg_days_to_ship, COUNT(CASE WHEN TRUNC(ts.trandate) - TRUNC(so.trandate) > 21 THEN 1 END) AS lines_over_21d FROM transaction ts JOIN transactionline tls ON tls.transaction = ts.id JOIN transaction so ON tls.createdfrom = so.id WHERE ts.type = 'ItemShip' AND tls.item IS NOT NULL AND tls.mainline = 'F' AND so.type = 'SalesOrd' AND ts.trandate >= ADD_MONTHS(TRUNC(SYSDATE), -12) GROUP BY tls.item
months_cover = qty_on_hand / (qty_sold_12m / 12)
excess_units = MAX(qty_on_hand - qty_committed - qty_sold_12m/2, 0) -- 6-mo target
excess_cost = excess_units * (on_hand_value / qty_on_hand)
grade = A: cover ≤ 6 | B: ≤ 12 | C: ≤ 24 | D: > 24 | E: zero 12-mo sales
cash_release = excess_cost * recovery{B:.95, C:.70, D:.50, E:.30}
carry_drag = excess_cost * 20%/yr
p_walk(age) = 10% (≤14d) | 25% (≤30d) | 45% (≤60d) | 70% (>60d)
× 0.5 if item has proven wait history (measured via Q5)
exp_gp_loss = open_unshipped_gp * p_walk
realized_loss = cancelled demand (Q4), reported separately — no double count
inventoryitemlocations; margins per NetSuite line-level estimates. Recovery rates, carrying cost, and walk probabilities are stated assumptions — directional planning figures, not audited valuations. Write-downs require controller review before booking. Prepared by Sonar AI; verify grade assignments with merchandising before executing clearance.