1. 项目背景与核心需求
医疗耗材物流管理一直是医院运营中的痛点。传统手工记录方式存在效率低下、易出错、追溯困难等问题。我们开发的这套系统采用Python Flask + Vue.js技术栈,实现了从耗材入库到科室分发的全流程数字化管理。系统上线后,某三甲医院的耗材盘点时间从原来的3天缩短至2小时,库存准确率提升至99.8%。
医疗场景的特殊性决定了系统必须具备:
- 严格的效期管理(近效期自动预警)
- 批号追溯能力(支持召回和质控)
- 实时库存可视化(避免手术缺货)
- 多级审批流程(高值耗材管控)
2. 技术架构设计
2.1 后端技术栈
采用Flask作为核心框架,相比Django更轻量且易于扩展。关键配置:
python复制# 工厂模式创建应用
def create_app():
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://user:pass@localhost/medical_wms'
app.config['JWT_SECRET_KEY'] = os.getenv('JWT_SECRET')
# 注册蓝图
from .inventory import inventory_bp
app.register_blueprint(inventory_bp, url_prefix='/api')
return app
数据库选型考虑:
- MySQL:满足ACID要求,适合医疗数据
- Redis:缓存热点数据(如库存余量)
- 使用SQLAlchemy ORM实现跨数据库兼容
2.2 前端技术方案
Vue 3组合式API带来更好的逻辑复用:
javascript复制// 库存看板组件
import { ref, onMounted } from 'vue'
import { useInventoryStore } from '@/stores/inventory'
export default {
setup() {
const inventoryStore = useInventoryStore()
const criticalItems = ref([])
onMounted(async () => {
await inventoryStore.fetchStock()
criticalItems.value = inventoryStore.items.filter(
item => item.quantity < item.safety_stock
)
})
return { criticalItems }
}
}
3. 核心功能实现
3.1 智能入库流程
- PDA扫码枪读取耗材UDI码
- 自动匹配产品主数据
- 效期校验(拒收过期产品)
- 分配存储货位(按使用频率优化)
关键数据库模型:
python复制class MedicalSupply(db.Model):
__tablename__ = 'medical_supplies'
id = db.Column(db.Integer, primary_key=True)
udi_code = db.Column(db.String(50), unique=True) # 医疗器械唯一标识
name = db.Column(db.String(100), nullable=False)
specification = db.Column(db.String(50))
batch_number = db.Column(db.String(30)) # 批号
expiry_date = db.Column(db.Date)
storage_location = db.Column(db.String(20))
current_quantity = db.Column(db.Integer)
safety_stock = db.Column(db.Integer) # 安全库存
3.2 科室申领电子化
工作流引擎实现:
mermaid复制graph TD
A[科室提交申请] --> B{是否高值耗材?}
B -->|是| C[护士长审批]
B -->|否| D[自动审核]
C --> E[库房备货]
D --> E
E --> F[物流配送]
F --> G[科室签收]
4. 智能预警系统
4.1 多维度监控
- 库存预警:当库存量低于安全库存时
python复制def check_inventory():
supplies = MedicalSupply.query.filter(
MedicalSupply.current_quantity < MedicalSupply.safety_stock
).all()
for item in supplies:
send_alert(f"库存预警:{item.name}剩余{item.current_quantity}")
- 效期预警:提前3个月提醒
sql复制SELECT * FROM medical_supplies
WHERE expiry_date BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 3 MONTH)
4.2 消息推送集成
支持多种通知方式:
- 站内消息
- 企业微信
- 短信提醒
- 邮件通知
5. 数据分析模块
5.1 耗材使用分析
使用Pandas进行数据聚合:
python复制def consumption_analysis(dept_id):
df = pd.read_sql(f"""
SELECT item_id, SUM(quantity) as total
FROM issue_records
WHERE dept_id={dept_id}
GROUP BY item_id
""", con=db.engine)
return df.sort_values('total', ascending=False).head(10)
5.2 预测模型
LSTM时间序列预测:
python复制from keras.models import Sequential
from keras.layers import LSTM, Dense
def train_predict_model(data):
model = Sequential()
model.add(LSTM(50, input_shape=(data.shape[1], 1)))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
model.fit(data, epochs=100, verbose=0)
return model
6. 系统部署方案
6.1 服务器配置
推荐配置:
- 4核CPU/8GB内存(200人规模医院)
- 分离部署数据库服务器
- 使用Nginx负载均衡
6.2 高可用设计
- 主从数据库复制
- 定时备份(每日全量+binlog)
- 容器化部署(Docker Swarm/K8s)
7. 安全防护措施
7.1 数据加密
- 传输层:TLS 1.3
- 存储加密:AES-256
- 敏感字段:单独加密(如患者信息)
7.2 权限控制
RBAC模型设计:
python复制class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), unique=True)
permissions = db.Column(db.JSON) # 权限JSON配置
class User(db.Model):
# ...
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
8. 实际应用案例
某心血管专科医院上线后效果:
- 耗材周转率提升40%
- 过期损耗减少75%
- 配送差错率降至0.3%
- 护士每日节省2小时手工记录时间
9. 扩展开发建议
- 对接HRP系统(财务一体化)
- 增加RFID货架自动盘点
- 集成智能物流机器人
- 开发移动端微信小程序
关键提示:医疗系统开发必须遵循《医疗器械软件注册技术审查指导原则》,所有数据修改需要留痕审计。
