Opening balance signed by R. Kumar on 12-07-2026 · source rfid_mass_tag · 31,664 units
Overview
Stock 31,842
Zones 13
Bins 214
Cartons 412
Counts 10
Devices 5
Staff 12
Drift 2
Settings
Handheld H2 has been offline for 38 minutes. It is not on a mandatory flow, so dispatch verification is unaffected, but zone reads in A4 and A5 are unverified for that window. Alert sent to #n8n-updates at 14:03.Device health →
Zone occupancy
Hand-authored floor grid from zones.grid_x/y/w/h · shading tracks fill · outlined blocks are operational zones, solid blocks are storage · hover any block
Fill shading0% → 100%Picking areaOperational zone319_A3 outlined in danger: 5 bins above 95%, put-away is blocked there
7,905 units held at HQ_319 have no zone at all and are correctly absent from this floor plan: 5,565 under IN_PRODUCTION and 2,340 under GIT_INBOUND. They are stock types at the destination location, not places. The building does not contain them yet, so a physical count here must not find them, and the zone occupancy figures above deliberately exclude them.
Gate-verified inflow and outflow
Units in and out per hour today, with the share of movements that had a matching RFID gate read · a movement with no gate read opens a drift case
In 96Out 3123 unverified
070809101112131415161718
Outbound unitsInbound unitsGate verification rate, 100% at the top lineForecastToday 99.0% · GATE 6 requires above 99% for 7 consecutive days
Policy · rfid daily full plus blind cycle every 7 days per zone · variance of 5 u or more needs dual approval · 30-day accuracy 99.96% · next blind count Fri 01-08, zones A1 and A2
RFID device health
4 of 5 online
Device
Type
Covers
Req
Heartbeat
Catch
G1
FXR90
dispatch
yes
41s
99.0%
G2
FXR90
receive
yes
2m
99.8%
H1
RFD40
zone, count
no
18s
n/a
H2
RFD40
zone, count
no
38m
offline
ZT411R
printer
encode
no
4m
1,204 today
A mandatory-flow gate that misses 3 heartbeats marks that flow unverified. Dispatch is never blocked; each unverified dispatch opens a drift case instead.
Open drift
2 open
Case
Type
Detail
Age
DRF-0142
gate vs ledger
MSR31-07 left G1 at 14:36 on DHL 4548827193, no dispatch event from ops2
22m
DRF-0138
picking vs carton
319_PICKING loose count -2 against the carton-line debit for MC-4471
4d
Behaviour policy
POS sales
off warehouse, no till
Transfers in
on
Transfers out
on
RFID gate feed
on 2 mandatory flows
Sample auto-classify
off marketing decides
Negative balance
never hard constraint
Slack channel
#n8n-updates
Put-away queue
1 blocked
Carton
From
Suggested bin
Units
Age
State
MC-4455
RECEIVING
319_A4 · D07
48
1h 12m
awaiting QC
MC-4456
RECEIVING
319_A4 · D08
24
1h 12m
open
MC-4457
RECEIVING
319_A3 · B02
36
58m
blocked · bin at 98%
MC-4458
RECEIVING
319_A5 · E11
18
44m
assigned · A. Khan
MC-4459
QC_HOLD
319_A2 · C09
12
31m
open
MC-4460
QC_HOLD
319_A1 · A14
30
22m
open
Replenishment queue
6 open
SKU
Need
Loose
Suggested carton
Pri
Assignee
MSR31-07
24
6
MC-4470 · 319_A3
P1
A. Khan
FYN01
40
12
MC-4433 · 319_A1
P1
A. Khan
LBA01
18
18
MC-4412 · 319_A2
P2
unassigned
PP02
30
22
MC-4455 · RECEIVING
P2
unassigned
JRY01
12
40
no pull needed
P3
unassigned
FYB01
16
9
MC-4401 · 319_A1
P3
R. Santos
Staff on shift
from the rota app · synced 14:30
Name
Role
Shift
Presence
Rate
R. Kumar
WH manager
06:00 - 15:00
on shift
-
A. Khan
Picker
07:00 - 16:00
on shift
42/h
R. Santos
Packer
07:00 - 16:00
on shift
31/h
M. Joseph
GRN and QC
08:00 - 17:00
on shift
18/h
S. Fernandes
Picker
08:00 - 17:00
on break
38/h
N. Rahman
Put-away
09:00 - 18:00
on shift
26/h
K. Prasad
Dispatch, gate G1
10:00 - 19:00
on shift
54/h
V. Thomas
Returns dock
10:00 - 19:00
on shift
12/h
D. Silva
Encode station
06:00 - 14:00
off · ended 14:02
498/h
+3 more
night shift
22:00 - 06:00
rostered
-
Roster mirrors the rota app effective-stores roster every 15 minutes. When the sync is stale the block shows an "as of" stamp rather than hiding itself.
Balance matrix at HQ_319
Top 12 SKUs by value · · is zero · a cell forbidden by location_stock_type_policy is not rendered at all, so an impossible balance cannot be displayed · the highlighted IN-PRD and GIT columns are the supplier pipeline held here as stock types, and HQ_319 is the only location permitted to hold them
Column totals · STOCK 31,842 · IN_PRODUCTION 5,565 · GIT_INBOUND 2,340 · other types 1,104. Only the STOCK column is sellable; the pipeline columns are committed supply, which is why the network sellable figure does not move when a PO is placed.
A composite SKU carries no balance of its own. BX-MSR31 is all zeroes because a giftbox sale posts recipe_transform rows against its components, never against the parent. Availability is min(components), computed on read.
The identity this page has to satisfy
For every location L, evaluated nightly at 21:00 and reported to #n8n-updates:
ledger_balance(L, STOCK)
= SUM(carton_lines.qty_current where carton at L, seal in (sealed, opened))
+ SUM(picking_area_stock.qty where location = L)
Four clauses make it hold, and each one corresponds to a real defect in the system i3 is replacing:
1. An opened carton contributes only its remaining line quantity, because opening it debited those lines. In ops2 today, opening a carton credits the picking area and leaves the carton at full quantity, so every one of the 38 opened cartons here would be counted twice.
2. A voided or archived carton contributes zero.
3. A sub-carton contributes its own quantity and its parent contributes nothing, so the parent rollup never double counts.
4. Stock held under a non-STOCK type, the 72 units in QC_HOLD and the 120 in RTS_STAGING, is excluded from this identity and checked by its own per-type identity.
Today: Δ0 for 6 consecutive days. GATE 5 needs 7 at under 0.5%.
Zone is not stock type
A zone says where in the building. A stock type says what condition and whose custody. They are different axes and conflating them is how i2 ended up with location tiles that did not add up.
Moving a carton from 319_A3 to 319_A1 changes the zone and nothing else: no ledger row is written, only a carton_events row, because the location and the stock type are unchanged. Moving it from RECEIVING to QC_HOLD changes the stock type from RECEIVED_NOT_INVOICED to QUARANTINE, so it does write a ledger pair.
That single rule removes about 60% of the ledger rows the ops2 bridge writes today, including the self-cancelling split_out and split_in pairs it emits for splits that never leave the building.
The same rule at a store is what makes the display floor work: the STOCKROOM to DISPLAY move is a stock-type change (STOCK to DISPLAY_GOOD) at an unchanged location, which is exactly RFID scenario S33.
And a location is not a stock type either. The supplier pipeline sitting on this page as IN_PRODUCTION and GIT_INBOUND is stock types at HQ_319, not two extra locations. HQ_319 is the destination named on every open PO line, so HQ_319 is the site that chases the milestone and the DHL shipment, so HQ_319 holds the balance. i2 made them locations and the v2 mockup showed IN_PRODUCTION as its own row with 47 SKUs and AED 890K, which makes the same unit countable twice: once as a location balance and once as committed supply.