Storing per-minute reading from wearable devices


As one of the use cases we have, we would like to store per-minute (or even per-second) reading from wearable devices, which then can be queried by client to do statistical calculations or plot chart. I was looking at Observation resource and then Vital Signs Profile to see if this is something can be used.

Seems like the Vital signs Profile is designed to be used to share information from wearable devices by having standardized profile such as heart rate and respiratory rate. However, it seems like Observation only stores 1 valueQuantity per resource, so we would need to create a large number of Observation resources to store per-minutes reading. The document itself has large overhead so it does not seem to be idea for this scenario.

What is the recommended way of store such high-fidelity data? Do we need to create our custom profile and extension to handle such scenario or is there something being discussed and defined?


If it’s a reading that would typically be looked at individually (e.g. a blood pressure), then separate observations would be the expected mechanism. The alternative would be to use the SampledData data type to capture multiple values over a time-period. (Be aware that the SampledData data type hasn’t been widely used and is currently under review, so it may change or be replaced in a future version of FHIR.) So you would have one Observation per minute or 5 minutes or 60 minutes and have a valueSampledData that contained all of the measurement points that occurred within that time-period. How the Statistics operation works with SampledData also hasn’t really been thought about yet.

Thanks! I will look into the component.valueSampledData and see how we can utilize that.