Multi-warehouse

Overview
Several warehouses with priority and their own stock valuation. The default warehouse handles stock resolution — it applies when no other one is specified.
Four levels build on one another: warehouse → bins → replenishment rules → stock. Stock per warehouse is read-only; postings arise through transfers and the posting routes of the other modules — never by typing a figure in.
Core tasks
Maintain warehouses. Priority and valuation per location; clicking the row opens the detail with bins, replenishment rules and stock.
Order the bins. Bins are sorted by picking sequence: pick priority ascending, then code. That sequence is the walking route in the warehouse — setting it sensibly saves steps on every pick.
Set replenishment rules. Min/max per product: if available stock falls below min, a suggestion arises to top up to max. There is exactly one rule per warehouse × product — so two contradictory rules cannot exist.
Consignment. Warehouses → Consignment shows what sits at the customer, what they consumed and which of it has not been invoiced yet. Three steps: see the stock at the customer (the work queue "consumed, not yet invoiced"), report consumption (product, quantity, optionally the customer's document reference) and mark as invoiced once the invoice has gone out. While the goods sit on the consignment shelf they are still ours — revenue only arises with the consumption report. To avoid ticking the loop back by hand, let an automation on the event consignment consumption reported do it.
Transfer. A transfer runs in three steps: create draft → send (outgoing) → receive (incoming). Between outgoing and incoming the goods are in transit and available in neither warehouse — exactly as reality has it.
Review suggestions across warehouses. The evaluation of all replenishment rules shows where topping up is due.
Keep B-stock separate. Stock per warehouse is split by item condition: new, used/B-stock, refurbished and damaged each have their own line. A return books the goods in the condition you recorded on the return line — a used return therefore never lands in new stock. Only new goods can be sold on orders; replenishment rules, putaway suggestions and stock takes exist per condition (default: new goods): a rule for B-stock only watches B-stock, and a stock take counts each condition on its own line. Checked B-stock becomes new goods again via change condition; a channel listing with a condition reads exactly that stock. The distribution across bins also applies per condition: B-stock can only be placed on a bin as far as unplaced B-stock exists (state the condition when putting away).
Fields in detail
The What it does column answers what changes in the system — not what the field is called. The grey name behind the label is the API field: the same thing runs under that name through automation, import and AI tools.
Creating and editing a warehouse
| Field | Required | Values / format | What it does |
|---|---|---|---|
Code code | yes | text, max. 30 characters | The warehouse identifier in bookings, labels and reports. Do not change it once stock lies on it. |
Name name | yes | text, max. 100 characters | What the warehouse is called in selection and overview. |
Warehouse type type | no | own warehouse (default), consignment or fulfilment warehouse | Who owns the warehouse and who books in it. A consignment warehouse keeps our goods at the customer's site: putting them in is a transfer without revenue, only consumption is invoiced. A fulfilment warehouse keeps our goods in someone else's operation: they pick for us, and stock arrives as their report, not from a booking of ours. |
Consignment customer partnerCustomerId | with consignment | an existing customer | Whose site the warehouse sits at. Without it a consumption report would not know who to bill. |
Operating service provider partnerSupplierId | no | an existing supplier | Who runs the fulfilment warehouse. Optional: what makes such a warehouse are its reports, not a master record. |
Identifier at the provider externalCode | no | text, max. 60 characters | The identifier the provider keeps this warehouse under. They know us by their number, not by our code — without it their reports cannot be matched. |
Default isDefault | no | yes/no | Which warehouse is chosen when nothing else is stated. There is exactly one; the mark moves. |
Priority priority | no | number | In what order warehouses are drawn on for a withdrawal. A lower number means earlier — so goods are taken first where it is cheapest. |
Valuation method valuationMethod | no | FIFO or average | How the stock value is calculated. FIFO values by order of receipt, average by moving mean. Switching the method later changes the reported stock value — it is an accounting decision, not a setting. |
Active active | no | yes/no | Off means no new bookings. Existing stock stays visible and must be transferred out first. |
Stock transfer
| Field | Required | Values / format | What it does |
|---|---|---|---|
From warehouse fromWarehouseUlid | yes | an existing warehouse | Where the goods come from. |
To warehouse toWarehouseUlid | yes | an existing warehouse | Where they go. |
Items items | yes | articles with quantity | What is transferred. More than is present cannot be booked. |
Note note | no | text | Why the transfer is made. |
A transfer has two stages: the outgoing side is booked, the goods count as in transit, and only the incoming side credits them to the target warehouse. In between they are available nowhere — that is intended and mirrors reality instead of doubling stock.
Replenishment rule
| Field | Required | Values / format | What it does |
|---|---|---|---|
Article productId | yes | stock-managed article | Which article is monitored. |
Minimum minQty | yes | whole number | If the available stock falls below it, a suggestion appears. |
Maximum maxQty | yes | whole number, at least the minimum | Up to where stock is topped up. |
Source warehouse sourceWarehouseId | no | another warehouse | Where the transfer comes from; empty means reordering. |
Target bin targetBinId | no | bin of the warehouse | With a bin, the rule watches this pick bin and suggests replenishment from reserve; without, it applies to the whole warehouse. |
Source bin sourceBinId | no | reserve bin of the warehouse | Fixed reserve bin for replenishment; empty means the reserve bin with the most stock. |
Condition condition | no | new (default), used/B-stock, refurbished, damaged | Which stock the rule watches. B-stock never covers a new-goods minimum; there is one rule per condition. |
On the Replenishment rules tab each rule's condition has its own column; in the dialog you choose it when creating and when editing (default new goods).
Interface and automation only
No mask carries these fields; they can be set through the interface, an import or an automation.
| Field | Values / format | What it does |
|---|---|---|
singleProductBins | yes/no (default: no) | Single-product bins: a bin holds at most one article. Placing stock into a bin that already holds a different article is rejected. Whoever stores single-product picks blind — a second article in the bin becomes an unnoticed mispick. Off means mixed bins are allowed. |
putawayTargetRequired | yes/no (default: no) | Mandatory target bin: a receipt without a bin is rejected. Unplaced quantity is stock the books know about and nobody can find. Off means unplaced quantity stays allowed. |
autoPutawayToDefaultBin | yes/no (default: no) | Receipts without a bin land on the default bin of the article instead of staying unplaced. Without a maintained default bin nothing changes. |
putawayStrategy | free location, name ascending/descending, sort ascending/descending (default: sort ascending) | The order in which free locations are proposed when putting away. Free location fills gaps, the name strategies walk the aisle systematically. Deliberately here rather than in the create dialog: it is one of four putaway switches, and the three above belong just as little in a mask where a warehouse is first created. |
address | address as structured data (street, postcode, city, country) | Where the warehouse is. Proposed as the delivery address for orders. |
Settings & permissions
- Module
module.warehouses. warehouses.warehouse.view/.manage,warehouses.stock.view/.manage,
warehouses.transfer.manage.
- Total stock lives in the product catalogue — its distribution lives here.
- Purchasing triggers no transfer. Lines from another warehouse are rejected there, see
FAQ & troubleshooting
Stock in a warehouse cannot be changed. By design — it is read-only. Post through a transfer or the respective module's route.
After sending, the goods are missing everywhere. They are in transit. Only receiving posts them at the destination.
No replenishment suggestion appears. Check whether a rule exists for that warehouse and product, and whether available stock really falls below min.
Two rules for the same product. There are none — exactly one rule per warehouse and product is possible.
A product appears twice in the stock list. It exists in two conditions, for example as new goods and as B-stock. The Condition column shows which line is which; the Condition filter shows only one of them.
The condition of a restocked return line cannot be changed. By design: the goods already sit in the stock of the old condition. First change the disposition (the goods leave stock again), then change the condition and restock.