Question: Binding choices
Jun 21, 2016Question: A question regarding “Standard” codes vs. Customized codes: To my understanding, if I want to exchange FHIR resource, any property in that resource can be filled by either of the following options:
- Using the standard clinical coding system for relevant clinical properties (for example, SNOMED CT code for MedicationOrder>Medication> code
- Using the HL7 FHIR administrative coding system for relevant administrative properties (for example,http://hl7.org/fhir/ValueSet/ medication-order-statusfor MedicationOrder>Status)
- Using customized, in-house, coding system, but for that I need to define it as appropriate ValueSet, bounded into appropriate Profile.
Answer:
So this answer (and the question, really) applies to any property in a resource that has a type of Coding or CodeableConcept. In principle, any property of a resource that has a type can be filled by any one of those choices - a SNOMED CT code (or RxNorm, or LOINC, or …), a FHIR defined code, or a locally defined code. However for all these properties, we ‘bind’ them to a value set, and that value set makes a rule about what kind of codes can be used.
Element <– (binding) –> ValueSet
So if the property is bound to SNOMED CT, then you have to use a code from SNOMED CT. But note that if the type is CodeableConcept, which can have more than 1 coding, then this means that one of the codings has to come from SNOMED CT - for the others, you have can use anything at all that you like.
Further, the binding itself has an important property - the ‘strength’ of the binding. This key property tells you how to interpret the binding:
required | You have to use one of the specified codes |
extensible | You have to use one of the specified codes, unless there isn’t an appropriate one. Then you can use whatever you like |
preferred | This is the sort of codes you should use - and this value set really is a good idea to use |
example | This is the sort of codes you should use |
So the last 2 binding strengths are not, well, binding: you can ignore them as you see fit. So what you can actually use in a resource property depends on the strength of the binding, and the value set it references. But, sadly, most of the really interesting properties in most resources have a binding strength of ‘example’ - precisely because they are most interesting, we have no way to get consensus on the right coding system (let alone the right set of concepts). A great example is Condition.code:
code | 1..1 | CodeableConcept | Identification of the condition, problem or diagnosisCondition/Problem/Diagnosis Codes(Example) |
An example binding to a large set of SNOMED CT codes….
Finally, some notes on your choices:
- Standard clinical coding system: we always recommend that you use one of these. But these can be hard to use. We introduced theterminology serviceto make this easier, and this is a concept that’s just about in the goto-market phase
- FHIR code systems are mostly defined for the fixed properties like status where you have to use one of the fixed codes we defined, but sometimes we define a code system to be used with Coding/CodeableConcept. We generally try pretty hard to not overlap with the standard terminologies, so it’s usually a choice of one or the other
- When you use a customised in house coding system, you don’t actually have to define it using a value set, but doing so allows you to tell everyone else in a computable fashion what you are doing, so it’s a good idea, yes.