ResearchKitOnFHIR

Build and Test codecov DOI

ResearchKitOnFHIR 是一个框架,允许您使用 FHIR 问卷 和 ResearchKit,在 iOS 上基于 HL7 结构化数据捕获实施指南 创建医疗保健调查。

更多信息,请参考 API 文档

特性

FHIR <-> ResearchKit 转换

FHIR R4 QuestionnaireItemType ResearchKit 类型 FHIR 回复类型
attachment (附件) ORKImageCaptureStep (ORK图像捕获步骤) valueAttachment (附件值)
boolean (布尔值) ORKBooleanAnswerFormat (ORK布尔值答案格式) valueBoolean (布尔值)
choice (选择) ORKTextChoice (ORK文本选项) valueCoding (编码值)
date (日期) ORKDateAnswerFormat(style: ORKDateAnswerStyle.date) valueDate (日期值)
dateTime (日期时间) ORKDateAnswerFormat(style: ORKDateAnswerStyle.dateAndTime) valueDateTime (日期时间值)
decimal (小数) ORKNumericAnswerFormat.decimalAnswerFormat valueDecimal (小数值)
display (显示) ORKInstructionStep (ORK指导步骤) none (无)
group (组) ORKFormStep (ORK表单步骤) none (无)
integer (整数) ORKNumericAnswerFormat.integerAnswerFormat valueInteger (整数值)
quantity (数量) ORKNumericAnswerFormat.decimalAnswerFormat(withUnit: quantityUnit) valueQuantity (数量值)
string (字符串) ORKTextAnswerFormat (ORK文本答案格式) valueString (字符串值)
text (文本) ORKTextAnswerFormat (ORK文本答案格式) valueString (字符串值)
time (时间) ORKTimeOfDayAnswerFormat (ORK一天中的时间答案格式) valueTime (时间值)

导航规则

下表描述了对于每种支持的类型和运算符,FHIR enableWhen 如何转换为 ResearchKit ORKSkipStepNavigationRule。(通过从 enableWhen 表达式构造 ORKResultPredicate 并对其取反来执行转换。)

支持多个 enableWhen 表达式,使用 enableBehavior 元素来确定是否应应用任何或所有表达式。 如果未定义 enableBehavior,则将应用所有表达式。

FHIR R4 QuestionnaireItemType 支持的 QuestionnaireItemOperators ResearchKit ORKResultPredicate
boolean (布尔值) =, != .predicateForBooleanQuestionResult
integer (整数) =, !=, <=, >= .predicateForNumericQuestionResult
decimal (小数) =, !=, <=, >= .predicateForNumericQuestionResult
date (日期) >, < .predicateForDateQuestionResult
coding (编码) =, != .predicateForChoiceQuestionResult

安装

可以使用 Swift Package Manager 将 ResearchKitOnFHIR 安装到您的 Xcode 项目中。

  1. 在 Xcode 14 及更高版本(需要 Swift 5.7)中,转到 “File (文件)” » “Add Packages... (添加包...)”
  2. 输入此 GitHub 存储库的 URL,然后选择 ResearchKitOnFhir 包进行安装。

用法

Example 目录包含一个 Xcode 项目,演示了如何从 FHIR 问卷创建 ResearchKit 任务,并以 FHIR QuestionnaireResponse 的形式提取结果。

从 FHIR 转换为 ResearchKit

1. 从 JSON 实例化一个 FHIR 问卷

let data = <FHIR JSON data>
var questionnaire: Questionnaire?
do {
    questionnaire = try JSONDecoder().decode(Questionnaire.self, from: data)
} catch {
    print("Could not decode the FHIR questionnaire": \(error)")
}

2. 从 FHIR 问卷创建一个 ResearchKit 可导航任务

var task: ORKNavigableOrderedTask?
do {
    task = try ORKNavigableOrderedTask(questionnaire: questionnaire)
} catch {
    print("Error creating task: \(error)")
}

现在,您可以按照 ResearchKit 文档 中所述的方式呈现任务。

将 ResearchKit 任务结果转换为 FHIR QuestionnaireResponse

在您的实现 ORKTaskViewControllerDelegateProtocol 的类中,您可以从任务的结果中提取一个 FHIR QuestionnaireResponse,如下所示。

func taskViewController(
    _ taskViewController: ORKTaskViewController, 
    didFinishWith reason: ORKTaskViewControllerFinishReason, 
    error: Error?
) {
    switch reason {
    case .completed:
        let fhirResponse = taskViewController.result.fhirResponse
        // ...
    }
}

许可

本项目采用 MIT 许可证。 有关更多信息,请参见 Licenses (许可证)

贡献者

本项目是斯坦福大学在斯坦福大学的项目的一部分。 有关所有 ResearchKitOnFHIR 贡献者的完整列表,请参见 CONTRIBUTORS.md

声明

ResearchKit 是 Apple, Inc. 的注册商标。 FHIR 是 Health Level Seven International 的注册商标。

Stanford Byers Center for Biodesign Logo Stanford Byers Center for Biodesign Logo