Skip to main content

Location settings read by putaway, move and allocation

This file lists every column of a location and of the location lot mixing rule. For each one it says which process reads it.

Read 00-putaway-overview.md first. Zone settings are in 02-putaway-zone-settings.md. Policy and step settings are in 01-putaway-policy-steps-and-criteria.md.

How to read this file​

  • Screen: Sidebar > Topology > Locations. List form location_list_form (columns Type, ABC, Code, Putaway Zone, Level, Status). Open a row. The card has five tabs: General, Dimensions, Position, Attributes, Checks (section 4a, read only). A list Lot Commingle Rules sits below the card (section 4).
  • Buttons on the list: New, Delete, Refresh, Generate (bulk wizard Location Generator).
  • Roles: Admin, Manager and Operator create, change and delete a location. Viewer reads. Generate is for Admin and Manager. Lot mixing rules are for Admin and Manager (crates/services/app-server/src/web/rpcs/location_rpc.rs:18-27, loc_lot_commingle_rpc.rs:10-16).
  • Table: location (BASELINE:2956). BASELINE is crates/libs/wms-lib-sql/sql/wms-app/migrations/001_baseline.sql.
  • Paths to code start at crates/libs/ unless they start with crates/services/. location.rs means wms-lib-core/src/model/location.rs.
  • "Stored only. It has no effect today." means: no code in any crate reads the value (checked by searching all crates, SQL, the 3D page and the Go RF client).
  • Units: weight in grams, length in millimetres, volume in cubic millimetres. The screen converts them to the warehouse display unit (for example kg and m³) for the "physical" fields. Counts and coordinates are not converted.
  • Limits: 0 means "no limit set". It is not a block, and it is not zero capacity.
  • A location is identified by code. The code cannot be changed after creation.
  • There is no separate "put sequence" or "pick sequence" column. The only sequence column is Route Sequence (section 2.11).

Seed values​

A new warehouse has these locations (BASELINE:8350-8480, 064_discrete_pick_drop_and_in_transit_part_2.sql:19):

CodeTypeZoneNotes
UNKNOWN, DOCKOtherDOCKNo limits.
PICKTOPickto (set by migration 064; baseline says Other)DOCKDefault picking drop.
STAGEStageDOCKDefault inbound and outbound place of every zone.
LOSTLostDOCKDefault missing place of every zone.
QCQCDOCK
RETURNReturnsDOCK
RTVRtvDOCK
DAMAGEDamage, status DamageRACKThe damage bay.
INTRANSITInTransitDOCKExactly one in the warehouse. Kept by the system.
96 rack locations such as A-01-0Case (16 are Pick)RACKProcessing type Pallet (or Case), category SelectiveShelving, 2500 x 1200 x 1500 mm, max cube 4,500,000,000 mm³, max weight 1,000,000 / 800,000 / 600,000 / 400,000 g for levels 0 to 3, ABC B, footprint 0, stack limit 0, max quantity 0, no section, no check digit.

Do not delete or rename the system locations. Zones point at STAGE, PICKTO and LOST (RESTRICT keys).

1. Fixed gate: who can be a putaway candidate​

The putaway search reads only locations that pass all of these, whatever the policy says (location.rs:2136-2143 for a zone, :2185-2201 for one named location):

  1. Putaway Zone equals the zone being searched.
  2. Status is Ok.
  3. Flag is None.
  4. Discard LPN is not on.
  5. Type is one of Case, Pick, SpeedPick, Pnd, Sort, Other (the destination types putaway may use: wms-inventory/src/movement/validation.rs:135-148).

Then the step's own conditions narrow the list, and each remaining location is checked one by one (00-putaway-overview.md, section 3).

2. Fields of the card​

2.1 Code​

ItemValue
UI labelCode (required). Tab General.
Columnlocation.code
Type and valuesText, up to 20 characters. Primary key. Unique (location_pkey, BASELINE:11061).
DefaultNo default.
What it doesThe name of the place. It is what operators scan and type.
AffectsEvery process. Zones, steps, SKUs, owners and tasks point at it by code (see the delete rules below).
ExampleA-01-02.
Interacts withThe generator builds the code from a pattern (section 5).
When emptyNot allowed.
If you change itYou cannot. The update API has no code field. Create a new location instead.

