03 · ERP & SUPPLY CHAINP014 MIN
OrderItem、Pricing、Discount 与 Tax
用行项目快照表达成交内容,并让金额计算可复核。
MENTAL MODELORDER COMMERCIALS
01Unit Price × Qty
→02Line Discount
→03Taxable Amount
→04Tax
→05Order Total
先把概念与边界说清楚
定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。
OrderItem
订单中的成交行,保存 SKU/配置、数量、单位价格、折扣、税和描述快照。
Discount
可按金额或比例作用在行或整单,并需要优先级、叠加和舍入规则。
Tax
根据地点、商品类别、客户免税资格和时点计算的法定义务。
Money
金额应使用最小货币单位整数或精确 decimal,并始终携带币种。
99.9 × 3 为什么对不上账
前后端用浮点数分别计算,折扣和税的舍入顺序不同。
- 01
统一最小货币单位与舍入策略。
- 02
服务端作为最终金额权威。
- 03
保存每一步金额与规则版本。
UI、支付和财务导出使用同一结果,也能解释一分钱差异。
马上动手
- 写出行折扣和整单折扣的计算顺序。
- 为多币种订单定义不可变币种。
常见坑
- 金额用 float
- 只存 total 不存组成
- 税和折扣在前后端各写一套
05 · KNOWLEDGE CHECK为什么 OrderItem 要保存价格快照?查看答案⌄
答案
商品与价目表会变化;订单必须保留成交时的可复核金额,历史事实不能在每次读取时按新规则重算。