Search code examples
hl7-fhir

Not getting expected search results from SmartHealthIt FHIR server for DiagnosticReport searching


I'm trying to find a patient with a DiagnosticReport using the SmartHealthIt FHIR server at https://r4.smarthealthit.org.

Queries are based on the guide at https://www.hl7.org/fhir/search.html.

If I execute the following query I get the following result that includes a patient with the id 87a339d0-8cae-418e-89c7-8651e6aab3c6.

Query: https://r4.smarthealthit.org/Patient?_type=DiagnosticReport&_summary=true

Result: enter image description here

If I then query for the DiagnosticReport resources for this patient and try to filer for just the DiagnosticReport resources, I get a result that does not include any DiagnosticReport resources as shown below. Likewise, if I just retrieve the patient using https://r4.smarthealthit.org/Patient/87a339d0-8cae-418e-89c7-8651e6aab3c6, I get a response that does not include the text "DiagnosticReport" or "next" (in case the resource was paged).

How do I find the set of patients that have a DiagnosticReport on a FHIR server?

Query:

https://r4.smarthealthit.org/Patient/87a339d0-8cae-418e-89c7-8651e6aab3c6?_elements=DiagnosticReport

Result:

{
  "resourceType": "Patient",
  "id": "87a339d0-8cae-418e-89c7-8651e6aab3c6",
  "meta": {
    "versionId": "227",
    "lastUpdated": "2022-07-22T03:04:04.165-04:00",
    "tag": [
      {
        "system": "https://smarthealthit.org/tags",
        "code": "synthea-5-2019"
      }
    ]
  },
  "text": {
    "status": "generated",
    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Generated by <a href=\"https://github.com/synthetichealth/synthea\">Synthea</a>.Version identifier: v2.4.0-100-g26a4b936\n .   Person seed: 911708758626700213  Population seed: 1559319163074</div>"
  },
  "extension": [
    {
      "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
      "extension": [
        {
          "url": "ombCategory",
          "valueCoding": {
            "system": "urn:oid:2.16.840.1.113883.6.238",
            "code": "2106-3",
            "display": "White"
          }
        },
        {
          "url": "text",
          "valueString": "White"
        }
      ]
    },
    {
      "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
      "extension": [
        {
          "url": "ombCategory",
          "valueCoding": {
            "system": "urn:oid:2.16.840.1.113883.6.238",
            "code": "2186-5",
            "display": "Not Hispanic or Latino"
          }
        },
        {
          "url": "text",
          "valueString": "Not Hispanic or Latino"
        }
      ]
    },
    {
      "url": "http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName",
      "valueString": "Vonnie Kunde"
    },
    {
      "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex",
      "valueCode": "F"
    },
    {
      "url": "http://hl7.org/fhir/StructureDefinition/patient-birthPlace",
      "valueAddress": {
        "city": "Milton",
        "state": "Massachusetts",
        "country": "US"
      }
    },
    {
      "url": "http://synthetichealth.github.io/synthea/disability-adjusted-life-years",
      "valueDecimal": 26.256072397468692
    },
    {
      "url": "http://synthetichealth.github.io/synthea/quality-adjusted-life-years",
      "valueDecimal": 29.743927602531308
    }
  ],
  "identifier": [
    {
      "system": "https://github.com/synthetichealth/synthea",
      "value": "293ee354-f8ad-4345-b10c-759fdfdcc082"
    },
    {
      "type": {
        "coding": [
          {
            "system": "http://terminology.hl7.org/CodeSystem/v2-0203",
            "code": "MR",
            "display": "Medical Record Number"
          }
        ],
        "text": "Medical Record Number"
      },
      "system": "http://hospital.smarthealthit.org",
      "value": "293ee354-f8ad-4345-b10c-759fdfdcc082"
    },
    {
      "type": {
        "coding": [
          {
            "system": "http://terminology.hl7.org/CodeSystem/v2-0203",
            "code": "SS",
            "display": "Social Security Number"
          }
        ],
        "text": "Social Security Number"
      },
      "system": "http://hl7.org/fhir/sid/us-ssn",
      "value": "999-97-9098"
    },
    {
      "type": {
        "coding": [
          {
            "system": "http://terminology.hl7.org/CodeSystem/v2-0203",
            "code": "DL",
            "display": "Driver's License"
          }
        ],
        "text": "Driver's License"
      },
      "system": "urn:oid:2.16.840.1.113883.4.3.25",
      "value": "S99981121"
    },
    {
      "type": {
        "coding": [
          {
            "system": "http://terminology.hl7.org/CodeSystem/v2-0203",
            "code": "PPN",
            "display": "Passport Number"
          }
        ],
        "text": "Passport Number"
      },
      "system": "http://standardhealthrecord.org/fhir/StructureDefinition/passportNumber",
      "value": "X1974835X"
    }
  ],
  "name": [
    {
      "use": "official",
      "family": "Kshlerin",
      "given": [
        "Danae"
      ],
      "prefix": [
        "Mrs."
      ]
    },
    {
      "use": "maiden",
      "family": "Graham",
      "given": [
        "Danae"
      ],
      "prefix": [
        "Mrs."
      ]
    }
  ],
  "telecom": [
    {
      "system": "phone",
      "value": "555-182-4285",
      "use": "home"
    }
  ],
  "gender": "female",
  "birthDate": "1964-05-13",
  "address": [
    {
      "extension": [
        {
          "url": "http://hl7.org/fhir/StructureDefinition/geolocation",
          "extension": [
            {
              "url": "latitude",
              "valueDecimal": 42.50128
            },
            {
              "url": "longitude",
              "valueDecimal": -70.897502
            }
          ]
        }
      ],
      "line": [
        "662 Ullrich Path Suite 61"
      ],
      "city": "Salem",
      "state": "Massachusetts",
      "postalCode": "01907",
      "country": "US"
    }
  ],
  "maritalStatus": {
    "coding": [
      {
        "system": "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus",
        "code": "M",
        "display": "M"
      }
    ],
    "text": "M"
  },
  "multipleBirthBoolean": false,
  "communication": [
    {
      "language": {
        "coding": [
          {
            "system": "urn:ietf:bcp:47",
            "code": "en-US",
            "display": "English"
          }
        ],
        "text": "English"
      }
    }
  ]
}