Delete rules (location.rs:2258-2270): a location is refused for delete while stock, a reservation, a pick, a task, a receipt line, a zone special location, a putaway step or a SKU preferred location points at it. Message: Cannot delete location — referenced by 1 other record(s). The number is the count of locations you tried to delete, not the count of references. Lot rules of the location go with it (CASCADE). The owner defaults QC location and Returns location are set to empty (fk_owner_config_qc_loc, fk_owner_config_returns_loc: SET NULL). The system location INTRANSIT cannot be changed or deleted: location INTRANSIT is the warehouse's one location of open pick pallets, kept by the system: it is not deleted.

2.2 Type​

ItemValue
UI labelType (required in the form; list column Type). Tab General.
Columnlocation.loc_type (enum loc_type)
Type and values18 values, in the next table. They come from the code list LOCTYPE.
DefaultColumn default None. The form requires you to choose. None is not a storage type. Putaway and manual moves never land in it.
What it doesIt decides which movements may land here.
AffectsPutaway candidate gate (section 1). Move destination check validate_destination_authorization (validation.rs:222). Allocation (inventory_balance_atp.rs:343). Counts (inventory_count.rs:37). Owner pick drop location (trigger), work area pack station (trigger).
ExampleA pick face: Pick. A pallet rack bay: Case or Pnd.
Interacts withA step can narrow the type (Location type condition) but never widen it past the six allowed types. Only one InTransit location may exist (uq_location_one_in_transit).
When emptyNot possible (NOT NULL, default None).
If you change itNext suggestion and next move only. Stock already in the location stays. A location that holds stock and becomes QC or Damage keeps it.

What each value allows. "Yes" means the type is in the list of allowed destination types for that kind of move (validation.rs:135-197).

TypeUI textPutaway / correctionManual / repackReplenishmentPick moveMove to QCDamageRTVRelease from QC
None0 - Nonenononononononono
OtherOtheryesyesnoyesnononoyes
CasePICK - Caseyesyesnononononoyes
PickPICK - Pieceyesyesyesnonononoyes
PndPICK - Pallets, storageyesyesnoyesnononoyes
DoorDoornononononononono
PicktoPick-tononoyesyesnononono
SortSort stationyesyesnoyesnononono
SpeedPickSpeed Lineyesyesyesnonononoyes
QCQuality controlnonononoyesnonono
DamageDamagenononononoyesnono
RtvReturn to vendornonononononoyesno
DestroyDestructionnononononononono
ReturnsCustomer returnsnononononononono
StageStagingnononononononono
LostLostnononononononono
InTransitIn transit (open pick pallets)refusedrefusedrefusedrefusedrefusedrefusedrefusedrefused
PackPack stationnononononononono

Other facts about types:

  • "no" in a column means the move is refused with destination loc_type X not authorized for source_type Y (a supervisor can override this refusal). Other flows place stock in Door, Stage, Destroy, Returns, Lost, Pack by their own rules (for example short-pick remediation to the Lost place, pick drop to Pickto, Stage or Door, post-pick routing to Pack).
  • InTransit: no move takes stock out of it or puts stock into it: location X holds only open pick pallets: nothing moves into it (validation.rs:202, types.rs:592).
  • Allocation never picks stock from InTransit or Pack (inventory_balance_atp.rs:343). Lost is not excluded there. This is a known open point in the code comment. Stock booked to Lost can still be allocated.
  • Counts never include Lost or InTransit (inventory_count.rs:37).
  • The owner Pick drop location must be Pickto, Stage or Door (trigger owners_picking_toloc_is_a_drop_location, migration 055).
  • A work area pack station must be a Pack location (trigger work_area_pack_station_is_a_pack_location, migration 079).

2.3 Flag​

