HL7中国FHIR Connectathon测试实施指南
2024.5.5 - release

本指南适用于HL7中国的FHIR Connectathon测试。

Track 020 - 表单填报

主题介绍

医疗保健领域的许多组织对表单填报功能非常感兴趣。本主题主要测试表单填报实施指南的实现,该实施指南提供了有关在医疗保健领域如何定义和完成问卷的指导,包括表单定义、填报、提取等能力。

基于FHIR R5版本。

目标

测试系统是否支持表单填报实施指南声明的功能,包括流控制逻辑和计算

  1. 测试系统创建和编辑表单的能力
  2. 测试系统处理不同类型表单的能力
  3. 测试系统处理呈现“自适应”表单(根据前一个答案决定下一个问题)的能力
  4. 测试系统从表单中提取数据的能力

参与者

任何对表单设计或支持表单填充和使用如此收集的信息的工具感兴趣的人。

先决条件

  1. 已通读表单填报实施指南
  2. 了解 FHIR 的工作原理
  3. 一个正常运行的开发环境,其代码实现下面列出的所有角色,参与所有测试场景。

相关主题

在表单设计和表单填充时,如果涉及到值域限定的话,会依赖[[术语主题]],不过这个主题需要重新设计,暂不考虑。

实施指南

表单填报实施指南

系统角色

可以将表单填报实施指南中规定的四种角色划分为两个系统角色:

填报系统

  • 表单存储库: 后端服务。提供对资源QuestionnaireQuestionnaireResponse的存储,以及对资源的访问端点。
  • 表单设计器: 前端界面。WebApp。用于创建和编辑调查问卷定义的工具。
  • 表单填充器: 前端界面。用于居民填写调查问卷。可以是移动应用小程序WebApp等形式,本主题中选用的是WebApp形式。允许用户填写表单并提交答案。

监管系统

从设计角度上来说,表单提取器应是监管系统的一个后台运行模组,或者是一个独立运行、更加通用的系统。

  • 表单提取器: 从QuestionnaireResponse中提取数据到其它资源中。

场景

受国家疾病预防控制局委托,某主管部门开展本次调查,以了解我国新冠病毒感染情况。

本调查以匿名形式填报。

一、基本情况

1、您的性别:
○ 男
○ 女

2、您的年龄:
○ 18岁以下
○ 18-29岁
○ 30-39岁
○ 40-49岁
○ 50-59岁
○ 60-69岁
○ 70岁以上

3、您目前所在的省市:
注:可点击下拉框选择,直辖市可选择到区级。

二、健康情况
4、您疫苗接种的情况:
○ 已接种一剂次
○ 已接种两剂次
○ 已接种三剂次
○ 已接种四剂次

5、2023年3月至今,您是否再次发生过新冠病毒感染?
○ 目前检测为阳性
○ 已检测阳性已转阴
○ 有症状未检测
○ 暂未感染

主管部门工作人员登录填报系统,进行表单设计,确认无误后保存并发布。居民登录填报系统的填报页面,如实填写调查信息,填写完毕提交内容。国家疾病预防控制局工作人员登录监管系统,可以查看我国新冠病毒感染情况的统计信息。

场景1 创建表单

目标是在表单设计器中创建一个新表单Questionnaire,并将其保存到表单存储库中。

技术实现建议

以如上的业务场景为例: 调查问卷共有 5 个条目,且分为两个组。其中有 4 个条目为单选,剩余的1个为下拉选择。其中第4个条目被标记为“导出”(observationExtract=true)。

如果表单设计器表单填充器设计为同一系统,建议在登录系统时,以不同的角色身份进行登录。

设计界面中,应能够动态的增加、删减条目,最少要支持两种值类型(单选、下拉选择)。

设计期间,点击保存会设置资源的属性status=draft, 表示目前资源处于草稿设计阶段,而点击发布会设置资源的属性stauts=active,表示目前资源设计完成,处于激活状态。

并且发布后,不允许再修改,但是可以被废止。(这不是真实系统设计示例,只是一个模拟的近似真实示例。)

场景2 填充表单并报送

目标是在表单填充器中填写问题答案,全部填写完成后,生成QuestionnaireResponse,并将其保存到表单存储库中(接收时需验证)。

技术实现建议

如果表单设计器表单填充器设计为同一系统,建议在登录系统时,以不同的角色身份进行登录。

设计界面中,单选条目应检测不可以空选或者多选。下拉选择框宜支持过滤功能。

系统应支持匿名填报。以登录用户的基本信息生成唯一UUID作为居民用户的标识。 在资源的调查对象元素中如下记录:

subject.identifier = urn::uuid::123456765432345678765434

场景3 基于Observation的提取

在设计表单时,因对其中一些条目做了标记,以便提取到Observation资源中。 使用表单提取器进行提取。

技术实现建议

按照正常的实现流程,填报系统系统角色需要发送通知给监管系统系统角色,监管系统收到通知后,调用表单存储库的提取接口,完成提取数据的动作。这是一个自动化的流程。

但是上述正常流程,因需要订阅通知服务主题的支持,无法在本场景下实施。因此,本步骤暂时设计为手动触发。

监管系统表单提取器界面上,提供调查报告(QuestionnaireResponse)的列表界面,点击其中一个具体的调查报告,可以对其进行提取数据操作。

测试流程

本主题测评按如下步骤进行:

  1. 管理人员进行表单设计并对公众发布;
  2. 居民填报表单;
  3. 表单提取器提取数据;
  4. 统计居民疫苗接种情况。