---EDIT-----------------------

I'm not seeing the patient id I originally used as an example now (the data could be paged and the order not consistent so it might be on a subsequent page).

This patient ID is coming up and gives the same behavior: 87a339d0-8cae-418e-89c7-8651e6aab3c6

The following query sometimes (often) includes the patient 87a339d0-8cae-418e-89c7-8651e6aab3c6:

https://r4.smarthealthit.org/Patient?_type=DiagnosticReport&_summary=true

The following query response contains neither the text "diag" nor "next"

https://r4.smarthealthit.org/Patient/87a339d0-8cae-418e-89c7-8651e6aab3c6?_elements=DiagnosticReport

The following query response contains neither the text "diag" nor "next"

https://r4.smarthealthit.org/Patient/87a339d0-8cae-418e-89c7-8651e6aab3c6

--- SECOND EDIT -------------------------

Not finding the DiagnosticReport in the Patient resource was just me being forgetful. You need to use the $everything locator as in:

https://r4.smarthealthit.org/Patient/87a339d0-8cae-418e-89c7-8651e6aab3c6/$everything

This does contain a "next" link.

I haven't yet confirmed that you eventually get to the DianosticReport resources using the next links (it seems to time out for the link below).

https://r4.smarthealthit.org/?_getpages=28d6d4cb-7f1e-4049-9cec-d3f44fba9dbf&_getpagesoffset=150&_count=50&_pretty=true&_bundletype=searchset

enter image description here

---THIRD EDIT --------------------------------

This patient can be used to confirm a patient with a DiagnosticReport exists:

