Map Inventory Policy
Map raw rows into the scenario's inventory policy table: the rule for inventory at each location, the per-unit carrying rate, the period it is expressed over, and the days of inventory held.
This is the input side of inventory. Pair it with Map Inventory State for the observed level and the realized total.
When to use this¶
- Inventory is part of the scenario and you have a per-unit holding rate
- You want the rate saved on the scenario so a what-if edit can recompute carrying cost without re-deriving it from totals
Network Optimization charges carrying cost on a row that has all three of Unit Carrying Cost, Unit Carrying Cost Period and Average Days of Inventory, and weighs it against transport, sourcing and handling when it picks a route. A row missing any of the three carries no cost and only travels with the scenario.
Set the product to ALL and the rate applies to every product held at that
location, the same way a location-wide handling rate does.
What you need¶
- An upstream Import Data node with one row per (location, product) you have an inventory rate for
- A per-unit carrying-cost column. If you only have realized totals, use Map Inventory State instead
Field mapping¶
Auto-detection is all or nothing. With no explicit mapping on the node, every field is matched against the headers listed below, case-insensitively, and a space in your header reads as an underscore, so Site Name matches site_name. Set even one field explicitly and detection switches off for the whole node: only the fields named in the mapping are filled, and the rest arrive empty.
Set mappings in the node's panel. Connect an upstream table and select the mapping node to see automatic matches. Choosing a column saves all displayed matches as an explicit mapping. Use Use automatic detection to return to header detection. Required fields without a match are marked in the panel.
| Field | Type | Required | Example | What it is | Auto-detected headers |
|---|---|---|---|---|---|
| Location | text | Yes | Warehouse A |
Where inventory is held. Must match a Location name. | location, loc, name, id, location_id, loc_id |
| Product | text | Yes | Widget |
Product or SKU held, or ALL for a rate that applies to every product at this location. | product, sku, item, material, product_id |
| Unit Carrying Cost | number | No | 0.1 |
Cost to carry one unit of inventory for one period, in the scenario currency. Blank = no carrying cost is charged. | unit_carrying_cost, carrying_rate, holding_rate, cost_per_unit_inventory |
| Average Days of Inventory | number | No | 14.0 |
Target days of inventory on hand; combined with outbound flow this sets the average inventory level. Blank = inventory level is not modelled. | average_days_of_inventory |
| Unit Carrying Cost Period | text | No | month |
Time period the unit carrying cost is expressed over: day, week, month, or year. | unit_carrying_cost_period |
How it works¶
Each row becomes an inventory policy record, stored on the scenario beside the inventory state rows. Cost to Serve does not read it. The carrying cost it allocates is the realized total on the state side.
Workflow wiring¶
flowchart LR
n1["Import Data (inventory.csv)"] --> n2["Map Inventory Policy"]
n2 --> n3["Create Scenario"]
n1 --> n4["Map Inventory State"]
n4 --> n3
Common mistakes¶
- Mapping the realized total here. Unit Carrying Cost is per unit. The total belongs on Map Inventory State as Realized Carrying Cost.
- Mapping the average inventory level here. A quantity belongs on Map Inventory State as Average Inventory.