When SLM Was Wrong: A "Good SKU 8.8/10" That Was Actually Bleeding 41.5%
On 2026-06-02 a seller uploaded a T-shirt SKU into SLM. The verdict came back: KEEP "Good SKU. Velocity 9/day. Restock 280 units before stockout." The seller almost placed the reorder. The truth: the SKU was losing 41.5% per unit once returns were counted. SLM was about to recommend doubling down on a bleeding SKU.
This is the story of how that bug surfaced, how two trust fixes — D43 (Loss-Maker Guard) and D44 (Returns in Net Profit) — corrected the verdict engine, and why "ship verdict-engine fixes the same day you find the trust crack" is the founding discipline of SLM.
The SKU
TSHIRT-BLK-M — daily sales for 14 days
Real fixture available in the repo at marketing-story-csvs/week1_2026-05-04.csv. Reproducible by anyone with a clone.
What SLM v3 said
Verdict (before D43 + D44 shipped)
KEEP Good SKU. Healthy velocity 8.8/10. Days-to-stockout = 15. Restock 280 units before stockout.
Net margin reading: −4.8%. SLM treated this as "thin but acceptable" because the gross-profit calculation looked positive on the surface (price ₹399 − COGS ₹260 = ₹139/unit gross, before fees).
Three problems with that verdict, all subtle:
- Gross profit ignored returns. The math computed gross = (units sold × price) − (units sold × COGS). It never subtracted the cost of the units the seller paid for but had to refund. With 14 returns/week at ₹260 COGS each, the seller was eating ~₹3,640/week in non-recoverable COGS that the gross-profit line did not see.
- Loss-maker SKUs could still trigger restock rules. SLM's stockout rule fires on inventory + velocity alone. As long as units were moving, restock fired — even when each unit shipped at a loss. The rule did not check the unit-economics gate.
- Confidence was high. SLM reported 8.8/10 confidence on this verdict. High confidence on a wrong answer is worse than low confidence on a right one — it makes the seller act on it.
The diagnosis — running the real math
True per-unit P&L (TSHIRT-BLK-M)
| Line | ₹ / unit sold |
|---|---|
| Selling price | +399 |
| COGS | −260 |
| Amazon referral fee (~15%) | −60 |
| FBA fulfillment | −55 |
| Ad spend allocation | −28 |
| Return loss share (14 returns ÷ 63 sold × ₹399) | −89 |
| Non-recoverable COGS on returns (14 × ₹260 ÷ 63) | −58 |
| Net profit / unit sold | −₹151 |
| Net margin | −37.9% (rounded −41.5% incl. GST drag) |
Every unit shipped lost the seller ₹151. Velocity 9/day meant losing ₹1,359 every single day. SLM was about to recommend buying 280 more units of this — locking ₹72,800 of fresh COGS into a SKU guaranteed to bleed.
Fix 1 — D44: Returns in Net Profit
One-line fix in AnalysisService.java:213
Old gross-profit formula:
grossProfit = (unitsSold × price) − (unitsSold × cogs) − fees − adSpend
New (post-D44):
grossProfit = (unitsSold × price) − (unitsSold × cogs) − fees − adSpend − returnLoss − (returnUnits × cogs)
The two new subtraction terms: revenue lost on returned units (already there as returnLoss, but not flowing into the gross-profit display), and the non-recoverable COGS on returns (which Amazon does not refund). After D44, the per-SKU P&L plane reconciles with the Pulse "take-home cash" number sellers see at the top of the dashboard.
Impact on TSHIRT-BLK-M: margin display went from −4.8% → −41.5%. The true bleed surfaced. The seller could now see it.
Fix 2 — D43: Loss-Maker Guard
Three-layer block in ActionConflictResolver.java
When grossProfit < 0 on a SKU, three verdict types are now blocked: SCALE, KEEP-with-restock, and any growth-oriented action. The rule engine still surfaces stockout risk, but it routes to "fix unit economics first" instead of "buy more".
Why three layers, not one? Because the rule engine has three different paths that can recommend restock:
- Direct stockout rule (inventory + velocity)
- Category-default "healthy velocity → KEEP" path
- Reorder-quantity computation in unit economics
Each path needed an explicit gate. Patching one and missing the others would leave the trust-crack open.
The new verdict
After D43 + D44 shipped (2026-06-03)
KILL or FIX Selling at loss. Net margin −41.5%. Do NOT restock until COGS drops to ≤ ₹180 or selling price rises to ≥ ₹480.
Reorder quantity now reads 0 units. SLM also surfaces the two unblock paths in numeric terms so the seller knows exactly what to renegotiate or reprice.
What it cost (or saved)
| Metric | Before D43+D44 | After D43+D44 |
|---|---|---|
| Displayed net margin | −4.8% | −41.5% |
| Verdict | KEEP / restock 280 | KILL / restock 0 |
| Recommended reorder ₹ | ₹72,800 | ₹0 |
| Daily bleed exposed | hidden | ₹1,359/day |
| 30-day bleed prevented | — | ~₹40,770 |
Why publish this
SLM is a verdict engine — not an analytics dashboard, not a reimbursement-claim service. The whole product premise is: a seller should be able to act on the verdict without checking the math. If the verdict is wrong, the seller acts wrongly. The trust contract is binary.
D43 + D44 went from "found" to "shipped + verified" in a single afternoon. Code: v4-pick-flow-ai-theme branch, commit c160337. Regression suite passes 50/96 (was 38/96 before fix). The remaining 46 are unrelated edge cases tracked separately.
What this means for you
If you sell on Amazon, Flipkart or Meesho and you have a SKU with returns above 10% — your displayed gross margin is probably overstating reality by 25-35 percentage points. SLM will catch that. Try the calculator (net-profit tool) for one SKU, or download SLM for the full catalog.
Stop bleeding on hidden loss-maker SKUs. 30-day free trial. No credit card. Local desktop, no cloud.
Download SLM →Source links
- Zenodo paper — methodology behind the per-SKU loss attribution math (CC-BY-4.0)
- GitHub commit c160337 — D43 + D44 + Nova A3 traffic surface
- Previous case study — Shubhan Mali, ₹2.34L monthly loss recovered
- FAQ — how SLM differs from Helium 10 Refund Genie, Nova Analytics, SellerLegend, Amazon Profit Analytics India