ItemValue
UI labelFlag. Tab General.
Columnlocation.loc_flag (enum loc_flag)
Type and valuesNone, CycleCountActive, SanitationActive, MaintenanceActive, ReceivingHoldoff. Code list LOCFLAG.
DefaultNone.
What it doesA temporary operational block. It takes the location out of automatic work while it is set.
AffectsPutaway candidate gate (flag must be None). Allocation (inventory_balance_atp.rs:457). Pick dispatch (wms-outbound/src/picking/infrastructure/dispatch.rs:164-170): a flagged location blocks a pick, except CycleCountActive when the caller allows a pick under a running count (cycle_count_block_tolerated). Count start (location.rs:1239-1356, inventory_count.rs:502): a count freezes Ok locations with flag None and sets CycleCountActive; it lifts only that value afterwards.
ExampleSet MaintenanceActive while a beam is repaired. Putaway and allocation skip the bay.
Interacts withA flag does not block a move. Owner decision 2026-07-26 (validation.rs:544-575, 603-634). An operator can still move stock in or out. Only Status (holds) blocks moves. Do not trust the column comment Move primitive U4/U5 require loc_flag=None (BASELINE comment on location.loc_flag). It is out of date.
When emptyNot possible. NOT NULL.
If you change itNext suggestion, allocation and pick dispatch only. A cycle count sets and clears CycleCountActive itself. Do not clear it by hand during a count.

Values: None nothing is wrong; CycleCountActive a count is running (set by the count or by a short pick); SanitationActive, MaintenanceActive, ReceivingHoldoff set by hand. The last three have no other special code. They block exactly like any non-None flag.

2.4 Status​

ItemValue
UI labelStatus (list column and card). Read-only. Tab General.
Columnlocation.status (enum loc_status)
Type and valuesOk, Hold, Damage.
DefaultOk.
What it doesIt shows whether the location is on hold. It is derived from the active holds on the location. You cannot set it. The server ignores a value you send (location_rpc.rs:42, 94; the form field is disabled by wms-meta-ui migration 077).
AffectsPutaway gate (must be Ok). Allocation (l.status = 'Ok'). Pick dispatch (LocationBlocked). Count freeze. The receive path reads it to derive a disposition. The move itself reads the covering holds, not this column (validation.rs:548-635).
ExamplePlace a hold with code Damaged on B-04-1. The status becomes Damage. Release the hold: back to Ok.
Interacts withThe rule (wms-inventory/src/service/hold.rs:430-517): any active hold with code Damaged gives Damage. Else any other active hold whose code enforces gives Hold. Holds whose code only informs (not enforcing) do nothing. No holds: Ok.
When emptyNot possible.
If you change itPlace or release a hold (Sidebar > Inventory Balances > Holds, hold codes under Sidebar > Code > Hold Codes).

What a hold does to moves:

  • A hold on the destination whose code blocks inbound flow stops the landing: destination location blocked: active hold code=LocBlocked (id=12). A hold whose code only warns asks the operator to acknowledge it.
  • A hold on the source whose code blocks outbound flow stops the move: source location blocked: active hold code=... (id=...).
  • The catalog says per code whether it blocks inbound, outbound or both. The Damaged code blocks outbound only, so a damage bay can receive damaged stock (validation.rs:581-602).
  • Section holds for oversize goods use the code LocBlocked (putaway/section_holds.rs).

2.5 Processing Type​

ItemValue
UI labelProcessing Type. Tab General.
Columnlocation.loc_processing_type (enum loc_proc_type)
Type and valuesNone, Pallet, Case, Piece.
DefaultNone.
What it doesSays in what handling unit stock is processed here.
AffectsOnly the putaway condition Processing type (candidates.rs:470-472). Nothing else reads it.
ExamplePallet for rack bays. A step: Processing type is Pallet.
Interacts withNothing else.
When emptyNot possible.
If you change itNext suggestion only.

2.6 Category​

ItemValue
UI labelCategory. Tab General.
Columnlocation.loc_category (enum loc_category)
Type and valuesNone, NoPalletization, Asrs, CantileverRack, CartonFlow, DenseStorage, DoubleDeepRack, DriveInRack, DriveThroughRack, HorizontalCarousel, Other, PalletFlowRack, PalletCarousel, PushBackRack, SelectiveShelving, ShelvingStorage, WorkCenter.
DefaultNone. Seeds: SelectiveShelving for the rack locations.
What it doesA label for the kind of storage equipment. It has no behaviour of its own.
AffectsPutaway condition Location category (candidates.rs:467-469). Allocation step filter location category (inventory_balance_atp.rs:366, 460).
ExampleSmall parts: ShelvingStorage.
Interacts withNothing else.
When emptyNot possible.
If you change itNext suggestion and next allocation only.

2.7 ABC​

