An Interoperability Primer Part 3: Nomenclature, Vocabulary & Terminology

Posted May 3, 2015
By Nick Hatt


In part 1 of this series I gave a high-level overview of what HL7 is and does. In part 2 I outlined what integration profiles are and why we need them.

In this article I will shed some light on one of the biggest moving targets in integration: code systems.

What is a code system?

Code systems arise out of very simple problems: my lab system and my EHR are made by different vendors, how do I make sure that a CBC order placed in the EHR is recognized in the lab system? What about the results? How do I make sure that the white cells number from the lab systems gets to the white cell count field in the EHR?

Enter code systems. The lab system and EHR will need to agree to a set of mutual codes that identify all the tests and lab components they have in common.

This concept extends far beyond connecting two systems – what if the CDC wants to monitor results of certain tests (they do) to spot an epidemic before it happens? They need to be able to recognize those lab tests and results from various EHR/health system combinations.

What are the coding systems I should care about?

The C-CDA implementation guide references 40 different code sets (see appendix D). These range from the familiar and understandable (like US ZIP codes) to behemoths that encompass hundreds of thousands of medical terms.

Here’s a brief rundown of some of the most popular:

  • SNOMED-CT is used extensively in C-CDA and encompasses pretty much anything that can ever be performed or described in healthcare. The model is a taxonomy descending from a few root classes of things. Check out the online browser to see it in action.
  • LOINC is a code system used exclusively for laboratory tests and results. In some ways, it’s a lot nicer to work with than SNOMED-CT because of the limited scope. You can also easily search LOINC online. C-CDA is a little bit more ambiguous about use of LOINC, but prefers it for describing things like orders/results. Additionally, Meaningful Use requires usage of LOINC for electronic lab results.
  • RXNORM is C-CDA’s preferred coding system for drug information. The system is able to encompass generics and brand names and provide built in cross-walks to other systems such as NDC. They have a browser and web API available (warning: requires running a Java app).
  • ICD is probably the first code system you thought of when reading this post. It’s everywhere in this country – mostly because it’s how you get paid. It mainly encompasses diagnoses and services and, like SNOMED, is large and complex. The US is supposed to transition to new version of ICD called ICD-10 in October 2015. Check out the most essential ICD-10 literature.
  • HCPCS/CPT are used extensively in the billing world. CPT is a set of codes copyrighted by the AMA and requires licensing fees to use. HCPCS is used by CMS to process Medicare and Medicaid claims, and is made up of part of CPT, and additional codes specific to HCPCS.

What should I do with this information?

  • Use codes!
  • Make sure your app supports multiple different codes for one database concept

If you are built from the ground up using LOINC or SNOMED to capture clinical concepts, you are already on the path to more successful interoperability. If not, Redox can help by providing translation between you and the health system.

If you can support multiple identifiers for the same thing, that’s awesome – if not, it’s something to keep in mind. In addition to codes for services, patient IDs, provider IDs, location IDs, etc. all (conveniently) can have multiple identifiers coming from one health system.

Health Systems
  • Use codes in your build as soon as your EHR vendor supports them

Meaningful Use is forcing your hand, but go above and beyond what is required – don’t be like these guys:

Here is an excerpt from my CCD, downloaded from an Epic customer:

<code codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC" nullFlavor="UNK">  
<translation code="41232" codeSystem="1.2.840" codeSystemName="Epic.LRR.ID" displayName="CREATININE"/>  

What you’re looking at is the ‘creatine’ component of a basic metabolic panel. The health system is telling me that they don’t have a LOINC code for this, and instead are offering me the Epic internal identifier for creatine, which is not useful at all. At the end of the day, an EMR can usually only provide a place to put a LOINC code, it’s huge project for a health system to actually line them up with what is already there.

Disclaimer: This lab test was performed in 2013, so it’s possible that historic results don’t have LOINC codes on them, as the LOINC MU mandates were part of stage 2.


The breadth, depth, and overlap of code systems is not a problem that will be going away any time soon. Code systems pervade interoperability and compete amongst each other for mind share in standards development. The more nimble your software is and the more willing to adapt you are, the better off you will be.