FHIR中M:N多类型引用场景下_include/_revinclude用法问询
FHIR中Patient.generalPractitioner的Include/Revinclude用法疑问
先明确基础父子关系里Include和Revinclude的用法逻辑:
Specimen Include-> Patient // 查询Specimen时,带出它引用的Patient Patient Include-> Organization // 查询Patient时,带出它引用的Organization Organization ReverseInclude-> Patient // 查询Organization时,带出所有引用它的Patient Patient ReverseInclude-> Specimen // 查询Patient时,带出所有引用它的Specimen
但遇到多对多关系且字段可引用多种资源类型时,比如Patient的generalPractitioner字段(可引用Organization、Practitioner、PractitionerRole三种资源),我纠结以下四种用法哪个正确:
用法1
Patient Include-> generalPractitioner (自动带出所有关联的Organization | Practitioner | PractitionerRole)
用法2
Patient ReverseInclude-> generalPractitioner (自动带出所有关联的Organization | Practitioner | PractitionerRole)
用法3
Patient Include-> Organization Patient Include-> Practitioner Patient Include-> PractitionerRole
用法4
Patient ReverseInclude-> Organization Patient ReverseInclude-> Practitioner Patient ReverseInclude-> PractitionerRole
用法分析
- 用法1是正确的:Include的核心逻辑是「从当前查询的资源,包含它指定字段引用的关联资源」。
generalPractitioner是Patient上的直接引用字段,只要指定_include=Patient:generalPractitioner,服务器就会自动返回该字段指向的所有三种类型的资源,无需拆分。 - 用法2、4完全错误:Revinclude是反向包含逻辑,比如查询Practitioner时带出所有引用它的Patient,而我们的需求是查Patient时带出它的全科医生,方向完全相反。
- 用法3不符合需求:直接指定
_include=Patient:Organization会返回Patient所有关联的Organization(包括managingOrganization、contact.organization等),而不是仅generalPractitioner字段指向的资源,范围太宽。
额外冲突问题
如果尝试用Patient Include-> Organization (as generalPractitioner)这种带别名的写法,会混淆Patient上不同字段的关联关系——比如managingOrganization、contact.organization也是对Organization的引用,这样写会把所有关联的Organization都标记为generalPractitioner类型,完全不符合字段的实际含义,绝对不能这么用。
附Patient.generalPractitioner的官方规范定义:
Patient.generalPractitioner Element Id Patient.generalPractitioner Definition Patient's nominated care provider. Cardinality 0..* Type Reference(Organization | Practitioner | PractitionerRole)
内容的提问来源于stack exchange,提问作者granadaCoder
相关产品推荐
相关产品推荐

