| name | case-data-import |
| description | 病案数据导入技能。导入基础数据表、住院费用分类和费用明细单。当用户需要导入病案数据、处理费用数据或执行数据初始化时调用。 |
病案数据导入技能
本技能用于指导如何正确导入病案相关数据,包括基础数据表、住院费用分类和费用明细单。
数据导入顺序
重要:必须按照以下顺序导入数据
- 第一步:导入基础数据表 - 包含病案出院病人信息和病案分析基础表
- 第二步:导入费用汇总数据 - 导入患者总费用(可选,也可由费用明细自动计算)
- 第三步:导入费用明细单 - 详细的费用清单数据,自动计算分类费用汇总
数据源文件位置
基础数据文件位于项目根目录的 基础数据/ 文件夹:
基础数据/
├── 病案出院病人.xlsx # 病案出院数据(患者基本信息)
├── 病案分析基础表.xlsx # 病案分析基础数据
├── 费用_住院号.xlsx # 费用汇总数据
├── 费用清单.xlsx # 费用明细数据
└── 费用清单(1).xlsx # 费用明细数据(续)
导入步骤详解
第一步:导入基础数据表
基础数据表包含患者的基本信息和诊断信息。
病案出院病人字段(实际列名):
| 原字段名 | 映射字段 | 说明 |
|---|
| 住院号 | patient_id | 患者唯一标识(核心关联键) |
| 患者姓名 | patient_name | 患者姓名 |
| 医师 | doctor_name | 主治医师 |
| 科室编号 | dept_code | 科室编码 |
| 出院科室 | dept_name | 出院科室 |
| 入院科室 | admission_dept | 入院科室 |
| 入院日期 | admission_date | 入院时间 |
| 出院日期 | discharge_date | 出院时间 |
| 诊断类型 | diagnosis_type | 主要诊断/其他诊断 |
| 诊断ICD | diagnosis_code | 诊断ICD-10编码 |
| 诊断名称 | diagnosis_name | 诊断描述 |
| icd | icd_code | ICD编码(用于DIP分组) |
| icd3 | icd3_code | ICD-3位编码 |
| 手术icd | surgery_code | 手术ICD编码 |
| 手术名称 | surgery_name | 手术名称 |
处理逻辑:
- 读取病案出院病人数据
- 字段重命名(中文→英文)
- 提取主要诊断(diagnosis_type == '主要诊断')
- 聚合其他诊断(按住院号合并)
- 提取手术信息(手术icd、手术名称)
- 计算住院天数 = 出院日期 - 入院日期 + 1(住院当天也算一天)
第二步:导入费用汇总数据
费用汇总表(费用_住院号.xlsx)用于快速导入患者的总费用。
费用汇总表字段:
| 原字段名 | 映射字段 | 说明 |
|---|
| 住院号 | patient_id | 住院号(关联键) |
| 总花费 | total_cost | 患者总费用 |
处理逻辑:
- 读取费用汇总数据
- 根据住院号匹配病案信息
- 只更新总费用字段(total_cost)
- 分类费用由费用明细导入时自动计算
注意:费用汇总表只用于导入总费用,各类分类费用(药品费、检查费等)由费用明细导入时自动汇总计算,确保数据一致性。
第三步:费用分类规则
费用分类用于统计不同类型的医疗费用。费用清单中的"费用类别"列已包含详细分类。
重要:草药费单独统计,与药品费(非草药费)分开
原始费用类别(24种)及归类:
| 费用类别 | 归类 | 说明 |
|---|
| 西药费 | 药品费 | 非草药费 |
| 成药费 | 药品费 | 非草药费 |
| 草药费 | 草药费 | 单独统计 |
| 材料费 | 材料费 | |
| 检查费 | 检查费 | |
| CT费 | 检查费 | |
| 心电图 | 检查费 | |
| 彩超费 | 检查费 | |
| B超费 | 检查费 | |
| 放射费 | 检查费 | |
| 胃镜费 | 检查费 | |
| 化验费 | 检验费 | |
| 治疗费 | 治疗费 | |
| 理疗费 | 治疗费 | |
| 换药费 | 治疗费 | |
| 注射费 | 治疗费 | |
| 处置费 | 治疗费 | |
| 手术费 | 手术费 | |
| 麻醉费 | 手术费 | |
| 护理费 | 护理费 | |
| 床位费 | 服务费 | |
| 诊查费 | 服务费 | |
| 输氧费 | 其他费用 | |
| 输血费 | 其他费用 | |
分类归并函数示例:
def classify_cost_group(category):
if pd.isna(category):
return '其他费用'
category = str(category).strip()
if category in ['西药费', '成药费']:
return '药品费'
elif category == '草药费':
return '草药费'
elif category == '材料费':
return '材料费'
elif category in ['检查费', 'CT费', '心电图', '彩超费', 'B超费', '放射费', '胃镜费']:
return '检查费'
elif category == '化验费':
return '检验费'
elif category in ['治疗费', '理疗费', '换药费', '注射费', '处置费']:
return '治疗费'
elif category in ['手术费', '麻醉费']:
return '手术费'
elif category == '护理费':
return '护理费'
elif category in ['床位费', '诊查费']:
return '服务费'
else:
return '其他费用'
第四步:导入费用明细单
费用明细单包含每项收费的详细信息。
费用清单字段(实际列名):
| 原字段名 | 映射字段 | 说明 |
|---|
| 住院号 | patient_id | 住院号(关联键) |
| 收费对象 | patient_name | 患者姓名 |
| 项目名称 | item_name | 收费项目名称 |
| 收费项目编码 | item_code | 项目编码 |
| 收费数量 | quantity | 数量 |
| 收费标准 | unit_price | 单价 |
| 收费额 | amount | 金额 |
| 计费单位 | unit | 单位 |
| 收费科室 | dept_name | 科室 |
| 费用类别 | cost_category | 费用分类(原始24种) |
| brlx | patient_type | 病人类型 |
处理逻辑:
- 合并多个费用清单文件
- 字段重命名
- 应用费用分类规则
- 去重检查:同一患者(住院号相同)的"项目名称+收费标准"组合唯一
- 如果已存在相同组合,则覆盖更新原记录
- 如果不存在,则新增记录
- 自动汇总计算:导入完成后,自动根据费用明细计算每位患者的费用汇总
- 按费用类别汇总各类费用总额
- 更新病案信息表中的费用字段
- 确保明细数据与汇总数据一致
- 与患者信息关联
数据关联关系
┌─────────────────┐
│ 病案出院病人 │
│ (patient_id) │
└────────┬────────┘
│
│ 住院号关联
│
▼
┌─────────────────┐ ┌─────────────────┐
│ 费用_住院号 │ │ 费用清单 │
│ (只导入总费用) │ │ (明细+自动汇总) │
└─────────────────┘ └─────────────────┘
数据来源优先级:
- 总费用:可来自费用汇总表或费用明细自动计算
- 分类费用:统一由费用明细自动汇总计算
数据库表结构
biz_case_info(病案信息表)
| 字段 | 类型 | 说明 |
|---|
| case_id | bigint | 病案ID |
| patient_id | varchar(50) | 住院号 |
| patient_name | varchar(100) | 患者姓名 |
| dept_code | varchar(50) | 科室编码 |
| dept_name | varchar(100) | 科室名称 |
| admission_date | date | 入院日期 |
| discharge_date | date | 出院日期 |
| los | int | 住院天数(出院日期-入院日期+1) |
| main_diagnosis_code | varchar(50) | 主诊断编码(诊断ICD) |
| main_diagnosis_name | varchar(500) | 主诊断名称 |
| icd_code | varchar(50) | ICD编码(用于DIP分组) |
| icd3_code | varchar(20) | ICD-3位编码 |
| surgery_code | varchar(50) | 手术ICD编码 |
| surgery_name | varchar(500) | 手术名称 |
| other_diagnosis | text | 其他诊断 |
| total_cost | decimal(12,2) | 总费用 |
| drug_cost | decimal(12,2) | 药品费(非草药费) |
| herb_cost | decimal(12,2) | 草药费(单独统计) |
| material_cost | decimal(12,2) | 材料费 |
| exam_cost | decimal(12,2) | 检查费 |
| test_cost | decimal(12,2) | 检验费 |
| treatment_cost | decimal(12,2) | 治疗费 |
| surgery_cost | decimal(12,2) | 手术费 |
| nursing_cost | decimal(12,2) | 护理费 |
| service_cost | decimal(12,2) | 服务费 |
| other_cost | decimal(12,2) | 其他费用 |
| dip_code | varchar(50) | DIP分组编码 |
API接口
数据导入接口
POST /api/v1/data/import
Content-Type: multipart/form-data
参数:
- file: 上传的文件
- importType: 导入类型
- CASE_INFO: 病案首页数据
- COST_DETAIL: 费用明细数据
- DIP_GROUP: DIP分组数据
病案管理接口
GET /v1/cases/page # 分页查询病案
GET /v1/cases/{id} # 获取病案详情
POST /v1/cases # 新增病案
PUT /v1/cases/{id} # 修改病案
DELETE /v1/cases/{id} # 删除病案
POST /v1/cases/{id}/calculate # 重新计算DIP分值
处理后数据输出
处理后的数据输出到 基础数据/processed/ 目录:
| 文件名 | 说明 |
|---|
| 患者信息_完整.csv | 合并后的完整患者信息 |
| 费用明细_合并.csv | 合并后的费用明细数据 |
| 费用汇总_按住院号.csv | 按住院号汇总的费用分类统计 |
注意事项
- 住院号是核心关联键:所有数据通过住院号进行关联,确保住院号格式一致
- 日期格式:统一使用
YYYY-MM-DD 格式
- 住院天数计算:住院天数 = 出院日期 - 入院日期 + 1(住院当天也算一天)
- 金额精度:费用字段保留2位小数
- 诊断编码:使用ICD-10标准编码
- 费用明细去重:同一患者的"项目名称+收费标准"组合唯一,重复导入时自动覆盖更新
- 费用自动汇总:导入费用明细后自动计算并更新病案费用汇总,确保明细与汇总数据一致
- 事务处理:大批量导入时使用事务,确保数据一致性
常见问题处理
1. 住院号不匹配
检查费用数据中的住院号是否与病案数据一致,可能存在格式差异(如前导零)
2. 费用分类无法识别
检查费用归类字段,根据关键词规则进行分类,无法识别的归入"其他费用"
3. 日期解析错误
确保日期字段格式统一,处理空值和异常日期
4. 诊断重复
同一住院号可能有多条诊断记录,需要区分主要诊断和其他诊断