The official URL for this profile is:
https://esource-consortium.github.io/fhir-clinical-research/cr-core-results
This FHIR profile sets minimum expectations for the Observation resource resource to search / fetch laboratory test results associated with a patient on a clinical trial. It identifies which core elements, extensions, vocabularies and value sets SHALL be present in the resource when using this profile.
FHIR servers must ensure that all lab results are associated with a protocol. Non protocol specific lab results SHOULD NOT be returned.
The following are example usage scenarios for the CR Core-Results profile:
The following data-elements are mandatory (i.e data MUST be present). These are presented below in a simple human-readable explanation. Profile specific guidance and examples are provided as well. The Formal Profile Definition below provides the formal summary, definitions, and terminology requirements.
Description of Profiles, Differentials, Snapshots and how the different presentations work.
This structure is derived from Observation
This structure is derived from Observation
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Observation | I | 0..* | Measurements and simple assertions obs-7: If Observation.code is the same as an Observation.component.code then the value element associated with the code SHALL NOT be present obs-6: dataAbsentReason SHALL only be present if Observation.value[x] is not present | |
id | Σ | 0..1 | id | Logical id of this artifact |
meta | Σ | 0..1 | Meta | Metadata about the resource |
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created |
language | 0..1 | code | Language of the resource content Binding: CommonLanguages (preferred) Max Binding: AllLanguages | |
text | 0..1 | Narrative | Text summary of the resource, for human interpretation | |
contained | 0..* | Resource | Contained, inline Resources | |
extension | 0..* | Extension | Additional content defined by implementations | |
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored |
identifier | SΣ | 0..* | Identifier | Business Identifier for observation |
id | 0..1 | string | Unique id for inter-element referencing | |
extension | 0..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url | |
use | ?!Σ | 0..1 | code | usual | official | temp | secondary | old (If known) Binding: IdentifierUse (required) |
type | Σ | 0..1 | CodeableConcept | Description of identifier Binding: Identifier Type Codes (extensible) |
system | SΣ | 0..1 | uri | The namespace for the identifier value Example General': http://www.acme.com/identifiers/patient |
value | SΣ | 0..1 | string | The value that is unique Example General': 123456 |
period | Σ | 0..1 | Period | Time period when id is/was valid for use |
assigner | Σ | 0..1 | Reference(Organization) | Organization that issued id (may be just text) |
basedOn | Σ | 0..* | Reference(CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest) | Fulfills plan, proposal or order |
partOf | Σ | 0..* | Reference(MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Immunization | ImagingStudy) | Part of referenced event |
status | ?!SΣ | 1..1 | code | registered | preliminary | final | amended + Binding: ObservationStatus (required) |
category | SI | 1..* | CodeableConcept | Classification of type of observation Binding: ObservationCategoryCodes (preferred) cr-core-1: Must have a category of 'laboratory' and a code system 'http://hl7.org/fhir/observation-category' |
code | SΣ | 1..1 | CodeableConcept | Laboratory Test Name Binding: (unbound) (extensible) |
subject | SΣ | 1..1 | Reference(CRCorePatient) | Who and/or what the observation is about |
focus | Σ | 0..* | Reference(Resource) | What the observation is about, when it is not about the subject of record |
encounter | Σ | 0..1 | Reference(Encounter) | Healthcare event during which this observation is made |
effective[x] | SΣ | 0..1 | dateTime, Period, Timing, instant | Clinically relevant time/time-period for observation |
issued | Σ | 0..1 | instant | Date/Time this version was made available |
performer | Σ | 0..* | Reference(Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson) | Who is responsible for the observation |
value[x] | SΣI | 0..1 | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period | Actual result |
dataAbsentReason | SI | 0..1 | CodeableConcept | Why the result is missing Binding: DataAbsentReason (extensible) |
interpretation | 0..* | CodeableConcept | High, low, normal, etc. Binding: ObservationInterpretationCodes (extensible) | |
note | 0..* | Annotation | Comments about the observation | |
bodySite | 0..1 | CodeableConcept | Observed body part Binding: SNOMEDCTBodyStructures (example) | |
method | 0..1 | CodeableConcept | How it was done Binding: ObservationMethods (example) | |
specimen | 0..1 | Reference(Specimen) | Specimen used for this observation | |
device | 0..1 | Reference(Device | DeviceMetric) | (Measurement) Device | |
referenceRange | I | 0..* | BackboneElement | Provides guide for interpretation obs-3: Must have at least a low or a high or text |
id | 0..1 | string | Unique id for inter-element referencing | |
extension | 0..* | Extension | Additional content defined by implementations | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized |
low | I | 0..1 | SimpleQuantity | Low Range, if relevant |
high | I | 0..1 | SimpleQuantity | High Range, if relevant |
type | 0..1 | CodeableConcept | Reference range qualifier Binding: ObservationReferenceRangeMeaningCodes (preferred) | |
appliesTo | 0..* | CodeableConcept | Reference range population Binding: ObservationReferenceRangeAppliesToCodes (example) | |
age | 0..1 | Range | Applicable age range, if relevant | |
text | 0..1 | string | Text based reference range in an observation | |
hasMember | Σ | 0..* | Reference(Observation | QuestionnaireResponse | MolecularSequence) | Related resource that belongs to the Observation group |
derivedFrom | Σ | 0..* | Reference(DocumentReference | ImagingStudy | Media | QuestionnaireResponse | Observation | MolecularSequence) | Related measurements the observation is made from |
component | ΣI | 0..* | BackboneElement | Component results |
id | 0..1 | string | Unique id for inter-element referencing | |
extension | 0..* | Extension | Additional content defined by implementations | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized |
code | Σ | 1..1 | CodeableConcept | Type of component observation (code / type) Binding: LOINCCodes (example) |
value[x] | Σ | 0..1 | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period | Actual component result |
dataAbsentReason | I | 0..1 | CodeableConcept | Why the component result is missing Binding: DataAbsentReason (extensible) |
interpretation | 0..* | CodeableConcept | High, low, normal, etc. Binding: ObservationInterpretationCodes (extensible) | |
referenceRange | 0..* | Unknown reference to #Observation.referenceRange Provides guide for interpretation of component result | ||
Documentation for this format |
This structure is derived from Observation
Differential View
This structure is derived from Observation
Snapshot View
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Observation | I | 0..* | Measurements and simple assertions obs-7: If Observation.code is the same as an Observation.component.code then the value element associated with the code SHALL NOT be present obs-6: dataAbsentReason SHALL only be present if Observation.value[x] is not present | |
id | Σ | 0..1 | id | Logical id of this artifact |
meta | Σ | 0..1 | Meta | Metadata about the resource |
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created |
language | 0..1 | code | Language of the resource content Binding: CommonLanguages (preferred) Max Binding: AllLanguages | |
text | 0..1 | Narrative | Text summary of the resource, for human interpretation | |
contained | 0..* | Resource | Contained, inline Resources | |
extension | 0..* | Extension | Additional content defined by implementations | |
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored |
identifier | SΣ | 0..* | Identifier | Business Identifier for observation |
id | 0..1 | string | Unique id for inter-element referencing | |
extension | 0..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url | |
use | ?!Σ | 0..1 | code | usual | official | temp | secondary | old (If known) Binding: IdentifierUse (required) |
type | Σ | 0..1 | CodeableConcept | Description of identifier Binding: Identifier Type Codes (extensible) |
system | SΣ | 0..1 | uri | The namespace for the identifier value Example General': http://www.acme.com/identifiers/patient |
value | SΣ | 0..1 | string | The value that is unique Example General': 123456 |
period | Σ | 0..1 | Period | Time period when id is/was valid for use |
assigner | Σ | 0..1 | Reference(Organization) | Organization that issued id (may be just text) |
basedOn | Σ | 0..* | Reference(CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest) | Fulfills plan, proposal or order |
partOf | Σ | 0..* | Reference(MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Immunization | ImagingStudy) | Part of referenced event |
status | ?!SΣ | 1..1 | code | registered | preliminary | final | amended + Binding: ObservationStatus (required) |
category | SI | 1..* | CodeableConcept | Classification of type of observation Binding: ObservationCategoryCodes (preferred) cr-core-1: Must have a category of 'laboratory' and a code system 'http://hl7.org/fhir/observation-category' |
code | SΣ | 1..1 | CodeableConcept | Laboratory Test Name Binding: (unbound) (extensible) |
subject | SΣ | 1..1 | Reference(CRCorePatient) | Who and/or what the observation is about |
focus | Σ | 0..* | Reference(Resource) | What the observation is about, when it is not about the subject of record |
encounter | Σ | 0..1 | Reference(Encounter) | Healthcare event during which this observation is made |
effective[x] | SΣ | 0..1 | dateTime, Period, Timing, instant | Clinically relevant time/time-period for observation |
issued | Σ | 0..1 | instant | Date/Time this version was made available |
performer | Σ | 0..* | Reference(Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson) | Who is responsible for the observation |
value[x] | SΣI | 0..1 | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period | Actual result |
dataAbsentReason | SI | 0..1 | CodeableConcept | Why the result is missing Binding: DataAbsentReason (extensible) |
interpretation | 0..* | CodeableConcept | High, low, normal, etc. Binding: ObservationInterpretationCodes (extensible) | |
note | 0..* | Annotation | Comments about the observation | |
bodySite | 0..1 | CodeableConcept | Observed body part Binding: SNOMEDCTBodyStructures (example) | |
method | 0..1 | CodeableConcept | How it was done Binding: ObservationMethods (example) | |
specimen | 0..1 | Reference(Specimen) | Specimen used for this observation | |
device | 0..1 | Reference(Device | DeviceMetric) | (Measurement) Device | |
referenceRange | I | 0..* | BackboneElement | Provides guide for interpretation obs-3: Must have at least a low or a high or text |
id | 0..1 | string | Unique id for inter-element referencing | |
extension | 0..* | Extension | Additional content defined by implementations | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized |
low | I | 0..1 | SimpleQuantity | Low Range, if relevant |
high | I | 0..1 | SimpleQuantity | High Range, if relevant |
type | 0..1 | CodeableConcept | Reference range qualifier Binding: ObservationReferenceRangeMeaningCodes (preferred) | |
appliesTo | 0..* | CodeableConcept | Reference range population Binding: ObservationReferenceRangeAppliesToCodes (example) | |
age | 0..1 | Range | Applicable age range, if relevant | |
text | 0..1 | string | Text based reference range in an observation | |
hasMember | Σ | 0..* | Reference(Observation | QuestionnaireResponse | MolecularSequence) | Related resource that belongs to the Observation group |
derivedFrom | Σ | 0..* | Reference(DocumentReference | ImagingStudy | Media | QuestionnaireResponse | Observation | MolecularSequence) | Related measurements the observation is made from |
component | ΣI | 0..* | BackboneElement | Component results |
id | 0..1 | string | Unique id for inter-element referencing | |
extension | 0..* | Extension | Additional content defined by implementations | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized |
code | Σ | 1..1 | CodeableConcept | Type of component observation (code / type) Binding: LOINCCodes (example) |
value[x] | Σ | 0..1 | Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, time, dateTime, Period | Actual component result |
dataAbsentReason | I | 0..1 | CodeableConcept | Why the component result is missing Binding: DataAbsentReason (extensible) |
interpretation | 0..* | CodeableConcept | High, low, normal, etc. Binding: ObservationInterpretationCodes (extensible) | |
referenceRange | 0..* | Unknown reference to #Observation.referenceRange Provides guide for interpretation of component result | ||
Documentation for this format |
Other representations of profile: Schematron
Path | Conformance | ValueSet |
Observation.language | preferred | CommonLanguages Max Binding: AllLanguages |
Observation.identifier.use | required | IdentifierUse |
Observation.identifier.type | extensible | Identifier Type Codes |
Observation.status | required | ObservationStatus |
Observation.category | preferred | ObservationCategoryCodes |
Observation.code | extensible | |
Observation.dataAbsentReason | extensible | DataAbsentReason |
Observation.interpretation | extensible | ObservationInterpretationCodes |
Observation.bodySite | example | SNOMEDCTBodyStructures |
Observation.method | example | ObservationMethods |
Observation.referenceRange.type | preferred | ObservationReferenceRangeMeaningCodes |
Observation.referenceRange.appliesTo | example | ObservationReferenceRangeAppliesToCodes |
Observation.component.code | example | LOINCCodes |
Observation.component.dataAbsentReason | extensible | DataAbsentReason |
Observation.component.interpretation | extensible | ObservationInterpretationCodes |
Id | Path | Details | Requirements |
dom-2 | Observation | If the resource is contained in another resource, it SHALL NOT contain nested Resources : contained.contained.empty() | |
dom-4 | Observation | If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated : contained.meta.versionId.empty() and contained.meta.lastUpdated.empty() | |
dom-3 | Observation | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource : contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty() | |
dom-6 | Observation | A resource should have narrative for robust management : text.div.exists() | |
dom-5 | Observation | If a resource is contained in another resource, it SHALL NOT have a security label : contained.meta.security.empty() | |
obs-7 | Observation | If Observation.code is the same as an Observation.component.code then the value element associated with the code SHALL NOT be present : value.empty() or component.code.where( (coding.code = %resource.code.coding.code) and (coding.system = %resource.code.coding.system)).empty() | |
obs-6 | Observation | dataAbsentReason SHALL only be present if Observation.value[x] is not present : dataAbsentReason.empty() or value.empty() | |
cr-core-1 | Observation.category | Must have a category of 'laboratory' and a code system 'http://hl7.org/fhir/observation-category' : where(coding.system='http://hl7.org/fhir/observation-category' and coding.code='laboratory').exists() | |
ele-1 | Observation.referenceRange | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
obs-3 | Observation.referenceRange | Must have at least a low or a high or text : low.exists() or high.exists() or text.exists() | |
ele-1 | Observation.component | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) |
Below is an overview of the required set of RESTful FHIR interactions - for example, search and read operations - for this profile. See the Conformance requirements for a complete list of supported RESTful interactions for this IG.
GET [base]/Observation?ResearchStudy=[study-id]&category=laboratory
Example: GET [base]/Observation?ResearchStudy=12-345&category=laboratory
Support: Mandatory to support search by Research Study and category code = ‘laboratory’.
Implementation Notes: Search based on a Research Study and laboratory category code = “laboratory”. This fetches a bundle of all Observation resources with laboratory categories for the specified ResearchStudy.
GET [base]/observations?ResearchStudy=[study-id]&category=laboratory&patient:_has:ResearchSubject:identifier=[subject-id]
Example: GET [base]/observations?ResearchStudy=12-345&category=laboratory&patient:_has:ResearchSubject:identifier=12345
Support: Mandatory to support search by Research Subject and category code = ‘laboratory’.
Implementation Notes: Search based on a Research Study and Research Subject with laboratory category code = “laboratory”. This fetches a bundle of all Observation resources with laboratory categories for the specified ResearchStudy / ResearchSubject.
GET
[base]/observations?ResearchStudy=[study-id]&category=laboratory&date=[date]&date=[date]
Example: GET [base]/observations?ResearchStudy=17-238&category=laboratory&context:Encounter.date=le2006-06-30&context:Encounter.date=ge2006-06-20
Support: Mandatory to support search by Research Study, category code = ‘laboratory’, and date/period.
Implementation Notes: Search based on a Research Study and date with laboratory category code = “laboratory”. This fetches a bundle of all Observation resources with laboratory categories for the specified ResearchStudy for a specified time period.