输血不良反应登记台账生成器(transfusion-reaction-log)
一句话结论:给你一张能直接交输血科督查的不良反应登记台账——四场景(反应登记/上报流转/随访与结论/月度汇总)全流程留痕,上报时限随 --limit-hours 参数判定,未闭环行黄色预警、延迟上报与要素缺失整行标红,反应类型/科室分布与上报及时率自动统计,结论只抄录不下结论。
本页导航:菜单式选路 → 对话示例 → 快速上手与输出预览 → 退出码表 → 字段与判定口径 → 铁律(医疗合规四关)→ 能力边界量化表 → 岗位场景例子 → 边界提醒 → 文件索引。
菜单式选路
使用者开口后按场景引导,一次一问补要素:
第一步 · 选场景(回复序号或场景名均可):
- ① 反应登记(逐例记:登记编号、科室、血液成分、血袋号、反应类型由医师判定抄录、发生时间、处置抄录、登记人工号)
- ② 上报流转(跟踪记:登记编号、上报时间、接收科室、反馈状态——未闭环黄色预警,跟踪到已反馈)
- ③ 随访与结论(随访记:随访结果抄录、结论由医师判定抄录——工具不下结论,结论缺失【待填】)
- ④ 月度汇总(按例汇总:发生/上报时间、上报时限自动算,是否及时按 --limit-hours 判定,统计页出类型/科室分布与及时率)
第二步 · 给数据(任选一种):
1. 粘贴/口述登记记录(按场景逐行给:登记编号、时间、科室、工号……缺的项不用编)
2. --preset 场景名 --save 骨架.json 生成填写骨架,填好 --input 回来
3. --demo 先看脱敏样例长什么样
4. 直接要空模板(8 行【待填】占位)
第三步 · 出台账:xlsx 双表 = 登记明细(异常行整行标红 + 未闭环行黄色预警 + 【待填】红字 + 冻结表头)+ 统计汇总(异常清单/反应类型分布/科室分布/上报及时率/【待填】清点/隐私与合规提示)。
不知道选什么?直接说需求,我给你列选项,回个序号就出表。
对话示例
> 用户:输血反应要登记上报,帮我弄个台账
> 助手:好的,先选场景(回序号或场景名):①反应登记 ②上报流转 ③随访与结论 ④月度汇总
> 用户:1
> 助手:好的,反应登记。请按病例逐行给数据,一次一项,缺的跳过不编:
> 1. 登记编号?(示例:TR-1101-01)
> 用户:TR-1101-01,血液内科,悬浮红细胞 血袋号2604100123A1,医师判定过敏反应(皮疹),今天09:20发生,处置已按病历处理,登记N3081
> 助手:要素齐全(登记日期未提供→【待填】)。生成台账:1 行,无异常。提醒:反应类型与严重程度以医师判定为准抄录,本工具不代判定。
快速上手
# 场景菜单
python scripts/make_transfusion_reaction_log.py --presets
# 脱敏示例(--date 固定台账日期,可复现)
python scripts/make_transfusion_reaction_log.py --demo --out 台账.xlsx --date 2026-11-01
# 指定场景(回序号 1/2/3/4 或场景名均可)
python scripts/make_transfusion_reaction_log.py --preset 月度汇总 --limit-hours 12 --out 月度.xlsx
# 从填写好的骨架生成
python scripts/make_transfusion_reaction_log.py --input 骨架.json --out 台账.xlsx
# 空模板(8 行【待填】占位)
python scripts/make_transfusion_reaction_log.py --preset 上报流转 --out 空模板.xlsx
输出预览
以下为 --preset 月度汇总 --demo --date 2026-11-01 --limit-hours 24 输出的文本摘录(截取自实际生成的 xlsx 关键单元格;完整摘录与逐格复现命令见 assets/preview.md):
| 序号 | 月份 | 登记编号 | 反应类型(医师判定抄录) | 科室 | 发生时间 | 上报时间 | 上报时限(小时,自动) | 是否及时(自动) | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 2026-10 | TR-1031-01 | 过敏反应 | 血液内科 | 2026-10-31 08:30 | 2026-10-31 09:00 | 0.5 | 及时 | |
| 2 | 2026-10 | TR-1030-02 | 发热反应 | 急诊科 | 2026-10-30 22:00 | 2026-10-31 10:00 | 12 | 及时 | |
| 3 | 2026-10 | TR-1029-03 | 溶血反应(疑似) | 骨科 | 2026-10-29 14:00 | 2026-10-30 20:00 | 30 | 延迟 | ⚠️ 上报时限(30h)超过给定上限(24h)——请核查上报及时性(整行标红) |
| 4 | 2026-10 | TR-1028-04 | 细菌污染反应(疑似) | 消化内科 | 2026-10-28 09:00 | 【待填】 | 【待填】 | 【待填】 | ℹ️ 发生/上报时间缺失——无法判定上报及时性,补齐后重新统计 |
统计汇总(截取):上报时限(--limit-hours)=24.0 小时|异常行数(红)=1|反应类型分布:过敏反应 1、发热反应 1…|上报及时率=67%(及时 2 例 / 可判定 3 例,时限 24.0h)。
退出码表(脚本 scripts/make_transfusion_reaction_log.py,v1.0.0)
| 退出码 | 含义 | 处理 |
|---|---|---|
| 0 | 台账生成成功 | — |
| 10 | 输入文件不存在(沿用现有体系约定) | 核对 --input 路径 |
| 11 | 输入缺失:缺 items / items 非数组 / --save 未指定 --preset |
按 {"items": [ … ]} 结构补齐 |
| 12 | 格式错误:JSON 无法解析 / items 项非对象 / --date / --limit-hours 无法识别 |
核对 JSON 语法与参数格式 |
| 13 | 隐私拦截:输入检测到姓名明文(患者张三/张某某式)、身份证号、手机号等敏感个人信息 | 去除敏感个人信息后重试;标识仅可用登记编号/血袋号/工号(错误提示不回显敏感值) |
| 14 | 校验失败:预设名不存在 | 见 --presets 菜单(回序号/场景名均可) |
| 15 | 运行超时(60 秒看门狗) | 重跑同一条命令 |
| 20 | 解析失败 / 输出失败等未预期异常(兜底) | 把输入 JSON 与提示发给助手排查 |
| 21 | 缺依赖 | pip install openpyxl 后重跑 |
单行日期/时间格式错误不中断整份台账:该格转【待填】红字并在备注注明原因,汇总页计入清点;文件级错误才整体退出。
字段与判定口径
- ① 反应登记(11 列):序号 / 登记日期 / 登记编号 / 科室 / 血液成分 / 血袋号 / 反应类型(医师判定抄录) / 发生时间 / 处置(抄录) / 登记人工号 / 备注
- ② 上报流转(8 列):序号 / 登记编号 / 上报日期 / 上报时间 / 接收科室 / 反馈状态 / 反馈时间 / 备注
- ③ 随访与结论(7 列):序号 / 登记编号 / 随访日期 / 随访结果(抄录) / 结论(医师判定抄录) / 结论医师(工号) / 备注
- ④ 月度汇总(10 列):序号 / 月份 / 登记编号 / 反应类型(医师判定抄录) / 科室 / 发生时间 / 上报时间 / 上报时限(小时,自动) / 是否及时(自动) / 备注
异常行整行标红(写入备注 ⚠️ 提示,人工核对):
- 反应登记:登记编号缺失(逐例可追溯)|反应类型缺失(须由医师判定后抄录,工具不代判定)
- 上报流转:登记编号缺失|接收科室缺失(上报去向须留痕)
- 随访与结论:登记编号缺失
- 月度汇总:登记编号缺失|反应类型缺失|上报延迟(上报时限 > --limit-hours)|上报时间早于发生时间
未闭环黄色预警(整行黄色底纹,备注 ⏳ 提示):上报流转场景中反馈状态 ≠ 已反馈(含待反馈、空缺)——跟踪至已反馈后黄色消除;红色行优先于黄色。
参数化阈值(不硬编):--limit-hours 给定上报时限(小时),缺省 24;上报时限(小时) = 上报时间 − 发生时间(自动,保留 1 位小数),≤时限判「及时」、>时限判「延迟」标红。--limit-hours 变、判定结果跟着变;骨架 JSON 顶层 limit_hours 回读同样生效(CLI 优先级更高)。
软提示(备注 ℹ️ 提示,不标红):处置未填(按病历抄录,工具不代填)|结论未填(待医师判定后抄录,工具不下结论)|随访结果未填|已反馈但反馈时间未填|发生/上报时间缺失(无法判定及时性)|日期/时间格式无法识别(该格转【待填】)。
- 【待填】单元格红字标红,汇总页清点数量并提示「未补齐视为登记未完成」
- 上报时限/是否及时为纯算术推导(发生与上报时间都有效时才计算),缺失则【待填】,绝不代填
- 反应类型、严重程度与处置结论由医师判定抄录——工具不判定、不下结论;统计页只做类型/科室计数与及时率算术
- 日期支持
2026-03-15/2026.3.15/2026/3/15/2026年3月15日/20260315,月份可填2026-10;日期时间支持2026-10-31 08:30/2026-10-31 0830/2026-10-31 8点30分/2026-10-31;时间支持09:00/0900/9点00分 - 标识只能填登记编号/血袋号/工号;工具默认场景为①反应登记,
--input的 JSON 里也可写"preset": "场景名"自动选路;骨架顶层的date/dept/limit_hours回读时同样生效(命令行--date/--dept/--limit-hours优先级更高,同时给出时覆盖骨架值)
铁律(医疗合规四关)
- 反应类型、严重程度与处置结论由医师判定抄录,工具不判定、不下结论:只做登记/流转/随访留痕;不碰输血决策、不判血型相容性;本技能是输血科专项台账,全院通用不良事件走 adverse-event-report
- 敏感个人信息脱敏硬拦截:脚本检测到姓名明文(含「患者张三」「张某某」式结构)、身份证号、手机号 → 退出码 13 直接拒绝处理(错误提示不回显敏感值);标识仅可用登记编号/血袋号/工号
- 数据不出机:台账本地生成,无网络请求;登记信息按院内数据管理规定流转
- 不编造不代填:时间/结论/处置等关键字段缺失一律【待填】标红,汇总页清点;上报时限与及时率只做算术推导,绝不代填结论
能力边界量化表
| 能做 | 不做(明确边界) |
|---|---|
| 四场景台账生成(xlsx 双表,可打印归档) | 不替代输血科管理系统/不良事件上报系统:无审批流、无自动报送接口 |
| 异常行整行标红(编号/类型/科室缺失、上报延迟、时间倒挂) | 不判定反应类型与严重程度:由医师判定后抄录,工具只卡要素完整性 |
| 未闭环黄色预警(反馈状态≠已反馈,跟踪至闭环) | 不下处置结论、不做因果关系判定:结论由医师抄录 |
| 上报及时率与类型/科室分布(纯算术统计,时限 --limit-hours 参数化) | 不做上报合规判定:延迟是否免责按本院制度与医师意见处理 |
| 【待填】清点与补填提示(不代填) | 不校验登记内容真伪(须人工/双人复核) |
| 敏感个人信息隐私拦截(退出码 13) | 不识别或处理影像/扫描件;输入仅支持 JSON 文本 |
| 本地生成、数据不出机 | 不引用法规具体条款号;上报口径以本院制度为准 |
岗位场景例子
- 输血科护士:「发血后出现反应要第一时间登记」→ 选 ① → 编号/反应类型缺失标红,处置抄录留痕
- 质控员:「上报了没有反馈要催办」→ 选 ② → 未闭环黄色预警,反馈后黄色消除
- 医师/随访人员:「反应病例要随访定结论」→ 选 ③ → 结论由医师抄录,工具不下结论
- 科室月底:「月度要报反应汇总与及时率」→ 选 ④ → 时限判定 + 类型/科室分布 + 及时率自动统计
边界提醒
- 本工具不替代不良事件上报系统;上报流程与表格按院内要求执行归档
- 反应严重程度与处置结论由医师判定抄录——工具不判定严重程度、不做因果关系分析、不下结论
- 全院通用不良事件(跌倒、用药错误等非输血专项)请用 adverse-event-report;危急值请用 critical-value-log——本技能是输血科专项台账
- 输血申请与发血请用 blood-apply-register;血液出入库与效期请用 blood-inventory-log
- 标识列只填登记编号/血袋号/工号,不得写入姓名明文——脚本对姓名明文/身份证/手机号是硬拦截(退出码 13)
文件索引
| 文件 | 用途 |
|---|---|
| scripts/make_transfusion_reaction_log.py | 核心:CLI 成稿 + 四场景判定 + 未闭环黄色预警 + 及时率统计(--limit-hours 参数化) + 异常标红 + 隐私拦截 + 错误码兜底 |
| references/transfusion-reaction-guide.md | 登记实践参考:反应登记/上报流转/随访结论/月度汇总台账口径 |
| assets/faq.md | 常见问题 12 条(隐私拦截/结论抄录/--limit-hours 参数/黄色预警含义/系统边界等) |
| assets/anti-patterns.md | 反模式集中清单(错误操作+后果+替代) |
| assets/preview.md | 成稿预览(真实输出摘录+逐格复现命令) |
| assets/input-example.json | 输入示例(脱敏,可直接 --input 试跑) |
| beta-test/run_tests.py | 内测回归脚本(隐私拦截/退出码/异常标红/黄色预警/--limit-hours 参数化/待填不编造等) |
FAQ 快捷导航:判反应类型→Q1|没数据能生成吗→Q2|为什么被拒绝(13)→Q3|--limit-hours 是什么→Q4|黄色预警→Q5|标红是不是判定我出错→Q6|和上报系统→Q7|数据外传→Q8|【待填】算完成吗→Q9|场景怎么选→Q10|结论能代写吗→Q11|及时率怎么算→Q12。