拓冰建站拓冰建站
首页 / 资讯中心 / 正文

基于 Python 的基层卫生院电子处方管理系统

温馨提示本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片1. 项目背景与需求分析基层卫生院在日常诊疗过程中处方管理长期依赖纸质单据存在书写不规范、保存困难、统计繁琐、易丢失等问题。随着基层医疗信息化建设的推进开发一套轻量、易用、低成本的电子处方管理系统能够有效提升处方开具、审核、存档和统计的效率。本系统面向基层卫生院的实际业务场景以 Python 作为主要开发语言结合常见 Web 框架和数据库实现处方录入、药品管理、处方审核、查询统计等核心功能。2. 系统功能设计根据基层卫生院的业务流程系统主要划分为以下几个功能模块用户管理支持医生、药师、管理员等角色登录不同角色拥有不同操作权限。患者管理维护患者基本信息包括姓名、性别、年龄、联系方式、既往病史等。药品管理维护药品目录包括药品名称、规格、剂量、库存数量、价格等信息。处方管理医生在线开具处方选择患者和药品填写用法用量系统自动计算费用。处方审核药师对医生开具的处方进行审核确认用药合理性后完成发药。统计查询按时间、科室、医生、药品等维度统计处方量和用药情况辅助管理决策。3. 技术选型考虑到基层卫生院的技术维护能力和部署环境系统采用以下技术栈层次技术选型说明后端框架Flask 或 DjangoFlask 轻量灵活适合快速开发Django 自带 Admin 和 ORM适合功能较全的系统数据库SQLite / MySQL单机部署可用 SQLite多用户并发建议使用 MySQL前端HTML CSS JavaScript配合 Bootstrap 或 Vue.js 提升交互体验身份认证Flask-Login / Django Auth实现登录、会话管理和权限控制报表统计ECharts以图表形式展示处方统计结果4. 数据库设计系统核心数据表包括用户表、患者表、药品表、处方主表和处方明细表。以下给出主要表结构设计-- 用户表 CREATE TABLE user ( id INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password_hash VARCHAR(128) NOT NULL, real_name VARCHAR(50), role VARCHAR(20) NOT NULL, -- doctor / pharmacist / admin created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 患者表 CREATE TABLE patient ( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(50) NOT NULL, gender VARCHAR(10), age INTEGER, phone VARCHAR(20), address VARCHAR(200), medical_history TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 药品表 CREATE TABLE drug ( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(100) NOT NULL, specification VARCHAR(100), unit VARCHAR(20), price DECIMAL(10,2), stock INTEGER DEFAULT 0, manufacturer VARCHAR(100) ); -- 处方主表 CREATE TABLE prescription ( id INTEGER PRIMARY KEY AUTOINCREMENT, patient_id INTEGER NOT NULL, doctor_id INTEGER NOT NULL, status VARCHAR(20) DEFAULT pending, -- pending / approved / rejected / dispensed total_amount DECIMAL(10,2), created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (patient_id) REFERENCES patient(id), FOREIGN KEY (doctor_id) REFERENCES user(id) ); -- 处方明细表 CREATE TABLE prescription_item ( id INTEGER PRIMARY KEY AUTOINCREMENT, prescription_id INTEGER NOT NULL, drug_id INTEGER NOT NULL, dosage VARCHAR(100), frequency VARCHAR(100), days INTEGER, quantity INTEGER, amount DECIMAL(10,2), FOREIGN KEY (prescription_id) REFERENCES prescription(id), FOREIGN KEY (drug_id) REFERENCES drug(id) );5. 核心功能实现下面以 Flask 为例给出处方开具接口的核心实现代码。from flask import Flask, request, jsonify from flask_sqlalchemy import SQLAlchemy from datetime import datetime app Flask(name) app.config[SQLALCHEMY_DATABASE_URI] sqlite:///hospital.db db SQLAlchemy(app) class Prescription(db.Model): tablename prescription id db.Column(db.Integer, primary_keyTrue) patient_id db.Column(db.Integer, nullableFalse) doctor_id db.Column(db.Integer, nullableFalse) status db.Column(db.String(20), defaultpending) total_amount db.Column(db.Numeric(10, 2), default0) created_at db.Column(db.DateTime, defaultdatetime.now) class PrescriptionItem(db.Model): tablename prescription_item id db.Column(db.Integer, primary_keyTrue) prescription_id db.Column(db.Integer, nullableFalse) drug_id db.Column(db.Integer, nullableFalse) dosage db.Column(db.String(100)) frequency db.Column(db.String(100)) days db.Column(db.Integer) quantity db.Column(db.Integer) amount db.Column(db.Numeric(10, 2)) app.route(/api/prescription, methods[POST]) def create_prescription(): 开具处方接口 data request.get_json() patient_id data.get(patient_id) doctor_id data.get(doctor_id) items data.get(items, []) if not patient_id or not doctor_id or not items: return jsonify({code: 400, msg: 参数不完整}), 400 total 0 prescription Prescription( patient_idpatient_id, doctor_iddoctor_id ) db.session.add(prescription) db.session.flush() # 获取处方主表 id for item in items: drug Drug.query.get(item[drug_id]) if not drug: return jsonify({code: 404, msg: 药品不存在}), 404 if drug.stock lt; item[quantity]: return jsonify({code: 400, msg: f药品 {drug.name} 库存不足}), 400 amount drug.price * item[quantity] total amount detail PrescriptionItem( prescription_idprescription.id, drug_iddrug.id, dosageitem.get(dosage, ), frequencyitem.get(frequency, ), daysitem.get(days, 1), quantityitem[quantity], amountamount ) db.session.add(detail) 扣减库存 drug.stock - item[quantity] prescription.total_amount total db.session.commit() return jsonify({code: 200, msg: 处方开具成功, prescription_id: prescription.id})/code/pre 6. 处方审核流程 药师登录系统后可查看待审核处方列表核对药品用法用量、配伍禁忌和患者信息审核通过后完成发药。审核接口实现如下 app.route(/api/prescription/int:prescription_id/review, methods[POST]) def review_prescription(prescription_id): 处方审核接口 data request.get_json() action data.get(action) # approve / reject pharmacist_id data.get(pharmacist_id) comment data.get(comment, ) prescription Prescription.query.get(prescription_id) if not prescription: return jsonify({code: 404, msg: 处方不存在}), 404 if action approve: prescription.status approved elif action reject: prescription.status rejected 退回药品库存 items PrescriptionItem.query.filter_by(prescription_idprescription_id).all() for item in items: drug Drug.query.get(item.drug_id) if drug: drug.stock item.quantity else: return jsonify({code: 400, msg: 无效操作}), 400 db.session.commit() return jsonify({code: 200, msg: 审核完成})/code/pre 7. 系统部署与运行 系统开发完成后可通过以下步骤在卫生院内网服务器上部署运行 安装 Python 3.8 及以上版本创建虚拟环境并安装依赖包。 初始化数据库执行建表脚本或使用 ORM 自动建表。 配置数据库连接、密钥等环境变量。 使用 Gunicorn 或 Waitress 作为生产服务器启动应用。 通过 Nginx 反向代理对外提供服务配置 HTTPS 证书保障数据安全。 安装依赖 pip install flask flask-sqlalchemy flask-login 初始化数据库 python init_db.py 启动服务生产环境 gunicorn -w 4 -b 0.0.0.0:8000 app:app 8. 总结与展望 本文设计并实现了一个基于 Python 的基层卫生院电子处方管理系统覆盖患者管理、药品管理、处方开具、审核发药和统计查询等核心业务流程。系统采用轻量级技术栈部署简单、维护成本低适合基层医疗机构使用。 后续可从以下方向继续完善一是增加药品配伍禁忌自动提醒功能提升用药安全二是对接医保接口实现处方费用实时结算三是引入电子签名满足处方合规性要求四是开发移动端应用方便医生查房时开具处方。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门