Skip to content

Costs in a model

Cost in ProcessModel is authored in five places and read in one. Almost every charge lands on a single running total carried by the entity, and most of them are also sorted into a value classification, so the report can tell you not just what the process cost but how much of that cost bought something the customer wanted.

WhereWhat you set
Entity CostAn Initial Cost stamped on each entity at creation, and a Waiting Cost per hour of waiting
Activity CostA Per-Entity Cost on completion and a Processing Cost per minute, each a number or an expression, and the activity’s VA / NVA / RNA classification
Resource CostAn Hourly or Idle / Busy rate, a Cost Per Use, and an Overtime Multiplier
Queue CostA Cost Per Unit charged as each entity leaves the queue
Cost on a routeA Cost Per Move charged each time an entity travels the route, with its own classification

An Inventory item’s Unit Cost is a sixth, smaller one: it charges the entity for the stock it takes.

Alongside the running total, ProcessModel keeps three buckets: value-added, non-value-added, and required non-value-added. Which bucket a charge lands in is decided for you, and the rule is not the same everywhere:

ChargeBucket
Activity Processing CostThe activity’s own classification
Resource hourly cost and cost per useThe classification of the activity that is holding the resource
Route Cost Per MoveThe route’s own classification
Queue Cost Per UnitAlways non-value-added
Entity Waiting CostAlways non-value-added
Activity Per-Entity CostAlways value-added
Entity Initial Cost, inventory unit costNo bucket, total only
Resource overtime, break and downtime costNo bucket, reported against the resource
Resource idle costNo bucket, shared over the entity types that used the resource when the run ends

A resource that an entity holds across routes and waits (a Get with Keep) is charged slice by slice by what the entity is doing: the route’s classification while it moves, and non-value-added while it waits in an output queue.

Two consequences are worth knowing before you read a report.

The three buckets do not add up to the total. Initial Cost and inventory unit cost go straight to the total with no classification, so a model that stamps a large value on each entity will always show a total larger than the three buckets combined. Idle resource cost is a second reason: it is shared out over the entity types at the end of the run, so it counts in each type’s total but in none of the three buckets, where it reads as “Other” in Cost Mix. That is expected, not an error. Cost that moves between entities, when parts are joined to a carrier or split out of one, is counted once, in whichever entity holds it: see Cost follows the parts.

Setting an activity to NVA does not move its Per-Entity Cost. That charge is booked as value-added whatever the classification beside it says. If you need the classification to govern the charge, put the money on Processing Cost instead, which does follow it.

The VA / NVA / RNA setting on an activity is not a label for the report. It selects the cost bucket above, it selects the matching time bucket, and it decides how any resource held at that activity is classified while it works. Changing it changes the numbers, so set it to describe the work honestly rather than to make a chart look better.

The Cost tab of the report

After a run, the Cost report tab rolls the whole thing up: cost per activity, cost per resource split into used, unused, break, downtime, and overtime, and cost per entity type. Impact Analysis uses the same buckets to rank where value is being lost. In action logic, Entity.TotalCost reads an entity’s running total at any moment.

  • Time in transit bills the waiting rate. An entity moving along a route accrues its Waiting Cost for the whole move, and that charge is non-value-added even when the route itself is marked value-added.
  • Waiting Cost has deliberate gaps. An entity blocked at an activity’s output, or parked because capacity is full, does not accrue it. Only genuine waiting is charged.
  • Overtime needs a shift. The Overtime Multiplier only ever applies to a resource that has a shift schedule, because overtime is measured against that schedule. A resource with no shift can never work overtime, so the multiplier never comes into play.
  • Most cost fields cannot go below zero. Only Initial Cost, the resource rates and Cost Per Use keep a negative amount. Per-Entity Cost, Processing Cost, Cost Per Move, Cost Per Unit and Waiting Cost charge nothing at zero or below, and an activity cost expression that works out below zero stops the run with “A cost must be a number of zero or more.” The Cost report tab leaves out rows whose cost totals zero or less, and reads “No Cost Data” unless the grand total or a route cost is above zero.