360 Secure SkillHub
360 安全技能中心

POLICY-MANAGER

该 Skill 作为保单操作协调器,通过 policy-manager CLI(Node 脚本,依赖 jq)创建、读取和更新保单 JSON 文件,涵盖材料列表、投保数据与状态字段,并在用户上传材料时协调 material-* 子 Skill 完成解析后回写数据,强调字段映射准确与数据真实性。

erveynight
erveynight
热度 49.49
最近更新 2026-05-18 11:24:13
分类:效率依赖:代码执行 / 读写文件应用场景:数据处理 / 工作流 / 财务

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add policy-manager
Metadata
name
policy-manager
description
保单数据管理 - 创建、读取、更新保单 JSON 文件。当用户选择产品后创建保单,上传材料后更新材料列表和提取数据,口述信息后更新投保数据,确认缴费计划后更新状态。
license
Proprietary
metadata
{"author":"insurance-clerk-team","version":"3.0"}
compatibility
Requires jq for JSON manipulation

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:字段映射参考

⚠️ 重要:投保人是个人时,需要同时更新 policyHolder 和 policyHolder.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.0 2026-03-27 根据 Agent Skills 规范重写 SKILL.md,添加 YAML Frontmatter
v2.4 2026-03-23 创建 policy-manager CLI 工具(shell 脚本)
v2.3 2026-03-23 完整定义 7 个节点逻辑、固定话术、输出结构
v1.0 - 初始版本