InterSystems IRIS医疗行业版创建FHIR服务器
如果您正打算学习FHIR、或者正在基于FHIR开发,最佳的学习和开发环境需要一个完备的FHIR 服务器,帮助您理解FHIR标准和调试FHIR应用。使用InterSystems IRIS医疗行业版可以快速配置出FHIR服务器和FHIR资源仓库。这篇文章介绍如何在5分钟内在InterSystems IRIS医疗行业版上配置FHIR服务器和FHIR资源仓库;同时对初学者介绍FHIR测试数据生成与加载的方法,和基本的FHIR REST API操作。
软件准备
1. InterSystems IRIS医疗行业版
您可以使用已有的2020.1及以上的InterSystems IRIS医疗行业版。如果您还没有,那么就在社区里下载一个最新的、免费的社区版吧。
2. 测试用的FHIR数据
如果您正在做FHIR开发,应该有很多FHIR测试数据。如果您正在学习FHIR,那么Synthea是一个不错的FHIR测试数据生成器选项。
3. REST测试工具
您或许已经有趁手的REST测试工具了。如果还没有,POSTMAN是个不错的选择。我的例子里用到的就是POSTMAN。
FHIR服务器配置
1. 安装InterSystems IRIS医疗行业版或社区版
如果您还没有安装过InterSystems IRIS医疗行业版或社区版,社区里有很多很好的介绍文章。
2. 配置FHIR服务器
2.1 创建一个FHIR 服务器命名空间
在InterSystems IRIS医疗行业版或社区版上,需要创建一个FHIR服务器命名空间。HS.HC.Util.Installer类的方法InstallFoundation可以创建这样的命名空间,例如,我们创建一个名为FHIRSERVER的命名空间:
HSLIB>D ##class(HS.HC.Util.Installer).InstallFoundation("FHIRSERVER")
2.2 为这个命名空间配置FHIR访问端点 (FHIR endpoint)
进入管理门户,切换到FHIRSERVER命名空间,然后Health > FHIR Configuration, 然后点击“Server Configuration”。这里会列出已有的FHIR服务器的访问端点,并可以配置新的端点。
这里点击+号,在弹出的配置页面中进行设置,其配置项是:
选中支持的FHIR版本 (Select a metadata set): 如果要支持最新的FHIR版本4,选中HL7V40,就是FHIR R4;
选中交换策略 (Select an interaction strategy): 默认情况下只会有一个选项 - HS.FHIRServer.Storage.Json.InteractionsStrategy,它会将InterSystems IRIS同时配置为FHIR资源仓库。
设置FHIR服务器REST服务端点 (Enter a name(URL)): 例如/csp/healthshare/fhirserver/fhir/r4
然后点击Finish,让它完成后台的配置,这可能会花费1分钟。
2.3 修改这个FHIR服务端点
因为我们是想利用它来学习和测试FHIR,所以我们先跳过访问认证部分。在端点列表中选中刚才创建的/csp/healthshare/fhirserver/fhir/r4,滚动到最下方,找到Edit按钮,并选中“Debugging”下的“Allow Unauthenticated Access”,让FHIR服务器接受匿名访问。然后点击Update进行更新。
如果您按上述步骤执行完成,并且没有错误,那么FHIR服务器和FHIR资源仓库已经就绪了。看看表,您用了多久完成FHIR服务器的创建。
下面测试一下FHIR服务器是否工作正常。
测试FHIR服务器
即便您还没有任何FHIR测试数据,也可以先看看这个FHIR服务器的能力声明。
通过POSTMAN,使用GET方法,进行REST调用:http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/metadata。这里localhost:52776是我的测试InterSystems IRIS的服务器地址和Web服务端口号,您换成自己的就行。如果您不知道,那么用您访问InterSystems IRIS管理门户的地址和端口号。
因为我们在上一步配置时,允许匿名访问REST API,所以POSTMAN无需设置任何登陆账户,非常方便测试。正常情况下,您应该看到和我一样的结果:
您的FHIR服务器已经正常工作了,如果还没有测试数据,是时候加载一些FHIR数据进来了。
产生FHIR数据
如果您有自己的FHIR测试数据,请跳过此步,查看“加载FHIR数据”。
如果您还没有自己的FHIR数据,试试Synthea,它能方便的产生大量FHIR测试数据。Synthea有清晰的文档,告诉我们如何产生测试数据。(注:如果您是FHIR初学者,建议先少量创建FHIR测试数据文件,例如先创建5个)
通常它会产生3类JSON文件:
医院信息:hospitalInformation******.json, 每批次只会产生一个医院信息文件。
医生信息:practitionerInformation******.json, 每批次只会产生一个医生信息文件。
患者信息:<患者姓名>******.json, 每批次会根据设置产生一个或多个患者信息文件。
这些FHIR文件都是Bundle资源,Bundle里面会有很多FHIR资源数据。其中医院信息文件和医生信息文件的Bundle类型为batch,而患者信息的Bundle是transaction。
而Synthea产生的患者信息Bundle中的资源使用literal reference来引用医院/地点和医生信息,但它产生的literal reference信息不完整,例如:
"serviceProvider": {
"reference": "Organization?identifier=https://github.com/synthetichealth/synthea|731e0f3a-075d-37ab-9ba7-fbf1ab2f45e9",
"display": "THE GENERAL HOSPITAL CORPORATION"
}
需要将reference改为完整的地址,例如:
"serviceProvider": {
"reference": "http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Organization?identifier=https://github.com/synthetichealth/synthea|731e0f3a-075d-37ab-9ba7-fbf1ab2f45e9",
"display": "THE GENERAL HOSPITAL CORPORATION"
}
也就是增加FHIR服务器的端点。
需要替换/补齐的引用分别是:Location、Organization和Practitioner。
您可以通过文本编辑器进行全局替换,将FHIR服务器的端点信息补充到reference里。如果您产生了很多FHIR数据文件,当然可以用您熟悉的语言写几行代码做这个补充替换。
这里我也附上使用IRIS的Object Script做补充替换的代码示例,它会对指定目录下的所有json文件进行扫描和补充替换,供您参考:
Class Demo.FHIRTools Extends %RegisteredObject
{
/// 修正FHIR文件的引用
/// pFilePath为FHIR json文件目录
/// pFHIREndpoint为FHIR REST的服务端点
ClassMethod CorrectSyntheaFiles(pFilePath As %String = "C:\Temp\Synthea\output\fhir",pFHIREndpoint As %String = "http://localhost:52776/csp/healthshare/fhirserver/fhir/r4") As %Status
{Set tSC = $$$OK// 遍历目录下的json文件Set tSM = ##class(%SQL.Statement).%New()Set tSC = tSM.%PrepareClassQuery("%File", "FileSet")If $$$ISERR(tSC) { Do $system.OBJ.DisplayError(tSC)Return tSC }Set tRS = tSM.%Execute(pFilePath, "*.json", "Name") While tRS.%Next() {// 创建临时文件Set tFileName = tRS.%Get("Name"),tTempFileName=$Replace(tFileName,".json","temp.json")Set tFile=##class(%Stream.FileCharacter).%New()Set tTempFile = ##class(%Stream.FileCharacter).%New()Set tSC=tTempFile.LinkToFile(tTempFileName)Set tSC=tFile.LinkToFile(tFileName)// 从源文件逐行读取,替换后写入临时文件While 'tFile.AtEnd {Set tLine=tFile.ReadLine()// 执行替换For tKeyword="Location?identifier=","Organization?identifier=","Practitioner?identifier="{Set tLine = $Replace(tLine,tKeyword,pFHIREndpoint_"/"_tKeyword)} Set tSC = tTempFile.WriteLine(tLine)}Do tTempFile.%Save()Do tFile.%Close(), tTempFile.%Close()Kill tFile,tTempFile// 删除源文件,并将临时文件改名为源文件名Set tSC = ##class(%File).Delete(tFileName,.tRtn)Set tSC = ##class(%File).Rename(tTempFileName, tFileName, .tRtn)}Return tSC
}
}
加载FHIR数据
当然可以通过FHIR REST API来加载数据,不过,InterSystems IRIS提供了后台的API,可以快速加载特定目录下的大量的FHIR数据文件。
这里我们用后台API:HS.FHIRServer.Tools.DataLoader的SubmitResourceFiles方法进行大量FHIR文件加载:
FHIRSERVER>Set sc=##class(HS.FHIRServer.Tools.DataLoader).SubmitResourceFiles("C:\Temp\Synthea\upload","FHIRSERVER","/csp/healthshare/fhirserver/fhir/r4")
其中第一个入参是需要加载的文件目录;第二个参数是加载的FHIR服务器类型,这里用FHIRSERVER;第三个参数是FHIR REST服务端点。
如果您是通过Synthea产生的测试FHIR JSON文件,那么应该先加载 医院信息文件(hospitalInformation******.json)和医生信息文件(practitionerInformation******.json),以确保患者数据加载时,Location、Organization和Practitioner的引用能正确关联到FHIR资源仓库中已保存的对应资源上。
注意:2020.* 版本中有一个bug,需要将医院信息文件(hospitalInformation******.json)和医生信息文件(practitionerInformation******.json)里的"type": "batch"改为"type": "transaction"。这个bug在2021.1版本中已经得到修复,我已经验证过,但如果您在使用2020的版本,请记得提前修改。
加载完医院信息文件(hospitalInformation******.json)和医生信息文件(practitionerInformation******.json)后,再执行相同的方法加载所有患者数据json文件。
使用FHIR 服务器
有了测试数据,现在您可以使用FHIR服务器进行学习或开发测试了。使用POSTMAN,您可以调用FHIR服务器的REST API,查询、更改、提交FHIR资源数据。
如果您是初学者,对FHIR的REST API不熟悉,建议您从FHIR Cheat Sheet开始,它是一个FHIR标准的汇总单页,里面告诉大家如何使用REST API进行操作。
例如:
1. 查询已经加载到FHIR资源仓库中的患者:
使用GET 方法调用REST:http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/PatientGET 方法调用REST:
2. 使用查询参数,查询名为Pedro316的患者:
使用GET 方法调用REST:http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Patient?given=...GET 方法调用REST:
或使用POST 方法调用REST:http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Patient/_searc...POST 方法调用REST:
3. 加载FHIR Bundle资源:
使用POST 方法调用REST:http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/ ,并在Body中直接贴入FHIR资源数据到raw,或选择FHIR资源数据文件到binary。POST 方法调用REST:
注意:如果您是想让FHIR服务器解析Bundle中的FHIR资源,应该用http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/,而不是http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Bundle。后者把POST的FHIR数据按Bundle进行处理,并不会解析其中包含的FHIR资源内容并逐一保存!http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Bundle。后者把POST的FHIR数据按Bundle进行处理,并不会解析其中包含的FHIR资源内容并逐一保存!
好了,开启您的FHIR之旅吧 :)
后续我还会更新InterSystems IRIS医疗版作为FHIR服务器和FHIR资源仓库的更多内容,欢迎关注。
InterSystems IRIS医疗行业版创建FHIR服务器相关推荐
- InterSystems发布InterSystems IRIS医疗版互联互通套件,加速医院互联互通平台建设...
2021年9月13日,中国 北京-- 致力于帮助客户解决最关键的可扩展性.互操作性和速度问题的创新数据技术提供商InterSystems今日宣布在中国推出InterSystems IRIS医疗版互联互 ...
- InterSystems IRIS哪些新特性让用户开发体验得到了极大提升?
谈到开发体验,什么最重要?如何为客户提供更好的开发体验?InterSystems IRIS的最新版本有哪些新特性极大优化了用户的开发体验?这是本月"极客聊吧"的话题,我们计划通过上 ...
- InterSystems IRIS数据平台:数据接收速度测试
关于本文 本文为翻译整理(节选),原文链接请点击:https://openexchange.intersystems.com/package/Ingestion-Speed-Test?tab=deta ...
- InterSystems IRIS、IRIS for Health和HealthShare Health Connect的2021.1版本的预览版现在已经发布!...
由于这是一个预览版,我们渴望在下个月的通用版发布之前了解您对这个新版本的经验.请通过开发者社区分享您的反馈,以便我们能够共同打造一个更好的产品.预览版,我们渴望在下个月的通用版发布之前了解您对这个新版 ...
- Iris:医疗行业的区块链解决方案
Iris:医疗行业的区块链解决方案 Iris:医疗行业的区块链解决方案 区块链技术已经成为一场革命.从金融服务到社交媒体甚至能源行业,这项发展中的科技有可能使世界经济更快,更安全,更好.在21世纪及其 ...
- InterSystems IRIS、IRIS for Health和Health Connect 2021.1预览版现已发布
InterSystems IRIS.IRIS for Health和HealthShare Health Connect的2021.1版本的预览版现已发布. 由于这是一个预览版,我们希望在下个月的通用 ...
- IDEA社区版搭建Tomcat服务器并创建web项目
IDEA社区版搭建Tomcat服务器并创建web项目 目标 创建Web项目的目录结构 可以启动Tomcat服务器 编写Servlet并访问成功 问题 IDEA社区版没有创建Web工程的选项 IDEA社 ...
- 全球及中国口腔医疗行业投融资现状与与运营效益分析报告2022版
全球及中国口腔医疗行业投融资现状与与运营效益分析报告2022版 ------------------------------------- <出版单位>:鸿晟信合研究院[专员客服对接] ...
- 我的世界手机版怎么增加服务器,我的世界手机版服务器怎么创建
在我的世界里,我们可以通过联网与其他玩家进行互动,一起在游戏世界里进行探索和创造活动.而在我的世界手机版中,想要联机可没电脑版那么方便,我们可以下载一个Multiplayer for Minecraf ...
最新文章
- Kubernetes入门
- 三星玄龙MR头显评测:将成 Vive Pro 最大竞争对手?
- SharePoint 2013 商城
- 家用台式计算机的额定功率,台式机的功率(台式电脑电源功率多大才合适?)...
- python广度优先算法最短路径_最短路径问题的Dijkstra算法 -python
- Gauss-Jordan法求逆矩阵
- Modelsim下载、注册与添加仿真库(LATTICE DIAMOND)
- Java实现UDP功能
- cad的dwg文件转html文件,dwg转dwf文件怎么打开?
- nc 单据模板公式
- 微信小程序公农历转换的实现
- EasyExcel 读.CSV 文件数据为null或乱码问题
- fractional cascading
- if(男深圳集体户口女非深圳户口)深圳准生证办理材料及流程
- Android 常用工具类,终局之战
- rancher 启动命令_Rancher 中文文档 —— 快速入门指南
- CSP认证:行车路线
- python生日祝福短信_python-定时发送生日邮件祝福
- 第二本书疯狂人类进化史20190623
- OneNote(或印象笔记)迁移到Joplin的方法