OMOP/docs/cdm531.html

1776 lines
44 KiB
HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="pandoc" />
<title>CDM v5.3.1</title>
<script src="site_libs/jquery-1.11.3/jquery.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>
<script src="site_libs/jqueryui-1.11.4/jquery-ui.min.js"></script>
<link href="site_libs/tocify-1.9.1/jquery.tocify.css" rel="stylesheet" />
<script src="site_libs/tocify-1.9.1/jquery.tocify.js"></script>
<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-5.1.0/css/all.css" rel="stylesheet" />
<link href="site_libs/font-awesome-5.1.0/css/v4-shims.css" rel="stylesheet" />
<link rel='shortcut icon' type='image/x-icon' href='favicon.ico' />
<style type="text/css">code{white-space: pre;}</style>
<style type="text/css">
pre:not([class]) {
background-color: white;
}
</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>
<style type="text/css">
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;
}
.table th:not([align]) {
text-align: left;
}
</style>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<style type = "text/css">
.main-container {
max-width: 940px;
margin-left: auto;
margin-right: auto;
}
code {
color: inherit;
background-color: rgba(0, 0, 0, 0.04);
}
img {
max-width:100%;
height: auto;
}
.tabbed-pane {
padding-top: 12px;
}
.html-widget {
margin-bottom: 20px;
}
button.code-folding-btn:focus {
outline: none;
}
summary {
display: list-item;
}
</style>
<style type="text/css">
/* padding for bootstrap navbar */
body {
padding-top: 51px;
padding-bottom: 40px;
}
/* offset scroll position for anchor links (for fixed navbar) */
.section h1 {
padding-top: 56px;
margin-top: -56px;
}
.section h2 {
padding-top: 56px;
margin-top: -56px;
}
.section h3 {
padding-top: 56px;
margin-top: -56px;
}
.section h4 {
padding-top: 56px;
margin-top: -56px;
}
.section h5 {
padding-top: 56px;
margin-top: -56px;
}
.section h6 {
padding-top: 56px;
margin-top: -56px;
}
.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: #ffffff;
}
.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>
// 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 it active
menuAnchor.parent().addClass('active');
// if it's got a parent navbar menu mark it active as well
menuAnchor.closest('li.dropdown').addClass('active');
});
</script>
<div class="container-fluid main-container">
<!-- tabsets -->
<style type="text/css">
.tabset-dropdown > .nav-tabs {
display: inline-table;
max-height: 500px;
min-height: 44px;
overflow-y: auto;
background: white;
border: 1px solid #ddd;
border-radius: 4px;
}
.tabset-dropdown > .nav-tabs > li.active:before {
content: "";
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: "&#xe258;";
border: none;
}
.tabset-dropdown > .nav-tabs.nav-tabs-open:before {
content: "";
font-family: 'Glyphicons Halflings';
display: inline-block;
padding: 10px;
border-right: 1px solid #ddd;
}
.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;
}
.tabset-dropdown > .nav-tabs.nav-tabs-open > li {
display: block;
float: none;
}
.tabset-dropdown > .nav-tabs > li {
display: none;
}
</style>
<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 -->
<script>
$(document).ready(function () {
// move toc-ignore selectors from section div to header
$('div.section.toc-ignore')
.removeClass('toc-ignore')
.children('h1,h2,h3,h4,h5').addClass('toc-ignore');
// establish options
var options = {
selectors: "h1,h2,h3,h4,h5",
theme: "bootstrap3",
context: '.toc-content',
hashGenerator: function (text) {
return text.replace(/[.\\/?&!#<>]/g, '').replace(/\s/g, '_').toLowerCase();
},
ignoreSelector: ".toc-ignore",
scrollTo: 0
};
options.showAndHide = true;
options.smoothScroll = true;
// tocify
var toc = $("#TOC").tocify(options).data("toc-tocify");
});
</script>
<style type="text/css">
#TOC {
margin: 25px 0px 20px 0px;
}
@media (max-width: 768px) {
#TOC {
position: relative;
width: 100%;
}
}
.toc-content {
padding-left: 30px;
padding-right: 40px;
}
div.main-container {
max-width: 1200px;
}
div.tocify {
width: 20%;
max-width: 260px;
max-height: 85%;
}
@media (min-width: 768px) and (max-width: 991px) {
div.tocify {
width: 25%;
}
}
@media (max-width: 767px) {
div.tocify {
width: 100%;
max-width: none;
}
}
.tocify ul, .tocify li {
line-height: 20px;
}
.tocify-subheader .tocify-item {
font-size: 0.90em;
padding-left: 25px;
text-indent: 0;
}
.tocify .list-group-item {
border-radius: 0px;
}
</style>
<!-- setup 3col/9col grid for toc_float and main content -->
<div class="row-fluid">
<div class="col-xs-12 col-sm-4 col-md-3">
<div id="TOC" class="tocify">
</div>
</div>
<div class="toc-content col-xs-12 col-sm-8 col-md-9">
<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-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-home"></span>
</a>
</li>
<li>
<a href="dataModelConventions.html">
<span class="fa fa-list-alt"></span>
Conventions
</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" 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="cdm531.html">CDM v5.3.1</a>
</li>
<li>
<a href="cdm60.html">CDM v6.0</a>
</li>
</ul>
</li>
<li>
<a href="faq.html">
<span class="fa fa-question"></span>
FAQ
</a>
</li>
<li>
<a href="contribute.html">
<span class="fa fa-wrench"></span>
Contribute
</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
</ul>
</div><!--/.nav-collapse -->
</div><!--/.container -->
</div><!--/.navbar -->
<div class="fluid-row" id="header">
<h1 class="title toc-ignore">CDM v5.3.1</h1>
</div>
<div id="omop-common-data-model-documentation" class="section level2">
<h2>OMOP Common Data Model Documentation</h2>
</div>
<div id="cdm-v5.3.1" class="section level2">
<h2>CDM v5.3.1</h2>
<div id="person" class="section level3 tabset tabset-pills">
<h3>PERSON</h3>
<table class="table table-condensed table-hover" style="font-size: 13px; margin-left: auto; margin-right: auto;">
<thead>
<tr>
<th style="text-align:left;">
CDM Field
</th>
<th style="text-align:left;width: 3in; ">
User Guide
</th>
<th style="text-align:left;width: 4in; ">
ETL Conventions
</th>
<th style="text-align:left;width: 1in; ">
Datatype
</th>
<th style="text-align:left;width: 1in; ">
Required
</th>
<th style="text-align:left;width: 1in; ">
Primary Key
</th>
<th style="text-align:left;width: 1in; ">
Foreign Key
</th>
<th style="text-align:left;width: 1in; ">
FK Table
</th>
<th style="text-align:left;width: 1in; ">
FK Domain
</th>
<th style="text-align:left;width: 1in; ">
FK Class
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;font-weight: bold;">
person_id
</td>
<td style="text-align:left;width: 3in; ">
It is assumed that every person with a different unique identifier is in fact a different person and should be treated independently.
</td>
<td style="text-align:left;width: 4in; ">
Any person linkage that needs to occur to identify unique persons should be done prior to ETL.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
gender _concept_id
</td>
<td style="text-align:left;width: 3in; ">
This field is meant to capture the biological sex at birth of the Person. This field should not be used to study gender identity issues.
</td>
<td style="text-align:left;width: 4in; ">
Use the gender or sex value present in the data under the assumption that it is the biological sex at birth. If the source data captures gender identity it should be stored in the OBSERVATION table.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CONCEPT
</td>
<td style="text-align:left;width: 1in; ">
Gender
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
year _of_birth
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
For data sources with date of birth, the year is extracted. For data sources where the year of birth is not available, the approximate year of birth is derived based on any age group categorization available.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
month _of_birth
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
For data sources that provide the precise date of birth, the month is extracted and stored in this field.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
day _of_birth
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
For data sources that provide the precise date of birth, the day is extracted and stored in this field.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
birth _datetime
</td>
<td style="text-align:left;width: 3in; ">
Compute age using birth_datetime.
</td>
<td style="text-align:left;width: 4in; ">
For data sources that provide the precise datetime of birth, store that value in this field. If birth_datetime is not provided in the source, use the following logic to infer the date: If day_of_birth is null and month_of_birth is not null then use month/1/year. If month_of_birth is null then use 1/day/year, if day_of_birth is null and month_of_birth is null then 1/1/year. If time of birth is not given use midnight (00:00:0000).
</td>
<td style="text-align:left;width: 1in; ">
datetime
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
race_ concept_id
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CONCEPT
</td>
<td style="text-align:left;width: 1in; ">
Race
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
ethnicity _concept_id
</td>
<td style="text-align:left;width: 3in; ">
Ethnic backgrounds as subsets of race. The OMOP CDM adheres to the OMB standards so only Concepts that represent “Hispanic” and “Not Hispanic” are stored here. If a source has more granular ethnicity information it can be found in the field ethnicity_source_value.
</td>
<td style="text-align:left;width: 4in; ">
Ethnicity in the OMOP CDM follows the OMB Standards for Data on Race and Ethnicity: Only distinctions between Hispanics and Non-Hispanics are made. If a source provides more granular ethnicity information it should be stored in the field ethnicity_source_value.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CONCEPT
</td>
<td style="text-align:left;width: 1in; ">
Ethnicity
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
location_id
</td>
<td style="text-align:left;width: 3in; ">
The location refers to the physical address of the person.
</td>
<td style="text-align:left;width: 4in; ">
Put the location_id from the LOCATION table here that represents the most granular location information for the person. This could be zip code, state, or county for example.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
LOCATION
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
provider_id
</td>
<td style="text-align:left;width: 3in; ">
The Provider refers to the last known primary care provider (General Practitioner).
</td>
<td style="text-align:left;width: 4in; ">
Put the provider_id from the PROVIDER table of the last known general practitioner of the person.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
PROVIDER
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
care_site_id
</td>
<td style="text-align:left;width: 3in; ">
The Care Site refers to where the Provider typically provides the primary care.
</td>
<td style="text-align:left;width: 4in; ">
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CARE_SITE
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
person _source_value
</td>
<td style="text-align:left;width: 3in; ">
Use this field to link back to persons in the source data. This is typically used for error checking of ETL logic.
</td>
<td style="text-align:left;width: 4in; ">
Some use cases require the ability to link back to persons in the source data. This field allows for the storing of the person value as it appears in the source.
</td>
<td style="text-align:left;width: 1in; ">
varchar(50)
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
gender _source_value
</td>
<td style="text-align:left;width: 3in; ">
This field is used to store the biological sex of the person from the source data. It is not intended for use in standard analytics but for reference only.
</td>
<td style="text-align:left;width: 4in; ">
Put the biological sex of the person as it appears in the source data.
</td>
<td style="text-align:left;width: 1in; ">
varchar(50)
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
gender_source _concept_id
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
If the source data codes biological sex in a non-standard vocabulary, store the concept_id here.
</td>
<td style="text-align:left;width: 1in; ">
Integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CONCEPT
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
race_ source_value
</td>
<td style="text-align:left;width: 3in; ">
This field is used to store the race of the person from the source data. It is not intended for use in standard analytics but for reference only.
</td>
<td style="text-align:left;width: 4in; ">
Put the race of the person as it appears in the source data.
</td>
<td style="text-align:left;width: 1in; ">
varchar(50)
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
race_ source_concept_id
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
If the source data codes race in an OMOP supported vocabulary store the concept_id here.
</td>
<td style="text-align:left;width: 1in; ">
Integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CONCEPT
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
ethnicity_ source_value
</td>
<td style="text-align:left;width: 3in; ">
This field is used to store the ethnicity of the person from the source data. It is not intended for use in standard analytics but for reference only.
</td>
<td style="text-align:left;width: 4in; ">
If the person has an ethnicity other than the OMB standard of “Hispanic” or “Not Hispanic” store that value from the source data here.
</td>
<td style="text-align:left;width: 1in; ">
varchar(50)
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
ethnicity_source _concept_id
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
If the source data codes ethnicity in an OMOP supported vocabulary, store the concept_id here.
</td>
<td style="text-align:left;width: 1in; ">
Integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CONCEPT
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
</tbody>
</table>
</div>
<div id="observation_period" class="section level3 tabset tabset-pills">
<h3>OBSERVATION_PERIOD</h3>
<table class="table table-condensed table-hover" style="font-size: 13px; margin-left: auto; margin-right: auto;">
<thead>
<tr>
<th style="text-align:left;">
CDM Field
</th>
<th style="text-align:left;width: 3in; ">
User Guide
</th>
<th style="text-align:left;width: 4in; ">
ETL Conventions
</th>
<th style="text-align:left;width: 1in; ">
Datatype
</th>
<th style="text-align:left;width: 1in; ">
Required
</th>
<th style="text-align:left;width: 1in; ">
Primary Key
</th>
<th style="text-align:left;width: 1in; ">
Foreign Key
</th>
<th style="text-align:left;width: 1in; ">
FK Table
</th>
<th style="text-align:left;width: 1in; ">
FK Domain
</th>
<th style="text-align:left;width: 1in; ">
FK Class
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;font-weight: bold;">
observation _period_id
</td>
<td style="text-align:left;width: 3in; ">
A Person can have multiple discrete observations periods which are identified by the Observation_Period_Id. It is assumed that the observation period covers the period of time for which we know events occurred for the Person. In the context of the Common Data Model the absence of events during an observation period implies that the event did not occur.
</td>
<td style="text-align:left;width: 4in; ">
Assign a unique observation_period_id to each discrete observation period for a Person. An observation period should the length of time for which we know events occurred for the Person. It may take some logic to define an observation period, especially when working with EHR or registry data. Often if no enrollment or coverage information is given an observation period is defined as the time between the earliest record and the latest record available for a person.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
person_id
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
PERSON
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
observation_period _start_date
</td>
<td style="text-align:left;width: 3in; ">
Use this date to determine the start date of the period for which we can assume that all events for a Person are recorded and any absense of records indicates an absence of events.
</td>
<td style="text-align:left;width: 4in; ">
It is often the case that the idea of observation periods does not exist in source data. In those cases the observation_period_start_date can be inferred as the earliest event date available for the Person. In US claims, the observation period can be considered as the time period the person is enrolled with an insurer. If a Person switches plans but stays with the same insurer, that change would be captured in payer_plan_period.
</td>
<td style="text-align:left;width: 1in; ">
date
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
observation_period _end_date
</td>
<td style="text-align:left;width: 3in; ">
Use this date to determine the end date of the period for which we can assume that all events for a Person are recorded and any absense of records indicates an absence of events.
</td>
<td style="text-align:left;width: 4in; ">
It is often the case that the idea of observation periods does not exist in source data. In those cases the observation_period_start_end_date can be inferred as the latest event date available for the Person. The event dates include insurance enrollment dates.
</td>
<td style="text-align:left;width: 1in; ">
date
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
period_type _concept_id
</td>
<td style="text-align:left;width: 3in; ">
This field can be used to determine the provenance of the observation period as in whether the period was determined from an insurance enrollment file or if it was determined from EHR healthcare encounters.
</td>
<td style="text-align:left;width: 4in; ">
Choose the observation_period_type_concept_id that best represents how the period was determined.
</td>
<td style="text-align:left;width: 1in; ">
Integer
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CONCEPT
</td>
<td style="text-align:left;width: 1in; ">
Type Concept
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
</tbody>
</table>
</div>
<div id="visit_occurrence" class="section level3 tabset tabset-pills">
<h3>VISIT_OCCURRENCE</h3>
<table class="table table-condensed table-hover" style="font-size: 13px; margin-left: auto; margin-right: auto;">
<thead>
<tr>
<th style="text-align:left;">
CDM Field
</th>
<th style="text-align:left;width: 3in; ">
User Guide
</th>
<th style="text-align:left;width: 4in; ">
ETL Conventions
</th>
<th style="text-align:left;width: 1in; ">
Datatype
</th>
<th style="text-align:left;width: 1in; ">
Required
</th>
<th style="text-align:left;width: 1in; ">
Primary Key
</th>
<th style="text-align:left;width: 1in; ">
Foreign Key
</th>
<th style="text-align:left;width: 1in; ">
FK Table
</th>
<th style="text-align:left;width: 1in; ">
FK Domain
</th>
<th style="text-align:left;width: 1in; ">
FK Class
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;font-weight: bold;">
visit _occurrence_id
</td>
<td style="text-align:left;width: 3in; ">
Use this to identify unique interactions between a person and the health care system. This identifier links across the other CDM event tables to associate events with a visit.
</td>
<td style="text-align:left;width: 4in; ">
This should be populated by creating a unique identifier for each unique interaction between a person and the healthcare system where the person receives a medical good or service over a span of time.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
person_id
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
PERSON
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
visit _concept_id
</td>
<td style="text-align:left;width: 3in; ">
This field contains a concept id representing the kind of visit, like inpatient or outpatient.
</td>
<td style="text-align:left;width: 4in; ">
Populate this field based on the kind of visit that took place for the person. For example this could be “Inpatient Visit”, “Outpatient Visit”, “Ambulatory Visit”, etc. It is often the case that some logic should be written for how to define visits and how to assign Visit_Concept_Id. In US claims outpatient visits that appear to occur within the time period of an inpatient visit can be rolled into one with the same Visit_Occurrence_Id. In EHR data inpatient visits that are within one day of each other may be strung together to create one visit. It will all depend on the source data and how encounter records should be translated to visit occurrences.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CONCEPT
</td>
<td style="text-align:left;width: 1in; ">
Visit
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
visit _start_date
</td>
<td style="text-align:left;width: 3in; ">
For inpatient visits, the start date is typically the admission date. For outpatient visits the start date and end date will be the same.
</td>
<td style="text-align:left;width: 4in; ">
When populating visit_start_date, you will first have to make decisions on how to define visits. In some cases visits in the source data can be strung together if there are one or fewer days between them.
</td>
<td style="text-align:left;width: 1in; ">
date
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
visit_start _datetime
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
If no time is given for the start date of a visit, set it to midnight (00:00:0000).
</td>
<td style="text-align:left;width: 1in; ">
datetime
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
visit _end_date
</td>
<td style="text-align:left;width: 3in; ">
For inpatient visits the end date is typically the discharge date.
</td>
<td style="text-align:left;width: 4in; ">
Visit end dates are mandatory. If end dates are not provided in the source there are three ways in which to derive them: Outpatient Visit: visit_end_datetime = visit_start_datetime Emergency Room Visit: visit_end_datetime = visit_start_datetime Inpatient Visit: Usually there is information about discharge. If not, you should be able to derive the end date from the sudden decline of activity or from the absence of inpatient procedures/drugs. Non-hospital institution Visits: Particularly for claims data, if end dates are not provided assume the visit is for the duration of month that it occurs. For Inpatient Visits ongoing at the date of ETL, put date of processing the data into visit_end_datetime and visit_type_concept_id with 32220 “Still patient” to identify the visit as incomplete. All other Visits: visit_end_datetime = visit_start_datetime. If this is a one-day visit the end date should match the start date.
</td>
<td style="text-align:left;width: 1in; ">
date
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
visit_end _datetime
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
If no time is given for the end date of a visit, set it to midnight (00:00:0000).
</td>
<td style="text-align:left;width: 1in; ">
datetime
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
visit_type _concept_id
</td>
<td style="text-align:left;width: 3in; ">
Use this field to understand the provenance of the visit record, or where the record comes from.
</td>
<td style="text-align:left;width: 4in; ">
Populate this field based on the provenance of the visit record, as in whether it came from an EHR record or billing claim.
</td>
<td style="text-align:left;width: 1in; ">
Integer
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CONCEPT
</td>
<td style="text-align:left;width: 1in; ">
Type Concept
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
provider_id
</td>
<td style="text-align:left;width: 3in; ">
There will only be one provider per visit. If multiple providers are associated with a visit that information can be found in the VISIT_DETAIL table.
</td>
<td style="text-align:left;width: 4in; ">
If there are multiple providers associated with a visit, you will need to choose which one to put here. The additional providers can be stored in the visit_detail table.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
PROVIDER
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
care_site_id
</td>
<td style="text-align:left;width: 3in; ">
This field provides information about the care site where the visit took place.
</td>
<td style="text-align:left;width: 4in; ">
There should only be one care site associated with a visit.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
CARE_SITE
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
visit _source_value
</td>
<td style="text-align:left;width: 3in; ">
This field houses the verbatim value from the source data representing the kind of visit that took place (inpatient, outpatient, emergency, etc.)
</td>
<td style="text-align:left;width: 4in; ">
If there is information about the kind of visit in the source data that value should be stored here. If a visit is an amalgamation of visits from the source then use a hierarchy to choose the visit source value, such as IP -&gt; ER-&gt; OP. This should line up with the logic chosen to determine how visits are created.
</td>
<td style="text-align:left;width: 1in; ">
varchar(50)
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
visit_source _concept_id
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
If the visit source value is coded in the source data using an OMOP supported vocabulary put the concept id representing the source value here.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CONCEPT
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
admitting_source _concept_id
</td>
<td style="text-align:left;width: 3in; ">
Use this field to determine where the patient was admitted from. This concept is part of the visit domain and can indicate if a patient was admitted to the hospital from a long-term care facility, for example.
</td>
<td style="text-align:left;width: 4in; ">
If available, map the admitted_from_source_value to a standard concept in the visit domain.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CONCEPT
</td>
<td style="text-align:left;width: 1in; ">
Visit
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
admitting _source_value
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
This information may be called something different in the source data but the field is meant to contain a value indicating where a person was admitted from. Typically this applies only to visits that have a length of stay, like inpatient visits or long-term care visits.
</td>
<td style="text-align:left;width: 1in; ">
varchar(50)
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
discharge_to _concept_id
</td>
<td style="text-align:left;width: 3in; ">
Use this field to determine where the patient was discharged to after a visit. This concept is part of the visit domain and can indicate if a patient was discharged to home or sent to a long-term care facility, for example.
</td>
<td style="text-align:left;width: 4in; ">
If available, map the discharge_to_source_value to a standard concept in the visit domain.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
CONCEPT
</td>
<td style="text-align:left;width: 1in; ">
Visit
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
discharge_to _source_value
</td>
<td style="text-align:left;width: 3in; ">
</td>
<td style="text-align:left;width: 4in; ">
This information may be called something different in the source data but the field is meant to contain a value indicating where a person was discharged to after a visit, as in they went home or were moved to long-term care. Typically this applies only to visits that have a length of stay of a day or more.
</td>
<td style="text-align:left;width: 1in; ">
varchar(50)
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
<tr>
<td style="text-align:left;font-weight: bold;">
preceding_visit _occurrence_id
</td>
<td style="text-align:left;width: 3in; ">
Use this field to find the visit that occured for the person prior to the given visit. There could be a few days or a few years in between.
</td>
<td style="text-align:left;width: 4in; ">
The preceding_visit_id can be used to link a visit immediately preceding the current visit. Note this is not symmetrical, and there is no such thing as a “following_visit_id”.
</td>
<td style="text-align:left;width: 1in; ">
integer
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
No
</td>
<td style="text-align:left;width: 1in; ">
Yes
</td>
<td style="text-align:left;width: 1in; ">
VISIT_OCCURRENCE
</td>
<td style="text-align:left;width: 1in; ">
</td>
<td style="text-align:left;width: 1in; ">
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<script>
// add bootstrap table styles to pandoc tables
function bootstrapStylePandocTables() {
$('tr.header').parent('thead').parent('table').addClass('table table-condensed');
}
$(document).ready(function () {
bootstrapStylePandocTables();
});
</script>
<!-- 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>