OHDSI Home | Forums | Wiki | Github

Vaccines standard - CVX or RxNorm?

(Dmytry Dymshyts) #1

We are working currently on CPT4 vaccine mappings.
Thanks @MFernandez-Chas for raising this problem.

See initial post here

So, currently some CPT4 codes are mapped to RxNorm, but CVX equivalents exist as well (see the table attached cpt_rxn_cvx.xlsx (11.9 KB)).
Which standard is better - RxNorm or CVX?
On the one hand there’s exsisting mapping from CPT to CVX, so no manual curation needed
on the other hand RxNorm is nice because of its hierarchy, classes,etc.

I tend to use CVX here, but anyway want to hear from others.
@Christian_Reich, @Eldar, @aostropolets

(Melanie Philofsky) #2

Hi @Dymshyts,

In Colorado we have CPT4 (or maybe they are HCPCS?) codes from one source and then string/names for other vaccines from another source.

RxNorm/RxNorm Extension has been the “cleanest” standard vocabulary. Actually, it’s the only standard vocabulary, all other vocabularies contain standard concepts. What’s the terminology lifecycle for CVX? Do they reuse codes? Do they keep all codes available even if they are no longer in use? As you know, reused and disappearing codes are very problematic for those of us with long term data.

If we use CVX as the standard, will CVX participate in the hierarchies and fall under the ATC classification concepts? We are directing our data requestors to use the ATC classification hierarchy as an easy & less time consuming way to find every drug code/concept_id for a given class of drugs.

(Vojtech Huser) #3

At least some part of Canada standardized their vaccines using SNOMED CT.
See https://cvc.canimmunize.ca/en/explore#/generic

I compared RxNormExtension to growing drug content in SNOMED CT last year.

Maybe one day we will not need RxNormExtension which may not be cheap (and feasibile) to maintain in the long run.

(Christian Reich) #4


I suggest a session with @MFernandez-Chas and stephanie.fowler@iqvia.com. They are heavily involved in vaccine research for the FDA, and will tell you want’s needed and what the issues are.

(Seng Chan You) #5

@Dymshyts 'm pleased to see that you’re working on standardization of vocabulary for vaccine. Please let us know, which vocabulary will become standard for vaccine!
Thank you for your contribution, again.

(Eldar Allakhverdiiev) #6

Dear colleagues,
We did have a couple of hot debates about the most appropriate structure of vaccines standardization. And they are not finished yet.
So I’d appreciate any suggestions + use cases from all collaborators.
Please share any thoughts and findings about this topic so that we can make optimal decision. :blush:

(Christian Reich) #7

Well, @Eldar, if you ask so nicely I won’t hold back, like I usually do around here. :slight_smile:

This is the problem: Vaccines are different from other drugs:

  • Many of them are seasonal
  • Their nature depends on the preparation method

An example is flu vaccine:


RxNorm has 100 of them. If all you know that the patient had a flu shot you cannot capture this event, because RxNorm is way too detailed. CVX seems to be a better fit. But how do you bake together a system of Standard Concepts on top of RxNorm? Can’t make them drug classes as they cannot go into the drug_concept_id field.

That’s the conundrum. We need to solve it.

(Dmytry Dymshyts) #8

seems, NO.
but who knows actually, for example we discovered this in HCPCS which has never happened before,
see here: HCPCS codes change their meaning over time

if vaccine is not in use anymore, they keep the code.
see here: https://www2a.cdc.gov/vaccines/iis/iisstandards/vaccines.asp?rpt=cvx

Yes, it will.
But I checked the concepts from my initial example and they aren’t linked to ATC currently.

(Melanie Philofsky) #9

Thanks for the answers, @Dymshyts!

We have this data, “Influenza Nasal”. We also have brand name data, “Menveo”. And everything in-between.

I’m attaching all our strings that need to be mapped to standard concepts. I hope this helps inform the debate @Eldar, @Christian_Reich, @Dymshyts

Vaccine strings UCD.xlsx (15.0 KB)

(Christian Reich) #10


CVX are only like 50. These are higher level. Nothing gets “reused”, because these are not products. They are more like super level ingredients.

(Melanie Philofsky) #11


I see. UC Denver will need the less granular CVX codes as drug_concept_ids or drug_source_concept_ids since some of our data is coded in less granular text strings (Influenza Nasal). We would also like to see these codes/concept_ids participate in the ATC classification hierarchy (if they don’t already). One of our use cases asks who has received the influenza immunization/Drug Exposure this flu “season”, who has a positive flu Measurement this season, who has a positive flu Condition Occurrence this season? Our other use case is the FDA BEST project and the driver for mapping this data right now

(Violetta Komar) #12

Hi, I’m working with @dymshyts

We are going to build the hierarchical relationships between CVX and RxNorm.

Let me explain using “Hepatitis B vaccine” example:

“CVX 43 - hepatitis B vaccine, adult dosage” - corresponds to - 1 ML Hepatitis B Surface Antigen Vaccine (0.02 MG/ML or 0.01 MG/ML) (Prefilled Syringe or Injection).

Quantitative Clinical Drug is a closest descendant of “CVX 43 - hepatitis B vaccine, adult dosage”, because "adult" specifies the Quantity (1 ML).

So, “CVX 43 hepatitis B vaccine, adult dosage” descendants are:

<528327 > 1 ML Hepatitis B Surface Antigen Vaccine 0.02 MG/ML Prefilled Syringe

