This page is part of the FHIR Specification (v0.01: Historical Archive Draft). The current version which supercedes this version is 4.0.1. For a full list of available versions, see the Directory of published versions

# LabReport

The findings and interpretation of pathology tests performed on tissues and body fluids. This is typically done in a laboratory but may be done in other environments such as at the point of care.

The relative url is /labreports

## Content

    <LabReport xmlns="http://www.hl7.org/fhir">
      <id> mand id Master Resource Id, always first in all resources</id>
      <status> mand code Registered|Interim|Final|Amended|Cancelled|Withdrawn</status>
      <issued> mand instant date issed for current status</issued>
      <patient> mand (Patient) The patient the report is about</patient>
      <admission> opt (Admission) Admission Context</admission>
      <laboratory> mand (Organization) Responsible Laboratory</laboratory>
      <reportId> opt id Id for external references to this report</reportId>
      <requestDetail>  <!-- Zero+ -->
       <requestOrderId> opt Identifier Id assigned by requester</requestOrderId>
       <receiverOrderId> opt Identifier Receiver's Id for the request</receiverOrderId>
       <requestTest> Zero+ CodeableConcept Test Requested</requestTest>
       <requester> opt (Agent|Organization) Responsible for request</requester>
       <clinicalInfo> opt (Any) Clinical information provided</clinicalInfo>
      </requestDetail>
      <reportName> mand CodeableConcept Name for the entire report</reportName>
      <service> opt CodeableConcept Biochemistry, Haematology etc</service>
      <diagnosticTime> mand dateTime Effective time of diagnostic report</diagnosticTime>
      <specimen> Zero+ (Specimen) Specimen (incl. time of collection)</specimen>
      <resultGroup>  <!-- One+ -->
       <name> opt CodeableConcept What defines the group</name>
       <specimen> opt (Specimen) Specimen details</specimen>
       <result>  <!-- One+ -->
        <name> opt CodeableConcept Name or code of the result</name>
        <value[x]> opt Quantity|CodeableConcept|Attachment|
                  Ratio|Choice|Interval(dateTime)|string Result. [x] = type name</value[x]>
        <flag> opt code + | ++ | +++ | - | -- | --- </flag>
        <status> mand code Registered|Interim|Final|Amended|Cancelled|Withdrawn</status>
        <comments> opt string Comments about result</comments>
        <referenceRange>  <!-- Zero+ -->
         <meaning> opt CodeableConcept The meaning of this range</meaning>
         <range[x]> mand Quantity|Interval(Quantity)|string Reference</range[x]>
        </referenceRange>
       </result>
      </resultGroup>
      <conclusion> opt Narrative Clinical Interpretation of test results</conclusion>
      <codedDiagnosis> Zero+ CodeableConcept Codes for the conclusion</codedDiagnosis>
      <representation> One+ Attachment Entire Report as issued</representation>
      <extensions> opt See Extensions   See Extensions </extensions>
      <text> mand Narrative Text summary of report, for human interpretation</text>
    </LabReport>

Schema for LabReport and an example (or formatted for browser)

Terminology Bindings

- LabReport.status and LabReport.resultGroup.result.status are bound to the concept domain LabReportStatus: "The status of a report or result item". Possible values:

  registered | The existence of the result is registered, but there is no result yet available
  interim | This is an initial or interim result: data may be missing or verification not been performed
  final | The result is complete and verified by the responsible pathologist
  amended | The result has been modified subsequent to being Final, and is complete and verified by the responsible pathologist
  cancelled | The result is unavailable because the test was not started or not completed (also sometimes called aborted)
  withdrawn | The result has been withdrawn following previous Final release

- LabReport.requestDetail.requestTest is bound to the concept domain LabRequests: "codes for requestable tests"
- LabReport.reportName is bound to the concept domain LabReportNames: "codes for report names". If an appropriate code exists in LOINC then it should be used
- LabReport.service is bound to the concept domain LabServices: "codes for laboratory services". For example values, see HL7 v2 table 0074
- LabReport.resultGroup.name is bound to the concept domain LabResultGroupNames: "codes for result groups". If an appropriate code exists in LOINC then it should be used
- LabReport.resultGroup.result.name is bound to the concept domain LabResultNames: "codes for results". If an appropriate code exists in LOINC then it should be used
- LabReport.resultGroup.result.value[x] is not bound to a concept domain
- LabReport.resultGroup.result.flag is bound to the concept domain LabResultFlag: "codes for result flags". Possible values:

  -
  --
  ---
  +
  ++
  +++