ItemValue
UI labelABC. Tab General.
Columnlocation.abc (enum abc_speed_type)
Type and valuesA, B, C.
DefaultB.
What it doesSpeed class of the place. A is fast.
AffectsPutaway condition Location ABC (candidates.rs:473-475). Allocation step filter location ABC (inventory_balance_atp.rs:367, 461).
ExampleA pick face near the door: A.
Interacts withPair it with the SKU ABC Class and the putaway condition SKU ABC.
When emptyNot possible. Default B.
If you change itNext suggestion and next allocation only.

2.8 Level​

ItemValue
UI labelLevel. Tab General.
Columnlocation.level
Type and valuesWhole number. Default 0. 0 is the floor.
Default0. Seeds: 0 to 3.
What it doesThe shelf level.
AffectsPutaway order: the third sort key (after aisle and bay) (location.rs:420). 3D page (filter and color by level). The generator sets it from the level range.
ExampleA-01 level 0 comes before A-01 level 1.
Interacts withWith Aisle and Bay (section 3). If aisle and bay are empty, the order is by level, then code.
When emptyNot possible.
If you change itNext suggestion only.

2.9 Putaway Zone​

ItemValue
UI labelPutaway Zone (picker). Tab General.
Columnlocation.putawayzone
Type and valuesZone code. NOT NULL. FK fk_location_putawayzone (RESTRICT).
DefaultDOCK. The zone DOCK must exist.
What it doesPuts the location in a zone. Putaway searches by zone. Zone limits are summed over its locations.
AffectsPutaway search and zone capacity (02-putaway-zone-settings.md). Allocation step filter by zone. Work areas, count scope, printing (zone tier). 3D color.
ExampleA-01-0 in BULK.
Interacts withThe special locations STAGE, PICKTO, LOST are in DOCK and count in its totals.
When emptyNot possible.
If you change itThe stock of the location moves to the new zone's totals at once (zone totals are computed live). Nothing is blocked if the new zone is now over its limit. Reservations stay on the location.

2.10 Check Digit​

ItemValue
UI labelCheck Digit. Tab General. The field is read-only on the screen (loc_normal_render, extra read-only field).
Columnlocation.check_digit
Type and valuesText, up to 3 characters. NULL allowed.
DefaultNULL. Seeds: NULL.
What it doesA control character for a printed location label.
AffectsIt is written once, when a location is created — with New or by the Generate wizard — and the system setting CHECK_DIGIT_ENABLED is on (LocBmc::create and LocBmc::create_many_with_loc_generator, wms-lib-core/src/model/location.rs). Nothing reads it afterwards. Stored only. It has no effect today.
ExampleA-01-0 gives G (strip -; A=1, 0=27, 1=28, 0=27; 1x1 + 27x2 + 28x3 + 27x4 = 247; 247 mod 29 = 15; map index 16 = G; wms-lib-core/src/model/location_check_digit.rs).
Interacts withCHECK_DIGIT_ENABLED (system setting, seed true, BASELINE:9947). Any text that means "on" works (1, yes, on, true). A location created by API with its own value keeps it.
When emptyAllowed.
If you change itNothing else changes.

To verify (that scanning does not check it): on a test stand, set check_digit of a location to ZZZ through the API method update_loc, then move a pallet to that location by scanning only its code. If the move is accepted, nothing checks the digit.

2.11 Route Sequence​

ItemValue
UI labelRoute Sequence. Tab General.
Columnlocation.route_sequence
Type and valuesText, up to 10 characters. NOT NULL.
DefaultEmpty text for New. The Generate wizard numbers its locations 0001, 0002, … in the order it makes them (section 5). Seeds: the rack locations use A-04 style values; system locations use their code.
What it doesThe walking order of the warehouse for picking. Locations are ordered by this text.
AffectsAllocation: candidates are ordered by route_sequence, then code, as plain text (wms-outbound/src/allocation/select.rs:365-371). Task claim: ORDER BY priority, NULLIF(route_sequence,'') blank last (wms-lib-core/src/model/tasks/task.rs:635). Pick route: blank last, then location code (wms-outbound/src/domain/pick_assignment/route.rs:29-46). Pick targets use the first route value. Putaway does not read it.
Example0010, 0020, 0100. Use fixed width with leading zeros.
Interacts withThe sort is by text. A-10 comes before A-2. In allocation an empty value sorts first. In task claim and pick routes an empty value sorts last.
When emptyEmpty is allowed. See above for the two behaviours.
If you change itThe value is read live. It acts on the next allocation, the next task claim and the next pick route. Tasks that exist are not rewritten, but they are claimed in the new order.

