理赔案件地区分析

按就诊机构所在的省、城市、区县统计理赔案件的件数、费用和案件状态,区县可以汇总到城市。

官方技能第 3 版 · 2026/11/14 发布
  • 官方技能,由智元数据编写和维护
  • 只调用智元数据的 REST 接口
  • 1 个取数脚本,只用 Python 3 自带的库
  • API Key 从环境变量 WI_API_KEY 读取
依赖的数据集
4
一次对话
约 6.7 点
安装次数
4
近 7 天调用
29

01怎么用

三步,让你的 Agent 用上这些数据

安装和设置只做一次。以后直接向你的 Agent 提问就行。

  1. 01

    发安装语句

    复制页头的安装语句,发给 你的 Agent。它会下载技能,装进自己的技能目录。可以在页头切换你用的 Agent。

  2. 02

    设置 API Key

    在终端里运行下面的命令,再启动 你的 Agent。

    export WI_API_KEY=你的 API Key

    创建 API Key
  3. 03

    直接提问

02对话示例

每一步做了什么、花了多少点

这次对话调用了 3 次接口,读了 1 个技能文件,运行了 1 次分析代码。调用和点数是真实运行的结果,回答由我们整理。

你的 Agent一共 6.7 点

浙江省各地级市的理赔案件各有多少件?医疗总费用合计多少?哪个城市最多?

  1. 读取 SKILL.md · 问题和这个技能有关,智能体读入技能正文
  2. 第 1 次调用:运行命令取数据3.5 点

    python3 scripts/wi.py join health-claim medical-institution --right-where "region_code = 330000" --left-fields claim_no,accident_date,total_amount,claimed_amount,status,disease_category,hospital_days --right-fields hospital_name,level,district_code --limit 1000 --save data/claims-1.json

    POST /api/v1/join

    查看输出
    已保存到 data/claims-1.json:1000 行,字段 claim_no, accident_date, total_amount, claimed_amount, status, disease_category, hospital_days, hospital_name, level, district_code。
    文件是 JSON:columns 是字段,rows 是行,每行是一个列表,顺序和 columns 相同。
    扣 3.5 点(预占 3.5,释放 0.0),可用点数 9794.5。 还有下一页:--cursor 30138:3526
    
  3. 第 2 次调用:运行命令取数据0.6 点

    python3 scripts/wi.py query admin-region --fields region_code,region_name,level --limit 1000 --save data/regions.json

    POST /api/v1/datasets/admin-region/query

    查看输出
    已保存到 data/regions.json:368 行,字段 region_code, region_name, level。
    文件是 JSON:columns 是字段,rows 是行,每行是一个列表,顺序和 columns 相同。
    扣 0.6 点(预占 1.2,释放 0.6),可用点数 9793.9。
    
  4. 第 3 次调用:运行命令取数据2.6 点

    python3 scripts/wi.py join health-claim medical-institution --right-where "region_code = 330000" --left-fields claim_no,accident_date,total_amount,claimed_amount,status,disease_category,hospital_days --right-fields hospital_name,level,district_code --limit 1000 --cursor 30138:3526 --save data/claims-2.json

    POST /api/v1/join

    查看输出
    已保存到 data/claims-2.json:641 行,字段 claim_no, accident_date, total_amount, claimed_amount, status, disease_category, hospital_days, hospital_name, level, district_code。
    文件是 JSON:columns 是字段,rows 是行,每行是一个列表,顺序和 columns 相同。
    扣 2.6 点(预占 3.5,释放 0.9),可用点数 9791.3。
    
  5. 运行分析:按区县代码前4位汇总浙江省各地级市的理赔案件件数、医疗总费用合计与平均、申请赔付合计、状态分布0 点

    运行分析 · Python 33 行

    查看代码和输出
    import json, globfrom collections import defaultdictdef load(path):    d = json.load(open(path))    k = [c["key"] for c in d["columns"]]    return [dict(zip(k, r)) for r in d["rows"]]rows = [r for p in sorted(glob.glob("data/claims-*.json")) for r in load(p)]names = {r["region_code"]: r["region_name"] for r in load("data/regions.json")}print("总案件数", len(rows))g = defaultdict(lambda: {"n":0,"total":0.0,"claimed":0.0,"status":defaultdict(int),"dist":set()})for r in rows:    dc = r["district_code"]    if not dc:         print("空区县", r["claim_no"]); continue    city = dc[:4]+"00"    x = g[city]; x["n"]+=1    x["total"]+=float(r["total_amount"] or 0)    x["claimed"]+=float(r["claimed_amount"] or 0)    x["status"][r["status"]]+=1    x["dist"].add(dc)tot_n=0; tot_amt=0.0for code,x in sorted(g.items(), key=lambda kv:-kv[1]["total"]):    tot_n+=x["n"]; tot_amt+=x["total"]    st=x["status"]    print(code, names.get(code,"(无此代码)"), "| 件数", x["n"], "| 总费用", round(x["total"],2),          "| 平均", round(x["total"]/x["n"],2), "| 申请赔付", round(x["claimed"],2),          "| 区县数", len(x["dist"]),          "| 已结案",st.get("已结案",0),"审核中",st.get("审核中",0),"已拒付",st.get("已拒付",0),"已撤案",st.get("已撤案",0))print("合计件数", tot_n, "合计总费用", round(tot_amt,2), "全省平均", round(tot_amt/tot_n,2))print("状态合计", {k:sum(x["status"].get(k,0) for x in g.values()) for k in ["已结案","审核中","已拒付","已撤案"]})print("按件数排名前三:", [(names.get(c,c), x["n"]) for c,x in sorted(g.items(), key=lambda kv:-kv[1]["n"])[:3]])print("按总费用排名前三:", [(names.get(c,c), round(x["total"],2)) for c,x in sorted(g.items(), key=lambda kv:-kv[1]["total"])[:3]])
    总案件数 1641
    330900 舟山市 | 件数 210 | 总费用 1496929.11 | 平均 7128.23 | 申请赔付 1193653.87 | 区县数 15 | 已结案 169 审核中 28 已拒付 8 已撤案 5
    330500 湖州市 | 件数 167 | 总费用 1121743.61 | 平均 6717.03 | 申请赔付 891487.15 | 区县数 16 | 已结案 137 审核中 15 已拒付 11 已撤案 4
    330700 金华市 | 件数 155 | 总费用 1089917.84 | 平均 7031.73 | 申请赔付 878790.99 | 区县数 11 | 已结案 119 审核中 18 已拒付 13 已撤案 5
    330300 温州市 | 件数 175 | 总费用 1072045.11 | 平均 6125.97 | 申请赔付 883531.74 | 区县数 14 | 已结案 142 审核中 16 已拒付 5 已撤案 12
    330600 绍兴市 | 件数 154 | 总费用 960733.32 | 平均 6238.53 | 申请赔付 745098.39 | 区县数 10 | 已结案 122 审核中 13 已拒付 9 已撤案 10
    331000 台州市 | 件数 168 | 总费用 898593.62 | 平均 5348.77 | 申请赔付 707305.53 | 区县数 12 | 已结案 137 审核中 19 已拒付 6 已撤案 6
    330800 衢州市 | 件数 159 | 总费用 844193.73 | 平均 5309.39 | 申请赔付 663706.63 | 区县数 13 | 已结案 123 审核中 15 已拒付 13 已撤案 8
    330200 宁波市 | 件数 115 | 总费用 835224.26 | 平均 7262.82 | 申请赔付 668915.22 | 区县数 10 | 已结案 94 审核中 9 已拒付 7 已撤案 5
    330400 嘉兴市 | 件数 111 | 总费用 743567.96 | 平均 6698.81 | 申请赔付 593242.09 | 区县数 11 | 已结案 89 审核中 12 已拒付 7 已撤案 3
    330100 杭州市 | 件数 115 | 总费用 711341.17 | 平均 6185.58 | 申请赔付 557654.18 | 区县数 9 | 已结案 93 审核中 11 已拒付 5 已撤案 6
    331100 丽水市 | 件数 112 | 总费用 626448.26 | 平均 5593.29 | 申请赔付 508105.0 | 区县数 8 | 已结案 93 审核中 8 已拒付 8 已撤案 3
    合计件数 1641 合计总费用 10400737.99 全省平均 6338.05
    状态合计 {'已结案': 1318, '审核中': 164, '已拒付': 92, '已撤案': 67}
    按件数排名前三: [('舟山市', 210), ('温州市', 175), ('台州市', 168)]
    按总费用排名前三: [('舟山市', 1496929.11), ('湖州市', 1121743.61), ('金华市', 1089917.84)]
    