- LabReport.resultGroup.result.referenceRange.meaning is bound to the concept domain LabReferenceRanges: "Code for the meaning of a reference range"
- LabReport.codedDiagnosis is bound to the concept domain LabDiagnosisCodes: "Codes for laboratory diagnoses". A good candidate for codes is SNOMED-CT

Notes:

- About naming: a laboratory produces "reports" that is a collection of "tests" that produce "results". Clinical consumers call the whole collection "the results". There is much potential confusion around these names. The confusion is worsened because "the report" is sometimes a document which entirely contains narrative, sometimes it is purely atomic data results, and sometimes it's a mix of both.
- The scope of this resource is the laboratory reporting process. While this resource includes some elements that relate to the ordering cycle, these are only included to the degree that it is useful for the final report to refer back to the orders. Different resources are required for supporting the ordering cycle.
- This laboratory report model provides a 3 level structure for the results - a report contains a list of groups, each of which contains a list of results. Results are grouped by either a specimen or a code that indicates that nature of the grouping (e.g. organism isolate/sensitivity or antibody functional testing). While many common lab reports don't need or benefit directly from the group structure, this lab report model imposes the group structure anyway. This means that these lab reports have a single group which has no code on it, and which contains all the results. The advantage of this model is that all the results are found at the same point in the heirarchy, and there is a single point on the heirarchy - the group - that may influence the meaning of the test.
- The element that contains the actual value of the result has a variable name depending on the type. The name is "value" + the type name, ignoring parameters, with a capital on the first letter, e.g. valueInterval or valueString
- The clinical information associated with a request can be a simple text summary, or a reference to another resource
- The diagnosticTime can be inferred from the specimens, if they are provided, but specimen details are often not provided, and the value of diagnosticTime is always important. The value of the diagnosticTime element must be consistent with the speciment collection times
- Applications consuming lab reports must take careful note of updates to lab reports, and particularly note withdrawn reports. A report shouldn't be final until all the results are final or amended. If a report is withdrawn, all the results must be withdrawn by replacing every result value with the Concept "withdrawn" in the internal terminology "Special values" (sid = "urn:hl7-org:sid/fhir/special-values"), and setting the conclusion (if provided) and the text narrative to some text like "This report has been withdrawn". A reason may be provided in the narrative.

### Relationship between results, narrative, and synoptic reports

One difficult aspect of the design of this resource can be captured with a simple question: “just what is a result?” There is a wide range of variation in the answers to this question; some respond that a result is inherently measurement based, while others focus on the clinical utility of the data item.

Some practical examples:

- Tumour dimensions in synoptic reports
- Injection volumes in radiology reports
- Phenotypes and genotypes in pathology reports
- Images (Scatter plots, electrophoresis photos, slide photos, chromatograms)

Which of these are results? For this resource, we have chosen to take an inclusive view; any of these things can be a result, as long as they have a formal code or name that has a clinical meaning, and some kind of (possible) value then they can be a result.

## Searching Criteria

The following simple search/filter parameters are defined for person:

id | an identifier associated with the report
test | the name or code of either a requested test, the report or a report group
result | the name or code or result value of a result
specimen | Either of the specimens. The parameter is then followed by an additional parameter (separated for a ".") that species search/filter inside specimen
patient | The identity of a patient
laboratory | The identity of an laboratory

The standard search parameters also apply (see Searching).

## Formal Definitions

The formal definitions for the elements above. Also available as an XML file.

