Locations

The canonical register · 18 codes · 2 warehouse · 5 retail · 1 channel · 1 third-party · 5 consignment · 4 virtual · every ledger row in i3 names one of these and nothing else

3 locations have not signed their opening balance. CONS_ETHER · CONS_THINGS · 3PL_ARAMEX are seeded from Shopify levels and still flagged unverified. GATE 0 does not close until every balance-bearing location is signed by its responsible manager. Opening stock →

Fill against surveyed capacity

Units held vs units the site can hold · only sites with a completed capacity survey appear

7 of 16 surveyed
HQ_319 HQ_319 capacity 38,800 units HQ_319 · 31,842 units · 82% of 38,800 82% MCC MCC capacity 4,093 units MCC · 2,865 units · 70% of 4,093 70% CCZ CCZ capacity 2,315 units CCZ · 1,644 units · 71% of 2,315 71% YAS YAS capacity 3,406 units YAS · 2,214 units · 65% of 3,406 65% BAS BAS capacity 674 units BAS · 418 units · 62% of 674 62% AJM AJM capacity 2,590 units AJM · 1,502 units · 58% of 2,590 · below the 60% floor 58% HQ_325 HQ_325 capacity 6,900 units HQ_325 · 3,108 units · 45% of 6,900 · returns and repairs backroom, low fill is expected 45% Target fill 75% target 75%
At or above the floorBelow the 60% floorUnused capacity9 balance-bearing locations have no capacity survey and show fill as not surveyed, never as 0%

Count freshness

Days since the last accepted count against each location's own policy interval

1 overdue
HQ_319 · counted today · policy rfid daily HQ_325 · 2 days · policy rfid daily, one missed run MCC · 41 days · policy blind cycle 30d · OVERDUE by 11 days YAS · 5 days · count in progress right now CCZ · 17 days · policy blind cycle 30d AJM · 20 days · policy blind cycle 30d BAS · 8 days · policy blind cycle 30d 3PL_ARAMEX · 29 days · policy monthly statement, statement not yet received CONS_NAMSHI · 29 days · policy monthly statement CONS_BOKSHA · 29 days · policy monthly statement CONS_ETHER · 29 days · policy monthly statement · variance open CONS_FLOWARD + CONS_THINGS · 29 days · policy monthly statement 30-day cycle policy line 30d policy line
HQ319HQ325MCCYASCCZAJMBAS3PLNAMBOKETHFLO+THI
FreshWithin policyStatement pendingOverdue

Location register

Grouped by type · every column here is a column in location_profiles · row click opens the location

6 with open work
CodeNameCustodyShopify SellableDisplayOther typesValue AED FillCount policyLast countDevicesGatesDriftStaffHealth
Warehouse 2 sites · 34,950 u sellable + 7,905 u supplier pipeline · AED 9.57M · fill 76%
HQ_319Warehouse 319, City Bay · main fulfilmentminimalist13404363 31,842·9,0098.86M 82% rfid daily + blind 7dtoday 08:00G1 G2 H1 H2 ZT411R2 of 22122 drift 2 GIT in customs
HQ_325Warehouse 325 · ops, returns, repairsminimalistnot bound 3,108·8990.71M 45% rfid daily27-07 08:00H3none04audit
Retail 5 stores · 8,643 u · AED 3.61M · fill 66%
MCCMirdif City Centreminimalist64185434227 2,8651,049621.04M 70% blind cycle 30d18-06 · 41dRFD40-MCC-1none33count overdue
YASYas Mallminimalist66535686259 2,214870410.87M 65% blind cycle 30d24-07 · runningRFD40-YAS-1none12under audit
CCZCity Centre Zahia alias ZAHminimalist68947837043 1,644705280.71M 71% blind cycle 30d12-07 · 17dRFD40-CCZ-1none02clean
AJMAl Jimi Mall alias JIMIminimalist107288166770 1,502618190.62M 58% blind cycle 30d09-07 · 20dnonenone12low fill
BASBawabat Al Sharq Mallminimalist110885634418 418371·0.37M 62% blind cycle 30d21-07 · 8dRFD40-BAS-1 idle 6dnone02clean
Channel and third-party 2 entries · 574 u · AED 0.17M
ONLINEOnline · minimalist.ae not balance-bearingminimalistnot bound ···· n/a nonenever countednonen/a0·attribution only
3PL_ARAMEXAramex 3PL fulfilment absent from every v2 page3pl18370396195 574·380.17M not surveyed monthly statement30-06 · 29dnonen/a2·unsigned opening
Consignment 5 partners · 573 u · AED 0.28M · partner-held, excluded from sellable
CONS_NAMSHINamshi · partner warehouse, Dubaipartnernot bound 18924·0.09M not surveyed monthly statement30-06 · 29dnonen/a0·clean
CONS_BOKSHABoksha · partner warehouse, Dubaipartnernot bound 14218·0.07M not surveyed monthly statement30-06 · 29dnonen/a0·clean
CONS_ETHEREther · partner warehouse, Sharjahpartnernot bound 9812·0.05M not surveyed monthly statement30-06 · 29dnonen/a1·unsigned opening
CONS_FLOWARDFloward · partner warehouse, Dubaipartnernot bound 84··0.04M not surveyed monthly statement30-06 · 29dnonen/a0·clean
CONS_THINGSThings · partner showroom, Abu Dhabipartnernot bound 6014·0.03M not surveyed monthly statement30-06 · 29dnonen/a0·unsigned opening
Virtual 4 codes · 512 u · AED 0.24M · no IN_PRODUCTION or GIT_INBOUND here, those are stock types at HQ_319
SUPPLIER_HOLDHeld at supplier · RTS out, awaiting credit or returnsuppliernot bound ··4120.19M n/a RTS lifecycleno physical countnonen/a1·6 open RTS
TRANSITInternal transfer in flight alias IN_TRANSITcarriernot bound ··860.04M n/a transfer lifecycleno physical countnonen/a2·2 stale legs, 4d
DISCONTINUEDDiscontinued SKU archive not balance-bearingminimalistnot bound ···· n/a nonenever countednonen/a0·84 archived SKUs
UNPLACEDQuarantine · a posting whose location could not be resolvedminimalistnot bound ··140.006M n/a drained daily, target 0drain ran 06:00nonen/a1·14 u for 2d
Totals · 18 locations · sellable 44,167 · display 3,681 · other stock types 10,608 (of which 7,905 is supplier pipeline at HQ_319: 5,565 IN_PRODUCTION + 2,340 GIT_INBOUND) · network value AED 13.87M · open drift 14

