Overview

New Part Pricing Model

Beginning in 16.5 Major of CET, a new pricing model has been introduced for Parts (cm.core.part). This new system replaces the old single-value listPrice approach by separating a part's base price from its option-based pricing, allowing more flexibility with pricing configurations.

Purpose

This change was driven by two main goals: supporting the new Specials system and improving compatibility with external order systems.

1. Support for the New Specials System The new Specials system in CET allows users to modify pricing at both the product and option levels, which required a more predictable pricing structure. By separating a part’s base price from its option-based pricing, we can handle those adjustments more cleanly and consistently.

2. Alignment with External Order Systems Many order entry systems now expect pricing data in a base price + upcharges format. Moving away from the single list price value brings CET in line with that standard and makes data exports more reliable.

Overall, this update gives us a more flexible, modern foundation for how pricing works across CET and its integrations.

Roadmap

16.5: Opt-in (Migration)

  • The new pricing model is introduced and available as an opt-in feature.
  • Developers can begin migrating to the new constructor and pricing APIs (basePrice, optionPriceSum, calculatedListPrice).
  • The old listPrice and upcharge APIs remain fully supported.

17.0: Opt-out (Default On)

  • The new pricing model becomes the default system (opt-out) for DsPart.
  • Data based parts will automatically use the new pricing APIs unless explicitly configured to continue with the old model.
  • Migration of constructors and pricing logic should be completed before this release to avoid compatibility issues.

17.5: Full Adoption (Legacy Removal)

  • The legacy pricing APIs and old constructors will be removed.
  • All parts and extensions must use the new basePrice + optionPriceSum approach and the updated pricing API methods.

Key Migration Notes

  • New Constructor: Replace listPrice parameter with basePrice and optionPriceSum
  • Feature Flag: Use useNewPricing() to determine which pricing system a part is using
  • New API Functions:
    • basePrice() – defines the part’s inherent cost
    • optionPriceSum() – dynamically computes option-related costs
    • calculatedListPrice() – returns combined list price (basePrice + optionPriceSum)
  • Old API Deprecation: customListPrice() and upcharge() are deprecated and scheduled for removal
  • Runtime Behavior: listPrice() automatically delegates to the new pricing system when useNewPricing is enabled

For more information:

  • See the runtime and compile-time documentation for your system under:
    • cm.core.part
    • cm.abstract.part
    • cm.abstract.datasymbol
    • (and related modules as applicable)
  • These sections include code-level explanations of the pricing API and migration behaviors