Friends:
Together with @Christian_Reich, @abedtash_hamed, @Alexdavv, @Dymshyts and other contributors we revised the content of ATC and its relationship to RxNorm Drug Concepts. We learned a lot in the process, which may be useful for you to understand if you want to use ATC as a classification, or if ATC is part of your source data.
- ATC is much more complicated than it looks.
- We had to fix the ATC-RxNorm/Extension hierarchy.
- We added a mapping from ATC to RxNorm/Extension to support ETLing.
If you want to understand the details, please read on.
ATC, despite being the most popular drug classification system, has a number of non-obvious problems:
- Some ATC concepts are WYSIWYG, but others incorporate attributes that are not immediately visible: route of administration, indication, mechanism of action, dosage and combinations. Therefore, not every ATC code containing the name of a drug ingredient is automatically the correct classifier for that drug. For example prednisolone is the ingredient of 6 ATC concepts that have the same name but different routes of administration, dose or indication.
- Some drug classes have even more exotic attributes, like insulines and vaccines. For example, A10AB04 “insulin lispro” is fast-acting and A10AC04 “insulin lispro” is intermediate-acting.
- Many ATC concepts have no drugs in any of the markets we currently support. Often, these represent historic drug products that have left the market.
- Many drugs have no ATC class. This is predominantly the case for traditional medicines, extracts, allergenic preparations, but a few “good” ones are there as well, such as thyroglobulin.
What is wrong with the way ATC was implemented till now:
- ATC 5-level concepts were mapped to RxNorm ingredients. As a consequence, all those additional attributes were not considered. E.g., ophthalmologic prednisolone was an ancestor to all drugs containing prednisolone. We took out all combinations a year ago to prevent complete chaos, but obviously that was not really solving the problem.
- Many people have ATC in source data, essentially using it as a way to define ingredients. We provided no support to convert these data into standard OMOP.
Here is what we did to fix the hierarchy:
- We revised the mapping to Ingredients
- We added some of the missing attribute information to the ATC 5 from the ATC website. For example, H02AB06 “prednisolone” became H02AB06 “prednisolone, systemic”.
- Alternatively, we extended the attributes from ATC 3 or 4 levels down to ATC 5. For example, ATC 5 R03AC07 “isoetarine” doesn’t have route specified, but we inferred its route from an ancestor R03A “ADRENERGICS, INHALANTS”.
- We rebuilt the entire ATC-RxNorm hierarchy taking into account the tacit attributes. See the picture below. The above H02AB06 “Prednisolone” with its systemic route of administration is connected to the Ingredient Prednisolone in CONCEPT_ANCESTOR, and from there to only those descendants which have a form intended for system use (e.g. Oral Tablets or Injections). Combinations are also correctly handled:
Here is what we did to support mapping ATCs during ETL
- New “Maps to” relationships connect ATC 5 to RxNorm and RxNorm Extension. See picture below. Single ingredient ATCs are mapped to RxNorm Ingredients. Combinations are only mapped to the explicit components.
What we haven’t done and needs to be addressed in the future:
- Independent QA. We are planning to integrate the Norwegian drug repository, for which there is a definitive ATC mapping from the same WHO Collaborating Centre for Drug Statistics Methodology (WHOCC) which maintains the ATC, and then compare their assignments to ours. It won’t include all drugs though.
- Missing attributes. There are still attributes to be modelled and correctly implemented, even though they are not common. For example:
- We did not differentiate corticosteroids based on their potency: D07AC14 “methylprednisolone aceponate” is a potent corticosteroid and D07AA01 “methylprednisolone” is a weak corticosteroid, but currently they have the same RxNorm descendants.
- We didn’t implement mechanisms of action. For example, ATC B01AC06 “acetylsalicylic acid (Platelet aggregation inhibitors)” and N02BA01 “acetylsalicylic acid (OTHER ANALGESICS AND ANTIPYRETICS)” have the same RxNorm descendants.
- Orphan drugs. We have to think what to do with the RxNorm ingredients and corresponding drugs for which no ATC exists. One way is to bring it up with the WHOCC. Another way is to create a few pseudo-ATC catch-all classes.
As usual, we are happy to take comments, suggestions, bug reports and congratulations.