基于 Python 的基层卫生院电子处方管理系统
2026/9/19 2:34:20 网站建设 项目流程

温馨提示:本人主页置顶文章(点我)开头有 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_key=True) patient_id = db.Column(db.Integer, nullable=False) doctor_id = db.Column(db.Integer, nullable=False) status = db.Column(db.String(20), default='pending') total_amount = db.Column(db.Numeric(10, 2), default=0) created_at = db.Column(db.DateTime, default=datetime.now) class PrescriptionItem(db.Model): tablename = 'prescription_item' id = db.Column(db.Integer, primary_key=True) prescription_id = db.Column(db.Integer, nullable=False) drug_id = db.Column(db.Integer, nullable=False) 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_id=patient_id, doctor_id=doctor_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_id=prescription.id, drug_id=drug.id, dosage=item.get('dosage', ''), frequency=item.get('frequency', ''), days=item.get('days', 1), quantity=item['quantity'], amount=amount ) 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_id=prescription_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 的基层卫生院电子处方管理系统,覆盖患者管理、药品管理、处方开具、审核发药和统计查询等核心业务流程。系统采用轻量级技术栈,部署简单、维护成本低,适合基层医疗机构使用。 后续可从以下方向继续完善:一是增加药品配伍禁忌自动提醒功能,提升用药安全;二是对接医保接口,实现处方费用实时结算;三是引入电子签名,满足处方合规性要求;四是开发移动端应用,方便医生查房时开具处方。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询