Da Vinci Clinical Data Exchange (CDex)
2.0.0 - STU2 United States of America flag

This page is part of the Da Vinci Clinical Documentation Exchange (v2.0.0: STU2) based on FHIR R4. This is the current published version. For a full list of available versions, see the Directory of published versions

Direct Query

Page standards status: Informative

Introduction

For Direct Query, the Data Consumer directly queries the Data Source for specific data using the standard FHIR RESTful search. The base FHIR specification and the Da Vinci HRex Implementation Guide document this interaction. Refer to the US Core Implementation guide for accessing the set of health data classes and data elements defined by the ONC United States Core Data for Interoperability (USCDI).

Benefits

  • “Out of the Box” FHIR transaction
  • Widely implemented
  • Simplest workflow
  • Authorization/Authentication protocols established
  • No human intervention is needed

Sequence Diagram

The sequence diagram in Figure 6 below outlines a successful interaction between the Data Consumer and Data Source to query and retrieve the requested data using a direct query:

Figure 6
search-sequencediagram.svg

Discovery of Patient FHIR IDs

In addition to using a patient business identifier such as an MRN or Member ID, the FHIR Patient.id is often a prerequisite to performing FHIR RESTful Direct Queries and other transactions described in this guide. However, there is no requirement that the requester knows the FHIR Patient.id in advance of the exchange. This section describes the recommended methods to determine the FHIR Patient.id on the server.

  1. Performing the Patient Match operation by providing sufficient demographic information to match a single patient. CDex Data Source servers SHOULD support the patient match operation and declare it in their CapabilityStatement.

  2. Search the Patient resource using a combination of identifiers known by the Data Consumer. For example, a Payer may use a member_id and patient demographics.

    `Get /Patient?identifier=[member_id]&birthdate=[date]&name=[name]&gender=[gender]`
    

    CDex Data Source servers SHALL support resolving logical identifiers for the Patient resource.

Direct Query Transaction Scenarios

The following example transactions show scenarios of using direct query to get clinical data from a Data Source(HIT).

Scenario 1

Payer A Seeks Insured Person/Patient B’s Active Conditions from Provider C to support a claims audit.

Preconditions and Assumptions:

  • Payer A is authorized and has the appropriate scopes to access the health records of Patient B from Provider C using FHIR RESTful queries
  • Payer A knows the FHIR id of the Patient resource for Patient B
  • Payer A knows the appropriate codes for searching for active conditions

Following the guidance in US Core, a search for all active conditions uses the combination of the patient and clinical-status search parameters:

GET [base]/Condition?patient=[FHIR id]&clinical-status=active,recurrance,remission

Request

GET [base]/Condition?patient=06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b&clinical-status=active,recurrance,remission

Request Headers

Accept: application/fhir+json
Content-Type: application/fhir+json
...(other headers)

Response Headers

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Fri, 23 Oct 2020 04:54:56 GMT
Content-Type: application/fhir+json;charset=utf-8
...(other headers)

Response Body

{
  "resourceType": "Bundle",
  "id": "d88e2910-3c95-469d-b1f4-ab5553b471fb",
  "meta": {
    "lastUpdated": "2020-10-23T04:54:56.048+00:00"
  },
  "type": "searchset",
  "total": 1,
  "link": [ {
    "relation": "self",
    "url": "http://hapi.fhir.org/baseR4/Condition?patient=06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b&clinical-status=active,recurrance,remission"
  } ],
  "entry": [ {
    "fullUrl": "http://hapi.fhir.org/baseR4/Condition/4ac41715-fcbd-421c-8796-9b2c9706dd3f",
    "resource": {
      "resourceType": "Condition",
      "id": "4ac41715-fcbd-421c-8796-9b2c9706dd3f",
      "meta": {
        "versionId": "10",
        "lastUpdated": "2020-04-28T20:28:00.008+00:00",
        "source": "#cabiJIK51sD2iz4N",
        "profile": [ "http://hl7.org/fhir/us/core/StructureDefinition/us-core-condition" ]
      },
      "clinicalStatus": {
        "coding": [ {
          "system": "http://terminology.hl7.org/CodeSystem/condition-clinical",
          "code": "active"
        } ]
      },
      "verificationStatus": {
        "coding": [ {
          "system": "http://terminology.hl7.org/CodeSystem/condition-ver-status",
          "code": "confirmed"
        } ]
      },
      "category": [ {
        "coding": [ {
          "system": "http://terminology.hl7.org/CodeSystem/condition-category",
          "code": "encounter-diagnosis",
          "display": "Encounter Diagnosis"
        } ]
      } ],
      "code": {
        "coding": [ {
          "system": "http://snomed.info/sct",
          "code": "1234",
          "display": "Examplitis"
        } ],
        "text": "Examplitis"
      },
      "subject": {
        "reference": "Patient/06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b"
      },
      "encounter": {
        "reference": "Encounter/5fe62cd5-bfcf-4d3b-a1e9-80d6f75d6f82"
      },
      "onsetDateTime": "2018-10-21T21:22:15-07:00",
      "recordedDate": "2018-10-21T21:22:15-07:00"
    },
    "search": {
      "mode": "match"
    }
  } ]
}