2.12 Mix SKU​

ItemValue
UI labelMix SKU (checkbox). Tab General.
Columnlocation.mix_sku
Type and valuestrue or false.
Defaulttrue (DEFAULT_LOC_MIX_SKU, location.rs:38).
What it doesOff: only one product can stand in the location.
AffectsThe landing check on every receive, move and putaway (inventory_service.rs:999-1051). Also a batch with two SKUs landing together (:943-985). Putaway refusal code mix_sku, text Location L does not allow SKU mixing (incoming sku B, existing ["A"]). Putaway condition Mixed SKU (location side).
ExampleLocation S-01 holds SKU A (qty 20). A pallet of SKU B is refused.
Interacts withThe system looks at stock with qty, qty_allocated or qty_picked above 0 in that location. The same SKU code under another owner counts as another product. The check at landing looks at landed stock only, and a refusal there is final. Putaway suggestions also count the pallets on their way (active reservations): a location with Mix SKU off is not suggested to a pallet whose SKU differs from the stock there or from a pallet already directed there (rule location_mix, refusal mix_sku), even when the step has no mixing rule (P-18). The step rule Mixed SKU = Not allowed can still narrow further. It cannot allow what the location forbids.
When emptyNULL is read as true. The column is NOT NULL, so it does not occur.
If you change itNext landing only. Stock already mixed stays. New landings of any of those SKUs are then refused.

2.13 Mix Lot​

ItemValue
UI labelMix Lot (checkbox). Tab General.
Columnlocation.mix_lot
Type and valuestrue or false.
Defaulttrue (DEFAULT_LOC_MIX_LOT, location.rs:39).
What it doesOff: only one lot can stand in the location.
Affectsinventory_service.rs:1054-1091. Code mix_lot, text Location L does not allow lot mixing (incoming lot Some("L2"), existing ["L1"]). Putaway condition Mixed lot. Also: when this flag is off, the attribute rules of section 4 are skipped (inventory_service.rs:1449-1453).
ExampleLocation holds lot L1. A pallet of lot L2 is refused.
Interacts withAt landing: counts stock with qty above 0 only; a pallet with no lot passes when the location holds exactly one lot. Putaway suggestions also count the lots on their way (rule location_mix, refusal mix_lot), so a second lot is not directed to a location with Mix Lot off (P-18).
When emptyNULL is read as true.
If you change itNext landing only.

2.14 Discard LPN​

ItemValue
UI labelDiscard LPN (checkbox). Tab General. Also known as LOSE ID.
Columnlocation.discard_lpn
Type and valuestrue or false.
Defaultfalse.
What it doesStock that lands here loses its container (LPN) and stands loose.
AffectsReceiving (wms-inventory/src/deposit/deposit.rs:176) and moves (movement/service.rs:415-446) drop the LPN. Putaway never offers such a location (gate, section 1). Allocation: a "whole pallet" rule skips loose stock (allocation/select.rs:236, 705).
ExampleA piece-pick shelf: on. Receiving a pallet to it puts pieces loose.
Interacts withThe comment in predicate.rs:197-218 says putaway does not exclude such locations. That is out of date. The candidate SQL excludes them (location.rs:2143).
When emptyNot possible.
If you change itNext landing only.

2.15 Section​

ItemValue
UI labelSection. Tab General.
Columnlocation.section
Type and valuesText, up to 30 characters. NULL allowed. A blank means NULL.
DefaultNULL = the location is its own section.
What it doesGroups positions with no beam between them, so one oversize object can stand across them.
AffectsOnly for SKUs with Positions required above 1. Putaway looks for a whole free section (space.rs:1052-1089, location.rs:2315-2364). The section size: widths add, depth and height take the minimum. After landing, the other positions are held with LocBlocked (section_holds.rs). 3D page shows the lock.
ExampleSection N1 has 3 positions of width 1200, length 1000, height 1500 each. A sofa 3200 x 900 x 1400 fits (width 3600). One of the 3 positions has a pallet in it: the section is not free.
Interacts withThe size test uses the pallet base and height described on the pack, not the step switch. If the pack describes nothing, only the number of free positions is tested. Refusals: section_none, section_not_free, section_too_small.
When emptyEach location is alone. An oversize SKU is refused everywhere with section_none.
If you change itNext suggestion only. Clear it by emptying the field.

