This wiki has undergone a migration to Confluence found Here

Difference between revisions of "Laboratory Results"

From HL7 Argonaut Project Wiki
Jump to navigation Jump to search
 
(96 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
[[Implementation Guide|Back to Argonaut Implementation Guide]]
 
[[Implementation Guide|Back to Argonaut Implementation Guide]]
 +
 +
**********************PLEASE NOTE********************************
 +
This guide is no longer being actively maintained and updated.
 +
On January 1st 2017, This guide is being superseded by the online
 +
version of the Argonaut-DSTU2 Implemenation Guide.
 +
hosted at:  http://fhir.org/guides/argonaut
 +
The working CI build is avaible now at :
 +
http://build.fhir.org/ig/Healthedata1/Argo-DSTU2/  
 +
 
==Introduction==
 
==Introduction==
The Argonaut Laboratory Results guide provides the API documentation for searching and fetching Laboratory Results. This IG covers two resources -  Observation and DiagnosticReport. It is based on the [http://hl7.org/fhir/daf/observation-daf-results.html Data Access Framework (DAF) Laboratory Results] and draws requirements from  [https://github.com/argonautproject/implementation-program/wiki/Implementation-Sprint-6 Argonaut Sprint 6]. The search criteria provided in the [[#Quick_Start | Quick Start]] are intended to support the 2015 Edition ONC Certification criterion Data Category Request 170.315(g)(8). This IG covers two resources -  Observation and DiagnosticReport - It is split into two Sections.
+
The Argonaut Laboratory Results guide provides the API documentation for searching and fetching Laboratory Results. This IG covers two resources -  Observation and DiagnosticReport - because labaratory results are grouped and summarized using reports. This IG is based on the [http://hl7.org/fhir/daf/observation-daf-results.html Data Access Framework (DAF) Laboratory Results]. The search criteria provided in the [[#Quick_Start | Quick Start]] are intended to support the 2015 Edition ONC Certification criterion Data Category Request 170.315(g)(8).
  
==Argonaut Success Criteria==
+
==Minimum Requirements==
  
 
===Clients===
 
===Clients===
*A client has connected to a server and fetched all of a patient's laboratory diagnostic reports using [[#GET_.5Bbase.5D.2FDiagnosticReport.3Fpatient.3D.5Bid.5D.26category.3DLAB|GET [base]/DiagnosticReport?patient=[id]&category=LAB.]]
+
====DiagnosticReport====
*A client has connected to a server and fetched all of a patient's laboratory results listed in the table below using [[#GET_.5Bbase.5D.2FObservation.3Fpatient.3D.5Bid.5D.26category.3Dlaboratory|GET [base]/Observation?patient=[id]&category=laboratory.]]
+
*A client has connected to a server and fetched all of a patient's laboratory diagnostic reports by searching by category using [[#GET_.5Bbase.5D.2FDiagnosticReport.3Fpatient.3D.5Bid.5D.26category.3DLAB|GET [base]/DiagnosticReport?patient=[id]&category=LAB.]]
<!--
+
 
*A client has connected to a server and fetched any of a patient's laboratory diagnostic reports using GET [base]/DiagnosticReport?patient=[id]&code=[lab result code].
+
*A client has connected to a server and fetched all of a patient's laboratory diagnostic reports searching by category code and date range using [[#GET_.5Bbase.5D.2FDiagnosticReport.3Fpatient.3D.5Bid.5D.26code.3D.5BLOINC.7B.2CLOINC2.2CLOINC3.2C....7D.5D|GET [base]/DiagnosticReport?patient=[id]&category=LAB&date=[date]{&date=[date]}]].
*A client has connected to a server and fetched any of a patient's laboratory results listed in the table below using GET [base]/Observation?patient=[id]&code=[lab result code].
+
 
-->
+
*A client has connected to a server and fetched all of all of a patient's laboratory diagnostic reports searching by category and code using [[#GET_.5Bbase.5D.2FDiagnosticReport.3Fpatient.3D.5Bid.5D.26code.3D.5BLOINC.7B.2CLOINC2.2CLOINC3.2C....7D.5D|GET [base]/DiagnosticReport?patient=[id]&category=LAB&code=[LOINC]]].
 +
 
 +
 
 +
*A client '''SHOULD''' be capable of connecting to a server and fetching any of a patient's laboratory diagnostic reports searching by category and one or more codes and date range using [[#GET|GET [base]/DiagnosticReport?patient=[id]&category=LAB&code=[LOINC1{,LOINC2,LOINC3,...}]&date=[date]{&date=[date]}]].
 +
 
 +
====Observation====
 +
*A client has connected to a server and fetched all of a patient's laboratory results by searching by category using [[#GET_.5Bbase.5D.2FObservation.3Fpatient.3D.5Bid.5D.26category.3Dlaboratory|GET [base]/Observation?patient=[id]&category=laboratory.]]
 +
 
 +
*A client has connected to a server and fetched all of a patient's laboratory results searching by category code and date range using [[#GET_.5Bbase.5D.2FObservation.3Fpatient.3D.5Bid.5D.26category.3Dlaboratory.26date.3D.5Bdate.5D.7B.26date.3D.5Bdate.5D.7D|GET [base]/Observation?patient=[id]&category=laboratory&date=[date]{&date=[date]}]].
 +
 
 +
*A client has connected to a server and fetched all of all of a patient's laboratory results searching by category and code using [[#GET_.5Bbase.5D.2FObservation.3Fpatient.3D.5Bid.5D.26code.3D.5BLOINC.7B.2CLOINC2.2CLOINC3.2C....7D.5D|GET [base]/Observation?patient=[id]&category=laboratory&code=[LOINC]]].
 +
 
 +
 
 +
*A client '''SHOULD''' be capable of connecting to a server and fetching any of a patient's laboratory results searching by category and one or more codes and date range using [[#GET_.5Bbase.5D.2FObservation.3Fpatient.3D.5Bid.5D.26category.3Dlaboratory.26date.3D.5Bdate.5D.7B.26date.3D.5Bdate.5D.7D|GET [base]/Observation?patient=[id]&category=laboratory&code=[LOINC1{,LOINC2,LOINC3,...}]&date=[date]{&date=[date]}]].
 +
 
 
===Servers===
 
===Servers===
*A server is capable of returning all of a patient's laboratory diagnostic reports using GET [base]/DiagnosticReport?patient=[id].
+
====DiagnosticReport====
*A server is capable of returning all of a patient's laboratory results using GET [base]/Observation?patient=[id].
+
*A server is capable of returning all of a patient's laboratory diagnostic reports queried by category using [[#GET_.5Bbase.5D.2FDiagnosticReport.3Fpatient.3D.5Bid.5D.26category.3DLAB|GET [base]/DiagnosticReport?patient=[id]&category=LAB.]]
<!--
+
 
*A server is capable of returning any of a patient's laboratory diagnostic reports listed in the table and that it supports using GET [base]/DiagnosticReport?patient=[id]&code=[lab result code].
+
*A server is capable of returning all of a patient's laboratory diagnostic reports queried by category code and date range using [[#GET_.5Bbase.5D.2FDiagnosticReport.3Fpatient.3D.5Bid.5D.26code.3D.5BLOINC.7B.2CLOINC2.2CLOINC3.2C....7D.5D|GET [base]/DiagnosticReport?patient=[id]&category=LAB&date=[date]{&date=[date]}]].
*A server is capable of returning any of a patient's laboratory results listed in the table and that it supports using GET [base]/Observation?patient=[id]&code=[lab result code].
+
 
-->
+
*A server is capable of returning all of a patient's laboratory diagnostic reports queried by category and code using [[#GET_.5Bbase.5D.2FDiagnosticReport.3Fpatient.3D.5Bid.5D.26code.3D.5BLOINC.7B.2CLOINC2.2CLOINC3.2C....7D.5D|GET [base]/DiagnosticReport?patient=[id]&category=LAB&code=[LOINC]]].
*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.
+
 
 +
*A server '''SHOULD''' be capable of returning all of a patient's laboratory diagnostic reports queried by category and one or more codes and date range using [[#GET|GET [base]/DiagnosticReport?patient=[id]&category=LAB&code=[LOINC1{,LOINC2,LOINC3,...}]&date=[date]{&date=[date]}]].
 +
 
 +
====Observation====
 +
*A server is capable of returning all of a patient's laboratory results queried  by category using [[#GET_.5Bbase.5D.2FObservation.3Fpatient.3D.5Bid.5D.26category.3Dlaboratory|GET [base]/Observation?patient=[id]&category=laboratory.]]
 +
 
 +
*A server is capable of returning all of a patient's laboratory results queried  by category code and date range using [[#GET_.5Bbase.5D.2FObservation.3Fpatient.3D.5Bid.5D.26category.3Dlaboratory.26date.3D.5Bdate.5D.7B.26date.3D.5Bdate.5D.7D|GET [base]/Observation?patient=[id]&category=laboratory&date=[date]{&date=[date]}]].
 +
*A server is capable of returning all of a patient's laboratory results queried  by category and code using [[#GET_.5Bbase.5D.2FObservation.3Fpatient.3D.5Bid.5D.26code.3D.5BLOINC.7B.2CLOINC2.2CLOINC3.2C....7D.5D|GET [base]/Observation?patient=[id]&category=laboratory&code=[LOINC]]].
 +
 
 +
 
 +
*A server '''SHOULD''' be capable of returning all of a patient's laboratory results queried by category and one or more codes and date range using [[#GET|GET [base]/Observation?patient=[id]&category=laboratory&code=[LOINC1{,LOINC2,LOINC3,...}]&date=[date]{&date=[date]}]].
  
 
==Mandatory Data Elements==
 
==Mandatory Data Elements==
Line 26: Line 59:
 
The following data-elements in the DiagnosticReport and  Observation resources 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 tables for additional quidance and examples for the various laboratory tests.    Both DiagnosticReport and Observation contain structures to group panels of Observations and both options are presented below.  Both approaches are currently supported in this guide.
 
The following data-elements in the DiagnosticReport and  Observation resources 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 tables for additional quidance and examples for the various laboratory tests.    Both DiagnosticReport and Observation contain structures to group panels of Observations and both options are presented below.  Both approaches are currently supported in this guide.
  
==DiagnosticReport==
+
===DiagnosticReport===
===Each DiagnosticReport must have:===
+
When lab test or lab panel, such as CBC, is ordered, a DiagnosticReport represents the order fulfillment and references each of the resulting discrete Observations within that panel.
 +
 
 +
====Each DiagnosticReport must have:====
  
 
* a patient
 
* a patient
 
* a code (preferably a LOINC code) which tells you what is being measured
 
* a code (preferably a LOINC code) which tells you what is being measured
** note: additional codes that translate or map to these are allowed - e.g. method specific LOINC Codes, SNOMED CT concepts, system specific codes
+
** note: additional codes that translate or map to these are allowed - e.g. system specific codes
 
* at least one result (an Observation reference)
 
* at least one result (an Observation reference)
** note: if there is no numeric result then you have to supply a reason
 
 
* a status
 
* a status
 
* a category code of 'LAB'
 
* a category code of 'LAB'
** note: additional category codes that translate or map to these are allowed - e.g. more specific category codes such as "CH" (chemistry), SNOMED CT concepts, system specific codes
+
** note: additional category codes that translate or map to these are allowed - e.g. more specific category codes such as "CH" (chemistry)
 
* a time indicating when the measurement was taken
 
* a time indicating when the measurement was taken
 
* a time indicating when the measurement was reported
 
* a time indicating when the measurement was reported
Line 42: Line 76:
 
<!-- * what was requested (a DiagnosticOrder reference) * see issue re DAF-->
 
<!-- * what was requested (a DiagnosticOrder reference) * see issue re DAF-->
  
====Example DiagnosticReports====
+
=====Example DiagnosticReports=====
The attached table and lists LOINC panels for chemistry, hematology(cbc) and urinalysis results.  This Argonaut profile does not make the presence or absence of any of these mandatory and is provided for guidance only.
+
The attached table lists LOINC panels for chemistry, hematology(cbc) and urinalysis results.  This Argonaut profile does not make the presence or absence of any of these mandatory and is provided for guidance only.
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 59: Line 93:
 
|-
 
|-
 
|}
 
|}
 +
 
===== Complete Summary of the Mandatory Requirements =====
 
===== Complete Summary of the Mandatory Requirements =====
  
==Observation==
 
  
===Each Observation must have:===
+
# One patient in '''DiagnosticReport.subject'''
 +
# One status in '''DiagnosticReport.status'''
 +
# One category in '''DiagnosticReport.category''' which must have:
 +
#* a fixed '''DiagnosticReport.category.coding.system="http://hl7.org/fhir/valueset-diagnostic-service-sections.html"'''
 +
#* a fixed '''DiagnosticReport.category.coding.code="LAB"'''
 +
# One code in '''DiagnosticReport.code''' which must have if available:
 +
#* a fixed '''DiagnosticReport.code.coding.system="http://loinc.org"'''
 +
#* a LOINC code in '''DiagnosticReport.code.coding.code'''
 +
#* Other additional codes are allowed - e.g. system specific codes. All codes SHALL have an system value
 +
# One or more '''DiagnosticReport.result'''
 +
#*'''DiagnosticReport.result.reference''' reference the Observations that are part of this diagnostic report.
 +
# A date and time in '''DiagnosticReport.effectiveDateTime''' or '''DiagnosticReport.effectivePeriod'''
 +
# A date and time in '''DiagnosticReport.issued'''
 +
# A practitioner or organization '''DiagnosticReport.performer'''
 +
 
 +
===Observation===
 +
Each Observation represents an individual laboratory test and result value, a "nested" panel (such as a microbial susceptibility panel) which references other observations, or rarely a laboratory test with component result values. 
 +
====Each Observation must have:====
 
* a patient
 
* a patient
* a LOINC code which tells you what is being measured
+
* a LOINC code, if available, which tells you what is being measured
** note: additional codes that translate or map to these are allowed - e.g. method specific LOINC Codes, SNOMED CT concepts, system specific codes
+
** note: additional codes that translate or map to these are allowed - e.g. system specific codes
 
* a result value and if the result value is a numeric quantity, a standard UCUM unit
 
* a result value and if the result value is a numeric quantity, a standard UCUM unit
 
** note: if there is no result then you have to supply a reason unless Observation is being used to group a panel then there is no value.  Instead, it just includes composite values or related links
 
** note: if there is no result then you have to supply a reason unless Observation is being used to group a panel then there is no value.  Instead, it just includes composite values or related links
Line 75: Line 126:
 
* a time indicating when the measurement was taken
 
* a time indicating when the measurement was taken
 
* a reference range if available
 
* a reference range if available
Each Observation may have:
 
* references to other observation if it represents a panel
 
 
  
====Example Laboratory tests and results====
+
=====Example Laboratory tests and results=====
 
The attached table is derived from the [https://loinc.org/usage/obs LOINC Top 2000+ Lab Observations] and lists LOINC panel and observation codes for quantitative and qualitative tests for chemistry, hematology(cbc) and urinalysis results.  It also lists the corresponding UCUM units of measure codes for quantitative tests.  The qualitative results include both 'ordinal' and 'nominal' scale.  This Argonaut profile does not make the presence or absence of any of these mandatory and is provided for guidance only.
 
The attached table is derived from the [https://loinc.org/usage/obs LOINC Top 2000+ Lab Observations] and lists LOINC panel and observation codes for quantitative and qualitative tests for chemistry, hematology(cbc) and urinalysis results.  It also lists the corresponding UCUM units of measure codes for quantitative tests.  The qualitative results include both 'ordinal' and 'nominal' scale.  This Argonaut profile does not make the presence or absence of any of these mandatory and is provided for guidance only.
  
Line 89: Line 137:
 
!Comment
 
!Comment
 
!Example
 
!Example
 +
 +
<!--
 +
|-
 +
|24323-8||Comprehensive metabolic 2000 panel - Serum or Plasma||||Panel of Common Blood Chemistries||[[Example lab panel 1|Example]]
 +
|-
 +
|58410-2||Complete blood count (hemogram) panel - Blood by Automated count||||Panel of Common Hematology Tests||[[Example lab panel 2|Example]]
 +
|-
 +
|24356-8||Urinalysis complete panel - Urine||||Panel of Common Urine Tests||[[Example lab panel 3|Example]]
 +
-->
 
|-
 
|-
 
|2160-0||Creatinine [Mass/volume] in Serum or Plasma||mg/dL||Quantitative Test||[[Example lab 1|Example]]
 
|2160-0||Creatinine [Mass/volume] in Serum or Plasma||mg/dL||Quantitative Test||[[Example lab 1|Example]]
Line 156: Line 213:
 
|}
 
|}
  
==== Complete Summary of the Mandatory Requirements ====
+
===== Complete Summary of the Mandatory Requirements =====
 
<!--
 
<!--
 
#One or more Observation identifiers in '''Observation.identifier''' each of which must have:
 
#One or more Observation identifiers in '''Observation.identifier''' each of which must have:
Line 167: Line 224:
 
#* a fixed '''Observation.category.coding.system="http://hl7.org/fhir/observation-category"'''
 
#* a fixed '''Observation.category.coding.system="http://hl7.org/fhir/observation-category"'''
 
#* a fixed '''Observation.category.coding.code="laboratory"'''
 
#* a fixed '''Observation.category.coding.code="laboratory"'''
# One code in '''Observation.code''' which must have
+
# One code in '''Observation.code''' which must have if available:
 
#* a fixed '''Observation.code.coding.system="http://loinc.org"'''
 
#* a fixed '''Observation.code.coding.system="http://loinc.org"'''
 
#* a LOINC code in '''Observation.code.coding.code'''
 
#* a LOINC code in '''Observation.code.coding.code'''
#* Other additional codes are allowed - e.g. method specific LOINC Codes, SNOMED CT concepts, system specific codes. All codes SHALL have an system value
+
#* Other additional codes are allowed - e.g. system specific codes. All codes SHALL have an system value
# Either one '''Observation.value[x]''' or, if there is no value, one code in '''Observation.DataAbsentReason''' (Note: An exception is when the Observation.code is a panel )
+
# Either one '''Observation.value[x]''' or one code in '''Observation.DataAbsentReason''' (unless the Observation.code is a panel code)
 
#* Each Observation.valueQuantity must have:
 
#* Each Observation.valueQuantity must have:
 
#**One numeric value in '''Observation.valueQuantity.value'''
 
#**One numeric value in '''Observation.valueQuantity.value'''
 
#** a fixed '''Observation.valueQuantity.system="http://unitsofmeasure.org"'''
 
#** a fixed '''Observation.valueQuantity.system="http://unitsofmeasure.org"'''
 
#** a UCUM unit code in '''Observation.valueQuantity.code''' taken from the "Units" column in the table
 
#** a UCUM unit code in '''Observation.valueQuantity.code''' taken from the "Units" column in the table
#*Observation.DataAbsentReason is bound to [http://hl7-fhir.github.io/valueset-observation-valueabsentreason.html Observation Value Absent Reason] Value set (Code set)
+
#* Each Observation.valueCodeableConcept must have either:
#* Each Observation.valueCodeableConcept must have either a:
+
#*#a code in '''Observation.valueCodeableConcept.coding.code''' and code system in '''Observation.valueCodeableConcept.coding.sytem'''
#**a code in '''Observation.valueCodeableConcept.coding.code''' and code system in '''Observation.valueCodeableConcept.coding.sytem'''
+
#*#*[http://snomed.info/sct SNOMED CT] is preferred binding
#***SNOMED CT is preferred
+
#*# OR text in '''Observation.valueCodeableConcept.text'''
#** OR a text in '''Observation.valueCodeableConcept.text'''
+
#*Observation.DataAbsentReason is bound to [http://hl7.org/fhir/valueset-observation-valueabsentreason.html Observation Value Absent Reason] Value set (Code set)
<!--
 
# When using a panel code to group component observations, 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
 
# 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 [http://hl7-fhir.github.io/valueset-observation-valueabsentreason.html Observation Value Absent Reason] Value set (Code set)
 
-->
 
# When using a panel code to group observations, one or more reference to Observations in '''Observation.related.target''' (Note: for panels there is no value in Observation.value[x] or  Observation.dataAbsentReason )
 
#* a fixed '''Observation.related.type="has-member"'''
 
 
# One patient in '''Observation.subject'''
 
# One patient in '''Observation.subject'''
  
 
Each Observation should have:
 
Each Observation should have:
 
# A date and time in '''effectiveDateTime''' or '''effectivePeriod'''
 
# A date and time in '''effectiveDateTime''' or '''effectivePeriod'''
# Each Observation should have a '''Observation.referenceRange''' if applicable
+
# A reference range if applicable in '''Observation.referenceRange'''
  
 
==Quick Start==
 
==Quick Start==
Line 204: Line 248:
 
Below is a quick overview of the required search and read operations
 
Below is a quick overview of the required search and read operations
  
===GET [base]/DiagnosticReport?patient=[id]&category=LAB===
+
===DiagnosticReport===
 +
====GET [base]/DiagnosticReport?patient=[id]&category=LAB====
 
<!--EH need to consider the scope of sprint altrenative is  to list all servive sectors in comma separated list - do we want an _include here to get all the associated obs - not covered in sprint -->
 
<!--EH need to consider the scope of sprint altrenative is  to list all servive sectors in comma separated list - do we want an _include here to get all the associated obs - not covered in sprint -->
  
 
''Support:'' Mandatory to support search by category code = LAB.
 
''Support:'' Mandatory to support search by category code = LAB.
  
''Implementation Notes:'' Search based on diagnostic report category code = 'LAB'. This fetches a bundle of all lab related DiagnosticReports resources for the specified patient [http://hl7.org/fhir/DSTU2/search.html#reference (how to search by reference)] and [http://hl7.org/fhir/DSTU2/search.html#token (how to search by token)].
+
''Implementation Notes:'' Search based on diagnostic report category code = 'LAB'. This fetches a bundle of all lab related DiagnosticReport resources for the specified patient [http://hl7.org/fhir/DSTU2/search.html#reference (how to search by reference)] and [http://hl7.org/fhir/DSTU2/search.html#token (how to search by token)].
  
 
''Response Class:''
 
''Response Class:''
Line 216: Line 261:
 
*(Status 401/4xx): unauthorized request
 
*(Status 401/4xx): unauthorized request
 
*(Status 403): insufficient scope
 
*(Status 403): insufficient scope
====Example:====  
+
=====Example:=====  
 
  [GET http://spark.furore.com/fhir/DiagnosticReport?patient=f201&category=LAB]<!-- need to update to smart server when agree on category -->
 
  [GET http://spark.furore.com/fhir/DiagnosticReport?patient=f201&category=LAB]<!-- need to update to smart server when agree on category -->
  
 
----
 
----
  
===GET [base]/Observation?patient=[id]&category=laboratory===  
+
====GET [base]/DiagnosticReport?patient=[id]&code=[LOINC{,LOINC2,LOINC3,...}]====
<!-- EH need to consider the scope of sprint and where we want to be also the obs category is heirarchical so would could list heirarcy  = lab or list all servive sectors in comma separated list,  do we want an _include here to get all the associated obs - not covered in sprint -->
 
  
''Support:'' Mandatory to support search by category code = laboratory
+
''Support:'' Mandatory support search by a laboratory order code. SHOULD support search by multiple order codes.
  
''Implementation Notes:'' Search based on laboratory category code = "laboratory". This fetches a bundle of all Observation resources with laboratory categories for the specified patient [http://hl7.org/fhir/DSTU2/search.html#reference (how to search by reference)] and [http://hl7.org/fhir/DSTU2/search.html#token (how to search by token)].
+
''Implementation Notes:'' Search based on DiagnosticReport code. This fetches a bundle of all DiagnosticReport resources for a specific diagnostic order code for the specified patient [http://hl7.org/fhir/DSTU2/search.html#reference (how to search by reference)] and [http://hl7.org/fhir/DSTU2/search.html#token (how to search by token)].
  
 
''Response Class:''
 
''Response Class:''
Line 233: Line 277:
 
*(Status 401/4xx): unauthorized request
 
*(Status 401/4xx): unauthorized request
 
*(Status 403): insufficient scope
 
*(Status 403): insufficient scope
====Example:====  
+
=====Example:)=====
 +
Search for all metabolic panel reports for a patient:
  
  [GET https://fhir-open-api-dstu2.smarthealthit.org/Observation?patient=1134281&category=laboratory]
+
  [GET https://fhir-open-api-dstu2.smarthealthit.org/DiagnosticReport?patient=1032702&code=24323-8]
 +
 
 +
=====Example:=====
 +
Search for all cbc, metabolic panel, and urinalysis panels for a patient
  
 +
[GET https://fhir-open-api-dstu2.smarthealthit.org/DiagnosticReport?patient=1032702&code=24323-8,58410-2,24356-8]
 
----
 
----
  
===GET [base]/DiagnosticReport?patient=[id]&code=[Laboratory order LOINC]===
+
----
<!--do we want an _include here to get all the associated obs - not covered in sprint-->
 
  
''Support:'' SHOULD support search DiagnosticReport by laboratory order codes  <!-- should  we create a table of order too!-->
+
<!--
 +
====GET [base]/DiagnosticReport?patient=[id]&code=[lab1 LOINC, lab2 LOINC, etc]====
 +
(TODO_repeat for DR)
  
''Implementation Notes:'' Search based on Diagnostic report code. This fetches a bundle of all DiagnosticReport resources for a specific diagnostic order code for the specified patient [http://hl7.org/fhir/DSTU2/search.html#reference (how to search by reference)] and [http://hl7.org/fhir/DSTU2/search.html#token (how to search by token)].
+
''Support:'' SHOULD support DiagnosticReport search by multiple LOINCs.
 +
.
 +
 
 +
''Implementation Notes:'' Search based on multiple laboratory LOINC codes. This fetches a bundle of all DiagnosticReprot resources for specific laboratory results listed in the table above for the specified patient [http://hl7.org/fhir/DSTU2/search.html#reference (how to search by reference)] and [http://hl7.org/fhir/DSTU2/search.html#token (how to search by token)] and [http://hl7-fhir.github.io/search.html#combining (how to search for multiple values)]
  
 
''Response Class:''
 
''Response Class:''
Line 251: Line 304:
 
*(Status 401/4xx): unauthorized request
 
*(Status 401/4xx): unauthorized request
 
*(Status 403): insufficient scope
 
*(Status 403): insufficient scope
====Example:)====  
+
 
Search for all heart rate observations for a patient:
+
=====Example:=====  
  [GET https://fhir-open-api-dstu2.smarthealthit.org/DiagnosticOrder?patient=1186747&code=8867-4] <!-- need to update no example on SOF -->
+
Search for all cbc, metabolic panel, and urinalysis panels for a patient
 +
 
 +
  [GET https://fhir-open-api-dstu2.smarthealthit.org/DiagnosticReport?patient=1032702&code=24323-8,58410-2,24356-8]
 
----
 
----
 +
-->
 +
 +
====GET [base]/DiagnosticReport?patient=[id]&category=LAB&date=[date]{&date=[date]}====
 +
 +
''Support:'' Mandatory support search by category code and date or period
 +
 +
''Implementation Notes:'' Search based on laboratory category code and date. This fetches a bundle of all DiagnosticReport resources with category 'LAB' for the specified patient for a specified time period [http://hl7.org/fhir/DSTU2/search.html#reference (how to search by reference)]and [http://hl7.org/fhir/DSTU2/search.html#token (how to search by token)] and [http://hl7.org/fhir/DSTU2/search.html#date (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 lab reports issued after 2010-01-14
  
===GET [base]/Observation?patient=[id]&code=[Laboratory order LOINC]===
+
[GET http://spark.furore.com/fhir/DiagnosticReport?patient=f201&category=LAB&date=ge2010-01-14]
<!-- do we want an _include here to get all the associated obs - not covered in sprint-->
 
  
 +
===Observation===
 +
====GET [base]/Observation?patient=[id]&category=laboratory====
 +
<!-- EH need to consider the scope of sprint and where we want to be also the obs category is heirarchical so would could list heirarcy  = lab or list all servive sectors in comma separated list,  do we want an _include here to get all the associated obs - not covered in sprint -->
  
''Support:'' SHOULD support search Observation by laboratory LOINCs.
+
''Support:'' Mandatory to support search by category code = laboratory
  
''Implementation Notes:'' Search based on laboratory LOINC code. This fetches a bundle of all DiagnosticReport resources for a specific observation LOINC code  for the specified patient [http://hl7.org/fhir/DSTU2/search.html#reference (how to search by reference)] and [http://hl7.org/fhir/DSTU2/search.html#token (how to search by token)].
+
''Implementation Notes:'' Search based on laboratory category code = "laboratory". This fetches a bundle of all Observation resources with laboratory categories for the specified patient [http://hl7.org/fhir/DSTU2/search.html#reference (how to search by reference)] and [http://hl7.org/fhir/DSTU2/search.html#token (how to search by token)].
  
 
''Response Class:''
 
''Response Class:''
Line 269: Line 341:
 
*(Status 401/4xx): unauthorized request
 
*(Status 401/4xx): unauthorized request
 
*(Status 403): insufficient scope
 
*(Status 403): insufficient scope
====Example:)====  
+
=====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 https://fhir-open-api-dstu2.smarthealthit.org/Observation?patient=1134281&category=laboratory]
  
 
----
 
----
  
===GET [base]/Observation?patient=[id]&code=[lab1 LOINC, lab2 LOINC, etc]===
+
 
(TODO_repeat for DR)
+
====GET [base]/Observation?patient=[id]&code=[LOINC{,LOINC2,LOINC3,...}]====
 +
 
 +
''Support:'' Mandatory support search by a laboratory LOINC code. SHOULD support search by multiple LOINC codes.
 +
 
 +
''Implementation Notes:'' 1) Search based on laboratory LOINC code(s). This fetches a bundle of all Observation resources for a specific observation LOINC code(s) for the specified patient [http://hl7.org/fhir/DSTU2/search.html#reference (how to search by reference)] and [http://hl7.org/fhir/DSTU2/search.html#token (how to search by token)]. 2) The [[Argonaut Observation "code" parameter]] has been defined to search '''both''' in both Observation.code and Observation.component.code.
 +
 
 +
''Response Class:''
 +
*(Status 200): successful operation
 +
*(Status 400): invalid parameter
 +
*(Status 401/4xx): unauthorized request
 +
*(Status 403): insufficient scope
 +
=====Example:)=====
 +
Search for all blood glucose lab results for a patient:
 +
 
 +
[GET https://fhir-open-api-dstu2.smarthealthit.org/Observation?patient=1134281&code=2339-0]
 +
 
 +
Search for all blood glucose, urine glucose and urine ketones for a patient
 +
 
 +
[GET https://fhir-open-api-dstu2.smarthealthit.org/Observation?patient=1134281&code=2339-0,25428-4,2514-8]
 +
 
 +
----
 +
<!--
 +
====GET [base]/Observation?patient=[id]&code=[lab1 LOINC, lab2 LOINC, etc]====
  
 
''Support:'' SHOULD support Observation search by multiple LOINCs.
 
''Support:'' SHOULD support Observation search by multiple LOINCs.
Line 288: Line 382:
 
*(Status 401/4xx): unauthorized request
 
*(Status 401/4xx): unauthorized request
 
*(Status 403): insufficient scope
 
*(Status 403): insufficient scope
====Example:====  
+
 
Search for all heart rate, respiratory rate and blood pressure observations for a patient
+
=====Example:=====  
  [GET https://fhir-open-api-dstu2.smarthealthit.org/Observation?patient=1186747&code=8867-4,9279-1,55284-4]
+
Search for all blood glucose, urine glucose and urine ketones for a patient
 +
 
 +
  [GET https://fhir-open-api-dstu2.smarthealthit.org/Observation?patient=1134281&code=2339-0,25428-4,2514-8]
 
----
 
----
 +
-->
  
===GET [base]/Observation?patient=[id]&category=laboratory=[eq|lt|gt|geyyyy-mm-dd]===
+
====GET [base]/Observation?patient=[id]&category=laboratory&date=[date]{&date=[date]}====
(repeat for DR)
 
  
''Support:'' SHOULD support search by category code and date
+
''Support:'' Mandatory support search by category code and date or period
  
''Implementation Notes:'' Search based on laboratory 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 [http://hl7.org/fhir/DSTU2/search.html#reference (how to search by reference)]and [http://hl7.org/fhir/DSTU2/search.html#token (how to search by token)] and [http://hl7.org/fhir/DSTU2/search.html#date (how to search by date)].
+
''Implementation Notes:'' Search based on laboratory category code and date. This fetches a bundle of all Observation resources with category 'laboratory' for the specified patient for a specified time period [http://hl7.org/fhir/DSTU2/search.html#reference (how to search by reference)]and [http://hl7.org/fhir/DSTU2/search.html#token (how to search by token)] and [http://hl7.org/fhir/DSTU2/search.html#date (how to search by date)].
  
 
''Response Class:''
 
''Response Class:''
Line 305: Line 401:
 
*(Status 401/4xx): unauthorized request
 
*(Status 401/4xx): unauthorized request
 
*(Status 403): insufficient scope
 
*(Status 403): insufficient scope
====Example:====  
+
=====Example:=====  
Find all the laboratory results after 2013-03-14
+
Find all the laboratory results after 2013-03-14
 +
 
 
  [GET http://fhir2.healthintersections.com.au/open/Observation?patient=555580&category=laboratory&date=ge2015-01-14]
 
  [GET http://fhir2.healthintersections.com.au/open/Observation?patient=555580&category=laboratory&date=ge2015-01-14]
 +
-----
  
 
==Open Issues==
 
==Open Issues==
Issues for the vitals IG have been identified and tracked [https://github.com/argonautproject/implementation-program/issues HERE]
+
Issues for this IG have been identified and tracked [https://github.com/argonautproject/implementation-program/issues/labels/data.lab HERE]
 
 
TODO - complete examples for qualitative tests.
 
 
 
<!--
 
have been identified:
 
 
 
# What is a consistent pattern for grouping Observations into panels?
 
#* Whether to use DiagnosticReport and Observation or just Observation or both
 
#(several of the same issues as in [http://argonautwiki.hl7.org/index.php?title=Vital_Signs#Open_Issues Vitals])
 
# Should a DiagnosticOrder reference be mandatory element for DiagnosticReport as it is in the [http://hl7-fhir.github.io/daf/diagnosticreport-daf.html DAF profile]?
 
 
 
-->
 
<!--The following issues need clarification from ONC:-->
 
  
 
==Resources==
 
==Resources==
Line 330: Line 415:
  
 
==References==
 
==References==
*[http://hl7.org/fhir/daf/daf-results.html Laboratory Results]
+
*[http://hl7.org/fhir/daf/observation-daf-results.html DAF Results Profile]
 +
*[http://hl7.org/fhir/daf/diagnosticreport-daf.html DAF DiagnosticReport Profile]
 
*[http://hl7.org/fhir/DSTU2/http.html RESTfulAPI]
 
*[http://hl7.org/fhir/DSTU2/http.html RESTfulAPI]
 
*[http://hl7.org/fhir/DSTU2/search.html Search]
 
*[http://hl7.org/fhir/DSTU2/search.html Search]

Latest revision as of 22:02, 22 December 2016

Back to Argonaut Implementation Guide

**********************PLEASE NOTE********************************
This guide is no longer being actively maintained and updated.
On January 1st 2017, This guide is being superseded by the online 
version of the Argonaut-DSTU2 Implemenation Guide.
hosted at:  http://fhir.org/guides/argonaut
The working CI build is avaible now at : 
http://build.fhir.org/ig/Healthedata1/Argo-DSTU2/  

Introduction

The Argonaut Laboratory Results guide provides the API documentation for searching and fetching Laboratory Results. This IG covers two resources - Observation and DiagnosticReport - because labaratory results are grouped and summarized using reports. This IG is based on the Data Access Framework (DAF) Laboratory Results. 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).

Minimum Requirements

Clients

DiagnosticReport


Observation


Servers

DiagnosticReport


Observation


Mandatory Data Elements

The following data-elements in the DiagnosticReport and Observation resources 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 tables for additional quidance and examples for the various laboratory tests. Both DiagnosticReport and Observation contain structures to group panels of Observations and both options are presented below. Both approaches are currently supported in this guide.

DiagnosticReport

When lab test or lab panel, such as CBC, is ordered, a DiagnosticReport represents the order fulfillment and references each of the resulting discrete Observations within that panel.

Each DiagnosticReport must have:

  • a patient
  • a code (preferably a LOINC code) which tells you what is being measured
    • note: additional codes that translate or map to these are allowed - e.g. system specific codes
  • at least one result (an Observation reference)
  • a status
  • a category code of 'LAB'
    • note: additional category codes that translate or map to these are allowed - e.g. more specific category codes such as "CH" (chemistry)
  • a time indicating when the measurement was taken
  • a time indicating when the measurement was reported
  • who issues the report
Example DiagnosticReports

The attached table lists LOINC panels for chemistry, hematology(cbc) and urinalysis results. This Argonaut profile does not make the presence or absence of any of these mandatory and is provided for guidance only.

LOINC # Long Common Name Comment Example
24323-8 Comprehensive metabolic 2000 panel - Serum or Plasma Panel of Common Blood Chemistries Example
58410-2 Complete blood count (hemogram) panel - Blood by Automated count Panel of Common Hematology Tests Example
24356-8 Urinalysis complete panel - Urine Panel of Common Urine Tests Example
Complete Summary of the Mandatory Requirements
  1. One patient in DiagnosticReport.subject
  2. One status in DiagnosticReport.status
  3. One category in DiagnosticReport.category which must have:
  4. One code in DiagnosticReport.code which must have if available:
    • a fixed DiagnosticReport.code.coding.system="http://loinc.org"
    • a LOINC code in DiagnosticReport.code.coding.code
    • Other additional codes are allowed - e.g. system specific codes. All codes SHALL have an system value
  5. One or more DiagnosticReport.result
    • DiagnosticReport.result.reference reference the Observations that are part of this diagnostic report.
  6. A date and time in DiagnosticReport.effectiveDateTime or DiagnosticReport.effectivePeriod
  7. A date and time in DiagnosticReport.issued
  8. A practitioner or organization DiagnosticReport.performer

Observation

Each Observation represents an individual laboratory test and result value, a "nested" panel (such as a microbial susceptibility panel) which references other observations, or rarely a laboratory test with component result values.

Each Observation must have:

  • a patient
  • a LOINC code, if available, which tells you what is being measured
    • note: additional codes that translate or map to these are allowed - e.g. system specific codes
  • a result value and if the result value is a numeric quantity, a standard UCUM unit
    • note: if there is no result then you have to supply a reason unless Observation is being used to group a panel then there is no value. Instead, it just includes composite values or related links
  • a status
  • a category code of 'laboratory'
    • note: additional category codes that translate or map to these are allowed - e.g. more specific category codes such as "chemistry', SNOMED CT concepts, system specific codes

Each Observation should have:

  • a time indicating when the measurement was taken
  • a reference range if available
Example Laboratory tests and results

The attached table is derived from the LOINC Top 2000+ Lab Observations and lists LOINC panel and observation codes for quantitative and qualitative tests for chemistry, hematology(cbc) and urinalysis results. It also lists the corresponding UCUM units of measure codes for quantitative tests. The qualitative results include both 'ordinal' and 'nominal' scale. This Argonaut profile does not make the presence or absence of any of these mandatory and is provided for guidance only.

LOINC # Long Common Name UCUM Comment Example
2160-0 Creatinine [Mass/volume] in Serum or Plasma mg/dL Quantitative Test Example
718-7 Hemoglobin [Mass/volume] in Blood g/dL Quantitative Test, This is the the code included in the CBC auto. It is NOT obtained via the automated counting but uses a chemistry method just like most other hemoglobins Example
2823-3 Potassium [Moles/volume] in Serum or Plasma mmol/L Quantitative Test Example
2951-2 Sodium [Moles/volume] in Serum or Plasma mmol/L Quantitative Test Example
3094-0 Urea nitrogen [Mass/volume] in Serum or Plasma mg/dL Quantitative Test, Usually called BUN Example
2028-9 Carbon dioxide, total [Moles/volume] in Serum or Plasma mmol/L Quantitative Test Example
2075-0 Chloride [Moles/volume] in Serum or Plasma mmol/L Quantitative Test Example
789-8 Erythrocytes [#/volume] in Blood by Automated count 10*6/uL Quantitative Test Example
786-4 Erythrocyte mean corpuscular hemoglobin concentration [Mass/volume] by Automated count g/dL Quantitative Test Example
785-6 Erythrocyte mean corpuscular hemoglobin [Entitic mass] by Automated count pg Quantitative Test Example
17861-6 Calcium [Mass/volume] in Serum or Plasma mg/dL Quantitative Test Example
2339-0 Glucose [Mass/volume] in Blood mg/dL Quantitative Test Example
1975-2 Bilirubin.total [Mass/volume] in Serum or Plasma mg/dL Quantitative Test, Total bilirubin = direct + indirect. Example
770-8 Neutrophils/100 leukocytes in Blood by Automated count % Quantitative Test, This cell type is counted by all modern automated differential machines; so most results will be reported under the LOINC code with method of automated count. Example
5778-6 Color of Urine Qualitative Test (Nominal) Example
32167-9 Clarity of Urine Qualitative Test (Nominal) Example
25428-4 Glucose [Presence] in Urine by Test strip Qualitative Test (Ordinal) Example
5770-3 Bilirubin.total [Presence] in Urine by Test strip Qualitative Test (Ordinal) Example
2514-8 Ketones [Presence] in Urine by Test strip Qualitative Test (Ordinal) Example
5811-5 Specific gravity of Urine by Test strip Quantitative Test Example
5803-2 pH of Urine by Test strip [pH] Quantitative Test Example
20454-5 Protein [Presence] in Urine by Test strip Qualitative Test (Ordinal) Example
20405-7 Urobilinogen [Mass/volume] in Urine by Test strip mg/dL Quantitative Test Example
5802-4 Nitrite [Presence] in Urine by Test strip Qualitative Test (Ordinal) Example
5794-3 Hemoglobin [Presence] in Urine by Test strip Qualitative Test (Ordinal) Example
5799-2 Leukocyte esterase [Presence] in Urine by Test strip Qualitative Test (Ordinal) Example
11279-7 Urine sediment comments by Light microscopy Narrative Narrative Test Example
25145-4 Bacteria [Presence] in Urine sediment by Light microscopy Qualitative Test (Ordinal) Example
5787-7 Epithelial cells [#/area] in Urine sediment by Microscopy high power field /[HPF] Semi-Quantitative Test. Although reported as a range this is probably an ordinal list ( e.g. 1-10, 10-40, 40+) Example
5821-4 Leukocytes [#/area] in Urine sediment by Microscopy high power field /[HPF] Semi-Quantitative Test Although reported as a range this is probably an ordinal list ( e.g. 1-10, 10-40, 40+) Example
13945-1 Erythrocytes [#/area] in Urine sediment by Microscopy high power field /[HPF] Semi-Quantitative Test Although reported as a range this is probably an ordinal list ( e.g. 1-10, 10-40, 40+) Example
... ... ... ... ...
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 if available:
    • a fixed Observation.code.coding.system="http://loinc.org"
    • a LOINC code in Observation.code.coding.code
    • Other additional codes are allowed - e.g. system specific codes. All codes SHALL have an system value
  4. Either one Observation.value[x] or one code in Observation.DataAbsentReason (unless the Observation.code is a panel code)
    • 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
    • Each Observation.valueCodeableConcept must have either:
      1. a code in Observation.valueCodeableConcept.coding.code and code system in Observation.valueCodeableConcept.coding.sytem
      2. OR text in Observation.valueCodeableConcept.text
    • Observation.DataAbsentReason is bound to Observation Value Absent Reason Value set (Code set)
  5. One patient in Observation.subject

Each Observation should have:

  1. A date and time in effectiveDateTime or effectivePeriod
  2. A reference range if applicable in Observation.referenceRange

Quick Start

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

DiagnosticReport

GET [base]/DiagnosticReport?patient=[id]&category=LAB

Support: Mandatory to support search by category code = LAB.

Implementation Notes: Search based on diagnostic report category code = 'LAB'. This fetches a bundle of all lab related DiagnosticReport resources 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 http://spark.furore.com/fhir/DiagnosticReport?patient=f201&category=LAB]

GET [base]/DiagnosticReport?patient=[id]&code=[LOINC{,LOINC2,LOINC3,...}]

Support: Mandatory support search by a laboratory order code. SHOULD support search by multiple order codes.

Implementation Notes: Search based on DiagnosticReport code. This fetches a bundle of all DiagnosticReport resources for a specific diagnostic order code 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 metabolic panel reports for a patient:

[GET https://fhir-open-api-dstu2.smarthealthit.org/DiagnosticReport?patient=1032702&code=24323-8]
Example:

Search for all cbc, metabolic panel, and urinalysis panels for a patient

[GET https://fhir-open-api-dstu2.smarthealthit.org/DiagnosticReport?patient=1032702&code=24323-8,58410-2,24356-8]



GET [base]/DiagnosticReport?patient=[id]&category=LAB&date=[date]{&date=[date]}

Support: Mandatory support search by category code and date or period

Implementation Notes: Search based on laboratory category code and date. This fetches a bundle of all DiagnosticReport resources with category 'LAB' 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 lab reports issued after 2010-01-14

[GET http://spark.furore.com/fhir/DiagnosticReport?patient=f201&category=LAB&date=ge2010-01-14]

Observation

GET [base]/Observation?patient=[id]&category=laboratory

Support: Mandatory to support search by category code = laboratory

Implementation Notes: Search based on laboratory category code = "laboratory". This fetches a bundle of all Observation resources with laboratory categories 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=1134281&category=laboratory]


GET [base]/Observation?patient=[id]&code=[LOINC{,LOINC2,LOINC3,...}]

Support: Mandatory support search by a laboratory LOINC code. SHOULD support search by multiple LOINC codes.

Implementation Notes: 1) Search based on laboratory LOINC code(s). This fetches a bundle of all Observation resources for a specific observation LOINC code(s) for the specified patient (how to search by reference) and (how to search by token). 2) The Argonaut Observation "code" parameter has been defined to search both in both Observation.code and Observation.component.code.

Response Class:

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

Search for all blood glucose lab results for a patient:

[GET https://fhir-open-api-dstu2.smarthealthit.org/Observation?patient=1134281&code=2339-0]

Search for all blood glucose, urine glucose and urine ketones for a patient

[GET https://fhir-open-api-dstu2.smarthealthit.org/Observation?patient=1134281&code=2339-0,25428-4,2514-8]

GET [base]/Observation?patient=[id]&category=laboratory&date=[date]{&date=[date]}

Support: Mandatory support search by category code and date or period

Implementation Notes: Search based on laboratory category code and date. This fetches a bundle of all Observation resources with category 'laboratory' 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 laboratory results after 2013-03-14

[GET http://fhir2.healthintersections.com.au/open/Observation?patient=555580&category=laboratory&date=ge2015-01-14]

Open Issues

Issues for this IG have been identified and tracked HERE

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