Scenario 2

Payer A Seeks Insured Person/Patient B’s glycated hemoglobin (HbA1c) test results after 2020-01-01 from Provider C for Quality reporting requirements and quality care scoring.

Preconditions and Assumptions:

  • Payer A is authorized and has the appropriate scopes to access the health records of Patient B from Provider C using FHIR RESTful Queries
  • Payer A knows the FHIR id of the Patient resource for Patient B
  • Payer A knows the appropriate LOINC codes for searching for HbA1c test results (e.g., 4548-5 Hemoglobin A1c/Hemoglobin.total in Blood)

Following the guidance in US Core searches for all HbA1c test results by a date range using the combination of the patient and code and date search parameters:

GET [base]/Observation?patient=[FHIR id]&code=[code]&date=gt[date]

Request

GET [base]/Observation?patient=06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b&code=4548-4&date=gt2020-01-01

Request Headers

Accept: application/fhir+json
Content-Type: application/fhir+json
...(other headers)

Response Headers

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Fri, 23 Oct 2020 18:22:45 GMT
Content-Type: application/fhir+json;charset=utf-8
...(other headers)

Response Body

{
  "resourceType": "Bundle",
  "id": "3d4fdbbe-b73c-4c9f-89a0-4662506c4d25",
  "meta": {
    "lastUpdated": "2020-10-23T18:22:45.274+00:00"
  },
  "type": "searchset",
  "total": 4,
  "link": [ {
    "relation": "self",
    "url": "http://hapi.fhir.org/baseR4/Observation?code=4548-4&date=gt2020-01-01&patient=06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b"
  } ],
  "entry": [ {
    "fullUrl": "http://hapi.fhir.org/baseR4/Observation/cdex-2020-01-23-hba1c-example",
    "resource": {
      "resourceType": "Observation",
      "id": "cdex-2020-01-23-hba1c-example",
      "meta": {
        "versionId": "1",
        "lastUpdated": "2020-10-23T18:18:25.154+00:00",
        "source": "#ObC36PK40pQM6y5M",
        "profile": [ "http://hl7.org/fhir/us/core/StructureDefinition/us-core-observation-lab" ]
      },
      "status": "final",
      "category": [ {
        "coding": [ {
          "system": "http://terminology.hl7.org/CodeSystem/observation-category",
          "code": "laboratory",
          "display": "Laboratory"
        } ],
        "text": "Laboratory"
      } ],
      "code": {
        "coding": [ {
          "system": "http://loinc.org",
          "code": "4548-4",
          "display": "Hemoglobin A1c/Hemoglobin.total in Blood"
        }, {
          "system": "http://www.ama-assn.org/go/cpt",
          "code": "83036",
          "display": "Hemoglobin; glycosylated (A1c)"
        }, {
          "system": "http://example.org/lab-results",
          "code": "HBA1C",
          "display": "Glycated hemoglobin (HbA1c)"
        } ],
        "text": "glycated hemoglobin (HbA1c)"
      },
      "subject": {
        "reference": "Patient/06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b",
        "display": "Elden718 Halvorson124"
      },
      "effectiveDateTime": "2020-01-23T10:21:08-07:00",
      "valueQuantity": {
        "value": 6.0,
        "unit": "%",
        "system": "http://unitsofmeasure.org/",
        "code": "%"
      }
    },
    "search": {
      "mode": "match"
    }
  }, {
    "fullUrl": "http://hapi.fhir.org/baseR4/Observation/cdex-2020-04-23-hba1c-example",
    "resource": {
      "resourceType": "Observation",
      "id": "cdex-2020-04-23-hba1c-example",
      "meta": {
        "versionId": "1",
        "lastUpdated": "2020-10-23T18:17:49.885+00:00",
        "source": "#n7aoEe76sAQUBlns",
        "profile": [ "http://hl7.org/fhir/us/core/StructureDefinition/us-core-observation-lab" ]
      },
      "status": "final",
      "category": [ {
        "coding": [ {
          "system": "http://terminology.hl7.org/CodeSystem/observation-category",
          "code": "laboratory",
          "display": "Laboratory"
        } ],
        "text": "Laboratory"
      } ],
      "code": {
        "coding": [ {
          "system": "http://loinc.org",
          "code": "4548-4",
          "display": "Hemoglobin A1c/Hemoglobin.total in Blood"
        }, {
          "system": "http://www.ama-assn.org/go/cpt",
          "code": "83036",
          "display": "Hemoglobin; glycosylated (A1c)"
        }, {
          "system": "http://example.org/lab-results",
          "code": "HBA1C",
          "display": "Glycated hemoglobin (HbA1c)"
        } ],
        "text": "glycated hemoglobin (HbA1c)"
      },
      "subject": {
        "reference": "Patient/06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b",
        "display": "Elden718 Halvorson124"
      },
      "effectiveDateTime": "2020-04-23T10:21:08-07:00",
      "valueQuantity": {
        "value": 7.2,
        "unit": "%",
        "system": "http://unitsofmeasure.org/",
        "code": "%"
      }
    },
    "search": {
      "mode": "match"
    }
  }, {
    "fullUrl": "http://hapi.fhir.org/baseR4/Observation/cdex-2020-10-23-hba1c-example",
    "resource": {
      "resourceType": "Observation",
      "id": "cdex-2020-10-23-hba1c-example",
      "meta": {
        "versionId": "1",
        "lastUpdated": "2020-10-23T18:16:54.549+00:00",
        "source": "#fuIEQP7SJ9NfAlPN",
        "profile": [ "http://hl7.org/fhir/us/core/StructureDefinition/us-core-observation-lab" ]
      },
      "status": "final",
      "category": [ {
        "coding": [ {
          "system": "http://terminology.hl7.org/CodeSystem/observation-category",
          "code": "laboratory",
          "display": "Laboratory"
        } ],
        "text": "Laboratory"
      } ],
      "code": {
        "coding": [ {
          "system": "http://loinc.org",
          "code": "4548-4",
          "display": "Hemoglobin A1c/Hemoglobin.total in Blood"
        }, {
          "system": "http://www.ama-assn.org/go/cpt",
          "code": "83036",
          "display": "Hemoglobin; glycosylated (A1c)"
        }, {
          "system": "http://example.org/lab-results",
          "code": "HBA1C",
          "display": "Glycated hemoglobin (HbA1c)"
        } ],
        "text": "glycated hemoglobin (HbA1c)"
      },
      "subject": {
        "reference": "Patient/06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b",
        "display": "Elden718 Halvorson124"
      },
      "effectiveDateTime": "2020-10-23T10:21:08-07:00",
      "valueQuantity": {
        "value": 7.0,
        "unit": "%",
        "system": "http://unitsofmeasure.org/",
        "code": "%"
      }
    },
    "search": {
      "mode": "match"
    }
  }, {
    "fullUrl": "http://hapi.fhir.org/baseR4/Observation/cdex-2020-07-23-hba1c-example",
    "resource": {
      "resourceType": "Observation",
      "id": "cdex-2020-07-23-hba1c-example",
      "meta": {
        "versionId": "1",
        "lastUpdated": "2020-10-23T18:16:17.687+00:00",
        "source": "#X2hXINwPYymTmEJc",
        "profile": [ "http://hl7.org/fhir/us/core/StructureDefinition/us-core-observation-lab" ]
      },
      "status": "final",
      "category": [ {
        "coding": [ {
          "system": "http://terminology.hl7.org/CodeSystem/observation-category",
          "code": "laboratory",
          "display": "Laboratory"
        } ],
        "text": "Laboratory"
      } ],
      "code": {
        "coding": [ {
          "system": "http://loinc.org",
          "code": "4548-4",
          "display": "Hemoglobin A1c/Hemoglobin.total in Blood"
        }, {
          "system": "http://www.ama-assn.org/go/cpt",
          "code": "83036",
          "display": "Hemoglobin; glycosylated (A1c)"
        }, {
          "system": "http://example.org/lab-results",
          "code": "HBA1C",
          "display": "Glycated hemoglobin (HbA1c)"
        } ],
        "text": "glycated hemoglobin (HbA1c)"
      },
      "subject": {
        "reference": "Patient/06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b",
        "display": "Elden718 Halvorson124"
      },
      "effectiveDateTime": "2020-07-23T10:21:08-07:00",
      "valueQuantity": {
        "value": 7.0,
        "unit": "%",
        "system": "http://unitsofmeasure.org/",
        "code": "%"
      }
    },
    "search": {
      "mode": "match"
    }
  } ]
}