Permitted stock types by location

The taxonomy made visible · this is location_stock_type_policy · every module's ledger write is checked against it before insert

16 stock types
Location STOCKDISPLAY_GOODDISPLAY_DAMAGEDQUARANTINEWRITTEN_OFF IN_TRANSIT_CUSTOMERIN_TRANSIT_RETURNLOST_IN_TRANSITRTS_PENDINGRESERVEDRECEIVED_NOT_INVOICED INFLUENCER_POOLSAMPLE_POOLSAMPLE_QC IN_PRODUCTIONGIT_INBOUND
HQ_319 Y·YYA YYYYYY YYY OO
HQ_325 Y·YYA ·Y·Y·· ··· ··
MCC YYYYA Y···Y· ··· ··
YAS YYYYA Y···Y· ··· ··
CCZ YYYYA Y···Y· ··· ··
AJM YYYYA Y···Y· ··· ··
BAS YYYYA Y···Y· ··· ··
ONLINE ····· ······ ··· ··
3PL_ARAMEX Y···A Y·Y··· ··· ··
CONS_* (5) YYY·A ······ ··· ··
SUPPLIER_HOLD ···YA ···Y·· ··· ··
TRANSIT ····· ·YY··· ··· ··
DISCONTINUED ····· ······ ··· ··
UNPLACED AAAAA AAAAAA AAA AA
Y permitted A permitted with an approval row O the only location permitted to hold this stock type forbidden, the write is rejected A rejected write emits i3.location.policy_violation and never silently defaults

Place or state: how to tell

A virtual location is a place stock notionally sits when it is not at a physical site we operate. A custody or condition stock type is a state stock is in at a real location. Both describe stock that is ours and countable; only one of them answers "where would you go to look for it".

A new concept becomes a location only when all three hold:
a. a party outside i3 is accountable for loss while the stock is there;
b. a physical count at any site we operate cannot find it;
c. no single one of our locations can be held accountable for chasing it.

Otherwise it is a stock type at the location that is accountable. When in doubt, make it a stock type. A stock type is one more column in this matrix. A location is a count policy, an alias set, a permitted-type row per stock type, a roll-up rule, an opening-balance signature and a foreign key that all fourteen other modules post against.

Worked verdicts. IN_PRODUCTION and GIT_INBOUND fail test (c): HQ_319 chases the PO milestone and the DHL shipment, so they are stock types held at HQ_319, not locations. i2 modelled them as locations and the v2 mockup showed IN_PRODUCTION as a row with 47 SKUs and AED 890K, which makes the same unit countable twice. SUPPLIER_HOLD passes all three: it may be credited and never return, and no warehouse owns it. TRANSIT passes all three: the origin has released it and the destination has not received it.

Customer shipments stay at the dispatching site. IN_TRANSIT_CUSTOMER fails (c) because the dispatching site owns the NDR and RTO chase, so it posts at HQ_319 or the store, never at TRANSIT and never at the customer.

Why the register has aliases

Four different canonical location lists exist across the estate today and none of them reconcile.

The i2 seed carries HQ, ZAH, JIMI, ARAMEX with Shopify ids verified against the admin API on 19-04-2026. The i2 PRD lists HQ_319, CCZ, AJM and five consignment partners. The v2 mockups add ONL and RTL, label HQ_319 as BOM-319, and in one row link to ?code=AJM while rendering the label JIMI.

i3 keeps one register and one alias table. Every historical spelling resolves; nothing is renamed in place; nothing is guessed. Without the alias table the i2 replay of 587K ledger rows cannot map its HQ rows onto HQ_319 at all.

Two register facts that no v2 page shows: 3PL_ARAMEX is bound to a live Shopify location and appears in no dashboard anywhere, and RTL was a balance-bearing row in v2, which would have double counted the whole retail estate. In i3 roll-ups are derived, never stored.

Connected to

HQ_319 detail → Cartons and bins → IWMS events → Transfers → Stock count → Opening stock → Consignment → Production → Goods in transit → Return to supplier → Drift → RFID gates → Live SKU grid → Settings →