构建宠物保险比较引擎:处理15家法国保险公司之间的可变保费
Source: Dev.to
请提供您希望翻译成简体中文的完整文本内容,我将为您进行翻译。
Introduction
自2022年以来,法国宠物保险增长了34%,这主要受到了兽医费用上升和COVID后宠物拥有率提升的推动。以编程方式比较产品简直是一场噩梦:15家主要保险公司,各自拥有基于物种、品种、年龄、地区和免赔额的定价表。下面概述了我如何构建一个能够处理这种复杂性的比较引擎。
数据来源
| 保险公司 | 数据格式 | 备注 |
|---|---|---|
| Santévet | JSON API(非官方,从其报价小部件抓取) | 实时报价 |
| Assurimo | PDF 费率表(每季度更新) | 需要 PDF 解析 |
| Groupama | 按风险类别的静态表格 | 简单查找 |
| Dalma | 动态定价引擎(需要报价请求) | 需要 API 调用 |
| … | … | … |
归一化模式
统一的 JSON 架构覆盖约 80 % 的情况:
{
"insurer_id": "santevet",
"product_id": "sv-excellence",
"species": "cat",
"breed_risk_group": 2,
"age_min_months": 12,
"age_max_months": 84,
"region": "IDF",
"deductible_pct": 20,
"ceiling_annual_eur": 3000,
"monthly_premium_eur": 38.50,
"reimbursement_basis": "actual_costs",
"waiting_period_days": 30
}
剩余的 20 %(遗传性疾病、品种排除、补充模块)通过 exclusions 数组和 add_ons 对象进行捕获。
品种‑风险映射
法国保险公司使用不同的分类系统:
- Santévet – 4 个风险组(1 = 低,4 = 高)
- Assurimo – 按形态划分的 7 类
- Allianz – 品种白名单 / 黑名单
我构建了一张交叉映射表,将 380 种犬类和 90 种猫类映射到一个标准化的 5 级风险尺度,以Fédération Cynologique Internationale(FCI)品种标准为锚点。
区域成本调整
兽医费用因地区差异显著(例如,农村克勒兹的咨询费为 €28,而巴黎第16区为 €68 16)。保险公司以不同方式调整保费:
- 按部门代码
- 按邮编前缀
- 仅按城镇/农村标志
解决方案: 一个地理位置查找表,将 INSEE 市镇代码映射到风险层级,并根据 DREES 兽医护理费用调查每年更新。
报价检索架构
- 用户输入会触发对所有保险公司的并行报价请求。
- 每个请求的超时时间为 3 秒。
- 对于缺失的报价,将回退到缓存的费率数据(最多 30 天前),并在 UI 中以视觉方式标记。
实时引擎(覆盖 12 家提供实时报价的保险公司和 3 家使用缓存网格的保险公司)可在 . 进行测试。
新鲜度与置信度评分
法国法律要求保险公司在续约前 15 天通知投保人保费变动。这给比较网站带来了“新鲜度”问题。
每条保费记录的置信度评分:
$$ \text{score} = 1 - \frac{\text{days_since_update}}{90} $$
- 超过 90 天的记录将从比较中排除,并标记为需要手动刷新。
实现技巧
- 从 PDF 解析器开始 – 大多数保险公司仍以 PDF 形式发布费率,构建可靠的提取器花费的时间是预期的 3 倍。
- 尽早记录排除模式 – 事后添加遗传疾病支持导致四个归一化器失效。
- 构建保险公司变更检测 webhook – 与其轮询,不如订阅保险公司站点地图的变化。
监管考虑
- 保费在法定通知期限内更新。
- 所有显示的数据均包含来源和新鲜度指示。
Call to Action
你是否在受监管的行业构建过比较引擎?保险行业在准确性和合规性方面有独特的挑战。欢迎在评论中分享你的经验。