- 医疗健康
- 后端
【免费下载链接】openemr
The most popular open source electronic health records and medical practice management solution.
本指南以 OpenEMR 官方模块oe-module-weno的 安装与配置说明 为骨架,完整讲解 Weno eRx(电子处方)模块的安装、三步管理员配置(Primary Admin / Weno User ID / Weno Location ID)、用户凭据设置以及启用后的后台服务行为,并结合本仓库源码(模块设置页、服务类、数据库建表脚本)补充底层实现细节。读完本文,你将掌握在 OpenEMR 中完成 Weno eRx 全流程开通、让处方医师成功开始电子开方的完整实操步骤与排错思路。
一、模块概览与所需前置凭据
oe-module-weno是 OpenEMR 官方发布的自定义模块(位于 interface/modules/custom_modules/oe-module-weno),用于将 OpenEMR 与 Weno Exchange 的免费电子处方(eRx)服务集成。从 version.php 可看到当前模块版本为3.1.0($v_major = '3'; $v_minor = '1'; $v_patch = '0'),模块由Weno EZ Integration命名(见 info.txt)。
在开始配置前,你需要先在 Weno 侧完成账号注册(注册与开发者页面入口在 weno_setup.php 的帮助面板中有链接)。注册 Weno 账号并完成 EZ Integration 签约后,你会获得以下四类必须值:
| 序号 | 必须值 | 格式说明 | 用途 |
|---|---|---|---|
| 1 | 账号持有者的 Admin 凭据 | 邮箱 + 密码 | 模块的 Primary Admin 分区,用于与 Weno 服务端通信与验证 |
| 2 | Weno User ID | 形如Uxxxx | 建立 Weno 与 OpenEMR 用户之间的对应关系,用于处方追踪 |
| 3 | 每个设施(facility)的 Location ID | 形如Lxxxxx | 绑定处方开具地点,用于处方追踪 |
| 4 | 分配给每位处方医师的用户凭据 | 用户名(邮箱)+ 密码 | 医师个人配置,缺失或错误时将无法开方 |
重要实践:建议所有用户/处方医师都在其「Users 设置」中设置默认设施(default facility),否则系统将回退使用所有执业设施中的第一个/默认设施作为其位置。
二、模块安装:从 Module Manager 开始
2.1 进入模块管理器
在 OpenEMR 顶栏选择Modules → Manage Modules,进入模块管理器(Module Manager,MM)页面。安装完成前,该模块会以「Install(安装)」按钮呈现。
2.2 安装、启用与卸载
- 点击Install完成安装后,按钮会变为Enable(启用)。
- 点击配置齿轮/扳手图标(Config cog/gear),或直接点击Enable,即可进入模块配置流程。
- 若模块是首次安装,会弹出警告,提示 Weno Admin 设置尚未完成且未通过验证——此时模块配置图标显示为红色。点击该图标(无论红色还是正常状态),会打开「Weno eRx Service Admin Setup」配置面板。
- 模块在 Primary Admin 分区通过验证之前无法启用(Enable 操作会被拦截)。
- 面板中的垃圾桶图标用于注销(卸载)模块。卸载后,之前的 Weno 设置会完整保留在最后配置状态;当模块日后重新注册(Install)时,所有先前设置依旧生效。
这一"卸载保留配置"的行为与模块的配置存储机制有关:所有 Weno 配置均持久化在数据库globals与user_settings表中(详见本文第七节),卸载模块不会清库。
三、Setup Summary:三步走总览
「Weno eRx Service Admin Setup」配置面板中,三大区块已经涵盖了成功开始电子处方所需的绝大部分设置;唯一额外的配置项是:每位 Weno 处方医师的凭据需在其各自「User Settings」中单独设置。
总览流程如下:
- 在Primary Admin Section输入 Admin 凭据(加密密钥、Admin 用户名、Admin 密码)。
- 在Map Weno User Id's分区为所有授权用户填入其 Weno User ID(
Uxxxx)。 - 在Map Weno Facility Id's分区为相应设施填入 Weno Location ID(
Lxxxxx)。 - 点击Enable启用模块,开启首次药房目录下载。
- 前往「User Settings」页面为处方医师(含自己)录入 Weno 凭据——所有将通过 Weno eRx 开方的医师都必须设置凭据,否则 Weno eRx 小组件不会显示。
- 登出后重新登录,或点击配置面板中的Restart OpenEMR按钮,使顶部菜单生效:Admin → Other → Weno Management与Reports → Clients → Prescription Log将被启用。
四、Weno Primary Admin Section(必需,必须验证)
这是三大分区中唯一要求点击 "Validate and Save" 按钮完成提交的分区(其他分区均为值变更时自动保存)。
- 所有字段都必须填写并通过验证。
- 若邮箱/密码无效,验证会弹出对应告警提示。
- 若加密密钥(Encryption Key)被判定无效,会弹出告警并启用 "Encryption Reset"(加密重置)按钮。处理顺序:先尝试重新输入密钥;若仍失败,点击 Reset 将创建一把新密钥。该变更会同步反映到管理员的主 Weno 账号,无需用户再做其他操作。
- 可以把加密密钥理解为更常见的术语——API Token。
从源码 weno_setup.php 可以还原该分区的完整字段与校验逻辑:
- 字段包括:
weno_rx_enable(启用 Weno eRx 服务)、weno_rx_enable_test(启用测试模式,会在药房下载中自动包含测试药房)、weno_encryption_key(Weno 开发者页面签发的加密密钥)、weno_admin_username(Weno 登录邮箱,同时用于后台药房目录下载)、weno_admin_password。 - 提交时先经
CsrfUtils::checkCsrfInput校验 CSRF,再由 ModuleService::saveVendorGlobals() 将配置持久化到数据库。 - 校验返回码语义(前端 JS 处理逻辑):
false表示加密密钥未通过验证(显示 Reset 按钮);900表示 Admin 用户名/密码无效(提示回到 Weno Dashboard 修正);998/999表示网络连接问题。 - 每次验证/保存都会通过 WenoLogService::insertWenoLog() 写入审计日志(如
"Module setup modified."/"Primary Admin verify Encryption Key")。
4.1 验证的底层实现:XML 调用 Weno 服务端
WenoValidate.php 实现了与 Weno 服务端(https://online.wenoexchange.com/webapi/restapi/WenoManage)的通信:
- 密码以
md5()摘要形式出现在请求中,请求体为Manage_Accountschema 的 XML,其中<ValidateEncKey>携带加密密钥、<AdminUser><Email>/<MD5Password>携带管理员凭据。 requestEncryptionKeyReset()则构造<ResetEncKey>True</ResetEncKey>的 XML 请求,向服务端申请新密钥,再通过setNewEncryptionKey()写回数据库并更新全局配置。
4.2 Optional:User Setting Credentials 快捷子分区
同一面板中还有一个可选的快捷子分区(User Setting Subsection),用于快速为当前登录用户录入 Weno 处方凭据(weno_provider_email与weno_provider_password),其效果等同于在该用户的「User Settings」中配置 Weno 凭据,可节省逐个导航的时间。
五、Map Weno User Id's(必需,自动保存)
该分区呈现一张所有授权用户的表格,包含:
- 用户名、姓名(Last/First);
- 若已分配,显示其默认设施;未设置时显示提示
"Please add Users Default Facility"; - 一个输入框用于录入该用户的 Weno User ID(
Uxxxx)。
此值的意义在于在 Weno 与 OpenEMR 用户之间建立关联关系,用于处方追踪。每当输入或修改 Weno User ID,值都会自动保存,无需点击保存按钮。
作为便利,每行提供一个编辑按钮(铅笔图标),点击后弹出对话框,以编辑模式打开该用户的 Users 设置,可直接修改任意设置(例如分配默认设施)——这等同于从顶部菜单Admin → Users选择对应的 Weno 处方医师进行编辑。
源码层面,weno_users.php 通过ModuleService::getWenoProviderUsers()查询可配置用户(排除gwstaff*/GS:前缀的 Greenway 迁移显示用户),保存时执行:
UPDATE users SET weno_prov_id = ? WHERE id = ?(写入 users 表的weno_prov_id字段);INSERT INTO user_settings ... ON DUPLICATE KEY UPDATE写入global:weno_provider_uid。
六、Map Weno Facility Id's(必需,自动保存)
该分区将每个本地设施(facility)与 Weno 签发的 Location ID(Lxxxxx)一一对应。同样自动保存。需要说明的是,这份数据也可以在启用模块后从顶部菜单Admin → Other → Weno Management访问与维护。
setup_facilities.php 展示了具体实现:以表格列出facility表中的设施(名称、地址、城市),每个设施一行提供 Weno Location ID 输入框;变更时自动提交,执行UPDATE facility SET weno_id = ? WHERE id = ?——即 Weno Location ID 被持久化在 OpenEMRfacility表的weno_id列。
注意:处方用户应在其 User settings 中设置默认设施,这与 Weno User ID 分区一样,是形成 Weno 与 OpenEMR 设施关联、用于处方追踪的必需步骤。
七、其他配置途径(顶部菜单)
除了配置面板,同样的设置项还可从顶部菜单完成:
- Admin → Users:选择与 Weno User ID
Uxxx关联的用户,在Weno User ID字段中输入并保存。 - Admin → Other → Weno Management:为各设施(locations)录入分配的 Location ID
Lxxxxx。 - 患者顶栏用户图标 → Settings:向下滚动找到Weno按钮并点击,在Weno User Email与Weno User Password字段中输入用户名(邮箱)和密码并Save。
⚠️重要警告:若这些凭据缺失或错误,你将无法开具处方。
八、源码级原理:配置存储、后台服务与数据表
8.1 配置存储与加密
ModuleService.php 是配置读写核心:
- 全局项(
weno_rx_enable、weno_rx_enable_test、weno_encryption_key、weno_admin_username、weno_admin_password)存储在globals表中; - 用户项(
weno_provider_email、weno_provider_password、weno_provider_uid)存储在user_settings表中(label 前缀global:); - 敏感值(加密密钥、Admin 密码、Provider 密码)在入库前通过
ServiceContainer::getCrypto()的encryptForDatabase()加密,读取时decryptFromDatabase()解密。
isWenoConfigured()会检查四个必需项是否齐全(weno_rx_enable、weno_admin_username、weno_admin_password、weno_encryption_key),任一为空则返回 false 并把后台任务置为 inactive——这正是"未配置完成前模块无法启用"的实现保障。
8.2 后台服务(Background Services)
table.sql 注册了两个后台服务(位于background_services表):
| 服务名 | 标题 | 执行间隔 | 函数 | 说明 |
|---|---|---|---|---|
WenoExchangePharmacies | Weno Exchange Pharmacy | 1440 分钟(每日) | downloadWenoPharmacy | 药房目录下载 |
WenoExchange | Weno Log Sync | 30 秒 | downloadWenoPrescriptionLog | 处方日志同步 |
两者的入口均为 scripts/weno_log_sync.php。ModuleService::setTaskState()/setModuleState()负责在模块启用、配置完整时将这些任务置为 active('1'),并在模块停用或配置缺失时置为'0'。
8.3 模块数据表
table.sql还定义了模块的三张数据表:
weno_pharmacy:药房目录快照,含 NCPDP、NPI、店名、地址、经纬度、电话、Test_Pharmacy测试标记、On_WENO等字段,NCPDP_safe唯一索引;weno_assigned_pharmacy:患者(pid)的主/备选药房(primary_ncpdp/alternate_ncpdp),含is_history与search_persist字段;weno_download_log:下载日志(value、status、created_at、data_in_context)。
8.4 事件与菜单注入
Bootstrap.php(模块启动类,MODULE_MENU_NAME = "Weno")通过 OpenEMR 事件分发器注册菜单(MenuEvent)、患者人口学渲染(药房分区)、全局设置项(GlobalsInitializedEvent)等,使Admin → Other → Weno Management、Reports → Clients → Prescription Log以及处方界面中的 Weno eRx 小组件在模块启用后出现在系统中。
九、启用后的验证与收尾
完成三区配置并通过验证后:
- 点击Enable启用模块,随后触发首次药房目录下载(由
WenoExchangePharmacies后台任务驱动,日志可查weno_download_log)。 - 为所有处方医师在 User Settings 中录入 Weno 凭据(邮箱 + 密码)。
- 登出再登录,或点击配置面板中的Restart OpenEMR(等同浏览器刷新,用于生效新菜单与配置项)。
- 确认顶部菜单出现Admin → Other → Weno Management与Reports → Clients → Prescription Log;处方开具界面正常显示 Weno eRx 小组件。
十、常见问题速查
| 现象 | 原因与处理 |
|---|---|
| 模块配置图标为红色、无法 Enable | Primary Admin 分区未完成验证;补齐四项必需值并通过 Validate |
| 验证提示邮箱/密码无效(返回码 900) | 回到 Weno Dashboard 核对 Admin 账号,重新输入 |
| 加密密钥无效告警 | 先重输密钥;仍失败则点击Encryption Reset生成新密钥(等价于重置 API Token) |
| 网络告警(返回码 998/999) | 检查 OpenEMR 服务器到 Weno 服务端online.wenoexchange.com的连通性 |
| 处方医师无法开方 / 小组件不显示 | 检查该用户在 User Settings 中的 Weno 邮箱与密码是否缺失或错误;并确认已映射 Weno User ID 与默认设施 |
| 卸载后重新安装配置丢失 | 正常情况下配置持久化于数据库(globals/user_settings/facility),卸载不清库;若仍异常,可核对table.sql中的清理注释语句(DELETE FROM user_settings WHERE setting_label LIKE 'global:weno%'等,仅在需要彻底重置时执行) |
通过以上步骤,即可在 OpenEMR 中完成 Weno eRx 模块的完整安装、管理员配置、医师凭据设置与后台服务启用,正式开启电子处方工作流。
- 医疗健康
- 后端
【免费下载链接】openemr
The most popular open source electronic health records and medical practice management solution.
相关推荐
Ceph 源码克隆指南:从 Git 安装、SSH 配置到子模块与分支管理
Ceph 源码克隆指南:从 Git 安装、SSH 配置到子模块与分支管理 本文是 Ceph 开发者(或想从源码构建、研究 Ceph 的工程师)的源码获取实操指南
存储分布式文件系统对象存储后端高可用OpenEMR Fax SMS 模块(oe-module-faxsms)部署与配置指南:从安装到多供应商通信
OpenEMR Fax SMS 模块(oe module faxsms)部署与配置指南:从安装到多供应商通信 导读 本文围绕 OpenEMR 官方自定义模块 i
医疗健康后端RUM 模块安装与配置指南
RUM 模块安装与配置指南 1. 项目基础介绍 RUM(Randomized Umbrella Method)是一个为 PostgreSQL 数据库设计的开源模
数据库
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考