Scenario 3

Payer A Seeks Insured Person/Patient B’s latest Progress notes from Provider C to support a claim submission.

Preconditions and Assumptions:

  • Payer A is authorized and has the appropriate scopes to access the health records of Patient B from Provider C using FHIR RESTful Queries
  • Payer A knows the FHIR id of the Patient resource for Patient B
  • Payer A knows the appropriate LOINC codes for searching for Progress note CCDA documents (11506-3 History & Physical Note)
  • Provider C supports the standard FHIR search parameters, _search and _count (if this is not the case, then the Payer can search using the date parameter and select the most recent Progress notes for the query results.)

Getting the latest Progress note is typically a two-step process:

  1. Query DocumentReference, which references the actual notes file
  2. Fetch the notes file

Following the US Core Clinical Notes Guidance section, the Payer searches for the Progress note C-CDA documents using the combination of the patient and type search parameters. In addition, the combination of _sort and _count is used to return only the latest resource that meets particular criteria. For example, with _sort=-period (sort by the date parameter in descending order) and _count=1, the query returns the most current matching resource.

GET [base]/DocumentReference?patient=[FHIR id]&type=[type-code]&_sort=-period&_count=1

The DocumentReference.content.attachment.url element references the actual CCDA document, and the Payer fetches it using a RESTful GET.

