Pricing Items P3L Cheat Sheet

Pricing Item P3L Cheat Sheet

Pricing items are all about calculating price. Costing is objective, pricing is subjective. Within your assembly tree and operations, you are concerned with calculating cost. Once you have done proper costing, you need to determine a price that works for your business and the customer. Determining the "right" price takes into account several factors:

• Your relationship with the customer
• The characteristics of the opportunity
• What the customer is willing to pay

Pricing items give you a one-stop-shop to go through the exercise of pricing without sacrificing accuracy and clarity in your costing.

A pricing item is responsible for outputting a numeric percentage value to apply to a certain category of cost. Pricing is calculated using a markup or margin formula, and can be applied to 5 different cost categories - purchased components, materials, outside processing, inside processing, and total cost. Each pricing item should set an output percentage using `PERCENTAGE = 10`.

Pricing item formulas have access to the full suite of variable functionality, including `var`, `drop_down_var`, `table_var`, `variable_group`, and `table_lookup`. It also has access to all globally available math functions, such as `mean` and `median`, list functionality, workpiece and price dict (limited to pricing item communication only), access to quantity information with `get_quantities()` and `get_make_quantities()`, and the ability to rename pricing items with `set_profit_item_name(string)`.

Global Objects

• `PURCHASED_COMPONENT_COST` - sum of all costs associated with purchased components in the entire assembly
• `MATERIAL_COST` - sum of all material operation costs (excluding any found within components of type purchased) in the entire assembly
• `OUTSIDE_COST` - sum of all operations with `is_outside_service` set to `True` in the entire assembly
• `INSIDE_COST` - sum of all operations that do not fit into the other three categories in the entire assembly
• `TOTAL_COST` - sum of all costs in the entire assembly
• `CALCULATION_TYPE` - determines how the output percentage value calculates its price contribution, can either be "markup" or "margin". Use globals `MARKUP` and `MARGIN` respectively to represent these strings.
• `COST_CATEGORY` - determines what "color of money" the output percentage references to calculate price contribution. Either "general", "purchased_component", "material", "inside", or "outside". Use globals `TOTAL_COST`, `PURCHASED_COMPONENT_COST`, `MATERIAL_COST`, `INSIDE_COST`, `OUTSIDE_COST` respectively to represent these strings.
• `COST` - the dollar amount of the cost category that the pricing item is tied to. For example, if a pricing item has a `COST_CATEGORY == "material"`, `COST == MATERIAL_COST`
• `contact` - global object containing attributes about the contact & account associated on the quote. Same attributes as with operation P3L.
• `REQUESTED_QUANTITY` - customer requested quantity

Global Functions

NOTE: We are only including functions that are not included in operation P3L.

`set_profit_item_name(name: str)`

Will dynamically rename the pricing item based on the string name argument. If this function is not called, the name will default to the name of the operation definition in your processes page.

Not Available

Pricing item P3L does NOT have access to a lot of operation P3L functionality. This includes: - The `part` object - Custom attributes with `set_custom_attribute` and `get_custom_attribute` - Requesting interrogations e.g. `analyze_mill3()` - Accessing child info with `get_child_info()`

Basic Example

The following example demonstrates how to implement a very basic customer specific markup. An extension of this implementation would be to use a custom table lookup to dynamically fetch markup percentages based on account name. The settings for this pricing item are calculation type of markup and cost category of general.

```markup_factor = var('Markup Factor', 1.0, '', number, frozen=False)
if contact:
if contact.account.name == 'Pint Drinker Machine':
markup_factor.update(1.5)
markup_factor.freeze()
base_percentage = var('Base Percentage', 10, '', number)

PERCENTAGE = markup_factor * base_percentage
```