结论

浙江省(按就诊机构所在地)共 1,641 件理赔案件,医疗总费用合计 10,400,737.99 元(约 1,040 万元),平均每件 6,338.05 元。

舟山市在件数和医疗总费用两项上都是第一:210 件、总费用 1,496,929.11 元。

各地级市明细(按医疗总费用从高到低)

排名地级市案件数医疗总费用合计(元)平均(元/件)申请赔付合计(元)已结案审核中已拒付已撤案
1舟山市2101,496,929.117,128.231,193,653.871692885
2湖州市1671,121,743.616,717.03891,487.1513715114
3金华市1551,089,917.847,031.73878,790.9911918135
4温州市1751,072,045.116,125.97883,531.7414216512
5绍兴市154960,733.326,238.53745,098.3912213910
6台州市168898,593.625,348.77707,305.531371966
7衢州市159844,193.735,309.39663,706.6312315138
8宁波市115835,224.267,262.82668,915.2294975
9嘉兴市111743,567.966,698.81593,242.09891273
10杭州市115711,341.176,185.58557,654.18931156
11丽水市112626,448.265,593.29508,105.0093883
—全省合计1,64110,400,737.996,338.058,291,491.191,3181649267

几点补充:

  • 件数排名前三:舟山 210、温州 175、台州 168;杭州、宁波各 115 件,反而靠后。
  • 平均单件费用最高的是宁波 7,262.82 元、舟山 7,128.23 元;最低是衢州 5,309.39 元、台州 5,348.77 元。
  • 全省状态分布:已结案 1,318 件(80.3%)、审核中 164 件(10.0%)、已拒付 92 件(5.6%)、已撤案 67 件(4.1%)。