3. Dimensions tab and Position tab​

3.1 Cube (own volume)​

ItemValue
UI labelCube. Tab Dimensions. Physical: volume.
Columnlocation.cube
Type and valuesDecimal, 0 or more. Default 0.
What it doesNothing today.
AffectsStored only. It has no effect today. The capacity checks read Max Cube Capacity, not this field.
Example3,600,000,000. No check uses it.
Interacts withNone.
When empty0.
If you change itNothing else changes.

3.2 Length, Width, Height​

ItemValue
UI labelLength, Width, Height. Tab Dimensions. Physical: length.
Columnlocation.length, location.width, location.height
Type and valuesDecimal, 0 or more. Default 0. Millimetres.
What it doesThe size of the place.
AffectsPutaway step switch Pallet dimensions: the pallet base must fit length x width (both ways round) and the pallet height must be at most the height (space.rs:354-367, 875-918). Section size for oversize goods (location.rs:2326-2347). 3D drawing (defaults 2 x 1 x 1.5 m when 0).
Example2500 x 1200 x 1500. Pallet base 1200 x 800, height 1650: footprint fits, height does not. Refused: loc_height: location 1500, pallet 1650.
Interacts withA value of 0 means "not measured". With Pallet dimensions on, the trace says loc_footprint:no_location_dims, and the location is still offered.
When empty0.
If you change itNext suggestion only.

3.3 Max Cube Capacity​

ItemValue
UI labelMax Cube Capacity. Tab Dimensions. Physical: volume.
Columnlocation.max_cube_capacity
Type and valuesDecimal, 0 or more (CHECK chk_location_cube_capacity). Default 0.
What it doesThe volume the stock in the location may not exceed.
AffectsPutaway switch Cube (space.rs:761-767). The move itself always checks it: capacity exceeded (loc_cube): limit=L, attempted=A (validation.rs:960-968).
ExampleLimit 4,500,000,000 mm³. Held 3,000,000,000. Pallet 1,800,000,000. Attempted 4,800,000,000. Refused.
Interacts withVolume of stock is sum of SKU cube x quantity. A SKU with cube 0 adds 0. Counts stock and active reservations. Skipped if the pallet is already in the location.
When empty0 = no limit. Reported as loc_cube:no_limit.
If you change itNext suggestion and move only. Stock above the new limit stays.

3.4 Max Weight Capacity​

ItemValue
UI labelMax Weight Capacity. Tab Dimensions. Physical: weight.
Columnlocation.max_weight_capacity
Type and valuesDecimal, 0 or more (CHECK chk_location_weight_capacity). Default 0. Grams.
What it doesThe weight the stock may not exceed.
AffectsPutaway switch Weight (space.rs:754-760). The move always checks it: capacity exceeded (loc_weight).
ExampleLevel 3 bay: 400,000 g (400 kg). Pallet 720,000 g. Refused: loc_weight: limit 400000, attempted 720000.
Interacts withIf no weight is known for the pallet, the check is not run (loc_weight:no_stock_weight).
When empty0 = no limit. Reported as loc_weight:no_limit.
If you change itNext suggestion and move only.

3.5 Pallet positions on floor​

ItemValue
UI labelPallet positions on floor. Tab Dimensions.
Columnlocation.footprint
Type and valuesWhole number (smallint), 0 or more. Default 0.
What it doesHow many pallets stand on the floor of this place.
AffectsPutaway switch Stacking limit: capacity = this x the stack limit (space.rs:704-727).
Example2 floor positions x stack limit 3 = 6 pallets.
Interacts withWith Stack limit. If either is 0, the limit is 0, reported as loc_positions:no_limit. The move does not check it.
When empty0 = not configured.
If you change itNext suggestion only.

3.6 Stack limit​

