这些是 Swift 类,代表 🔥 FHIR 元素和资源的数据模型,与 iOS 11 和 OS X 10.13 及更高版本兼容。
此项目基于 Apache 许可证。FHIR® 是 HL7 的注册商标,已获得 HL7 的许可使用。
由于结合两种快速变化的技术的复杂性,这里概述了哪个版本号使用哪个 Swift 和 FHIR 版本。
master
分支应始终能够编译,并且基于这些主要版本的(点发布)版本。develop
分支应基于与最新冻结版本相对应的版本。feature/latest-ci
分支会不时更新,包含最新和最棒的功能。请参阅 tags/releases。
版本 | Swift | FHIR | |
---|---|---|---|
4.2 | 5.0 包 | 4.0.0-a53ec6ee1b |
R4 |
4.1 | 5.0 | 4.0.0-a53ec6ee1b |
R4 |
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 |
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
至少在某种程度上可以工作
code
类型属性创建枚举应用标准的 Swift 命名约定。制表符用于缩进,空格用于对齐——集两者之长。代表 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
如果搜索限制为引用属性,则适用以下情况
GET {base-url}/Thing?referenced:InstanceType={id}
:InstanceType
GET {base-url}/Thing?referenced={uri}
框架的完整构建将包含所有 FHIR 资源,这将导致一个相当大的二进制文件。请查看 package.py
脚本:从命令行调用脚本时提供一个或多个资源名称,它将输出所需资源的所有元素和资源。然后,您或许可以删除不必要的资源,但这不幸的是一项繁琐的任务,需要摆弄工厂。
有一个实验性的 SwiftFHIRMin-iOS
构建目标,它仅包含最少的一组资源。这里的问题是工厂被排除在外,因此反引用、捆绑包和包含的资源将无法正确实例化。