FHIR 4.0.0

FHIR 4.0.0

测试已测试
语言 SwiftSwift
许可 NOASSERTION
发布最新发布2019年4月
SPM支持 SPM

Pascal PfiffnerDave Carlson 维护。



FHIR 4.0.0

  • 作者:
  • Pascal Pfiffner

FHIR Swift 类

这些是表示 🔥 FHIR 元素和资源的 Swift 类,与 iOS 11OS X 10.13 及更高版本兼容。

这项工作是以 Apache 许可证 发布的。FHIR® 是 HL7 的注册商标,并且是在 HL7 的许可下使用的。

版本管理

由于结合两个易变技术的复杂性,以下是对哪些版本号使用哪些 SwiftFHIR 版本的概述。

  • master 分支应始终编译,并且在这些主要版本上(点发布版)。
  • develop 分支应与最新的冻结版本相对应。
  • feature/latest-ci 分支会定期更新为最新和最好的版本。

请参阅 标签/发布

版本 Swift FHIR  
4.0 4.2 4.0.0-a53ec6ee1b R4
3.1 3.2 3.0.0.11832 STU 3
3.0 3.0 3.0.0.11832 STU 3
2.10 3.0 1.8.0.10521 STU 3 冻结,2017年1月
2.9 3.0 1.6.0.9663 STU 3 投票,2016年9月
2.8 3.0 1.0.2.7202 DSTU 2 (+ 技术错误)
2.4 2.2 1.6.0.9663 STU 3 投票,2016年9月
2.3 2.3 1.0.2.7202 DSTU 2 (+ 技术错误)
2.2.3 2.2 1.0.2.7202 DSTU 2 (+ 技术错误)
2.2 2.0-2.2 1.0.2.7202 DSTU 2 (+ 技术错误)
2.1 2.0-2.2 1.0.1.7108 DSTU 2
2.0 2.0-2.2 0.5.0.5149 DSTU 2 投票,2015年5月
1.0 1.2 0.5.0.5149 DSTU 2 投票,2015年5月
0.2 1.1 0.5.0.5149 DSTU 2 投票,2015年5月
0.1 1.0 0.0.81.2382 DSTU 1

SMART on FHIR

Swift-SMART 框架使用这些类。

进度

以下是需要完成的初步列表。

[ ] Remove _isSummaryResource workaround to STU-3's nMin/isSummary errors
[ ] More convenience methods to working with resources in code
[ ] Nice support for simple PATCH operations
[ ] Separate resource models from base models; needs untangling of
    _owningResource, _owningBundle (easy), _resolved etc.
[ ] Handle resource versions nicely
[ ] Create a default behavior when a modifierExtension is detected
[ ] Update/modernize FHIRSearch
[ ] Search: report search parameters that the server ignored

部分工作,至少在一定程度上

  • 为 FHIR 的基本资源生成的类
    • 使用自定义结构体作为原始类型
    • 使用自定义的日期/时间/日期时间/瞬时结构体
    • 为许多封闭值集生成枚举
  • 以编程方式创建元素和资源
  • 使用 FHIR 服务器协议进行与服务器 REST 交互
  • 从 JSON 反序列化
    • 告诉您缺少哪些强制性属性,
    • 哪些属性不符合预期或
    • 哪些属性类型错误
  • 序列化到 JSON
    • 拒绝序列化不完整的元素
  • 解析包含/捆绑/相对/绝对资源引用
  • 包含资源
  • code 类型的属性创建枚举
  • 使用类似 NoSQL 的语句构造搜索(参见图fhir.js)
  • 执行操作
  • 使用自动创建的类单元测试使用示例资源
    • 测试从文件反序列化
    • 测试从反序列化实例序列化

命名约定

标准 Swift 命名约定适用。使用制表符进行缩进,使用空格进行对齐 – 最佳选择。表示 FHIR 资源的类没有前缀。自定义类和协议以前缀 FHIR 开头,以避免与元素或资源类冲突,并且易于区分。

FHIR 数据模型

类是由我们的 Python FHIR 解析器 根据 FHIR 资源定义生成的。

冗余

Swift是静态类型,自检功能有限。因此生成器需要更加详细,创建类级别的序列化和反序列化器,而不是在运行时查看类属性,然后确定如何序列化和反序列化。

基数

某些数据模型具有基数至少为1的属性。虽然可以通过不在Swift中将它们设置为可选型来强制这些属性永远不会为nil,但它们仍然是可选的,以使初始化器统一,只有JSON字典作为参数。

包含资源

FHIR使用Reference类的扩展处理引用,提供了处理引用解析的方法。

要解析资源引用,在引用属性上调用resolve(ModelClass) { resource in },如果解析成功,将在回调中返回引用类型的实例。要包含资源并接收一个Reference实例,请调用parent.containResource(contained)

// create a prescription with a contained medication
let order = MedicationRequest()
let medication = Medication()
medication.id = "med"
do {
    order.medicationReference = try order.containResource(medication)
}
catch let error {
    // failed to contain, either because no id or containing itself
}

// resolve the contained medication
order.medication?.resolve(Medication.self) { medication in
	if let medication = medication {
		// successfully resolved
	}
}

搜索

客户端支持fhir.js提出并使用的类似NoSQL的方法。

组件

搜索可以限制在分区内,但是这些分区在SMART服务器以及这些类中尚未得到支持。

[ ] Patient/23/procedure?date=>2010-01-01&date=<2011-12-31

引用的(尚未实现)

如果搜索限制在引用属性上,这将适用

  • 如果搜索令牌仅是一个id,也就是说它**不包含**正斜杠,将根据调用哪个实例方法构建一个类型限制的搜索:GET {base-url}/Thing?referenced:InstanceType={id}
  • 如果搜索令牌包含正斜杠,则假设它是一个绝对引用,不会添加:InstanceType
    GET {base-url}/Thing?referenced={uri}

打包

框架的完整构建将包括所有的FHIR资源,这将导致一个相当大的二进制文件。请查看package.py脚本来运行它:通过命令行提供一到多个资源名称,它将输出所有所需资源的元素和资源。然后您可能会删除不再需要的资源,但这不幸地是一个繁琐的任务,并且需要对工厂进行调整。

有一个实验性的SwiftFHIRMin-iOS构建目标,它仅包含最小的一组资源。问题是工厂被排除了,因此解引用、包和包含的资源不会被正确实例化。