# VNR code mapping to RxNorm

The [VNR codes](https://www.laaketietokeskus.fi/en/pharmaceutical-information/vnr-services) are Nordic country-specific codes known as [the Nordic Article Number](https://wiki.vnr.fi/?page_id=36). The VNR codes are 6-digit codes ranging from 000001-199999 and 370000-599999. They are assigned to all human medicines, veterinary medicines, herbal medicines, and traditional herbal medicines. Numbers outside this range are called ​​National Article Numbers which are used differently depending on the country.

[RxNorm](https://www.nlm.nih.gov/research/umls/rxnorm/overview.html) terminology on the other hand, is US specific terminology and provides normalized names for medications allows linking to many drug vocabularies commonly used in the US market.

We have mapped the Nordic country-specific VNR codes to RxNorm in FinnGen R6. **Although the initial mapping was performed in R6 and is located in library-green in finngen\_R6 folder the mapping can be used with any Data Freeze/Release.**

The mapping and readme are located:

`/finngen/library-green/finngen_R6/finngen_R6_medical_codes/fgVNR.tsv`

`/finngen/library-green/finngen_R6/finngen_R6_medical_codes/fgVNR_readme.txt`

### How the VNR code to RxNorm mapping was done:

1. VNR codes originating from different sources within FinnGen were combined into single table called 'OriginalVNR'
2. Additional information on VNR codes with missing drug name, strength, ingredient information were requested from [Pharmaceutical Information Centre](https://www.laaketietokeskus.fi/en) (Lääketietokeskus). This information is stored in the table 'ltklVNR'
3. Missing ingredient information of VNR codes was filled using ATC codes.
4. Administration routes, dosage forms and units were created for codes in both 'OriginalVNR' + 'ltklVNR' tables.
5. We processed source text format of Package, Substance, Substance strength, Administration Route and Dosage Form for both 'OriginalVNR' + 'ltklVNR' tables.
6. We used [OHDSI drugmapping tool](https://github.com/EHDEN/DrugMapping) to map the parsed VNR code information to map to standard RxNorm

More details till step 5 from can be found in [github repository](https://github.com/FINNGEN/VNRIngredientsTable/tree/fixes_sam/tasks).

Description of the columns of fgVNR.tsv are shown in below table.

<table><thead><tr><th width="202">Column Name</th><th>Column Type</th><th>Description</th><th>Example</th></tr></thead><tbody><tr><td>VNR</td><td>INT64</td><td>six-digit VNR code.</td><td>518</td></tr><tr><td>ATC</td><td>STRING</td><td>ATC group code</td><td>N05AH04</td></tr><tr><td>MedicineName</td><td>STRING</td><td>Commerical Name</td><td>SEROQUEL</td></tr><tr><td>AdministrationRouteSourceTextFI</td><td>STRING</td><td>Administration route in text format as in source.</td><td>Suun kautta</td></tr><tr><td>AdministrationRoute</td><td>STRING</td><td>Valid value for administration route.</td><td>Oral use</td></tr><tr><td>DosageFormSourceTextFI</td><td>STRING</td><td>Dosage form in text format as in source.</td><td>tabletti, kalvopäällysteinen</td></tr><tr><td>DosageForm</td><td>STRING</td><td>Valid value for dosage form.</td><td>film-coated tablet</td></tr><tr><td>PackageSourceTextFI</td><td>STRING</td><td>Package info in text format as in source.</td><td>10 FOL</td></tr><tr><td>PackageSize</td><td>FLOAT64</td><td>Size of package in float format.</td><td>10</td></tr><tr><td>PackageFactor</td><td>INT64</td><td>Factor of package in float format.</td><td>1</td></tr><tr><td>PackageUnit</td><td>STRING</td><td>A valid unit value.</td><td>fol</td></tr><tr><td>SubstanceSourceTextFI</td><td>STRING</td><td>List of substances as in source.</td><td>quetiapine</td></tr><tr><td>Substance</td><td>STRING</td><td>Substance name. one row per substance.</td><td>quetiapine</td></tr><tr><td>SubstanceStrengthTextFI</td><td>STRING</td><td>Substance's strength in text format as in source.</td><td>25+100+200 mg</td></tr><tr><td>Strength</td><td>STRING</td><td>Mapped or fixed or split substance strength. If not then source strength used.</td><td>100 mg</td></tr><tr><td>SubstanceStrengthNumenatorValue</td><td>FLOAT64</td><td>Substance's strength value in numerator in float format.</td><td>100</td></tr><tr><td>SubstanceStrengthNumenatorUnit</td><td>STRING</td><td>A valid unit value.</td><td>mg</td></tr><tr><td>SubstanceStrengthDeominatorValue</td><td>FLOAT64</td><td>Substance's strength value in denominator in float format.</td><td>1</td></tr><tr><td>SubstanceStrengthDeominatorUnit</td><td>STRING</td><td>A valid unit value</td><td>1</td></tr><tr><td>ValidRange</td><td>BOOL</td><td>True if VNR is en the valid range (less than 200000 or between 370000 and 599999)).</td><td>TRUE</td></tr><tr><td>Source</td><td>STRING</td><td>From which table the code was taken.</td><td>ltklVNR or "originalVNR"</td></tr><tr><td>Status</td><td>STRING</td><td>How well the medicine has been processed</td><td>incomplete_dosageForm</td></tr><tr><td>VNRnew</td><td>STRING</td><td>A temporary VNR code created for drugs with single substance multiple strength values. Temporary VNR code will have letters a or b or c attached to the end.</td><td>000518a</td></tr><tr><td>calculateTotalStrength_message</td><td>STRING</td><td>How well the strength has been processed.</td><td>correct or "missmatch"</td></tr><tr><td>TotalStrength</td><td>FLOAT64</td><td>Total Strength of the drug which is PackageSize * PackageFactor * Dosage</td><td>10 * 1 * 100 = 1000</td></tr><tr><td>TotalStrengthUnit</td><td>STRING</td><td>Total Strength valid unit</td><td>mg</td></tr><tr><td>n_codes</td><td>INT64</td><td>Frequency of the VNR code</td><td>260</td></tr><tr><td>Dosage</td><td>FLOAT64</td><td>SubstanceStrengthNumenatorValue/SubstanceStrengthDeominatorValue</td><td>100/1 = 100</td></tr><tr><td>DosageUnit</td><td>STRING</td><td>A valid unit value</td><td>mg</td></tr><tr><td>MedicineNameFull</td><td>STRING</td><td>Commerical Name, Dosage Form and SubstanceStrength</td><td>SEROQUEL 25+100+200 mg</td></tr></tbody></table>

The fgVNR.tsv file was used as the input for [OHDSI drugmapping tool](https://github.com/EHDEN/DrugMapping). The tool requires VNR code with substance information followed by dosage form and drug strength. If no substance information is present then there will be no mapping.

* [DrugMapping tool](https://github.com/EHDEN/DrugMapping) requires a [Common Data Model (CDM)](https://github.com/OHDSI/CommonDataModel/tree/v5.3.2) database with vocabulary data. To create the CMD, we:
  * Extracted CDM database schema from OHDSI common data model for Version 5.3.2 of CDM.
  * Created the CDM database schema in a PostgreSQL server Version 14.2
  * Changes were made in the CDM V5.3.2 SQL files generated from [OHDSI common data model](https://github.com/OHDSI/CommonDataModel/tree/v5.3.2) due to PostgreSQL server Version is > 9.
  * Downloaded the Vocabulary data of Default vocab list + Addition vocabularies for "Dosage Form" from [Athena](https://athena.ohdsi.org/search-terms/start).
  * Uploaded the Vocabulary data from [Athena ](https://athena.ohdsi.org/search-terms/start)to the PostgreSQL CDM v5.3.2 database
* Once the CDM database was up and running from PostgreSQL, we started setting up the [DrugMapping Tool](https://github.com/EHDEN/DrugMapping)
  * [DrugMapping Tool](https://github.com/EHDEN/DrugMapping) does following maps. We did "Clinical Drug Map" ![](/files/QCTVz7qz51W4FhIs3V7M)
  * Input file for [DrugMapping tool](https://github.com/EHDEN/DrugMapping) was formatted to add missing columns ![](/files/6xupIUfTAz0bWfkB6B7Y)
  * Information regarding the possible Clinical drug mapping possible along with total number of input drugs

    <table data-header-hidden><thead><tr><th width="526"></th><th></th></tr></thead><tbody><tr><td>Input</td><td>Value</td></tr><tr><td>Total Drugs</td><td>15,928</td></tr><tr><td>Drugs with non-missing VNR Codes</td><td>15,902</td></tr><tr><td>Unique VNR codes</td><td>14,655</td></tr><tr><td>Drugs with non-missing VNR codes + Ingredient Codes</td><td>13,876</td></tr><tr><td>Drugs with non-missing VNR codes + Ingredient Codes + dosage form</td><td>12,897</td></tr><tr><td>Drugs with non-missing VNR codes + Ingredient Codes + dosage form + dosage value</td><td>12,644</td></tr><tr><td>Drugs with non-missing VNR codes + Ingredient Codes + dosage form + dosage + dosage unit</td><td>12,638</td></tr></tbody></table>
* After fixing the Input file for [DrugMapping Tool](https://github.com/EHDEN/DrugMapping), it created three intermediary files
  * Ingredient Name Translation File
  * Unit Mapping File
  * Dose Form Mapping File
* All the three intermediary files need to be filled carefully
  * Ingredient Name Translation File - Simplest to fill using the input file
  * Unit Mapping File
    * Source units were to be mapped to standard units such as 'mg' and 'mL'. Example

      <table><thead><tr><th width="116">SourceUnit</th><th width="118">DrugCount</th><th width="135">RecordCount</th><th width="105">Factor</th><th width="126">TargetUnit</th><th>Comment</th></tr></thead><tbody><tr><td>%</td><td>303</td><td>1109084</td><td>0.01</td><td>mg/mg</td><td><br></td></tr><tr><td>IU</td><td>309</td><td>400416</td><td>1</td><td>[U]</td><td><br></td></tr><tr><td>U</td><td>25</td><td>360</td><td>1</td><td>[U]</td><td><br></td></tr><tr><td>g</td><td>160</td><td>1614186</td><td>1000</td><td>mg</td><td><br></td></tr><tr><td>g/l</td><td>8</td><td>1112</td><td>1</td><td>mg/mL</td><td><br></td></tr><tr><td>mg</td><td>20905</td><td>68649900</td><td>1</td><td>mg</td><td><br></td></tr><tr><td>mg/days</td><td>111</td><td>54182</td><td>0,289</td><td>mg/h</td><td><br></td></tr><tr><td>mg/h</td><td>5</td><td>455</td><td>1</td><td>mg/h</td><td><br></td></tr><tr><td>milli.IU</td><td>73</td><td>478234</td><td>1000000</td><td>[U]</td><td><br></td></tr><tr><td>ml</td><td>5</td><td>4885</td><td>1</td><td>mL</td><td><br></td></tr><tr><td>ug/puffs</td><td>6</td><td>212536</td><td>0.001</td><td>mg/{actuat}</td><td><br></td></tr></tbody></table>
    * Dose Form Mapping File
      * First thing is to extract all the dose form in domain "Drug" with concept\_class "Dose Form" from all the vocabularies in the CDM database.
      * Second thing is to extract "relationship\_id" of "Source - RxNorm eq" from CONCEPT\_RELATIONSHIP table for all non-standard "Dose Form" from "additional vocabularies".
      * Match the cells in "DoseFrom" to the extracted standard dose forms which was only 49 out of 147 dose forms.
      * Manually filled out 85 dose forms with only 13 dose forms missing having low frequency. Example of filled dose form file can be seen below

        <table><thead><tr><th width="139">DoseForm</th><th width="90">DrugCount</th><th width="93">Priority</th><th width="122">concept_id</th><th width="100">concept_name</th><th>Comments</th></tr></thead><tbody><tr><td>BASIC CREAM</td><td>11</td><td><br></td><td>19082224</td><td>Topical Cream</td><td><br></td></tr><tr><td>BATH ADDITIVE</td><td>1</td><td><br></td><td>19082228</td><td>Topical Solution</td><td><br></td></tr><tr><td>BODY LOTION</td><td>1</td><td><br></td><td><br></td><td><br></td><td><br></td></tr><tr><td>CAPSULE</td><td>279</td><td>0</td><td>19082168</td><td>Oral Capsule</td><td>Standard</td></tr><tr><td>CAPSULE</td><td>279</td><td>1</td><td>19021887</td><td>Capsule</td><td>Non-Standard</td></tr><tr><td>CAPSULE, HARD</td><td>664</td><td><br></td><td>19082168</td><td>Oral Capsule</td><td><br></td></tr></tbody></table>
    * The result of [DrugMapping Tool](https://github.com/EHDEN/DrugMapping) after carefully filling out all three files can be shown below

      Percentage of possible drugs mapped is 12,089 of 12,638 (95.6%)

      <table data-header-hidden><thead><tr><th width="381"></th><th></th></tr></thead><tbody><tr><td>Source drugs mapped to Clinical Drug</td><td>12089 of 14692 (82.283%)</td></tr><tr><td>Source drugs mapped to Clinical Drug Form</td><td>562 of 14692 (3.825%)</td></tr><tr><td>Source drugs mapped to Clinical Drug Comp</td><td>354 of 14692 (2.409%)</td></tr><tr><td>Source drugs mapped to Ingredient</td><td>588 of 14692 (4.002%)</td></tr><tr><td>Source drugs mapped Splitted</td><td>74 of 14692 (0.504%)</td></tr><tr><td>Source drugs mapped Splitted Incomplete</td><td>3 of 14692 (0.02%)</td></tr><tr><td>Source drugs mapped Total</td><td>13670 of 14692 (93.044%)</td></tr><tr><td>Source drugs mapped to None</td><td>1022 of 14692 (6.956%)</td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.finngen.fi/finngen-data-specifics/finnish-health-registers-and-medical-coding/vnr-code-mapping-to-rxnorm.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
