如何为FHIR AdverseEvent添加多个患者(Hl7.Fhir.STU3 C#)
FHIR STU3 AdverseEvent关联多个患者的解决方案
先明确:原生FHIR STU3的AdverseEvent不支持多subject
FHIR STU3标准定义里,AdverseEvent的subject字段是单一引用类型,只能关联一个患者(或其他主体)。如果业务需要关联多个患者,有两种合规的实现方式:
方案1:自定义扩展字段
如果没有特定的自定义Profile约束,可以通过扩展来存储多个患者引用:
C#代码(Fhirly实现)
// 1. 添加多个患者到contained集合 var patient1 = new Patient { Id = Guid.NewGuid().ToString() }; var patient2 = new Patient { Id = Guid.NewGuid().ToString() }; adverseEvent.Contained.Add(patient1); adverseEvent.Contained.Add(patient2); // 2. 创建存储多患者的自定义扩展 var multipleSubjectsExt = new Extension { Url = "https://your-org-url/extensions/multiple-adverse-event-subjects", Value = new FhirList { Entry = new List<ResourceReference> { new ResourceReference($"#{patient1.Id}"), new ResourceReference($"#{patient2.Id}") } } }; // 3. 将扩展附加到AdverseEvent adverseEvent.Extension.Add(multipleSubjectsExt);
对应JSON结构示例
{ "resourceType": "AdverseEvent", "meta": { "profile": [ "https://psims-uat.azure-api.net/taxonomy/fhir/StructureDefinition/patient-safety-adverse-event-5" ] }, "contained": [ { "resourceType": "Patient", "id": "6f084956-eab3-4fda-b12d-6dbd74f2beb5", "extension": [ { "url": "https://psims-uat.azure-api.net/taxonomy/fhir/StructureDefinition/patient-information-5", "extension": [/* 患者详情 */] } ] }, { "resourceType": "Patient", "id": "fb3f330b-6cb7-4e27-ab99-df7fe1b06693", "extension": [ { "url": "https://psims-uat.azure-api.net/taxonomy/fhir/StructureDefinition/patient-information-5", "extension": [/* 患者详情 */] } ] } ], "extension": [ { "url": "https://your-org-url/extensions/multiple-adverse-event-subjects", "valueList": { "entry": [ {"reference": "#6f084956-eab3-4fda-b12d-6dbd74f2beb5"}, {"reference": "#fb3f330b-6cb7-4e27-ab99-df7fe1b06693"} ] } } ], "subject": {"reference": "#6f084956-eab3-4fda-b12d-6dbd74f2beb5"} /* 其他AdverseEvent字段 */ }
方案2:遵循自定义Profile的扩展规则
你使用的自定义Profile(https://psims-uat.azure-api.net/taxonomy/fhir/StructureDefinition/patient-safety-adverse-event-5)可能已经扩展了AdverseEvent,支持多subject:
- 先查看该Profile的定义,如果它将
subject的 cardinality设为0..*(多值),那么Fhirly生成的类应该会有类似Subjects的集合属性 - 代码示例(假设存在
Subjects集合):
adverseEvent.Contained.Add(patient1); adverseEvent.Contained.Add(patient2); adverseEvent.Subjects.Add(new ResourceReference($"#{patient1.Id}")); adverseEvent.Subjects.Add(new ResourceReference($"#{patient2.Id}"));
重要提醒
- 不要直接修改原生
subject字段为多值,这会违反FHIR STU3标准,导致资源无法被合规的FHIR服务器解析 - 优先确认自定义Profile是否支持多患者关联,这是最规范的实现方式
内容的提问来源于stack exchange,提问作者Mark Cooper
相关产品推荐
相关产品推荐

