ProcessModel and Activity-based Costing
ProcessModel’s primary costing approach is Activity-based costing (ABC), a method of tracking operating costs directly associated with processing entities. Operating costs are generally categorized as one of two types: variable and fixed. Variable costs are directly proportional to the number and type of entities processed, e.g. the number of customers serviced or the number of products manufactured. Fixed or overhead costs remain constant from period to period, regardless of the amount and type of entities processed, e.g., rent, utilities, salaries, etc. The total operating cost for a period is the sum of all variable and fixed costs for that period.
The two most commonly used methods of tracking operating costs today are traditional (volume-based) and ABC. Both methods treat variable costs in the same way; each entity processed increases variable costs by the unit cost associated with that entity.
Traditional costing and ABC treat fixed costs differently. Traditional costing allocates fixed costs to each entity according to some basis such as the direct labor costs associated with a particular entity. For example, two entity types, A and B, are processed through a system with a fixed cost of $10,000 per week. If entity A consumes 60% of the direct labor costs and entity B consumes 40%, then $6,000 in overhead would be allocated or charged to entity A and $4,000 to entity B.
With ABC we track the activities and resources used by the entities. Continuing with our example, we know that entity A accounts for 30% and entity B for 70% of the fixed costs when we consider the activities and resources used by the entities. So we are more accurate to say that the overhead cost for entity A is $3,000 and $7,000 for entity B.
The key to ABC is identifying and quantifying cost drivers such as the cost of using a resource to perform a particular activity. ProcessModel can track time-based and eventbased cost drivers, including labor costs, resource usage, activity costs, storage costs and material costs. Additional costs may be assigned in any Action logic. This gives you the capability to track any operating costs by entity type.
To evaluate the potential of a system, costs can be entered as a negative (i.e. Worker – $25/hr.), while revenue sources can be entered as a positive (i.e. completed Part $5). The output summary will provide the equivalent of a net revenue for the duration of the run.
If overhead costs are desirable to include, a resource should be defined with a per hour cost of the overhead. This resource should not be attached to any entity. At the end of the simulation the cost of “overhead” will be spread out over the length of the simulation. The decision to make the overhead number positive or negative should be determined by your other cost numbers. If other costs were negative then the overhead will also be negative.
Resource Usage Cost
Tracking the cost of using resources (people, machines, etc.) in the model. (The resource usage cost is added to the cost attribute for the entity that uses it.)
Suggested Technique
- Select the resource and click the Cost tab on the properties dialog.
- Enter the cost per hour of usage.
- Enter the cost per use.
Example: A plumber charges $75 for a house call and then charges an additional $50 per hour for the time spent providing service.
TO DO: Select the resource and click on the Cost tab of the properties dialog. Enter the hourly cost and the cost per use.
Activity Cost
Tracking the cost of an activity.
Suggested Technique
- Select the activity and click the Cost tab on the properties dialog.
- Enter the activity cost when done with the entity.
- Enter the hourly cost of the activity in process.
Example: The application review activity is modeled without the use of a defined resource, however the review is actually performed by a loan officer whose wages and benefits equal $23.45 per hour. In addition, the bank’s additional overhead cost has been estimated to average $8.00 for every application reviewed.
TO DO: Select the activity and click on the Cost tab of the properties dialog. Enter the hourly cost and the cost per entity processed as shown above.
Waiting Time Cost
Tracking the cost applied to the time an entity spends in the model waiting to be processed at an activity or to be moved to the next activity. If waiting time for a given entity has the same cost rate, simply assign the cost per hour in the properties dialog of the entity. However, if waiting time costs are different at different stages in the process, or if they are to be tracked at only certain stages, then the following methods may be used.
The waiting time is always calculated using the Clock() statement and an attribute to track that time. The pre-defined Cost attribute is then incremented by a factor of the waiting time. The method for tracking that waiting time varies depending on the situations presented here. To learn more about the Clock() statement, see Clock( ).
Action Logic:
V_day = 1
While 1 Do
{
Time(1 hr)
Inc V_hour
If V_hour = 24 Then
{
V_hour = 0
Inc V_day
}
If V_day = 8 Then
{
V_day = 1
}
}
Cost of Waiting in a Storage
Suggested Technique
- Create an attribute to track the waiting time called a_Start_Wait (or some other appropriate name).
- In the Action logic of the storage, assign the value of the Clock() to the a_Start_Time attribute: a_ Start_Wait = Clock().
- In the Action logic of the routing that routes the entity from the storage, increment the Cost attribute using the INC statement. For example, to add $5.00 per hour of waiting time (dividing the minutes provided by the Clock function by 60 to get the hours), enter the following: INC Cost, (Clock() – a_Start_Wait) / 60 * 5.00
TO DO: Enter the Action logic for the objects as shown in the above illustration.
Cost of Waiting in an Input Queue
Suggested Technique
- reate an attribute to track the waiting time called a_Start_Wait (or some other appropriate name).
- As the last line in the Action logic of the routing connection to the activity with the input queue you are tracking, assign the value of the Clock() to the a_Start_Wait attribute: a_ Start_Wait = Clock().
- In the Action logic of the destination activity or storage, increment the Cost attribute using the INC statement. For example, to add $5.00 per hour of waiting time (dividing the minutes provided by the Clock function by 60 to get the hours), enter the following: INC Cost, (Clock() – a_Start_Wait) / 60 * 5.00
This time includes the time required to capture resources that have been connected to the activity, since they are captured before the Action logic of the activity is executed. To avoid this, delete the connections and use the GET or JOINTLYGET statement to capture the resources for the activity after the a_Start_Wait attribute has been set and the cost incremented as described above.
Example:
TO DO: Enter the Action logic for the objects as shown in the above illustration.
Cost of Waiting in an Output Queue
Suggested Technique
- Create an attribute to track the waiting time called a_Start_Wait (or some other appropriate name).
- As the last line in the Action logic of the activity with the output queue you are tracking, assign the value of the Clock() to the a_Start_Wait attribute: a_ Start_Wait = Clock()
- As the first line in the Action logic of the routing connection, increment the Cost attribute using the INC statement. For example, to add $5.00 per hour of waiting time (dividing the minutes provided by the Clock function by 60 to get the hours), enter the following: INC Cost, (Clock() – a_Start_Wait) / 60 * 5.00
This waiting time will include the time required to capture resources connected to the routing, since they are captured before the Action logic of the routing is executed. To avoid including this waiting time, delete the connections and use the GET or JOINTLYGET statement to capture the resources for the routing move after the a_Start_Wait attribute has been set and the cost incremented as described above. In addition, any time defined in the General tab of the activity’s properties dialog, will be executed after the last line of Action logic. To avoid counting this time, enter a 0 for the time in the general tab and define the activity time using the TIME statement in the action logic before the a_Start_Wait clock assignment.
Example:
TO DO: Enter the Action logic for the objects as shown in the above illustration.
Cost of Waiting for a Resource
Suggested Technique
- Create an attribute to track the waiting time called a_Start_Wait (or some other appropriate name).
- Instead of using resource connections, use the GET or JOINTLYGET statements to capture the resource.
- On the line preceding the GET or JOINTLYGET statement, enter the following logic: a_ Start_Wait = Clock()
- On the line following the GET or JOINTLYGET statement, increment the Cost attribute using the INC statement. For example to apply $5.00 per hour of waiting for the resource (dividing the minutes provided by the Clock function by 60 to get the hours), enter the following: INC Cost, (Clock() – a_Start_Wait) / 60 * 5.00
Example:
TO DO: Enter the Action logic for the objects as shown in the above illustration.
Special Cost Assignments
Tracking additional costs based on special circumstances.
Suggested Technique
- Create a variable or attribute to track the special circumstance from which additional costs will be calculated.
- Assign a value to the attribute or variable where appropriate.
- Use the value of the variable or attribute to increment the Cost attribute of the entity to which the additional cost applies, or increment the variable if you are tracking a cost not associated specifically with an entity.
Example: The car wash washes cars, pickups, and large trucks. The model however uses only one entity: the Customer. An attribute called a_Size has been defined with the descriptors: car, pickup, and truck. Each size costs the car wash a different amount of money to wash.
TO DO: Create and assign the attribute Size. In the Wash activity, enter the Action logic shown above.
Categorize Cost
Suggested Technique
- Create a real attribute and a variable. Attribute will be used to store the cost of the entity as entity enters an activity, variable will be used to calculate the cost when the entity leaves the activity.
- In the action logic of the relevant activity set the value of the attribute defined above to the default attribute Cost.
- On the exit route of the relevant activity set the value of the variable to be default attribute Cost minus the attribute defined in step 1.
Example:
TO DO: To create multiple categories use multiple variables. Enter the Action logic for the objects as shown in the above illustration.