每到大促时,各种优惠叠加算到我们头疼。那么对于产品经理而言,电商场景下存在一个订单中使用了多种优惠的场景,会涉及到退款和优惠平摊的规则,这时候该怎么设计才合适?作者结合具体案例,谈谈其中的逻辑。
在电商下单时,存在一个订单中使用了多种优惠的场景,当多种优惠叠加时,涉及到商品的优惠平摊计算规则以及退款场景下的退款金额计算逻辑,本文用具体案例与大家分享多种优惠叠加时的详细计算逻辑。
一、前提
- 价格为1分钱的商品不参与抵扣
- 系统保留2位小数,向上取整
- “部分退款” 时优惠券不退;“全部退款” 时优惠券可退
二、退款分摊规则
1. 优惠券 + 用户金额合并支付
A:全额退款:
订单销售价8.99 = 商品A销售价5.01 + 商品B销售价3.42 + 商品C销售价2.13 – 优惠券抵扣金额1.57
此时,用户发起全额退款,则:用户实际获得:商品原价(5.01+3.42+2.13)* 100% = 10.56元( 实付8.99元+优惠券1.57元)
B、部分退款(抵扣金额平摊法):
备注:在优惠平摊时,需要按照商品价格进行正序排列,使得商品价格高的排到最后,避免发生最后一个商品的价格不足抵扣的情况
此时,将优惠券抵扣金额平摊到各商品上,各商品的实付价格为:
- 商品A实付价格= 5.01 – (1.57 * (5.01/(5.01+3.42+2.13)))= 5.01 – (1.57 * 0.47) = 5.01 – 0.73= 4.28
- 商品B实付价格= 3.42 – (1.57 * (3.42/(5.01+3.42+2.13)))= 3.42 – (1.57 * 0.32) = 3.42 – 0.50= 2.92
- 商品C实付价格= 2.13 – (1.57 * (2.13/(5.01+3.42+2.13)))= 2.13 – (1.57 * 0.20) = 2.13 – 0.31 = 1.82(特别注意:这是错误计算方法)
- 商品C实付价格= 2.13 – (1.57 – 0.73 – 0.50)= 2.13 – 0.34 = 1.79(特别注意:由于精度问题,最后一个商品要用该商品的价格减去各商品优惠的价格)
商品实付金额计算公式:
①非最后一个商品的销售价 = 该商品销售价 – (优惠券抵扣金额 * (该商品销售价/各商品销售总价的比例))
②最后一个商品销售价 = 该商品销售价 – (优惠券总金额 – 第一个商品的优惠券承担金额 – 第二个商品的优惠券承担金额)
当对商品进行退款时,会涉及到退款比例,以退款比例80%为例。
(原则:为防止被薅羊毛,商品实付金额和优惠金额同时乘以退款比例):
①用户实付:商品实付金额乘以退款比例
退商品A时,退款金额 = A商品实付金额*80% = 4.28*80% = 3.42 (故A商品退3.42元)
退商品B时,退款金额 = B商品实付金额*80% = 2.92*80% = 2.33 (故B商品退2.33元)
退商品C时,退款金额 = C商品实付金额*80% = 1.79*80% = 1.43(故C商品退1.43元)
②优惠模块:部分退款时,优惠券不退
2. 红包 + 优惠券 + 用户金额合并支付:
A:全额退款: