--- title: "Entities Relationship Map" type: architecture sources: - Synthesized from all Batch 1-5 compiled wiki pages - areas/TransactionTypes.md - areas/ERP.md - All ERP message files - All concept and module pages related: - architecture/application-dictionary.md - architecture/overview.md - concepts/container.md - concepts/location.md - concepts/stock.md - concepts/product-item.md - concepts/task.md - concepts/order-inbound.md - concepts/order-outbound.md - concepts/erp-interface.md last_compiled: "2026-04-10" --- # Entities Relationship Map ## Overview This page provides the complete entity relationship model of Easy WMS, synthesized from all documented behavior across Batches 1–5. It shows the core entities, their key attributes, and how they relate to one another - forming the mental model needed to interpret WMS data. ## Core Entity Hierarchy ``` Organization └── Site (Warehouse) ├── Zones (Storage / Working) │ └── Aisles │ └── Racks / Shelves │ └── Locations ──────────────── contains ──→ Containers │ └── Stock lines ├── SubWarehouses │ └── Locations (scoped) ├── Stations (Dock / PIE / PK / PS / MU / ME / etc.) │ └── Routes (Simple / Composed) │ └── Route Managers (Galileo / RF / Voice / PTL / External) ├── Equipment (Forklifts / AGVs / Conveyors) └── Users └── Roles → Station Roles ``` ## Primary Entity Relationships ### Location → Container → Stock The fundamental storage chain: ``` Location (1) ←── stored_at ──── (N) Container Container (1) ←── held_in ──── (N) Stock Stock (N) ──── is_of_type ────→ (1) Item Stock (N) ──── owned_by ───────→ (1) Owner ``` | Relationship | Cardinality | Notes | |-------------|-------------|-------| | Location → Container | 1:N | One location can hold multiple containers (stacking) | | Container → Stock | 1:N | One container can hold multiple stock lines | | Container → Container | 1:N | Stacked containers; outer container holds inner | | Stock → Item | N:1 | Multiple stock lines for same item (different lot/location) | | Stock → UoM | N:1 | Each stock line has one UoM | | Stock → Owner | N:1 | Stock belongs to one owner | ### Orders → Stock → Task The fulfillment chain: ``` ReceiptOrder (1) ←── fulfilled_via ──── (N) Receipt Receipt (1) ─────── creates ──────────→ (N) Container (received containers) Receipt (1) ─────── creates ──────────→ (N) Stock (loose stock) ReceiptOrder (1) ←── associated ──── (N) Container (ASN pre-notified) ShippingOrder (1) ←── assigned_from ── (N) Stock (reservations) ShippingOrder (1) ─── generates ──────→ (N) Task (picking tasks) Task (1) ────────────── moves ─────────→ (N) Container Task (1) ────────────── moves ─────────→ (N) Stock Task (N) ─────────────── assigned_to ──→ (1) User / Equipment ``` ### Container Lifecycle Relationships ``` Container ──── received_at ─────→ Location (Dock/PIE/PK/ASN) Container ──── moved_to ─────────→ Location (via putaway Task) Container ──── picked_from ──────→ Location (via picking Task) Container ──── shipped_to ───────→ Location (Dock/Stage) Container ──── loaded_on ────────→ Load (truck loading) Container ──── consolidated_into → Container (client container) Container ──── stacked_on ───────→ Container (stacking) Container ──── locked_by ────────→ ContainerLock (N lock types) ``` ## Detailed Entity Attribute Map ### Container ``` Container { Code* → unique LPN identifier TypeCode → ContainerType (dimension, weight capacity) Weight → actual weight Status → Received / In Transit / Located / Shipped / Deleted LocationCode → current Location (nullable if in transit) OwnerCode → Owner (nullable) ReceiptCode → source Receipt (if received via reception) ASNCode → advance shipping notice code (if pre-notified) Locks[] → active ContainerLock list StackedOn → parent Container (if stacked) Divisions[] → cutting stock divisions (if applicable) } ``` ### Location ``` Location { Code* → ASXY format (Aisle+Section+X+Y) or virtual code Type → Conventional/Compact/APS/APSFIFO/Dynamic/Pushback/ Cantilever/Buffer/Dock/Equipment/Conveyor/Virtual ZoneCode → storage Zone SubWarehouseCode→ SubWarehouse (optional scoping) StorageMode → Single container / Multi-container / Loose stock StorageLogic → 12 flags (fifo/lifo/fefo/stack/mix items/mix lots/etc.) Locks[] → active LocationLock list (8 operation types) Capacity → weight/height/container count limits Features[] → compatibility flags for putaway restrictions IsPickingDedicated → boolean (PDL flag) VirtualType → ASN / LostFound / Mov (if virtual) } ``` ### Stock ``` Stock { ItemCode* → Item UoMCode* → Unit of Measure Quantity* → current quantity ContainerCode → Container (nullable for loose stock) LocationCode → Location OwnerCode → Owner ReceivingStatus → quality status set at reception (clear/locked) UserStatus → quality status set by user/ERP (0..N statuses) LogisticAttributes { Lot, SerialNumber, ExpiryDate, BestBefore, ProductionDate, DaysOfLife, Color, Size, Version, Weight, ... (item-specific) } ReservedQty → quantity reserved for ShippingOrder lines AssignedQty → quantity assigned to Tasks } ``` ### Task ``` Task { Number* → unique task ID ProcessType → Putaway/Picking/Shipping/Replenishment/Count/ Movement/Consolidation/etc. Status → Pending/Generated/InProcess/Finished/Canceled ContainerCode → Container being moved (nullable) LocationFrom → source Location LocationTo → destination Location ShippingOrderCode → linked ShippingOrder (if picking/shipping task) CountCode → linked Count (if count task) AssignedUser → User assigned to execute AssignedEquipment → Equipment (AGV, forklift) Priority → Urgent/High/Normal/Low/VeryLow Route → Route/Station path for automatic warehouse Movements[] → decomposed Movement steps (compound routes) } ``` ### Receipt Order (Inbound Order) ``` ReceiptOrder { Code* → unique order code Type → Supplier/Return/Transfer Status → Created/Waiting/Pending/Receiving/PartiallyReceived/ Received/Closed/Canceled SupplierCode → Supplier (if type=Supplier) Lines[] { Number, ItemCode, ExpectedQty, ReceivedQty, FreeQty, UoMCode } Receipts[] → linked Receipts (physical receiving events) Containers[] → ASN pre-notified Containers ERP_Source → ROR message code (if from ERP) } ``` ### Shipping Order (Outbound Order) ``` ShippingOrder { Code* → unique order code Type → Customer/Return/Transfer/DirectTransfer/ Replenishment/Kit/Desk/Work Status → Created/Released/InPreparation/StockFailure/ Paused/Prepared/Closed/Canceled Priority → Urgent/High/Normal/Low/VeryLow AccountCode → Account (delivery destination) DockCode → assigned dock (optional) RouteCode → Route assignment (optional) GroupCode → wave/group (optional) Lines[] { Number, ItemCode, ContainerCode, OrderedQty, PreparedQty, ShippedQty, UoMCode, LogisticAttributes, MaxLots, Flags: Critical/Required/Excess/Substitutes } Prepackaging → prepackaging config (SOR02 only) VASCode → VAS template reference (optional) ERP_Source → SOR message code } ``` ### Count ``` Count { Code* → unique count code Type → Location/Item/Container Status → Disabled/Releasing/InProcess/Closed/Canceled Priority → count priority Lines[] { Number, Scope: {ItemCode/ContainerCode/LocationFrom-To/Aisle}, IsInformed, IsBlind } Tasks[] → count Tasks generated ERP_Source → COR message code (if ERP-initiated) } ``` ## Master Data Entities ``` Item { Code*, OwnerCode, Description, ShortDescription TypeCode → ItemType FamilyCode → ItemFamily ABCClass → A/B/C classification Profiles: LogisticProfile, ReceptionProfile, PutawayProfile, ShippingProfile, CuttingProfile UoMBase, Conversions[], Aliases[] LogisticAttributes: {lot, serial, expiry, bestBefore, days_of_life, production, color, size, version, quality, weight} MinQty, MaxQty (per SubWarehouse via ItemClassification) IsKit, IsSubstitute, IsCuttingStock } Owner { Code*, Description (with Owner Extensions: isolated master data scope) } Supplier { Code*, Description, OwnerCode } Account { Code*, Description, OwnerCode, AccountType MixingRules → item/lot mixing restrictions } Carrier { Code*, Description Services[] → carrier service levels (with Multi-Carrier: extended delivery configuration) } ``` ## Operational Entities ### Routes and Loads ``` Route { Code*, Description, CarrierCode DockCode → departure dock DepartureTime Status → Open/Closed/Canceled Loads[] → truck Loads ShippingOrders[] → assigned orders } Load { Code*, RouteCode Status → Open/InLoading/Closed Seal → seal number Containers[] → loaded containers Stocks[] → loaded loose stock } ``` ### Putaway and Replenishment ``` PutawayStrategy { Criteria[] → filter rules (item type, family, ABC, weight, etc.) LocationRules[] → destination preference rules AisleBalancing → boolean ChannelFilling → boolean (prefer filling partial channels) } PDL (PickingDedicatedLocation) { LocationCode, ItemCode, UoMCode MinQty, MaxQty, ReplenishQty PartitionType → fixed/flexible EfficiencyMode → efficient/complete/none } ``` ### Consolidation and Defragmentation ``` ConsolidationProcess { Code*, Definition, Criteria AllowMixing → boolean DestinationStation Status → Standby/Released/Paused/Canceled Orders[] → consolidation orders } DefragmentationPlanner { Type → Rotation/Shipping Schedule, Duration, Frequency Status → Active/Inactive } ``` ## Module-Specific Entity Extensions ### AGV ``` AGVOrder { ContainerCode, LoadType (0=Container/1=PalletShuttle) PhaseCode → communication phase (00/03/04/06/08/10/255) OriginLocation, DestinationLocation ErrorCode, ErrorDescription } ``` ### Multi-Carrier ``` Delivery { CarrierCode, ConsigneeCode Status → Pending/Confirmed/Shipped/Delivered TrackingNumber Packages[] ShippingOrderCode } ``` ### 3PL Billing ``` BillingContract { OwnerCode, Description Rules[] → BillingRule Planners[] → BillingPlanner } BillingRule { Type → Standard/Custom ValuationFields[], TieredPricing[] } ``` ### DOM ``` DOMNode { Code*, Type → POI/POF/Store RegionCode StockLevels → Organization/Node/Line } DOMOrder { Code*, Type → Purchase/Sales/Replenishment SourceNode, DestinationNode OrchestrationStage → Region/Carrier/Stock/Capacity/Strategy } ``` ## Key Referential Constraints | Constraint | Description | |-----------|-------------| | Item cannot be deleted with active stock | Item delete requires zero stock across all locations | | Location cannot be deleted if occupied | Must empty location first | | ReceiptOrder cannot be deleted if has receipts | Must cancel or close first | | ShippingOrder cannot be modified if closed/canceled | Immutable after close | | Task cannot be canceled if InProcess | Must be released by operator first | | Container lock blocks most operations | Check active locks before operations | | Stock with active UserStatus blocks shipping | Unless order specifically requests that status | ## Transaction-Entity Mapping Every entity state change generates a Transaction. Key mappings: | Transaction | Entity Changed | |------------|---------------| | `CON.LOCATE` | Container → Location (putaway) | | `CON.MOVE` | Container → Location (manual move) | | `CON.SHIPPED` | Container → Status=Shipped | | `CON.RECEP` | Container → Created at receipt | | `STK.RECEP` | Stock → Created at receipt | | `STK.LOCATE` | Stock → Location (via putaway) | | `STK.MOVE` | Stock → Location (manual) | | `STK.PICKING` | Stock → Quantity decreased (picking) | | `STK.ADJ` | Stock → Quantity adjusted | | `STK.SHIPPED` | Stock → Status=Shipped | | `INO.CST` | ReceiptOrder → Status changed | | `INO.CLS` | ReceiptOrder → Status=Closed | | `OUT.CST` | ShippingOrder → Status changed | | `OUT.CLS` | ShippingOrder → Status=Closed | | `COU.CST` | Count → Status changed | | `COU.END` | Count → Status=Closed/Canceled | | `TSK.LOC.001` | Task → Status=Finished (putaway) | | `TSK.SHIP` | Task → Status=Finished (shipping) | ## ERP Integration Touch Points Each entity has ERP messages that create, update, or receive data: | Entity | ERP In (ERP→WMS) | ERP Out (WMS→ERP) | |--------|-----------------|------------------| | Item | ITM | - | | Owner | OWN | - | | Supplier | SUP | - | | Account | ACC | - | | Carrier | CAR | - | | Kit | KIT | KST (assemble), UNK (disassemble) | | ItemClassification | ITC | - | | ReceiptOrder | ROR | ROC (status), ROF (close) | | Container (ASN) | ASN | ASO (received), ASK (rejected) | | Receipt | - | REF (closed) | | ShippingOrder | SOR, RUT, WOR | SOC (status), SOF (close), LOF (load close), WOF (work order close) | | Count | COR | COF (finalized) | | Stock | STR (lock), SCR (contrast) | STV (variation), STC (status change), WSC (contrast response) | | AutoWarehouse replenishment | SRN | SRO (done), SRK (canceled) | | Container on conveyor | CMC | COS (shipped to PS), COC (closed in MP) | ## Related - [Application Dictionary](application-dictionary.md) - AD element types: Commands, Queries, Entities - [Container](../concepts/container.md) - Container entity deep-dive - [Location](../concepts/location.md) - Location entity deep-dive - [Stock](../concepts/stock.md) - Stock entity deep-dive - [Product / Item](../concepts/product-item.md) - Item entity deep-dive - [Task](../concepts/task.md) - Task entity lifecycle - [Inbound Order](../concepts/order-inbound.md) - Receipt order entity - [Outbound Order](../concepts/order-outbound.md) - Shipping order entity - [Transactions](../concepts/transactions.md) - Full transaction audit trail - [ERP Interface](../concepts/erp-interface.md) - ERP message catalog