Sellable vs committed · 14 days
Committed is posted reservations plus unposted CSD holds. The gap is what a customer can actually be promised.
SKU x location x stock type (16) · grandparent to variant to component · quantity ledger, serial-verified where tagged Live · reconciles 60s Snapshot 29 Jul 09:00 · 52,387u · next 6m 2,847 writes today
| SKU / hierarchy | Title | Cat | Brand | Status | 7d | HQ_319 · Main WH | MCC · Mirdif | YAS · Yas Mall | AJM · Zahia | CONS · 5 partners | Pipeline stock types · HQ_319 | Roll-up | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| STK | DG | DD | QUA | RES | IT→ | STK | DG | DD | QUA | RES | IT→ | STK | DG | DD | QUA | RES | IT→ | STK | DG | DD | QUA | RES | IT→ | NMS | BKS | ETH | FLW | THG | INF | IN_PROD | GIT | TOTAL | DoC | |||||||
| ▾ MSR31 | Sereen · Women's watch 12 variants 2 combos | Watches | Minimalist | Active | 214▲6 | 8 | - | 3 | 6 | 12 | 32▼2 | 4 | 1 | - | 2 | 3 | 28 | 3 | - | - | 1 | 2 | 17 | 2 | - | - | 1 | 1 | 6 | 4 | - | 2 | - | 3 | 240 | 120 | 715 | 34 | ||
| MSR31-07 | Rose case · Tan strap | Watches | Minimalist | Active | 41▲2 | 2 | - | 1 | 2 | 4 | 6 | 1 | - | - | 1 | 1 | 2 | 1 | - | - | - | - | 3 | - | - | - | - | - | 2 | 1 | - | - | - | 1 | 60 | 24 | 153 | 28 | ||
| MSR31-08 | Rose case · Black strap | Watches | Minimalist | Active | 38 | 2 | - | - | 1 | 3 | 4 | 1 | - | - | - | 1 | 5 | 1 | - | - | - | - | 2 | - | - | - | - | - | - | 1 | - | - | - | 1 | 60 | 24 | 143 | 41 | ||
| MSR31-12 | Gold case · Ivory strap | Watches | Minimalist | Low | 9▼7 | 1 | - | - | 2 | 2 | 1 | 1 | - | - | - | - | 1 | - | - | - | - | - | 1 | - | - | - | - | - | - | - | - | - | - | - | 40 | 36 | 94 | 6 | ||
| · | BX-MSR31 | Giftbox composite = min(comp) recipe v3 | Watches | Minimalist | Derived | 27 | - | - | - | - | - | 4 | - | - | - | - | - | 3 | - | - | - | - | - | 2 | - | - | - | - | - | - | - | - | - | - | - | - | - | 36 | 18 | |
| └ recipe | MSR31-01 x1 · XTRA-STRAP x1 · BX-CARD x1 | Components carry the stock. Limiting component XTRA-STRAP (27 @ HQ_319, 4 @ MCC). A sale of BX-MSR31 posts three recipe_transform rows and zero rows against BX-MSR31, each stamped with recipe_id and recipe_version so a refund six months later reverses the recipe that was actually sold. | ||||||||||||||||||||||||||||||||||||||
| ▾ FYN | Fyne · Jewellery 4 SKUs 1 set | Jewellery | Minimalist | Active | 96▲11 | 6 | 1 | 2 | 4 | 7 | 14 | 2 | - | - | 1 | 2 | 11 | 2 | - | - | 1 | 1 | 9 | 1 | - | - | - | 1 | 3 | 2 | 2 | 1 | - | 4 | 150 | - | 323 | 22 | ||
| FYN01 | Necklace · Silver | Jewellery | Minimalist | Active | 52▲6 | 3 | - | 1 | 2 | 4 | 8 | 1 | - | - | 1 | 1 | 6 | 1 | - | - | - | 1 | 5 | - | - | - | - | - | 2 | 1 | 1 | - | - | 2 | 75 | - | 167 | 19 | ||
| FYB01 | Bracelet · Silver | Jewellery | Minimalist | Active | 44 | 2 | 1 | 1 | 2 | 3 | 6 | 1 | - | - | - | 1 | 5 | 1 | - | - | 1 | - | 4 | 1 | - | - | - | 1 | 1 | 1 | 1 | 1 | - | 2 | 75 | - | 154 | 25 | ||
| · | FYS01 | Fyne set set = min(FYN01, FYB01) recipe v1 | Jewellery | Minimalist | Derived | - | 44 | - | - | - | - | - | 6 | - | - | - | - | - | 5 | - | - | - | - | - | 4 | - | - | - | - | - | 1 | - | - | - | - | - | - | - | 60 | - |
| LBA01 | Alyazia handbag · Black & tan | Handbags | Minimalist | Active | 28 | 2 | - | 1 | 3 | 5 | 5 | 1 | - | - | 1 | 1 | 4 | 1 | - | - | - | 1 | 3 | 1 | - | - | - | - | 2 | 1 | - | 1 | - | 2 | 80 | 40 | 183 | 31 | ||
| MIN-2159 | Bloom vase · Large unverified | Home | Minimalist | Unverified | 62 | 3 | 1 | - | 2 | 4 | 11 | 2 | - | - | 1 | 1 | 9 | 1 | - | - | - | 1 | 7 | 1 | - | - | - | - | 1 | - | - | - | - | 1 | - | 96 | 204 | 48 | ||
| ANQ07B | Amiira pendant negative | Jewellery | Minimalist | Drift | 0 | - | - | - | - | - | -1 | - | - | - | - | - | 0 | - | - | - | - | - | 0 | - | - | - | - | - | - | - | - | - | - | - | - | - | -1 | - | ||
| PP02 | Amber leather parfum 100ml low | Perfume | Minimalist | Low | 6▼9 | - | - | 48 | 1 | 3 | 2 | - | - | - | - | 1 | 1 | - | - | - | - | - | 2 | - | - | - | - | - | - | - | - | - | - | - | - | 48 | 112 | 6 | ||
| CDW01 | Classic daywatch · Steel | Watches | Minimalist | Active | 63 | 4 | 1 | 1 | 3 | 6 | 9 | 2 | - | - | 1 | 2 | 8 | 1 | - | - | 1 | 1 | 6 | 1 | - | - | - | 1 | 4 | 2 | - | - | - | 1 | - | - | 118 | 44 | ||
| JRY01 | Alia ring · Gold vermeil | Jewellery | Minimalist | Active | 71▲9 | 4 | - | - | 3 | 5 | 10 | 2 | - | - | 1 | 2 | 8 | 1 | - | - | 1 | 1 | 7 | 1 | - | - | - | 1 | 2 | 1 | 1 | 12 | - | 3 | 120 | - | 257 | 27 | ||
| LLW-BAG-047 | Lulwa leather tote · Black | Handbags | Lulwa | Active | 142▲18 | 5 | 1 | 2 | 6 | 11 | 38 | 3 | - | - | 2 | 4 | 29 | 2 | - | - | 1 | 3 | 24 | 2 | - | - | 1 | 2 | 28 | 12 | 8 | 5 | 4 | 6 | 180 | 60 | 581 | 38 | ||
| LLW-PRF-201 | Lulwa oud EDP 50ml negative | Perfume | Lulwa | Drift | -3 | 1 | - | - | 2 | 1 | 12 | 1 | - | - | 1 | - | 8 | 1 | - | - | 1 | - | 5 | - | - | - | - | - | - | - | - | - | - | - | - | 24 | 53 | 11 | ||
| LLW-JWL-301 | Lulwa crescent pendant · Gold out | Jewellery | Lulwa | Stockout | 0 | - | - | - | - | - | 0 | - | - | - | - | - | 0 | - | - | - | - | - | 0 | - | - | - | - | - | - | - | - | - | - | - | 200 | 80 | 280 | - | ||
| MIN-CNL-038 | Soy candle · Rose 400g overstock 312d | Home | Minimalist | Dead | 1,640 | 8 | 3 | 12 | 18 | 6 | 220 | 4 | 1 | - | 4 | 2 | 164 | 3 | - | - | 3 | 1 | 120 | 2 | - | - | 2 | 1 | 18 | 6 | 4 | 2 | 1 | - | - | - | 2,245 | 312 | ||
| MST-CRM-42-BLK | Ceramic mug 42cl · Black RES > STK | Home | Minimalist | Conflict | 4 | - | - | - | 9 | 2 | 2 | - | - | - | 5 | 1 | 6 | 1 | - | - | 2 | - | 3 | - | - | - | - | - | - | - | - | - | - | - | 160 | - | 195 | 9 | ||
| LLW-SUN-702 | Lulwa aviator sunglasses · Tort pre-order | Accessories | Lulwa | GIT | 0 | - | - | - | 18 | - | 0 | - | - | - | 6 | - | 0 | - | - | - | 4 | - | 0 | - | - | - | 2 | - | - | - | - | - | - | - | 320 | 240 | 590 | - | ||
| MSK15-BLK | Strap 20mm · Black alias | Accessories | Minimalist | Renamed | 88 | 2 | - | - | 2 | 3 | 12 | 1 | - | - | - | 1 | 9 | 1 | - | - | - | 1 | 7 | - | - | - | - | - | 3 | 1 | - | - | - | 2 | 240 | - | 373 | 62 | ||
| FYN04-S | Fyne ear cuff · Sample batch SAMPLE_QC 80h | Jewellery | Minimalist | SLA breach | - | 0 | - | - | 5 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | 5 | - | |
| 22 rows | Totals · visible rows (derived rows excluded) | 2,432 | 41 | 8 | 74 | 66 | 63 | 336 | 24 | 2 | - | 29 | 21 | 258 | 20 | - | - | 16 | 13 | 188 | 12 | - | - | 8 | 9 | 67 | 32 | 17 | 24 | 5 | 27 | 1,875 | 772 | 6,439 | ||||||
| Σ all | Grand total · 1,535 SKUs · 52,387 units · 18,204 balance keys | HQ_319 · 33,914u (64.7%) | MCC · 3,506u (6.7%) | YAS · 3,241u (6.2%) | AJM · 2,489u (4.8%) | CONS · 646u (1.2%) | Pipeline types · 7,905u (15.1%) | 52,387u | ||||||||||||||||||||||||||||||||
| Fill % | Location concentration · share of 52,387u · 686u sits in hidden groups | 100.0% | ||||||||||||||||||||||||||||||||||||||
Committed is posted reservations plus unposted CSD holds. The gap is what a customer can actually be promised.
By stock type. Sellable is only 84% of what the ledger holds.
Intensity by available qty. In the app this replaces the pivot in place; shown here for review.
The store manager's morning triage: what needs replenishment at my store today.
Every number here is a projection over ledger_entries. Nothing on this page can change one.
Three checks run on every write: qty = SUM(quantity_delta), qty = last balance_after, and entry_count > 0. A key that fails any of them renders as a chain-mismatch cell and drops out of every total. That is the check i2 never had, which is how its sellable reached minus 140,753.
A fourth identity comes from module 03 and is adopted here verbatim rather than restated: balance(composite_sku, any_location, any_stock_type) = 0, always. It is structural, not aspirational: the projection joins skus.is_composite = FALSE, the cache carries a CHECK, and a nightly assertion raises P1 on breach. What a derived row shows instead is min over components of floor(available / component_qty), excluded from every footer sum because its components are already counted.
Recipe versions are pinned per sale. The derived numbers above use the active recipe, because that is what a new sale would decompose with. Every backward-looking trace and every reversal replays the recipe_id stamped on the original recipe_transform rows. A view that mixes the two disagrees with the ledger for any SKU whose recipe was edited, and the disagreement looks exactly like stock drift.
IN_PRODUCTION and GIT_INBOUND are stock types held against the destination location, never locations. The virtual location set is exactly three: TRANSIT, SUPPLIER_HOLD, DISCONTINUED.
| Shopify webhooks | 14s ago |
| ops2 dispatch | 1m ago |
| CSD holds | 42m ago |
| GRN receipts | 6m ago |
| IWMS cartons | 3m ago |
| RFID gate | 22s ago |
| Influencer Hub | 4h ago |
| Cost feed | 05:12 |
The balance query did not return within 5 seconds. Nothing was changed.
Error ID i3-live-7f3a9b · 29-07-2026 14:41:04 GST
Load an opening balance before any sale posts. That order matters: i2 skipped it and deducted from zero for a year.
Live inventory needs the inventory.read scope on your SSO role.