检验标本不合格登记台账生成器(specimen-reject-log)
一句话结论:给你一张能进检验科质控月报的《标本不合格登记台账》——每条退回标本按 10 类拒收原因对号登记,状态机跟踪到重采闭环,SLA 超时标红,汇总页给原因分布、科室分布、闭环率,缺什么一眼看到。
菜单式选路
第一步 · 选场景(回复字母或序号):
- A. 检验科日常(通知≤10min / 重采≤2h / 闭环≤24h)
- B. 急诊标本优先(5min / 30min / 4h,超时单列上报)
- C. 细菌培养专项(污染率+双套送检追踪,备注记瓶数)
- D. 月度质量汇总(当月全量记录,原因分布直接进 QC 月报)
- E. 自定义(自己给 SLA)
第二步 · 给数据(任选一种):
1. 粘贴/口述登记记录(每条:日期时间、病历号、科室、标本类型、项目、拒收原因……缺的项不用编)
2. --preset 场景 --save 骨架.json 生成填写骨架
3. --demo 先看脱敏样例
4. 直接要空模板(8 行【待填】占位)
第三步 · 出台账:xlsx 双表 = 登记明细(超时整行标红+冻结表头)+ 统计汇总(状态分布/原因分布/科室Top/质量指标/未闭环明细/【待填】清点)。
文件索引
| 文件 | 用途 |
|---|---|
| SKILL.md | 本文档:选路、口径、铁律、边界 |
| scripts/make_specimen_reject_log.py | 核心脚本(生成 xlsx,退出码见下表) |
| assets/input-example.json | --input 正式输入示例(可直接复制改字段) |
| assets/faq.md | 高频问题 + 常见错误操作清单 |
| assets/anti-patterns.md | 反模式清单(错误用法 → 后果 → 正确做法) |
| references/reject-guide.md | 10 类原因速查、SLA 与状态机口径、记录要点 |
| beta-test/run_test.py | 内测脚本(CLI/判定/铁律回归) |
| CHANGELOG.md | 版本与整改记录 |
快速上手
python scripts/make_specimen_reject_log.py --presets
python scripts/make_specimen_reject_log.py --demo --out 台账.xlsx
python scripts/make_specimen_reject_log.py --preset 急诊标本优先 --out 急诊标本台账.xlsx
python scripts/make_specimen_reject_log.py --input 骨架.json --out 台账.xlsx
输入 JSON 顶层为 {"items": [...]}(字段=列名),完整可运行示例见 assets/input-example.json;SLA 参数支持传 0(如 --notify-sla 0 表示通知零时限)。
骨架全局字段回读:--input 自动采用骨架 JSON 顶层的 preset(场景)、dept(登记科室,进汇总页场景标注)、notify_sla/resample_sla/close_h(三段 SLA)——与 --save 保存字段一一对应;命令行 --preset/--dept/--notify-sla 等优先级更高。
字段与判定口径
- 列:序号 / 登记日期 / 登记时间 / 患者标识(病历号) / 申请科室 / 标本类型 / 检验项目 / 拒收原因 / 拒收说明 / 退回通知时间 / 通知对象(工号) / 重采送检时间 / 复检结果 / 状态 / 闭环时间 / 超时标记 / 备注
- 序号留空自动生成:按记录顺序编 1..N,无需手工填;显式给了序号值则用你的值
- 拒收原因 10 类枚举:溶血 / 凝块 / 量不足 / 容器或抗凝剂错误 / 条码或信息不符 / 污染 / 超时送检 / 脂血乳糜 / 标本类型错误 / 其他;枚举校验:原因不在 10 类 → 降级【待填】+ 屏幕校验提示(不进原因分布统计,防止污染质控月报),拿不准就选「其他」+拒收说明;旧斜杠写法(容器/抗凝剂错误、条码/信息不符、脂血/乳糜)自动归一为上述文档名,不判非法
- 状态机:已登记 → 已退回 → 已重采 → 已闭环;脚本同时校验流转一致性——状态推进到哪一档就要求对应时间字段在场(如"已闭环"缺闭环时间会在超时标记列给黄色"流转待核"提示)
- 三段 SLA 独立判超时:通知超时 / 重采超时 / 闭环超时,任一触发即整行标红并在"超时标记"列写明;仅时间格式待核或流转不一致的行标黄(不误伤为超时)
- 时间倒序检测:退回通知早于登记、重采早于通知、闭环早于登记 → 黄色「时间倒序待核」提示(负向时间差不静默放过,也不误判超时)
- 时间格式支持
2026-11-01 09:30/2026/11/1 9:30(分钟粒度);无时间的行不判超时只登记;非法时间降级为"待核"提示,不中断整份台账 - SLA 合并优先级:命令行传参 > 输入 JSON 内
notify_sla/resample_sla/close_h> 预设默认——骨架里保存的 SLA 数值回传--input时真正生效;支持传 0(零时限),负数退出码 13 - 打印即用:明细/汇总页已设横向、按宽度缩放、首行重复打印,打印前无需手工调整版式
- 统计页质量指标:SLA 超时条数 / 重采及时率(有重采记录中重采段未超时的占比;非法重采时间行剔除分母,汇总页单列「非法重采时间 N 行已剔除分母」)/ 污染率(有污染条目时自动给出,细菌培养专项重点)/ 双套送检追踪(备注含「双套」条数)/ 闭环率 / 闭环且无超时 / 未闭环明细逐条列出
退出码表
| 退出码 | 含义 | 处理 |
|---|---|---|
| 0 | 成功 | — |
| 1 | 用法错误(预设名不存在 / --save 缺 --preset) |
按提示改用存在的预设名;--save 前先给 --preset |
| 2 | 命令行参数解析错误(argparse:未知参数/SLA 传非数字等) | 按 usage 提示修正参数后重跑 |
| 10 | 输入文件不存在 | 先 --preset 场景 --save 骨架.json 生成骨架 |
| 11 | JSON 解析失败 | 按提示行号修正 JSON 后重跑同一条命令 |
| 12 | 输入结构错误(缺 items/非列表/记录非对象) | 对照 assets/input-example.json 修正顶层结构 |
| 13 | SLA 参数非法(负数/非数值) | 改为 ≥0(支持 0 表示零时限);JSON 内 SLA 字段核对为数字 |
| 14 | 输出被占用/无写权限(已自动重试 1 次) | 关闭正在打开的同名文件后重跑 |
| 15 | 缺少依赖 openpyxl | pip install openpyxl(内网用离线 wheel) |
| 16 | 运行超时(60 秒看门狗) | 重跑同一条命令;仍超时把输入与命令发给助手排查 |
| 20 | 未预期异常(已自动重试 1 次) | 把输入文件与命令发给助手排查 |
| 21 | 隐私拦截(患者标识疑似姓名/身份证) | 改填病历号/住院号后重跑,不会生成含隐私的台账 |
成稿预览(--demo 真实输出摘录)
统计汇总页:
登记总数 6
—— 状态分布 ——
已闭环 4
已退回 1
已登记 1
—— 拒收原因分布 ——
凝块 / 溶血 / 污染 / 量不足 / 容器或抗凝剂错误 / 超时送检 各 1
—— 质量指标 ——
SLA 超时条数 2
重采及时率 2/4 = 50%
污染率 1/6 = 17%(细菌培养专项重点指标)
双套送检追踪 1 条(备注含「双套」)
闭环率 4/6 = 67%
闭环且无超时 2/4
—— 未闭环明细 ——
序号4 内分泌科 已退回
序号6 急诊科 已登记
【待填】字段提示 明细表共 9 个【待填】单元格——正式上报前须逐项补齐
明细页:超时行整行红底(如"通知超10min"),仅待核/流转提示的行黄底,表头深蓝冻结首行。
铁律(医疗合规)
- 不判定标本:标本"能不能抢救使用、要不要重采、够不够格复检"由检验技师按本院 SOP 决定,工具只登记与计时
- 患者标识只收病历号/住院号:疑似姓名、身份证自动拒绝登记(退出码 21,不生成台账)
- 不编造:拒收原因没把握就选"其他"+说明,时间/工号没提供就【待填】,汇总页清点数量
- 拒收标准以检验科 SOP 为准:本工具的 10 类枚举只是登记口径,不是拒收依据
岗位场景例子
- 检验科窗口技师:"今天退回了 7 个标本" → 选 A,逐条给时间/科室/原因 → 台账+超时标记+当日汇总
- 急诊检验:"凌晨的标本重采拖了 1 小时" → 选 B(SLA 收紧)→ 超时单列,直接交值班汇报
- 感控/质控员:"这个月血培养污染率" → 选 C → 污染条目集中+备注记采集细节 → 进质控月报
- 检验科主任:"月底给护士长们发科室分布" → 选 D → 汇总页科室 Top 排行,沟通有数据
边界提醒
- 本工具不替代 LIS 的标本拒收模块;纸质/电子台账按院内要求归档
- SLA 数值是可调参数不是标准:以本院检验科 SOP 和质量指标文件为准
- 涉及输血标本、传染病病原标本的特殊要求(如输血科双人核对),按相应专项制度执行,本台账仅登记