Question: Co

Feb 11, 2013

Question:

I am wondering if it is possible to include a set of static reference data inside a CDA document, for example WHO percentile information for weight, as structured contents? I am not able to find a proper method to cater for this based on the CDA R2 R-MIMM diagram.

Answer:

I’m afraid that the answer is not very encouraging. This content would definitely go in the reference range section, which looks like this:

To include the data in structured form, we would have to either use the data structures provided, or extensions. First, notes about the existing fields on Observation Range:

  • classCode - the type of class that this is. Effectively fixed to an observation, and none of the possible values relate to this discussion
  • moodCode - a fixed value which is irrelevant for this discussion
  • code - the kind of observation that this is. The code is “what type of observation this is”, and it’s since the observation is a criterion on weight, that’s what the code should be.
  • text - a free text description of the reference range
  • value - a value that specifies the actual reference range
  • interpretationCode - a code that explains how the reference range should be interpreted. This can only be one of a limited set of codes

The following values are allowed for interpretation code:

  • B     better
  • D     decreased
  • U     increased
  • W     worse
  • <     low off scale
  •     high off scale

  • A     Abnormal
  • AA     Abnormal alert
  • HH     High alert
  • LL     Low alert
  • H     High
  • HH     High alert
  • L     Low
  • LL     Low alert
  • N    Normal
  • I     intermediate
  • MS     moderately susceptible
  • R     resistent
  • S     susceptible
  • VS     very susceptible

Few of these codes - which primarily relate to the interpretation of a value, not a reference range are useful. I’d only count N, A, and AA as relevant. The percentile data is nearest to “Normal” but I don’t think that really covers something that has 1% and 99% values properly.

So, what are the options for including the percentile information as structured data?

  • It is possible to include this information in the text of the observation range, but that doesn’t count as “structured contents”, and it makes it pretty much impossible for a UI to do anything clever with it. Still, I’ve shown an example of this below.
  • We could include it as a series of reference ranges with a made up code that combines the age in months and the percentile, something like “5m-1%” as the code, and with the value a simple PQ (“5.2” in this case). This is kind of technically misusing code - though it certainly wouldn’t be the only case by a long shot (in fact, the only way you can use code is effectively to misuse it). Still, it doesn’t work very well in this case: the codes would be an arbitrary invented set of codes, and who would know how to interpret them? The display is likely to be misleading or wrong from a system that doesn’t know them
  • we could add the information as a set of extensions using some XML of personal choice in a foreign namespace. This would work, though extensions are unwelcome for many CDA adopters. If you did this, you should really include the text for the sake of systems that don’t understand the extensions - which is why I show the example below, as a base for extending
  • It would also be possible to put the structured data straight in as the content of the text, with some media type to indicate what type it has. I guess it would be text/xml + any xml of your choice to represent the the content. But this is likely a bad idea since most systems would not interpret it correctly, and it’s not really consistent with the idea of a text representation of the reference range

None of those are good options, I’m afraid.

Note for v3 experts: The CDA model is just too stripped down here. The Lab RMIM defines criterion on the reference range, but you can’t introduce that as an extension to CDA (clearly qualifies the reference range), but it includes some problems of it’s own, and the correct interpretation codes are still missing.

Example with the percentiles as text:

<entry>
  <observation classCode="OBS" moodCode="EVN">
    <id root="$UUID"/>
    <!--SNOMED CT code for height -->
    <code code="$Code" codeSystem="$codeSystem" codeSystemName="$codeSystemName" displayName="Body Weight"/>
    <statusCode code="completed"/>
    <effectiveTime value="20120913"/>
    <!-- Weight -->
    <value unit="kg" value="5.30" xsi:type="PQ"/>
    <referenceRange>
      <observationRange>
        <text>
Weight-for-age GIRLS: Birth to 5 years (percentiles), weight in kg

