OHDSI Home | Forums | Wiki | Github

Drug Vocabulary Details

Hello all,

We are in process of implementing an in-house vocabulary repository which will be supported by an User interface to search different vocabularies. Our source of data for the Vocabulary is Concept Table which we downloaded from Athena and our data model follows OMOP CDM. While working on getting the vocabularies for drug domain, we are experiencing this scenario where we cannot populate the generic /drug name and its difficult to identify using existing fields available in concept table. We currently have the information as part of a bigger description field. Please see snapshot below. We wanted to understand if we can reverse engineer this to extract the generic name, or there any queries or other data dictionaries/databases that can be leveraged for this implementation.

Thanks and regards,
Jayanti

I’m not sure that I get your issue, but let me try. You want to have generic name and brand name as a separate columns? Or do you want to figure out whether a drug is generic or branded?
If latter, then use Maps to relationship from your concept to RxNorm. Then RxNorm concept_class_id will tell you if it’s branded or not (Branded/Clinical).
If you want brand name and generic name in branded drugs to be presented as separate names, then you can use simple parsing to extract a brand name in square brackets from concept_name.

Thank you for your note. I want the former. Brand names and generic names in separate columns. Not every row has the brand name in square bracket, see row 3 of my snapshot. And, I am specifically looking for the generic name. Is there a way to extract that information? Currently the description has everything concatenated and my team is specifically interested in the generic name.

You can follow the link from NDC in this case to RxNorm. There, all the names are standardized so the brand name is in the square brackets. At this point, you can either regexp the brand name using this pattern, or use concept_ancestor to get a generic name:
select * from concept_relationship cr
join concept_ancestor ca on concept_id_2 = descendant_concept_id and relationship_id = ‘Maps to’
join concept c on ancestor_concept_id = concept_id and c.concept_class_id like ‘%Clinical%’
where concept_id_1= 35604492
order by min_levels_of_separation;
For SNOMED is a little bit more complicated as we don’t have the direct relationships to RxNorm.Nevertheless, you can use relationships, which are kind of messy though:
select * from concept_relationship
join concept on concept_id_2 = concept_id and relationship_id = ‘Is a’
where concept_id_1 = 46119582;

Thank so much for your note. This got reprioritized internally because of other priority items.

We need to resolve this asap now. And any guidance would help. We tried doing what you suggested @aostropolets but it did not work. We are still not able to extract the generic names as shared in the original post. Please see the snapshot for your query result.

Ok, the result looks like generic names :slight_smile:
If you don’t need standard concepts, feel free to use regexps to cut brand names.

@Jayanti_Bhatia:

Hm. Let me try to disentangle:

  • A generic name in the OMOP System is called an Ingredient. You can extract the ingredient from any RxNorm standard concept by going into the CONCEPT_ANCESTOR table and look up the ancestor, where concept_class_id=‘Ingredient’.
  • A brand name in the OMOP System is called Brand Name. You can extract the brand name from any RxNorm standard concept, if it has one (i.e. is a Branded Drug or derivative thereof) by using the CONCEPT_RELATIONSHIP table, where concept_class_id=‘Brand Name’

Does that help?

t