LinuxForHealth / FHIR

The LinuxForHealth FHIR® Server and related projects
https://linuxforhealth.github.io/FHIR
Apache License 2.0
333 stars 156 forks source link

Composition:entry _include not supported #4230

Open CHelfgott opened 1 year ago

CHelfgott commented 1 year ago

Describe the bug I have a Composition with two layers of sections, and resources referenced in the "entry" field of the subsection:

   { 
      resourceType: "Composition",
      encounter: { type: "Encounter", reference: "Encounter/18950d5c0c9-1806ad9f-e7da-422c-be68-a08b3f5a6241" },
      ...,
      section: [
         { 
             title: "Section 1", 
             section: [
                { 
                    title: "Subsection 1A", 
                    entry: [
                        { type: "MedicationDispense", reference: "MedicationDispense/blah-blah-blah" },
                        { type: "MedicationAdministration", reference: "MedicationAdministration/blah-blah-blah" },
                    ], 
                }, 
                { 
                    title: "Subsection 1B", 
                    entry: [{ type: "QuestionnaireResponse", reference: "QuestionnaireResponse/blah-blah-blah" }], 
                },
             ],
          },
          {
             title: "Section 2", 
             section: [
                { 
                    title: "Subsection 2A", 
                    entry: [{ type: "Observation", reference: "Observation/blah-blah-blah" }], 
                },
             ],
          },
      ],
   }

I place a search call, attempting to retrieve the Composition and all associated entry resources. curl -X 'GET' 'http://localhost:3001/fhir-server/api/v4/Composition?encounter=18950d5c0c9-1806ad9f-e7da-422c-be68-a08b3f5a6241&_include=Composition:entry&_include:iterate=AdverseEvent:substance&_include:iterate=MedicationAdministration:medication&_include:iterate=MedicationDispense:medication&_include:iterate=Medication:ingredient' -H 'accept: application/fhir+json'

The response is a Bundle with total: 1 containing only the Composition.

Environment Which version of LinuxForHealth FHIR Server? v4

To Reproduce Create a Composition resource with nested sections and entry fields, attempt to retrieve all referenced entry resources using Composition search with an _include Composition:entry parameter.

Expected behavior I expected all resources referenced in Composition.section.section.entry to be included in the search bundle.

CHelfgott commented 1 year ago

I additionally tried filtering on the types of resources to be returned by e.g. Composition:entry:MedicationAdministration. No dice. My suspicion, just from poking around the repo, is that the issue comes from https://github.com/LinuxForHealth/FHIR/blob/main/conformance/fhir-core-r4/src/main/resources/hl7/fhir/core/401/package/SearchParameter-Composition-entry.json where it defines

  "expression": "Composition.section.entry",
  "xpath": "f:Composition/f:section/f:entry",

My guess is that means the search parameter is only capturing the top-level sections of the Composition; given that Composition.section is explicitly recursive, this is probably not conformant.

Incidentally, I suspect this is an issue with other resources/search params with a recursive structure, such as Questionnaire:definition.

CHelfgott commented 1 year ago

According to the current normative version of FHIRPath, the correct way of doing this is "expression": "Composition.repeat(section).entry". Likewise with Questionnaire items.