TD3016323 · Consolidated (ex-Elimination) · Companion to Inventory Two-Way Grading, 26 Aug 2026
Prepared 26 August 2026 · Demand: trailing 12 mo · Supplier performance: trailing 24 mo
The replenishment review that recommends almost no buying.
7 order signals. 7 cancellations. 2 transfers that beat purchases.
Demand forecast, reorder point, and safety stock were recalculated for all 130 active stocked lines from actual order history and measured supplier behavior — buffers sized against the supplier actually causing the variability, and against holding cost versus margin at risk per line, not a blanket service target. The result inverts the usual review: cash flows out of purchasing this cycle. Net PO effect is −$1,126.
130
Lines recalculated
Forecast + σ + ROP + SS each, from 12 monthly demand buckets
7
Genuine order signals
All configurator components/assemblies with live backorders
$4,364
Open PO value to cancel
7 inbound lines landing on already-overstocked SKUs
56
Lines suppressed
Grade C/D/E overstock — no replenishment until cover normalizes
Remaining 67 lines: position above recalculated reorder point — no action. Draft POs below total $3,238; cancellations release $4,364.
Ten of eleven suppliers deliver in 3 days, on time, every time — for them, safety stock above a week of demand is pure waste. The entire lead-time risk in this business lives in two suppliers and one un-vendored assembly family. Buffer those, and only those.
01Supplier reality — measured, not assumed
PO→receipt latency from 7,719 receipt lines over 24 months; promise performance from line-level expected receipt dates.
| Supplier (id) | Receipt lines | Quoted lead (d) |
Measured lead (d) | σ lead (d) |
Received vs promise | Reliability class |
| The Apparel Co Inc. 1130 | 1,792 | 3 | 3 | ~1 | on time | Metronomic |
| Mac Oca & Co. 1140 | 1,477 | 3 | 3 | ~1 | on time | Metronomic |
| Generation N 1129 | 1,238 | 3 | 3 | ~2 | 5 open lines past promise | Reliable — watch |
| Bedline 1133 | 985 | 3 | 3 | ~1 | on time¹ | Metronomic |
| Broyhill 1131 | 784 | 3 | 3 | ~1 | on time | Metronomic |
| Lotion Co 1135 | 739 | 3 | 3 | ~1 | on time | Metronomic |
| Health & Beauty Supplies 1138 | 346 | 3 | 3 | ~1 | on time | Metronomic |
| Hestra / Betty Black / Coleman 1127 · 1137 · 1128 | 207 | 3 | 3 | ~1 | on time | Metronomic |
| Flexsteel 1132 | 20 | 6.1 | 6 | ~5 | max quoted 37d | Variable — thin data |
| Johnson Supply 3867 | 60 | 24.3 | ~25 | 14 | 7 of 9 open lines past promise | Erratic |
| Crown Equipment Corp. 357 | 39 | —² | ~40 | ~30 | received avg +36.8d past promise, max +92d | Erratic |
¹ One −31d artifact (receipt dated before PO) excluded as a data-entry error. ² Crown's promise dates average 29.8d before the PO date — promise data unusable; measured receipt latency used instead.
The buffer policy this measurement dictates
A blanket service-level policy would size every line's buffer identically per demand volatility. The measurement says otherwise: for the ten metronomic suppliers (99.5% of receipt volume), lead-time variability contributes almost nothing — safety stock is driven by demand noise across a 3-day window, i.e., a handful of units. For Johnson Supply and Crown Equipment, lead-time variance dominates the buffer equation (σLT of 14 and 30 days respectively). Those two suppliers feed exactly the component families now showing 35–40-unit backorders. The stockouts and the erratic suppliers are the same story.
02Recalculated buffers — the model and its inputs
Per line: forecast from 12 monthly buckets (zero-months included), σ from the same buckets, service level from unit economics, buffer from the supplier's measured σLT.
Service level is not a policy constant here — it is priced per line. Each line's critical ratio CR = Cu / (Cu + Co), where Cu = unit gross profit at risk (from realized 12-mo margin) and Co = holding cost over one exposure period (unit cost × 20%/yr × (lead + review)/365). High-margin lines with metronomic suppliers earn 97–99% implied service; low-margin lines earn less. Backpacks at 33% margin get z ≈ 1.3; a $400 mattress at 55% margin gets z ≈ 2.0. Nobody gets a blanket 95%.
| Model component | Formula / source |
| Forecast (daily) | 12-mo unit sales ÷ 365.3 — invoices AND cash sales, elimination sub excluded |
| Demand σ (monthly) | √(E[x²] − E[x]²) over 12 buckets including zero months — computed in sandbox because this instance's SuiteQL rejects STDDEV |
| σ over lead time | √( LT·σ²d,daily + d²·σ²LT ) — the second term is the supplier's measured lead variance, and dominates for the two erratic suppliers |
| Service level | CR = GPunit / (GPunit + holding cost per exposure); z = Φ⁻¹(CR), floored at 0 |
| Safety stock | ⌈z · σDLT⌉ |
| Reorder point | ⌈d · LT⌉ + SS |
| Order-up-to | d · (LT + 30-day review) + SS |
| Inventory position | on hand − committed − backordered + on order (all sites) |
| Suppression rule | Lines graded C/D/E in the 26-Aug overstock review get NO replenishment regardless of ROP — excess cover must burn down first (56 lines) |
Representative recalculations (full 130-line table in appendix)
| Item (id) | Supplier | Fcst/mo | σ/mo | CV |
Lead ±σ (d) | Implied svc | SS | ROP |
Position | Action |
| Basil Lemon Hand Wash 63 | H&B Supplies | 21.5 | 11.4 | 0.53 | 3 ±1 | 96.3% | 7 | 10 | 149 | Transfer |
| Volumizing Shampoo 93 | Mac Oca | 24.9 | 15.1 | 0.61 | 3 ±1 | 98.7% | 11 | 14 | 138 | Hold |
| The Gentleman 131 | Apparel Co | 22.5 | 13.8 | 0.61 | 3 ±1 | 95.1% | 8 | 11 | 166 | Hold |
| Patriarch Luxury Firm T B 238 | Bedline | 3.0 | 3.0 | 1.01 | 3 ±1 | 97.8% | 2 | 3 | 35 | Hold |
| Ghost Whisperer BU L 259 | Hestra | 9.0 | 9.2 | 1.02 | 3 ±1 | 97.5% | 6 | 7 | 83 | Hold |
| HDW001 component 17308 | Johnson Supply | 1.8 | 2.6 | 1.50 | 24 ±14 | 93.1% | 4 | 6 | −29 | Order |
| BLD100 component 17300 | Crown Equipment | 1.8 | 2.6 | 1.50 | 40 ±30 | 91.3% | 5 | 8 | −30 | Order |
| Sparkle and Glow 17638 | Mac Oca | 4.8 | 6.6 | 1.36 | 3 ±1 | 95.2% | 4 | 5 | 154 | Suppress |
CV = coefficient of variation (σ/mean). Positions are consolidated across sites. "Suppress" = position wildly above any defensible order-up-to level; line is in the overstock clearance program.
Where the recalculated safety stock actually goes — units of buffer by driver
Demand noise, 3-day suppliers (121 lines)
2–14 units/line
Lead-time variance, Johnson Supply (6)
σLT-driven
Lead-time variance, Crown Equipment (7)
σLT-driven
For the two erratic suppliers, the d²·σ²LT term contributes the majority of σ over lead time — the buffer is protecting against the supplier, not the customer.
03Transfers before purchases
Every shortage was checked against surplus at sister sites before any PO was drafted. Two shortages clear internally; component backorders cannot.
| Item (id) | Shortage site | Short | Surplus site | Available there | Transfer qty | PO avoided $ | Action |
| Basil Lemon Hand Wash 63 | 01: San Francisco (id 1) — avail 0, committed 20, backorder 10 | 10+ | 03: LA DC (id 5) | 92 | 30 | 540 | Transfer |
| Estes Park Chair 28 | 01: San Francisco (id 1) — avail 1 vs open SO demand | ~5 | 03: LA DC (id 5) | 23 | 6 | 1,845 | Transfer |
| Purchase spend avoided by transferring instead | 2,385 | |
Evidence — item 63: demand 12 mo by site: LA DC 205 · Miami 50 · NY 3 → SF site shows qoh 20, committed 20, available 0, backordered 10 → LA DC holds 92 available against its own ROP of 10 → transfer 30 covers the backorder + SF cycle stock; LA retains 62 (>6× its ROP). No purchase required — consolidated position (149) is 15× the consolidated ROP.
Evidence — item 28: SF has 6 on hand, 5 committed, 1 available; open SO lines aged up to 82 days sit against this item (26-Aug stockout review) → LA DC holds 23 available → transfer 6. Note: item is grade-C overstocked consolidated — this is re-allocation, NOT replenishment. Its 2.7% realized margin remains flagged for pricing review before further investment.
Shortages that CANNOT clear internally
The component backorders (17300, 17304, 17307, 17308 — 35–40 units each at LA DC; 17307/17308 also 5 at Chicago) exist at only one stocking site or at zero across all sites. The Chicago backorders on 17307/17308 already have 10 units inbound on open Johnson Supply POs — received-late risk applies (7 of 9 Johnson open lines are past promise), so the draft POs below cover the LA DC exposure only, netting the inbound units. Cross-subsidiary sourcing was checked: the intercompany vendor pair (2088/2089) has 1 PO each in history — no active intercompany supply program exists for these items.
04Cancel before you buy — inbound POs landing on overstock
Seven open PO lines are inbound to lines graded C/D/E in the overstock review. Receiving them deepens the surplus.
| Item (id) | Inbound qty | Unit cost $ | Value $ | Current cover (mo) | Recommendation |
| Grey Cotton Hoodie 115 | 40 | 30.55 | 1,222 | 17.1 | Cancel or divert — 140 on hand vs 98/yr demand |
| FRM001 component 17306 | 10 | 185.00 | 1,850 | 33 | Cancel — E-grade; 22 on hand, 8 sold/yr |
| HDW002 component 17309 | 10 | 67.00 | 670 | 33 | Cancel — same basket as 17306 |
| Brown Leather Satchel 108 | 1 | 299.99 | 300 | 35.3 | Cancel — D-grade clearance line |
| Black Leather Belt 105 | 6 | 37.00 | 222 | 51.4 | Cancel — D-grade clearance line |
| Skinny Tinted 124 | 1 | 80.00 | 80 | 22.6 | Cancel — C-grade markdown line |
| Pink Plaid 121 | 1 | 20.00 | 20 | 28.4 | Cancel — C-grade markdown line |
| Total open-PO value released | 69 | | 4,364 | | |
05Draft purchase orders — each with its evidence
Only the shortages that survive the transfer check and the suppression screen earn a PO. Every draft carries its demand signal, lead-time assumption, cash effect, and margin at risk.
Draft PO 1 — Johnson Supply (vendor 3867)
| Line (id) | Qty | Unit $ | Ext $ |
| FRM100 17307 | 28 | 24.50 | 686.00 |
| HDW001 17308 | 27 | 24.50 | 661.50 |
| PO total | 55 | | 1,347.50 |
Demand signal: 40 units backordered each (35 LA DC + 5 Chicago) against live configurator sales; 12-mo consumption 21 units each, σ/mo 2.6 →
Position: 15 on hand − 15 committed − 40 BO + 10/11 inbound = −30/−29, deepest shortage in the book →
Lead assumption: 24d ± 14d measured (NOT the 3d quoted on old POs; 7 of 9 currently-open Johnson lines are past promise) →
Sizing: order-up-to (8) − position (−30) = 38; drafted 28/27 net of the 10/11 units already inbound, counted once →
Cash effect: −$1,347.50 now → Margin at risk if not ordered: these components gate assembly AS_SAF001 (realized GP ≈ $341/unit; $14.4K of open assembly GP traced in the 26-Aug stockout review). One blocked assembly repays the PO tenfold.
Draft PO 2 — Crown Equipment Corporation (vendor 357)
| Line (id) | Qty | Unit $ | Ext $ |
| BLD100 17300 | 40 | 10.00 | 400.00 |
| ELC001 17304 | 40 | 25.00 | 1,000.00 |
| PO total | 80 | | 1,400.00 |
Demand signal: 35 backordered each at LA DC; 21 consumed in 12 mo, demand present in 4 of last 12 months (lumpy, CV 1.5) →
Position: 25 − 20 − 35 + 0 = −30, nothing inbound →
Lead assumption: 40d ± 30d measured receipt latency; Crown's promise dates are unusable (average 29.8d before PO date — data-entry inversion), so the buffer is sized on measured behavior only →
Sizing: order-up-to (10) − (−30) = 40 →
Cash effect: −$1,400 now → Margin at risk if not ordered: same configurator program; assembly GP $341–$683/unit. With a 40±30-day supplier, waiting for the next review cycle risks a full quarter of blocked builds.
Build orders, not purchase orders — the un-vendored assemblies
AS_WHL001 (17315), AS_MBK001 (17316), AS_SAF001 (17317): zero on hand anywhere, demand in 3–4 of the last 12 months, open SO GP of $10.1K (17316) and $14.4K (17317) traced in the stockout review — customers PROVABLY wait ~42–45 days for these → no itemvendor record exists: these are assemblies; the replenishment instrument is a WORK ORDER against component stock, which is exactly what draft POs 1–2 protect → recommended builds: 17315 ×7, 17316 ×4, 17317 ×8 (order-up-to at 99.5% implied service — their margin dwarfs component holding cost).
Net cash effect of this review
| Action | Cash $ |
| Draft PO 1 — Johnson Supply | −1,347.50 |
| Draft PO 2 — Crown Equipment | −1,400.00 |
| Open-PO cancellations (7 lines) | +4,364.00 |
| Transfers instead of purchases (2 moves) | +2,385.00 avoided |
| Net purchasing cash this cycle (ex-avoidance) | +1,616.50 |
The review pays for itself before a single markdown: cancellations release more cash than the two justified POs consume. Every other line in the book either holds (67 lines above their recalculated ROPs) or is suppressed pending the overstock burn-down (56 lines).
06What changed vs. the standing setup
The instance carries almost no native planning parameters — this review is not adjusting old numbers, it is installing first numbers.
Across all 568 item-location rows, reorder points and preferred stock levels are blank on effectively every line (isolated exceptions aside). NetSuite has not been generating demand-driven supply signals; replenishment has been manual and rhythm-based — which explains both the 11-SKU leather overstock ($389K excess, bought to rhythm not demand) and the component backorders (no ROP existed to trip). The recalculated ROPs and safety stocks in the appendix are ready to be entered as per-location reorderpoint / preferredstocklevel values, or held as the review workbook — either way, the account moves from zero planning parameters to measured ones.
Standing recommendations
1. Enter the recalculated ROP/SS for the 67 "hold" lines (they are correctly stocked today — the parameters make that survivable). 2. Keep the 56 suppressed lines OUT of any auto-replenishment until the clearance program (26-Aug review) burns cover below 12 months. 3. Put Johnson Supply and Crown Equipment on a promise-date compliance program — Crown's promise fields are so mis-entered they are unusable for planning; require real dates on every new PO line. 4. Re-run this review quarterly; with 3-day suppliers on 99.5% of volume, quarterly is sufficient. 5. Assign vendors (or confirm build-only status) for the assembly family so future reviews route them to work orders automatically.
07Method, sources & assumptions
All queries ran 26 Aug 2026 against the live instance. Reproducible as written.
Assumptions
| Parameter | Value | Rationale & sensitivity |
| Demand window | Trailing 12 months, monthly buckets, zero-months included in σ | Includes seasonality in the variability estimate rather than modeling it; conservative for buffer sizing. |
| Supplier window | Trailing 24 months of receipts | Doubles the sample for the low-volume suppliers where variance matters most. |
| Holding rate | 20%/yr | Same rate as the companion overstock review — consistent economics. |
| Review period | 30 days | Order-up-to covers lead + review; halving it to 15d cuts order-up-to by ~2 units on fast movers. |
| Service level | Newsvendor critical ratio per line, capped 99.5% | Unit GP from realized 12-mo margins; lines with unknown margin default to 40% of cost. No blanket target anywhere. |
| Lead-time σ floor | 1 day (metronomic suppliers) | Receipts and POs are date-stamped same-day for most lines; a 1-day floor guards against false precision. |
| Suppression | C/D/E overstock grades (26-Aug review) | Replenishing into a clearance program is self-defeating; grade-B lines remain eligible. |
| Crown promise dates | Discarded (avg −29.8d vs PO date) | Physically impossible promises = data-entry inversion; measured receipt latency substituted. |
| Bedline −31d receipt | Excluded as artifact | Single receipt dated before its PO. |
| Demo/add-on families | Excluded (WS-*, IT-*, gift-wrap/add-on ids, drop-ship) | Not replenishable inventory; itemized in the appendix exclusions list. |
Known limitations
Read before entering parameters
- Ten suppliers quote a uniform 3-day lead on virtually every historical PO — consistent with a wholesale program, but if any quoted terms change, re-measure before trusting the 3±1 profile.
- Monthly buckets understate within-month spikes for store lines with weekly rhythms; the SS figures are floors for promotional periods.
- Realized margin is order-entry-estimated (
costestimate-based), consistent with the companion review.
- Configurator component demand (4 active months) is program-driven, not statistical — the draft PO quantities are backorder-clearing + buffer, and should be validated against the configurator sales pipeline before release.
- This instance's SuiteQL rejects
STDDEV(); all σ values were computed as √(E[x²]−E[x]²) from AVG and AVG-of-squares — exact, not approximated.
Source queries (SuiteQL)
Q1 — Monthly demand buckets → mean, σ, months-active per item
SELECT m.item_id, COUNT(*) AS months_active,
ROUND(AVG(m.qty),3) AS avg_mo, ROUND(AVG(m.qty*m.qty),3) AS avg_mo_sq,
MAX(m.qty) AS max_mo, SUM(m.qty) AS total_12m
FROM (
SELECT tl.item AS item_id, TO_CHAR(t.trandate,'YYYY-MM') AS mth,
SUM(ABS(tl.quantity)) AS qty
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
AND t.trandate >= ADD_MONTHS(TRUNC(SYSDATE), -12)
GROUP BY tl.item, TO_CHAR(t.trandate,'YYYY-MM')
) m
GROUP BY m.item_id
-- STDDEV() is rejected by this instance's SuiteQL ("Invalid or unsupported search").
-- σ = SQRT(AVG(x²) − AVG(x)²) computed in the sandbox over 12 buckets incl. zeros.
Q2 — Measured supplier lead time (PO→receipt, 24 mo)
SELECT po.entity AS vendor_id, v.companyname,
COUNT(DISTINCT po.id) AS pos_received, COUNT(*) AS receipt_lines,
ROUND(AVG(TRUNC(r.trandate)-TRUNC(po.trandate)),2) AS avg_lead,
ROUND(AVG((TRUNC(r.trandate)-TRUNC(po.trandate))
* (TRUNC(r.trandate)-TRUNC(po.trandate))),2) AS avg_lead_sq,
MAX(TRUNC(r.trandate)-TRUNC(po.trandate)) AS max_lead,
MIN(TRUNC(r.trandate)-TRUNC(po.trandate)) AS min_lead
FROM transaction r
JOIN transactionline rl ON rl.transaction=r.id AND rl.mainline='F' AND rl.item IS NOT NULL
JOIN transaction po ON rl.createdfrom=po.id AND po.type='PurchOrd'
JOIN vendor v ON v.id=po.entity
WHERE r.type='ItemRcpt' AND r.trandate >= ADD_MONTHS(TRUNC(SYSDATE),-24)
GROUP BY po.entity, v.companyname
-- ItemRcpt→PO lineage is on transactionline.createdfrom, line level.
Q3 — Quoted leads & promise aging per supplier (PO lines)
SELECT po.entity AS vendor_id, v.companyname, COUNT(*) AS po_lines,
ROUND(AVG(TRUNC(pol.expectedreceiptdate)-TRUNC(po.trandate)),2) AS avg_quoted_lead,
SUM(CASE WHEN pol.isclosed='F'
AND ABS(pol.quantity)-NVL(pol.quantityshiprecv,0) > 0 THEN 1 ELSE 0 END) AS open_lines,
SUM(CASE WHEN pol.isclosed='F'
AND ABS(pol.quantity)-NVL(pol.quantityshiprecv,0) > 0
AND pol.expectedreceiptdate < TRUNC(SYSDATE) THEN 1 ELSE 0 END) AS open_past_promise
FROM transaction po
JOIN transactionline pol ON pol.transaction=po.id AND pol.mainline='F' AND pol.item IS NOT NULL
JOIN vendor v ON v.id=po.entity
WHERE po.type='PurchOrd' AND po.trandate >= ADD_MONTHS(TRUNC(SYSDATE),-24)
GROUP BY po.entity, v.companyname
-- Companion query joins receipts to promised dates per item-vendor pair:
-- AVG(TRUNC(r.trandate) − TRUNC(pol.expectedreceiptdate)) = received-vs-promise.
Q4 — Item→vendor map with purchase price
SELECT iv.item, iv.vendor, v.companyname, iv.purchaseprice, iv.preferredvendor
FROM itemvendor iv
JOIN vendor v ON v.id = iv.vendor
WHERE iv.subsidiary = :primarySub OR iv.subsidiary IS NULL
Q5 — Per-location positions & the shortage screen
SELECT iil.item, iil.location, loc.name,
iil.quantityonhand, iil.quantityavailable,
NVL(iil.quantitycommitted,0) AS committed,
NVL(iil.quantitybackordered,0) AS backordered,
NVL(iil.quantityonorder,0) AS on_order
FROM inventoryitemlocations iil
JOIN location loc ON loc.id = iil.location
WHERE NVL(iil.quantitybackordered,0) > 0
OR NVL(iil.quantitycommitted,0) > NVL(iil.quantityavailable,0)
-- Plus per-location 12-mo demand (Q1 grouped by tl.location) to direct transfers
-- from surplus sites that retain cover above their own ROP after the move.
Full 130-line recalculation table (id · vendor · fcst/mo · σ/mo · CV · lead±σ · CR · z · SS · ROP · order-up-to · position · shortfall · action)
Available as the review workbook — the appendix arrays were computed in-session
(evalJs, Acklam inverse-normal for z) and are reproducible from Q1–Q5 plus the
model formulas in §02. Request "export the replenishment workbook as CSV" to
regenerate the full table as a file.
Source: NetSuite account TD3016323 (production). Demand window 27 Aug 2025 – 26 Aug 2026; supplier window 24 months; queries executed 26 Aug 2026. Elimination subsidiary excluded. Margins per NetSuite order-entry cost estimates; supplier lead times measured from PO→ItemRcpt lineage. Read-only review — no purchase orders created, cancelled, or modified; no transfer orders entered; no item parameters changed. Draft PO quantities and transfer moves require purchasing review before entry. Service levels are implied by unit economics under stated assumptions, not contractual commitments. Companion document: Inventory Two-Way Grading, 26 Aug 2026.
Sonar AI · Inventory Intelligence