口径与算法

  • 地区按就诊机构所在地计算:理赔案件本身没有地区字段,通过 hospital_code 连接医疗机构(medical-institution),取机构 region_code = 330000(浙江省)的机构,再按机构 district_code 前 4 位 + 00 汇总到地级市,城市名称用 admin-region 按代码对上。
  • 数据来自 health-claim + medical-institution 两张表,共取 2 页(1,000 + 641 = 1,641 件),合计与分组均由代码计算得出。
  • 本次用到的是演示数据,不代表真实理赔情况。

限制

  • 约 3% 的理赔案件其就诊机构编码在医疗机构表中匹配不到,这些案件无法归入任何地区,未包含在上述 1,641 件内,因此不是全省的完整口径。
  • 部分城市的区县代码数量看起来多于实际行政区数(演示数据中存在非标准/历史区县代码),已按代码前 4 位归入对应地级市,不影响市级合计。

本次共扣 6.7 点(join 3.5 + 2.6,admin-region 查询 0.6),剩余 9,791.3 点。

界面为示意,窗口标题跟着页头选的 Agent 变。

03依赖的数据集

这些数据集都要有授权

技能用到的数据集都要有授权才能查询。缺授权时,Agent 会告诉你缺哪一个。

  • 保险市场

    理赔案件

    health-claim

    健康险理赔案件,包括出险日期、就诊机构、诊断摘要和费用。

    50,000 行 · 12 个字段登录后查看授权
  • 医疗药械

    医疗机构

    medical-institution

    医疗机构的基本信息,包括等级、类型、地区和床位数。

    5,000 行 · 8 个字段登录后查看授权
  • 区域底数

    行政区划

    admin-region

    省级和地级行政区划的编码、名称和上下级关系。

    368 行 · 4 个字段登录后查看授权
  • 区域底数

    县级行政区划边界

    county-boundary

    一行是一个县级行政区的边界,包含区划代码、名称、所在城市和省、面积、中心点和外框。共 2850 行,覆盖全国的县级行政区。香港、澳门、台湾各是一行,没有分到县。边界取自公开的 2023 年初县级行政区划矢量图层,不是官方发布的边界,没有审图号,不能用来确定权属和界线。用来在地图上画出一个县的范围,按县汇总点和线,或者把县级统计数据画成分级的地图。

    2,850 行 · 16 个字段登录后查看授权

04技能内容

装进 Agent 的,全在这里

SKILL.md 可以看预览,也可以看原文。参考文件由平台按当前数据生成,需要时才读。

常驻约 232 token
name 和 description,Agent 一直带着
触发后约 2,284 token
用到这个技能时读入 SKILL.md 正文
按需约 12,434 token
需要时才读参考文件、运行脚本

SKILL.md

