Merge pull request #651 from OHDSI/olympians_week2
adding custom concept page
This commit is contained in:
commit
86db83477a
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
13734
docs/cdm60.html
13734
docs/cdm60.html
File diff suppressed because it is too large
Load Diff
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -0,0 +1,748 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8" />
|
||||
<meta name="generator" content="pandoc" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
|
||||
|
||||
|
||||
|
||||
|
||||
<title>Custom Concepts</title>
|
||||
|
||||
<script src="site_libs/header-attrs-2.25/header-attrs.js"></script>
|
||||
<script src="site_libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link href="site_libs/bootstrap-3.3.5/css/cosmo.min.css" rel="stylesheet" />
|
||||
<script src="site_libs/bootstrap-3.3.5/js/bootstrap.min.js"></script>
|
||||
<script src="site_libs/bootstrap-3.3.5/shim/html5shiv.min.js"></script>
|
||||
<script src="site_libs/bootstrap-3.3.5/shim/respond.min.js"></script>
|
||||
<style>h1 {font-size: 34px;}
|
||||
h1.title {font-size: 38px;}
|
||||
h2 {font-size: 30px;}
|
||||
h3 {font-size: 24px;}
|
||||
h4 {font-size: 18px;}
|
||||
h5 {font-size: 16px;}
|
||||
h6 {font-size: 12px;}
|
||||
code {color: inherit; background-color: rgba(0, 0, 0, 0.04);}
|
||||
pre:not([class]) { background-color: white }</style>
|
||||
<script src="site_libs/navigation-1.1/tabsets.js"></script>
|
||||
<link href="site_libs/highlightjs-9.12.0/default.css" rel="stylesheet" />
|
||||
<script src="site_libs/highlightjs-9.12.0/highlight.js"></script>
|
||||
<link href="site_libs/font-awesome-6.4.2/css/all.min.css" rel="stylesheet" />
|
||||
<link href="site_libs/font-awesome-6.4.2/css/v4-shims.min.css" rel="stylesheet" />
|
||||
<link rel='shortcut icon' type='image/x-icon' href='favicon.ico' />
|
||||
|
||||
<style type="text/css">
|
||||
code{white-space: pre-wrap;}
|
||||
span.smallcaps{font-variant: small-caps;}
|
||||
span.underline{text-decoration: underline;}
|
||||
div.column{display: inline-block; vertical-align: top; width: 50%;}
|
||||
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
||||
ul.task-list{list-style: none;}
|
||||
</style>
|
||||
|
||||
<style type="text/css">code{white-space: pre;}</style>
|
||||
<script type="text/javascript">
|
||||
if (window.hljs) {
|
||||
hljs.configure({languages: []});
|
||||
hljs.initHighlightingOnLoad();
|
||||
if (document.readyState && document.readyState === "complete") {
|
||||
window.setTimeout(function() { hljs.initHighlighting(); }, 0);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="style.css" type="text/css" />
|
||||
|
||||
|
||||
|
||||
<style type = "text/css">
|
||||
.main-container {
|
||||
max-width: 940px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
img {
|
||||
max-width:100%;
|
||||
}
|
||||
.tabbed-pane {
|
||||
padding-top: 12px;
|
||||
}
|
||||
.html-widget {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
button.code-folding-btn:focus {
|
||||
outline: none;
|
||||
}
|
||||
summary {
|
||||
display: list-item;
|
||||
}
|
||||
details > summary > p:only-child {
|
||||
display: inline;
|
||||
}
|
||||
pre code {
|
||||
padding: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<style type="text/css">
|
||||
.dropdown-submenu {
|
||||
position: relative;
|
||||
}
|
||||
.dropdown-submenu>.dropdown-menu {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
margin-top: -6px;
|
||||
margin-left: -1px;
|
||||
border-radius: 0 6px 6px 6px;
|
||||
}
|
||||
.dropdown-submenu:hover>.dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
.dropdown-submenu>a:after {
|
||||
display: block;
|
||||
content: " ";
|
||||
float: right;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-color: transparent;
|
||||
border-style: solid;
|
||||
border-width: 5px 0 5px 5px;
|
||||
border-left-color: #cccccc;
|
||||
margin-top: 5px;
|
||||
margin-right: -10px;
|
||||
}
|
||||
.dropdown-submenu:hover>a:after {
|
||||
border-left-color: #adb5bd;
|
||||
}
|
||||
.dropdown-submenu.pull-left {
|
||||
float: none;
|
||||
}
|
||||
.dropdown-submenu.pull-left>.dropdown-menu {
|
||||
left: -100%;
|
||||
margin-left: 10px;
|
||||
border-radius: 6px 0 6px 6px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
// manage active state of menu based on current page
|
||||
$(document).ready(function () {
|
||||
// active menu anchor
|
||||
href = window.location.pathname
|
||||
href = href.substr(href.lastIndexOf('/') + 1)
|
||||
if (href === "")
|
||||
href = "index.html";
|
||||
var menuAnchor = $('a[href="' + href + '"]');
|
||||
|
||||
// mark the anchor link active (and if it's in a dropdown, also mark that active)
|
||||
var dropdown = menuAnchor.closest('li.dropdown');
|
||||
if (window.bootstrap) { // Bootstrap 4+
|
||||
menuAnchor.addClass('active');
|
||||
dropdown.find('> .dropdown-toggle').addClass('active');
|
||||
} else { // Bootstrap 3
|
||||
menuAnchor.parent().addClass('active');
|
||||
dropdown.addClass('active');
|
||||
}
|
||||
|
||||
// Navbar adjustments
|
||||
var navHeight = $(".navbar").first().height() + 15;
|
||||
var style = document.createElement('style');
|
||||
var pt = "padding-top: " + navHeight + "px; ";
|
||||
var mt = "margin-top: -" + navHeight + "px; ";
|
||||
var css = "";
|
||||
// offset scroll position for anchor links (for fixed navbar)
|
||||
for (var i = 1; i <= 6; i++) {
|
||||
css += ".section h" + i + "{ " + pt + mt + "}\n";
|
||||
}
|
||||
style.innerHTML = "body {" + pt + "padding-bottom: 40px; }\n" + css;
|
||||
document.head.appendChild(style);
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- tabsets -->
|
||||
|
||||
<style type="text/css">
|
||||
.tabset-dropdown > .nav-tabs {
|
||||
display: inline-table;
|
||||
max-height: 500px;
|
||||
min-height: 44px;
|
||||
overflow-y: auto;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.tabset-dropdown > .nav-tabs > li.active:before, .tabset-dropdown > .nav-tabs.nav-tabs-open:before {
|
||||
content: "\e259";
|
||||
font-family: 'Glyphicons Halflings';
|
||||
display: inline-block;
|
||||
padding: 10px;
|
||||
border-right: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before {
|
||||
content: "\e258";
|
||||
font-family: 'Glyphicons Halflings';
|
||||
border: none;
|
||||
}
|
||||
|
||||
.tabset-dropdown > .nav-tabs > li.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.tabset-dropdown > .nav-tabs > li > a,
|
||||
.tabset-dropdown > .nav-tabs > li > a:focus,
|
||||
.tabset-dropdown > .nav-tabs > li > a:hover {
|
||||
border: none;
|
||||
display: inline-block;
|
||||
border-radius: 4px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.tabset-dropdown > .nav-tabs.nav-tabs-open > li {
|
||||
display: block;
|
||||
float: none;
|
||||
}
|
||||
|
||||
.tabset-dropdown > .nav-tabs > li {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- code folding -->
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<div class="container-fluid main-container">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-bs-toggle="collapse" data-target="#navbar" data-bs-target="#navbar">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.html"><div><img src="ohdsi16x16.png"></img> OMOP Common Data Model </div></a>
|
||||
</div>
|
||||
<div id="navbar" class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li>
|
||||
<a href="index.html">
|
||||
<span class="fa fa-house"></span>
|
||||
|
||||
</a>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<span class="fa fa-landmark"></span>
|
||||
|
||||
Background
|
||||
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li>
|
||||
<a href="background.html">Model Background</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="cdmRefreshProcess.html">CDM Refresh Process</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="vocabulary.html">How the Vocabulary is Built</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<span class="fa fa-list-alt"></span>
|
||||
|
||||
Conventions
|
||||
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li>
|
||||
<a href="dataModelConventions.html">General Conventions</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="ehrObsPeriods.html">Observation Periods for EHR Data</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<span class="fa fa-history"></span>
|
||||
|
||||
CDM Versions
|
||||
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li>
|
||||
<a href="cdm30.html">CDM v3.0</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="cdm53.html">CDM v5.3</a>
|
||||
</li>
|
||||
<li class="dropdown-submenu">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">CDM v5.4</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li>
|
||||
<a href="cdm54.html">CDM v5.4</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="cdm54Changes.html">Changes from CDM v5.3</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="cdm54erd.html">Entity Relationships</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="cdm54ToolingSupport.html">Detailed tooling support per CDM field</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<span class="fa fa-plus-square"></span>
|
||||
|
||||
CDM Proposals
|
||||
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li>
|
||||
<a href="cdmRequestProcess.html">How to Propose Changes to the CDM</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://github.com/OHDSI/CommonDataModel/issues?q=is%3Aopen+is%3Aissue+label%3AProposal">Under Review</a>
|
||||
</li>
|
||||
<li class="dropdown-submenu">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">Accepted</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li>
|
||||
<a href="https://github.com/OHDSI/CommonDataModel/issues/252">Region_concept_id</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<span class="fa fa-question"></span>
|
||||
|
||||
How to
|
||||
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li>
|
||||
<a href="download.html">Download the DDL</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="cdmRPackage.html">Use the CDM R Package</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="drug_dose.html">Calculate Drug Dose</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<span class="fa fa-life-ring"></span>
|
||||
|
||||
Support
|
||||
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li>
|
||||
<a href="cdmDecisionTree.html">Help! My Data Doesn't Fit!</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="faq.html">FAQ</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="sqlScripts.html">SQL Scripts</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="contribute.html">Ask a Question</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li>
|
||||
<a href="https://github.com/OHDSI/CommonDataModel">
|
||||
<span class="fa fa-github"></span>
|
||||
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!--/.nav-collapse -->
|
||||
</div><!--/.container -->
|
||||
</div><!--/.navbar -->
|
||||
|
||||
<div id="header">
|
||||
|
||||
|
||||
|
||||
<h1 class="title toc-ignore"><strong>Custom Concepts</strong></h1>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<p><em>By Maxim Moinat and the Themis Working Group</em></p>
|
||||
<p>The Themis Working Group convened on October 6th and December 7th
|
||||
2023 to discuss the creation this convention for creating custom
|
||||
concepts.</p>
|
||||
<div id="introduction" class="section level2">
|
||||
<h2>Introduction</h2>
|
||||
<p>While the OMOP vocabularies are very comprehensive, it is not always
|
||||
possible to use concepts existing in the OMOP vocabularies. For example,
|
||||
when using a vocabulary that is only used in your institution or having
|
||||
custom defined variables. In these cases, custom concepts can be used.
|
||||
Custom concepts are concepts that are not part of the OMOP vocabularies,
|
||||
and are only used in your institution. There are two main reasons to
|
||||
define custom concepts in your local OMOP CDM vocabulary. The first is
|
||||
that they are available in your local Atlas instance, which has several
|
||||
use cases: - When viewing a standard concept, you can see which custom
|
||||
concepts are mapped to it. This allows you to better understand what the
|
||||
standard concept represents in your institution. - You can search for a
|
||||
custom concept and find which standard concepts it is mapped to, to
|
||||
include in your standard concept set. - For studies only using your
|
||||
local data, you can define cohorts using custom concepts (through ‘Add
|
||||
attribute’->‘Add … Source Concept’). The second reason is using the
|
||||
custom concepts in your ETL. By creating both the custom concept, and
|
||||
the ‘Maps to’ relationship (example below), we can use this in the same
|
||||
way as mapping other source vocabularies.</p>
|
||||
<p><strong>Custom concepts are only defined locally. These cannot be
|
||||
used for network research. Therefore it remains very important to map to
|
||||
standard concepts.</strong></p>
|
||||
</div>
|
||||
<div id="conventions" class="section level2">
|
||||
<h2>Conventions</h2>
|
||||
<p>It is important to follow a set of conventions when creating custom
|
||||
concepts, to avoid negatively impacting network studies. The conventions
|
||||
are as follows:</p>
|
||||
<ul>
|
||||
<li>Custom concepts have a <code>concept_id</code> larger than
|
||||
2,000,000,000. This is to avoid clashes with existing
|
||||
concepts.<sup>†</sup></li>
|
||||
<li>Custom concepts are always non-standard
|
||||
(<code>concept.standard_concept = NULL</code>).</li>
|
||||
<li>Custom concepts can only be used in the
|
||||
<code>_source_concept_id</code> fields
|
||||
(e.g. <code>procedure_source_concept_id</code>)</li>
|
||||
<li>If the field <code>_source_concept_id</code> does not exist, add a
|
||||
custom column to your table (e.g. a
|
||||
<code>drug_exposure.route_source_concept_id</code>)<sup>1</sup>. If
|
||||
there is a wide need in the community, a proposal can be submitted to
|
||||
the CDM Working Group to add these fields in a future OMOP CDM
|
||||
version.</li>
|
||||
<li>Always add custom concepts to a new vocabulary specifically for your
|
||||
source (see example below). If you have a need to add concepts to an
|
||||
existing vocabulary, please contact the OHDSI Vocabulary Working
|
||||
Group.</li>
|
||||
<li>Do NOT add custom concepts to the hierarchy of existing vocabularies
|
||||
(either in the <code>concept_ancestor</code> table or
|
||||
<code>subsumes</code>/<code>is a</code> relations in the
|
||||
<code>concept_relationship</code> table). This is to avoid descendant
|
||||
concepts to differ between sites.</li>
|
||||
</ul>
|
||||
<p>In addition, it is recommended to follow these suggestions:</p>
|
||||
<ul>
|
||||
<li>For the <code>domain_id</code>, choose an appropriate existing value
|
||||
from the domain table (‘Condition’, ‘Drug’, ‘Procedure’, etc.). Note
|
||||
that this determines the target table the concept can be used in.</li>
|
||||
<li>For the <code>concept_class_id</code>, it is not required to create
|
||||
new classes for your source vocabulary. To leave the class empty
|
||||
explicitly, use class ‘Undefined’. It is also allowed to reuse existing
|
||||
concept classes (e.g. SNOMED’s ‘Clinical Finding’ for conditions or
|
||||
RxNorm drug classes ‘Ingredient’, ‘Clinical Drug’, ‘Branded Drug’
|
||||
etc.).</li>
|
||||
<li>In the new vocabulary record, the <code>vocabulary_concept_id</code>
|
||||
can be set to 0, as this is often not used in the OMOP CDM.</li>
|
||||
<li>Create mappings between custom concepts and standard concepts. This
|
||||
can be done by adding rows to the <code>concept_relationship</code>
|
||||
table, with the <code>Maps to</code> relation. The reverse relation,
|
||||
<code>Mapped from</code>, should also be added. This allows for easy
|
||||
navigation between custom and standard concepts<sup>2</sup>. The ‘mapped
|
||||
to’ concept should be a standard concept.</li>
|
||||
<li>Officially, <code>concept_hierarchy</code> is only for standard
|
||||
concepts. However, if you local use case requires this (e.g. for
|
||||
selection of descendants of custom concepts), the custom concepts can be
|
||||
added into their own, isolated, hierarchy. ## Example In this example,
|
||||
we will add one custom concept for the ‘DHD Diagnose Thesaurus’. This is
|
||||
a Dutch vocabulary, which is not part of the OMOP vocabularies. We will
|
||||
add the concept ‘diabetes mellitus type 1’. This concept has a mapping
|
||||
to the standard concept ‘Diabetes mellitus type 1 (disorder)’,
|
||||
concept_id 3341872.</li>
|
||||
</ul>
|
||||
<p>After creating these records, we can use the custom concept in our
|
||||
ETL to populate the <code>condition_source_concept_id</code> field.</p>
|
||||
<div id="custom-vocabulary" class="section level3">
|
||||
<h3>Custom vocabulary</h3>
|
||||
<table>
|
||||
<colgroup>
|
||||
<col width="50%" />
|
||||
<col width="50%" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr class="header">
|
||||
<th>Field</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td>vocabulary_id</td>
|
||||
<td>DHD Diagnose Thesaurus</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>vocabulary_name</td>
|
||||
<td>Dutch Hospital Data Diagnosethesaurus</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>vocabulary_reference</td>
|
||||
<td><a
|
||||
href="https://www.dhd.nl/producten-diensten/diagnosethesaurus/Paginas/diagnosethesaurus.asp"
|
||||
class="uri">https://www.dhd.nl/producten-diensten/diagnosethesaurus/Paginas/diagnosethesaurus.asp</a></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>vocabulary_version</td>
|
||||
<td>2023-04-20</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>vocabulary_concept_id</td>
|
||||
<td>0</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="custom-concept" class="section level3">
|
||||
<h3>Custom concept</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr class="header">
|
||||
<th>Field</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td>concept_id</td>
|
||||
<td>2 000 000 001</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>concept_name</td>
|
||||
<td>diabetes mellitus type 1</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>domain_id</td>
|
||||
<td>Condition</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>vocabulary_id</td>
|
||||
<td>DHD Diagnose Thesaurus</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>concept_class_id</td>
|
||||
<td>Undefined</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>standard_concept</td>
|
||||
<td><code>NULL</code></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>concept_code</td>
|
||||
<td>0000002630</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>valid_start_date</td>
|
||||
<td>2017-08-01</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>valid_end_date</td>
|
||||
<td>2099-12-31</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>invalid_reason</td>
|
||||
<td><code>NULL</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="mapping-relationship" class="section level3">
|
||||
<h3>Mapping relationship</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr class="header">
|
||||
<th>Field</th>
|
||||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td>concept_id_1</td>
|
||||
<td>2 000 000 001</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>concept_id_2</td>
|
||||
<td>3341872</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>relationship_id</td>
|
||||
<td>Maps to</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>valid_start_date</td>
|
||||
<td>2017-08-01</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>valid_end_date</td>
|
||||
<td>2099-12-31</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>invalid_reason</td>
|
||||
<td><code>NULL</code></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>Field</td>
|
||||
<td>Value</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>——-</td>
|
||||
<td>——-</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>concept_id_1</td>
|
||||
<td>3341872</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>concept_id_2</td>
|
||||
<td>2 000 000 001</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>relationship_id</td>
|
||||
<td>Mapped from</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>valid_start_date</td>
|
||||
<td>2017-08-01</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>valid_end_date</td>
|
||||
<td>2099-12-31</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>invalid_reason</td>
|
||||
<td><code>NULL</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>See the <a
|
||||
href="https://ohdsi.github.io/CommonDataModel/sqlScripts.html#Source_to_Standard">Source
|
||||
To Standard query</a> to map a code in the source data to a standard
|
||||
concept.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="getting-your-vocabulary-into-the-omop-vocabularies"
|
||||
class="section level2">
|
||||
<h2>Getting your vocabulary into the OMOP vocabularies</h2>
|
||||
<p>If you think your custom concepts are useful for others, you can
|
||||
submit them to the OMOP vocabularies. This could be as a supported
|
||||
source vocabulary (like ICD) or a new vocabulary with standard concepts
|
||||
(like LOINC). This is a separate process from the conventions described
|
||||
above. Please see the <a
|
||||
href="https://ohdsi.github.io/CommonDataModel/vocabRequest.html">this
|
||||
support page</a>.</p>
|
||||
</div>
|
||||
<div id="references" class="section level2">
|
||||
<h2>References</h2>
|
||||
<p><sup>1</sup><a
|
||||
href="https://www.ohdsi.org/2021-global-symposium-showcase-18/">Melanie
|
||||
Philofsky; Implementing & adopting a customized OMOP Common Data
|
||||
Model; OHDSI Symposium 2021</a></p>
|
||||
<p><sup>2</sup><a
|
||||
href="https://www.ohdsi.org/wp-content/uploads/2020/10/Melanie-Philofsky-Philofsky-Mapping-Source-Codes-Poster.pdf">Melanie
|
||||
Philofsky; Mapping Custom Source Codes to Standard Concepts: A
|
||||
Comparison of Two Approaches; OHDSI Symposium 2020</a> </br>
|
||||
<sup>†</sup>this is why custom concepts are sometimes referred to as
|
||||
“2B+” or “2billionaires”.</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
// add bootstrap table styles to pandoc tables
|
||||
function bootstrapStylePandocTables() {
|
||||
$('tr.odd').parent('tbody').parent('table').addClass('table table-condensed');
|
||||
}
|
||||
$(document).ready(function () {
|
||||
bootstrapStylePandocTables();
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<!-- tabsets -->
|
||||
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
window.buildTabsets("TOC");
|
||||
});
|
||||
|
||||
$(document).ready(function () {
|
||||
$('.tabset-dropdown > .nav-tabs > li').click(function () {
|
||||
$(this).parent().toggleClass('nav-tabs-open');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- code folding -->
|
||||
|
||||
|
||||
<!-- dynamically load mathjax for compatibility with self-contained -->
|
||||
<script>
|
||||
(function () {
|
||||
var script = document.createElement("script");
|
||||
script.type = "text/javascript";
|
||||
script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
|
||||
document.getElementsByTagName("head")[0].appendChild(script);
|
||||
})();
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -292,6 +292,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -292,6 +292,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
@ -508,7 +511,7 @@ were to map source codes on the fly. It is important to note that this
|
|||
script will show ALL mappings, not just those to Standard, Valid
|
||||
Concepts. Be sure to add a filter that will only grab the correct
|
||||
Standard, Valid codes.</p>
|
||||
<pre class="sql"><code>SELECT c.concept_code AS SOURCE_CODE, c.concept_id AS SOURCE_CONCEPT_ID, c.concept_name AS SOURCE_CODE_DESCRIPTION, c.vocabulary_id AS SOURCE_VOCABULARY_ID, c.domain_id AS SOURCE_DOMAIN_ID, c.CONCEPT_CLASS_ID AS SOURCE_CONCEPT_CLASS_ID, c.VALID_START_DATE AS SOURCE_VALID_START_DATE, c.VALID_END_DATE AS SOURCE_VALID_END_DATE, c.INVALID_REASON AS SOURCE_INVALID_REASON, c1.concept_id AS TARGET_CONCEPT_ID, c1.concept_name AS TARGET_CONCEPT_NAME, c1.VOCABULARY_ID AS TARGET_VOCABUALRY_ID, c1.domain_id AS TARGET_DOMAIN_ID, c1.concept_class_id AS TARGET_CONCEPT_CLASS_ID, c1.INVALID_REASON AS TARGET_INVALID_REASON, c1.standard_concept AS TARGET_STANDARD_CONCEPT
|
||||
<pre class="sql"><code>SELECT c.concept_code AS SOURCE_CODE, c.concept_id AS SOURCE_CONCEPT_ID, c.concept_name AS SOURCE_CODE_DESCRIPTION, c.vocabulary_id AS SOURCE_VOCABULARY_ID, c.domain_id AS SOURCE_DOMAIN_ID, c.CONCEPT_CLASS_ID AS SOURCE_CONCEPT_CLASS_ID, c.VALID_START_DATE AS SOURCE_VALID_START_DATE, c.VALID_END_DATE AS SOURCE_VALID_END_DATE, c.INVALID_REASON AS SOURCE_INVALID_REASON, c1.concept_id AS TARGET_CONCEPT_ID, c1.concept_name AS TARGET_CONCEPT_NAME, c1.VOCABULARY_ID AS TARGET_VOCABULARY_ID, c1.domain_id AS TARGET_DOMAIN_ID, c1.concept_class_id AS TARGET_CONCEPT_CLASS_ID, c1.INVALID_REASON AS TARGET_INVALID_REASON, c1.standard_concept AS TARGET_STANDARD_CONCEPT
|
||||
FROM CONCEPT C
|
||||
JOIN CONCEPT_RELATIONSHIP CR
|
||||
ON C.CONCEPT_ID = CR.CONCEPT_ID_1
|
||||
|
|
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -290,6 +290,9 @@ $(document).ready(function () {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -366,6 +366,9 @@ div.tocify {
|
|||
<li>
|
||||
<a href="cdmPrivacy.html">Patient Privacy and OMOP</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="customConcepts.html">Custom Concepts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
|
|
|
@ -33,6 +33,8 @@ navbar:
|
|||
href: ehrObsPeriods.html
|
||||
- text: "Patient Privacy and OMOP"
|
||||
href: cdmPrivacy.html
|
||||
- text: "Custom Concepts"
|
||||
href: customConcepts.html
|
||||
- text: "CDM Versions"
|
||||
icon: fa-history
|
||||
menu:
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
---
|
||||
title: "**Custom Concepts**"
|
||||
output: html_document
|
||||
---
|
||||
|
||||
*By Maxim Moinat and the Themis Working Group*
|
||||
|
||||
The Themis Working Group convened on October 6th and December 7th 2023 to discuss the creation this convention for creating custom concepts.
|
||||
|
||||
## Introduction
|
||||
|
||||
While the OMOP vocabularies are very comprehensive, it is not always possible to use concepts existing in the OMOP vocabularies. For example, when using a vocabulary that is only used in your institution or having custom defined variables. In these cases, custom concepts can be used. Custom concepts are concepts that are not part of the OMOP vocabularies, and are only used in your institution.
|
||||
There are two main reasons to define custom concepts in your local OMOP CDM vocabulary. The first is that they are available in your local Atlas instance, which has several use cases:
|
||||
- When viewing a standard concept, you can see which custom concepts are mapped to it. This allows you to better understand what the standard concept represents in your institution.
|
||||
- You can search for a custom concept and find which standard concepts it is mapped to, to include in your standard concept set.
|
||||
- For studies only using your local data, you can define cohorts using custom concepts (through 'Add attribute'->'Add ... Source Concept').
|
||||
The second reason is using the custom concepts in your ETL. By creating both the custom concept, and the 'Maps to' relationship (example below), we can use this in the same way as mapping other source vocabularies.
|
||||
|
||||
**Custom concepts are only defined locally. These cannot be used for network research. Therefore it remains very important to map to standard concepts.**
|
||||
|
||||
## Conventions
|
||||
|
||||
It is important to follow a set of conventions when creating custom concepts, to avoid negatively impacting network studies. The conventions are as follows:
|
||||
|
||||
- Custom concepts have a `concept_id` larger than 2,000,000,000. This is to avoid clashes with existing concepts.<sup>†</sup>
|
||||
- Custom concepts are always non-standard (`concept.standard_concept = NULL`).
|
||||
- Custom concepts can only be used in the `_source_concept_id` fields (e.g. `procedure_source_concept_id`)
|
||||
- If the field `_source_concept_id` does not exist, add a custom column to your table (e.g. a `drug_exposure.route_source_concept_id`)<sup>1</sup>. If there is a wide need in the community, a proposal can be submitted to the CDM Working Group to add these fields in a future OMOP CDM version.
|
||||
- Always add custom concepts to a new vocabulary specifically for your source (see example below). If you have a need to add concepts to an existing vocabulary, please contact the OHDSI Vocabulary Working Group.
|
||||
- Do NOT add custom concepts to the hierarchy of existing vocabularies (either in the `concept_ancestor` table or `subsumes`/`is a` relations in the `concept_relationship` table). This is to avoid descendant concepts to differ between sites.
|
||||
|
||||
In addition, it is recommended to follow these suggestions:
|
||||
|
||||
- For the `domain_id`, choose an appropriate existing value from the domain table ('Condition', 'Drug', 'Procedure', etc.). Note that this determines the target table the concept can be used in.
|
||||
- For the `concept_class_id`, it is not required to create new classes for your source vocabulary. To leave the class empty explicitly, use class 'Undefined'. It is also allowed to reuse existing concept classes (e.g. SNOMED's 'Clinical Finding' for conditions or RxNorm drug classes 'Ingredient', 'Clinical Drug', 'Branded Drug' etc.).
|
||||
- In the new vocabulary record, the `vocabulary_concept_id` can be set to 0, as this is often not used in the OMOP CDM.
|
||||
- Create mappings between custom concepts and standard concepts. This can be done by adding rows to the `concept_relationship` table, with the `Maps to` relation. The reverse relation, `Mapped from`, should also be added. This allows for easy navigation between custom and standard concepts<sup>2</sup>. The 'mapped to' concept should be a standard concept.
|
||||
- Officially, `concept_hierarchy` is only for standard concepts. However, if you local use case requires this (e.g. for selection of descendants of custom concepts), the custom concepts can be added into their own, isolated, hierarchy.
|
||||
## Example
|
||||
In this example, we will add one custom concept for the 'DHD Diagnose Thesaurus'. This is a Dutch vocabulary, which is not part of the OMOP vocabularies. We will add the concept 'diabetes mellitus type 1'. This concept has a mapping to the standard concept 'Diabetes mellitus type 1 (disorder)', concept_id 3341872.
|
||||
|
||||
After creating these records, we can use the custom concept in our ETL to populate the `condition_source_concept_id` field.
|
||||
|
||||
### Custom vocabulary
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| vocabulary_id | DHD Diagnose Thesaurus |
|
||||
| vocabulary_name | Dutch Hospital Data Diagnosethesaurus |
|
||||
| vocabulary_reference | https://www.dhd.nl/producten-diensten/diagnosethesaurus/Paginas/diagnosethesaurus.asp |
|
||||
| vocabulary_version | 2023-04-20 |
|
||||
| vocabulary_concept_id | 0 |
|
||||
|
||||
### Custom concept
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| concept_id | 2 000 000 001 |
|
||||
| concept_name | diabetes mellitus type 1 |
|
||||
| domain_id | Condition |
|
||||
| vocabulary_id | DHD Diagnose Thesaurus |
|
||||
| concept_class_id | Undefined |
|
||||
| standard_concept | `NULL` |
|
||||
| concept_code | 0000002630 |
|
||||
| valid_start_date | 2017-08-01 |
|
||||
| valid_end_date | 2099-12-31 |
|
||||
| invalid_reason | `NULL` |
|
||||
|
||||
### Mapping relationship
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| concept_id_1 | 2 000 000 001 |
|
||||
| concept_id_2 | 3341872 |
|
||||
| relationship_id | Maps to |
|
||||
| valid_start_date | 2017-08-01 |
|
||||
| valid_end_date | 2099-12-31 |
|
||||
| invalid_reason | `NULL` |
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| concept_id_1 | 3341872 |
|
||||
| concept_id_2 | 2 000 000 001 |
|
||||
| relationship_id | Mapped from |
|
||||
| valid_start_date | 2017-08-01 |
|
||||
| valid_end_date | 2099-12-31 |
|
||||
| invalid_reason | `NULL` |
|
||||
|
||||
See the [Source To Standard query](https://ohdsi.github.io/CommonDataModel/sqlScripts.html#Source_to_Standard) to map a code in the source data to a standard concept.
|
||||
|
||||
## Getting your vocabulary into the OMOP vocabularies
|
||||
|
||||
If you think your custom concepts are useful for others, you can submit them to the OMOP vocabularies. This could be as a supported source vocabulary (like ICD) or a new vocabulary with standard concepts (like LOINC). This is a separate process from the conventions described above. Please see the [this support page](https://ohdsi.github.io/CommonDataModel/vocabRequest.html).
|
||||
|
||||
## References
|
||||
<sup>1</sup>[Melanie Philofsky; Implementing & adopting a customized OMOP Common Data Model; OHDSI Symposium 2021](https://www.ohdsi.org/2021-global-symposium-showcase-18/)
|
||||
|
||||
<sup>2</sup>[Melanie Philofsky; Mapping Custom Source Codes to Standard Concepts: A Comparison of Two Approaches; OHDSI Symposium 2020](https://www.ohdsi.org/wp-content/uploads/2020/10/Melanie-Philofsky-Philofsky-Mapping-Source-Codes-Poster.pdf)
|
||||
</br>
|
||||
<sup>†</sup>this is why custom concepts are sometimes referred to as "2B+" or "2billionaires".
|
Loading…
Reference in New Issue