HL7中国FHIR Connectathon测试实施指南
2024.5.5 - release
本指南适用于HL7中国的FHIR Connectathon测试。
文档共享服务(XDS-on-FHIR)交互规范定义了一个基于FHIR规范的共享文档交互接口。
在交互规范中定义的交易参考了IHE的XDS、MHD、NPFS规范。
本交互规范寻求一种IHE XDS的替代方案,简化交互接口,适用于当前流行的网络交互。
基于FHIR R5版本进行设计。
XDS | FHIR | |
---|---|---|
提交集 | SubmissionSet | List |
文档条目 | DocumentEntry | DocumentReference |
文档 | XDS Document | Binary |
关联关系:
在2020年10月28日,社区医生赵勇对慢病患者张三进行糖尿病随访时,使用移动设备上的随访应用对随访信息进行了记录。在完成随访后,形成慢病随访记录文档。点击提交文档,将文档与元数据一起提交到社区中心。
在此用例中,移动设备上的随访应用实现了文档源角色,可以提交一份或一组文档到文档存储库。
社区医生赵勇想查看一下他负责的慢病患者张三在本月内的随访记录,在移动设备上的随访应用中输入过滤条件患者姓名=张三、起止时间为本月的1-31日,点击查询按钮,界面中显示本月一共对患者张三进行了2次随访。社区医生赵勇想查看一下患者张三的最后一次随访记录,在查询结果页面,点击最后的那一次随访记录,界面显示了该次随访记录的详细信息。
在此用例中,移动设备上的随访应用实现了文档使用者角色,可以向文档注册库发起文档查询请求。还实现了文档使用者角色,可以从文档存储库获取一份指定的文档。
在本交互规范的当前版本定义了如下3个交易:
本交易由文档源和文档存储库角色使用。提交文档集(IST-FHIR-XDS-001)交易用于传输一组文档和相关元数据。
调用地址:
POST http://[ip]:[port]/fhir/[docrepo]
此消息使用POST
方法将元数据和文档作为Bundle资源进行传输。
请求消息体的Content-Type
必须为application/fhir+json
或者 application/fhir+xml
。
消息体定义和示例参见ProvideDocumentBundle:
type=transaction
响应消息处理可参见FHIR规范的事务处理。
响应消息体的定义参见ProvideDocumentBundleResponse:
type=transaction-response
200 OK
标识整个请求处理成功Bundle.entry.response.status
标记为201 Created
,表示资源创建成功400
和500
标识整个请求处理失败本交易由文档消费者和文档注册库角色使用。查询文档(IST-FHIR-XDS-002)交易用于查找满足一组参数的DocumentReference资源。
查询的结果是一个FHIR包,其中包含与查询参数匹配的DocumentReference资源。
调用地址:
POST http://[ip]:[port]/api/[docreg]/DocumentReference?<query param>
查询参数表示为一系列的name-value对,这些name-value对表示查询的筛选器,在本规范的当前版本中需支持:
参数 | 参数类型 | 描述 | 对应元素 |
---|---|---|---|
category | token | 表示文档的分类(粗粒度分类) | category |
type | token | 表示文档的类型(细粒度分类) | type |
date | date | 文档的创建时间 | date |
identifier | token | 文档的唯一标识(UniqueId) | identifier |
patient | reference | 标识文档记录的就诊事件中的患者 | subject |
patient.identifier | token | 标识文档记录的就诊事件中的患者。链式查询 | subject |
patient.name | string | 患者的姓名。链式查询 | subject |
author | reference | 文档作者(责任医师) | author |
author.name | string | 文档作者(责任医师)的姓名。链式查询 | author |
custodian | reference | 文档保管机构 | custodian |
custodian.name | string | 文档保管机构的名称 | custodian |
period | date | 标识文档记录的就诊事件的起止时间 | context.period |
relatesto | reference | 关联的文档 | relatesTo.target |
relation | token | 与关联的文档的关系 | relatesTo.code |
status | token | 文档的状态 | status |
响应消息返回恰当的HTTP状态代码以及Bundle资源,其中包含匹配查询条件的DocumentReference资源。
响应消息体的定义参见FindDocumentReferenceResponse:
200 OK
状态码,且Bundle资源中应包含有零到多个DocumentReference资源。GET /repository/api/DocumentReference?type=http:%2F%2Floinc.org%7C51847-2 HTTP/1.1
Host: fhirserver.com
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Fri, 14 May 2021 05:29:09 GMT
Content-Type: application/fhir+json;charset=utf-8
Transfer-Encoding: chunked
Connection: close
X-Powered-By: HAPI FHIR 5.4.0 REST Server (FHIR Server; FHIR 5.0.0/R5)
Last-Modified: Fri, 14 May 2021 05:29:09 GMT
{
"resourceType": "Bundle",
"id": "cc2bcb8f-12ed-4178-bb0b-80c614a47f49",
"meta": {
"lastUpdated": "2021-05-14T05:29:09.648+00:00"
},
"type": "searchset",
"link": [ {
"relation": "self",
"url": "http://fhirserver.com/repository/api/DocumentReference?type=http%3A%2F%2Floinc.org%7C51847-2"
}, {
"relation": "next",
"url": "http://fhirserver.com/repository/api?_getpages=cc2bcb8f-12ed-4178-bb0b-80c614a47f49&_getpagesoffset=20"
} ],
"entry": [ {
"fullUrl": "http://fhirserver.com/repository/api/DocumentReference/1963433",
"resource": {
"resourceType": "DocumentReference",
"id": "1963433",
"meta": {
"versionId": "1",
"lastUpdated": "2021-03-22T17:55:21.282+00:00",
"source": "#BNMOOv5FotI8XAw5"
},
"status": "superseded",
"type": {
"coding": [ {
"system": "http://loinc.org",
"code": "51847-2",
"display": "Evaluation+Plan note"
} ]
},
"category": [ {
"coding": [ {
"system": "http://hl7.org/fhir/us/core/CodeSystem/us-core-documentreference-category",
"code": "clinical-note",
"display": "Clinical Note"
} ]
} ],
"subject": {
"reference": "Patient/5af4663e-8b67-47fc-9cf4-d85292360a64"
},
"date": "2002-08-19T16:45:50.597-05:00",
"author": [ {
"reference": "Practitioner/0000016f-a1db-e77f-0000-0000000404de",
} ],
"content": [ {
"attachment": {
"contentType": "text/plain",
"data": "EoyWVhScGRtVWdabkpsWlM0Z0NnPT0="
}
} ],
"context": {
"period": {
"start": "2002-08-19T16:45:50-05:00",
"end": "2002-08-19T17:00:50-05:00"
}
}
},
"search": {
"mode": "match"
}
},
...
]
}
本交易由文档消费者和文档存储库角色使用。获取文档(IST-FHIR-XDS-003)交易用于根据指定的文档标识获取文档内容。
调用地址:
POST http://[ip]:[port]/[docrepo]/api/Binary/[id]
此消息使用GET
方法根据文档的标识符获取指定文档的原始数据内容。
响应消息是文档的原始数据。注意!不是Base64编码后的数据。
GET /repository/api/Binary/2073919 HTTP/1.1
Host: fhirserver.com
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Wed, 12 May 2021 08:57:57 GMT
Content-Type: text/xml
Content-Length: 123456
Connection: close
X-Powered-By: HAPI FHIR 5.4.0 REST Server (FHIR Server; FHIR 5.0.0/R5)
ETag: W/"1"
Content-Location: http://fhirserver.com/repository/api/Binary/2073919/_history/1
Content-Disposition: Attachment;
<?xml version="1.0" encoding="UTF-8"?>
<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" classCode="DOCCLIN" moodCode="EVN">
<realmCode code="CN"/>
<typeId root="2.16.840.1.113883.1.3" extension="POCD_MT000040"/>
<templateId root="2.16.156.10011.2.1.1.1.1"/>
<id root="2.16.156.10011.1.1.1.2" extension="20110211336666666"/>
<code code="HSDA00.01" displayName="个人基本健康信息登记" codeSystem="2.16.156.10011.2.4" codeSystemName="卫生信息共享文档规范编码体系"/>
<title>个人基本健康信息登记</title>
<effectiveTime value="20151114003556"/>
<confidentialityCode code="N" displayName="正常访问保密级别" codeSystem="2.16.840.1.113883.5.25" codeSystemName="Confidentiality"/>
<languageCode code="zh-CN"/>
...
</ClinicalDocument>
文档存储异常消息定义和示例参见XDSRepOperationOutcome。
当处理流程出现错误时:
代码 | 说明 |
---|---|
XDSRepositoryMetadataError | 元数据错误 |
XDSMissingDocument | 文档元数据指向的文档未找到 |
XDSRepositoryDuplicateUniqueIdInMessage | 在同一消息中发现同样的UniqueId |
XDSNonIdenticalHash | 文档id一样,但Hash值不一样 |
XDSNonIdenticalSize | 文档id一样,但Size值不一样 |
XDSRegistryNotAvailable | 文档注册服务不可访问 |
XDSRepositoryError | 其它的文档存储错误 |
文档注册异常消息定义和示例参见XDSRegOperationOutcome。
当处理流程出现错误时:
代码 | 说明 |
---|---|
XDSRegistryMetadataError | 元数据错误 |
XDSPatientIdDoesNotMatch | 患者标识不匹配 |
XDSDuplicateUniqueIdInRegistry | 在注册库唯一标识重复。例如文档id与提交集标识重复 |
XDSNonIdenticalHash | 文档id一样,但Hash值不一样 |
XDSNonIdenticalSize | 文档id一样,但Size值不一样 |
XDSUnknownPatientId | 无法识别的患者标识 |
XDSDocumentUniqueIdError | 文档唯一标识错误。因多种原因通过该标识无法获取到文档,例如:无权访问,文档已失效 |
XDSRegistryError | 其它的文档注册错误 |