Phd Compound Numeric Observation Profile

The Compound Numeric Observation Profile is used when the PHD metric measurement contains one of the following attributes:

Attribute Value Additional Information
Compound-Basic-Nu-Observed-Value set of 16-bit Mder SFLOATs 12-bit mantissa, 4-bit exponent
Compound-Simple-Nu-Observed-Value set of 32-bit Mder FLOATs 24-bit mantissa, 8-bit exponent
Compound-Nu-Observed-Value set of 32-bit Mder FLOATs Complex attribute. Also contains
metric-id
measurement status
unit-code

These attributes contain a measurement value that is described by a set of multiple numbers such as the x, y, and z components of an acceleration. It is NOT used to report an array of measurements but only where the quantity being measured requires more than one number to describe it. Each individual entry of the compound value is reported in an Observation.component element. The Mder SFLOAT and FLOAT encodings of each entry indicate both precision and the number of significant figures. The Observation.component.valueQuantity.value element is required to honor the reported precision as indicated by the Mder S/FLOAT. See the section Mder FLOATs and SFLOATs for instructions on handling Mder S/FLOATs and their encoding to the valueQuantity.

The Observation.component.code element is obtained from the Metric-Id-List attribute unless the measurement reported is a Compound-Nu-Observed-Value attribute. In that case the attribute itself has the metric type for each entry and that is used instead of the Metric-Id-List entries. The order of the entries in the Metric-Id-List are one-to-one with the order of the compound attribute entries. For example, if the Metric-Id-List in the Blood Pressure measurement has MDC codes for 'systolic", "diastolic" and "mean" in that order, the quantities in the compound attribute are the systolic, diastolic, and mean values, respectively.

The Observation.code element comes from the Type attribute and gives the general type of measurement. For example, the Type attribute might indicate "acceleration" or "non-invasive blood pressure". There is no Observation.value[x] entry. There may still be an Observation.dataAbsentReason element if, say, the Measurement-Status attribute indicates an invalid or otherwise overall failure value. If there is such an overall failure of the measurement, then there is no need to report the components.

The structure definition is as follows:

