--- title: "Weights" type: concept sources: - sources/archives/33_Les_poids.md related: - concepts/container.md - concepts/stock.md - concepts/product-item.md - concepts/reception.md - concepts/stations.md - concepts/mechanical-elements.md last_compiled: "2026-04-17" --- # Weights ## Overview EasyWMS tracks **five distinct weight fields** on every container and **two weight fields** on every stock line. These fields support reception sanity checks, detection of shrinkage or miscounts at the PIE (weighing station), and variable-weight items (e.g., meat, fish, fruit sold by the kilo). Understanding which field is updated by which event - and which one the shipping / reporting logic reads - is critical: the French UI term *"poids théorique"* is ambiguous (it can mean either of two different fields). ## Container-level weight fields Five fields, each with a distinct trigger and formula. | WMS field | French label | Definition | Updated when | |---|---|---|---| | **Calculated Weight** | Poids calculé | Theoretical (item) weight − adjustments | On every stock movement (picking, transfer, adjustment) | | **Scale Weight** | Poids balance | Raw gross weight measured at the PIE | **PIE pass only** | | **Theoretical Weight** | Poids théorique (article) | (unit weight × quantity) + container tare weight | At creation and on every adjustment | | **Real Weight** | Poids réel | `max(Calculated Weight, Theoretical Scale Weight)` | Recomputed automatically when its inputs change | | **Theoretical Scale Weight** | Poids théorique (balance) | Scale Weight − adjustments | Set after PIE pass, then updated by adjustments | > ⚠️ **Translation trap** - *"Poids théorique"* in French maps to **two different fields** in English: > - **Poids théorique (article)** = `Theoretical Weight` (from the item master) > - **Poids théorique (balance)** = `Theoretical Scale Weight` (from the scale, minus adjustments) > > Reports and customs must specify which one they are reading. ### Formulas - **Theoretical Weight** = *unit weight on item master × quantity + container tare (from EasyS)* - **Scale Weight** = *gross weighed value at the PIE* - **Calculated Weight** = *Theoretical Weight − cumulative adjustments (picking, transfers…)* - **Theoretical Scale Weight** = *Scale Weight − cumulative adjustments* - **Real Weight** = `max(Calculated Weight, Theoretical Scale Weight)` ## Stock-line weight fields On each stock line (`Stock` record): | Field | Description | |---|---| | **Poids (kg)** | Real weight of the line | | **Poids théorique (kg)** | Theoretical weight of the line, from the item master | Stock-line weights are updated on stock adjustments, weighings, and custom processes **only when the item is configured as variable-weight**. The PIE does **not** update stock-line weights directly - it updates container-level fields only. ## Behavior at stock creation - **Real weight of the stock (line)** starts at `0` - it is only populated by a PIE pass, a `StockAdjust` on a variable-weight item, or a custom. - **Theoretical weight of the stock (line)** is computed immediately from the item master. - **Container tare weight** (pallet type weight in EasyS) is **frozen at container creation** - changing the tare in EasyS later **does not propagate** to existing containers. Only newly created containers pick up the new tare. ## PIE pass When a container passes the PIE: 1. The scale measures the gross weight (goods + pallet). 2. **Scale Weight** ← measured value. 3. **Theoretical Scale Weight** ← Scale Weight − existing adjustments. 4. **Real Weight** ← `max(Calculated Weight, Theoretical Scale Weight)`. > The PIE writes only the container-level fields. Line-level weights are not updated by the PIE directly ; if needed, they are recomputed by the custom that drives the PIE reaction (e.g., proportional distribution). ## Variable-weight items ### Enabling variable weight The **"Poids variable"** (Variable weight) option lives on the **logistic profile** of the item. When it is on, indicating the stock's weight at creation becomes **mandatory**. ### "Poids moyen" option (average weight from receipt) When both of the following are true, the WMS pre-fills the stock weight at reception from the receipt line: - **Poids moyen** is enabled on the logistic profile. - The expected stock-line weight is carried in the ROR's logistic attributes (e.g., `"Weight": 20`). ### StockAdjust limitation `StockAdjust` **cannot modify the weight of a stock line** if the item is not configured as variable-weight on its logistic profile. Use a weighing flow or a custom if non-variable items need weight corrections. ## Weight check on stock entry The workflow **`Stock_CheckWeightToCreateStockInContainer_UI`** runs at stock creation: - Compares the entered weight against the item master. - If the item is variable-weight and the tolerance is exceeded, it **raises an RFT alert** (does not reject). > Reject-rather-than-alert behaviour at the PIE requires a custom workflow - see *Open questions* below. ## Worked examples ### Fixed-weight item - 25 kg pallet, item weighs 250 kg | Step | Calculated | Scale | Theoretical (item) | Real | Theoretical Scale | |---|---|---|---|---|---| | Creation | 275 | 0 | 275 | 275 | 0 | | PIE pass (280 kg) | 280 | 280 | 275 | 275 | 280 | ### Same item, new pallet created after EasyS tare change (25 → 24 kg) | Step | Calculated | Scale | Theoretical (item) | Real | Theoretical Scale | |---|---|---|---|---|---| | New pallet | 280 | 280 | 274 | 274 | 280 | > Theoretical (item) = 250 (goods) + 24 (new pallet tare). The older pallet keeps 275 - confirming that the container tare is frozen at creation. ### Variable-weight item - 10 bags, 100 kg declared | Step | Calculated | Scale | Theoretical (item) | Real | Theoretical Scale | |---|---|---|---|---|---| | Creation | 124 | 0 | 124 | 124 | 0 | | PIE pass (107 kg) | 107 | 107 | 124 | 124 | 107 | > The PIE updates Scale Weight and Calculated Weight at the container level. The stock lines inside the container are **not** auto-recalculated unless a custom redistributes the measured value. ## Open questions | # | Subject | Status | |---|---|---| | 1 | A rejection workflow at PIE (same check as `Stock_CheckWeightToCreateStockInContainer_UI` but blocking rather than alerting) | To confirm | | 2 | The "pesé − tare théorique support (MCH)" formula produces an *estimated net weight* that is not persisted as a field | To investigate | ## Related - [[container]] - all five weight fields are attributes of the container ; see "SSCC and weights" on the container page - [[stock]] - the two stock-line fields, updated for variable-weight items - [[product-item]] - logistic profile carries the variable-weight and "Poids moyen" flags, item master holds unit weight - [[reception]] - receipt line can carry the expected weight used by "Poids moyen" at stock creation - [[stations]] - PIE station type drives scale-weight capture