<19133377 > 1 ML Hepatitis B Surface Antigen Vaccine 0.01 MG/ML Prefilled Syringe

<46275236 > 1 ML Hepatitis B Surface Antigen Vaccine 0.01 MG/ML Injection

<46275243 > 1 ML Hepatitis B Surface Antigen Vaccine 0.02 MG/ML Injection

"CVX 08 hepatitis B vaccine, pediatric or pediatric/adolescent dosage " stands for the same but 0.5 ml. Thus CVX 08 descendants are:

<46275241> 0.5 ML Hepatitis B Surface Antigen Vaccine 0.01 MG/ML Injection

<19133379> 0.5 ML Hepatitis B Surface Antigen Vaccine 0.01 MG/ML Prefilled Syringe

<46275229> 0.5 ML Hepatitis B Surface Antigen Vaccine 0.02 MG/ML Injection

<528329> 0.5 ML Hepatitis B Surface Antigen Vaccine 0.02 MG/ML Prefilled Syringe

<19133383> 0.5 ML Hepatitis B Surface Antigen Vaccine 0.005 MG/ML Prefilled Syringe

And “CVX 44 hepatitis B vaccine, dialysis patient dosage”. Here the concentration defines the vaccine type (not a volume like it was before).

So, these are the closest descendants of CVX 44:

<46276310> Hepatitis B Surface Antigen Vaccine 0.04 MG/ML Injection

<35200004> Hepatitis B Surface Antigen Vaccine 0.04 MG/ML Prefilled Syringe

And then we also built relationship from CVX to Ingredient.

So < 528323 > “Hepatitis B Surface Antigen Vaccine” (RxNorm Ingredient) descendants are

“CVX 43 Hepatitis B vaccine, adult dosage”

“CVX 08 Hepatitis B vaccine, pediatric or pediatric/adolescent dosage”

“CVX 44 Hepatitis B vaccine, dialysis patient dosage”

“CVX 189 Hepatitis B vaccine (recombinant), CpG adjuvanted”

Then Hepatitis B Surface Antigen Vaccine ‘Is a’ ATC <21601338> “hepatitis B, purified antigen”, making CVX connected to ATC as well.

So, these CVX concepts remains standard. All possible hierarchical connections are built and we satisfy all possible needs this way.

(Melanie Philofsky) #13

Perfect! Thanks for the update, @Violetta_Komar!

(Alexander Davydov) #14


It’s a good rule, but not universal anymore.

E.g., Heplisav-B (0.5 ML Hepatitis B Surface Antigen Vaccine 0.04 MG/ML Injection OR Prefilled Syringe) is used in 0.5 ml formulation for non-dialysis adults.

793515 & 35201908 are descendants of what CVX in your system?

And what about hepatitis B vaccine, unspecified formulation? Why do you leave it out of scope? It’s constantly used in mapping, isn’t it?

I guess we need to be very careful here and link CVXs just with Quant Clinical Drug or even with Quant Branded Drug (needs to be checked).

(Violetta Komar) #15

E.g., [Heplisav-B ] (0.5 ML Hepatitis B Surface Antigen Vaccine 0.04 MG/ML [Injection] OR [Prefilled Syringe]) is used in 0.5 ml formulation for non-dialysis adults.
Can you give me a link to some sources of this information? What I found for this Brand Name:

Information about dosage of this vaccine on 15th page. It can be used for patients on dialysis in dosage 40 mcg (standard adult dose is 20 mg or 10 mcg).

(Violetta Komar) #16

These concepts have dosage 0.04 mg/ml. So, how we told before, these concepts going to be descendants of “CVX 44 Hepatitis B vaccine, dialysis patient dosage”

(Violetta Komar) #17

“CVX 45 Hep B, unspecified formulation” is inactive now. It just will been mapped to RxNorm Ingredient 528323 “Hepatitis B Surface Antigen Vaccine”.



(Alexander Davydov) #19

Sure. Please find it in my previous post under the ‘used’ statement. It’s a product package insert.

It’s a background chapter - the information about 2 different vaccines (Engerix-B, Recombivax HB) had been licensed and used before publishing the Clinical Review of Heplisav-B.

But the info on Heplisav-B is still there:

  • 9.1.6 Insufficient information regarding the safety and immunogenicity of Heplisav-B are available in individuals with chronic kidney disease or on hemodialysis.

  • Indication(s) and Intended Population(s): Active immunization against infection caused by all known subtypes of hepatitis B virus in adults age 18 years of age and older.

As you can see, it’s just the Heplisav-B related concepts. So it’s not a correct relations to CVX.
Not sure this unexpected case is unique among HBV vaccines. It’s better to check every brand name indications list or find some actual immunization handbook (probably it does exist).

Ok, please remap.

(Christian Reich) #20


Could you be so kind and create a comprehensive graphical image of the ATC, CVX and various RxNorm concepts in this example and their hierarchical relationships? Would make understanding your approach a lot easier.

(Dmytry Dymshyts) #21

I see, there are some RxNorm vaccines we can’t properly assign to CVX.
@Violetta_Komar, can we make only uphill relationships from CVX as a first step.
I mean these CVX 45, 08, 44, 128 Is a 528323 Hepatitis B Surface Antigen Vaccine.
For now we have only one use case: we need to find CVX codes by the ATC hierarchy, and building Is a relationships from CVXs is enough.