idΣ0..1id
id0..1string
extensionI0..*Extension
versionIdΣ0..1id
lastUpdatedΣ0..1instant
phdProfileΣ1..1uriFixed Value
securityΣ0..*CodingBinding
tagΣ0..*Coding
implicitRulesΣ ?!0..1uri
language0..1codeBinding
textI0..1Narrative
contained0..*Resource
extensionI0..*Extension
modifierExtension?! I0..*Extension
id0..1string
extensionI0..*Extension
useΣ ?!0..1codeBinding
typeΣ0..1CodeableConceptBinding
systemΣ0..1uri
valueΣ1..1string
periodΣ I0..1Period
assignerΣ I0..1Reference(http://hl7.org/fhir/StructureDefinition/Organization)
basedOnΣ I0..*Reference(http://hl7.org/fhir/StructureDefinition/CarePlan | http://hl7.org/fhir/StructureDefinition/DeviceRequest | http://hl7.org/fhir/StructureDefinition/ImmunizationRecommendation | http://hl7.org/fhir/StructureDefinition/MedicationRequest | http://hl7.org/fhir/StructureDefinition/NutritionOrder | http://hl7.org/fhir/StructureDefinition/ProcedureRequest | http://hl7.org/fhir/StructureDefinition/ReferralRequest)
statusΣ ?!1..1codeBinding
category0..*CodeableConceptBinding
id0..1string
extensionI0..*Extension
id0..1string
extensionI0..*Extension
systemΣ1..1uriFixed Value
versionΣ0..1string
codeΣ1..1code
displayΣ0..1string
userSelectedΣ0..1boolean
id0..1string
extensionI0..*Extension
systemΣ1..1uriFixed Value
versionΣ0..1string
codeΣ1..1code
displayΣ0..1string
userSelectedΣ0..1boolean
textΣ0..1string
id0..1string
extensionI0..*Extension
referenceΣ I1..1string
identifierΣ0..1Identifier
displayΣ0..1string
contextI0..1Reference(http://hl7.org/fhir/StructureDefinition/Encounter | http://hl7.org/fhir/StructureDefinition/EpisodeOfCare)
id0..1string
extensionI0..*Extension
startΣ I1..1dateTime
endΣ I1..1dateTime
dateTimeEffectiveΣ0..1dateTime
issuedΣ0..1instant
performerΣ I0..*Reference(http://hl7.org/fhir/StructureDefinition/Practitioner | http://hl7.org/fhir/StructureDefinition/Organization | http://hl7.org/fhir/StructureDefinition/Patient | http://hl7.org/fhir/StructureDefinition/RelatedPerson)
id0..1string
extensionI0..*Extension
id0..1string
extensionI0..*Extension
systemΣ1..1uri
versionΣ0..1string
codeΣ1..1code
displayΣ0..1string
userSelectedΣ0..1boolean
textΣ0..1string
interpretation0..1CodeableConceptBinding
comment0..1string
bodySite0..1CodeableConcept
method0..1CodeableConcept
specimenI0..1Reference(http://hl7.org/fhir/StructureDefinition/Specimen)
id0..1string
extensionI0..*Extension
referenceΣ I1..1string
identifierΣ0..1Identifier
displayΣ0..1string
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
lowI0..1http://hl7.org/fhir/StructureDefinition/SimpleQuantity
highI0..1http://hl7.org/fhir/StructureDefinition/SimpleQuantity
type0..1CodeableConceptBinding
appliesTo0..*CodeableConcept
ageI0..1Range
text0..1string
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
type0..1codeBinding
targetI1..1Reference(http://hl7.org/fhir/StructureDefinition/Observation | http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse | http://hl7.org/fhir/StructureDefinition/Sequence)
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
type0..1codeBinding
id0..1string
extensionI0..*Extension
referenceΣ I1..1string
identifierΣ0..1Identifier
displayΣ0..1string
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
type0..1codeBinding
id0..1string
extensionI0..*Extension
referenceΣ I1..1string
identifierΣ0..1Identifier
displayΣ0..1string
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
codeΣ1..1CodeableConcept
valueQuantityQuantity
valueCodeableConceptCodeableConcept
valueStringstring
valueRangeRange
valueRatioRatio
valueSampledDataSampledData
valueAttachmentAttachment
valueTimetime
valueDateTimedateTime
valuePeriodPeriod
dataAbsentReasonI0..1CodeableConceptBinding
interpretation0..1CodeableConceptBinding
referenceRange0..*see (referenceRange)
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
id0..1string
extensionI0..*Extension
id0..1string
extensionI0..*Extension
systemΣ1..1uriFixed Value
versionΣ0..1string
codeΣ1..1codeFixed Value
displayΣ0..1string
userSelectedΣ0..1boolean
textΣ0..1string
id0..1string
extensionI0..*Extension
id0..1string
extensionI0..*Extension
systemΣ1..1uriFixed Value
versionΣ0..1string
codeΣ1..1code
displayΣ0..1string
userSelectedΣ0..1boolean
textΣ0..1string
dataAbsentReasonI0..0CodeableConceptBinding
interpretation0..1CodeableConceptBinding
referenceRange0..*see (referenceRange)
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
id0..1string
extensionI0..*Extension
id0..1string
extensionI0..*Extension
systemΣ1..1uriFixed Value
versionΣ0..1string
codeΣ1..1codeFixed Value
displayΣ0..1string
userSelectedΣ0..1boolean
textΣ0..1string
id0..1string
extensionI0..*Extension
valueΣ1..1decimal
comparatorΣ ?!0..1codeBinding
unitΣ1..1string
systemΣ I1..1uriFixed Value
codeΣ1..1codeFixed Value
dataAbsentReasonI0..0CodeableConceptBinding
interpretation0..1CodeableConceptBinding
referenceRange0..*see (referenceRange)
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
id0..1string
extensionI0..*Extension
id0..1string
extensionI0..*Extension
systemΣ1..1uriFixed Value
versionΣ0..1string
codeΣ1..1codeFixed Value
displayΣ0..1string
userSelectedΣ0..1boolean
textΣ0..1string
id0..1string
extensionI0..*Extension
valueΣ1..1decimal
comparatorΣ ?!0..1codeBinding
unitΣ1..1string
systemΣ I1..1uriFixed Value
codeΣ1..1codeFixed Value
dataAbsentReasonI0..0CodeableConceptBinding
interpretation0..1CodeableConceptBinding
referenceRange0..*see (referenceRange)
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
id0..1string
extensionI0..*Extension
id0..1string
extensionI0..*Extension
systemΣ1..1uriFixed Value
versionΣ0..1string
codeΣ1..1code
displayΣ0..1string
userSelectedΣ0..1boolean
textΣ0..1string
id0..1string
extensionI0..*Extension
id0..1string
extensionI0..*Extension
systemΣ1..1uriFixed Value
versionΣ0..1string
codeΣ1..1code
displayΣ0..1string
userSelectedΣ0..1boolean
textΣ0..1string
dataAbsentReasonI0..0CodeableConceptBinding
interpretation0..1CodeableConceptBinding
referenceRange0..*see (referenceRange)
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
id0..1string
extensionI0..*Extension
id0..1string
extensionI0..*Extension
systemΣ1..1uriFixed Value
versionΣ0..1string
codeΣ1..1code
displayΣ0..1string
userSelectedΣ0..1boolean
id0..1string
extensionI0..*Extension
systemΣ1..1uriFixed Value
versionΣ0..1string
codeΣ1..1code
displayΣ0..1string
userSelectedΣ0..1boolean
textΣ0..1string
id0..1string
extensionI0..*Extension
valueΣ1..1decimal
comparatorΣ ?!0..1codeBinding
unitΣ0..1string
systemΣ I1..1uriFixed Value
codeΣ1..1code
id0..1string
extensionI0..*Extension
id0..1string
extensionI0..*Extension
systemΣ1..1uri
versionΣ0..1string
codeΣ1..1code
displayΣ0..1string
userSelectedΣ0..1boolean
textΣ0..1string
interpretation0..1CodeableConceptBinding
referenceRange0..*see (referenceRange)
id0..1string
extensionI0..*Extension
modifierExtensionΣ ?! I0..*Extension
id0..1string
extensionI0..*Extension
id0..1string
extensionI0..*Extension
systemΣ1..1uriFixed Value
versionΣ0..1string
codeΣ1..1codeFixed Value
displayΣ0..1string
userSelectedΣ0..1boolean
textΣ0..1string
id0..1string
extensionI0..*Extension
valueΣ1..1decimal
comparatorΣ ?!0..1codeBinding
unitΣ0..1string
systemΣ I1..1uriFixed Value
codeΣ1..1code
dataAbsentReasonI0..0CodeableConceptBinding
interpretation0..1CodeableConceptBinding
referenceRange0..*see (referenceRange)

A JSON example is given in Phd Compound Numeric Observation JSON Example

Mapping Compound Numerics to FHIR

The following table shows how the compound numeric attributes are mapped to FHIR. Since the FHIR Quantity also contains the units the Unit-Code attribute value is required to complete the picture. The MDC units need to be mapped to UCUM when used in FHIR.

Attribute FHIR coding
Compound-Basic-Nu-Observed-Value.valueN
Unit-Code.code
Metric-Id-List.codeN
Observation.componentN.valueQuantity.value
Observation.componentN.valueQuantity.code (as UCUM)
Observation.componentN.code.coding.code
Compound-Simple-Nu-Observed-Value.valueN
Unit-Code.code
Metric-Id-List.codeN
Observation.componentN.valueQuantity.value
Observation.componentN.valueQuantity.code (as UCUM)
Observation.componentN.code.coding.code
Compound-Nu-Observed-Value.valueN
Compound-Nu-Observed-Value.unitN
Compound-Nu-Observed-Value.metric-idN
Compound-Nu-Observed-Value.statusN
Observation.componentN.valueQuantity.value
Observation.componentN.valueQuantity.code (as UCUM)
Observation.componentN.code.coding.code
Observation.componentN.dataAbsentReason

Conditional Create Identifier Generation

For a general description of the PHD Profile Identifier see the "PHD Profile Identifier" section in Phd Base Profile. The table below lists the items that make up the identifier.

Entry value Additional information
device "Phd Device.identifier.value" This value is the PHD IEEE EUI-64 system identifier
patient "Patient.identifier.value-Patient.identifier.system" or
provided logical id
The dashes are part of the identifier.
When the service provider gives the PHG a pre-determined patient logical id the PHG creates no Patient resource and has no patient information. In that special case the provided logical id is used
type "Observation.code.coding.code" See Obtaining the Observation.code
value "Observation.componentN.valueQuantity.value" or
"Observation.componentN.dataAbsentReason.coding.code"
The data absent reason code is used if there is no value
units "Observation.component1.valueQuantity.code" When not a Compound-Nu-Observed-Value attribute the units are the same for each entry so only one unit code is needed
valueUnits "Observation.componentN.valueQuantity.value" or
"Observation.componentN.dataAbsentReason.coding.code"
followed by the UCUM unit code for each entry
In the Compound-Nu-Observed-Value the unit code can be different for each entry
reported PHD timestamp "timestamp" See Generating the PHD Reported Time Stamp
supplemental types "Supplemental-Types.N-" A sequence of 32-bit MDC codes separated by a dash

The final identifier is made by concatenating the entries above as follows:

  • "device-patient-type-value-units-reported PHD timestamp-supplemental types" for the Compound-Basic/Simple-Nu-Observed-Value cases.
    • Example of a blood pressure measurement using absolute time and mmHg; the units are the same for each entry: "FEEDABEDEAD2345-sisan34id-23.654.6.6.12.3-150020-100-60-80-mmHg-20170114173041"
  • "device-patient-type-valueUnits-reported PHD timestamp-supplemental types" for the Compound-Nu-Observed-Value case.
    • There are no specializations which use the Compound-Nu-Observed-Value attribute.

Additional Numerical Measurement Information

11073 20601 numeric metric measurements have some additional optional attributes that are used only for numerics. When they occur, these additional attributes provide further information about the measurement. An example of such a numeric-only additional attribute is one that describes the accuracy of the measurement. The accuracy is a measure of the deviation of the actual measurement from the reported measurement. Consequently, 'accuracy' is not a concept that makes any sense in the context of a measurement which is one or more of a finite set of enumerated codes such as a glucose-monitor meal assoication (breakfast, snack, fasting, etc.), and thus the attribute is not used in Enumration metrics.

As in the PhdBaseObservation profile, an Observation.component element is used to contain the additional information. At this time there only the Accuracy attribute is used for compound numerics. The remaining numeric-specific attributes are not structured to handle compounds.

Accuracy

The Accuracy attribute gives the maximum deviation as an absolute value of the reported measurement from the actual measurement over the entire range of the measurement. The reported accuracy is, thus, static and does not vary over the range of the measurement. It shall be reported if the PHD provides it and it is not corrupted. It is in the units of the measurement itself. This kind of measurement may not make sense to report with some compound measurements, esepcially in the case of the Compound-Nu-Observed-Value as each element could have different units.

The entries are as populated as follows:

Observation.component element entry Additional Information
code.coding.code 67914 This is the MDC code for the Accuracy attribute
code.coding.system urn:iso:std:iso:11073:10101 Indicates the MDC coding system
code.coding.display optional but Should contain the reference id MDC_ATTR_NU_ACCUR_MSMT along with any other additional text
valueQuantity.value the value This is accuracy value
valueQuantity.unit optional
valueQuantity.system http://unitsofmeasure.org Indicates the UCUM coding system
valueQuantity.code shall be the UCUM code of the primary measurement Assumes the units are the same for all components

Phd Compound Numeric Observation JSON Example

The following JSON example is from a Blood Pressure Cuff. The Blood Pressure is an interesting case as the generic, systolic, and disatolic blood pressure all qualify for one of the LOINC magic codes but the MAP pressure does not. The presence of the Coincident Time Stamp Observation in the 'related' element indicates that the PHD provided the time stamp and the time is not the time of reception by the PHG.

Though present, the 'category' and 'performer' are not required in the Phd Compound Numeric Observation profile.

{
    "resourceType":"Observation",
    "meta":{
        "profile": [
            "http://pchalliance.org/phdfhir/StructureDefinition/PhdCompoundNumericObservation"
        ]
    },
    "identifier": [
        {
            "value":"sisansarahId-urn:oid:1.2.3.4.5.6.7.8.10-01040302f0000000-150020-20171212091343-104-66-92-266016"
            // Note that 104, 66, and 92 are the three constituents of the compound
            // measurement followed by the unit code 266016. Now if this were a Compound-Nu-Observed-Value 
            // attribute then there might have been a different unit for each constituent and it would
            // have looked like this: 104-units1-66-units2-92-units3 for whatever unit codes they are
        }
    ],
    "status":"final",
    "category": [
        {
            "coding": [
                {
                    "system":"http://hl7.org/fhir/observation-category",
                    "code":"vital-signs",
                    "display":"Vital Signs"
                }
            ]
        }
    ],
    "code":{
        "coding": [
            {
                "system":"urn:iso:std:iso:11073:10101",
                "code":"150020",
                "display":"MDC_PRESS_BLD_NONINV"
            },
            {
                "system":"http://loinc.org",
                "code":"55284-4",
                "display":"Blood Pressure"
            }
        ]
    },
    "subject":{
        "reference":"Patient/PatientId-sisansarahId"
    },
    "effectiveDateTime":"2017-12-12T09:13:43-05:00",
    "performer": [      // This entry is optional  
        {
            "reference":"Patient/PatientId-sisansarahId"
        }
    ],
    "device":{
        "reference":"DeviceComponent/SysId-01040302f0000000"
    },
    "related": [
        {
            "id":"coincidentTimeStampRelated",
            "type":"qualified-by",
            "target":{
                "reference":"urn:oid:3.14159.20171212091339"
            }
        }
    ],
    "component": [
        {
            "code":{
                "coding": [
                    {
                        "system":"urn:iso:std:iso:11073:10101",
                        "code":"150021",
                        "display":"MDC_PRESS_BLD_NONINV_SYS"
                    },
                    {
                        "system":"http://loinc.org",
                        "code":"8480-6",
                        "display":"Systolic blood pressure"
                    }
                ]
            },
            "valueQuantity":{
                "value":"104",
                "unit":"mmHg",
                "system":"urn:iso:std:iso:11073:10101",
                "code":"266016"
            }
        },
        {
            "code":{
                "coding": [
                    {
                        "system":"urn:iso:std:iso:11073:10101",
                        "code":"150022",
                        "display":"MDC_PRESS_BLD_NONINV_DIA"
                    },
                    {
                        "system":"http://loinc.org",
                        "code":"8462-4",
                        "display":"Diastolic blood pressure"
                    }
                ]
            },
            "valueQuantity":{
                "value":"66",
                "unit":"mmHg",
                "system":"urn:iso:std:iso:11073:10101",
                "code":"266016"
            }
        },
        {
            "code":{
                "coding": [
                    {
                        "system":"urn:iso:std:iso:11073:10101",
                        "code":"150023",
                        "display":"MDC_PRESS_BLD_NONINV_MEAN"
                    }
                ]
            },
            "valueQuantity":{
                "value":"92",
                "unit":"mmHg",
                "system":"urn:iso:std:iso:11073:10101",
                "code":"266016"
            }
        }
    ]
}