OpenEMR 开源电子病历系统:Docker 怎么跑起来,新手能用到什么
【免费下载链接】openemrThe most popular open source electronic health records and medical practice management solution.项目地址: https://gitcode.com/GitHub_Trending/op/openemr
OpenEMR 是一套开源的电子病历(EHR)与诊所管理系统,覆盖患者建档、预约排班、专科表单、处方、账单结算到患者门户的完整业务流程,采用 GPL-3.0 许可,适合想自建医疗信息系统的诊所,以及想基于 FHIR 接口做二次开发的开发者。
先跑起来:Docker 官方镜像十分钟出登录页
最短路径是官方生产镜像 + 一个 MariaDB 容器,仓库里自带可以直接抄的 compose 文件,不用手动装 Apache、PHP、MySQL。
- 获取代码:
git clone https://gitcode.com/GitHub_Trending/op/openemr,进入openemr目录。 - 取部署模板:示例文件在 docker/production/docker-compose.yml。
- 拷到工作目录:
cp docker/production/docker-compose.yml . - 调整端口:默认对外是 80/443,被占用就改
ports:一行。 - 启动:
docker compose up -d,首次要 5–10 分钟,容器会自动建库、导表、建初始用户。
跑起来后访问http://localhost,用默认账号admin/ 密码pass登录,看到的就是支持多语言选择和多主题的登录页:
它解决了什么问题:一天诊所业务怎么装进一套系统
结论先行:从"给患者排号"到"把账单寄给保险",这条链路上的每个环节都有现成功能,而不是只有一张电子病历表。
🗓️ 预约不再撞车:时段锁定与自动提醒
- 解决什么问题:同一医生同一时间被约两次,靠前台记不住。
- 靠什么机制:排班数据落在 interface/main/calendar/ 背后的一组表里,每个时段要么属于某医生、要么属于某患者,重复预约会被拒;医生可设周期性的出诊模板。
- 结果长什么样:后台日历上医生格子直接显示已占/空闲,前台排号一眼看全;提醒邮件和短信可按配置提前发出。
🩺 专科问诊不用现编表单:35 个内置模板
- 解决什么问题:不同科室需要的记录内容差异极大,从零开发表单成本太高。
- 靠什么机制:interface/forms/ 下内置约 35 个表单,含疼痛图、PHQ-9 / GAD-7 量表、SOAP 病历、生命体征、用药评估等,表单字段提交后直接挂到对应患者的就诊记录上。
- 结果长什么样:疼痛模块让患者在人体图上直接标记位置,手、足特写一并覆盖:
- 生长曲线:生命体征表单录入身高体重后,儿科可直接生成 BMI 百分位曲线,判断发育是否偏离正常区间,数据来自 interface/forms/vitals/growthchart/。
📄 保险账单从录入到对账:费用表 + EDI
- 解决什么问题:诊费怎么折算成保险能认的账单,是诊所财务最繁琐的环节。
- 靠什么机制:诊疗录入后按费用表生成待结算项,走标准 EDI 交换发给保险商;library/edihistory/ 完整保存每一次申报与回执,对账有据可查。
- 结果长什么样:账单模块里能看到每笔费用的状态流转:已申报、已受理、已驳回,驳回原因直接标出。
🏠 患者自助:门户里的预约、结果与留言
- 解决什么问题:复查结果、用药说明全靠电话通知,占用人力。
- 靠什么机制:独立患者门户入口在 portal/,患者可在线看化验结果、查处方、查看文件、在线留言;短信和邮件提醒直接链进门户对应页面。
- 结果长什么样:患者点提醒链接即可看到自己的报告,不用打诊所电话。
它是怎么工作的:三个真正值得注意的设计点
OpenEMR 有意思的地方不在"功能多",而在权限、扩展点、对外接口这三件事都是内建机制,不是后期打的补丁。
🔐 权限:数据库里的一套访问控制模型
权限模型存在数据库表里(ARO / ACL / ACO 三层结构),管理员按"资源 × 操作 × 动作"组合授权,菜单显隐、页面访问、接口调用都走同一套校验,表结构见 gacl/:
🧩 扩展:表单、模块、主题各占一个目录
新增专科能力通常只加文件,不动核心代码:专科表单放 interface/forms/,功能模块放 interface/modules/(内置的远程医疗、短信传真等模块就在其中),界面样式放 interface/themes/。
🔌 对外集成:REST + FHIR R4 端点集中管理
标准 REST 与 FHIR R4 端点集中在 src/FHIR/ 和 src/RestControllers/,第三方应用先通过 OAuth2 注册拿 token,再按 scope 拉取患者数据;开关在系统配置里,接口文档见 Documentation/api/。
适配性评估:适合谁,不适合什么
- 适合小型诊所:一人到几十名医护、预算有限、想摆脱软件订阅费的场景,功能覆盖面够日常使用。
- 适合多院区:多站点配置在 sites/ 下按目录隔离,每个站点独立的配置和数据。
- 适合做集成底座:需要 FHIR / SMART 接口对接自有系统的开发团队。
- 局限 1:官方文档和社区支持均为英文,中文环境只能自己补,语言包机制在 interface/language/。
- 局限 2:表单虽内置 35 个,但超出这套模板的专科需求要自己开发表单,不是配置就能解决。
- 局限 3:手动 LAMP 部署依赖 PHP 8.3+ 和十余个 PHP 扩展(见 composer.json),环境配置门槛比一般 PHP 项目高;数据库版本号与
sql/database.sql强绑定,跨大版本升级要走 sql/ 里的升级脚本链。
避坑与常见问题
- 首启等不及就杀容器 → 原因:前 5–10 分钟容器在建库、导表、建初始用户,中断后是半初始化状态 → 解决:耐心等完;实在要重来,删掉 compose 里声明的 volume 再
docker compose up -d。 - 端口冲突 → 原因:示例默认占 80/443 与 MySQL 3306 → 解决:改
docker-compose.yml的ports:映射,开发环境 compose 还留了WT_HTTP_PORT等环境变量直接改端口。 - 登录页只有英文 → 原因:默认语言是英语 → 解决:登录后在系统配置里改默认语言,语言包目录 interface/language/ 支持导入。
- 默认密码
admin/pass→ 原因:compose 文件里OE_USER/OE_PASS就是安装时的初始凭据 → 解决:上线前第一次登录后立刻改密码,并同步修改 compose 里的OE_PASS,否则下次升级重装又回到弱口令。 - 提醒邮件/短信收不到 → 原因:SMTP 没配 → 解决:开发环境自带 mailpit 容器,信都收在它的界面里;生产环境需在系统配置里填真实 SMTP 参数。
学习路径与资源
建议上手顺序:1 → 用生产镜像 Docker 跑起来,进登录页;2 → 走一遍完整流程:建患者、建就诊、填表单、结账;3 → 开 FHIR 接口,用一个 curl 请求拉出第一个 Patient 资源。
- 官方文档:仓库内 Documentation/(安装)、DOCKER_README.md(Docker 各系列镜像的区别)、Documentation/api/(REST 与 FHIR)。
- 社区渠道:官方 wiki、社区论坛、实时聊天室,入口都在 composer.json 的 support 段;代码问题走仓库 issue。
- 进阶阅读:Documentation/api/AUTHENTICATION.md(OAuth2 鉴权)、Documentation/api/SMART_ON_FHIR.md(第三方应用接入)、Documentation/Clinical_Decision_Rules_Manual.pdf(临床决策规则)。
OpenEMR 对诊所省的是软件采购费,对开发者给的是 FHIR 接口和一套清晰的目录约定。下一步就把 docker/production/docker-compose.yml 跑起来,用admin/pass登进去建第一个患者。
【免费下载链接】openemrThe most popular open source electronic health records and medical practice management solution.项目地址: https://gitcode.com/GitHub_Trending/op/openemr
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考