不合理处方反馈
概述
本skill包含两个工作流程,均基于医院不合理处方点评Excel数据:
1. 流程A:用药反馈Word拆分 — 按医生分别生成用药反馈Word文档(一位医生一个文件),压缩成zip
2. 流程B:处方反馈明细汇总 — 生成处方反馈情况明细汇总Excel(科室/医生/数量/反馈明细)
两个流程可独立使用,也可先后执行(先拆分Word,再生成汇总Excel)。
触发条件
当用户提供不合理处方Excel + 样板文件,要求以下之一时触发:
- 按医生拆分生成用药反馈Word文档 → 执行流程A
- 生成处方反馈明细汇总 → 执行流程B
- 两者都要 → 先A后B
输入要求
- Excel文件:Sheet1,第1行表头(医生、患者、诊断、处方用药情况、点评情况),第2行起为数据。医生列格式为"科室\n姓名"。
- 样板docx(流程A需要):至少1个,含6列表格(医生/患者信息/诊断/处方用药情况/点评情况/医生反馈)。
- 样板xlsx(流程B可选):如有则参照其格式,否则使用内置默认格式。
流程A:用药反馈Word拆分
工作步骤
第1步:检查样板格式
python scripts/generate_feedback_docs.py --inspect "样板.docx"
第2步:生成文档并打包
python scripts/generate_feedback_docs.py \
--excel "不合理处方.xlsx" \
--template "样板.docx" \
--output-dir "输出目录" \
--zip "输出zip路径.zip"
关键格式规范
> 完整规范见 references/format_spec.md
- A4横向(29.7cm×21cm),页边距1.27cm,宋体
- 表格6列,表头12pt加粗居中,数据行11pt
- c4点评情况:单段落+
<w:br/>换行,第一行(类型)加粗,第二行(描述)不加粗 - 签名行12pt加粗右对齐,跨6列合并
- 科室名映射:去"门诊","区"→"科"(急诊医学科保持原样)
- 文件命名:
{前缀}_({科室}-{姓名}{处方数})处方.docx - 内容严格取自Excel,不增减文字
流程B:处方反馈明细汇总
工作步骤
第1步:生成汇总Excel(草稿,反馈明细为原始点评情况文本)
python scripts/generate_summary.py \
--excel "不合理处方.xlsx" \
--output "汇总.xlsx" \
--title "2026年X月点评X月医院处方反馈"
脚本自动完成:
1. 读取Excel,按医生分组
2. 合并完全相同的点评情况(用*N表示,N=相同条数)
3. 数量列=不同点评情况种数(非处方总数)
4. 按科室排序输出
5. 打印分组详情供AI精简参考
第2步:AI精简反馈明细(关键步骤)
脚本生成的反馈明细为点评情况原始文本,需AI根据以下规则精简:
- 精简至1句话:从点评情况中提取核心问题+建议,如"杏贝止咳颗粒用于风寒证不适宜,应表寒里热证"
- 按不合理类型分别描述:同一医生有多种不同类型的不合理处方,分别列出
- 相同问题合并:核心问题相同的处方合并为1条,末尾加*N(N=相同条数)
- 单条反馈无"1."前缀,多条用"1.xxx\n2.xxx\n3.xxx"格式
- 数量列=精简后的不同不合理情况种数
精简示例:
- 原始:中医辨证与用药不符\n杏贝止咳颗粒功效以清宣肺气...建议用于表寒里热证比较合理。(2条相同)
- 精简:杏贝止咳颗粒用于风寒证不适宜,应表寒里热证*2
第3步:AI将精简后的反馈明细填回Excel
修改Excel中D列(反馈明细)和C列(数量),确保:
- 反馈明细为精简后的1句话描述
- 数量列与精简后的条目数一致
- C3总数=所有医生数量列之和
汇总Excel格式规范
> 完整规范见 references/format_spec.md 的"汇总Excel格式"章节
- 4列:科室(A)/医生(B)/数量(C)/反馈明细(D)
- 第1行:A1="科室",C1:D1合并=标题
- 第2行:表头(A2加粗)
- 第3行:总数行(A3填充深色,C3=总数)
- 第4行起:数据行
- A列科室:加粗+填充色(theme=7),居中
- B列医生:加粗,居中
- C列数量:不加粗,居中
- D列反馈明细:不加粗,左对齐,自动换行
- 列宽:A=15.5, B=12.4, C=9.6, D=67.6
科室名映射(汇总Excel专用,与流程A不同!)
| Excel原始值 | 汇总表简称 | 规则 |
|---|---|---|
| 外一区门诊 | 外一科 | 去"门诊","区"→"科" |
| 急诊医学科 | 急诊科 | "医学科"→"科" |
| 全科医疗科门诊 | 全科医疗 | 特殊处理 |
| 治未病门诊 | 治未病科 | 去"门诊"后加"科" |
| 儿科门诊 | 儿科 | 去"门诊" |
映射函数:
def dept_summary(dept):
d = dept.replace('门诊', '')
if d.endswith('医学科'):
d = d[:-3] + '科'
if d == '全科医疗科':
d = '全科医疗'
if d == '治未病':
d = '治未病科'
d = d.replace('区', '科')
return d
依赖
- Python 3.x
- python-docx(
pip install python-docx)— 流程A - openpyxl(
pip install openpyxl)— 流程A和B
注意事项
- 流程A:生成与打包需在同一Python进程中完成,避免文件系统时序导致文件丢失
- 流程A:复制样板后通过XML克隆行保证格式一致
- 流程A:中文字体需同时设置 w:ascii/w:hAnsi/w:eastAsia/w:cs 为"宋体"
- 流程B:脚本只合并完全相同的点评情况,AI需进一步合并核心问题相同但描述略有不同的条目
- 流程B:精简反馈明细是关键步骤,直接影响汇总表质量
- 两流程的科室名映射规则不同,注意区分