This wiki has undergone a migration to Confluence found Here

Laboratory Results

From HL7 Argonaut Project Wiki
Revision as of 00:53, 29 March 2016 by Eric Haas (talk | contribs) (Created page with "Back to Argonaut Implementation Guide ==Introduction== The Argonaut Vitals Signs guide provides the API documentation for searching and fetching Vital...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Back to Argonaut Implementation Guide

Introduction

The Argonaut Vitals Signs guide provides the API documentation for searching and fetching Vitals Signs. It is based on the Data Access Framework (DAF) Laboratory Results and draws requirements from Argonaut Sprint 7. The search criteria provided in the Quick Start are intended to support the 2015 Edition ONC Certification criterion Data Category Request 170.315(g)(8).

Argonaut Success Criteria

Clients

  • A client has connected to a server and fetched all of a patient's vital signs listed in the table below using GET [base]/Observation?patient=[id]&category=vital-signs.
  • A client has connected to a server and fetched any of a patient's vital signs listed in the table below using GET [base]/Observation?patient=[id]&code=[vital sign LOINC].

Servers

  • A server is capable of returning all of a patient's vital signs listed in the table and that it supports using GET [base]/Observation?patient=[id]&category=vital-signs.
  • A server is capable of returning any of a patient's vital signs listed in the table and that it supports using GET [base]/Observation?patient=[id]&code=[vital sign LOINC code]
  • A server has ensured that every API request includes a valid Authorization token, supplied via:Authorization: Bearer {server-specific-token-here}
  • A server has rejected any unauthorized requests by returning an HTTP 401 Unauthorized response code.

Mandatory Data Elements

The table below identifies the required LOINC observation code and corresponding UCUM units of measure codes. The Argonaut profile does not make the presence or absence of any of these mandatory, except that if you have a blood pressure observation, you must have both a systolic and a diastolic component, though one or both may have dataAbsentReason instead of a value. Other profiles outside Argonaut may make rules about which vital sign must be present as part of a panel.

The following data-elements in the Observation resource are mandatory (i.e data MUST be present). These are presented below in simple human-readable explanation and a more thorough summary of the requirements. Refer to the table for additional quidance and examples for each vital sign.


Each Observation must have:

  • a patient
  • a time indicating when the measurement was taken
  • a LOINC code which tells you what is being measured and is taken from the "LOINC Code" column in the table below.
    • note: additional codes that translate or map to these are allowed - e.g. method specific LOINC Codes, SNOMED CT concepts, system specific codes
  • a numeric result value and standard UCUM unit which is taken from the "LOINC Code" column in the table below.
    • note: if there is no numeric result then you have to supply a reason
  • a status
  • a category code of 'vital-signs'

Laboratory Results Table

Complete Summary of the Mandatory Requirements

  1. One status in Observation.status
  2. One category in Observation.category which must have:
  3. One code in Observation.code which must have
    • a fixed Observation.code.coding.system="http://loinc.org"
    • a LOINC code in Observation.code.coding.code taken from "LOINC Code" column in the table
    • Other additional codes are allowed - e.g. method specific LOINC Codes, SNOMED CT concepts, system specific codes. All codes SHALL have an system value
  4. Either one Observation.valueQuantity or, if there is no value, one code in Observation.DataAbsentReason (Note: See the comments in the table for exceptions)
    • Each Observation.valueQuantity must have:
      • One numeric value in Observation.valueQuantity.value
      • a fixed Observation.valueQuantity.system="http://unitsofmeasure.org"
      • a UCUM unit code in Observation.valueQuantity.code taken from the "Units" column in the table
    • Observation.DataAbsentReason is bound to Observation Value Absent Reason Value set (Code set)
  5. When using a panel code to group component observations (Note: See the comments regarding blood pressure in the table), one or more Observation.component.code each of which must have:
    • a fixed Observation.component.code.coding.system="http://loinc.org"
    • a LOINC code in Observation.component.code.coding.code taken from the column labeled "LOINC code" in the table
  6. Either one Observation.component.valueQuantity or, if there is no value, one code in Observation.component.DataAbsentReason
    • Each Observation.component.valueQuantity must have:
      • One numeric value in Observation.component.valueQuantity.value
      • a fixed Observation.component.valueQuantity.system="http://unitsofmeasure.org"
      • a UCUM unit code in Observation.component.valueQuantity.code taken taken from the column labeled "Units" in the table and from the row which corresponds to the LOINC code in Observation.component.code.coding.code
    • Observation.component.DataAbsentReason is bound to Observation Value Absent Reason Value set (Code set)
  7. When using a panel code to group observations, one or more reference to Observations in Observation.related.target(Note: See the comments for Laboratory Results in the table)
    • a fixed Observation.related.type="has-member"
  8. One patient in Observation.subject
  9. A date and time in effectiveDateTime or effectivePeriod

Quick Start

Below is a quick overview of the required search and read operations

GET [base]/Observation?patient=[id]&category=vital-signs

Support: Mandatory to support search by category code.

Implementation Notes: Search based on vital sign category code. This fetches a bundle of all Observation resources with category 'vital-signs' for the specified patient (how to search by reference) and (how to search by token).

Response Class:

  • (Status 200): successful operation
  • (Status 400): invalid parameter
  • (Status 401/4xx): unauthorized request
  • (Status 403): insufficient scope

Example:

[GET https://fhir-open-api-dstu2.smarthealthit.org/Observation?patient=1186747&category=vital-signs]


GET [base]/Observation?patient=[id]&code=[vital sign LOINC]

Support: Mandatory to support search by vital sign LOINCs listed above.

Implementation Notes: Search based on vital sign LOINC code. This fetches a bundle of all Observation resources for a specific vital sign listed in the table above for the specified patient (how to search by reference) and (how to search by token).

Response Class:

  • (Status 200): successful operation
  • (Status 400): invalid parameter
  • (Status 401/4xx): unauthorized request
  • (Status 403): insufficient scope

Example:)

Search for all heart rate observations for a patient:
[GET https://fhir-open-api-dstu2.smarthealthit.org/Observation?patient=1186747&code=8867-4]

GET [base]/Observation?patient=[id]&code=[vital sign1 LOINC, vital sign2 LOINC, etc]

Support: Mandatory to support search by multiple vital sign LOINCs listed above. .

Implementation Notes: Search based on multiple vital sign LOINC codes. This fetches a bundle of all Observation resources for specific vital signs listed in the table above for the specified patient (how to search by reference) and (how to search by token) and (how to search for multiple values)

Response Class:

  • (Status 200): successful operation
  • (Status 400): invalid parameter
  • (Status 401/4xx): unauthorized request
  • (Status 403): insufficient scope

Example:

Search for all heart rate, respiratory rate and blood pressure observations for a patient
[GET https://fhir-open-api-dstu2.smarthealthit.org/Observation?patient=1186747&code=8867-4,9279-1,55284-4]

GET [base]/Observation?patient=[id]&category=vital-signs&date=[eq|ne|lt|gt|geyyyy-mm-dd]

Support: Should support search by category code and date

Implementation Notes: Search based on vital sign category code and date. This fetches a bundle of all Observation resources with category 'vital-signs' for the specified patient for a specified time period (how to search by reference)and (how to search by token) and (how to search by date).

Response Class:

  • (Status 200): successful operation
  • (Status 400): invalid parameter
  • (Status 401/4xx): unauthorized request
  • (Status 403): insufficient scope

Example:

Find all the vital signs after 2013-03-14
[GET http://fhir2.healthintersections.com.au/open/Observation?patient=555580&category=vital-signs&date=ge2015-01-14]

Open Issues

The following issues have been identified:

  1. whether success criteria should include support of fetching client based on panel code and individual vital codes
  2. whether to include date search in quick start or just stick to the mandatory stuff
  3. What to do if:
    • no units provided
    • wrong (not-metric) units
  4. DAF Laboratory Results does not currently require Observation.category.
  5. Argonaut does not require identifier element (DAF does).


Resources

Formalized testing with test scripts and objective results reporting is available through the participation of AEGIS and MITRE (Crucible). The testscript provided can be used to test servers: [todo]

References



Back to Argonaut Implementation Guide