定价规则与价格覆盖

Carbon 如何确定行上的价格——从基础价格到价格覆盖和定价规则。

Carbon 为每条报价单或行解析单价。它从基础价格开始,选择适用的,应用匹配的,并把计算轨迹保存在行上。价格覆盖定义协商价格和数量阶梯;定价规则定义公司范围的折扣和加价。

定价规则

定价规则是按公司划分、用于上调或下调价格的规则。每条规则是 Discount(折扣)或 Markup(加价),以 Percentage(百分比)或 Fixed(固定金额)表示,或者是为已配置部件选项定价的 Configuration(配置)规则(见下文)。规则仅在行匹配其条件时触发。

字段类型
Discount(降低价格)、Markup(提高价格)或 Configuration(为已配置部件选项定价)。
Percentage 或 Fixed。百分比以 0 到 1 的小数存储(10% 为 0.10),因此表单上限为 100%。
折扣/加价值。百分比表示当前价格的比例;固定值表示绝对金额。
在折扣中优先级高者胜出,并决定加价的应用顺序。默认 0。
规则适用的行数量范围。
把规则限定到特定客户或客户类型。留空表示全部。
限定到特定物料或某个物料过账组。留空表示全部。
规则生效的日期窗口。留空的一端为开放式。
停用的规则会被跳过而不删除,保留以供审计。

只有当所有已设置条件都成立时,规则才匹配行:数量在 min/max 内、日期在有效窗口内、物料和客户落在物料/客户限制内(空限制表示无限制)。只有匹配且启用的规则进入计算。

NOTE

百分比是小数,不是整数

Percentage 金额是 0 到 1 之间的小数(10% 为 0.10)。规则表单拒绝大于 1 的值。如果你输入 15 期望 15%,那实际是 1500% 的调整。

配置规则

Configuration 规则没有自己的金额或物料范围。你选择一个已配置部件(只列出需要配置的部件),表单会显示 Configuration Prices(配置价格) 区域,列出该部件的配置参数。每个金额是在行的配置匹配时加到行单价上的单位附加费:

  • 列表参数按选项取值(Color = Red → 10)。
  • 布尔参数在值为真时取值。
  • 数值参数按值单位取值(0.50 × Length)。

文本、日期和原材料参数无法定价。金额带符号,负值表示折让。所有匹配的配置规则附加费会叠加。它们在折扣和加价规则之前加入,因此折扣也作用于附加费。每个附加费在价格轨迹中显示为以参数名标注的 Configuration 步骤。客户范围、日期、数量范围和优先级与其他规则一致。不应用后续规则的价格覆盖仍会采用配置价格,因为配置价格是为所选选项定价,而不是为部件定价。

只要行有配置,配置价格就会应用:报价行在配置或重新配置时重新定价;销售订单行有自己的 Configure(配置) 按钮。

价格覆盖

价格覆盖为特定物料固定协商价格,可选带数量阶梯。与规则不同,价格覆盖直接替换基础价格,而不是调整它。价格覆盖有三种范围,单个覆盖只针对一个范围:

  • 客户——此物料,此客户。
  • 客户类型——此物料,该客户类型的所有客户。
  • 所有客户——此物料,所有客户。在覆盖表单选择 All Customers;通过 API 发送 allCustomers: true。

价格覆盖只指定一个范围。客户和客户类型都留空会被拒绝,而不是理解为所有客户,因为面向所有客户的价格会在每张报价单上替换物料的标价。

价格覆盖列在销售 → 价格表中。在范围选择器中选择客户、客户类型或 All Customers。客户的价格表还会显示其从客户类型和所有客户继承的覆盖,每个都标记来源范围(Override、Type Override、All Override),因此为该客户定了不同价格的每个物料都会出现。每个覆盖带一组数量阶梯——数量 → 覆盖价格 的档位。对于给定行数量,Carbon 选择数量不大于订购数量的最高档位。档位为 1、5、10 时订购 8 个,得到 5 档的价格。

字段类型
该覆盖定价的物料。
限定到一个客户。与客户类型互斥。
限定到一个客户类型。与客户互斥。
限定到所有客户。与客户和客户类型互斥。
一个或多个 数量 → 覆盖价格 档位。重复数量会被拒绝。
开启时(默认),定价规则仍会叠加到覆盖价格上。关闭时,覆盖价格即为最终价格,跳过规则。
覆盖生效的日期窗口。
停用的覆盖会被跳过,但保留历史。

你可以用 Duplicate price list(复制价格表) 从另一个客户或类型复制价格表,对目标已定价的物料选择 skip(跳过)或 overwrite(覆盖)策略。

NOTE

价格覆盖是价格表,不是折扣

价格覆盖直接设置起始价格。之后规则是否调整它由该覆盖的 Apply rules on top 标志逐条决定,而不是全局设置。

引擎如何确定价格

解析自上而下运行。结果连同每个步骤作为价格轨迹保存在行上,行还会记录驱动最终数字的 pricing rule(如有)。

从基础价格开始。 物料的单位销售价,或报价已计算出的成本滚动价。轨迹来源:Base。

应用最佳匹配的覆盖(如有)。 Carbon 按严格优先级检查三个范围,并采用第一个产生档位的范围:客户覆盖 → 客户类型覆盖 → 所有客户覆盖。 一旦某个范围匹配,就不会再落到更低范围。如果订购数量低于覆盖的最小档,该范围不匹配,Carbon 尝试下一个。胜出的覆盖设置起始价格。轨迹来源:Override、Type Override 或 All Override。在价格轨迹中,该步骤会链接到所应用的覆盖(在此链接出现之前存储的轨迹显示为纯文本)。

叠加定价规则,除非胜出的覆盖把 Apply rules on top 设为关闭。所有匹配的启用规则在此应用,顺序如下。轨迹来源:Rule。

截断并记录。 负结果下限为零,最终价格连同完整轨迹写入行。

因此优先级是:客户覆盖 > 客户类型覆盖 > 所有客户覆盖 > 基础价格,然后规则在胜出的起始价格之上运行。

规则冲突时谁胜出

折扣和加价的组合方式不同,这也是最让人意外的地方:

  • 折扣不叠加——优先级最高的单个折扣胜出。 多条折扣规则匹配时,Carbon 按优先级排序(并列时按较大的有效金额),只应用最高的一条,其余丢弃。同一行永远不会有两个折扣。
  • 加价叠加并复合。 所有匹配的加价规则按优先级顺序应用,每条都基于已经调整过的当前价格计算。20% 之后的 10% 是复合,而不是简单相加。

配置价格先加,然后折扣,然后加价栈,最后零下限。

HEADS UP

两个折扣永远不会合并

如果客户同时符合 10% 和 15% 的折扣规则,只能得到 15%——绝不是 25%,也绝不是依次应用两者。加价相反:全部应用并复合。

NOTE

价格解析是取值,不是锁定

解析在行上的物料或数量变化时运行并填入单价。它只是一个起点,你仍可手工编辑;轨迹记录建议数字是如何得出的。

应用位置

同一引擎为两个界面定价。在报价行上,它在成本滚动和重新定价时运行。在销售订单行上,行表单在你选择物料或修改数量时调用同一解析,填入单价并保存轨迹。两种行都携带解析后的价格及其来源,因此价格可以追溯到产生它的确切覆盖和规则。

Carbon 没有单独的价格表单据。价格表就是限定到某个客户或客户类型的一组覆盖。价格由应用解析,数据库不做解析。

相关内容