1. 项目背景与需求分析
社区医院作为基层医疗服务的重要节点,药品库存管理一直是困扰医护人员的痛点问题。传统的人工记录方式存在数据滞后、易出错、补货不及时等弊端。我们社区卫生服务中心去年就曾发生过三次常用降压药断货的情况,导致患者不得不往返多次取药。
这套系统正是为了解决以下核心痛点:
- 药品库存数据更新不及时,经常出现系统显示有货但实际已用完的情况
- 临近效期药品缺乏有效提醒机制,去年因此报废的药品价值超过3万元
- 补货申请流程繁琐,需要层层签字审批,平均需要2-3天才能完成采购
- 患者用药提醒完全依赖人工,医护人员工作量大且容易遗漏
2. 系统整体架构设计
2.1 技术选型方案
选择微信小程序作为前端主要基于三点考虑:
- 使用门槛低:医护人员和患者都不需要安装额外APP
- 开发成本低:相比原生APP可节省约40%的开发工作量
- 生态完善:支持扫码、消息订阅等核心功能
后端采用Node.js+MySQL组合,主要考量:
- 社区医院服务器配置普遍较低(通常4核8G),Node.js的轻量级特性更合适
- 药品数据关系明确但不算复杂,不需要用到重型关系型数据库
- 便于与现有HIS系统通过RESTful API对接
2.2 核心功能模块
系统包含四大核心模块:
- 库存管理模块:支持扫码入库、库存预警、效期管理
- 智能补货模块:基于历史用药数据的自动补货算法
- 消息提醒模块:集成微信订阅消息的多种提醒场景
- 数据分析模块:药品消耗趋势、效期损耗等可视化报表
3. 关键实现细节
3.1 药品唯一标识方案
我们创新性地采用"三级编码"体系:
- 一级编码:药品通用码(与医保目录对应)
- 二级编码:批次号(同一药品不同进货批次)
- 三级编码:最小包装单位码(盒/瓶独立编码)
javascript复制// 编码生成算法示例
function generateDrugCode(commonCode, batchNo, packageNo){
return `${commonCode}-${batchNo.padStart(4,'0')}-${packageNo.padStart(3,'0')}`;
}
3.2 库存预警算法
采用动态安全库存计算模型:
安全库存 = (日均用量 × 采购周期) × 波动系数
其中波动系数根据历史数据动态调整:
- 常规药品:1.2-1.5
- 急救药品:1.8-2.0
- 季节性药品:按季节特征单独设置
3.3 消息提醒机制
设计了三种提醒场景:
- 库存预警:库存量低于安全库存时
- 近效期提醒:有效期剩余30天/15天/7天分级提醒
- 患者用药提醒:根据处方自动推送服药提醒
mermaid复制graph TD
A[库存变更] --> B{是否低于安全库存}
B -->|是| C[触发库存预警]
B -->|否| D[检查效期]
D --> E{是否临近效期}
E -->|是| F[触发效期提醒]
4. 实际应用效果
在试点运行三个月后,取得了显著成效:
- 库存准确率从78%提升至99.6%
- 药品过期损耗降低82%
- 患者用药依从性提高45%
- 医护人员库存管理时间减少70%
5. 开发经验分享
5.1 踩过的坑
-
微信订阅消息限制:
- 每个用户每天最多接收5条订阅消息
- 解决方案:非紧急消息合并发送
-
扫码枪兼容问题:
- 部分安卓机型无法识别医用扫码枪
- 最终采用蓝牙扫码枪+自定义SDK方案
5.2 性能优化技巧
- 库存变更采用增量更新:
sql复制UPDATE inventory
SET stock = stock - ?
WHERE drug_code = ?
- 建立药品基础信息缓存:
javascript复制// 使用Redis缓存常用药品信息
app.use(async (ctx, next) => {
const drugInfo = await redis.get(`drug:${code}`);
if(drugInfo) return drugInfo;
// ...数据库查询逻辑
});
6. 系统扩展方向
- 与智能药柜硬件对接
- 增加疫苗库存管理模块
- 开发供应商端小程序实现供应链协同
重要提示:系统上线前务必进行完整的药品编码映射检查,我们曾因编码映射错误导致一周的库存数据混乱。