GET [base]/[url]

Step 1 - Search for DocumentReference

Request

GET [base]/DocumentReference?patient=06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b&type=34117-2&_sort=-period&_count=1`

Request Headers

Accept: application/fhir+json
Content-Type: application/fhir+json
...(other headers)

Response Headers

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Fri, 23 Oct 2020 18:22:45 GMT
Content-Type: application/fhir+json;charset=utf-8
...(other headers)

Response Body

{
  "resourceType": "Bundle",
  "id": "041a1b5c-87b7-482c-8c80-637965d2d4bb",
  "meta": {
    "lastUpdated": "2020-10-23T20:29:25.663+00:00"
  },
  "type": "searchset",
  "total": 1,
  "link": [ {
    "relation": "self",
    "url": "http://hapi.fhir.org/baseR4/DocumentReference?_count=1&_sort=-period&patient=06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b&type=34117-2"
  } ],
  "entry": [ {
    "fullUrl": "http://hapi.fhir.org/baseR4/DocumentReference/cdex-HP-example1",
    "resource": {
      "resourceType": "DocumentReference",
      "id": "cdex-HP-example1",
      "meta": {
        "versionId": "1",
        "lastUpdated": "2020-10-23T20:27:18.976+00:00",
        "source": "#XOrE2IwfLwl5C1RV",
        "profile": [ "http://hl7.org/fhir/us/core/StructureDefinition/us-core-documentreference" ]
      },
      "identifier": [ {
        "system": "urn:ietf:rfc:3986",
        "value": "urn:oid:2.16.840.1.113883.19.5.99999.2"
      } ],
      "status": "current",
      "type": {
        "coding": [ {
          "system": "http://loinc.org",
          "code": "34117-2",
          "display": "History & Physical Note"
        } ],
        "text": "History & Physical Note"
      },
      "category": [ {
        "coding": [ {
          "system": "http://hl7.org/fhir/us/core/CodeSystem/us-core-documentreference-category",
          "code": "clinical-note",
          "display": "Clinical Note"
        } ],
        "text": "Clinical Note"
      } ],
      "subject": {
        "reference": "Patient/06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b",
        "display": "Elden718 Halvorson124"
      },
      "date": "2020-10-23T10:21:08-07:00",
      "author": [ {
        "reference": "Practitioner/0000016f-57cb-cdac-0000-00000000014a",
        "display": "Janeth814 Jakubowski832, MD"
      } ],
      "description": "Pulmonology clinic acute visit",
      "content": [ {
        "attachment": {
          "contentType": "text/plain",
          "url": "/Binary/cdex-example-hpnote",
          "title": "Uri where the data can be found: [base]/Binary/1-note"
        },
        "format": {
          "system": "urn:oid:1.3.6.1.4.1.19376.1.2.3",
          "code": "urn:hl7-org:sdwg:ccda-structuredBody:2.1",
          "display": "Documents following C-CDA constraints using a structured body"
        }
      } ],
      "context": {
        "period": {
          "start": "2020-10-23T10:21:06-07:00",
          "end": "2020-10-23T10:21:08-07:00"
        }
      }
    },
    "search": {
      "mode": "match"
    }
  } ]
}

Step 2 - Fetch Document

Request

GET [base]/Binary/cdex-example-hpnote`

Request Headers

...(other headers)

Response Headers

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Fri, 23 Oct 2020 22:02:15 GMT
Content-Type: application/pdf
...(other headers)

Response Body = PDF


Provenance

To the extent that the Data Source keeps a record of the provenance of the data, the FHIR Provenance Resource can be requested as documented on US Core’s Basic Provenance page. When returning provenance, they should use the HRex Provenance Profile. The following example illustrates this transaction.

Example of Direct Query Response Including Provenance

This example is the same as Scenario 1 above, except that it includes the corresponding Provenance records.

