106 lines
3.5 KiB
Plaintext
106 lines
3.5 KiB
Plaintext
---
|
|
title: '**OMOP CDM v5.3**'
|
|
output:
|
|
html_document:
|
|
toc: yes
|
|
toc_depth: 5
|
|
toc_float: yes
|
|
---
|
|
|
|
```{r setup, include=FALSE, eval=TRUE}
|
|
|
|
#todo figure out how to get the document dynamically without specifying the name
|
|
library(rmarkdown)
|
|
library(knitr)
|
|
library(kableExtra)
|
|
library(magrittr)
|
|
library(dplyr)
|
|
library(stringr)
|
|
|
|
```
|
|
|
|
Below is the specification document for the OMOP Common Data Model, v5.3 (previously v5.3.1). Each table is represented with a high-level description and ETL conventions that should be followed. This is continued with a discussion of each field in each table, any conventions related to the field, and constraints that should be followed (like primary key, foreign key, etc). Should you have questions please feel free to visit the [forums](https://forums.ohdsi.org/) or the [github issue](https://github.com/ohdsi/CommonDataModel/issues) page.
|
|
|
|
*__Special Note__ This documentation previously referenced v5.3.1. During the OHDSI/CommonDataModel Hack-A-Thon that occurred on August 18, 2021 the decision was made to align documentation with the minor releases. Hot fixes and minor.minor release can be found through the searching of tags.*
|
|
|
|
--after regeneration of DDLs
|
|
link to csv of cdm
|
|
link to pdf of cdm documentation
|
|
link to forum on doc page
|
|
|
|
```{r docLoop53, echo=FALSE, results='asis'}
|
|
tableSpecs <- read.csv("../inst/csv/OMOP_CDMv5.3_Table_Level.csv", stringsAsFactors = FALSE)
|
|
cdmSpecs <- read.csv("../inst/csv/OMOP_CDMv5.3_Field_Level.csv", stringsAsFactors = FALSE)
|
|
|
|
tables <- tableSpecs$cdmTableName
|
|
|
|
cdmSpecsClean <- cdmSpecs %>%
|
|
dplyr::select(`CDM Table` = cdmTableName,
|
|
`CDM Field` = cdmFieldName,
|
|
`User Guide` = userGuidance,
|
|
`ETL Conventions` = etlConventions,
|
|
`Datatype` = cdmDatatype,
|
|
`Required` = isRequired,
|
|
`Primary Key` = isPrimaryKey,
|
|
`Foreign Key` = isForeignKey,
|
|
`FK Table` = fkTableName,
|
|
`FK Domain` = fkDomain
|
|
)
|
|
|
|
cdmSpecsClean[is.na(cdmSpecsClean)] <- ""
|
|
|
|
for(tb in tables) {
|
|
|
|
if(tb == 'PERSON'){
|
|
cat("## **Clinical Data Tables**\n\n")
|
|
}
|
|
|
|
if(tb == 'LOCATION'){
|
|
cat("## **Health System Data Tables**\n\n")
|
|
}
|
|
|
|
if(tb == 'PAYER_PLAN_PERIOD'){
|
|
cat("## **Health Economics Data Tables**\n\n")
|
|
}
|
|
|
|
if(tb == 'DRUG_ERA'){
|
|
cat("## **Standardized Derived Elements**\n\n")
|
|
}
|
|
|
|
if(tb == 'METADATA'){
|
|
cat("## **Metadata Tables**\n\n")
|
|
}
|
|
if(tb == 'CONCEPT'){
|
|
cat("## **Vocabulary Tables**\n\n")
|
|
}
|
|
|
|
cat("###", tb, "{.tabset .tabset-pills} \n\n")
|
|
|
|
tableInfo <- subset(tableSpecs, cdmTableName == tb)
|
|
cat("**Table Description**\n\n",tableInfo[,"tableDescription"], "\n\n")
|
|
|
|
if(!isTRUE(tableInfo[,"userGuidance"]=="")){
|
|
cat("**User Guide**\n\n",tableInfo[,"userGuidance"],"\n\n")
|
|
}
|
|
|
|
if(!isTRUE(tableInfo[,"etlConventions"]=="")){
|
|
cat("**ETL Conventions**\n\n",tableInfo[,"etlConventions"],"\n\n")
|
|
}
|
|
|
|
loopTable <- subset(cdmSpecsClean, `CDM Table` == tb)
|
|
loopTable <- subset(loopTable, select = -c(1))
|
|
|
|
print(kable(x = loopTable, align = "l", row.names = FALSE, format = "html", escape = FALSE) %>%
|
|
column_spec(1, bold = T) %>%
|
|
# column_spec(2, width = "3in", include_thead = T) %>%
|
|
# column_spec(3, width = "4in", include_thead = T) %>%
|
|
# column_spec(4:9, width = "1in", include_thead = T) %>%
|
|
kable_styling(c("condensed","hover"), position = "center", full_width = T, font_size = 13))
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
```
|