工作记录------关于提前结清退保保费计算产生尾差的问题

工作记录------关于保费计算产生尾差的问题

背景:在保单申请提前结清退保时,发现计算的退保保费与实收保费值不符。
经过排查发现,此时需要计算退保保费,保费根据业务不同,可以按照在保天数收取,也可以按照在保期次收取。
这个渠道就是采用,天数的方式收取保费,公式:退保日期之前的所有期次保费全收,退保日期所在期次保费按天收取(该期次应收保费/30*(提前结清退保日期-该期次起始日期+1))。

问题1:发现退保保费计算尾差。

应收保费采用的BigDecimal类型,BigDecimal在进行计算时,会进行四舍五入。
原代码中:
该期次应收保费/30:会进行一次四舍五入。
再乘以天数时。

//每天保费
oneDayDueInsamt = dueInsamt.divide(new BigDecimal(30),2,ROUND_HALF_UP);
//当期应收保费
dueInsamtSum = oneDayDueInsamt.multiply(days);

这样计算就造成了保费的精度丢失。
改为先相乘、再进行除法计算。就不会导致精度丢失。

BigDecimal dueInsamtSum = dueInsamt.multiply(days).divide(new BigDecimal(30), 2, ROUND_HALF_UP);

问题2:发现退保保费计算误差更大

在上一版修改后,精度问题已经修复,但是在进行退保时,发现退保保费计算出来的误差更大了。
经过排查发现,开发人员又犯了另一个错误。

//计算相差天数,起始天数与退保天数差值
String dateGap = getDateGap(startDay, endorseDate);
BigDecimal days= new BigDecimal(dateGap + 1);
//当期应收保费
dueInsamtSum = oneDayDueInsamt.multiply(days);

重点在于dateGap +1,此时是字符串拼接,dateGap 为3时,days的值就是31。导致最后保费计算误差更大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值