LabReport
Definition | The findings and interpretation of pathology tests performed on tissues and body fluids. This is typically done in a laboratory but may be done in other environments such as at the point of care
Control | Mandatory, 1..1
Requirements | Use to record any pathology test result, including the result of a test on a specimen taken as part of a composite procedure or operation.
Comments | Not to be used for reporting on non-pathology test results e.g. diagnostic imaging, ECG or respiratory function tests. Not to be used to represent an entire cumulative report. This Pathology test result archetype represents only one of the result sets that is usually viewed as a vertical in a cumulative test report. A cumulative report is a view that is constructed from the results represented by multiple OBSERVATION archetypes. This archetype is suitable for representation of general pathology test results, but not intended to cover full synoptic reports. For these, additional resources are required to represent the data properly
RIM Mapping | Observation[isNormalAct() and subsumesCode("ActClass#OBS", classCode) and moodCode="EVN" and domainMember("LabObservationType", code)]
LabReport.id
Definition | Master Resource Id, always first in all resources
Control | Mandatory, 1..1
Type | id
RIM Mapping | unique(./id[isNormalDatatype() and displayable="false" and scope="OBJ" and reliability="ISS"])
LabReport.status
Definition | The status of the pathology test result as a whole
Control | Mandatory, 1..1
Type | code from LabReportStatus
Must Understand | true
Requirements | Labs routinely issue provisional/incomplete reports, or withdraw previously released reports
RIM Mapping | registered: ./statusCode[isNormalDatatype()]="new"; interim: ./statusCode[isNormalDatatype()]="active"; final: ./statusCode[isNormalDatatype()]="complete" and not(./inboundRelationship[typeCode="SUBJ" and isNormalActRelationship()]/source[subsumesCode("ActClass#CACT") and moodCode="EVN" and domainMember("ReviseLabOrder", code) and isNormalAct()]); amended: ./statusCode[isNormalDatatype()]="complete" and ./inboundRelationship[typeCode="SUBJ" and isNormalActRelationship()]/source[subsumesCode("ActClass#CACT") and moodCode="EVN" and domainMember("ReviseLabOrder", code) and isNormalAct() and statusCode="completed"]; cancelled: ./statusCode[isNormalDatatype()]="aborted"; withdrawn: ./statusCode[isNormalDatatype()]="obsolete"
LabReport.issued
Definition | The date and/or time that the result was issued from the source for the recorded â€˜Test result status
Control | Mandatory, 1..1
Type | instant
Must Understand | true
Requirements | Clinicians need to be able to check the date that the report was released
Comments | May be different from LabReport.updated, because that is the status of this record, not the report the record is about
RIM Mapping | firstOf(unique(./participation[isHighest(priorityCode) and typeCode="VRF" and isNormalParticipation()]/time[type="TS"]), unique(./participation[isHighest(priorityCode) and typeCode="AUT" and isNormalParticipation()]/time[type="TS"]))
LabReport.patient
Definition | The patient about who the report is about
Control | Mandatory, 1..1
Type | Resource(Patient)
Must Understand | true
Requirements | Must know the patient context
RIM Mapping | unique(./participation[isHighest(priorityCode) and typeCode="SBJ" and isNormalParticipation()]/role[classCode="PAT"])
To Do | need to check the wording -is it about, upon, for?
LabReport.admission
Definition | The admission that this diagnostic investigation is associated with
Control | Optional, 0..1
Type | Resource(Admission)
Requirements | Some institutions track and file diagnostic reports under a specific admission
RIM Mapping | unique(./inboundRelationship[isHighest(priorityCode) and typeCode="SUBJ" and isNormalActRelationship()]/source[subsumesCode("ActClass#ENC", code) and moodCode="EVN" and isNormalAct()])
To Do | Reckon this is not 80%
LabReport.laboratory
Definition | The laboratory service that issued the report
Control | Mandatory, 1..1
Type | Resource(Organization)
Requirements | Need to know how to contact if there are queries about the results. Also may need to track the source of reports for secondary data analysis
Comments | This is not necessarily the source of the atomic reports - it's the lab that takes responsibility for the clinical report
RIM Mapping | unique(./participation[isHighest(priorityCode) and typeCode="AUT" and isNormalParticipation()]/role[subsumesCode("RoleClass#ASSIGN", classCode)]/scoper[subsumesCode("EntityClass#ORG", classCode) and determinerCode="INSTANCE"])
LabReport.reportId
Definition | The local ID assigned to the report by the order filler, usually by the Laboratory Information System (LIS).
Control | Optional, 0..1
Type | id
Requirements | Need to know what identifier to use when making queries about this report from the source laboratory
RIM Mapping | unique(./id[displayable="true" and scope="OBJ"])
LabReport.requestDetail
Definition | Details concerning a single pathology test requested.
Control | 0..*
Requirements | Need to be able to track completion of requests based on reports issued, and also to report what diagnostic test swere requested (not always the same as what is delivered)
Comments | Note: Usually there is one test request for each result, however in some circumstances multiple test requests may be represented using a single Pathology test result resource
RIM Mapping | unique(./outboundRelationship[typeCode="FLFS" and isNormalActRelationship()]/target[subsumesCode("ActClass#OBS", classCode) and subsumes("ActMood#PRMS", moodCode) and isNormalAct()])
LabReport.requestDetail.requestOrderId
Definition | The local ID assigned to the order by the order requester.
Control | Optional, 0..1
Type | Identifier
Requirements | Need to be able to track completion of requests based on reports issued
Comments | Equivalent to the Placer Order Identifier
RIM Mapping | unique(./outboundRelationship[typeCode="FLFS" and isNormalActRelationship()]/target[subsumesCode("ActClass#OBS", classCode) and subsumes("ActMood#RQO", moodCode) and isNormalAct()]/id[scope="OBJ" and displayable="true"])
To Do | Reckon this is not 80%
LabReport.requestDetail.receiverOrderId
Definition | The local ID assigned to the test order by the order filler, usually by the Laboratory Information System (LIS).
Control | Optional, 0..1
Type | Identifier
Requirements | Need to be able to track completion of requests based on reports issued
Comments | Usually equivalent to the DICOM Accession Number and the Filler Order Identifier.
RIM Mapping | unique(./id[scope="OBJ" and displayable="true"])
To Do | Reckon this is not 80%
LabReport.requestDetail.requestTest
Definition | Identification of pathology test requested,
Control | 0..*
Type | CodeableConcept from LabRequests
Requirements | Need to be able to report what diagnostic test swere requested (not always the same as what is delivered)
Comments | Useful where the test requested differs from the test actually performed.
RIM Mapping | ./code
LabReport.requestDetail.requester
Definition | Details of the clinician or organisation requesting the laboratory test.
Control | Optional, 0..1
Type | Resource(Agent|Organization)
Requirements | The requesting clinician may need to be contacted concerning the interpretation of the lab report
RIM Mapping | Agent: unique(./participation[isHighest(priorityCode) and typeCode="AUT" and isNormalParticipation()]/role[subsumesCode("RoleClass#ASSIGN", classCode)] Organization: unique(./participation[isHighest(priorityCode) and typeCode="AUT" and isNormalParticipation()]/role[subsumesCode("RoleClass#ASSIGN", classCode)]/scoper[subsumesCode("EntityClass#ORG", classCode) and determinerCode="INSTANCE" and code[isNormalDatatype]])
LabReport.requestDetail.clinicalInfo
Definition | Details of the clinical information provided to the laboratory along with the original request
Control | Optional, 0..1
Type | Resource(Any)
Requirements | Knowing the clinical information may influence the interpretation of the result
RIM Mapping | ./outboundRelationship[typeCode="PERT" and isNormalActRelationship()]/target
To Do | This isn't really *ANY* resource. You can't send a drug or an Animal or a bunch of other things. What you really want here are "acts", and I suspect there's a constraint that the subject of the LabReport must have participated in them as subject or perhaps in some other way.
LabReport.reportName
Definition | Identification of the pathology test performed, sometimes including specimen type.
Control | Mandatory, 1..1
Type | CodeableConcept from LabReportNames
Must Understand | true
Requirements | Need to know what report this is, so clinicians can filter/find the reports they are looking for
Comments | A test result may be for a single analyte, or a group of items, including panel tests.
RIM Mapping | ./code
LabReport.service
Definition | The diagnostic service that performs the examination e.g. biochemistry, haematology.
Control | Optional, 0..1
Type | CodeableConcept from LabServices
Requirements | Help clinicians filter/find the reports they are looking for
RIM Mapping | unique(./inboundRelationship[typeCode="COMP" and isNormalActRelationship()]/source[subsumesCode("ActClass#LIST", classCode) and moodCode="EVN" and inDomain(code,"Lab Service") and isNormalAct()]/code
To Do | I'm not sure this is in the 80%.
LabReport.diagnosticTime
Definition | The diagnostically relevant time for this report
Control | Mandatory, 1..1
Type | dateTime
Must Understand | true
Requirements | Need to know where in the patient history to file/present this report
Comments | The diagnostically relevant time can be derived from the specimen collection times, but the specimen information is not always available, and the exact relationship is not always automatic
RIM Mapping | ./effectiveTime[type="TS"]
LabReport.specimen
Definition | Details about the specimen if all individual test results are derived from the same specimen
Control | 0..*
Type | Resource(Specimen)
Requirements | Need to be able to report information about the collected specimens on which the report is based
Comments | If the specimen is sufficiently specified with a code in the Test result name, then this additional data may be redundant. If there are multiple specimens, these may be represented per 'Result group'
RIM Mapping | unique(./participation[typeCode="SUBJ" and isNormalParticipation()]/role[subsumesCode("RoleClass#SPEC", classCode)])
LabReport.resultGroup
Definition | A group of results. Results may be grouped by specimen, or by some value in LabReport.resultGroup.name to describe what binds all the results together.
Control | 1..*
Must Understand | true
Requirements | Need to be able to report groups of results, where the result grouping is arbitrary, but meaningful
Comments | Many (most) lab reports don't really have a meaningful group. In these cases, just create a single group with no specimen or name
RIM Mapping | ./outboundRelationship[typeCode="COMP" and isNormalActRelationship()]/target[isNormalAct() and subsumesCode("ActClass#OBS", classCode) and moodCode="EVN" and fromDomain(code, "LabObservationBattery")]
LabReport.resultGroup.name
Definition | A code or name that describes the group of results
Control | Optional, 0..1
Type | CodeableConcept from LabResultGroupNames
Must Understand | true
Comments | For example, the antibody code for a goup of antibody related test, or the organism code for a group of isolate/sensitivities. Leave blank if there is no particular meaning associated with the group
RIM Mapping | ./code
LabReport.resultGroup.specimen
Definition | Details about the individual specimen to which these â€˜Result groupâ€™ test results refer, where testing of multiple specimens is required.
Control | Optional, 0..1
Type | Resource(Specimen)
Requirements | Need to be able to report information about the collected specimens on which the report is based
RIM Mapping | unique(./participation[typeCode="SBJ" and isNormalParticipation()]/role[subsumesCode("RoleClass#SPEC", classCode)])
LabReport.resultGroup.result
Definition | Specific detailed result, including both the value of the result item, and additional information that may be useful for clinical interpretation. Results include whatever specific data items pathology labs report as part of the clinical service; it is not confined to measurements.
Control | 1..*
Must Understand | true
Requirements | Need to report results with information that assist with interpretation
RIM Mapping | ./outboundRelationship[typeCode="COMP" and isNormalActRelationship()]/target[subsumesCode("ActClass#OBS", classCode) and moodCode="EVN" and isNormalAct() and fromDomain(code, "LabObservationResult")]
LabReport.resultGroup.result.name
Definition | Identifies the meaning of the value
Control | Optional, 0..1
Type | CodeableConcept from LabResultNames
Must Understand | true
Requirements | Need to know what the result is about
Comments | results are fundamentally a name - value pair with additional clarifying information
RIM Mapping | ./code
LabReport.resultGroup.result.value[x]
Definition | Actual value of the result. Most result values will be numerical measurements, but others may be coded concepts, free text, or multimedia images
Control | Optional, 0..1
Type | Quantity|CodeableConcept|Attachment|Ratio|Choice|Interval(dateTime)|string from *unbound*
Must Understand | true
Requirements | Need a value for the result
RIM Mapping | ./value
LabReport.resultGroup.result.flag
Definition | Flag indicating the abnormal status of the result
Control | Optional, 0..1
Type | code from LabResultFlag
Must Understand | true
RIM Mapping | ./interpretationCode
To Do | The proposed set of codes are too narrow (and doesn't map well to v3.)
LabReport.resultGroup.result.status
Definition | The status of the result value
Control | Mandatory, 1..1
Type | code from LabReportStatus
Must Understand | true
Requirements | Need to track the status of individual results - some results are finalised before the whole report is finalised
RIM Mapping | (as per LabReport.status)
LabReport.resultGroup.result.comments
Definition | May include statements about significant, unexpected or unreliable. values, or information about the source of the value where this may be relevant to the interpretation of the result.
Control | Optional, 0..1
Type | string
Must Understand | true
Requirements | Need to be able to provide free text additional information
RIM Mapping | unique(./inboundRelationship[typeCode="SUBJ" and isNormalActRelationship()]/source[subsumesCode("ActClass#OBS", classCode) and moodCode="EVN" and mapsTo(code, "LOINC# 48767-8") and isNormalAct()]/value[type="ST"])
LabReport.resultGroup.result.referenceRange
Definition | Guidance on how to interpret the value by comparison to a normal or recommended range
Control | 0..*
Must Understand | true
Requirements | Need to be able to provide multiple reference ranges
Comments | Most results only have one reference range. Some non-numerical results don't have a reference range
RIM Mapping | ./outboundRelationship[typeCode="REFV" and isNormalActRelationship()]/target[subsumesCode("ActClass#OBS", classCode) and moodCode="EVN" and isCriterionInd="true" and isNormalAct()]
To Do | Are multiple reference ranges in the 80%?
LabReport.resultGroup.result.referenceRange.meaning
Definition | Code for the meaning of the reference range
Control | Optional, 0..1
Type | CodeableConcept from LabReferenceRanges
Requirements | Need to be able to say what kind of reference range this is - normal, recommended, therapeutic, or perhaps what state this reference range applies to (i.e. hormonal cycles)
RIM Mapping | ./interpretationCode
LabReport.resultGroup.result.referenceRange.range[x]
Definition | Actual value of the reference range. May be a quantity (<20mg/L), an interval (10-20 umol/L), or some text
Control | Mandatory, 1..1
Type | Quantity|Interval(Quantity)|string
Requirements | Need to be able to report numerical or text reference ranges, and handle legacy data
Comments | Text reference ranges are typically used in endocrinology, or for legacy data with string reference ranges
RIM Mapping | ./value[type=("PQ", "IVL_PQ", "ST")]
LabReport.conclusion
Definition | Concise and clinically contextualised narrative interpretation of the pathology test results.
Control | Optional, 0..1
Type | Narrative
Must Understand | true
Requirements | Need to be able to provide a conclusion that is not lost amongst the basic result data
Comments | common reports don't have a conclusion, but some do
RIM Mapping | unique(./inboundRelationship[typeCode="SPRT" and isNormalActRelationship()]/source[subsumesCode("ActClass#OBS", classCode) and moodCode="EVN" and mapsTo(code, "LOINC# 48767-8") and isNormalAct()]/value[type="ST"])
To Do | Is this in the 80%?
LabReport.codedDiagnosis
Definition | Codes for the conclusion
Control | 0..*
Type | CodeableConcept from LabDiagnosisCodes
RIM Mapping | unique(./inboundRelationship[typeCode="SPRT" and isNormalActRelationship()]/source[subsumesCode("ActClass#OBS", classCode) and moodCode="EVN" and subsumesCode(code, "LOINC# 54531-9") and isNormalAct()]/value[type="CD"])
LabReport.representation
Definition | Rich text representation of the entire result as issued by the diagnostic service. Multiple formats are allowed but they must be semantically equivalent.
Control | 1..*
Type | Attachment
Must Understand | true
Requirements | Laboratory needs to be able to provide it's own fully formatted report for clinical fidelity
Comments | Possible formats: text/html, text/plain, text/rtf, application/msword, application/pdf, application/rtf, application/vnd.oasis.opendocument.text, application/vnd.openxmlformats-officedocument.wordprocessingml.document
RIM Mapping | ./text[type="ED"]
LabReport.extensions
Definition | See Extensions
Control | Optional, 0..1
RIM Mapping | N/A
LabReport.text
Definition | Text summary of report, for human interpretation
Control | Mandatory, 1..1
Type | Narrative
RIM Mapping | unique(./text[type="ST"])

This is an old version of FHIR retained for archive purposes. Do not use for anything else
Implementers are welcome to experiment with the content defined here, but should note that the contents are subject to change without prior notice.
© HL7.org 2011 - 2012. FHIR v0.01 generated on Mon, May 14, 2012 09:48+1000.