This page is part of the Personal Health Device FHIR IG (v0.1.0: STU 1 Draft) based on FHIR R3. The current version which supercedes this version is 1.0.0. For a full list of available versions, see the Directory of published versions
The Rtsa Observation Profile is used when the PHD metric measurement contains the following attribute:
Attribute | Value | Additional Information |
---|---|---|
Simple-Sa-Observed-Value | A sequence of scaled 8, 16, or 32-bit numbers | Other attributes give scale factors, number of entries, period, and bit-size |
This attribute contain a measurement that is a sequence of scaled periodic values. It is typically used when reporting waveforms. The values are scaled to reduced bandwidth. The bandwidth reduction can be significant in cases where the actual values are small fluctuations about a large average value. The scale factors, number of bits in each sample, the period, and the number of data elements in the sequence are given by a set of support attributes.
Support Attribute | Value | Description |
---|---|---|
Sample-Period.period | integer | Interval between samples in 1/8th millseconds |
Sa-Specification.SampleType.significant-bits | integer | Number of significant bits in the sample value |
Sa-Specification.SampleType.sample-size | integer | Number of bits in each sample; gives the X value in 'Scale-and-Range-SpecificationX' |
Sa-Specification.array-size | integer | Number of samples in 'Simple-Sa-Observed-Value' |
Scale-and-Range-SpecificationX.upper-absolute-value | Mder FLOAT | Highest unscaled value PHD will report |
Scale-and-Range-SpecificationX.lower-absolute-value | Mder FLOAT | Lowest unscaled value PHD will report |
Scale-and-Range-SpecificationX.upper-scaled-value | X-bit integer | The upper range scaled |
Scale-and-Range-SpecificationX.lower-scaled-value | X-bit integer | The lower range scaled |
If (significantBits < sampleSize)
If significantBits equals 255
The upper and lower ranges represent the upper and lower actual sensor values that are reported. The name 'absolute' in the attribute does not refer to the mathematical definition of an absolute value. The upper and lower values do NOT mean that a given set of samples has those values or that those values are ever reported by the sensor. However, a graphing application could use those values to define the upper and lower ranges of a graph and be assured that the waveform would never go above or below those boundaries. These upper and lower boundaries are placed in the Observation.referenceRange.low and Observation.referenceRange.high elements, respectively.
The structure definition for the Phd Rtsa Observation Profile is shown below:
Name | Flags | Card. | Type | |
---|---|---|---|---|
Observation | Observation | Definition: The PhdRtsaObservation reports PHD measurements that contain a Simple-Sa-Observed-Value attribute. Used for RTSA (waveform) observations from Personal Health Devices | ||
meta | 1.. | |||
profile | 1.. | Sliced: Unordered, Open, by PhdRtsaObservation(Value) | ||
phdProfile | 1..1 | Fixed Value | Fixed Value: PhdRtsaObservation | |
identifier | Sliced: Ordered, Open, by value(Value) | |||
conditionalCreateIdentifier | ..1 | Short description: Unique identifier of this measurement for a given patient and device Definition:An identifier created from a combination of the measurement parameters like sensor time stamp, type code, value, units code, patient and device identifiers, and selected elements of any component elements. Allows observations to be distinguished in a selective enough manner to prevent resource duplication. This value is used in the conditional create to prevent data duplication. PHDs will often re-send already sent data for a variety of reasons. This element is required unless the metric measurement contains no time stamp or is a measurement containing a time stamp that is real time. By real time the time stamp reported by the PHD must be later than the current time reported by the PHD before any measurements are received. Temporarily stored data from IEEE 11073 20601 devices, which are required to delete the data after sending, can also be considered real time. Temporarily stored data from Bluetooth Low Energy Health devices may be resent so these cannot be considered as real time. | ||
value | 1.. | |||
code | ||||
11073Type | Comments: For non-compound 11073-20601 metric numeric measurements, this code is obtained from one or more of the Type, Metric-Id, Nu-Observed-Value, and Metric-Id-Partition attributes. The algorithm to get the 16-bit partition and 16-bit term code is as follows:
It is this value that is placed in the code.coding.code element for this 11073Type slice | |||
system | Definition: This identifies the MDC coding system | |||
valueSampledData | SampledData | Definition: The information determined as a result of making the observation, when the observation consists of a periodic sample of numeric measurements. The RTSA metric is typically used for reporting waveform type data such as an ECG trace, spirometer exhalation rates, pulse oximetry pleth waves, etc., though it can be used to report any set of numric measurements that are periodic. The periodicity is important as the time stamps of each individual entry is known from the start time and the period. Since the amount of data to be transmitted can be large, the data is scaled in such a way to minimize the number of bits taken up by each entry (though the minimization is restricted to 8, 16, or 32 bits). This scaling information is sent along with the start time and period in order for the receiver to recover the original data and to obtain the time stamp of each data point. In theory, this data could be sent using countless phdNumericObservation type resources at a great cost in bandwidth! | ||
SimpleQuantity | Short description: Scaling intecept value and units Definition:The 'origin' data type contains the 'y-intercept' for the equation that relates the scaled data to the actual data. If valueSampledData.data[i] is the array of sampled scaled data, the actual data is obtained by: x[i] =valueSampledData.data[i] * valueSampledData.factor + valueSampledData.origin.value The data sent in the Sa-Simple-Observation-Value array is also scaled. Thus with the proper setting of the valueSampledData.origin.value and valueSampledData.factor, the data from the IEEE device can be placed into the data[i] array without modification. | |||
value | 1.. | Short description: Intercept value (with implicit precision) Definition:The intercept value with the indicated precision of the data as determined by the device. | ||
unit | Definition: A human-readable form of the unit. Should be the UCUM string. If the UCUM string has {} in it, it is preferred to place contents in it so it is easily human readable. | |||
system | 1.. | Fixed Value | Short description: The 11073 coding system Definition:The identification of the MDC coding system that provides the coded form of the unit. urn:iso:std:iso:11073:10101 | |
code | 1.. | Definition: The unit code. The 32-bit code obtained from the Unit Code attribute noting that the partition is always 4. | ||
factor | 1.. | |||
dimensions | Short description: Number of rtsa sample points at each time point Definition:The number of rtsa sample points at each time point. This value gives the number of data points in the valueSampledData.data[] array. This value is obtained from the Sa-Specification.array-size field of the Sa-Specification attribute. | |||
data | Definition: A series of data points which are decimal values separated by a single space (character u20). The special values "E" (error), "L" (below detection limit) and "U" (above detection limit) are not used. The device does not provide such individual values. One is strongly encouraged to use the scaling from the 11073 device as it is likely the scaling was chosen to optimize transmission. If A = Scale-and-Range-SpecificationX.lower-absolute-value as an Mder FLOAT B = Scale-and-Range-SpecificationX.upper-absolute-value as an Mder FLOAT I = Scale-and-Range-SpecificationX.lower-scaled-value as a X-bit integer J = Scale-and-Range-SpecificationX.upper-scaled-value as a X-bit integer valueSampledData.factor is given by (A-B)/(I-J) and valueSampledData.origin.value = A – (A-B)*I/(I-J) and valueSampledData.data[i] = Sa-Simple-Observed-Value.values[i] | |||
dataAbsentReason | Definition: Provides a reason why the expected value in the element Observation.valueQuantity is missing. This could be a NaN (Not a Number), PINF (Positive infinity), NINF (Negative infinity) or an error condition indicated by the Measurement-Status attribute. The current values in the http://hl7.org/fhir/data-absent-reason system do not provide the same detailed set of options reported in the numeric attributes. For example, the PINF, NINF, and not at this resolution special values have no matching codes. In those cases one uses the generic 'error' code. | |||
coding | ||||
system | 1.. | |||
code | 1.. | |||
referenceRange | 1.. | Sliced: Unordered, Open, by low.system(Value) | ||
scaleAndReferenceRange | 1..1 | |||
low | 1.. | Definition: The Scale-and-Range-SpecificationX.lower-absolute-value from the RTSA metric where X is one of 8, 16, or 32. | ||
value | 1.. | Definition: This is the value from the Scale-and-Range-SpecificationX.lower-absolute-value attribute where X is 8, 16, or 32. It is the minimum value that will be reported by the sensor. The attribute reports the value as an Mder FLOAT. Note that the word 'absolute' does not mean the mathematical absolute value! The implicit precision in the value should always be honored. The precision is given by the Mder FLOAT. | ||
unit | Definition: A human-readable form of the unit. Should be the UCUM string. | |||
system | 1.. | Fixed Value | Definition: This value identifies the MDC coding system urn:iso:std:iso:11073:10101 | |
code | 1.. | Definition: This unit code shall be the same as reported in the valueSampledData | ||
high | 1.. | |||
value | 1.. | Definition: This is the value from the Scale-and-Range-SpecificationX.upper-absolute-value attribute where X is 8, 16, or 32. It is the maximum value that will be reported by the sensor. The attribute reports the value as an Mder FLOAT. Note that the word 'absolute' does not mean the mathematical absolute value! The implicit precision in the value should always be honored. The precision is given by the Mder FLOAT. | ||
unit | Definition: A human-readable form of the unit. Should be the UCUM string. | |||
system | 1.. | Fixed Value | Definition: This value identifies the MDC coding system urn:iso:std:iso:11073:10101 | |
code | 1.. | Definition: This unit code shall be the same as reported in the valueSampledData | ||
accuracyComponent | ..1 | Definition: This component shall be present if the accuracy attribute is present. | ||
code | ||||
coding | 1.. | Sliced: Ordered, Open, by code(Value) | ||
11073Type | 1..1 | |||
system | 1.. | Fixed Value | Fixed Value: urn:iso:std:iso:11073:10101 | |
code | 1.. | Fixed Value | Definition: The code for the accuracy attribute is 67914 67914 | |
display | Definition: Should include the reference identifier for the Accuracy-Attribute MDC_ATTR_NU_ACCUR_MSMT | |||
valueQuantity | 1.. | Quantity | Data Type | |
value | 1.. | Definition: This is the value of the accuracy attribute. The value is Mder FLOAT encoded and shall be expressed to the precision indicated by the Mder FLOAT. | ||
unit | Definition: A human-readable form of the unit. One should put the UCUM code for the units in this display string. It shall match the UCUM code in Observation.valueQuantity.unit if UCUM is used there. | |||
system | 1.. | Fixed Value | Definition: The unit code shall use the MDC system urn:iso:std:iso:11073:10101 | |
code | 1.. | Definition: The units are given by the units of the measurement so this shall have the code as in Observation.valueQuantity.code | ||
dataAbsentReason | ..0 | |||
alertOpStateComponent | Definition: This component gives one of the settings reported in the Alert-Op-State attribute. This attribute is used only by the Pulse Oximeter specialization. The Alert-Op-State attribute is used in conjunction with the Current-Limits and Measurement-Status attributes. The Current-Limits defines upper and lower limit thresholds for a reported measurement value. When the reported measurement value goes below or above these limits, a bit is set in the Measurement-Status attribute is set if the Alert-Op-State attribute indicates that the alert is active for the given threshold. Since it is considered important that if a Current-Limits attribute is present an alert shall be sent went the thresholds are crossed, the Alert-Op-State Bits are only set when the alert is, for some reason, turned OFF for a given threshold. There shall be one such alertOpStateComponent entry for every bit set in the Alert-Op-State attribute. There may be an entry for the defined cleared components as well. This component indicates if a given alert condition is turned off. Recall that when creating the code for this entry that the code uses the MDER-Bit setting to be reported along with the Alert-Op-State attribute's MDC code. MDER-Bit 0 is the most significant bit of the attribute value. Since the Alert-Op-State attribute is a BITS-16 value, MDER-Bit 0 would have value 0x8000 and MDER-Bit 1 would have value 0x4000. Only bits 0, 1, and 2 are defined for this attribute. | |||
code | ||||
coding | 1..1 | Comments: Normally alternative coding systems are allowed but in this case the value is intimately tied to the code. The code represents the feature indicated by a bit settin in the attribute value. which is either cleared (0) or set (1). Thus the value for this entry is itself a binary 'y' or 'n' code from http://hl7.org/fhir/v2/0136 | ||
system | 1.. | Fixed Value | Fixed Value: http://hl7.org/fhir/IEEE.ASN1 | |
code | 1.. | Definition: This code, which is an alpha-numeric string, is generated by the attribute MDC code, which is 68746 for the Alert-Op-State, followed by a dot (.) followed by the MDER-bit that was set. Given that only three bits are defined in the Pulse Ox specialization that uses this attribute, the code will be one of 68746.0, 68746.1. or 68746.2 Note that this code is an alpha-numeric string and not a decimal number. Think of it like a very-limited OID. | ||
valueCodeableConcept | 1.. | CodeableConcept | Data Type | |
coding | 1..1 | |||
system | 1.. | Fixed Value | Definition: This coding system contains only two entries, 'y' (yes) and 'n' (no) http://hl7.org/fhir/v2/0136 | |
code | 1.. | Definition: If the MDER-Bit is set, the code value is 'y' otherwise it is 'n' Recall that when the value is 'y' the alarm or alert is turned off | ||
dataAbsentReason | ..0 | |||
currentLimitsComponent | ..1 | Definition: The Current-Limits attribute gives upper and lower threshhold values for the triggering of an alert for the measured value being reported in this Observation resource. This attribute is currently used only in the Pulse Oximeter specialization. If the alerting is not turned off, a Measurement-Status attribute bit is set when either threshold is crossed. The Current-Limits attribute value shall be reported if it is present in the measurement. Allows the downstream signaling of an alert and/or warning situation. The value is expressed as a range. The lower and upper values of the range represent the thresholds. | ||
code | ||||
coding | 1.. | Sliced: Ordered, Open, by system(Value) | ||
11073Type | 1..1 | |||
system | 1.. | Fixed Value | Definition: Indicates the MDC coding system The code is that of the Current-Limits attribute urn:iso:std:iso:11073:10101 | |
code | 1.. | Fixed Value | Definition: Shall be the code of the Current-Limits attribute. 67892 | |
display | Definition: Should include the reference id for the Current-Limits attribute which is MDC_ATTR_LIMIT_CURR | |||
valueRange | 1.. | Range | Data Type | |
SimpleQuantity | 1.. | |||
value | 1.. | Definition: Thsi value is given by Current-Limits.lower as an MDER-FLOAT and shall be expressed in the precsion indcated by the MDER-FLOAT construct. This gives the lower threshold. If the measurement falls below this value, the Measurement-Status attribute is sent with a bit stating the alert is present (if the alerts are not turned off for the lower limits). | ||
unit | Definition: A human-readable form of the unit. It is suggested that the UCUM code is used in this string with the {} filled should they be present. | |||
system | 1.. | Fixed Value | Definition: Indicates the MDC coding system. urn:iso:std:iso:11073:10101 | |
code | 1.. | Definition: This code (which is the code for the units) shall be the same as Observation.valueQuantity.code The MDC units are required to assure no ambiguity in translation. UCUM is optionally placed in the unit element if it is known by the uploader. | ||
SimpleQuantity | 1.. | Comments: The high limit shall be present | ||
value | 1.. | Definition: Thsi value is given by Current-Limits.upper as an MDER-FLOAT and shall be expressed in the precsion indcated by the MDER-FLOAT construct. This gives the upper threshold. If the measurement goes above this value, the Measurement-Status attribute is sent with a bit stating the alert is present (if the alerts are not turned off for the upper limits). | ||
unit | Definition: A human-readable form of the unit. It is suggested that the UCUM code is used in this string with the {} filled should they be present. | |||
system | 1.. | Fixed Value | Definition: Indicates the MDC coding system. urn:iso:std:iso:11073:10101 | |
code | 1.. | Definition: This code (which is the code for the units) shall be the same as Observation.valueQuantity.code The MDC units are required to assure no ambiguity in translation. UCUM is optionally placed in the unit element if it is known by the uploader. | ||
dataAbsentReason | ..0 | |||
alertOpTextStringComponent | ..1 | Definition: This component reports the values in the Alert-Op-Text-String attribute. Reporting the this attribute information is optional. This attribute consists of human readable strings giving further information about the upper and lower limits | ||
code | ||||
coding | 1.. | Sliced: Ordered, Open, by code(Value) | ||
11073Type | 1..1 | |||
system | 1.. | Fixed Value | Fixed Value: urn:iso:std:iso:11073:10101 | |
code | 1.. | Fixed Value | Definition: The MDC code for the Alert-Op-Text-String attribute 68104 | |
display | Definition: The reference identifier for the attribute should be included. The Alert-Op-Text-String attribute ref id is MDC_ATTR_AL_OP_TEXT_STRING | |||
valueString | 1.. | string | Data Type | |
value | 1.. | Definition: This is the value of the lower and upper text strings presented in an application specific manner. | ||
dataAbsentReason | ..0 | |||
measurementConfidence95Component | ..1 | Definition: The Measurement-Confidence-95 attribute defines the lower and upper bounds for a range within which the manufacture is 95% confident that the actual value resides. The unit for the lower bound and upper bound is the same as the measurement. Provides a level of confidence for the reported measurement. | ||
code | ||||
coding | 1.. | Sliced: Ordered, Open, by system(Value) | ||
11073Type | 1..1 | |||
system | 1.. | Fixed Value | Definition: Indicates the MDC coding system The code is that of the Current-Limits attribute urn:iso:std:iso:11073:10101 | |
code | 1.. | Fixed Value | Definition: Shall be the code of the Current-Limits attribute. 526998 | |
display | Definition: Should include the reference id for the Current-Limits attribute which is MDC_ATTR_MSMT_CONFIDENCE_95 | |||
valueRange | 1.. | Range | Data Type | |
SimpleQuantity | 1.. | |||
value | 1.. | Definition: Thsi value is given by Measurement-Confidence-95.lower-bound as an MDER-FLOAT and shall be expressed in the precsion indcated by the MDER-FLOAT construct. This gives the lower value for the manufacturer is 95% confident that the measurement reported is that of the real value. | ||
unit | Definition: A human-readable form of the unit. It is suggested that the UCUM code is used in this string with the {} filled should they be present. | |||
system | 1.. | Fixed Value | Definition: Indicates the MDC coding system. urn:iso:std:iso:11073:10101 | |
code | 1.. | Definition: This code (which is the code for the units) shall be the same as Observation.valueQuantity.code The MDC units are required to assure no ambiguity in translation. UCUM is optionally placed in the unit element if it is known by the uploader. | ||
SimpleQuantity | 1.. | Comments: The high limit shall be present | ||
value | 1.. | Definition: Thsi value is given by Measurement-Confidence-95.upper-bound as an MDER-FLOAT and shall be expressed in the precsion indcated by the MDER-FLOAT construct. This gives the upper value for the manufacturer is 95% confident that the measurement reported is that of the real value. | ||
unit | Definition: A human-readable form of the unit. It is suggested that the UCUM code is used in this string with the {} filled should they be present. | |||
system | 1.. | Fixed Value | Definition: Indicates the MDC coding system. urn:iso:std:iso:11073:10101 | |
code | 1.. | Definition: This code (which is the code for the units) shall be the same as Observation.valueQuantity.code The MDC units are required to assure no ambiguity in translation. UCUM is optionally placed in the unit element if it is known by the uploader. | ||
dataAbsentReason | ..0 | |||
thresholdNotificationTextStringComponent | ..1 | Definition: This component reports the values in the Threshold-Notification-Text-String attribute. Reporting the this attribute information is optional. This attribute consists of human readable strings giving further information threshold notification(s) | ||
code | ||||
coding | 1.. | Sliced: Ordered, Open, by code(Value) | ||
11073Type | 1..1 | |||
system | 1.. | Fixed Value | Fixed Value: urn:iso:std:iso:11073:10101 | |
code | 1.. | Fixed Value | Definition: The MDC code for the Threshold-Notification-Text-String attribute 68232 | |
display | Definition: The reference identifier for the attribute should be included. The Threshold-Notification-Text-String attribute ref id is MDC_ATTR_THRES_NOTIF_TEXT_STRING | |||
valueString | 1.. | string | Data Type | |
value | 1.. | Definition: This is the value of the text string. | ||
dataAbsentReason | ..0 |
Periodic data is mapped to the SampledData data type in FHIR. The SampledData.data element in this data type is also scaled. If y[i] is the ith entry of the actual unscaled data from the PHD sensor, y[i] is obtained from the SampledData type using the following relation:
y[i] = d[i] * s + b
where
In the case of the RTSA metric, the ith entry of the actual unscaled data from the sensor is obtained from the Simple-Sa-Observed-Value attribute using the following relation:
y[i] = ((A – B)x[i])/(I – J) + A – (A-B)I/(I-J) where
Since ((A – B)x[i])/(I – J) + A – (A-B)I/(I-J) = d[i] * s + b,
d[i] = x[i] if
allowing one to map the Simple-Sa-Observed-Value.data[i] values directly to the SampledData.data[i] values unchanged. It is recommended that the uploader map the RTSA waveform to the Observation.valueSampledData element using the above scaling as it is assumed the PHD chose this scaling for a good reason. However, that does not restrict the uploader using other scalings. As an example, the uploader could decode the scaled values and report the unscaled original sensor values in the Observation.valueSampledData.data element and set the Observation.valueSampledData.scaleFactor to 1.0 and the Observation.valueSampledData.origin.value to 0. This approach is used in PCD-01.
Using the variables 'b' and 's' as defined above the mapping to the FHIR Observation resource is as follows:
Attribute | FHIR coding |
---|---|
Simple-Sa-Observed-Value.data[i] | Observation.valueSampledData.data[i] |
Unit-Code.code | Observation.valueSampledData.origin.code |
See calculation of 'b' above | Observation.valueSampledData.origin.value = b* |
See calculation of 's' above | Observation.valueSampledData.scaleFactor = s* |
Sample-Period.period/8 | Observation.valueSampledData.period (milliseconds) |
Sa-Specification.SampleType.sample-size | Observation.valueSampledData.dimensions |
Scale-and-Range-SpecificationX.upper-absolute-value | Observation.referenceRange.high.value |
Unit-Code.code | Observation.referenceRange.high.code |
Scale-and-Range-SpecificationX.lower-absolute-value | Observation.referenceRange.low.value |
Unit-Code.code | Observation.referenceRange.low.code |
*noting that other scaling options are allowed.
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 | "PhdParentDeviceComponent.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.valueSampledData.period-Observation.valueSampledData.dimensions-Observation.valueSampledData.data[0] | The data absent reason code is used if there is no value |
units | "Observation.valueSampledData.origin.code | The units are the same for all data points |
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:
All additional attributes that may be reported in a numerical metric measurement may also be present in an RTSA metric measurement. See the section 'Additional Note that one could report a waveform by reporting each value in the sequence as a sequence of single numeric metric measurements. Of course that would be costly in terms of bandwidth.
About the only work a consumer of this profile needs to do is to back-scale the valueSampledData.data[] values to the original values reported by the sensor. The following table summarizes where a reader can obtain the most pertinent information.
information | Location in Observation. |
---|---|
Type of measurement | code.coding.code |
Time at the start of the waveform | effectiveDateTime |
Number of samples | valueSampledData.dimension |
Time between samples in milliseconds | valueSampledData.period |
Units of samples | valueSampledData.origin.code |
Upper range of values | referenceRange.high.value |
Lower range of values | referenceRange.low.value |
The actual n values | valueSampledData.data[n] * valueSampledData.origin.value + valueSampledData.scaleFactor |