Map Drugs to RxNorm
General principles for mapping pharmaceutical products to RxNorm standard concepts.
When to Use
When asked to map a product to RxNorm, create or review a mapping.tsv, or find RxNorm concepts for a drug.
Related Skills
- •
find-concepts- Search for RxNorm concepts using the semantic search API - •
map-ema-drugs- Map EMA centrally authorised products to RxNorm - •
map-latvia-drugs- Map Latvian national products to RxNorm
General Mapping Principles
These apply across all data sources:
Mapping Types
- •EXACT: Matches active ingredient, strength, and dose form. Do NOT use US-only brand names - RxNorm contains US brands which may differ from EU names. Use unbranded concepts unless the brand is the same in both EU and US (e.g., Twinrix, Lantus). Minor label variations do not constitute a brand difference — if the base brand name matches, the branded RxNorm concept is appropriate. This includes suffixes like "Velotab", "DIF", "Ellipta", "Control", "Maintena", qualifiers like "Adult"/"Paediatric", and other sub-brand or formulation descriptors added to the same base brand.
- •BROAD: Less specific match. Use when only a concept without specific strength/volume is available, or for vaccines/biologicals with less granular RxNorm coverage. When choosing between multiple BROAD candidates, pick the one that preserves the most clinically relevant information — dose (strength + volume) matters more than device/form differences. For example,
0.5 ML etanercept 50 MG/ML Prefilled Syringeis preferred overetanercept 50 MG/ML Auto-Injectorfor a 25 mg pen injector, because the volume distinguishes the 25 mg dose from the 50 mg dose.
Terminology Adaptation
EMA/EU terminology must be adapted to RxNorm conventions:
- •"film-coated tablet" / "tablet" -> "oral tablet"
- •"solution for injection" -> "injectable solution" or "injection"
- •"capsule, hard" -> "oral capsule"
Dose Form Selection
The find-concepts script returns dose form definitions alongside search results — use these to select the correct form. Key distinction for injectables include:
- •Injectable Solution: multi-use product (e.g., vials intended for multiple withdrawals)
- •Injectable Suspension: multi-use product (e.g., vials intended for multiple withdrawals)
- •Injection: single-use product
- •Prefilled Syringe: single-use solution in a syringe
Precision: Volume-specific vs Generic Concepts
Always select the most precise concept that is correct:
- •Single-use products (ampoules, prefilled syringes): the volume is part of the dose and clinically relevant. If a volume-specific concept exists and matches (e.g.,
2 ML ondansetron 2 MG/ML Injection), use it — this is EXACT. If no volume-specific concept exists, use the concentration-only concept (e.g.,ondansetron 2 MG/ML Injection) — BROAD if ingredient, strength, and form match. - •Multi-use products (vials): usually only the concentration matters, not the container volume. There will usually only be concentration-only concepts available, these are EXACT.
- •If you can only find a less specific concept (e.g., missing clinically relevant strength or form), the mapping is BROAD, not EXACT.
Common Pitfalls
- •Concentration vs total dose: EMA lists both; RxNorm may express as concentration and/or total volume
- •Biologicals/vaccines: BROAD mapping acceptable when exact match unavailable
- •Multiple strengths: Different strengths must map to different RxNorm concepts
- •Base to salt conversions: Check
weight_conversions.tsvin this skill directory when in doubt - •Metered vs actuated dose: Verify via SmPC/FDA labelling, add
sources.mdif needed - •Pack sizes: Different pack sizes of the same drug map to the same RxNorm concept
- •Unit conversion: IU = UNT, RxNorm uses MG not µg or MCG
Output Format
Create mapping.tsv in the product folder with these columns:
| Column | Description |
|---|---|
<source_id> | Source-specific ID (e.g., ma_number for EMA, product_id for Latvia) |
concept_id | RxNorm concept_id from search results |
concept_name | RxNorm concept_name from search results |
concept_code | RxNorm concept_code from search results |
mapping_type | EXACT, BROAD, or empty |
comment | Optional note explaining the mapping decision |
suggestion | Ideal concept name when no exact match exists |
last_updated_date | Date in YYYY-MM-DD format |
See source-specific skills (map-ema-drugs, map-latvia-drugs) for the exact ID column name and any additional rules.
Validation
After creating or editing any mapping.tsv, validate it:
python3 skills/map-drugs/validate_mapping.py <path_to_mapping.tsv>
This checks header columns, date format, concept_id type, and mapping_type values.
Biosimilars
Reference Data
Check skills/map-drugs/biosimilars/ for per-INN reference files listing known biosimilars with FDA names and EU equivalents.
Search Strategy
Run all of these queries:
- •EU biosimilar brand name
- •INN + strength + form with brand
- •INN + strength + form (unbranded)
- •INN alone (to discover FDA-suffixed variants)
Scenario 1: FDA-suffixed INN exists in RxNorm
Map to the unbranded FDA-suffixed concept with mapping_type = EXACT. Do NOT use US-branded concepts.
Example: Insulin aspart Sanofi (EU) = insulin aspart-szjj (FDA):
- •concept_name:
3 ML insulin aspart-szjj 100 UNT/ML Pen Injector - •mapping_type:
EXACT
Scenario 2: No FDA equivalent
Map to the plain INN (unbranded) concept with mapping_type = BROAD, and construct the suggestion:
<volume> <INN>-xxxx <strength> <dose_form> [<EU Brand Name>]
Example: Izamby (denosumab biosimilar, 60 MG/ML, 1 ML prefilled syringe):
- •concept_name:
1 ML denosumab 60 MG/ML Prefilled Syringe - •mapping_type:
BROAD - •suggestion:
1 ML denosumab-xxxx 60 MG/ML Prefilled Syringe [Izamby]
Important
- •Do NOT use US brand names when EU has different name (e.g.,
[Merilog],[Zarxio]) - •Do NOT use the originator brand for non-originator drug (e.g.,
[Prolia],[Xgeva])