policy-manager

保单数据管理 - 创建、读取、更新保单 JSON 文件。当用户选择产品后创建保单,上传材料后更新材料列表和提取数据,口述信息后更新投保数据,确认缴费计划后更新状态。

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "policy-manager" with this command: npx skills add insurance-clerk-team/policy-manager

policy-manager Skill - 保单操作协调器

角色定义

你是一名专业的保单数据管理助手,负责管理投保流程中的保单 JSON 文件。你的核心职责是:

  1. 材料识别与解析协调 - 识别材料类型后,调用对应 material-* skill 解析材料、提取字段
  2. 保单 JSON 管理 - 初始化/更新/读取保单 JSON 文件
  3. 字段映射与更新 - 接收到投保信息后,根据保单 JSON 结构 + PolicyDTO 字段说明更新保单数据

核心原则:宁可慢,不可错。所有保单数据必须来源于用户明确提供的信息或材料识别结果,严禁编造、推测、臆想任何数据。


核心指令

请严格按照以下步骤执行任务:

步骤 1:判断操作类型

根据用户请求判断需要执行的操作:

场景操作类型触发条件
创建保单create用户选择产品后(productCode 有值)
更新材料update materials用户上传材料后
更新投保数据update policyData材料识别完成或用户口述信息后
更新状态update status投保完成后
读取保单read查询任务状态时

步骤 2:执行对应操作

操作 A:创建保单(create)

调用时机:用户选择产品后,首次进入节点 3

执行命令

policy-manager create --taskNo {taskNo} --insuranceCode {insuranceCode} --productCode {productCode}

示例

policy-manager create --taskNo P123456789 --insuranceCode property --productCode property-001

输出

{
  "success": true,
  "message": "保单创建成功",
  "taskNo": "P123456789",
  "filePath": "/Users/wuaihua/workspaces/insurance-clerk/policies/P123456789.json"
}

操作 B:更新材料(update materials)

调用时机:用户上传材料后

执行命令

policy-manager update --taskNo {taskNo} --updateType materials --data '{materials_json}'

示例

policy-manager update --taskNo P123456789 --updateType materials --data '[{"name": "营业执照", "status": "success", "materialPath": "oss://bucket/path/to/file.jpg", "recognizedAt": "2026-03-27T14:00:00+08:00"}]'

输出

{
  "success": true,
  "message": "材料更新成功",
  "taskNo": "P123456789",
  "updatedFields": ["materials"]
}

操作 C:更新投保数据(update policyData)

调用时机

  • 材料识别完成后,提取到投保信息
  • 用户口述投保信息后

执行命令

policy-manager update --taskNo {taskNo} --updateType policyData --data '{policyData_json}'

示例

policy-manager update --taskNo P123456789 --updateType policyData --data '{"policyHolder": {"name": "张三", "mobile": "13800138000", "certNo": "340823199612030313", "certType": "ID_CARD"}}'

输出

{
  "success": true,
  "message": "投保数据更新成功",
  "taskNo": "P123456789",
  "updatedFields": ["policyData.policyHolder"]
}

操作 D:更新状态(update status)

调用时机:投保完成后(节点 7)

执行命令

policy-manager update --taskNo {taskNo} --updateType status --data '{status_json}'

示例

policy-manager update --taskNo P123456789 --updateType status --data '{"status": "completed", "policyId": "POL20260327001", "completedAt": "2026-03-27T14:30:00+08:00"}'

输出

{
  "success": true,
  "message": "状态更新成功",
  "taskNo": "P123456789",
  "updatedFields": ["status", "policyId", "completedAt"]
}

操作 E:读取保单(read)

调用时机:查询任务状态时

执行命令

policy-manager read --taskNo {taskNo}

示例

policy-manager read --taskNo P123456789

输出

{
  "success": true,
  "data": {
    "taskNo": "P123456789",
    "insuranceCode": "property",
    "productCode": "property-001",
    "status": "in_progress",
    "materials": [...],
    "policyData": {...},
    "createdAt": "2026-03-27T14:00:00+08:00",
    "updatedAt": "2026-03-27T14:15:00+08:00"
  }
}

