电商场景下,多种优惠叠加时的商品平摊和退款规则
在电商下单时,存在一个订单中使用了多种优惠的场景,当多种优惠叠加时,涉及到商品的优惠平摊计算规则以及退款场景下的退款金额计算逻辑,本文用具体案例与大家分享多种优惠叠加时的详细计算逻辑。
一、前提
- 价格为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、部分退款(抵扣金额平摊法):
订单销售价8.99 = 商品A销售价5.01 + 商品B销售价3.42 + 商品C销售价2.13 – 优惠券抵扣金额1.57
备注:在优惠平摊时,需要按照商品价格进行正序排列,使得商品价格高的排到最后,避免发生最后一个商品的价格不足抵扣的情况
此时,将优惠券抵扣金额平摊到各商品上,各商品的实付价格为:
- 商品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:全额退款:
将红包、优惠券、用户余额原路退回
订单销售价8.00 = 商品A销售价5.01 + 商品B销售价3.42 + 商品C销售价2.13 – 优惠券抵扣金额1.57 – 红包抵扣金额0.99
此时,用户发起全额退款,则:用户实际获得:商品原价10.56 * 100% = 10.56元( 实付8元+优惠券1.57元+红包抵扣金额0.99元)
B、部分退款:
平摊顺序:优惠券 > 红包 > 用户支付金额
优先判断是否满足优惠券使用门槛
订单销售价8.00 = 商品A销售价5.01 + 商品B销售价3.42 + 商品C销售价2.13 – 优惠券抵扣金额1.57 – 红包抵扣金额0.99
此时,将优惠券抵扣金额平摊到各商品上,各商品的实付价格为:
商品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(正确算法)
使用优惠券的商品实付金额计算公式:
①非最后一个商品的销售价 = 该商品销售价 – (优惠券抵扣金额 * (该商品销售价/各商品销售总价的比例))
②最后一个商品销售价 = 该商品销售价 – (优惠券总金额 – 第一个商品的优惠券承担金额 – 第二个商品的优惠券承担金额)
最后,再将红包抵扣金额平摊到各商品上,各商品的实付价格为:
商品A实付价格= 4.28 – (0.99 * (5.01/(5.01+3.42+2.13)))= 4.28 – (0.99 * 0.47) = 4.28 – 0.46 = 3.82
商品B实付价格= 2.92 – (0.99 * (3.42/(5.01+3.42+2.13)))= 2.92 – (0.99 * 0.32) = 2.92 – 0.31 = 2.61
商品C实付价格= 1.79 – (0.99 – 0.46 – 0.31) = 1.79 – 0.22 = 1.57
使用红包的商品实付金额计算公式:
①非最后一个商品的销售价 = 该商品用完优惠券的销售价 – (红包抵扣金额 * (该商品销售价/各商品销售总价的比例))
②最后一个商品销售价 = 该商品用完优惠券的销售价 – (红包总金额 – 第一个商品的红包承担金额 – 第二个商品的红包承担金额)
a、当对商品进行退款时,需要判断退款比例,以退款比例50%为例:
暂不考虑部分退款后,付款金额不满足优惠券使用门槛的场景
①用户实付:商品实付金额乘以退款比例
退商品A时,退款金额 = A商品实付金额*50% = 3.82*50% = 1.91(故A商品退1.91元)
退商品B时,退款金额 = B商品实付金额*50% = 2.61*50% = 1.30(故B商品退1.30元)
退商品C时,退款金额 = C商品实付金额*50% = 1.57*50% = 0.78(故C商品退0.78元)
②红包模块:优惠金额乘以退款比例
退商品A时,红包金额 = A商品红包抵扣金额*50% = 0.46*50% = 0.23(故A商品退0.23元红包)
退商品B时,红包金额 = B商品红包抵扣金额*50% = 0.31*50% = 0.15(故B商品退0.15元红包)
退商品C时,红包金额 = C商品红包抵扣金额*50% = 0.22*50% = 0.11(故C商品退0.11元红包)
③优惠券模块:部分退款时,优惠券不退
A商品实退金额:可退红包0.23 + 可退金额1.91 = 2.14
B商品实退金额:可退红包0.15 + 可退金额1.30 = 1.45
C商品实退金额:可退红包0.11 + 可退金额0.78 = 0.89
b、用户再次申请部分退款(再退50%,产生全部退款的效果):
当判断退款比例达到100%时(也就是最后一次退款),用各支付方式的实付金额减去上一次的退款金额(防止精度丢失问题造成的金额错误)
故:
A商品再退金额:红包0.23 + 退金额1.91 = 2.14
B商品再退金额:红包0.16 + 退金额1.31 = 1.47
C商品再退金额:红包0.11 + 退金额0.79 = 0.90
以及退出一张:0.73 + 0.5 + 0.34 = 1.57的一张优惠券
三、总结
1、价格为1分钱的商品不参与抵扣
2、在优惠平摊时,需要按照商品价格进行正序排列,将商品价格高的排到最后,避免发生最后一个商品的价格不足抵扣的情况
3、最后一个商品的实付价 = 该商品销售价 – (优惠券总金额 – 第一个商品的优惠券承担金额 – 第二个商品的优惠券承担金额)
4、在退款时,商品实付金额和优惠金额同时乘以退款比例(不可先退实付金额后退券,否则在部分退款场景下会被用户薅羊毛)
本文作者 @我是PM 。
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!