OMOP/docs/ehrObsPeriods.html

608 lines
19 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<title>Observation Period Considerations for EHR Data</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>
</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="cdm60.html">CDM v6.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">NEW 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>
</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>Observation Period Considerations
for EHR Data</strong></h1>
</div>
<p><em>By Melanie Philofsky and the EHR Working Group</em></p>
<p>The EHR WG convened on July 24, August 7, and August 21, 2020 to
discuss the creation of an Observation Period from EHR data. The current
and future conventions are not prescriptive enough and leave room for
various ways of interpretation. The goals of our discussions were to
increase the standardization for the implementation of the
OBSERVATION_PERIOD table by providing some general guidelines for
determining the start, end, and gaps in Observation Periods. The
suggestions we came up with are only “suggestions” at this point. More
research should be done to understand how these choices might impact
evidence generated using these data. All of these decisions should be
tempered by local understanding of patients in the EHR you are
ETLing.</p>
<ul>
<li><em>Note - These suggestions are not intended for HMO EHR sites
since HMO EHR Observation Periods more closely resemble claims data
Observation Periods.</em></li>
</ul>
<div id="observation-period-start-date" class="section level2">
<h2>Observation Period Start Date</h2>
<ul>
<li>Generally an Observation Period does NOT begin before birth,
however, it might begin before birth IF the pregnant mother receives
care recorded in your EHR. The childs record is then split from the
mothers record at birth but may retain care given during pregnancy. For
these children in your dataset, the field
<strong>observation_period_start_date should be the birth date minus 9
months</strong></li>
<li>An <strong>Observation Period does NOT begin before the
implementation of the EHR at your site</strong>. Any records prior to
implementation are probably “history of” record types and not a complete
EHR record of clinical events.</li>
<li>Special consideration should be given to migration from previous
EHR, implementation at different sites within your healthcare system,
implementation of different modules, etc.</li>
</ul>
</div>
<div id="observation-period-end-date" class="section level2">
<h2>Observation Period end date</h2>
<p>Set the <strong>observation_period_end_date</strong> as the first
date from the following:</p>
<ul>
<li><strong>Date of death + 60 days</strong>
<ul>
<li>This is a CDM convention to allow events after death (autopsy, final
notes, etc).</li>
</ul></li>
<li><strong>Last clinical event + 60 days</strong>
<ul>
<li>The assumption is that person will return to the same health
provider if an adverse reaction/complication/unresolved condition
occurs.</li>
</ul></li>
<li><strong>Date of the data pull from the system</strong></li>
</ul>
</div>
<div id="observation-period-gaps-and-persistence-windows"
class="section level2">
<h2>Observation Period Gaps and Persistence Windows</h2>
<div id="observation-period-gaps" class="section level3">
<h3>Observation Period Gaps</h3>
<p>Periods of time when a Person does not receive care from your
institution and therefore is not observed and should not have an
Observation Period. These gaps are usually hard to determine because
most Persons dont announce their departure from an EHR/healthcare
institution. Therefore, a heuristic will need to be instituted to
determine Observation Period Gaps where the information is not
explicit.</p>
</div>
<div id="observation-period-persistence-window" class="section level3">
<h3>Observation Period Persistence Window</h3>
<p>Defined as the maximum time allowed between two clinical events under
the assumption a Person would have a clinical event recorded, if they
are not healthy and seek care.</p>
<p><strong>Example:</strong> Person 1 has a series of clinical events
recorded from <strong>Jan. 1, 2010 to June 15, 2012</strong>, where the
time between clinical events does not exceed 60 days. The next clinical
event for Person 1 is on <strong>Oct. 1, 2018</strong>. Starting Oct. 1,
2018 Person 1 has clinical events occurring at least every 90 days up to
the present date.</p>
<p>There is a 6+ year gap between groups of clinical events recorded in
the CDM. After discussion in the EHR WG, we believe this 6+ year gap is
indicative of a Person not being seen within our EHR/healthcare
institution. Per convention #4 for Observation Period table, “As a
general assumption, during an Observation Period any clinical event that
happens to the patient is expected to be recorded. Conversely, the
absence of data indicates that no clinical events occurred to the
patient.” Person 1 has two Observation Periods.</p>
<p><strong>1st Observation Period</strong></p>
<ul>
<li>observation_period_start_date = <strong>01/01/2010</strong></li>
<li>observation_period_end_date = <strong>08/15/2012</strong> (Per the
end_date guideline above)</li>
</ul>
<p><strong>2nd Observation Period</strong></p>
<ul>
<li>observation_period_start_date = <strong>10/01/2018</strong></li>
<li>observation_period_end_date = <strong>09/01/2020</strong> (Date of
the data pull, per the end_date guideline above)</li>
</ul>
<p>Now, there are cases where a Person only receives care within you EHR
system when absolutely necessary. And if your EHR doesnt offer primary
care services, the majority of Persons who lack healthcare insurance or
any other reason why Persons are only seen in urgent or emergent
situations, the above heuristic might be too restrictive. This is a
guideline. A question the EHR WG debated was how long between clinical
events should we assume any clinical event that happens to the Person is
expected to be recorded? When should we end one Observation Period and
begin another? What should be the time between events for an Observation
Period Persistence Window? Wellness checkups/Visits happen approximately
every 12-18 months depending on a multitude of factors.</p>
<p><strong>Our recommendation: If Observation Period Gaps are 548 days
or more, then the previous Observation Period should end and another
Observation Period should begin on the date of the next clinical event
as per the Person 1 example above.</strong></p>
</div>
</div>
<div id="additional-etl-considerations" class="section level2">
<h2>Additional ETL considerations</h2>
<ul>
<li>Implementation of your EHR, migration from previous EHR,
implementation at different sites within your healthcare system,
implementation of different modules</li>
<li>Coverage of your healthcare system within your area, population
served by the healthcare system</li>
<li>All decisions should be tempered by local understanding of patients
in the EHR you are ETLing.</li>
</ul>
<p>The Observation Period can be created by only one clinical event.
However, the clinical event must NOT be from the Death table. If a Death
date does not have any other clinical records 18 months before AND 18
months after the death date, then an Observation Period will not be
created. We believe this logic is needed because if a Person only has a
death death_date without other clinical event records, a Person is most
likely not being “observed” when the death occurred. If a Person was
being observed at their time of death, then other records (visit,
condition, measurement, etc.) would be created. This rule is most
relevant for those with death registry data since a Person who dies in
the hospital has many clinical event records.</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>