ItemValue
UI labelStack limit. Tab Dimensions.
Columnlocation.stack_limit
Type and valuesWhole number (smallint), 0 or more. Default 0.
What it doesHow many pallets may stack in a pile here.
AffectsPutaway switch Stacking limit. The lower of this and the SKU Stack limit is used; the refusal names which one (loc_positions or item_positions).
ExampleRack says 3. The item says 2. Limit is 2 per floor position. Detail item_positions: limit 4, attempted 5 (footprint 2).
Interacts withAn item may lower the rack's limit, never raise it. If the rack has 0 and the item has a value, the item's value is used.
When empty0 = no opinion.
If you change itNext suggestion only.

3.7 Max quantity​

ItemValue
UI labelMax quantity. Tab Dimensions. A count, not converted.
Columnlocation.max_qty_capacity
Type and valuesDecimal, 0 or more (CHECK chk_location_max_qty_not_negative). Default 0.
What it doesHow much stock a pick face holds before it is full.
AffectsPutaway switch Quantity (space.rs:732-742). The move does not check it.
ExampleLimit 500 pieces. Holds 380. Arriving 150. Refused: loc_qty: limit 500, attempted 530.
Interacts withPlain sum of quantities in stored units, across all SKUs in the location.
When empty0 = not configured. Reported as loc_qty:no_limit, not read as unlimited-by-choice.
If you change itNext suggestion only.

3.8 X Coord, Y Coord, Z Coord​

ItemValue
UI labelX Coord, Y Coord, Z Coord. Tab Position.
Columnlocation.x_coord, y_coord, z_coord
Type and valuesDecimal, 0 or more. Default 0. Not in the warehouse length unit: the 3D page treats them as layout metres (public/assets/js/warehouse-3d.js:171).
What it doesWhere the place is on the 3D map.
AffectsThe 3D page. The redirect: when an operator cannot use the suggested location, the new suggestion is sorted by the straight-line distance from where the operator stands (putaway/mod.rs:358-414). A redirect over 30 units is logged as a last resort (LONG_REDIRECT_DISTANCE, mod.rs:300). Section member order (container.rs:867).
ExampleOperator at (10, 6, 0). Candidate A at (12, 6, 0) is 2 away and comes before B at (30, 6, 0).
Interacts withThe ordinary Pick route ordering does not use coordinates.
When empty0. All locations at 0 make a redirect no better than the code order.
If you change itNext 3D draw and next redirect only.

3.9 Aisle​

ItemValue
UI labelAisle. Tab Position.
Columnlocation.aisle
Type and valuesText, up to 10 characters. NOT NULL. Default empty.
What it doesThe aisle name.
AffectsPutaway order: the first sort key (location.rs:420). 3D filters.
ExampleA, B.
Interacts withText sort: A10 comes before A2. Use fixed-width names such as A02, A10. The Generate wizard does not set aisle. Generated locations have an empty aisle, so putaway orders them by bay (0), then level, then code.
When emptyEmpty text sorts first.
If you change itNext suggestion only.

3.10 Bay​

ItemValue
UI labelBay. Tab Position. (The Russian label is the same word as Section.)
Columnlocation.bay
Type and valuesWhole number, 0 or more (CHECK chk_location_bay). Default 0.
What it doesThe bay number in the aisle.
AffectsPutaway order: the second sort key. 3D.
ExampleBay 2 comes before bay 10 (a number).
Interacts withSame as 3.9.
When empty0.
If you change itNext suggestion only.

4. Location lot mixing rules​

List Lot Commingle Rules under the location card. Edit form: Location Code (read-only), Attribute Code (picker, required), Allow Mix. Table: location_lot_commingle (BASELINE:3067). One row per (location, attribute) (BASELINE:11033). The meaning and the evaluation order are the same as for the zone rule. See 02-putaway-zone-settings.md, section 3.

FieldColumnType and defaultNotes
Location Codelocation_codeLocation code. FK, CASCADE.Unknown location: Location 'X' not found.
Attribute Codeattrib_codeText, up to 20. Must be a lot policy attribute code.Unknown: Lot attribute 'X' not found.
Allow Mixallow_mixtrue or false, default true.See below.

What Allow Mix does here:

  • It is the first rule looked up for the attribute. It overrides the zone rule, both ways. Allow Mix on a location inside a zone that forbids mixing is a deliberate exception.
  • Off: a pallet whose lots have different values of the attribute cannot land in this location. Refusal code mix_attribute, source text location_lot_commingle rule on location L.
  • It applies only to SKUs whose lot policy contains the attribute, and only when the location's Mix Lot flag is on.
  • When empty or no row: the zone rule is used. If none, mixing is allowed.
  • If you change it: next landing only.

