如何使用 FhirDotNet 获取相同类型的两个资源之间不同的属性列表



我正在使用 Fhir-dotnet API 与我们的 Fhir 服务器进行交互,以将患者记录与我们的后端患者存储库同步。 我有两个患者资源实例:一个表示源存储库中的版本,另一个表示 Thir 中的患者。 我想将患者的源存储库版本的更改子集应用于患者的 Fhir 版本,并尝试使用 CopyTo(( 方法,但这也删除了仅存在于 Fhir 版本的患者中的任何数据。

理想情况下,我只想更新 Fhir 版本的 Patient 中的那些属性,其中我在 Patient 的源存储库版本中有数据(在 patient 的源版本中为非空的字段(,并保留仅存在于 Fhir 存储库中的任何数据。 由于患者使用移动应用程序与 API 交互而添加到 Fhir 版本患者的任何数据都应单独保留(除非他们更新了我也尝试同步的属性(。

由于 CopyTo(( 似乎是从一个资源到另一个资源的完全替换(不是附加副本并忽略 soruce 中为空的字段(,我需要能够比较两个相同类型的资源并获取它们之间的属性更改列表。 似乎有一些基础类可以使用IDeepCopy和IDeepComparison在IsMatch((下支持这一点,我还注意到在GitHub注释部分支持检测差异。

用于处理规范元数据的帮助程序类,最值得注意的是 结构微分的定义和生成

所以我的问题是 Fhir DOTNET API 中是否存在现有的类,可以为我提供相同 resoruce 类型的两个实例之间的更改列表,如果是这样,它们会是什么类和一个可能的示例? 如果没有,那么是否有一个现有的模式,我可以用来为我提供相同类型的两个实例之间不同的属性列表,这些属性可用于在它们之间分配值。 似乎必须进行大量反思才能生成真实属性列表,而不仅仅是字符串的名称值对列表。如果 API 中不支持 Fhir.NET,那么我想在下面编写类似于伪代码的代码......

  • 获取源患者
  • 获取目标患者
  • 对于每个更改的属性(源和目标之间的深度比较(,使用源属性更新目标

您可以在任何元素上使用NamedChildren()函数来按名称获取子元素。使用此列表,您可以使用IsExactly()方法逐个比较它们! 当然,您必须处理可能需要不同处理的FHIR嵌套组(如Patient.contact(。

最新更新