FHIR Swift 类
这些是表示
这项工作是以 Apache 许可证 发布的。FHIR® 是 HL7 的注册商标,并且是在 HL7 的许可下使用的。
版本管理
由于结合两个易变技术的复杂性,以下是对哪些版本号使用哪些 Swift 和 FHIR 版本的概述。
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
构建目标,它仅包含最小的一组资源。问题是工厂被排除了,因此解引用、包和包含的资源不会被正确实例化。