步骤1:管理人员进行表单设计

工作人员以设计者(或管理员)角色进入系统,开始新建调查问卷,进入调查问卷设计界面,逐一添加条目, 内容参考上面的业务场景描述。

需要注意的是,现场测试时,调查问卷的条目数不是仅按照业务场景示例的数量,应能偶根据要求,增加或删减调查问卷条目。

触发条件

点击保存按钮触发。第一次保存,生成‘QuestionnaireResponse’资源,调用Create操作,后续保存动作调用Update操作。 点击发布按钮触发。调用Update操作。

前置条件

系统应提供不同角色用户登录的能力。 设计者角色可以看到调查问卷的设计界面,但是看不到填报页面。 填报者角色可以看到调查问卷的填报页面,但是看不到设计界面。

步骤2:居民填报表单

居民以普通用户身份登录系统,开始填报表单。

填写内容完成之后(系统检测条目不能空选或多选),点击上报,提交表单。

触发条件

点击上报按钮触发。生成‘QuestionnaireResponse’资源,调用Create操作。

前置条件

系统应提供不同角色用户登录的能力。 设计者角色可以看到调查问卷的设计界面,但是看不到填报页面。 填报者角色可以看到调查问卷的填报页面,但是看不到设计界面。

步骤3:表单提取器提取数据

工作人员登录监管系统,进入表单提取页面,以手动方式来模拟自动数据提取功能。刷新调查问卷列表,选择指定的调查问卷条目,点击提取按钮,将调查问卷中的疫苗接种情况数据提取到Observation资源中,并将Observation存储。

触发条件

点击提取按钮触发。调用‘QuestionnaireResponse’资源的$extract操作。

前置条件

步骤2中居民填报的调查问卷已经提交到表单存储库中。

要最少提供Observation资源的Create操作和Search操作。(必选的基础模块中有硬性要求)

步骤4:统计居民疫苗接种情况

工作人员继续切换进入统计页面,可以查看疫苗接种的统计信息(统计数据来源是Observation资源)。

饼图,可以显示每种情况的占比、人数、以及总数。

触发条件

进入统计页面触发。

前置条件 步骤3中完成表单的手动提取动作。

接口:获取统计信息(仅用于测评期间)

仅用于测试时,监管平台前端获取统计信息.

调用地址:

GET http://[ip]:[port]/[form]/Observation/$covid19-stats
请求消息

此服务请求使用GET方法针对提取到的Observation资源来获取疫苗接种的统计信息。

请求消息体为空。

响应消息

响应消息应返回针对疫苗接种的统计结果,应遵循如下条件:

  • 使用状态码200 OK标识整个请求处理成功。
  • 返回Parameters资源,记录统计信息。

处理失败:

  • 如果执行失败,则应返回OperationOutcome资源。具体内容参见后面的“异常处理”章节。

示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<Parameters xmlns="http://hl7.org/fhir">
  <!-- 参与调查问卷的总人数 -->
  <parameter>
    <name value="total"/>
    <value value="100000" />
  </parameter>
  <!-- 选择选项1:接种一剂次 的人数 -->
  <parameter>
    <name value="option-1"/>
    <value value="10000" />
  </parameter>
  <!-- 选择选项2:接种两剂次 的人数 -->
  <parameter>
    <name value="option-2"/>
    <value value="40000" />
  </parameter>
  <!-- 选择选项3:接种三剂次 的人数 -->
  <parameter>
    <name value="option-3"/>
    <value value="40000" />
  </parameter>
  <!-- 选择选项4:接种四剂次 的人数 -->
  <parameter>
    <name value="option-4"/>
    <value value="10000" />
  </parameter>
</Parameters>

验证规则

表单存储器:

  • 应提供Questionnaire资源的Create、Update、Delete、Search操作,满足表单设计器的需求。
  • 应提供QuestionnaireResponse资源的Create、Search、Operation($extract)操作,满足表单填充器表单提取器的需求。

表单设计器:

  • 应能直接连接表单存储器,以符合FHIR标准的消息与表单存储器通信。
  • 应能提供动态的调查问卷条目设计能力,可以根据需要动态增加、删减、修改条目内容。
  • 应至少提供单选型、下拉选择两种条目类型。
  • 应提供查看表单设计器表单存储器交互的调试能力,可以直接查看服务互操作时HTTP的调用过程。例如:浏览器提供的「开发者工具」。

表单填充器:

  • 应能直接连接表单存储器,以符合FHIR标准的消息与表单存储器通信。
  • 应提供界面进行调查报告填报功能。
  • 应提供基本的验证功能,不能空选或者多选。
  • 应提供查看表单填充器表单存储器交互的调试能力,可以直接查看服务互操作时HTTP的调用过程。例如:浏览器提供的「开发者工具」。

表单提取器:

  • 应提供Observation资源的Create操作,满足数据提取后存储的功能。
  • 应提供Observation资源的Search操作,应能根据code进行过滤,满足疫苗接种的统计信息展示功能。
  • 应至少预存储Observation资源100条示例。
  • 应提供数据提取页面,展示调查报告列表,并允许手动进行Observation资源的提取功能。
  • 应提供统计界面,进行疫苗接种的统计信息展示。
  • 应提供查看表单提取器表单存储器交互的调试能力,可以直接查看服务互操作时HTTP的调用过程。例如:浏览器提供的「开发者工具」。

安全和隐私注意事项

在测评环境中没有对OAuthTLS的要求(尽管在生产环境中需要此类技术)。