药品耗材效期管理
规矩(每次都要遵守)
- 原表只读。 脚本只读用户的库存表、盘点表、流水表,结果一律另存新文件(原文件名后面加「_效期预警」「_效期预警简报」「_近效期标签」「_盘点差异」,重名自动加 _1、_2,不覆盖任何已有文件)。不要用别的办法去改用户的原表。
- 只管库存和效期,不管能不能用。 不判断药品、耗材能否使用,不给任何用药、治疗、处方建议,不说「过期几天还能用」这类话。已过期的一律说「请按本单位制度隔离存放、登记、报损处理」;近效期的说「请按本单位近效期管理制度处理」。用户追问能不能用,请他咨询本单位药师或质量管理人员。
- 不碰患者信息。 表里像患者、病历号、住院号、床号、身份证、电话这类列,脚本自动跳过不读、不写进结果。不要让用户把处方、病历发过来。
- 先看表,再出结果。 第一次拿到表先跑
check,用大白话告诉用户:表头在第几行、哪一列认成了什么、有几行效期认不出、大致过期和近效期多少批。列认错了再用「指定列」纠正。 - 数字以脚本输出为准。 剩余天数、批次数、差异数量和金额都照脚本念,不要心算、不要自己改。推算出来的有效期提醒用户和包装上印的核对,以包装为准。
- 不联网、不自动装组件。 缺组件时脚本会提示安装命令,由用户自己决定装不装。
- 跟用户说话不提命令、参数和程序里的名字,只说「按 60 天预警」「把盘点表和账面表对一下」这类话;但用户问到在运行什么,如实告诉他。
用法
脚本:python {baseDir}/scripts/expiry_stock.py <子命令> ...,只用 Python 和 openpyxl(Word 简报、标签需要 python-docx,可选)。文件位置有空格要加引号。
| 子命令 | 做什么 | 会不会动原文件 |
|---|---|---|
check 库存表 |
看表能不能读、各列认成了什么、大致过期/近效期情况、哪些行要核对 | 只读 |
report 库存表 |
出效期预警 Excel(可加 Word 简报、近效期标签、周转呆滞) | 只读,另存新文件 |
count 账面表 盘点表 |
按品名+批号对比,出盘点差异 Excel | 只读,另存新文件 |
常用选项:
| 选项 | 意思 |
|---|---|
--levels 30,60,90,180 |
预警档位(天),默认 30/60/90/180 |
--cat-levels 注射剂=60,120,180 |
某个品类单独设档位,可写多次;品类名包含这个词就用这一套 |
--today 2026-10-05 |
按哪天算剩余天数,默认今天 |
--docx |
另外出 Word 预警简报(已过期、近效期、按库位、先进先出、呆滞) |
--labels |
另外出近效期标签(A4 每行 3 张,剪下贴货架);--label-days 90 只打 90 天以内的,默认等于最大档位 |
--flow 流水表 |
带上出入库流水,算周转天数、呆滞品、到期前可能用不完的批次;--idle-days 60 改呆滞天数(默认 90) |
--col 含义=列名 |
列认错了就指定,可写多次,如 --col 有效期至=失效日期、--col 生产日期=到货日、--col 数量=实盘数 |
--sheet 名称 |
指定工作表(盘点表用 --count-sheet,流水表用 --flow-sheet) |
--out 位置 |
保存位置(不能和原表同名) |
--col 能用的含义:品名、规格、批号、生产日期、有效期至、有效期(月数/年数/天数)、数量、单位、库位、品类、进价、厂家。
大白话 → 怎么做
| 用户说 | 怎么做 |
|---|---|
| 「帮我看看这个库存表」「能读吗」 | check 库存表,念出认出的列和大致情况 |
| 「哪些药快过期了」「做个近效期预警」 | report 库存表,先说已过期几批、30 天内几批,再念最快到期的几批 |
| 「我们按 1 个月、3 个月、6 个月预警」 | 加 --levels 30,90,180 |
| 「注射剂提前 6 个月,耗材提前 3 个月」 | 加 --cat-levels 注射=180 --cat-levels 耗材=90(品类列里要有这些字) |
| 「把过期的列出来,我要报损」 | report 库存表,念「已过期清单」;提醒按本单位制度隔离、登记、报损 |
| 「出个简报给科主任/店长」 | 加 --docx |
| 「打印标签贴到货架上」 | 加 --labels;只要 90 天以内的加 --label-days 90 |
| 「同一个药好几个批号,先发哪个」 | report,念「先进先出」页每个品种排第 1 的批号 |
| 「盘点完了,对一下账」 | count 账面表 盘点表,念盘盈、盘亏几条和金额;差异原因请用户按盘点制度核查 |
| 「哪些东西压库了」「周转多少天」 | report 库存表 --flow 出入库流水表,念呆滞品和周转天数 |
| 「有效期那列只写了 24 个月」 | 表里有生产日期就会自动推算;没有生产日期就请用户补一列生产日期 |
| 「超市的保质期是天数」 | 表头写「保质期(天)」会按天算;到货日当生产日期用就加 --col 生产日期=到货日 |
| 「过期三天了还能用吗」「这个药能给病人用吗」 | 不回答能不能用,说明本工具只管库存效期,请按本单位制度处理、咨询药师 |
结果里有什么
- 预警总览:基准日期、档位、按状态(已过期 / 各档近效期 / 正常 / 效期不明)的批次数、品种数、金额;按库位、按品类的汇总。
- 近效期预警:已过期 + 近效期,按剩余天数从少到多,整行按档位着色(红 = 已过期,橙、黄、浅黄、浅蓝 = 剩余天数从少到多,灰 = 效期不明)。
- 已过期清单:带「按制度处理/报损」提示,可以直接打印。
- 先进先出:同品种多批号的出库顺序,已过期批次不参与。
- 全部库存:每一行都带状态和剩余天数。
- 周转与呆滞(带流水时):期间入库、出库、日均出库、周转天数、最后出库日期、未动天数、是否呆滞;近效期批次预计到期时剩余多少。
- 读取说明:每列认成了什么、跳过了哪些合计行和个人信息列、哪些有效期是推算的、哪些行需要核对。
- Word 预警简报(可选)、近效期标签(可选;没装 Word 组件时出 Excel 版标签)。
- 盘点差异:盘点汇总、差异明细(盘盈蓝、盘亏红、未填黄)、全部对比、读取说明。
计算口径(月份效期按月底、推算规则、周转和呆滞怎么算)见 references/rules.md。
需要的组件
- 必须:Python 3.8+、openpyxl(读写 Excel)。缺了脚本会提示
pip install openpyxl。 - 可选:python-docx(Word 简报和 Word 版标签)。缺了只提示,Excel 结果不受影响,标签改出 Excel 版。
不做什么
- 不判断药品、耗材能否使用,不给用药建议,不做处方审核,不查药品说明书。
- 不读、不保存任何患者信息;不联网、不上传。
- 不修改、不覆盖、不删除用户的原表;不自动安装组件;不写计划任务、不在后台常驻。
- 不读老版 .xls 和 WPS 的 .et 格式(请另存为 .xlsx);不破解有密码的文件。
- 不接医院 HIS、进销存系统,只处理用户导出的表格。