接口分类介绍
平台基于发布/订阅的消息模型,接口分为三个类别:
发布接口:某一个系统需要把业务数据提供给第三方使用,这个系统就调用发布接口进行数据的发布;
订阅接口(拉):某一个系统采用拉的方式接收第三方的系统发布的数据用于业务处理,则这个系统需要调用订阅接口进行数据接收;
订阅接口(推):某一个系统采用推的方式接收第三方的系统发布的数据用于业务处理,则这个系统需要调用订阅接口进行数据接收;
同步接口:系统采用点对点通信方式进行信息交换,标准采用平台定义的标准,这种同步可以实现交换数据存储到数据中心;
同步消息(仅交换):不采用平台定义消息规范进行消息发布或同步消息,只实现消息交换,不能实现消息交换时实现数据中心数据存储。
订阅规范(拉模式仅交换):不采用平台定义消息规范进行消息获取,获取方式为主动拉消息;
订阅规范(推模式仅交换):不采用平台定义消息规范进行消息获取,获取方式为平台推送模式;
共享接口:某个系统按照条件获取某一类数据,则此系统需要调用共享接口实现数据的获取。
注:第三系统在调用订阅接口时,根据实际的情况,可以采用数据拉模式与数据推模式,数据拉模式是定期从平台的消息队列的获取数据;数据推模式是第三系统按照平台的接口规范开发Web Services接口注册到平台,平台实时推送数据给第三方。
接口标准获取
通过平台中心端的“标准生成”、“标准下载”功能,生成标准压缩包,名称为“standard.zip”,解压后,会有三大类四小不类的接口标准,其中有一个readme.txt文档,对各种标准进行了说明,如下:
standardpubPush.html:发布规范指数据发布使用的交换规范(发布是推模式);
standardSubDrag.html:订阅规范(拉模式)指订阅数据拉模式采用的交换规范;
standardSubPush.html:订阅规范(推模式)指订阅数据推模式采用的交换规范;
standardSyncMsg.html: 同步消息(点对点通信)规范指采用同步消息进行业务处理所定义的交换规范
standardSyncExcMsg.html:同步消息(仅交换)规范指采用同步或异步方式进行消息发布,消息不采用平台定义格式
standardSubExcDrag.html:订阅规范(拉模式仅交换)指订阅数据拉模式采用的交换规范,消息不采用平台定义格式;
standardSubExcPush.html:订阅规范(推模式仅交换)指订阅数据推模式采用的交换规范,消息不采用平台定义格式;
standardShareData.html:共享数据规范指共享数据规范(拉模式)。
用firefox打开每个页面,会看到各种数据接入的接口参数详细说明及传入参数例子说明,如下图所示:
接口函数说明
发布接口函数
订阅接口函数(拉)
建议:实际接入时,先采用浏览模式获取第一条消息,再用移除模式删除第一条消息,这样可以保证接收方实际接收数据后,再作移除处理。
订阅接口函数(推)
同步消息函数
同步消息(同步消息仅交换)
订阅规范(仅交换拉模式)
订阅规范(仅交换推模式)
共享接口函数
WS接口调用例子
发布例子
订阅例子(拉模式)
同步消息接口例子
同步消息(仅交换)
订阅规范(拉模式仅交换)
共享接口例子
【注意】
作接口调用时,由于XML、json有些特殊字符需要转义,发布转义字符如下:
XML传入时要转义的字符有以下几个:
String strMarkupCharArray[] = {"&", ">", "<", "\", "’"};
转义成如下:
String strEntityCharArray[] = {"&", ">", "<", """, "'"};
json转义字符:
String strMarkupCharArray[] = { "\", "\r\n", "\" };
转成:
String strEntityCharArray[] = { "\\", "\r\n", "\\" };
测试工具
集成测试工具集为datatools。
常见问题处理
发布特殊字符转义
作接口调用时,由于XML、json有些特殊字符需要转义,发布转义字符如下:
XML传入时要转义的字符有以下几个:
String strMarkupCharArray[] = {"&", ">", "<", "\", "’"};
转义成如下:
String strEntityCharArray[] = {"&", ">", "<", """, "'"};
json转义字符:
String strMarkupCharArray[] = { "\", "\r\n", "\" };
转成:
String strEntityCharArray[] = { "\\", "\r\n", "\\" };
订阅特殊字符转义
订阅转义字符如下:
String strEntityCharArray[] = {"&", ">", "<", """, "'"};
转义成如下:
String strMarkupCharArray[] = {"&", ">", "<", "\", "’"};
json转义字符:
String strEntityCharArray[] = { "\\", "\r\n", "\\" };
转成:
String strMarkupCharArray[] = { "\", "\r\n", "\" };
订阅推送Web Servivces注册配置说明
同步消息配置说明
同步消息的双方如果采用HL7V3协议,发布方与接收方都采用HL7V3协议;
同步消息采用HL7V3协议,调阅方不能配置返回数据集,因为HL7V3协议返回消息格式有特定的协议要求,与业务请求消息格式定义方式不一样。
同步消息订阅方通过同步消息获得发布方消息,所以不需要推送相应的消息。在订阅者管理中配置订阅的数据集时,需设置对应数据集条件规则为“是”,对“新增数据启用”、“修改数据启用”、“删除数据启用”设置为“否”。
订阅推送Http注册配置说明
接口参数数组类型
采用SOUP协议传入数组样例,如参数为msgInfo,传入二条消息样例:
<msgInfo><![CDATA[消息1]]></msgInfo> <msgInfo><![CDATA[消息2]]></msgInfo>
Java传入数组参数说明:
有些Java webservices工具在生成客户端代码时,有可能把数组的参数变成List参数,这个并不会影响消息交互。
发布接口函数中HL7V3 入参actionname
在中心端HL7消息配置(或CDA配置)消息定义(或章节定义)中消息类型(或文档类型)查看actionname,如下图:
电子病历文档注册服务
电子病历文档注册服务的actionname是S0014,通过S0014电子病历注册我们只会生成文档存储库的信息,不会生成数据中心文档的分类信息,
因此所有的CDA文档注册采用平台定义的actionname注册。
平台定义的CDA文档actionname如下:
CDA文档 | actionname |
---|---|
病历概要 | ClinicalDocumentD000001 |
门(急)诊病历 | ClinicalDocumentD000002 |
急诊留观病历 | ClinicalDocumentD000003 |
西药处方 | ClinicalDocumentD000004 |
中药处方 | ClinicalDocumentD000005 |
检查记录 | ClinicalDocumentD000006 |
检验记录 | ClinicalDocumentD000007 |
治疗记录 | ClinicalDocumentD000008 |
一般手术记录 | ClinicalDocumentD000009 |
麻醉术前访视记录 | ClinicalDocumentD000010 |
麻醉记录 | ClinicalDocumentD000011 |
麻醉术后访视记录 | ClinicalDocumentD000012 |
输血记录 | ClinicalDocumentD000013 |
待产记录 | ClinicalDocumentD000014 |
阴道分娩记录 | ClinicalDocumentD000015 |
剖宫产记录 | ClinicalDocumentD000016 |
一般护理记录 | ClinicalDocumentD000017 |
病重(病危)护理记录 | ClinicalDocumentD000018 |
手术护理记录 | ClinicalDocumentD000019 |
生命体征测量记录 | ClinicalDocumentD000020 |
出入量记录 | ClinicalDocumentD000021 |
高值耗材使用记录 | ClinicalDocumentD000022 |
入院评估记录 | ClinicalDocumentD000023 |
护理计划 | ClinicalDocumentD000024 |
出院评估及指导 | ClinicalDocumentD000025 |
手术同意书 | ClinicalDocumentD000026 |
麻醉知情同意书 | ClinicalDocumentD000027 |
输血治疗同意书 | ClinicalDocumentD000028 |
特殊检查及特殊治疗同意书 | ClinicalDocumentD000029 |
病危(重)通知书 | ClinicalDocumentD000030 |
其他知情告知同意书 | ClinicalDocumentD000031 |
住院病案首页 | ClinicalDocumentD000032 |
中医住院病案首页 | ClinicalDocumentD000033 |
入院记录 | ClinicalDocumentD000034 |
24h内入出院记录 | ClinicalDocumentD000035 |
24h内入院死亡记录 | ClinicalDocumentD000036 |
首次病程记录 | ClinicalDocumentD000037 |
日常病程记录 | ClinicalDocumentD000038 |
上级医师查房记录 | ClinicalDocumentD000039 |
疑难病例讨论记录 | ClinicalDocumentD000040 |
交接班记录 | ClinicalDocumentD000041 |
转科记录 | ClinicalDocumentD000042 |
阶段小结 | ClinicalDocumentD000043 |
抢救记录 | ClinicalDocumentD000044 |
会诊记录 | ClinicalDocumentD000045 |
术前小结 | ClinicalDocumentD000046 |
术前讨论 | ClinicalDocumentD000047 |
术后首次病程记录 | ClinicalDocumentD000048 |
出院记录 | ClinicalDocumentD000049 |
死亡记录 | ClinicalDocumentD000050 |
死亡病例讨论记录 | ClinicalDocumentD000051 |
住院医嘱 | ClinicalDocumentD000052 |
出院小结 | ClinicalDocumentD000053 |
文档可访问地址
为了方便用户在门户中看到和原系统中的格式一致的文档,需要在文档注册时提供可访问的文档地址。
如果用V3,可访问文档地址放在文档头节点setId值上。如下图所示:
影像可访问地址
为了方便用户在门户中看到和原系统中的格式一致的图像,需要在文档注册时提供可访问的影像地址。
如果用V3,可访问的影像地址放在文档头节点templateId值上。如下图
所示:
病人ID
为了形成病人多次就诊完整的病例记录,需要在文档注册时提供病人ID。
如果用V3,病人ID放在文档头结点versionNumber值上。如下图所示:
内存同步
当修改数据集信息、者协议信息、发布者和订阅者信息发生改变时,为了保证集群中所有服务缓存数据的一致。在中心端管理做内存同步时,需要把集群中所有中心端服务器地址的中心端管理都做内存同步。
同一个数据集发布多条数据说明
当异步发布或者同步发布消息的时时候,同一个数据集传多条数据的时候,数据项需要传完整的。原因是同一个数据集多条row数据校验的时候,平台是默认用第一条数据的数据项去校验入库 ,如果第一条少传某个数据项(如:性别),那么后面的所有数据的(性别)这个数据项都不会校验入库。