Using #FHIR Observations for User fitness data

Mar 15, 2016

In a question on stack overflow, an implementer asks about using Observation for user -gathered fitness data:

While there is the Observation resource, this still seems best fit (!) for the EHR domain. In particular the user fitness data is not collected during a visit and is not human-verified.

The goal is to find a “standardized FIHR way” to model this sort of data.

Use an Observation (?) with Extensions? Profiles? Domain-specific rules? FHIR allows extraordinary flexibility, but each extension/profile may increase the cost of being able to exchange the resource directly later. An explanation on the appropriate use of a FHIR resource - including when to Extend, use Profiles/tags, or encode differentiation via Coded values - would be useful.

There’s no need to use extensions, but there is a need for domain specific rules. Use an observation that looks like this:

{
  "resourceType": "Observation",
  "text": {
    "status": "generated", 
    "div": "<div>[name] : [value] [hunits] @ [date]</div>"
  },
  "status": "final",
  "category": {
    "coding": [
      {
        "system": "http://hl7.org/fhir/observation-category",
        "code": "fitness",
        "display": "Fitness Data"
      }
    ]
  },
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "[lcode]",
        "display": "[...]"
      },
      {
        "system": "http://snomed.info/sct",
        "code": "[scode]",
        "display": "[...]"
      }
    ]
  },
  "subject": {
    "reference": "Patient/[xxx]"
  },
  "effectiveDateTime" : "[when]",
  "valueQuantity": {
    "value": [value],
    "unit": "[hunits]",
    "system": "http://unitsofmeasure.org",
    "code": "[units]"
  }
}

Some notes about this:

  • A couple of the measurements need an effectivePeriod instead of an effectiveDateTime
  • it might not be necessary SNOMED CT and LOINC codes, but it’s probably useful to have both (where they’re defined)
  • [name], [scode], [lcode] and [units] come from a row in the table below. other values [value], [hunits], [when] come from the data source
  • the category code is new. I’ll create a task to add it to the specification
Description SNOMED CT Code LOINC Code UCUM Units
Ambient temperature 250825003 60832-3 Cel; [degF]
Blood Glucose 365812005 77145-1 / 74774-1 mmol/L or mg/dL
Blood Pressure 75367002 55417-0  
   Systolic 271649006 8480-6  

standing: 8460-8 sitting:8459-0 supine:8461-6|mm[Hg] |   Diastolic|271650006|8462-4

standing: 8454-1 sitting: 8453-3 lying downlying down: 8455-8|mm[Hg] |Body Fat %|248300009?|41982-0|% |Body Height|50373000|8302-2|m; cm; [in_i] |BMI|60621009|39156-5|kg/m2 |Body Temperature|386725007|8310-5|Cel; [degF] |Body Weight|363808001|29463-7|kg; [lb] |Breath CO|251900003|(none)|[ppm] |Calories Burned|(none)|41981-2|kcal; J |Expiratory Time|250820008|65819-5|s |Heart Rate|78564009|8867-4

standing: 69001-6 sitting: 69000-8 lying down: 68999-2|{beats}/min; /min |Inspiratory Time|250819002|60740-8|s |Minutes of Moderate Activity|(none)|(none)|- |Minute Volume|250811004|20142-6 (use duration)|L |O2 Saturation|431314004|20564-1|% |Respiratory Rate|86290005|9279-1|{breaths}/min; /min |Sleep Duration|248263006|n/a|h |Step Count|n/a|55423-8|-

If you’re looking for additional rows not in the table, send me a data element name and a definition, and I’ll add it to the table. I’ll also propose adding this table to the FHIR specification