Step by step example using individual functions
workWithMultipleMappingFiles.Rmd
library(ROMOPMappingTools)
#> Warning: replacing previous import 'SqlRender::render' by 'rmarkdown::render'
#> when loading 'ROMOPMappingTools'
Intro
This vignette shows how to use some of the functions of the ROMOPMappingTools package to work with a multiple Usagi mapping files. Validating their format, updating them after a vocabulary update, uploading them to the STCM table, and transforming the STCM table to the CDM tables.
For automating all the process in a github repository, please refer to the Work as a github repository vignette. For working with a single Usagi file, please refer to the Work with individual mapping files vignette.
Example files are included in the package. In the
inst/testdata
folder you can find the files used in this
example.
Setting up the forders structure
To work with multiple Usagi files, we need to have a folder with the
Usagi files and a vocabularies.csv
file.
The vocabularies.csv
file is a file that contains the
vocabulary information and the path to the Usagi and NEWS.md files
asociated with each vocabulary, see the Tables description and rules vignette
for more details.
We recommend to have a folder structure like the one use in this example:
inst/testdata/VOCABULARIES/
├── vocabularies.csv
├── ICD10fi/
│ ├── ICD10fi.usagi.csv
│ └── NEWS.md
└── UNITfi/
├── UNITfi.usagi.csv
└── NEWS.md
We use a root folder containing the vocabularies.csv
and
subdirectories named after the vocabulary id. Each subdirectory contains
the Usagi and NEWS.md files. In this case we have two vocabularies:
ICD10fi and UNITfi.
Target database
For this example we will use the test database in DuckDB format
included in the package. Create a new database by making a copy of the
inst/testdata/OMOPVocabulary.duckdb
file.
pathToOMOPVocabularyDuckDBfile <- helper_createATemporaryCopyOfTheOMOPVocabularyDuckDB()
connectionDetails <- DatabaseConnector::createConnectionDetails(
dbms = "duckdb",
server = pathToOMOPVocabularyDuckDBfile
)
connection <- DatabaseConnector::connect(connectionDetails)
#> Connecting using DuckDB driver
vocabularyDatabaseSchema <- "main"
Validate all the Usagi files in the vocabulary folder
This function nees as an input a path to a folder with a
vocabularies.csv
file, a connection to the database, the
schema with the vocabulary tables and a folder where to store the
validated Usagi files if they are not valid. This function will validate
the format of the vocabularies.csv
file and all the Usagi
files. Details on the Usagi file validations are described in the Work with individual mapping
files vignette.
pathToVocabularyFolder <- system.file("testdata/VOCABULARIES", package = "ROMOPMappingTools")
pathToValidatedUsagiFolder <- tempdir()
validationsLogTibble <- validateVocabularyFolder(
pathToVocabularyFolder,
connection,
vocabularyDatabaseSchema,
pathToValidatedUsagiFolder
)
#> Validating Usagi file ./ICD10fi/ICD10fi.usagi.csv
#> Validating Usagi file ./UNITfi/UNITfi.usagi.csv
The function will return a tibble with the validations on the
vocabularies.csv
file and all the Usagi files.
knitr::kable(validationsLogTibble)
context | type | step | message |
---|---|---|---|
vocabulary.csv | SUCCESS | source_vocabulary_id is not empty | |
vocabulary.csv | SUCCESS | source_vocabulary_id is less than 20 characters | |
vocabulary.csv | SUCCESS | source_vocabulary_name is not empty | |
vocabulary.csv | SUCCESS | source_vocabulary_name is less than 255 characters | |
vocabulary.csv | SUCCESS | source_concept_id_offset is a number over 2 billion | |
vocabulary.csv | SUCCESS | source_concept_id_offset is unique | |
ICD10fi | SUCCESS | Missing default columns | |
ICD10fi | SUCCESS | SourceCode is empty | |
ICD10fi | SUCCESS | SourceCode and conceptId are not unique | |
ICD10fi | SUCCESS | SourceName is empty | |
ICD10fi | SUCCESS | SourceName is more than 255 characters | |
ICD10fi | SUCCESS | SourceFrequency is not empty | |
ICD10fi | SUCCESS | MappingStatus is empty | |
ICD10fi | SUCCESS | MappingStatus is not valid | |
ICD10fi | SUCCESS | APPROVED mappingStatus conceptId is 0 | |
ICD10fi | SUCCESS | APPROVED mappingStatus with concepts outdated | |
ICD10fi | SUCCESS | Not APPROVED mappingStatus with concepts outdated | |
ICD10fi | SUCCESS | Missing C&CR columns | |
ICD10fi | SUCCESS | SourceConceptId is empty | |
ICD10fi | SUCCESS | SourceConceptId is not a number on the range | |
ICD10fi | SUCCESS | SourceConceptClass is empty | |
ICD10fi | SUCCESS | SourceConceptClass is more than 20 characters | |
ICD10fi | SUCCESS | SourceDomain is empty | |
ICD10fi | SUCCESS | SourceDomain is not a valid domain | |
ICD10fi | SUCCESS | Not APPROVED mappingStatus with valid domain combination | |
ICD10fi | SUCCESS | APPROVED mappingStatus with valid domain combination | |
ICD10fi | SUCCESS | Missing date columns | |
ICD10fi | SUCCESS | SourceValidStartDate is after SourceValidEndDate | |
ICD10fi | SUCCESS | Missing parent columns | |
ICD10fi | SUCCESS | Invalid parent concept code | |
UNITfi | SUCCESS | Missing default columns | |
UNITfi | SUCCESS | SourceCode is empty | |
UNITfi | SUCCESS | SourceCode and conceptId are not unique | |
UNITfi | SUCCESS | SourceName is empty | |
UNITfi | SUCCESS | SourceName is more than 255 characters | |
UNITfi | SUCCESS | SourceFrequency is not empty | |
UNITfi | SUCCESS | MappingStatus is empty | |
UNITfi | SUCCESS | MappingStatus is not valid | |
UNITfi | SUCCESS | APPROVED mappingStatus conceptId is 0 | |
UNITfi | SUCCESS | APPROVED mappingStatus with concepts outdated | |
UNITfi | SUCCESS | Not APPROVED mappingStatus with concepts outdated | |
UNITfi | SUCCESS | Missing C&CR columns | |
UNITfi | SUCCESS | SourceConceptId is empty | |
UNITfi | SUCCESS | SourceConceptId is not a number on the range | |
UNITfi | SUCCESS | SourceConceptClass is empty | |
UNITfi | SUCCESS | SourceConceptClass is more than 20 characters | |
UNITfi | SUCCESS | SourceDomain is empty | |
UNITfi | SUCCESS | SourceDomain is not a valid domain | |
UNITfi | SUCCESS | Not APPROVED mappingStatus with valid domain combination | |
UNITfi | SUCCESS | APPROVED mappingStatus with valid domain combination | |
UNITfi | SUCCESS | Missing date columns | |
UNITfi | SUCCESS | SourceValidStartDate is after SourceValidEndDate | |
UNITfi | SUCCESS | Missing parent columns | |
UNITfi | SUCCESS | Invalid parent concept code |
Upload all the Usagi files to the STCM table
If all the validations pass, we can use the
vocabularyFolderToSTCMAndVocabularyTables
function to
upload all the Usagi files to the STCM table. If some of the validations
fail, we recoment fix the errors following the Work with individual mapping
files vignette.
If we are using the Usagi-extended format, we also need to create the source_to_concept_map_extended table, see the Files format vignette for more details.
sourceToConceptMapTable <- "source_to_concept_map_extended"
createSourceToConceptMapExtended(connection, vocabularyDatabaseSchema, sourceToConceptMapTable)
#> | | | 0% | |=================================== | 50% | |======================================================================| 100%
#> Executing SQL took 0.0119 secs
vocabularyFolderToSTCMVocabularyConcepClassTables
needs
the path to the vocabulary folder, a connection to the database, the
schema with the vocabulary tables and the name of the SourceToConceptMap
table.
vocabularyFolderToSTCMVocabularyConcepClassTables(
pathToVocabularyFolder,
connection,
vocabularyDatabaseSchema,
sourceToConceptMapTable
)
#> Appending vocabularies.csv to VOCABULARY table
#> | | | 0% | |======================================================================| 100%
#> Executing SQL took 0.00395 secs
#> Inserting data took 0.015 secs
#> | | | 0% | |======================================================================| 100%
#> Executing SQL took 0.00344 secs
#> Inserting data took 0.041 secs
#> Appending info from Usagi files to Concept Class table
#>
#> Collecting concept classes from Usagi file ./ICD10fi/ICD10fi.usagi.csv
#>
#> Collecting concept classes from Usagi file ./UNITfi/UNITfi.usagi.csv
#> | | | 0% | |======================================================================| 100%
#> Executing SQL took 0.00576 secs
#> Inserting data took 0.0165 secs
#> | | | 0% | |======================================================================| 100%
#> Executing SQL took 0.00396 secs
#> Inserting data took 0.0121 secs
#> Appending Usagi files to STCM table
#>
#> Appending Usagi file ./ICD10fi/ICD10fi.usagi.csv
#> | | | 0% | |======================================================================| 100%
#> Executing SQL took 0.00369 secs
#> Inserting data took 0.0179 secs
#> Appending Usagi file ./UNITfi/UNITfi.usagi.csv
#> | | | 0% | |======================================================================| 100%
#> Executing SQL took 0.00337 secs
#> Inserting data took 0.0139 secs
This function will populate the VOCABULARY table with the
vocabularies.csv
file and the
source_to_concept_map_extended table with the Usagi-extended files.
dplyr::tbl(connection, "VOCABULARY") |>
dplyr::collect()
#> # A tibble: 15 × 5
#> vocabulary_id vocabulary_name vocabulary_reference vocabulary_version
#> <chr> <chr> <chr> <chr>
#> 1 Domain OMOP Domain "OMOP generated" NA
#> 2 Vocabulary OMOP Vocabulary "OMOP generated" NA
#> 3 Concept Class OMOP Concept Class "OMOP generated" NA
#> 4 Relationship OMOP Relationship "OMOP generated" NA
#> 5 OMOP Extension OMOP Extension (OHD… "OMOP generated" OMOP Extension 20…
#> 6 Nebraska Lexicon Nebraska Lexicon (U… "https://www.unmc.e… Nebraska Lexicon …
#> 7 ICDO3 International Class… "https://seer.cance… ICDO3 SEER Site/H…
#> 8 ICD10 International Class… "http://www.who.int… 2021 Release
#> 9 LOINC Logical Observation… "http://loinc.org/d… LOINC 2.77
#> 10 Cancer Modifier Diagnostic Modifier… "OMOP generated" Cancer Modifier 2…
#> 11 SNOMED Systematic Nomencla… "http://www.nlm.nih… 2024-02-01 SNOMED…
#> 12 None OMOP Standardized V… "OMOP generated" v5.0 30-AUG-24
#> 13 UCUM Unified Code for Un… "http://aurora.rege… Version 1.8.2
#> 14 ICD10fi International Class… "" v1.1.2
#> 15 UNITfi Finnish Units vocab… "" v1.0.1
#> # ℹ 1 more variable: vocabulary_concept_id <dbl>
We can see on the botton that the ICD10fi and UNITfi vocabularies have been added to the VOCABULARY table.
dplyr::tbl(connection, "source_to_concept_map_extended") |>
dplyr::collect()
#> # A tibble: 4,122 × 12
#> source_code source_concept_id source_vocabulary_id source_code_description
#> <chr> <dbl> <chr> <chr>
#> 1 A01.0+G01 2000500101 ICD10fi Meningitis (in) typhoid f…
#> 2 A01.0+I39.8 2000500102 ICD10fi Endocarditis in typhoid f…
#> 3 A01.0+J17.0 2000500103 ICD10fi Typhoid fever pneumonia
#> 4 A01.4+M01.3 2000500104 ICD10fi Arthritis in typhoid or p…
#> 5 A02.2+G01 2000500105 ICD10fi Salmonella meningitis
#> 6 A02.2+H22.0 2000500106 ICD10fi Salmonella iridocyclitis
#> 7 A02.2+H22.0 2000500106 ICD10fi Salmonella iridocyclitis
#> 8 A02.2+J17.0 2000500107 ICD10fi Salmonella pneumonia
#> 9 A02.2+M01.3 2000500108 ICD10fi Salmonella arthritis
#> 10 A02.2+M90.2 2000500109 ICD10fi Salmonella osteomyelitis
#> # ℹ 4,112 more rows
#> # ℹ 8 more variables: target_concept_id <dbl>, target_vocabulary_id <chr>,
#> # valid_start_date <date>, valid_end_date <date>, invalid_reason <chr>,
#> # source_concept_class <chr>, source_domain <chr>,
#> # source_parents_concept_ids <chr>
We can see the source_to_concept_map_extended table has been populated with the Usagi-extended files.
Copying the STCM table to the CDM tables
The STCM table can be copied to the CDM tables using the
STCMToCDM
function. This function needs a connection to the
database and schema where the vocabulary tables are stored, the schema
with the vocabulary tables and the name of the SourceToConceptMap
table.
This function solely call to the SQL code in the
inst/sql/STCMToCDM.sql
file, hence it be also used outside
the package. This SQL code can be translated to any other database
supported by DatabaseConnector, and be applied directly.
STCMToCDMTables(connection, vocabularyDatabaseSchema, sourceToConceptMapTable)
#> | | | 0% | |============ | 17% | |======================= | 33% | |=================================== | 50% | |=============================================== | 67% | |========================================================== | 83% | |======================================================================| 100%
#> Executing SQL took 0.0559 secs
This populates the CONCEPT table:
dplyr::tbl(connection, "CONCEPT") |>
dplyr::filter(vocabulary_id == "ICD10fi") |>
dplyr::collect()
#> Note: method with signature 'DBIConnection#SQL' chosen for function 'dbQuoteIdentifier',
#> target signature 'DatabaseConnectorDbiConnection#SQL'.
#> "DatabaseConnectorConnection#character" would also be valid
#> # A tibble: 3,505 × 10
#> concept_id concept_name domain_id vocabulary_id concept_class_id
#> <dbl> <chr> <chr> <chr> <chr>
#> 1 2000500101 Meningitis (in) typhoid … Condition ICD10fi ICD10fi Hierarc…
#> 2 2000500102 Endocarditis in typhoid … Condition ICD10fi ICD10fi Hierarc…
#> 3 2000500103 Typhoid fever pneumonia Condition ICD10fi ICD10fi Hierarc…
#> 4 2000500104 Arthritis in typhoid or … Condition ICD10fi ICD10fi Hierarc…
#> 5 2000500105 Salmonella meningitis Condition ICD10fi ICD10fi Hierarc…
#> 6 2000500106 Salmonella iridocyclitis Condition ICD10fi ICD10fi Hierarc…
#> 7 2000500107 Salmonella pneumonia Condition ICD10fi ICD10fi Hierarc…
#> 8 2000500108 Salmonella arthritis Condition ICD10fi ICD10fi Hierarc…
#> 9 2000500109 Salmonella osteomyelitis Condition ICD10fi ICD10fi Hierarc…
#> 10 2000500110 Salmonella renal tubulo-… Conditio… ICD10fi ICD10fi Hierarc…
#> # ℹ 3,495 more rows
#> # ℹ 5 more variables: standard_concept <chr>, concept_code <chr>,
#> # valid_start_date <date>, valid_end_date <date>, invalid_reason <chr>
The CONCEPT_RELATIONSHIP table with
- the ‘Maps to’ relationships:
dplyr::tbl(connection, "CONCEPT_RELATIONSHIP") |>
dplyr::filter(relationship_id == "Maps to") |>
dplyr::filter(concept_id_1 > 2000500101) |>
dplyr::collect()
#> # A tibble: 4,089 × 6
#> concept_id_1 concept_id_2 relationship_id valid_start_date valid_end_date
#> <dbl> <dbl> <chr> <date> <date>
#> 1 2000500104 80316 Maps to 1900-01-01 2099-12-31
#> 2 2000500111 44811663 Maps to 1900-01-01 2099-12-31
#> 3 2000500116 440937 Maps to 1900-01-01 2099-12-31
#> 4 2000500119 434557 Maps to 1900-01-01 2099-12-31
#> 5 2000500120 434557 Maps to 1900-01-01 2099-12-31
#> 6 2000500123 81496 Maps to 1900-01-01 2099-12-31
#> 7 2000500125 80626 Maps to 1900-01-01 2099-12-31
#> 8 2000500132 4056331 Maps to 1900-01-01 2099-12-31
#> 9 2000500142 201779 Maps to 1900-01-01 2099-12-31
#> 10 2000500144 141777 Maps to 1900-01-01 2099-12-31
#> # ℹ 4,079 more rows
#> # ℹ 1 more variable: invalid_reason <chr>
- the ‘Maps from’ relationships:
dplyr::tbl(connection, "CONCEPT_RELATIONSHIP") |>
dplyr::filter(relationship_id == "Mapped from") |>
dplyr::filter(concept_id_2 > 2000500101) |>
dplyr::collect()
#> # A tibble: 4,089 × 6
#> concept_id_1 concept_id_2 relationship_id valid_start_date valid_end_date
#> <dbl> <dbl> <chr> <date> <date>
#> 1 4111401 2000500102 Mapped from 1900-01-01 2099-12-31
#> 2 4166072 2000500103 Mapped from 1900-01-01 2099-12-31
#> 3 80316 2000500108 Mapped from 1900-01-01 2099-12-31
#> 4 4329572 2000500110 Mapped from 1900-01-01 2099-12-31
#> 5 440937 2000500116 Mapped from 1900-01-01 2099-12-31
#> 6 4150516 2000500117 Mapped from 1900-01-01 2099-12-31
#> 7 4098475 2000500122 Mapped from 1900-01-01 2099-12-31
#> 8 81496 2000500123 Mapped from 1900-01-01 2099-12-31
#> 9 36713392 2000500133 Mapped from 1900-01-01 2099-12-31
#> 10 194268 2000500134 Mapped from 1900-01-01 2099-12-31
#> # ℹ 4,079 more rows
#> # ℹ 1 more variable: invalid_reason <chr>
And if the columns sourceConceptCode
and
sourceConceptVocabularyId
are present in the STCM table,
they will be used to populate the CONCEPT_RELATIONSHIP table with
- the ‘Is a’ relationships:
dplyr::tbl(connection, "CONCEPT_RELATIONSHIP") |>
dplyr::filter(relationship_id == "Is a") |>
dplyr::filter(concept_id_1 > 2000500101) |>
dplyr::collect()
#> # A tibble: 119 × 6
#> concept_id_1 concept_id_2 relationship_id valid_start_date valid_end_date
#> <dbl> <dbl> <chr> <date> <date>
#> 1 2000500469 2000500472 Is a 1900-01-01 2099-12-31
#> 2 2000500209 2000500212 Is a 1900-01-01 2099-12-31
#> 3 2000500246 2000500251 Is a 1900-01-01 2099-12-31
#> 4 2000500246 2000500259 Is a 1900-01-01 2099-12-31
#> 5 2000501401 2000501402 Is a 1900-01-01 2099-12-31
#> 6 2000501542 2000501543 Is a 1900-01-01 2099-12-31
#> 7 2000501625 2000501624 Is a 1900-01-01 2099-12-31
#> 8 2000501645 2000501648 Is a 1900-01-01 2099-12-31
#> 9 2000501645 2000501649 Is a 1900-01-01 2099-12-31
#> 10 2000501645 2000501653 Is a 1900-01-01 2099-12-31
#> # ℹ 109 more rows
#> # ℹ 1 more variable: invalid_reason <chr>
- the
Subsumes
relationships:
dplyr::tbl(connection, "CONCEPT_RELATIONSHIP") |>
dplyr::filter(relationship_id == "Subsumes") |>
dplyr::filter(concept_id_1 > 2000500101) |>
dplyr::collect()
#> # A tibble: 5,451 × 6
#> concept_id_1 concept_id_2 relationship_id valid_start_date valid_end_date
#> <dbl> <dbl> <chr> <date> <date>
#> 1 2000500102 45576225 Subsumes 1900-01-01 2099-12-31
#> 2 2000500103 45576225 Subsumes 1900-01-01 2099-12-31
#> 3 2000500106 45532807 Subsumes 1900-01-01 2099-12-31
#> 4 2000500107 45532807 Subsumes 1900-01-01 2099-12-31
#> 5 2000500108 45532807 Subsumes 1900-01-01 2099-12-31
#> 6 2000500111 45532809 Subsumes 1900-01-01 2099-12-31
#> 7 2000500113 45532812 Subsumes 1900-01-01 2099-12-31
#> 8 2000500129 45755302 Subsumes 1900-01-01 2099-12-31
#> 9 2000500133 45755302 Subsumes 1900-01-01 2099-12-31
#> 10 2000500136 45755302 Subsumes 1900-01-01 2099-12-31
#> # ℹ 5,441 more rows
#> # ℹ 1 more variable: invalid_reason <chr>
Populating the CONCEPT_ANCESTOR table
Since we have added the “Is a” and “Subsumes” relationships to the
CONCEPT_RELATIONSHIP table, we can use this information to populate the
CONCEPT_ANCESTOR table. This is done with the
conceptRelationshipToAncestorTables
function.
This can be applied to any non-standard vocabulary, not only the ones
included in the vocabularies.csv
file.
conceptRelationshipToAncestorTables(
connection,
vocabularyDatabaseSchema,
vocabularyList = c("ICD10", "ICD10fi", "UNITfi")
)
#> | | | 0% | |============== | 20% | |============================ | 40% | |========================================== | 60% | |======================================================== | 80% | |======================================================================| 100%
#> Executing SQL took 0.0403 secs
Close the connection to the database.
DatabaseConnector::disconnect(connection)
Validate the new CDM tables with DataQualityDashboard
Since we have introduced changes in the OMOP CDM table, we can use
the DataQualityDashboard package to validate that we havent introduced
errors. We include the function validateCDMtablesWithDQD
in
the package to facilitate this task.
# Create connectionDetails from the existing connection
validationResultsFolder <- tempdir()
validationLogR6 <- validateCDMtablesWithDQD(connectionDetails, vocabularyDatabaseSchema, validationResultsFolder)
#> Connecting using DuckDB driver
#> Connecting using DuckDB driver
#> Currently in a tryCatch or withCallingHandlers block, so unable to add global calling handlers. ParallelLogger will not capture R messages, errors, and warnings, only explicit calls to ParallelLogger. (This message will not be shown again this R session)
#>
#>
#> ── Column specification ────────────────────────────────────────────────────────
#> cols(
#> checkLevel = col_character(),
#> checkName = col_character(),
#> checkDescription = col_character(),
#> kahnContext = col_character(),
#> kahnCategory = col_character(),
#> kahnSubcategory = col_character(),
#> sqlFile = col_character(),
#> evaluationFilter = col_character(),
#> severity = col_character()
#> )
#> CDM Tables skipped: CARE_SITE, CDM_SOURCE, COHORT, COHORT_DEFINITION, CONDITION_ERA, CONDITION_OCCURRENCE, COST, DEATH, DEVICE_EXPOSURE, DOSE_ERA, DQDASHBOARD_RESULTS, DRUG_ERA, DRUG_EXPOSURE, EPISODE, EPISODE_EVENT, FACT_RELATIONSHIP, LOCATION, MAIN.DQDASHBOARD_RESULTS, MEASUREMENT, METADATA, NOTE, NOTE_NLP, OBSERVATION, OBSERVATION_PERIOD, PAYER_PLAN_PERIOD, PERSON, PROCEDURE_OCCURRENCE, PROVIDER, SOURCE_TO_CONCEPT_MAP, SOURCE_TO_CONCEPT_MAP_EXTENDED, SPECIMEN, VISIT_DETAIL, VISIT_OCCURRENCE
#> Warning in DataQualityDashboard::executeDqChecks(connectionDetails =
#> connectionDetails, : DEPRECATION WARNING - The plausibleDuringLife check has
#> been reimplemented with the plausibleBeforeDeath check.
#> Warning in DataQualityDashboard::executeDqChecks(connectionDetails =
#> connectionDetails, : DEPRECATION WARNING - The plausibleTemporalAfter check has
#> been reimplemented with the plausibleAfterBirth and plausibleStartBeforeEnd
#> checks.
#> Warning in DataQualityDashboard::executeDqChecks(connectionDetails =
#> connectionDetails, : DEPRECATION WARNING - The plausibleGender check has been
#> reimplemented with the plausibleGenderUseDescendants check.
#> Connecting using DuckDB driver
#> Processing check description: cdmTable
#> Processing check description: measurePersonCompleteness
#> Processing check description: measureConditionEraCompleteness
#> Processing check description: cdmField
#> Processing check description: isRequired
#> Processing check description: cdmDatatype
#> Processing check description: isPrimaryKey
#> Processing check description: isForeignKey
#> Processing check description: fkDomain
#> Processing check description: fkClass
#> Processing check description: isStandardValidConcept
#> Processing check description: measureValueCompleteness
#> Processing check description: standardConceptRecordCompleteness
#> Processing check description: sourceConceptRecordCompleteness
#> Processing check description: sourceValueCompleteness
#> Processing check description: plausibleValueLow
#> Processing check description: plausibleValueHigh
#> Processing check description: plausibleTemporalAfter
#> Processing check description: plausibleDuringLife
#> Processing check description: withinVisitDates
#> Processing check description: plausibleAfterBirth
#> Processing check description: plausibleBeforeDeath
#> Processing check description: plausibleStartBeforeEnd
#> Processing check description: plausibleGender
#> Processing check description: plausibleGenderUseDescendants
#> Processing check description: plausibleUnitConceptIds
#> Writing results to file: /tmp/RtmpnkWjpl/tmp_vocab_table-20250331075520.json
#> Execution Complete
#> Connecting using DuckDB driver
#> Writing results to table main.dqdashboard_results
#> | | | 0% | |=================================== | 50% | |======================================================================| 100%
#> Executing SQL took 0.00884 secs
#> Warning: Column 'warning' is of type 'logical', but this is not supported by
#> many DBMSs. Converting to numeric (1 = TRUE, 0 = FALSE)
#> Warning: Column 'error' is of type 'logical', but this is not supported by many
#> DBMSs. Converting to numeric (1 = TRUE, 0 = FALSE)
#> Warning: Column 'not_applicable_reason' is of type 'logical', but this is not
#> supported by many DBMSs. Converting to numeric (1 = TRUE, 0 = FALSE)
#> Warning: Column 'notes_value' is of type 'logical', but this is not supported
#> by many DBMSs. Converting to numeric (1 = TRUE, 0 = FALSE)
#> Inserting data took 0.0189 secs
#> Finished writing table
knitr::kable(validationLogR6)
context | type | step | message |
---|---|---|---|
DQD | SUCCESS | CONCEPT: A yes or no value indicating if CONCEPT table is present as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | VOCABULARY: A yes or no value indicating if VOCABULARY table is present as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DOMAIN: A yes or no value indicating if DOMAIN table is present as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_CLASS: A yes or no value indicating if CONCEPT_CLASS table is present as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP: A yes or no value indicating if CONCEPT_RELATIONSHIP table is present as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP: A yes or no value indicating if RELATIONSHIP table is present as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_SYNONYM: A yes or no value indicating if CONCEPT_SYNONYM table is present as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR: A yes or no value indicating if CONCEPT_ANCESTOR table is present as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH: A yes or no value indicating if DRUG_STRENGTH table is present as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.CONCEPT_CLASS_ID: A yes or no value indicating if CONCEPT_CLASS_ID is present in the CONCEPT table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.CONCEPT_CODE: A yes or no value indicating if CONCEPT_CODE is present in the CONCEPT table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.CONCEPT_ID: A yes or no value indicating if CONCEPT_ID is present in the CONCEPT table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.CONCEPT_NAME: A yes or no value indicating if CONCEPT_NAME is present in the CONCEPT table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.DOMAIN_ID: A yes or no value indicating if DOMAIN_ID is present in the CONCEPT table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.INVALID_REASON: A yes or no value indicating if INVALID_REASON is present in the CONCEPT table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.STANDARD_CONCEPT: A yes or no value indicating if STANDARD_CONCEPT is present in the CONCEPT table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.VALID_END_DATE: A yes or no value indicating if VALID_END_DATE is present in the CONCEPT table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.VALID_START_DATE: A yes or no value indicating if VALID_START_DATE is present in the CONCEPT table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.VOCABULARY_ID: A yes or no value indicating if VOCABULARY_ID is present in the CONCEPT table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.ANCESTOR_CONCEPT_ID: A yes or no value indicating if ANCESTOR_CONCEPT_ID is present in the CONCEPT_ANCESTOR table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.DESCENDANT_CONCEPT_ID: A yes or no value indicating if DESCENDANT_CONCEPT_ID is present in the CONCEPT_ANCESTOR table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.MAX_LEVELS_OF_SEPARATION: A yes or no value indicating if MAX_LEVELS_OF_SEPARATION is present in the CONCEPT_ANCESTOR table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.MIN_LEVELS_OF_SEPARATION: A yes or no value indicating if MIN_LEVELS_OF_SEPARATION is present in the CONCEPT_ANCESTOR table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_CLASS.CONCEPT_CLASS_CONCEPT_ID: A yes or no value indicating if CONCEPT_CLASS_CONCEPT_ID is present in the CONCEPT_CLASS table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_CLASS.CONCEPT_CLASS_ID: A yes or no value indicating if CONCEPT_CLASS_ID is present in the CONCEPT_CLASS table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_CLASS.CONCEPT_CLASS_NAME: A yes or no value indicating if CONCEPT_CLASS_NAME is present in the CONCEPT_CLASS table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.CONCEPT_ID_1: A yes or no value indicating if CONCEPT_ID_1 is present in the CONCEPT_RELATIONSHIP table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.CONCEPT_ID_2: A yes or no value indicating if CONCEPT_ID_2 is present in the CONCEPT_RELATIONSHIP table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.INVALID_REASON: A yes or no value indicating if INVALID_REASON is present in the CONCEPT_RELATIONSHIP table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.RELATIONSHIP_ID: A yes or no value indicating if RELATIONSHIP_ID is present in the CONCEPT_RELATIONSHIP table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.VALID_END_DATE: A yes or no value indicating if VALID_END_DATE is present in the CONCEPT_RELATIONSHIP table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.VALID_START_DATE: A yes or no value indicating if VALID_START_DATE is present in the CONCEPT_RELATIONSHIP table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_SYNONYM.CONCEPT_ID: A yes or no value indicating if CONCEPT_ID is present in the CONCEPT_SYNONYM table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_SYNONYM.CONCEPT_SYNONYM_NAME: A yes or no value indicating if CONCEPT_SYNONYM_NAME is present in the CONCEPT_SYNONYM table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_SYNONYM.LANGUAGE_CONCEPT_ID: A yes or no value indicating if LANGUAGE_CONCEPT_ID is present in the CONCEPT_SYNONYM table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DOMAIN.DOMAIN_CONCEPT_ID: A yes or no value indicating if DOMAIN_CONCEPT_ID is present in the DOMAIN table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DOMAIN.DOMAIN_ID: A yes or no value indicating if DOMAIN_ID is present in the DOMAIN table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DOMAIN.DOMAIN_NAME: A yes or no value indicating if DOMAIN_NAME is present in the DOMAIN table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.AMOUNT_UNIT_CONCEPT_ID: A yes or no value indicating if AMOUNT_UNIT_CONCEPT_ID is present in the DRUG_STRENGTH table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.AMOUNT_VALUE: A yes or no value indicating if AMOUNT_VALUE is present in the DRUG_STRENGTH table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.BOX_SIZE: A yes or no value indicating if BOX_SIZE is present in the DRUG_STRENGTH table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.DENOMINATOR_UNIT_CONCEPT_ID: A yes or no value indicating if DENOMINATOR_UNIT_CONCEPT_ID is present in the DRUG_STRENGTH table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.DENOMINATOR_VALUE: A yes or no value indicating if DENOMINATOR_VALUE is present in the DRUG_STRENGTH table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.DRUG_CONCEPT_ID: A yes or no value indicating if DRUG_CONCEPT_ID is present in the DRUG_STRENGTH table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.INGREDIENT_CONCEPT_ID: A yes or no value indicating if INGREDIENT_CONCEPT_ID is present in the DRUG_STRENGTH table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.INVALID_REASON: A yes or no value indicating if INVALID_REASON is present in the DRUG_STRENGTH table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.NUMERATOR_UNIT_CONCEPT_ID: A yes or no value indicating if NUMERATOR_UNIT_CONCEPT_ID is present in the DRUG_STRENGTH table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.NUMERATOR_VALUE: A yes or no value indicating if NUMERATOR_VALUE is present in the DRUG_STRENGTH table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.VALID_END_DATE: A yes or no value indicating if VALID_END_DATE is present in the DRUG_STRENGTH table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.VALID_START_DATE: A yes or no value indicating if VALID_START_DATE is present in the DRUG_STRENGTH table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.DEFINES_ANCESTRY: A yes or no value indicating if DEFINES_ANCESTRY is present in the RELATIONSHIP table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.IS_HIERARCHICAL: A yes or no value indicating if IS_HIERARCHICAL is present in the RELATIONSHIP table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.RELATIONSHIP_CONCEPT_ID: A yes or no value indicating if RELATIONSHIP_CONCEPT_ID is present in the RELATIONSHIP table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.RELATIONSHIP_ID: A yes or no value indicating if RELATIONSHIP_ID is present in the RELATIONSHIP table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.RELATIONSHIP_NAME: A yes or no value indicating if RELATIONSHIP_NAME is present in the RELATIONSHIP table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.REVERSE_RELATIONSHIP_ID: A yes or no value indicating if REVERSE_RELATIONSHIP_ID is present in the RELATIONSHIP table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | VOCABULARY.VOCABULARY_CONCEPT_ID: A yes or no value indicating if VOCABULARY_CONCEPT_ID is present in the VOCABULARY table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | VOCABULARY.VOCABULARY_ID: A yes or no value indicating if VOCABULARY_ID is present in the VOCABULARY table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | VOCABULARY.VOCABULARY_NAME: A yes or no value indicating if VOCABULARY_NAME is present in the VOCABULARY table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | VOCABULARY.VOCABULARY_REFERENCE: A yes or no value indicating if VOCABULARY_REFERENCE is present in the VOCABULARY table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | VOCABULARY.VOCABULARY_VERSION: A yes or no value indicating if VOCABULARY_VERSION is present in the VOCABULARY table as expected based on the specification. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.CONCEPT_CLASS_ID: The number and percent of records with a NULL value in the CONCEPT_CLASS_ID of the CONCEPT that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.CONCEPT_CODE: The number and percent of records with a NULL value in the CONCEPT_CODE of the CONCEPT that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.CONCEPT_ID: The number and percent of records with a NULL value in the CONCEPT_ID of the CONCEPT that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.CONCEPT_NAME: The number and percent of records with a NULL value in the CONCEPT_NAME of the CONCEPT that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.DOMAIN_ID: The number and percent of records with a NULL value in the DOMAIN_ID of the CONCEPT that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.VALID_END_DATE: The number and percent of records with a NULL value in the VALID_END_DATE of the CONCEPT that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.VALID_START_DATE: The number and percent of records with a NULL value in the VALID_START_DATE of the CONCEPT that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.VOCABULARY_ID: The number and percent of records with a NULL value in the VOCABULARY_ID of the CONCEPT that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.ANCESTOR_CONCEPT_ID: The number and percent of records with a NULL value in the ANCESTOR_CONCEPT_ID of the CONCEPT_ANCESTOR that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.DESCENDANT_CONCEPT_ID: The number and percent of records with a NULL value in the DESCENDANT_CONCEPT_ID of the CONCEPT_ANCESTOR that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.MAX_LEVELS_OF_SEPARATION: The number and percent of records with a NULL value in the MAX_LEVELS_OF_SEPARATION of the CONCEPT_ANCESTOR that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.MIN_LEVELS_OF_SEPARATION: The number and percent of records with a NULL value in the MIN_LEVELS_OF_SEPARATION of the CONCEPT_ANCESTOR that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_CLASS.CONCEPT_CLASS_CONCEPT_ID: The number and percent of records with a NULL value in the CONCEPT_CLASS_CONCEPT_ID of the CONCEPT_CLASS that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_CLASS.CONCEPT_CLASS_ID: The number and percent of records with a NULL value in the CONCEPT_CLASS_ID of the CONCEPT_CLASS that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_CLASS.CONCEPT_CLASS_NAME: The number and percent of records with a NULL value in the CONCEPT_CLASS_NAME of the CONCEPT_CLASS that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.CONCEPT_ID_1: The number and percent of records with a NULL value in the CONCEPT_ID_1 of the CONCEPT_RELATIONSHIP that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.CONCEPT_ID_2: The number and percent of records with a NULL value in the CONCEPT_ID_2 of the CONCEPT_RELATIONSHIP that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.RELATIONSHIP_ID: The number and percent of records with a NULL value in the RELATIONSHIP_ID of the CONCEPT_RELATIONSHIP that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.VALID_END_DATE: The number and percent of records with a NULL value in the VALID_END_DATE of the CONCEPT_RELATIONSHIP that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.VALID_START_DATE: The number and percent of records with a NULL value in the VALID_START_DATE of the CONCEPT_RELATIONSHIP that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_SYNONYM.CONCEPT_ID: The number and percent of records with a NULL value in the CONCEPT_ID of the CONCEPT_SYNONYM that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_SYNONYM.CONCEPT_SYNONYM_NAME: The number and percent of records with a NULL value in the CONCEPT_SYNONYM_NAME of the CONCEPT_SYNONYM that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_SYNONYM.LANGUAGE_CONCEPT_ID: The number and percent of records with a NULL value in the LANGUAGE_CONCEPT_ID of the CONCEPT_SYNONYM that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | DOMAIN.DOMAIN_CONCEPT_ID: The number and percent of records with a NULL value in the DOMAIN_CONCEPT_ID of the DOMAIN that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | DOMAIN.DOMAIN_ID: The number and percent of records with a NULL value in the DOMAIN_ID of the DOMAIN that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | DOMAIN.DOMAIN_NAME: The number and percent of records with a NULL value in the DOMAIN_NAME of the DOMAIN that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.DRUG_CONCEPT_ID: The number and percent of records with a NULL value in the DRUG_CONCEPT_ID of the DRUG_STRENGTH that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.INGREDIENT_CONCEPT_ID: The number and percent of records with a NULL value in the INGREDIENT_CONCEPT_ID of the DRUG_STRENGTH that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.VALID_END_DATE: The number and percent of records with a NULL value in the VALID_END_DATE of the DRUG_STRENGTH that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.VALID_START_DATE: The number and percent of records with a NULL value in the VALID_START_DATE of the DRUG_STRENGTH that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.DEFINES_ANCESTRY: The number and percent of records with a NULL value in the DEFINES_ANCESTRY of the RELATIONSHIP that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.IS_HIERARCHICAL: The number and percent of records with a NULL value in the IS_HIERARCHICAL of the RELATIONSHIP that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.RELATIONSHIP_CONCEPT_ID: The number and percent of records with a NULL value in the RELATIONSHIP_CONCEPT_ID of the RELATIONSHIP that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.RELATIONSHIP_ID: The number and percent of records with a NULL value in the RELATIONSHIP_ID of the RELATIONSHIP that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.RELATIONSHIP_NAME: The number and percent of records with a NULL value in the RELATIONSHIP_NAME of the RELATIONSHIP that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.REVERSE_RELATIONSHIP_ID: The number and percent of records with a NULL value in the REVERSE_RELATIONSHIP_ID of the RELATIONSHIP that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | VOCABULARY.VOCABULARY_CONCEPT_ID: The number and percent of records with a NULL value in the VOCABULARY_CONCEPT_ID of the VOCABULARY that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | VOCABULARY.VOCABULARY_ID: The number and percent of records with a NULL value in the VOCABULARY_ID of the VOCABULARY that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | VOCABULARY.VOCABULARY_NAME: The number and percent of records with a NULL value in the VOCABULARY_NAME of the VOCABULARY that is considered not nullable. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.CONCEPT_ID: A yes or no value indicating if the CONCEPT_ID in the CONCEPT is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.ANCESTOR_CONCEPT_ID: A yes or no value indicating if the ANCESTOR_CONCEPT_ID in the CONCEPT_ANCESTOR is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.DESCENDANT_CONCEPT_ID: A yes or no value indicating if the DESCENDANT_CONCEPT_ID in the CONCEPT_ANCESTOR is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.MAX_LEVELS_OF_SEPARATION: A yes or no value indicating if the MAX_LEVELS_OF_SEPARATION in the CONCEPT_ANCESTOR is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.MIN_LEVELS_OF_SEPARATION: A yes or no value indicating if the MIN_LEVELS_OF_SEPARATION in the CONCEPT_ANCESTOR is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_CLASS.CONCEPT_CLASS_CONCEPT_ID: A yes or no value indicating if the CONCEPT_CLASS_CONCEPT_ID in the CONCEPT_CLASS is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.CONCEPT_ID_1: A yes or no value indicating if the CONCEPT_ID_1 in the CONCEPT_RELATIONSHIP is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.CONCEPT_ID_2: A yes or no value indicating if the CONCEPT_ID_2 in the CONCEPT_RELATIONSHIP is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_SYNONYM.CONCEPT_ID: A yes or no value indicating if the CONCEPT_ID in the CONCEPT_SYNONYM is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_SYNONYM.LANGUAGE_CONCEPT_ID: A yes or no value indicating if the LANGUAGE_CONCEPT_ID in the CONCEPT_SYNONYM is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | DOMAIN.DOMAIN_CONCEPT_ID: A yes or no value indicating if the DOMAIN_CONCEPT_ID in the DOMAIN is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.AMOUNT_UNIT_CONCEPT_ID: A yes or no value indicating if the AMOUNT_UNIT_CONCEPT_ID in the DRUG_STRENGTH is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.BOX_SIZE: A yes or no value indicating if the BOX_SIZE in the DRUG_STRENGTH is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.DENOMINATOR_UNIT_CONCEPT_ID: A yes or no value indicating if the DENOMINATOR_UNIT_CONCEPT_ID in the DRUG_STRENGTH is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.DRUG_CONCEPT_ID: A yes or no value indicating if the DRUG_CONCEPT_ID in the DRUG_STRENGTH is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.INGREDIENT_CONCEPT_ID: A yes or no value indicating if the INGREDIENT_CONCEPT_ID in the DRUG_STRENGTH is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.NUMERATOR_UNIT_CONCEPT_ID: A yes or no value indicating if the NUMERATOR_UNIT_CONCEPT_ID in the DRUG_STRENGTH is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.RELATIONSHIP_CONCEPT_ID: A yes or no value indicating if the RELATIONSHIP_CONCEPT_ID in the RELATIONSHIP is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | VOCABULARY.VOCABULARY_CONCEPT_ID: A yes or no value indicating if the VOCABULARY_CONCEPT_ID in the VOCABULARY is the expected data type based on the specification. Only checks integer fields. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.CONCEPT_ID: The number and percent of records that have a duplicate value in the CONCEPT_ID field of the CONCEPT. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_CLASS.CONCEPT_CLASS_ID: The number and percent of records that have a duplicate value in the CONCEPT_CLASS_ID field of the CONCEPT_CLASS. | Number of violated rows: 0 |
DQD | SUCCESS | DOMAIN.DOMAIN_ID: The number and percent of records that have a duplicate value in the DOMAIN_ID field of the DOMAIN. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.RELATIONSHIP_ID: The number and percent of records that have a duplicate value in the RELATIONSHIP_ID field of the RELATIONSHIP. | Number of violated rows: 0 |
DQD | SUCCESS | VOCABULARY.VOCABULARY_ID: The number and percent of records that have a duplicate value in the VOCABULARY_ID field of the VOCABULARY. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.CONCEPT_CLASS_ID: The number and percent of records that have a value in the CONCEPT_CLASS_ID field in the CONCEPT table that does not exist in the CONCEPT_CLASS table. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.DOMAIN_ID: The number and percent of records that have a value in the DOMAIN_ID field in the CONCEPT table that does not exist in the DOMAIN table. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.VOCABULARY_ID: The number and percent of records that have a value in the VOCABULARY_ID field in the CONCEPT table that does not exist in the VOCABULARY table. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.ANCESTOR_CONCEPT_ID: The number and percent of records that have a value in the ANCESTOR_CONCEPT_ID field in the CONCEPT_ANCESTOR table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_ANCESTOR.DESCENDANT_CONCEPT_ID: The number and percent of records that have a value in the DESCENDANT_CONCEPT_ID field in the CONCEPT_ANCESTOR table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_CLASS.CONCEPT_CLASS_CONCEPT_ID: The number and percent of records that have a value in the CONCEPT_CLASS_CONCEPT_ID field in the CONCEPT_CLASS table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.CONCEPT_ID_1: The number and percent of records that have a value in the CONCEPT_ID_1 field in the CONCEPT_RELATIONSHIP table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.CONCEPT_ID_2: The number and percent of records that have a value in the CONCEPT_ID_2 field in the CONCEPT_RELATIONSHIP table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.RELATIONSHIP_ID: The number and percent of records that have a value in the RELATIONSHIP_ID field in the CONCEPT_RELATIONSHIP table that does not exist in the RELATIONSHIP table. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_SYNONYM.CONCEPT_ID: The number and percent of records that have a value in the CONCEPT_ID field in the CONCEPT_SYNONYM table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_SYNONYM.LANGUAGE_CONCEPT_ID: The number and percent of records that have a value in the LANGUAGE_CONCEPT_ID field in the CONCEPT_SYNONYM table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | DOMAIN.DOMAIN_CONCEPT_ID: The number and percent of records that have a value in the DOMAIN_CONCEPT_ID field in the DOMAIN table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.AMOUNT_UNIT_CONCEPT_ID: The number and percent of records that have a value in the AMOUNT_UNIT_CONCEPT_ID field in the DRUG_STRENGTH table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.DENOMINATOR_UNIT_CONCEPT_ID: The number and percent of records that have a value in the DENOMINATOR_UNIT_CONCEPT_ID field in the DRUG_STRENGTH table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.DRUG_CONCEPT_ID: The number and percent of records that have a value in the DRUG_CONCEPT_ID field in the DRUG_STRENGTH table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.INGREDIENT_CONCEPT_ID: The number and percent of records that have a value in the INGREDIENT_CONCEPT_ID field in the DRUG_STRENGTH table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.NUMERATOR_UNIT_CONCEPT_ID: The number and percent of records that have a value in the NUMERATOR_UNIT_CONCEPT_ID field in the DRUG_STRENGTH table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | RELATIONSHIP.RELATIONSHIP_CONCEPT_ID: The number and percent of records that have a value in the RELATIONSHIP_CONCEPT_ID field in the RELATIONSHIP table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | VOCABULARY.VOCABULARY_CONCEPT_ID: The number and percent of records that have a value in the VOCABULARY_CONCEPT_ID field in the VOCABULARY table that does not exist in the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.DRUG_CONCEPT_ID: The number and percent of records that have a value in the DRUG_CONCEPT_ID field in the DRUG_STRENGTH table that do not conform to the DRUG domain. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.INGREDIENT_CONCEPT_ID: The number and percent of records that have a value in the INGREDIENT_CONCEPT_ID field in the DRUG_STRENGTH table that do not conform to the INGREDIENT class. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.VALID_END_DATE: The number and percent of records with a value in the VALID_END_DATE field of the CONCEPT that occurs prior to the date in the VALID_START_DATE field of the CONCEPT table. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.VALID_END_DATE: The number and percent of records with a value in the VALID_END_DATE field of the CONCEPT_RELATIONSHIP that occurs prior to the date in the VALID_START_DATE field of the CONCEPT_RELATIONSHIP table. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.VALID_END_DATE: The number and percent of records with a value in the VALID_END_DATE field of the DRUG_STRENGTH that occurs prior to the date in the VALID_START_DATE field of the DRUG_STRENGTH table. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT.VALID_START_DATE: The number and percent of records with a value in the VALID_START_DATE field of the CONCEPT that occurs after the date in the VALID_END_DATE. | Number of violated rows: 0 |
DQD | SUCCESS | CONCEPT_RELATIONSHIP.VALID_START_DATE: The number and percent of records with a value in the VALID_START_DATE field of the CONCEPT_RELATIONSHIP that occurs after the date in the VALID_END_DATE. | Number of violated rows: 0 |
DQD | SUCCESS | DRUG_STRENGTH.VALID_START_DATE: The number and percent of records with a value in the VALID_START_DATE field of the DRUG_STRENGTH that occurs after the date in the VALID_END_DATE. | Number of violated rows: 0 |
We can see that there are no errors.
context | type | step | message |
---|