GET [base]/Condition?patient=[FHIR id]&clinical-status=active,recurrance,remission&_revinclude=Provenance:target

Request

GET [base]/Condition?patient=06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b&clinical-status=active,recurrance,remission&_revinclude=Provenance:target

Request Headers

Accept: application/fhir+json
Content-Type: application/fhir+json
...(other headers)

Response Headers

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Fri, 23 Oct 2020 04:54:56 GMT
Content-Type: application/fhir+json;charset=utf-8
...(other headers)

Response Body

{
  "resourceType": "Bundle",
  "id": "d88e2910-3c95-469d-b1f4-ab5553b471fb",
  "meta": {
    "lastUpdated": "2020-10-23T04:54:56.048+00:00"
  },
  "type": "searchset",
  "total": 1,
  "link": [
    {
      "relation": "self",
      "url": "http://hapi.fhir.org/baseR4/Condition?patient=06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b&clinical-status=active,recurrance,remission&_revinclude=Provenance:target"
    }
  ],
  "entry": [
    {
      "fullUrl": "http://hapi.fhir.org/baseR4/Condition/4ac41715-fcbd-421c-8796-9b2c9706dd3f",
      "resource": {
        "resourceType": "Condition",
        "id": "4ac41715-fcbd-421c-8796-9b2c9706dd3f",
        "meta": {
          "versionId": "10",
          "lastUpdated": "2020-04-28T20:28:00.008+00:00",
          "source": "#cabiJIK51sD2iz4N",
          "profile": [
            "http://hl7.org/fhir/us/core/StructureDefinition/us-core-condition"
          ]
        },
        "clinicalStatus": {
          "coding": [
            {
              "system": "http://terminology.hl7.org/CodeSystem/condition-clinical",
              "code": "active"
            }
          ]
        },
        "verificationStatus": {
          "coding": [
            {
              "system": "http://terminology.hl7.org/CodeSystem/condition-ver-status",
              "code": "confirmed"
            }
          ]
        },
        "category": [
          {
            "coding": [
              {
                "system": "http://terminology.hl7.org/CodeSystem/condition-category",
                "code": "encounter-diagnosis",
                "display": "Encounter Diagnosis"
              }
            ]
          }
        ],
        "code": {
          "coding": [
            {
              "system": "http://snomed.info/sct",
              "code": "1234",
              "display": "Examplitis"
            }
          ],
          "text": "Examplitis"
        },
        "subject": {
          "reference": "Patient/06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b"
        },
        "encounter": {
          "reference": "Encounter/5fe62cd5-bfcf-4d3b-a1e9-80d6f75d6f82"
        },
        "onsetDateTime": "2018-10-21T21:22:15-07:00",
        "recordedDate": "2018-10-21T21:22:15-07:00"
      },
      "search": {
        "mode": "match"
      }
    },
    {
      "fullUrl": "http://hapi.fhir.org/baseR4/Provenance/b2ce4584-b213-411b-bdc9-d515dc92eadf",
      "resource": {
        "resourceType": "Provenance",
        "id": "b2ce4584-b213-411b-bdc9-d515dc92eadf",
        "target": [
          {
            "reference": "Condition/4ac41715-fcbd-421c-8796-9b2c9706dd3f"
          }
        ],
        "recorded": "2018-10-21T21:22:15-07:00",
        "agent": [
          {
            "type": [
              {
                "coding": [
                  {
                    "system": "http://terminology.hl7.org/CodeSystem/provenance-participant-type",
                    "code": "author",
                    "display": "Author"
                  }
                ]
              }
            ],
            "who": {
              "reference": "Practitioner/Dr-Jones-12345"
            },
            "onBehalfOf": {
              "reference": "Organization/good-health-54321"
            }
          }
        ]
      },
      "search": {
        "mode": "include"
      }
    }
  ]
}



Signatures

This specification does not require signatures but supports the transmission of signatures if business agreements require them.

Some data consumers may require that the data they receive are signed. When signatures are required, the following general rules apply:

  • The signature representing the sending system is a system-level attestation by the sending organization that they supplied the information. It is a complete and accurate representation of the shareable information from that system, meeting the requested criteria. This signature does NOT attest that the information is accurate because the system can’t make that determination.*
  • The Bundle.signature element on the FHIR search set Bundle is used to exchange the signature.

* Consult with your Payer and your legal team for questions regarding legal liability associated with sharing and signing data.

The Data Consumer/Requester Requirements

  • The Data Consumer/Requester pre-negotiates with the Data Source/Responder whether electronic or digital signatures are required. If signatures are required, all search query response data will be signed by the sending organization.
  • The Data Consumer/Requester follows the documentation on the Signatures page for validating signatures.
    • If the signatures fail verification, the Data Consumer/Requester notifies the Data Source that the signature is invalid or absent. Currently, there is no standard way to communicate this, and it needs to be done “out of band”.

