= !RxNorm Files for Vista/RPMS = [[PageOutline(2-5)]] Welcome to the homepage for the !RxNorm VISTA/RPMS Support. I am Sam Habiel, and I am the developer for these packages. I can be reached at sam dot habiel at gmail dot com. == What is !RxNorm? == !RxNorm is a standardized vocabulary set for Drugs in the United States. The goal of !RxNorm is drug nomenclature standardization and systems interoperability. More information on !RxNorm can be found at http://www.nlm.nih.gov/research/umls/rxnorm/. == Why do I want this? == !RxNorm is necessary for interoperability with other systems. If you use VISTA alone without having to talk to any other system, then you don't need !RxNorm. However, if you perform external drug interactions, send CCDA documents, or archive patient records for CCR, you are going to need !RxNorm. For Meaningful Use, you are required to have !RxNorm for various purposes. == What does this release contain? == This release contains Fileman files corresponding to most of public domain !RxNorm (archived data is not loaded into VISTA). It also contains utilities for querying !RxNorm for specific information and a utility to add drugs to the drug files automatically based on an !RxNorm number. It's important to note that the public domain !RxNorm files here differ from the NLM prescribable subset of !RxNorm. While both are public domain, the prescribable subset does not contain the VA datasets that enable translation between VISTA and !RxNorm. These are available in the full !RxNorm package from the NLM. Public domain corresponds to UMLS Restriction Level 0. Read further below to see how to get proprietary codes into your data file like First Databank GCNs and SNOMED codes. == How much does this cost? == This release is licensed under [http://www.gnu.org/licenses/agpl-3.0.html AGPL v3.0] and is free as in free beer. A commercial license for commercial entities running VISTA can be obtained for $2000 per VISTA instance; the commercial license can be found here: RxNormForVista/CommercialLicense. Support costs for monthly updates are $100/month per VISTA instance both for AGPL and commercial users. == How can I install !RxNorm on VISTA/RPMS? == === Before you install === '''YOU MUST READ THIS BEFORE INSTALLING''' The !RxNorm globals file is about 2.5 GB, and when loaded it takes up about 2.5GB. You therefore need to have at least 10 GB available on your drive. It is very highly recommended that you load and maintain !RxNorm in the !^C0CRXN global in an UNJOURNALED portion of your Mumps Database. The data is reproducible and does not need to be journaled; and journaling it is very expensive in terms of journal size. In addition, once loaded, it will not change until the next load. Maintaining back-ups of your database will be easier this way. !RxNorm contains very long text values. You must ensure that your Mumps database can do at least 16,000 characters in a single global node. On GT.M V6.0, create the following Global File Definition, and run it with GDE: {{{ add -segment C0CRXN -file="/path/to/your/globals/c0crxn.dat" -allocation=200000 -block_size=4096 -lock_space=100 -extension_count=1000 -global_buffer_count=8192 add -region C0CRXN -record_size=16368 -key_size=255 -dyn=C0CRXN add -name C0CRXN -region=C0CRXN }}} It's often necessary to increase your shared memory. The last line will change it for all reboots; the first line will do it for this boot. {{{ sysctl -w kernel.shmmax=67108864 echo "kernel.shmmax=67108864" >> /etc/sysctl.conf }}} If you use GT.M less than V6.0, you must make sure that your block size and record size synchronize since GT.M couldn't span blocks then. On Cache, create a new database, and map !^C0CRXN to it. By default Cache databases allow 32K of global node length. [[Image(RxNormForVista.png,align=right,600px)]] === Installation === The current version is 2.5. You now install the dictionary file (which you need to only install once unless it changes) and then download the data file from NLM (https://www.nlm.nih.gov/research/umls/rxnorm/docs/rxnormfiles.html) monthly, unzip it, and then pass the file path to the rrf directory in D IMPORT!^C0CRXNRD("/path/to/rrf",0 or 1 to import restricted data sources). See the Programmer APIs section below. The data load takes about 20 minutes. If you would rather not do that, some Public Domain Data that is several years old is provided below.[[BR]] Installation Order: * DD and routines: source:ccr/trunk/rxnorm/tags/2.5/RXNORM_FOR_VISTA_2P5.KID * Public Domain Data (unzip with 7z first): source:ccr/trunk/rxnorm/tags/2.2/RXNORM_FOR_VISTA_PD_DATA_11P2013.GKID.7z Installation is a normal KIDS file installation. There is nothing special about it. == Contents of the KIDS file == === File list === ||'''Name'''||'''Number'''||'''Global'''||'''!RxNorm NLM File'''||'''Approx # of entries at the end of 2013'''|| ||RXNORM CONCEPT NAMES AND SOURCES||176.001||!^C0CRXN(176.001)||RXNCONSO.RRF||1,000,000|| ||RXNORM SIMPLE CONCEPT AND ATOM ATTRIBUTES||176.002||!^C0CRXN(176.002)||RXNSAT.RRF||7,000,000|| ||RXNORM SOURCE INFORMATION||176.003||!^C0CRXN(176.003)||RXNSAB.RRF||13|| ||RXNORM SEMANTIC TYPES||176.004||!^C0CRXN(176.004)||RXNSTY.RRF||400,000|| ||RXNORM RELATED CONCEPTS||176.005||!^C0CRXN(176.005)||RXNREL.RRF||5,000,000|| ||RXNORM DOCUMENTATION FOR ABBREVIATED VALUES||176.006||!^C0CRXN(176.006)||RXNDOC.RRF||3,000|| === Pharmacy Files Computed Fields === ||'''File Name'''||'''File number'''||'''Field Name'''||'''Field Number'''||'''Description'''|| ||DRUG||50||RXNCUI||176.001||Pointer to the Semantic Clinical Drug in 176.001 that corresponds to this drug.|| ||DRUG||50||RXN SCD NAME||176.002||Canonical Clinical Drug name according to !RxNorm.|| ||VA PRODUCT||50.68||COMPUTED GCNSEQNO||176.001||Multiple of GCNs corresponding to a VA PRODUCT|| === Routines === ||'''Routine'''||'''Description'''||'''Special Remarks'''|| ||C0CRXNnn||Complied cross reference routines (12 routines on Fileman 22.2)||Routines compiled dynamically; not shipped in KIDS build. ||C0CRXNRD||Import !RxNorm data from NLM files||See below for API|| ||C0CRXNLK||!RxNorm mapping APIs for VISTA||See below for APIs|| ||C0CRXNAD||Add a drug to drug file based on !RxNorm code||See below for API|| == What can I do with !RxNorm == === User Mode use === All files are shipped with no file access code security for reading, and as such they can be read by all users if they are granted access to Fileman and don't have Kernel Part III security turned on. If Kernel Part III security is turned on, you will need to grant users access to files 176.001 through 176.006. If you don't know what Part III security is, then you don't have it. ==== Concepts ==== Users can query the Concepts file by typing the concept name (usually a drug generic name or brand name) or a drug code (such as a VUID). Here are a couple of examples: Search for all entries that have the word PROZAC in them: {{{ Select RXNORM CONCEPT NAMES AND SOURCES RXCUI: PROZAC 1 PROZAC 58827 MSH PEN D005473 Prozac 2 PROZAC 58827 RXNORM TMSY 58827 PROzac 3 PROZAC 58827 RXNORM BN 58827 Prozac 4 PROZAC 10 MG (FLUOXETINE HYDRO 205535 RXNORM SY 205535 Prozac 10 MG (fluoxetine hydrochloride 11.2 MG) Oral Capsule 5 PROZAC 10 MG (FLUOXETINE HYDRO 205535 RXNORM TMSY 205535 PROzac 10 MG (FLUoxetine hydrochloride 11.2 MG) Oral Capsule }}} Search for the VUID for Prozac after we obtain it from the NDF: {{{ OUTPUT FROM WHAT FILE: RXNORM CONCEPT NAMES AND SOURCES// 50.68 VA PRODUCT (23779 entries) Select VA PRODUCT NAME: FLUOXETINE 1 FLUOXETINE HCL 10MG CAP 2 FLUOXETINE HCL 10MG CAP,UD 3 FLUOXETINE HCL 10MG TAB 4 FLUOXETINE HCL 20MG CAP 5 FLUOXETINE HCL 20MG CAP,UD Press to see more, '^' to exit this list, OR CHOOSE 1-5: 4 FLUOXETINE HCL 20MG CAP ANOTHER ONE: STANDARD CAPTIONED OUTPUT? Yes// (Yes) Include COMPUTED fields: (N/Y/R/B): NO// - No record number (IEN), no Computed Fields DISPLAY AUDIT TRAIL? No// NO NAME: FLUOXETINE HCL 20MG CAP VA GENERIC NAME: FLUOXETINE DOSAGE FORM: CAP,ORAL STRENGTH: 20 UNITS: MG NATIONAL FORMULARY NAME: FLUOXETINE CAP,ORAL VA PRINT NAME: FLUOXETINE HCL 20MG CAP VA PRODUCT IDENTIFIER: F0049 TRANSMIT TO CMOP: YES VA DISPENSE UNIT: CAP ACTIVE INGREDIENTS: FLUOXETINE HYDROCHLORIDE STRENGTH: 20 UNITS: MG PRIMARY VA DRUG CLASS: CN609 NATIONAL FORMULARY INDICATOR: YES CS FEDERAL SCHEDULE: Unscheduled SINGLE/MULTI SOURCE PRODUCT: Multisource DSS NUMBER: 1 OVERRIDE DF DOSE CHK EXCLUSION: NO CREATE DEFAULT POSSIBLE DOSAGE: YES FDA MED GUIDE: Fluoxetine_Cap_(Generic)_(2009).pdf SERVICE CODE: 608147 EFFECTIVE DATE/TIME: MAR 10, 2005 STATUS: ACTIVE VUID: 4008621 MASTER ENTRY FOR VUID: YES Select VA PRODUCT NAME: Select OPTION: INQUIRE TO FILE ENTRIES OUTPUT FROM WHAT FILE: VA PRODUCT// 176.001 RXNORM CONCEPT NAMES AND SOURCES (687143 entries) Select RXNORM CONCEPT NAMES AND SOURCES RXCUI: 4008621 1 4008621 310385 VANDF CD 4008621 FLUOXETINE HCL 20MG CA P 2 4008621 310385 VANDF AB 4008621 FLUOXETINE HCL 20MG CA P CHOOSE 1-2: 1 310385 VANDF CD 4008621 FLUOXETINE HCL 20MG CAP ANOTHER ONE: STANDARD CAPTIONED OUTPUT? Yes// (Yes) Include COMPUTED fields: (N/Y/R/B): NO// - No record number (IEN), no Computed Fields RXCUI: 310385 LAT: ENG RXAUI: 1424227 SAB: VANDF TTY: CD CODE: 4008621 STR: FLUOXETINE HCL 20MG CAP SUPPRESS: N }}} ==== Atoms ==== To search the Atoms file, chose file 176.002. You can search by the type of Atom or the Atom itself. The most useful thing to search here are NDC numbers. Here's a search for a Prozac NDC. {{{ Select RXNORM SIMPLE CONCEPT AND ATOM ATTRIBUTES ATN: 00777310502 NDC RXNOR M 00777310502 ANOTHER ONE: STANDARD CAPTIONED OUTPUT? Yes// (Yes) Include COMPUTED fields: (N/Y/R/B): NO// - No record number (IEN), no Computed Fields ATN: NDC RXAUI: 787787 STYPE: AUI CODE: 104849 RXCUI: 104849 SAB: RXNORM ATV: 00777310502 SUPPRESS: N CVF: 4096 }}} You can also enter an !RxNorm concept code to get all available atoms about a drug. Using the RXCUI we just obtained above, we can get an exhaustive list of everything about it: {{{ OUTPUT FROM WHAT FILE: RXNORM SIMPLE CONCEPT AND ATOM ATTRIBUTES// Select RXNORM SIMPLE CONCEPT AND ATOM ATTRIBUTES ATN: 104849 1 104849 NST MTHFDA 20 MG 2 104849 NDC MTHFDA 054868-0511-*1 3 104849 NDC MTHFDA 053002-1016-*0 4 104849 DRT MTHFDA ORAL 5 104849 NDC RXNORM 00777310502 Press to see more, '^' to exit this list, OR CHOOSE 1-5: 6 104849 NDC MTHFDA 016590-*843-90 7 104849 DDF MTHFDA CAPSULE 8 104849 NDC MTHFDA 000002-3105-14 9 104849 NDC MTHFDA 051655-*390-25 10 104849 NDC MTHFDA 054868-0511-*5 Press to see more, '^' to exit this list, OR CHOOSE 1-10: 11 104849 DDF MTHFDA CAPSULE, GELATIN COATED 12 104849 MARKETING_STATUS MTHSPL active 13 104849 DST MTHFDA 20 MG 14 104849 DDF MTHFDA CAPSULE 15 104849 NDC MTHFDA 054868-0511-*2 Press to see more, '^' to exit this list, OR CHOOSE 1-15: 16 104849 NDC RXNORM 58864091730 17 104849 TRN MTHFDA PROZAC FLUOXETINE CAPSULES USP 18 104849 DDF MTHFDA CAPSULE, GELATIN COATED 19 104849 DRT MTHFDA ORAL 20 104849 DST MTHFDA 20 MG Press to see more, '^' to exit this list, OR CHOOSE 1-20: 21 104849 DRT MTHFDA ORAL 22 104849 DRT MTHFDA ORAL 23 104849 DST MTHFDA 20 MG 24 104849 DDF MTHFDA CAPSULE, GELATIN COATED 25 104849 NDC MTHFDA 000077-3105-07 }}} ==== Sources ==== File 176.004 is the Sources file. It isn't that useful except to check the proprietariness of a source or to check when it was last updated for your database. Here's an example: {{{ OUTPUT FROM WHAT FILE: RXNORM SIMPLE CONCEPT AND ATOM ATTRIBUTES// 176.003 RXNO RM SOURCE INFORMATION (13 entries) Select RXNORM SOURCE INFORMATION RSAB: ? Answer with RXNORM SOURCE INFORMATION RSAB Do you want the entire 13-Entry RXNORM SOURCE INFORMATION List? y (Yes) Choose from: ATC Anatomical Therapeutic Chemical Classification System 3 GS Gold Standard Drug Database 3 MDDB Master Drug Data Base 3 MMSL Multum MediSource Lexicon 1 MMX Micromedex RED BOOK 3 MSH Medical Subject Headings, 2013_2013_01_21 0 MTHFDA Metathesaurus FDA National Drug Code Directory 0 MTHSPL Metathesaurus FDA Structured Product Labels 0 NDDF FDB MedKnowledge (formerly NDDF Plus) 3 NDFRT National Drug File 0 RXNORM RxNorm Vocabulary 0 SNOMEDCT_US US Edition of SNOMED CT 9 VANDF Veterans Health Administration National Drug File 0 Select RXNORM SOURCE INFORMATION RSAB: VANDF Veterans Health Administratio n National Drug File 0 ANOTHER ONE: STANDARD CAPTIONED OUTPUT? Yes// (Yes) Include COMPUTED fields: (N/Y/R/B): NO// - No record number (IEN), no Computed Fields RSAB: VANDF RCUI: C1140288 VSAB: VANDF_2013_09_27 VCUI: C3530306 SON: Veterans Health Administration National Drug File SF: VANDF SVER: 2013_09_27 IMETA: 2013AA SLC: Michael Lincoln, M.D.;;U.S. Department of Veterans Affairs, Veterans Heal th Administration;;;Washington;DC;United States;;;;michael.lincoln@med.va.gov;ht tp://www.pbm.va.gov/default.aspx SCC: Michael Lincoln, M.D.;;;;;;;;;;;michael.lincoln@med.va.gov;http://www.pbm .va.gov/default.aspx SRL: 0 TTYL: IN,CD,AB,PT,MTH_RXN_CD ATNL: VAC,DRUG_CLASS_TYPE,VA_CLASS_NAME,DDF,NFI,DCSA,PARENT_CLASS,VMO,SNGL_OR_ MULT_SRC_PRD,EXCLUDE_DI_CHECK,NDF_TRANSMIT_TO_CMOP,NF_INACTIVATE,VA_DISPENSE_UNI T,VA_GENERIC_NAME,NF_NAME,NDC LAT: ENG CENC: UTF-8 CURVER: Y SABIN: Y SSN: National Drug File SCIT: ;;;;Veterans Health Administration National Drug File;;;September 27, 20 13;Washington, DC;U.S. Department of Veterans Affairs;;;;;;;; }}} According to this, !RxNorm was last updated with VA sources on September 27th 2013. An SRL of 0 means that the source is public domain. ==== Relationships ==== !RxNorm relationships are not easy to query in this version due to Fileman not behaving well with compound B indexes. But they are doable if you know what you are searching for. Let's find out the generic drug concept that corresponds to the !RxNorm code we obtained via the NDC for Prozac 20mg: {{{ Select RXNORM RELATED CONCEPTS RXCUI1: 104849 RELA: has_tradename RXCUI2: 1 104849 2 1048498 3 1048499 CHOOSE 1-3: 1 RXNORM Select Another RXNORM RELATED CONCEPTS RXCUI1: RELA: RXCUI2: STANDARD CAPTIONED OUTPUT? Yes// (Yes) Include COMPUTED fields: (N/Y/R/B): NO// - No record number (IEN), no Computed Fields SAB: RXNORM STYPE1: CUI REL: RB RXCUI2: 310385 STYPE2: CUI RELA: has_tradename RUI: 4086805 RXCUI1: 104849 SUPPRESS: N CVF: 4096 }}} To confirm that we indeed got the generic, we jump over to 176.001: {{{ OUTPUT FROM WHAT FILE: RXNORM RELATED CONCEPTS// 176.001 RXNORM CONCEPT NAMES A ND SOURCES (687143 entries) Select RXNORM CONCEPT NAMES AND SOURCES RXCUI: 310385 1 310385 RXNORM SCD 310385 Fluoxetine 20 MG Oral Capsul e 2 310385 VANDF CD 4008621 FLUOXETINE HCL 20MG CAP 3 310385 VANDF CD 4013939 FLUOXETINE HCL 20MG CAP,UD 4 310385 MTHFDA CD 272755 FLUOXETINE / FLUOXETINE HYDRO CHLORIDE ORAL CAPSULE 5 310385 MTHFDA CD 235824 FLUOXETINE 20 MG ORAL CAPSULE }}} The Semantic Clinical Drug entry (SCD) for !RxNorm means that we hit the jackpot: That is indeed the canonical generic entry for the branded Prozac 20mg capsule. === Programmer APIs === ==== Update API ==== To update !RxNorm to a newer monthly version from the NLM, run the following: {{{ D IMPORT^C0CRXNRD("/path/to/rrf/folder/",optional include restricted/copyrighted sources (1 -> yes). Default is no.) }}} If you need FDB or SNOMED-CT codes, you need to pass in the second parameter. The import runs in 2 parallel threads. The background thread takes about 15 minutes to finish. You need to use your system status utility in order to check to see if it finished yet. ==== Look-up APIs ==== This is a list of APIs available for programmers for converting one terminology to another. Some APIs return multiple results. If so, they will be delimited by "!^". {{{ $$EXIST^C0CRXNLK(RXN) $$ Public - Does this RxNorm CUI exist? $$GCN2RXN^C0CRXNLK(GCN) $$ Public - Get RxNorm CUI using GCN $$RXN2GCN^C0CRXNLK(RXNCUI) $$ Public - Get GCN(s) given an RxNorm Number $$RXN2VUI^C0CRXNLK(RXNCUI) $$ Public - Get VUID(s) for given RXNCUI for Clinical Drug $$VUI2VAP^C0CRXNLK(VUID) $$ Public - Get VA Product IEN(s) from VUID $$VAP2MED^C0CRXNLK(VAPROD) $$ Public - Get Drug(s) using VA Product IEN $$RXN2MEDS^C0CRXNLK(RXNCUI) $$ Public - Convert RxNorm value to currently existing drugs in File 50. $$FDI2RXN^C0CRXNLK(BASE) $$ Public - Get RxNorm CUI for FDB Ingredient/Base $$RXN2VIN^C0CRXNLK(RXNCUI) $$ Public - Get VUID Ingredient for RxNorm CUI $$VIN2VAG^C0CRXNLK(VUID) $$ Public - Get VA Generic for VUID Ingredient $$FDI2VAG^C0CRXNLK(BASE) $$ Public - Get VA Generic for FDB Ingredient/Base $$VIN2DIN^C0CRXNLK(VUID) $$ Public - Get Drug Ingredient for VUID Ingredient $$FDI2DIN^C0CRXNLK(BASE) $$ Public - Get Drug Ingredient for FDB Ingredient/Base $$VUI2RXN^C0CRXNLK(VUID,TTY) $$ Public - Get RXNCUI for VUID (any VUID type) $$VUI2GCN^C0CRXNLK(VUID) $$ Public - Get GCNs for a given VUID (any VUID type) $$MED2RXN^C0CRXNLK(DA) $$ Public - Get RxNorm CUI for Drug $$MED2SCDN^C0CRXNLK(DA) $$ Public - Medication to Semantic Clinical Drug Name $$SCDNAME^C0CRXNLK(RXNCUI) $$ Public - Semantic Clinical Drug Name for RxNorm CUI $$ANYNAME^C0CRXNLK(RXNCUI) $$ Public - Get the RxNorm name, no matter what it is $$RXN2NDI^C0CRXNLK(RXNCUI) $$ Public - Get NDDF Ingredient for RXNCUI $$VIN2NDI^C0CRXNLK(VUID) $$ Public - Get NDDF Ingredient for VUID $$NDC2RXN^C0CRXNLK(NDC) $$ Public - Get RxCUI given the NDC $$NDC2RXN2^C0CRXNLK(NDC,SOURCE) $$ Public - Get RxCUI given the source $$ISBRAND^C0CRXNLK(RXN) $$ Public - Is this RxCUI for a brand drug? $$BR2GEN^C0CRXNLK(RXN) $$ Public - Convert Brand RxCUI to Generic RxCUI (many to 1) $$GEN2BR^C0CRXNLK(RXN) $$ Public - Convert Generic RxCUI to Brand RxCUIs (1 to many). $$RXN2BNS^C0CRXNLK(RXN) $$ Public - Get all Brand Names associated with an RXN $$RXN2NDC^C0CRXNLK(RXN) $$ Public - Get NDC codes for RxNorm code $$LVUID^C0CRXNLK(RXN) $$ Public - Locate VUID, any type, given RxNorm. Iterative Search. D loopVUIDs^C0CRXNLK Public - Paste VUIDs in to get RxNorms }}} Here's an example call to return all active NDCs for brand name Prozac 20mg capsules: {{{ GTM>W $$RXN2NDC^C0CRXNLK(104849) 00777310502^58864091730^58016082830^58016082820^66105056403^58016082810^58016082890^52959023320 ^54868051105^00777310507^52959023310^00247037204^58864097130^55289021522^54868051101^52959023314 ^58016082840^52959023340^52959023350^54868051102^00247037210^00777310530^52959023330^54868051100 ^58016082860^16590084390^52959023300^58016082800 }}} C0CRXNLK comes with Unit Tests. To run them, make sure M-Unit is installed and run !^C0CRXNLK from the top. ==== Automatic Drug Addition API using !RxNorm ==== To add a drug to the drug file using the !RxNorm CUI, call the following entry point: {{{ W $$ADDDRUG^C0CRXNLK(RXNCUI for Drug, optional NDC to file, optional barcode to put for BCMA) }}} Please note that this routine does not check to see if the drug is already there; it will add it again. This routine can be enhanced to use the barcode to figure out which drug it is that is being added from !RxNorm. As such, it will enable you to add drugs to the drug file by just bar-code scanning them. == Technical Details == The following are technical details for this package. === Package File Entry === {{{ NAME: RXNORM FOR VISTA PREFIX: C0CR SHORT DESCRIPTION: RxNorm data dictionaries and loading routines for VISTA FILE: RXNORM CONCEPT NAMES AND SOURCES FILE: RXNORM SIMPLE CONCEPT AND ATOM ATTRIBUTES FILE: RXNORM SOURCE INFORMATION FILE: RXNORM SEMANTIC TYPES FILE: RXNORM RELATED CONCEPTS FILE: RXNORM DOCUMENTATION FOR ABBREVIATED VALUES VERSION: 2.3 DATE DISTRIBUTED: NOV 14, 2013 }}} === Dependencies === * Kernel 8 * Fileman 22.2 (Fileman 22.0 can be used but it may not be used to edit the data definitions). === Routine list === {{{ Routine Summary Checksums shown are NEW Checksums The following routines are included in this patch. The second line of each of these routines now looks like: ;;2.5;RXNORM FOR VISTA;**[Patch List]**;Nov 14, 2013;Build 8 Routine Old New Patch List C0CRXNAD n/a 18747982 C0CRXNLK n/a 159120024 C0CRXNRD n/a 52136432 }}} In addition, routines C0CRXNnn (where nn is a number), are created automatically as Fileman compiles the !RxNorm cross-references. === Description of routines and overall flow === The three routines are relatively self-contained. C0CRXNRD load !RxNorm codes from the RRF files supplied by NLM. C0CRXNLK has various translation utilities. C0CRXNAD add a drug to the drug file based on an !RxNorm code. === Modifications to National VA distributed routines === None. === File list === ||'''Name'''||'''Number'''||'''Global'''||'''!RxNorm NLM File'''||'''Approx # of entries at the end of 2013'''|| ||RXNORM CONCEPT NAMES AND SOURCES||176.001||!^C0CRXN(176.001)||RXNCONSO.RRF||1,000,000|| ||RXNORM SIMPLE CONCEPT AND ATOM ATTRIBUTES||176.002||!^C0CRXN(176.002)||RXNSAT.RRF||7,000,000|| ||RXNORM SOURCE INFORMATION||176.003||!^C0CRXN(176.003)||RXNSAB.RRF||13|| ||RXNORM SEMANTIC TYPES||176.004||!^C0CRXN(176.004)||RXNSTY.RRF||400,000|| ||RXNORM RELATED CONCEPTS||176.005||!^C0CRXN(176.005)||RXNREL.RRF||5,000,000|| ||RXNORM DOCUMENTATION FOR ABBREVIATED VALUES||176.006||!^C0CRXN(176.006)||RXNDOC.RRF||3,000|| === Pharmacy Files Computed Fields === ||'''File Name'''||'''File number'''||'''Field Name'''||'''Field Number'''||'''Description'''|| ||DRUG||50||RXNCUI||176.001||Pointer to the Semantic Clinical Drug in 176.001 that corresponds to this drug.|| ||DRUG||50||RXN SCD NAME||176.002||Canonical Clinical Drug name according to !RxNorm.|| ||VA PRODUCT||50.68||COMPUTED GCNSEQNO||176.001||Multiple of GCNs corresponding to a VA PRODUCT|| === Exported Options === None included. === Archiving and Purging === Not supported. === Supported APIs === All non-testing APIs in C0CRXNLK are supported. D IMPORT!^C0CRXNRD $$ADDDRUG!^C0CRXNAD For details, see the Programmer APIs section. === External Interfaces, External Relations === Utility functions in Fileman and Kernel. Access to Drug, VA Product and VA Generic files for various computations in C0CRXNLK. Modifications of Drug and VA Product Data Dictionaries to add convenience computed fields to tie the files with !RxNorm. === Internal relations === None. === Package wide-variables === None. === Security === This software implements no security of its own beyond Fileman access codes on the fields which can be seen below in the File Structure section. None of the data contained is sensitive in any way. === File Structure === All files have only a zero node for each entry and correspond as much as possible to the !RxNorm file format, except that the '|' has been substitued with a "!^". The exception to that rule is when a file's first field cannot be the .01 because it's missing for some entries. In this case, the first field and a key field are switched so that the key field can be the .01. {{{ CONDENSED DATA DICTIONARY---RXNORM CONCEPT NAMES AND SOURCES FILE (#176.001)UCI: F201303,ICARUS STORED IN: ^C0CRXN(176.001, 11/21/13 PAGE 1 ------------------------------------------------------------------------------------------------------------------------------------ FILE SECURITY DD SECURITY : @ DELETE SECURITY: READ SECURITY : LAYGO SECURITY : WRITE SECURITY : @ CROSS REFERENCED BY: FILE #176.001 INDEXED BY: RXCUI (B), CODE (CODE), SAB & TTY & CODE & RXCUI (STC), STR (STR), SAB & TTY & RXCUI & CODE (STX) FILE STRUCTURE FIELD FIELD NUMBER NAME .01 RXCUI (RFJ8), [0;1] .02 LAT (RFJ3), [0;2] .03 TS (FJ1), [0;3] .04 LUI (FJ8), [0;4] .05 STT (FJ3), [0;5] .06 SUI (FJ8), [0;6] .07 ISPREF (FJ1), [0;7] .08 RXAUI (RFJ8), [0;8] .09 SAUI (FJ50), [0;9] .1 SCUI (FJ50), [0;10] .11 SDUI (FJ50), [0;11] .12 SAB (RFJ20), [0;12] .13 TTY (RFJ20), [0;13] .14 CODE (RFJ50), [0;14] .15 STR (RFJ3000), [0;15] .16 SRL (FJ10), [0;16] .17 SUPPRESS (FJ1), [0;17] .18 CVF (FJ50), [0;18] 50 COMPUTED DRUGS (Cmp50), [ ; ] CONDENSED DATA DICTIONARY---RXNORM SIMPLE CONCEPT AND ATOM ATTRIBUTES FILE (#176.002)UCI: F201303,ICARUS STORED IN: ^C0CRXN(176.002, 11/21/13 PAGE 1 ------------------------------------------------------------------------------------------------------------------------------------ FILE SECURITY DD SECURITY : @ DELETE SECURITY: @ READ SECURITY : LAYGO SECURITY : @ WRITE SECURITY : @ CROSS REFERENCED BY: ATN(XATN) ATV(XATV) FILE #176.002 INDEXED BY: RXCUI & SAB & ATN & ATV (ANDFRT), SAB & ATN & ATV & RXCUI (ASAA), SAB & ATN & RXCUI & ATV (ASAR), RXCUI (RXCUI) FILE STRUCTURE FIELD FIELD NUMBER NAME .01 ATN (RFJ1000), [0;1] .02 LUI (FJ8), [0;2] .03 SUI (FJ8), [0;3] .04 RXAUI (FJ8), [0;4] .05 STYPE (FJ50), [0;5] .06 CODE (FJ50), [0;6] .07 ATUI (FJ11), [0;7] .08 SATUI (FJ50), [0;8] .09 RXCUI (FJ8), [0;9] .1 SAB (RFJ20), [0;10] .11 ATV (FJ4000), [0;11] .12 SUPPRESS (FJ1), [0;12] .13 CVF (FJ50), [0;13] CONDENSED DATA DICTIONARY---RXNORM SOURCE INFORMATION FILE (#176.003)UCI: F201303,ICARUS STORED IN: ^C0CRXN(176.003, 11/21/13 PAGE 1 ------------------------------------------------------------------------------------------------------------------------------------ FILE SECURITY DD SECURITY : @ DELETE SECURITY: @ READ SECURITY : LAYGO SECURITY : @ WRITE SECURITY : @ CROSS REFERENCED BY: RSAB(B) FILE STRUCTURE FIELD FIELD NUMBER NAME .01 RSAB (RFJ20), [0;1] .02 RCUI (FJ8), [0;2] .03 VSAB (FJ40), [0;3] .04 VCUI (FJ8), [0;4] .05 SON (FJ3000), [0;5] .06 SF (FJ20), [0;6] .07 SVER (FJ20), [0;7] .08 VSTART (FJ10), [0;8] .09 VEND (FJ10), [0;9] .1 IMETA (FJ10), [0;10] .11 RMETA (FJ10), [0;11] .12 SLC (FJ1000), [0;12] .13 SCC (FJ1000), [0;13] .14 SRL (NJ10,0), [0;14] .15 TFR (NJ10,0), [0;15] .16 CFR (NJ10,0), [0;16] .17 CXTY (FJ50), [0;17] .18 TTYL (FJ300), [0;18] .19 ATNL (FJ1000), [0;19] .2 LAT (FJ3), [0;20] .21 CENC (FJ20), [0;21] .22 CURVER (FJ1), [0;22] .23 SABIN (FJ1), [0;23] .24 SSN (FJ3000), [0;24] .25 SCIT (FJ4000), [0;25] CONDENSED DATA DICTIONARY---RXNORM SEMANTIC TYPES FILE (#176.004)UCI: F201303,ICARUS STORED IN: ^C0CRXN(176.004, 11/21/13 PAGE 1 ------------------------------------------------------------------------------------------------------------------------------------ FILE SECURITY DD SECURITY : @ DELETE SECURITY: @ READ SECURITY : LAYGO SECURITY : @ WRITE SECURITY : @ CROSS REFERENCED BY: RXNCUI(B) FILE STRUCTURE FIELD FIELD NUMBER NAME .01 RXNCUI (RFJ8), [0;1] .02 TUI (FJ4), [0;2] .03 STN (FJ100), [0;3] .04 STY (FJ50), [0;4] .05 ATUI (FJ11), [0;5] .06 CVF (FJ50), [0;6] CONDENSED DATA DICTIONARY---RXNORM RELATED CONCEPTS FILE (#176.005)UCI: F201303,ICARUS STORED IN: ^C0CRXN(176.005, 11/21/13 PAGE 1 ------------------------------------------------------------------------------------------------------------------------------------ FILE SECURITY DD SECURITY : @ DELETE SECURITY: @ READ SECURITY : LAYGO SECURITY : @ WRITE SECURITY : @ CROSS REFERENCED BY: FILE #176.005 INDEXED BY: RXCUI1 & RELA & RXCUI2 (B) FILE STRUCTURE FIELD FIELD NUMBER NAME .01 SAB (RFJ20), [0;1] .02 RXAUI1 (FJ8), [0;2] .03 STYPE1 (FJ50), [0;3] .04 REL (FJ4), [0;4] .05 RXCUI2 (FJ8), [0;5] .06 RXAUI2 (FJ8), [0;6] .07 STYPE2 (FJ50), [0;7] .08 RELA (FJ100), [0;8] .09 RUI (FJ10), [0;9] .1 SRUI (FJ50), [0;10] .11 RXCUI1 (FJ8), [0;11] .12 SL (FJ1000), [0;12] .13 DIR (FJ1), [0;13] .14 RG (FJ10), [0;14] .15 SUPPRESS (FJ1), [0;15] .16 CVF (FJ50), [0;16] CONDENSED DATA DICTIONARY---RXNORM DOCUMENTATION FOR ABBREVIATED VALUES FILE (#176.006)UCI: F201303,ICARUS STORED IN: ^C0CRXN(176.006, 11/21/13 PAGE 1 ------------------------------------------------------------------------------------------------------------------------------------ FILE SECURITY DD SECURITY : @ DELETE SECURITY: @ READ SECURITY : LAYGO SECURITY : @ WRITE SECURITY : @ CROSS REFERENCED BY: DOCKEY(B) FILE STRUCTURE FIELD FIELD NUMBER NAME .01 DOCKEY (RFJ50), [0;1] .02 VALUE (FJ1000), [0;2] .03 TYPE (FJ50), [0;3] .04 EXPL (FJ1000), [0;4] }}} A crucial part of speed in the !RxNorm operations is the extensive indexing on the files. What follows are the defined new-style indexes: {{{ NEW-STYLE INDEX LIST -- FILE #176.001 11/21/13 PAGE 1 ----------------------------------------------------------------------------------------------------------------------------------- File #176.001 New-Style Indexes: B (#983) FIELD REGULAR IR LOOKUP & SORTING Short Descr: Regular B Index Set Logic: S ^C0CRXN(176.001,"B",X,DA)="" Kill Logic: K ^C0CRXN(176.001,"B",X,DA) Whole Kill: K ^C0CRXN(176.001,"B") X(1): RXCUI (176.001,.01) (Subscr 1) (forwards) CODE (#1020) FIELD REGULAR IR LOOKUP & SORTING Short Descr: Code Index Set Logic: S ^C0CRXN(176.001,"CODE",X,DA)="" Kill Logic: K ^C0CRXN(176.001,"CODE",X,DA) Whole Kill: K ^C0CRXN(176.001,"CODE") X(1): CODE (176.001,.14) (Subscr 1) (forwards) STC (#1021) RECORD MUMPS IR LOOKUP & SORTING Short Descr: Source Term Type Code Index Description: Use this index to do compound searches on RxNorm Concepts. Examples: SAB="NDDF", TTY="CDC", CODE={GCN} will give you the entry a clinical drug in First Database with GCN Code {GCN}. SAB="RXNORM", TTY="SCD", CODE={RXNORM} will give you the entry that is the Semantic Clinical Drug for the RxNorm code. SAB="VANDF", TTY="CD", CODE={VUID} will give you a drug that has that VUID. Set Logic: S ^C0CRXN(176.001,"STC",X(1),X(2),X(3),DA)=X(4) Kill Logic: K ^C0CRXN(176.001,"STC",X(1),X(2),X(3),DA) Whole Kill: K ^C0CRXN(176.001,"STC") X(1): SAB (176.001,.12) (Subscr 1) (forwards) X(2): TTY (176.001,.13) (Subscr 2) (forwards) X(3): CODE (176.001,.14) (Subscr 3) (forwards) X(4): RXCUI (176.001,.01) (forwards) STR (#1022) FIELD REGULAR IR LOOKUP & SORTING Short Descr: String Lookup Index Set Logic: S ^C0CRXN(176.001,"STR",$E(X,1,30),DA)="" Kill Logic: K ^C0CRXN(176.001,"STR",$E(X,1,30),DA) Whole Kill: K ^C0CRXN(176.001,"STR") X(1): STR (176.001,.15) (Subscr 1) (Len 30) (forwards) Transform (Storage): S X=$$UP^XLFSTR(X) Transform (Lookup): S X=$$UP^XLFSTR(X) STX (#1023) RECORD MUMPS IR LOOKUP & SORTING Short Descr: Source Term Type RxCUI Code Index Description: Use this index as a reverse of the STC index. The STC index will give you an entry if you know the source, the type and the code. This index will give you the codes if you know the source, the type, but not the code, but rather the RxNorm code. Set Logic: S ^C0CRXN(176.001,"STX",X(1),X(2),X(3),DA)=X(4) Kill Logic: K ^C0CRXN(176.001,"STX",X(1),X(2),X(3),DA) Whole Kill: K ^C0CRXN(176.001,"STX") X(1): SAB (176.001,.12) (Subscr 1) (forwards) X(2): TTY (176.001,.13) (Subscr 2) (forwards) X(3): RXCUI (176.001,.01) (Subscr 3) (forwards) X(4): CODE (176.001,.14) (forwards) NEW-STYLE INDEX LIST -- FILE #176.002 11/21/13 PAGE 1 ----------------------------------------------------------------------------------------------------------------------------------- File #176.002 New-Style Indexes: ANDFRT (#1024) RECORD REGULAR IR SORTING ONLY Short Descr: RxNorm NDFRT Index Set Logic: S ^C0CRXN(176.002,"ANDFRT",X(1),$E(X(3),1,30),$E(X(4),1,30),DA)="" Set Cond: S X=X(2)="NDFRT" Kill Logic: K ^C0CRXN(176.002,"ANDFRT",X(1),$E(X(3),1,30),$E(X(4),1,30),DA) Kill Cond: S X=X(2)="NDFRT" Whole Kill: K ^C0CRXN(176.002,"ANDFRT") X(1): RXCUI (176.002,.09) (Subscr 1) (forwards) X(2): SAB (176.002,.1) (forwards) X(3): ATN (176.002,.01) (Subscr 2) (Len 30) (forwards) X(4): ATV (176.002,.11) (Subscr 3) (Len 30) (forwards) ASAA (#1025) RECORD MUMPS IR SORTING ONLY Short Descr: SAB (Source) ATN (Attribute Name) ATV (Value) Index Set Logic: S ^C0CRXN(176.002,"ASAA",X(1),$E(X(2),1,30),$E(X(3),1,30),DA)=X(4) Kill Logic: K ^C0CRXN(176.002,"ASAA",X(1),$E(X(2),1,30),$E(X(3),1,30),DA) Whole Kill: K ^C0CRXN(176.002,"ASAA") X(1): SAB (176.002,.1) (Subscr 1) (forwards) X(2): ATN (176.002,.01) (Subscr 2) (Len 30) (forwards) X(3): ATV (176.002,.11) (Subscr 3) (Len 30) (forwards) X(4): RXCUI (176.002,.09) (forwards) ASAR (#1026) RECORD MUMPS IR SORTING ONLY Short Descr: SAB (Source) ATN (Attribute Name) RxCUI Index Set Logic: S ^C0CRXN(176.002,"ASAR",X(1),$E(X(2),1,30),X(3),DA)=X(4) Kill Logic: K ^C0CRXN(176.002,"ASAR",X(1),$E(X(2),1,30),X(3),DA) Whole Kill: K ^C0CRXN(176.002,"ASAR") X(1): SAB (176.002,.1) (Subscr 1) (forwards) X(2): ATN (176.002,.01) (Subscr 2) (Len 30) (forwards) X(3): RXCUI (176.002,.09) (Subscr 3) (forwards) X(4): ATV (176.002,.11) (forwards) RXCUI (#1027) FIELD REGULAR IR LOOKUP & SORTING Short Descr: RXCUI Index Set Logic: S ^C0CRXN(176.002,"RXCUI",X,DA)="" Kill Logic: K ^C0CRXN(176.002,"RXCUI",X,DA) Whole Kill: K ^C0CRXN(176.002,"RXCUI") X(1): RXCUI (176.002,.09) (Subscr 1) (forwards) NEW-STYLE INDEX LIST -- FILE #176.003 11/21/13 PAGE 1 ----------------------------------------------------------------------------------------------------------------------------------- NEW-STYLE INDEX LIST -- FILE #176.004 11/21/13 PAGE 1 ----------------------------------------------------------------------------------------------------------------------------------- NEW-STYLE INDEX LIST -- FILE #176.005 11/21/13 PAGE 1 ----------------------------------------------------------------------------------------------------------------------------------- File #176.005 New-Style Indexes: B (#1028) RECORD REGULAR IR LOOKUP & SORTING Short Descr: Compound Index for RXCUI1/RELA/RXCUI2 Set Logic: S ^C0CRXN(176.005,"B",X(1),X(2),X(3),DA)="" Kill Logic: K ^C0CRXN(176.005,"B",X(1),X(2),X(3),DA) Whole Kill: K ^C0CRXN(176.005,"B") X(1): RXCUI1 (176.005,.11) (Subscr 1) (forwards) X(2): RELA (176.005,.08) (Subscr 2) (forwards) X(3): RXCUI2 (176.005,.05) (Subscr 3) (forwards) NEW-STYLE INDEX LIST -- FILE #176.006 11/21/13 PAGE 1 ----------------------------------------------------------------------------------------------------------------------------------- }}}