4a. Checks tab​

Read only. Every time somebody looked at the location, the latest first: its counts (not cancelled, once counted) and every answer to "is this location empty?" an operator gave there in passing — after a pick that emptied it, when the picking policy's On an Emptied Location is Confirm, or after a manual move that emptied it, when the owner's Confirm Empty After Move is on (count spec Appendix L, docs/superpowers/specs/2026-10-04-inventory-count-design.md) — and every report of stock the system does not show there (RF Report Unexpected Stock, Appendix M). Query location_checks (crates/services/app-server/src/web/rpcs/inventory_count_rpc.rs), list form location_checks_list_form (wms-meta-ui 151).

ColumnWhat it shows
WhenWhen the count was completed, or when the answer was given.
CheckCount, or the answer read against the stock: ConfirmedEmpty (empty, the stock holds nothing), DeniedEmpty (not empty, the stock holds nothing), EmptyAgainstStock (empty, the stock holds something); or UnexpectedStock — an operator's report of stock the system does not show.
OutcomeA count: its task's status (Closed, Variance, Recounted …). An answer the stock contradicted: CountRequested — the location was asked to be counted.
HeldAn answer: what the location held then (sum of its balances).
WhoThe operator's login.
OperationA count: its number and attempt (CNT… / 2). An answer: the operation that asked (PickCommit #<pick>, or Move #<transaction_log row>); a report, what it named (Report: LPN … / SKU …).

A cycle-count policy with Trust Empty Confirmations takes the latest ConfirmedEmpty here for a check of the location. The album report Подтверждения пустоты lists the answers of a period and the share the stock contradicted.

5. The Generate wizard​

Generate makes many locations at once (limit 10,000 per run). It sets only what the steps ask:

StepFieldsWritten to
Code patternAisle Start/End, Level Start/End, Location Start/End, prefixes and suffixescode (pattern LOC_GEN_PATTERN, default <AISLE_PREFIX><AISLE>-<LEVEL>-<LOC>, BASELINE:9948) and level
ClassificationLocation Flag, Location Category, Processing Type, Status (disabled), ABC Rotation, Putaway Zone, Mix SKU, Mix Lot, Discard LPN, Location Type (required)the same columns
DimensionsCube, Length, Width, Height, Max Cube Capacity, Max Weight Capacitythe same columns

Each generated location also gets, on its own:

  • Aisle — the aisle part of its code, with the aisle prefix and suffix (A01, A02, …). At most 10 characters, or the run is refused.
  • Route Sequence — its number in generation order, zero-padded to one width: 0001, 0002, … A number given in route_sequence (API) is the first one (0500 gives 0500, 0501, …); anything that is not a number refuses the run.
  • Check Digit — when CHECK_DIGIT_ENABLED is on, like New (2.10).

It never sets Bay, Pallet positions on floor, Stack limit, Max quantity, Section, or coordinates (wms-meta-ui wizard payload: web-ui-server/.../location/wizard_submit_action.rs:98-170). Set them afterwards, or the stacking and quantity checks report no_limit. A run is all or nothing: if any generated code already exists, nothing is created and the error lists the existing codes (the first 20, then how many more).

6. System settings that touch locations​

SettingDefaultEffect
CHECK_DIGIT_ENABLEDtrueA new location made with New or Generate gets a check digit (2.10).
LOC_GEN_PATTERN<AISLE_PREFIX><AISLE>-<LEVEL>-<LOC>Pattern of generated codes.
PUTAWAY_RESERVATION_TTL_MIN15Minutes a suggested location stays reserved.
PUTAWAY_LOCK_TIMEOUT_MSseeded 5000 (wms-app 091)How long putaway waits for a busy location.

7. Count of location settings​

27 columns on the location (plus the id and audit stamps) and 3 on the lot mixing rule. Stored only (no effect today): Cube (own volume) and Check Digit (written once, never read). Read only by one narrow feature: Processing Type (putaway condition), Category and ABC (putaway condition and allocation filter). Not used by putaway: Route Sequence (used by allocation, tasks and pick routes).