diff --git a/.gitignore b/.gitignore index cabe5e7c..aded8ded 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ MRCONSO.RRF *.zip coverage.xml *.parquet +valueset_data/ # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/cumulus_library/.sqlfluff b/cumulus_library/.sqlfluff index 476f0807..ecd6dd4e 100644 --- a/cumulus_library/.sqlfluff +++ b/cumulus_library/.sqlfluff @@ -94,6 +94,7 @@ join_cols_by_table = join_id = subject_ref join_tables = ['table_a','table_b'] join_table_aliases = ['a','b'] +keywords = ['key','words'] local_location = /var/study/data/ neg_source_table = neg_source_table output_table_name = 'created_table' @@ -102,6 +103,7 @@ prefix = Test primary_ref = encounter_ref pos_source_table = pos_source_table remote_location = s3://bucket/study/data/ +sab = 'MED-RT' schema_name = test_schema schema = { @@ -236,14 +238,18 @@ schema = } source_table = source_table source_id = source_id +steward = steward +study_prefix = study table_cols = ["a","b"] table_cols_types = ["varchar", "varchar"] table_name = test_table table_names = ["test_table"] +table_prefix = 'foo' tables = ["test_a", "test_b"] table_suffix = 2024_01_01_11_11_11 target_col_prefix = prefix target_table = target_table +tier = 2 type_casts={"b": "VARCHAR"} unnests = [ diff --git a/cumulus_library/__init__.py b/cumulus_library/__init__.py index f24f0ca3..d2d59ec1 100644 --- a/cumulus_library/__init__.py +++ b/cumulus_library/__init__.py @@ -1,9 +1,9 @@ """Package metadata""" -from .base_utils import StudyConfig -from .builders.base_table_builder import BaseTableBuilder -from .builders.counts import CountsBuilder -from .study_manifest import StudyManifest +from cumulus_library.base_utils import StudyConfig +from cumulus_library.builders.base_table_builder import BaseTableBuilder +from cumulus_library.builders.counts import CountsBuilder +from cumulus_library.study_manifest import StudyManifest __all__ = ["BaseTableBuilder", "CountsBuilder", "StudyConfig", "StudyManifest"] -__version__ = "3.1.0" +__version__ = "4.0.0" diff --git a/cumulus_library/actions/builder.py b/cumulus_library/actions/builder.py index b60a609c..0e4b410b 100644 --- a/cumulus_library/actions/builder.py +++ b/cumulus_library/actions/builder.py @@ -19,8 +19,7 @@ log_utils, study_manifest, ) -from cumulus_library.builders import protected_table_builder -from cumulus_library.statistics import psm +from cumulus_library.builders import protected_table_builder, psm_builder, valueset_builder @contextlib.contextmanager @@ -209,16 +208,22 @@ def run_statistics_builders( with open(toml_path, "rb") as file: stats_config = tomllib.load(file) config_type = stats_config["config_type"] - target_table = stats_config["target_table"] + target_table = stats_config.get("target_table", stats_config.get("table_prefix", "")) if (target_table,) in existing_stats and not config.stats_build: continue if config_type == "psm": - builder = psm.PsmBuilder( + builder = psm_builder.PsmBuilder( toml_config_path=toml_path, config=stats_config, data_path=manifest.data_path / f"{manifest.get_study_prefix()}/psm", ) + elif config_type == "valueset": + builder = valueset_builder.ValuesetBuilder( + toml_config_path=toml_path, + config=stats_config, + data_path=manifest.data_path / f"{manifest.get_study_prefix()}/valueset", + ) else: raise errors.StudyManifestParsingError( # pragma: no cover f"{toml_path} references an invalid statistics type {config_type}." diff --git a/cumulus_library/actions/importer.py b/cumulus_library/actions/importer.py index 151ddfe1..160f9e73 100644 --- a/cumulus_library/actions/importer.py +++ b/cumulus_library/actions/importer.py @@ -27,7 +27,7 @@ def _create_table_from_parquet(archive, file, study_name, config): query = base_templates.get_ctas_from_parquet_query( schema_name=config.schema, table_name=parquet_path.stem.replace(".", "_"), - local_location=parquet_path.parent, + local_location=f"{parquet_path.parent}/*.parquet", remote_location=s3_path, table_cols=list(table_types.index), remote_table_cols_types=remote_types, diff --git a/cumulus_library/builders/counts.py b/cumulus_library/builders/counts.py index 8d5b3a11..ef649cfb 100644 --- a/cumulus_library/builders/counts.py +++ b/cumulus_library/builders/counts.py @@ -4,7 +4,7 @@ from pathlib import Path from cumulus_library import BaseTableBuilder, errors, study_manifest -from cumulus_library.statistics.statistics_templates import counts_templates +from cumulus_library.builders.statistics_templates import counts_templates # Defined here for easy overriding by tests DEFAULT_MIN_SUBJECT = 10 diff --git a/cumulus_library/builders/psm.py b/cumulus_library/builders/psm_builder.py similarity index 99% rename from cumulus_library/builders/psm.py rename to cumulus_library/builders/psm_builder.py index 73a6cbae..f9d775fb 100644 --- a/cumulus_library/builders/psm.py +++ b/cumulus_library/builders/psm_builder.py @@ -17,7 +17,7 @@ from psmpy.functions import cohenD from cumulus_library import BaseTableBuilder, base_utils, databases -from cumulus_library.statistics.statistics_templates import psm_templates +from cumulus_library.builders.statistics_templates import psm_templates from cumulus_library.template_sql import base_templates diff --git a/cumulus_library/builders/valueset/additional_rules_builder.py b/cumulus_library/builders/valueset/additional_rules_builder.py new file mode 100644 index 00000000..17191180 --- /dev/null +++ b/cumulus_library/builders/valueset/additional_rules_builder.py @@ -0,0 +1,133 @@ +"""Builder for generating subsets of RxNorm data from a given valueset""" + +import pathlib + +from cumulus_library import BaseTableBuilder, base_utils, study_manifest +from cumulus_library.builders.valueset import valueset_utils +from cumulus_library.template_sql import base_templates + + +class AdditionalRulesBuilder(BaseTableBuilder): + display_text = "Generating rulesets..." + base_path = pathlib.Path(__file__).resolve().parent + + def prepare_queries( + self, + *args, + config: base_utils.StudyConfig, + manifest: study_manifest.StudyManifest, + valueset_config: valueset_utils.ValuesetConfig, + **kwargs, + ): + study_prefix = manifest.get_prefix_with_seperator() + table_prefix = "" + if valueset_config.table_prefix: + table_prefix = f"{valueset_config.table_prefix}_" + self.queries.append( + base_templates.get_base_template( + "create_search_rules_descriptions", + self.base_path / "template_sql", + study_prefix=study_prefix, + table_prefix=table_prefix, + ) + ) + self.queries.append( + base_templates.get_create_table_from_tables( + table_name=f"{study_prefix}{table_prefix}potential_rules", + # From a domain logic perspective, the _rela table is + # the leftmost table and we're annotating with the + # data from rxnconso. Since rxnconso is much, much + # larger, we're moving it to the left in the actual + # constructed join for athena performance reasons + tables=[ + f"{study_prefix}{table_prefix}all_rxnconso_keywords", + f"{study_prefix}{table_prefix}rela", + ], + table_aliases=["r", "s"], + columns=[ + "s.rxcui", + "r.rxcui", + "s.tty", + "r.tty", + "s.rui", + "s.rel", + "s.rela", + "s.str", + "r.str", + "r.keyword", + ], + column_aliases={ + "s.rxcui": "rxcui1", + "s.tty": "tty1", + "s.str": "str1", + "r.rxcui": "rxcui2", + "r.tty": "tty2", + "r.str": "str2", + }, + join_clauses=[ + "s.rxcui2 = r.rxcui", + ( + "s.rxcui2 NOT IN (SELECT DISTINCT RXCUI FROM " # noqa: S608 + f"{study_prefix}{table_prefix}rxnconso_keywords)" + ), + ], + ) + ) + self.queries.append( + base_templates.get_create_table_from_tables( + table_name=f"{study_prefix}{table_prefix}included_rels", + tables=[ + f"{study_prefix}{table_prefix}potential_rules", + f"{study_prefix}{table_prefix}search_rules", + ], + table_aliases=["r", "e"], + columns=[ + "r.rxcui1", + "r.rxcui2", + "r.tty1", + "r.tty2", + "r.rui", + "r.rel", + "r.rela", + "r.str1", + "r.str2", + "r.keyword", + ], + join_clauses=[ + "r.REL NOT IN ('RB', 'PAR')", + "e.include = TRUE", + "r.TTY1 = e.TTY1", + "r.TTY2 = e.TTY2", + "r.RELA = e.RELA", + ], + ) + ) + self.queries.append( + base_templates.get_base_template( + "create_included_keywords", + self.base_path / "template_sql", + study_prefix=study_prefix, + table_prefix=table_prefix, + ) + ) + self.queries.append( + base_templates.get_create_table_from_union( + table_name=f"{study_prefix}{table_prefix}combined_ruleset", + tables=[ + f"{study_prefix}{table_prefix}included_keywords", + f"{study_prefix}{table_prefix}included_rels", + ], + columns=[ + "rxcui1", + "rxcui2", + "tty1", + "tty2", + "rui", + "rel", + "rela", + "str1", + "str2", + "keyword", + ], + ) + ) diff --git a/cumulus_library/builders/valueset/lookup_drug_from_ingredient_rules.tsv b/cumulus_library/builders/valueset/lookup_drug_from_ingredient_rules.tsv new file mode 100644 index 00000000..c182123a --- /dev/null +++ b/cumulus_library/builders/valueset/lookup_drug_from_ingredient_rules.tsv @@ -0,0 +1,98 @@ +TTY1 RELA TTY2 INCLUDE +BN reformulated_to BN Yes +BN reformulation_of BN Yes +BN tradename_of IN Keyword +BN has_precise_ingredient PIN Keyword +BN ingredient_of SBD Yes +BN ingredient_of SBDC Yes +BN ingredient_of SBDF Yes +BN ingredient_of SBDG Yes +BPCK has_dose_form DF No +BPCK tradename_of GPCK Yes +BPCK contains SBD Yes +BPCK contains SCD Yes +DF No +DFG No +GPCK has_tradename BPCK Yes +GPCK has_dose_form DF No +GPCK contains SCD Keyword +IN has_tradename BN Keyword +IN part_of MIN Keyword +IN has_form PIN Keyword +IN ingredient_of SCDC Keyword +IN ingredient_of SCDF Keyword +IN ingredient_of SCDG Keyword +IN boss_of SCDFP Keyword +MIN has_part IN Keyword +MIN has_part PIN Keyword +MIN ingredients_of SCD Yes +PIN precise_ingredient_of BN Yes +PIN form_of IN Keyword +PIN part_of MIN Yes +PIN precise_ingredient_of SCDC Yes +PIN boss_of SCDFP Yes +SBD has_ingredient BN Yes +SBD contained_in BPCK Yes +SBD has_dose_form DF No +SBD quantified_form_of SBD Yes +SBD has_quantified_form SBD Yes +SBD consists_of SBDC Yes +SBD isa SBDF Keyword +SBD isa SBDFP Keyword +SBD isa SBDG Keyword +SBD tradename_of SCD Yes +SBD consists_of SCDC Yes +SBDC has_ingredient BN Yes +SBDC constitutes SBD Yes +SBDC tradename_of SCDC Yes +SBDF has_ingredient BN Yes +SBDF has_dose_form DF No +SBDF inverse_isa SBD Yes +SBDF isa SBDG Yes +SBDF tradename_of SCDF Yes +SBDF has_form SBDFP Yes +SBDFP form_of SBDF Yes +SBDFP tradename_of SCDFP Yes +SBDFP inverse_isa SBD Yes +SBDG has_ingredient BN Yes +SBDG has_doseformgroup DFG No +SBDG inverse_isa SBD Yes +SBDG inverse_isa SBDF Yes +SBDG tradename_of SCDG Keyword +SBDG tradename_of SCDGP Yes +SCD contained_in BPCK Yes +SCD has_dose_form DF No +SCD contained_in GPCK Yes +SCD has_ingredients MIN Yes +SCD has_tradename SBD Yes +SCD quantified_form_of SCD Yes +SCD has_quantified_form SCD Yes +SCD consists_of SCDC Yes +SCD isa SCDF Keyword +SCD isa SCDG Keyword +SCD isa SCDFP Yes +SCDC has_ingredient IN Keyword +SCDC has_precise_ingredient PIN Keyword +SCDC constitutes SBD Yes +SCDC has_tradename SBDC Yes +SCDC constitutes SCD Yes +SCDF has_dose_form DF No +SCDF has_ingredient IN Keyword +SCDF has_tradename SBDF Keyword +SCDF inverse_isa SCD Yes +SCDF isa SCDG Keyword +SCDF has_form SCDFP Yes +SCDFP inverse_isa SCD Yes +SCDFP has_tradename SBDFP Yes +SCDFP form_of SCDF Yes +SCDFP isa SCDGP Yes +SCDFP has_boss IN Keyword +SCDFP has_boss PIN Keyword +SCDG has_doseformgroup DFG No +SCDG has_ingredient IN Keyword +SCDG has_tradename SBDG Keyword +SCDG inverse_isa SCD Yes +SCDG inverse_isa SCDF Yes +SCDGP has_tradename SBDG Keyword +SCDGP inverse_isa SCDFP Yes +SCDGP form_of SCDG Keyword \ No newline at end of file diff --git a/cumulus_library/builders/valueset/rxnorm_valueset_builder.py b/cumulus_library/builders/valueset/rxnorm_valueset_builder.py new file mode 100644 index 00000000..5e602b5a --- /dev/null +++ b/cumulus_library/builders/valueset/rxnorm_valueset_builder.py @@ -0,0 +1,151 @@ +"""Builder for generating subsets of RxNorm data from a given valueset""" + +import pathlib + +from cumulus_library import BaseTableBuilder, base_utils, study_manifest +from cumulus_library.builders.valueset import umls, valueset_utils +from cumulus_library.template_sql import base_templates + + +class RxNormValuesetBuilder(BaseTableBuilder): + display_text = "Creating RxNorm subsets from valueset definitions..." + base_path = pathlib.Path(__file__).resolve().parent + + def prepare_queries( + self, + *args, + config: base_utils.StudyConfig, + manifest: study_manifest.StudyManifest, + valueset_config: valueset_utils.ValuesetConfig, + **kwargs, + ): + study_prefix = f"{manifest.get_study_prefix()}__" + table_prefix = "" + if valueset_config.table_prefix: + table_prefix = f"{valueset_config.table_prefix}_" + + def get_create_view_filter_by( + a_table: str, + *, + columns: list, + b_table: str | None = None, + a_join_col: str | None = None, + b_join_col: str | None = None, + a_schema: str | None = None, + view_name: str | None = None, + join_clauses: list | None = None, + column_aliases: dict | None = None, + ): + a_schema = a_schema or "rxnorm." + a_join_col = a_join_col or "a.rxcui" + b_join_col = b_join_col or "b.rxcui" + b_table = b_table or f"{study_prefix}{table_prefix}valuesets" + join_clauses = join_clauses or [f"{a_join_col} = {b_join_col}"] + view_name = view_name or f"{study_prefix}{table_prefix}{a_table}" + + return base_templates.get_create_view_from_tables( + view_name=view_name, + tables=[f"{a_schema}{a_table}", b_table], + table_aliases=["a", "b"], + join_clauses=join_clauses, + columns=columns, + column_aliases=column_aliases, + distinct=True, + ) + + if valueset_config.keyword_file is not None: + with open(manifest._study_path / valueset_config.keyword_file) as f: + keywords = [row.rstrip() for row in f.readlines()] + + self.queries.append( + base_templates.get_base_template( + "create_keyword_annotated_table", + self.base_path / "template_sql", + keywords=keywords, + source_table="rxnorm.rxnconso", + table_name=f"{study_prefix}{table_prefix}all_rxnconso_keywords", + ) + ) + umls.generate_umls_tables(config, manifest, valueset_config) + self.queries.append( + get_create_view_filter_by( + "rxnconso", + b_table=f"{study_prefix}{table_prefix}vsac_valuesets", + columns=["a.rxcui", "a.str", "a.tty", "a.sab", "a.code", "b.steward"], + view_name=f"{study_prefix}{table_prefix}vsac_valuesets_hydrated", + ) + ) + self.queries.append( + base_templates.get_create_table_from_union( + table_name=f"{study_prefix}{table_prefix}valuesets", + tables=[ + f"{study_prefix}{table_prefix}umls_valuesets", + f"{study_prefix}{table_prefix}vsac_valuesets_hydrated", + ], + columns=["rxcui", "str", "tty", "sab", "code", "steward"], + ) + ) + self.queries.append( + get_create_view_filter_by( + "rxnconso", + columns=["a.rxcui", "a.str", "a.tty", "a.sab", "a.code", "b.steward"], + ) + ) + if valueset_config.keyword_file is not None: + self.queries.append( + base_templates.get_base_template( + "create_keyword_annotated_table", + self.base_path / "template_sql", + keywords=keywords, + source_table=f"{study_prefix}{table_prefix}rxnconso", + table_name=f"{study_prefix}{table_prefix}rxnconso_keywords", + ) + ) + self.queries.append( + get_create_view_filter_by( + "rxnsty", + columns=["a.rxcui", "a.tui", "a.stn", "a.sty", "a.atui", "a.cvf"], + ) + ) + self.queries.append( + get_create_view_filter_by( + "rxnrel", + columns=[ + "a.rxcui1", + "a.rxaui1", + "a.stype1", + "a.rel", + "a.rxcui2", + "a.rxaui2", + "a.stype2", + "a.rela", + "a.rui", + "a.srui", + "a.sab", + "a.sl", + "a.rg", + "b.steward", + ], + a_join_col="a.rxcui1", + ) + ) + self.queries.append( + get_create_view_filter_by( + f"{table_prefix}rxnconso_keywords", + view_name=f"{study_prefix}{table_prefix}rela", + a_schema=f"{study_prefix}", + b_table=f"{study_prefix}{table_prefix}rxnrel", + columns=[ + "a.rxcui", + "a.str", + "a.tty", + "a.sab", + "b.rxcui2", + "b.rel", + "b.rela", + "b.rui", + "b.steward", + ], + b_join_col="b.rxcui1", + ) + ) diff --git a/cumulus_library/builders/valueset/static_builder.py b/cumulus_library/builders/valueset/static_builder.py new file mode 100644 index 00000000..75816f61 --- /dev/null +++ b/cumulus_library/builders/valueset/static_builder.py @@ -0,0 +1,207 @@ +import csv +import dataclasses +import pathlib + +import pandas + +from cumulus_library import BaseTableBuilder, base_utils, study_manifest +from cumulus_library.builders.valueset import valueset_utils, vsac +from cumulus_library.template_sql import base_templates + + +@dataclasses.dataclass(kw_only=True) +class TableConfig: + """Convenience class for holding params for configuring tables from flat files""" + + file_path: str + delimiter: str + table_name: str + headers: list[str] + dtypes: dict + parquet_types: list[str] + filtered_path: str | None = None + ignore_header: bool = False + map_cols: list[dict] | None = None + + +class StaticBuilder(BaseTableBuilder): + def get_table_configs(self, prefix): + configs = [] + if self.valueset_config.keyword_file is not None: + configs += [ + TableConfig( + file_path=self.study_path / self.valueset_config.keyword_file, + delimiter="\t", + table_name=f"{prefix}keywords", + headers=["STR"], + dtypes={"STR": "str"}, + parquet_types=["STRING"], + filtered_path=self.data_path / "./keywords.filtered.tsv", + ) + ] + if self.valueset_config.rules_file: + rules_path = self.study_path / self.valueset_config.rules_file + else: + rules_path = ( + pathlib.Path(__file__).resolve().parents[0] + / "lookup_drug_from_ingredient_rules.tsv" + ) + # TODO: get this table to write its parquet to the valueset_data folder + configs += [ + TableConfig( + file_path=rules_path, + delimiter="\t", + table_name=f"{prefix}search_rules", + headers=[ + "TTY1", + "RELA", + "TTY2", + "rule", + ], + dtypes={"TTY1": "str", "RELA": "str", "TTY2": "str", "rule": "str"}, + parquet_types=["STRING", "STRING", "STRING", "STRING", "BOOLEAN"], + ignore_header=True, + map_cols=[ + { + "from": "rule", + "to": "include", + "map_dict": {"yes": True, "no": False}, + } + ], + ) + ] + return configs + + def filter_duplicated_meds( + self, path: pathlib.Path, delimiter: str, filtered_path: pathlib.Path + ): + """Given a dataset, returns the set of shortest unique substrings from that set + + As an example, given a dataset like this: + 'Hydone Formula Liquid' + 'Hydone Formula Liquid Oral Liquid Product' + 'Hydone Formula Liquid Oral Product' + 'Novahistine Expectorant' + 'Novahistine Expectorant, 10 mg-100 mg-30 mg/5 mL oral liquid' + 'Novahistine Expectorant Oral Liquid Product' + 'Novahistine Expectorant Oral Product' + 'Codeine' + 'aconite / codeine / Erysimum preparation' + 'codeine / potassium' + + This function should return: + 'Codiene' + 'Hydone Formula Liquid' + 'Novahistine Expectorant' + + :param path: path to a file (expected to be two cols, with data in second col) + :param delimiter: the character used to separate columns in that file + :param filtered_path: The name of the file to write the filtered dataset to + + """ + target = self.data_path / f"{path.stem}.filtered.tsv" + with open(path) as file: + reader = csv.reader(file, delimiter=delimiter) + keywords = sorted((row[0] for row in reader), key=len) + unique_keywords = {} # casefold -> normal + for keyword in keywords: + folded = keyword.casefold() + if not any(x in folded for x in unique_keywords): + unique_keywords[folded] = keyword + + df = pandas.DataFrame(unique_keywords.values()) + df.to_csv(target, sep="\t", index=False, header=False) + + def prepare_queries( + self, + *args, + config: base_utils.StudyConfig, + manifest: study_manifest.StudyManifest, + valueset_config: valueset_utils.ValuesetConfig, + **kwargs, + ): + self.valueset_config = valueset_config + self.study_path = manifest._study_path + self.data_path = manifest._study_path / "valueset_data" + prefix = self.valueset_config.table_prefix + if prefix: + prefix += "_" + # fetch and add vsac tables + self.tables = self.get_table_configs(prefix) + vsac_df = pandas.DataFrame(columns=["rxcui", "display", "steward", "oid"]) + for key in valueset_config.vsac_stewards: + vsac.download_oid_data( + steward=key, + oid=valueset_config.vsac_stewards[key], + config=config, + path=self.data_path, + ) + steward_df = pandas.read_csv( + self.data_path / f"{key}.tsv", delimiter="\t", names=["rxcui", "display"] + ) + steward_df["steward"] = key + steward_df["oid"] = valueset_config.vsac_stewards[key] + vsac_df = pandas.concat([vsac_df, steward_df]) + vsac_df.to_csv(self.data_path / "all_vsac.tsv", sep="\t", index=False) + self.tables.append( + TableConfig( + file_path=self.data_path / "all_vsac.tsv", + delimiter="\t", + table_name=f"{prefix}vsac_valuesets", + headers=["rxcui", "str", "steward", "oid"], + dtypes={"rxcui": "str", "display": "str", "steward": "str", "oid": "str"}, + parquet_types=["STRING", "STRING", "STRING", "STRING"], + ignore_header=True, + ) + ) + + with base_utils.get_progress_bar() as progress: + task = progress.add_task("Uploading static files...", total=len(self.tables)) + + for table in self.tables: + # Determine what we're using as a source file + if table.filtered_path: + self.filter_duplicated_meds( + table.file_path, table.delimiter, table.filtered_path + ) + path = self.data_path / table.filtered_path + else: + path = self.data_path / table.file_path + parquet_path = path.with_suffix(".parquet") + + # Read the file, using lots of the TableConfig params, and generate + # a parquet file + + df = pandas.read_csv( + path, + delimiter=table.delimiter, + names=table.headers, + header=0 if table.ignore_header else None, + dtype=table.dtypes, + index_col=False, + na_values=["\\N"], + ) + if table.map_cols: + for mapping in table.map_cols: + df[mapping["to"]] = df[mapping["from"]].str.lower().map(mapping["map_dict"]) + table.headers.append(mapping["to"]) + df.to_parquet(parquet_path) + # Upload to S3 and create a table that reads from it + prefix = manifest.get_study_prefix() + remote_path = config.db.upload_file( + file=parquet_path, + study=prefix, + topic=parquet_path.stem, + force_upload=config.force_upload, + ) + self.queries.append( + base_templates.get_ctas_from_parquet_query( + schema_name=config.schema, + table_name=f"{prefix}__{table.table_name}", + local_location=parquet_path, + remote_location=remote_path, + table_cols=table.headers, + remote_table_cols_types=table.parquet_types, + ) + ) + progress.advance(task) diff --git a/cumulus_library/builders/valueset/template_sql/create_included_keywords.sql.jinja b/cumulus_library/builders/valueset/template_sql/create_included_keywords.sql.jinja new file mode 100644 index 00000000..e5881436 --- /dev/null +++ b/cumulus_library/builders/valueset/template_sql/create_included_keywords.sql.jinja @@ -0,0 +1,18 @@ +{#- This query is an implicit version of 'get every potential rule +that was found that matched a keyword-based rule' -#} +CREATE OR REPLACE VIEW {{ study_prefix }}{{ table_prefix }}included_keywords AS +SELECT + r.rxcui1, + r.rxcui2, + r.tty1, + r.tty2, + r.rui, + r.rel, + r.rela, + r.str1, + r.str2, + r.keyword +FROM {{ study_prefix }}{{ table_prefix }}potential_rules AS r +WHERE + r.REL NOT IN ('RB', 'PAR') + AND length(r.keyword) >= 0 diff --git a/cumulus_library/builders/valueset/template_sql/create_keyword_annotated_table.sql.jinja b/cumulus_library/builders/valueset/template_sql/create_keyword_annotated_table.sql.jinja new file mode 100644 index 00000000..e753f228 --- /dev/null +++ b/cumulus_library/builders/valueset/template_sql/create_keyword_annotated_table.sql.jinja @@ -0,0 +1,34 @@ +{%- import 'syntax.sql.jinja' as syntax -%} +{#- skipping indentation validation for this file since sqlfluff wants both +no indentation and one level of indentation for the contents of the with +block -#} +CREATE TABLE IF NOT EXISTS {{ table_name }} AS -- noqa: disable=LT02 + WITH union_block AS ( +{%- for keyword in keywords %} +SELECT + rxcui, + str, + tty, + sab, + code, + '{{ keyword }}' AS keyword +FROM {{ source_table }} +WHERE {{ syntax.ilike('str', '%'+keyword+'%') }} +{{ syntax.union_delineate(loop) }} +{%- endfor %} +) + +SELECT DISTINCT + a.rxcui, + a.str, + a.tty, + a.sab, + a.code, + b.keyword +FROM {{ source_table }} AS a +LEFT JOIN union_block AS b + ON a.rxcui = b.rxcui + AND a.str = b.str + AND a.tty = b.tty + AND a.sab = b.sab + AND a.code = b.code diff --git a/cumulus_library/builders/valueset/template_sql/create_search_rules_descriptions.sql.jinja b/cumulus_library/builders/valueset/template_sql/create_search_rules_descriptions.sql.jinja new file mode 100644 index 00000000..e24cb082 --- /dev/null +++ b/cumulus_library/builders/valueset/template_sql/create_search_rules_descriptions.sql.jinja @@ -0,0 +1,16 @@ +CREATE TABLE {{study_prefix}}{{table_prefix}}search_rules_descriptions AS +SELECT + e.tty1, + e.rela, + e.tty2, + e.rule, + e.include, + u1.tty_str AS tty1_str, + u2.tty_str AS tty2_str +FROM + umls.tty_description AS u1, + umls.tty_description AS u2, + {{study_prefix}}{{table_prefix}}search_rules AS e +WHERE + u1.tty = e.tty1 + AND u2.tty = e.tty2 diff --git a/cumulus_library/builders/valueset/template_sql/umls_iterate.sql.jinja b/cumulus_library/builders/valueset/template_sql/umls_iterate.sql.jinja new file mode 100644 index 00000000..48150c61 --- /dev/null +++ b/cumulus_library/builders/valueset/template_sql/umls_iterate.sql.jinja @@ -0,0 +1,60 @@ +{%- import 'syntax.sql.jinja' as syntax -%} +{%- if tier == 1 %} +{%- if create_table %} +CREATE TABLE {{ prefix }}{{ table_prefix }}umls_valuesets_rels AS +{%- else %} +INSERT INTO {{ prefix }}{{ table_prefix }}umls_valuesets_rels +{%- endif %} +WITH vocab AS ( + SELECT cui, tty, code, str FROM umls.mrconso + WHERE sab = '{{ sab }}' + AND LAT = 'ENG' + AND tty NOT IN ('RB', 'PAR') + AND ( + {%- for term in search_terms %} + {{ syntax.or_delineate(loop) }} {{ syntax.ilike('str', '%' + term + '%') }} + {%- endfor %} + ) +) +SELECT DISTINCT + cast('{{ steward }}' AS VARCHAR) AS steward, + cast({{ tier }} AS INTEGER) AS tier, + m.cui1 AS cui, + m.cui1, + m.rel, + m.rela, + m.cui2, + m.sab, + v.tty, + v.code, + v.str +FROM umls.mrrel_is_a AS m, vocab AS v +WHERE m.cui1 = v.cui + + +{%- else %} +INSERT INTO {{ prefix }}{{ table_prefix }}umls_valuesets_rels +SELECT DISTINCT + '{{ steward }}' AS steward, + {{ tier }} AS tier, + r.cui2 AS cui, + r.cui1, + r.rel, + r.rela, + r.cui2, + d.sab, + d.tty, + d.code, + d.str +FROM + {{ prefix }}{{ table_prefix }}umls_valuesets_rels AS v, + umls.mrrel_is_a AS r, + umls.mrconso_drugs AS d +WHERE + r.cui1 = v.cui + AND r.cui2 = d.cui + AND v.tier = {{ tier -1 }} + AND r.cui2 NOT IN ( + SELECT DISTINCT cui FROM {{ prefix }}{{ table_prefix }}umls_valuesets_rels + ) +{%- endif %} diff --git a/cumulus_library/builders/valueset/umls.py b/cumulus_library/builders/valueset/umls.py new file mode 100644 index 00000000..eab72b9a --- /dev/null +++ b/cumulus_library/builders/valueset/umls.py @@ -0,0 +1,101 @@ +"""Creates medication lists from UMLS + +We're leveraging the MRCONSO and MRREL tables to do some recursive lookups. +For a given medical language system, we'll build up some relationships, +and then use those as a seed for the next iteration, continuing until we've +identified all concepts related to a specific set of seed values. + +Source terminology (see UMLS docs for more details): + +https://www.ncbi.nlm.nih.gov/books/NBK9685/table/ch03.T.concept_names_and_sources_file_mr/ +MRCONSO (source of concept information): + SAB: Abbreviated source name of the concept. This is the name of the source + medical vocabulary, i.e. SNOMED, ICD10, MEDRT, etc + CUI: the unique identifier for a concept in UMLS + TTY: Term type abbreviation, i.e. CD for clinical drug, DF for dose form, etc + CODE: The primary ID for a concept in the source vocabulary + STR: The display name of the concept, like a drug's name + +https://www.ncbi.nlm.nih.gov/books/NBK9685/table/ch03.T.related_concepts_file_mrrel_rrf/ +MRREL (source of mapping between concepts): + SAB: Abbreviated source name of the relationship. Same as MRCONSO SAB + CUI1: The UMLS ID of the concept you're mapping from + CUI2: The UMLS ID of the concept you're mapping to + REL: An abbreviation mapping to a relationship type, like RB (broader relationship), + or RN (narrower relationship) + RELA: The relationship between the concepts, like `tradename_of` or + `has_ingredient`. May be null. +""" + +import pathlib + +from cumulus_library import base_utils, study_manifest +from cumulus_library.builders.valueset import valueset_utils +from cumulus_library.template_sql import base_templates + + +def generate_umls_tables( + config: base_utils.StudyConfig, + manifest: study_manifest.StudyManifest, + valueset_config: valueset_utils.ValuesetConfig, +): + base_path = pathlib.Path(__file__).resolve().parent + study_prefix = manifest.get_prefix_with_seperator() + cursor = config.db.cursor() + table_prefix = "" + if valueset_config.table_prefix: + table_prefix = valueset_config.table_prefix + "_" + create_table = True + cursor.execute(f"DROP TABLE IF EXISTS {study_prefix}{table_prefix}valueset_rels") + cursor.execute(f"DROP TABLE IF EXISTS {study_prefix}{table_prefix}valueset") + for steward in valueset_config.umls_stewards: + cursor = config.db.cursor() + display_text = f"Discovering {steward} medications, pass " + tier = 1 + with base_utils.get_progress_bar(disable=config.verbose) as progress: + task = progress.add_task( + display_text + str(tier), total=None, visible=not config.verbose + ) + query = base_templates.get_base_template( + "umls_iterate", + base_path / "template_sql", + steward=steward, + prefix=study_prefix, + table_prefix=table_prefix, + sab=valueset_config.umls_stewards[steward]["sab"], + search_terms=valueset_config.umls_stewards[steward]["search_terms"], + tier=tier, + create_table=create_table, + ) + create_table = False + cursor.execute(query) + prev = 0 + current = cursor.execute( + f"SELECT count(*) from {study_prefix}{table_prefix}umls_valuesets_rels" # noqa: S608 + ).fetchone()[0] + while current != prev: + prev = current + tier += 1 + progress.update(task, description=display_text + str(tier)) + query = base_templates.get_base_template( + "umls_iterate", + base_path / "template_sql", + steward=steward, + prefix=study_prefix, + table_prefix=table_prefix, + sab=valueset_config.umls_stewards[steward]["sab"], + search_terms=valueset_config.umls_stewards[steward]["search_terms"], + tier=tier, + ) + cursor.execute(query) + current = cursor.execute( + f"SELECT count(*) from {study_prefix}{table_prefix}umls_valuesets_rels" # noqa: S608 + ).fetchone()[0] + + cursor.execute(f"""CREATE TABLE {study_prefix}{table_prefix}umls_valuesets AS +SELECT distinct r.rxcui, v.* +FROM {study_prefix}{table_prefix}umls_valuesets_rels as v, rxnorm.RXNCONSO as r +WHERE v.code = r.code +AND v.sab=r.sab +--AND v.tty=r.tty +""") diff --git a/cumulus_library/builders/valueset/valueset_utils.py b/cumulus_library/builders/valueset/valueset_utils.py new file mode 100644 index 00000000..def7f23b --- /dev/null +++ b/cumulus_library/builders/valueset/valueset_utils.py @@ -0,0 +1,12 @@ +import dataclasses + + +@dataclasses.dataclass(kw_only=True) +class ValuesetConfig: + """Provides expected values for creating valuesets""" + + rules_file: str = None + keyword_file: str = None + table_prefix: str = None + umls_stewards: dict[str, str] = None + vsac_stewards: dict[str, str] = None diff --git a/cumulus_library/builders/valueset/vsac.py b/cumulus_library/builders/valueset/vsac.py new file mode 100644 index 00000000..43ae42f8 --- /dev/null +++ b/cumulus_library/builders/valueset/vsac.py @@ -0,0 +1,81 @@ +import argparse +import json +import pathlib + +import pandas + +from cumulus_library import base_utils +from cumulus_library.apis import umls + + +def download_oid_data( + *, + steward: str, + oid: str, + api_key: str | None = None, + config: base_utils.StudyConfig | None = None, + force_upload: str | None = None, + path: pathlib.Path | None = None, +) -> bool: + """Fetches code definitions (assumed to be RXNorm coded) from VSAC + :keyword steward: the human readable label for the valueset + :keyword oid: the ID of the valueset in the VSAC database + :keyword config: A StudyConfig object. If umls_key is none, will check the + UMLS_API_KEY env var + :keyword path: A path to write data to (default: ../data) + :returns: True if file created, false otherwise (mostly for testing) + """ + if config: + api_key = config.umls_key + force_upload = config.force_upload + if not path: + path = pathlib.Path(__file__).parent.parent / "data" # pragma: no cover + path.mkdir(exist_ok=True, parents=True) + if not (force_upload) and (path / f"{steward}.parquet").exists(): + print(f"{steward} data present at {path}, skipping download.") + return False + print(f"Downloading {steward} to {path}") + api = umls.UmlsApi(api_key=api_key or api_key) + output = [] + + response = api.get_vsac_valuesets(oid=oid) + for valueset in response: + contains = valueset.get("expansion").get("contains", []) + for data in contains: + output.append([data["code"], data["display"]]) + output_df = pandas.DataFrame(output, columns=["RXCUI", "STR"]) + output_df.to_csv(path / f"{steward}.tsv", index=False, header=False, sep="\t") + output_df.to_parquet(path / f"{steward}.parquet") + with open(path / f"{steward}.json", "w") as f: + f.write(json.dumps(response)) + return True + + +def main(cli_args=None): + """Deprecated CLI interface""" + parser = argparse.ArgumentParser() + ( + parser.add_argument( + "--steward", help="Human-friendly name for steward (used for filenames)", default=None + ), + ) + parser.add_argument("--oid", help="oid to look up codes for", default=None) + parser.add_argument("--api-key", help="UMLS api key", default=None) + parser.add_argument( + "--force-upload", + help="Force redownloading of data even if it already exists", + action="store_true", + ) + parser.add_argument("--path", help="optional path to write data to", default=None) + args = parser.parse_args(cli_args) + return download_oid_data( + steward=args.steward, + oid=args.oid, + api_key=args.api_key, + force_upload=args.force_upload, + path=pathlib.Path(args.path), + ) + + +if __name__ == "__main__": + main() # pragma: no cover diff --git a/cumulus_library/builders/valueset_builder.py b/cumulus_library/builders/valueset_builder.py new file mode 100644 index 00000000..3563afe7 --- /dev/null +++ b/cumulus_library/builders/valueset_builder.py @@ -0,0 +1,61 @@ +import pathlib +import sys +import tomllib + +from cumulus_library import BaseTableBuilder, base_utils, study_manifest +from cumulus_library.builders.valueset import ( + additional_rules_builder, + rxnorm_valueset_builder, + static_builder, + valueset_utils, +) + + +class ValuesetBuilder(BaseTableBuilder): + """TableBuilder for creating PSM tables""" + + display_text = "Building valueset tables..." + + def __init__(self, toml_config_path: str, data_path: pathlib.Path, **kwargs): + """Loads PSM job details from a PSM configuration file""" + super().__init__() + # We're stashing the toml path for error reporting later + self.toml_path = toml_config_path + self.data_path = data_path + try: + with open(self.toml_path, "rb") as file: + toml_config = tomllib.load(file) + + except OSError: + sys.exit(f"Valueset configuration not found at {self.toml_path}") + self.valueset_config = valueset_utils.ValuesetConfig( + rules_file=toml_config.get("rules_file"), + keyword_file=toml_config.get("keyword_file"), + table_prefix=toml_config.get("target_table", ""), + umls_stewards=toml_config.get("umls_stewards", {}), + vsac_stewards=toml_config.get("vsac_stewards", {}), + ) + + def prepare_queries( + self, + *args, + config: base_utils.StudyConfig, + manifest: study_manifest.StudyManifest, + **kwargs, + ): + self.queries = [] + s_builder = static_builder.StaticBuilder() + s_builder.prepare_queries( + config=config, manifest=manifest, valueset_config=self.valueset_config + ) + self.queries += s_builder.queries + rx_builder = rxnorm_valueset_builder.RxNormValuesetBuilder() + rx_builder.prepare_queries( + config=config, manifest=manifest, valueset_config=self.valueset_config + ) + self.queries += rx_builder.queries + r_builder = additional_rules_builder.AdditionalRulesBuilder() + r_builder.prepare_queries( + config=config, manifest=manifest, valueset_config=self.valueset_config + ) + self.queries += r_builder.queries diff --git a/cumulus_library/databases/duckdb.py b/cumulus_library/databases/duckdb.py index c483183c..619c5d70 100644 --- a/cumulus_library/databases/duckdb.py +++ b/cumulus_library/databases/duckdb.py @@ -94,9 +94,7 @@ def insert_tables(self, tables: dict[str, pyarrow.Table]) -> None: self.connection.register(name, table) @staticmethod - def _compat_array_join(value: list[str | None] | None, delimiter: str | None) -> str | None: - if value is None: - return None + def _compat_array_join(value: list[str | None], delimiter: str | None) -> str: if delimiter is None or delimiter == "None": # This is exercised locally on unit tests but is not in CI. Not sure why, # and not sure it's worth debugging @@ -105,18 +103,14 @@ def _compat_array_join(value: list[str | None] | None, delimiter: str | None) -> @staticmethod def _compat_regexp_like(string: str | None, pattern: str | None) -> bool: - if string is None or string == "None" or pattern is None or pattern == "None": - return None match = re.search(pattern, string) return match is not None @staticmethod def _compat_date( - value: str | datetime.datetime | datetime.date | None, - ) -> datetime.date | None: - if value is None: - return None - elif isinstance(value, str): + value: str | datetime.datetime | datetime.date, + ) -> datetime.date: + if isinstance(value, str): return datetime.date.fromisoformat(value) elif isinstance(value, datetime.datetime): return value.date() @@ -134,11 +128,8 @@ def _compat_to_utf8(value: str | None) -> datetime.date | None: @staticmethod def _compat_from_iso8601_timestamp( - value: str | None, - ) -> datetime.datetime | None: - if value is None: - return None - + value: str, + ) -> datetime.datetime: # handle partial dates like 1970 or 1980-12 (which spec allows) if len(value) < 10: pieces = value.split("-") diff --git a/cumulus_library/statistics/README.md b/cumulus_library/statistics/README.md deleted file mode 100644 index 069db706..00000000 --- a/cumulus_library/statistics/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Deprecation notice - -The statistics module has been combined with other tables builders into -the new `builders` module. Backwards compatibility for importing from -`statistics` will be removed in a future version. diff --git a/cumulus_library/statistics/__init__.py b/cumulus_library/statistics/__init__.py deleted file mode 100644 index 62c378b2..00000000 --- a/cumulus_library/statistics/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from cumulus_library.builders import counts, psm, statistics_templates diff --git a/cumulus_library/statistics/counts/__init__.py b/cumulus_library/statistics/counts/__init__.py deleted file mode 100644 index 8fe0f09a..00000000 --- a/cumulus_library/statistics/counts/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from cumulus_library.builders.counts import CountsBuilder diff --git a/cumulus_library/statistics/statistics_templates/__init__.py b/cumulus_library/statistics/statistics_templates/__init__.py deleted file mode 100644 index c1b51e65..00000000 --- a/cumulus_library/statistics/statistics_templates/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from cumulus_library.builders.statistics_templates import counts_templates, psm_templates diff --git a/cumulus_library/study_manifest.py b/cumulus_library/study_manifest.py index bd46a38d..b2a89017 100644 --- a/cumulus_library/study_manifest.py +++ b/cumulus_library/study_manifest.py @@ -16,7 +16,9 @@ def __init__( ): """Instantiates a StudyManifest. - :param study_path: A pathlib Path object, optional + :param study_path: A Path object pointing to the dir of the manifest, optional + :param data_path: A Path object pointing to the dir to save/load ancillary files from, + optional """ self._study_path = None self._study_config = {} diff --git a/cumulus_library/template_sql/ctas_from_parquet.sql.jinja b/cumulus_library/template_sql/ctas_from_parquet.sql.jinja index 50713606..bb1544f1 100644 --- a/cumulus_library/template_sql/ctas_from_parquet.sql.jinja +++ b/cumulus_library/template_sql/ctas_from_parquet.sql.jinja @@ -20,5 +20,5 @@ STORED AS PARQUET LOCATION '{{ remote_location }}' tblproperties ("parquet.compression"="SNAPPY"); {%- elif db_type == 'duckdb' %} -FROM read_parquet('{{ local_location }}/*.parquet') +FROM read_parquet('{{ local_location }}') {%- endif %} diff --git a/docs/statistics/propensity-score-matching.md b/docs/builders/propensity-score-matching.md similarity index 99% rename from docs/statistics/propensity-score-matching.md rename to docs/builders/propensity-score-matching.md index fd940cf8..e9ea1a85 100644 --- a/docs/statistics/propensity-score-matching.md +++ b/docs/builders/propensity-score-matching.md @@ -1,6 +1,6 @@ --- title: Propensity Score Matching -parent: Statistics +parent: Builders grand_parent: Library nav_order: 1 # audience: clinical researchers, IRB reviewers diff --git a/docs/builders/valueset.md b/docs/builders/valueset.md new file mode 100644 index 00000000..750d994c --- /dev/null +++ b/docs/builders/valueset.md @@ -0,0 +1,161 @@ +--- +title: Valuesets +parent: Builders +grand_parent: Library +nav_order: 2 +# audience: clinical researchers, IRB reviewers +# type: reference +--- + +# Valueset construction + +This document aims to provide help in configuring/running a compound clinical valueset +as part of a Cumulus Library study. + +## What is valueset construction? + +When we refer to valuesets in this context, we are talking about a grouping of codes +related to a specific clinical topic (in our default case, we think about drugs +with specific ingredients). These usually end up consisting of groups of codes +from one of the major coding systems in the +[Unified Medical Langauge System](https://www.nlm.nih.gov/research/umls/index.html) (UMLS). +There are several ways a user could select a group of related ingredients: + +- Look up a curated valueset from the +[Valueset Authority Center](https://vsac.nlm.nih.gov/) (VSAC), where organizations curate +and maintain these groupings +- Look up codings in a specific UMLS valueset, by string search +- Manual valueset construction, by hand or from an ontology system, by a set of keywords + +The valueset constructor attempts to automate this by allowing you to specify any of these +methods, and then uses the superset of all of all of them to begin a directed search +using the +[UMLS relations](https://www.ncbi.nlm.nih.gov/books/NBK9685/table/ch03.T.related_concepts_file_mrrel_rrf/), +following a defined set of rules to determine a group of drugs containing these ingredients. + +As an example, in our +[Opioid Valueset](https://github.com/smart-on-fhir/cumulus-library-opioid-valueset/) +study, we use a combination of methods to define a group of drugs containing opiates, +which results in a higher positive identification than any single method by itself + +## Configuring a valuset task + +The PSM config you reference in your study manifest is expected to contain a number of +field definitions. We **strongly** recommend starting from the below template, which +contains details on the expectations of each value. + +```toml +# This is a config file for generating a compound clinical valueset definition. + +# You can use this to find a set of related concepts from one or more starting +# seeds, which can then be used to filter study cohorts by the presence of these +# codes. + +# This attempts to handle the complexities of generating SQL queries for you. +# You'll need to have the UMLS/RxNorm studies installed, and you may need +# to do a bit of preliminary lookup in VSAC to identify oids as a starting point + +# config_type should be "valueset" - we use this to distinguish from other +# configurable builders +config_type = "valueset" + +# table_prefix allows you to namespace valueset tables inside your study. If +# supplied, this will name tables like [study name]__[table_prefix]_[various tables]. +# This will allow you to add more than one of this kind of configurable builder +# per study + +table_prefix = "" + +# keyword_file allows you to build a valuset from a group of related substrings. +# It is expected to have one search term per line. Its path will be followed relative +# to the location of this file. + +keyword_file = "" + +# rules_file allows you to specify a custom group of rules to use to +# traverse the UMLS MRREL tables, by allowing you to list relation types that +# should be included. +# Our default configuration is based on looking up drugs from their ingredients, +# and that is our recommended use case for this, so you probably don't need to provide this +# unless you are experimenting with a different kind of lookup topic. +# Our default config is in +# cumulus_library/builders/valuesets/lookup_drug_from_ingredient_rules.tsv, +# which you can use as a reference for starting your own. The column names corespond +# to the column definitions in UMLS's MRREL table, with the exception of 'include' +# which should be one of 'Yes' (use the rule), 'No' (Ingore the rule), or 'Keyword' +# (Use the rule, but only if the seed was derived via keyword lookup). + +# For most cases, you should not need to supply this. +# expansion_rules_file = "custom_rules.tsv" + + +# The vsac_stewards section allows you to specify any number of VSAC valueset OIDs +# to use to build your compound valueset. The name on the left will be added to +# some tables to help you identify the source of a particular code. Codes can (and +# likely will) belong to more than one valueset. This will automatically download +# the valueset definitions using the VSAC API. + +[vsac_stewards] +stweard_1 = "1.23.456.7.891012.3.4.5678.90" +steward_2 = "1.2.3.4.5.6.7890.1.2.3.456.789.0.1" + +# The umls_stewards section allows you to specify lookups in a source vocabulary +# inside of the UMLS MRCONSO table. The string after the period in [umls_stewards.name] +# will be added to some tables to help identify the source of a particular code. +# Two arguments are expected for each UMLS lookup: +# - "sab": the code used to identify the system in the SAB column of MRCONSO +# - "search_terms": An array of words to use for identifying topics by substring + +[umls_stewards.steward_3] +sab = "MED-RT" +search_terms = ["Asprin"] +[umls_stewards.steward_4] +sab = "MED-RT" +search_terms = ["Tylenol", "Ibuprofin"] +``` + +## Using the constructed outputs: + +Valueset construction creates a lot of tables, but there are two primary ones you can +consider to be the outputs of the process: + +- `{study_prefix}__valuesets` - this table contains all of the starting codes from the various systems + you specified in your configuration +- `{study_prefix}__combined_ruleset` - this table contains all of the final relations of valueset seeds + to targets defined by a particular ruleset + +The first table can be used as a debug tool/documentation for what terms are being used +for lookup, and the second one can be used to select targeted data from UMLS. For our +default use case, the most common way to do this is to use the 'to' direction of the +relationship, by taking distinct string values of the field `str2`, as your list of +drugs related to the initial ingredient set. + +A brief synopsis of the tables in question (which match the naming conventions in the +rxnorm tables): + +### {study_prefix}__valuesets + + +|Column | Type |Description| +|-------|-------|-----------| +|rxcui |varchar|The unique ID of the concept in RxNorm| +|str |varchar|The display value of the concept| +|tty |varchar|The term type code| +|sab |varchar|The source abbreviation| +|code |varchar|The identified in the source vocabulary| +|steward|varchar|The steward name you defined in the configuration| + +### valueset__combined_ruleset + +|Column | Type |Description| +|-------|-----------|-----------| +|rxcui1 |varchar |The unique ID of the first concept| +|rxcui2 |varchar |The unique ID of the second concept| +|tty1 |varchar |The term type code of the first concept| +|tty2 |varchar |The term type code of the second concept| +|rui |varchar |The unique ID of the relationship| +|rel |varchar |The relationship type code| +|rela |varchar |Additional relationship type label| +|str1 |varchar |The display name of the first concept| +|str2 |varchar |The display name of the second concept| +|keyword|varchar(10)|The keyword (if any) that caused the relationship to be selected| \ No newline at end of file diff --git a/docs/statistics.md b/docs/targeted-builders.md similarity index 86% rename from docs/statistics.md rename to docs/targeted-builders.md index ae4ab75d..c8b49243 100644 --- a/docs/statistics.md +++ b/docs/targeted-builders.md @@ -1,5 +1,5 @@ --- -title: Statistics +title: Targeted Builders parent: Library nav_order: 8 has_children: true @@ -9,12 +9,13 @@ has_children: true # Statistics reference -This page contains detailed documentation on statistics utilities provided +This page contains detailed documentation on table building utilities utilities provided for use in Cumulus studies. -## Specific stats modules +## Specific builder modules -- [Propensity Score Matching](statistics/propensity-score-matching.md). +- [Propensity Score Matching](builders/propensity-score-matching.md). +- [Valueset Compilation](builders/valueset.md). ## General usage guidelines diff --git a/pyproject.toml b/pyproject.toml index 2778f86c..960522d8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ requires-python = ">= 3.11" dependencies = [ "ctakesclient >= 1.3", "cumulus-fhir-support >= 1.2", - "duckdb >= 0.9", + "duckdb >= 1.1", "fhirclient >= 4.1", "Jinja2 > 3", "pandas <3, >=2.1.3", diff --git a/tests/conftest.py b/tests/conftest.py index e5ea901e..6e0cda28 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,7 +3,7 @@ import copy import datetime import json -from pathlib import Path +import pathlib import numpy import pandas @@ -15,7 +15,7 @@ # Useful constants -TESTS_ROOT = Path(__file__).parent +TESTS_ROOT = pathlib.Path(__file__).parent LIBRARY_ROOT = TESTS_ROOT.parent / "cumulus_library" MOCK_DATA_DIR = f"{TESTS_ROOT}/test_data/duckdb_data" ID_PATHS = { @@ -53,7 +53,7 @@ def get_sorted_table_data(cursor, table): def duckdb_args(args: list, tmp_path, stats=False): """Convenience function for adding duckdb args to a CLI mock""" if stats: - ndjson_data_generator(Path(MOCK_DATA_DIR), Path(f"{tmp_path}/stats_db"), 20) + ndjson_data_generator(pathlib.Path(MOCK_DATA_DIR), pathlib.Path(f"{tmp_path}/stats_db"), 20) target = f"{tmp_path}/stats_db" else: target = f"{MOCK_DATA_DIR}" @@ -90,7 +90,7 @@ def date_to_epoch(year: int, month: int, day: int) -> int: return int(datetime.datetime(year, month, day, tzinfo=datetime.UTC).timestamp()) -def ndjson_data_generator(source_dir: Path, target_dir: Path, iterations: int): +def ndjson_data_generator(source_dir: pathlib.Path, target_dir: pathlib.Path, iterations: int): """Uses the test data as a template to create large datasets Rather than a complex find/replace operation, we're just appending ints cast @@ -116,7 +116,7 @@ def update_nested_obj(id_path, obj, i): return obj for key in ID_PATHS: - for filepath in [f for f in Path(source_dir / key).iterdir()]: + for filepath in [f for f in pathlib.Path(source_dir / key).iterdir()]: ref_df = pandas.read_json(filepath, lines=True) output_df = pandas.DataFrame() for i in range(0, iterations): @@ -141,7 +141,7 @@ def update_nested_obj(id_path, obj, i): output_df[null_bool_col] = output_df[null_bool_col].replace({0.0: False}) output_df = output_df.replace({numpy.nan: None}) - write_path = Path(str(target_dir) + f"/{key}/{filepath.name}") + write_path = pathlib.Path(str(target_dir) + f"/{key}/{filepath.name}") write_path.parent.mkdir(parents=True, exist_ok=True) # pandas.to_json() fails due to the datamodel complexity, so we'll manually # coerce to ndjson @@ -226,7 +226,7 @@ def mock_db_core(tmp_path, mock_db): # pylint: disable=redefined-outer-name ) builder = cli.StudyRunner(config, data_path=f"{tmp_path}/data_path") builder.clean_and_build_study( - Path(__file__).parent.parent / "cumulus_library/studies/core", + pathlib.Path(__file__).parent.parent / "cumulus_library/studies/core", ) yield mock_db @@ -241,7 +241,7 @@ def mock_db_core_config(mock_db_core): @pytest.fixture def mock_db_stats(tmp_path): """Provides a DuckDatabaseBackend with a larger dataset for sampling stats""" - ndjson_data_generator(Path(MOCK_DATA_DIR), f"{tmp_path}/mock_data", 20) + ndjson_data_generator(pathlib.Path(MOCK_DATA_DIR), f"{tmp_path}/mock_data", 20) db, schema = create_db_backend( { "db_type": "duckdb", @@ -255,7 +255,7 @@ def mock_db_stats(tmp_path): ) builder = cli.StudyRunner(config, data_path=f"{tmp_path}/data_path") builder.clean_and_build_study( - Path(__file__).parent.parent / "cumulus_library/studies/core", + pathlib.Path(__file__).parent.parent / "cumulus_library/studies/core", ) yield db @@ -265,3 +265,26 @@ def mock_db_stats_config(mock_db_stats): """Provides a DuckDatabaseBackend with core study inside a StudyConfig""" config = base_utils.StudyConfig(db=mock_db_stats, schema="main") yield config + + +@pytest.fixture +def mock_db_config_rxnorm(mock_db): + config = base_utils.StudyConfig(db=mock_db, schema="main") + config.options = {"steward": "acep"} + cursor = config.db.cursor() + mock_rxnorm_data = list((pathlib.Path(__file__).parent / "test_data/valueset").glob("*.csv")) + mock_umls_data = list( + (pathlib.Path(__file__).parent / "test_data/valueset/umls_iteration").glob("*.csv") + ) + cursor = config.db.cursor() + cursor.execute("CREATE SCHEMA rxnorm") + cursor.execute("CREATE SCHEMA umls") + for mock_table in mock_rxnorm_data: + cursor.execute( + f"CREATE TABLE rxnorm.{mock_table.stem} AS SELECT * FROM read_csv('{mock_table}')" + ) + for mock_table in mock_umls_data: + cursor.execute( + f"CREATE TABLE umls.{mock_table.stem} AS SELECT * FROM read_csv('{mock_table}')" + ) + yield config diff --git a/tests/test_actions.py b/tests/test_actions.py index 410cce17..bb8ff43a 100644 --- a/tests/test_actions.py +++ b/tests/test_actions.py @@ -4,7 +4,6 @@ import shutil import zipfile from contextlib import nullcontext as does_not_raise -from pathlib import Path from unittest import mock import pandas @@ -286,11 +285,11 @@ def test_build_study(mock_db_config, study_path, verbose, expects, raises): ), ], ) -def test_run_statistics_builders( +def test_run_psm_statistics_builders( tmp_path, mock_db_stats_config, study_path, stats, previous, expects, raises ): with raises: - manifest = study_manifest.StudyManifest(study_path, data_path=tmp_path) + manifest = study_manifest.StudyManifest(pathlib.Path(study_path), data_path=tmp_path) config = base_utils.StudyConfig( db=mock_db_stats_config.db, schema=mock_db_stats_config.schema, @@ -321,9 +320,28 @@ def test_run_statistics_builders( assert expects in tables +@mock.patch("cumulus_library.builders.valueset_builder.ValuesetBuilder.execute_queries") +def test_invoke_valueset_builder(mock_builder, mock_db_config, tmp_path): + manifest = study_manifest.StudyManifest( + pathlib.Path(__file__).parent / "test_data/valueset", data_path=tmp_path + ) + builder.run_protected_table_builder( + config=mock_db_config, + manifest=manifest, + ) + config = base_utils.StudyConfig( + db=mock_db_config.db, schema=mock_db_config.schema, stats_build=True + ) + builder.run_statistics_builders( + config=config, + manifest=manifest, + ) + assert mock_builder.is_called() + + def test_export_study(tmp_path, mock_db_core_config): manifest = study_manifest.StudyManifest( - f"{Path(__file__).parent.parent}/cumulus_library/studies/core", + f"{pathlib.Path(__file__).parent.parent}/cumulus_library/studies/core", data_path=f"{tmp_path}/export", ) exporter.export_study( @@ -333,7 +351,7 @@ def test_export_study(tmp_path, mock_db_core_config): archive=False, chunksize=20, ) - for file in Path(f"{tmp_path}/export").glob("*.*"): + for file in pathlib.Path(f"{tmp_path}/export").glob("*.*"): assert file in manifest.get_export_table_list() @@ -443,7 +461,7 @@ def test_upload_data(user, id_token, status, preview, login_error, raises): json={"url": "https://presigned.url.test", "fields": {"a": "b"}}, ) args = { - "data_path": pathlib.Path.cwd() / "tests/test_data", + "data_path": pathlib.Path.cwd() / "tests/test_data/upload/", "id": id_token, "preview": preview, "target": "core", @@ -464,7 +482,7 @@ def test_upload_data(user, id_token, status, preview, login_error, raises): def test_generate_sql(mock_db_config, tmp_path, study, external): with does_not_raise(): shutil.copytree( - f"{Path(__file__).resolve().parents[0]}/test_data/{study}", + f"{pathlib.Path(__file__).resolve().parents[0]}/test_data/{study}", f"{tmp_path}/{study}/", ) manifest = study_manifest.StudyManifest(study_path=pathlib.Path(f"{tmp_path}/{study}/")) @@ -487,7 +505,7 @@ def test_generate_sql(mock_db_config, tmp_path, study, external): def test_generate_md(mock_db_config, tmp_path): with does_not_raise(): shutil.copytree( - f"{Path(__file__).resolve().parents[0]}/test_data/study_python_valid", + f"{pathlib.Path(__file__).resolve().parents[0]}/test_data/study_python_valid", f"{tmp_path}/study_python_valid/", ) manifest = study_manifest.StudyManifest( diff --git a/tests/test_base_templates.py b/tests/test_base_templates.py index ebe39185..7e287ed0 100644 --- a/tests/test_base_templates.py +++ b/tests/test_base_templates.py @@ -576,7 +576,7 @@ def test_ctas_from_parquet(expected, db_type, schema, table, cols, remote_types) query = base_templates.get_ctas_from_parquet_query( schema_name=schema, table_name=table, - local_location="./tests/test_data", + local_location="./tests/test_data/*.parquet", remote_location="s3://bucket/data/", table_cols=cols, remote_table_cols_types=remote_types, diff --git a/tests/test_counts_builder.py b/tests/test_counts_builder.py index c3d34775..dd75de54 100644 --- a/tests/test_counts_builder.py +++ b/tests/test_counts_builder.py @@ -6,7 +6,7 @@ import pytest from cumulus_library import errors -from cumulus_library.statistics import counts +from cumulus_library.builders import counts TEST_PREFIX = "test" @@ -32,7 +32,7 @@ def test_get_table_name(name, duration, expected): ], ) def test_deprecation_patch(name, duration, expected): - from cumulus_library.statistics.counts import CountsBuilder + from cumulus_library.builders.counts import CountsBuilder builder = CountsBuilder(study_prefix=TEST_PREFIX) output = builder.get_table_name(name, duration) @@ -102,7 +102,7 @@ def test_get_where_clauses(clause, min_subject, expected, raises): ("table", "source", None, {}, pytest.raises(errors.CountsBuilderError)), ], ) -@mock.patch("cumulus_library.statistics.statistics_templates.counts_templates.get_count_query") +@mock.patch("cumulus_library.builders.statistics_templates.counts_templates.get_count_query") def test_get_count_query(mock_count, table_name, source_table, table_cols, kwargs, raises): with raises: builder = counts.CountsBuilder(study_prefix=TEST_PREFIX) @@ -170,7 +170,7 @@ def test_get_count_query(mock_count, table_name, source_table, table_cols, kwarg ), ], ) -@mock.patch("cumulus_library.statistics.statistics_templates.counts_templates.get_count_query") +@mock.patch("cumulus_library.builders.statistics_templates.counts_templates.get_count_query") def test_count_wrappers( mock_count, table_name, diff --git a/tests/test_counts_templates.py b/tests/test_counts_templates.py index a5bd2684..f56ee3ca 100644 --- a/tests/test_counts_templates.py +++ b/tests/test_counts_templates.py @@ -3,7 +3,7 @@ import pytest from cumulus_library import errors -from cumulus_library.statistics.statistics_templates import counts_templates +from cumulus_library.builders.statistics_templates import counts_templates @pytest.mark.parametrize( diff --git a/tests/test_data/study_static_file/icd_legend.sql b/tests/test_data/study_static_file/icd_legend.sql deleted file mode 100644 index 381666b9..00000000 --- a/tests/test_data/study_static_file/icd_legend.sql +++ /dev/null @@ -1,20 +0,0 @@ -CREATE TABLE vocab__icd_legend AS -SELECT - code, - display, - code_display, - code_system -FROM ( - SELECT - code, - str AS display, - CONCAT(code, ' ', str) AS code_display, - sab AS code_system, - ROW_NUMBER() - OVER ( - PARTITION BY sab, code - ORDER BY LENGTH(str) ASC - ) AS pref - FROM vocab__icd -) -WHERE pref = 1; diff --git a/tests/test_data/study_static_file/static_file_builder.py b/tests/test_data/study_static_file/static_file_builder.py index 18c8355c..dbb4d14f 100644 --- a/tests/test_data/study_static_file/static_file_builder.py +++ b/tests/test_data/study_static_file/static_file_builder.py @@ -48,7 +48,7 @@ def prepare_queries( base_templates.get_ctas_from_parquet_query( schema_name=config.schema, table_name=table_name, - local_location=path / "bsvs", + local_location=path / "bsvs/*.parquet", remote_location=remote_path, table_cols=headers, remote_table_cols_types=header_types, diff --git a/tests/test_data/count_synthea_patient.csv b/tests/test_data/upload/count_synthea_patient.csv similarity index 100% rename from tests/test_data/count_synthea_patient.csv rename to tests/test_data/upload/count_synthea_patient.csv diff --git a/tests/test_data/count_synthea_patient.parquet b/tests/test_data/upload/count_synthea_patient.parquet similarity index 100% rename from tests/test_data/count_synthea_patient.parquet rename to tests/test_data/upload/count_synthea_patient.parquet diff --git a/tests/test_data/valueset/README.md b/tests/test_data/valueset/README.md new file mode 100644 index 00000000..fea7d74f --- /dev/null +++ b/tests/test_data/valueset/README.md @@ -0,0 +1,17 @@ +# Test Data + +This document describes the sources of the more complex datasets +used by unit testing. + +## rxnconso/rxnrel/rxnsty + +These are subsets of the RxNorm sources pulled from the pure sql version of the +vocab lookup, which means that they generally align with the keywords being used +for searching. rnxrel.csv has been light modified, changing 'tradename_of' to +'reformulated to', which is clinically incorrect but does allow us to more +easily test drive the included rels table. + +## vsac_resp + +This is the API response from the expansion endpoint of the VSAC API, targeted +at the ACEP curated dataset of opioid medications. \ No newline at end of file diff --git a/tests/test_data/valueset/keywords.tsv b/tests/test_data/valueset/keywords.tsv new file mode 100644 index 00000000..5e392706 --- /dev/null +++ b/tests/test_data/valueset/keywords.tsv @@ -0,0 +1,4 @@ +a-cof +a-g tussin +abstral +subutex diff --git a/tests/test_data/valueset/manifest.toml b/tests/test_data/valueset/manifest.toml new file mode 100644 index 00000000..6e03cf54 --- /dev/null +++ b/tests/test_data/valueset/manifest.toml @@ -0,0 +1,6 @@ +study_prefix = "test" + +[statistics_config] +file_names = [ + "valueset.toml" +] diff --git a/tests/test_data/valueset/rules_file.tsv b/tests/test_data/valueset/rules_file.tsv new file mode 100644 index 00000000..f0e746b5 --- /dev/null +++ b/tests/test_data/valueset/rules_file.tsv @@ -0,0 +1,4 @@ +TTY1 RELA TTY2 INCLUDE +BN reformulated_to BN Yes +BN reformulation_of BN No +BN tradename_of IN Keyword diff --git a/tests/test_data/valueset/rxnconso.csv b/tests/test_data/valueset/rxnconso.csv new file mode 100644 index 00000000..971e88a2 --- /dev/null +++ b/tests/test_data/valueset/rxnconso.csv @@ -0,0 +1,58 @@ +"rxcui","str","tty","sab","code" +"1818","Subutex","BN","MMSL","45125" +"1818","Subutex","BN","RXNORM","1818" +"1819","Buprenorphine","IN","GS","4100" +"1819","Buprenorphine-containing product","PT","SNOMEDCT_US","31684002" +"1819","buprenorphine","IN","RXNORM","1819" +"1819","BUPRENORPHINE","IN","VANDF","4019644" +"1819","buprenorphine","IN","MMSL","27271" +"1819","BUPRENORPHINE","SU","MTHSPL","40D3SCR4GZ" +"1819","buprenorphine","SU","MTHSPL","40D3SCR4GZ" +"1819","buprenorphine","IN","NDDF","004632" +"1819","buprenorphine","IN","ATC","N02AE01" +"1819","buprenorphine","IN","ATC","N07BC01" +"1819","Buprenorphine","PT","SNOMEDCT_US","387173000" +"1819","buprenorphine","GN","MMSL","d00840" +"1819","Buprenorphine (substance)","FN","SNOMEDCT_US","387173000" +"1819","Buprenorphine","SU","MTHSPL","40D3SCR4GZ" +"1819","(-)-buprenorphine","SY","DRUGBANK","DB00921" +"1819","Buprenophine","SY","DRUGBANK","DB00921" +"1819","Buprenorphine","IN","DRUGBANK","DB00921" +"1819","Buprenorfina","FSY","DRUGBANK","DB00921" +"1819","Buprenorphinum","FSY","DRUGBANK","DB00921" +"1819","Buprenorphine","BN","MMSL","257949" +"1819","17-cyclopropylmethyl-4,5α-epoxy-7α-((S)-1-hydroxy-1,2,2-trimethylpropyl)-6-methoxy-6,14-endo-ethanomorphinan-3-ol","SY","DRUGBANK","DB00921" +"1819","2-(N-cyclopropylmethyl-4,5α-epoxy-3-hydroxy-6-methoxy-6,14-endo-ethanomorphinan-6α-yl)-3,3-dimethyl-2-butanol","SY","DRUGBANK","DB00921" +"1819","2-[3-cyclopropylmethyl-11-hydroxy-15-methoxy-(14R)-13-oxa-3-azahexacyclo[13.2.2.12,8.01,6.06,14.07,12]icosa-7,9,11-trien-16-yl]-3,3-dimethyl-2-butanol","SY","DRUGBANK","DB00921" +"1819","21-cyclopropyl-7α-[(S)-1-hydroxy-1,2,2-trimethylpropyl]-6,14-endo-ethano-6,7,8,14-tetrahydrooripavine","SY","DRUGBANK","DB00921" +"1819","Product containing buprenorphine (medicinal product)","FN","SNOMEDCT_US","31684002" +"3423","Hydromorphone","IN","GS","4316" +"3423","Hydromorphone","BN","MMSL","7015" +"3423","Hydromorphone","PT","SNOMEDCT_US","44508008" +"3423","Dihydromorphinone","SY","SNOMEDCT_US","387485001" +"3423","Hydromorphone (substance)","FN","SNOMEDCT_US","44508008" +"3423","(-)-(5R)-4,5-Epoxy-3-hydroxy-9α-methylmorphinan-6-one","SY","DRUGBANK","DB00327" +"3423","Hydromorphone-containing product","PT","SNOMEDCT_US","414428000" +"3423","hydromorphone","IN","RXNORM","3423" +"3423","HYDROMORPHONE","IN","VANDF","4019779" +"3423","HYDROmorphone","TMSY","RXNORM","3423" +"3423","HYDROmorphone","GN","MMSL","d00255" +"3423","hydromorphone","IN","ATC","N02AA03" +"3423","HYDROMORPHONE","SU","MTHSPL","Q812464R06" +"3423","Hydromorphone","SU","MTHSPL","Q812464R06" +"3423","hydromorphone","SU","MTHSPL","Q812464R06" +"3423","hydromorphone","IN","NDDF","004622" +"3423","6-Deoxy-7,8-dihydro-6-oxomorphine","SY","DRUGBANK","DB00327" +"3423","4,5-Epoxy-3-hydroxy-17-methylmorphinan-6-one","SY","DRUGBANK","DB00327" +"3423","Dihydromorphinone","SY","DRUGBANK","DB00327" +"3423","4,5alpha-Epoxy-3-hydroxy-17-methyl-6-morphinanone","SY","DRUGBANK","DB00327" +"3423","7,8-Dihydromorphinone","SY","DRUGBANK","DB00327" +"3423","Hydromorphone","IN","DRUGBANK","DB00327" +"3423","Dihydromorfinon","FSY","DRUGBANK","DB00327" +"3423","Hidromorfona","FSY","DRUGBANK","DB00327" +"3423","Hydromorfona","FSY","DRUGBANK","DB00327" +"352364","buprenorphine / naloxone","MIN", "RXNORM","352364" +"2111522","Butorphanol only product in parenteral dose form","PT","RXNORM","778584004" +"2111522","Product containing only butorphanol in parenteral dose form (medicinal product form)","FN","RXNORM","778584004" +"886627","Butorphanol tartrate 1 mg/mL solution for injection","PT","SNOMEDCT_US","785210007" +"886627","Product containing precisely butorphanol tartrate 1 milligram/1 milliliter conventional release solution for injection (clinical drug)","FN","SNOMEDCT_US","785210007" diff --git a/tests/test_data/valueset/rxnrel.csv b/tests/test_data/valueset/rxnrel.csv new file mode 100644 index 00000000..f68cec3c --- /dev/null +++ b/tests/test_data/valueset/rxnrel.csv @@ -0,0 +1,51 @@ +"rxcui1","rxaui1","stype1","rel","rxcui2","rxaui2","stype2","rela","rui","srui","sab","sl","rg" +"1819",,"CUI","RN","1818",,"CUI","reformulated_to","4716626",,"RXNORM",, +"1819",,"CUI","RN","203840",,"CUI","reformulated_to","4317610",,"RXNORM",, +"1819",,"CUI","RN","203841",,"CUI","form_of","3915073",,"RXNORM",, +"1819",,"CUI","RO","330801",,"CUI","has_ingredient","4730564",,"RXNORM",, +"1819",,"CUI","RO","332698",,"CUI","has_ingredient","3838481",,"RXNORM",, +"1819",,"CUI","RO","333623",,"CUI","has_ingredient","3863476",,"RXNORM",, +"1819",,"CUI","RO","352364",,"CUI","has_part","5842226",,"RXNORM",, +"1819",,"CUI","RN","352990",,"CUI","reformulated_to","5869348",,"RXNORM",, +"1819",,"CUI","RO","353390",,"CUI","has_ingredient","4727962",,"RXNORM",, +"1819",,"CUI","RO","353391",,"CUI","has_ingredient","3863514",,"RXNORM",, +"1819",,"CUI","RO","371161",,"CUI","has_ingredient","4163818",,"RXNORM",, +"1819",,"CUI","RO","378762",,"CUI","has_ingredient","3863477",,"RXNORM",, +"1819",,"CUI","RO","379112",,"CUI","has_ingredient","3863478",,"RXNORM",, +"1819",,"CUI","RO","393329",,"CUI","has_ingredient","3847757",,"RXNORM",, +"1819",,"CUI","RO","393330",,"CUI","has_ingredient","4248727",,"RXNORM",, +"1819",,"CUI","RO","393331",,"CUI","has_ingredient","3859617",,"RXNORM",, +"1819",,"CUI","RO","904869",,"CUI","has_ingredient","5012384",,"RXNORM",, +"1819",,"CUI","RN","904871",,"CUI","reformulated_to","3764389",,"RXNORM",, +"1819",,"CUI","RO","904875",,"CUI","has_ingredient","3764413",,"RXNORM",, +"1819",,"CUI","RO","904879",,"CUI","has_ingredient","5110638",,"RXNORM",, +"1819",,"CUI","RO","1151359",,"CUI","has_ingredient","18636093",,"RXNORM",, +"1819",,"CUI","RO","1151360",,"CUI","has_ingredient","18636094",,"RXNORM",, +"1819",,"CUI","RO","1151361",,"CUI","has_ingredient","18636095",,"RXNORM",, +"1819",,"CUI","RO","1151362",,"CUI","has_ingredient","18636096",,"RXNORM",, +"1819",,"CUI","RO","1151363",,"CUI","has_ingredient","18636097",,"RXNORM",, +"1819",,"CUI","RO","1151364",,"CUI","has_ingredient","18636098",,"RXNORM",, +"1819",,"CUI","RO","1294831",,"CUI","has_ingredient","30590282",,"RXNORM",, +"1819",,"CUI","RO","1295116",,"CUI","has_ingredient","30589192",,"RXNORM",, +"1819",,"CUI","RO","1295269",,"CUI","has_ingredient","30588899",,"RXNORM",, +"1819",,"CUI","RO","1307054",,"CUI","has_ingredient","31215770",,"RXNORM",, +"1819",,"CUI","RO","1307059",,"CUI","has_ingredient","31215814",,"RXNORM",, +"1819",,"CUI","RO","1431074",,"CUI","has_ingredient","43028467",,"RXNORM",, +"1819",,"CUI","RN","1431077",,"CUI","reformulated_to","43028489",,"RXNORM",, +"1819",,"CUI","RO","1431099",,"CUI","has_ingredient","43028551",,"RXNORM",, +"1819",,"CUI","RO","1432968",,"CUI","has_ingredient","43050951",,"RXNORM",, +"1819",,"CUI","RO","1488632",,"CUI","has_ingredient","49839675",,"RXNORM",, +"1819",,"CUI","RO","1488633",,"CUI","has_ingredient","49839679",,"RXNORM",, +"1819",,"CUI","RN","1488635",,"CUI","reformulated_to","49839693",,"RXNORM",, +"1819",,"CUI","RO","1542386",,"CUI","has_ingredient","56396132",,"RXNORM",, +"1819",,"CUI","RO","1542388",,"CUI","has_ingredient","56396136",,"RXNORM",, +"1819",,"CUI","RO","1542389",,"CUI","has_ingredient","56396142",,"RXNORM",, +"1819",,"CUI","RN","1542391",,"CUI","reformulated_to","56396168",,"RXNORM",, +"1819",,"CUI","RO","1542518",,"CUI","has_ingredient","56399502",,"RXNORM",, +"1819",,"CUI","RO","1542996",,"CUI","has_ingredient","56404338",,"RXNORM",, +"1819",,"CUI","RO","1544849",,"CUI","has_ingredient","56436466",,"RXNORM",, +"1819",,"CUI","RO","1594649",,"CUI","has_ingredient","78975796",,"RXNORM",, +"1819",,"CUI","RN","1594651",,"CUI","reformulated_to","78975806",,"RXNORM",, +"1819",,"CUI","RO","1597566",,"CUI","has_ingredient","79034686",,"RXNORM",, +"1819",,"CUI","RO","1597571",,"CUI","has_ingredient","79034732",,"RXNORM",, +"1819",,"CUI","RO","1655031",,"CUI","has_ingredient","86130850",,"RXNORM",, diff --git a/tests/test_data/valueset/rxnsty.csv b/tests/test_data/valueset/rxnsty.csv new file mode 100644 index 00000000..438d0737 --- /dev/null +++ b/tests/test_data/valueset/rxnsty.csv @@ -0,0 +1,51 @@ +"rxcui","tui","stn","sty","atui","cvf" +"1819","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"1819","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"3423","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"3423","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"4336","T121","A1.4.1.1.1","Pharmacologic Substance",, +"4336","T109","A1.4.1.2.1","Organic Chemical",, +"4337","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"4337","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"5489","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"5489","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"6378","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"6378","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"6468","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"6468","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"6754","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"6754","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"6813","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"6813","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"7052","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"7052","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"7238","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"7238","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"7804","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"7804","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"7814","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"7814","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"8001","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"8001","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"8002","T121","A1.4.1.1.1","Pharmacologic Substance",, +"8002","T109","A1.4.1.2.1","Organic Chemical",, +"10689","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"10689","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"30236","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"30236","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"82064","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"82064","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"106841","T200","A1.3.3","Clinical Drug",,"4096" +"142439","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"142439","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"151678","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"151678","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"152751","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"152751","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"200240","T200","A1.3.3","Clinical Drug",, +"202370","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"202370","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"203177","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"203177","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" +"203240","T109","A1.4.1.2.1","Organic Chemical",,"4096" +"203240","T121","A1.4.1.1.1","Pharmacologic Substance",,"4096" diff --git a/tests/test_data/valueset/static/filtered.csv b/tests/test_data/valueset/static/filtered.csv new file mode 100644 index 00000000..c598d85b --- /dev/null +++ b/tests/test_data/valueset/static/filtered.csv @@ -0,0 +1 @@ +val_2 \ No newline at end of file diff --git a/tests/test_data/valueset/static/manifest.toml b/tests/test_data/valueset/static/manifest.toml new file mode 100644 index 00000000..6ea797aa --- /dev/null +++ b/tests/test_data/valueset/static/manifest.toml @@ -0,0 +1 @@ +study_prefix = "test" \ No newline at end of file diff --git a/tests/test_data/valueset/static/static_table.csv b/tests/test_data/valueset/static/static_table.csv new file mode 100644 index 00000000..f2dc4783 --- /dev/null +++ b/tests/test_data/valueset/static/static_table.csv @@ -0,0 +1,3 @@ +header_1,header_2 +val_1,val_2 +val_3,val_4 \ No newline at end of file diff --git a/tests/test_data/valueset/tty.tsv b/tests/test_data/valueset/tty.tsv new file mode 100644 index 00000000..596b6760 --- /dev/null +++ b/tests/test_data/valueset/tty.tsv @@ -0,0 +1,243 @@ +TTY TTY_STR +AA Attribute type abbreviation +AB Abbreviation in any source vocabulary +ACR Acronym +AC Activities +AD Adjective +AM Short form of modifier +AS Attribute type synonym +AT Attribute type +BD Fully-specified drug brand name that can be prescribed +BN Fully-specified drug brand name that can not be prescribed +BPCK Branded Drug Delivery Device +BR Binding realm +CA2 ISO 3166-1 standard country code in alpha-2 (two-letter) format +CA3 ISO 3166-1 standard country code in alpha-3 (three-letter) format +CCN Chemical code name +CCS FIPS 10-4 country code +CC Trimmed ICPC component process +CDA Clinical drug name in abbreviated format +CDC Clinical drug name in concatenated format (NDDF) +CDD Clinical drug name in delimited format +CDO Concept domain +CD Clinical Drug +CE Entry term for a Supplementary Concept +CHN Chemical structure name +CL Class +CMN Common name +CN LOINC official component name +CO Component name (hierarchical terms, not LOINC analytes) +CPR Concept property +CP ICPC component process (in original form) +CR Concept relationship +CSN Chemical Structure Name +CSY Code system +CS Short component process in ICPC, i.e. include some abbreviations +CU Common usage +CV Content view +CX Component, with abbreviations expanded. +DC10 Diagnostic criteria for ICD10 code +DC9 Diagnostic criteria for ICD9 code +DEV Descriptor entry version +DE Descriptor +DFG Dose Form Group +DF Dose Form +DI Disease name +DN Display Name +DO Domain +DP Drug Product +DSV Descriptor sort version +DS Short form of descriptor +DT Definitional term +EP Print entry term +EQ Equivalent name +ES Short form of entry term +ETAL Entry Term Alias +ETCF Entry term, consumer friendly description +ETCLIN Entry term, clinician description +ET Entry term +EX Expanded form of entry term +FBD Foreign brand name +FI Finding name +FN Full form of descriptor +FSY Foreign Synonym +GLP Global period +GN Generic drug name +GO Goal +GPCK Generic Drug Delivery Device +GT Glossary term +HC Hierarchical class +HD Hierarchical descriptor +HGJKN1 Japanese High Level Group Term (kana1) +HGJKN Japanese High Level Group Term (kana) +HG High Level Group Term +HS Short or alternate version of hierarchical term +HTJKN1 Japanese Hierarchical term (kana1) +HTJKN Japanese Hierarchical term (kana) +HTN HL7 Table Name +HT Hierarchical term +HX Expanded version of short hierarchical term +ID Nursing indicator +IN Name for an ingredient +IS Obsolete Synonym +IT Index term +IVC Intervention categories +IV Intervention +LA LOINC answer +LC Long common name +LG LOINC group +LLTJKN1 Japanese Lower Level Term (kana1) +LLTJKN Japanese Lower Level Term (kana) +LLT Lower Level Term +LN LOINC official fully specified name +LO Obsolete official fully specified name +LPDN LOINC parts display name +LPN LOINC parts name +LS Expanded system/sample type +LVDN Linguistic variant display name +LV Lexical variant +MD CCS multi-level diagnosis categories +MH Main heading +MIN name for a multi-ingredient +MP Preferred names of modifiers +MS Multum names of branded and generic supplies or supplements +MTH_ACR MTH acronym +MTH_CN MTH Component, with abbreviations expanded. +MTH_ET Metathesaurus entry term +MTH_FN MTH Full form of descriptor +MTH_HG MTH High Level Group Term +MTH_HT MTH Hierarchical term +MTH_HX MTH Hierarchical term expanded +MTH_IS Metathesaurus-supplied form of obsolete synonym +MTH_LLT MTH Lower Level Term +MTH_LN MTH Official fully specified name with expanded abbreviations +MTH_LO MTH Expanded LOINC obsolete fully specified name +MTH_OAF Metathesaurus-supplied form of obsolete active fully specified name +MTH_OAP Metathesaurus-supplied form of obsolete active preferred term +MTH_OAS Metathesaurus-supplied form of obsolete active synonym +MTH_OET Metathesaurus obsolete entry term +MTH_OF Metathesaurus-supplied form of obsolete fully specified name +MTH_OL MTH Non-current Lower Level Term +MTH_OPN Metathesaurus obsolete preferred term, natural language form +MTH_OP Metathesaurus obsolete preferred term +MTH_OS MTH System-organ class +MTH_PTGB Metathesaurus-supplied form of British preferred term +MTH_PTN Metathesaurus preferred term, natural language form +MTH_PT Metathesaurus preferred term +MTH_RXN_BD RxNorm Created BD +MTH_RXN_CDC RxNorm Created CDC +MTH_RXN_CD RxNorm Created CD +MTH_RXN_DP RxNorm Created DP +MTH_SI MTH Sign or symptom of +MTH_SMQ Metathesaurus version of Standardised MedDRA Query +MTH_SYGB Metathesaurus-supplied form of British synonym +MTH_SY MTH Designated synonym +MV Multi-level procedure category +N1 Chemical Abstracts Service Type 1 name of a chemical +NA Name aliases +NM Name of Supplementary Concept +NPT HL7 non-preferred for language term +NP Non-preferred term +NS Short form of non-preferred term +NX Expanded form of non-preferred term +OAF Obsolete active fully specified name +OAM Obsolete Modifier Abbreviation +OAP Obsolete active preferred term +OAS Obsolete active synonym +OA Obsolete abbreviation +OC Nursing outcomes +OET Obsolete entry term +OF Obsolete fully specified name +OLC Obsolete Long common name +OLG Obsolete LOINC group name +OLJKN1 Japanese Non-current Lower Level Term (kana1) +OLJKN Japanese Non-current Lower Level Term (kana) +OL Non-current Lower Level Term +OM Obsolete modifiers in HCPCS +ONP Obsolete non-preferred for language term +OOSN Obsolete official short name +OPN Obsolete preferred term, natural language form +OP Obsolete preferred name +OR Orders +OSJKN1 Japanese System-organ class WHO Adverse Reaction Terminology (kana1) +OSJKN Japanese System-organ class WHO Adverse Reaction Terminology (kana) +OSN Official short name +OS System-organ class +PCE Preferred entry term for Supplementary Concept +PC Preferred "trimmed term" in ICPC +PEP Preferred entry term +PHENO_ET Phenotype entry term +PHENO Phenotype +PIN Name from a precise ingredient +PM Machine permutation +PN Metathesaurus preferred name +POS Place of service +PQ Qualifier for a problem +PR Name of a problem +PSC Protocol selection criteria +PSN Prescribable Names +PS Short forms that needed full specification +PTAV Preferred Allelic Variant +PTCS Preferred Clinical Synopsis +PTGB British preferred term +PTJKN1 Japanese Designated preferred name (kana1) +PTJKN Japanese Designated preferred name (kana) +PTN Preferred term, natural language form +PT Designated preferred name +PXQ Preferred qualifier term +PX Expanded preferred terms (pair with PS) +QAB Qualifier abbreviation +QEV Qualifier entry version +QSV Qualifier sort version +RAB Root abbreviation +RHT Root hierarchical term +RPT Root preferred term +RSY Root synonym +RS Extracted related names in SNOMED2 +RT Term is related to, but often non-synonymous with, the preferred term +RXN_IN Rxnorm Preferred Ingredient +RXN_PT Rxnorm Preferred +SBDC Semantic Branded Drug Component +SBDFP Semantic branded drug and form w/ precise ingredient as basis strength +SBDF Semantic branded drug and form +SBDG Semantic branded drug group +SBD Semantic branded drug +SB Named subset of a source +SCALE Scale +SCDC Semantic Drug Component +SCDFP Semantic clinical drug and form w/ precise ingredient as basis strength +SCDF Semantic clinical drug and form +SCDGP Semantic clinical drug group w/ precise ingredient as basis strength +SCDG Semantic clinical drug group +SCD Semantic Clinical Drug +SCN Scientific name +SC Special Category term +SD CCS diagnosis categories +SI Name of a sign or symptom of a problem +SMQ Standardised MedDRA Query +SP CCS procedure categories +SSN Source short name, used in the UMLS Knowledge Source Server +SS Synonymous "short" forms +ST Step +SU Active Substance +SX Mixed-case component synonym with expanded abbreviations +SYGB British synonym +SYN Designated alias +SY Designated synonym +TA Task +TC Term class +TG Name of the target of an intervention +TMSY Tall Man synonym +TQ Topical qualifier +TX CCPSS synthesized problems for TC termgroup +UCN Unique common name +UE Unique equivalent name +USN Unique scientific name +USY Unique synonym +VAB Versioned abbreviation +VPT Versioned preferred term +VSY Versioned synonym +VS Value Set +XD Expanded descriptor in AOD +XM Cross mapping set +XQ Alternate name for a qualifier \ No newline at end of file diff --git a/tests/test_data/valueset/umls_iteration/README.md b/tests/test_data/valueset/umls_iteration/README.md new file mode 100644 index 00000000..b3bb13d3 --- /dev/null +++ b/tests/test_data/valueset/umls_iteration/README.md @@ -0,0 +1,25 @@ +# Umls data mock structure + +All data is lightly massaged data from the relevant source tables. + +It is assumed that the query string for lookup is 'opioid' for system 'MED-RT' + +## mrconso.csv + +Lines 2-3 should be ignored due to having a different system +Line 4 should be found in the regex lookup, but have no related concepts +Line 5 should be found in the regex lookup, and have two related concepts +Lines 6-9 should be found in the tier 2 search +lines 10-13 should be found in the tier 3 search +Lines 14-16 should be found in the tier 4 search +Lines 17-19 should never be found, as an unrelated concept + +## mrrel.csv + +Lines 2-5 should be found in the tier 2, by matching + the cui found via word search (C2917209) to the cui1 field in this table. +Lines 6-9 should be found in the tier 3 expansion search, by looking up + all cui1 values that match a cui2 value in our tier 0 set that themselves + have a cui2 value that is not yet in the dataset +lines 10-11 should be found in the tier 4 search +Lines 12-13 are unrelated relations that should not be used. diff --git a/tests/test_data/valueset/umls_iteration/mrconso.csv b/tests/test_data/valueset/umls_iteration/mrconso.csv new file mode 100644 index 00000000..4a80204b --- /dev/null +++ b/tests/test_data/valueset/umls_iteration/mrconso.csv @@ -0,0 +1,17 @@ +"cui","lat","ts","lui","stt","sui","ispref","aui","saui","scui","sdui","sab","tty","code","str","srl","suppress","cvf" +"C0027410","ENG","S","L0280815","VC","S1427079","N","A1386737",,,,"AOD","NP","0000028697","opioid antagonists","0","N","256" +"C0029104","ENG","P","L0029104","PF","S0000069","Y","A2871948","144489015","87132004",,"SNOMEDCT_US","PT","87132004","Opioid withdrawal","9","N","2304" +"C2917209","ENG","S","L9417949","PF","S11705020","Y","A28936283",,"N0000175686",,"MED-RT","PT","N0000175686","Competitive Opioid Antagonists","0","N","256" +"C2917250","ENG","P","L9419107","PF","S11715984","N","A28935840",,"N0000175685",,"MED-RT","FN","N0000175685","Partial Opioid Agonists [MoA]","0","N","256" +"C0006405","ENG","P","L0006405","VC","S0021004","Y","A0033291",,"M0003054","D002047","MSH","MH","D002047","Buprenorphine","0","N","256" +"C0006405","ENG","P","L0006405","PF","S0415970","N","A0475154",,,"0092-7100","CSP","PT","0092-7100","buprenorphine","0","N","256" +"C0006491","ENG","P","L0006491","VC","S0021116","Y","A0033463",,"M0003094","D002077","MSH","MH","D002077","Butorphanol","0","N","256" +"C0006491","FRE","P","L3250087","PF","S3777707","Y","A7444404",,"M0003094","D002077","MSHFRE","MH","D002077","Butorphanol","3","N", +"C1169989","ENG","S","L14520330","PF","S18534481","Y","A30245081","3713634010","425741009",,"SNOMEDCT_US","PT","425741009","Buprenorphine- and naloxone-containing product","9","N", +"C1169989","ENG","P","L2490557","PF","S19687776","Y","A31743118","12352494","352364",,"RXNORM","MIN","352364","buprenorphine / naloxone","0","N","4352" +"C3205902","ENG","S","L15270638","PF","S18534596","Y","A30195028","3708906011","430388001",,"SNOMEDCT_US","PT","430388001","Butorphanol-containing product in parenteral dose form","9","N","256" +"C3205902","ENG","P","L10772381","PF","S19688224","Y","A31682217","12286144","1151379",,"RXNORM","SCDG","1151379","butorphanol Injectable Product","0","N","4352" +"C0000163","ENG","S","L0463825","PF","S18525864","Y","A30265729","3720809010","112116001",,"SNOMEDCT_US","SY","112116001","17-hydrocorticosteroid","9","N", +"C0010137","ENG","P","L0010137","VC","S0028449","N","A2880217","54267010","32498003",,"SNOMEDCT_US","PT","32498003","Cortisone","9","N","256" +"C0010139","ENG","P","L0010139","PF","S0028451","N","A32620305","196231013","22941009",,"SNOMEDCT_US","PT","22941009","Cortodoxone","9","N","256" +"C0006405","ENG","P","L0006405","VC","S0021004","Y","A0033291",,"M0003054","D002047","MSH","invalid","D002047","Buprenorphine","0","N","256" diff --git a/tests/test_data/valueset/umls_iteration/mrconso_drugs.csv b/tests/test_data/valueset/umls_iteration/mrconso_drugs.csv new file mode 100644 index 00000000..2c42c988 --- /dev/null +++ b/tests/test_data/valueset/umls_iteration/mrconso_drugs.csv @@ -0,0 +1,18 @@ +"cui","lat","ts","lui","stt","sui","ispref","aui","saui","scui","sdui","sab","tty","code","str","srl","suppress","cvf" +"C0027410","ENG","S","L0280815","VC","S1427079","N","A1386737",,,,"AOD","NP","0000028697","opioid antagonists","0","N","256" +"C0029104","ENG","P","L0029104","PF","S0000069","Y","A2871948","144489015","87132004",,"SNOMEDCT_US","PT","87132004","Opioid withdrawal","9","N","2304" +"C2917209","ENG","S","L9417949","PF","S11705020","Y","A28936283",,"N0000175686",,"MED-RT","PT","N0000175686","Competitive Opioid Antagonists","0","N","256" +"C2917250","ENG","P","L9419107","PF","S11715984","N","A28935840",,"N0000175685",,"MED-RT","FN","N0000175685","Partial Opioid Agonists [MoA]","0","N","256" +"C0006405","ENG","P","L0006405","VC","S0021004","Y","A0033291",,"M0003054","D002047","MSH","MH","D002047","Buprenorphine","0","N","256" +"C0006405","ENG","P","L0006405","PF","S0415970","N","A0475154",,,"0092-7100","CSP","PT","0092-7100","buprenorphine","0","N","256" +"C0006491","ENG","P","L0006491","VC","S0021116","Y","A0033463",,"M0003094","D002077","MSH","MH","D002077","Butorphanol","0","N","256" +"C0006491","FRE","P","L3250087","PF","S3777707","Y","A7444404",,"M0003094","D002077","MSHFRE","MH","D002077","Butorphanol","3","N", +"C1169989","ENG","S","L14520330","PF","S18534481","Y","A30245081","3713634010","425741009",,"SNOMEDCT_US","PT","425741009","Buprenorphine- and naloxone-containing product","9","N", +"C1169989","ENG","P","L2490557","PF","S19687776","Y","A31743118","12352494","352364",,"RXNORM","MIN","352364","buprenorphine / naloxone","0","N","4352" +"C3205902","ENG","S","L15270638","PF","S18534596","Y","A30195028","3708906011","430388001",,"SNOMEDCT_US","PT","430388001","Butorphanol-containing product in parenteral dose form","9","N","256" +"C3205902","ENG","P","L10772381","PF","S19688224","Y","A31682217","12286144","1151379",,"RXNORM","SCDG","1151379","butorphanol Injectable Product","0","N","4352" +"C4755717","ENG","P","L15258331","PF","S18534593","Y","A30198235","3738748014","778584004",,"SNOMEDCT_US","PT","778584004","Butorphanol only product in parenteral dose form","9","N","256" +"C0774321","ENG","S","L10143387","PF","S19243214","Y","A31074124","3766393017","785210007",,"SNOMEDCT_US","PT","785210007","Butorphanol tartrate 1 mg/mL solution for injection","9","N","256" +"C0000163","ENG","S","L0463825","PF","S18525864","Y","A30265729","3720809010","112116001",,"SNOMEDCT_US","SY","112116001","17-hydrocorticosteroid","9","N", +"C0010137","ENG","P","L0010137","VC","S0028449","N","A2880217","54267010","32498003",,"SNOMEDCT_US","PT","32498003","Cortisone","9","N","256" +"C0010139","ENG","P","L0010139","PF","S0028451","N","A32620305","196231013","22941009",,"SNOMEDCT_US","PT","22941009","Cortodoxone","9","N","256" \ No newline at end of file diff --git a/tests/test_data/valueset/umls_iteration/mrrel_is_a.csv b/tests/test_data/valueset/umls_iteration/mrrel_is_a.csv new file mode 100644 index 00000000..90a9e7ff --- /dev/null +++ b/tests/test_data/valueset/umls_iteration/mrrel_is_a.csv @@ -0,0 +1,14 @@ +"cui1","aui1","stype1","rel","cui2","aui2","stype2","rela","rui","srui","sab","sl","rg","dir","suppress","cvf" +"C2917209","A0090206","SDUI","RN","C0006405","A0033291","SDUI","isa","R28256944",,"MSH","MSH",,,"N", +"C2917209","A0319515","AUI","CHD","C0006405","A0475154","AUI",,"R05659790",,"CSP","CSP",,,"N", +"C2917209","A0090206","SDUI","RN","C0006491","A0033463","SDUI","isa","R28256945",,"MSH","MSH",,,"N", +"C2917209","A11393532","SDUI","RN","C0006491","A7444404","SDUI","isa","R86025739",,"MSHFRE","MSHFRE",,,"N", +"C0006405","A30255207","SCUI","CHD","C1169989","A30245081","SCUI","isa","R71508556","3176170024","SNOMEDCT_US","SNOMEDCT_US",,"Y","N", +"C0006405","A31756483","SCUI","RO","C1169989","A31743118","SCUI","has_part","R119272820",,"RXNORM","RXNORM",,,"N", +"C0006491","A30265010","SCUI","CHD","C3205902","A30195028","SCUI","isa","R98311970","3271281025","SNOMEDCT_US","SNOMEDCT_US",,"Y","N", +"C0006491","A31704345","SCUI","RO","C3205902","A31682217","SCUI","has_ingredient","R129779640",,"RXNORM","RXNORM",,,"N", +"C3205902","A30195028","SCUI","CHD","C4755717","A30198235","SCUI","isa","R182753360","10719551029","SNOMEDCT_US","SNOMEDCT_US",,"Y","N", +"C3205902","A31682217","SCUI","RN","C0774321","A31731711","SCUI","isa","R129618130",,"RXNORM","RXNORM",,,"N", +"C0000163","A30245864","SCUI","CHD","C0010137","A2880217","SCUI","isa","R49764093","2841710024","SNOMEDCT_US","SNOMEDCT_US",,"Y","N", +"C0000163","A30245864","SCUI","CHD","C0010139","A32620305","SCUI","isa","R19811980","185430026","SNOMEDCT_US","SNOMEDCT_US",,"Y","N", + diff --git a/tests/test_data/valueset/valueset.toml b/tests/test_data/valueset/valueset.toml new file mode 100644 index 00000000..fe78505e --- /dev/null +++ b/tests/test_data/valueset/valueset.toml @@ -0,0 +1,12 @@ +config_type = "valueset" +keyword_file= "keywords.tsv" + +[vsac_stewards] +acep ="2.16.840.1.113762.1.4.1106.68" + +[umls_stewards.medrt] +sab="MED-RT" +search_terms=["Opioid"] +[umls_stewards.nonmedrt] +sab="MED-RT" +search_terms=["Benzodiazepine", "Barbiturate", "Nonsteroidal Anti-inflammatory Drug"] \ No newline at end of file diff --git a/tests/test_data/valueset/vsac_resp.json b/tests/test_data/valueset/vsac_resp.json new file mode 100644 index 00000000..0d6500cd --- /dev/null +++ b/tests/test_data/valueset/vsac_resp.json @@ -0,0 +1,5069 @@ +[ + { + "resourceType": "ValueSet", + "id": "2.16.840.1.113762.1.4.1106.68", + "meta": { + "versionId": "9", + "lastUpdated": "2023-12-21T17:43:03.000-05:00", + "profile": [ + "http://hl7.org/fhir/StructureDefinition/shareablevalueset", + "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/computable-valueset-cqfm", + "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/publishable-valueset-cqfm" + ] + }, + "extension": [ + { + "url": "http://hl7.org/fhir/StructureDefinition/valueset-effectiveDate", + "valueDate": "2020-12-31" + } + ], + "url": "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1106.68", + "identifier": [ + { + "system": "urn:ietf:rfc:3986", + "value": "urn:oid:2.16.840.1.113762.1.4.1106.68" + } + ], + "version": "20201231", + "name": "OpioidMeds", + "title": "Opioid Meds", + "status": "retired", + "experimental": false, + "date": "2020-12-31T01:00:46-05:00", + "publisher": "ACEP/AMA-PCPI Steward", + "expansion": { + "identifier": "urn:uuid:5df0f441-a11c-4768-9278-3f0aae4b9e7d", + "timestamp": "2024-07-26T10:02:13-04:00", + "total": 836, + "offset": 0, + "parameter": [ + { + "name": "count", + "valueInteger": 1000 + }, + { + "name": "offset", + "valueInteger": 0 + } + ], + "contains": [ + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1010600", + "display": "buprenorphine 2 MG / naloxone 0.5 MG Sublingual Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1010601", + "display": "buprenorphine 2 MG / naloxone 0.5 MG [Suboxone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1010603", + "display": "buprenorphine 2 MG / naloxone 0.5 MG Sublingual Film [Suboxone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1010604", + "display": "buprenorphine 8 MG / naloxone 2 MG Sublingual Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1010605", + "display": "buprenorphine 8 MG / naloxone 2 MG [Suboxone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1010606", + "display": "buprenorphine 8 MG / naloxone 2 MG Sublingual Film [Suboxone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1044427", + "display": "acetaminophen 20 MG/ML / hydrocodone bitartrate 0.667 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049503", + "display": "oxycodone hydrochloride 10 MG [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049504", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 10 MG Extended Release Oral Tablet [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049544", + "display": "oxycodone hydrochloride 15 MG [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049545", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 15 MG Extended Release Oral Tablet [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049564", + "display": "oxycodone hydrochloride 20 MG [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049565", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 20 MG Extended Release Oral Tablet [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049575", + "display": "oxycodone hydrochloride 30 MG [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049576", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 30 MG Extended Release Oral Tablet [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049585", + "display": "oxycodone hydrochloride 40 MG [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049586", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 40 MG Extended Release Oral Tablet [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049589", + "display": "ibuprofen 400 MG / oxycodone hydrochloride 5 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049594", + "display": "oxycodone hydrochloride 60 MG [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049595", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 60 MG Extended Release Oral Tablet [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049600", + "display": "oxycodone hydrochloride 80 MG [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1049601", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 80 MG Extended Release Oral Tablet [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053648", + "display": "Abstral" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053649", + "display": "fentanyl 0.1 MG [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053650", + "display": "fentanyl Sublingual Tablet [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053651", + "display": "fentanyl 0.1 MG Sublingual Tablet [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053653", + "display": "fentanyl 0.2 MG [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053654", + "display": "fentanyl 0.2 MG Sublingual Tablet [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053656", + "display": "fentanyl 0.3 MG [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053657", + "display": "fentanyl 0.3 MG Sublingual Tablet [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053659", + "display": "fentanyl 0.4 MG [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053660", + "display": "fentanyl 0.4 MG Sublingual Tablet [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053662", + "display": "fentanyl 0.6 MG [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053663", + "display": "fentanyl 0.6 MG Sublingual Tablet [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053665", + "display": "fentanyl 0.8 MG [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1053666", + "display": "fentanyl 0.8 MG Sublingual Tablet [Abstral]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "106841", + "display": "morphine Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "10689", + "display": "tramadol" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1087427", + "display": "12 HR chlorpheniramine polistirex 8 MG / hydrocodone polistirex 10 MG Extended Release Oral Capsule [TussiCaps]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1087459", + "display": "12 HR chlorpheniramine polistirex 1.6 MG/ML / hydrocodone polistirex 2 MG/ML Extended Release Suspension" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1087462", + "display": "chlorpheniramine / hydrocodone Extended Release Suspension [Tussionex]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1087463", + "display": "12 HR chlorpheniramine polistirex 1.6 MG/ML / hydrocodone polistirex 2 MG/ML Extended Release Suspension [Tussionex]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1112220", + "display": "chlorpheniramine maleate 0.8 MG/ML / hydrocodone bitartrate 1 MG/ML / pseudoephedrine hydrochloride 12 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1144866", + "display": "hydrocodone polistirex 10 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1145789", + "display": "hydrocodone polistirex 2 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1148796", + "display": "tapentadol Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1148797", + "display": "12 HR tapentadol 100 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1148800", + "display": "12 HR tapentadol 150 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1148803", + "display": "12 HR tapentadol 200 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1148807", + "display": "12 HR tapentadol 250 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1148809", + "display": "12 HR tapentadol 50 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1149366", + "display": "tapentadol Extended Release Oral Tablet [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1149367", + "display": "12 HR tapentadol 100 MG Extended Release Oral Tablet [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1149369", + "display": "tapentadol 150 MG [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1149370", + "display": "12 HR tapentadol 150 MG Extended Release Oral Tablet [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1149372", + "display": "tapentadol 200 MG [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1149373", + "display": "12 HR tapentadol 200 MG Extended Release Oral Tablet [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1149375", + "display": "tapentadol 250 MG [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1149376", + "display": "12 HR tapentadol 250 MG Extended Release Oral Tablet [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1149378", + "display": "12 HR tapentadol 50 MG Extended Release Oral Tablet [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1151359", + "display": "buprenorphine / naloxone Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1151360", + "display": "buprenorphine / naloxone Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1151361", + "display": "buprenorphine Injectable Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1151362", + "display": "buprenorphine Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1151363", + "display": "buprenorphine Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1151364", + "display": "buprenorphine Topical Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1151548", + "display": "acetaminophen / hydrocodone Oral Liquid Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1151549", + "display": "acetaminophen / hydrocodone Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1151550", + "display": "acetaminophen / hydrocodone Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1154503", + "display": "chlorpheniramine / hydrocodone / pseudoephedrine Oral Liquid Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1154504", + "display": "chlorpheniramine / hydrocodone / pseudoephedrine Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1154770", + "display": "chlorpheniramine / hydrocodone Oral Liquid Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1154771", + "display": "chlorpheniramine / hydrocodone Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1154772", + "display": "chlorpheniramine / hydrocodone Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1156360", + "display": "morphine Injectable Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1156362", + "display": "morphine Oral Liquid Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1156363", + "display": "morphine Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1156364", + "display": "morphine Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1156365", + "display": "morphine Rectal Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1158557", + "display": "guaifenesin / hydrocodone / pseudoephedrine Oral Liquid Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1158558", + "display": "guaifenesin / hydrocodone / pseudoephedrine Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1158562", + "display": "guaifenesin / hydrocodone Oral Liquid Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1158563", + "display": "guaifenesin / hydrocodone Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1159519", + "display": "homatropine / hydrocodone Oral Liquid Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1159520", + "display": "homatropine / hydrocodone Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1159521", + "display": "homatropine / hydrocodone Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1161619", + "display": "methadone Injectable Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1161620", + "display": "methadone Oral Liquid Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1161621", + "display": "methadone Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1161622", + "display": "methadone Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1162252", + "display": "oxymorphone Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1162253", + "display": "oxymorphone Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1162788", + "display": "hydrocodone / ibuprofen Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1162789", + "display": "hydrocodone / ibuprofen Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1162801", + "display": "hydrocodone / pseudoephedrine Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1162802", + "display": "hydrocodone / pseudoephedrine Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1163405", + "display": "hydrocodone Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1163406", + "display": "hydrocodone Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1164618", + "display": "hydromorphone Injectable Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1164619", + "display": "hydromorphone Oral Liquid Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1164620", + "display": "hydromorphone Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1164621", + "display": "hydromorphone Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1164622", + "display": "hydromorphone Rectal Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1165305", + "display": "ibuprofen / oxycodone Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1165306", + "display": "ibuprofen / oxycodone Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1165401", + "display": "morphine / naltrexone Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1165402", + "display": "morphine / naltrexone Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1165961", + "display": "Abstral Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1165962", + "display": "Abstral Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1168053", + "display": "BuTrans Topical Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1168205", + "display": "Duragesic Topical Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1168222", + "display": "Duramorph Injectable Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1168543", + "display": "Kadian Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1168544", + "display": "Kadian Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1168868", + "display": "Dilaudid Injectable Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1168869", + "display": "Dilaudid Oral Liquid Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1168870", + "display": "Dilaudid Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1168871", + "display": "Dilaudid Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1172176", + "display": "Astramorph Injectable Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1172763", + "display": "Infumorph Injectable Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1174574", + "display": "Dolophine Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1174575", + "display": "Dolophine Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1177023", + "display": "Oxycontin Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1177024", + "display": "Oxycontin Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1178796", + "display": "Nucynta Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1178797", + "display": "Nucynta Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1184943", + "display": "MS Contin Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1184944", + "display": "MS Contin Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1185658", + "display": "Methadose Oral Liquid Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1185659", + "display": "Methadose Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1185660", + "display": "Methadose Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1294831", + "display": "buprenorphine / naloxone Sublingual Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1295116", + "display": "buprenorphine Sublingual Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1295269", + "display": "buprenorphine Transdermal Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1296074", + "display": "Abstral Sublingual Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1296477", + "display": "BuTrans Transdermal Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1296815", + "display": "Duragesic Transdermal Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1303735", + "display": "morphine sulfate 40 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1303736", + "display": "morphine sulfate 40 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1306898", + "display": "24 HR hydromorphone hydrochloride 32 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1307054", + "display": "buprenorphine 4 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1307056", + "display": "buprenorphine 4 MG / naloxone 1 MG Sublingual Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1307057", + "display": "buprenorphine 4 MG / naloxone 1 MG [Suboxone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1307058", + "display": "buprenorphine 4 MG / naloxone 1 MG Sublingual Film [Suboxone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1307059", + "display": "buprenorphine 12 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1307061", + "display": "buprenorphine 12 MG / naloxone 3 MG Sublingual Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1307062", + "display": "buprenorphine 12 MG / naloxone 3 MG [Suboxone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1307063", + "display": "buprenorphine 12 MG / naloxone 3 MG Sublingual Film [Suboxone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1307713", + "display": "Kalopanax septemlobus bark extract" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1366873", + "display": "hydrocodone bitartrate 5 MG / pseudoephedrine hydrochloride 60 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1366874", + "display": "hydrocodone bitartrate 5 MG / pseudoephedrine hydrochloride 60 MG [P-V-Tussin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1366875", + "display": "hydrocodone bitartrate 5 MG / pseudoephedrine hydrochloride 60 MG Oral Tablet [P-V-Tussin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "142439", + "display": "hydrocodone bitartrate" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431074", + "display": "buprenorphine 1.4 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431076", + "display": "buprenorphine 1.4 MG / naloxone 0.36 MG Sublingual Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431077", + "display": "Zubsolv" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431078", + "display": "buprenorphine 1.4 MG / naloxone 0.36 MG [Zubsolv]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431079", + "display": "buprenorphine / naloxone Sublingual Tablet [Zubsolv]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431080", + "display": "Zubsolv Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431081", + "display": "Zubsolv Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431082", + "display": "Zubsolv Sublingual Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431083", + "display": "buprenorphine 1.4 MG / naloxone 0.36 MG Sublingual Tablet [Zubsolv]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431099", + "display": "buprenorphine 5.7 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431102", + "display": "buprenorphine 5.7 MG / naloxone 1.4 MG Sublingual Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431103", + "display": "buprenorphine 5.7 MG / naloxone 1.4 MG [Zubsolv]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1431104", + "display": "buprenorphine 5.7 MG / naloxone 1.4 MG Sublingual Tablet [Zubsolv]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1432968", + "display": "buprenorphine 0.015 MG/HR" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1432969", + "display": "168 HR buprenorphine 0.015 MG/HR Transdermal System" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1432970", + "display": "buprenorphine 0.015 MG/HR [BuTrans]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1432971", + "display": "168 HR buprenorphine 0.015 MG/HR Transdermal System [BuTrans]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1433251", + "display": "0.5 ML hydromorphone hydrochloride 1 MG/ML Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442444", + "display": "acetaminophen 20 MG/ML / hydrocodone bitartrate 0.667 MG/ML [Lortab]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442445", + "display": "acetaminophen 20 MG/ML / hydrocodone bitartrate 0.667 MG/ML Oral Solution [Lortab]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442521", + "display": "hydrocodone Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442524", + "display": "hydrocodone bitartrate 10 MG [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442525", + "display": "hydrocodone Extended Release Oral Capsule [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442529", + "display": "hydrocodone bitartrate 15 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442531", + "display": "hydrocodone bitartrate 15 MG [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442533", + "display": "hydrocodone bitartrate 20 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442535", + "display": "hydrocodone bitartrate 20 MG [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442537", + "display": "hydrocodone bitartrate 30 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442539", + "display": "hydrocodone bitartrate 30 MG [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442541", + "display": "hydrocodone bitartrate 40 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442543", + "display": "hydrocodone bitartrate 40 MG [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442545", + "display": "hydrocodone bitartrate 50 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442547", + "display": "hydrocodone bitartrate 50 MG [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1442790", + "display": "1 ML morphine sulfate 5 MG/ML Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1488835", + "display": "chlorpheniramine polistirex 8 MG / hydrocodone polistirex 10 MG [TussiCaps]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1489775", + "display": "chlorpheniramine polistirex 1.6 MG/ML / hydrocodone polistirex 2 MG/ML [Tussionex]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1492672", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 5 MG [Lorcet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1492673", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 5 MG Oral Tablet [Lorcet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1495471", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 10 MG [Lortab]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1495472", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 10 MG Oral Tablet [Lortab]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1495473", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 5 MG [Lortab]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1495474", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 5 MG Oral Tablet [Lortab]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1495475", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 7.5 MG [Lortab]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1495476", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 7.5 MG Oral Tablet [Lortab]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "151678", + "display": "Duragesic" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "152751", + "display": "Methadose" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542386", + "display": "buprenorphine 2.1 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542388", + "display": "buprenorphine / naloxone Buccal Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542389", + "display": "buprenorphine / naloxone Buccal Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542390", + "display": "buprenorphine 2.1 MG / naloxone 0.3 MG Buccal Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542391", + "display": "Bunavail" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542392", + "display": "buprenorphine 2.1 MG / naloxone 0.3 MG [Bunavail]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542393", + "display": "buprenorphine / naloxone Buccal Film [Bunavail]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542394", + "display": "Bunavail Buccal Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542395", + "display": "Bunavail Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542396", + "display": "buprenorphine 2.1 MG / naloxone 0.3 MG Buccal Film [Bunavail]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542518", + "display": "buprenorphine 6.3 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542977", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 2.5 MG [Verdrocet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542978", + "display": "acetaminophen / hydrocodone Oral Tablet [Verdrocet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542981", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 2.5 MG Oral Tablet [Verdrocet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542984", + "display": "hydrocodone bitartrate 10 MG / ibuprofen 200 MG [Xylon]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542985", + "display": "hydrocodone / ibuprofen Oral Tablet [Xylon]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542988", + "display": "hydrocodone bitartrate 10 MG / ibuprofen 200 MG Oral Tablet [Xylon]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542996", + "display": "buprenorphine 0.0075 MG/HR" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542997", + "display": "168 HR buprenorphine 0.0075 MG/HR Transdermal System" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542998", + "display": "buprenorphine 0.0075 MG/HR [BuTrans]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1542999", + "display": "168 HR buprenorphine 0.0075 MG/HR Transdermal System [BuTrans]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1544849", + "display": "buprenorphine 4.2 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595729", + "display": "hydrocodone Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595730", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 20 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595731", + "display": "Hysingla" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595733", + "display": "hydrocodone Extended Release Oral Tablet [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595734", + "display": "Hysingla Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595735", + "display": "Hysingla Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595736", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 20 MG Extended Release Oral Tablet [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595740", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 30 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595742", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 30 MG Extended Release Oral Tablet [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595746", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 40 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595748", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 40 MG Extended Release Oral Tablet [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595752", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 60 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595754", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 60 MG Extended Release Oral Tablet [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595758", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 80 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595760", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 80 MG Extended Release Oral Tablet [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595764", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 100 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595766", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 100 MG Extended Release Oral Tablet [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595770", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 120 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1595772", + "display": "Abuse-Deterrent 24 HR hydrocodone bitartrate 120 MG Extended Release Oral Tablet [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1597566", + "display": "buprenorphine 11.4 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1597568", + "display": "buprenorphine 11.4 MG / naloxone 2.9 MG Sublingual Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1597569", + "display": "buprenorphine 11.4 MG / naloxone 2.9 MG [Zubsolv]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1597570", + "display": "buprenorphine 11.4 MG / naloxone 2.9 MG Sublingual Tablet [Zubsolv]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1597571", + "display": "buprenorphine 8.6 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1597573", + "display": "buprenorphine 8.6 MG / naloxone 2.1 MG Sublingual Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1597574", + "display": "buprenorphine 8.6 MG / naloxone 2.1 MG [Zubsolv]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1597575", + "display": "buprenorphine 8.6 MG / naloxone 2.1 MG Sublingual Tablet [Zubsolv]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1598280", + "display": "guaifenesin 40 MG/ML / hydrocodone bitartrate 0.5 MG/ML [Obredon]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1598281", + "display": "guaifenesin / hydrocodone Oral Solution [Obredon]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1598284", + "display": "guaifenesin 40 MG/ML / hydrocodone bitartrate 0.5 MG/ML Oral Solution [Obredon]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1651558", + "display": "guaifenesin 40 MG/ML / hydrocodone bitartrate 0.5 MG/ML / pseudoephedrine hydrochloride 6 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1651561", + "display": "guaifenesin / hydrocodone / pseudoephedrine Oral Solution [Hycofenix]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1651564", + "display": "guaifenesin 40 MG/ML / hydrocodone bitartrate 0.5 MG/ML / pseudoephedrine hydrochloride 6 MG/ML Oral Solution [Hycofenix]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1655031", + "display": "buprenorphine Cartridge" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1655032", + "display": "1 ML buprenorphine 0.3 MG/ML Cartridge" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1666336", + "display": "buprenorphine 2.9 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716054", + "display": "buprenorphine 0.15 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716055", + "display": "buprenorphine Buccal Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716056", + "display": "buprenorphine Buccal Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716057", + "display": "buprenorphine 0.15 MG Buccal Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716058", + "display": "Belbuca" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716059", + "display": "buprenorphine 0.15 MG [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716060", + "display": "buprenorphine Buccal Film [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716061", + "display": "Belbuca Buccal Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716062", + "display": "Belbuca Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716063", + "display": "buprenorphine 0.15 MG Buccal Film [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716064", + "display": "buprenorphine 0.3 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716065", + "display": "buprenorphine 0.3 MG Buccal Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716066", + "display": "buprenorphine 0.3 MG [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716067", + "display": "buprenorphine 0.3 MG Buccal Film [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716068", + "display": "buprenorphine 0.45 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716069", + "display": "buprenorphine 0.45 MG Buccal Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716070", + "display": "buprenorphine 0.45 MG [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716071", + "display": "buprenorphine 0.45 MG Buccal Film [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716072", + "display": "buprenorphine 0.6 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716073", + "display": "buprenorphine 0.6 MG Buccal Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716074", + "display": "buprenorphine 0.6 MG [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716075", + "display": "buprenorphine 0.6 MG Buccal Film [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716076", + "display": "buprenorphine 0.075 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716077", + "display": "buprenorphine 0.075 MG Buccal Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716078", + "display": "buprenorphine 0.075 MG [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716079", + "display": "buprenorphine 0.075 MG Buccal Film [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716080", + "display": "buprenorphine 0.75 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716081", + "display": "buprenorphine 0.75 MG Buccal Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716082", + "display": "buprenorphine 0.75 MG [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716083", + "display": "buprenorphine 0.75 MG Buccal Film [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716084", + "display": "buprenorphine 0.9 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716086", + "display": "buprenorphine 0.9 MG Buccal Film" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716087", + "display": "buprenorphine 0.9 MG [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1716090", + "display": "buprenorphine 0.9 MG Buccal Film [Belbuca]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1724190", + "display": "hydromorphone Cartridge" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1724207", + "display": "hydromorphone Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1724276", + "display": "1 ML hydromorphone hydrochloride 2 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1724338", + "display": "1 ML hydromorphone hydrochloride 10 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1724340", + "display": "5 ML hydromorphone hydrochloride 10 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1724341", + "display": "50 ML hydromorphone hydrochloride 10 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1724383", + "display": "1 ML hydromorphone hydrochloride 1 MG/ML Cartridge" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1724644", + "display": "1 ML hydromorphone hydrochloride 2 MG/ML Cartridge" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1728776", + "display": "morphine Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1728779", + "display": "morphine Injection [Astramorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1728783", + "display": "10 ML morphine sulfate 0.5 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1728791", + "display": "2 ML morphine sulfate 0.5 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1728794", + "display": "morphine Injection [Duramorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1728800", + "display": "10 ML morphine sulfate 1 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1728805", + "display": "2 ML morphine sulfate 1 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1728999", + "display": "30 ML morphine sulfate 1 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1729196", + "display": "morphine Cartridge" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1729197", + "display": "1 ML morphine sulfate 2 MG/ML Cartridge" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1729358", + "display": "buprenorphine Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1729360", + "display": "buprenorphine Injection [Buprenex]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1731520", + "display": "4 ML morphine sulfate 25 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1731522", + "display": "20 ML morphine sulfate 25 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1731523", + "display": "morphine Injection [Infumorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1731537", + "display": "20 ML morphine sulfate 50 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1731545", + "display": "50 ML morphine sulfate 50 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1731577", + "display": "morphine Auto-Injector" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1731990", + "display": "1.5 ML morphine sulfate liposomal 10 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1731993", + "display": "1 ML morphine sulfate 10 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1731995", + "display": "1 ML morphine sulfate 10 MG/ML Cartridge" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1731998", + "display": "20 ML morphine sulfate 10 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1731999", + "display": "20 ML morphine sulfate 10 MG/ML Injection [Infumorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1732003", + "display": "1 ML morphine sulfate 8 MG/ML Cartridge" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1732006", + "display": "1 ML morphine sulfate 4 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1732011", + "display": "1 ML morphine sulfate 8 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1732014", + "display": "1 ML morphine sulfate 4 MG/ML Cartridge" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1732136", + "display": "1 ML morphine sulfate 5 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1732138", + "display": "30 ML morphine sulfate 5 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1733080", + "display": "1 ML morphine sulfate 15 MG/ML Cartridge" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1790525", + "display": "oxycodone 9 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1790526", + "display": "oxycodone Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1790527", + "display": "Abuse-Deterrent 12 HR oxycodone 9 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1790528", + "display": "Xtampza" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1790529", + "display": "oxycodone 9 MG [Xtampza]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1790530", + "display": "oxycodone Extended Release Oral Capsule [Xtampza]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1790531", + "display": "Xtampza Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1790532", + "display": "Xtampza Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1790533", + "display": "Abuse-Deterrent 12 HR oxycodone 9 MG Extended Release Oral Capsule [Xtampza]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791557", + "display": "oxycodone 13.5 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791558", + "display": "Abuse-Deterrent 12 HR oxycodone 13.5 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791559", + "display": "oxycodone 13.5 MG [Xtampza]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791560", + "display": "Abuse-Deterrent 12 HR oxycodone 13.5 MG Extended Release Oral Capsule [Xtampza]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791566", + "display": "oxycodone 18 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791567", + "display": "Abuse-Deterrent 12 HR oxycodone 18 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791568", + "display": "oxycodone 18 MG [Xtampza]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791569", + "display": "Abuse-Deterrent 12 HR oxycodone 18 MG Extended Release Oral Capsule [Xtampza]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791573", + "display": "oxycodone 27 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791574", + "display": "Abuse-Deterrent 12 HR oxycodone 27 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791575", + "display": "oxycodone 27 MG [Xtampza]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791576", + "display": "Abuse-Deterrent 12 HR oxycodone 27 MG Extended Release Oral Capsule [Xtampza]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791579", + "display": "oxycodone 36 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791580", + "display": "Abuse-Deterrent 12 HR oxycodone 36 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791581", + "display": "oxycodone 36 MG [Xtampza]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1791582", + "display": "Abuse-Deterrent 12 HR oxycodone 36 MG Extended Release Oral Capsule [Xtampza]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1792707", + "display": "codeine phosphate 2 MG/ML / guaifenesin 40 MG/ML / pseudoephedrine hydrochloride 6 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1794884", + "display": "guaifenesin 40 MG/ML / hydrocodone bitartrate 0.5 MG/ML / pseudoephedrine hydrochloride 6 MG/ML [Hycofenix]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1797647", + "display": "buprenorphine 74.2 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1797648", + "display": "buprenorphine Drug Implant Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1797649", + "display": "buprenorphine Drug Implant" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1797650", + "display": "buprenorphine 74.2 MG Drug Implant" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1797651", + "display": "Probuphine" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1797652", + "display": "buprenorphine 74.2 MG [Probuphine]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1797653", + "display": "buprenorphine Drug Implant [Probuphine]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1797654", + "display": "Probuphine Drug Implant Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1797655", + "display": "buprenorphine 74.2 MG Drug Implant [Probuphine]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1804028", + "display": "methadone hydrochloride 10 MG/ML [Methadose]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1805527", + "display": "brompheniramine maleate 0.4 MG/ML / codeine phosphate 1.5 MG/ML / pseudoephedrine hydrochloride 6 MG/ML [Mar-cof BP]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1806212", + "display": "buprenorphine Transdermal System" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1806214", + "display": "buprenorphine Transdermal System [BuTrans]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1806273", + "display": "fentanyl Transdermal System" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1806275", + "display": "fentanyl Transdermal System [Duragesic]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1806414", + "display": "fentanyl Transdermal System [Ionsys]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1809096", + "display": "sufentanil Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1809097", + "display": "1 ML sufentanil 0.05 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1809102", + "display": "2 ML sufentanil 0.05 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1809104", + "display": "5 ML sufentanil 0.05 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1812164", + "display": "acetaminophen 325 MG / caffeine 30 MG / dihydrocodeine bitartrate 16 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1819", + "display": "buprenorphine" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860127", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 60 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860129", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 20 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860137", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 40 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860148", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 80 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860151", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 30 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860154", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 15 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860157", + "display": "Abuse-Deterrent 12 HR oxycodone hydrochloride 10 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860205", + "display": "hydrocodone bitartrate 100 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860207", + "display": "hydrocodone bitartrate 100 MG [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860209", + "display": "hydrocodone bitartrate 120 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860211", + "display": "hydrocodone bitartrate 120 MG [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860214", + "display": "hydrocodone bitartrate 30 MG [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860217", + "display": "hydrocodone bitartrate 20 MG [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860220", + "display": "hydrocodone bitartrate 40 MG [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860222", + "display": "hydrocodone bitartrate 60 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860224", + "display": "hydrocodone bitartrate 60 MG [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860226", + "display": "hydrocodone bitartrate 80 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860228", + "display": "hydrocodone bitartrate 80 MG [Hysingla]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860491", + "display": "12 HR hydrocodone bitartrate 10 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860492", + "display": "12 HR hydrocodone bitartrate 10 MG Extended Release Oral Capsule [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860493", + "display": "12 HR hydrocodone bitartrate 15 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860494", + "display": "12 HR hydrocodone bitartrate 15 MG Extended Release Oral Capsule [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860495", + "display": "12 HR hydrocodone bitartrate 20 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860496", + "display": "12 HR hydrocodone bitartrate 20 MG Extended Release Oral Capsule [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860497", + "display": "12 HR hydrocodone bitartrate 30 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860498", + "display": "12 HR hydrocodone bitartrate 30 MG Extended Release Oral Capsule [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860499", + "display": "12 HR hydrocodone bitartrate 40 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860500", + "display": "12 HR hydrocodone bitartrate 40 MG Extended Release Oral Capsule [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860501", + "display": "12 HR hydrocodone bitartrate 50 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1860502", + "display": "12 HR hydrocodone bitartrate 50 MG Extended Release Oral Capsule [Zohydro]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1864410", + "display": "buprenorphine 0.7 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1864412", + "display": "buprenorphine 0.7 MG / naloxone 0.18 MG Sublingual Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1864413", + "display": "buprenorphine 0.7 MG / naloxone 0.18 MG [Zubsolv]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1864414", + "display": "buprenorphine 0.7 MG / naloxone 0.18 MG Sublingual Tablet [Zubsolv]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1866542", + "display": "nalbuphine Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1866543", + "display": "1 ML nalbuphine hydrochloride 10 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1866551", + "display": "1 ML nalbuphine hydrochloride 20 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1869548", + "display": "methadone hydrochloride 40 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1869549", + "display": "methadone Tablet for Oral Suspension" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1869551", + "display": "methadone hydrochloride 40 MG [Methadose]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1869552", + "display": "methadone Tablet for Oral Suspension [Methadose]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871434", + "display": "Abuse-Deterrent 12 HR morphine sulfate 15 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871435", + "display": "Arymo" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871436", + "display": "morphine sulfate 15 MG [Arymo]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871437", + "display": "morphine Extended Release Oral Tablet [Arymo]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871438", + "display": "Arymo Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871439", + "display": "Arymo Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871440", + "display": "Abuse-Deterrent 12 HR morphine sulfate 15 MG Extended Release Oral Tablet [Arymo]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871441", + "display": "Abuse-Deterrent 12 HR morphine sulfate 30 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871442", + "display": "morphine sulfate 30 MG [Arymo]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871443", + "display": "Abuse-Deterrent 12 HR morphine sulfate 30 MG Extended Release Oral Tablet [Arymo]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871444", + "display": "Abuse-Deterrent 12 HR morphine sulfate 60 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871445", + "display": "morphine sulfate 60 MG [Arymo]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1871446", + "display": "Abuse-Deterrent 12 HR morphine sulfate 60 MG Extended Release Oral Tablet [Arymo]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1872264", + "display": "hydromorphone Prefilled Syringe [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1872265", + "display": "1 ML hydromorphone hydrochloride 1 MG/ML Prefilled Syringe [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1872269", + "display": "1 ML hydromorphone hydrochloride 2 MG/ML Prefilled Syringe [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1872271", + "display": "1 ML hydromorphone hydrochloride 4 MG/ML Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1872272", + "display": "1 ML hydromorphone hydrochloride 4 MG/ML Prefilled Syringe [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1872752", + "display": "0.5 ML hydromorphone hydrochloride 1 MG/ML Prefilled Syringe [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944529", + "display": "Abuse-Deterrent oxycodone hydrochloride 15 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944530", + "display": "Roxybond" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944531", + "display": "oxycodone hydrochloride 15 MG [Roxybond]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944532", + "display": "oxycodone Oral Tablet [Roxybond]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944533", + "display": "Roxybond Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944534", + "display": "Roxybond Pill" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944535", + "display": "Abuse-Deterrent oxycodone hydrochloride 15 MG Oral Tablet [Roxybond]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944538", + "display": "Abuse-Deterrent oxycodone hydrochloride 30 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944539", + "display": "oxycodone hydrochloride 30 MG [Roxybond]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944540", + "display": "Abuse-Deterrent oxycodone hydrochloride 30 MG Oral Tablet [Roxybond]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944541", + "display": "Abuse-Deterrent oxycodone hydrochloride 5 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944542", + "display": "oxycodone hydrochloride 5 MG [Roxybond]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1944543", + "display": "Abuse-Deterrent oxycodone hydrochloride 5 MG Oral Tablet [Roxybond]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1946525", + "display": "Matrix Delivery 24 HR tramadol hydrochloride 300 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1946527", + "display": "Matrix Delivery 24 HR tramadol hydrochloride 200 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1946529", + "display": "Matrix Delivery 24 HR tramadol hydrochloride 100 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1990741", + "display": "methadone hydrochloride 40 MG [Diskets]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1990742", + "display": "methadone Tablet for Oral Suspension [Diskets]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1990743", + "display": "Diskets Oral Liquid Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1990744", + "display": "Diskets Oral Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1990745", + "display": "methadone hydrochloride 40 MG Tablet for Oral Suspension [Diskets]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1992288", + "display": "fentanyl 0.04 MG/ACTUAT" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1992290", + "display": "fentanyl 0.04 MG/ACTUAT [Ionsys]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1996182", + "display": "buprenorphine 200 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1996183", + "display": "buprenorphine Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1996184", + "display": "0.5 ML buprenorphine 200 MG/ML Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1996185", + "display": "Sublocade" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1996186", + "display": "buprenorphine 200 MG/ML [Sublocade]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1996187", + "display": "buprenorphine Prefilled Syringe [Sublocade]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1996188", + "display": "Sublocade Injectable Product" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1996189", + "display": "0.5 ML buprenorphine 200 MG/ML Prefilled Syringe [Sublocade]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1996192", + "display": "1.5 ML buprenorphine 200 MG/ML Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "1996193", + "display": "1.5 ML buprenorphine 200 MG/ML Prefilled Syringe [Sublocade]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "202370", + "display": "Dolophine" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "203177", + "display": "hydromorphone hydrochloride" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "203240", + "display": "Kadian" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "203354", + "display": "MS Contin" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "203355", + "display": "Duramorph" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "203358", + "display": "Infumorph" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "203840", + "display": "Buprenex" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "203841", + "display": "buprenorphine hydrochloride" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "205533", + "display": "1 ML buprenorphine 0.3 MG/ML Injection [Buprenex]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "214182", + "display": "acetaminophen / hydrocodone" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "214392", + "display": "chlorpheniramine / hydrocodone" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "214594", + "display": "guaifenesin / hydrocodone" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "214604", + "display": "guaifenesin / hydrocodone / pseudoephedrine" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "214614", + "display": "homatropine / hydrocodone" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "214627", + "display": "hydrocodone / ibuprofen" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "214631", + "display": "hydrocodone / pseudoephedrine" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "218337", + "display": "methadone hydrochloride" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "218986", + "display": "Oxycontin" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "221107", + "display": "hydrocodone polistirex" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "224913", + "display": "Dilaudid" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "235751", + "display": "morphine hydrochloride" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "238129", + "display": "1 ML buprenorphine 0.3 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "261184", + "display": "72 HR fentanyl 0.025 MG/HR Transdermal System [Duragesic]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "261185", + "display": "72 HR fentanyl 0.05 MG/HR Transdermal System [Duragesic]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "261186", + "display": "72 HR fentanyl 0.075 MG/HR Transdermal System [Duragesic]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "262071", + "display": "72 HR fentanyl 0.1 MG/HR Transdermal System [Duragesic]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "30236", + "display": "morphine sulfate" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "330801", + "display": "buprenorphine 0.3 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "3423", + "display": "hydromorphone" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "351264", + "display": "buprenorphine 2 MG Sublingual Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "351265", + "display": "buprenorphine 8 MG Sublingual Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "351266", + "display": "buprenorphine 2 MG / naloxone 0.5 MG Sublingual Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "351267", + "display": "buprenorphine 8 MG / naloxone 2 MG Sublingual Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "352364", + "display": "buprenorphine / naloxone" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "353390", + "display": "buprenorphine 2 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "353391", + "display": "buprenorphine 8 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "363965", + "display": "methadone Oral Solution [Methadose]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "366919", + "display": "morphine Extended Release Oral Capsule [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "367843", + "display": "acetaminophen / hydrocodone Oral Tablet [Lorcet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "368308", + "display": "hydrocodone / ibuprofen Oral Tablet [Vicoprofen]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "368362", + "display": "acetaminophen / hydrocodone Oral Tablet [Lortab]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "368846", + "display": "methadone Oral Tablet [Methadose]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "368847", + "display": "methadone Oral Tablet [Dolophine]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "368895", + "display": "hydromorphone Oral Tablet [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "369266", + "display": "hydrocodone / pseudoephedrine Oral Tablet [P-V-Tussin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "369336", + "display": "homatropine / hydrocodone Oral Tablet [Tussigon]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "369896", + "display": "morphine Extended Release Oral Tablet [MS Contin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "370158", + "display": "oxycodone Extended Release Oral Tablet [Oxycontin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "370641", + "display": "acetaminophen / hydrocodone Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "370644", + "display": "homatropine / hydrocodone Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "370652", + "display": "hydromorphone Injectable Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "370653", + "display": "hydromorphone Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "370654", + "display": "hydromorphone Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "370655", + "display": "hydromorphone Rectal Suppository" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "370676", + "display": "hydrocodone / ibuprofen Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "370759", + "display": "acetaminophen / hydrocodone Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "371161", + "display": "buprenorphine Sublingual Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "372412", + "display": "guaifenesin / hydrocodone Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "372427", + "display": "hydromorphone Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "372806", + "display": "methadone Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "372807", + "display": "methadone Injectable Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "372808", + "display": "methadone Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "372956", + "display": "morphine Injectable Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "372957", + "display": "morphine Rectal Suppository" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "372959", + "display": "morphine Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "372960", + "display": "morphine Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "373682", + "display": "hydrocodone / pseudoephedrine Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "374654", + "display": "morphine Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "374696", + "display": "guaifenesin / hydrocodone / pseudoephedrine Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "374790", + "display": "chlorpheniramine / hydrocodone / pseudoephedrine Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "378762", + "display": "buprenorphine / naloxone Sublingual Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "378790", + "display": "chlorpheniramine / hydrocodone Extended Release Suspension" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "4337", + "display": "fentanyl" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "466514", + "display": "chlorpheniramine / hydrocodone / pseudoephedrine" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "477397", + "display": "morphine sulfate liposomal" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "477468", + "display": "morphine liposomal" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "483322", + "display": "ibuprofen / oxycodone Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "484259", + "display": "ibuprofen / oxycodone" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "542943", + "display": "acetaminophen / hydrocodone Oral Solution [Hycet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "544565", + "display": "hydromorphone Oral Solution [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "5489", + "display": "hydrocodone" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "566435", + "display": "buprenorphine 0.3 MG/ML [Buprenex]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "574418", + "display": "fentanyl 0.025 MG/HR [Duragesic]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "574419", + "display": "fentanyl 0.05 MG/HR [Duragesic]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "574420", + "display": "fentanyl 0.075 MG/HR [Duragesic]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "574656", + "display": "fentanyl 0.1 MG/HR [Duragesic]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "583489", + "display": "fentanyl 0.012 MG/HR [Duragesic]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "583490", + "display": "72 HR fentanyl 0.012 MG/HR Transdermal System [Duragesic]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "6378", + "display": "levorphanol" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "643113", + "display": "oxymorphone Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "643115", + "display": "oxymorphone Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "6468", + "display": "loperamide" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "670009", + "display": "Diskets" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "6754", + "display": "meperidine" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "6813", + "display": "methadone" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "7052", + "display": "morphine" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "7238", + "display": "nalbuphine" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "724134", + "display": "hydrocodone / ibuprofen Oral Tablet [Reprexain]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "730982", + "display": "chlorpheniramine / hydrocodone Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "730986", + "display": "chlorpheniramine / hydrocodone Extended Release Oral Capsule [TussiCaps]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "746938", + "display": "morphine Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "757041", + "display": "homatropine / hydrocodone Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "757043", + "display": "homatropine / hydrocodone Oral Solution [Hydromet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "758973", + "display": "hydrocodone / ibuprofen Oral Tablet [Ibudone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "763042", + "display": "hydromorphone Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "7804", + "display": "oxycodone" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "7814", + "display": "oxymorphone" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "8001", + "display": "pentazocine" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "8002", + "display": "Talwin" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "804749", + "display": "acetaminophen / hydrocodone Oral Solution [Zamicet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "82064", + "display": "oxymorphone hydrochloride" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "828712", + "display": "morphine sulfate 45 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "828716", + "display": "morphine sulfate 75 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "829847", + "display": "acetaminophen / hydrocodone Oral Tablet [Norco]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "830196", + "display": "opium tincture 100 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "833035", + "display": "hydrocodone bitartrate 7.5 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "854137", + "display": "Nucynta" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "854138", + "display": "tapentadol 100 MG [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "854139", + "display": "tapentadol Oral Tablet [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "854140", + "display": "tapentadol 100 MG Oral Tablet [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "854141", + "display": "tapentadol 50 MG [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "854142", + "display": "tapentadol 50 MG Oral Tablet [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "854143", + "display": "tapentadol 75 MG [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "854144", + "display": "tapentadol 75 MG Oral Tablet [Nucynta]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856891", + "display": "hydrocodone bitartrate 10 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856902", + "display": "hydrocodone bitartrate 5 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856908", + "display": "acetaminophen 660 MG / hydrocodone bitartrate 10 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856914", + "display": "hydrocodone bitartrate 1 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856939", + "display": "hydrocodone bitartrate 0.5 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856940", + "display": "acetaminophen 21.7 MG/ML / hydrocodone bitartrate 0.5 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856941", + "display": "acetaminophen 21.7 MG/ML / hydrocodone bitartrate 0.5 MG/ML [Hycet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856942", + "display": "acetaminophen 21.7 MG/ML / hydrocodone bitartrate 0.5 MG/ML Oral Solution [Hycet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856943", + "display": "hydrocodone bitartrate 0.67 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856944", + "display": "acetaminophen 21.7 MG/ML / hydrocodone bitartrate 0.67 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856945", + "display": "acetaminophen 21.7 MG/ML / hydrocodone bitartrate 0.67 MG/ML [Zamicet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856946", + "display": "acetaminophen 21.7 MG/ML / hydrocodone bitartrate 0.67 MG/ML Oral Solution [Zamicet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856980", + "display": "acetaminophen 300 MG / hydrocodone bitartrate 10 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856987", + "display": "acetaminophen 300 MG / hydrocodone bitartrate 5 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856992", + "display": "acetaminophen 300 MG / hydrocodone bitartrate 7.5 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "856999", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 10 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857000", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 10 MG [Norco]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857001", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 10 MG Oral Tablet [Norco]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857002", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 5 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857003", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 5 MG [Norco]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857004", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 5 MG Oral Tablet [Norco]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857005", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 7.5 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857006", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 7.5 MG [Norco]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857007", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 7.5 MG Oral Tablet [Norco]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857099", + "display": "acetaminophen 33.3 MG/ML / hydrocodone bitartrate 0.5 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857104", + "display": "acetaminophen / hydrocodone Oral Solution [Lortab]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857110", + "display": "hydrocodone bitartrate 2.5 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857124", + "display": "hydrocodone bitartrate 0.667 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857131", + "display": "acetaminophen 400 MG / hydrocodone bitartrate 5 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857391", + "display": "acetaminophen 325 MG / hydrocodone bitartrate 2.5 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "857512", + "display": "12 HR chlorpheniramine polistirex 8 MG / hydrocodone polistirex 10 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "858770", + "display": "hydrocodone bitartrate 2.5 MG / ibuprofen 200 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "858771", + "display": "hydrocodone bitartrate 2.5 MG / ibuprofen 200 MG [Reprexain]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "858772", + "display": "hydrocodone bitartrate 2.5 MG / ibuprofen 200 MG Oral Tablet [Reprexain]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "858778", + "display": "hydrocodone bitartrate 5 MG / ibuprofen 200 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "858779", + "display": "hydrocodone bitartrate 5 MG / ibuprofen 200 MG [Ibudone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "858780", + "display": "hydrocodone bitartrate 5 MG / ibuprofen 200 MG Oral Tablet [Ibudone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "858798", + "display": "hydrocodone bitartrate 7.5 MG / ibuprofen 200 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "858837", + "display": "hydrocodone bitartrate 7.5 MG / ibuprofen 200 MG [Vicoprofen]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "858838", + "display": "hydrocodone bitartrate 7.5 MG / ibuprofen 200 MG Oral Tablet [Vicoprofen]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "859315", + "display": "hydrocodone bitartrate 10 MG / ibuprofen 200 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "859316", + "display": "hydrocodone bitartrate 10 MG / ibuprofen 200 MG [Ibudone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "859317", + "display": "hydrocodone bitartrate 10 MG / ibuprofen 200 MG Oral Tablet [Ibudone]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "859383", + "display": "guaifenesin 40 MG/ML / hydrocodone bitartrate 0.5 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "859955", + "display": "morphine sulfate 20 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "859963", + "display": "morphine sulfate 30 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "859968", + "display": "morphine sulfate 50 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "863539", + "display": "morphine sulfate 100 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "863546", + "display": "morphine sulfate 60 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "863551", + "display": "morphine sulfate 80 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "863844", + "display": "morphine / naltrexone Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "863845", + "display": "Abuse-Deterrent morphine sulfate 100 MG / naltrexone hydrochloride 4 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "863848", + "display": "Abuse-Deterrent morphine sulfate 20 MG / naltrexone hydrochloride 0.8 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "863850", + "display": "Abuse-Deterrent morphine sulfate 30 MG / naltrexone hydrochloride 1.2 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "863852", + "display": "Abuse-Deterrent morphine sulfate 50 MG / naltrexone hydrochloride 2 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "863854", + "display": "Abuse-Deterrent morphine sulfate 60 MG / naltrexone hydrochloride 2.4 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "863856", + "display": "Abuse-Deterrent morphine sulfate 80 MG / naltrexone hydrochloride 3.2 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864705", + "display": "methadone hydrochloride 10 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864706", + "display": "methadone hydrochloride 10 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864707", + "display": "methadone hydrochloride 10 MG [Dolophine]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864708", + "display": "methadone hydrochloride 10 MG Oral Tablet [Dolophine]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864711", + "display": "methadone hydrochloride 10 MG [Methadose]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864712", + "display": "methadone hydrochloride 10 MG Oral Tablet [Methadose]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864713", + "display": "methadone hydrochloride 10 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864714", + "display": "methadone hydrochloride 10 MG/ML Injectable Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864717", + "display": "methadone hydrochloride 5 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864718", + "display": "methadone hydrochloride 5 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864719", + "display": "methadone hydrochloride 5 MG [Dolophine]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864720", + "display": "methadone hydrochloride 5 MG Oral Tablet [Dolophine]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864736", + "display": "methadone hydrochloride 5 MG [Methadose]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864737", + "display": "methadone hydrochloride 5 MG Oral Tablet [Methadose]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864760", + "display": "methadone hydrochloride 1 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864761", + "display": "methadone hydrochloride 1 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864768", + "display": "methadone hydrochloride 2 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864769", + "display": "methadone hydrochloride 2 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864978", + "display": "methadone hydrochloride 40 MG Tablet for Oral Suspension" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "864980", + "display": "methadone hydrochloride 40 MG Tablet for Oral Suspension [Methadose]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "866331", + "display": "morphine / naltrexone" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "885779", + "display": "Astramorph" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "891874", + "display": "morphine sulfate 100 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "891877", + "display": "morphine sulfate 15 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "891881", + "display": "morphine sulfate 15 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "891888", + "display": "morphine sulfate 30 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "891893", + "display": "morphine sulfate 60 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892296", + "display": "morphine sulfate 120 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892297", + "display": "24 HR morphine sulfate 120 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892342", + "display": "24 HR morphine sulfate 30 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892345", + "display": "morphine sulfate 30 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892349", + "display": "24 HR morphine sulfate 60 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892352", + "display": "morphine sulfate 60 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892354", + "display": "morphine sulfate 90 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892355", + "display": "24 HR morphine sulfate 90 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892364", + "display": "morphine sulfate 0.5 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892366", + "display": "morphine sulfate 0.5 MG/ML [Astramorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892471", + "display": "morphine sulfate 0.5 MG/ML [Duramorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892473", + "display": "10 ML morphine sulfate 0.5 MG/ML Injection [Duramorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892476", + "display": "morphine sulfate 1 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892478", + "display": "morphine sulfate 1 MG/ML [Astramorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892488", + "display": "morphine sulfate 1 MG/ML [Duramorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892489", + "display": "10 ML morphine sulfate 1 MG/ML Injection [Duramorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892493", + "display": "morphine sulfate 10 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892494", + "display": "morphine sulfate 10 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892495", + "display": "morphine sulfate 10 MG [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892496", + "display": "morphine sulfate 10 MG Extended Release Oral Capsule [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892516", + "display": "morphine sulfate 10 MG Rectal Suppository" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892530", + "display": "morphine sulfate 10 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892531", + "display": "morphine sulfate 10 MG/ML Injectable Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892532", + "display": "morphine sulfate 10 MG/ML [Infumorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892554", + "display": "morphine sulfate 100 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892555", + "display": "morphine sulfate 100 MG [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892556", + "display": "morphine sulfate 100 MG Extended Release Oral Capsule [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892559", + "display": "morphine sulfate 100 MG [MS Contin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892560", + "display": "morphine sulfate 100 MG Extended Release Oral Tablet [MS Contin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892573", + "display": "morphine sulfate 15 MG [MS Contin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892574", + "display": "morphine sulfate 15 MG Extended Release Oral Tablet [MS Contin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892582", + "display": "morphine sulfate 15 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892588", + "display": "morphine sulfate 2 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892589", + "display": "morphine sulfate 2 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892596", + "display": "morphine sulfate 20 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892597", + "display": "morphine sulfate 20 MG [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892598", + "display": "morphine sulfate 20 MG Extended Release Oral Capsule [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892603", + "display": "morphine sulfate 20 MG Rectal Suppository" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892624", + "display": "morphine sulfate 20 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892625", + "display": "morphine sulfate 20 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892642", + "display": "morphine sulfate 200 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892643", + "display": "morphine sulfate 200 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892646", + "display": "morphine sulfate 200 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892647", + "display": "morphine sulfate 200 MG [MS Contin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892648", + "display": "morphine sulfate 200 MG Extended Release Oral Tablet [MS Contin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892649", + "display": "morphine sulfate 25 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892651", + "display": "morphine sulfate 25 MG/ML [Infumorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892652", + "display": "20 ML morphine sulfate 25 MG/ML Injection [Infumorph]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892657", + "display": "morphine sulfate 30 MG [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892658", + "display": "morphine sulfate 30 MG Extended Release Oral Capsule [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892659", + "display": "morphine sulfate 30 MG [MS Contin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892660", + "display": "morphine sulfate 30 MG Extended Release Oral Tablet [MS Contin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892672", + "display": "morphine sulfate 30 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "892678", + "display": "morphine sulfate 30 MG Rectal Suppository" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894779", + "display": "morphine sulfate 4 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894780", + "display": "morphine sulfate 4 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894801", + "display": "morphine sulfate 50 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894802", + "display": "morphine sulfate 50 MG [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894803", + "display": "morphine sulfate 50 MG Extended Release Oral Capsule [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894804", + "display": "morphine sulfate 60 MG [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894805", + "display": "morphine sulfate 60 MG Extended Release Oral Capsule [Kadian]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894806", + "display": "morphine sulfate 5 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894807", + "display": "morphine sulfate 5 MG Rectal Suppository" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894812", + "display": "morphine sulfate 60 MG [MS Contin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894813", + "display": "morphine sulfate 60 MG Extended Release Oral Tablet [MS Contin]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894814", + "display": "morphine sulfate 80 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894910", + "display": "morphine sulfate 14.3 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894911", + "display": "0.7 ML morphine sulfate 14.3 MG/ML Auto-Injector" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894912", + "display": "1 ML morphine sulfate 10 MG/ML Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894913", + "display": "morphine sulfate 8 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894914", + "display": "1 ML morphine sulfate 8 MG/ML Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894931", + "display": "morphine sulfate 150 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894942", + "display": "24 HR morphine sulfate 45 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894970", + "display": "24 HR morphine sulfate 75 MG Extended Release Oral Capsule" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "894972", + "display": "morphine sulfate 15 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "895194", + "display": "morphine sulfate 15 MG/ML Injectable Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "895201", + "display": "morphine sulfate 20 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "895217", + "display": "morphine sulfate 5 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "895218", + "display": "morphine sulfate 5 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "895221", + "display": "morphine sulfate 50 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "895228", + "display": "morphine sulfate 50 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "895973", + "display": "morphine sulfate liposomal 10 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897652", + "display": "hydromorphone hydrochloride 1 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897653", + "display": "1 ML hydromorphone hydrochloride 1 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897654", + "display": "hydromorphone hydrochloride 1 MG/ML [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897657", + "display": "hydromorphone hydrochloride 1 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897658", + "display": "hydromorphone hydrochloride 1 MG/ML Oral Solution [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897662", + "display": "hydromorphone hydrochloride 10 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897669", + "display": "hydromorphone hydrochloride 12 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897686", + "display": "hydromorphone hydrochloride 16 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897695", + "display": "hydromorphone hydrochloride 2 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897696", + "display": "hydromorphone hydrochloride 2 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897697", + "display": "hydromorphone hydrochloride 2 MG [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897698", + "display": "hydromorphone hydrochloride 2 MG Oral Tablet [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897701", + "display": "hydromorphone hydrochloride 4 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897702", + "display": "hydromorphone hydrochloride 4 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897703", + "display": "hydromorphone hydrochloride 4 MG [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897704", + "display": "hydromorphone hydrochloride 4 MG Oral Tablet [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897709", + "display": "hydromorphone hydrochloride 8 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897710", + "display": "hydromorphone hydrochloride 8 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897711", + "display": "hydromorphone hydrochloride 8 MG [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897712", + "display": "hydromorphone hydrochloride 8 MG Oral Tablet [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897736", + "display": "hydromorphone hydrochloride 32 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897744", + "display": "hydromorphone hydrochloride 2 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897745", + "display": "hydromorphone hydrochloride 2 MG/ML Injectable Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897746", + "display": "hydromorphone hydrochloride 2 MG/ML [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897748", + "display": "hydromorphone hydrochloride 3 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897749", + "display": "hydromorphone hydrochloride 3 MG Rectal Suppository" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897752", + "display": "hydromorphone hydrochloride 4 MG/ML" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897753", + "display": "1 ML hydromorphone hydrochloride 4 MG/ML Injection" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897754", + "display": "hydromorphone hydrochloride 4 MG/ML [Dilaudid]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897756", + "display": "1 ML hydromorphone hydrochloride 1 MG/ML Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897757", + "display": "1 ML hydromorphone hydrochloride 2 MG/ML Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "897758", + "display": "1 ML hydromorphone hydrochloride 4 MG/ML Cartridge" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "902728", + "display": "hydromorphone Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "902729", + "display": "24 HR hydromorphone hydrochloride 12 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "902736", + "display": "24 HR hydromorphone hydrochloride 16 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "902741", + "display": "24 HR hydromorphone hydrochloride 8 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904869", + "display": "buprenorphine 0.01 MG/HR" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904870", + "display": "168 HR buprenorphine 0.01 MG/HR Transdermal System" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904871", + "display": "BuTrans" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904872", + "display": "buprenorphine 0.01 MG/HR [BuTrans]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904874", + "display": "168 HR buprenorphine 0.01 MG/HR Transdermal System [BuTrans]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904875", + "display": "buprenorphine 0.02 MG/HR" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904876", + "display": "168 HR buprenorphine 0.02 MG/HR Transdermal System" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904877", + "display": "buprenorphine 0.02 MG/HR [BuTrans]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904878", + "display": "168 HR buprenorphine 0.02 MG/HR Transdermal System [BuTrans]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904879", + "display": "buprenorphine 0.005 MG/HR" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904880", + "display": "168 HR buprenorphine 0.005 MG/HR Transdermal System" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904881", + "display": "buprenorphine 0.005 MG/HR [BuTrans]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "904882", + "display": "168 HR buprenorphine 0.005 MG/HR Transdermal System [BuTrans]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977873", + "display": "oxymorphone hydrochloride 10 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977874", + "display": "12 HR oxymorphone hydrochloride 10 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977893", + "display": "oxymorphone hydrochloride 15 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977894", + "display": "12 HR oxymorphone hydrochloride 15 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977901", + "display": "oxymorphone hydrochloride 20 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977902", + "display": "12 HR oxymorphone hydrochloride 20 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977908", + "display": "oxymorphone hydrochloride 30 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977909", + "display": "12 HR oxymorphone hydrochloride 30 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977914", + "display": "oxymorphone hydrochloride 40 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977915", + "display": "12 HR oxymorphone hydrochloride 40 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977922", + "display": "oxymorphone hydrochloride 5 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977923", + "display": "12 HR oxymorphone hydrochloride 5 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977928", + "display": "oxymorphone hydrochloride 7.5 MG" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977929", + "display": "12 HR oxymorphone hydrochloride 7.5 MG Extended Release Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977939", + "display": "oxymorphone hydrochloride 5 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "977942", + "display": "oxymorphone hydrochloride 10 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "991147", + "display": "methadone hydrochloride 10 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "991149", + "display": "methadone hydrochloride 10 MG/ML Oral Solution [Methadose]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "992656", + "display": "homatropine methylbromide 1.5 MG / hydrocodone bitartrate 5 MG Oral Tablet" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "992668", + "display": "homatropine methylbromide 0.3 MG/ML / hydrocodone bitartrate 1 MG/ML Oral Solution" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "992674", + "display": "homatropine methylbromide 0.3 MG/ML / hydrocodone bitartrate 1 MG/ML [Hydromet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "992675", + "display": "homatropine methylbromide 0.3 MG/ML / hydrocodone bitartrate 1 MG/ML Oral Solution [Hydromet]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "992732", + "display": "homatropine methylbromide 1.5 MG / hydrocodone bitartrate 5 MG [Tussigon]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "992733", + "display": "homatropine methylbromide 1.5 MG / hydrocodone bitartrate 5 MG Oral Tablet [Tussigon]" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "998212", + "display": "1 ML morphine sulfate 2 MG/ML Prefilled Syringe" + }, + { + "system": "http://www.nlm.nih.gov/research/umls/rxnorm", + "version": "07012024", + "code": "998213", + "display": "1 ML morphine sulfate 4 MG/ML Prefilled Syringe" + } + ] + } + } +] \ No newline at end of file diff --git a/tests/test_databases.py b/tests/test_databases.py index 070c511d..bd5d8878 100644 --- a/tests/test_databases.py +++ b/tests/test_databases.py @@ -492,7 +492,6 @@ def test_duckdb_date(mock_db, data, field_type, raises): [ ("foo", True), ("bar", False), - (None, None), ], ) def test_duckdb_regexp_like(mock_db, pattern, expects): diff --git a/tests/test_psm.py b/tests/test_psm.py index 72287cf2..27fb6e5a 100644 --- a/tests/test_psm.py +++ b/tests/test_psm.py @@ -8,7 +8,7 @@ from freezegun import freeze_time from cumulus_library import cli, study_manifest -from cumulus_library.statistics import psm +from cumulus_library.builders import psm_builder @freeze_time("2024-01-01") @@ -66,7 +66,7 @@ def test_psm_create( manifest = study_manifest.StudyManifest( study_path=f"{pathlib.Path(__file__).parent}/test_data/psm/" ) - psmbuilder = psm.PsmBuilder( + psmbuilder = psm_builder.PsmBuilder( f"{pathlib.Path(__file__).parent}/test_data/psm/{toml_def}", pathlib.Path(tmp_path), ) @@ -110,7 +110,7 @@ def test_psm_error_handling(mock_psm, error, tmp_path, mock_db_stats_config): manifest = study_manifest.StudyManifest( study_path=f"{pathlib.Path(__file__).parent}/test_data/psm/" ) - psmbuilder = psm.PsmBuilder( + psmbuilder = psm_builder.PsmBuilder( f"{pathlib.Path(__file__).parent}/test_data/psm/psm_config.toml", pathlib.Path(tmp_path), ) diff --git a/tests/test_psm_templates.py b/tests/test_psm_templates.py index 0f39ab56..c04289b5 100644 --- a/tests/test_psm_templates.py +++ b/tests/test_psm_templates.py @@ -5,7 +5,7 @@ import pytest from cumulus_library import errors -from cumulus_library.statistics.statistics_templates import psm_templates +from cumulus_library.builders.statistics_templates import psm_templates @pytest.mark.parametrize( diff --git a/tests/valueset/__init__.py b/tests/valueset/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/valueset/test_additional_rules_builder.py b/tests/valueset/test_additional_rules_builder.py new file mode 100644 index 00000000..755b9099 --- /dev/null +++ b/tests/valueset/test_additional_rules_builder.py @@ -0,0 +1,195 @@ +import json +import os +import pathlib +import tomllib +from unittest import mock + +import pytest + +from cumulus_library import study_manifest +from cumulus_library.builders.valueset import ( + additional_rules_builder, + rxnorm_valueset_builder, + static_builder, + valueset_utils, +) + + +@pytest.mark.parametrize("prefix", [(""), ("foo")]) +@mock.patch.dict( + os.environ, + clear=True, +) +@mock.patch("cumulus_library.apis.umls.UmlsApi") +def test_additional_rules(mock_api, mock_db_config_rxnorm, prefix): + data_path = pathlib.Path(__file__).parent.parent / "test_data/valueset/" + with open(data_path / "vsac_resp.json") as f: + resp = json.load(f) + mock_api.return_value.get_vsac_valuesets.return_value = resp + manifest = study_manifest.StudyManifest(data_path) + + with open(data_path / "valueset.toml", "rb") as file: + toml_config = tomllib.load(file) + valueset_config = valueset_utils.ValuesetConfig( + rules_file=toml_config.get("rules_file"), + keyword_file=toml_config.get("keyword_file"), + table_prefix=toml_config.get("target_table", ""), + umls_stewards=toml_config.get("umls_stewards"), + vsac_stewards=toml_config.get("vsac_stewards"), + ) + if prefix: + valueset_config.table_prefix = prefix + prefix += "_" + cursor = mock_db_config_rxnorm.db.cursor() + query = ( + f"""CREATE TABLE umls.tty_description AS SELECT * FROM +read_csv('{data_path}/tty.tsv',""" + """ columns ={'tty': 'VARCHAR', 'tty_str': 'varchar'}, + delim = '\t', + header = true +)""" + ) + cursor.execute(query) + + s_builder = static_builder.StaticBuilder() + s_builder.execute_queries( + config=mock_db_config_rxnorm, manifest=manifest, valueset_config=valueset_config + ) + r_builder = rxnorm_valueset_builder.RxNormValuesetBuilder() + r_builder.execute_queries( + config=mock_db_config_rxnorm, manifest=manifest, valueset_config=valueset_config + ) + builder = additional_rules_builder.AdditionalRulesBuilder() + builder.execute_queries( + config=mock_db_config_rxnorm, manifest=manifest, valueset_config=valueset_config + ) + res = cursor.execute(f"select * from test__{prefix}rela") + for table_conf in [ + { + "name": f"test__{prefix}potential_rules", + "columns": 10, + "count": 48, + "first": ( + 1819, + 1818, + "BN", + "BN", + 4716626, + "RN", + "reformulated_to", + "Buprenorphine", + "Subutex", + "subutex", + ), + "last": ( + 1819, + 1818, + "SY", + "BN", + 4716626, + "RN", + "reformulated_to", + "Buprenophine", + "Subutex", + "subutex", + ), + }, + { + "name": f"test__{prefix}included_rels", + "columns": 10, + "count": 2, + "first": ( + 1819, + 1818, + "BN", + "BN", + 4716626, + "RN", + "reformulated_to", + "Buprenorphine", + "Subutex", + "subutex", + ), + "last": ( + 1819, + 1818, + "BN", + "BN", + 4716626, + "RN", + "reformulated_to", + "Buprenorphine", + "Subutex", + "subutex", + ), + }, + { + "name": f"test__{prefix}included_keywords", + "columns": 10, + "count": 48, + "first": ( + 1819, + 1818, + "BN", + "BN", + 4716626, + "RN", + "reformulated_to", + "Buprenorphine", + "Subutex", + "subutex", + ), + "last": ( + 1819, + 1818, + "SY", + "BN", + 4716626, + "RN", + "reformulated_to", + "Buprenophine", + "Subutex", + "subutex", + ), + }, + # The following table has fewer rows than the proceding due to duplication + # in the key lookup. The union operation removes extra rows. + { + "name": f"test__{prefix}combined_ruleset", + "columns": 10, + "count": 20, + "first": ( + 1819, + 1818, + "BN", + "BN", + 4716626, + "RN", + "reformulated_to", + "Buprenorphine", + "Subutex", + "subutex", + ), + "last": ( + 1819, + 1818, + "SY", + "BN", + 4716626, + "RN", + "reformulated_to", + "Buprenophine", + "Subutex", + "subutex", + ), + }, + ]: + res = cursor.execute( + f"Select * from {table_conf['name']} order by " + f"{','.join([str(x+1) for x in range(table_conf['columns'])])}" + ) + data = res.fetchall() + assert len(data) == table_conf["count"] + assert data[0] == table_conf["first"] + if table_conf["count"] > 1: + assert data[-1] == table_conf["last"] diff --git a/tests/valueset/test_rxnorm_valueset_builder.py b/tests/valueset/test_rxnorm_valueset_builder.py new file mode 100644 index 00000000..7494f377 --- /dev/null +++ b/tests/valueset/test_rxnorm_valueset_builder.py @@ -0,0 +1,75 @@ +import json +import os +import pathlib +import tomllib +from unittest import mock + +import pytest + +from cumulus_library import study_manifest +from cumulus_library.builders.valueset import ( + rxnorm_valueset_builder, + static_builder, + valueset_utils, +) + + +@pytest.mark.parametrize("prefix", [(""), ("foo")]) +@mock.patch.dict( + os.environ, + clear=True, +) +@mock.patch("cumulus_library.apis.umls.UmlsApi") +def test_rxnorm_valueset_builder(mock_api, mock_db_config_rxnorm, prefix): + data_path = pathlib.Path(__file__).parent.parent / "test_data/valueset/" + with open(data_path / "vsac_resp.json") as f: + resp = json.load(f) + mock_api.return_value.get_vsac_valuesets.return_value = resp + manifest = study_manifest.StudyManifest(data_path) + + with open(data_path / "valueset.toml", "rb") as file: + toml_config = tomllib.load(file) + valueset_config = valueset_utils.ValuesetConfig( + rules_file=toml_config.get("rules_file"), + keyword_file=toml_config.get("keyword_file"), + table_prefix=toml_config.get("target_table", ""), + umls_stewards=toml_config.get("umls_stewards"), + vsac_stewards=toml_config.get("vsac_stewards"), + ) + if prefix: + valueset_config.table_prefix = prefix + prefix += "_" + + cursor = mock_db_config_rxnorm.db.cursor() + s_builder = static_builder.StaticBuilder() + s_builder.execute_queries( + config=mock_db_config_rxnorm, manifest=manifest, valueset_config=valueset_config + ) + builder = rxnorm_valueset_builder.RxNormValuesetBuilder() + builder.execute_queries( + config=mock_db_config_rxnorm, manifest=manifest, valueset_config=valueset_config + ) + res = cursor.execute(f"select * from test__{prefix}rela ORDER BY 1,2,3,4,5").fetchall() + assert len(res) == 1200 + assert res[0] == ( + 1819, + "(-)-buprenorphine", + "SY", + "DRUGBANK", + 1818, + "RN", + "reformulated_to", + 4716626, + "acep", + ) + assert res[-1] == ( + 1819, + "buprenorphine", + "SU", + "MTHSPL", + 1655031, + "RO", + "has_ingredient", + 86130850, + "acep", + ) diff --git a/tests/valueset/test_static_builder.py b/tests/valueset/test_static_builder.py new file mode 100644 index 00000000..a05e6c38 --- /dev/null +++ b/tests/valueset/test_static_builder.py @@ -0,0 +1,115 @@ +import pathlib +import shutil + +import pytest + +from cumulus_library import study_manifest +from cumulus_library.builders.valueset import static_builder, valueset_utils + + +@pytest.mark.parametrize( + "filtered,ignore_header,prefix_str,mapping,expected", + [ + ( + None, + False, + "", + None, + { + "headers": ["foo", "bar"], + "data": [ + ("header_1", "header_2"), + ("val_1", "val_2"), + ("val_3", "val_4"), + ], + }, + ), + ( + "filtered.csv", + False, + "", + None, + {"headers": ["foo", "bar"], "data": [("val_2", None)]}, + ), + ( + None, + True, + "", + None, + { + "headers": ["foo", "bar"], + "data": [("val_1", "val_2"), ("val_3", "val_4")], + }, + ), + ( + None, + None, + "foo", + [{"from": "bar", "to": "baz", "map_dict": {"val_2": "val_5"}}], + { + "headers": ["foo", "bar", "baz"], + "data": [ + ("header_1", "header_2", None), + ("val_1", "val_2", "val_5"), + ("val_3", "val_4", None), + ], + }, + ), + ], +) +def test_static_tables( + tmp_path, mock_db_config, filtered, ignore_header, prefix_str, mapping, expected +): + test_path = pathlib.Path(__file__).parent.parent / "test_data/valueset/" + shutil.copy(test_path / "static/static_table.csv", tmp_path / "static_table.csv") + shutil.copy(test_path / "static/filtered.csv", tmp_path / "filtered.csv") + valueset_config = valueset_utils.ValuesetConfig( + vsac_stewards={"acep": "2.16.840.1.113762.1.4.1106.68"} + ) + if prefix_str: + valueset_config.table_prefix = prefix_str + prefix_str += "_" + builder = static_builder.StaticBuilder() + filtered = tmp_path / filtered if filtered else None + builder.get_table_configs = lambda prefix: [ + static_builder.TableConfig( + file_path=tmp_path / "static_table.csv", + delimiter=",", + table_name=f"{prefix_str}test_table", + headers=["foo", "bar"], + dtypes={"foo": "str", "bar": "str"}, + parquet_types=["STR", "STR"], + filtered_path=filtered, + ignore_header=ignore_header, + map_cols=mapping, + ) + ] + builder.execute_queries( + config=mock_db_config, + manifest=study_manifest.StudyManifest(test_path), + valueset_config=valueset_config, + ) + result = mock_db_config.db.cursor().execute(f"select * from test__{prefix_str}test_table") + cols = [col[0] for col in result.description] + assert cols == expected["headers"] + assert result.fetchall() == expected["data"] + + +def test_custom_rules(tmp_path, mock_db_config): + test_path = pathlib.Path(__file__).parent.parent / "test_data/valueset/" + shutil.copy(test_path / "static/static_table.csv", tmp_path / "static_table.csv") + shutil.copy(test_path / "static/filtered.csv", tmp_path / "filtered.csv") + valueset_config = valueset_utils.ValuesetConfig( + vsac_stewards={"acep": "2.16.840.1.113762.1.4.1106.68"}, + rules_file="rules_file.tsv", + table_prefix="", + ) + builder = static_builder.StaticBuilder() + builder.execute_queries( + config=mock_db_config, + manifest=study_manifest.StudyManifest(test_path), + valueset_config=valueset_config, + ) + result = mock_db_config.db.cursor().execute("select * from test__search_rules").fetchall() + assert len(result) == 3 + assert ("BN", "reformulated_to", "BN", "Yes", True) in result diff --git a/tests/valueset/test_umls.py b/tests/valueset/test_umls.py new file mode 100644 index 00000000..7187d263 --- /dev/null +++ b/tests/valueset/test_umls.py @@ -0,0 +1,339 @@ +import os +from unittest import mock + +import pytest + +from cumulus_library import StudyManifest +from cumulus_library.builders.valueset import umls, valueset_utils + + +@pytest.mark.parametrize("prefix", [(""), ("foo")]) +@mock.patch.dict( + os.environ, + clear=True, +) +def test_umls_lookup(mock_db_config_rxnorm, prefix): + cursor = mock_db_config_rxnorm.db.cursor() + manifest = StudyManifest() + manifest._study_config = {"study_prefix": "test"} + mock_db_config_rxnorm.options = {"umls_stewards": "medrt"} + valueset_config = valueset_utils.ValuesetConfig( + umls_stewards={"medrt": {"sab": "MED-RT", "search_terms": ["Opioid"]}} + ) + if prefix: + valueset_config.table_prefix = prefix + prefix += "_" + umls.generate_umls_tables(mock_db_config_rxnorm, manifest, valueset_config) + + res = cursor.execute(f"SELECT * FROM test__{prefix}umls_valuesets_rels").fetchall() + expected = { + ( + "medrt", + 1, + "C2917209", + "C2917209", + "RN", + "isa", + "C0006491", + "MSHFRE", + "PT", + "N0000175686", + "Competitive Opioid Antagonists", + ), + ( + "medrt", + 1, + "C2917209", + "C2917209", + "RN", + "isa", + "C0006491", + "MSH", + "PT", + "N0000175686", + "Competitive Opioid Antagonists", + ), + ( + "medrt", + 1, + "C2917209", + "C2917209", + "CHD", + None, + "C0006405", + "CSP", + "PT", + "N0000175686", + "Competitive Opioid Antagonists", + ), + ( + "medrt", + 1, + "C2917209", + "C2917209", + "RN", + "isa", + "C0006405", + "MSH", + "PT", + "N0000175686", + "Competitive Opioid Antagonists", + ), + ( + "medrt", + 2, + "C0006405", + "C2917209", + "RN", + "isa", + "C0006405", + "MSH", + "MH", + "D002047", + "Buprenorphine", + ), + ( + "medrt", + 2, + "C0006405", + "C2917209", + "CHD", + None, + "C0006405", + "MSH", + "MH", + "D002047", + "Buprenorphine", + ), + ( + "medrt", + 2, + "C0006491", + "C2917209", + "RN", + "isa", + "C0006491", + "MSH", + "MH", + "D002077", + "Butorphanol", + ), + ( + "medrt", + 2, + "C0006405", + "C2917209", + "CHD", + None, + "C0006405", + "CSP", + "PT", + "0092-7100", + "buprenorphine", + ), + ( + "medrt", + 2, + "C0006491", + "C2917209", + "RN", + "isa", + "C0006491", + "MSHFRE", + "MH", + "D002077", + "Butorphanol", + ), + ( + "medrt", + 2, + "C0006405", + "C2917209", + "RN", + "isa", + "C0006405", + "CSP", + "PT", + "0092-7100", + "buprenorphine", + ), + ( + "medrt", + 3, + "C1169989", + "C0006405", + "RO", + "has_part", + "C1169989", + "SNOMEDCT_US", + "PT", + "425741009", + "Buprenorphine- and naloxone-containing product", + ), + ( + "medrt", + 3, + "C3205902", + "C0006491", + "CHD", + "isa", + "C3205902", + "RXNORM", + "SCDG", + "1151379", + "butorphanol Injectable Product", + ), + ( + "medrt", + 3, + "C1169989", + "C0006405", + "CHD", + "isa", + "C1169989", + "SNOMEDCT_US", + "PT", + "425741009", + "Buprenorphine- and naloxone-containing product", + ), + ( + "medrt", + 3, + "C1169989", + "C0006405", + "RO", + "has_part", + "C1169989", + "RXNORM", + "MIN", + "352364", + "buprenorphine / naloxone", + ), + ( + "medrt", + 3, + "C3205902", + "C0006491", + "RO", + "has_ingredient", + "C3205902", + "RXNORM", + "SCDG", + "1151379", + "butorphanol Injectable Product", + ), + ( + "medrt", + 3, + "C3205902", + "C0006491", + "CHD", + "isa", + "C3205902", + "SNOMEDCT_US", + "PT", + "430388001", + "Butorphanol-containing product in parenteral dose form", + ), + ( + "medrt", + 3, + "C3205902", + "C0006491", + "RO", + "has_ingredient", + "C3205902", + "SNOMEDCT_US", + "PT", + "430388001", + "Butorphanol-containing product in parenteral dose form", + ), + ( + "medrt", + 3, + "C1169989", + "C0006405", + "CHD", + "isa", + "C1169989", + "RXNORM", + "MIN", + "352364", + "buprenorphine / naloxone", + ), + ( + "medrt", + 4, + "C4755717", + "C3205902", + "CHD", + "isa", + "C4755717", + "SNOMEDCT_US", + "PT", + "778584004", + "Butorphanol only product in parenteral dose form", + ), + ( + "medrt", + 4, + "C0774321", + "C3205902", + "RN", + "isa", + "C0774321", + "SNOMEDCT_US", + "PT", + "785210007", + "Butorphanol tartrate 1 mg/mL solution for injection", + ), + } + + assert set(res) == expected + + res = cursor.execute(f"SELECT * FROM test__{prefix}umls_valuesets").fetchall() + expected = { + ( + 886627, + "medrt", + 4, + "C0774321", + "C3205902", + "RN", + "isa", + "C0774321", + "SNOMEDCT_US", + "PT", + "785210007", + "Butorphanol tartrate 1 mg/mL solution for injection", + ), + ( + 352364, + "medrt", + 3, + "C1169989", + "C0006405", + "CHD", + "isa", + "C1169989", + "RXNORM", + "MIN", + "352364", + "buprenorphine / naloxone", + ), + ( + 352364, + "medrt", + 3, + "C1169989", + "C0006405", + "RO", + "has_part", + "C1169989", + "RXNORM", + "MIN", + "352364", + "buprenorphine / naloxone", + ), + } + assert set(res) == expected diff --git a/tests/valueset/test_valueset_builder.py b/tests/valueset/test_valueset_builder.py new file mode 100644 index 00000000..b5a8e76c --- /dev/null +++ b/tests/valueset/test_valueset_builder.py @@ -0,0 +1,49 @@ +import json +import os +import pathlib +from contextlib import nullcontext as does_not_raise +from unittest import mock + +import pytest + +from cumulus_library import study_manifest +from cumulus_library.builders import valueset_builder + +data_path = pathlib.Path(__file__).parent.parent / "test_data/valueset/" + + +@pytest.mark.parametrize( + ("config_path,raises"), + [ + (data_path / "valueset.toml", does_not_raise()), + (data_path / "invalid.toml", pytest.raises(SystemExit)), + ], +) +@mock.patch.dict( + os.environ, + clear=True, +) +@mock.patch("cumulus_library.apis.umls.UmlsApi") +def test_valueset_builder(mock_api, mock_db_config_rxnorm, config_path, raises): + with raises: + with open(data_path / "vsac_resp.json") as f: + resp = json.load(f) + mock_api.return_value.get_vsac_valuesets.return_value = resp + manifest = study_manifest.StudyManifest(data_path) + cursor = mock_db_config_rxnorm.db.cursor() + query = ( + f"""CREATE TABLE umls.tty_description AS SELECT * FROM + read_csv('{data_path}/tty.tsv',""" + """ columns ={'tty': 'VARCHAR', 'tty_str': 'varchar'}, + delim = '\t', + header = true + )""" + ) + cursor.execute(query) + + builder = valueset_builder.ValuesetBuilder(config_path, data_path / "valueset_data") + builder.execute_queries(mock_db_config_rxnorm, manifest=manifest) + table_count = cursor.execute( + "SELECT count(*) FROM information_schema.tables WHERE table_name LIKE 'test__%' " + ).fetchone() + assert table_count[0] == 18 diff --git a/tests/valueset/test_vsac.py b/tests/valueset/test_vsac.py new file mode 100644 index 00000000..f628921d --- /dev/null +++ b/tests/valueset/test_vsac.py @@ -0,0 +1,59 @@ +import json +import pathlib +from contextlib import nullcontext as does_not_raise +from unittest import mock + +import pytest + +from cumulus_library import base_utils, errors +from cumulus_library.builders.valueset import vsac + + +@mock.patch("cumulus_library.apis.umls.UmlsApi") +@pytest.mark.parametrize( + "steward,oid,umls,force,raises,expected", + [ + ("acep", "oid", None, False, does_not_raise(), 1), + ("acep", "oid", "1234567", False, does_not_raise(), 1), + ("acep", "oid", None, True, does_not_raise(), 1), + ("invalid", "bad oid", None, False, pytest.raises(errors.ApiError), 0), + ], +) +def test_download_oid_data( + mock_api, mock_db, steward, oid, umls, force, raises, expected, tmp_path +): + with raises: + with open(pathlib.Path(__file__).parent.parent / "test_data/valueset/vsac_resp.json") as f: + resp = json.load(f) + if steward == "acep": + mock_api.return_value.get_vsac_valuesets.return_value = resp + else: + mock_api.return_value.get_vsac_valuesets.side_effect = errors.ApiError + config = base_utils.StudyConfig( + db=mock_db, + schema="test", + umls_key=umls, + force_upload=force, + options={"steward": steward}, + ) + vsac.download_oid_data(steward=steward, oid=oid, path=tmp_path, config=config) + output_dir = list(tmp_path.glob("*")) + assert len(output_dir) == 4 + for filename in [f"{steward}.json", f"{steward}.tsv", f"{steward}.parquet", "duck.db"]: + assert len([x for x in output_dir if filename in str(x)]) == expected + with open(tmp_path / f"{steward}.tsv") as f: + tsv = f.readlines() + assert tsv[0].strip() == ( + "1010600\tbuprenorphine 2 MG / naloxone 0.5 MG Sublingual Film" + ) + assert tsv[-1].strip() == "998213\t1 ML morphine sulfate 4 MG/ML Prefilled Syringe" + redownload = vsac.download_oid_data(steward=steward, oid=oid, path=tmp_path, config=config) + assert redownload == force + + +@mock.patch("cumulus_library.builders.valueset.vsac.download_oid_data") +def test_cli(mock_download): + vsac.main( + cli_args=["--steward=acep", "--oid=123", "--api-key=456", "--force-upload", "--path=/tmp"] + ) + assert mock_download.is_called