同一份理赔,每个经办人算出的赔付额都不同
一句话总结
保障判定就是从索赔金额中,按固定的顺序依次扣减免赔额、共付比例、单笔限额和年度限额,而这个顺序、四舍五入的方式,以及“按什么单位计数”,都会改变结果。
为什么需要它
保险金的计算表面上只是几次乘法和减法。但一到现场,几乎每次都能看到同一笔索赔被两个系统算出不同的结果:理赔审核系统和会计系统不一样,赔付经办人的电子表格又不一样。三者都是照着保险条款做的,结果却各不相同。
原因通常是条款用文字书写,没有明确顺序。以“按扣除免赔额后金额的 80% 赔付,单次限额 30 万韩元,年度限额 300 万韩元”这句话为例,先扣免赔额还是先乘 80%,30 万韩元的限额是在乘之前还是之后判断,免赔额是按每笔索赔计算还是按每次事故计算,这些句子都没有规定。各团队按自己的理解实现,这些理解就分散隐藏在代码里。
这种偏差不会表现为错误。两个系统都正常结束,日志里什么也不会留下。暴露出来的只有客户的咨询和结算差异。所以 FDE 重新实现这套判定时要做的是:把规则提取成数据,并为每笔索赔记录哪条规则扣了多少。在判定是否正确之前,判定必须是可以解释的。
工作原理
判定器接收一笔索赔,依次扣减金额。本实验使用的顺序如下——这只是本实验的假设,实际产品的条款因产品而异。保险合同的基本框架在《商法》第 4 编(保险)中,但免赔额、限额之类的数值由条款规定,而不是由法律规定。
청구액
├─ 1. 자기부담금(공제액) 사고 하나에 한 번 → 남은 금액
├─ 2. 공동부담률 비율로 깎음 → 남은 금액
├─ 3. 건당 한도 이 청구의 상한 → 남은 금액
└─ 4. 연간 한도 남은 연간 여유 → 지급액
为什么顺序会改变结果。假设索赔 100 万韩元,免赔额 30 万韩元,共付 20%。先扣免赔额,结果是 (100 - 30) × 0.8 = 56 万韩元;先按共付比例计算,结果是 100 × 0.8 - 30 = 50 万韩元。相差 6 万韩元,而且这个差额会乘以索赔笔数。两种结果都可以声称“符合条款”,这正是问题的关键。
按什么单位计数同样会改变结果。如果免赔额按每笔索赔计算,那么因同一次事故分别申请门诊、药品、检查的人,要承担三次免赔额;如果按每次事故计算,则只承担一次。年度限额也是如此,按“事故日期所属年度”还是“受理日期所属年度”计算,会让年末索赔的判定结果不同。
免责期(等待期)是合同日期与事故日期之间的间隔。合同开始后一定期限内发生的事故不予保障。这里常见的错误是用受理日期而不是事故日期来计算:事故明明发生在期限之后,却因为受理晚了而被拒付,或者情况相反。日期计算一旦从字符串比较入手,就一定会出问题,所以用 Python 的话,请用 datetime 的 date.fromisoformat 和 timedelta 处理;如果必须在 SQL 中处理,则使用 SQLite 的日期函数。
四舍五入是一种策略。乘以共付比例后,会留下韩元以下的小数。Python 内置的 round() 会把恰好处于一半的值向偶数方向取整(银行家舍入)。decimal 模块的默认舍入方式也是 ROUND_HALF_EVEN。如果条款规定的是四舍五入,就必须明确指定 ROUND_HALF_UP,这个差异每笔只有 1 韩元,但有几十万笔时,在结算中就会显现。更重要的是,当两个系统使用不同的模式时,差异会随机分散,很难查出原因。
在现场相遇的样子
第一,规则数值写死在代码里。if plan == "BASIC": deductible = 20000 这样的行分散在多个文件中,每增加一个产品,就得修改所有文件。把规则提取成表后,增加产品只是增加一行数据,更重要的是可以用当时的表重现过去的判定。
第二,只有判定结果,没有依据。如果只存了赔付金额 12 万韩元,客户问“为什么是 12 万韩元”时没有人能回答。如果把每条规则扣减的金额以数组形式保留下来,它本身就是给客户的说明,也是回归测试的期望值。这就是实验中的判定器要输出 steps 的原因。
第三,只按单笔索赔查看累计限额。年度限额取决于该合同之前的索赔已经用掉了多少。只看一笔索赔来计算,就会超出限额赔付;顺序一变,结果也会不同。判定必须按固定的顺序(通常是受理日期)处理,还要事先规定:较晚进来的索赔是否会推翻之前的判定。
第四,拒付原因只有一个。有的索赔既发生在免责期内,又属于除外责任项目。如果只保留一个原因,客户解释清楚其中一点之后,还会再次被拒付。原因应当以列表形式保留。
实际工作中真正重要的事
- 把顺序写进文档,并让代码按这个顺序读下来。顺序要通过代码的结构体现出来,而不是靠注释。
- 规则数值放在表中,计算放在代码中。产品增加了,代码也应保持不变。
- 为每笔索赔保留判定依据。只对上合计数,就永远不知道哪里出了偏差。
- 把舍入模式和限额的基准年度写成策略。不规定的话,两个系统会给出不同的答案,而这种差异看起来并不是错误。
下一项实验要做什么
你将亲自创建合成的条款表和 141 笔索赔,并用数字查看两种应用顺序会使合计相差多少。接着编写判定器,按顺序应用免赔额、共付比例和单笔限额,按免责期和除外责任拒付,让同一次事故的多笔索赔共用免赔额,并用尽年度限额。评分器每次都会用不同的条款数值实际运行你的判定器,核对赔付金额和判定依据,甚至检查恰好处于一半位置时的舍入。