116 行 · 约 2,516 token · 触发后读入
---
name: case-area
description: 按地区分析健康险理赔案件(演示数据 health-claim):某个省、城市或区县有多少件理赔案件,医疗总费用、申请赔付金额合计和平均多少,已结案、审核中、已拒付、已撤案各占多少,疾病大类怎么分布,各城市、各区县之间比较和排名。理赔案件本身没有地区字段,本技能经就诊机构(medical-institution)连到省和区县,区县按代码汇总到城市。用户问"上海的理赔案件怎么样""浙江各市的理赔案件""某个区的拒付率"时使用。只用于理赔案件;别的数据按地区查询、汇总,用 data-query。通过 REST 接口取数,需要环境变量 WI_API_KEY。
---

理赔案件地区分析

按地区统计理赔案件。理赔案件(health-claim)没有地区字段。一个案件的地区是它的就诊机构所在的地区:

  • 理赔案件的 hospital_code 连到医疗机构(medical-institution)的 hospital_code。这是登记的关联,join 自动用它。
  • 医疗机构的 region_code 是省级代码(例如 440000),region_name 是省的全称(例如"广东省")。
  • 医疗机构的 district_code 是区县代码,6 位。前 4 位加 00 是城市代码,前 2 位加 0000 是省代码。

理赔案件和医疗机构都是演示数据,不是真实数据。回答里要写明这一点。

开始前

  1. 所有命令都在本技能的目录里运行:python3 scripts/wi.py ...。一次一条命令。
  2. 脚本从环境变量 WI_API_KEY 读取 API Key。没有设置时,请用户先设置,不要猜。
  3. describe、links、plan 不扣点。query、join 扣点,脚本会打印扣了多少。
  4. 下面的命令已经写好了字段。字段的含义见 references/datasets.md。做过的例子见 references/examples.md。
  5. 一次回答最多运行 6 次 run_python。计划好再算,一次把要算的都算完。

第 1 步:确定地区的级别和代码

用户说的地区怎么得到代码第 2 步的过滤条件
省、自治区、直辖市(例如"广东""上海")直接写省代码,前 2 位加 0000,例如广东 440000、上海 310000。不确定时查 admin-region(level = 省)--right-where "region_code = 440000"
城市(例如"杭州市")python3 scripts/wi.py query admin-region --where "region_name = 杭州市" --fields region_code,region_name,level,parent_code城市代码是 330100 时:--right-where "district_code >= 330100" --right-where "district_code < 330200"
区县(例如"萧山区")python3 scripts/wi.py query county-boundary --where "county = 萧山区" --fields region_code,county,city,province。重名时加 --where "city = 杭州市"--right-where "district_code = 330109"
一个城市的全部区县python3 scripts/wi.py query county-boundary --region 杭州市 --fields region_code,county同城市
  • 直辖市(北京、天津、上海、重庆)按省处理。它们的区县代码前 4 位是 1101、3101 这样的"市辖区",不要当成另一个城市。
  • admin-region 只有省和地级市,名称写全称("杭州市",不写"杭州")。

第 2 步:取这个地区的理赔案件

用 join 把理赔案件连到医疗机构,在右边(医疗机构)写地区的过滤条件。只取要用的字段,保存成文件:

python3 scripts/wi.py join health-claim medical-institution --right-where "region_code = 330000" --left-fields claim_no,accident_date,total_amount,claimed_amount,status,disease_category,hospital_days --right-fields hospital_name,level,district_code --limit 1000 --save data/claims-1.json
  • 最后一行写"还有下一页:--cursor C"时,把同一条命令加上 --cursor C,存成 data/claims-2.json,直到没有下一页。一个省约 1,500 件,要取 2 页。
  • 只问一个城市或区县时,换成第 1 步表里的过滤条件,通常 1 页就够了。
  • 用户还限定了时间、状态时,加在左边:--left-where "accident_date >= 2024-01-01"、--left-where "status = 已拒付"。一个条件写一个 --where。
  • disease_category(疾病大类)是 AI 扩增字段,由模型从诊断摘要判定。回答里用到它时写明这一点。要看某个案件为什么判成这一类,用 python3 scripts/wi.py lineage health-claim disease_category --record <案件号>。

第 3 步:用代码算

一次 run_python 读全部文件,把要算的都算完。区县汇总到城市时,按 district_code 的前 4 位分组。城市的名称用 admin-region 查(一次取全部 368 行,再按代码对上):