d78af07c-9cb9-4f31-9b11-c45a28f2eec8

This url gives the first page of the patient that has a next link: https://r4.smarthealthit.org/Patient/d78af07c-9cb9-4f31-9b11-c45a28f2eec8/$everything

This is the next link that gives the DiagnosticReport:

https://r4.smarthealthit.org/?_getpages=483b5a20-60e6-4007-8b63-3f7bbd366b18&_getpagesoffset=50&_count=50&_pretty=true&_bundletype=searchset

Here is a DiagnosticReport from the response.

     "resource": {
    "resourceType": "DiagnosticReport",
    "id": "ca42703d-054c-4fc5-aaa5-c9d4f9688e89",
    "meta": {
      "versionId": "4",
      "lastUpdated": "2021-04-06T03:13:59.601-04:00",
      "tag": [
        {
          "system": "https://smarthealthit.org/tags",
          "code": "synthea-5-2019"
        }
      ]
    },
    "status": "final",
    "category": [
      {
        "coding": [
          {
            "system": "http://terminology.hl7.org/CodeSystem/v2-0074",
            "code": "LAB",
            "display": "Laboratory"
          }
        ]
      }
    ],
    "code": {
      "coding": [
        {
          "system": "http://loinc.org",
          "code": "57698-3",
          "display": "Lipid Panel"
        }
      ],
      "text": "Lipid Panel"
    },
    "subject": {
      "reference": "Patient/d78af07c-9cb9-4f31-9b11-c45a28f2eec8"
    },
    "encounter": {
      "reference": "Encounter/2e0cc97b-c879-4762-bb5c-7127e44d7daa"
    },
    "effectiveDateTime": "2018-09-17T15:29:24+00:00",
    "issued": "2018-09-17T15:29:24.181+00:00",
    "result": [
      {
        "reference": "Observation/b512ea5d-c4c2-49e4-9eb1-30b2579136c4",
        "display": "Total Cholesterol"
      },
      {
        "reference": "Observation/3acb284d-e861-4db2-bbbc-b1522129df3c",
        "display": "Triglycerides"
      },
      {
        "reference": "Observation/9d3359e5-58e7-4c3c-8cfd-8cb6397dbcf7",
        "display": "Low Density Lipoprotein Cholesterol"
      },
      {
        "reference": "Observation/a708a2a4-8d9a-4869-a432-c5f09a46e67f",
        "display": "High Density Lipoprotein Cholesterol"
      }
    ]
  },

Solution

  • For a list of patients having a DiagnosticReport perhaps you could just get a list of all DiagnosticReports because this will contain the references to the patients for each of the DiagnosticReport found.

    To do so you can use the query:

    https://r4.smarthealthit.org/DiagnosticReport?_summary=true
    

    In the resultset, you will see references to patients e.g.

    "subject": {
          "reference": "Patient/15661112-796c-460c-bf7a-6b297e33f113"
        },
    

    If you already knew the patient id e.g. 87a339d0-8cae-418e-89c7-8651e6aab3c6, you could just do:

    https://r4.smarthealthit.org/DiagnosticReport?subject=87a339d0-8cae-418e-89c7-8651e6aab3c6
    
    • RE: _type parameter

    Just a note on what you tried so far, the query using _type parameters is not quite right because you use type when query against the base endpoint i.e. without specifying the any type, so:

    Query: https://r4.smarthealthit.org/Patient?_type=DiagnosticReport&_summary=true

    Should actually have been as below, without the Patient type in the query:

    Query: https://r4.smarthealthit.org?_type=DiagnosticReport&_summary=true

    Read more about the _type parameter here: https://www.hl7.org/fhir/search.html#_type

    • RE: _elements parameter

    Also, the _elements parameter is not meant for resources but for specifying base elements defined in the resource. Your query that has _elements=DiagnosticReport is not correct because the is no such element on the Patient resource, hence why you may be getting results that are not consistent.

    Hope that helps?