Y: M  Month   1st   3rd   5th   15th  25th  50th  75th  85th  95th  97th  99th 
0: 0  0        2.3   2.4   2.5   2.8   2.9   3.2   3.6   3.7   4.0   4.2   4.4 
0: 1  1        3.0   3.2   3.3   3.6   3.8   4.2   4.6   4.8   5.2   5.4   5.7 
0: 2  2        3.8   4.0   4.1   4.5   4.7   5.1   5.6   5.9   6.3   6.5   6.9 
0: 3  3        4.4   4.6   4.7   5.1   5.4   5.8   6.4   6.7   7.2   7.4   7.8 
0: 4  4        4.8   5.1   5.2   5.6   5.9   6.4   7.0   7.3   7.9   8.1   8.6 
0: 5  5        5.2   5.5   5.6   6.1   6.4   6.9   7.5   7.8   8.4   8.7   9.2 
0: 6  6        5.5   5.8   6.0   6.4   6.7   7.3   7.9   8.3   8.9   9.2   9.7 
0: 7  7        5.8   6.1   6.3   6.7   7.0   7.6   8.3   8.7   9.4   9.6  10.2 
0: 8  8        6.0   6.3   6.5   7.0   7.3   7.9   8.6   9.0   9.7  10.0  10.6 
0: 9  9        6.2   6.6   6.8   7.3   7.6   8.2   8.9   9.3  10.1  10.4  11.0 
0:10  10       6.4   6.8   7.0   7.5   7.8   8.5   9.2   9.6  10.4  10.7  11.3 
0:11  11       6.6   7.0   7.2   7.7   8.0   8.7   9.5   9.9  10.7  11.0  11.7 
1: 0  12       6.8   7.1   7.3   7.9   8.2   8.9   9.7  10.2  11.0  11.3  12.0 
1: 1  13       6.9   7.3   7.5   8.1   8.4   9.2  10.0  10.4  11.3  11.6  12.3 
1: 2  14       7.1   7.5   7.7   8.3   8.6   9.4  10.2  10.7  11.5  11.9  12.6 
1: 3  15       7.3   7.7   7.9   8.5   8.8   9.6  10.4  10.9  11.8  12.2  12.9 
1: 4  16       7.4   7.8   8.1   8.7   9.0   9.8  10.7  11.2  12.1  12.5  13.2 
1: 5  17       7.6   8.0   8.2   8.8   9.2  10.0  10.9  11.4  12.3  12.7  13.5 
1: 6  18       7.8   8.2   8.4   9.0   9.4  10.2  11.1  11.6  12.6  13.0  13.8 
1: 7  19       7.9   8.3   8.6   9.2   9.6  10.4  11.4  11.9  12.9  13.3  14.1 
1: 8  20       8.1   8.5   8.7   9.4   9.8  10.6  11.6  12.1  13.1  13.5  14.4 
1: 9  21       8.2   8.7   8.9   9.6  10.0  10.9  11.8  12.4  13.4  13.8  14.6 
1:10  22       8.4   8.8   9.1   9.8  10.2  11.1  12.0  12.6  13.6  14.1  14.9 
1:11  23       8.5   9.0   9.2   9.9  10.4  11.3  12.3  12.8  13.9  14.3  15.2 
2: 0  24       8.7   9.2   9.4  10.1  10.6  11.5  12.5  13.1  14.2  14.6  15.5 
2: 1  25       8.9   9.3   9.6  10.3  10.8  11.7  12.7  13.3  14.4  14.9  15.8 
2: 2  26       9.0   9.5   9.8  10.5  10.9  11.9  12.9  13.6  14.7  15.2  16.1 
2: 3  27       9.2   9.6   9.9  10.7  11.1  12.1  13.2  13.8  15.0  15.4  16.4 
2: 4  28       9.3   9.8  10.1  10.8  11.3  12.3  13.4  14.0  15.2  15.7  16.7 
2: 5  29       9.5  10.0  10.2  11.0  11.5  12.5  13.6  14.3  15.5  16.0  17.0 
2: 6  30       9.6  10.1  10.4  11.2  11.7  12.7  13.8  14.5  15.7  16.2  17.3 
2: 7  31       9.7  10.3  10.5  11.3  11.9  12.9  14.1  14.7  16.0  16.5  17.6 
2: 8  32       9.9  10.4  10.7  11.5  12.0  13.1  14.3  15.0  16.2  16.8  17.8 
2: 9  33      10.0  10.5  10.8  11.7  12.2  13.3  14.5  15.2  16.5  17.0  18.1 
2:10  34      10.1  10.7  11.0  11.8  12.4  13.5  14.7  15.4  16.8  17.3  18.4 
2:11  35      10.3  10.8  11.1  12.0  12.5  13.7  14.9  15.7  17.0  17.6  18.7 
3: 0  36      10.4  11.0  11.3  12.1  12.7  13.9  15.1  15.9  17.3  17.8  19.0 
3: 1  37      10.5  11.1  11.4  12.3  12.9  14.0  15.3  16.1  17.5  18.1  19.3 
3: 2  38      10.6  11.2  11.6  12.5  13.0  14.2  15.6  16.3  17.8  18.4  19.6 
3: 3  39      10.8  11.4  11.7  12.6  13.2  14.4  15.8  16.6  18.0  18.6  19.9 
3: 4  40      10.9  11.5  11.8  12.8  13.4  14.6  16.0  16.8  18.3  18.9  20.2 
3: 5  41      11.0  11.6  12.0  12.9  13.5  14.8  16.2  17.0  18.6  19.2  20.5 
3: 6  42      11.1  11.8  12.1  13.1  13.7  15.0  16.4  17.3  18.8  19.5  20.8 
3: 7  43      11.3  11.9  12.2  13.2  13.9  15.2  16.6  17.5  19.1  19.7  21.1 
3: 8  44      11.4  12.0  12.4  13.4  14.0  15.3  16.8  17.7  19.3  20.0  21.4 
3: 9  45      11.5  12.1  12.5  13.5  14.2  15.5  17.0  17.9  19.6  20.3  21.7 
3:10  46      11.6  12.3  12.6  13.7  14.3  15.7  17.3  18.2  19.9  20.6  22.0 
3:11  47      11.7  12.4  12.8  13.8  14.5  15.9  17.5  18.4  20.1  20.8  22.3 
4: 0  48      11.8  12.5  12.9  14.0  14.7  16.1  17.7  18.6  20.4  21.1  22.6 
4: 1  49      11.9  12.6  13.0  14.1  14.8  16.3  17.9  18.9  20.6  21.4  22.9 
4: 2  50      12.1  12.8  13.2  14.3  15.0  16.4  18.1  19.1  20.9  21.7  23.2 
4: 3  51      12.2  12.9  13.3  14.4  15.1  16.6  18.3  19.3  21.2  22.0  23.5 
4: 4  52      12.3  13.0  13.4  14.5  15.3  16.8  18.5  19.5  21.4  22.2  23.9 
4: 5  53      12.4  13.1  13.5  14.7  15.4  17.0  18.7  19.8  21.7  22.5  24.2 
4: 6  54      12.5  13.2  13.7  14.8  15.6  17.2  18.9  20.0  22.0  22.8  24.5 
4: 7  55      12.6  13.4  13.8  15.0  15.8  17.3  19.1  20.2  22.2  23.1  24.8 
4: 8  56      12.7  13.5  13.9  15.1  15.9  17.5  19.3  20.4  22.5  23.3  25.1 
4: 9  57      12.8  13.6  14.0  15.3  16.1  17.7  19.6  20.7  22.7  23.6  25.4 
4:10  58      12.9  13.7  14.2  15.4  16.2  17.9  19.8  20.9  23.0  23.9  25.7 
4:11  59      13.1  13.8  14.3  15.5  16.4  18.0  20.0  21.1  23.3  24.2  26.0 
5: 0  60      13.2  14.0  14.4  15.7  16.5  18.2  20.2  21.3  23.5  24.4  26.3 
        </text>
      </observationRange>
    </referenceRange>
  </observation>
</entry>

Note: no claim about interpretationCode in this example.