python3 scripts/wi.py query admin-region --fields region_code,region_name,level --limit 1000 --save data/regions.json
import json, glob
from collections import defaultdict
def load(path):
    d = json.load(open(path))
    k = [c["key"] for c in d["columns"]]
    return [dict(zip(k, r)) for r in d["rows"]]
rows = [r for p in sorted(glob.glob("data/claims-*.json")) for r in load(p)]
names = {r["region_code"]: r["region_name"] for r in load("data/regions.json")}
print("案件数", len(rows))
g = defaultdict(lambda: {"n": 0, "total": 0.0, "claimed": 0.0, "status": defaultdict(int)})
for r in rows:
    city = r["district_code"][:4] + "00"
    x = g[city]
    x["n"] += 1
    x["total"] += float(r["total_amount"] or 0)
    x["claimed"] += float(r["claimed_amount"] or 0)
    x["status"][r["status"]] += 1
for code, x in sorted(g.items(), key=lambda kv: -kv[1]["n"]):
    refused = x["status"]["已拒付"]
    print(code, names.get(code, "(没有这个代码)"), x["n"], "件", round(x["total"], 2), "元", round(x["claimed"], 2), "元",
          "拒付", refused, "件", round(refused / x["n"] * 100, 2), "%")
  • 只看一个地区时,不用分组,直接算合计、平均、各状态的件数和占比。
  • 按疾病大类分时,按 disease_category 分组。空值单独算一组。
  • 字段的键用 join 输出里的字段标识(total_amount、district_code),不带数据集的前缀。

怎么回答

  1. 结论:先回答问题。件数、金额带单位(元),比例写百分数。比较、排名用表格。
  2. 口径:地区按就诊机构所在地算。写明用了哪些数据集(理赔案件、医疗机构),是演示数据。
  3. 怎么算的:取了哪个地区、几页、多少件,区县怎么汇总到城市。一两句话。
  4. 限制:约 3% 的理赔案件的就诊机构编码在医疗机构里找不到,这些案件不能分到地区。用到疾病大类时,写明它是 AI 扩增字段。案件只有几件时,写明比例没有统计意义。
  5. 演示数据里一部分区县代码在真实的区划里没有。按城市、省统计不受影响。按区县列出时写代码,查不到名称的写"(没有名称)"。
  6. 最后写明这次一共扣了多少点。

不要做

  1. 不要心算。合计、平均、占比、排名都来自代码的输出。
  2. 不要用 query health-claim --region。理赔案件不是空间数据,没有地区字段,只能经就诊机构连。
  3. 不要按名称对区县。区县名称有重名,按代码对。
  4. 不要把城市汇总的结果说成全省的结果,也不要漏掉第 2 页。
  5. 不要把这些演示数据当成真实的理赔情况。

不属于本技能

  • 一个案件的费用是否正常、有没有过度诊疗:用 health-claim-audit(理赔审核助手)。
  • 保单的情况:用 policy-lookup(保单查询助手)。
  • 别的数据按地区查询和汇总,例如人口、保费收入、降水、地图上的区县:用 data-query(数据查询)。

出错时

错误码怎么办
NO_GRANT告诉用户缺哪个数据集的授权,给出脚本提示里的申请地址
BAD_REQUEST按错误信息改字段标识或过滤值,再试一次
BAD_REGION地区重名或认不出。按信息里的候选改写代码,或者带上省、市
LINK_UNAVAILABLE运行 python3 scripts/wi.py links health-claim 看现在能用的关联,再用 --link 选就诊机构那一条
INSUFFICIENT_CREDITS点数不够。告诉用户去工作台的"点数"页查看

05版本

发布后不修改,旧版本保留

数据或说明有变化时,平台发布新版本。旧版本仍然可以查看和下载。

  1. 版本 第 3 版2026/11/14 发布

    最新下载

    第 3 版:重写。理赔案件经就诊机构连到地区,能按省、城市、区县取,区县按代码前 4 位汇总到城市。和数据查询(data-query)分清:只用于理赔案件。 · 全部文件约 14,950 token

  2. 版本 第 2 版2026/11/14 发布

    历史版本查看下载

    更新平台维护的文件:空间数据可以按行政区划取(--region、--geometry)。按当前数据重新生成参考文件。 · 全部文件约 10,667 token

  3. 版本 第 1 版2026/10/14 发布

    历史版本查看下载

    第一版。 · 全部文件约 7,168 token