Storage & Zones
Storage is where your warehouse takes shape inside EMS. After receiving builds skids and assigns them to slots, the Storage module keeps track of where everything lives. It manages a six-zone warehouse layout, monitors capacity in real time, handles location moves, and powers the inventory check workflow that keeps your physical counts in sync with the system.
Every skid that comes out of receiving gets a zone and a slot assignment. From that point on, Storage is the single source of truth for "where is this skid right now?" It answers that question for production (which skids are available for a PO run), for outbound (which skids need to ship), and for the customer portal (how much inventory does this consignee have on the floor).
Zone layout
EMS ships with a six-zone warehouse model. Each zone serves a different operational purpose, and they work together to give you both structured racking and flexible floor space:
- Zones A, B, C, D — racked shelving. These are your primary long-term storage zones. Each one is laid out as a grid of rows, columns, and levels, matching the physical racking in your warehouse. A row is a run of shelving, a column is a bay within that row, and a level is the vertical shelf position within the bay.
- Zone F — floor storage. This is open floor space for bulk pallets that don't fit on racking, or for high-volume SKUs that move too fast to justify racking. Floor storage uses a simplified row-and-column grid with no levels.
- Zone H — holding / staging. This is temporary space. Skids land here when they've been received but haven't been assigned a permanent home yet, or when they're being staged for production or outbound dispatch. Think of H as a transit zone.
Every slot in the system has an address that follows a consistent format: Zone-Row-Column-Level. For racked zones, all four components are present. For floor storage, the level is omitted.
- Racked slot — A-03-B-2 means Zone A, Row 03, Column B, Level 2
- Floor slot — F-02-D means Zone F, Row 02, Column D (no level needed)
- Holding slot — H-01-A means Zone H, Row 01, Position A
This addressing scheme means that every location in your warehouse maps to exactly one identifier in EMS, and every identifier maps back to exactly one physical location. When an operator reads "A-03-B-2" on a label or a screen, they know exactly which shelf to walk to.
The default names (A through D, F, H) are starting points. You can rename zones to match your warehouse's existing signage in Settings. If your team already calls their zones "Dry 1", "Dry 2", "Cold", and "Staging", you can use those labels and EMS will display them everywhere.
Capacity tracking
Each zone has a configurable maximum skid capacity. EMS tracks how many skids are currently stored in each zone and shows fill rates across the storage dashboard using a simple colour system:
- Green — under 70% full. Plenty of room. No action needed.
- Yellow — between 70% and 90% full. Getting busy. Consider routing new receiving to a different zone.
- Red — over 90% full. Near capacity. EMS displays a warning toast when a zone crosses this threshold so you aren't caught off guard.
The storage dashboard provides a per-zone fill-rate rollup. Each zone gets a progress bar showing current skid count versus max capacity, coloured according to the thresholds above. This gives warehouse managers an at-a-glance picture of where space is tight and where there is room to absorb new shipments.
When a zone crosses the 90% threshold, EMS fires a toast notification visible to all logged-in users. The toast names the zone, shows the current count versus max, and suggests rerouting new skids. It does not block put-away — you can still assign skids to a zone at 95% if you need to — but the warning ensures the decision is conscious.
QR location labels
Every rack slot in your warehouse should have a printed QR code label. EMS generates these labels from your zone configuration, and you print them on a standard label printer (4x6 or 2x4 thermal labels work well). Each QR encodes the slot's full address — for example, A-03-B-2.
QR labels power a two-scan verification process during put-away:
- Scan the skid QR. This is the label printed when the skid was completed during receiving (the SKD-NNNN-NN identifier). It tells EMS which skid you are placing.
- Scan the location QR. This is the label on the rack slot. It tells EMS where you are placing the skid.
When both scans match — the skid exists in the system and the slot is a valid, unoccupied location — EMS confirms the put-away with a green check and an audible chime. If the slot is already occupied, EMS warns you and asks you to pick a different location.
Labels peel, get dirty, or fade under warehouse lighting. Print two copies of every location label during setup — stick one on the rack and keep the spare in a binder organised by zone. When a label becomes unreadable, you can replace it in seconds instead of reprinting from the system.
Navigating the storage view
The Storage page is your interactive warehouse map. Here is how to find what you are looking for:
- Zone cards. The top of the page shows one card per zone with its name, fill-rate bar, and skid count. Click a zone card to expand it.
- Row list. Inside a zone, you see a list of rows. Each row shows how many of its slots are occupied. Click a row to expand it into its columns and levels.
- Slot grid. The expanded row shows a grid where each cell is a slot. Occupied slots show a coloured chip with the skid identifier. Empty slots show a dashed outline.
- Slot detail. Click an occupied slot to open its detail panel. You see the skid identifier, the shipment it came from, the consignee, the date it was placed, and a summary of its contents (product names, quantities, good units).
- Box-level drill-down. From the skid detail, click View Boxes to see every box on the skid with per-line product breakdowns, damaged counts, and missing counts — the same data that was recorded during receiving.
The search bar at the top of the storage view lets you jump directly to a skid by its SKD identifier, or to a slot by its address. Type A-03 and EMS filters to Zone A, Row 03. Type SKD-0042 and EMS highlights the slot containing that skid.
Moving a skid
Skids don't always stay where they were originally placed. You might need to consolidate zones, make room for a large incoming shipment, or stage skids near the production line. EMS tracks every move with a full audit trail.
To move a skid:
- Open the skid's detail panel (click the slot in the storage view, or search by SKD identifier).
- Click Move.
- Select the destination zone from the dropdown. EMS shows only zones with available capacity.
- Select the destination slot. EMS suggests the next available slot in the chosen zone, but you can pick any empty slot.
- Click Confirm Move.
The move is logged immediately with:
- Timestamp of the move
- Operator who performed it
- Origin zone and slot
- Destination zone and slot
The skid's history tab shows its full location timeline — every zone and slot it has occupied since receiving, in chronological order. This is useful during audits and when tracking down misplaced inventory.
When you confirm a move, the origin slot is freed and the destination slot is occupied in the same operation. There is no in-transit state for internal moves. If you need to stage skids temporarily before deciding their final home, move them to Zone H (holding) first.
Remainder skids
During production, a PO run may consume only some of the boxes from a skid. For example, a skid of 20 boxes might have 14 pulled for a production order, leaving 6 behind. EMS tracks this as a remainder skid.
A remainder skid keeps its original SKD identifier but its contents are updated to reflect only what is left. The production module handles the split automatically — when boxes are allocated to a PO, EMS subtracts them from the skid's box list and recalculates the product totals.
The remainder skid stays in its current storage location unless you manually move it. On the storage view, remainder skids display a small badge showing "R" and the remaining box count (for example, "R 6/20") so you can tell at a glance that this skid has been partially consumed.
If you have multiple remainder skids from the same consignee in the same zone, consider consolidating them onto fewer skids. This frees up slots and makes inventory checks faster. Move the boxes to one skid during your next inventory check cycle, then move the empty skid's slot back to available.
Inventory check workflow
Inventory checks verify that your physical warehouse matches what EMS believes is there. They catch misplaced skids, unreported moves, and counting errors before they cascade into downstream problems like incorrect production availability or inaccurate customer portal data.
To run an inventory check:
- Navigate to the Storage page and select a zone or a specific slot. You can check an entire zone at once or focus on a single row.
- Click Inventory Check. EMS enters check mode for the selected area.
- Walk the zone physically. For each slot, scan the skid QR (or manually confirm the skid identifier visible on the label).
- EMS compares your scans against its records and flags discrepancies in real time:
- Extra skid — a skid is physically present but EMS does not expect it in this slot. It may have been moved without being logged.
- Missing skid — EMS expects a skid in this slot but you did not scan one. The slot may be empty or the skid may have been moved elsewhere.
- Wrong location — the skid is in the system but EMS thinks it belongs in a different slot. The physical location and the system location disagree.
- For each discrepancy, you can Resolve (update EMS to match reality) or Flag for review (leave it unresolved for a supervisor to investigate).
- Click Complete Check when finished. EMS records the check with a timestamp, operator, zone, slot range, and discrepancy count.
When you click Resolve on a discrepancy, EMS updates slot assignments to match what you scanned. This means the previous location record is overwritten. If you are unsure about a discrepancy, use Flag for review instead — it preserves the current state while alerting a supervisor.
Consignee roll-ups
The storage dashboard includes a per-consignee aggregate view. This is especially useful for distributors who warehouse product for multiple brand-owners and need to report on — or bill for — space usage.
The roll-up shows, for each consignee:
- Total skids — how many skids belonging to this consignee are currently stored across all zones
- Total units — the sum of good units across all boxes on those skids
- Total litres — the aggregate volume, calculated from product definitions (mL per unit multiplied by unit count)
- Zone breakdown — how the consignee's skids are distributed across zones A through H
This data powers space billing if you charge consignees per-skid or per-unit for warehousing. It also gives your customers a clear answer when they call and ask "how much of my product do you have on the floor right now?"
Configuring zones
Zone configuration lives in Settings → Storage. From here you can set up each zone to match your physical warehouse layout.
For each zone, you configure:
- Zone name — the display label used throughout the system (defaults to A, B, C, D, F, H)
- Rows — the number of rows in the zone (numbered 01, 02, 03, ...)
- Columns — the number of columns per row (lettered A, B, C, ...)
- Levels — the number of vertical shelves per column (numbered 1, 2, 3, ...). Set to 1 for floor storage zones with no racking.
- Max capacity — the maximum number of skids the zone can hold. This drives the capacity tracking colour thresholds.
When you save a zone configuration change, it takes effect right away across the entire system. However, changes do not move existing skids. If you reduce the number of rows in a zone and there are skids stored in the removed rows, those skids will show a "location not found" warning. Always check that a zone is empty before shrinking its dimensions.
During initial setup, walk your warehouse with a tape measure and a notepad. Count the rows, columns, and levels for each racking section, and map them to EMS zones. Getting this right on day one means the slot auto-suggest during receiving will point operators to real, reachable locations from the start.
Best practices
- Put FIFO first. Store the oldest skids in the slots closest to the production line or dispatch area. When production pulls inventory, they should reach for the oldest stock first. This is especially important for products with expiry dates or stamp validity windows.
- Keep Zone H for short-term staging only. Holding is not long-term storage. If a skid has been in Zone H for more than 48 hours, it probably needs a permanent home in A through D. Review H zone contents at the start of every shift.
- Run weekly inventory checks on high-traffic zones. Zones that see a lot of put-away and pick activity — typically the zones closest to receiving and production — drift the fastest. A weekly check on these zones catches discrepancies early. Lower-traffic zones can be checked monthly.
- Use the search bar instead of browsing. If you know the skid ID or the slot address, type it in the search bar instead of clicking through zone cards. It is faster and less error-prone, especially on large warehouse layouts.
- Monitor capacity proactively. Don't wait for the 90% toast. Check the dashboard capacity bars at the start of each day, especially before a large shipment is expected. If a zone is already at 75% and a 40-skid shipment is arriving tomorrow, start planning overflow to another zone today.
- Label every slot. A storage system is only as good as its labelling. Print and affix QR labels to every slot during initial setup, and replace damaged or faded labels immediately. Unlabelled slots lead to manual data entry, which leads to errors.