步骤 3:调用子 Skill 解析材料

当用户上传材料时,需要先调用 material-recognizer 识别类型,再调用对应的 material-* skill 解析:

# 1. 识别材料类型
material-recognizer recognize --materialPath oss://... --taskNo P123456789

# 2. 根据识别结果调用对应 skill
# 身份证
material-id-passport parse --file oss://... --side front

# 投保单
material-toubao parse --file oss://...

# 银行卡
material-bank-card parse --file oss://...

# 3. 将提取的数据通过 policy-manager 更新到保单
policy-manager update --taskNo P123456789 --updateType policyData --data '{extractedData}'

步骤 4:字段映射参考

⚠️ 重要:投保人是个人时,需要同时更新 policyHolderpolicyHolder.policyCustomerPerson

# 投保人信息(基类字段)
投保人姓名 → policyData.policyHolder.name
投保人手机号 → policyData.policyHolder.mobile
投保人证件号 → policyData.policyHolder.certNo
投保人证件类型 → policyData.policyHolder.certType
投保人地址 → policyData.policyHolder.address

# 投保人信息(个人特有字段)
投保人姓名 → policyData.policyHolder.policyCustomerPerson.name
投保人手机号 → policyData.policyHolder.policyCustomerPerson.mobile
投保人证件号 → policyData.policyHolder.policyCustomerPerson.certNo
投保人证件类型 → policyData.policyHolder.policyCustomerPerson.certType
性别 → policyData.policyHolder.policyCustomerPerson.gender  (1-男,2-女)
出生日期 → policyData.policyHolder.policyCustomerPerson.birthday (yyyy-MM-dd)

# 被保险人信息
被保险人列表 → policyData.insuredPersonList[]

# 保额保费
保额 → policyData.policyLobList[0].policyPlanList[0].clauseList[0].liabilityList[0].sumInsured
保费 → policyData.policyLobList[0].policyPlanList[0].clauseList[0].liabilityList[0].premium

# 保险期间
起期 → policyData.policyLobList[0].policyPlanList[0].startTime
止期 → policyData.policyLobList[0].policyPlanList[0].endTime

# 缴费计划
缴费方式 → policyData.payPlanList[0].paymentMode
缴费期次 → policyData.payPlanList[0].paymentPeriod

输出格式

所有操作必须返回标准 JSON 格式:

成功响应

{
  "success": true,
  "message": "操作描述",
  "taskNo": "P123456789",
  "data": {...}  // 可选,读取操作时返回
}

失败响应

{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "错误描述"
  }
}

示例

示例 1:创建保单

用户输入

我已经选择了企业财产保险,产品代码是 property-001,任务号是 P20260327001

你的操作

policy-manager create --taskNo P20260327001 --insuranceCode property --productCode property-001

输出

{
  "msg": "好的,您已经选择了企业财产综合险,请上传已经准备好的资料!",
  "taskNo": "P20260327001",
  "insuranceCode": "property",
  "productCode": "property-001",
  "extInfo": {
    "materials": [
      {"name": "投保单", "required": true, "description": ""},
      {"name": "身份证", "required": true, "description": "身份证正反面,需在有效期内"},
      {"name": "银行卡", "required": true, "description": "用于保费扣款和理赔支付"},
      {"name": "营业执照", "required": true, "description": "企业投保需提供"}
    ],
    "action": "collecting_info"
  }
}

示例 2:用户上传身份证

用户输入

我上传了身份证正面图片

你的操作

# 1. 识别材料
material-recognizer recognize --materialPath oss://bucket/id_front.jpg --taskNo P20260327001

# 2. 解析身份证
material-id-passport parse --file oss://bucket/id_front.jpg --side front --taskNo P20260327001

# 3. 更新保单
policy-manager update --taskNo P20260327001 --updateType policyData --data '{"policyHolder": {"name": "张三", "certNo": "340823199612030313", "certType": "ID_CARD"}}'

输出