Data Source/Responder Requirements

  • If signatures are required, the Data Source/Responder returns a signed FHIR search set Bundle using the Bundle.signature element for the signature signed by the organization responding to the query.
  • The Data Source/Responder follows the documentation on the Signatures page for producing signatures.
  • As discussed in the What is Signed section, a signed search bundle could have entries within it that are individually signed as well. Therefore, if the Data Consumer incorrectly assumed there would be a signature (wet, electronic, or digital) on an individual returned object within the search set Bundle (e.g., CCDA, PDF, Image, CDA on FHIR ), they can re-request it using a Task-based request and specify that it be signed (see Signatures for Task Based Requests).

When signatures are required, the Data Consumer must use a FHIR RESTful search instead of FHIR RESTful read. There is no CDex support for signatures on a FHIR RESTful read because it fetches a single instance of a resource instead of a Bundle. If the Data Consumer attempts to fetch a resource with a read and a signature is required, the Data Source/Responder SHALL return an HTTP 400 Bad Request and an OperationOutcome describing the business rule error. The following HTTP response and OperationOutcome illustrate this.

  HTTP/1.1 400 Bad Request
  [other headers]
  {
    "resourceType": "OperationOutcome",
    "id": "cdex-signed-read-response",
    "issue": [
  {
    "severity": "error",
    "code": "business-rule",
    "details": {
      "text": "signed FHIR RESTful read response is not supported."
    },
    "diagnostics": "Resubmit the request as a FHIR RESTful search'"
  }
    ]
  }

Example of Signed Direct Query Response

This example is the same as Scenario 1 above, except that it includes a digital signature. See the Signatures page for a detailed explanation of how the signature was created and verified.

Preconditions and Assumptions:

  • In addition to the Scenario 1 assumptions above, Payer A pre-negotiated with Provider B that direct query responses require digital signatures.

GET [base]/Condition?patient=[FHIR id]&clinical-status=active,recurrance,remission

Request

GET [base]/Condition?patient=06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b&clinical-status=active,recurrance,remission

Request Headers

Accept: application/fhir+json
Content-Type: application/fhir+json
...(other headers)

Response Headers

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Fri, 23 Oct 2020 04:54:56 GMT
Content-Type: application/fhir+json;charset=utf-8
...(other headers)

Response Body

