Files
mcp-wms-wiki/wiki/concepts/replenishment.md
T
2026-05-20 09:41:27 +02:00

403 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "Replenishment"
type: concept
sources:
- areas/replenishments/replenishment_admin/replenishment_strategies.md
- areas/replenishments/replenishment_admin/picking_locations.md
- areas/replenishments/replenishment_admin/efficiency_mode.md
- areas/replenishments/replenishment_admin/dynamic.md
- areas/replenishments/replenishment_admin/automatic_replenish.md
- areas/replenishments/replenishment_admin/conditions.md
- areas/replenishments/replenishment_pk/index.md
- areas/putaway/configurations/putaway_configuration01.md
- custom/analyse_fonctionnelle.md
- sources/archives/05_Gestion_picking_dedie.md
- sources/archives/20_Strategies_reapprovisionnement.md
- sources/archives/30_Reapprovisionnement_2_sous_entrepots_zone_intermediaire.md
related:
- concepts/picking.md
- concepts/putaway.md
- concepts/stock.md
- concepts/container.md
last_compiled: "2026-04-17"
---
# Replenishment
## Overview
Replenishment is the process of moving stock from bulk storage locations to **picking dedicated locations (PDL)** to ensure that operators always have stock available to fulfill shipping orders without going to the main rack. It is a supporting process that feeds the picking operation — without replenishment, picking dedicated locations would run dry and order preparation would stall.
A **picking dedicated location (PDL)** is a location permanently or dynamically assigned to one item (sometimes one item per partition). PDLs are configured with a minimum (replenishment threshold) and maximum (capacity). When stock in the PDL drops below the minimum, the replenishment system detects the shortage and generates a replenishment task to refill from a source location.
Replenishment in EasyWMS operates at two levels:
1. **PDL replenishment** — refilling picking dedicated locations from bulk storage
2. **Sub-warehouse replenishment** — moving stock from one sub-warehouse to another to balance inventory
## Picking Dedicated Locations (PDL)
### PDL Concept
A PDL is a location with an item assignment that designates it as the primary picking source for that item. Key properties:
| Property | Description |
|---|---|
| **Location** | Must have: allow item assignment, allow picking, allow replenish, allow putaway |
| **Item** | One item recommended per PDL (multiple items allowed but not typical) |
| **Owner** | Owner of the item |
| **Replenishment mode** | Container (move whole container) or Stock (move loose stock) — cannot mix both |
| **Conversion** | Unit of measure in which replenishment level and capacity are expressed |
| **Logistic attributes** | Specific batch, color, quality, etc. — PDL will be replenished with matching stock only |
| **Maximum lots** | Limit how many different lots can be present in the PDL simultaneously |
| **Expired stock flag** | PDL can be configured to receive only expired stock |
| **Days of life** | Replenish with stock whose shelf life ≥ (detection date + days of life) |
| **Stock status** | Restrict to stock in a specific status |
**For stock-mode PDLs — threshold types:**
| Threshold type | Description | Notes |
|---------------|-------------|-------|
| **Pieces (quantity)** | Replenish when stock drops below N units (in conversion UoM or base UoM) | Simplest mode; no container-count knowledge required |
| **Container count** | Replenish when number of containers in the PDL drops below N | Requires the PDL to track container presence |
| **% of full container** | Replenish when stock falls below X% of a full container's standard quantity | Requires conversion definition (UoM × container conversion = full quantity); allows absorbing incoming container excess |
- **Capacity**: maximum stock quantity allowed at the PDL
**For container-mode PDLs:**
- **Minimum containers**: replenish when container count drops below this
- **Maximum containers**: capacity ceiling
- **Replenishment level %** (if max = 1): percentage of full-container quantity below which replenishment is triggered; allows exceeding the full quantity to absorb the incoming container's excess stock
### PDL — EasyS / SmartUI Configuration
**EasyS — Location setup**, check :
- `Allow product location`
- `Allow replenish at source`
- `Allow picking`
**SmartUI — `Entrepôt → Emplacements consacrés au picking`** :
- Enter the **replenishment level** (minimum threshold)
- Enter the **maximum capacity**
- Check **Étiquetté** (mandatory)
- Enter a **Texte personnalisé** (custom label)
- Print the PDL barcodes
> 💡 Labels display as `Code emplacement [Label]` (e.g. `B-1-4 [Clavier M]`). With many PDLs this is hard to scan through — Mecalux France standard is to **prefix labels with an ordered code** (e.g. `B-1-4 [01 Clavier M]`, `B-1-4 [02 Clavier L]`...) so the operator can sort them visually.
> ⚠️ **Known limitations** documented by Mecalux France (2022 tests) :
> - The **destination is not displayed** when the WMS generates putaway tasks towards a PDL.
> - **Maximum capacity is not strictly enforced** at putaway — cases of 26 units put away in a capacity-15 PDL have been observed. Rely on replenishment threshold + periodic count rather than `max capacity` as a hard limit.
>
> Positive : **minimum-threshold replenishment works correctly** — a task is generated to top the PDL back up to its maximum once the minimum is crossed.
### PDL Creation Methods
| Method | Trigger |
|---|---|
| Web interface | Warehouse manager manually creates PDL assignments |
| RFT during putaway | Operator assigns item to location while unloading (if `UNLOAD_CREATE_PRODUCT_LOCATION` enabled) |
| RFT during counting | Item assigned during stock count (if `UNLOAD_CREATE_PRODUCT_LOCATION` and `REPLENISH_LEVEL_PERCENT_PRODUCT_LOCATION` enabled) |
| RFT — "Assign item to loc." | Dedicated menu option in Utilities |
| Automatically (dynamic replenishment) | System creates PDL on-the-fly for items in active shipping orders |
### PDL Partitions
A single physical location can be subdivided into **partitions** — labeled divisions each assigned to a different item. This enables high-density picking areas (drawers, shelves divided by bins).
Key partition rules:
- Each partition is identified by a unique QR label (code unique within the location)
- A partition is NOT a separate location — stock belongs to the location; the partition identifies which item occupies which physical space
- One partition can be shared across multiple items; one item can use multiple partitions
- A partition can be marked **full** to prevent further putaway to that partition
- **Maximum partitions per item**: configurable limit to prevent one item from monopolizing a location's partitions
Partition labels can be printed for a range of locations with optional text (item code, UoM, logistic attributes, or custom text).
### PDL Release on Empty
When enabled, a PDL is released (item assignment removed) when the location becomes empty:
- **Automatic replenishment mode**: PDL is only released if no valid replenishment stock remains in the entire warehouse
- **Manual replenishment mode**: PDL is released immediately when empty (no automatic tasks to prevent it)
Use case: seasonal warehouses where item rotation is planned.
## Replenishment Strategies
Replenishment tasks are generated based on enabled **replenishment strategies**. Four strategy types exist.
### SmartUI / French terminology mapping
Mecalux France uses three shortcut names that map to the strategy types below:
| FR label | Type below | Trigger | Typical usage |
|---|---|---|---|
| **"Routine"** | Stockout (automatic) | `TryToReplenishProductLocations` job every 12 min | Default — refill PDL when stock drops under the minimum |
| **"Conclure"** | Particular demand (top-off) | RFT menu **Réapprovisionnement** or SmartUI "Réapprovisionner maintenant" on the PDL view | Operator-triggered, high-priority replenishment |
| **"Exiger"** | Shipping demand (dynamic) | Order released with dynamic replenishment, or static flag `<EnableReplenishment>` on ROR | Create PDLs on the fly for items in released orders; also tops up when stock ≥ min but < order need |
**EasyS location setup (common to all three):**
- Picking locations to replenish: `Allow picking` + `Allow product location` + `Allow replenish`
- Reserve (source) locations: `Allow replenish at source`
**SmartUI configuration checklist (routine, conclure, exiger):**
1. `Entrepôt → Gestion des emplacements picking` — create PDL assignments, set **min threshold** (per container: tick "Réapprovisionnement de conteneur", or in base UoM) and **max capacity**
2. Activate automatic replenishment on the PDL (for routine)
3. `Configuration → Stratégie de réapprovisionnement` — create the strategy; pick filters (item, owner, item type, sub-warehouse, destination zone) and a **Mode efficacité** (see table below)
4. **Activate** the strategy (to edit it later, deactivate first)
5. `Configuration → Processus` — ensure `TryToReplenishProductLocations` is enabled and runs on a 12 min cycle
6. Confirm source stock is eligible (no blocking status, no location lock, not already assigned to shipping)
### Efficiency mode — SmartUI values
| FR field | Behaviour |
|---|---|
| **Efficacité** | Minimise the number of tasks needed to reach capacity |
| **Emplacement le plus proche** | Pick the available source closest to the PDL |
| **À vider** | Pick the source that will empty the reserve location (limited value when replenishing by container) |
### 1. Top-off (Particular Demand)
**Trigger:** Manual request from RFT or web interface for specific location(s) or aisles.
Used when an operator notices a PDL is running low and requests immediate replenishment before the stockout strategy would have fired, or for ad-hoc needs.
| Configuration | Description |
|---|---|
| Efficiency mode | Efficiency / To empty / Nearest location |
| Logic | Before efficiency / After efficiency |
| Particularized for | Filter by item, owner, item type, destination sub-warehouse, destination zone |
| Stock selection | Restrict origin to specific sub-warehouse or zone |
### 2. Shipping Demand (Dynamic)
**Trigger:** Shipping order that has "dynamic replenishment" enabled, or manual/ERP request for specific orders. Also triggerable from RFT filtered by release date or load date.
System checks pending shipping orders to determine what items and quantities are needed. It then:
1. Finds existing PDLs for the requested items and checks if they have enough stock
2. If insufficient → creates replenishment tasks to fill existing PDLs
3. If no PDL exists → searches for empty candidate locations with automatic item assignment mode + allow picking + allow replenish → creates **dynamic PDLs** with capacity = quantity needed for pending orders
Dynamic PDLs are adjusted in subsequent runs (capacity updated as orders are created or canceled). Fixed PDLs are never modified by dynamic replenishment.
**Item configuration required:** item shipping profile must have "dynamic replenishment" active.
**ERP trigger:** `SOR` message requests replenishment for specific shipping orders.
| Configuration | Description |
|---|---|
| Efficiency mode | Efficiency / To empty / Nearest location |
| Logic | Before efficiency / After efficiency |
| Particularized for | Item, owner, item type, putaway profile, destination sub-warehouse/zone, use item temperature |
| Stock selection | Restrict origin to specific sub-warehouse or zone |
### 3. Stockout (Automatic)
**Trigger:** Automatic background job `TryToReplenishProductLocations` runs every minute.
When stock at a PDL drops below its replenishment level, the job generates replenishment tasks automatically without any manual intervention.
| Configuration | Description |
|---|---|
| Efficiency mode | Efficiency / To empty / Nearest location |
| Logic | Before efficiency / After efficiency |
| Particularized for | Item, owner, item type, destination sub-warehouse/zone |
| Stock selection | Restrict origin to specific sub-warehouse or zone |
**PDL must have "Enable replenishment" activated** in the Picking Dedicated Locations view.
**Parameter `MAX_REPLENISHED_PL_ROUTINE_JOB`:** Maximum PDLs processed per job run (0 = unlimited). Controls processing complexity; default frequency of every minute ensures adequate throughput.
### 4. Sub-warehouse Replenishment
**Trigger:** Manual request (all items in need, or selected items).
Used when the warehouse has multiple sub-warehouses and stock must be moved between them to maintain minimum levels in each.
Strategies are sequenced to determine which sub-warehouses are replenished first.
| Configuration | Description |
|---|---|
| Destination sub-warehouse | Target sub-warehouse for the stock |
| Destination station | Destination station in target sub-warehouse |
| Efficiency mode | To empty / Least movements (different modes than PDL replenishment) |
| Logic | Before efficiency / After efficiency |
**Limitation:** does not support cutting stock in non-consolidating UoM conversions.
### 4b. Priority Location Replenishment
A fifth strategy type refills **priority locations** — locations associated with a PDL from which the PDL is replenished. This allows a two-tier system: primary storage → priority location → PDL.
## Efficiency Modes
Efficiency mode determines which source stock is selected for the replenishment task.
**For PDL replenishment:**
| Mode | Logic |
|---|---|
| **Efficiency** | Select sources that have at least the quantity needed; among ties, apply outbound logic; tiebreak by quantity (highest to lowest) |
| **To empty** | Select sources that will be completely emptied by the replenishment task; among ties, apply outbound logic; tiebreak by quantity (lowest to highest) |
| **Nearest location** | Select sources closest to the PDL by physical distance; from those with enough stock |
**For sub-warehouse replenishment:**
| Mode | Logic |
|---|---|
| **To empty** | Same as above |
| **Least movements** | Minimize number of picking tasks; select sources with the requested quantity or largest available; among ties, apply outbound logic; tiebreak by quantity (highest to lowest) |
**Logic position:** "Before efficiency" applies outbound logic (FEFO, FIFO, LIFO) as the primary sort criterion; "After efficiency" applies it only to break ties after the efficiency criterion.
## Stock Eligibility for Replenishment
Stock is valid for replenishment if:
- Belongs to the same item (and optional owner, item type) as the PDL
- Has a status that allows moving and replenishing
- Not in a location with an active counting task
- Not part of an in-process replenishment or picking task (unless certain conditions allow it)
- Location and aisle allow replenishment at source; no extraction errors; no movement locks
- Logistic attributes match PDL configuration (batch, dates, status)
- If PDL is configured for a specific stock status, only stock in that status is eligible
## Dynamic Replenishment Process Detail
Dynamic replenishment runs periodically (or on manual trigger) and follows this flow:
1. **Get shipping orders** with dynamic replenishment enabled
2. **Identify items and quantities** required across all such orders
3. **Check fixed PDLs** for each item: is there enough stock?
4. **For items with insufficient PDL stock:**
- Check if there is valid replenishment source stock
- If yes: generate replenishment tasks to fill fixed PDLs to capacity
5. **For items with no PDL at all (or fixed PDL at capacity):**
- Find empty candidate locations (allow item assignment, automatic assignment mode, allow picking, allow replenish)
- Create a **dynamic PDL** with capacity = quantity needed for pending orders
- Generate replenishment tasks for the dynamic PDL
6. On next run: adjust dynamic PDL capacity if demand has changed
## Dynamic Picking Emptying Tasks (Vidage)
Dynamic PDLs created by the shipping demand strategy are temporary — they exist only for the duration of the order they were created for. Once the order is shipped, the dynamic PDL may still contain leftover stock that should be returned to bulk storage.
**Emptying tasks (vidage)** are generated automatically on a schedule to clear unused dynamic picking locations:
- The system identifies dynamic PDLs whose associated shipping orders are complete (shipped or cancelled)
- A **container relocation task** (or stock relocation) is generated to move the remaining stock from the dynamic PDL back to a valid bulk storage location
- The putaway engine determines the destination using the item's putaway strategy
- Once emptied, the dynamic PDL assignment is removed and the location becomes available for reassignment
**Configuration**: the emptying job frequency is configurable per warehouse. It can be run at off-peak times (e.g., at night or between shifts) to avoid contention with active picking.
This mechanism prevents dynamic PDLs from accumulating as "orphan" locations with stranded stock.
## Automatic Replenishment (Stockout) Process Detail
Background job `TryToReplenishProductLocations` (every minute):
1. For each PDL with automatic replenishment enabled
2. Check current stock quantity against replenishment level
3. If below threshold:
- Find valid source stock (applying efficiency mode and logic)
- Generate replenishment task: move stock from source to PDL up to PDL capacity
4. Respect `MAX_REPLENISHED_PL_ROUTINE_JOB` limit per run
## Cutting Stock Replenishment
Cutting stock (rope, cable, chain) requires special handling:
- Can only be picked from coil shelf locations (picking dedicated location for cutting loose stock)
- For **shipping demand strategy**: replenishment tasks are only generated when: no pending tasks exist for the reel in the PDL AND there is still unassigned stock to fulfill orders
- Exception: if a stockout strategy is also active AND stock is at/below replenishment level → generate replenishment regardless of task state
- Not supported for sub-warehouse replenishment in non-consolidating UoM conversions
## Replenishment from Putaway
When placing a container or stock into a location, the putaway engine checks if the destination location is a PDL for the item being placed:
- Strategy 1 (sequence 1): place directly into the PDL if capacity allows
- Strategy 2 (sequence 2): place in storage near the PDL (sort by "Distance to assigned location")
- The system can automatically create a PDL at the putaway destination (parameter `UNLOAD_CREATE_PRODUCT_LOCATION`)
See [Putaway](putaway.md) for the full strategy pipeline.
## Inter-sub-warehouse Replenishment via an Intermediate Buffer
When a single equipment cannot traverse from the reserve sub-warehouse to the picking sub-warehouse (safety rules, certification, aisle geometry), a **Transit transport element** acts as an intermediate drop point: one equipment drops the pallet on the buffer, another picks it up and finishes the replenishment.
### Typical setup
- **Sub-warehouse A** (`WHST_ANCIEN_BAT`) — PDLs to replenish
- **Sub-warehouse B** (`WHST_TOUR`) — high reserves
- Equipment `CACES06` (only one certified for height) is **forbidden** in sub-warehouse A
### Key configuration points
| Element | Requirement |
|---|---|
| Automation element | Type **"Transport"** — mandatory even in 100% manual warehouses |
| Transport sub-location | Type **"Buffer"** (⚠️ defaults to "Automatic" when created — change manually); sub-warehouse accessible from both equipment types |
| Equipment types | `PICKING` (access work zones of picking + both sub-warehouses) and `RESERVE` (access reserve work zone + sub-WH B only) |
| Equipment groups | Two groups, one per equipment type |
| Routes | Transport → sub-WH A ; each group → Transport ; `EqGroup PICKING` → both sub-warehouses ; `EqGroup RESERVE` → sub-WH B only |
> ⚠️ Routes are created by default with the **"Galileo"** transport — switch them to **"RF"** manually.
### Flow
1. Replenishment is triggered → a task is generated from the reserve to the PDL
2. The reserve equipment (e.g. `CACES06`) picks up the support and drops it on the **intermediate Buffer location**
3. The picking equipment (e.g. `PIK01`) picks up the task from **Tâches → Tâches de réapprovisionnement** and drops the stock on the destination PDL
> Troubleshooting — "support n'existe pas" when scanning the buffer location: verify that the transit sub-location is of type **"Buffer"** (not "Automatic").
Upstream MSSCC documentation: `replenishments/intermediate_stations.md` and `EasyS/configurations/IntermediateET/index.md`.
## Replenishment in Automatic Warehouses (PK)
In automatic warehouses, the picking conveyor (PK) generates demand that drives replenishment. When a container at the PK runs out of stock for a task:
1. Operator signals "wait for replenishment" or the system detects PDL is empty
2. EasyWMS checks if another container with the same item can be extracted from the automatic warehouse
3. If yes: a task is generated to bring the replenishment container to the PK
4. PK operations pause until replenishment arrives (configurable)
## Common Errors
**Replenishment task not generated for empty PDL:** PDL has "automatic replenishment" not enabled, or no stockout strategy is enabled, or no valid source stock found. Enable replenishment on the PDL; check source location availability and status.
**Dynamic PDL created with wrong capacity:** Shipping order was created/canceled between job runs. Capacity is recalculated on next run and adjusted. No manual intervention needed if system is running correctly.
**Replenishment task generated but not executed:** Replenishment source has a lock, or the aisle is blocked, or no route exists between source and PDL. Resolve the lock/block; check route configuration.
**PDL not proposed for picking despite having stock:** Stock assignment strategy doesn't have "Prioritize picking dedicated locations" enabled, or the PDL's logistic attributes don't match the shipping order line. Check strategy priorities and PDL configuration.
**Stock mixing conflict at PDL:** During replenishment unload, system warns of logistic attribute conflict (e.g., different batches). System does NOT block the task (to avoid deadlock situations), but operator must decide whether to proceed. If mixing is not desired, configure PDL with specific logistic attributes.
**PDL released unexpectedly:** "Delete when empty" is enabled but warehouse still needs the item. Disable "Delete when empty" for year-round items; use it only for seasonal items.
**Cutting stock replenishment not triggered:** Pending tasks exist for the reel in the PDL location, which blocks demand-strategy replenishment. Wait for tasks to complete, or use a stockout strategy as well to override the task-pending check.
## Interface Paths
| Interface | Path |
|---|---|
| Web — replenishment strategies | "Configuration" → "Replenishment strategies" |
| Web — sub-WH replenishment strategies | "Configuration" → "Replenishment strategies between sub-warehouses" |
| Web — picking dedicated locations | "Warehouse" → "Picking dedicated locations" |
| Web — enable/disable automatic replenishment | "Warehouse" → "Picking dedicated locations" → "Enable replenishments" |
| Web — delete when empty | "Warehouse" → "Picking dedicated locations" → "Delete when empty" |
| Web — label printing | "Warehouse" → "Picking dedicated locations" → label action |
| Web — shipping demand replenishment | "Shipping" → "Shipping orders" → "Enable replenishment" |
| RFT — particular demand replenishment | Menu "Replenishment" → specific location/aisle |
| RFT — shipping order demand | Menu "Replenishment" → "For shipping orders" |
| RFT — assign item to location | Menu "Utilities" → "Assign item to loc." |
| Web — automatic job | "Control" → "Jobs" → TryToReplenishProductLocations |
## Related
- [Picking](picking.md) — replenishment feeds PDLs that picking tasks consume; PDL stock assignment depends on replenishment being current
- [Putaway](putaway.md) — putaway engine checks PDLs first and can auto-create PDL assignments during container placement
- [Stock](stock.md) — stock status and logistic attributes are key criteria for replenishment eligibility
- [Container (LPN)](container.md) — container-mode PDLs replenish by moving whole containers; source containers must allow replenishment
- [Task](task.md) — replenishment generates Container replenishment or Stock replenishment tasks; also Picking tasks for inter-sub-warehouse replenishment
- [Location](location.md) — PDLs are locations with item assignment; "Allow replenishment source/target" logics control eligibility