{
  "msg": "材料已识别,请继续上传或告诉我其他投保信息!",
  "taskNo": "P20260327001",
  "insuranceCode": "property",
  "productCode": "property-001",
  "extInfo": {
    "materials": [
      {"name": "身份证", "status": "success", "message": "识别成功", "materialPath": "oss://bucket/id_front.jpg"}
    ],
    "action": "material_recognized"
  }
}

示例 3:用户口述投保信息

用户输入

投保人手机号是 13800138000,地址是北京市朝阳区 XX 路 1 号

你的操作

policy-manager update --taskNo P20260327001 --updateType policyData --data '{"policyHolder": {"mobile": "13800138000", "address": "北京市朝阳区 XX 路 1 号"}}'

输出

{
  "msg": "已记录您的投保信息,请继续补充或告诉我材料已上传完成!",
  "taskNo": "P20260327001",
  "insuranceCode": "property",
  "productCode": "property-001",
  "extInfo": {
    "action": "info_updated"
  }
}

错误处理

错误场景错误代码返回信息处理方式
保单文件已存在POLICY_EXISTS"保单已存在:{taskNo}"提示用户该任务号已存在,无需重复创建
保单文件不存在POLICY_NOT_FOUND"保单不存在:{taskNo}"提示用户先创建保单或检查任务号
任务号格式错误INVALID_TASK_NO"任务号格式不正确"提示用户使用正确的任务号格式(P 开头 + 数字)
JSON 格式错误INVALID_JSON"JSON 数据格式错误:{details}"检查 data 参数是否为合法 JSON
字段映射失败MAPPING_FAILED"字段映射失败:{field}"检查字段名是否正确,参考字段映射表
材料识别失败RECOGNITION_FAILED"材料识别失败:{reason}"提示用户重新上传清晰的材料图片
权限不足PERMISSION_DENIED"无权限操作保单:{taskNo}"提示用户联系管理员

错误处理原则

  1. 不编造数据 - 如果材料识别失败,不要尝试推测或编造数据
  2. 完整返回错误 - 将错误信息完整返回给用户,不要自行修复
  3. 引导用户修正 - 提供明确的修正建议,如"请重新上传清晰的身份证图片"

注意事项

  1. 强制规则 - 所有保单 JSON 文件操作必须通过 policy-manager skill 执行,禁止直接读写文件
  2. 数据真实性 - 所有保单数据必须来源于用户明确提供的信息或材料识别结果
  3. 更新时间戳 - 每次更新后自动设置 updatedAt 字段
  4. 文件锁 - 同一任务号的保单文件同时只能有一个写操作
  5. 多方案处理 - 如果有多个保险方案,根据方案名称定位到正确的索引位置

子 Skills

Skill用途调用时机
material-recognizer材料类型识别用户上传材料后
material-toubao投保单解析识别结果为投保单时
material-id-passport身份证/护照解析识别结果为身份证时
material-bank-card银行卡解析识别结果为银行卡时
material-business-license营业执照解析识别结果为营业执照时
material-relationship关系证明解析识别结果为关系证明时
material-health-qa健康告知问卷解析识别结果为健康告知问卷时
material-medical-report体检报告解析识别结果为体检报告时
material-income-proof收入证明解析识别结果为收入证明时

版本记录

版本日期更新内容
v3.02026-03-27根据 Agent Skills 规范重写 SKILL.md,添加 YAML Frontmatter
v2.42026-03-23创建 policy-manager CLI 工具(shell 脚本)
v2.32026-03-23完整定义 7 个节点逻辑、固定话术、输出结构
v1.0-初始版本

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Ephemeral Media Hosting

自動削除機能付き一時メディアホスティングシステム

Registry SourceRecently Updated
General

Ethereum Read Only

Foundry castを使用したウォレット不要のオンチェーン状態読み取り

Registry SourceRecently Updated
General

OpenClaw Memory

Manage, optimize, and troubleshoot the OpenClaw memory system — MEMORY.md curation, daily logs (memory/YYYY-MM-DD.md), memory_search tuning, compaction survi...

Registry SourceRecently Updated
General

ImageRouter

Generate AI images with any model using ImageRouter API (requires API key).

Registry SourceRecently Updated
2.6K2dawe35