{
    "resourceType": "Bundle",
    "id": "d88e2910-3c95-469d-b1f4-ab5553b471fb",
    "meta": {
        "lastUpdated": "2020-10-23T04:54:56.048+00:00"
    },
    "type": "searchset",
    "total": 1,
    "link": [
        {
            "relation": "self",
            "url": "http://hapi.fhir.org/baseR4/Condition?patient=06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b"
        }
    ],
    "entry": [
        {
            "fullUrl": "http://hapi.fhir.org/baseR4/Condition/4ac41715-fcbd-421c-8796-9b2c9706dd3f",
            "resource": {
                "resourceType": "Condition",
                "id": "4ac41715-fcbd-421c-8796-9b2c9706dd3f",
                "meta": {
                    "versionId": "10",
                    "lastUpdated": "2020-04-28T20:28:00.008+00:00",
                    "source": "#cabiJIK51sD2iz4N",
                    "profile": [
                        "http://hl7.org/fhir/us/core/StructureDefinition/us-core-condition"
                    ]
                },
                "clinicalStatus": {
                    "coding": [
                        {
                            "system": "http://terminology.hl7.org/CodeSystem/condition-clinical",
                            "code": "active"
                        }
                    ]
                },
                "verificationStatus": {
                    "coding": [
                        {
                            "system": "http://terminology.hl7.org/CodeSystem/condition-ver-status",
                            "code": "confirmed"
                        }
                    ]
                },
                "category": [
                    {
                        "coding": [
                            {
                                "system": "http://terminology.hl7.org/CodeSystem/condition-category",
                                "code": "encounter-diagnosis",
                                "display": "Encounter Diagnosis"
                            }
                        ]
                    }
                ],
                "code": {
                    "coding": [
                        {
                            "system": "http://snomed.info/sct",
                            "code": "1234",
                            "display": "Examplitis"
                        }
                    ],
                    "text": "Examplitis"
                },
                "subject": {
                    "reference": "Patient/06e1f0dd-5fbe-4480-9bb4-6b54ec02d31b"
                },
                "encounter": {
                    "reference": "Encounter/5fe62cd5-bfcf-4d3b-a1e9-80d6f75d6f82"
                },
                "onsetDateTime": "2018-10-21T21:22:15-07:00",
                "recordedDate": "2018-10-21T21:22:15-07:00"
            },
            "search": {
                "mode": "match"
            }
        }
    ],
    "signature": {
        "type": [
            {
                "system": "urn:iso-astm:E1762-95:2013",
                "code": "1.2.840.10065.1.12.1.5",
                "display": "Verification Signature"
            }
        ],
        "when": "2020-10-23T04:54:56.048+00:00",
        "who": {
            "reference": "Organization/123"
        },
        "data": "ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXQwZVNJNklsSlRJaXdpZEhsd0lqb2lTbGRVSWl3aWRYTmxJam9pYzJsbklpd2llRFZqSWpwYklrMUpTVVV6ZWtORFFUQmxaMEYzU1VKQlowbEtRVTlMUmxsMlRYZFNLM2xSVFVFd1IwTlRjVWRUU1dJelJGRkZRa04zVlVGTlNVZE9UVkZ6ZDBOUldVUldVVkZIUlhkS1ZsVjZSVlJOUWtWSFFURlZSVU5CZDB0Uk1rWnpZVmRhZG1OdE5YQlpWRVZUVFVKQlIwRXhWVVZDZDNkS1ZUSkdNV015Um5OaFdGSjJUVkpWZDBWM1dVUldVVkZMUkVGNFNWcFhSbk5rUjJoc1VrZEdNRmxVUlhoR2VrRldRbWRPVmtKQlRVMUVhMVo1WVZkTloxTkhSbWhqZVhkblVrWmFUazFUVlhkSmQxbEtTMjlhU1doMlkwNUJVV3RDUm1oYWJHRkhSbWhqTUVKdldsZEdjMlJIYUd4YVIwWXdXVlJGZFdJelNtNU5RalJZUkZSSmVFMVVRWGxPZWtVelRrUkpkMDVHYjFoRVZFbDVUVlJCZVUxcVJUTk9SRWwzVGtadmQyZFpNSGhEZWtGS1FtZE9Wa0pCV1ZSQmJGWlVUVkpOZDBWUldVUldVVkZKUkVGd1JGbFhlSEJhYlRsNVltMXNhRTFTU1hkRlFWbEVWbEZSU0VSQmJGUlpXRlo2V1ZkNGNHUkhPSGhHVkVGVVFtZE9Wa0pCYjAxRVJXaHNXVmQ0TUdGSFZrVlpXRkpvVFZSRldFMUNWVWRCTVZWRlFYZDNUMUpZU25CWmVVSkpXVmRHZWt4RFFrVldhekI0U2xSQmFrSm5hM0ZvYTJsSE9YY3dRa05SUlZkR2JWWnZXVmRHZWxGSGFHeFpWM2d3WVVkV2ExbFlVbWhOVXpWMlkyMWpkMmRuUjJsTlFUQkhRMU54UjFOSllqTkVVVVZDUVZGVlFVRTBTVUpxZDBGM1oyZEhTMEZ2U1VKblVVUndTMk5UYTI5QlRUWnpWekl4SzNaWFZHVkpWazlIZURFd1RWZGhjMUY1TjFaSWFXUTJlbmx4V0VGQ1RTdDZibVpDYmxobGJubFZNR294UmxSMlVHMVNaazlFYjA5RVdGWjFVRlYzUkc5dGFFTklhQ3RpWTJ4WE9VdE5NbTgxTmpOamVGSkxSWFpDYm1GSWNuTnFkelY1VG0xNFR6Vlpha1ZTWW1oMFNHUlJaWEZyZEdSM00xWlpSVkpTT1VodmVFeFBNMFpyYzNwU01qa3lTRlJDTkhoWE0zbFhiRll6WjFSclRWRnZlbEJUWTBwTFNETmlSemhRY1hFMlFWbFFTamRETkZsQ1NXeFZVMlJDVFZac00zRnVaVVZtWnpkbWRYaHBSbVpZYjJaa1ZGWnROM0pOYVdsSE4xZzVlalF6VUdacGJIRmhaV2x6Wm0xMFVuaEJiRkozUlU1WWNrZ3pUM1pQUkZCNVREQnlWRzVIT0VOellrRllXVlpKVFcxa1pFaGxORnBHT1hCc2FEazFjMm8wY0UxVWFFeDBZMHBZTDI4NVdFaE1hbWczUlcxYWVXZEtTRmRGVVhFMFVIZEdkMXBrYldKalptaERiVTl5T0RoSU9FSmlWWEoxTHpkV05ucGljMGN4VGpGRFYyeHVaR3hpVm5wdVRDc3pTVTFQY2pocldHRklZMkZ1Y1daamEyZEdWalJGY201bWFrWktjVEZQU1dGQmJYTk5hamcxZUUxcmFubFlUSGxqVEV3dmRUVnVNbTgyUW1jNU15OVZVbVp4ZFU5dlUwbEhUME5TTWpWRVlWcDZjSGN5YXpOek4yOUZPV1JOZDBWWFdIUm1XR2RaZEdneVlteHFlVFYwUmtnd1IycHdUMnQ0TURkcU4xcFVOVWh1ZUc1c2MwTkJkMFZCUVdGT1FVMUVOSGRFUVZsRVZsSXdWRUpCVlhkQmQwVkNMM3BCVEVKblRsWklVVGhGUWtGTlEwSmxRWGRKVVZsRVZsSXdVa0pDYjNkSFNVbFhaRE5rTTB4dGFHeFpWM2d3WVVkV2ExbFlVbWhoVnpWcVRHMU9kbUpVUVU1Q1oydHhhR3RwUnpsM01FSkJVWE5HUVVGUFEwRlpSVUZEZFUxVlRuRTVZWGtySzJVMVdVTTNVVVpQT1RSeVpucDRSMUZ1UmpOSGEyeGFUa0ZZYlVseU4xQldSMlJwUjFreVIxUjRMemxTZEVoRGQxUkxlbXRNSzNsMlMyOXFaVm81WkZaTE9IZHlSMVpwVW10UEwycFZlVm9yUzJOWFVtOXJWV3B6TlRsdVkwcEhVazFUVTFKNGRHVkRVWFZxZERSb1pqSXJMM0ZXSzJZeWMwMVJkRVZ5ZDFCRk16QjJZbkZTV1ZWT1RrNUNWa1ZSY0dGUmVDOWhZMHBFVlhZNWRqZHpha2hwU2tSeFdIZFJLM0o2YWprMWFVaEJTV0ZsUlVoeFJpOU5jekl5Y0RKaVpWcDFjWFpKVVV0bFRXd3JjM1pXY1VoMGFYVjZWMjVHTkZVMlZrbHRjR3R5TkdKSWJEZGxaMVk1U0Rac05sUXlVMDFyYWpaeFJGVTFaVGxPWnpCYWJFeFVkRzl6YzJoQ1RHMXZjRVkzWlRkSWVYSlVSVUZ0Wms5UVMxRmxNRVZuT1VVeWRYSjZlSEZDZFVjMU5HczFNRWN5U2pCR2FWQnpVVXBCYUVacFRrZDNVMmMwVXpOSWVWWkVSemQxWlV0a01FdzVNM2RMVDA1UFdVZDJUVXRwZWtOSVFpdHdTM1pGVFVwdldqaDVPWFZwUWl0SVJsaGpjRGxTWVVweFNqazNTSEJhVkVWMksyeHBRM0F5VUZOWWVtTkxNSEl5TlZOamVXcEdObVJNYjNWTE1sTkNNekI0UVhaS09IUkZOVGcwSzJweFVUWkRSMlZqVlRsWWFuWnNRV3AxU21SRGNrUmxWbEJ6YW10dU4wOVFXRWNyT0ZoYVZUZDZjVWhhVG0xWVdERlpXVFJJTlhKblJVbzBPR3h5VlhKUU0wazRVaUpkZlEuLlN4eW5HX25kcFRaT09TeHJnWXo4YWpPQlZnYmd4dmIwMjJBaUdqenA3dEVWdWVvZ3A5R18yY3FKZEtYSDQ4bzdVUGJNSVhvQk56UWtkRnRhX1ZRamh5V1paS2t4djBCVG5Ra0xpUElvcTYxYkYybEFvXzJZbzFCd3AtSFF0Z0dud3JNckdaaWNqMVZpajBpMG82YlZOT1RKamo4WWlhR0Z2RUZrbEMxazRIcTVYbHlwb2NrNjBjREV5Qll6cDdva2tER0RYV0dsZ1FCRFdZR0hjeHphR0Z3T0ZRNnhaWjRVeU5FeUN3M3RSLVVIcEJfNnJBNGhZWERVVkpPdU96TEJmaW9HRU55Q09OMEV5QVZUVlZselE2V1JJM1M2OS01WkVNSjFxLUk2aUUxd29YQUNHaVY3M2FJdVNKb2hXUnNlUEpHUXgwQlZ1eFlTVk5Yejh0bnJoU3NDa24xNk5ZbXJDN19zV1dZSTE2dGlLZ1d5d0ZyaThfeExycENfTGc0LVpMVTQwYml1cFhZVXE1STRIdzZQNkZVSzVabXp6aVRQNXdyQ09MdkVCWTlLT29NTE12d08ySW93M0pQcTFTUmFlRFdKMWxvYkdxaEZPcVRWbVRvWDNwZzYzTWktMFBrZnRGN0F0dVVSMTUwYUhjWjJaSE1SQl9WczN0MVllbHAz"
    }
}