疫苗出入库效期台账生成器(vaccine-inout-log)
一句话结论:给你一张能直接交公卫督查的疫苗出入库效期台账——四场景(出入库/效期预警/报废/月度汇总)自动勾稽,异常行整行标红(效期已过仍入库、过期未处置、报废缺原因缺审批人、勾稽不平),预警窗 --days 参数化,【待填】红字清点,缺什么一眼看到。
本页导航:菜单式选路 → 对话示例 → 快速上手与输出预览 → 退出码表 → 字段与判定口径 → 铁律(医疗合规四关)→ 能力边界量化表 → 岗位场景例子 → 边界提醒 → 文件索引。
菜单式选路
使用者开口后按场景引导,一次一问补要素:
第一步 · 选场景(回复序号或场景名均可):
- ① 出入库登记(按批逐笔记:疫苗名称、批号、效期至(标签抄录)、厂家、入库/出库、数量、去向或来源)
- ② 效期预警(按批清点在库效期:预警窗 --days 天内软提示,已过期且未登记处置整行标红)
- ③ 报废登记(报废逐笔留痕:报废原因与审批人必填,缺一标红)
- ④ 月度汇总(月末按批勾稽:月初结存+入库−出库−报废 vs 月末结存)
第二步 · 给数据(任选一种):
1. 粘贴/口述登记记录(按场景逐行给:日期、疫苗名称、批号、效期至、数量、厂家、工号……缺的项不用编)
2. --preset 场景名 --save 骨架.json 生成填写骨架,填好 --input 回来
3. --demo 先看脱敏样例长什么样
4. 直接要空模板(8 行【待填】占位)
第三步 · 出台账:xlsx 双表 = 登记明细(异常行整行标红 + 【待填】红字 + 冻结表头)+ 统计汇总(异常清单/【待填】清点/隐私与合规提示)。
不知道选什么?直接说需求,我给你列选项,回个序号就出表。
对话示例
> 用户:帮我们接种门诊做个疫苗出入库台账
> 助手:好的,先选场景(回序号或场景名):①出入库登记 ②效期预警 ③报废登记 ④月度汇总
> 用户:2
> 助手:好的,效期预警。预警窗默认 30 天(可用 --days 调)。请按批给数据,一次一项,缺的跳过不编:
> 1. 疫苗名称+批号?(示例:重组乙型肝炎疫苗(酵母) 批号 B202604A)
> 用户:重组乙型肝炎疫苗(酵母) 批号B202604A 效期至2027-06-30 库存95 华信生物
> 助手:收到。处置情况未填、复核人工号未提供→【待填】。生成台账:1 行,预警状态=正常,1 个【待填】。
> 用户:再来一批过期的:百白破 批号P202601A 效期至2026-10-05 库存12 泰平生物
> 助手:注意:该批已过期且未登记处置情况→整行标红提醒人工跟进(工具只做勾稽,处置结论以疾控/药事判定为准)。
快速上手
# 场景菜单
python scripts/make_vaccine_inout_log.py --presets
# 脱敏示例(--date 固定台账日期,可复现)
python scripts/make_vaccine_inout_log.py --demo --out 台账.xlsx --date 2026-11-01
# 效期预警:--days 参数化预警窗(默认 30 天)
python scripts/make_vaccine_inout_log.py --preset 效期预警 --days 60 --out 预警.xlsx
# 从填写好的骨架生成
python scripts/make_vaccine_inout_log.py --input 骨架.json --out 台账.xlsx
# 空模板(8 行【待填】占位)
python scripts/make_vaccine_inout_log.py --preset 报废登记 --out 空模板.xlsx
输出预览
以下为 --demo --date 2026-11-01(场景① 出入库登记)输出的文本摘录(截取自实际生成的 xlsx 关键单元格):
| 序号 | 日期 | 疫苗名称 | 批号 | 效期至(标签抄录) | 厂家 | 出入库类型 | 数量 | 经手人(工号) | 备注 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 2026-10-28 | 重组乙型肝炎疫苗(酵母) | B202604A | 2027-06-30 | 华信生物 | 入库 | 100 | Y1001 | |
| 2 | 2026-10-28 | 冻干人用狂犬病疫苗(Vero细胞) | R202603C | 2026-10-20 | 华信生物 | 入库 | 20 | Y1001 | ⚠️ 效期已过(效期至2026-10-20,台账日期2026-11-01)仍登记入库——请人工核实并按流程处置(本工具不判定疫苗可用性)…(整行标红) |
| 5 | 【待填】 | 百白破疫苗 | P202606F | 【待填】 | 【待填】 | 【待填】 | 【待填】 | 【待填】 | ⚠️ 出入库类型缺失(入库/出库),请补齐后复核…(整行标红) |
| 6 | 2026-10-30 | 麻疹腮腺炎风疹联合减毒活疫苗 | M202602B | 2027-03-31 | 康宁生物 | 出库 | -3 | Y1002 | ⚠️ 数量为负数(-3),请核对登记(整行标红) |
统计汇总(截取前几行):登记场景=出入库登记|台账日期=2026-11-01|效期预警窗=--days 30 天(场景②生效)|登记行数=6|异常行数(红)=3|【待填】单元格=7。
场景② 效期预警输出摘录(预警状态列自动计算):正常|已过期(未填处置情况→整行标红)|剩14天到期(备注 ℹ️ 软提示,不标红)。
退出码表(脚本 scripts/make_vaccine_inout_log.py,v1.0.0)
| 退出码 | 含义 | 处理 |
|---|---|---|
| 0 | 台账生成成功 | — |
| 10 | 输入文件不存在(沿用现有体系约定) | 核对 --input 路径 |
| 11 | 输入缺失:缺 items / items 非数组 / --save 未指定 --preset |
按 {"items": [ … ]} 结构补齐 |
| 12 | 格式错误:JSON 无法解析 / items 项非对象 / --date 或 --days 无法识别 |
核对 JSON 语法、日期与天数格式 |
| 13 | 隐私拦截:输入检测到姓名明文(患者张三/张某某式)、身份证号、手机号 | 去除敏感个人信息后重试;人员标识仅可用批号/工号(错误提示不回显敏感值) |
| 14 | 校验失败:预设名不存在 | 见 --presets 菜单(回序号/场景名均可) |
| 15 | 运行超时(60 秒看门狗) | 重跑同一条命令 |
| 20 | 解析失败 / 输出失败等未预期异常(兜底) | 把输入 JSON 与提示发给助手排查 |
| 21 | 缺依赖 | pip install openpyxl 后重跑 |
单行日期/数量格式错误不中断整份台账:该格转【待填】红字并在备注注明原因,汇总页计入清点;文件级错误才整体退出。
字段与判定口径
- ① 出入库登记(11 列):序号 / 日期 / 疫苗名称 / 批号 / 效期至(标签抄录) / 厂家 / 出入库类型 / 数量 / 去向或来源 / 经手人(工号) / 备注
- ② 效期预警(10 列):序号 / 疫苗名称 / 批号 / 效期至(标签抄录) / 库存数量 / 厂家 / 预警状态 / 处置情况 / 复核人(工号) / 备注
- ③ 报废登记(10 列):序号 / 日期 / 疫苗名称 / 批号 / 效期至(标签抄录) / 报废数量 / 报废原因 / 审批人(工号) / 经办人(工号) / 备注
- ④ 月度汇总(12 列):序号 / 月份 / 疫苗名称 / 批号 / 厂家 / 月初结存 / 本月入库合计 / 本月出库合计 / 本月报废合计 / 月末结存 / 核对人(工号) / 备注
异常行整行标红(写入备注 ⚠️ 提示,人工核对):
- 出入库登记:效期已过仍登记入库(效期至 < 台账日期 且类型=入库)|出入库类型缺失|疫苗名称缺失|数量为负
- 效期预警:已过期且未登记处置情况(过期未处置)|疫苗名称缺失|库存数量为负;预警窗内到期(--days,默认 30 天)只写备注 ℹ️ 软提示不标红
- 报废登记:报废原因缺失|报废审批人缺失(报废须审批留痕)|疫苗名称缺失|报废数量为负
- 月度汇总:月末结存 ≠ 月初结存+入库−出库−报废|疫苗名称缺失|数量为负
- 各场景通用:批号缺失走备注 ℹ️ 软提示(效期按批号管理,请核对标签补齐)
软提示(备注 ℹ️ 提示,不标红):日期/月份/效期格式无法识别、数值无法识别(该格转【待填】);月末结存未填但月初/入库/出库/报废齐全时给出计算提示(如「可按 40+0−18−1=21 计算后补填(工具不代填)」);效期预警中未过期批次的处置情况留空不计【待填】。
- 预警状态列为纯日历推导(效期至 vs 台账日期与
--days):已过期/剩X天到期/正常,输入不全则为【待填】,绝不代填 - 【待填】单元格红字标红,汇总页清点数量并提示「未补齐视为登记未完成」
- 效期至/日期支持
2026-03-15/2026.3.15/2026/3/15/2026年3月15日/20260315,月份可直接填2026-10/2026年10月 --days默认 30,须为非负整数;工具默认场景为①出入库登记,--input的 JSON 里也可写"preset": "场景名"自动选路;骨架顶层的date/dept/days回读时同样生效(命令行--date/--dept/--days优先级更高,同时给出时覆盖骨架值)
铁律(医疗合规四关)
- 不做接种建议、不判定疫苗可用性:只做出入库登记台账;某批疫苗能不能用、过期怎么处置,以疾控/药事和本院制度判定为准,台账只做登记勾稽与留痕;批号/效期至/数量/厂家全部按标签与单据抄录
- 敏感个人信息硬拦截:脚本检测到姓名明文(含「患者张三」「张某某」式结构)、身份证号、手机号 → 退出码 13 直接拒绝处理(错误提示不回显敏感值);人员标识仅可用批号/工号,单位名称可正常登记
- 数据不出机:台账本地生成,无网络请求;疫苗出入库信息按院内数据管理规定流转
- 不编造不代填:数值(数量、效期等)与关键字段缺失一律【待填】标红,汇总页清点;月末结存等只给计算提示,绝不代填数值
能力边界量化表
| 能做 | 不做(明确边界) |
|---|---|
| 四场景登记台账生成(xlsx 双表,可打印归档) | 不替代疫苗出入库系统/疾控平台:无审批流、无库存联动、无免疫规划报送接口 |
| 异常行整行标红(过期仍入库、过期未处置、报废缺原因缺审批、勾稽不平) | 不做接种建议:受种者接种程序、禁忌、替代方案不属于本工具 |
| 效期预警(--days 参数化,纯日历推导,标注口径) | 不判定疫苗可用性:过期/临期批次的处置结论由疾控/药事判定 |
| 月度结存勾稽(纯算术推导,标注来源) | 不校验库存真伪(盘点是否属实须人工/双人复核) |
| 敏感个人信息隐私拦截(退出码 13) | 不识别或处理标签照片/扫描件;输入仅支持 JSON 文本 |
| 本地生成、数据不出机 | 不引用法规具体条款号;管理口径以本院制度与疾控要求为准 |
岗位场景例子
- 接种门诊库管:「疫苗每天出入库,批号效期要跟着走」→ 选 ① → 按批逐笔出台账,效期已过仍入库自动标红
- 预防保健科:「每月要过一遍在库效期,过期的必须处置留痕」→ 选 ② →
--days 30预警窗软提示,过期未处置标红 - 库管/质控:「报废必须有原因有审批」→ 选 ③ → 缺原因或缺审批人的行直接红
- 月底交督查:「出入库要和结存对得上」→ 选 ④ → 月末结存勾稽 + 【待填】清点
边界提醒
- 与相邻技能划界:
drug-expiry-log管药品效期、blood-inventory-log管血液成分出入库——本技能只管疫苗的出入库与效期;温度记录请用vaccine-coldchain-log(冷链),团体体检排期请用group-checkup-log - 本工具不替代疫苗出入库系统与疾控平台;纸质/电子台账按院内要求归档
- 备注与去向列只填业务信息(批号/工号/单位名称),不得填写姓名明文——脚本对姓名明文/身份证/手机号是硬拦截(退出码 13)
文件索引
| 文件 | 用途 |
|---|---|
| scripts/make_vaccine_inout_log.py | 核心:CLI 成稿 + 四场景判定 + 异常标红 + 隐私拦截 + 错误码兜底 |
| references/vaccine-inout-guide.md | 登记实践参考:出入库口径/效期预警/报废留痕/月度勾稽台账口径 |
| assets/faq.md | 常见问题 12 条(隐私拦截/--days 调参/标红含义/待填卡点/系统边界等) |
| assets/anti-patterns.md | 反模式集中清单(错误操作+后果+替代) |
| assets/input-example.json | 输入示例(脱敏,可直接 --input 试跑) |
| beta-test/run_tests.py | 内测回归脚本(隐私拦截/退出码/标红规则/待填不编造/骨架回读等) |
| avatars/avatar-512.png | 技能头像 |
FAQ 快捷导航:不做接种建议→Q1|没数据能生成吗→Q2|为什么被拒绝(13)→Q3|效期格式→Q4|--days 怎么调→Q5|标红是不是判定我出错→Q6|过期批怎么处置→Q7|数据外传→Q8|【待填】算完成吗→Q9|场景怎么选→Q10|为何不代算结存→Q11|和冷链台账关系→Q12。