OHDSI Home | Forums | Wiki | Github

NDCs mapping to RxNorm Extension

Hi @aostropolets, @Dymshyts & @Christian_Reich,

I have 181 drug_source_concept_ids which map to a standard concept_id in the RxNorm Extension vocabulary. Why are they not mapped to standard concepts in the RxNorm vocabulary?

The obvious answer is that RxNorm Extension fits better. RxNorm gives us the mappings for some of the NDCs that are valuable or important, others get mapped to whatever better represent their ingredient, strength and form. Since RxNorm and RxNorm Extension have one hierarchy a fact that it’s mapped to RxNorm or RxE shouldn’t really matter (unless you found issues or bugs).

Problem is that NDCs are US-based drugs, and RxNorm should cover them. Unless there is some deprecation sequence problem. Is there?

Not exactly the sequence problem, but the deprecation problem itself.
For example, a drug is out of the market for some reason. It gets deprecated by RxNorm and NDC but still is in the old source data, which means that we need to map it to a standard concept. Sometimes RxNorm gives the alternatives, sometimes RxE does it better (like in the case of 44990347 Factor VIII 125 UNT/ML Injectable Solution [ReFacto] that has no analogs in RxNorm).
Then we have a lot of drugs that RxNorm doesn’t care about, like all sorts of multivitamins. Some of them get mapped better (like 45358429 BIOTENE DRY MOUTH ORAL RINSE), others - just to a generic ‘Multivitamin preparation’.

RxNorm deprecates concepts when the drug is off the market? I don’t think so.

You are right with that one. Are @MPhilofsky’s NDCs in that category?

My drugs are more than just vitamins. I’m attaching a csv of the drug_source_concept_ids that map to a standard drug_concept_id in the RxNorm Extension vocabulary.

UCD drug source concept ids map to RxNorm Extension.xlsx (10.6 KB)

So, let’s take a look at them. One random drug:
50 ML Midazolam 1 MG/ML Prefilled Syringe
This drug has no Brand Name and there are no Branded Drugs, valid or deprecated with this dosage and volume. Even if we drop the Dose Form and extend our search to Injections, Injectable Solutions and so on, there is still none.
So, our decision to map it to something else in RxNorm cannot be guided by the Branded Drugs that may exist for this drug or by other clues (such as dailymed ). What happened to this drug and why it got deprecated? Your guess is as good as mine.

This is not FDA approved. It exist no where in the FDC list. Am I missing something? It is in RXNorm extension. A case of garbage in/garbage out?

Disclaimer: This drug has not been found by FDA to be safe and effective, and this labeling has not been approved by FDA.

For further information about unapproved drugs, click here.

Midazolam HCl 1 mg/mL in 0.9% Sodium Chloride 50 mL Bag


midazolam hcl injection, solution

Product Information

Product T ype


Item Code (Source)


Route of Administration


DEA Schedule


Active Ingredient/Active Moiety

Ingredient Name

Basis of Strength






1 mg in 1 mL

Also have nay of you worked for a big Pharma company. They have issues tracking all this information as well for all the drugs they have every made over time, where they are sold and formulations and approvals. So it is no wonder RXNorm is not perfect

The NDC code for @aostropolets example is 66647403694, not


I was under the impression that the OMOP CDM was going to keep all deprecated, retired, obsolete, doesn’t exist any more but did at one time codes.

This is what we are trying to accomplish at UCD. We are creating a “data explorer”, a Tableau UI for our end users (researchers & investigators) based off the ATC classification concepts and the OMOP Vocabulary tables. One of our talented BI-Developers noticed that the Concept Ancestor table uses the RxNorm Extension vocabulary & concept_ids for the ATC hierarchical queries, so she included it in the data explorer. As you can imagine, going from the small amount of standard RxNorm concept_ids (147,676) to including RxNorm & RxNorm Extension standard concept_ids (1,770,014) has exploded the size of the table and slowed the query to a frustrating, spinning disk. This is run off GBQ, which is super fast, so it’s not a backend architecture problem (or so I’m told by people that know way more about architecture than I). We are trying to lower the giant hurdle of sifting through thousands of NDC codes when a cohort inclusion is “opioids”. Granted, the researcher still has to sift through all the codes returned when retrieving the descendants of concept_id = 21604254, but it is easier than going the other direction. Removing the RxNorm Extension vocabulary from all our queries, including ones against Drug_Exposure table will help immensely.


Any thoughts, questions, comments, opinions, agreement, disagreement, or philosophical discussion points on the above?

Oops. Sorry, @MPhilofsky, didn’t mean to ignore you.

Short answer: yes. Longer answer: Well, not sure what you want. Yes, if RxNorm Extension is too big, and you are in the US, you can just kick it out. There are no RxNorm Extension products there. (Which, btw, may not always hold true in future.) Or you get a bigger machine. Or you get a better search engine. 1.7M records really should not be a problem for any optimized query. 1.7G maybe, 1.7T definitely.

Hi @abedtash_hamed,

In Colorado

Are RxNorm Extension concepts in the terminal nodes of the hierarchy? Will we “break” the hierarchy and not return concepts if we remove the RxNorm Extension vocabulary from the Concept Ancestor table?

Hi @MPhilofsky,

I would recommend not to include RxNorm Ex in your tool for now if you are not dealing with out-of-US data. You may lose some products like few vitamins or herbals or media contrast, but it would much easier to maintain. We did the same thing in ATC WG. Dealing with Rx Ex requires more time and some clean-up that we are handling right now.

But, an overall question: Are you following 21+ ATC principles for the mapping? This is not a quick thing to do. Depending on the ATC class, you need to know more “metadata” about the class like indication, site of application, systemic or local, the corresponding drug strength, and more.

I would be happy to talk more if interested.


Thanks, @abedtash_hamed!

I’ll get in touch with you offline to discuss our use case and how Colorado can best use the ATC hierarchy.


1 Like

Here are some NDC codes that I could not find:
Wondering if they are missing from the OMOP vocabulary table or if ETL provided incorrect codes.
09999720665 | NDC
09999720666 | NDC
09999720671 | NDC
00069100002 | NDC
33332032102 | NDC
33332032101 | NDC
46028021811 | NDC
33332042110 | NDC
09999720670 | NDC
09999197625 | NDC
33332022121 | NDC
00000000023 | NDC
46028021911 | NDC
33332042111 | NDC
09999001739 | NDC
99999008181 | NDC
09999001419 | NDC
49281054605 | NDC
00000000012 | NDC
33332022120 | NDC
00000000001 | NDC
09999008511 | NDC
09999008708 | NDC
09999001418 | NDC
00000000698 | NDC
66019030801 | NDC
49281056101 | NDC
09999008955 | NDC


Some of them are represented as 9-digit NDC. Just cut off the last 2 digit and search again. The rest - the vocab team has to add them. Do you have the descriptions?