From 996837dccc68d6ba9cd6e146ca5f58cfbdb7082e Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Wed, 28 Aug 2024 09:32:14 +0200 Subject: [PATCH 01/27] update countOccurrences --- R/countOccurrences.R | 111 +++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 56 deletions(-) diff --git a/R/countOccurrences.R b/R/countOccurrences.R index 1b5ccfb..acf134a 100644 --- a/R/countOccurrences.R +++ b/R/countOccurrences.R @@ -1,6 +1,4 @@ -#' Count Occurrences of Values in Database Tables -#' -#' This function counts the occurrences of specified concept ids within specified tables in a OMOP database, +#' This function counts the occurrences of specified concept ids within specified tables in an OMOP database, #' including direct occurrences and occurrences through descendants, based on a provided cdm_schema and links. #' It returns a tibble summarizing the counts across persons and across records. #' @@ -10,102 +8,103 @@ #' @param db_connection A database connection object through which queries will be executed. #' @param cdm_schema The database cdm_schema in which the tables are located. #' @param vocab_schema The database vocab_schema in which the concept tables are located. -#' @param save_path The path to save the results to. If NULL, the results are not saved. +#' @param save_path The path to save the results to as a CSV file. If NULL, the results are not saved. #' -#' @return A tibble with columns for the number of times any concept from 'v' occurs: direct count of persons, -#' direct count of records, descendant count of persons, and descendant count of records. -#' The tibble also includes the concept names derived from `v` and is arranged by the total +#' @return A tibble with columns for the number of times any concept from 'v' occurs: direct count of persons, +#' direct count of records, descendant count of persons, and descendant count of records. +#' The tibble also includes the concept names and domain ids derived from `v` and is arranged by the total #' record count (direct + descendant). #' #' @examples #' # Assuming `db_connection` is a valid database connection, `cdm_schema` is set to "public", #' # `tables` contains the names of the tables to search, `links` defines the relevant fields, #' # and `v` contains the values to search for: -#' results <- countOccurrences(v = c(1, 2), tables = c("observation", "condition_occurrence"), -#' links = list(observation = "observation_concept_id", condition_occurrence = "condition_concept_id", ...), -#' db_connection = db_connection, cdm_schema = "public") +#' results <- countOccurrences( +#' v = c(1, 2), tables = c("observation", "condition_occurrence"), +#' links = list(observation = "observation_concept_id", condition_occurrence = "condition_concept_id"), +#' db_connection = db_connection, cdm_schema = "public", vocab_schema = "vocabulary" +#' ) #' #' @export countOccurrences <- function(v, tables, links, db_connection, cdm_schema, vocab_schema, save_path = NULL) { - library(DBI) - library(dplyr) - library(tibble) - stopifnot(is.vector(v)) stopifnot(is.character(tables) & is.vector(tables)) stopifnot(is.list(links)) stopifnot(is.character(cdm_schema)) - + results <- list() - + + # Create a temporary table for concept IDs + temp_query <- "CREATE TEMPORARY TABLE temp_concepts (concept_id INTEGER)" + temp_query_translated <- SqlRender::translate(sql = temp_query, targetDialect = attr(db_connection, "dbms")) + DatabaseConnector::dbExecute(db_connection, temp_query_translated) + temp_query_insert <- sprintf("INSERT INTO temp_concepts (concept_id) VALUES %s", paste0("(", v, ")", collapse = ", ")) + temp_query_insert_translated <- SqlRender::translate(sql = temp_query_insert, targetDialect = attr(db_connection, "dbms")) + DatabaseConnector::dbExecute(db_connection, temp_query_insert_translated) + for (table in tables) { - concept_id_field <- links[[table]] - + concept_id_field <- links[[table]][1] + # Combined SQL query for direct and descendant counts combined_sql <- sprintf( - # WITH clause to define common table expressions (CTEs) "WITH direct_counts AS ( - -- Select the concept_id and count the distinct persons and total records for each concept_id SELECT %s AS concept_id, COUNT(DISTINCT person_id) AS count_persons, COUNT(*) AS count_records - -- From the cdm schema and the specified table FROM %s.%s - -- Where the concept_id is in the provided vector - WHERE %s IN (%s) - -- Group by the concept_id + WHERE %s IN (SELECT concept_id FROM temp_concepts) GROUP BY %s - -- Define the second expression for descendants ), desc_counts AS ( - -- Select the ancestor_concept_id and count the distinct persons and total records for each concept_id SELECT b.ancestor_concept_id AS concept_id, COUNT(DISTINCT a.person_id) AS desc_count_person, COUNT(*) AS desc_count_record - -- From the vocab schema and concept ancestor table (vocab schema must contain concept_ancestor table; this can be the same schema as the cdm) FROM %s.%s a - -- Join the concept_ancestor table to get the ancestor_concept_id JOIN %s.concept_ancestor b ON a.%s = b.descendant_concept_id - -- Where the descendant_concept_id is in the provided vector - WHERE b.ancestor_concept_id IN (%s) - -- Group by the ancestor_concept_id + WHERE b.ancestor_concept_id IN (SELECT concept_id FROM temp_concepts) GROUP BY b.ancestor_concept_id ) - -- Combine the direct and descendant counts into one result set - SELECT coalesce(d.concept_id, dc.concept_id) AS concept_id, coalesce(count_persons, 0) AS count_persons, coalesce(count_records, 0) AS count_records, coalesce(desc_count_person, 0) AS desc_count_person, coalesce(desc_count_record, 0) AS desc_count_record - FROM direct_counts d - FULL OUTER JOIN desc_counts dc ON d.concept_id = dc.concept_id", - concept_id_field, cdm_schema, table, concept_id_field, paste(v, collapse = ","), concept_id_field, - cdm_schema, table, vocab_schema, concept_id_field, paste(v, collapse = ",") + SELECT c.concept_id, coalesce(d.count_persons, 0) AS count_persons, coalesce(d.count_records, 0) AS count_records, coalesce(dc.desc_count_person, 0) AS desc_count_person, coalesce(dc.desc_count_record, 0) AS desc_count_record, + coalesce(concept.concept_name, '') AS concept_name, coalesce(concept.domain_id, '') AS domain_id + FROM temp_concepts c + LEFT JOIN direct_counts d ON c.concept_id = d.concept_id + LEFT JOIN desc_counts dc ON c.concept_id = dc.concept_id + LEFT JOIN %s.concept concept ON c.concept_id = concept.concept_id", + concept_id_field, cdm_schema, table, concept_id_field, concept_id_field, + cdm_schema, table, vocab_schema, concept_id_field, + vocab_schema ) - combined_res <- dbGetQuery(db_connection, combined_sql) + sql_translated <- SqlRender::translate(sql = combined_sql, targetDialect = attr(db_connection, "dbms")) + combined_res <- DatabaseConnector::dbGetQuery(db_connection, sql_translated) - not_in_data <- v[!(v %in% combined_res$concept_id)] + ind_not_in_data <- which(!(v %in% combined_res$concept_id)) combined_res <- combined_res |> - bind_rows(tibble( - concept_id = not_in_data, + dplyr::bind_rows(tibble( + concept_id = v[ind_not_in_data], + concept_name = "Unknown; concept_id not found in data", + domain_id = "Unknown; concept_id not found in data", count_persons = 0, count_records = 0, desc_count_person = 0, desc_count_record = 0 - )) - + )) |> + dplyr::filter(!is.na(concept_id)) + # Append results results[[table]] <- combined_res } - + # Combine all results into a single data frame and transform - final_res <- bind_rows(results) %>% - group_by(concept_id) %>% - summarise( + final_res <- dplyr::bind_rows(results) |> + dplyr::group_by(concept_id, concept_name, domain_id) |> + dplyr::summarise( count_persons = sum(count_persons), count_records = sum(count_records), desc_count_person = sum(desc_count_person), desc_count_record = sum(desc_count_record) - ) %>% - ungroup() %>% - mutate(concept_name = names(v)[match(concept_id, v)]) %>% - arrange(desc(count_records + desc_count_record)) + ) |> + dplyr::ungroup() |> + dplyr::arrange(desc(desc_count_record)) + + if (!is.null(save_path)) { + readr::write_csv(final_res, paste0(save_path, "/", "count_occurrences.csv")) + } - if (!is.null(save_path)) { - readr::write_csv(final_res, paste0(save_path, '/', 'count_occurrences.csv')) - } - return(final_res) -} \ No newline at end of file +} From ec87a956da00cb51499298861974da9f45db4422 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Wed, 28 Aug 2024 09:35:02 +0200 Subject: [PATCH 02/27] minor updates --- R/conceptSets.R | 1625 ++++++++++++++++++++++++++++++---------------- R/isStandard.R | 6 +- R/isStandardCS.R | 5 +- 3 files changed, 1062 insertions(+), 574 deletions(-) diff --git a/R/conceptSets.R b/R/conceptSets.R index e6ed904..853bd4d 100644 --- a/R/conceptSets.R +++ b/R/conceptSets.R @@ -1,568 +1,1057 @@ -#' @name conceptSets -#' @title Medical Concept Sets Definition and Expansion -#' -#' @description -#' This script defines and expands various concept sets related to medical data. It utilizes the Capr library to fetch all descendant concepts -#' for each defined concept set, ensuring comprehensive coverage of related medical concepts. -#' -#' @details The script initializes by defining multiple concept sets within a list structure. Each concept set contains unique identifiers for medical concepts, -#' which are expanded to include all descendant concepts using the Capr library's functionality. The expanded concept sets are then stored in a new list within -#' the `conceptSets` object. Finally, the script outputs a confirmation message indicating successful sourcing and expansion of concept sets. -#' -#' @note This script requires the Capr library to be installed and loaded for proper execution. -#' @export - -library(Capr) - -## Define list of concepts to use for concept sets -conceptSets <- list( - concepts = list( - # 5.3 VIS score medications - visScoreMedications = c( - 1337720, # source: dobutamine /// concept: dobutamine - 1337860, # source: dopamine /// concept: dopamine - 1343916, # source: epinephrine /// concept: epinephrine - 1368671, # source: milrinone /// concept: milrinone - 1321341, # source: norepinephrin /// concept: norepinephrine - 1507835 # source: vasopressin /// concept: vasopressin (USP) - ), - - # 5.4 vasopressors and inotropes - vasopressors_inotropes = c( - 1337720, # source: Dobutamine /// concept: dobutamine - 1337860, # source: Dopamine /// concept: dopamine - 1143374, # source: Ephedrine /// concept: ephedrine - 1343916, # source: Epinephrine /// concept: epinephrine - 1183554, # source: Isoproterenol /// concept: isoproterenol - 40173184, # source: Levosimendan /// concept: levosimendan - 1368671, # source: Milrinone /// concept: milrinone - 1321341, # source: Norepinephrine /// concept: norepinephrine - 1135766, # source: Phenylephrine /// concept: phenylephrine - 19119253, # source: Terlipressin /// concept: terlipressin - 1507835 # source: Vasopressin /// concept: vasopressin (USP) - ), - - # 5.5 immunosuppressants - immunosuppressants = c( - 4273629, # source: Chemotherapy /// concept: Chemotherapy - 1518254, # source: Dexamethasone /// concept: dexamethasone - 975125, # source: Hydrocortisone /// concept: hydrocortisone - 1506270, # source: Methylprednisolone /// concept: methylprednisolone - 21603754, # source: Monoclonal Antibodies /// concept: Monoclonal antibodies - 1550557 # source: Prednisolone /// concept: prednisolone - ), - - # 5.6 antibiotic medications - antibiotics = c( - 1713332, # source: Amoxicillin /// concept: amoxicillin - 1759842, # source: Amoxicillin clavulanate /// concept: clavulanate - 1717327, # source: Ampicillin /// concept: ampicillin - 1734104, # source: Azithromycin /// concept: azithromycin - 1836430, # source: Trimethoprim-Sulfamethoxazole /// concept: sulfamethoxazole - 1705674, # source: Trimethoprim-Sulfamethoxazole /// concept: trimethoprim - 1836948, # source: Tetracycline /// concept: tetracycline - 902722, # source: Tobramycin /// concept: tobramycin - 1707687, # source: Vancomycin /// concept: vancomycin - 19010400, # source: Fusidic acid /// concept: fusidate - 45892419, # source: Gentamicin /// concept: gentamicin - 45892599, # source: Ceftolozane-Tazovactam /// concept: ceftolozane - 46221507, # source: Ceftazidime-Avibactam /// concept: avibactam - 1736887, # source: Linezolid /// concept: linezolid - 1748975, # source: Cefepime /// concept: cefepime - 1750500, # source: Clarithromycin /// concept: clarithromycin - 1769535, # source: Cefadroxil /// concept: cefadroxil - 1771162, # source: Cefazolin /// concept: cefazolin - 1774470, # source: Cefotaxime /// concept: cefotaxime - 1776684, # source: Ceftazidime /// concept: ceftazidime - 1778162, # source: Cefuroxime /// concept: cefuroxime - 1786617, # source: Daptomycin /// concept: daptomycin - 1797513, # source: Ciprofloxacin /// concept: ciprofloxacin - 997881, # source: Clindamycin /// concept: clindamycin - 901845, # source: Colistin /// concept: colistin - 1709170, # source: Meropenem /// concept: meropenem - 1717963, # source: Ertapenem /// concept: ertapenem - 1518254, # source: Dexamethasone /// concept: dexamethasone - 1741122, # source: Piperacillin-Tazobactam /// concept: tazobactam - 1746114, # source: Piperacillin-Tazobactam /// concept: piperacillin - 1746940, # source: Erythromycin /// concept: erythromycin - 951511, # source: Mupirocin /// concept: mupirocin - 956653, # source: Fosfomycin /// concept: fosfomycin - 975125, # source: Hydrocortisone /// concept: hydrocortisone - 1778262, # source: Imipenem /// concept: imipenem - 19078399, # source: Teicoplanin /// concept: teicoplanin - 1790868, # source: Amikacin /// concept: amikacin - 1506270, # source: Methylprednisolone /// concept: methylprednisolone - 920293, # source: Nitrofurantoin /// concept: nitrofurantoin - 1721543, # source: Norfloxacin /// concept: norfloxacin - 1724703, # source: Oxacillin /// concept: oxacillin - 1728416, # source: Penicillin /// concept: penicillin G - 1742253, # source: Levofloxacin /// concept: levofloxacin - 1550557, # source: Prednisolone /// concept: prednisolone - 1763204 # source: Rifampicin /// concept: rifampin - ), - - # 5.7 antifungal medications - antifungals = c( - 1714277, # source: Voriconazole /// concept: voriconazole - 35606695, # source: Isovuconazole /// concept: isavuconazole - 19018013, # source: Micafungin /// concept: micafungin - 19026450, # source: Andiulafungin /// concept: anidulafungin - 1754994 # source: Fluconazole /// concept: fluconazole - ), - - # 5.8 antibiotic resistance - antibioticResistance = c( - 4019195, # source: MRSA /// concept: Methicillin resistant Staphylococcus aureus - 4257547, # source: ESBL /// concept: Extended spectrum beta-lactamase producing bacteria - 37017134, # source: Drug-resistant /// concept: Multidrug-resistant bacteria - 1707687, # source: Vancomycin-resistant /// concept: vancomycin - 997881, # source: Clindamycin-resistant /// concept: clindamycin - 1746940 # source: Erythromycin-resistant /// concept: erythromycin - ), - - # 5.9 cardiac surgery - cardiacSurgery = c( - 4049734, # source: Application of band to pulmonary artery /// concept: Banding of pulmonary artery - 4019929, # source: Unspecified repair of tetralogy of fallot /// concept: Repair of tetralogy of Fallot - 4019932, # source: Repositioning of transposed great arteries /// concept: Arterial switch operation - 4017751, # source: Unspecified correction of total anomalous pulmonary venous connection /// concept: Repair of total anomalous pulmonary venous connection - 4020376, # source: Primary repair of defect of interatrial septum NEC/repair of defect of interatrial septum using pericardial patch /// concept: Closure of defect of interatrial septum using pericardial patch - 4020506, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Creation of valved conduit between right ventricle of heart and pulmonary artery - 4019950, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Revision of valved cardiac conduit - 4020508, # source: Correction of persistent sinus venosus /// concept: Repair of sinus venosus - 4018441, # source: Correction of partial anomalous pulmonary venous drainage /// concept: Repair of partial anomalous pulmonary venous connection - 4020520, # source: Open aortic valvotomy /// concept: Open aortic valvotomy - 4018747, # source: Repair of subaortic stenosis /// concept: Operations on the left ventricular outflow tract - 4019233, # source: Unspecified creation of shunt to pulmonary artery from subclavian artery using interposition tube pr /// concept: Creation of shunt from subclavian artery to pulmonary artery using interposition tube prosthesis - 4019237, # source: Creation of anastomosis to pulmonary artery from vena cava /// concept: Anastomosis of vena cava to pulmonary artery - 4018926, # source: Other specified : repair of pulmonary artery /// concept: Repair of pulmonary artery - 4021725, # source: Removal of band from pulmonary artery /// concept: Removal of band from pulmonary artery - 4019026, # source: Other specified: plastic repair of aorta /// concept: Plastic repair of aorta - 4020812, # source: Plastic repair of aorta and end to end anastomosis of aorta /// concept: Plastic repair of aorta and end-to-end anastomosis of aorta - 4019028, # source: Release of vascular ring of aorta /// concept: Release of vascular ring of aorta - 44790092, # source: Relief of left ventricular outflow tract obstruction /// concept: Relief of left ventricular outflow tract obstruction - 44789857, # source: Total cavopulmonary connection with extracardiac inferior caval vein topulmonary artery conduit /// concept: Total cavopulmonary connection with extracardiac inferior caval vein to pulmonary artery conduit - 4336751, # source: Unspecified other transplantation of heart/allotransplantation of heart NEC /// concept: Allotransplant of heart - 4049979, # source: Repair of double outlet right ventricle /// concept: Repair of double outlet right ventricle - 4050114, # source: Closure of patent ductus arteriosus NEC /// concept: Closure of ductus arteriosus with clip - 4052536, # source: Extracorporeal membrane oxygenation /// concept: Extracorporeal membrane oxygenation - 44790415, # source: Aortic root pulmonary valve autograft with right vent to pulmonary artery valved conduit/ aortic root pulmonary valve autograft with right vent to pulmonary artery aortoventriculoplasty /// concept: Aortic root replacement using pulmonary valve autograft with right ventricle to pulmonary artery valved conduit and aortoventriculoplasty - 4144921, # source: Implantation of cardiac pacemaker system NEC /// concept: Implantation of cardiac pacemaker - 4137127, # source: Unspecified other transplantation of heart/allotransplantation of heart NEC /// concept: Transplantation of heart - 44793133, # source: Aortopulmonary reconstruction with systemic to pulmonary arterial shunt /// concept: Aortopulmonary reconstruction with systemic to pulmonary arterial shunt - 4293619, # source: Tricuspid valve repair NEC /// concept: Repair of tricuspid valve - 4296790, # source: Transposition of coronary artery NEC /// concept: Transposition of coronary artery - 4139214, # source: Open implantation of ventricular assist device /// concept: Open implantation of cardiac ventricular assist device - 4178479, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Replacement of valved cardiac conduit - 40486525, # source: Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum /// concept: Primary repair of defect of atrioventricular septum - 4187380, # source: Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum /// concept: Repair of ostium primum defect - 4199899, # source: Unspecified repair of defect of interventricular septum /// concept: Closure of ventricular septal defect - 4203153, # source: Replacement of mitral valve NEC /// concept: Replacement of mitral valve - 4217615, # source: Plication of diaphragm /// concept: Plication of diaphragm - 4308136, # source: Repair of tetralogy of fallot using transannular patch /// concept: Complete repair of tetralogy of Fallot with transannular patch - 4312194, # source: Aortic valve repair NEC /// concept: Repair of heart valve - 4339184, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Replacement of pulmonary valve - 4232476 # source: Repair of defect of interventricular septum using prosthetic patch/unspecified repair of defect of interventricular septum /// concept: Repair of ventricular septal defect with prosthesis - ), - - # 5.10 cardiac radiology - cardiacRadiology = c( - 4019824, # source: US transoesophageal echocardiogram (toe) /// concept: Transesophageal echocardiography - 4032404, # source: IR bronchoscopy /// concept: Bronchoscopy - 4065416, # source: Exercise test (non-CPET) /// concept: Exercise tolerance test - 4345925, # source: FL video swallow /// concept: Videofluoroscopy swallow - 4083106, # source: US cranial contents /// concept: US scan of head - 4083108, # source: US neck /// concept: US scan of neck - 4082979, # source: MRI head /// concept: MRI of head - 4093436, # source: US thorax and pleural cavity /// concept: Ultrasonography of thorax - 4125350, # source: CT head /// concept: CT of head - 4125530, # source: US urinary tract /// concept: US urinary tract - 44802640, # source: MRI cardiac complex congenital /// concept: MRI study for cardiac congenital anomaly - 4163872, # source: XR chest /// concept: Plain chest X-ray - 4167029, # source: US doppler groin both /// concept: Ultrasonography of inguinal region - 4167052, # source: US doppler renal both /// concept: Doppler ultrasonography of kidney - 4305221, # source: US abdomen and pelvis/ US abdomen /// concept: US scan of abdomen and pelvis - 4303522, # source: US diaphragmatic region /// concept: US scan of diaphragm - 4306317, # source: CT heart with contrast/ CT cardiac angiogram coronary/ CT cardiac gated with contrast /// concept: CT angiography of coronary artery with contrast - 4169275, # source: XR chest and abdomen /// concept: X-ray of chest and abdomen - 4322380, # source: IR PICC line insertion /// concept: Insertion of peripherally inserted central catheter - 4140473, # source: 24h holter monitor /// concept: Holter extended electrocardiographic recording - 4329508, # source: US thorax and pleural cavity /// concept: Ultrasonography of pleural cavity - 4335392, # source: US doppler lower limb veins both /// concept: Doppler ultrasonography of vein of lower limb - 4203365, # source: Epicardial echocardiogram /// concept: Epicardial echocardiography - 4335825, # source: US transthoracic echocardiogram/ us transthoracic echocardiogram (pre- admission)/ US transthoracic echocardiogram (sedated) /// concept: Transthoracic echocardiography - 40482732, # source: IR tunnelled central venous line insertion /// concept: Insertion of tunneled venous catheter - 40489841, # source: US doppler jugular vein both /// concept: Doppler ultrasonography of jugular vein - 40492338, # source: Cardiopulmonary exercise test (CPET) /// concept: Cardiopulmonary exercise test - 40488431, # source: Pacemaker/ICD interrogation (in clinic)/ pacemaker/ICD interrogation (other) /// concept: Interrogation of cardiac pacemaker - 42873079, # source: IR tunnelled central venous line removal /// concept: Removal of tunneled central venous catheter - 4261497, # source: US abdomen and pelvis/ US abdomen /// concept: Ultrasonography of abdomen - 4205144, # source: EEG routine portable /// concept: Portable electroencephalogram - 4181917, # source: EEG routine /// concept: Electroencephalogram - 4264477, # source: XR abdomen /// concept: Diagnostic radiography of abdomen - 45764527, # source: 24h holter monitor /// concept: Electrocardiographic Holter analyzer - 45765560, # source: Event monitor /// concept: Cardiovascular monitor - 4327032, # source: CT thorax with contrast /// concept: CT of thorax with contrast - 35622931, # source: US doppler /// concept: Doppler ultrasound - 44813863, # source: US vocal cord /// concept: Ultrasonography of vocal cord - 4312208, # source: IR bronchogram /// concept: Contrast bronchogram - 4235141 # source: Pacemaker/ICD device check - remote patient initiated /// concept: Check artificial pacemaker - ), - - # 5.11 cardiac length of stay - cardiac_LOS = c( - 4123933, # source: ICU admission (start datetime and end datetime) /// concept: Admission to pediatric intensive care unit - 8715, # source: Total hospital admission (start datetime and end datetime) /// concept: Hospital admission - 4161811, # source: HDU admission (start datetime and end datetime) /// concept: Admission to high dependency unit - 36675203 # source: Cardiology ward admission (start datetime and end datetime) /// concept: Admission to pediatric cardiology department - ), - - # 5.12 additional variables - additional = c( - 4095105, # source: Base Excess /// concept: Base deficit measurement - 4123933, # source: Elective ICU admission /// concept: Admission to pediatric intensive care unit - 4234469, # source: Diagnoses /// concept: Diagnosis - 40493026, # source: Mechanical ventilation /// concept: Mechanical ventilator - 44803020, # source: Reason for ICU admission: (Main reason for ICU admission is not recovery from surgery or a procedure, Recovery from a bypass cardiac procedure, recovery from a non-bypass cardiac procedure, recovery from non-cardiac procedure) /// concept: Primary reason for admission - 4209008, # source: Pupillary reaction /// concept: Pupillary function - 260134, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Croup - 432571, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Malignant lymphoma - 4029498, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Seizure disorder - 317009, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Asthma - 201957, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Necrotizing enterocolitis in fetus OR newborn - 43530727, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Spontaneous cerebral hemorrhage - 29783, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Severe combined immunodeficiency disease - 321042, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Cardiac arrest - 4165112, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Bronchiolitis - 443727, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Diabetic ketoacidosis - 314383, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Myocarditis - 4245975, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Hepatic failure - 440207, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Hypoplastic left heart syndrome - 42537745, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Bone marrow transplant present - 442588, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Obstructive sleep apnea syndrome - 4213310, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Degenerative disease of the central nervous system - 321319, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Cardiomyopathy - 317510, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Leukemia - 5083, # source: Outpatient appointment type (telephone/ clinic visit etc.) /// concept: Telehealth - 42869590, # source: FiO2 /// concept: Oxygen/Gas total [Pure volume fraction] Inhaled gas - 3027946, # source: PaCO2 /// concept: Carbon dioxide [Partial pressure] in Arterial blood - 3004249 # source: Systolic blood pressure /// concept: Systolic blood pressure - ), - - # 5.13 laboratory tests - labTests = c( - 4298431, # source: Immature WBC Count /// concept: White blood cell count - 3007670, # source: Neutrophil Count /// concept: Neutrophil Ab [Units/volume] in Serum - 40762351, # source: Hemoglobin /// concept: Hemoglobin [Moles/volume] in Blood - 37393863, # source: Platelet Count /// concept: Platelet count - 3009542, # source: Hematocrit /// concept: Hematocrit [Volume Fraction] of Blood - 3034426, # source: INR Prothrombin Time /// concept: Prothrombin time (PT) - 3047181, # source: Lactate /// concept: Lactate [Moles/volume] in Blood - 3051825, # source: Creatinine /// concept: Creatinine [Mass/volume] in Blood - 3024561, # source: Albumin /// concept: Albumin [Mass/volume] in Serum or Plasma - 3024641, # source: Blood urea nitrogen /// concept: Urea nitrogen [Moles/volume] in Serum or Plasma - 3013826, # source: Glucose /// concept: Glucose [Moles/volume] in Serum or Plasma - 3006140, # source: Bilirubin /// concept: Bilirubin.total [Moles/volume] in Serum or Plasma - 3019550, # source: Sodium /// concept: Sodium [Moles/volume] in Serum or Plasma - 3005456, # source: Potassium /// concept: Potassium [Moles/volume] in Blood - 3033836, # source: Magnesium /// concept: Magnesium [Moles/volume] in Blood - 3018572, # source: Chloride /// concept: Chloride [Moles/volume] in Blood - 3015377, # source: Calcium /// concept: Calcium [Moles/volume] in Serum or Plasma - 3003458, # source: Phosphate /// concept: Phosphate [Moles/volume] in Serum or Plasma - 3020460, # source: CRP /// concept: C reactive protein [Mass/volume] in Serum or Plasma - 3006923, # source: ALT /// concept: Alanine aminotransferase [Enzymatic activity/volume] in Serum or Plasma - 3013721, # source: AST /// concept: Aspartate aminotransferase [Enzymatic activity/volume] in Serum or Plasma - 37392672, # source: pH (venous) /// concept: Blood venous pH - 37399161, # source: pH (arterial) /// concept: Blood arterial pH - 3021447, # source: pCO2 (venous) /// concept: Carbon dioxide [Partial pressure] in Venous blood - 3027946, # source: pCO2 (arterial) /// concept: Carbon dioxide [Partial pressure] in Arterial blood - 3024354, # source: pO2 (venous) /// concept: Oxygen [Partial pressure] in Venous blood - 3027801, # source: pO2 (arterial) /// concept: Oxygen [Partial pressure] in Arterial blood - 3027273, # source: Bicarbonate (venous) /// concept: Bicarbonate [Moles/volume] in Venous blood - 3008152 # source: Bicarbonate (arterial) /// concept: Bicarbonate [Moles/volume] in Arterial blood - ), - - # 5.14 cardiac complications - cardiacComplications = c( - 4051330, # source: LCOS - renal support (CVVH/ PD) /// concept: Continuous venovenous hemofiltration - 4123933, # source: ICU ward stay /// concept: Admission to pediatric intensive care unit - 4295705, # source: Surgical injury - Reexplore for bleeding /// concept: Exploratory incision - 377091, # source: Neurological injury - seizure /// concept: Seizure - 439847, # source: Neurological injury - intracranial haemmhorage/ intracranial bleeding /// concept: Intracranial hemorrhage - 4308537, # source: Surgical injury - Blood Loss /// concept: Injury to blood vessel during surgery - 321042, # source: LCOS - Cardiac arrest /// concept: Cardiac arrest - 443454, # source: Neurological injury - infarction /// concept: Cerebral infarction - 4185565, # source: Low cardiac output state (LCOS) - ECMO /// concept: Low cardiac output syndrome - 42537043, # source: CVL infections /// concept: CLABSI - central line associated bloodstream infection - 4306136 # source: Surgical injury - Chylothorax /// concept: Chylothorax - ), - - # 5.15 Vital signs - vitalSigns = c( - 3027018, # source: Age-dependent HR /// concept: Heart rate - 3024171, # source: Age-dependent RR /// concept: Respiratory rate - 3004249, # source: SBP (Systolic Blood Pressure) /// concept: Systolic blood pressure - 3012888, # source: DBP (Dyastolic Blood Pressure) /// concept: Diastolic blood pressure - 4020553 # source: SpO2 /// concept: Oxygen saturation measurement - ), - - # 5.16 HSJD clinical - HSJDClinical = c( - 3025315, # source: Weight /// concept: Body weight - 3036277, # source: Height /// concept: Body height - 4201235, # source: Body Surface Area (BSA) - Combination of weight and height /// concept: body surface area - 4275564 # source: Cardiac surgeries (Interventions) /// concept: Operation on heart - ), - - # 5.17 HSJD Surgery - HSJDSurgery = c( - 40490494, # source: STAT/EACTS score of surgery /// concept: Society of Thoracic Surgeons risk calculator - 4301351, # source: Surgery start datetime, end datetime /// concept: Surgical procedure - 4336464, # source: Cardiac bypass start datetime, end datetime /// concept: Coronary artery bypass graft - 4201547, # source: Cross-clamping start datetime, end datetime /// concept: Placement of arterial cross clamp - 37152781, # source: Deep hypothermic circulatory arrest start datetime, end datetime /// concept: Hypothermic circulatory arrest - 4272324, # source: Antegrade Cerebral Perfusion start datetime, end datetime /// concept: Cardiopulmonary bypass operation - 4150627 # source: Extubation event /// concept: Removal of endotracheal tube - ), - - # 5.18 HSJD Hospitalisations - HSJDHospitalisation = c( - 44803020, # source: Admission reason /// concept: Primary reason for admission - 42539650, # source: Vasoactive infusion start datetime, end datetime /// concept: Administration of intravenous vasoactive drug - 4179206, # source: Postop central venous catheter in/start datetime, out/end datetime /// concept: Central venous catheter - 37158404, # source: Invasive Mechanical Ventilation LOS /// concept: Invasive mechanical ventilation - 4177224 # source: Non-Invasive Mechanical Ventilation LOS /// concept: Non-invasive ventilation - ), - - # 5.19 HSJD Complications - HSJDcomplications = c( - 4202832, # source: intubation /// concept: Intubation - 4275564, # source: Cardiac surgeries (interventions) /// concept: Operation on heart - 4044892, # source: Sternum reopening (procedure undertaken) /// concept: Procedure on sternum - 4046868, # source: Vocal Cord Dysfunction /// concept: Vocal cord dysfunction - 4275136, # source: Diaphragmatic Paralysis /// concept: Paralysis of diaphragm - 253796, # source: Pneumothorax /// concept: Pneumothorax - 44783799, # source: Tracheostomy /// concept: Exteriorization of trachea - 44784217, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Cardiac arrhythmia - 315643, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Tachyarrhythmia - 4228448, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Bradyarrhythmia - 4068155, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Atrial arrhythmia - 4185572, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Ventricular arrhythmia - 46234437, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: ivabradine - 1309944, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: amiodarone - 1354860, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: flecainide - 4353741, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Cardioversion - 4117045, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Atrial overdrive pacing - 4049398, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Temporary cardiac pacemaker procedure - 4051940, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Permanent cardiac pacemaker procedure - 609312 # source: Listed for heart transplantation /// concept: Awaiting transplantation of heart - ), - - # 5.21 healthcare use - healthcareUse = c( - 37174269, # source: Diagnosis of acute infection having the potential for progression to sepsis1+2 /// concept: At increased risk of sepsis - 4032243, # source: Dialysis /// concept: Dialysis procedure - 197320, # source: acute kidney injury /// concept: Acute kidney injury - 4074689, # source: "Chest opening, chest drainage" /// concept: Open drainage of pleural cavity - 4084670, # source: Surgical admission (non-urgent) /// concept: Non-urgent surgical admission - 4070667, # source: Urinary catheter /// concept: Urinary catheter - 44790095, # source: Invasive ventilation /// concept: Invasive ventilation - 4052536, # source: ECMO /// concept: Extracorporeal membrane oxygenation - 4051330, # source: Dialysis /// concept: Continuous venovenous hemofiltration - 44790567, # source: Origin (external) /// concept: Patient transfer from hospital to hospital - 133327, # source: viremia /// concept: Viremia - 4097216, # source: Endotracheal tube /// concept: Endotracheal tube - 4085730, # source: Antibiotics /// concept: Antibiotic therapy - 4123946, # source: Surgical admission (urgent) /// concept: Admission to surgical department - 4208341, # source: organ transplant /// concept: Solid organ transplant - 4193843, # source: Oxygenation index /// concept: Oxygenation index measurement - 4235043, # source: Ventricular assist device (VAD) /// concept: Ventricular assist device - 443392, # source: Cancer /// concept: Malignant neoplastic disease - 4181511, # source: Antineoplastics /// concept: Administration of antineoplastic agent - 4294886, # source: Origin (internal) /// concept: "Patient transfer, in-hospital" - 4301351, # source: Surgery previous to prediction time point /// concept: Surgical procedure - 4140762, # source: Antivirals /// concept: Antiviral therapy - 4177205, # source: Peripheral IV cannulas /// concept: Cannulation - 4177224, # source: Non-invasive ventilation /// concept: Non-invasive ventilation - 45758028, # source: Arterial blood pressure catheter /// concept: Arterial blood pressure catheter - 44803020, # source: Reason for admission /// concept: Primary reason for admission - 4179206, # source: Central venous catheter /// concept: Central venous catheter - 132736, # source: bacteremia /// concept: Bacteremia - 44783799, # source: Tracheostomy /// concept: Exteriorization of trachea - 45768671, # source: asplenia /// concept: Asplenia - 4324124, # source: Peritoneal dialysis /// concept: Peritoneal dialysis - 435785, # source: meningitis /// concept: Meningitis - 201820, # source: Diagnosis of chronic condition /// concept: Diabetes mellitus - 42538045, # source: Nasogastric/orogastric tube /// concept: Nasogastric/orogastric tube stylet - 37206601, # source: ECMO type /// concept: Venoarterial extracorporeal membrane oxygenation - 37206603, # source: ECMO type /// concept: Venovenous extracorporeal membrane oxygenation - 4314777, # source: Immunosuppressors /// concept: Immunosuppressive therapy - 604243, # source: neutropenia /// concept: Acquired neutropenia - 444187, # source: injury with open wound /// concept: Open wound - 22281, # source: sickle cell disease /// concept: Sickle cell-hemoglobin SS disease - 435613, # source: cellulitis /// concept: Cellulitis - 4134120, # source: cerebral palsy /// concept: Cerebral palsy - 444202, # source: Abcess /// concept: Abscess - 312723, # source: Diagnosis of chronic condition /// concept: Congenital heart disease - 255573, # source: Diagnosis of chronic condition /// concept: Chronic obstructive lung disease - 255848, # source: pneumonia /// concept: Pneumonia - 433740, # source: immunodeficiency /// concept: Immunodeficiency disorder - 4080011, # source: Diagnosis of organ system dysfunction /// concept: Organ dysfunction syndrome - 434821, # source: Diagnosis of SIRS /// concept: Systemic inflammatory response syndrome - 81539, # source: mitochondrial disease /// concept: Mitochondrial cytopathy - 4103588, # source: tuberculosis /// concept: Acute tuberculosis - 443783, # source: Diagnosis of chronic condition /// concept: Chronic disease - 4140977, # source: Diagnosis of condition producing immunodeficiency /// concept: Secondary immune deficiency disorder - 201606, # source: Crohn's disease /// concept: Crohn's disease - 4243475, # source: hepatitis /// concept: Acute hepatitis - 4300243, # source: surgical site inflammation /// concept: Postoperative complication - 439125, # source: Down's syndrome /// concept: Complete trisomy 21 syndrome - 321042, # source: cardiac arrest /// concept: Cardiac arrest - 4331815, # source: UTI /// concept: Acute urinary tract infection - 195212, # source: Cushing's disease /// concept: Hypercortisolism - 196152, # source: peritonitis /// concept: Peritonitis - 314383, # source: miocarditis /// concept: Myocarditis - 195314, # source: nephrotic syndrome /// concept: Nephrotic syndrome - 441589, # source: endocarditis /// concept: Endocarditis - 4271450, # source: Diagnosis of acute infection having the potential for progression to sepsis1+2 /// concept: Acute infectious disease - 81893, # source: ulcerative colitis /// concept: Ulcerative colitis - 80809, # source: rheumatoid arthritis /// concept: Rheumatoid arthritis - 4322814, # source: Meningo-encephalitis /// concept: Meningoencephalitis - 36716945, # source: renal insufficiency /// concept: Renal insufficiency - 440448, # source: appendicitis /// concept: Appendicitis - 433968, # source: candidiasis /// concept: Candidiasis - 44807226, # source: necrotizing enterocolitis /// concept: Necrotising enterocolitis - 132797, # source: Previous diagnosis of sepsis measure /// concept: Sepsis - 21602722, # source: Corticoids /// concept: CORTICOSTEROIDS FOR SYSTEMIC USE - 42869590, # source: FiO2 /// concept: Oxygen/Gas total [Pure volume fraction] Inhaled gas - 42527086, # source: Mean Airway Pressure (MAP) /// concept: Mean airway pressure - 1340204 # source: Previous diagnosis of sepsis measure /// concept: History of event - ), - - # 5.22 vital signs UC2 - vitalSignsUC2 = c( - 4096101, # source: SpO2 /// concept: Measurement of oxygen saturation at periphery - 3025315, # source: Weight /// concept: Body weight - 3020891, # source: Body temperature /// concept: Body temperature - 3012888, # source: DBP (Diastolic blood pressure) /// concept: Diastolic blood pressure - 3004249, # source: SBP (Systolic Blood Pressure) /// concept: Systolic blood pressure - 3014315, # source: Urine output /// concept: Urine output - 3024171, # source: RR /// concept: Respiratory rate - 3027018 # source: HR /// concept: Heart rate - ), - - # 5.23 physical examination signs - physicalExaminationSigns = c( - 4224504, # source: Central pulse /// concept: Pulse - 4314539, # source: Peripheral pulse (pressure) /// concept: Arterial pulse pressure - 21490963, # source: Pupillary reactivity (right) /// concept: Right pupil Pupillary response - 3032652, # source: GCS /// concept: Glasgow coma scale - 3045676, # source: Capillary refill time /// concept: Capillary refill [Time] - 21491763, # source: Pupillary reactivity (left) /// concept: Left pupil Pupillary response - 3021415, # source: Pupillary size (left) /// concept: Left pupil Diameter Auto - 3027214 # source: Pupillary size (right) /// concept: Right pupil Diameter Auto - ), - - # 5.24 lab tests UC2 - labTestsUC2 = c( - 37393605, # source: D-dimer /// concept: D-dimer level - 4017361, # source: Blood urea nitrogen /// concept: Blood urea nitrogen measurement - 4036356, # source: Bacterial pathogen detection /// concept: Detection of bacteria - 44789220, # source: Ionized calcium /// concept: Ionised calcium measurement - 4094436, # source: Fibrinogen /// concept: Fibrinogen measurement - 4118986, # source: Direct bilirubin /// concept: Bilirubin measurement - 4196268, # source: PCR panel /// concept: Polymerase chain reaction observation - 440029, # source: Viral pathogen detection /// concept: Viral disease - 4212899, # source: Leukocytes /// concept: Total white blood count - 4175016, # source: Thromboplastin time /// concept: Partial thromboplastin time, activated - 42536081, # source: MR-proADM /// concept: Adrenal medulla hormone - 4299649, # source: Quantification of colonies in culture /// concept: Quantitative microbial culture and measurement - 44806682, # source: Antibiotic resistance /// concept: Infection resistant to multiple antibiotics - 432545, # source: Name of bacterial pathogen detected /// concept: Bacterial infectious disease - 3013826, # source: Glucose /// concept: Glucose [Moles/volume] in Serum or Plasma - 3046279, # source: PCT /// concept: Procalcitonin [Mass/volume] in Serum or Plasma - 3033291 # source: Interleukin-6 /// concept: Interleukin 6 [Mass/volume] in Body fluid - ), - - # 5.25 arterial blood gas - arterialBloodGas = c( - 3003396, # source: Base excess /// concept: Base excess in Arterial blood by calculation - 3019977, # source: pH /// concept: pH of Arterial blood - 3008152, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Arterial blood - 3027946, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Arterial blood - 3027801 # source: PaO2 /// concept: Oxygen [Partial pressure] in Arterial blood - ), - - # 5.26 venous blood gas - venousBloodGas = c( - 3009343, # source: pH /// concept: pH of Capillary blood - 3027273, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Venous blood - 3003129, # source: Base excess /// concept: Base excess in Capillary blood by calculation - 3002032, # source: Base excess /// concept: Base excess in Venous blood by calculation - 3015235, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Capillary blood - 3023024, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Capillary blood - 3021447, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Venous blood - 3028626, # source: PaO2 /// concept: Oxygen [Partial pressure] in Capillary blood - 3024354, # source: PaO2 /// concept: Oxygen [Partial pressure] in Venous blood - 3012544 # source: pH /// concept: pH of Venous blood - ), - - # 5.28 Patient characteristics - UC3PateintCharacteristics = c( - 434007, # source: hemophilia A diagnosis /// concept: hereditary factor VIII deficiency disease - 4094223, # source: hemophilia A subtype/ severity /// concept: mild hereditary factor VIII deficiency disease - 4140661, # source: hemophilia A subtype/ severity /// concept: moderate hereditary factor VIII deficiency disease - 4056830, # source: hemophilia A subtype/ severity /// concept: severe hereditary factor VIII deficiency disease - 3003694, # source: blood group /// concept: ABO and Rh group [Type] in Blood - 37393608, # source: factor VIII inhibitor status /// concept: factor VIII inhibitor activity - 4126681, # source: factor VIII inhibitor status /// concept: detected - 9190 # source: factor VIII inhibitor status /// concept: not detected - ), - - # 5.29 Lab Measurements - UC3LabMeasurements = c( - 3024942, # source: factor VIII inhibitor titer /// concept: coagulation factor VIII inhibitor [Units/volume] in platelet poor plasma by coagulation assay - 3022520, # source: factor VIII activity measurement /// concept: coagulation factor VIII activated [Units/volume] in platelet poor plasma by coagulation assay - 3011832, # source: factor VIII activity measurement /// concept: coagulation factor VIII activity [Units/volume] in platelet poor plasma by Chromogenic assay - 43534000, # source: Von Willebrand factor activity measurement /// concept: von Willebrand factor (vWf) activity [Units/volume] in platelet poor plasma by Immunoassay - 3002124, # source: Von Willebrand factor antigen measurement /// concept: von Willebrand factor (vWf) Ag [Units/volume] in platelet poor plasma by Immunoassay - 3023693, # source: Von Willebrand factor propeptide measurement /// concept: von Willebrand factor (vWf) multimers in platelet poor plasma by Immunoblot - 3042349, # source: Von Willebrand factor propeptide measurement /// concept: von Willebrand factor (vWf) cleaving protease inhibitor [Units/volume] in platelet poor plasma - 4175016, # source: activated partial thromboplastin time (APTT) /// concept: partial thromboplastin time, activated - 3034426, # source: Prothrombin time (PT) /// concept: prothrombin time (PT) - 4267147, # source: platelet count /// concept: platelet count - 3009542, # source: hematocrit /// concept: Hematocrit [Volume Fraction] of Blood - 3016407, # source: fibrinogen /// concept: fibrinogen [mass/volume] in platelet poor plasma by coagulation assay - 3006923, # source: ALT /// concept: alanine aminotransferase [enzymatic activity/volume] in serum or plasma - 3013721 # source: AST /// concept: aspartate aminotransferase [enzymatic activity/volume] in serum or plasma - ), - - # 5.30 Treatments - UC3Treatments = c( - 1352213, # source: factor VIII /// concept: factor VIII (umbrella term) - 793042, # source: factor VIII /// concept: emicizumab (umbrella term) - 40492862, # source: factor VIII dose is continuous infusion or bolus dose /// concept: mode of drug administration - 4129275, # source: factor VIII dose is continuous infusion or bolus dose /// concept: continuous infusion - 4265597, # source: factor VIII dose is continuous infusion or bolus dose /// concept: by bolus infusions - 1517070 # source: desmopressin /// concept: desmopressin - ), - - # 5.31 Surgery-specific parameters - UC3Surgery = c( - 4172515, # source: Medical/ surgical procedure /// concept: Therapeutic procedure - 967823, # source: NaCl administration during surgery /// concept: sodium chloride - 4028665, # source: plasma administration during surgery /// concept: plasma transfusion - 4160439, # source: datetime start anesthesia /// concept: Administration of anesthesia - 4308716, # source: blood loss during surgery /// concept: intraoperative hemorrhage - 37017589 # source: blood transfusion during surgery /// concept: Bleeding during surgery requiring transfusion - ) - ) -) - -## Extend with descendants -conceptSets$conceptSets <- list() -for (cs in names(conceptSets$concepts)) { - conceptSets$conceptSets[[cs]] <- cs(descendants(conceptSets$concepts[[cs]]), name = cs) -} - -cat("\nSourced concept sets\n") +#' @name conceptSets +#' @title Concept set definitions by use case +#' +#' @description +#' This script defines and expands various concept sets related to medical data. It utilizes the Capr library to fetch all descendant concepts +#' for each defined concept set, ensuring comprehensive coverage of related medical concepts. +#' +#' @details The script initializes by defining multiple concept sets within a list structure. Each concept set contains unique identifiers for medical concepts, +#' which are expanded to include all descendant concepts using the Capr library's functionality. The expanded concept sets are then stored in a new list within +#' the `conceptSets` object. Finally, the script outputs a confirmation message indicating successful sourcing and expansion of concept sets. +#' +#' @note This script requires the Capr library to be installed and loaded for proper execution. +#' @note Duplicated concepts within the same UC have been removed; keeping the first occurrence. +#' @export + +library(Capr) + +## Define list of concepts to use for concept sets +conceptSets <- list( + concepts = list( + ## UC1 + uc1 = c( + # 5.3 VIS score medications + 1337720, # source: dobutamine /// concept: dobutamine + 1337860, # source: dopamine /// concept: dopamine + 1343916, # source: epinephrine /// concept: epinephrine + 1368671, # source: milrinone /// concept: milrinone + 1321341, # source: norepinephrin /// concept: norepinephrine + 1507835, # source: vasopressin /// concept: vasopressin (USP) + + # 5.4 vasopressors and inotropes + 1143374, # source: Ephedrine /// concept: ephedrine + 1183554, # source: Isoproterenol /// concept: isoproterenol + 40173184, # source: Levosimendan /// concept: levosimendan + 1135766, # source: Phenylephrine /// concept: phenylephrine + 19119253, # source: Terlipressin /// concept: terlipressin + + # 5.9 cardiac surgery + 4049734, # source: Application of band to pulmonary artery /// concept: Banding of pulmonary artery + 4019929, # source: Unspecified repair of tetralogy of fallot /// concept: Repair of tetralogy of Fallot + 4019932, # source: Repositioning of transposed great arteries /// concept: Arterial switch operation + 4017751, # source: Unspecified correction of total anomalous pulmonary venous connection /// concept: Repair of total anomalous pulmonary venous connection + 4020376, # source: Primary repair of defect of interatrial septum NEC/repair of defect of interatrial septum using pericardial patch /// concept: Closure of defect of interatrial septum using pericardial patch + 4020506, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Creation of valved conduit between right ventricle of heart and pulmonary artery + 4019950, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Revision of valved cardiac conduit + 4020508, # source: Correction of persistent sinus venosus /// concept: Repair of sinus venosus + 4018441, # source: Correction of partial anomalous pulmonary venous drainage /// concept: Repair of partial anomalous pulmonary venous connection + 4020520, # source: Open aortic valvotomy /// concept: Open aortic valvotomy + 4018747, # source: Repair of subaortic stenosis /// concept: Operations on the left ventricular outflow tract + 4019233, # source: Unspecified creation of shunt to pulmonary artery from subclavian artery using interposition tube pr /// concept: Creation of shunt from subclavian artery to pulmonary artery using interposition tube prosthesis + 4019237, # source: Creation of anastomosis to pulmonary artery from vena cava /// concept: Anastomosis of vena cava to pulmonary artery + 4018926, # source: Other specified : repair of pulmonary artery /// concept: Repair of pulmonary artery + 4021725, # source: Removal of band from pulmonary artery /// concept: Removal of band from pulmonary artery + 4019026, # source: Other specified: plastic repair of aorta /// concept: Plastic repair of aorta + 4020812, # source: Plastic repair of aorta and end to end anastomosis of aorta /// concept: Plastic repair of aorta and end-to-end anastomosis of aorta + 4019028, # source: Release of vascular ring of aorta /// concept: Release of vascular ring of aorta + 44790092, # source: Relief of left ventricular outflow tract obstruction /// concept: Relief of left ventricular outflow tract obstruction + 44789857, # source: Total cavopulmonary connection with extracardiac inferior caval vein topulmonary artery conduit /// concept: Total cavopulmonary connection with extracardiac inferior caval vein to pulmonary artery conduit + 4336751, # source: Unspecified other transplantation of heart/allotransplantation of heart NEC /// concept: Allotransplant of heart + 4049979, # source: Repair of double outlet right ventricle /// concept: Repair of double outlet right ventricle + 4050114, # source: Closure of patent ductus arteriosus NEC /// concept: Closure of ductus arteriosus with clip + 4052536, # source: Extracorporeal membrane oxygenation /// concept: Extracorporeal membrane oxygenation + 44790415, # source: Aortic root pulmonary valve autograft with right vent to pulmonary artery valved conduit/ aortic root pulmonary valve autograft with right vent to pulmonary artery aortoventriculoplasty /// concept: Aortic root replacement using pulmonary valve autograft with right ventricle to pulmonary artery valved conduit and aortoventriculoplasty + 4144921, # source: Implantation of cardiac pacemaker system NEC /// concept: Implantation of cardiac pacemaker + 4137127, # source: Unspecified other transplantation of heart/allotransplantation of heart NEC /// concept: Transplantation of heart + 44793133, # source: Aortopulmonary reconstruction with systemic to pulmonary arterial shunt /// concept: Aortopulmonary reconstruction with systemic to pulmonary arterial shunt + 4293619, # source: Tricuspid valve repair NEC /// concept: Repair of tricuspid valve + 4296790, # source: Transposition of coronary artery NEC /// concept: Transposition of coronary artery + 4139214, # source: Open implantation of ventricular assist device /// concept: Open implantation of cardiac ventricular assist device + 4178479, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Replacement of valved cardiac conduit + 40486525, # source: Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum /// concept: Primary repair of defect of atrioventricular septum + 4187380, # source: Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum /// concept: Repair of ostium primum defect + 4199899, # source: Unspecified repair of defect of interventricular septum /// concept: Closure of ventricular septal defect + 4203153, # source: Replacement of mitral valve NEC /// concept: Replacement of mitral valve + 4217615, # source: Plication of diaphragm /// concept: Plication of diaphragm + 4308136, # source: Repair of tetralogy of fallot using transannular patch /// concept: Complete repair of tetralogy of Fallot with transannular patch + 4312194, # source: Aortic valve repair NEC /// concept: Repair of heart valve + 4339184, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Replacement of pulmonary valve + 4232476, # source: Repair of defect of interventricular septum using prosthetic patch/unspecified repair of defect of interventricular septum /// concept: Repair of ventricular septal defect with prosthesis + + # 5.10 cardiac radiology + 4019824, # source: US transoesophageal echocardiogram (toe) /// concept: Transesophageal echocardiography + 4032404, # source: IR bronchoscopy /// concept: Bronchoscopy + 4065416, # source: Exercise test (non-CPET) /// concept: Exercise tolerance test + 4345925, # source: FL video swallow /// concept: Videofluoroscopy swallow + 4083106, # source: US cranial contents /// concept: US scan of head + 4083108, # source: US neck /// concept: US scan of neck + 4082979, # source: MRI head /// concept: MRI of head + 4093436, # source: US thorax and pleural cavity /// concept: Ultrasonography of thorax + 4125350, # source: CT head /// concept: CT of head + 4125530, # source: US urinary tract /// concept: US urinary tract + 44802640, # source: MRI cardiac complex congenital /// concept: MRI study for cardiac congenital anomaly + 4163872, # source: XR chest /// concept: Plain chest X-ray + 4167029, # source: US doppler groin both /// concept: Ultrasonography of inguinal region + 4167052, # source: US doppler renal both /// concept: Doppler ultrasonography of kidney + 4305221, # source: US abdomen and pelvis/ US abdomen /// concept: US scan of abdomen and pelvis + 4303522, # source: US diaphragmatic region /// concept: US scan of diaphragm + 4306317, # source: CT heart with contrast/ CT cardiac angiogram coronary/ CT cardiac gated with contrast /// concept: CT angiography of coronary artery with contrast + 4169275, # source: XR chest and abdomen /// concept: X-ray of chest and abdomen + 4322380, # source: IR PICC line insertion /// concept: Insertion of peripherally inserted central catheter + 4140473, # source: 24h holter monitor /// concept: Holter extended electrocardiographic recording + 4329508, # source: US thorax and pleural cavity /// concept: Ultrasonography of pleural cavity + 4335392, # source: US doppler lower limb veins both /// concept: Doppler ultrasonography of vein of lower limb + 4203365, # source: Epicardial echocardiogram /// concept: Epicardial echocardiography + 4335825, # source: US transthoracic echocardiogram/ us transthoracic echocardiogram (pre- admission)/ US transthoracic echocardiogram (sedated) /// concept: Transthoracic echocardiography + 40482732, # source: IR tunnelled central venous line insertion /// concept: Insertion of tunneled venous catheter + 40489841, # source: US doppler jugular vein both /// concept: Doppler ultrasonography of jugular vein + 40492338, # source: Cardiopulmonary exercise test (CPET) /// concept: Cardiopulmonary exercise test + 40488431, # source: Pacemaker/ICD interrogation (in clinic)/ pacemaker/ICD interrogation (other) /// concept: Interrogation of cardiac pacemaker + 42873079, # source: IR tunnelled central venous line removal /// concept: Removal of tunneled central venous catheter + 4261497, # source: US abdomen and pelvis/ US abdomen /// concept: Ultrasonography of abdomen + 4205144, # source: EEG routine portable /// concept: Portable electroencephalogram + 4181917, # source: EEG routine /// concept: Electroencephalogram + 4264477, # source: XR abdomen /// concept: Diagnostic radiography of abdomen + 45764527, # source: 24h holter monitor /// concept: Electrocardiographic Holter analyzer + 45765560, # source: Event monitor /// concept: Cardiovascular monitor + 4327032, # source: CT thorax with contrast /// concept: CT of thorax with contrast + 35622931, # source: US doppler /// concept: Doppler ultrasound + 44813863, # source: US vocal cord /// concept: Ultrasonography of vocal cord + 4312208, # source: IR bronchogram /// concept: Contrast bronchogram + 4235141, # source: Pacemaker/ICD device check - remote patient initiated /// concept: Check artificial pacemaker + + # 5.11 cardiac length of stay + 4123933, # source: ICU admission (start datetime and end datetime) /// concept: Admission to pediatric intensive care unit + 8715, # source: Total hospital admission (start datetime and end datetime) /// concept: Hospital admission + 4161811, # source: HDU admission (start datetime and end datetime) /// concept: Admission to high dependency unit + 36675203, # source: Cardiology ward admission (start datetime and end datetime) /// concept: Admission to pediatric cardiology department + + # 5.12 additional variables + 4095105, # source: Base Excess /// concept: Base deficit measurement + 4234469, # source: Diagnoses /// concept: Diagnosis + 40493026, # source: Mechanical ventilation /// concept: Mechanical ventilator + 44803020, # source: Reason for ICU admission: (Main reason for ICU admission is not recovery from surgery or a procedure, Recovery from a bypass cardiac procedure, recovery from a non-bypass cardiac procedure, recovery from non-cardiac procedure) /// concept: Primary reason for admission + 4209008, # source: Pupillary reaction /// concept: Pupillary function + 260134, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Croup + 432571, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Malignant lymphoma + 4029498, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Seizure disorder + 317009, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Asthma + 201957, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Necrotizing enterocolitis in fetus OR newborn + 43530727, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Spontaneous cerebral hemorrhage + 29783, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Severe combined immunodeficiency disease + 321042, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Cardiac arrest + 4165112, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Bronchiolitis + 443727, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Diabetic ketoacidosis + 314383, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Myocarditis + 4245975, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Hepatic failure + 440207, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Hypoplastic left heart syndrome + 42537745, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Bone marrow transplant present + 442588, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Obstructive sleep apnea syndrome + 4213310, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Degenerative disease of the central nervous system + 321319, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Cardiomyopathy + 317510, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Leukemia + 5083, # source: Outpatient appointment type (telephone/ clinic visit etc.) /// concept: Telehealth + 42869590, # source: FiO2 /// concept: Oxygen/Gas total [Pure volume fraction] Inhaled gas + 3027946, # source: PaCO2 /// concept: Carbon dioxide [Partial pressure] in Arterial blood + 3004249, # source: Systolic blood pressure /// concept: Systolic blood pressure + + # 5.13 laboratory tests + 4298431, # source: Immature WBC Count /// concept: White blood cell count + 3007670, # source: Neutrophil Count /// concept: Neutrophil Ab [Units/volume] in Serum + 40762351, # source: Hemoglobin /// concept: Hemoglobin [Moles/volume] in Blood + 37393863, # source: Platelet Count /// concept: Platelet count + 3009542, # source: Hematocrit /// concept: Hematocrit [Volume Fraction] of Blood + 3034426, # source: INR Prothrombin Time /// concept: Prothrombin time (PT) + 3047181, # source: Lactate /// concept: Lactate [Moles/volume] in Blood + 3051825, # source: Creatinine /// concept: Creatinine [Mass/volume] in Blood + 3024561, # source: Albumin /// concept: Albumin [Mass/volume] in Serum or Plasma + 3024641, # source: Blood urea nitrogen /// concept: Urea nitrogen [Moles/volume] in Serum or Plasma + 3013826, # source: Glucose /// concept: Glucose [Moles/volume] in Serum or Plasma + 3006140, # source: Bilirubin /// concept: Bilirubin.total [Moles/volume] in Serum or Plasma + 3019550, # source: Sodium /// concept: Sodium [Moles/volume] in Serum or Plasma + 3005456, # source: Potassium /// concept: Potassium [Moles/volume] in Blood + 3033836, # source: Magnesium /// concept: Magnesium [Moles/volume] in Blood + 3018572, # source: Chloride /// concept: Chloride [Moles/volume] in Blood + 3015377, # source: Calcium /// concept: Calcium [Moles/volume] in Serum or Plasma + 3003458, # source: Phosphate /// concept: Phosphate [Moles/volume] in Serum or Plasma + 3020460, # source: CRP /// concept: C reactive protein [Mass/volume] in Serum or Plasma + 3006923, # source: ALT /// concept: Alanine aminotransferase [Enzymatic activity/volume] in Serum or Plasma + 3013721, # source: AST /// concept: Aspartate aminotransferase [Enzymatic activity/volume] in Serum or Plasma + 37392672, # source: pH (venous) /// concept: Blood venous pH + 37399161, # source: pH (arterial) /// concept: Blood arterial pH + 3021447, # source: pCO2 (venous) /// concept: Carbon dioxide [Partial pressure] in Venous blood + 3024354, # source: pO2 (venous) /// concept: Oxygen [Partial pressure] in Venous blood + 3027801, # source: pO2 (arterial) /// concept: Oxygen [Partial pressure] in Arterial blood + 3027273, # source: Bicarbonate (venous) /// concept: Bicarbonate [Moles/volume] in Venous blood + 3008152, # source: Bicarbonate (arterial) /// concept: Bicarbonate [Moles/volume] in Arterial blood + + # 5.14 cardiac complications + 4051330, # source: LCOS - renal support (CVVH/ PD) /// concept: Continuous venovenous hemofiltration + 4295705, # source: Surgical injury - Reexplore for bleeding /// concept: Exploratory incision + 377091, # source: Neurological injury - seizure /// concept: Seizure + 439847, # source: Neurological injury - intracranial haemmhorage/ intracranial bleeding /// concept: Intracranial hemorrhage + 4308537, # source: Surgical injury - Blood Loss /// concept: Injury to blood vessel during surgery + 443454, # source: Neurological injury - infarction /// concept: Cerebral infarction + 4185565, # source: Low cardiac output state (LCOS) - ECMO /// concept: Low cardiac output syndrome + 42537043, # source: CVL infections /// concept: CLABSI - central line associated bloodstream infection + 4306136, # source: Surgical injury - Chylothorax /// concept: Chylothorax + + # 5.15 vital signs + 3027018, # source: Age-dependent HR /// concept: Heart rate + 3024171, # source: Age-dependent RR /// concept: Respiratory rate + 3012888, # source: DBP (Dyastolic Blood Pressure) /// concept: Diastolic blood pressure + 4020553, # source: SpO2 /// concept: Oxygen saturation measurement + + # 5.16 Clinical variables suggested by HSJD + 3025315, # source: Weight /// concept: Body weight + 3036277, # source: Height /// concept: Body height + 4201235, # source: Body Surface Area (BSA) - Combination of weight and height /// concept: body surface area + 4275564, # source: Cardiac surgeries (Interventions) /// concept: Operation on heart + + # 5.17 surgery-related variables suggested by HSJD + 40490494, # source: STAT/EACTS score of surgery /// concept: Society of Thoracic Surgeons risk calculator + 4301351, # source: Surgery start datetime, end datetime /// concept: Surgical procedure + 4336464, # source: Cardiac bypass start datetime, end datetime /// concept: Coronary artery bypass graft + 4201547, # source: Cross-clamping start datetime, end datetime /// concept: Placement of arterial cross clamp + 37152781, # source: Deep hypothermic circulatory arrest start datetime, end datetime /// concept: Hypothermic circulatory arrest + 4272324, # source: Antegrade Cerebral Perfusion start datetime, end datetime /// concept: Cardiopulmonary bypass operation + 4150627, # source: Extubation event /// concept: Removal of endotracheal tube + + # 5.18 hospitalisation-related variables suggested by HSJD + 42539650, # source: Vasoactive infusion start datetime, end datetime /// concept: Administration of intravenous vasoactive drug + 4179206, # source: Postop central venous catheter in/start datetime, out/end datetime /// concept: Central venous catheter + 37158404, # source: Invasive Mechanical Ventilation LOS /// concept: Invasive mechanical ventilation + 4177224, # source: Non-Invasive Mechanical Ventilation LOS /// concept: Non-invasive ventilation + + # 5.19 complications-related variables suggested by HSJD + 4202832, # source: intubation /// concept: Intubation + 4044892, # source: Sternum reopening (procedure undertaken) /// concept: Procedure on sternum + 4046868, # source: Vocal Cord Dysfunction /// concept: Vocal cord dysfunction + 4275136, # source: Diaphragmatic Paralysis /// concept: Paralysis of diaphragm + 253796, # source: Pneumothorax /// concept: Pneumothorax + 44783799, # source: Tracheostomy /// concept: Exteriorization of trachea + 44784217, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Cardiac arrhythmia + 315643, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Tachyarrhythmia + 4228448, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Bradyarrhythmia + 4068155, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Atrial arrhythmia + 4185572, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Ventricular arrhythmia + 46234437, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: ivabradine + 1309944, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: amiodarone + 1354860, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: flecainide + 4353741, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Cardioversion + 4117045, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Atrial overdrive pacing + 4049398, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Temporary cardiac pacemaker procedure + 4051940, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Permanent cardiac pacemaker procedure + 609312 # source: Listed for heart transplantation /// concept: Awaiting transplantation of heart + ), + + ## UC2 + uc2 = c( + # 5.4 vasopressors and inotropes + 1337720, # source: Dobutamine /// concept: dobutamine + 1337860, # source: Dopamine /// concept: dopamine + 1143374, # source: Ephedrine /// concept: ephedrine + 1343916, # source: Epinephrine /// concept: epinephrine + 1183554, # source: Isoproterenol /// concept: isoproterenol + 40173184, # source: Levosimendan /// concept: levosimendan + 1368671, # source: Milrinone /// concept: milrinone + 1321341, # source: Norepinephrine /// concept: norepinephrine + 1135766, # source: Phenylephrine /// concept: phenylephrine + 19119253, # source: Terlipressin /// concept: terlipressin + 1507835, # source: Vasopressin /// concept: vasopressin (USP) + + # 5.5 immunosuppressants + 4273629, # source: Chemotherapy /// concept: Chemotherapy + 1518254, # source: Dexamethasone /// concept: dexamethasone + 975125, # source: Hydrocortisone /// concept: hydrocortisone + 1506270, # source: Methylprednisolone /// concept: methylprednisolone + 21603754, # source: Monoclonal Antibodies /// concept: Monoclonal antibodies + 1550557, # source: Prednisolone /// concept: prednisolone + + # 5.6 antibiotic medications + 1713332, # source: Amoxicillin /// concept: amoxicillin + 1759842, # source: Amoxicillin clavulanate /// concept: clavulanate + 1717327, # source: Ampicillin /// concept: ampicillin + 1734104, # source: Azithromycin /// concept: azithromycin + 1836430, # source: Trimethoprim-Sulfamethoxazole /// concept: sulfamethoxazole + 1705674, # source: Trimethoprim-Sulfamethoxazole /// concept: trimethoprim + 1836948, # source: Tetracycline /// concept: tetracycline + 902722, # source: Tobramycin /// concept: tobramycin + 1707687, # source: Vancomycin /// concept: vancomycin + 19010400, # source: Fusidic acid /// concept: fusidate + 45892419, # source: Gentamicin /// concept: gentamicin + 45892599, # source: Ceftolozane-Tazovactam /// concept: ceftolozane + 46221507, # source: Ceftazidime-Avibactam /// concept: avibactam + 1736887, # source: Linezolid /// concept: linezolid + 1748975, # source: Cefepime /// concept: cefepime + 1750500, # source: Clarithromycin /// concept: clarithromycin + 1769535, # source: Cefadroxil /// concept: cefadroxil + 1771162, # source: Cefazolin /// concept: cefazolin + 1774470, # source: Cefotaxime /// concept: cefotaxime + 1776684, # source: Ceftazidime /// concept: ceftazidime + 1778162, # source: Cefuroxime /// concept: cefuroxime + 1786617, # source: Daptomycin /// concept: daptomycin + 1797513, # source: Ciprofloxacin /// concept: ciprofloxacin + 997881, # source: Clindamycin /// concept: clindamycin + 901845, # source: Colistin /// concept: colistin + 1709170, # source: Meropenem /// concept: meropenem + 1717963, # source: Ertapenem /// concept: ertapenem + 1741122, # source: Piperacillin-Tazobactam /// concept: tazobactam + 1746114, # source: Piperacillin-Tazobactam /// concept: piperacillin + 1746940, # source: Erythromycin /// concept: erythromycin + 951511, # source: Mupirocin /// concept: mupirocin + 956653, # source: Fosfomycin /// concept: fosfomycin + 1778262, # source: Imipenem /// concept: imipenem + 19078399, # source: Teicoplanin /// concept: teicoplanin + 1790868, # source: Amikacin /// concept: amikacin + 920293, # source: Nitrofurantoin /// concept: nitrofurantoin + 1721543, # source: Norfloxacin /// concept: norfloxacin + 1724703, # source: Oxacillin /// concept: oxacillin + 1728416, # source: Penicillin /// concept: penicillin G + 1742253, # source: Levofloxacin /// concept: levofloxacin + 1763204, # source: Rifampicin /// concept: rifampin + + # 5.7 antifungal medications + 1714277, # source: Voriconazole /// concept: voriconazole + 35606695, # source: Isovuconazole /// concept: isavuconazole + 19018013, # source: Micafungin /// concept: micafungin + 19026450, # source: Andiulafungin /// concept: anidulafungin + 1754994, # source: Fluconazole /// concept: fluconazole + + # 5.8 antibiotic resistance + 4019195, # source: MRSA /// concept: Methicillin resistant Staphylococcus aureus + 4257547, # source: ESBL /// concept: Extended spectrum beta-lactamase producing bacteria + 37017134, # source: Drug-resistant /// concept: Multidrug-resistant bacteria + + # 5.21 healthcare use + 37174269, # source: Diagnosis of acute infection having the potential for progression to sepsis1+2 /// concept: At increased risk of sepsis + 4032243, # source: Dialysis /// concept: Dialysis procedure + 197320, # source: acute kidney injury /// concept: Acute kidney injury + 4074689, # source: "Chest opening, chest drainage" /// concept: Open drainage of pleural cavity + 4084670, # source: Surgical admission (non-urgent) /// concept: Non-urgent surgical admission + 4070667, # source: Urinary catheter /// concept: Urinary catheter + 44790095, # source: Invasive ventilation /// concept: Invasive ventilation + 4052536, # source: ECMO /// concept: Extracorporeal membrane oxygenation + 4051330, # source: Dialysis /// concept: Continuous venovenous hemofiltration + 44790567, # source: Origin (external) /// concept: Patient transfer from hospital to hospital + 133327, # source: viremia /// concept: Viremia + 4097216, # source: Endotracheal tube /// concept: Endotracheal tube + 4085730, # source: Antibiotics /// concept: Antibiotic therapy + 4123946, # source: Surgical admission (urgent) /// concept: Admission to surgical department + 4208341, # source: organ transplant /// concept: Solid organ transplant + 4193843, # source: Oxygenation index /// concept: Oxygenation index measurement + 4235043, # source: Ventricular assist device (VAD) /// concept: Ventricular assist device + 443392, # source: Cancer /// concept: Malignant neoplastic disease + 4181511, # source: Antineoplastics /// concept: Administration of antineoplastic agent + 4294886, # source: Origin (internal) /// concept: "Patient transfer, in-hospital" + 4301351, # source: Surgery previous to prediction time point /// concept: Surgical procedure + 4140762, # source: Antivirals /// concept: Antiviral therapy + 4177205, # source: Peripheral IV cannulas /// concept: Cannulation + 4177224, # source: Non-invasive ventilation /// concept: Non-invasive ventilation + 45758028, # source: Arterial blood pressure catheter /// concept: Arterial blood pressure catheter + 44803020, # source: Reason for admission /// concept: Primary reason for admission + 4179206, # source: Central venous catheter /// concept: Central venous catheter + 132736, # source: bacteremia /// concept: Bacteremia + 44783799, # source: Tracheostomy /// concept: Exteriorization of trachea + 45768671, # source: asplenia /// concept: Asplenia + 4324124, # source: Peritoneal dialysis /// concept: Peritoneal dialysis + 435785, # source: meningitis /// concept: Meningitis + 201820, # source: Diagnosis of chronic condition /// concept: Diabetes mellitus + 42538045, # source: Nasogastric/orogastric tube /// concept: Nasogastric/orogastric tube stylet + 37206601, # source: ECMO type /// concept: Venoarterial extracorporeal membrane oxygenation + 37206603, # source: ECMO type /// concept: Venovenous extracorporeal membrane oxygenation + 4314777, # source: Immunosuppressors /// concept: Immunosuppressive therapy + 604243, # source: neutropenia /// concept: Acquired neutropenia + 444187, # source: injury with open wound /// concept: Open wound + 22281, # source: sickle cell disease /// concept: Sickle cell-hemoglobin SS disease + 435613, # source: cellulitis /// concept: Cellulitis + 4134120, # source: cerebral palsy /// concept: Cerebral palsy + 444202, # source: Abcess /// concept: Abscess + 312723, # source: Diagnosis of chronic condition /// concept: Congenital heart disease + 255573, # source: Diagnosis of chronic condition /// concept: Chronic obstructive lung disease + 255848, # source: pneumonia /// concept: Pneumonia + 433740, # source: immunodeficiency /// concept: Immunodeficiency disorder + 4080011, # source: Diagnosis of organ system dysfunction /// concept: Organ dysfunction syndrome + 434821, # source: Diagnosis of SIRS /// concept: Systemic inflammatory response syndrome + 81539, # source: mitochondrial disease /// concept: Mitochondrial cytopathy + 4103588, # source: tuberculosis /// concept: Acute tuberculosis + 443783, # source: Diagnosis of chronic condition /// concept: Chronic disease + 4140977, # source: Diagnosis of condition producing immunodeficiency /// concept: Secondary immune deficiency disorder + 201606, # source: Crohn's disease /// concept: Crohn's disease + 4243475, # source: hepatitis /// concept: Acute hepatitis + 4300243, # source: surgical site inflammation /// concept: Postoperative complication + 439125, # source: Down's syndrome /// concept: Complete trisomy 21 syndrome + 321042, # source: cardiac arrest /// concept: Cardiac arrest + 4331815, # source: UTI /// concept: Acute urinary tract infection + 195212, # source: Cushing's disease /// concept: Hypercortisolism + 196152, # source: peritonitis /// concept: Peritonitis + 314383, # source: miocarditis /// concept: Myocarditis + 195314, # source: nephrotic syndrome /// concept: Nephrotic syndrome + 441589, # source: endocarditis /// concept: Endocarditis + 4271450, # source: Diagnosis of acute infection having the potential for progression to sepsis1+2 /// concept: Acute infectious disease + 81893, # source: ulcerative colitis /// concept: Ulcerative colitis + 80809, # source: rheumatoid arthritis /// concept: Rheumatoid arthritis + 4322814, # source: Meningo-encephalitis /// concept: Meningoencephalitis + 36716945, # source: renal insufficiency /// concept: Renal insufficiency + 440448, # source: appendicitis /// concept: Appendicitis + 433968, # source: candidiasis /// concept: Candidiasis + 44807226, # source: necrotizing enterocolitis /// concept: Necrotising enterocolitis + 132797, # source: Previous diagnosis of sepsis measure /// concept: Sepsis + 21602722, # source: Corticoids /// concept: CORTICOSTEROIDS FOR SYSTEMIC USE + 42869590, # source: FiO2 /// concept: Oxygen/Gas total [Pure volume fraction] Inhaled gas + 42527086, # source: Mean Airway Pressure (MAP) /// concept: Mean airway pressure + 1340204, # source: Previous diagnosis of sepsis measure /// concept: History of event + + # 5.22 vital signs UC2 + 4096101, # source: SpO2 /// concept: Measurement of oxygen saturation at periphery + 3025315, # source: Weight /// concept: Body weight + 3020891, # source: Body temperature /// concept: Body temperature + 3012888, # source: DBP (Diastolic blood pressure) /// concept: Diastolic blood pressure + 3004249, # source: SBP (Systolic Blood Pressure) /// concept: Systolic blood pressure + 3014315, # source: Urine output /// concept: Urine output + 3024171, # source: RR /// concept: Respiratory rate + 3027018, # source: HR /// concept: Heart rate + + # 5.23 physical examination signs + 4224504, # source: Central pulse /// concept: Pulse + 4314539, # source: Peripheral pulse (pressure) /// concept: Arterial pulse pressure + 21490963, # source: Pupillary reactivity (right) /// concept: Right pupil Pupillary response + 3032652, # source: GCS /// concept: Glasgow coma scale + 3045676, # source: Capillary refill time /// concept: Capillary refill [Time] + 21491763, # source: Pupillary reactivity (left) /// concept: Left pupil Pupillary response + 3021415, # source: Pupillary size (left) /// concept: Left pupil Diameter Auto + 3027214, # source: Pupillary size (right) /// concept: Right pupil Diameter Auto + + # 5.24 lab tests UC2 + 37393605, # source: D-dimer /// concept: D-dimer level + 4017361, # source: Blood urea nitrogen /// concept: Blood urea nitrogen measurement + 4036356, # source: Bacterial pathogen detection /// concept: Detection of bacteria + 44789220, # source: Ionized calcium /// concept: Ionised calcium measurement + 4094436, # source: Fibrinogen /// concept: Fibrinogen measurement + 4118986, # source: Direct bilirubin /// concept: Bilirubin measurement + 4196268, # source: PCR panel /// concept: Polymerase chain reaction observation + 440029, # source: Viral pathogen detection /// concept: Viral disease + 4212899, # source: Leukocytes /// concept: Total white blood count + 4175016, # source: Thromboplastin time /// concept: Partial thromboplastin time, activated + 42536081, # source: MR-proADM /// concept: Adrenal medulla hormone + 4299649, # source: Quantification of colonies in culture /// concept: Quantitative microbial culture and measurement + 44806682, # source: Antibiotic resistance /// concept: Infection resistant to multiple antibiotics + 432545, # source: Name of bacterial pathogen detected /// concept: Bacterial infectious disease + 3013826, # source: Glucose /// concept: Glucose [Moles/volume] in Serum or Plasma + 3046279, # source: PCT /// concept: Procalcitonin [Mass/volume] in Serum or Plasma + 3033291, # source: Interleukin-6 /// concept: Interleukin 6 [Mass/volume] in Body fluid + + # 5.25 arterial blood gas + 3003396, # source: Base excess /// concept: Base excess in Arterial blood by calculation + 3019977, # source: pH /// concept: pH of Arterial blood + 3008152, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Arterial blood + 3027946, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Arterial blood + 3027801, # source: PaO2 /// concept: Oxygen [Partial pressure] in Arterial blood + + # 5.26 venous blood gas + 3009343, # source: pH /// concept: pH of Capillary blood + 3027273, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Venous blood + 3003129, # source: Base excess /// concept: Base excess in Capillary blood by calculation + 3002032, # source: Base excess /// concept: Base excess in Venous blood by calculation + 3015235, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Capillary blood + 3023024, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Capillary blood + 3021447, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Venous blood + 3028626, # source: PaO2 /// concept: Oxygen [Partial pressure] in Capillary blood + 3024354, # source: PaO2 /// concept: Oxygen [Partial pressure] in Venous blood + 3012544 # source: pH /// concept: pH of Venous blood + ), + + ## UC3 + uc3 = c( + # 5.28 Patient characteristics + 434007, # source: hemophilia A diagnosis /// concept: hereditary factor VIII deficiency disease + 4094223, # source: hemophilia A subtype/ severity /// concept: mild hereditary factor VIII deficiency disease + 4140661, # source: hemophilia A subtype/ severity /// concept: moderate hereditary factor VIII deficiency disease + 4056830, # source: hemophilia A subtype/ severity /// concept: severe hereditary factor VIII deficiency disease + 3003694, # source: blood group /// concept: ABO and Rh group [Type] in Blood + 37393608, # source: factor VIII inhibitor status /// concept: factor VIII inhibitor activity + 4126681, # source: factor VIII inhibitor status /// concept: detected + 9190, # source: factor VIII inhibitor status /// concept: not detected + + # 5.29 Lab Measurements + 3024942, # source: factor VIII inhibitor titer /// concept: coagulation factor VIII inhibitor [Units/volume] in platelet poor plasma by coagulation assay + 3022520, # source: factor VIII activity measurement /// concept: coagulation factor VIII activated [Units/volume] in platelet poor plasma by coagulation assay + 3011832, # source: factor VIII activity measurement /// concept: coagulation factor VIII activity [Units/volume] in platelet poor plasma by Chromogenic assay + 43534000, # source: Von Willebrand factor activity measurement /// concept: von Willebrand factor (vWf) activity [Units/volume] in platelet poor plasma by Immunoassay + 3002124, # source: Von Willebrand factor antigen measurement /// concept: von Willebrand factor (vWf) Ag [Units/volume] in platelet poor plasma by Immunoassay + 3023693, # source: Von Willebrand factor propeptide measurement /// concept: von Willebrand factor (vWf) multimers in platelet poor plasma by Immunoblot + 3042349, # source: Von Willebrand factor propeptide measurement /// concept: von Willebrand factor (vWf) cleaving protease inhibitor [Units/volume] in platelet poor plasma + 4175016, # source: activated partial thromboplastin time (APTT) /// concept: partial thromboplastin time, activated + 3034426, # source: Prothrombin time (PT) /// concept: prothrombin time (PT) + 4267147, # source: platelet count /// concept: platelet count + 3009542, # source: hematocrit /// concept: Hematocrit [Volume Fraction] of Blood + 3016407, # source: fibrinogen /// concept: fibrinogen [mass/volume] in platelet poor plasma by coagulation assay + 3006923, # source: ALT /// concept: alanine aminotransferase [enzymatic activity/volume] in serum or plasma + 3013721, # source: AST /// concept: aspartate aminotransferase [enzymatic activity/volume] in serum or plasma + + # 5.30 Treatments + 1352213, # source: factor VIII /// concept: factor VIII (umbrella term) + 793042, # source: factor VIII /// concept: emicizumab (umbrella term) + 40492862, # source: factor VIII dose is continuous infusion or bolus dose /// concept: mode of drug administration + 4129275, # source: factor VIII dose is continuous infusion or bolus dose /// concept: continuous infusion + 4265597, # source: factor VIII dose is continuous infusion or bolus dose /// concept: by bolus infusions + 1517070, # source: desmopressin /// concept: desmopressin + + # 5.31 Surgery-specific parameters + 4172515, # source: Medical/ surgical procedure /// concept: Therapeutic procedure + 967823, # source: NaCl administration during surgery /// concept: sodium chloride + 4028665, # source: plasma administration during surgery /// concept: plasma transfusion + 4160439, # source: datetime start anesthesia /// concept: Administration of anesthesia + 4308716, # source: blood loss during surgery /// concept: intraoperative hemorrhage + 37017589 # source: blood transfusion during surgery /// concept: Bleeding during surgery requiring transfusion + ), + + # 5.3 VIS score medications + visScoreMedications = c( + 1337720, # source: dobutamine /// concept: dobutamine + 1337860, # source: dopamine /// concept: dopamine + 1343916, # source: epinephrine /// concept: epinephrine + 1368671, # source: milrinone /// concept: milrinone + 1321341, # source: norepinephrin /// concept: norepinephrine + 1507835 # source: vasopressin /// concept: vasopressin (USP) + ), + + # 5.4 vasopressors and inotropes + vasopressors_inotropes = c( + 1337720, # source: Dobutamine /// concept: dobutamine + 1337860, # source: Dopamine /// concept: dopamine + 1143374, # source: Ephedrine /// concept: ephedrine + 1343916, # source: Epinephrine /// concept: epinephrine + 1183554, # source: Isoproterenol /// concept: isoproterenol + 40173184, # source: Levosimendan /// concept: levosimendan + 1368671, # source: Milrinone /// concept: milrinone + 1321341, # source: Norepinephrine /// concept: norepinephrine + 1135766, # source: Phenylephrine /// concept: phenylephrine + 19119253, # source: Terlipressin /// concept: terlipressin + 1507835 # source: Vasopressin /// concept: vasopressin (USP) + ), + + # 5.5 immunosuppressants + immunosuppressants = c( + 4273629, # source: Chemotherapy /// concept: Chemotherapy + 1518254, # source: Dexamethasone /// concept: dexamethasone + 975125, # source: Hydrocortisone /// concept: hydrocortisone + 1506270, # source: Methylprednisolone /// concept: methylprednisolone + 21603754, # source: Monoclonal Antibodies /// concept: Monoclonal antibodies + 1550557 # source: Prednisolone /// concept: prednisolone + ), + + # 5.6 antibiotic medications + antibiotics = c( + 1713332, # source: Amoxicillin /// concept: amoxicillin + 1759842, # source: Amoxicillin clavulanate /// concept: clavulanate + 1717327, # source: Ampicillin /// concept: ampicillin + 1734104, # source: Azithromycin /// concept: azithromycin + 1836430, # source: Trimethoprim-Sulfamethoxazole /// concept: sulfamethoxazole + 1705674, # source: Trimethoprim-Sulfamethoxazole /// concept: trimethoprim + 1836948, # source: Tetracycline /// concept: tetracycline + 902722, # source: Tobramycin /// concept: tobramycin + 1707687, # source: Vancomycin /// concept: vancomycin + 19010400, # source: Fusidic acid /// concept: fusidate + 45892419, # source: Gentamicin /// concept: gentamicin + 45892599, # source: Ceftolozane-Tazovactam /// concept: ceftolozane + 46221507, # source: Ceftazidime-Avibactam /// concept: avibactam + 1736887, # source: Linezolid /// concept: linezolid + 1748975, # source: Cefepime /// concept: cefepime + 1750500, # source: Clarithromycin /// concept: clarithromycin + 1769535, # source: Cefadroxil /// concept: cefadroxil + 1771162, # source: Cefazolin /// concept: cefazolin + 1774470, # source: Cefotaxime /// concept: cefotaxime + 1776684, # source: Ceftazidime /// concept: ceftazidime + 1778162, # source: Cefuroxime /// concept: cefuroxime + 1786617, # source: Daptomycin /// concept: daptomycin + 1797513, # source: Ciprofloxacin /// concept: ciprofloxacin + 997881, # source: Clindamycin /// concept: clindamycin + 901845, # source: Colistin /// concept: colistin + 1709170, # source: Meropenem /// concept: meropenem + 1717963, # source: Ertapenem /// concept: ertapenem + 1518254, # source: Dexamethasone /// concept: dexamethasone + 1741122, # source: Piperacillin-Tazobactam /// concept: tazobactam + 1746114, # source: Piperacillin-Tazobactam /// concept: piperacillin + 1746940, # source: Erythromycin /// concept: erythromycin + 951511, # source: Mupirocin /// concept: mupirocin + 956653, # source: Fosfomycin /// concept: fosfomycin + 975125, # source: Hydrocortisone /// concept: hydrocortisone + 1778262, # source: Imipenem /// concept: imipenem + 19078399, # source: Teicoplanin /// concept: teicoplanin + 1790868, # source: Amikacin /// concept: amikacin + 1506270, # source: Methylprednisolone /// concept: methylprednisolone + 920293, # source: Nitrofurantoin /// concept: nitrofurantoin + 1721543, # source: Norfloxacin /// concept: norfloxacin + 1724703, # source: Oxacillin /// concept: oxacillin + 1728416, # source: Penicillin /// concept: penicillin G + 1742253, # source: Levofloxacin /// concept: levofloxacin + 1550557, # source: Prednisolone /// concept: prednisolone + 1763204 # source: Rifampicin /// concept: rifampin + ), + + # 5.7 antifungal medications + antifungals = c( + 1714277, # source: Voriconazole /// concept: voriconazole + 35606695, # source: Isovuconazole /// concept: isavuconazole + 19018013, # source: Micafungin /// concept: micafungin + 19026450, # source: Andiulafungin /// concept: anidulafungin + 1754994 # source: Fluconazole /// concept: fluconazole + ), + + # 5.8 antibiotic resistance + antibioticResistance = c( + 4019195, # source: MRSA /// concept: Methicillin resistant Staphylococcus aureus + 4257547, # source: ESBL /// concept: Extended spectrum beta-lactamase producing bacteria + 37017134, # source: Drug-resistant /// concept: Multidrug-resistant bacteria + 1707687, # source: Vancomycin-resistant /// concept: vancomycin + 997881, # source: Clindamycin-resistant /// concept: clindamycin + 1746940 # source: Erythromycin-resistant /// concept: erythromycin + ), + + # 5.9 cardiac surgery + cardiacSurgery = c( + 4049734, # source: Application of band to pulmonary artery /// concept: Banding of pulmonary artery + 4019929, # source: Unspecified repair of tetralogy of fallot /// concept: Repair of tetralogy of Fallot + 4019932, # source: Repositioning of transposed great arteries /// concept: Arterial switch operation + 4017751, # source: Unspecified correction of total anomalous pulmonary venous connection /// concept: Repair of total anomalous pulmonary venous connection + 4020376, # source: Primary repair of defect of interatrial septum NEC/repair of defect of interatrial septum using pericardial patch /// concept: Closure of defect of interatrial septum using pericardial patch + 4020506, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Creation of valved conduit between right ventricle of heart and pulmonary artery + 4019950, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Revision of valved cardiac conduit + 4020508, # source: Correction of persistent sinus venosus /// concept: Repair of sinus venosus + 4018441, # source: Correction of partial anomalous pulmonary venous drainage /// concept: Repair of partial anomalous pulmonary venous connection + 4020520, # source: Open aortic valvotomy /// concept: Open aortic valvotomy + 4018747, # source: Repair of subaortic stenosis /// concept: Operations on the left ventricular outflow tract + 4019233, # source: Unspecified creation of shunt to pulmonary artery from subclavian artery using interposition tube pr /// concept: Creation of shunt from subclavian artery to pulmonary artery using interposition tube prosthesis + 4019237, # source: Creation of anastomosis to pulmonary artery from vena cava /// concept: Anastomosis of vena cava to pulmonary artery + 4018926, # source: Other specified : repair of pulmonary artery /// concept: Repair of pulmonary artery + 4021725, # source: Removal of band from pulmonary artery /// concept: Removal of band from pulmonary artery + 4019026, # source: Other specified: plastic repair of aorta /// concept: Plastic repair of aorta + 4020812, # source: Plastic repair of aorta and end to end anastomosis of aorta /// concept: Plastic repair of aorta and end-to-end anastomosis of aorta + 4019028, # source: Release of vascular ring of aorta /// concept: Release of vascular ring of aorta + 44790092, # source: Relief of left ventricular outflow tract obstruction /// concept: Relief of left ventricular outflow tract obstruction + 44789857, # source: Total cavopulmonary connection with extracardiac inferior caval vein topulmonary artery conduit /// concept: Total cavopulmonary connection with extracardiac inferior caval vein to pulmonary artery conduit + 4336751, # source: Unspecified other transplantation of heart/allotransplantation of heart NEC /// concept: Allotransplant of heart + 4049979, # source: Repair of double outlet right ventricle /// concept: Repair of double outlet right ventricle + 4050114, # source: Closure of patent ductus arteriosus NEC /// concept: Closure of ductus arteriosus with clip + 4052536, # source: Extracorporeal membrane oxygenation /// concept: Extracorporeal membrane oxygenation + 44790415, # source: Aortic root pulmonary valve autograft with right vent to pulmonary artery valved conduit/ aortic root pulmonary valve autograft with right vent to pulmonary artery aortoventriculoplasty /// concept: Aortic root replacement using pulmonary valve autograft with right ventricle to pulmonary artery valved conduit and aortoventriculoplasty + 4144921, # source: Implantation of cardiac pacemaker system NEC /// concept: Implantation of cardiac pacemaker + 4137127, # source: Unspecified other transplantation of heart/allotransplantation of heart NEC /// concept: Transplantation of heart + 44793133, # source: Aortopulmonary reconstruction with systemic to pulmonary arterial shunt /// concept: Aortopulmonary reconstruction with systemic to pulmonary arterial shunt + 4293619, # source: Tricuspid valve repair NEC /// concept: Repair of tricuspid valve + 4296790, # source: Transposition of coronary artery NEC /// concept: Transposition of coronary artery + 4139214, # source: Open implantation of ventricular assist device /// concept: Open implantation of cardiac ventricular assist device + 4178479, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Replacement of valved cardiac conduit + 40486525, # source: Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum /// concept: Primary repair of defect of atrioventricular septum + 4187380, # source: Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum /// concept: Repair of ostium primum defect + 4199899, # source: Unspecified repair of defect of interventricular septum /// concept: Closure of ventricular septal defect + 4203153, # source: Replacement of mitral valve NEC /// concept: Replacement of mitral valve + 4217615, # source: Plication of diaphragm /// concept: Plication of diaphragm + 4308136, # source: Repair of tetralogy of fallot using transannular patch /// concept: Complete repair of tetralogy of Fallot with transannular patch + 4312194, # source: Aortic valve repair NEC /// concept: Repair of heart valve + 4339184, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Replacement of pulmonary valve + 4232476 # source: Repair of defect of interventricular septum using prosthetic patch/unspecified repair of defect of interventricular septum /// concept: Repair of ventricular septal defect with prosthesis + ), + + # 5.10 cardiac radiology + cardiacRadiology = c( + 4019824, # source: US transoesophageal echocardiogram (toe) /// concept: Transesophageal echocardiography + 4032404, # source: IR bronchoscopy /// concept: Bronchoscopy + 4065416, # source: Exercise test (non-CPET) /// concept: Exercise tolerance test + 4345925, # source: FL video swallow /// concept: Videofluoroscopy swallow + 4083106, # source: US cranial contents /// concept: US scan of head + 4083108, # source: US neck /// concept: US scan of neck + 4082979, # source: MRI head /// concept: MRI of head + 4093436, # source: US thorax and pleural cavity /// concept: Ultrasonography of thorax + 4125350, # source: CT head /// concept: CT of head + 4125530, # source: US urinary tract /// concept: US urinary tract + 44802640, # source: MRI cardiac complex congenital /// concept: MRI study for cardiac congenital anomaly + 4163872, # source: XR chest /// concept: Plain chest X-ray + 4167029, # source: US doppler groin both /// concept: Ultrasonography of inguinal region + 4167052, # source: US doppler renal both /// concept: Doppler ultrasonography of kidney + 4305221, # source: US abdomen and pelvis/ US abdomen /// concept: US scan of abdomen and pelvis + 4303522, # source: US diaphragmatic region /// concept: US scan of diaphragm + 4306317, # source: CT heart with contrast/ CT cardiac angiogram coronary/ CT cardiac gated with contrast /// concept: CT angiography of coronary artery with contrast + 4169275, # source: XR chest and abdomen /// concept: X-ray of chest and abdomen + 4322380, # source: IR PICC line insertion /// concept: Insertion of peripherally inserted central catheter + 4140473, # source: 24h holter monitor /// concept: Holter extended electrocardiographic recording + 4329508, # source: US thorax and pleural cavity /// concept: Ultrasonography of pleural cavity + 4335392, # source: US doppler lower limb veins both /// concept: Doppler ultrasonography of vein of lower limb + 4203365, # source: Epicardial echocardiogram /// concept: Epicardial echocardiography + 4335825, # source: US transthoracic echocardiogram/ us transthoracic echocardiogram (pre- admission)/ US transthoracic echocardiogram (sedated) /// concept: Transthoracic echocardiography + 40482732, # source: IR tunnelled central venous line insertion /// concept: Insertion of tunneled venous catheter + 40489841, # source: US doppler jugular vein both /// concept: Doppler ultrasonography of jugular vein + 40492338, # source: Cardiopulmonary exercise test (CPET) /// concept: Cardiopulmonary exercise test + 40488431, # source: Pacemaker/ICD interrogation (in clinic)/ pacemaker/ICD interrogation (other) /// concept: Interrogation of cardiac pacemaker + 42873079, # source: IR tunnelled central venous line removal /// concept: Removal of tunneled central venous catheter + 4261497, # source: US abdomen and pelvis/ US abdomen /// concept: Ultrasonography of abdomen + 4205144, # source: EEG routine portable /// concept: Portable electroencephalogram + 4181917, # source: EEG routine /// concept: Electroencephalogram + 4264477, # source: XR abdomen /// concept: Diagnostic radiography of abdomen + 45764527, # source: 24h holter monitor /// concept: Electrocardiographic Holter analyzer + 45765560, # source: Event monitor /// concept: Cardiovascular monitor + 4327032, # source: CT thorax with contrast /// concept: CT of thorax with contrast + 35622931, # source: US doppler /// concept: Doppler ultrasound + 44813863, # source: US vocal cord /// concept: Ultrasonography of vocal cord + 4312208, # source: IR bronchogram /// concept: Contrast bronchogram + 4235141 # source: Pacemaker/ICD device check - remote patient initiated /// concept: Check artificial pacemaker + ), + + # 5.11 cardiac length of stay + cardiac_LOS = c( + 4123933, # source: ICU admission (start datetime and end datetime) /// concept: Admission to pediatric intensive care unit + 8715, # source: Total hospital admission (start datetime and end datetime) /// concept: Hospital admission + 4161811, # source: HDU admission (start datetime and end datetime) /// concept: Admission to high dependency unit + 36675203 # source: Cardiology ward admission (start datetime and end datetime) /// concept: Admission to pediatric cardiology department + ), + + # 5.12 additional variables + additional = c( + 4095105, # source: Base Excess /// concept: Base deficit measurement + 4123933, # source: Elective ICU admission /// concept: Admission to pediatric intensive care unit + 4234469, # source: Diagnoses /// concept: Diagnosis + 40493026, # source: Mechanical ventilation /// concept: Mechanical ventilator + 44803020, # source: Reason for ICU admission: (Main reason for ICU admission is not recovery from surgery or a procedure, Recovery from a bypass cardiac procedure, recovery from a non-bypass cardiac procedure, recovery from non-cardiac procedure) /// concept: Primary reason for admission + 4209008, # source: Pupillary reaction /// concept: Pupillary function + 260134, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Croup + 432571, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Malignant lymphoma + 4029498, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Seizure disorder + 317009, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Asthma + 201957, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Necrotizing enterocolitis in fetus OR newborn + 43530727, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Spontaneous cerebral hemorrhage + 29783, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Severe combined immunodeficiency disease + 321042, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Cardiac arrest + 4165112, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Bronchiolitis + 443727, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Diabetic ketoacidosis + 314383, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Myocarditis + 4245975, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Hepatic failure + 440207, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Hypoplastic left heart syndrome + 42537745, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Bone marrow transplant present + 442588, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Obstructive sleep apnea syndrome + 4213310, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Degenerative disease of the central nervous system + 321319, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Cardiomyopathy + 317510, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Leukemia + 5083, # source: Outpatient appointment type (telephone/ clinic visit etc.) /// concept: Telehealth + 42869590, # source: FiO2 /// concept: Oxygen/Gas total [Pure volume fraction] Inhaled gas + 3027946, # source: PaCO2 /// concept: Carbon dioxide [Partial pressure] in Arterial blood + 3004249 # source: Systolic blood pressure /// concept: Systolic blood pressure + ), + + # 5.13 laboratory tests + labTests = c( + 4298431, # source: Immature WBC Count /// concept: White blood cell count + 3007670, # source: Neutrophil Count /// concept: Neutrophil Ab [Units/volume] in Serum + 40762351, # source: Hemoglobin /// concept: Hemoglobin [Moles/volume] in Blood + 37393863, # source: Platelet Count /// concept: Platelet count + 3009542, # source: Hematocrit /// concept: Hematocrit [Volume Fraction] of Blood + 3034426, # source: INR Prothrombin Time /// concept: Prothrombin time (PT) + 3047181, # source: Lactate /// concept: Lactate [Moles/volume] in Blood + 3051825, # source: Creatinine /// concept: Creatinine [Mass/volume] in Blood + 3024561, # source: Albumin /// concept: Albumin [Mass/volume] in Serum or Plasma + 3024641, # source: Blood urea nitrogen /// concept: Urea nitrogen [Moles/volume] in Serum or Plasma + 3013826, # source: Glucose /// concept: Glucose [Moles/volume] in Serum or Plasma + 3006140, # source: Bilirubin /// concept: Bilirubin.total [Moles/volume] in Serum or Plasma + 3019550, # source: Sodium /// concept: Sodium [Moles/volume] in Serum or Plasma + 3005456, # source: Potassium /// concept: Potassium [Moles/volume] in Blood + 3033836, # source: Magnesium /// concept: Magnesium [Moles/volume] in Blood + 3018572, # source: Chloride /// concept: Chloride [Moles/volume] in Blood + 3015377, # source: Calcium /// concept: Calcium [Moles/volume] in Serum or Plasma + 3003458, # source: Phosphate /// concept: Phosphate [Moles/volume] in Serum or Plasma + 3020460, # source: CRP /// concept: C reactive protein [Mass/volume] in Serum or Plasma + 3006923, # source: ALT /// concept: Alanine aminotransferase [Enzymatic activity/volume] in Serum or Plasma + 3013721, # source: AST /// concept: Aspartate aminotransferase [Enzymatic activity/volume] in Serum or Plasma + 37392672, # source: pH (venous) /// concept: Blood venous pH + 37399161, # source: pH (arterial) /// concept: Blood arterial pH + 3021447, # source: pCO2 (venous) /// concept: Carbon dioxide [Partial pressure] in Venous blood + 3027946, # source: pCO2 (arterial) /// concept: Carbon dioxide [Partial pressure] in Arterial blood + 3024354, # source: pO2 (venous) /// concept: Oxygen [Partial pressure] in Venous blood + 3027801, # source: pO2 (arterial) /// concept: Oxygen [Partial pressure] in Arterial blood + 3027273, # source: Bicarbonate (venous) /// concept: Bicarbonate [Moles/volume] in Venous blood + 3008152 # source: Bicarbonate (arterial) /// concept: Bicarbonate [Moles/volume] in Arterial blood + ), + + # 5.14 cardiac complications + cardiacComplications = c( + 4051330, # source: LCOS - renal support (CVVH/ PD) /// concept: Continuous venovenous hemofiltration + 4123933, # source: ICU ward stay /// concept: Admission to pediatric intensive care unit + 4295705, # source: Surgical injury - Reexplore for bleeding /// concept: Exploratory incision + 377091, # source: Neurological injury - seizure /// concept: Seizure + 439847, # source: Neurological injury - intracranial haemmhorage/ intracranial bleeding /// concept: Intracranial hemorrhage + 4308537, # source: Surgical injury - Blood Loss /// concept: Injury to blood vessel during surgery + 321042, # source: LCOS - Cardiac arrest /// concept: Cardiac arrest + 443454, # source: Neurological injury - infarction /// concept: Cerebral infarction + 4185565, # source: Low cardiac output state (LCOS) - ECMO /// concept: Low cardiac output syndrome + 42537043, # source: CVL infections /// concept: CLABSI - central line associated bloodstream infection + 4306136 # source: Surgical injury - Chylothorax /// concept: Chylothorax + ), + + # 5.15 Vital signs + vitalSigns = c( + 3027018, # source: Age-dependent HR /// concept: Heart rate + 3024171, # source: Age-dependent RR /// concept: Respiratory rate + 3004249, # source: SBP (Systolic Blood Pressure) /// concept: Systolic blood pressure + 3012888, # source: DBP (Dyastolic Blood Pressure) /// concept: Diastolic blood pressure + 4020553 # source: SpO2 /// concept: Oxygen saturation measurement + ), + + # 5.16 HSJD clinical + HSJDClinical = c( + 3025315, # source: Weight /// concept: Body weight + 3036277, # source: Height /// concept: Body height + 4201235, # source: Body Surface Area (BSA) - Combination of weight and height /// concept: body surface area + 4275564 # source: Cardiac surgeries (Interventions) /// concept: Operation on heart + ), + + # 5.17 HSJD Surgery + HSJDSurgery = c( + 40490494, # source: STAT/EACTS score of surgery /// concept: Society of Thoracic Surgeons risk calculator + 4301351, # source: Surgery start datetime, end datetime /// concept: Surgical procedure + 4336464, # source: Cardiac bypass start datetime, end datetime /// concept: Coronary artery bypass graft + 4201547, # source: Cross-clamping start datetime, end datetime /// concept: Placement of arterial cross clamp + 37152781, # source: Deep hypothermic circulatory arrest start datetime, end datetime /// concept: Hypothermic circulatory arrest + 4272324, # source: Antegrade Cerebral Perfusion start datetime, end datetime /// concept: Cardiopulmonary bypass operation + 4150627 # source: Extubation event /// concept: Removal of endotracheal tube + ), + + # 5.18 HSJD Hospitalisations + HSJDHospitalisation = c( + 44803020, # source: Admission reason /// concept: Primary reason for admission + 42539650, # source: Vasoactive infusion start datetime, end datetime /// concept: Administration of intravenous vasoactive drug + 4179206, # source: Postop central venous catheter in/start datetime, out/end datetime /// concept: Central venous catheter + 37158404, # source: Invasive Mechanical Ventilation LOS /// concept: Invasive mechanical ventilation + 4177224 # source: Non-Invasive Mechanical Ventilation LOS /// concept: Non-invasive ventilation + ), + + # 5.19 HSJD Complications + HSJDcomplications = c( + 4202832, # source: intubation /// concept: Intubation + 4275564, # source: Cardiac surgeries (interventions) /// concept: Operation on heart + 4044892, # source: Sternum reopening (procedure undertaken) /// concept: Procedure on sternum + 4046868, # source: Vocal Cord Dysfunction /// concept: Vocal cord dysfunction + 4275136, # source: Diaphragmatic Paralysis /// concept: Paralysis of diaphragm + 253796, # source: Pneumothorax /// concept: Pneumothorax + 44783799, # source: Tracheostomy /// concept: Exteriorization of trachea + 44784217, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Cardiac arrhythmia + 315643, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Tachyarrhythmia + 4228448, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Bradyarrhythmia + 4068155, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Atrial arrhythmia + 4185572, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Ventricular arrhythmia + 46234437, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: ivabradine + 1309944, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: amiodarone + 1354860, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: flecainide + 4353741, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Cardioversion + 4117045, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Atrial overdrive pacing + 4049398, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Temporary cardiac pacemaker procedure + 4051940, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Permanent cardiac pacemaker procedure + 609312 # source: Listed for heart transplantation /// concept: Awaiting transplantation of heart + ), + + # 5.21 healthcare use + healthcareUse = c( + 37174269, # source: Diagnosis of acute infection having the potential for progression to sepsis1+2 /// concept: At increased risk of sepsis + 4032243, # source: Dialysis /// concept: Dialysis procedure + 197320, # source: acute kidney injury /// concept: Acute kidney injury + 4074689, # source: "Chest opening, chest drainage" /// concept: Open drainage of pleural cavity + 4084670, # source: Surgical admission (non-urgent) /// concept: Non-urgent surgical admission + 4070667, # source: Urinary catheter /// concept: Urinary catheter + 44790095, # source: Invasive ventilation /// concept: Invasive ventilation + 4052536, # source: ECMO /// concept: Extracorporeal membrane oxygenation + 4051330, # source: Dialysis /// concept: Continuous venovenous hemofiltration + 44790567, # source: Origin (external) /// concept: Patient transfer from hospital to hospital + 133327, # source: viremia /// concept: Viremia + 4097216, # source: Endotracheal tube /// concept: Endotracheal tube + 4085730, # source: Antibiotics /// concept: Antibiotic therapy + 4123946, # source: Surgical admission (urgent) /// concept: Admission to surgical department + 4208341, # source: organ transplant /// concept: Solid organ transplant + 4193843, # source: Oxygenation index /// concept: Oxygenation index measurement + 4235043, # source: Ventricular assist device (VAD) /// concept: Ventricular assist device + 443392, # source: Cancer /// concept: Malignant neoplastic disease + 4181511, # source: Antineoplastics /// concept: Administration of antineoplastic agent + 4294886, # source: Origin (internal) /// concept: "Patient transfer, in-hospital" + 4301351, # source: Surgery previous to prediction time point /// concept: Surgical procedure + 4140762, # source: Antivirals /// concept: Antiviral therapy + 4177205, # source: Peripheral IV cannulas /// concept: Cannulation + 4177224, # source: Non-invasive ventilation /// concept: Non-invasive ventilation + 45758028, # source: Arterial blood pressure catheter /// concept: Arterial blood pressure catheter + 44803020, # source: Reason for admission /// concept: Primary reason for admission + 4179206, # source: Central venous catheter /// concept: Central venous catheter + 132736, # source: bacteremia /// concept: Bacteremia + 44783799, # source: Tracheostomy /// concept: Exteriorization of trachea + 45768671, # source: asplenia /// concept: Asplenia + 4324124, # source: Peritoneal dialysis /// concept: Peritoneal dialysis + 435785, # source: meningitis /// concept: Meningitis + 201820, # source: Diagnosis of chronic condition /// concept: Diabetes mellitus + 42538045, # source: Nasogastric/orogastric tube /// concept: Nasogastric/orogastric tube stylet + 37206601, # source: ECMO type /// concept: Venoarterial extracorporeal membrane oxygenation + 37206603, # source: ECMO type /// concept: Venovenous extracorporeal membrane oxygenation + 4314777, # source: Immunosuppressors /// concept: Immunosuppressive therapy + 604243, # source: neutropenia /// concept: Acquired neutropenia + 444187, # source: injury with open wound /// concept: Open wound + 22281, # source: sickle cell disease /// concept: Sickle cell-hemoglobin SS disease + 435613, # source: cellulitis /// concept: Cellulitis + 4134120, # source: cerebral palsy /// concept: Cerebral palsy + 444202, # source: Abcess /// concept: Abscess + 312723, # source: Diagnosis of chronic condition /// concept: Congenital heart disease + 255573, # source: Diagnosis of chronic condition /// concept: Chronic obstructive lung disease + 255848, # source: pneumonia /// concept: Pneumonia + 433740, # source: immunodeficiency /// concept: Immunodeficiency disorder + 4080011, # source: Diagnosis of organ system dysfunction /// concept: Organ dysfunction syndrome + 434821, # source: Diagnosis of SIRS /// concept: Systemic inflammatory response syndrome + 81539, # source: mitochondrial disease /// concept: Mitochondrial cytopathy + 4103588, # source: tuberculosis /// concept: Acute tuberculosis + 443783, # source: Diagnosis of chronic condition /// concept: Chronic disease + 4140977, # source: Diagnosis of condition producing immunodeficiency /// concept: Secondary immune deficiency disorder + 201606, # source: Crohn's disease /// concept: Crohn's disease + 4243475, # source: hepatitis /// concept: Acute hepatitis + 4300243, # source: surgical site inflammation /// concept: Postoperative complication + 439125, # source: Down's syndrome /// concept: Complete trisomy 21 syndrome + 321042, # source: cardiac arrest /// concept: Cardiac arrest + 4331815, # source: UTI /// concept: Acute urinary tract infection + 195212, # source: Cushing's disease /// concept: Hypercortisolism + 196152, # source: peritonitis /// concept: Peritonitis + 314383, # source: miocarditis /// concept: Myocarditis + 195314, # source: nephrotic syndrome /// concept: Nephrotic syndrome + 441589, # source: endocarditis /// concept: Endocarditis + 4271450, # source: Diagnosis of acute infection having the potential for progression to sepsis1+2 /// concept: Acute infectious disease + 81893, # source: ulcerative colitis /// concept: Ulcerative colitis + 80809, # source: rheumatoid arthritis /// concept: Rheumatoid arthritis + 4322814, # source: Meningo-encephalitis /// concept: Meningoencephalitis + 36716945, # source: renal insufficiency /// concept: Renal insufficiency + 440448, # source: appendicitis /// concept: Appendicitis + 433968, # source: candidiasis /// concept: Candidiasis + 44807226, # source: necrotizing enterocolitis /// concept: Necrotising enterocolitis + 132797, # source: Previous diagnosis of sepsis measure /// concept: Sepsis + 21602722, # source: Corticoids /// concept: CORTICOSTEROIDS FOR SYSTEMIC USE + 42869590, # source: FiO2 /// concept: Oxygen/Gas total [Pure volume fraction] Inhaled gas + 42527086, # source: Mean Airway Pressure (MAP) /// concept: Mean airway pressure + 1340204 # source: Previous diagnosis of sepsis measure /// concept: History of event + ), + + # 5.22 vital signs UC2 + vitalSignsUC2 = c( + 4096101, # source: SpO2 /// concept: Measurement of oxygen saturation at periphery + 3025315, # source: Weight /// concept: Body weight + 3020891, # source: Body temperature /// concept: Body temperature + 3012888, # source: DBP (Diastolic blood pressure) /// concept: Diastolic blood pressure + 3004249, # source: SBP (Systolic Blood Pressure) /// concept: Systolic blood pressure + 3014315, # source: Urine output /// concept: Urine output + 3024171, # source: RR /// concept: Respiratory rate + 3027018 # source: HR /// concept: Heart rate + ), + + # 5.23 physical examination signs + physicalExaminationSigns = c( + 4224504, # source: Central pulse /// concept: Pulse + 4314539, # source: Peripheral pulse (pressure) /// concept: Arterial pulse pressure + 21490963, # source: Pupillary reactivity (right) /// concept: Right pupil Pupillary response + 3032652, # source: GCS /// concept: Glasgow coma scale + 3045676, # source: Capillary refill time /// concept: Capillary refill [Time] + 21491763, # source: Pupillary reactivity (left) /// concept: Left pupil Pupillary response + 3021415, # source: Pupillary size (left) /// concept: Left pupil Diameter Auto + 3027214 # source: Pupillary size (right) /// concept: Right pupil Diameter Auto + ), + + # 5.24 lab tests UC2 + labTestsUC2 = c( + 37393605, # source: D-dimer /// concept: D-dimer level + 4017361, # source: Blood urea nitrogen /// concept: Blood urea nitrogen measurement + 4036356, # source: Bacterial pathogen detection /// concept: Detection of bacteria + 44789220, # source: Ionized calcium /// concept: Ionised calcium measurement + 4094436, # source: Fibrinogen /// concept: Fibrinogen measurement + 4118986, # source: Direct bilirubin /// concept: Bilirubin measurement + 4196268, # source: PCR panel /// concept: Polymerase chain reaction observation + 440029, # source: Viral pathogen detection /// concept: Viral disease + 4212899, # source: Leukocytes /// concept: Total white blood count + 4175016, # source: Thromboplastin time /// concept: Partial thromboplastin time, activated + 42536081, # source: MR-proADM /// concept: Adrenal medulla hormone + 4299649, # source: Quantification of colonies in culture /// concept: Quantitative microbial culture and measurement + 44806682, # source: Antibiotic resistance /// concept: Infection resistant to multiple antibiotics + 432545, # source: Name of bacterial pathogen detected /// concept: Bacterial infectious disease + 3013826, # source: Glucose /// concept: Glucose [Moles/volume] in Serum or Plasma + 3046279, # source: PCT /// concept: Procalcitonin [Mass/volume] in Serum or Plasma + 3033291 # source: Interleukin-6 /// concept: Interleukin 6 [Mass/volume] in Body fluid + ), + + # 5.25 arterial blood gas + arterialBloodGas = c( + 3003396, # source: Base excess /// concept: Base excess in Arterial blood by calculation + 3019977, # source: pH /// concept: pH of Arterial blood + 3008152, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Arterial blood + 3027946, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Arterial blood + 3027801 # source: PaO2 /// concept: Oxygen [Partial pressure] in Arterial blood + ), + + # 5.26 venous blood gas + venousBloodGas = c( + 3009343, # source: pH /// concept: pH of Capillary blood + 3027273, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Venous blood + 3003129, # source: Base excess /// concept: Base excess in Capillary blood by calculation + 3002032, # source: Base excess /// concept: Base excess in Venous blood by calculation + 3015235, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Capillary blood + 3023024, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Capillary blood + 3021447, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Venous blood + 3028626, # source: PaO2 /// concept: Oxygen [Partial pressure] in Capillary blood + 3024354, # source: PaO2 /// concept: Oxygen [Partial pressure] in Venous blood + 3012544 # source: pH /// concept: pH of Venous blood + ), + + # 5.28 Patient characteristics + UC3PateintCharacteristics = c( + 434007, # source: hemophilia A diagnosis /// concept: hereditary factor VIII deficiency disease + 4094223, # source: hemophilia A subtype/ severity /// concept: mild hereditary factor VIII deficiency disease + 4140661, # source: hemophilia A subtype/ severity /// concept: moderate hereditary factor VIII deficiency disease + 4056830, # source: hemophilia A subtype/ severity /// concept: severe hereditary factor VIII deficiency disease + 3003694, # source: blood group /// concept: ABO and Rh group [Type] in Blood + 37393608, # source: factor VIII inhibitor status /// concept: factor VIII inhibitor activity + 4126681, # source: factor VIII inhibitor status /// concept: detected + 9190 # source: factor VIII inhibitor status /// concept: not detected + ), + + # 5.29 Lab Measurements + UC3LabMeasurements = c( + 3024942, # source: factor VIII inhibitor titer /// concept: coagulation factor VIII inhibitor [Units/volume] in platelet poor plasma by coagulation assay + 3022520, # source: factor VIII activity measurement /// concept: coagulation factor VIII activated [Units/volume] in platelet poor plasma by coagulation assay + 3011832, # source: factor VIII activity measurement /// concept: coagulation factor VIII activity [Units/volume] in platelet poor plasma by Chromogenic assay + 43534000, # source: Von Willebrand factor activity measurement /// concept: von Willebrand factor (vWf) activity [Units/volume] in platelet poor plasma by Immunoassay + 3002124, # source: Von Willebrand factor antigen measurement /// concept: von Willebrand factor (vWf) Ag [Units/volume] in platelet poor plasma by Immunoassay + 3023693, # source: Von Willebrand factor propeptide measurement /// concept: von Willebrand factor (vWf) multimers in platelet poor plasma by Immunoblot + 3042349, # source: Von Willebrand factor propeptide measurement /// concept: von Willebrand factor (vWf) cleaving protease inhibitor [Units/volume] in platelet poor plasma + 4175016, # source: activated partial thromboplastin time (APTT) /// concept: partial thromboplastin time, activated + 3034426, # source: Prothrombin time (PT) /// concept: prothrombin time (PT) + 4267147, # source: platelet count /// concept: platelet count + 3009542, # source: hematocrit /// concept: Hematocrit [Volume Fraction] of Blood + 3016407, # source: fibrinogen /// concept: fibrinogen [mass/volume] in platelet poor plasma by coagulation assay + 3006923, # source: ALT /// concept: alanine aminotransferase [enzymatic activity/volume] in serum or plasma + 3013721 # source: AST /// concept: aspartate aminotransferase [enzymatic activity/volume] in serum or plasma + ), + + # 5.30 Treatments + UC3Treatments = c( + 1352213, # source: factor VIII /// concept: factor VIII (umbrella term) + 793042, # source: factor VIII /// concept: emicizumab (umbrella term) + 40492862, # source: factor VIII dose is continuous infusion or bolus dose /// concept: mode of drug administration + 4129275, # source: factor VIII dose is continuous infusion or bolus dose /// concept: continuous infusion + 4265597, # source: factor VIII dose is continuous infusion or bolus dose /// concept: by bolus infusions + 1517070 # source: desmopressin /// concept: desmopressin + ), + + # 5.31 Surgery-specific parameters + UC3Surgery = c( + 4172515, # source: Medical/ surgical procedure /// concept: Therapeutic procedure + 967823, # source: NaCl administration during surgery /// concept: sodium chloride + 4028665, # source: plasma administration during surgery /// concept: plasma transfusion + 4160439, # source: datetime start anesthesia /// concept: Administration of anesthesia + 4308716, # source: blood loss during surgery /// concept: intraoperative hemorrhage + 37017589 # source: blood transfusion during surgery /// concept: Bleeding during surgery requiring transfusion + ) + ) +) + +## Extend with descendants +conceptSets$conceptSets <- list() +for (cs in names(conceptSets$concepts)) { + conceptSets$conceptSets[[cs]] <- cs(descendants(conceptSets$concepts[[cs]]), name = cs) +} + +cat("\nSourced concept sets\n") diff --git a/R/isStandard.R b/R/isStandard.R index 1afa16f..c22d0bd 100644 --- a/R/isStandard.R +++ b/R/isStandard.R @@ -63,7 +63,9 @@ isStandard <- function(db_connection, data_concepts_path, vocab_schema, save_pat select(sourceCode, concept_id) # Join tables - joined <- inner_join(concept_table, tb, by = "concept_id") + joined <- inner_join(concept_table, tb, by = "concept_id") %>% arrange(standard_concept, concept_id) + # NA == non-standard + joined$standard_concept[is.na(joined$standard_concept)] <- "Non-standard" # Add non-standard concept info to vectors ind <- which(!(joined$standard_concept %in% c('S'))) @@ -91,8 +93,6 @@ isStandard <- function(db_connection, data_concepts_path, vocab_schema, save_pat } } - # NA == non-standard - standardness[is.na(standardness)] <- "Non-standard" # Create table of non-standard concepts res <- tibble::tibble( concept_id = nonStandard, diff --git a/R/isStandardCS.R b/R/isStandardCS.R index 322109f..bb86da1 100644 --- a/R/isStandardCS.R +++ b/R/isStandardCS.R @@ -2,7 +2,7 @@ #' #' This function examines a concept set for non-standard concepts by comparing them against a standard concepts table in a SQL database. It identifies non-standard concepts and optionally saves the details of these non-standard concepts to a specified path. #' -#' @param db_connection A DBI database connection object to the SQL database containing the standard concepts table. This parameter is currently not used in the function but intended for future use where database queries might be necessary. +#' @param db_connection A database connection object to the SQL database containing the standard concepts table. This parameter is currently not used in the function but intended for future use where database queries might be necessary. #' @param conceptSet An object representing a set of concepts, containing details such as concept ID, concept name, and whether it is a standard concept. The structure of this object should support `@Expression` to access the individual concepts and their properties. #' @param save_path (Optional) The file path where the details of non-standard concepts should be saved as a CSV file. If not provided, the information will not be saved but will still be checked for non-standard concepts. #' @@ -18,7 +18,6 @@ isStandardCS <- function(db_connection, conceptSet, save_path = NULL) { library(readr) library(dplyr) - library(DBI) # Initialize vectors for non-standard concepts nonStandard <- c() @@ -53,7 +52,7 @@ isStandardCS <- function(db_connection, conceptSet, save_path = NULL) { concept_id, concept_set, standardness - ) + ) %>% dplyr::arrange(standardness, concept_id) # Save if not empty and save_path is provided if (!is.null(save_path) && nrow(df) > 0) { From abc374d3a585411b43834c2c1900c0617abff4df Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Wed, 28 Aug 2024 09:35:24 +0200 Subject: [PATCH 03/27] Add main script to run --- R/main.R | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 R/main.R diff --git a/R/main.R b/R/main.R new file mode 100644 index 0000000..533b3dc --- /dev/null +++ b/R/main.R @@ -0,0 +1,89 @@ +## Load libraries ============================================================== +library(RSQLite) +library(tibble) +library(DatabaseConnector) +library(CohortGenerator) +library(CirceR) +library(Capr) + + +## Set-up config =============================================================== +connectionConfig <- config::get( + config = 'config', file = './inst/config/connection_config.yml') +config_oth <- config::get( + config = 'config', file = './inst/config/config.yml') + + +## Connect to DB =============================================================== +# Use connection details from configuration +connectionDetails <- createConnectionDetails( + dbms = connectionConfig$dbms, + user = connectionConfig$user, + password = connectionConfig$password, + server = connectionConfig$server, + port = connectionConfig$port, + oracleDriver = connectionConfig$oracleDriver, + pathToDriver = connectionConfig$pathToDriver +) + + +## Concept sets ================================================================ +source("./R/conceptSets.R") + +# Establish connection +con <- connect(connectionDetails) + +conceptSets$conceptSets <- conceptSets$conceptSets %>% + # Add details for all concepts (excl. descendants) + lapply(FUN = getConceptSetDetails, + con = con, + vocabularyDatabaseSchema = connectionConfig$vocabulary_schema) + + +## Concept counts ============================================================== + +# Get countOccurrences function +source("./R/countOccurrences.R") + +# Get links between tables and fields as input +source("./R/table_linked_to_concept_field.R") + +uc1Counts <- + countOccurrences( + v = conceptSets$concepts$uc1, + tables = names(links), # Query all CDM tables + links = links, # Links between tables and concept_id fields (table:field) + db_connection = con, + cdm_schema = connectionConfig$cdm_schema, + vocab_schema = connectionConfig$vocabulary_schema, + save_path = config_oth$save_path_counts + ) + + +## Standard and non-standard concepts given a list of concept IDs ============== +# Return table of non-standard concepts +source('./R/isStandard.R') +nonStandard <- isStandard( + db_connection = con, + data_concepts_path = config_oth$concepts_path, + vocab_schema = connectionConfig$vocabulary_schema, + # (optional) Save the results (with standard and non-standard concepts) + save_path = config_oth$save_path_isStandard +) + + +## Standard and non-standard concepts given a concept set ====================== +# run for uc2 conceptSet +uc2 <- conceptSets$conceptSets$uc2 + +# check standardness across concept set +source('./R/isStandardCS.R') +nonStandardCS <- isStandardCS( + db_connection = con, + conceptSet = conceptSets$conceptSets$uc2, + # (optional) Save the results (with standard and non-standard concepts) + save_path = config_oth$save_path_isStandard +) + +# Disconnect +disconnect(con) \ No newline at end of file From 2e172fb0774d00e2118fd3aaee596dffb5d14fc6 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Wed, 28 Aug 2024 11:33:01 +0200 Subject: [PATCH 04/27] move and rename extdata --- .gitignore | 9 +- inst/config/config-sample.yml | 4 +- .../5.25_arterial_blood_gas.csv | 87 --- .../5.26_venous_blood_gas.csv | 87 --- .../5.28_patient_characteristics.csv | 87 --- .../phems_variable_list/5.30_treatments.csv | 85 --- .../5.31_surgery_specific_parameters.csv | 85 --- .../is_standard/5.10_cardiac_radiology.csv | 43 -- .../is_standard/5.11_cardiac_los.csv | 5 - .../is_standard/5.12_additional.csv | 36 -- .../is_standard/5.13_laboratory_tests.csv | 61 -- .../5.14_cardiac_complications.csv | 13 - .../is_standard/5.15_vital_signs.csv | 11 - .../is_standard/5.16_hsjd_clinical.csv | 9 - .../is_standard/5.17_hsjd_surgery.csv | 9 - .../is_standard/5.18_hsjd_hospitalisation.csv | 11 - .../is_standard/5.19_hsjd_complication.csv | 21 - ...e_use_diagnoses_procedures_current_eps.csv | 87 --- .../is_standard/5.22_vital_signs.csv | 21 - .../5.23_physical_examination_signs.csv | 36 -- .../5.24_laboratory_test_results_uc2.csv | 41 -- .../is_standard/5.25_arterial_blood_gas.csv | 12 - .../is_standard/5.26_venous_blood_gas.csv | 17 - .../5.28_patient_characteristics.csv | 15 - .../is_standard/5.29_lab_measurements_uc3.csv | 37 -- .../is_standard/5.30_treatments.csv | 13 - .../5.31_surgery_specific_parameters.csv | 5 - .../is_standard/5.3_vis_score_medications.csv | 7 - .../5.4_vasopressors_inotropes.csv | 12 - .../is_standard/5.5_immunosuppressants.csv | 7 - .../is_standard/5.6_antibiotic_medication.csv | 51 -- .../is_standard/5.7_antifungals.csv | 6 - .../is_standard/5.8_antibiotic_resistance.csv | 11 - .../is_standard/5.9_cardiac_surgery.csv | 42 -- .../5.10_cardiac_radiology.csv | 86 +-- .../original_tables}/5.11_cardiac_los.csv | 10 +- .../original_tables}/5.12_additional.csv | 74 +-- .../5.13_laboratory_tests.csv | 122 ++-- .../5.14_cardiac_complications.csv | 36 +- .../original_tables}/5.15_vital_signs.csv | 22 +- .../original_tables}/5.16_hsjd_clinical.csv | 18 +- .../original_tables}/5.17_hsjd_surgery.csv | 0 .../5.18_hsjd_hospitalisation.csv | 0 .../5.19_hsjd_complication.csv | 42 +- ...e_use_diagnoses_procedures_current_eps.csv | 176 ++--- .../original_tables}/5.22_vital_signs.csv | 176 ++--- .../5.23_physical_examination_signs.csv | 176 ++--- .../5.24_laboratory_test_results_uc2.csv | 174 ++--- .../5.25_arterial_blood_gas.csv | 87 +++ .../original_tables/5.26_venous_blood_gas.csv | 87 +++ .../5.28_patient_characteristics.csv | 87 +++ .../5.28_uc3_patient_characteristics.csv | 0 .../5.29_lab_measurements_uc3.csv | 74 +-- .../5.29_uc3_lab_measurements.csv | 2 +- .../original_tables/5.30_treatments.csv | 85 +++ .../original_tables}/5.30_uc3_treatments.csv | 2 +- .../5.31_surgery_specific_parameters.csv | 85 +++ .../original_tables}/5.31_uc3_surgery.csv | 2 +- .../5.3_vis_score_medications.csv | 16 +- .../5.4_vasopressors_inotropes.csv | 24 +- .../5.5_immunosuppressants.csv | 14 +- .../5.6_antibiotic_medication.csv | 102 +-- .../original_tables}/5.7_antifungals.csv | 12 +- .../5.8_antibiotic_resistance.csv | 22 +- .../original_tables}/5.9_cardiac_surgery.csv | 86 +-- inst/extdata/phems_variables_by_uc/uc1.csv | 278 ++++++++ inst/extdata/phems_variables_by_uc/uc2.csv | 602 ++++++++++++++++++ inst/extdata/phems_variables_by_uc/uc3.csv | 214 +++++++ inst/extdata/standardness/.gitkeep | 0 inst/templates/cohortCapr_md.Rmd | 29 +- 70 files changed, 2283 insertions(+), 1822 deletions(-) delete mode 100644 inst/extdata/phems_variable_list/5.25_arterial_blood_gas.csv delete mode 100644 inst/extdata/phems_variable_list/5.26_venous_blood_gas.csv delete mode 100644 inst/extdata/phems_variable_list/5.28_patient_characteristics.csv delete mode 100644 inst/extdata/phems_variable_list/5.30_treatments.csv delete mode 100644 inst/extdata/phems_variable_list/5.31_surgery_specific_parameters.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.10_cardiac_radiology.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.11_cardiac_los.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.12_additional.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.13_laboratory_tests.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.14_cardiac_complications.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.15_vital_signs.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.16_hsjd_clinical.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.17_hsjd_surgery.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.18_hsjd_hospitalisation.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.19_hsjd_complication.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.21_healthcare_use_diagnoses_procedures_current_eps.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.22_vital_signs.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.23_physical_examination_signs.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.24_laboratory_test_results_uc2.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.25_arterial_blood_gas.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.26_venous_blood_gas.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.28_patient_characteristics.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.29_lab_measurements_uc3.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.30_treatments.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.31_surgery_specific_parameters.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.3_vis_score_medications.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.4_vasopressors_inotropes.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.5_immunosuppressants.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.6_antibiotic_medication.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.7_antifungals.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.8_antibiotic_resistance.csv delete mode 100644 inst/extdata/phems_variable_list/is_standard/5.9_cardiac_surgery.csv rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.10_cardiac_radiology.csv (97%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.11_cardiac_los.csv (98%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.12_additional.csv (99%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.13_laboratory_tests.csv (95%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.14_cardiac_complications.csv (97%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.15_vital_signs.csv (89%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.16_hsjd_clinical.csv (97%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.17_hsjd_surgery.csv (100%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.18_hsjd_hospitalisation.csv (100%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.19_hsjd_complication.csv (98%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.21_healthcare_use_diagnoses_procedures_current_eps.csv (95%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.22_vital_signs.csv (52%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.23_physical_examination_signs.csv (78%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.24_laboratory_test_results_uc2.csv (77%) create mode 100644 inst/extdata/phems_variables_by_uc/original_tables/5.25_arterial_blood_gas.csv create mode 100644 inst/extdata/phems_variables_by_uc/original_tables/5.26_venous_blood_gas.csv create mode 100644 inst/extdata/phems_variables_by_uc/original_tables/5.28_patient_characteristics.csv rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.28_uc3_patient_characteristics.csv (100%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.29_lab_measurements_uc3.csv (95%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.29_uc3_lab_measurements.csv (99%) create mode 100644 inst/extdata/phems_variables_by_uc/original_tables/5.30_treatments.csv rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.30_uc3_treatments.csv (98%) create mode 100644 inst/extdata/phems_variables_by_uc/original_tables/5.31_surgery_specific_parameters.csv rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.31_uc3_surgery.csv (85%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.3_vis_score_medications.csv (90%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.4_vasopressors_inotropes.csv (95%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.5_immunosuppressants.csv (95%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.6_antibiotic_medication.csv (95%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.7_antifungals.csv (95%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.8_antibiotic_resistance.csv (96%) rename inst/extdata/{phems_variable_list => phems_variables_by_uc/original_tables}/5.9_cardiac_surgery.csv (98%) create mode 100644 inst/extdata/phems_variables_by_uc/uc1.csv create mode 100644 inst/extdata/phems_variables_by_uc/uc2.csv create mode 100644 inst/extdata/phems_variables_by_uc/uc3.csv create mode 100644 inst/extdata/standardness/.gitkeep diff --git a/.gitignore b/.gitignore index ccfd0c6..8628440 100644 --- a/.gitignore +++ b/.gitignore @@ -12,12 +12,17 @@ scratch/ inst/doc # project-specific +alphabetically_sort.py inst/config/* !inst/config/*-sample.yml inst/extdata/**/* -!inst/extdata/phems_variable_list +!inst/extdata/phems_variables_by_uc +!inst/extdata/phems_variables_by_uc/* +!inst/extdata/phems_variables_by_uc/*/* + +!inst/extdata/standardness !inst/extdata/json inst/extdata/json/* @@ -28,6 +33,8 @@ inst/extdata/standard_concepts/* !inst/extdata/vocabularies inst/extdata/vocabularies/* +R/process_ucs.R + !*.gitkeep renv \ No newline at end of file diff --git a/inst/config/config-sample.yml b/inst/config/config-sample.yml index 93cffcb..b8aac3a 100644 --- a/inst/config/config-sample.yml +++ b/inst/config/config-sample.yml @@ -3,8 +3,8 @@ # Default values are necessary for the `config` CRAN library, not used in package otherwise # No need to change these values default: - concepts_path: 'inst/extdata/phems_variable_list' # required for isStandard() function; specifies path to concept list directory with sourceCode and concept_id - save_path_isStandard: 'inst/extdata/phems_variable_list/is_standard' # (optional) if saving standard concept check results. Point to existing directory. + concepts_path: 'inst/extdata/phems_variables_by_table' # required for isStandard() function; specifies path to concept list directory with sourceCode and concept_id + save_path_isStandard: 'inst/extdata/phems_variables_by_table/is_standard' # (optional) if saving standard concept check results. Point to existing directory. save_path_json: 'inst/extdata/json' # (optional) if saving cohort and/or concept set as json). Point to existing directory ## Paths for CSVs of concepts and saves diff --git a/inst/extdata/phems_variable_list/5.25_arterial_blood_gas.csv b/inst/extdata/phems_variable_list/5.25_arterial_blood_gas.csv deleted file mode 100644 index 9db0156..0000000 --- a/inst/extdata/phems_variable_list/5.25_arterial_blood_gas.csv +++ /dev/null @@ -1,87 +0,0 @@ -sourceCode,concept_id -pH ,3019977  -pCO2 ,3027946  -pCO2 ,44777602  -pCO2 ,8876  -PaO2 ,3027801  -PaO2 ,44777602  -PaO2 ,8876  -HCO3 ,3008152  -HCO3 ,8753  -Base excess ,3003396  -Base excess ,8753  -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, diff --git a/inst/extdata/phems_variable_list/5.26_venous_blood_gas.csv b/inst/extdata/phems_variable_list/5.26_venous_blood_gas.csv deleted file mode 100644 index 610e92e..0000000 --- a/inst/extdata/phems_variable_list/5.26_venous_blood_gas.csv +++ /dev/null @@ -1,87 +0,0 @@ -sourceCode,concept_id, -pH ,3012544 , -pH ,3009343 , -pCO2 ,3021447 , -pCO2 ,3023024 , -pCO2 ,44777602 , -pCO2 ,8876 , -PaO2 ,3024354 , -PaO2 ,3028626 , -PaO2 ,44777602 , -PaO2 ,8876 , -HCO3 ,3027273 , -HCO3 ,3015235 , -HCO3 ,8753 , -Base excess,3002032 , -Base excess,3003129 , -Base excess,8753 , -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, diff --git a/inst/extdata/phems_variable_list/5.28_patient_characteristics.csv b/inst/extdata/phems_variable_list/5.28_patient_characteristics.csv deleted file mode 100644 index ee0ddb6..0000000 --- a/inst/extdata/phems_variable_list/5.28_patient_characteristics.csv +++ /dev/null @@ -1,87 +0,0 @@ -sourceCode,concept_id, -body weight ,3025315 , -body weight ,9529 , -body weight ,8504 , -height ,3036277 , -height ,8582 , -height ,9546 , -hemophilia A diagnosis ,434007 , -hemophilia A subtype/ severity ,4094223 , -hemophilia A subtype/ severity ,4140661 , -hemophilia A subtype/ severity ,4056830 , -blood group ,3003694 , -factor VIII inhibitor status ,37393608 , -factor VIII inhibitor status ,4126681 , -factor VIII inhibitor status ,9190 , -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, diff --git a/inst/extdata/phems_variable_list/5.30_treatments.csv b/inst/extdata/phems_variable_list/5.30_treatments.csv deleted file mode 100644 index 0dafecd..0000000 --- a/inst/extdata/phems_variable_list/5.30_treatments.csv +++ /dev/null @@ -1,85 +0,0 @@ -sourceCode,concept_id, -factor VIII  ,35766745 , -factor VIII  ,21154209 , -factor VIII  ,35831239 , -factor VIII  ,40745282 , -factor VIII  ,8985 , -factor VIII dose is continuous infusion or bolus dose ,40492862 , -factor VIII dose is continuous infusion or bolus dose ,4129275 , -factor VIII dose is continuous infusion or bolus dose ,4265597 , -desmopressin ,1517070 , -desmopressin ,9655 , -desmopressin ,8576 , -desmopressin ,9662 , -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, diff --git a/inst/extdata/phems_variable_list/5.31_surgery_specific_parameters.csv b/inst/extdata/phems_variable_list/5.31_surgery_specific_parameters.csv deleted file mode 100644 index 50ae5fb..0000000 --- a/inst/extdata/phems_variable_list/5.31_surgery_specific_parameters.csv +++ /dev/null @@ -1,85 +0,0 @@ -sourceCode,concept_id, -Medical/ surgical procedure ,45888085 , -NaCl administration during surgery ,967823 , -,8587 , -plasma administration during surgery ,4028665 , -datetime start anesthesia ,45888867 , -blood loss during surgery ,4308716 , -blood transfusion during surgery ,37017589 , -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, -,, diff --git a/inst/extdata/phems_variable_list/is_standard/5.10_cardiac_radiology.csv b/inst/extdata/phems_variable_list/is_standard/5.10_cardiac_radiology.csv deleted file mode 100644 index 133cfab..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.10_cardiac_radiology.csv +++ /dev/null @@ -1,43 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4019824,Transesophageal echocardiography,S,US transoesophageal echocardiogram (toe) -4032404,Bronchoscopy,S,IR bronchoscopy -4065416,Exercise tolerance test,S,Exercise test (non-CPET) -4345925,Videofluoroscopy swallow,S,FL video swallow -4083106,US scan of head,S,US cranial contents -4083108,US scan of neck,S,US neck -4082979,MRI of head,S,MRI head -4093436,Ultrasonography of thorax,S,US thorax and pleural cavity -4125350,CT of head,S,CT head -4125530,US urinary tract,S,US urinary tract -44802640,MRI study for cardiac congenital anomaly,S,MRI cardiac complex congenital -4163872,Plain chest X-ray,S,XR chest -4167029,Ultrasonography of inguinal region,S,US doppler groin both -4167052,Doppler ultrasonography of kidney,S,US doppler renal both -4305221,US scan of abdomen and pelvis,S,US abdomen and pelvis/ US abdomen -4303522,US scan of diaphragm,S,US diaphragmatic region -4306317,CT angiography of coronary artery with contrast,S,CT heart with contrast/ CT cardiac angiogram coronary/ CT cardiac gated with contrast -4169275,X-ray of chest and abdomen,S,XR chest and abdomen -4322380,Insertion of peripherally inserted central catheter,S,IR PICC line insertion -4140473,Holter extended electrocardiographic recording,S,24h holter monitor -4329508,Ultrasonography of pleural cavity,S,US thorax and pleural cavity -4335392,Doppler ultrasonography of vein of lower limb,S,US doppler lower limb veins both -4203365,Epicardial echocardiography,S,Epicardial echocardiogram -4335825,Transthoracic echocardiography,S,US transthoracic echocardiogram/ us transthoracic echocardiogram (pre- admission)/ US transthoracic echocardiogram (sedated) -40482732,Insertion of tunneled venous catheter,S,IR tunnelled central venous line insertion -40489841,Doppler ultrasonography of jugular vein,S,US doppler jugular vein both -40492338,Cardiopulmonary exercise test,S,Cardiopulmonary exercise test (CPET) -40488431,Interrogation of cardiac pacemaker,S,Pacemaker/ICD interrogation (in clinic)/ pacemaker/ICD interrogation (other) -42873079,Removal of tunneled central venous catheter,S,IR tunnelled central venous line removal -4261497,Ultrasonography of abdomen,S,US abdomen and pelvis/ US abdomen -4205144,Portable electroencephalogram,S,EEG routine portable -4181917,Electroencephalogram,S,EEG routine -4264477,Diagnostic radiography of abdomen,S,XR abdomen -45764527,Electrocardiographic Holter analyzer,S,24h holter monitor -45765560,Cardiovascular monitor,S,Event monitor -4327032,CT of thorax with contrast,S,CT thorax with contrast -35622931,Doppler ultrasound,S,US doppler groin both -35622931,Doppler ultrasound,S,US doppler -44813863,Ultrasonography of vocal cord,S,US vocal cord -4312208,Contrast bronchogram,S,IR bronchogram -4235141,Check artificial pacemaker,S,Pacemaker/ICD device check - remote patient initiated -4235141,Check artificial pacemaker,S,Pacemaker/ICD device check - remote device initiated diff --git a/inst/extdata/phems_variable_list/is_standard/5.11_cardiac_los.csv b/inst/extdata/phems_variable_list/is_standard/5.11_cardiac_los.csv deleted file mode 100644 index 1c4e01e..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.11_cardiac_los.csv +++ /dev/null @@ -1,5 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4123933,Admission to pediatric intensive care unit,S,ICU admission (start datetime and end datetime) -8715,Hospital admission,S,Total hospital admission (start datetime and end datetime) -4161811,Admission to high dependency unit,S,HDU admission (start datetime and end datetime) -36675203,Admission to pediatric cardiology department,S,Cardiology ward admission (start datetime and end datetime) diff --git a/inst/extdata/phems_variable_list/is_standard/5.12_additional.csv b/inst/extdata/phems_variable_list/is_standard/5.12_additional.csv deleted file mode 100644 index 0948628..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.12_additional.csv +++ /dev/null @@ -1,36 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4124462,None,S,"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure" -4095105,Base deficit measurement,S,Base Excess -4123933,Admission to pediatric intensive care unit,S,Elective ICU admission -4234469,Diagnosis,S,Diagnoses -40493026,Mechanical ventilator,S,Mechanical ventilation -44803020,Primary reason for admission,S,"Reason for ICU admission: (Main reason for ICU admission is not recovery from surgery or a procedure, Recovery from a bypass cardiac procedure, recovery from a non-bypass cardiac procedure, recovery from non-cardiac procedure)" -4209008,Pupillary function,S,Pupillary reaction -260134,Croup,S,"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder" -432571,Malignant lymphoma,S,"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure" -4029498,Seizure disorder,S,"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder" -317009,Asthma,S,"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder" -201957,Necrotizing enterocolitis in fetus OR newborn,S,"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis)" -43530727,Spontaneous cerebral hemorrhage,S,"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis)" -29783,Severe combined immunodeficiency disease,S,"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure" -321042,Cardiac arrest,S,"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure" -4165112,Bronchiolitis,S,"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder" -443727,Diabetic ketoacidosis,S,"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder" -314383,Myocarditis,S,"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis)" -4245975,Hepatic failure,S,"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure" -440207,Hypoplastic left heart syndrome,S,"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis)" -42537745,Bone marrow transplant present,S,"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure" -442588,Obstructive sleep apnea syndrome,S,"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder" -4213310,Degenerative disease of the central nervous system,S,"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis)" -321319,Cardiomyopathy,S,"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis)" -317510,Leukemia,S,"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure" -44777602,kilopascal,S,PaCO2 -9202,Outpatient Visit,S,"Outpatient appointments start datetime, end datetime" -8554,percent,S,FiO2 -8876,millimeter mercury column,S,Systolic blood pressure -8876,millimeter mercury column,S,PaCO2 -8753,millimole per liter,S,Base Excess -5083,Telehealth,S,Outpatient appointment type (telephone/ clinic visit etc.) -42869590,Oxygen/Gas total [Pure volume fraction] Inhaled gas,S,FiO2 -3027946,Carbon dioxide [Partial pressure] in Arterial blood,S,PaCO2 -3004249,Systolic blood pressure,S,Systolic blood pressure diff --git a/inst/extdata/phems_variable_list/is_standard/5.13_laboratory_tests.csv b/inst/extdata/phems_variable_list/is_standard/5.13_laboratory_tests.csv deleted file mode 100644 index b3cf642..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.13_laboratory_tests.csv +++ /dev/null @@ -1,61 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -37399161,Blood arterial pH,S,pH (arterial) -37392672,Blood venous pH,S,pH (venous) -4267147,Platelet count,S,Platelet count -4298431,White blood cell count,S,Immature WBC count -8713,gram per deciliter,S,Hemoglobin -8713,gram per deciliter,S,Albumin -8636,gram per liter,S,Hemoglobin -8636,gram per liter,S,Albumin -44777602,kilopascal,S,pCO2 (venous) -8751,milligram per liter,S,CRP -8554,percent,S,Hematocrit -8840,milligram per deciliter,S,Creatinine -8876,millimeter mercury column,S,pCO2 (venous) -8876,millimeter mercury column,S,pCO2 (arterial) -8876,millimeter mercury column,S,pO2 (venous) -8876,millimeter mercury column,S,pO2 (arterial) -8753,millimole per liter,S,Lactate -8753,millimole per liter,S,Blood urea nitrogen -8753,millimole per liter,S,Glucose -8753,millimole per liter,S,Sodium -8753,millimole per liter,S,Potassium -8753,millimole per liter,S,Magnesium -8753,millimole per liter,S,Chloride -8753,millimole per liter,S,Calcium -8753,millimole per liter,S,Phosphate -8753,millimole per liter,S,Bicarbonate (venous) -8753,millimole per liter,S,Bicarbonate (arterial) -8555,second,S,INR prothrombin time -8647,per microliter,S,Immature WBC count -8647,per microliter,S,Neutrophil count -8647,per microliter,S,Platelet count -8645,unit per liter,S,ALT -8645,unit per liter,S,AST -8749,micromole per liter,S,Creatinine -8749,micromole per liter,S,Bilirubin -3005456,Potassium [Moles/volume] in Blood,S,Potassium -3018572,Chloride [Moles/volume] in Blood,S,Chloride -3051825,Creatinine [Mass/volume] in Blood,S,Creatinine -3027273,Bicarbonate [Moles/volume] in Venous blood,S,Bicarbonate (venous) -3006140,Bilirubin.total [Moles/volume] in Serum or Plasma,S,Bilirubin -3013826,Glucose [Moles/volume] in Serum or Plasma,S,Glucose -3003458,Phosphate [Moles/volume] in Serum or Plasma,S,Phosphate -3024641,Urea nitrogen [Moles/volume] in Serum or Plasma,S,Blood urea nitrogen -3006923,Alanine aminotransferase [Enzymatic activity/volume] in Serum or Plasma,S,ALT -3024561,Albumin [Mass/volume] in Serum or Plasma,S,Albumin -3013721,Aspartate aminotransferase [Enzymatic activity/volume] in Serum or Plasma,S,AST -3008152,Bicarbonate [Moles/volume] in Arterial blood,S,Bicarbonate (arterial) -3020460,C reactive protein [Mass/volume] in Serum or Plasma,S,CRP -3015377,Calcium [Moles/volume] in Serum or Plasma,S,Calcium -3027946,Carbon dioxide [Partial pressure] in Arterial blood,S,pCO2 (arterial) -3021447,Carbon dioxide [Partial pressure] in Venous blood,S,pCO2 (venous) -3009542,Hematocrit [Volume Fraction] of Blood,S,Hematocrit -3033836,Magnesium [Moles/volume] in Blood,S,Magnesium -3027801,Oxygen [Partial pressure] in Arterial blood,S,pO2 (arterial) -3024354,Oxygen [Partial pressure] in Venous blood,S,pO2 (venous) -3019550,Sodium [Moles/volume] in Serum or Plasma,S,Sodium -3047181,Lactate [Moles/volume] in Blood,S,Lactate -3007670,Neutrophil Ab [Units/volume] in Serum,S,Neutrophil count -3034426,Prothrombin time (PT),S,INR prothrombin time -40762351,Hemoglobin [Moles/volume] in Blood,S,Hemoglobin diff --git a/inst/extdata/phems_variable_list/is_standard/5.14_cardiac_complications.csv b/inst/extdata/phems_variable_list/is_standard/5.14_cardiac_complications.csv deleted file mode 100644 index da4a9fc..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.14_cardiac_complications.csv +++ /dev/null @@ -1,13 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4051330,Continuous venovenous hemofiltration,S,LCOS - renal support (CVVH/ PD) -4123933,Admission to pediatric intensive care unit,S,ICU ward stay -4295705,Exploratory incision,S,Surgical injury - Reexplore for bleeding -377091,Seizure,S,Neurological injury - seizure -439847,Intracranial hemorrhage,S,Neurological injury - intracranial haemmhorage/ intracranial bleeding -4308537,Injury to blood vessel during surgery,S,Surgical injury - Blood Loss -321042,Cardiac arrest,S,LCOS - Cardiac arrest -443454,Cerebral infarction,S,Neurological injury - infarction -4185565,Low cardiac output syndrome,S,Low cardiac output state (LCOS) - ECMO -4185565,Low cardiac output syndrome,S,LCOS - NEC requiring treatment -42537043,CLABSI - central line associated bloodstream infection,S,CVL infections -4306136,Chylothorax,S,Surgical injury - Chylothorax diff --git a/inst/extdata/phems_variable_list/is_standard/5.15_vital_signs.csv b/inst/extdata/phems_variable_list/is_standard/5.15_vital_signs.csv deleted file mode 100644 index e44116e..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.15_vital_signs.csv +++ /dev/null @@ -1,11 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4096101,Measurement of oxygen saturation at periphery,S,SpO2 -8483,counts per minute,S,Age-dependent HR -8483,counts per minute,S,Age-dependent RR -8554,percent,S,SpO2 -8876,millimeter mercury column,S,SBP (Systolic Blood Pressure) -8876,millimeter mercury column,S,DBP (Dyastolic Blood Pressure) -3027018,Heart rate,S,Age-dependent HR -3012888,Diastolic blood pressure,S,DBP (Dyastolic Blood Pressure) -3004249,Systolic blood pressure,S,SBP (Systolic Blood Pressure) -3024171,Respiratory rate,S,Age-dependent RR diff --git a/inst/extdata/phems_variable_list/is_standard/5.16_hsjd_clinical.csv b/inst/extdata/phems_variable_list/is_standard/5.16_hsjd_clinical.csv deleted file mode 100644 index 8644002..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.16_hsjd_clinical.csv +++ /dev/null @@ -1,9 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4201235,Body surface area,S,Body Surface Area (BSA) - Combination of weight and height -4275564,Operation on heart,S,Cardiac surgeries (Interventions) -8582,centimeter,S,Height -9529,kilogram,S,Weight -8617,square meter,S,Body Surface Area (BSA) - Combination of weight and height -3025315,Body weight,S,Weight -3036277,Body height,S,Height -0,No matching concept,NA,Extracardiac anomalies - diagnoses diff --git a/inst/extdata/phems_variable_list/is_standard/5.17_hsjd_surgery.csv b/inst/extdata/phems_variable_list/is_standard/5.17_hsjd_surgery.csv deleted file mode 100644 index 2b0734a..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.17_hsjd_surgery.csv +++ /dev/null @@ -1,9 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -44790138,Induced circulatory arrest,S,"Deep hypothermic circulatory arrest start datetime, end datetime" -4336464,Coronary artery bypass graft,S,"Cardiac bypass start datetime, end datetime" -4150627,Removal of endotracheal tube,S,Extubation event -4201547,Placement of arterial cross clamp,S,"Cross-clamping start datetime, end datetime" -4301351,Surgical procedure,S,"Surgery start datetime, end datetime" -40490494,Society of Thoracic Surgeons risk calculator,S,STAT/EACTS score of surgery -4272324,Cardiopulmonary bypass operation,S,"Antegrade Cerebral Perfusion start datetime, end datetime" -0,No matching concept,NA,Aristotle's score of surgery diff --git a/inst/extdata/phems_variable_list/is_standard/5.18_hsjd_hospitalisation.csv b/inst/extdata/phems_variable_list/is_standard/5.18_hsjd_hospitalisation.csv deleted file mode 100644 index db64d22..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.18_hsjd_hospitalisation.csv +++ /dev/null @@ -1,11 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -37158404,Invasive mechanical ventilation,S,Invasive Mechanical Ventilation LOS -4177224,Non-invasive ventilation,S,Non-Invasive Mechanical Ventilation LOS -44803020,Primary reason for admission,S,Admission reason -4179206,Central venous catheter,S,"Postop central venous catheter in/start datetime, out/ end datetime" -42539650,Administration of intravenous vasoactive drug,S,"Vasoactive infusion start datetime, end datetime" -0,No matching concept,NA,ventilation -0,No matching concept,NA,Type of vasoactive infusion -0,No matching concept,NA,VIS score of vasoactive infusion -0,No matching concept,NA,"Total ventilation start datetime, end datetime" -794078,vasoactive intestinal peptide,S,Dose of vasoactive infusion (rate - mcg/kg/hr) diff --git a/inst/extdata/phems_variable_list/is_standard/5.19_hsjd_complication.csv b/inst/extdata/phems_variable_list/is_standard/5.19_hsjd_complication.csv deleted file mode 100644 index 99ee99f..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.19_hsjd_complication.csv +++ /dev/null @@ -1,21 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4044892,Procedure on sternum,S,Sternum reopening (procedure undertaken) -4046868,Vocal cord dysfunction,S,Vocal Cord Dysfunction -4049398,Temporary cardiac pacemaker procedure,S,"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing)" -4051940,Permanent cardiac pacemaker procedure,S,"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing)" -4353741,Cardioversion,S,"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing)" -4117045,Atrial overdrive pacing,S,"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing)" -253796,Pneumothorax,S,Pneumothorax -609312,Awaiting transplantation of heart,S,Listed for heart transplantation -4202832,Intubation,S,intubation -315643,Tachyarrhythmia,S,"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.)" -4275564,Operation on heart,S,Cardiac surgeries (interventions) -44783799,Exteriorization of trachea,S,Tracheostomy -44784217,Cardiac arrhythmia,S,"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.)" -4068155,Atrial arrhythmia,S,"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.)" -4228448,Bradyarrhythmia,S,"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.)" -4185572,Ventricular arrhythmia,S,"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.)" -4275136,Paralysis of diaphragm,S,Diaphragmatic Paralysis -46234437,ivabradine,S,"Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide)" -1354860,flecainide,S,"Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide)" -1309944,amiodarone,S,"Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide)" diff --git a/inst/extdata/phems_variable_list/is_standard/5.21_healthcare_use_diagnoses_procedures_current_eps.csv b/inst/extdata/phems_variable_list/is_standard/5.21_healthcare_use_diagnoses_procedures_current_eps.csv deleted file mode 100644 index 0bb6e4c..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.21_healthcare_use_diagnoses_procedures_current_eps.csv +++ /dev/null @@ -1,87 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -37174269,At increased risk of sepsis,S,Diagnosis of acute infection having the potential for progression to sepsis1+2 -4032243,Dialysis procedure,S,Dialysis -197320,Acute kidney injury,S,acute kidney injury -4074689,Open drainage of pleural cavity,S,"Chest opening, chest drainage" -4084670,Non-urgent surgical admission,S,Surgical admission (non-urgent) -4070667,Urinary catheter,S,Urinary catheter -44790095,Invasive ventilation,S,Invasive ventilation -4052536,Extracorporeal membrane oxygenation,S,ECMO -4051330,Continuous venovenous hemofiltration,S,Dialysis -44790567,Patient transfer from hospital to hospital,S,Origin (external) -133327,Viremia,S,viremia -4097216,Endotracheal tube,S,Endotracheal tube -4085730,Antibiotic therapy,S,Antibiotics -4123946,Admission to surgical department,S,Surgical admission (urgent) -4208341,Solid organ transplant,S,organ transplant -4193843,Oxygenation index measurement,S,Oxygenation index -4235043,Ventricular assist device,S,Ventricular assist device (VAD) -443392,Malignant neoplastic disease,S,Cancer -4181511,Administration of antineoplastic agent,S,Antineoplastics -4294886,"Patient transfer, in-hospital",S,Origin (internal) -4301351,Surgical procedure,S,Surgery previous to prediction time point -4140762,Antiviral therapy,S,Antivirals -4177205,Cannulation,S,Peripheral IV cannulas -4177224,Non-invasive ventilation,S,Non-invasive ventilation -45758028,Arterial blood pressure catheter,S,Arterial blood pressure catheter -44803020,Primary reason for admission,S,Reason for admission -4179206,Central venous catheter,S,Central venous catheter -132736,Bacteremia,S,bacteremia -44783799,Exteriorization of trachea,S,Tracheostomy -45768671,Asplenia,S,asplenia -4324124,Peritoneal dialysis,S,Peritoneal dialysis -435785,Meningitis,S,meningitis -201820,Diabetes mellitus,S,Diagnosis of chronic condition -42538045,Nasogastric/orogastric tube stylet,S,Nasogastric/orogastric tube -37206601,Venoarterial extracorporeal membrane oxygenation,S,ECMO type -37206603,Venovenous extracorporeal membrane oxygenation,S,ECMO type -4314777,Immunosuppressive therapy,S,Immunosuppressors -604243,Acquired neutropenia,S,neutropenia -444187,Open wound,S,injury with open wound -22281,Sickle cell-hemoglobin SS disease,S,sickle cell disease -435613,Cellulitis,S,cellulitis -4134120,Cerebral palsy,S,cerebral palsy -444202,Abscess,S,Abcess -312723,Congenital heart disease,S,Diagnosis of chronic condition -255573,Chronic obstructive lung disease,S,Diagnosis of chronic condition -255848,Pneumonia,S,pneumonia -433740,Immunodeficiency disorder,S,immunodeficiency -4080011,Organ dysfunction syndrome,S,Diagnosis of organ system dysfunction -434821,Systemic inflammatory response syndrome,S,Diagnosis of SIRS -81539,Mitochondrial cytopathy,S,mitochondrial disease -4103588,Acute tuberculosis,S,tuberculosis -443783,Chronic disease,S,Diagnosis of chronic condition -4140977,Secondary immune deficiency disorder,S,Diagnosis of condition producing immunodeficiency -201606,Crohn's disease,S,Crohn's disease -4243475,Acute hepatitis,S,hepatitis -4300243,Postoperative complication,S,surgical site inflammation -439125,Complete trisomy 21 syndrome,S,Down's syndrome -321042,Cardiac arrest,S,cardiac arrest -4331815,Acute urinary tract infection,S,UTI -195212,Hypercortisolism,S,Cushing's disease -196152,Peritonitis,S,peritonitis -314383,Myocarditis,S,miocarditis -195314,Nephrotic syndrome,S,nephrotic syndrome -441589,Endocarditis,S,endocarditis -4271450,Acute infectious disease,S,Diagnosis of acute infection having the potential for progression to sepsis1+2 -81893,Ulcerative colitis,S,ulcerative colitis -80809,Rheumatoid arthritis,S,rheumatoid arthritis -4322814,Meningoencephalitis,S,Meningo-encephalitis -36716945,Renal insufficiency,S,renal insufficiency -440448,Appendicitis,S,appendicitis -433968,Candidiasis,S,candidiasis -44807226,Necrotising enterocolitis,S,necrotizing enterocolitis -132797,Sepsis,S,Previous diagnosis of sepsis measure -44777590,centimeter watercolumn,S,Mean Airway Pressure (MAP) -44777602,kilopascal,S,Mean Airway Pressure (MAP) -8510,unit,S,FiO2 -8554,percent,S,FiO2 -720868,fraction,S,FiO2 -8529,index,S,Oxygenation index -8876,millimeter mercury column,S,Mean Airway Pressure (MAP) -21602722,CORTICOSTEROIDS FOR SYSTEMIC USE,C,Corticoids -42869590,Oxygen/Gas total [Pure volume fraction] Inhaled gas,S,FiO2 -42527086,Mean airway pressure,S,Mean Airway Pressure (MAP) -0,No matching concept,NA,Non-surgical admission -0,No matching concept,NA,Oxygenation index -1340204,History of event,S,Previous diagnosis of sepsis measure diff --git a/inst/extdata/phems_variable_list/is_standard/5.22_vital_signs.csv b/inst/extdata/phems_variable_list/is_standard/5.22_vital_signs.csv deleted file mode 100644 index a7b3fb8..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.22_vital_signs.csv +++ /dev/null @@ -1,21 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4096101,Measurement of oxygen saturation at periphery,S,SpO2 -8483,counts per minute,S,HR -8483,counts per minute,S,RR -9529,kilogram,S,Weight -8554,percent,S,SpO2 -586323,degree Celsius,S,Body temperature -8504,gram,S,Weight -8587,milliliter,S,Urine output -44777613,milliliter per hour,S,Urine output -33014,milliliter per kilogram per 24 hours,S,Urine output -8876,millimeter mercury column,S,SBP (Systolic Blood Pressure) -8876,millimeter mercury column,S,DBP (Diastolic blood pressure) -3025315,Body weight,S,Weight -3020891,Body temperature,S,Body temperature -3012888,Diastolic blood pressure,S,DBP (Diastolic blood pressure) -3004249,Systolic blood pressure,S,SBP (Systolic Blood Pressure) -3014315,Urine output,S,Urine output -3024171,Respiratory rate,S,RR -1004025,Heart rate,C,HR -0,No matching concept,NA,Urine output diff --git a/inst/extdata/phems_variable_list/is_standard/5.23_physical_examination_signs.csv b/inst/extdata/phems_variable_list/is_standard/5.23_physical_examination_signs.csv deleted file mode 100644 index a66fcfe..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.23_physical_examination_signs.csv +++ /dev/null @@ -1,36 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4069590,Normal,S,Pupillary reactivity (right) -4069590,Normal,S,Pupillary reactivity (left) -4116857,Medium,S,Pupillary size (right) -4116857,Medium,S,Pupillary size (left) -4124461,Weak,S,Peripheral pulse (pressure) -4124461,Weak,S,Central pulse -4132135,Absent,S,Peripheral pulse (pressure) -4132135,Absent,S,Central pulse -4188539,Yes,S,Pupillary reactivity (right) -4188539,Yes,S,Pupillary reactivity (left) -4188540,No,S,Pupillary reactivity (right) -4188540,No,S,Pupillary reactivity (left) -4181412,Present,S,Peripheral pulse (pressure) -4181412,Present,S,Central pulse -4224504,Pulse,S,Central pulse -4314539,Arterial pulse pressure,S,Peripheral pulse (pressure) -8483,counts per minute,S,Peripheral pulse (pressure) -8483,counts per minute,S,Central pulse -8588,millimeter,S,Pupillary size (right) -8588,millimeter,S,Pupillary size (left) -8555,second,S,Capillary refill time -21490963,Right pupil Pupillary response,S,Pupillary reactivity (right) -45879546,Sluggish,S,Pupillary reactivity (right) -45879546,Sluggish,S,Pupillary reactivity (left) -21499034,Dilated,S,Pupillary size (right) -21499034,Dilated,S,Pupillary size (left) -36310446,Constricted,S,Pupillary size (right) -36310446,Constricted,S,Pupillary size (left) -45880051,Unresponsive,S,Pupillary reactivity (right) -45880051,Unresponsive,S,Pupillary reactivity (left) -3032652,Glasgow coma scale,S,GCS -3045676,Capillary refill [Time],S,Capillary refill time -21491763,Left pupil Pupillary response,S,Pupillary reactivity (left) -3021415,Left pupil Diameter Auto,S,Pupillary size (left) -3027214,Right pupil Diameter Auto,S,Pupillary size (right) diff --git a/inst/extdata/phems_variable_list/is_standard/5.24_laboratory_test_results_uc2.csv b/inst/extdata/phems_variable_list/is_standard/5.24_laboratory_test_results_uc2.csv deleted file mode 100644 index a323de0..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.24_laboratory_test_results_uc2.csv +++ /dev/null @@ -1,41 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -37393605,D-dimer level,S,D-dimer -4017361,Blood urea nitrogen measurement,S,Blood urea nitrogen -4036356,Detection of bacteria,S,Bacterial pathogen detection -44789220,Ionised calcium measurement,S,Ionized calcium -4094436,Fibrinogen measurement,S,Fibrinogen -4118986,Bilirubin measurement,S,Direct bilirubin -4196268,Polymerase chain reaction observation,S,PCR panel -4196268,Polymerase chain reaction observation,S,PCR panel -440029,Viral disease,S,Viral pathogen detection -4212899,Total white blood count,S,Leukocytes -4175016,"Partial thromboplastin time, activated",S,Thromboplastin time -42536081,Adrenal medulla hormone,S,MR-proADM -4299649,Quantitative microbial culture and measurement,S,Quantification of colonies in culture -44806682,Infection resistant to multiple antibiotics,S,Antibiotic resistance -432545,Bacterial infectious disease,S,Name of bacterial pathogen detected -8636,gram per liter,S,Fibrinogen -8751,milligram per liter,S,D-dimer -8845,picogram per milliliter,S,Interleukin-6 -9278,colony forming unit,S,Quantification of colonies in culture -9278,colony forming unit,S,Leukocytes -8840,milligram per deciliter,S,Blood urea nitrogen -8840,milligram per deciliter,S,Glucose -8840,milligram per deciliter,S,Direct bilirubin -8753,millimole per liter,S,D-dimer -8753,millimole per liter,S,Fibrinogen -8753,millimole per liter,S,Blood urea nitrogen -8753,millimole per liter,S,Glucose -8753,millimole per liter,S,Direct bilirubin -8753,millimole per liter,S,Ionized calcium -8725,nanogram per liter,S,PCT -8842,nanogram per milliliter,S,PCT -8736,nanomole per liter,S,MR-proADM -8523,ratio,S,Thromboplastin time -8555,second,S,Thromboplastin time -8748,microgram per liter,S,PCT -8749,micromole per liter,S,Direct bilirubin -3013826,Glucose [Moles/volume] in Serum or Plasma,S,Glucose -3046279,Procalcitonin [Mass/volume] in Serum or Plasma,S,PCT -3033291,Interleukin 6 [Mass/volume] in Body fluid,S,Interleukin-6 -0,No matching concept,NA,Leukocytes diff --git a/inst/extdata/phems_variable_list/is_standard/5.25_arterial_blood_gas.csv b/inst/extdata/phems_variable_list/is_standard/5.25_arterial_blood_gas.csv deleted file mode 100644 index f210788..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.25_arterial_blood_gas.csv +++ /dev/null @@ -1,12 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -44777602,kilopascal,S,pCO2 -44777602,kilopascal,S,PaO2 -8876,millimeter mercury column,S,pCO2 -8876,millimeter mercury column,S,PaO2 -8753,millimole per liter,S,HCO3 -8753,millimole per liter,S,Base excess -3003396,Base excess in Arterial blood by calculation,S,Base excess -3019977,pH of Arterial blood,S,pH -3008152,Bicarbonate [Moles/volume] in Arterial blood,S,HCO3 -3027946,Carbon dioxide [Partial pressure] in Arterial blood,S,pCO2 -3027801,Oxygen [Partial pressure] in Arterial blood,S,PaO2 diff --git a/inst/extdata/phems_variable_list/is_standard/5.26_venous_blood_gas.csv b/inst/extdata/phems_variable_list/is_standard/5.26_venous_blood_gas.csv deleted file mode 100644 index 24d44bb..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.26_venous_blood_gas.csv +++ /dev/null @@ -1,17 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -44777602,kilopascal,S,pCO2 -44777602,kilopascal,S,PaO2 -8876,millimeter mercury column,S,pCO2 -8876,millimeter mercury column,S,PaO2 -8753,millimole per liter,S,HCO3 -8753,millimole per liter,S,Base excess -3009343,pH of Capillary blood,S,pH -3027273,Bicarbonate [Moles/volume] in Venous blood,S,HCO3 -3003129,Base excess in Capillary blood by calculation,S,Base excess -3002032,Base excess in Venous blood by calculation,S,Base excess -3015235,Bicarbonate [Moles/volume] in Capillary blood,S,HCO3 -3023024,Carbon dioxide [Partial pressure] in Capillary blood,S,pCO2 -3021447,Carbon dioxide [Partial pressure] in Venous blood,S,pCO2 -3028626,Oxygen [Partial pressure] in Capillary blood,S,PaO2 -3024354,Oxygen [Partial pressure] in Venous blood,S,PaO2 -3012544,pH of Venous blood,S,pH diff --git a/inst/extdata/phems_variable_list/is_standard/5.28_patient_characteristics.csv b/inst/extdata/phems_variable_list/is_standard/5.28_patient_characteristics.csv deleted file mode 100644 index 0a307ec..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.28_patient_characteristics.csv +++ /dev/null @@ -1,15 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -37393608,Factor VIII inhibitor activity,S,factor VIII inhibitor status -4126681,Detected,S,factor VIII inhibitor status -9190,Not detected,S,factor VIII inhibitor status -4056830,Severe hereditary factor VIII deficiency disease,S,hemophilia A subtype/ severity -4094223,Mild hereditary factor VIII deficiency disease,S,hemophilia A subtype/ severity -434007,Hereditary factor VIII deficiency disease,S,hemophilia A diagnosis -4140661,Moderate hereditary factor VIII deficiency disease,S,hemophilia A subtype/ severity -8582,centimeter,S,height -9529,kilogram,S,body weight -8504,gram,S,body weight -9546,meter,S,height -3025315,Body weight,S,body weight -3036277,Body height,S,height -3003694,ABO and Rh group [Type] in Blood,S,blood group diff --git a/inst/extdata/phems_variable_list/is_standard/5.29_lab_measurements_uc3.csv b/inst/extdata/phems_variable_list/is_standard/5.29_lab_measurements_uc3.csv deleted file mode 100644 index f5b3ed5..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.29_lab_measurements_uc3.csv +++ /dev/null @@ -1,37 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4175016,"Partial thromboplastin time, activated",S,activated partial thromboplastin time (APTT) -4267147,Platelet count,S,platelet count -8636,gram per liter,S,fibrinogen -44777604,liter per liter,S,hematocrit -8554,percent,S,factor VIII activity measurement -8554,percent,S,Von Willebrand factor activity measurement -8554,percent,S,Von Willebrand factor antigen measurement -8554,percent,S,Prothrombin time (PT) -8554,percent,S,hematocrit -44777588,billion cells per liter,S,platelet count -44777562,Bethesda unit per milliliter,S,factor VIII inhibitor titer -9332,international unit per deciliter,S,factor VIII activity measurement -9332,international unit per deciliter,S,Von Willebrand factor activity measurement -9332,international unit per deciliter,S,Von Willebrand factor antigen measurement -8985,international unit per milliliter,S,factor VIII activity measurement -8985,international unit per milliliter,S,Von Willebrand factor activity measurement -8985,international unit per milliliter,S,Von Willebrand factor antigen measurement -8523,ratio,S,activated partial thromboplastin time (APTT) -8523,ratio,S,Prothrombin time (PT) -8555,second,S,activated partial thromboplastin time (APTT) -8555,second,S,Prothrombin time (PT) -8645,unit per liter,S,ALT -8645,unit per liter,S,AST -8763,unit per milliliter,S,Von Willebrand factor propeptide measurement -3024942,Coagulation factor VIII inhibitor [Units/volume] in Platelet poor plasma by Coagulation assay,S,factor VIII inhibitor titer -3011832,Coagulation factor VIII activity [Units/volume] in Platelet poor plasma by Chromogenic method,S,factor VIII activity measurement -3006923,Alanine aminotransferase [Enzymatic activity/volume] in Serum or Plasma,S,ALT -3013721,Aspartate aminotransferase [Enzymatic activity/volume] in Serum or Plasma,S,AST -3009542,Hematocrit [Volume Fraction] of Blood,S,hematocrit -3022520,Coagulation factor VIII activated [Units/volume] in Platelet poor plasma by Coagulation assay,S,factor VIII activity measurement -3016407,Fibrinogen [Mass/volume] in Platelet poor plasma by Coagulation assay,S,fibrinogen -3042349,von Willebrand factor (vWf) cleaving protease inhibitor [Units/volume] in Platelet poor plasma,S,Von Willebrand factor propeptide measurement -3034426,Prothrombin time (PT),S,Prothrombin time (PT) -3002124,von Willebrand factor (vWf) Ag [Units/volume] in Platelet poor plasma by Immunoassay,S,Von Willebrand factor antigen measurement -3023693,von Willebrand factor (vWf) multimers in Platelet poor plasma by Immunoblot,S,Von Willebrand factor propeptide measurement -43534000,von Willebrand factor (vWf).activity [Units/volume] in Platelet poor plasma by Immunoassay,S,Von Willebrand factor activity measurement diff --git a/inst/extdata/phems_variable_list/is_standard/5.30_treatments.csv b/inst/extdata/phems_variable_list/is_standard/5.30_treatments.csv deleted file mode 100644 index 4bbe00a..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.30_treatments.csv +++ /dev/null @@ -1,13 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4129275,Continuous infusion,S,factor VIII dose is continuous infusion or bolus dose -4265597,Single bolus,S,factor VIII dose is continuous infusion or bolus dose -40492862,Method of drug administration,S,factor VIII dose is continuous infusion or bolus dose -9655,microgram,S,desmopressin -8985,international unit per milliliter,S,factor VIII -8576,milligram,S,desmopressin -9662,microgram per kilogram,S,desmopressin -1517070,desmopressin,S,desmopressin -21154209,Factor VIII 2000 UNT Injection [Kogenate Bayer],S,factor VIII -35766745,Factor VIII 250 UNT Injection [Advate],S,factor VIII -40745282,emicizumab 150 MG/ML Injectable Solution [Hemlibra],S,factor VIII -35831239,factor VII 250 UNT Injection [Eloctate],S,factor VIII diff --git a/inst/extdata/phems_variable_list/is_standard/5.31_surgery_specific_parameters.csv b/inst/extdata/phems_variable_list/is_standard/5.31_surgery_specific_parameters.csv deleted file mode 100644 index 60a64e1..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.31_surgery_specific_parameters.csv +++ /dev/null @@ -1,5 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4028665,Transfusion of plasma,S,plasma administration during surgery -4308716,Intraoperative hemorrhage,S,blood loss during surgery -37017589,Bleeding during surgery requiring transfusion,S,blood transfusion during surgery -967823,sodium chloride,S,NaCl administration during surgery diff --git a/inst/extdata/phems_variable_list/is_standard/5.3_vis_score_medications.csv b/inst/extdata/phems_variable_list/is_standard/5.3_vis_score_medications.csv deleted file mode 100644 index 6671e32..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.3_vis_score_medications.csv +++ /dev/null @@ -1,7 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -1507835,vasopressin (USP),S,vasopressin -1337720,dobutamine,S,dobutamine -1337860,dopamine,S,dopamine -1343916,epinephrine,S,epinephrine -1368671,milrinone,S,milrinone -1321341,norepinephrine,S,norepinephrin diff --git a/inst/extdata/phems_variable_list/is_standard/5.4_vasopressors_inotropes.csv b/inst/extdata/phems_variable_list/is_standard/5.4_vasopressors_inotropes.csv deleted file mode 100644 index 2cf1ddc..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.4_vasopressors_inotropes.csv +++ /dev/null @@ -1,12 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -1507835,vasopressin (USP),S,Vasopressin -1337720,dobutamine,S,Dobutamine -1337860,dopamine,S,Dopamine -1143374,ephedrine,S,Ephedrine -1343916,epinephrine,S,Epinephrine -1368671,milrinone,S,Milrinone -19119253,terlipressin,S,Terlipressin -1183554,isoproterenol,S,Isoproterenol -40173184,levosimendan,S,Levosimendan -1321341,norepinephrine,S,Norepinephrine -1135766,phenylephrine,S,Phenylephrine diff --git a/inst/extdata/phems_variable_list/is_standard/5.5_immunosuppressants.csv b/inst/extdata/phems_variable_list/is_standard/5.5_immunosuppressants.csv deleted file mode 100644 index bc82641..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.5_immunosuppressants.csv +++ /dev/null @@ -1,7 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4273629,Chemotherapy,S,Chemotherapy -21603754,Monoclonal antibodies,C,Monoclonal Antibodies -1518254,dexamethasone,S,Dexamethasone -975125,hydrocortisone,S,Hydrocortisone -1506270,methylprednisolone,S,Methylprednisolone -1550557,prednisolone,S,Prednisolone diff --git a/inst/extdata/phems_variable_list/is_standard/5.6_antibiotic_medication.csv b/inst/extdata/phems_variable_list/is_standard/5.6_antibiotic_medication.csv deleted file mode 100644 index d589492..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.6_antibiotic_medication.csv +++ /dev/null @@ -1,51 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4273629,Chemotherapy,S,Chemotherapy -21603754,Monoclonal antibodies,C,Monoclonal Antibodies -1836430,sulfamethoxazole,S,Trimethoprim-Sulfamethoxazole -1836948,tetracycline,S,Tetracycline -902722,tobramycin,S,Tobramycin -1705674,trimethoprim,S,Trimethoprim-Sulfamethoxazole -1707687,vancomycin,S,Vancomycin -19010400,fusidate,S,Fusidic acid -45892419,gentamicin,S,Gentamicin -45892599,ceftolozane,S,Ceftolozane-Tazovactam -46221507,avibactam,S,Ceftazidime-Avibactam -1734104,azithromycin,S,Azithromycin -1736887,linezolid,S,Linezolid -1748975,cefepime,S,Cefepime -1750500,clarithromycin,S,Clarithromycin -1769535,cefadroxil,S,Cefadroxil -1771162,cefazolin,S,Cefazolin -1774470,cefotaxime,S,Cefotaxime -1776684,ceftazidime,S,Ceftazidime -1776684,ceftazidime,S,Ceftazidime-Avibactam -1778162,cefuroxime,S,Cefuroxime -1786617,daptomycin,S,Daptomycin -1797513,ciprofloxacin,S,Ciprofloxacin -997881,clindamycin,S,Clindamycin -901845,colistin,S,Colistin -1709170,meropenem,S,Meropenem -1717963,ertapenem,S,Ertapenem -1518254,dexamethasone,S,Dexamethasone -1741122,tazobactam,S,Piperacillin-Tazobactam -1741122,tazobactam,S,Ceftolozane-Tazovactam -1746940,erythromycin,S,Erythromycin -951511,mupirocin,S,Mupirocin -956653,fosfomycin,S,Fosfomycin -1759842,clavulanate,S,Amoxicillin clavulanate -975125,hydrocortisone,S,Hydrocortisone -1778262,imipenem,S,Imipenem -19078399,teicoplanin,S,Teicoplanin -1790868,amikacin,S,Amikacin -1506270,methylprednisolone,S,Methylprednisolone -1713332,amoxicillin,S,Amoxicillin clavulanate -1713332,amoxicillin,S,Amoxicillin -1717327,ampicillin,S,Ampicillin -920293,nitrofurantoin,S,Nitrofurantoin -1721543,norfloxacin,S,Norfloxacin -1724703,oxacillin,S,Oxacillin -1728416,penicillin G,S,Penicillin -1742253,levofloxacin,S,Levofloxacin -1746114,piperacillin,S,Piperacillin-Tazobactam -1550557,prednisolone,S,Prednisolone -1763204,rifampin,S,Rifampicin diff --git a/inst/extdata/phems_variable_list/is_standard/5.7_antifungals.csv b/inst/extdata/phems_variable_list/is_standard/5.7_antifungals.csv deleted file mode 100644 index 4dc0c78..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.7_antifungals.csv +++ /dev/null @@ -1,6 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -1714277,voriconazole,S,Voriconazole -35606695,isavuconazole,S,Isovuconazole -19018013,micafungin,S,Micafungin -19026450,anidulafungin,S,Andiulafungin -1754994,fluconazole,S,Fluconazole diff --git a/inst/extdata/phems_variable_list/is_standard/5.8_antibiotic_resistance.csv b/inst/extdata/phems_variable_list/is_standard/5.8_antibiotic_resistance.csv deleted file mode 100644 index d36affa..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.8_antibiotic_resistance.csv +++ /dev/null @@ -1,11 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4019195,Methicillin resistant Staphylococcus aureus,S,MRSA -4257547,Extended spectrum beta-lactamase producing bacteria,S,ESBL -37017134,Multidrug-resistant bacteria,S,Drug-resistant -37017134,Multidrug-resistant bacteria,S,Multidrug-resistant -37017134,Multidrug-resistant bacteria,S,Clindamycin-resistant -37017134,Multidrug-resistant bacteria,S,Vancomycin-resistant -37017134,Multidrug-resistant bacteria,S,Erythromycin-resistant -1707687,vancomycin,S,Vancomycin-resistant -997881,clindamycin,S,Clindamycin-resistant -1746940,erythromycin,S,Erythromycin-resistant diff --git a/inst/extdata/phems_variable_list/is_standard/5.9_cardiac_surgery.csv b/inst/extdata/phems_variable_list/is_standard/5.9_cardiac_surgery.csv deleted file mode 100644 index e50f982..0000000 --- a/inst/extdata/phems_variable_list/is_standard/5.9_cardiac_surgery.csv +++ /dev/null @@ -1,42 +0,0 @@ -concept_id,concept_name,standard_concept,sourceCode -4049734,Banding of pulmonary artery,S,Application of band to pulmonary artery -4019929,Repair of tetralogy of Fallot,S,Unspecified repair of tetralogy of fallot -4019932,Arterial switch operation,S,Repositioning of transposed great arteries -4017751,Repair of total anomalous pulmonary venous connection,S,Unspecified correction of total anomalous pulmonary  venous connection -4020376,Closure of defect of interatrial septum using pericardial patch,S,Primary repair of defect of interatrial septum NEC/repair of defect of interatrial septum using pericardial patch -4020506,Creation of valved conduit between right ventricle of heart and pulmonary artery,S,Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec -4019950,Revision of valved cardiac conduit,S,Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec -4020508,Repair of sinus venosus,S,Correction of persistent sinus venosus -4018441,Repair of partial anomalous pulmonary venous connection,S,Correction of partial anomalous pulmonary venous drainage -4020520,Open aortic valvotomy,S,Open aortic valvotomy -4018747,Operations on the left ventricular outflow tract,S,Repair of subaortic stenosis -4019233,Creation of shunt from subclavian artery to pulmonary artery using interposition tube prosthesis,S,Unspecified creation of shunt to pulmonary artery from subclavian artery using interposition tube pr -4019237,Anastomosis of vena cava to pulmonary artery,S,Creation of anastomosis to pulmonary artery from vena cava -4018926,Repair of pulmonary artery,S,Other specified : repair of pulmonary artery -4021725,Removal of band from pulmonary artery,S,Removal of band from pulmonary artery -4019026,Plastic repair of aorta,S,Other specified: plastic repair of aorta -4020812,Plastic repair of aorta and end-to-end anastomosis of aorta,S,Plastic repair of aorta and end to end anastomosis of aorta -4019028,Release of vascular ring of aorta,S,Release of vascular ring of aorta -44790092,Relief of left ventricular outflow tract obstruction,S,Relief of left ventricular outflow tract obstruction -44789857,Total cavopulmonary connection with extracardiac inferior caval vein to pulmonary artery conduit,S,Total cavopulmonary connection with extracardiac inferior caval vein topulmonary artery conduit -4336751,Allotransplant of heart,S,Unspecified other transplantation of heart/allotransplantation of heart NEC -4049979,Repair of double outlet right ventricle,S,Repair of double outlet right ventricle -4050114,Closure of ductus arteriosus with clip,S,Closure of patent ductus arteriosus NEC -4052536,Extracorporeal membrane oxygenation,S,Extracorporeal membrane oxygenation -44790415,Aortic root replacement using pulmonary valve autograft with right ventricle to pulmonary artery valved conduit and aortoventriculoplasty,S,Aortic root pulmonary valve autograft with right vent to pulmonary artery valved conduit/ aortic root pulmonary valve autograft with right vent to pulmonary artery aortoventriculoplasty -4144921,Implantation of cardiac pacemaker,S,Implantation of cardiac pacemaker system NEC -4137127,Transplantation of heart,S,Unspecified other transplantation of heart/allotransplantation of heart NEC -44793133,Aortopulmonary reconstruction with systemic to pulmonary arterial shunt,S,Aortopulmonary reconstruction with systemic to pulmonary arterial shunt -4293619,Repair of tricuspid valve,S,Tricuspid valve repair NEC -4296790,Transposition of coronary artery,S,Transposition of coronary artery NEC -4139214,Open implantation of cardiac ventricular assist device,S,Open implantation of ventricular assist device -4178479,Replacement of valved cardiac conduit,S,Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec -40486525,Primary repair of defect of atrioventricular septum,S,Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum -4187380,Repair of ostium primum defect,S,Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum -4199899,Closure of ventricular septal defect,S,Unspecified repair of defect of interventricular septum -4203153,Replacement of mitral valve,S,Replacement of mitral valve NEC -4217615,Plication of diaphragm,S,Plication of diaphragm -4308136,Complete repair of tetralogy of Fallot with transannular patch,S,Repair of tetralogy of fallot using transannular patch -4312194,Repair of heart valve,S,Aortic valve repair NEC -4339184,Replacement of pulmonary valve,S,Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec -4232476,Repair of ventricular septal defect with prosthesis,S,Repair of defect of interventricular septum using prosthetic patch/unspecified repair of defect of interventricular septum diff --git a/inst/extdata/phems_variable_list/5.10_cardiac_radiology.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.10_cardiac_radiology.csv similarity index 97% rename from inst/extdata/phems_variable_list/5.10_cardiac_radiology.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.10_cardiac_radiology.csv index 4627a37..86917bc 100644 --- a/inst/extdata/phems_variable_list/5.10_cardiac_radiology.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.10_cardiac_radiology.csv @@ -1,43 +1,43 @@ -sourceCode,concept_id -24h holter monitor ,45764527  -24h holter monitor ,4140473  -CT head ,4125350  -CT heart with contrast/ CT cardiac angiogram coronary/ CT cardiac gated with contrast ,4306317  -CT thorax with contrast ,4327032  -Cardiopulmonary exercise test (CPET) ,40492338  -EEG routine ,4181917  -EEG routine portable ,4205144  -Epicardial echocardiogram ,4203365  -Event monitor ,45765560  -Exercise test (non-CPET) ,4065416  -FL video swallow ,4345925  -IR PICC line insertion ,4322380  -IR bronchogram ,4312208  -IR bronchoscopy ,4032404  -IR tunnelled central venous line insertion ,40482732  -IR tunnelled central venous line removal ,42873079  -MRI cardiac complex congenital ,44802640  -MRI head ,4082979  -Pacemaker/ICD device check - remote patient initiated ,4235141  -Pacemaker/ICD device check - remote device initiated ,4235141  -Pacemaker/ICD interrogation (in clinic)/ pacemaker/ICD interrogation (other) ,40488431  -US abdomen and pelvis/ US abdomen ,4261497  -US abdomen and pelvis/ US abdomen ,4305221  -US cranial contents ,4083106  -US diaphragmatic region ,4303522  -US doppler ,35622931  -US doppler groin both ,35622931  -US doppler groin both ,4167029  -US doppler jugular vein both ,40489841  -US doppler lower limb veins both ,4335392  -US doppler renal both ,4167052  -US neck ,4083108  -US thorax and pleural cavity ,4329508  -US thorax and pleural cavity ,4093436  -US transoesophageal echocardiogram (toe) ,4019824  -US transthoracic echocardiogram/ us transthoracic echocardiogram (pre- admission)/ US transthoracic echocardiogram (sedated) ,4335825  -US urinary tract ,4125530  -US vocal cord ,44813863  -XR abdomen ,4264477  -XR chest ,4163872  -XR chest and abdomen ,4169275  +sourceCode,concept_id +24h holter monitor ,45764527  +24h holter monitor ,4140473  +CT head ,4125350  +CT heart with contrast/ CT cardiac angiogram coronary/ CT cardiac gated with contrast ,4306317  +CT thorax with contrast ,4327032  +Cardiopulmonary exercise test (CPET) ,40492338  +EEG routine ,4181917  +EEG routine portable ,4205144  +Epicardial echocardiogram ,4203365  +Event monitor ,45765560  +Exercise test (non-CPET) ,4065416  +FL video swallow ,4345925  +IR PICC line insertion ,4322380  +IR bronchogram ,4312208  +IR bronchoscopy ,4032404  +IR tunnelled central venous line insertion ,40482732  +IR tunnelled central venous line removal ,42873079  +MRI cardiac complex congenital ,44802640  +MRI head ,4082979  +Pacemaker/ICD device check - remote patient initiated ,4235141  +Pacemaker/ICD device check - remote device initiated ,4235141  +Pacemaker/ICD interrogation (in clinic)/ pacemaker/ICD interrogation (other) ,40488431  +US abdomen and pelvis/ US abdomen ,4261497  +US abdomen and pelvis/ US abdomen ,4305221  +US cranial contents ,4083106  +US diaphragmatic region ,4303522  +US doppler ,35622931  +US doppler groin both ,35622931  +US doppler groin both ,4167029  +US doppler jugular vein both ,40489841  +US doppler lower limb veins both ,4335392  +US doppler renal both ,4167052  +US neck ,4083108  +US thorax and pleural cavity ,4329508  +US thorax and pleural cavity ,4093436  +US transoesophageal echocardiogram (toe) ,4019824  +US transthoracic echocardiogram/ us transthoracic echocardiogram (pre- admission)/ US transthoracic echocardiogram (sedated) ,4335825  +US urinary tract ,4125530  +US vocal cord ,44813863  +XR abdomen ,4264477  +XR chest ,4163872  +XR chest and abdomen ,4169275  diff --git a/inst/extdata/phems_variable_list/5.11_cardiac_los.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.11_cardiac_los.csv similarity index 98% rename from inst/extdata/phems_variable_list/5.11_cardiac_los.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.11_cardiac_los.csv index 3039e92..36a8d62 100644 --- a/inst/extdata/phems_variable_list/5.11_cardiac_los.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.11_cardiac_los.csv @@ -1,5 +1,5 @@ -sourceCode,concept_id -Cardiology ward admission (start datetime and end datetime) ,36675203  -HDU admission (start datetime and end datetime) ,4161811  -ICU admission (start datetime and end datetime) ,4123933  -Total hospital admission (start datetime and end datetime) ,8715  +sourceCode,concept_id +Cardiology ward admission (start datetime and end datetime) ,36675203  +HDU admission (start datetime and end datetime) ,4161811  +ICU admission (start datetime and end datetime) ,4123933  +Total hospital admission (start datetime and end datetime) ,8715  diff --git a/inst/extdata/phems_variable_list/5.12_additional.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.12_additional.csv similarity index 99% rename from inst/extdata/phems_variable_list/5.12_additional.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.12_additional.csv index c235dcc..a7ed53e 100644 --- a/inst/extdata/phems_variable_list/5.12_additional.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.12_additional.csv @@ -1,37 +1,37 @@ -sourceCode,concept_id -Base Excess ,8753  -Base Excess ,4095105  -Diagnoses ,4234469  -Elective ICU admission ,4123933  -FiO2 ,42869590  -FiO2 ,8554  -"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",43530727  -"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",440207  -"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",4213310  -"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",201957  -"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",314383  -"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",321319  -"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",260134  -"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",4165112  -"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",442588  -"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",4029498  -"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",443727  -"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",317009  -Mechanical ventilation ,40493026  -Outpatient appointment type (telephone/ clinic visit etc.) ,5083  -"Outpatient appointments start datetime, end datetime ",9202  -Outpatient specialty ,32577  -PaCO2 ,44777602  -PaCO2 ,3027946  -PaCO2 ,8876  -Pupillary reaction ,4209008  -"Reason for ICU admission: (Main reason for ICU admission is not recovery from surgery or a procedure, Recovery from a bypass cardiac procedure, recovery from a non-bypass cardiac procedure, recovery from non-cardiac procedure) ",44803020  -Systolic blood pressure ,8876  -Systolic blood pressure ,3004249  -"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",42537745  -"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",432571  -"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",4124462  -"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",321042  -"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",317510  -"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",29783  -"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",4245975  +sourceCode,concept_id +Base Excess ,8753  +Base Excess ,4095105  +Diagnoses ,4234469  +Elective ICU admission ,4123933  +FiO2 ,42869590  +FiO2 ,8554  +"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",43530727  +"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",440207  +"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",4213310  +"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",201957  +"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",314383  +"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",321319  +"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",260134  +"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",4165112  +"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",442588  +"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",4029498  +"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",443727  +"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",317009  +Mechanical ventilation ,40493026  +Outpatient appointment type (telephone/ clinic visit etc.) ,5083  +"Outpatient appointments start datetime, end datetime ",9202  +Outpatient specialty ,32577  +PaCO2 ,44777602  +PaCO2 ,3027946  +PaCO2 ,8876  +Pupillary reaction ,4209008  +"Reason for ICU admission: (Main reason for ICU admission is not recovery from surgery or a procedure, Recovery from a bypass cardiac procedure, recovery from a non-bypass cardiac procedure, recovery from non-cardiac procedure) ",44803020  +Systolic blood pressure ,8876  +Systolic blood pressure ,3004249  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",42537745  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",432571  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",4124462  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",321042  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",317510  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",29783  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",4245975  diff --git a/inst/extdata/phems_variable_list/5.13_laboratory_tests.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.13_laboratory_tests.csv similarity index 95% rename from inst/extdata/phems_variable_list/5.13_laboratory_tests.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.13_laboratory_tests.csv index 555203c..899721f 100644 --- a/inst/extdata/phems_variable_list/5.13_laboratory_tests.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.13_laboratory_tests.csv @@ -1,61 +1,61 @@ -sourceCode,concept_id -ALT ,3006923  -ALT ,8645  -AST ,3013721  -AST ,8645  -Albumin ,8713  -Albumin ,3024561  -Albumin ,8636  -Bicarbonate (arterial) ,8753  -Bicarbonate (arterial) ,3008152  -Bicarbonate (venous) ,8753  -Bicarbonate (venous) ,3027273  -Bilirubin ,3006140  -Bilirubin ,8749  -Blood urea nitrogen ,3024641  -Blood urea nitrogen ,8753  -CRP ,8751  -CRP ,3020460  -Calcium ,8753  -Calcium ,3015377  -Chloride ,8753  -Chloride ,3018572  -Creatinine ,8749  -Creatinine ,8840  -Creatinine ,3051825  -Glucose ,3013826  -Glucose ,8753  -Hematocrit ,3009542  -Hematocrit ,8554  -Hemoglobin ,8713  -Hemoglobin ,8636  -Hemoglobin ,40762351  -INR prothrombin time ,3034426  -INR prothrombin time ,8555  -Immature WBC count ,4298431  -Immature WBC count ,8647  -Lactate ,3047181  -Lactate ,8753  -Magnesium ,8753  -Magnesium ,3033836  -Neutrophil count ,3007670  -Neutrophil count ,8647  -Phosphate ,3003458  -Phosphate ,8753  -Platelet count ,8647  -Platelet count ,4267147  -Potassium ,8753  -Potassium ,3005456  -Sodium ,3019550  -Sodium ,8753  -pCO2 (arterial) ,3027946  -pCO2 (arterial) ,8876  -pCO2 (venous) ,44777602  -pCO2 (venous) ,3021447  -pCO2 (venous) ,8876  -pH (arterial) ,37399161  -pH (venous) ,37392672  -pO2 (arterial) ,3027801  -pO2 (arterial) ,8876  -pO2 (venous) ,3024354  -pO2 (venous) ,8876  +sourceCode,concept_id +ALT ,3006923  +ALT ,8645  +AST ,3013721  +AST ,8645  +Albumin ,8713  +Albumin ,3024561  +Albumin ,8636  +Bicarbonate (arterial) ,8753  +Bicarbonate (arterial) ,3008152  +Bicarbonate (venous) ,8753  +Bicarbonate (venous) ,3027273  +Bilirubin ,3006140  +Bilirubin ,8749  +Blood urea nitrogen ,3024641  +Blood urea nitrogen ,8753  +CRP ,8751  +CRP ,3020460  +Calcium ,8753  +Calcium ,3015377  +Chloride ,8753  +Chloride ,3018572  +Creatinine ,8749  +Creatinine ,8840  +Creatinine ,3051825  +Glucose ,3013826  +Glucose ,8753  +Hematocrit ,3009542  +Hematocrit ,8554  +Hemoglobin ,8713  +Hemoglobin ,8636  +Hemoglobin ,40762351  +INR prothrombin time ,3034426  +INR prothrombin time ,8555  +Immature WBC count ,4298431  +Immature WBC count ,8647  +Lactate ,3047181  +Lactate ,8753  +Magnesium ,8753  +Magnesium ,3033836  +Neutrophil count ,3007670  +Neutrophil count ,8647  +Phosphate ,3003458  +Phosphate ,8753  +Platelet count ,8647  +Platelet count ,4267147  +Potassium ,8753  +Potassium ,3005456  +Sodium ,3019550  +Sodium ,8753  +pCO2 (arterial) ,3027946  +pCO2 (arterial) ,8876  +pCO2 (venous) ,44777602  +pCO2 (venous) ,3021447  +pCO2 (venous) ,8876  +pH (arterial) ,37399161  +pH (venous) ,37392672  +pO2 (arterial) ,3027801  +pO2 (arterial) ,8876  +pO2 (venous) ,3024354  +pO2 (venous) ,8876  diff --git a/inst/extdata/phems_variable_list/5.14_cardiac_complications.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.14_cardiac_complications.csv similarity index 97% rename from inst/extdata/phems_variable_list/5.14_cardiac_complications.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.14_cardiac_complications.csv index a6e8199..f27a7cf 100644 --- a/inst/extdata/phems_variable_list/5.14_cardiac_complications.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.14_cardiac_complications.csv @@ -1,18 +1,18 @@ -sourceCode,concept_id -CVL infections ,42537043  -Extracorporeal membrane oxygenation,4052536  -ICU ward stay ,4123933  -LCOS - Cardiac arrest ,321042  -LCOS - NEC requiring treatment ,4185565  -LCOS - renal support (CVVH/ PD),4324124  -LCOS - renal support (CVVH/ PD) ,4051330  -Low cardiac output state (LCOS) - ECMO,4185565 -Low cardiac output state (LCOS) - ECMO ,4185565  -Neurological injury - intracranial haemmhorage/ intracranial bleeding ,439847  -Neurological injury - infarction ,443454  -Neurological injury - seizure ,377091  -Surgical injury - Blood Loss ,4308537  -Surgical injury - Chylothorax ,4306136  -Surgical injury - Reexplore for bleeding,437312  -Surgical injury - Reexplore for bleeding,442019  -Surgical injury - Reexplore for bleeding ,4295705  +sourceCode,concept_id +CVL infections ,42537043  +Extracorporeal membrane oxygenation,4052536  +ICU ward stay ,4123933  +LCOS - Cardiac arrest ,321042  +LCOS - NEC requiring treatment ,4185565  +LCOS - renal support (CVVH/ PD),4324124  +LCOS - renal support (CVVH/ PD) ,4051330  +Low cardiac output state (LCOS) - ECMO,4185565 +Low cardiac output state (LCOS) - ECMO ,4185565  +Neurological injury - intracranial haemmhorage/ intracranial bleeding ,439847  +Neurological injury - infarction ,443454  +Neurological injury - seizure ,377091  +Surgical injury - Blood Loss ,4308537  +Surgical injury - Chylothorax ,4306136  +Surgical injury - Reexplore for bleeding,437312  +Surgical injury - Reexplore for bleeding,442019  +Surgical injury - Reexplore for bleeding ,4295705  diff --git a/inst/extdata/phems_variable_list/5.15_vital_signs.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.15_vital_signs.csv similarity index 89% rename from inst/extdata/phems_variable_list/5.15_vital_signs.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.15_vital_signs.csv index 2e27e1d..5143893 100644 --- a/inst/extdata/phems_variable_list/5.15_vital_signs.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.15_vital_signs.csv @@ -1,11 +1,11 @@ -sourceCode,concept_id -Age-dependent HR ,3027018 -Age-dependent HR ,8483  -Age-dependent RR ,3024171 -Age-dependent RR ,8483  -SBP (Systolic Blood Pressure) ,3004249 -SBP (Systolic Blood Pressure) ,8876  -DBP (Dyastolic Blood Pressure) ,3012888 -DBP (Dyastolic Blood Pressure) ,8876  -SpO2 ,4096101  -SpO2 ,8554  +sourceCode,concept_id +Age-dependent HR ,3027018 +Age-dependent HR ,8483  +Age-dependent RR ,3024171 +Age-dependent RR ,8483  +SBP (Systolic Blood Pressure) ,3004249 +SBP (Systolic Blood Pressure) ,8876  +DBP (Dyastolic Blood Pressure) ,3012888 +DBP (Dyastolic Blood Pressure) ,8876  +SpO2 ,4096101  +SpO2 ,8554  diff --git a/inst/extdata/phems_variable_list/5.16_hsjd_clinical.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.16_hsjd_clinical.csv similarity index 97% rename from inst/extdata/phems_variable_list/5.16_hsjd_clinical.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.16_hsjd_clinical.csv index 6b3822b..37f42bd 100644 --- a/inst/extdata/phems_variable_list/5.16_hsjd_clinical.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.16_hsjd_clinical.csv @@ -1,9 +1,9 @@ -sourceCode,concept_id -Body Surface Area (BSA) - Combination of weight and height ,4201235  -Body Surface Area (BSA) - Combination of weight and height ,8617  -Cardiac surgeries (Interventions) ,4275564  -Extracardiac anomalies - diagnoses ,0  -Height ,607590  -Height ,8582  -Weight ,3025315  -Weight ,9529  +sourceCode,concept_id +Body Surface Area (BSA) - Combination of weight and height ,4201235  +Body Surface Area (BSA) - Combination of weight and height ,8617  +Cardiac surgeries (Interventions) ,4275564  +Extracardiac anomalies - diagnoses ,0  +Height ,607590  +Height ,8582  +Weight ,3025315  +Weight ,9529  diff --git a/inst/extdata/phems_variable_list/5.17_hsjd_surgery.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.17_hsjd_surgery.csv similarity index 100% rename from inst/extdata/phems_variable_list/5.17_hsjd_surgery.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.17_hsjd_surgery.csv diff --git a/inst/extdata/phems_variable_list/5.18_hsjd_hospitalisation.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.18_hsjd_hospitalisation.csv similarity index 100% rename from inst/extdata/phems_variable_list/5.18_hsjd_hospitalisation.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.18_hsjd_hospitalisation.csv diff --git a/inst/extdata/phems_variable_list/5.19_hsjd_complication.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.19_hsjd_complication.csv similarity index 98% rename from inst/extdata/phems_variable_list/5.19_hsjd_complication.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.19_hsjd_complication.csv index f54c4c8..eea4d04 100644 --- a/inst/extdata/phems_variable_list/5.19_hsjd_complication.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.19_hsjd_complication.csv @@ -1,21 +1,21 @@ -sourceCode,concept_id -"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",44784217  -"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",315643  -"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",4068155  -"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",4228448  -"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",4185572  -"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing) ",4117045  -"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing) ",4353741  -"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing) ",4049398  -"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing) ",4051940  -Cardiac surgeries (interventions) ,4275564  -Diaphragmatic Paralysis ,4275136  -"Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) ",1309944  -"Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) ",46234437  -"Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) ",1354860  -Listed for heart transplantation ,609312  -Pneumothorax ,253796  -Sternum reopening (procedure undertaken) ,4044892  -Tracheostomy ,44783799  -Vocal Cord Dysfunction ,4046868  -intubation ,4202832  +sourceCode,concept_id +"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",44784217  +"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",315643  +"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",4068155  +"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",4228448  +"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",4185572  +"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing) ",4117045  +"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing) ",4353741  +"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing) ",4049398  +"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing) ",4051940  +Cardiac surgeries (interventions) ,4275564  +Diaphragmatic Paralysis ,4275136  +"Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) ",1309944  +"Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) ",46234437  +"Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) ",1354860  +Listed for heart transplantation ,609312  +Pneumothorax ,253796  +Sternum reopening (procedure undertaken) ,4044892  +Tracheostomy ,44783799  +Vocal Cord Dysfunction ,4046868  +intubation ,4202832  diff --git a/inst/extdata/phems_variable_list/5.21_healthcare_use_diagnoses_procedures_current_eps.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.21_healthcare_use_diagnoses_procedures_current_eps.csv similarity index 95% rename from inst/extdata/phems_variable_list/5.21_healthcare_use_diagnoses_procedures_current_eps.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.21_healthcare_use_diagnoses_procedures_current_eps.csv index 056df72..4061743 100644 --- a/inst/extdata/phems_variable_list/5.21_healthcare_use_diagnoses_procedures_current_eps.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.21_healthcare_use_diagnoses_procedures_current_eps.csv @@ -1,88 +1,88 @@ -sourceCode,concept_id -Previous diagnosis of sepsis measure ,1340204  -Previous diagnosis of sepsis measure ,132797  -Origin (external) ,44790567  -Origin (internal) ,4294886  -Reason for admission ,44803020  -Surgical admission (non-urgent) ,4084670  -Surgical admission (urgent) ,4123946   -Non-surgical admission ,0  -Central venous catheter ,4179206  -Diagnosis of chronic condition ,443783  -Diagnosis of chronic condition ,312723  -Diagnosis of chronic condition ,201820  -Diagnosis of chronic condition ,255573  -Diagnosis of acute infection having the potential for progression to sepsis1+2 ,37174269  -Diagnosis of acute infection having the potential for progression to sepsis1+2 ,4271450  -Meningo-encephalitis ,4322814  -hepatitis ,4243475  -pneumonia ,255848  -meningitis ,435785  -bacteremia ,132736  -viremia ,133327  -UTI ,4331815  -tuberculosis ,4103588  -candidiasis ,433968  -Diagnosis of SIRS ,434821  -Diagnosis of condition producing immunodeficiency ,4140977  -Abcess ,444202  -appendicitis ,440448  -, -peritonitis ,196152  -cellulitis ,435613  -surgical site inflammation ,4300243  -injury with open wound ,444187  -renal insufficiency ,36716945  -endocarditis ,441589  -miocarditis ,314383  -necrotizing enterocolitis ,44807226  -Cancer ,443392  -cardiac arrest ,321042  -organ transplant ,4208341  -acute kidney injury ,197320  -immunodeficiency ,433740  -asplenia ,45768671  -cerebral palsy ,4134120  -rheumatoid arthritis ,80809  -sickle cell disease ,22281  -ulcerative colitis ,81893  -Crohn's disease ,201606  -Cushing's disease ,195212  -Down's syndrome ,439125  -mitochondrial disease ,81539  -nephrotic syndrome ,195314  -neutropenia ,604243  -Diagnosis of organ system dysfunction ,4080011  -Antibiotics ,4085730  -Antivirals ,4140762  -Immunosuppressors ,4314777  -Corticoids ,21602722  -Antineoplastics ,4181511  -Surgery previous to prediction time point ,4301351  -"Chest opening, chest drainage ",4074689  -Arterial blood pressure catheter ,45758028  -Peripheral IV cannulas ,4177205  -Urinary catheter ,4070667  -Nasogastric/orogastric tube ,42538045  -Endotracheal tube ,4097216  -Tracheostomy ,44783799  -Invasive ventilation ,44790095  -Non-invasive ventilation ,4177224  -FiO2 ,42869590  -FiO2 ,8554  -FiO2 ,8510  -FiO2 ,720868  -Mean Airway Pressure (MAP) ,42527086  -Mean Airway Pressure (MAP) ,44777590  -Mean Airway Pressure (MAP) ,8876  -Mean Airway Pressure (MAP) ,44777602  -Oxygenation index ,4193843  -Oxygenation index ,8529  -Oxygenation index ,0  -ECMO ,4052536  -ECMO type ,37206603  -ECMO type ,37206601  -Ventricular assist device (VAD) ,4235043  -Dialysis ,4032243  -Dialysis ,4051330  -Peritoneal dialysis ,4324124  +sourceCode,concept_id +Previous diagnosis of sepsis measure ,1340204  +Previous diagnosis of sepsis measure ,132797  +Origin (external) ,44790567  +Origin (internal) ,4294886  +Reason for admission ,44803020  +Surgical admission (non-urgent) ,4084670  +Surgical admission (urgent) ,4123946   +Non-surgical admission ,0  +Central venous catheter ,4179206  +Diagnosis of chronic condition ,443783  +Diagnosis of chronic condition ,312723  +Diagnosis of chronic condition ,201820  +Diagnosis of chronic condition ,255573  +Diagnosis of acute infection having the potential for progression to sepsis1+2 ,37174269  +Diagnosis of acute infection having the potential for progression to sepsis1+2 ,4271450  +Meningo-encephalitis ,4322814  +hepatitis ,4243475  +pneumonia ,255848  +meningitis ,435785  +bacteremia ,132736  +viremia ,133327  +UTI ,4331815  +tuberculosis ,4103588  +candidiasis ,433968  +Diagnosis of SIRS ,434821  +Diagnosis of condition producing immunodeficiency ,4140977  +Abcess ,444202  +appendicitis ,440448  +NA,NA +peritonitis ,196152  +cellulitis ,435613  +surgical site inflammation ,4300243  +injury with open wound ,444187  +renal insufficiency ,36716945  +endocarditis ,441589  +miocarditis ,314383  +necrotizing enterocolitis ,44807226  +Cancer ,443392  +cardiac arrest ,321042  +organ transplant ,4208341  +acute kidney injury ,197320  +immunodeficiency ,433740  +asplenia ,45768671  +cerebral palsy ,4134120  +rheumatoid arthritis ,80809  +sickle cell disease ,22281  +ulcerative colitis ,81893  +Crohn's disease ,201606  +Cushing's disease ,195212  +Down's syndrome ,439125  +mitochondrial disease ,81539  +nephrotic syndrome ,195314  +neutropenia ,604243  +Diagnosis of organ system dysfunction ,4080011  +Antibiotics ,4085730  +Antivirals ,4140762  +Immunosuppressors ,4314777  +Corticoids ,21602722  +Antineoplastics ,4181511  +Surgery previous to prediction time point ,4301351  +"Chest opening, chest drainage ",4074689  +Arterial blood pressure catheter ,45758028  +Peripheral IV cannulas ,4177205  +Urinary catheter ,4070667  +Nasogastric/orogastric tube ,42538045  +Endotracheal tube ,4097216  +Tracheostomy ,44783799  +Invasive ventilation ,44790095  +Non-invasive ventilation ,4177224  +FiO2 ,42869590  +FiO2 ,8554  +FiO2 ,8510  +FiO2 ,720868  +Mean Airway Pressure (MAP) ,42527086  +Mean Airway Pressure (MAP) ,44777590  +Mean Airway Pressure (MAP) ,8876  +Mean Airway Pressure (MAP) ,44777602  +Oxygenation index ,4193843  +Oxygenation index ,8529  +Oxygenation index ,0  +ECMO ,4052536  +ECMO type ,37206603  +ECMO type ,37206601  +Ventricular assist device (VAD) ,4235043  +Dialysis ,4032243  +Dialysis ,4051330  +Peritoneal dialysis ,4324124  diff --git a/inst/extdata/phems_variable_list/5.22_vital_signs.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.22_vital_signs.csv similarity index 52% rename from inst/extdata/phems_variable_list/5.22_vital_signs.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.22_vital_signs.csv index e2bd991..09816bb 100644 --- a/inst/extdata/phems_variable_list/5.22_vital_signs.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.22_vital_signs.csv @@ -1,88 +1,88 @@ -sourceCode,concept_id -HR ,3027018  -HR ,8483  -RR ,3024171  -RR ,8483  -Body temperature ,3020891  -Body temperature ,586323  -SBP (Systolic Blood Pressure) ,3004249  -SBP (Systolic Blood Pressure) ,8876  -DBP (Diastolic blood pressure) ,3012888  -DBP (Diastolic blood pressure) ,8876  -SpO2 ,4096101  -SpO2 ,8554  -Urine output ,3014315  -Urine output ,8587  -Urine output ,44777613  -Urine output ,33014  -Urine output ,0  -Weight ,3025315  -Weight ,9529  -Weight ,8504  -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, +sourceCode,concept_id +HR ,3027018  +HR ,8483  +RR ,3024171  +RR ,8483  +Body temperature ,3020891  +Body temperature ,586323  +SBP (Systolic Blood Pressure) ,3004249  +SBP (Systolic Blood Pressure) ,8876  +DBP (Diastolic blood pressure) ,3012888  +DBP (Diastolic blood pressure) ,8876  +SpO2 ,4096101  +SpO2 ,8554  +Urine output ,3014315  +Urine output ,8587  +Urine output ,44777613  +Urine output ,33014  +Urine output ,0  +Weight ,3025315  +Weight ,9529  +Weight ,8504  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA diff --git a/inst/extdata/phems_variable_list/5.23_physical_examination_signs.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.23_physical_examination_signs.csv similarity index 78% rename from inst/extdata/phems_variable_list/5.23_physical_examination_signs.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.23_physical_examination_signs.csv index b304ff0..8b820d4 100644 --- a/inst/extdata/phems_variable_list/5.23_physical_examination_signs.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.23_physical_examination_signs.csv @@ -1,88 +1,88 @@ -sourceCode,concept_id -GCS ,3032652  -Pupillary reactivity (right) ,21490963  -Pupillary reactivity (right) ,4069590  -Pupillary reactivity (right) ,45879546  -Pupillary reactivity (right) ,45880051  -Pupillary reactivity (right) ,4188539  -Pupillary reactivity (right) ,4188540  -Pupillary reactivity (left) ,21491763  -Pupillary reactivity (left) ,4069590  -Pupillary reactivity (left) ,45879546  -Pupillary reactivity (left) ,45880051  -Pupillary reactivity (left) ,4188539  -Pupillary reactivity (left) ,4188540  -Pupillary size (right) ,3027214  -Pupillary size (right) ,8588  -Pupillary size (right) ,36310446  -Pupillary size (right) ,21499034  -Pupillary size (right) ,4116857  -Pupillary size (left) ,3021415  -Pupillary size (left) ,8588  -Pupillary size (left) ,36310446  -Pupillary size (left) ,21499034  -Pupillary size (left) ,4116857  -Capillary refill time ,3045676  -Capillary refill time ,8555  -Peripheral pulse (pressure) ,4314539  -Peripheral pulse (pressure) ,4181412  -Peripheral pulse (pressure) ,4132135  -Peripheral pulse (pressure) ,4124461  -Peripheral pulse (pressure) ,8483  -Central pulse ,4224504  -Central pulse ,4181412  -Central pulse ,4132135  -Central pulse ,4124461  -Central pulse ,8483  -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, +sourceCode,concept_id +GCS ,3032652  +Pupillary reactivity (right) ,21490963  +Pupillary reactivity (right) ,4069590  +Pupillary reactivity (right) ,45879546  +Pupillary reactivity (right) ,45880051  +Pupillary reactivity (right) ,4188539  +Pupillary reactivity (right) ,4188540  +Pupillary reactivity (left) ,21491763  +Pupillary reactivity (left) ,4069590  +Pupillary reactivity (left) ,45879546  +Pupillary reactivity (left) ,45880051  +Pupillary reactivity (left) ,4188539  +Pupillary reactivity (left) ,4188540  +Pupillary size (right) ,3027214  +Pupillary size (right) ,8588  +Pupillary size (right) ,36310446  +Pupillary size (right) ,21499034  +Pupillary size (right) ,4116857  +Pupillary size (left) ,3021415  +Pupillary size (left) ,8588  +Pupillary size (left) ,36310446  +Pupillary size (left) ,21499034  +Pupillary size (left) ,4116857  +Capillary refill time ,3045676  +Capillary refill time ,8555  +Peripheral pulse (pressure) ,4314539  +Peripheral pulse (pressure) ,4181412  +Peripheral pulse (pressure) ,4132135  +Peripheral pulse (pressure) ,4124461  +Peripheral pulse (pressure) ,8483  +Central pulse ,4224504  +Central pulse ,4181412  +Central pulse ,4132135  +Central pulse ,4124461  +Central pulse ,8483  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA diff --git a/inst/extdata/phems_variable_list/5.24_laboratory_test_results_uc2.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.24_laboratory_test_results_uc2.csv similarity index 77% rename from inst/extdata/phems_variable_list/5.24_laboratory_test_results_uc2.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.24_laboratory_test_results_uc2.csv index 70c91b9..bcbe45d 100644 --- a/inst/extdata/phems_variable_list/5.24_laboratory_test_results_uc2.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.24_laboratory_test_results_uc2.csv @@ -1,87 +1,87 @@ -sourceCode,concept_id -Bacterial pathogen detection ,4036356  -Name of bacterial pathogen detected ,432545  -Quantification of colonies in culture ,4299649  -Quantification of colonies in culture ,9278  -PCR panel ,4196268  -Antibiotic resistance ,44806682  -Viral pathogen detection ,440029  -PCR panel ,4196268  -Leukocytes ,4212899  -Leukocytes ,9278  -Leukocytes ,0  -Thromboplastin time ,4175016  -Thromboplastin time ,8555  -Thromboplastin time ,8523  -D-dimer ,37393605  -D-dimer ,8751  -D-dimer ,8753  -Fibrinogen ,4094436  -Fibrinogen ,8636  -Fibrinogen ,8753  -Blood urea nitrogen ,4017361  -Blood urea nitrogen ,8753  -Blood urea nitrogen ,8840  -Glucose ,3013826  -Glucose ,8753  -Glucose ,8840  -Direct bilirubin ,4118986  -Direct bilirubin ,8749  -Direct bilirubin ,8753  -Direct bilirubin ,8840  -Ionized calcium ,44789220  -Ionized calcium ,8753  -PCT ,3046279  -PCT ,8842  -PCT ,8725  -PCT ,8748  -MR-proADM ,42536081  -MR-proADM ,8736  -Interleukin-6 ,3033291  -Interleukin-6 ,8845  -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, +sourceCode,concept_id +Bacterial pathogen detection ,4036356  +Name of bacterial pathogen detected ,432545  +Quantification of colonies in culture ,4299649  +Quantification of colonies in culture ,9278  +PCR panel ,4196268  +Antibiotic resistance ,44806682  +Viral pathogen detection ,440029  +PCR panel ,4196268  +Leukocytes ,4212899  +Leukocytes ,9278  +Leukocytes ,0  +Thromboplastin time ,4175016  +Thromboplastin time ,8555  +Thromboplastin time ,8523  +D-dimer ,37393605  +D-dimer ,8751  +D-dimer ,8753  +Fibrinogen ,4094436  +Fibrinogen ,8636  +Fibrinogen ,8753  +Blood urea nitrogen ,4017361  +Blood urea nitrogen ,8753  +Blood urea nitrogen ,8840  +Glucose ,3013826  +Glucose ,8753  +Glucose ,8840  +Direct bilirubin ,4118986  +Direct bilirubin ,8749  +Direct bilirubin ,8753  +Direct bilirubin ,8840  +Ionized calcium ,44789220  +Ionized calcium ,8753  +PCT ,3046279  +PCT ,8842  +PCT ,8725  +PCT ,8748  +MR-proADM ,42536081  +MR-proADM ,8736  +Interleukin-6 ,3033291  +Interleukin-6 ,8845  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.25_arterial_blood_gas.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.25_arterial_blood_gas.csv new file mode 100644 index 0000000..3de30e8 --- /dev/null +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.25_arterial_blood_gas.csv @@ -0,0 +1,87 @@ +sourceCode,concept_id +pH ,3019977  +pCO2 ,3027946  +pCO2 ,44777602  +pCO2 ,8876  +PaO2 ,3027801  +PaO2 ,44777602  +PaO2 ,8876  +HCO3 ,3008152  +HCO3 ,8753  +Base excess ,3003396  +Base excess ,8753  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.26_venous_blood_gas.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.26_venous_blood_gas.csv new file mode 100644 index 0000000..7570921 --- /dev/null +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.26_venous_blood_gas.csv @@ -0,0 +1,87 @@ +sourceCode,concept_id +pH ,3012544  +pH ,3009343  +pCO2 ,3021447  +pCO2 ,3023024  +pCO2 ,44777602  +pCO2 ,8876  +PaO2 ,3024354  +PaO2 ,3028626  +PaO2 ,44777602  +PaO2 ,8876  +HCO3 ,3027273  +HCO3 ,3015235  +HCO3 ,8753  +Base excess,3002032  +Base excess,3003129  +Base excess,8753  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.28_patient_characteristics.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.28_patient_characteristics.csv new file mode 100644 index 0000000..21a18a9 --- /dev/null +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.28_patient_characteristics.csv @@ -0,0 +1,87 @@ +sourceCode,concept_id +body weight ,3025315  +body weight ,9529  +body weight ,8504  +height ,3036277  +height ,8582  +height ,9546  +hemophilia A diagnosis ,434007  +hemophilia A subtype/ severity ,4094223  +hemophilia A subtype/ severity ,4140661  +hemophilia A subtype/ severity ,4056830  +blood group ,3003694  +factor VIII inhibitor status ,37393608  +factor VIII inhibitor status ,4126681  +factor VIII inhibitor status ,9190  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA diff --git a/inst/extdata/phems_variable_list/5.28_uc3_patient_characteristics.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.28_uc3_patient_characteristics.csv similarity index 100% rename from inst/extdata/phems_variable_list/5.28_uc3_patient_characteristics.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.28_uc3_patient_characteristics.csv diff --git a/inst/extdata/phems_variable_list/5.29_lab_measurements_uc3.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.29_lab_measurements_uc3.csv similarity index 95% rename from inst/extdata/phems_variable_list/5.29_lab_measurements_uc3.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.29_lab_measurements_uc3.csv index 8da65ea..b85eb8d 100644 --- a/inst/extdata/phems_variable_list/5.29_lab_measurements_uc3.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.29_lab_measurements_uc3.csv @@ -1,37 +1,37 @@ -sourceCode,concept_id -factor VIII inhibitor titer ,3024942  -factor VIII inhibitor titer ,44777562  -factor VIII activity measurement ,3022520  -factor VIII activity measurement ,3011832  -factor VIII activity measurement ,8985  -factor VIII activity measurement ,9332  -factor VIII activity measurement ,8554  -Von Willebrand factor activity measurement ,43534000  -Von Willebrand factor activity measurement ,8985  -Von Willebrand factor activity measurement ,9332  -Von Willebrand factor activity measurement ,8554  -Von Willebrand factor antigen measurement ,3002124  -Von Willebrand factor antigen measurement ,8985  -Von Willebrand factor antigen measurement ,9332  -Von Willebrand factor antigen measurement ,8554  -Von Willebrand factor propeptide measurement ,3023693  -Von Willebrand factor propeptide measurement ,3042349  -Von Willebrand factor propeptide measurement ,8763  -activated partial thromboplastin time (APTT) ,4175016   -activated partial thromboplastin time (APTT) ,8555  -activated partial thromboplastin time (APTT) ,8523  -Prothrombin time (PT) ,3034426  -Prothrombin time (PT) ,8555  -Prothrombin time (PT) ,8523  -Prothrombin time (PT) ,8554  -platelet count ,4267147 -platelet count ,44777588  -hematocrit ,3009542  -hematocrit ,44777604  -hematocrit ,8554 -fibrinogen ,3016407  -fibrinogen ,8636  -ALT ,3006923  -ALT ,8645  -AST ,3013721  -AST ,8645  +sourceCode,concept_id +factor VIII inhibitor titer ,3024942  +factor VIII inhibitor titer ,44777562  +factor VIII activity measurement ,3022520  +factor VIII activity measurement ,3011832  +factor VIII activity measurement ,8985  +factor VIII activity measurement ,9332  +factor VIII activity measurement ,8554  +Von Willebrand factor activity measurement ,43534000  +Von Willebrand factor activity measurement ,8985  +Von Willebrand factor activity measurement ,9332  +Von Willebrand factor activity measurement ,8554  +Von Willebrand factor antigen measurement ,3002124  +Von Willebrand factor antigen measurement ,8985  +Von Willebrand factor antigen measurement ,9332  +Von Willebrand factor antigen measurement ,8554  +Von Willebrand factor propeptide measurement ,3023693  +Von Willebrand factor propeptide measurement ,3042349  +Von Willebrand factor propeptide measurement ,8763  +activated partial thromboplastin time (APTT) ,4175016   +activated partial thromboplastin time (APTT) ,8555  +activated partial thromboplastin time (APTT) ,8523  +Prothrombin time (PT) ,3034426  +Prothrombin time (PT) ,8555  +Prothrombin time (PT) ,8523  +Prothrombin time (PT) ,8554  +platelet count ,4267147 +platelet count ,44777588  +hematocrit ,3009542  +hematocrit ,44777604  +hematocrit ,8554 +fibrinogen ,3016407  +fibrinogen ,8636  +ALT ,3006923  +ALT ,8645  +AST ,3013721  +AST ,8645  diff --git a/inst/extdata/phems_variable_list/5.29_uc3_lab_measurements.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.29_uc3_lab_measurements.csv similarity index 99% rename from inst/extdata/phems_variable_list/5.29_uc3_lab_measurements.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.29_uc3_lab_measurements.csv index 6b129df..7bbd8f9 100644 --- a/inst/extdata/phems_variable_list/5.29_uc3_lab_measurements.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.29_uc3_lab_measurements.csv @@ -34,4 +34,4 @@ fibrinogen,8636 ALT,3006923 ALT,8645 AST,3013721 -AST,8645 \ No newline at end of file +AST,8645 diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.30_treatments.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.30_treatments.csv new file mode 100644 index 0000000..bb7b564 --- /dev/null +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.30_treatments.csv @@ -0,0 +1,85 @@ +sourceCode,concept_id +factor VIII  ,35766745  +factor VIII  ,21154209  +factor VIII  ,35831239  +factor VIII  ,40745282  +factor VIII  ,8985  +factor VIII dose is continuous infusion or bolus dose ,40492862  +factor VIII dose is continuous infusion or bolus dose ,4129275  +factor VIII dose is continuous infusion or bolus dose ,4265597  +desmopressin ,1517070  +desmopressin ,9655  +desmopressin ,8576  +desmopressin ,9662  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA diff --git a/inst/extdata/phems_variable_list/5.30_uc3_treatments.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.30_uc3_treatments.csv similarity index 98% rename from inst/extdata/phems_variable_list/5.30_uc3_treatments.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.30_uc3_treatments.csv index 7254118..450301c 100644 --- a/inst/extdata/phems_variable_list/5.30_uc3_treatments.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.30_uc3_treatments.csv @@ -39,4 +39,4 @@ factor VIII dose is continuous infusion or bolus dose,4265597 desmopressin,1517070 desmopressin,9655 desmopressin,8576 -desmopressin,9662 \ No newline at end of file +desmopressin,9662 diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.31_surgery_specific_parameters.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.31_surgery_specific_parameters.csv new file mode 100644 index 0000000..8f57188 --- /dev/null +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.31_surgery_specific_parameters.csv @@ -0,0 +1,85 @@ +sourceCode,concept_id +Medical/ surgical procedure ,45888085  +NaCl administration during surgery ,967823  +NA,8587  +plasma administration during surgery ,4028665  +datetime start anesthesia ,45888867  +blood loss during surgery ,4308716  +blood transfusion during surgery ,37017589  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA diff --git a/inst/extdata/phems_variable_list/5.31_uc3_surgery.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.31_uc3_surgery.csv similarity index 85% rename from inst/extdata/phems_variable_list/5.31_uc3_surgery.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.31_uc3_surgery.csv index de3ce95..96bef24 100644 --- a/inst/extdata/phems_variable_list/5.31_uc3_surgery.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.31_uc3_surgery.csv @@ -5,4 +5,4 @@ NaCl administration during surgery,8587 plasma administration during surgery,4028665 datetime start anesthesia,4160439 blood loss during surgery,4308716 -blood transfusion during surgery,37017589 \ No newline at end of file +blood transfusion during surgery,37017589 diff --git a/inst/extdata/phems_variable_list/5.3_vis_score_medications.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.3_vis_score_medications.csv similarity index 90% rename from inst/extdata/phems_variable_list/5.3_vis_score_medications.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.3_vis_score_medications.csv index 19e1b34..e1c959b 100644 --- a/inst/extdata/phems_variable_list/5.3_vis_score_medications.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.3_vis_score_medications.csv @@ -1,8 +1,8 @@ -sourceCode,concept_id -dobutamine,1337720 -dopamine,1337860 -epinephrine,1343916 -milrinone,1368671 -norepinephrin,1321341 -vasopressin,1507835 -,9688 +sourceCode,concept_id +dobutamine,1337720 +dopamine,1337860 +epinephrine,1343916 +milrinone,1368671 +norepinephrin,1321341 +vasopressin,1507835 +NA,9688 diff --git a/inst/extdata/phems_variable_list/5.4_vasopressors_inotropes.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.4_vasopressors_inotropes.csv similarity index 95% rename from inst/extdata/phems_variable_list/5.4_vasopressors_inotropes.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.4_vasopressors_inotropes.csv index 2cdcea9..ca40d92 100644 --- a/inst/extdata/phems_variable_list/5.4_vasopressors_inotropes.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.4_vasopressors_inotropes.csv @@ -1,12 +1,12 @@ -sourceCode,concept_id -Dobutamine,1337720 -Dopamine,1337860 -Ephedrine,1143374 -Epinephrine,1343916 -Isoproterenol,1183554 -Levosimendan,40173184 -Milrinone,1368671 -Norepinephrine,1321341 -Phenylephrine,1135766 -Terlipressin,19119253 -Vasopressin,1507835 +sourceCode,concept_id +Dobutamine,1337720 +Dopamine,1337860 +Ephedrine,1143374 +Epinephrine,1343916 +Isoproterenol,1183554 +Levosimendan,40173184 +Milrinone,1368671 +Norepinephrine,1321341 +Phenylephrine,1135766 +Terlipressin,19119253 +Vasopressin,1507835 diff --git a/inst/extdata/phems_variable_list/5.5_immunosuppressants.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.5_immunosuppressants.csv similarity index 95% rename from inst/extdata/phems_variable_list/5.5_immunosuppressants.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.5_immunosuppressants.csv index b48ccf2..c028504 100644 --- a/inst/extdata/phems_variable_list/5.5_immunosuppressants.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.5_immunosuppressants.csv @@ -1,7 +1,7 @@ -sourceCode,concept_id -Chemotherapy,4273629 -Dexamethasone,1518254 -Hydrocortisone,975125 -Methylprednisolone,1506270 -Monoclonal Antibodies,21603754 -Prednisolone,1550557 +sourceCode,concept_id +Chemotherapy,4273629 +Dexamethasone,1518254 +Hydrocortisone,975125 +Methylprednisolone,1506270 +Monoclonal Antibodies,21603754 +Prednisolone,1550557 diff --git a/inst/extdata/phems_variable_list/5.6_antibiotic_medication.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.6_antibiotic_medication.csv similarity index 95% rename from inst/extdata/phems_variable_list/5.6_antibiotic_medication.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.6_antibiotic_medication.csv index aac5474..9b46a62 100644 --- a/inst/extdata/phems_variable_list/5.6_antibiotic_medication.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.6_antibiotic_medication.csv @@ -1,51 +1,51 @@ -sourceCode,concept_id -Amikacin,1790868 -Amoxicillin,1713332 -Amoxicillin clavulanate,1713332 -Amoxicillin clavulanate,1759842 -Ampicillin,1717327 -Azithromycin,1734104 -Cefadroxil,1769535 -Cefazolin,1771162 -Cefepime,1748975 -Cefotaxime,1774470 -Ceftazidime,1776684 -Ceftazidime-Avibactam,46221507 -Ceftazidime-Avibactam,1776684 -Ceftolozane-Tazovactam,1741122 -Ceftolozane-Tazovactam,45892599 -Cefuroxime,1778162 -Chemotherapy,4273629 -Ciprofloxacin,1797513 -Clarithromycin,1750500 -Clindamycin,997881 -Colistin,901845 -Daptomycin,1786617 -Dexamethasone,1518254 -Ertapenem,1717963 -Erythromycin,1746940 -Fosfomycin,956653 -Fusidic acid,19010400 -Gentamicin,45892419 -Hydrocortisone,975125 -Imipenem,1778262 -Levofloxacin,1742253 -Linezolid,1736887 -Meropenem,1709170 -Methylprednisolone,1506270 -Monoclonal Antibodies,21603754 -Mupirocin,951511 -Nitrofurantoin,920293 -Norfloxacin,1721543 -Oxacillin,1724703 -Penicillin,1728416 -Piperacillin-Tazobactam,1746114 -Piperacillin-Tazobactam,1741122 -Prednisolone,1550557 -Rifampicin,1763204 -Teicoplanin,19078399 -Tetracycline,1836948 -Tobramycin,902722 -Trimethoprim-Sulfamethoxazole,1836430 -Trimethoprim-Sulfamethoxazole,1705674 -Vancomycin,1707687 +sourceCode,concept_id +Amikacin,1790868 +Amoxicillin,1713332 +Amoxicillin clavulanate,1713332 +Amoxicillin clavulanate,1759842 +Ampicillin,1717327 +Azithromycin,1734104 +Cefadroxil,1769535 +Cefazolin,1771162 +Cefepime,1748975 +Cefotaxime,1774470 +Ceftazidime,1776684 +Ceftazidime-Avibactam,46221507 +Ceftazidime-Avibactam,1776684 +Ceftolozane-Tazovactam,1741122 +Ceftolozane-Tazovactam,45892599 +Cefuroxime,1778162 +Chemotherapy,4273629 +Ciprofloxacin,1797513 +Clarithromycin,1750500 +Clindamycin,997881 +Colistin,901845 +Daptomycin,1786617 +Dexamethasone,1518254 +Ertapenem,1717963 +Erythromycin,1746940 +Fosfomycin,956653 +Fusidic acid,19010400 +Gentamicin,45892419 +Hydrocortisone,975125 +Imipenem,1778262 +Levofloxacin,1742253 +Linezolid,1736887 +Meropenem,1709170 +Methylprednisolone,1506270 +Monoclonal Antibodies,21603754 +Mupirocin,951511 +Nitrofurantoin,920293 +Norfloxacin,1721543 +Oxacillin,1724703 +Penicillin,1728416 +Piperacillin-Tazobactam,1746114 +Piperacillin-Tazobactam,1741122 +Prednisolone,1550557 +Rifampicin,1763204 +Teicoplanin,19078399 +Tetracycline,1836948 +Tobramycin,902722 +Trimethoprim-Sulfamethoxazole,1836430 +Trimethoprim-Sulfamethoxazole,1705674 +Vancomycin,1707687 diff --git a/inst/extdata/phems_variable_list/5.7_antifungals.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.7_antifungals.csv similarity index 95% rename from inst/extdata/phems_variable_list/5.7_antifungals.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.7_antifungals.csv index 8fd22f8..fe8ea61 100644 --- a/inst/extdata/phems_variable_list/5.7_antifungals.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.7_antifungals.csv @@ -1,6 +1,6 @@ -sourceCode,concept_id -Andiulafungin,19026450 -Fluconazole,1754994 -Isovuconazole,35606695 -Micafungin,19018013 -Voriconazole,1714277 +sourceCode,concept_id +Andiulafungin,19026450 +Fluconazole,1754994 +Isovuconazole,35606695 +Micafungin,19018013 +Voriconazole,1714277 diff --git a/inst/extdata/phems_variable_list/5.8_antibiotic_resistance.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.8_antibiotic_resistance.csv similarity index 96% rename from inst/extdata/phems_variable_list/5.8_antibiotic_resistance.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.8_antibiotic_resistance.csv index fabf680..601451e 100644 --- a/inst/extdata/phems_variable_list/5.8_antibiotic_resistance.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.8_antibiotic_resistance.csv @@ -1,11 +1,11 @@ -sourceCode,concept_id -Clindamycin-resistant,997881 -Clindamycin-resistant,37017134 -Drug-resistant,37017134 -ESBL,4257547 -Erythromycin-resistant,1746940 -Erythromycin-resistant,37017134 -MRSA,4019195 -Multidrug-resistant,37017134 -Vancomycin-resistant,1707687 -Vancomycin-resistant,37017134 +sourceCode,concept_id +Clindamycin-resistant,997881 +Clindamycin-resistant,37017134 +Drug-resistant,37017134 +ESBL,4257547 +Erythromycin-resistant,1746940 +Erythromycin-resistant,37017134 +MRSA,4019195 +Multidrug-resistant,37017134 +Vancomycin-resistant,1707687 +Vancomycin-resistant,37017134 diff --git a/inst/extdata/phems_variable_list/5.9_cardiac_surgery.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.9_cardiac_surgery.csv similarity index 98% rename from inst/extdata/phems_variable_list/5.9_cardiac_surgery.csv rename to inst/extdata/phems_variables_by_uc/original_tables/5.9_cardiac_surgery.csv index c533c5f..f86a964 100644 --- a/inst/extdata/phems_variable_list/5.9_cardiac_surgery.csv +++ b/inst/extdata/phems_variables_by_uc/original_tables/5.9_cardiac_surgery.csv @@ -1,43 +1,43 @@ -sourceCode,concept_id -Aortic root pulmonary valve autograft with right vent to pulmonary artery valved conduit/ aortic root pulmonary valve autograft with right vent to pulmonary artery aortoventriculoplasty ,44790415  -Aortic valve repair NEC ,4312194  -Aortopulmonary reconstruction with systemic to pulmonary arterial shunt ,44793133  -Application of band to pulmonary artery ,4049734  -Closure of patent ductus arteriosus NEC ,4050114  -Correction of partial anomalous pulmonary venous drainage ,4018441  -Correction of persistent sinus venosus ,4020508  -Creation of anastomosis to pulmonary artery from vena cava ,4019237  -Extracorporeal membrane oxygenation ,4052536  -Implantation of cardiac pacemaker system NEC ,4144921  -Open aortic valvotomy ,4020520  -Open implantation of ventricular assist device ,4139214  -Other specified : repair of pulmonary artery ,4018926  -Other specified other operations on ventricles of heart ,44510968  -Other specified: plastic repair of aorta ,4019026  -Plastic repair of aorta and end to end anastomosis of aorta ,4020812  -Plication of diaphragm ,4217615  -Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum ,4187380  -Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum ,40486525  -Primary repair of defect of interatrial septum NEC/repair of defect of interatrial septum using pericardial patch ,4020376  -Release of vascular ring of aorta ,4019028  -Relief of left ventricular outflow tract obstruction ,44790092  -Removal of band from pulmonary artery ,4021725  -Repair of defect of interventricular septum using prosthetic patch/unspecified repair of defect of interventricular septum ,4232476  -Repair of double outlet right ventricle ,4049979  -Repair of tetralogy of fallot using transannular patch ,4308136  -Repair of subaortic stenosis ,4018747  -Replacement of mitral valve NEC ,4203153  -Repositioning of transposed great arteries ,4019932  -Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec ,4339184  -Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec ,4019950  -Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec ,4020506  -Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec ,4178479  -Total cavopulmonary connection with extracardiac inferior caval vein topulmonary artery conduit ,44789857  -Transposition of coronary artery NEC ,4296790  -Tricuspid valve repair NEC ,4293619  -Unspecified creation of shunt to pulmonary artery from subclavian artery using interposition tube pr ,4019233  -Unspecified other transplantation of heart/allotransplantation of heart NEC ,4137127  -Unspecified other transplantation of heart/allotransplantation of heart NEC ,4336751  -Unspecified repair of defect of interventricular septum ,4199899  -Unspecified repair of tetralogy of fallot ,4019929  -Unspecified correction of total anomalous pulmonary  venous connection ,4017751  +sourceCode,concept_id +Aortic root pulmonary valve autograft with right vent to pulmonary artery valved conduit/ aortic root pulmonary valve autograft with right vent to pulmonary artery aortoventriculoplasty ,44790415  +Aortic valve repair NEC ,4312194  +Aortopulmonary reconstruction with systemic to pulmonary arterial shunt ,44793133  +Application of band to pulmonary artery ,4049734  +Closure of patent ductus arteriosus NEC ,4050114  +Correction of partial anomalous pulmonary venous drainage ,4018441  +Correction of persistent sinus venosus ,4020508  +Creation of anastomosis to pulmonary artery from vena cava ,4019237  +Extracorporeal membrane oxygenation ,4052536  +Implantation of cardiac pacemaker system NEC ,4144921  +Open aortic valvotomy ,4020520  +Open implantation of ventricular assist device ,4139214  +Other specified : repair of pulmonary artery ,4018926  +Other specified other operations on ventricles of heart ,44510968  +Other specified: plastic repair of aorta ,4019026  +Plastic repair of aorta and end to end anastomosis of aorta ,4020812  +Plication of diaphragm ,4217615  +Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum ,4187380  +Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum ,40486525  +Primary repair of defect of interatrial septum NEC/repair of defect of interatrial septum using pericardial patch ,4020376  +Release of vascular ring of aorta ,4019028  +Relief of left ventricular outflow tract obstruction ,44790092  +Removal of band from pulmonary artery ,4021725  +Repair of defect of interventricular septum using prosthetic patch/unspecified repair of defect of interventricular septum ,4232476  +Repair of double outlet right ventricle ,4049979  +Repair of tetralogy of fallot using transannular patch ,4308136  +Repair of subaortic stenosis ,4018747  +Replacement of mitral valve NEC ,4203153  +Repositioning of transposed great arteries ,4019932  +Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec ,4339184  +Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec ,4019950  +Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec ,4020506  +Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec ,4178479  +Total cavopulmonary connection with extracardiac inferior caval vein topulmonary artery conduit ,44789857  +Transposition of coronary artery NEC ,4296790  +Tricuspid valve repair NEC ,4293619  +Unspecified creation of shunt to pulmonary artery from subclavian artery using interposition tube pr ,4019233  +Unspecified other transplantation of heart/allotransplantation of heart NEC ,4137127  +Unspecified other transplantation of heart/allotransplantation of heart NEC ,4336751  +Unspecified repair of defect of interventricular septum ,4199899  +Unspecified repair of tetralogy of fallot ,4019929  +Unspecified correction of total anomalous pulmonary  venous connection ,4017751  diff --git a/inst/extdata/phems_variables_by_uc/uc1.csv b/inst/extdata/phems_variables_by_uc/uc1.csv new file mode 100644 index 0000000..cead9c3 --- /dev/null +++ b/inst/extdata/phems_variables_by_uc/uc1.csv @@ -0,0 +1,278 @@ +sourceCode,concept_id +dobutamine,1337720 +dopamine,1337860 +epinephrine,1343916 +milrinone,1368671 +norepinephrin,1321341 +vasopressin,1507835 +NA,9688 +Dobutamine,1337720 +Dopamine,1337860 +Ephedrine,1143374 +Epinephrine,1343916 +Isoproterenol,1183554 +Levosimendan,40173184 +Milrinone,1368671 +Norepinephrine,1321341 +Phenylephrine,1135766 +Terlipressin,19119253 +Vasopressin,1507835 +Aortic root pulmonary valve autograft with right vent to pulmonary artery valved conduit/ aortic root pulmonary valve autograft with right vent to pulmonary artery aortoventriculoplasty ,44790415  +Aortic valve repair NEC ,4312194  +Aortopulmonary reconstruction with systemic to pulmonary arterial shunt ,44793133  +Application of band to pulmonary artery ,4049734  +Closure of patent ductus arteriosus NEC ,4050114  +Correction of partial anomalous pulmonary venous drainage ,4018441  +Correction of persistent sinus venosus ,4020508  +Creation of anastomosis to pulmonary artery from vena cava ,4019237  +Extracorporeal membrane oxygenation ,4052536  +Implantation of cardiac pacemaker system NEC ,4144921  +Open aortic valvotomy ,4020520  +Open implantation of ventricular assist device ,4139214  +Other specified : repair of pulmonary artery ,4018926  +Other specified other operations on ventricles of heart ,44510968  +Other specified: plastic repair of aorta ,4019026  +Plastic repair of aorta and end to end anastomosis of aorta ,4020812  +Plication of diaphragm ,4217615  +Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum ,4187380  +Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum ,40486525  +Primary repair of defect of interatrial septum NEC/repair of defect of interatrial septum using pericardial patch ,4020376  +Release of vascular ring of aorta ,4019028  +Relief of left ventricular outflow tract obstruction ,44790092  +Removal of band from pulmonary artery ,4021725  +Repair of defect of interventricular septum using prosthetic patch/unspecified repair of defect of interventricular septum ,4232476  +Repair of double outlet right ventricle ,4049979  +Repair of tetralogy of fallot using transannular patch ,4308136  +Repair of subaortic stenosis ,4018747  +Replacement of mitral valve NEC ,4203153  +Repositioning of transposed great arteries ,4019932  +Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec ,4339184  +Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec ,4019950  +Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec ,4020506  +Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec ,4178479  +Total cavopulmonary connection with extracardiac inferior caval vein topulmonary artery conduit ,44789857  +Transposition of coronary artery NEC ,4296790  +Tricuspid valve repair NEC ,4293619  +Unspecified creation of shunt to pulmonary artery from subclavian artery using interposition tube pr ,4019233  +Unspecified other transplantation of heart/allotransplantation of heart NEC ,4137127  +Unspecified other transplantation of heart/allotransplantation of heart NEC ,4336751  +Unspecified repair of defect of interventricular septum ,4199899  +Unspecified repair of tetralogy of fallot ,4019929  +Unspecified correction of total anomalous pulmonary  venous connection ,4017751  +24h holter monitor ,45764527  +24h holter monitor ,4140473  +CT head ,4125350  +CT heart with contrast/ CT cardiac angiogram coronary/ CT cardiac gated with contrast ,4306317  +CT thorax with contrast ,4327032  +Cardiopulmonary exercise test (CPET) ,40492338  +EEG routine ,4181917  +EEG routine portable ,4205144  +Epicardial echocardiogram ,4203365  +Event monitor ,45765560  +Exercise test (non-CPET) ,4065416  +FL video swallow ,4345925  +IR PICC line insertion ,4322380  +IR bronchogram ,4312208  +IR bronchoscopy ,4032404  +IR tunnelled central venous line insertion ,40482732  +IR tunnelled central venous line removal ,42873079  +MRI cardiac complex congenital ,44802640  +MRI head ,4082979  +Pacemaker/ICD device check - remote patient initiated ,4235141  +Pacemaker/ICD device check - remote device initiated ,4235141  +Pacemaker/ICD interrogation (in clinic)/ pacemaker/ICD interrogation (other) ,40488431  +US abdomen and pelvis/ US abdomen ,4261497  +US abdomen and pelvis/ US abdomen ,4305221  +US cranial contents ,4083106  +US diaphragmatic region ,4303522  +US doppler ,35622931  +US doppler groin both ,35622931  +US doppler groin both ,4167029  +US doppler jugular vein both ,40489841  +US doppler lower limb veins both ,4335392  +US doppler renal both ,4167052  +US neck ,4083108  +US thorax and pleural cavity ,4329508  +US thorax and pleural cavity ,4093436  +US transoesophageal echocardiogram (toe) ,4019824  +US transthoracic echocardiogram/ us transthoracic echocardiogram (pre- admission)/ US transthoracic echocardiogram (sedated) ,4335825  +US urinary tract ,4125530  +US vocal cord ,44813863  +XR abdomen ,4264477  +XR chest ,4163872  +XR chest and abdomen ,4169275  +Cardiology ward admission (start datetime and end datetime) ,36675203  +HDU admission (start datetime and end datetime) ,4161811  +ICU admission (start datetime and end datetime) ,4123933  +Total hospital admission (start datetime and end datetime) ,8715  +Base Excess ,8753  +Base Excess ,4095105  +Diagnoses ,4234469  +Elective ICU admission ,4123933  +FiO2 ,42869590  +FiO2 ,8554  +"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",43530727  +"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",440207  +"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",4213310  +"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",201957  +"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",314383  +"High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) ",321319  +"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",260134  +"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",4165112  +"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",442588  +"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",4029498  +"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",443727  +"Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder ",317009  +Mechanical ventilation ,40493026  +Outpatient appointment type (telephone/ clinic visit etc.) ,5083  +"Outpatient appointments start datetime, end datetime ",9202  +Outpatient specialty ,32577  +PaCO2 ,44777602  +PaCO2 ,3027946  +PaCO2 ,8876  +Pupillary reaction ,4209008  +"Reason for ICU admission: (Main reason for ICU admission is not recovery from surgery or a procedure, Recovery from a bypass cardiac procedure, recovery from a non-bypass cardiac procedure, recovery from non-cardiac procedure) ",44803020  +Systolic blood pressure ,8876  +Systolic blood pressure ,3004249  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",42537745  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",432571  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",4124462  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",321042  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",317510  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",29783  +"Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure ",4245975  +ALT ,3006923  +ALT ,8645  +AST ,3013721  +AST ,8645  +Albumin ,8713  +Albumin ,3024561  +Albumin ,8636  +Bicarbonate (arterial) ,8753  +Bicarbonate (arterial) ,3008152  +Bicarbonate (venous) ,8753  +Bicarbonate (venous) ,3027273  +Bilirubin ,3006140  +Bilirubin ,8749  +Blood urea nitrogen ,3024641  +Blood urea nitrogen ,8753  +CRP ,8751  +CRP ,3020460  +Calcium ,8753  +Calcium ,3015377  +Chloride ,8753  +Chloride ,3018572  +Creatinine ,8749  +Creatinine ,8840  +Creatinine ,3051825  +Glucose ,3013826  +Glucose ,8753  +Hematocrit ,3009542  +Hematocrit ,8554  +Hemoglobin ,8713  +Hemoglobin ,8636  +Hemoglobin ,40762351  +INR prothrombin time ,3034426  +INR prothrombin time ,8555  +Immature WBC count ,4298431  +Immature WBC count ,8647  +Lactate ,3047181  +Lactate ,8753  +Magnesium ,8753  +Magnesium ,3033836  +Neutrophil count ,3007670  +Neutrophil count ,8647  +Phosphate ,3003458  +Phosphate ,8753  +Platelet count ,8647  +Platelet count ,4267147  +Potassium ,8753  +Potassium ,3005456  +Sodium ,3019550  +Sodium ,8753  +pCO2 (arterial) ,3027946  +pCO2 (arterial) ,8876  +pCO2 (venous) ,44777602  +pCO2 (venous) ,3021447  +pCO2 (venous) ,8876  +pH (arterial) ,37399161  +pH (venous) ,37392672  +pO2 (arterial) ,3027801  +pO2 (arterial) ,8876  +pO2 (venous) ,3024354  +pO2 (venous) ,8876  +CVL infections ,42537043  +Extracorporeal membrane oxygenation,4052536  +ICU ward stay ,4123933  +LCOS - Cardiac arrest ,321042  +LCOS - NEC requiring treatment ,4185565  +LCOS - renal support (CVVH/ PD),4324124  +LCOS - renal support (CVVH/ PD) ,4051330  +Low cardiac output state (LCOS) - ECMO,4185565 +Low cardiac output state (LCOS) - ECMO ,4185565  +Neurological injury - intracranial haemmhorage/ intracranial bleeding ,439847  +Neurological injury - infarction ,443454  +Neurological injury - seizure ,377091  +Surgical injury - Blood Loss ,4308537  +Surgical injury - Chylothorax ,4306136  +Surgical injury - Reexplore for bleeding,437312  +Surgical injury - Reexplore for bleeding,442019  +Surgical injury - Reexplore for bleeding ,4295705  +Age-dependent HR ,3027018 +Age-dependent HR ,8483  +Age-dependent RR ,3024171 +Age-dependent RR ,8483  +SBP (Systolic Blood Pressure) ,3004249 +SBP (Systolic Blood Pressure) ,8876  +DBP (Dyastolic Blood Pressure) ,3012888 +DBP (Dyastolic Blood Pressure) ,8876  +SpO2 ,4096101  +SpO2 ,8554  +Body Surface Area (BSA) - Combination of weight and height ,4201235  +Body Surface Area (BSA) - Combination of weight and height ,8617  +Cardiac surgeries (Interventions) ,4275564  +Extracardiac anomalies - diagnoses ,0  +Height ,607590  +Height ,8582  +Weight ,3025315  +Weight ,9529  +"Antegrade Cerebral Perfusion start datetime, end datetime ",4272324  +Aristotle's score of surgery ,0  +"Cardiac bypass start datetime, end datetime ",4336464  +"Cross-clamping start datetime, end datetime ",4201547  +"Deep hypothermic circulatory arrest start datetime, end datetime ",37152781  +"Antegrade Cerebral Perfusion start datetime, end datetime ",4272324  +Extubation event ,4150627  +STAT/EACTS score of surgery ,40490494  +"Surgery start datetime, end datetime ",4301351  +Admission reason ,44803020  +ventilation ,0  +"Vasoactive infusion start datetime, end datetime ",42539650  +Type of vasoactive infusion ,0  +VIS score of vasoactive infusion ,0  +"Postop central venous catheter in/start datetime, out/ end datetime ",4179206  +"Total ventilation start datetime, end datetime ",0  +Type of vasoactive infusion ,0  +VIS score of vasoactive infusion ,0  +"Vasoactive infusion start datetime, end datetime ",42539650  +ventilation ,0  +"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",44784217  +"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",315643  +"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",4068155  +"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",4228448  +"Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) ",4185572  +"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing) ",4117045  +"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing) ",4353741  +"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing) ",4049398  +"Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing) ",4051940  +Cardiac surgeries (interventions) ,4275564  +Diaphragmatic Paralysis ,4275136  +"Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) ",1309944  +"Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) ",46234437  +"Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) ",1354860  +Listed for heart transplantation ,609312  +Pneumothorax ,253796  +Sternum reopening (procedure undertaken) ,4044892  +Tracheostomy ,44783799  +Vocal Cord Dysfunction ,4046868  +intubation ,4202832  diff --git a/inst/extdata/phems_variables_by_uc/uc2.csv b/inst/extdata/phems_variables_by_uc/uc2.csv new file mode 100644 index 0000000..9b90561 --- /dev/null +++ b/inst/extdata/phems_variables_by_uc/uc2.csv @@ -0,0 +1,602 @@ +sourceCode,concept_id +Dobutamine,1337720 +Dopamine,1337860 +Ephedrine,1143374 +Epinephrine,1343916 +Isoproterenol,1183554 +Levosimendan,40173184 +Milrinone,1368671 +Norepinephrine,1321341 +Phenylephrine,1135766 +Terlipressin,19119253 +Vasopressin,1507835 +Chemotherapy,4273629 +Dexamethasone,1518254 +Hydrocortisone,975125 +Methylprednisolone,1506270 +Monoclonal Antibodies,21603754 +Prednisolone,1550557 +Amikacin,1790868 +Amoxicillin,1713332 +Amoxicillin clavulanate,1713332 +Amoxicillin clavulanate,1759842 +Ampicillin,1717327 +Azithromycin,1734104 +Cefadroxil,1769535 +Cefazolin,1771162 +Cefepime,1748975 +Cefotaxime,1774470 +Ceftazidime,1776684 +Ceftazidime-Avibactam,46221507 +Ceftazidime-Avibactam,1776684 +Ceftolozane-Tazovactam,1741122 +Ceftolozane-Tazovactam,45892599 +Cefuroxime,1778162 +Chemotherapy,4273629 +Ciprofloxacin,1797513 +Clarithromycin,1750500 +Clindamycin,997881 +Colistin,901845 +Daptomycin,1786617 +Dexamethasone,1518254 +Ertapenem,1717963 +Erythromycin,1746940 +Fosfomycin,956653 +Fusidic acid,19010400 +Gentamicin,45892419 +Hydrocortisone,975125 +Imipenem,1778262 +Levofloxacin,1742253 +Linezolid,1736887 +Meropenem,1709170 +Methylprednisolone,1506270 +Monoclonal Antibodies,21603754 +Mupirocin,951511 +Nitrofurantoin,920293 +Norfloxacin,1721543 +Oxacillin,1724703 +Penicillin,1728416 +Piperacillin-Tazobactam,1746114 +Piperacillin-Tazobactam,1741122 +Prednisolone,1550557 +Rifampicin,1763204 +Teicoplanin,19078399 +Tetracycline,1836948 +Tobramycin,902722 +Trimethoprim-Sulfamethoxazole,1836430 +Trimethoprim-Sulfamethoxazole,1705674 +Vancomycin,1707687 +Andiulafungin,19026450 +Fluconazole,1754994 +Isovuconazole,35606695 +Micafungin,19018013 +Voriconazole,1714277 +Clindamycin-resistant,997881 +Clindamycin-resistant,37017134 +Drug-resistant,37017134 +ESBL,4257547 +Erythromycin-resistant,1746940 +Erythromycin-resistant,37017134 +MRSA,4019195 +Multidrug-resistant,37017134 +Vancomycin-resistant,1707687 +Vancomycin-resistant,37017134 +Previous diagnosis of sepsis measure ,1340204  +Previous diagnosis of sepsis measure ,132797  +Origin (external) ,44790567  +Origin (internal) ,4294886  +Reason for admission ,44803020  +Surgical admission (non-urgent) ,4084670  +Surgical admission (urgent) ,4123946   +Non-surgical admission ,0  +Central venous catheter ,4179206  +Diagnosis of chronic condition ,443783  +Diagnosis of chronic condition ,312723  +Diagnosis of chronic condition ,201820  +Diagnosis of chronic condition ,255573  +Diagnosis of acute infection having the potential for progression to sepsis1+2 ,37174269  +Diagnosis of acute infection having the potential for progression to sepsis1+2 ,4271450  +Meningo-encephalitis ,4322814  +hepatitis ,4243475  +pneumonia ,255848  +meningitis ,435785  +bacteremia ,132736  +viremia ,133327  +UTI ,4331815  +tuberculosis ,4103588  +candidiasis ,433968  +Diagnosis of SIRS ,434821  +Diagnosis of condition producing immunodeficiency ,4140977  +Abcess ,444202  +appendicitis ,440448  +NA,NA +peritonitis ,196152  +cellulitis ,435613  +surgical site inflammation ,4300243  +injury with open wound ,444187  +renal insufficiency ,36716945  +endocarditis ,441589  +miocarditis ,314383  +necrotizing enterocolitis ,44807226  +Cancer ,443392  +cardiac arrest ,321042  +organ transplant ,4208341  +acute kidney injury ,197320  +immunodeficiency ,433740  +asplenia ,45768671  +cerebral palsy ,4134120  +rheumatoid arthritis ,80809  +sickle cell disease ,22281  +ulcerative colitis ,81893  +Crohn's disease ,201606  +Cushing's disease ,195212  +Down's syndrome ,439125  +mitochondrial disease ,81539  +nephrotic syndrome ,195314  +neutropenia ,604243  +Diagnosis of organ system dysfunction ,4080011  +Antibiotics ,4085730  +Antivirals ,4140762  +Immunosuppressors ,4314777  +Corticoids ,21602722  +Antineoplastics ,4181511  +Surgery previous to prediction time point ,4301351  +"Chest opening, chest drainage ",4074689  +Arterial blood pressure catheter ,45758028  +Peripheral IV cannulas ,4177205  +Urinary catheter ,4070667  +Nasogastric/orogastric tube ,42538045  +Endotracheal tube ,4097216  +Tracheostomy ,44783799  +Invasive ventilation ,44790095  +Non-invasive ventilation ,4177224  +FiO2 ,42869590  +FiO2 ,8554  +FiO2 ,8510  +FiO2 ,720868  +Mean Airway Pressure (MAP) ,42527086  +Mean Airway Pressure (MAP) ,44777590  +Mean Airway Pressure (MAP) ,8876  +Mean Airway Pressure (MAP) ,44777602  +Oxygenation index ,4193843  +Oxygenation index ,8529  +Oxygenation index ,0  +ECMO ,4052536  +ECMO type ,37206603  +ECMO type ,37206601  +Ventricular assist device (VAD) ,4235043  +Dialysis ,4032243  +Dialysis ,4051330  +Peritoneal dialysis ,4324124  +HR ,3027018  +HR ,8483  +RR ,3024171  +RR ,8483  +Body temperature ,3020891  +Body temperature ,586323  +SBP (Systolic Blood Pressure) ,3004249  +SBP (Systolic Blood Pressure) ,8876  +DBP (Diastolic blood pressure) ,3012888  +DBP (Diastolic blood pressure) ,8876  +SpO2 ,4096101  +SpO2 ,8554  +Urine output ,3014315  +Urine output ,8587  +Urine output ,44777613  +Urine output ,33014  +Urine output ,0  +Weight ,3025315  +Weight ,9529  +Weight ,8504  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +GCS ,3032652  +Pupillary reactivity (right) ,21490963  +Pupillary reactivity (right) ,4069590  +Pupillary reactivity (right) ,45879546  +Pupillary reactivity (right) ,45880051  +Pupillary reactivity (right) ,4188539  +Pupillary reactivity (right) ,4188540  +Pupillary reactivity (left) ,21491763  +Pupillary reactivity (left) ,4069590  +Pupillary reactivity (left) ,45879546  +Pupillary reactivity (left) ,45880051  +Pupillary reactivity (left) ,4188539  +Pupillary reactivity (left) ,4188540  +Pupillary size (right) ,3027214  +Pupillary size (right) ,8588  +Pupillary size (right) ,36310446  +Pupillary size (right) ,21499034  +Pupillary size (right) ,4116857  +Pupillary size (left) ,3021415  +Pupillary size (left) ,8588  +Pupillary size (left) ,36310446  +Pupillary size (left) ,21499034  +Pupillary size (left) ,4116857  +Capillary refill time ,3045676  +Capillary refill time ,8555  +Peripheral pulse (pressure) ,4314539  +Peripheral pulse (pressure) ,4181412  +Peripheral pulse (pressure) ,4132135  +Peripheral pulse (pressure) ,4124461  +Peripheral pulse (pressure) ,8483  +Central pulse ,4224504  +Central pulse ,4181412  +Central pulse ,4132135  +Central pulse ,4124461  +Central pulse ,8483  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +Bacterial pathogen detection ,4036356  +Name of bacterial pathogen detected ,432545  +Quantification of colonies in culture ,4299649  +Quantification of colonies in culture ,9278  +PCR panel ,4196268  +Antibiotic resistance ,44806682  +Viral pathogen detection ,440029  +PCR panel ,4196268  +Leukocytes ,4212899  +Leukocytes ,9278  +Leukocytes ,0  +Thromboplastin time ,4175016  +Thromboplastin time ,8555  +Thromboplastin time ,8523  +D-dimer ,37393605  +D-dimer ,8751  +D-dimer ,8753  +Fibrinogen ,4094436  +Fibrinogen ,8636  +Fibrinogen ,8753  +Blood urea nitrogen ,4017361  +Blood urea nitrogen ,8753  +Blood urea nitrogen ,8840  +Glucose ,3013826  +Glucose ,8753  +Glucose ,8840  +Direct bilirubin ,4118986  +Direct bilirubin ,8749  +Direct bilirubin ,8753  +Direct bilirubin ,8840  +Ionized calcium ,44789220  +Ionized calcium ,8753  +PCT ,3046279  +PCT ,8842  +PCT ,8725  +PCT ,8748  +MR-proADM ,42536081  +MR-proADM ,8736  +Interleukin-6 ,3033291  +Interleukin-6 ,8845  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +pH ,3019977  +pCO2 ,3027946  +pCO2 ,44777602  +pCO2 ,8876  +PaO2 ,3027801  +PaO2 ,44777602  +PaO2 ,8876  +HCO3 ,3008152  +HCO3 ,8753  +Base excess ,3003396  +Base excess ,8753  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +pH ,3012544  +pH ,3009343  +pCO2 ,3021447  +pCO2 ,3023024  +pCO2 ,44777602  +pCO2 ,8876  +PaO2 ,3024354  +PaO2 ,3028626  +PaO2 ,44777602  +PaO2 ,8876  +HCO3 ,3027273  +HCO3 ,3015235  +HCO3 ,8753  +Base excess,3002032  +Base excess,3003129  +Base excess,8753  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA diff --git a/inst/extdata/phems_variables_by_uc/uc3.csv b/inst/extdata/phems_variables_by_uc/uc3.csv new file mode 100644 index 0000000..df4395c --- /dev/null +++ b/inst/extdata/phems_variables_by_uc/uc3.csv @@ -0,0 +1,214 @@ +sourceCode,concept_id +body weight ,3025315  +body weight ,9529  +body weight ,8504  +height ,3036277  +height ,8582  +height ,9546  +hemophilia A diagnosis ,434007  +hemophilia A subtype/ severity ,4094223  +hemophilia A subtype/ severity ,4140661  +hemophilia A subtype/ severity ,4056830  +blood group ,3003694  +factor VIII inhibitor status ,37393608  +factor VIII inhibitor status ,4126681  +factor VIII inhibitor status ,9190  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +factor VIII inhibitor titer,3024942 +factor VIII inhibitor titer,44777562 +factor VIII activity measurement,3022520 +factor VIII activity measurement,3011832 +factor VIII activity measurement,8985 +factor VIII activity measurement,9332 +factor VIII activity measurement,8554 +Von Willebrand factor activity measurement,43534000 +Von Willebrand factor activity measurement,8985 +Von Willebrand factor activity measurement,9332 +Von Willebrand factor activity measurement,8554 +Von Willebrand factor antigen measurement,3002124 +Von Willebrand factor antigen measurement,8985 +Von Willebrand factor antigen measurement,9332 +Von Willebrand factor antigen measurement,8554 +Von Willebrand factor propeptide measurement,3023693 +Von Willebrand factor propeptide measurement,3042349 +Von Willebrand factor propeptide measurement,8763 +activated partial thromboplastin time (APTT),4175016 +activated partial thromboplastin time (APTT),8555 +activated partial thromboplastin time (APTT),8523 +Prothrombin time (PT),3034426 +Prothrombin time (PT),8555 +Prothrombin time (PT),8523 +Prothrombin time (PT),8554 +platelet count,4267147 +platelet count,44777588 +hematocrit,3009542 +hematocrit,44777604 +hematocrit,8554 +fibrinogen,3016407 +fibrinogen,8636 +ALT,3006923 +ALT,8645 +AST,3013721 +AST,8645 +factor VIII  ,35766745  +factor VIII  ,21154209  +factor VIII  ,35831239  +factor VIII  ,40745282  +factor VIII  ,8985  +factor VIII dose is continuous infusion or bolus dose ,40492862  +factor VIII dose is continuous infusion or bolus dose ,4129275  +factor VIII dose is continuous infusion or bolus dose ,4265597  +desmopressin ,1517070  +desmopressin ,9655  +desmopressin ,8576  +desmopressin ,9662  +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +NA,NA +Medical/ surgical procedure,4172515 +NaCl administration during surgery,967823 +NaCl administration during surgery,8587 +plasma administration during surgery,4028665 +datetime start anesthesia,4160439 +blood loss during surgery,4308716 +blood transfusion during surgery,37017589 diff --git a/inst/extdata/standardness/.gitkeep b/inst/extdata/standardness/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/inst/templates/cohortCapr_md.Rmd b/inst/templates/cohortCapr_md.Rmd index 27eee34..a69b0d2 100644 --- a/inst/templates/cohortCapr_md.Rmd +++ b/inst/templates/cohortCapr_md.Rmd @@ -47,7 +47,9 @@ connectionDetails <- createConnectionDetails( ``` ## Concept sets -Define a measurement concept set using Capr and include all descendants +One concept set has been defined per use case. +Here we collect the details for all concepts in the concept set (excluding descendants), +this includes the concept name, standard status, domain, vocabulary, and more details. ```{r concept sets, echo=TRUE} ## Concept sets source("./R/conceptSets.R") @@ -79,14 +81,14 @@ source("./R/countOccurrences.R") # Get links between tables and fields as input source("./R/table_linked_to_concept_field.R") -additionalVarsCounts <- +uc1Counts <- countOccurrences( - conceptSets$concepts$additional, - c("condition_occurrence", "procedure_occurrence", "measurement", "observation"), - links, - con, - connectionConfig$cdm_schema, - connectionConfig$vocabulary_schema, + v = conceptSets$concepts$uc1, + tables = names(links), # Query all CDM tables + links = links, # Links between tables and concept_id fields (cdm_table:field) + db_connection = con, + cdm_schema = connectionConfig$cdm_schema, + vocab_schema = connectionConfig$vocabulary_schema, save_path = config_oth$save_path_counts ) %>% print() @@ -126,14 +128,14 @@ Similarly to isStandard(), isStandardCS() can be used to check the standardness # connect to DB con <- connect(connectionDetails) -# run for labTests conceptSet -labTests <- conceptSets$conceptSets$labTests +# run for uc2 conceptSet +uc2 <- conceptSets$conceptSets$uc2 # check standardness across concept set source('./R/isStandardCS.R') nonStandardCS <- isStandardCS( db_connection = con, - conceptSet = conceptSets$conceptSets$labTests, + conceptSet = conceptSets$conceptSets$uc2, # (optional) Save the results (with standard and non-standard concepts) save_path = config_oth$save_path_isStandard ) @@ -145,11 +147,8 @@ disconnect(con) nonStandardCS ``` - ## Initial event cohort -People having any of the following: -any of the lab test measurements -limit to first/earliest occurrence of any of the above measurements (+descendants) per person +NOTE: the cohort defined in this chunk serves solely as an example. ```{r Cohort definition} ## Cohort definition # Create cohort definition From 81b8eed6303ef70d6d60e6b76c0d422c08f1a949 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Wed, 28 Aug 2024 15:32:03 +0200 Subject: [PATCH 05/27] port hades developments --- R/isStandard.R | 78 +++++---- R/isStandardCS.R | 40 ++--- R/isStandardDB.R | 88 ++++++++++ R/table_linked_to_concept_field.R | 20 +-- tests/testthat/test-countOccurrences.R | 230 +++++++++++++++++++++++++ tests/testthat/test-isStandard.R | 127 ++++++++++++++ tests/testthat/test-isStandardCS.R | 32 ++++ tests/testthat/test-isStandardDB.R | 107 ++++++++++++ 8 files changed, 657 insertions(+), 65 deletions(-) create mode 100644 R/isStandardDB.R create mode 100644 tests/testthat/test-countOccurrences.R create mode 100644 tests/testthat/test-isStandard.R create mode 100644 tests/testthat/test-isStandardCS.R create mode 100644 tests/testthat/test-isStandardDB.R diff --git a/R/isStandard.R b/R/isStandard.R index c22d0bd..5d24fa3 100644 --- a/R/isStandard.R +++ b/R/isStandard.R @@ -19,27 +19,31 @@ #' #' @importFrom readr read_csv write_csv #' @importFrom dplyr mutate across filter select inner_join -#' @importFrom DBI dbGetQuery +#' @importFrom DatabaseConnector connect disconnect querySql #' @export isStandard <- function(db_connection, data_concepts_path, vocab_schema, save_path = NULL) { - library(readr) - library(dplyr) - library(DBI) - # Read concept table from SQL database - concept_table_query <- paste0( - "SELECT concept_id, concept_name, standard_concept FROM ", vocab_schema, ".concept" - ) - concept_table <- dbGetQuery(db_connection, concept_table_query) %>% - mutate(concept_id = as.character(concept_id)) %>% - mutate(concept_id = tolower(trimws(concept_id))) + concept_table_query <- SqlRender::render( + "SELECT concept_id, CONCEPT_NAME, standard_concept FROM @vocab_schema.concept", + vocab_schema = vocab_schema + ) + + concept_table_query_translated <- SqlRender::translate( + sql = concept_table_query, + targetDialect = attr(db_connection, "dbms") + ) + + concept_table <- DatabaseConnector::querySql(db_connection, concept_table_query_translated) |> + dplyr::rename(concept_id = CONCEPT_ID) |> + dplyr::mutate(concept_id = as.character(concept_id)) |> + dplyr::mutate(concept_id = tolower(trimws(concept_id))) # Initialize vectors for non-standard concepts nonStandard <- c() conceptNameNonStandard <- c() sourceCodeNonStandard <- c() sourceTableNonStandard <- c() - standardness <- c() + standard_concept <- c() # Get tables from data_concepts_path tables <- list.files(path = data_concepts_path, pattern = "\\.csv$", full.names = TRUE) @@ -54,33 +58,39 @@ isStandard <- function(db_connection, data_concepts_path, vocab_schema, save_pat # Read and prepare table tb <- - readr::read_csv(table_path, col_types = cols(sourceCode = col_character(), concept_id = col_character())) %>% - mutate(across(c(sourceCode, concept_id), ~gsub("\u00A0", " ", .))) %>% - mutate(across(c(sourceCode, concept_id), ~trimws(.))) %>% - filter(!is.na(sourceCode), !is.na(concept_id)) %>% - mutate(concept_id = tolower(concept_id), - concept_id = as.character(concept_id)) %>% - select(sourceCode, concept_id) + readr::read_csv(table_path, col_types = readr::cols( + sourceCode = readr::col_character(), + concept_id = readr::col_character() + )) |> + dplyr::mutate(across(c(sourceCode, concept_id), ~ gsub("\u00A0", " ", .))) |> + dplyr::mutate(dplyr::across(c(sourceCode, concept_id), ~ trimws(.))) |> + dplyr::filter(!is.na(sourceCode), !is.na(concept_id)) |> + dplyr::mutate( + concept_id = tolower(concept_id), + concept_id = as.character(concept_id) + ) |> + dplyr::select(sourceCode, concept_id) # Join tables - joined <- inner_join(concept_table, tb, by = "concept_id") %>% arrange(standard_concept, concept_id) - # NA == non-standard - joined$standard_concept[is.na(joined$standard_concept)] <- "Non-standard" + joined <- dplyr::inner_join(concept_table, tb, by = "concept_id")|> + dplyr::rename(standard_concept = STANDARD_CONCEPT, concept_name = CONCEPT_NAME) |> + dplyr::mutate(standard_concept = ifelse(is.na(standard_concept), 'Non-standard', standard_concept)) |> + dplyr::mutate(standard_concept = dplyr::recode( + standard_concept, + "S" = "Standard" + )) |> + dplyr::filter(!(standard_concept == "Standard")) # Add non-standard concept info to vectors - ind <- which(!(joined$standard_concept %in% c('S'))) + ind <- which(!(joined$standard_concept %in% c("S"))) nonStandard <- append(nonStandard, joined$concept_id[ind]) conceptNameNonStandard <- append(conceptNameNonStandard, joined$concept_name[ind]) sourceCodeNonStandard <- append(sourceCodeNonStandard, joined$sourceCode[ind]) - sourceTableNonStandard <- append(sourceTableNonStandard, - replicate(length(ind), table_name, simplify="vector")) - standardness <- append(standardness, joined$standard_concept[ind]) - - if (length(ind) == 0) { - message("No non-standard concepts found in list of concepts: ", table_name) - } else { - message(paste("Found ", length(ind), " non-standard concepts in list of concepts: ", table_name)) - } + sourceTableNonStandard <- append( + sourceTableNonStandard, + replicate(length(ind), table_name, simplify = "vector") + ) + standard_concept <- append(standard_concept, joined$standard_concept[ind]) # Save if not empty and save_path is provided if (!is.null(save_path) && nrow(joined) > 0) { @@ -92,14 +102,14 @@ isStandard <- function(db_connection, data_concepts_path, vocab_schema, save_pat message(paste("No matches found for concept set.\n")) } } - + # Create table of non-standard concepts res <- tibble::tibble( concept_id = nonStandard, concept_name = conceptNameNonStandard, source_code = sourceCodeNonStandard, source_table = unlist(sourceTableNonStandard), - standardness = standardness + standard_concept = standard_concept ) message(paste0("Finished checking for non-standard concepts.\n", nrow(res), " non-standard concepts found across tables.")) diff --git a/R/isStandardCS.R b/R/isStandardCS.R index bb86da1..01fda15 100644 --- a/R/isStandardCS.R +++ b/R/isStandardCS.R @@ -2,71 +2,69 @@ #' #' This function examines a concept set for non-standard concepts by comparing them against a standard concepts table in a SQL database. It identifies non-standard concepts and optionally saves the details of these non-standard concepts to a specified path. #' -#' @param db_connection A database connection object to the SQL database containing the standard concepts table. This parameter is currently not used in the function but intended for future use where database queries might be necessary. #' @param conceptSet An object representing a set of concepts, containing details such as concept ID, concept name, and whether it is a standard concept. The structure of this object should support `@Expression` to access the individual concepts and their properties. #' @param save_path (Optional) The file path where the details of non-standard concepts should be saved as a CSV file. If not provided, the information will not be saved but will still be checked for non-standard concepts. #' -#' @return A tibble containing the columns `concept_name`, `concept_id`, `concept_set`, and `standard`, which represent the concept name, concept ID, the name of the concept set, and the standard status for each concept found to be non-standard or not classified as standard. +#' @return A tibble containing the columns `concept_name`, `concept_id`, `concept_set`, and `standard_concept`, which represent the concept name, concept ID, the name of the concept set, and the standard status for each concept found to be non-standard or not classified as standard. #' -#' @details The function processes a given concept set to identify non-standard concepts. Non-standard concepts are those not marked as 'S' (Standard) or 'C' (Classification) in their `standard_concept` attribute. The function creates a data frame with concept details, filters out standard and classification concepts, and if a `save_path` is provided, saves this information to a CSV file. If no non-standard concepts are found, appropriate messages are displayed. +#' @details The function processes a given concept set to identify non-standard concepts. Non-standard concepts are those not marked as 'S' (Standard) or 'C' (Classification) in their `standard_concept` attribute. The function creates a data frame with concept details, replaces empty `standard_concept` values with "Non-standard", filters out standard and classification concepts, and if a `save_path` is provided, saves this information to a CSV file. If no non-standard concepts are found, appropriate messages are displayed. #' #' @examples #' # Assuming you have a concept set `conceptSet`: -#' non_standard_concepts <- isStandardCS(db_conn, conceptSet, "path/to/save_standard_AND_non_standard/") +#' non_standard_concepts <- isStandardCS(conceptSet, "path/to/save_standard_AND_non_standard/") #' #' @export -isStandardCS <- function(db_connection, conceptSet, save_path = NULL) { - library(readr) - library(dplyr) - +isStandardCS <- function(conceptSet, save_path = NULL) { # Initialize vectors for non-standard concepts nonStandard <- c() conceptNameNonStandard <- c() sourceCodeNonStandard <- c() sourceTableNonStandard <- c() - standardness <- c() + standard_concept <- c() # Get concept set details cs <- conceptSet@Expression # initialize vectors - concept_name = c() - concept_id = c() - concept_set = c() - standardness = c() + concept_name <- c() + concept_id <- c() + concept_set <- c() + standard_concept <- c() for (concept in cs) { concept_name <- append(concept_name, concept@Concept@concept_name) concept_id <- append(concept_id, concept@Concept@concept_id) - standardness <- append(standardness, concept@Concept@standard_concept) + standard_concept <- append(standard_concept, concept@Concept@standard_concept) } cs_name <- conceptSet@Name concept_set <- rep.int(cs_name, length(concept_id)) - + # Replace NAs with non-standard - standardness[is.na(standardness)] <- "Non-standard" + standard_concept[standard_concept == ""] <- "Non-standard" # Filter out standard and classification concepts; keep non-standard and NA df <- data.frame( concept_name, concept_id, concept_set, - standardness - ) %>% dplyr::arrange(standardness, concept_id) + standard_concept + ) # Save if not empty and save_path is provided if (!is.null(save_path) && nrow(df) > 0) { message(paste0("saving file: CONCEPTSET_", cs_name)) - write_csv(df, paste0(save_path, "/CONCEPTSET_", cs_name, ".csv")) + readr::write_csv(df, paste0(save_path, "/CONCEPTSET_", cs_name, ".csv")) } else if (is.null(save_path)) { message("No save path specified; returning non-standard concepts\n") } else { - message(paste0("No matches found for concept set: ", table_name, "\n")) + message(paste0("No matches found for concept set: ", cs_name, "\n")) } # NonStandard concepts - res <- df %>% filter(standardness != "S" | is.na(standardness)) %>% tibble::tibble() + res <- df |> + dplyr::filter(standard_concept != "S" | is.na(standard_concept)) |> + tibble::tibble() if (nrow(res) == 0) { message("No non-standard concepts found in concept set: ", cs_name) } else { diff --git a/R/isStandardDB.R b/R/isStandardDB.R new file mode 100644 index 0000000..78bdcc4 --- /dev/null +++ b/R/isStandardDB.R @@ -0,0 +1,88 @@ +#' Identify Non-Standard Concepts in Database +#' +#' This function checks a set of tables for non-standard concepts by comparing them against the concept table in a SQL database. It identifies non-standard concepts and optionally saves the joined tables containing these non-standard concepts. +#' +#' @param db_connection A DBI database connection object to the SQL database containing the standard concepts table. +#' @param cdm_schema The schema name of the Common Data Model (CDM) database containing the source tables. +#' @param vocab_schema The schema name of the vocabulary database containing the standard concepts table. +#' @param links A named list where each name is a table name and each value is a vector of two strings: the column names for `concept_id` and `source_code` in that table. +#' @param save_path (Optional) The file path where the joined tables containing non-standard concepts should be saved. If not provided, the tables will not be saved but will still be checked for non-standard concepts. +#' +#' @return A tibble containing the columns `concept_id`, `concept_name`, `source_code`, and `source_table`, representing the concept ID, concept name, source code, and source table name for each non-standard concept found. +#' +#' @details The function first queries the `concept` table from the provided SQL database to retrieve the standard concepts. It then reads each specified table, preparing and joining it with the standard concepts table based on the concept ID. Non-standard concepts are identified based on the `standard_concept` column being `NA`. Information about these non-standard concepts is collected and returned as a tibble. The function also adds a `source_table` column to indicate the source table name. +#' +#' If a `save_path` is provided, each joined table (including both standard and non-standard concepts) is saved to the specified directory with the same name as the original table file. +#' +#' @examples +#' # Assuming you have a valid DBI connection `db_conn` and your tables are specified in the `links` list: +#' links <- list( +#' "table1" = c("concept_id_col1", "source_code_col1"), +#' "table2" = c("concept_id_col2", "source_code_col2") +#' ) +#' non_standard_concepts <- isStandardDB(db_conn, "cdm_schema", "vocab_schema", links, "path/to/save_non_standard/") +#' +#' @importFrom readr read_csv write_csv +#' @importFrom dplyr mutate filter rename bind_rows +#' @importFrom DatabaseConnector querySql +#' @importFrom SqlRender render translate +#' @export +isStandardDB <- function(db_connection, cdm_schema, vocab_schema, links, save_path = NULL) { + # get tables + tables <- names(links) + + for (table in tables) { + # Read concept table from SQL database + concept_table_query <- SqlRender::render(sprintf( + " + WITH source_table AS ( + -- Select the unique concept_id and source code from the specified source table + SELECT DISTINCT %s AS concept_id, %s AS source_code + FROM %s.%s + ) + SELECT a.concept_id, a.concept_name, source_table.source_code, a.standard_concept + FROM %s.concept a + JOIN source_table ON a.concept_id = source_table.concept_id + ORDER BY source_table.concept_id + ", + links[[table]][1], links[[table]][2], cdm_schema, table, vocab_schema) + ) + + concept_table_query_translated <- SqlRender::translate( + sql = concept_table_query, + targetDialect = attr(db_connection, "dbms") + ) + + concept_table <- DatabaseConnector::querySql(db_connection, concept_table_query_translated) |> + dplyr::rename( + concept_id = CONCEPT_ID, + concept_name = CONCEPT_NAME, + source_code = SOURCE_CODE, + standard_concept = STANDARD_CONCEPT) |> + dplyr::mutate(concept_id = as.character(concept_id)) |> + dplyr::mutate(concept_id = tolower(trimws(concept_id))) + concept_table["source_table"] <- rep.int(table, nrow(concept_table)) + nonStandardDF <- concept_table |> dplyr::filter(is.na(standard_concept)) + + # Initialize res on first loop iteration + if (!exists("res")) { + res <- nonStandardDF + } else { + res <- dplyr::bind_rows(res, nonStandardDF) + } + } + + # Save if not empty and save_path is provided + if (!is.null(save_path) && nrow(res) > 0) { + readr::write_csv(concept_table, paste0(save_path, "/", table)) + message(paste0("Saved results to ", save_path, "/", table, "\n")) + } else if (is.null(save_path)) { + message("No save path provided, only returning non-standard concepts DF") + } else if (nrow(res) == 0) { + message("No non-standard concepts found in DB; not saving any file.\n") + } + + message(paste0("Finished checking for non-standard concepts.\n", nrow(res), " non-standard concepts found across tables.")) + + return(res) +} diff --git a/R/table_linked_to_concept_field.R b/R/table_linked_to_concept_field.R index 21e8ab8..9ddcaf7 100644 --- a/R/table_linked_to_concept_field.R +++ b/R/table_linked_to_concept_field.R @@ -31,15 +31,15 @@ #' #' @export links <- list( - condition_occurrence = "condition_concept_id", - death = "cause_concept_id", - device_exposure = "device_concept_id", - drug_exposure = "drug_concept_id", - measurement = "measurement_concept_id", - observation = "observation_concept_id", - procedure_occurrence = "procedure_concept_id", - specimen = "specimen_concept_id", - visit_occurrence = "visit_concept_id" + condition_occurrence = c("condition_concept_id", "condition_source_value"), + death = c("cause_concept_id", "cause_source_value"), + device_exposure = c("device_concept_id", "device_source_value"), + drug_exposure = c("drug_concept_id", "drug_source_value"), + measurement = c("measurement_concept_id", "measurement_source_value"), + observation = c("observation_concept_id", "observation_source_value"), + procedure_occurrence = c("procedure_concept_id", "procedure_source_value"), + specimen = c("specimen_concept_id", "specimen_source_value"), + visit_occurrence = c("visit_concept_id", "visit_source_value") ) -cat("Sourced links object") \ No newline at end of file +cat("Sourced links object\n") \ No newline at end of file diff --git a/tests/testthat/test-countOccurrences.R b/tests/testthat/test-countOccurrences.R new file mode 100644 index 0000000..ca1606d --- /dev/null +++ b/tests/testthat/test-countOccurrences.R @@ -0,0 +1,230 @@ +source("R/countOccurrences.R") + +test_that("countOccurrences returns correct structure", { + mock_db <- mockery::mock() + attr(mock_db, "dbms") <- "postgresql" + + # Sample concept IDs + concept_id <- c("A" = 1, "B" = 2) + + # Mock the dbWriteTable function to do nothing + mockery::stub(countOccurrences, "DatabaseConnector::dbExecute", function(...) TRUE) + + # Mock the querySql function to return a predefined result + mockery::stub(countOccurrences, "DatabaseConnector::dbGetQuery", function(...) { + tibble::tibble( + concept_id = concept_id, + concept_name = c("A", "B"), + domain_id = c("Observation", "Observation"), + count_persons = c(1, 2), + count_records = c(3, 4), + desc_count_person = c(5, 6), + desc_count_record = c(7, 8) + ) + }) + + v <- c(1, 2) + tables <- c("observation", "condition_occurrence") + links <- list(observation = "observation_concept_id", condition_occurrence = "condition_concept_id") + cdm_schema <- "main" + vocab_schema <- "main" + + result <- countOccurrences(v, tables, links, mock_db, cdm_schema, vocab_schema) + + expect_s3_class(result, "tbl_df") + expect_true(all(c("concept_id", "count_persons", "count_records", "desc_count_person", "desc_count_record", "concept_name") %in% colnames(result))) +}) + + +test_that("countOccurrences handles empty input", { + mock_db <- mockery::mock() + attr(mock_db, "dbms") <- "postgresql" + + # Mock the querySql function to return an empty result + mockery::stub(countOccurrences, "DatabaseConnector::dbGetQuery", function(...) { + tibble::tibble( + concept_id = integer(), + count_persons = integer(), + count_records = integer(), + desc_count_person = integer(), + desc_count_record = integer() + ) + }) + + v <- c() + tables <- c("observation") + links <- list(observation = "observation_concept_id") + cdm_schema <- "main" + vocab_schema <- "main" + + expect_error(countOccurrences(v, tables, links, mock_db, cdm_schema, vocab_schema)) +}) + + +test_that("countOccurrences handles missing concept ids", { + mock_db <- mockery::mock() + attr(mock_db, "dbms") <- "postgresql" + + # Mock the dbWriteTable function to do nothing + mockery::stub(countOccurrences, "DatabaseConnector::dbExecute", function(...) TRUE) + + # Mock the querySql function to return a result with no matching concept ids + mockery::stub(countOccurrences, "DatabaseConnector::dbGetQuery", function(...) { + tibble::tibble( + concept_id = integer(), + concept_name = character(), + domain_id = character(), + count_persons = integer(), + count_records = integer(), + desc_count_person = integer(), + desc_count_record = integer() + ) + }) + + v <- c(4, 5) + tables <- c("observation", "condition_occurrence") + links <- list(observation = "observation_concept_id", condition_occurrence = "condition_concept_id") + cdm_schema <- "main" + vocab_schema <- "main" + + result <- countOccurrences(v, tables, links, mock_db, cdm_schema, vocab_schema) + + expect_s3_class(result, "tbl_df") + expect_equal(nrow(result), length(v)) + expect_true(all(result$concept_name == "Unknown; concept_id not found in data")) + expect_true(all(result$domain_id == "Unknown; concept_id not found in data")) + expect_true(all(result$count_persons == 0)) + expect_true(all(result$count_records == 0)) + expect_true(all(result$desc_count_person == 0)) + expect_true(all(result$desc_count_record == 0)) +}) + + +test_that("countOccurrences saves results to file", { + mock_db <- mockery::mock() + attr(mock_db, "dbms") <- "postgresql" + + # Mock the dbWriteTable function to do nothing + mockery::stub(countOccurrences, "DatabaseConnector::dbExecute", function(...) TRUE) + + # Mock the querySql function to return a predefined result + mockery::stub(countOccurrences, "DatabaseConnector::dbGetQuery", function(...) { + tibble::tibble( + concept_id = c(1, 2), + concept_name = c("A", "B"), + domain_id = c("Observation", "Condition"), + count_persons = c(2, 1), + count_records = c(3, 1), + desc_count_person = c(1, 0), + desc_count_record = c(1, 0) + ) + }) + + v <- c(1, 2) + tables <- c("observation", "condition_occurrence") + links <- list(observation = "observation_concept_id", condition_occurrence = "condition_concept_id") + cdm_schema <- "main" + vocab_schema <- "main" + save_path <- tempdir() + + result <- countOccurrences(v, tables, links, mock_db, cdm_schema, vocab_schema, save_path) + + expect_equal(result, readr::read_csv(file.path(save_path, "count_occurrences.csv"))) +}) + + +test_that("countOccurrences performs count query correctly", { + # Create a connection to an in-memory SQLite database + connectionDetails <- DatabaseConnector::createConnectionDetails(dbms = "sqlite", server = ":memory:") + conn <- DatabaseConnector::connect(connectionDetails) + + # Create the observation table + DatabaseConnector::dbExecute(conn, " + CREATE TABLE main.observation ( + observation_id INTEGER PRIMARY KEY, + person_id INTEGER, + observation_concept_id INTEGER + ) +") + + # Create the concept_ancestor table + DatabaseConnector::dbExecute(conn, " + CREATE TABLE main.concept_ancestor ( + ancestor_concept_id INTEGER, + descendant_concept_id INTEGER + ) +") + + # Create the concept table + DatabaseConnector::dbExecute(conn, " + CREATE TABLE main.concept ( + concept_id INTEGER PRIMARY KEY, + concept_name TEXT, + domain_id TEXT + )") + + # Insert sample data into the observation table + DatabaseConnector::dbExecute(conn, " + INSERT INTO main.observation (observation_id, person_id, observation_concept_id) VALUES + (1, 101, 1001), + (2, 102, 1002), + (3, 103, 1003), + (4, 101, 2004) +") + + # Insert sample data into the concept_ancestor table + DatabaseConnector::dbExecute(conn, " + INSERT INTO main.concept_ancestor (ancestor_concept_id, descendant_concept_id) VALUES + (1001, 1001), + (1002, 1002), + (1003, 1003), + (1004, 1004), + (1001, 2001), + (1002, 2002), + (1003, 2003), + (1004, 2004) +") + + # Insert test data into the concept table + DatabaseConnector::dbExecute(conn, " + INSERT INTO main.concept (concept_id, concept_name, domain_id) VALUES + (1001, 'A', 'Observation'), + (1002, 'B', 'Observation'), + (1003, 'C', 'Observation'), + (1004, 'D', 'Observation') +") + + observation_data <- DatabaseConnector::dbGetQuery(conn, "SELECT * FROM main.observation") + ancestor_data <- DatabaseConnector::dbGetQuery(conn, "SELECT * FROM main.concept_ancestor") + concept_data <- DatabaseConnector::dbGetQuery(conn, "SELECT * FROM main.concept") + + # Define the schema and tables + vocab_schema <- "main" + save_path <- tempdir() + + # Mock data for testing + v <- c(1001, 1002, 1003, 1004) + tables <- c("observation") + links <- list(observation = "observation_concept_id") + cdm_schema <- "main" + vocab_schema <- "main" + + # Run the countOccurrences function + result <- countOccurrences(v, tables, links, conn, cdm_schema, vocab_schema, save_path) + + # Verify the results + expect_true(file.exists(file.path(save_path, "count_occurrences.csv"))) + + expected_result <- tibble::tibble( + concept_id = c(1001, 1002, 1003, 1004), + concept_name = c("A", "B", "C", "D"), + domain_id = rep.int("Observation", 4), + count_persons = c(1, 1, 1, 0), + count_records = c(1, 1, 1, 0), + desc_count_person = c(1, 1, 1, 1), + desc_count_record = c(1, 1, 1, 1) + ) |> + dplyr::arrange(dplyr::desc(count_records + desc_count_record)) + + expect_equal(result, expected_result) +}) diff --git a/tests/testthat/test-isStandard.R b/tests/testthat/test-isStandard.R new file mode 100644 index 0000000..fcbe944 --- /dev/null +++ b/tests/testthat/test-isStandard.R @@ -0,0 +1,127 @@ +source("R/isStandard.R") + +test_that("isStandard works expectedly with no data", { + db_connection <- mockery::mock() + data_concepts_path <- tempdir() + vocab_schema <- "cdm" + save_path <- tempdir() + + expect_error( + isStandard(db_connection, data_concepts_path, vocab_schema, save_path) + ) + unlink(data_concepts_path, recursive = TRUE, force = TRUE) +}) + + +test_that("isStandard works correctly with only standard concepts", { + db_connection <- mockery::mock() + attr(db_connection, "dbms") <- "postgresql" + data_concepts_path <- tempdir() + vocab_schema <- "vocab_schema" + + # Mock the concept table query result + concept_table <- tibble::tibble( + CONCEPT_ID = c("1", "2"), + CONCEPT_NAME = c("Standard1", "Standard2"), + STANDARD_CONCEPT = c("S", "S"), + ) + + mockery::stub(isStandard, "DatabaseConnector::querySql", concept_table) + + # Mock source data + mockdatapath <- tempfile(pattern = "mockdata", fileext = ".csv", tmpdir = data_concepts_path) + mockdata <- tibble::tribble( + ~sourceCode, ~concept_id, + "A", "1", + "B", "2" + ) + + # Create a mock CSV file with standard concepts + write.csv(data.frame(mockdata), mockdatapath, row.names = FALSE) + + res <- isStandard(db_connection, data_concepts_path, vocab_schema) + + expect_equal(nrow(res), 0) + + unlink(data_concepts_path, recursive = TRUE, force = TRUE) +}) + +test_that("isStandard works correctly with non-standard concepts", { + db_connection <- mockery::mock() + attr(db_connection, "dbms") <- "postgresql" + data_concepts_path <- tempdir() + vocab_schema <- "vocab_schema" + + # Mock the concept table query result + concept_table <- tibble::tibble( + CONCEPT_ID = c("1", "2"), + CONCEPT_NAME = c("Standard", "Non-standard"), + STANDARD_CONCEPT = c("Standard", "Non-standard"), + ) + + mockery::stub(isStandard, "DatabaseConnector::querySql", concept_table) + + # Mock source data + mockdatapath <- tempfile(pattern = "mockdata", fileext = ".csv", tmpdir = data_concepts_path) + mockdata <- tibble::tribble( + ~sourceCode, ~concept_id, + "A", "1", + "B", "2" + ) + filepath <- sub(".*(mockdata.*)", "\\1", mockdatapath) + + # Create a mock CSV file with non-standard concepts + write.csv(data.frame(mockdata), mockdatapath, row.names = FALSE) + + res <- isStandard(db_connection, data_concepts_path, vocab_schema) + + expect_equal(nrow(res), 1) + expect_equal(res$concept_id, "2") + expect_equal(res$concept_name, "Non-standard") + expect_equal(res$source_code, "B") + expect_contains(res$source_table, filepath) + expect_equal(res$standard_concept, "Non-standard") + + unlink(data_concepts_path, recursive = TRUE, force = TRUE) +}) + +test_that("isStandard works correctly with all kinds of concepts", { + db_connection <- mockery::mock() + attr(db_connection, "dbms") <- "postgresql" + data_concepts_path <- tempdir() + vocab_schema <- "vocab_schema" + + # Mock the concept table query result + concept_table <- tibble::tibble( + CONCEPT_ID = c("1", "2", "3"), + CONCEPT_NAME = c("Standard", "Non-Standard", "Classification"), + STANDARD_CONCEPT = c("Standard", "Non-standard", "Classification"), + ) + + mockery::stub(isStandard, "DatabaseConnector::querySql", concept_table) + + # Mock source data + mockdatapath <- tempfile(pattern = "mockdata", fileext = ".csv", tmpdir = data_concepts_path) + mockdata <- tibble::tribble( + ~sourceCode, ~concept_id, + "A", "1", + "B", "2", + "C", "3" + ) + + filepath <- sub(".*(mockdata.*)", "\\1", mockdatapath) + + # Create a mock CSV file with all kinds of concepts + write.csv(data.frame(mockdata), mockdatapath, row.names = FALSE) + + res <- isStandard(db_connection, data_concepts_path, vocab_schema) + + expect_equal(nrow(res), 2) + expect_equal(res$concept_id, c("2", "3")) + expect_equal(res$concept_name, c("Non-Standard", "Classification")) + expect_equal(res$source_code, c("B", "C")) + expect_contains(res$source_table, filepath) + expect_equal(res$standard_concept, c("Non-standard", "Classification")) + + unlink(data_concepts_path, recursive = TRUE, force = TRUE) +}) diff --git a/tests/testthat/test-isStandardCS.R b/tests/testthat/test-isStandardCS.R new file mode 100644 index 0000000..22b4dd9 --- /dev/null +++ b/tests/testthat/test-isStandardCS.R @@ -0,0 +1,32 @@ +source("R/isStandardCS.R") + +test_that("isStandardCS works correctly with standard concepts only", { + # Load test data + dat <- Capr::readConceptSet("tests/testthat/resources/ihd_cad_S.json") + + res <- isStandardCS(dat) + + expect_equal(nrow(res), 0) +}) + +test_that("isStandardCS works correctly with non-standard concepts only", { + # Load test data + dat <- Capr::readConceptSet("tests/testthat/resources/ihd_cad_NS.json") + + res <- isStandardCS(dat) + + expect_equal(nrow(res), 3) + expect_contains(res$standard_concept, "Non-standard") + expect_contains(res$standard_concept, "C") +}) + +test_that("isStandardCS works correctly with all kinds of concepts", { + # Load test data + dat <- Capr::readConceptSet("tests/testthat/resources/ihd_cad_mix.json") + + res <- isStandardCS(dat) + + expect_equal(nrow(res), 2) + expect_contains(res$standard_concept, "Non-standard") + expect_contains(res$standard_concept, "C") +}) diff --git a/tests/testthat/test-isStandardDB.R b/tests/testthat/test-isStandardDB.R new file mode 100644 index 0000000..b19465a --- /dev/null +++ b/tests/testthat/test-isStandardDB.R @@ -0,0 +1,107 @@ +# tests/testthat/test-isStandardDB.R + +library(testthat) +library(mockery) +library(dplyr) +source('R/isStandardDB.R') + +# Mock data +mock_db_connection <- mock() +attr(mock_db_connection, "dbms") <- "postgresql" +mock_querySql <- mock( + data.frame( + CONCEPT_ID = c(1, 2, 3), + CONCEPT_NAME = c("Concept1", "Concept2", "Concept3"), + SOURCE_CODE = c("Code1", "Code2", "Code3"), + STANDARD_CONCEPT = c(NA, "S", NA) + ) +) + +# Mock the DatabaseConnector::querySql function +stub(isStandardDB, "DatabaseConnector::querySql", mock_querySql) + +test_that("isStandardDB identifies non-standard concepts", { + links <- list( + "table1" = c("concept_id_col1", "source_code_col1") + ) + + result <- isStandardDB(mock_db_connection, "cdm_schema", "vocab_schema", links) + + expect_equal(nrow(result), 2) + expect_equal(result$concept_id, c("1", "3")) + expect_equal(result$concept_name, c("Concept1", "Concept3")) + expect_equal(result$source_code, c("Code1", "Code3")) + expect_equal(result$source_table, c("table1", "table1")) +}) + +test_that("isStandardDB returns empty tibble when no non-standard concepts", { + mock_querySql_empty <- mock( + data.frame( + CONCEPT_ID = c(1, 2, 3), + CONCEPT_NAME = c("Concept1", "Concept2", "Concept3"), + SOURCE_CODE = c("Code1", "Code2", "Code3"), + STANDARD_CONCEPT = c("S", "S", "S") + ) + ) + + mockery::stub(isStandardDB, "DatabaseConnector::querySql", mock_querySql_empty) + + links <- list( + "table1" = c("concept_id_col1", "source_code_col1") + ) + + result <- isStandardDB(mock_db_connection, "cdm_schema", "vocab_schema", links) + + expect_equal(nrow(result), 0) +}) + +test_that("isStandardDB saves results when save_path is provided", { + temp_dir <- tempdir() + + links <- list( + "table1" = c("concept_id_col1", "source_code_col1") + ) + + mock_querySql <- mock( + data.frame( + CONCEPT_ID = c(1, 2, 3), + CONCEPT_NAME = c("Concept1", "Concept2", "Concept3"), + SOURCE_CODE = c("Code1", "Code2", "Code3"), + STANDARD_CONCEPT = c(NA, "S", "C") + ) + ) + + stub(isStandardDB, "DatabaseConnector::querySql", mock_querySql) + + result <- isStandardDB(mock_db_connection, "cdm_schema", "vocab_schema", links, save_path = temp_dir) + + expect_true(file.exists(file.path(temp_dir, "table1"))) + saved_data <- readr::read_csv(file.path(temp_dir, "table1")) + expect_equal(nrow(saved_data), 3) + expect_equal(nrow(result), 1) +}) + +test_that("isStandardDB handles multiple tables", { + links <- list( + "table1" = c("concept_id_col1", "source_code_col1"), + "table2" = c("concept_id_col2", "source_code_col2") + ) + + mock_querySql <- mock( + data.frame( + CONCEPT_ID = c(1, 2, 3), + CONCEPT_NAME = c("Concept1", "Concept2", "Concept3"), + SOURCE_CODE = c("Code1", "Code2", "Code3"), + STANDARD_CONCEPT = c(NA, "S", NA) + ), + cycle = TRUE + ) + + stub(isStandardDB, "DatabaseConnector::querySql", mock_querySql) + + result <- isStandardDB(mock_db_connection, "cdm_schema", "vocab_schema", links) + + expect_equal(nrow(result), 4) + expect_equal(result$concept_id, c("1", "3", "1", "3")) + expect_equal(result$source_table, c("table1", "table1", "table2", "table2")) +}) \ No newline at end of file From 6c64cfd37a89597880be5a0546081192b4858dd6 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Thu, 29 Aug 2024 12:09:43 +0200 Subject: [PATCH 06/27] update ignores --- .Rbuildignore | 1 + .gitignore | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.Rbuildignore b/.Rbuildignore index 6fa6fcd..d879437 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,3 +1,4 @@ +^requirements\.txt$ ^renv$ ^renv\.lock$ ^Capr\.Rproj$ diff --git a/.gitignore b/.gitignore index 8628440..0d23c3b 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,8 @@ inst/doc # project-specific alphabetically_sort.py +parse_requirements.py + inst/config/* !inst/config/*-sample.yml @@ -35,6 +37,7 @@ inst/extdata/vocabularies/* R/process_ucs.R + !*.gitkeep renv \ No newline at end of file From 6fa36cb20029bb83f76026bf7c10627cf96d30a0 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Thu, 29 Aug 2024 12:09:55 +0200 Subject: [PATCH 07/27] add requirements.txt --- requirements.txt | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..6c22c7f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,51 @@ +CirceR >= 1.3.3 +DBI >= 1.2.3 +DatabaseConnector >= 6.3.2 +R6 >= 2.5.1 +RJSONIO >= 1.3-1.9 +Rcpp >= 1.0.12 +SqlRender >= 1.18.0 +backports >= 1.5.0 +bit >= 4.0.5 +bit64 >= 4.0.5 +blob >= 1.2.4 +checkmate >= 2.3.1 +cli >= 3.6.3 +clipr >= 0.8.0 +codetools >= 0.2-20 +cpp11 >= 0.4.7 +crayon >= 1.5.3 +dbplyr >= 2.5.0 +digest >= 0.6.36 +dplyr >= 1.1.4 +fansi >= 1.0.6 +fs >= 1.6.4 +generics >= 0.1.3 +glue >= 1.7.0 +hms >= 1.1.3 +jsonlite >= 1.8.8 +lifecycle >= 1.0.4 +lubridate >= 1.9.3 +magrittr >= 2.0.3 +pillar >= 1.9.0 +pkgconfig >= 2.0.3 +prettyunits >= 1.2.0 +progress >= 1.2.3 +purrr >= 1.0.2 +rJava >= 1.0-11 +readr >= 2.1.5 +renv >= 1.0.7 +rlang >= 1.1.4 +stringi >= 1.8.4 +stringr >= 1.5.1 +tibble >= 3.2.1 +tidyr >= 1.3.1 +tidyselect >= 1.2.1 +timechange >= 0.3.0 +triebeard >= 0.4.1 +tzdb >= 0.4.0 +urltools >= 1.7.3 +utf8 >= 1.2.4 +vctrs >= 0.6.5 +vroom >= 1.6.5 +withr >= 3.0.0 From aa2ee35c508de3b173b9e412bd527be1916b8a97 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Thu, 29 Aug 2024 12:10:10 +0200 Subject: [PATCH 08/27] update tests --- tests/testthat/resources/ihd_cad_NS.json | 55 +++++++++++++++++++++++ tests/testthat/resources/ihd_cad_S.json | 38 ++++++++++++++++ tests/testthat/resources/ihd_cad_mix.json | 55 +++++++++++++++++++++++ tests/testthat/test-countOccurrences.R | 2 + 4 files changed, 150 insertions(+) create mode 100644 tests/testthat/resources/ihd_cad_NS.json create mode 100644 tests/testthat/resources/ihd_cad_S.json create mode 100644 tests/testthat/resources/ihd_cad_mix.json diff --git a/tests/testthat/resources/ihd_cad_NS.json b/tests/testthat/resources/ihd_cad_NS.json new file mode 100644 index 0000000..2a51d7a --- /dev/null +++ b/tests/testthat/resources/ihd_cad_NS.json @@ -0,0 +1,55 @@ +{ + "items": [ + { + "concept": { + "CONCEPT_ID": 40398869, + "CONCEPT_NAME": "Coronary (atherosclerosis or artery disease) or triple vessel disease of the heart", + "STANDARD_CONCEPT": "", + "STANDARD_CONCEPT_CAPTION": "", + "INVALID_REASON": "D", + "INVALID_REASON_CAPTION": "", + "CONCEPT_CODE": "194841001", + "DOMAIN_ID": "Condition", + "VOCABULARY_ID": "SNOMED", + "CONCEPT_CLASS_ID": "Disorder" + }, + "isExcluded": false, + "includeDescendants": true, + "includeMapped": false + }, + { + "concept": { + "CONCEPT_ID": 40348851, + "CONCEPT_NAME": "Ischemic heart disease", + "STANDARD_CONCEPT": "", + "STANDARD_CONCEPT_CAPTION": "", + "INVALID_REASON": "D", + "INVALID_REASON_CAPTION": "", + "CONCEPT_CODE": "2610009", + "DOMAIN_ID": "Condition", + "VOCABULARY_ID": "SNOMED", + "CONCEPT_CLASS_ID": "Disorder" + }, + "isExcluded": false, + "includeDescendants": true, + "includeMapped": false + }, + { + "concept": { + "CONCEPT_ID": 37063456, + "CONCEPT_NAME": "Hospital admission ischemic heart disease diagnosis | Patient | Cardiopulmonary", + "STANDARD_CONCEPT": "C", + "STANDARD_CONCEPT_CAPTION": "Classification", + "INVALID_REASON": "V", + "INVALID_REASON_CAPTION": "Valid", + "CONCEPT_CODE": "LP408320-2", + "DOMAIN_ID": "Measurement", + "VOCABULARY_ID": "LOINC", + "CONCEPT_CLASS_ID": "LOINC Hierarchy" + }, + "isExcluded": false, + "includeDescendants": true, + "includeMapped": false + } + ] +} diff --git a/tests/testthat/resources/ihd_cad_S.json b/tests/testthat/resources/ihd_cad_S.json new file mode 100644 index 0000000..d935551 --- /dev/null +++ b/tests/testthat/resources/ihd_cad_S.json @@ -0,0 +1,38 @@ +{ + "items": [ + { + "concept": { + "CONCEPT_ID": 4185932, + "CONCEPT_NAME": "Ischemic heart disease", + "STANDARD_CONCEPT": "S", + "STANDARD_CONCEPT_CAPTION": "Standard", + "INVALID_REASON": "V", + "INVALID_REASON_CAPTION": "Valid", + "CONCEPT_CODE": "414545008", + "DOMAIN_ID": "Condition", + "VOCABULARY_ID": "SNOMED", + "CONCEPT_CLASS_ID": "Disorder" + }, + "isExcluded": false, + "includeDescendants": true, + "includeMapped": false + }, + { + "concept": { + "CONCEPT_ID": 317576, + "CONCEPT_NAME": "Coronary arteriosclerosis", + "STANDARD_CONCEPT": "S", + "STANDARD_CONCEPT_CAPTION": "Standard", + "INVALID_REASON": "V", + "INVALID_REASON_CAPTION": "Valid", + "CONCEPT_CODE": "53741008", + "DOMAIN_ID": "Condition", + "VOCABULARY_ID": "SNOMED", + "CONCEPT_CLASS_ID": "Disorder" + }, + "isExcluded": false, + "includeDescendants": true, + "includeMapped": false + } + ] +} diff --git a/tests/testthat/resources/ihd_cad_mix.json b/tests/testthat/resources/ihd_cad_mix.json new file mode 100644 index 0000000..0bd03b6 --- /dev/null +++ b/tests/testthat/resources/ihd_cad_mix.json @@ -0,0 +1,55 @@ +{ + "items": [ + { + "concept": { + "CONCEPT_ID": 4185932, + "CONCEPT_NAME": "Ischemic heart disease", + "STANDARD_CONCEPT": "S", + "STANDARD_CONCEPT_CAPTION": "Standard", + "INVALID_REASON": "V", + "INVALID_REASON_CAPTION": "Valid", + "CONCEPT_CODE": "414545008", + "DOMAIN_ID": "Condition", + "VOCABULARY_ID": "SNOMED", + "CONCEPT_CLASS_ID": "Disorder" + }, + "isExcluded": false, + "includeDescendants": true, + "includeMapped": false + }, + { + "concept": { + "CONCEPT_ID": 40348851, + "CONCEPT_NAME": "Ischemic heart disease", + "STANDARD_CONCEPT": "", + "STANDARD_CONCEPT_CAPTION": "", + "INVALID_REASON": "D", + "INVALID_REASON_CAPTION": "", + "CONCEPT_CODE": "2610009", + "DOMAIN_ID": "Condition", + "VOCABULARY_ID": "SNOMED", + "CONCEPT_CLASS_ID": "Disorder" + }, + "isExcluded": false, + "includeDescendants": true, + "includeMapped": false + }, + { + "concept": { + "CONCEPT_ID": 37063456, + "CONCEPT_NAME": "Hospital admission ischemic heart disease diagnosis | Patient | Cardiopulmonary", + "STANDARD_CONCEPT": "C", + "STANDARD_CONCEPT_CAPTION": "Classification", + "INVALID_REASON": "V", + "INVALID_REASON_CAPTION": "Valid", + "CONCEPT_CODE": "LP408320-2", + "DOMAIN_ID": "Measurement", + "VOCABULARY_ID": "LOINC", + "CONCEPT_CLASS_ID": "LOINC Hierarchy" + }, + "isExcluded": false, + "includeDescendants": true, + "includeMapped": false + } + ] +} diff --git a/tests/testthat/test-countOccurrences.R b/tests/testthat/test-countOccurrences.R index ca1606d..04cbb2c 100644 --- a/tests/testthat/test-countOccurrences.R +++ b/tests/testthat/test-countOccurrences.R @@ -227,4 +227,6 @@ test_that("countOccurrences performs count query correctly", { dplyr::arrange(dplyr::desc(count_records + desc_count_record)) expect_equal(result, expected_result) + + DatabaseConnector::disconnect(conn) }) From cbfba20bb7840a8a5d00f0c32ae4e117063c11f9 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Thu, 29 Aug 2024 12:10:29 +0200 Subject: [PATCH 09/27] missing library refs --- R/countOccurrences.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/countOccurrences.R b/R/countOccurrences.R index acf134a..0a6aeea 100644 --- a/R/countOccurrences.R +++ b/R/countOccurrences.R @@ -75,7 +75,7 @@ countOccurrences <- function(v, tables, links, db_connection, cdm_schema, vocab_ ind_not_in_data <- which(!(v %in% combined_res$concept_id)) combined_res <- combined_res |> - dplyr::bind_rows(tibble( + dplyr::bind_rows(tibble::tibble( concept_id = v[ind_not_in_data], concept_name = "Unknown; concept_id not found in data", domain_id = "Unknown; concept_id not found in data", From 3d8b69f6fecfae7480d1ed87f0b8e3b5d89cd9b5 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Mon, 9 Sep 2024 09:38:22 +0200 Subject: [PATCH 10/27] rename and knit --- R/main.R | 51 ++-- ...ortCapr_md.Rmd => Capr-PHEMS_examples.Rmd} | 104 ++++--- inst/templates/Capr-PHEMS_examples.pdf | Bin 0 -> 243688 bytes inst/templates/cohortCapr.R | 255 ------------------ inst/templates/cohortCapr_template.R | 255 ------------------ 5 files changed, 95 insertions(+), 570 deletions(-) rename inst/templates/{cohortCapr_md.Rmd => Capr-PHEMS_examples.Rmd} (63%) create mode 100644 inst/templates/Capr-PHEMS_examples.pdf delete mode 100644 inst/templates/cohortCapr.R delete mode 100644 inst/templates/cohortCapr_template.R diff --git a/R/main.R b/R/main.R index 533b3dc..d588fa0 100644 --- a/R/main.R +++ b/R/main.R @@ -9,9 +9,11 @@ library(Capr) ## Set-up config =============================================================== connectionConfig <- config::get( - config = 'config', file = './inst/config/connection_config.yml') + config = "config", file = "./inst/config/connection_config.yml" +) config_oth <- config::get( - config = 'config', file = './inst/config/config.yml') + config = "config", file = "./inst/config/config.yml" +) ## Connect to DB =============================================================== @@ -35,9 +37,11 @@ con <- connect(connectionDetails) conceptSets$conceptSets <- conceptSets$conceptSets %>% # Add details for all concepts (excl. descendants) - lapply(FUN = getConceptSetDetails, - con = con, - vocabularyDatabaseSchema = connectionConfig$vocabulary_schema) + lapply( + FUN = getConceptSetDetails, + con = con, + vocabularyDatabaseSchema = connectionConfig$vocabulary_schema + ) ## Concept counts ============================================================== @@ -48,42 +52,41 @@ source("./R/countOccurrences.R") # Get links between tables and fields as input source("./R/table_linked_to_concept_field.R") -uc1Counts <- - countOccurrences( - v = conceptSets$concepts$uc1, - tables = names(links), # Query all CDM tables - links = links, # Links between tables and concept_id fields (table:field) - db_connection = con, - cdm_schema = connectionConfig$cdm_schema, - vocab_schema = connectionConfig$vocabulary_schema, - save_path = config_oth$save_path_counts - ) +countOccurrences( + v = conceptSets$concepts$uc1, + tables = names(links), # Query all CDM tables + links = links, # Links between tables and concept_id fields (table:field) + db_connection = con, + cdm_schema = connectionConfig$cdm_schema, + vocab_schema = connectionConfig$vocabulary_schema, + save_path = config_oth$save_path_counts +) -## Standard and non-standard concepts given a list of concept IDs ============== +## Standard and non-standard concepts given a database connection ============== # Return table of non-standard concepts -source('./R/isStandard.R') -nonStandard <- isStandard( +source("./R/isStandardDB.R") +isStandardDB( db_connection = con, - data_concepts_path = config_oth$concepts_path, + cdm_schema = connectionConfig$cdm_schema, vocab_schema = connectionConfig$vocabulary_schema, + links = links, # (optional) Save the results (with standard and non-standard concepts) save_path = config_oth$save_path_isStandard ) ## Standard and non-standard concepts given a concept set ====================== -# run for uc2 conceptSet +# UC2 used as an Example concept set uc2 <- conceptSets$conceptSets$uc2 # check standardness across concept set -source('./R/isStandardCS.R') -nonStandardCS <- isStandardCS( - db_connection = con, +source("./R/isStandardCS.R") +isStandardCS( conceptSet = conceptSets$conceptSets$uc2, # (optional) Save the results (with standard and non-standard concepts) save_path = config_oth$save_path_isStandard ) # Disconnect -disconnect(con) \ No newline at end of file +disconnect(con) diff --git a/inst/templates/cohortCapr_md.Rmd b/inst/templates/Capr-PHEMS_examples.Rmd similarity index 63% rename from inst/templates/cohortCapr_md.Rmd rename to inst/templates/Capr-PHEMS_examples.Rmd index a69b0d2..b24f31e 100644 --- a/inst/templates/cohortCapr_md.Rmd +++ b/inst/templates/Capr-PHEMS_examples.Rmd @@ -1,7 +1,7 @@ --- -title: "cohortCapr markdown" +title: "Capr-PHEMS example usage" author: "Guus @TheHyve" -date: "2024-07-17" +date: "2024-08-29" output: pdf_document --- ## Set-up knitr @@ -11,7 +11,7 @@ knitr::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file()) knitr::opts_chunk$set(echo = TRUE) # knitr::purl( -# input = './inst/templates/cohortCapr_md.Rmd', +# input = './inst/templates/cohortCapr_examples.Rmd', # output = './inst/templates/cohortCapr.R' # ) ``` @@ -32,7 +32,10 @@ library(CirceR) library(Capr) ``` -## Connect to DB +## Create connection details +Here we specify our connection details. In this case, we use a yml configuration file +to specify our connection details. Alternatively, strings may be used directly to assign +the function arguments. These details will allow us to connect to the DB / OMOP CDM instance. ```{r connect to database, eval=TRUE, include=TRUE} # Use connection details from configuration connectionDetails <- createConnectionDetails( @@ -47,9 +50,12 @@ connectionDetails <- createConnectionDetails( ``` ## Concept sets -One concept set has been defined per use case. -Here we collect the details for all concepts in the concept set (excluding descendants), -this includes the concept name, standard status, domain, vocabulary, and more details. +Concept sets have been defined per use case in ./R/conceptSets.R. +Here we collect the details for all concept ids in all created concept sets +using the Capr::getConceptSetDetails() function. This can only be done for +concepts that exist within the concept set; not for descendants of these concepts. +This function can be applied to any concept set and returns the concept_name, +standardness, the domain, the source vocabulary and code, and more. ```{r concept sets, echo=TRUE} ## Concept sets source("./R/conceptSets.R") @@ -68,10 +74,12 @@ disconnect(con) ``` ## Concept counts -Retrieve counts for a concept set +Retrieve counts for all concepts in a concept set. +Return the counts on the person (1) and record (2) level for each concept expli- +citly in the concept set and on the person (3) and record (4) level including +all descendants of concepts in the conceptSet. ```{r count occurences} ## Count occurrences of each concept in data - # Establish connection con <- connect(connectionDetails) @@ -96,9 +104,26 @@ uc1Counts <- disconnect(con) ``` +## Standard and non-standard concepts given a database connection +The isStandardDB function checks for every concept used in a CDM instance whether it is standard or not. It works by joining the CDM tables to the concept table in the vocabulary schema on the concept_id. The function returns a table of non-standard concepts. +```{r Standardness check DB} +# Connect to DB +con <- connect(connectionDetails) + +# Return table of non-standard concepts +source('./R/isStandardDB.R') +nonStandardDB <- isStandardDB( + db_connection = con, + cdm_schema = connectionConfig$cdm_schema, + vocab_schema = connectionConfig$vocabulary_schema, + links = links, # Links between tables and concept_id fields (cdm_table:field) + save_path = config_oth$save_path_isStandard +) %>% print() +``` + ## Standard and non-standard concepts given a list of concept IDs -To check for each concept in a list of concept_ids and source codes, the "isStandard.R" function -can be used. This takes as input a list of concept_ids and source codes and returns a table of non-standard concepts. +To check for each concept in a list of concept_ids and source codes, the "isStandard.R" function is used. This function takes as input a list of concept_ids and source codes and returns a table of non-standard concepts. Saved results include all concepts regardless +of standardness. See inst/extdata/phems-variable-list for examples of CSVs tables in the expected format. ```{r Standard non-standard check} # Connect to DB @@ -123,7 +148,7 @@ nonStandard ``` ## Standard and non-standard concepts given a concept set -Similarly to isStandard(), isStandardCS() can be used to check the standardness of concepts, but rather given a concept set than a list. +Similarly to isStandard(), isStandardCS() can be used to check the standardness of concepts, but rather given a concept set than a list. The function returns a table of non-standard concepts. Saved results include all concepts regardless of standardness. ```{r Standard non-standard check concept set} # connect to DB con <- connect(connectionDetails) @@ -134,7 +159,6 @@ uc2 <- conceptSets$conceptSets$uc2 # check standardness across concept set source('./R/isStandardCS.R') nonStandardCS <- isStandardCS( - db_connection = con, conceptSet = conceptSets$conceptSets$uc2, # (optional) Save the results (with standard and non-standard concepts) save_path = config_oth$save_path_isStandard @@ -149,38 +173,46 @@ nonStandardCS ## Initial event cohort NOTE: the cohort defined in this chunk serves solely as an example. +Here we define a cohort for UC1. ```{r Cohort definition} ## Cohort definition # Create cohort definition ch <- cohort( entry = entry( - # enter patients who have had cardiac surgery - procedure(conceptSets$conceptSets$cardiacSurgery), + # enter patients with conditions that would be in UC1 + conditionOccurrence(conceptSets$conceptSets$uc1), observationWindow = continuousObservation(0, 0), primaryCriteriaLimit = "All" ), attrition = attrition( - withAny( - # include all cardiac complications - atLeast( - x = 1, - # include all cardiac complications represented by condition concepts - query = conditionOccurrence(conceptSets$conceptSets$cardiacComplications) + # keep patients with all criteria matched: + withAll( + # criteria 1 is defined by this withAny clause: + # keep patients with any of the following: + withAny( + # include patients with at least 1 cardiac complication... + atLeast( + x = 1, + # with cardiac complications represented by condition concepts and... + query = conditionOccurrence(conceptSets$conceptSets$cardiacComplications) + ), + atLeast( + x = 1, + # with cardiac complications represented by procedure concepts. + query = procedure(conceptSets$conceptSets$cardiacComplications) + ) ), - atLeast( - x = 1, - # include all cardiac complications represented by procedure concepts - query = procedure(conceptSets$conceptSets$cardiacComplications) - ) - ), - withAny( - atLeast( - x = 1, - # include patients who have had laboratory measurements - query = measurement(conceptSets$conceptSets$labTests) + # criteria 2 is defined by the second withAny clause: + # include patients who have had at least 1 laboratory measurement + withAny( + atLeast( + x = 1, + query = measurement(conceptSets$conceptSets$labTests) + ) ) ) ), + # end of cohort at end of observation period exit = exit( endStrategy = observationExit() ) @@ -188,6 +220,7 @@ ch <- cohort( ``` ## Write json expressions and sql queries +json expressions can be used to save the cohort definitions and to generate SQL queries ```{r json and sql} ## Cohort json and sql # Generate json for cohort @@ -203,6 +236,7 @@ sql <- CirceR::buildCohortQuery( ) ``` +## Save cohort and concept set jsons Save the cohort and concept set jsons; these can be imported into ATLAS ```{r Save cohort and concept set json} write(chJson, paste0(config_oth$save_path_json, "/cohort.json")) @@ -214,6 +248,7 @@ for (cs in names(conceptSets$conceptSets)) { } ``` +## Query the cohorts using the SQL query ```{r Create and generate cohorts} # Establish connection con <- connect(connectionDetails) @@ -230,7 +265,7 @@ cohortTableNames <- CohortGenerator::getCohortTableNames(cohortTable = "cohort") CohortGenerator::createCohortTables( connectionDetails = connectionDetails, cohortDatabaseSchema = "cohort", - cohortTableNames = cohortTableNames, + cohortTableNames = cohortTableNames ) # Generate the cohorts @@ -251,9 +286,6 @@ cohortCounts <- CohortGenerator::getCohortCounts( # Disconnect disconnect(con) - - -cohortCounts ``` ## Number of people in db diff --git a/inst/templates/Capr-PHEMS_examples.pdf b/inst/templates/Capr-PHEMS_examples.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a76d702cf7fd1e8b6e2667b3b611589d15fa28c5 GIT binary patch literal 243688 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
1R-h+t9YP_^a~k_(mEGuxIw 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

8n?OI( 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΃?Y3U^Tn@Q{ ziNb(@;F@kp^_*oha%vJ~S3A{wUVGN^&1yA2H^pIX(MZ~!S62=>J7w?L?3bTiM9Np| z+0XPNJ#0eMeCSvGtVt70g~(u>3ak5_x}00b)v7F_w(O_FE6~Kbl2idaGxt%rGg(NT zG0KRHvf}s{(VlDtp6^40Q_k!5&G5X$iP_$%vN?_=-)FqW{ATq?PAjMi0)@AI1ja8% zT&1RET`FA!enaVNqhE2ogh=;nEMGtquybsOxi9aZY+Hg;+fd>_ae=Wnw2hjY&5MQu zu^r~s-`(59`h$rUsRycR7jfIK+INX;<@tB?5M+nBh6eTuJchT^XWlG&u*mwCm&%NR zxO7R$y#Gjo-7rp}__X;Fd2S?sVV|v|8f%?#pB2rw6Z}u$gzZ&#+1? zW}9U*UTE74eGAD_xXk-L(|!9UoKzO10z2Q31vO$GfKqOGnk(cTb5xc(XT{7&@95=c z&Tm~Dem1A)r<$OwANt5CrJnk#z(?3grcf#v14y`k^@u%F+#2Y!$g!N|+`F$3#X(6P z;}B>;P5L@C9ZqFFYb8+C<%ru^P8`E)qL)Ghkoc+4SLaK!)@@R>RUgbra`$HNwV=vdQ3 zA=D157xKR2Jfy|i7u053TPC0h>)17y{%~pZrkb?k$eB(!A!K7vUoa)qGLOnmg{Bcl zxUYr6^W-IVe3k~#M^gu>#Q_gg;~3z*4Ro)Da~s_BHsZ_hE;Qwq|@KDDT{f@0HAq z>K*n-NnqvBQzv@8_CY_5>PwXOSC3JsJo56gv&3eH#%98*kTX5CcXn{R2B0E5Ik8nr z^fdSBh^SsTBBzchDCbFyZZncp5|zBKF0Ze=%+aWNU2)Aa=b8~aQI5i{(q+7S z6ZatGwsRasQ^Lb#%RD#ju=b2;S;=qr)a~rCnQE^ZVOTCxI$@x9Eu|5^&j7vB@I9S? z26B@srRV?0-z>WgH@StVK71gwr}@a&%JjHSC~9HIZ^@)6`PC;=)i^?4eri5^+h(6EmfmxkZsaUaMRs>8Zr-8*zpx;(v`1^DLt+rS;`@DsveqM zxl>f{+wcB4c!ycl)q2LAUMXIil9>aelG0Db652JVvcmbEn7V{br#&}Ny7H2S^8dI2 zKjkPKe0wGN_J?yC`cbE;REQWqrZl}D(R!XjF=nF6rMhun$(oHqmzETRr_(^Cp4(64 zk?DDhFQwDMM}9lLoKN@DD?WFi{7keoZIe>D1m(JFyzbuC@z0T=j2g4eku6hf4ck5^ zR1Pw7!=HE)gc8?{io+>hF%p2-mD-jvA!Cfuce^MM!skCJLAROo8z()h(sMH%O~4EQ z%@TViGDFXeBWp%6yJ${O3f0`=q~@}Uoq5M7PITP9k81bqobg5$vwXRt0r34_(|0Mz zxUpG{th$~YR<9nHOdj_sjadAyTaiYc>4zzapoE}kWs`1!X#_?;+pCGk?I<7q)zF?d zx7`c>RW!4cs`9gljwb2=H^s>e>BQR1#t+9*sS-Ejk65Q(b|_+KY4eF zV&BVeX-T2#KiDw$@S&TY##yh5CvduIYKnN9qEWv5yglUdOsfH!)n*awu5v{{4&3VGAU!dhc`-<`5^hFf=z>-v-HZ{ zE5!=_&dl!;LXLVF@O-E9YTLY_>5{WvBPgf(MpBrG3!`D8hn9i|B=h#AT9ig%9mdiB8o_LW}-r?|QqvF*eS;;QW;e**or zz9l;T#O;(ox?13i-qm&HcuWf&8&jiFcHcdZa_TMW*nWbM3ooLPyBd{rDnv$9EbVy2 z;kQV$D7=QX*HPNStf7mWq+R9~i_vYy`x7|Le7-1Ckn@V`zG7kF=U;FwE<q-5te(#(@w4VuF{Z#jBWMK8OEh0%2QMVb!BqybW zx@U3NIL~gfU(W3Kk~%v-2~tqgnz@~$x)k3$fZh!KK$1{9+H=jna2%CDOWjnvX*@i( za82FV?$zYX>+!g!rnP@~E2$*2A}TL^m2rAdh*%h+JUq-pgz1phcWC9RQfHCE43$nt zd%nPbL*N#ZN$Gx2fe`Tl4&s6+qo^AP8>=$X5H-8or!4$)1$RA7-gP@Hqsxe;&2kWYL_73OnWkb(bbODT{D9M5uq{AYV}C z6;6avRk&ayK701y5k+V=R7q{`C%MIa(q=g!{%iN8AA!Et`ShgWf{GEy%R$NEHT$no$-dW>12G0mLfe)}l;i$5{*Bi@M`C|}+CauPa;q)T4F-ujRGTyi^* z-Y_2WrgdT6l=NGblDFTr5$;?$7_9V#YQO?9Nfo%v6S|ydCmD3G+f!;{A)S=vkI=9O z#eDmIT z#Dh*avKgxA(3g&cgC;5Dt>+XGvts!HP96rgKkax%My>sY?oK?RS{PjllHGMWXM!DL zS1^wy7|r}%r6i=!M)cc5o0f2k?L)IFEz~q!MufnoJuFdaEphj3loZ11;%OwF+2Sv$ zzN>xAqw-z!9PbvsBX{z=r4W0xwBEC}Cxx1S%6gS|pj7Rxm&>?|KWLmEkTeB5LRX!t zOL2XNPN^&%6V;%!5S^pur8XpyB$7J`gE3>OW~a|9F<_Fq{^?XVujQh%lxj~hA0jA( z2ronPT(!vZ8dFqa{LWr!>-{;Yjb;I!{9>AwINg%>W@Z-B4HHtC*?QZ@kIfaDVT`&Z zA=bx`6!F_IhO+%RB_H_bGbR9Ucx9fNl+p-XEPyG*AoR>kIq_-AS^u(TC`PRA&Fu$f z#$I)&B)Y_{zGiYYMi)(&mAA?JU4%P_8E6qE-Gk;e=nqG?p_9ZlIspL&+B|O zHdTy5H=dQxU;M&y?Z|y*z(Im+S4;gxz`b8X&mYwX7P>H!ckmRNWid}4{keJ86Z3ie z5G5OSs5NLC5r~?x{$#S4w5hL)iuMfEw&5le4@5-KY*ToJm{~ycqs^46NPYEF%_&Y~ zMDUx}q{zHw+REa@c^~GN{2rJxM4+(w9edt6I~!r?b`CKF6!jP~G6Y6oE%V`{9fjz% zUuqV?ui+3lA93gEJru630D%=&T$D>%IF6U4b4HA{%duIHg@MIW}y+%i)IG%N_|&vHN~v!E*lHQ zMFg2%kE_E`ahh;EgAtT9NCSwS(oT-**Qtd2=uImDL{Aacx}Kt`v+Spj%iR;jxMD0x zcZ{t^LCDgt*)y1aAVQ+^Y>Jlp;$E?jMJpVf9pCpMF9h^1z6#?(YI30M6FGVxCN?`;Aw1{T|z&N zo8-0iugqa8X}WaJ*3@sFEeE}9U+pqKlYFFBQhYh>j3)P-Jsw5!%Z@%x=PYbD?K}$W z?<#$3^#dcEB`ImDx{-Rf7Zcw&?augT;zK_9m+^$9oumDv*twcvbA_`T$BbnH=d{s` z>D2tP37R`y4`fq_RJuNve1fzTpH1w_N6=>O;^rxm!$HIiyZCwCx2k^6W_|nJ5)#12 z#QbUVxd7}ssaECnP{P2kUsrQ4mhm2D15CF45h_EW1Pi+@aJ51mH|U8b(CLsyl<6kK zoKt%tRHd4wplt@R2yXJ;?&R3{#0ReK8z^r}y@2BC#8q!bNGWPd)RtXeI%ylQ#8S~7 zxC@tmDr)nPtJS1_;6*uVYc8*rxezGfBP@~{Nv@WQLUb(Ie2X(D&WkMZc;gMT3=JR6 zl|aYaW~8ej5<=}gePSr=@fFn9lTRjsd5vHbqAUHTqLcJQud)D!$WR#neE?qyMqR@Z zpn_>zW7p(tE5df2V?P9YHGdLgE3n!1bT@?jZcfbn3};RR9fy*5GNgE_goySnT6m$w z_WLE4+_r>E5nDZK4*$ZbAThB8K>P!=6hpw(q29roa+jBbY%;^x&0^1Mhp}}Y{^&lm z%wFPTF^J+`Q&P#9MwQ~TqFs`)T+7?B#w{#JW75z-p{3l2!phGbBwKmn4AH}%7~>Qh zBkWj)zr-w%F`z$*A@r()?n}=I^$sLpN&EBlmyY|3y{xRGM+up>wYf-%;H=>e`qg@W zG71_!IZLNgtSPBn5=IX|@IQAu(LxG*Yu88~Rftg?W9v$*8$WL&#cS_c7K|*WagtZ9 zb(m}LRh_+V))Tr{(85xQ<_r$h5=IS{dpPwMIrja&_Gsq}m%s7qCQvR74Y%b+_E_Z^ zotP#WB5P(hLtCCB6pPX8EHPFMCPB~VTg0kqPEnN%{q^*JG9BqIX1;1iw#X_36o;PjzY-IKiH*i#gbtV`?&>&p({lar z7#+=gy=gu%Gl_p@ZSriwL5GLT#g|f3ue`RMiTN$XEw_AuvL>C=Ly^WEo2rX?KBC8K zi*7k5L5Kfjve?_O0VOVadD3fSo29Z9x$2{6%!hkid36qfHWd!IK`e<;<{r84Uvltb zP~hH^m#>l+W-7IA^b>l0Cu133vrqVjj|UM$*#d3ZOACWFeMq(s8u%7`8R3U~VSO#^ zR7#8vn&}`yY07?>el;9B_9?ihwNDzB2Ek{5@mYTHSi*O`(V*$=OPep0FY~m6CpqM3 z^vj^}K;~)1JNDZ+&#UsWMtYo5EGN|tQd72lvkmbztfT8rk->7}qErR@P0PaD=VDx| zYFDdV=0wK#c=UYeNF^;zLaj>3tik~8wT@*(r0WnDuh{RgQ@D5eG5mw^F0#EFT2Y{JM^yF z(LGZ(Nx>HxP;+do3N?(pNi3~0E{1$Clq+mFnxkIQD&y$fCWSt!>SD8Si-7dEZ^RA@ zb8oPEXh1=L5Z$HZee#;XiO6*zQtj7P@j*r3V+(7DYqUflK8z#VdJ9V`!hc*AWNA<&FnMUxdv&zkklXx^GvP4~ic}i|{0{(A}_JZ&o**CE6 zS500KNy}{=*Fs)#sqXimC-A$4jIt>IumAiU5A551zzr=xFo)qVEBD|Y#+-|F)uYnR z5=bJ>bjE|;(mTZ?m!5leL!0^`f%iK0vqb*_{!izbg!|MmX*0g=mJ1gn;fFzyH_O@A z0cj#ziA;GJ(wmF7LBxkululB#PfOXvluQ%+UsmdhD1})*(xX^g3z#s&#%cA08)+t& z_|zv)G(aPmz2Sj>!RV@mZOLa8HcKC@lt3S+$>8F37c^!&cv#kE`#3bpKj&l~MIL{O zw`9%XREd;G$SgE;i54fq^W8O6*kw!-UZVGVO|3RAg<>cbgmTIZ>G9oL)DdOHG7Yt& z+7~3}myXgiZL09b+qj@t9B_{UUIMSu=dYiFX1fxASclxSpIgmezX?0qEHy5u!Wfmv zeKk+hl_kO`6w^>FfN3>I_U_9Rd@*`oz3jU?%%~T_AdCKM$9X=tIH}HMmD?0uw;JXu zT*R^GG$5z2;*jDLV?=Rb;BweA`=*s8f+C4Xz^N&+7k)4jMWzR#&1(8qsDn#bnPf^! ze+;v$xXXcT5(ht%VpYH1J zuDn#kIrWF;A#s{3`a)3ksXx3+0m0cKLyV7Q}zs#O_rNTn&EMltUv7#~SF zexhC^8W_c8KP2`dnwpX>;<-;M$mQwPQ6@ESv$JwB#l z-A0)&t3Q^tMk2E#Twe|pPATVVu$AT{9=ul0gmJIh`=ThiPY;7lcUc=r>NU<;{a<=E z2ID?ZFt&;x*NyX_z6t7*uKM|cXCvNrF&QIl3V2_PU!R`)dZc0|vP};wg~7H~8o#4M z2}Sd6i^w4-`syW%dDEc}q-uefu~~R?#-%xD_W3nW{kwbh)XAleXddM5I(yvv!eAZo zy`X8{K|hq1ddQioZp8feHs3+7#N|;2i49V860_9$b6`W|f3kZz%KAXD7&F*@+-K*5 zz3O<+sO}!(fgD_9dK)} zBelbdG4PHy>t{c!*7S9f$;(=S-)=ByD+C2ot<+ugV6yI@%U#PYe!F2naiRjm7q9=m z+u=T|;OH8D5St^@xErbi#cfG5Be0vRIG_l=BOR3Rna~=!c!|}g$hFX*E$i!SEjoVi zNydwwTS?~W5_H>4Mfxi(%?609AD4HsuZ&}_`LdRfEh@UR15OU>14;7 z4CUvD7|w0>A$`-+AQh&dxRT9>wv~JG!01(3Ug%>~{d?!Ai%*|W3B3s(^WD+TT9H`Tpv3qNH5&!#&-TfX`aofP|v@ z8%D0=Y5{2u8eZZ_D8~K$uPvEUQ;rHCyB*kK&f6%8xo7U|Mqilr(RsSv+f0(;CpHD+ z!qQ?aZ;3R=ub54$goAEzlRH6F@urll`={&0D_(xtISVy6nVo@+O@ZHW!ga1#FyRmN zbl^1cv&zWWR|Ay0IBI0+e|pO+(9pKlt@#}Gxukhf$x)CU9KOxRMcy76yX8nKPs4lx zbqtVS;G>SYhLx9V!*{ft^IUEgX{8X`oV6&ceio)o@<4_3StL8>SEVTakq{=4c_A}y z;rZ4e^TNeY*><{Id2Jp_P~6pdb%1ibA>hLN%k$F-k;owCqU5^Q4K_uY`38$t#v?mg z!0C67v!R>}npIM)tr0aHz|FW~pHr?_sSvh{;wcjumJtDt)rFF}jGF`tUxag5J?2){ zUc@_D^j#L_+D%YG5=v*}E^lD_i|*U!ZVZjSG>K7}m+h5%APrOdm&oQokb&b*Ya7;T z*tSOIC=X~l5VZVFq#LXh1D(5#&unN*Y^EU-C!z8APJ9pVJY%RZ+_+kp^Y%8HQWiz# zS1V=TK$NUE#$p9xUpwbPjss(@Fv%$`2<^Rs~w_0tdOH z(zq{KQPle}rG7)B*>*DgSvDk75%px-u#0{?DTzTspGeH!OUy1)mydACT6AC6D@{=Wc;Ja)sNmU^ofwLR0Ohnz5p zv?_-jwf(qqd5QLy%%Dgg!Ev`KHLWi&fY@Z$I=U*Rlx6z?To5EwHHQ@IY5L7nJ&Rfc zE{)p^Q&tuEo9nY}YjRPw*g~Fxdl|&tFb|45PBWlv&c*A9>VX36A7wQWV<6kunh|YN z2CJm62kX@Ed*z{txRs=Lc!QNhqTLTrMQo4D-*)$zN6TF{Dex| zSkmGN0OR{xhI4PWD!a$ga3Q^(66~y(fEzF zcxFBK3FZp8Wl?tle7`Fz{jk5u3^Tgzks#iNsd$X6Qlq|&FF&@o!2%W~^DN*-4aQB= zy+`{C!%e>E4jsIfs?)A^_ey&aauc^uEv|Ykj`Oasz_DNIWv!raJwJ(7{lv~W(s#<` z`1%hgiOfp4Fm|a?UakF~LxSn^D+Z(suL=-P)B&@+eILV|1jVss97E0~P-3@;p%gpw zWBGh;RbQ7Qg9FQ1r%Q|t=RyyZ9PoLls~l#AzO|JG%)a2J#ydxG^^V-ex2tFeE`q+S zV5@(C8QI6qON-yS=933794^l-f_i~K2o+zyO5IN_j-(cxmV#+(H+}~~k5uNJ+AB&D zVa!LtmI@*}l=FOt>q5ZW5BXDB=K#Jf!w)2l8}Fly`j{cl(QJnm;OS`bQ`})y5#Z!o z0z(LpG~OGaZF{s0yOql(yM6wptUOEdER+PV-W|$^3@!GOcDY{)aP9@Bjn{q&^T_Mt zur+)z?gex;Lj{_D=~Ek2QzU-aPJ*P=bPZIgUzOs(Lv75R{cm4H3n@2a_xO-@9}Mt#TmUKn$KZj4R%45e7(&M42VC3VCU)T>ZHtLO zN`f5dH)HTI&G^)K5_Z>2N5W`wr_5LWHgUuk^>>0i0uV)Wf-0I+dD0*t@=@D-8{2T$ za>qZ<;=4?rqzqyvlb87+(9FJnwJ2mjs+;H(KtQSpQ*cj9nk%4%5NY}tD8)g+an;pA3!v6Il93GUZ&s=IrbgTF9bRb$1FjN;NXCyjCKQqmE3GnZ&Uq}Qv>UW~0Y z9FYDMLqzs>q>~HpPn_OXxN>CTJBML*htuv#wo0awL3V;&5)MAlX7hQN8AFG{+~(Ds za_ZKt*oL3HZ9Ze4?-!*gIG=2bK+hjJgD9w{=Z;fA&oKPi5s@t9g#Xn(2zXxkb zUD9%p{s~makCIXRH(Own7Ra=f&u6kZ81UWokKEK{CvUX-UD8q3AW}dUZG@u4j=Ex| zJT!e#Ev+7%f&Ht_AJg@`GMAt5hcE81Z#2?Tf2@SR!bv}AdA-c)P`OSf`ZScigj{Nr zzsIj9gpMv^AIVmGf^EVl=oGaM5{WXch$&uS-x^#mRq7jKwkrC+qpRws#!?t0ZeST-hF`ip8VQe`Lz#lU=r?+2 zI=@cQ{8!*-Y#ilRmApQU7&4;LziS^9Ql(+oqicaLoW!UiiO%$kgZjcx}RzTcywCN2D0`^?JiqyWgk_MCZ6_UxrLE z&a$i4VA8P~Iwn|3$7nlnR_+jwuAa=|etn*Qy2AM;dzI5HVUH#i)@-iecBV!2Gw@sv zV@!tT`tetYT&jF~jbg!04PlP|if1?(lz-Ucg4!!2$6qRWuiWei9VjysAI^4INNoQ% z*0dYaGlmPHemCF`jq?7HB_x%VA6=-&jILtU;kTv!4rX3KY4(K9IPQrfD$rU6bo59V zj_Mi}cQgx{w^#(5Oc#N^eTbplCR|Inof6iTOHw})W>NUx%RF%mWRs#y-ryttpi!=F zolB?LvBUGSrxXX)=~7q9AIvGj#y-!;CtL&i34)PbGsMD5P};;*Ye9 z62@@GKgX-UG7n~?-CKbe9GEj3s}dAU`^}(}x^F8&_vZrOS@f45Wz6uJ#EbR}|Ap&J zE0cA!@P^^04WGld7QM{Ei5~N!rb{%D>U<|<(U?2ee8lh|BeR3!mlDt>PsS{)BM~N{ z%(>_FY%r{c31dZJvMTWhg-9V+bHLIVg51lo_eEK@;zdDvGUTQAj5JU!17y?ysz2)4 zhDHQgfvlw||L^DXoOy>0U1^dKdAvCWO5fX0^4yj|9nWN6R!Aq)0kb9PGlwI~^OjjI zCRrzzM4IUNvVVB`BD|veui_~Vil90ugnIspnanYoWTJ$(zqw*NJ$_l04@a9qvjZ{i z=}TLv%p&A~%?51{8Egfh@7aFke^AAxpZSc9cBM9V=M@aOqdh(UIYw26Iii9Ksl+$p z?-;d{V3w?CP*!IH4Bs@76w-GS-pcjdY2ucyu?Wk0!eY25*!#1>K{#H2D7O00&>Zl$ zYobZ<>1W$m$qI9?IlvInY}Hl3ki~{vlCd@;X}LiWM9y;HYd{&{A(zrK)paBODDimI zl2eL#>6mBBfvo8=Y04h~uNENnlN!l=2SVSp=yY=CgZ?JgAbB~%D(30~6=q4uWiP&$ z+m}0(S0L%#cziqAJjD~-;|3#7n!~zWD+k z_+)$HQFGbAAWr7HK#c%TCCZN0*p@s-GLMvAhy!LKnK1H)dkn-~W0kj8PC3-_NXBAC zjfK@U2{66<=|P6bwHnkjaZD)zJTbu&g@vd*X|8&q(TM^46!{}4u{;by> zijV+jK$ySti9E94w8vU;KSVnSc`8te9}}D`w3p=>L_|jL;_{-;`IbCkTCHVHkY<^S zwCO76EM|zMlq!M_$Wu6YgrQUW(y4n*EU~Z|{7$73F%XpEonO0>;`Czt_q53>j;X-l z1c_5!Q1iz-RHNaHQ#|K8=Tl-`*4@~FVv+85B~uyO_cqh$E;NbaCfw+zX5Dw5l(h5# z!*K`zMHmRSoF2SYrK$)a)2BxXS$7cm@?Av{h6Zy2gqP7f6AV5h!m(yL(1c4>{Pmm_ zJiI-ir*412?ojQXWh?r|=OFl+L7DXwpDwHM!N!(k18S}%ZKQ?S9lEIa-e3)S1qQS+ z^5%(uIjR)C$Iy^2UyGua0|kR_i%a{JI_-I-8dHubg=6d6tZ{gaug&YoRRXDLFw^nIhC>$D0f<&Ns@c#du z8e=&)`X6-|`9jNR%ecApEVK$^yX^R-T9942VyLke=i1XTnXC}Hb=RWtuOb13j*(vp`vPo#@NM z%YFs%&e3b=$)RD0I8z&u+}aUv{u&bZj$?u?q@`h0MCoQa7CE9FHNSEcL* ztrJ15JGMoz*ZF$OBR~3AVHrhj3F0!lGks2-IMY5xScP9a|tsem^I$& z*G8MUUNBQ2x7Mbd;kEkc1JX;~hDM26VuCna-J~nTcRw*qr2CZsWFj&cui(8dC8ovl z4>WD(BHXPzphohh$h8$0z%wJ3lr^ychKenvi`Usp1s4w;Ts%k^A0Y^<{ORx-Cv227 zdls|IrIL>R7Ljx*G`ts1a7;S$N@jLIT2`%dAboMFM6;6X?w^NO@)r1zcWpm&T7A;9 zQQW5D(BG$IBPs7e_i!~Ip;c;w=9KR6AB%SMx#ZfXs@wE0zqOtENpK+d)sbNymZY^H z@hDCkeA8X=jrbngopvkCdXXC|!#KCT)tLO?0usG-U8NiNy&^EU576&9`bb3d^!yG; zG9IC&)as?YME#myV44*!-p`_FafKSjZN#jBqWZInfm_>cLMLa0w{!jd49UuDD2w8l zK?2r^F=00gckVws+Ynjj*67z#_h%RTMsIr-d6%r+1CDgf1x}6{|Z@v`>rqJv-U3_zg&wurk_JJzW9(N3}9k*vr2SR*)pyKx{mpb z`4cUWi=xy8e#2QR1L9fLOyHAYl~t!I))3D&w(aPv>DLUP5;Y{jIf8D50`-?6)h>J$ z+%%b<8P8v!B*rl&WbQ5|ri{DY1}I~7h* z^<>0kLXOhcFpV=Qc#p3n@fx(%c@hvD^VB{V_yV;iGxu-B?zc>xLeDTtf?PcpgQRce zz((T_b?B2{)X;)QU&33eGRvX3am#jZ#uf`-%%B1=3(UbH$id2&1Mifr>d%u7XF=G! z%cy4_7scIi4sGMPO@%XJ%&}99T?SzmE9<-Cumi-&YrNE~{OEPOsZ|aj-)D}uwNFh5 zSD55kwfSoa+F$^#pyt?%xQ$Rko0wlC>!8U8w#>Apdce-9@S>G%ZzTxSDaIv*cYe9% z>EFtTp99J~k!aCile%06@2;jX&HHH>kDk5tD4l*lMID@CL!>~XfQ;fhuf3&thHgb8 zJ&Gh6+R0y4WuH@}YC6zu?`dv7V%7ohbn!KA6Iji~DoF zLJ=-!gCg=eF+7g0!lNpIUO5LXh&Y|>=H_mqQv?BkA*EI_G6~mCd@vVe7-N_1=7iWq z{QoRsl|^AE#Tz+2S#KSUS3Mf6n4i(QdZn$A7CZr#c;tPSxAB~5!-Ptq2j=)kqJ0?X z`KpcKkbuR=Q!rqD)QFw@g8KaEeXrP9QaMxjG1`v6Apj3GF6aESg#y-Ot!cjH^Al$R zT7FLBX>}dyBByJp_YRzi51Ymml#$rJ0pvVLoO2{hC@nk4n9z3M$}mXNS<`&f1K;G^A86~;p( zQta#mjm;E+PDj~-qKoKicsteLlUthL!Ve{>H=a2pp!8-`ck$7(l!8Zr&4@m$w|b3= zlg@%waQF%aHV*LEfRzGWdKFH8s%Y!vpAnr7oq7dE<4=qBGxk>gGV%XKGBRbfE{48l zr-;%CjZhhlwz7H;S{mB1(_w^_bfvJ!KzH*oCu+};jYuZi0 z>}oC1^8l($vSJN%CIBH}`Gc;N%{wY+~#)L$AWVf(*6U3#6O5J zUj;?u8;moBp+Lct63)5ph}J0Z-p;&7!v-DnBRaMVIgQE*jH=IXDzvE4{LZckgjVU) z4R!&yHik~@sydXi7L%%HuvVMNs=6|djQQMWeJ-{)ry&5hOX4bkv$MsrjgPI?Yp;|S z^~-BIk%r?<7ZAV`SdzqegfuJTJdnYgM3zP8waCdy@LQXn@>m}f`lTA+xE*TnU@L(A z4u-4~p8eeis}v9uWN{MbVHkjZU&q^v=JipiMZaCL3d1gN%^~0ZMF=N+t#V__q4M1( z7?I`ZOkZ0hu8Y7`dLu#-1r_f~x6K?4mwMNFqp_N;qf(zFGK?n}{bAh_uCnq4_fkvS z1g9VCr?)O6b~|>xkAd?SeQE8a1g?O`U8UXM@}?nTNz@ohi*pX6>RFLBRMX<(0)E_X zTEJ<|yjJyQw2%`$WoLvjhiJ^6$HO%J`+qIO@&H@Eb$6TkfFklX0B_D6{5suln=|&6 z5;u_!VRZ27sRf2TH^MhW7tP{p)#iNG$IdSd&Ky&0!-fFpq_We`nqE6Pq*jN(LOivZ z;k=y~G?Xu+xMiKaaUCIgNPrxZ_bbs-ggb&sVV0VqF@F?`Wtt&Uf06a_4OMQHZy6^F zL{-=wXF6dpaSWtO*;snMquZHL?v&hLTCt`Qsoo{Kp>A1ktM+NDOn~e`E=4kzY5ySM=Vav zgiGqT#`f23*=+Z92kvgdec0CI%8)8(gu20DQ+FWNyW#|GVB0hpH_u>}F+Ooiw38z@ z3NSL1dQso2pxsZM(ts{9!41pIqgctK0e5nPz>eV@LRMB4xZL;wfbMO_9AJx(l6Lw1 zGtlv<2Minc=llVS8M1BZ6~jUH8BMv(!rR`j8!^-0H;2WM!}6-SlMR+aW;uwMuS2yF zZKz$ODCmHl1=n=};md6KA#px=&jZy9whEfQ#_|7^T%TC7?v_whB5?u?G)F|9@MVzn zMnsGqt-kWS?k629rQZZo6;0MVXjZL~q0rghjw8eQ z@cv+ASkel7pAuWrtB0a@vRp>k-tuihGu_vwKWByNYFy>x%xsa1GxjkMrsAUf8~=7q-~?YG>@_*Y z@jp{d+8wBh2JSXM8Y)z#1H*4oYhMT$HI>Nb1NPlwRgJ&rjtuCTEo0W6aVM-nD435) zHU#0kjn0`OTf}97>Ad4%D#f-wK+qW$tlB{0d63z+ObsG2*RMahTA8UK9{)5rB$yTs zOHy}mZZ_&Z3g+2F2&7(LYZ8(hfN5-8Ibl6OB9pNvVXe_&FzzHhRv$>Zmh~LV4{U#hg*qswRs2onnXt%AHKq6k zlz|`IueljcwhrF;=8e*B4#CNR=kTo3>Y$vzlkRTB?(uk(V^6cACzBfmNNEVyJa91M z#;e+^u!Hd07lBr72h}ss4zxIEgQa!=7K>%yc?Z?TgsUPr2I02nFUG<^l&T=?h*qKX zDbX6dIWL=WmD+`3R;4vzf<>(>gYPILDbz5|HL4X2X)HdZ1$Uoo47>1yB-Qmt5T^Op#eLwwK-5&(=H*; zIGI5>;Pl|36yl;svJ;|*_|qE1tQUx+=Z-dCSGADa3T(N@je;9LA_QK1-kPy3Fch|y z{tY#79xD%H_$F}U`5W?_44)$eGF0Tsb0!0E8{w4OXGs1u`&L9Q%AvqPr#?qn1Rz2G z&}j~fLIS<;i?k}|7omSR*9ui%c6)gz(l2Fg4?F-gXBti>iyv5yOSD0u!8-+YWl9pE zckc_5vqHM#Rju{Xc1gC(A-R-tc4wj#q2Sf3E{PqWvpzP)Ib~-ff0tPD%eh8E z@efM40uLBKbehQsP4R$+&|6Jhh}dA9P>?p@uKx;X9^e^8k+}46Xotp+Q&Q>xB4Jg$ zof1({g;mqG#acbEUgy}MBroW@t z_Q)v7SJeY;Qeg~bkoNz+w+iTZx%mZJ-Syt{uGu}bgFQ{?BZg;et}Ph2L0teAj44rN zPvr=Qb7r`oZ>=k=q>;OM3%xl-8qfwTZ5-}BMnARoSdVrk1GIB}d_KjmTE!BV=ya*0 zjXkYV9`SxhCL7l(=V8*GdM;r{L61+s(t4P%P=B^27r=>wH{bVd=gjIbz;_BgxUA%` zkfE|$`yxauZK~B5xs=>t3s;QdZZ#QXz2@*JhI^dxv!Q(EwP#e@j5&tw+Cb`;x<hW4W>ydO2n8oLZC*cSFdx{txRtby07gH>gJY(O} zO98hiJAx+AD;w_uC@xK3;c>TOCnAf6!+(2$8rqW_WiST6+@hrgLI@NeE;PKU`Sqzw zot@2r!~&W=cO>)xlRW7Jq|$Frs1jO8u|D&nu2Rc~;FsiX`BaP%&L(eQPSIcwkvfx5 zP(saSkKh_~-+ueT8aw<>BLjxN7Rbte7~FK9`t936o;6u`=QKl52$Q2LH(UuG3YQLL z+K{H~0wjw!m%i4`FAD3pe+h|Z!ONof{{nY8Z(-cp2=+QARgoI3^?b4%T?Fu)#U#)f ziKJUqLs>Ue=Wk~}Lu3p1UPWF@8t@xP=w_0)60F^q3X)N|;nm}nlrV6dWVR+kHSug0 zG09jVP&2Nvg|T#uZ%oRN41X%hv-1p{e5!GY5o->^Q8|je%3}I%FMtg4Uy9Q3)8C{{ z|I8a{UBoz`4(ees3pAmq;o=9d1Ne<-6Q4^`1zC-~s{Q|3a+n$bQ@80RjQKm4W4dt1 zdV;VVD;GkN&N*~L@fS<7FjVaUY(7v@+h93H3F{69(2@!YyGCX#4%jP9(t`nxwG+RD z#YT&$@UTD;5qnKQDyz?Jl6+aEfPE$F6{{>?TC%4r z!}+E^oQi?p*a+`0NLZas*C3?~!a+>>X(HynGGfuMx`I8cFn04swyb|a?%F|X-DQ7T zvO61pyBrNA6Nbx)-<+Fr7;$KMazVAa2H}(&POi6SG43WUXhtX8kAt4FW zQ0N84rCv6?{Bu}e3|EU&!yGtpw;^hkndAr?=}AWz#ci37o!*+IDL2(t$k7~fBxu{T zayRhhlr4^-#pPKAlm>~XlTg3cq~qbsnRXnkRlP_6K&KaEQ?$4Cg?E18YtnVUh}Yrx z|2IC+eKX`Q`NMlCC?u+v_+XIMG4BSvo5(0X+Si3@<2MS}k^21(5*HvucLa z?_ugpt0S51hl(HmEdCVnNzpaUJyN4l48<`~Dp53-`<5`nB?t;OzcWE9P<#DpZa{ZRbx8fhML>huqJ-c{74Jx=_ z)Y46`J#|0~SZLu=<3k|)N4gDz6{!OZTszlWWm=e>44h3|?Q`DQ%)s+D(T;uFn>V*! zvf#_pAkexkBwPRD-t9p`8_TT^bik|2qrX2IE*q8pHGB4Qac2bj4Y!C!6?u#wBz=UAbv-pl8bidabCMa`pB2OGE|JknK1mWt})Fxhy(m%_{J6m5PmUEbbL791y4wp=lfk?eR-a^Ah zM+jxs;I>H83iVTwY8(UrUGTaYYgf63ePrtgniqYV)W&BXC`L2rbyD?j20Q$%pYkdf zo(!hC43z!bf}G;tmO!JfL^eKd8 z^ksJC*@`NuQwfHlG(qN;(Vm;qqS?YvIcVZjh@u!Rh{vQ;NXb1Pw7Z^tW@8%ELmF3J zf`B^Z&Bw79jbeREEK2re{ZJeaVRZBnbgqUkmeK`u1rbv<$!z>L4)1RBZA0;2lKG z)8NzHQBBA-1E_r%i+%JQ)^K6SA7g*#JBNH>_I9{IDg8r4oO)<^2F6nuwbYX1u&>r6 z=0zU!%Bwz?6Vh5}=JEpHZ%t}cq=~W?zvPUXCPDJ2f;c_Du9@cx_uzvdT^Q&h$Dzu} z!r8B`hlbhmtg)f=QW|Se?iQ~!ZEdUGb=+H&+_1dWd^HwAsl@=d`O5d59U29SfDnGJ zR0HI07y3-Cg~+^6Cl0G=DwrGDj@un6#2+oy(!1*qrV$OXbqlnP%Se~7wriSiX^QV^ zwewDn9(&+8(958IK4l_#1m&ct$3T^2yB^IFN#Lf{?qJyhrgyi;Mb_9{YV;yM$#!d6=5?O*Lf8>vnHMzjoqQGD_; z^^=MfWa>Nj3+KEPE8GflV=kqSG&UI4`~wwc*bWEx>r1Yq?O|Iu7Pj@m2)&lkW;J=Ar!Rr(hO=8pXM;XfZi&;akp?3XmbCwBDfZW zYIn{|-}AaoQ|A_BazUFK?OasMA0X0pgybezuDY|+Tv(Z~-m8Z1hJXN)zUURtH%CCJ zu+l*TbJxIgnDO?&T#Ev$>j3%#0OMAkzv6#usGb8^Y}_{acoDJVl1J1sF!~|IAw&lX zc#o~=Jn8h9IC00RR>9JU2o$|)hu?ECW`137!XQ0;VebETxwpM#Jt8 zwY1sJ7Q0AaRre!Cx#bXb(mahfOAv(E?;V6Vl(=~4_~xsmc#fP~+oFvv>ST_=vs zQTl_Fcl4{VR$K6@?;ogG{N@6SO4<(Sy(D#k*XyQPoF_uEVo{zf`u~0fBG+g4 zx!P}WlhT&$yMK1yoRml%OmFJsrql_eP%+~ug_y+6A7H>g>k*3O5C(?VIvjUn1C}|S z!Jo96&cT14#)Jt=kP_KQ4uFUnzSPtI?;Qz>?rx7aB)wQK61wHV_WS(H4o;0oi3*Jv z%hZe@GmwkSSyvC%m3&(wRr3zs#tD;~qLIZMbo)d>*z4con_$`y`0eXLJCRm>Ul7!M z@axxdbajjFWZu?LSm+&-efQ62lwQ^6uV2p8WZ|yeS|oqeBOiEj&!9NN+lRh6p;s-x z_ST)UTdEOKGSC<1l56Wfb5a6CGx(RzBN3uM(TBh5s_pfwWq0TWzUn*hY ztI32^qCJl6W@%A?8WooD!s-aJf}SNgaBpoB78eh}rtyqBnv7LGWoQQ)el)jJ9`1(7 zzss}4!;1k{eLiB1q6T=Bwb|dY$S0UF3x;){UPbx-C6gCsA?9Wcn7U?Rz^(EI{RTWK zdm46iEFkv4i5`+VYTkIPQC4<68m#FS(<6q6X@(C5MzXb7eLa;%t``OhoqFJdMON+x zO5@$+_bo;e~nfPK+wB zj?qK=jJrt~LwRpQKc@c5V$fFotwn4!Rko6~nW~Y_`ic9FqSmOsoPr4n3D1z#5LN%6 z+eeqVIx$S!wlhLA#f}chij}KT6T~HVuNfKS=PBq2OhuDY_!OM;&HLyHS)!UN=(7@g z{o|S?vL{-E|2an&@6?0?D;gTO7}}P#Vw|e>!@q_j1>qw-w)^UfEgYr2I1s8q$F zcwLWb<$DV2m@K2Y1Mm#tuO)cYs7~-LUH3n4$7Y(x!DLUcD^9PwNo_fvir9v%OoA}K zt)?;9Ng%*8>$Uf2XyU3+$F{qE>CUHx&Ty-*P4{mJDQrP8`nU<25NlCH$c%Z3lpx@O z3A;_B?zgt>iw=iQ*QzalQIyFtmoUQ55G2(8&W4=vIUA15pIX1$aja)2=)`drs^L00 znBfXc{AIDlhg&+$^rAY_Jw)kfypCE7)fN;d6pyEt5F@|X+TUY%L>Y-m~`6MSRqd96n3!9cerj$X- zsvVTYJ{Ge^IJr6Y3KSyeDt3}j=Vod#hnU|Q9qTEtiIBjO#9mSMpqy7x@f4h5B9JPX zuId}Od+hl-s3v{s#K4F(z>^53v{4jX6E(JDi|*(+#_Dxj)@F$O+m5Rq3;oLI9$DJW zWG#`+dU%kvHBEGDz<26ihOp3eQ%2p>XWiq2Pjb`Bl){Wb;>M-{?GLtMfmg3#|7}>En17T5D;C+Ha^a6$INT@qnY( z=<1PuS-0HZi+btP>hI+wmE{?d_H&7=C^XCWoH&7k*}1NBuGzMVNy4k$XCyrKtKrMf z=KPbSkVHfJhN=ZBAZcrJKU||QRxx5D9l-7MI$jcLJ;iyY0%f`z3|5(h=LG^Dl(S#r zArN9EO%STj>!oL0p4-3c4AOC$BD@DbJE9w-pvJtF*6-d{QsWnLR_Fqam?#r^X&R4(2T;KQ*lwsfIMsdReI|gQCuIp_OcID<5@6bt*IUDuQMQpI4bvvH zz~fNmaoInXk??H0R!$eaANL#LEbZqdh`A&#POs3h=Tk5ab%HC`piD3C{DsD&-RJrsP@v*Am`c39R&iI(Zxv z24A~%D-c7Q9GW5?3d#&7wkqpn0%c}7^sC(8;V@mi5P4Q&!^tt(Yn^sWS3a*ph9pUN zr}ZKLp97|{LqIWswfta?n2+245UnaYy9_DcE?I_J%-=g#Ik zyIL#TkZeOa(kCcFA;|FR)%aePKdgfOhBn;V*_h>kdo83~s$Lc(nYaS@QiTGq+ibcc z1$<1`AACgv4j8laZw>PMf5TQo^&Pb3^(4t#JB+9?-m&n2`f?&oQtwN?L-0I%P?Fbv3j zBDbN%eY=pnwE*8P){=eCL{bvJZuRbV(CQVrplSI)#)FH)Lf{biKtA8EyG!@1XHD%# z*b#zc;+&>XGsYq@A;fkD+yRX4A8yWlQQyUP1v=6EMDE=Hc57L(z1n$9LE3-5 z9j3T5GiJxT!Ivs4?zVfL=9zRi2o!QeUfhdz7LACp286-PFssk(_X<6F*ss8daVm6XbetDrfC9hi587+%ov4(;UG|pM?@rJ1IW`DCp@5> zbnIEUtcT6r5A^fe@^|GIUczZk!6eWBDIkK$KKZ~BseJ*3Um*)>`q{5suL^mL1an4mEbcn!4&Qh zI%k_lvtcWr+~GR#v26=FHM!_pS8bd`ZPjkh7XLCzk(OvCZm*e@1Z6a1L{y#nY$tI7 zF=A`A-mp`wQhu107#=Js+pRbGmcX@x%pPz>xupHTkwNHQ!E!tmMx|$U-I$L0Mv4t{Y}FQp*64ZYLWcY6mm4w_vRdc{ zrU#odJY*TbH@MK`R7=nqR$A?NOHVZ^6kvjQ-a^%)s=y!9Y1)X|VhKj7M1XkLB-IgI za*IT?wtblrE#idE!0jTww>Amu;ddsnaWXQkt%3(nY8(U@adSzHkT5@Ih6#tstn>>d_UAEhs}4q?}=IXw2~=NlEdybJd4Y-5ZpZ}w_14h zOM2|nKi6R^)K3`2m5R5wP@!yjm_|-3z+s~g*iN+biY?XKqNq%r_=q0=DBtBZ)=>w} z!PHit&c#EEusPkW-9d@V=a;eHHLNbT8o)%UNTu!CAF3cOOwC~o&PV6;6%6KRbs_Eh zPijoxH80=PA$^X<3yr0cazoHCzZax;lj!u?iv=N4APCHUIt5Z;pguxBYL}DTd)1aM zC*J#p%bImS%M&15?~SkixOu@an$z&du`x%Qt{w>gJI(T+uqv`CxY7)Kex^xQ<>Ett zN9`;Nc+?yeuTwHb2zr-R98!H6>lR<_S7|LLR5qkJW}I}()?;TcnY~?{@!H`AZl>1D zNsdh_&legeHsgoSTR3I<%Wm&hTg?r>ktR?*5hmuCY>%ko{1wnN(_PRJvAO7IacC8I z13mR@Tzx`{Dcd9&5D$5zwr5qU89vvO4Kg{8&N^}vh2s>_G>wdh9oxRz9n2CnU9JKt zjzyZtDMF#t#kXWwI+^I+2SU@mB*Uyb?~8#Y=C+j?TK`qhlw46747oLAmc6g67xRR( z%-A*QLmMwCD5R{xa93hm9lDktxNh9YQ$I2m&%%6wmg%yq zyZ7Iz?95UZ_Axkc4xGC;71a86o5PN6rsapiKIZd4?8gz%=hJ{0mUpQ zn-;_B&e6OL-Z<65I2T1+RfBM%94nWJxB;J!4b>kr~m)TO42}uT^b){ISM^ zHN8dA;!T^%WO;6P?DCrZ#acRCkeNMaIugPh?1T_qa=jdDzNcTlD{E}aZ`og3jap86(3diL}JdcL3a>Cx-BT0@d$&v1rQL@|9Ok zzSagPcIljm$6b|8g3nsN3EYmG*JuJVA|Lvwf%h}%zcd6X1MR_qOLE--e}(n4ea}d! zpt}<1;n*(8H=(={jQaeKe{~bVt%_9Z^eVUSAY1?I4CLS+TP=u+Vtpif_OYJnAYT)3 zyfn%I7*Hs`=d+nyE@pKuoX0rJAIqxaA%UUOMcie^wAe1 zQ-!_!G;}R777;5z8ZTr5^XAoKTcm@ehK$jp4+7>48xf7~Jhi7=2%=17P{2 zR`#KG5Cjtj>4)0s=6Af_W-yektwoUGBbX~09rUqn!YN+{9qhy`2}-2d8ky^tisOlQ zZ+qs8=!QYk1jyPLq=m8I;`DDvEdGxWi$j`P6I9e+22GDT~J8FuNe18+i`AIu08rRCoPL+Mi zTV>bI(#x(fWHQZUWNP;(wLtycpu#Ge5nvzF9b|oHMKG3GIXx|!AlM|?3fe3oDhg$8 zWOHhpWkh9T zZ)9Z(K0XR_baG{3Z3=kWw7X?g9LmxK3L&_=!{F`^EV#S7%OF7pcXxMpx8M+hYl1^? zcY?b+JaX=L?>YCr_xG(?%&@Dvs&?ZsGJN z2O9&!pG<$Eg&6_TMkZDuS4S&LfRU{!K$=mG5g-q8eK%SHs6n;>W1xkRwHW|p22cfR z0@PH*lvMx{$_i?VDm0AmiB+8K>_86x$3;X%RZW5(ASxuUDh2?m(*q>bR8;>ws{(D` z`J2-NMGy!OadvR{Q$z0GE{Fe=`8Rc8 z(EH4Etv$VsT>p2)jBK49J^rE1e^1*4Wb0_@=;ZjXj6i^yr8V#md&fU(W@-DEO-@K& zN?c4ul|lBs@oX97K=10MRLs^?1Y~3L&e{>~ zk9?w*?>aew9Nd}yx2>&gL9Vu*|1YzdrLC#iAKguz?U>YTE$y9wQlkGi_}v8ex6K^r z1YiaL?EyeH6APw4#s2D*KW3Ic=64aiJ?%ht05c{7O7AOQEj%i>Us+5glMceb{cH?jdz|Bs^oJIu(&(%SvM2L8_o4d5TD)bbz)8zbxg z@mV^GTe<;F6)l}iEdCPlU*>;R60$Y71_BsZ*cqAGKC%AGqxNS=k$8_ zf8zWf-+Nb@SlI#{9RZ)X|8fD}wfG;}?+fsUG=ND{R8n17n(lx5=C4s=wk9A`OIvdQ zE5|2*k%NPgI~?6wAPVXTAJ7*_vfEmaE?$3&T;s7uS z{W1LueF88E|BW~SOd@|HE&!A0--sK)B=#S~$pT=K_#3@vk^LLJXOa6Gy~ip12XQe2 zm=ym;?^%@oMyvoP<-ZXdfJxsuPc|0Xh700`D5R`~$vE(DiS~`kvJ7AMkx9?tj7m-dT!& zE|W&tp;y=%e6#{Q?>K6(FFsL8+XzrRl0_aouo_|N4700P~BCUA>$ zAQRr8FR4u-FPSSp1sO@gEm6Cff0FMDw;tfdWPT&3>7bMIc#89zCCA zf7=pGiXcqu*R__Us$bWpN`l))K5{2T2UXJLYl{N{4tz$r=qo`=ig&^!G>!R-+ zE_Cg2T|7gPh4rGHs}R(2Iytjpv%L~2=eUp3(#?g~3XRzvKhmX2Dm+FhyTxqnGo-g( z#7;wESI<5C4oWE7M8;k!viICFqb+))6X}Q$;~nB{AHUj`wTWhdnLqZSyog=Lv>Uln zb$eeY{qS1JdpXRi+aQl!#YLg$3s1$*$bg@ZPK?LXPE~(0m&8+r6!E2gijXppjNIIv z<@6@+ZNa06(QR{AFj|hJQaEktwwxS{AF-su9H96GVmn9^@_Tv)&bH26yEj+9Wi$p}(z_DkHGBA3~Qm<~C%JL%)(U4QS1PoH9S|%Pthv zxm5tzaFqj{&78AGL1bhb8WuFW6yT2Ww0P&H-Q{F`6=jULcUx3ajVDP&JQtr z=2xPU)W%h*82^1~bj)gbz{Ip7i)hVDx`?#&@p`+KsZTd(X*>Sjlm;2 zG@8f_6U~jbSrvVMJj$vs)R|}&dfu3Pu!goUNr~Iv2MRkg8i-#I6Q~Y5jg;erm;xMl zbg&)|;m9;ocf4~;?yxc#IFct*MkXzJg6<(KE?F`xW6 z@wqs?NtJ)W1rKqRfvZ4Vp?oWYiox=-+ShrvY=F&B&^A zKUQU4Y^)Ve{u;-J)z|o<;4k0I|85Br_{b|rvn4n9AI>UtCGD66Br(h#D_c4Txoj77WYNXI=ZB8nrb|s`HCLoJb17@E znu*_yL(HD0o|$8dCVO$>zg1#TommKVV|oG^dUg#hXF))B%g;@UDqZSOG!APz8tFQE z$+X1iW~#~G(h276 zd>3EjYqpVNJ$;gAY}XR*%TQPv;lE-!^#a3;BlIhiu3{Z^vDdk(CLaZHHwPl4T$I4j z7NP|AeV&qhZLdxzKh#^ zbtAxv(IecTZKMI74W!i5Mj3$-6~7oHQ4zA1wfYy*u{*mq*YSMzWL8iOl`=o7z8|wh zg^m`^0u0uV5B^WF{W?^2g6^ckt|q@i7jx7(TU-)@bJ{V?zhx)>z&E6RrndXNSo21NOYtA>}+oq!*Z9N7esZ z_E@|Da?VGW;`4G`s46+*j|K2^t!6@a|E3o0bHuthe-EdwS3a>LBkiR*hyG4dzSW|b z+qRyF!g;2>uoWJ)0cFYG%T5Zm2&(&^F`%s3MZbs| z!sMeP-4LOeG8HDEoL8?sK}q90#QkK?l@bOki(Mk!QqVK-K0h@Z^~<9W6DoX_K&zW@ z%skYA3_0oFIzGLYX1@`X^>xqfrCY%DMBS{dn6qD#i=iNBXeh2NCqN$aZ9AMVLp#UB zP#g}Fs%Op8c8B*d$#rY>tSG*Tf)B|W`(7=-hbVqkhd&_fkBi(-Cvx?=PhRi3)*_jM zM~1fKOGl$;5#`E&eumMsRzR3{2@uHY6?*VeL?71n--+70i(XEG#diL}V4tx`uhPc5 z+JyGu(jiFhfxb67w#u(ciCA2E_WjUV277ILJy-Ixf(@$ucr|svO7i(6n(ml~4wcY~ zU0L8F)-jsaXi`!2)Qh~yaF9=EudJEzE9f8%*pPX z^orF`z|~Qo57iMHNoi^^dQ=$pzPl?6e^qtRVBKmIWsGnL>6pR$Xc4`}27hl^VJ9R=<3geMHYj_O;ym|O$5gs{ z&W>B&qg5t*wBgxI3SL|IvQloeNjBv6-J4ooxP1-03=mIOktK68xao?jzkQP(v;DS0t3k1x~d7>Bw0JXyp zy$C5jNJj)-%%V~-(x^9i`Xi`%4_TP;Qv81^S+6!IS7^s>q8(UC& zeCrdk`O(T!98Hq}{*|O<`qSzeU~oAY$=6I--`p)qaNC6id@aA>aI~R`k6vy4Oo3^-vF$ zd|9cQv&MiU^Tg3P|9Im`amV9o9U=#Gt=B(&VEYjQcA^2OtUR~XuFtSL1d!v(J-RD5 zD3JiT?g+t-3_Gf5@tZ_@5GBs__jp(;45f=Ty=UT*5m~j@=YJSM#VSgh&wjaOiG?(si92-TYjyDJkTN?35KXxgvD5M;g8?9gg=O?2wxO}pUxtMn*lX7$$d=|_2a(u-l2WvEq_P8PKWY5D5z95~TQhXzPza$ZI^gHn~d{37D zqP>h~%I7boj)q?BdwB7R>UAO6- z8yJQi{z%1(gQ^3zYkPzrRq>Hz@U4eKi}bGEoFjbAZvatW9mvf)AL&S5o726&HeqE# z+cH(A$SNpGGKp}}%9;sho#^IqgLqHR*kH+P zx*Z5;$`dYz{Ci{H=|(PsU<${fg0aP9{&|bm>hr9hZ_7bY;@n3$dzXfpdB9zj!2nF8 z$=7$mhm+1{1-yP{##cV6BaGZgPsXD843Z@E9flLZO(Ue_no9e9EV(eI(QE%m&0J#jaq*V|IpB(mB>@j|f0PIT-+UX$Ow*y+Og!6yO8sk?P!gqJ9pvPF zR&j0BiM1<)XIn~5=jSb z;Vi$I`EdE51{1TiLo5^Kcym-V2){l&VUSBxiTcqO$!-x=E>L5dV7C{t%JK~^>;=-o zdw|{p7!RDZ$1Y@K;jYE5kKhD6Bay}0!-V5YaF`Tk8{w^w;`Wi zXYmSOv28;q*2QTeZ>H5QdlWaMjQ_sfGC|+_Z zf%t%xK^Tflb%g=k3Vc?qhiGf-ep~`XzXMalLLldmrDBeui>Zv%bzc@sp&-gqR~yUO zAy@+?trZESyI7B3HmTROWpe^3qL9UhRkbJkIF~`Ktfn$g){uyM)cxj=G>dLaUfw=& z1zP3R@@S=TNah6ttO%Ye8ZVG8IeZJ*NIjoVXh7?{;_0AC69wgd!HFNnoovc;$6Yd! z7iR9Pz=lP~!SzqHna;6RmJAHL>IkqM6>hhiqxC=&j?`;(4Pt?y+uNMH4 z85p{X+dlqO3%O^Vq z9O`LmI9q>jqY8q(Qn&Q-irnc)b%LWAS_U+@=i5XQhD@DojxGC>mB%ey0q<-L=1M;v zd7Xr@eMbv9=*!nS!TLElGK{dnm%aa__vPZ>hR$Ahutqy<=skAP)4Vg(K&J`fKK5ccnoE^6))3uoCyPV5E)#>Go ztfO~BY+%1uvR;GDZk+W8fI6BFjmv4`t%_w$|r$+wgm9EKo z_SH;EsENSVK&3o{v&g|FoH2Oy{@TO-4gNHd2k++UQjaD(HVAJeYIehq5p9oQ#$UqQ z3tM#c!&Bf*-95UpC8Az>^`ihQAdt^xOk`<{(-qsRE4DzL3wV{25azg<$nLsrR_^em zIJj8(MO2-`v{94!p$ky{yflAGz(wkp;u%SGs;6Z3|K8ji#3l2Z1~CGOSICAzomLJ7w3goRZGBJ@=za=(>BMQ54l%aR(r?Nw1apeP@T)n zqu+rd-5!2AO(w-XY^x4VLXppWiUFdrMF}y;jO+B%8VQznC)!re#@)T-`*z0H4F|hBf{o5@XmnO(xJ^g63$i6sdKzt_L9# z08Q5}T=vsXR%`UEXfhnwK7J^dk6@P`6xCP;UHTAwKkFE+a{D^Ubz`xsfq-H#QBKefs8n(C;9gd<@dCOlXTId(|YSE$*BvSJB%17&M!u7xK zFW2q54s4oiUar@;<-(qpK3VSX#v1tDx?mKcnG5oCiWILWQ}*Htz`ctH^iYZ0^3&NJ z*3#%^?1nMIYsG|v-W;iG6^sWy=Lsm_k5NyJltVKVyj|KiwR_Sj6c{^|=d-eQ#cLEO z?8)WHDognAm0K_`7?u^#aYB#ED0;Zikx`HUbzyn_)~z2ma%v~N_rJN8KMP7 zlEQQj<-{%nOfo|fZoro-)$t{iQO&0ZsL|f<;B18I)YLep4-vixlyw8yk7bk4UgUSL zj7P&3uE)jJ7&nf>0pNFkdDHW38*i)Kw2K{>6t@HNQ6%1W+?-m+m7#hZ$NrLv`&L76 zV-;%g&XCP4lFF^4-&rsB_j&sO-PY=C#0PvG4TF>RYW;Hit}%Z4b2i`6DFf3I8&3rt zV*_f;d{^-_rsrE-pmxzAjhOyw9BU$)yAIcPLi<=9D0C86s&%K{KX}?(1XI^>V?8PZ z6G7$Og8R%je7UL#fr($ofDT8IaZOod8#qs$Ce6WwOV1Zb6*q_`x?=NWTg&wHcw*vZ`wt2nxvQm*~_dHbYd>5GOMqDW9g(wL5n z?;n9|j?3Z9jx`3|4>Ag$pi>%BzomZAESW1spHvmM5*w^ki1TZpyF|ZsW@9&{C`L0? zhx8!iiF;t--QZ;aNS1%zphkYon`9m&WqtW{Hpx9ClS;{HtU zeq!EMHN&_DDrl}Okh}gee>ARc*6bg%OhBX}!3rBQiF%R&u%^C(eyU_7{eEX0#JmC0 z?cT0ux5iLlHmA+tOV};ZW{j4^4t)~i`?M;gHP)u_TNql9jesrWwxaGP4b+p=9f4O1 zWx1C1x?&nRLMGQ?(3R{%M+09hy;$U67PyXhDRV5I%hG(TyCWuUB$*Aru-tbiVWP0v zfk#chBP2eMswFZ~7uxPRL8n6y_<)!@gR|OOv!|ltojKb`7EIdOse+6&CmH=akura) zYMoC~e-a8Uq9*KPmT)^fH<|)IE4Ea_&mEmC?J5GWwo(U7dMJ|%Vjowvhk92xEt1e7T^+0X=&s=#D5UZ5MiC~(&9r22onrDd)+|4 z21`Gk?*h)nRg_V|m~@OIsP=*2DBfJ18UVB-pj=X>Rc? zPakZ9-o3;l0Kht|4K|X9kFZ?Gi=fqQk}}gIZk~x;JH>g3CWTP)Nor83RJ<>Z-nS}# z@3GHG`tw&+M8i61o<&9VvE!WAf|7Ei^^1U6{3d7l?|>wNV@XP1n@CBwyw00-;%7m@ z%5bb6rXgt;>I3X9AkhjcC$y{CVv?t}CW^z@_sKrZexUNIC1N0NLmj!Fpj>IRO&sT0 z(~&2|4HN(fJO8tl1^0l+pB_Wa(2gpIp;;4eQuvr*xyl!$eAr$-ENw$P=dE@?-uP*H zpTpj@)P|{6Siuz}rm(Cj7fC9>+D!S5_Rc^M0W4mzJ(n!8JYPDlGMp}bS|(Bi+i;$! z7^a15yS^v>E#9JbouzWA!b=*>$bUFONX}{*ng+@Cw;Y*xf_`6Ho(vsci?(VeZd`8p zbdSBiu3+6=`QI`l#g_G9E4tXw13o}I><^(713;fCRkLL_#(!#$sThrJy0o1VM(DIn zk*m}ig|NfIN%OjcNj!bYpSB|&L+@p@>QXGp4?6Bl56r*1n9U8C1UOdW1E)V-YU%=!m`|@oRwonBm@~4v-yv)UQ7$Q*i!;vJ z?$+y09;hA#{u%bRT68Sh2s}w`p5)SpYLNnElWYDKrrz-Z>3Ow+uLpQ%kMAm?Z}%RJ zQ3+W?!ILk~rJ|ZzLyiiN!C5{auC`#oAfuB7`^tan*uH^Bu>y7?Z3PtwY}P_XSjZ$c*D6VinQ4cHL%4|rBbuSQwT-&z1ib{jN7&r?mGCH}iMR&;H;mk4&TKX~#*4vLINRzbrHBl;2& z)PRifrB8q}rJ{`{`1RtFnkV3En6Ey_Ytb2;B5*RG)b3L21MW6ZVZI~LgH|yg1U;4*DbfoXjt-!-)W961 zoM73pY|sKLIrWgbllE?pt`F5oBY9WAKG;;Hb9h2Pg_hxOoR4s6M;v48;PqlN`bosQJPH)yxESPn(la)=HAOzkJj@>hgYXV-O~jYd(U+inKiUdWglGNPzx_0 zIRSU#)>+((ffh&;VjZXw!#yx#5WbKKPwPg%VKnqCrUp^S2lZoOJO?A9iyemeb=(ES{nS%62VDGmJ(C#mwwRV`I9- zKz_NTAyWuzzm`4;%G|YCT(K1un!EF9rA27Qg4%^yQO_r&w+|XT{V+IMuQm>R$|Z!Mz3@Ua^ zz2&X)9lpVwN~+6brzI)NkE7^8+aSl=QHRKQluGesq_)1={HzXJDp*i41bmTtvW+CK z$ODPdp$(7aq<;91@g@64!2KXodlioCrAgcqrM?nD7H!zw>eqgQM>LTvGM$`XGMZjF zgkoPO@r0<7@?sHH3ughq3Y&(sO5Io_J%4rO2^!p&=|WLgCcSCSuO5WH1)jD2>Cu)H znHf@VC%?+$K2c=_epgg7KO=vo*C-pkvxwo2u!}j%J61Au&>v8TY&3`RFTdU?p}57&$5QPS&)FuI9U=?nr+vau2z41^AC)#m;}NVkOHQ0+?;+zt74a=CfB}aE7JHVh^|r7e zN&vy{b%ugYl}oW(;g9am!h4Fn*2cW{itsjD8!1xcfE>38hwKsWW_xGgqt5jzeTrX!(N0@~0&>4J``}r7&*{(k&t?bpZ{dp7 zb{C0JKZ67m50bS4$yP{eQG6FNoZ;;geqlTuywWP)s0KC8zikR)h=fbl^Razo?$r{T zpeCDIaNpluKRG7nh-KJF{rgJuA6S>GM*MuYSrDEy?54exu;*Uv!kIN0F;H9T3^L# z-)RRS3WUd{6_08P&p)+Y6wBOpQm?rL0H+4UjVB1@HKL`It6#w>k`RmddR{9^w)NJV zf}UOvmDz9QT_$J!wL~oKT@rS{BvwJ}34(X7XWX2vfJx-P&phqQA8|a)@1TmhH2m5AU6cy$5#4B zr1?W1)bYF#J~`wm@6p753}%-6CDD5UU&TQN82f91!_9*OyG5vc-jrRc^>CupRmrvH zpaCK;nGi$ZzXmBjM7%rqS2{jZ5(6(Lda4SgrUOQL<2zUh5qhH z1#W+MX|$1ylZNaCR)GsP98_alTENn8e)};L0{iftoZr7kVjK)e-DIFo%-kBCu=Cu+ z0)kTBKR2C`Wejh$ zi{3k8HboYwNzL~GGI>(??4y_7m|B}H=YM~^t zGS>SuM^Q7|+#oH8xAx*N}{;BVRHo`A|P zY&Z=S4A*X?8Ts$&)~@NgOE>qemf$kf>fU;7m2g~7-e3=I13LZpx-2<1=$HACXEVd7 z!eqmX$tKvQ?fIWtuC=}5w)?i3kOXpf@^_6^<1OjZucb7bGMw%yxN38*c}m$sf@aN* zgw^k#ZyfpY(yP#5drvp;Rm2yqN;$cO2&fd7vY0Co!}JbiWrDAMjaTOPB;Y;V%!3G3 z3*ZLi$eAmgg!BxL&?5Q$<9Ozdh9<&l@hOsc1uBf&1q9?QLjADhRlGv2xA3=14GoU;B+m}GDaPJFiKi7~ zE=R?ZIe|+x8x*@*f@e*2`h{mpLeW>NzZm`9BFMQDBsS&9glXoO!TP~1jo1q5c~rxh z?37E+Nqs-ZY{Gb>AH-W+sQik0xqG*v9l=!(RwLqjaRVV_wE@`8kiOUX+HAD2Qx+2< z*e{avMebx>Q}Wa3Z+SR0K~h}r2SI9}w({;E1djRLr^{&%J5FPJo3IGN)GmGJE=rnM zFKQSZ-xz+lrb?A1O}ngNzL- zu$(lNAp+S~o;RK^(j*WY?wU62OKc9Lc3^Cw222Beb^`K4y07Q`VQe4A9vugjI;vycb)Toq8SqL zt__pz6xg{6r8PqVfq&M3(PqSvX(HUn8L?_uowdE6+c#Na`Am)K#6fF%oy&Zt!s?7OOK%nSu8FT!aihW`ve~c40p%LA4{7AR3jlaldF&o zuRqJSsU%%6*ToV)Bv+JXP)y=i>?4b2J<^=z;1SP4e2l2~r)NE&mgk1$s)JSj`5_D( zJ64`{pN~yzQ!x)#A3V3I{P!s1h3s}0?!2syXcM%dBjl%K0&yx+(op3S!oM<!|DTbJ8;3nt33PMrG`rPHgt>f2pg+D*UH8hI(-PDFZr zdHvI#7_2zWAX^Z+UA)A(xnz5w>s&^B5kT$XYRpLF<`>PTZjbQT4tG`$;^k%!_r>Qd zbjIt-eAAS z6ug5*c{es)-aX==By6Wi&l-ID>qgC!buCn5CMCb7w#$x?dD3%SLYtw^b0$GZ%emfc zPKi;1t4!UQ*doK&^6{o7eJ+kcBji?eKT;jyQ=j%~6QqdrXwm<#`Vy;=+Xp8p0o3-L_D5t?QQd1>M4M?8sG$=hUznluc zjCM1+K z5*%PCUv#t7B(n^Mt2)I}pO|HQXY5N9atD$y<44neU>O+_3|QCPk6e(?%M*r>#uDF* zwy(#w%M?!>m?i+E@4j;o6s6BjH=YN%$LZL~%n1=BZu!=-_x(xu!MZ zhH)nXZx*(o!aSh4Lzprex6WKe7kMC>EiAXg-6@f*3w>-QcN;K!(~nJMUV!l2LK3=R)fLgAxUhx?YN%if>$!`_(;a=rSMSdyFr7D49LwO?A<}Je@ z_I;B+Pwq}xYMU-cSx!trPsvJ>ZGsB?jptO|FYEvA`m_5kN!g^bi0N!{?;>(E$esb6 z-}U}smJkV1e4(?Bse4W=O?d}0Npa->sF6rRhlw|J)T45hyh zU3L_aJkn=|oao__of1xe(+QDh<3E!#Zecu@)H{mej6qB6yX&NLg}^VnEu8n zOa>G{^5(p5*}TAbgQ0xEck-}j$YXfSW-RhP4mUI)&_orx!1xkaBKMh*G2pe2 zBa}f6(FH6brh`^V25-KkyW~HagzCAD$zg5+9B^1Xs;rl~Y1~%kj}KM<>S$mB;9WZS zb^~ER&uSm)kr29zFRjvhD!=e86;t%3S%}H-U@(Z)B4~V|lDwW)$xeVB zndq1F{DR#9=;)ncp=B#@eVZ^PO3q%_#3ng;_Jk0R`yX{gNhJFddeA~1OuFMxtVipSUSaV|pjlHJ-gRcRs-F$z&mTN^_ zb=G)+Qk4_j^`N8O@SPR_yHu)wOisJMk-Kb0HgeTtikOCLkU}yNZQMLAM(TDt0Ymao zgup^W$zHFKZm`>XeENZPOC2`ecI*I#8-UQp{GN$*78x*Y^@E@3x_Q_6WCY&=DEQ*OimsOQWS9r%`a;ysj7}BP(eTN@^Ht z{TA(kZ;nZ9ruaOL|Hq^9XZESIyWI+z0>aF%?8fFv5m84C73r8X~$SBUvAZ9Ajrm+qWu^(+q=`nLf zxt8F%>O7d_lfrGdq}<695IBe?L9w-_oFB_YPc#5~5>P2I1`I<~oX)*-JuYHif!X8JVZ8;8l3db{K;#)u+^?%190h zZN9sn4iQ&347~p181I6+YM5lY|Asjpuy_U zi5=cStw1Tu$JblVUfT?jRkkzg7JZc;pA>|}{4@D3<~NP}VBSza(!*khtD3S^4V!3U zI$qBQge23b)%T|~nE6nQRs?KaSwb#}b?E3c0iab0c$R}U6t&)UB(wSZr&KkN$T;Gj zB~Wy9vrAjjaD%P4iU-S{nb`z)I}Ya!0vqWpDIJ5i!JLK}pqemp3og3e{a%WvW%3dd z$jTVPA!BBC3CR|AwVo_bYU($3R<5U*v&SbpEe%T2KKwz2OS}X^&S99@$?55tbVOt2GRuz_m+(gdp?6FY8NcuOXipz%+sSbx2VB{;&&ed0 zB5LN9l3Ea_+P?Ff6b8+lLxvJ)iSTjbqPDS`@Lfitr8ng2iTnDoYZe%y;|=152STBD z;%6{5wq()U^(p}eX@~e22D)*0-|i+@IU1)lQ>BiM7L*w{{(Bu1J+;c8RH_W_uwrqT zV2#SlhxiN^&aapq^+ce<&xb1;YCHi{Bak+P1o$XfGU-Qcd%EI*G4v6zcZly+aHCyy zif|iZ;em_bU@R>?4Zn7-Y67D-&o`UJQ0B?I0W^@JXy!_gN=ALGi$#tp;@CuM6!0Pq z8RWOXJ*jLbyg$CT0a!^YM7-c!T#LglUr>ih=h{iHGc4b&Bi7jMJe&0gO}+EXne$g$ z;3&idS!>Ftst50K9jSI9EVeU+?;M7`>{hVXRP61tCN&w3idE|SPM72Do5-u2xD`wh zSRV;5_|ZhYIqIREHD;00EyEH`sM!I!gT{CyhwLq+QLKU`+`;mpgyF6;c?&wPgV&wc zIThy=k_tluvuy#8bo(B*T}~ClFr0P*pGn4(WIx!APL0f1Xeix_1$+5{waCiKZ58i= z>k1$FD@*4{ynqUs_x%aAZMb7C6{T=6zSynT7mqP-7UF6^;nNt4qDvA}?LkbueYOJs z{4IC()}U-P8`iPe^G#^8PniM z)xzyl*d30d5egj3*FUMQkv(#2Y-LY49*Kg=LU1(P@EOg0)alw0mn@6rnIm9MzF>-7 z9C)Yaep1BPe)Ok)M<$Qgc5u-_h?X#&M4uH+eXOARgJQ`^Vt8QIomyVK47AxcPbXrY zzXk1bQ*S-zcYLO%xb0SeD>KN0!c&6{DRVX370orC%k0ZJ4LeX{ts8$;(!2BK(n8`0 z2+7l<&&t-tP8a2boOurBqE&7d(SXe*`fpGQE2b_>ELt6dws(xA-&XJO}{br7_2e6t8IdcX0 z6{}WP_W@T;VpYxM*x#maAGyVgE|m@3^j~q5kcNUYRT)pE7l+|8Oal7hG_UE6L^-G- z93O&WZF0k|FfM&I$2@M*>avwCwSCl;#F-t$nd5-b`db^H1SJRm4EEq_mY6PD9CB&N;)8o|R(BtD zP(cgkz%IbCbNiK1+`@LBq~Cd~_z^VW9HNw}fQP7mqbltRGSxU1nZ24!=Z#sWq$$Yd zUhnSWT)0c#NWCHEZ2B>T>>ge}DNj%=;w0)5*~Bjl8yb)j71g1DeuqhItM+bsg=;a4 z8q6#Ev5+wJVyRIezW!~bOISv&sR+>eg@jtQG=d^~J6^Y=)j_IV&SaTlD(HBfRAYlL zX1uE!9lly)zx*8Evl<=WZBj> zMso{bcJ`G`Lx=4IfDt_EB$R{<4}5(OlW{EMo@qccZHw^m>76Tgt?5zW7Ly)|`i@OJ zfOu5|a1kMp$p=r9Vmy-OW`?YevKQE;ZiDKE^3kRsk9qn+flQPw<(@WQ2kvInC|~%2bCsTv(>Fp_*aDZ#!b~?iXSdg8ju`h)GJGoJd9@`Rgkz>Q(X{9hf1q zx;uHE)lmw;p8x|2ii+x2Y(SssPOQuW-kbpT#?M8i5UUggtqw+YR?=>CAfG))npwD3& zMgJ5RZ}1j~DilImIPFwAhSEr>C-8U-aJTM@EK)J6tI^$4k@D?SV<(`a4@~BHocExp z0+<66S)NP0z}rqT1qBsi7vmDN#C!}}p3Fwvh-doJkGPu33UgP2t?#n#mQXZTbA!X` z{O+xAJ+%l=Hk8c~JdHKIZA)dHm*ZY8s(Xx5p@y-jbyw}MIuUZ!hwXAQ%4DUGQGExh zwZLwE1(!pBA1QHv&|q@l-T>e$*Y{7B6no;XEQ#4wmr=2SmWL&uYNL3#u++FELg5?- z62$$j7>G($)8PTgBv72caAK}CL)!jn5j&r!NnkgM4aPT&oh9^ZfRE zW2qe1{KlABG?y#o=0x7utT6YwYmFz|bI&z_V@{!0e-f>2bEq?9j}x|Ua0pNMA3{Lw zTs&)#%a7})4?)7;R<-7Ur4}=slbRUa3KlKalVZduv-yq!6UBuyBaG@>#wNL2KgSYB z=^IauSlwtZNw7m%-I^y+-oW?Z=-6HfHgTxquUxo`Rue_zSj} zaWJUu|3kqK&sV{eb!v}Ar*&RZpN*ktB${<-ZGm#mepIS`1ux7semekYf{2r+bV6=R z)g1VQ0dFccW+Mb^^q~H#tK|sj-Al0_WoCktU_vUAL+DY(m4B)l8E(BS4oMOiKN@K& zJ*}pDxTE#>iK~J&Ni{V#F^FoXhplK{Qu}tqla5{vOrIQxJGNHR<#8wT^T<$Z`;(NI zz~>7Y0ZxJII|%9xLp8#m(g!S1qrVT1U9TTP7#XX7 zj>_wKb1OuQY?88S48ge=a(9)Km8~Auct)Z8a437WzvKtiJAnvZ1=eZDR5U3aLo4NlT-2~r0 zgE4?6>?0~Ovfa-DM321I-yon0|^;c9kP zSN$ZZlw(Ywx6f!%`Up1C+XEpN)U%>Ri{+!sub7aZC}TwQ^VI!nBN9uN_i957)QGKwAOiisI|e7RO+ zgfg;R0&l>3TkVMY@2%yG(gYtBm{|6;SxccoOg=z&4-Tk1&2bZjI`ryBj9~`ueqE+r z=W+zpLmpFZA_3SI;uOC2hzmrRXErVAe5pw7^t~h;0QtY>R#bSASHFPV{u>pN9(Ybm zx53}Y?3i#&qmBi<_BY$-XZJ1PM>F5o{TVYq_Tckpha{kmEsu}#d=KXcNUQ*ISmIB@ z@`-C;7>1KC{kPGSCFB0Tf=z;y>V{}#Sz~nh>mNEx{?~#tSHn32V$u%1W?=vd6G+r; z(-~0R^qL#b))Z}WQ;!16%F(=A9a4tEQS832?xq@tNecJEB5)Gal6#Jc&zppWnhRDx zl&I&hYpiEW4M40v}2I~4Vi8tVeKy(OPU12kB1Y&}WaKdI z!^0O#(8IAW(+UmlxF^W{U;%Gg z?Cev{O>%rG_`WY9XPm#S8SO55P7=vKw@l5Z-YBRtVff3+Gf9rbSj zjo+{;$M-~Qz}Y8Z?MS7ZpNRb#pj_uRu4|saUHgTorU?t99~8~gfo9VF ze2&6vw_&H+A)%FzmQ>B3)tFlc~5$b0Bw?e4M}XqZ4{vy z$_;1Bm;g{;vC^6ULA zO>~yQ?RQsUu)jN#3}@_YQF~X#Fw_(gqm`1^AE5(L->y4pPqtRrmuD%?@3IajBe{?Q zh&>C%qV-upMDy0b@y^0Poxjn4)y8>i_KafZUxGQ zUWuV%VE>>5-Du)kiZt}_B^Kfv4;1q%_4{~F zLk}q_wn9!p#DZ_ze&=;NknvU13QyhDW*u*SoFgp)lLhDb`bCE;jJP?tuP>-#n+*+P z-p=VM1>fV_wWsZ{V)MD*yQXB;_rV)uNBmfa-UnNg?W$AFG%yghIB;07 z+4fY*6VBHw1(i5Sr=9}4!P>Gkcjku_j_95&;lAd8WP^Zi@j8g3d)q}`#uz}35%YJ1!S?NzYuvbIr zrm~ZaLhVI#i^?E5&>n=aAO|TOn0pFbSpmyIug2!}+kX@H2Rghnl(6aeM3v7x;Qfr1 z|Hl4B8|bu0UC`CX0o@X266Gtu`bS`oUmel9tT%wJZH!}RGC?p}nl=5$X+3Htplb+X zxGUhjsg}}B!|)!59GS~Xj@nmHWhnVr>J6_aYsg@5KB?jx>EO7G?Vr`) zyUx#g9-T{U{0VZ@@C(>+TFFJseI^_Fr#@vqtzsJHn$a*5Zm(i0&|a}P8#K(N@vJ{! z@@zVAf~Mw067wF>RP`R|X*yt9X+B{3`ZqcZnLXJKo1L{DFga`9V{~iXWAtd;r(Za?R}3p%i;K$KBc3LCdyWay!G8({-NtUF?E% z>7}^8)A5rS;Ii}_`N`unZS991{bHvN^C0E6xhZ`pZ5P2|Z2b_ibTqT&fo03tA=Sp<3tbQ0C_wvf^O2Ef9DB*-WhmVAmj z&_dDq3?)nC>UhOeY<@`{f<6{*(NCq^cf*U$_ePvyLOR&sW&&+$|M@o9NnmzD?S9~H z{Fq@z&J%Z#Ec%u{iqn!ljM4C1CtDb64%kwc{!7HtBXds&x^Pd8h+3`9G7zBsn29*JZ9e%_ZohJ z-Ye;XPBWZJ-iKK(qDhmSL=z_2A->cv>jh|3yoF*^yrX^plgcWSVY4eKDqbTUD&9dk zs{e#n^j6h7#FvU!s1zl4z7r*PKNBUlyyp%2```48p!Z0}zl8b{@CNFI&CV%>%_jX@ z?^V#7wC7FwD@qP@z!5b+Rq#uUF8D3hM?LIUIq?@oishY;qAcbOPIlO8_%8pz9eclj zp4chKqo(3Gr~nBcQ6;N?(+qOsu!67)of;){j1b24`4#C|U3r=t+5IndAcXto& z79cpmJ!tsdoOABG@7?@=@B3rC@nyU*sMXcGcI{n7)vUSJ++BNdFnx;F&TNdxX(!#i z%5oy1_MU5wM%n`s#)_dWTTiKlO^6WP!&$~Gi~kO(od4e-Rc?2+gJ3i9sO4v_-A)49 zmvSL7srGMfdqKbCleJ50(Ms;>2vN;9u!hCLQWVx*bXTLYC0d1b4TNW0Ml{7QY*AOx zCD&ort4v2 z(^a{m#0{MW0Yz#IOui_oIO&?;CTte8xS&CNaBK0v6n^wOf=1Zl{6rulu<7BWMzz(2DY)aZoMBtnMiut?n7+*K4*O zGNv&UHa4FK=G7)J4l~p}siLkUR!aYXr92peu3!Lj(etZ#o#Nkui_-(IBS1)}`1it| z&)d;6vI@{MXy1ad4W?Gl)8uRX4CD`648jnU>LH$z+*P1I7EwLYf3iIDQC1{6B}ogL z3tJQEJq30J}41>+zD2JxC2@Wb6CwIogiaoP2e`n@a%d$j3Lu;HltkZjU@S z22^tHGu+o-UQYWD?bG$eEdn)TV{hOdIpNphYd)g3UamXsrWm6$0g%&y7!kN&T- zBjR?p_z1NZ#Q%-W)guM`>Hpr^psu{65NJ*RH&)Gouqv0bJLd3lKZI4klnGdzJ1Ia| zHS;f4javyISqe}&FJJPc=4&TPN3^ik&}6GQa{k6?`|YZnNyD;Ld8kPbuFOv0iB(hLe$OJ}>Gq#R5JvDybmSVu zYvipH5W^24Mue%*0cNK^?@(fH+UE@zlYevVP5zHafWu2Hn8ox=3xrbQen&psl7)VIV!e*X|r(UGHG!e zaQ3}=Ir*VLT!(G~#4cI~_Eyp>4u9&PeTi{{2Jg7kVAeX8K;e|^@cANxCy z)^rhmPH1u2+v@r8vzduM>g8RdAGwuf(*^e(|ny45wA&6rWG)l>0eO zMkqPI5hK|5)dz>9`{2b}>oge%jyu6o>IFDLUU9%NEn|<_$sf!b z^jX+5Uk4n|f&3!aw&=r-m=Hdo2>nD$zXP5&ue9nb^{<66cqYG{m)dTx>D)dMS3||Tt*6-j;u%T2UDs;+giS7pZo3l z?DPol_Leq043~cO%4KVpe*RX}jvSd9zslABeecU&>QEHl(w#5S&8lvCejZSVv#{K3G-j>+WRD)YUjqNe zLg!9n!{~Gy)d*ZAkM*^s>Zb}ZoUJQryz1&j#*5sqko6_+!j>IpTi0O7F^YQIfnbD` z=4gwU=8$&Hy))bKX#?`gFq4CH6mAFh`^Xfkb)6m*E1DMtJrfuH^K&mgG8XBN(^N$i+nJR z6pT5Hc84{6B0ylo24qxwFN%Qmr7UW*2ZXJvU(Z^1N(3nR_Z33McvQ^6ic*+sTJ>m% z9;;1h5{6r^$}s_Vhx=dT=vBGfoEuHAcxGlG1J-`eP*; z(rJd}S-m0nwOMMo8H~ryBDYdJepSL~a$aDHaTH)otu{^3nQX1FZ|lq(jXm+*$=hek zg3d=9J*%Ljhd7=q3F8To`X#p_!wW@tA1G+xTHJ5Y$`1GqS~-CKGFl-T@c&X*;!=je zc>SlYwEP7=?nwg!nwJxIlWof%x>B1; zw8$!NvyyINs^!#S|0{(R=aIF^rqD~iB73{Lqkq$t4(tgf{vg)G2e*@wV+gS(f{9h% z7I=Jj^k=x*Tz3$?yGb}K7MY@O>vC5{BpT=Orv#i6v0KmWAro_d?@heyFm-rq(5QM& zE#OWZ>wp)Hv980`?0?Mr+Gj zhd&=pZvesh#ftXN+M14=fAoDkzBBc)T@JkTQC`z){uKbxfUEB~AR2H|{;2t5bnNqo z#?-6NS8yUX6}N=y@z+z41-84#@r^TDcO6Z3Lu#`l+Zs)NFX#v6{?8*CbEa>G!;<@C^D&z%4@ z)D2YAl>I96so3FW4ZyOJlQdXgQr?S$l`Nuv29}Ac6rax(~x&9MviRt*KpcAo#kJvbh=pWkBapIra(lS#boj4lk1m5g&E$eq+{l`2? zq+Edigcq#(@4=dD9g2tyn@#MCX5$Z}@c>cqU>nE;QIMSd+&WlPnqY??>fSmyvcGNs zkFBQXfqw3puC-!~+3t>dZJ93oT&8Vk9Bkh6bUwW9Zd{z1TUZm~z0|D*15cr>Tz^s(p**zpp>;Ai6Rh0FWp z{4nl(7@+u5S(=1qk!L?jV+?(mIi=_Ri{oky$OnT;?=_pE*0dalp7=#+)CwMj-D>az z5!YcGk~%$$&(+87`Sy>K%?7{b=gRCBxg74K(leGnLxxsgz7Dw5nzlU-_h9xuh>{;} z*E)bd+(saZOBh861@kd>a>Kv` zhd4Fw(Yy#lvbNts8adi4^JJb56^q}Xv*Ps}RCjhzB<=S~G~*XogaeXuYC>3g*lO*r z4`R*n7+NwM2{GnmARK5F=5(_TBpgHEM8YvY@;+Mo;YOBp5&vi!w(zwo$k zOs6*sCO+;2jR}V3h;n1Re?~+_HEcF~a_Vo}O)Rww_^}yVITgybiF9Y~hNfK7i50OX z)^!(4#-(Y`Y%Z-K680b?8IawEaNHVL_u*bSmu)Z^b`|qWI|Yf#N-EZSBTb)>lq*Nq z%>F8Gq~nsU*4M*#5{=yHGRfV|aSr(Uw$GNKzG=3wkuVE`j^00Nj2nrfL6vz=HAVm2 zn@*1r6Y$tAQ(zE}HaUTZH}%f>M>PCB7F6BsO-Pv)3@ufhZ4jB|Nm&5k1Y+VAj!w>` zKo-`&DFHUdo zbLTA-s6rJ1KPfP(%fpm|AGR+m^n?AzDFUDM^YBbIQMyCQYQO>wbg@Ay7GE$(o@TpZ zREQRyKE1ysaDsS41Ff;*RR+Hi{&v6xL-#F|yK$B8p`wyZkq5qPf+8nu{#Wf!a7n0X zoyu182%i?AB%(p;8qZ(aWR>^xWVmnhk-mfiCjv~pgc17C301FAg67-RDdCq1out@l ztVrc%3Ul#M7$DOj32lUZ^Qx>W%pT{YsIrWD4b7@U6%lGDGZO1VOzjE2?3_PO#d0?y zeq?ZyGQlU>21)6pt!I&fc2b|kp1E78Do9Tf@+kMf!R6#lj>oFMju(D`6_J}qCNT*} zgMW?{(KV%EY?dug!5bcTnj25~s|Q`H8}&wJ$gcq9=WJ7 zGT#UKi$orBf^p2f*5fv#d&-Sy(;c=xk_uOX#&iGE;Emq*R}Vjvj!w^+xwtpR;1k`W zS2N^rZ=96?GR}Oz$e2xsZUD?NA`agz_zBSD%`z6=bkfXXtqZmuzq=vamt=}fNV9Uc z^LdDbp|93lebbviG`Q&nj}7!6vPDcy<|k~6{(9XedVQGBDu3ZMFA*63}BcjRjdW(EkBZL(Ke%Vy?TRD?A5-c zwkzQzz=(Nrsk@lI_ejS(O^a(ZbR)v)EEAk91@vLUrT^IV#OB02-L{?fY|W52^;Zsa zdtSooeHmMD`+@809vMqVOPuL6#p>Mcpp?}>jEft14i(Ej>>u|_wnBRvLL!!?2{mX5 z14BfU7x^{SVPn22N-BN1h8`G)g@xNQqSMv$uP3d;TJ$Ri=%d2-D!V%@!~i9`{Wftk zUzJ{U2#N756qFn))_r0raa&b|QFjcl`=;yvE&bWdI0OA{D_M1vWHC#M`u7=m+um-1 z8B4dt+56nCb)1smyHe(qi^K#K0kzyI6kTl$7V~0frOU84eJiNr536_=O&(aUFnEhC zXBnL}WBIeTJKNmQe2jL3C9q4045TYVw?8s!FE=QgOk%~^DYfKe>#DWh=;hTNOxi6j zO>Nhmm4DqGi6npNU1tBKzA)Qzwk~bm*FKb;gbQ$^F>`$XN&CwI4?FTA;28cV)M2p1 zu}?Gls>RADm9Na&9k-KMRfWUNfj=0J8JGA!t83Ov^bAS2S9={jR1NJh!slhs6VJ^= zsX6VJ<#A!Jm3X9C)9|l&+c#a;{T!tmYWwv->2utkeX}YyH||sZRlv$-wNy*U&h43( z)r`;;TRy8Nwux4cRQX+#*bzr$?x#&>}@czhMFYNwlzTM(0HcFR$^1Kc+-KB~-IYBg5{f);tg)X;#RBtV% z>!G<=Pr;^w^Cw@m1UH#S9Maj^EE8tNnrs9iLbkpOn_~T@yliuBnHl@|vI?6$(b#V# zBAbbXlSy*VbG@xqOua|O$`g(skwMb?Nno#}Tx%c8Bv2{dp>mZ_!AqeYlY%ex+L{3C zGOf(RVw=fkkfn~;-6}h6x>}1&f1?_~tBDysW|@DYNh6{LUYCkBTO^r$Pw;Bu5T2QZ zs-nxJPQh+UR~^GGo^V=lCsgg=JrO`A(?l;#2!u)MT#)-7BS52qX$%~q}w8H4C2_}NLCG~Hp*&Li4q6}scJh6*vW>gacqv+MX$tdoK zsE<;6TbK-LPvDry^`;iCUlOc+fq&&`;kX#19t@jO>_TM-u|BFy`B`VPZ513O_oAr;2FX`|Nb0vP7BSx?b zmrVd)<5|YyXJSPesBhv>W7VA_3+2d2mxlBiS8WQqW}+X|T=w6@S?TCrz2nnlDkPzd zXEl1oU^6*_5&kip0TfLv)4E$NIw4AX%F(69s;vKd!7Dt!ha$4SS}{~1f8Bzn%;qeD zo#0lg#@J$y%j_dxae?-PQQx1XJF` zLMtfX1Pr>l*?DjeChwjmhTq?EEWg`3t=}Retnb*c1Qc+Qt)AT7L;G}%U60-4{)%f~ zgZ1tV_Uv)`<>!NUF5}%>-u6vrOND>?aoy(xp?zD0e}n6uJmcJ-`8v*LJ%hV#QJkJQ z>a}KmBJ&}a{PHd@&wEdgW4XX6pnI%76Lo+)yr33TrXX$#1$3?!R3N9|8mX@iCJAHe z^|y@zj2x2djgTo7(#r?|cr9k%Ic}d`{lp{`vyTf{hnJV6>$nS)SOO6O&|?dZD}g)C zyd%(i$cHHHSzJ~h@4Lw^w`0fT_({gZp&m9I>jornKT1}3NV0E6leH65%Z1%z=3;G( zwIm^j(YskXaEv*%T{}I`U@XY-)I&BqCp@}y>h?S2+PNcib9t^}Zf9A^Sza zD^q8ZBW8!pL+9`0z@s!YoLY$iv;A%qijgR1pd?zgq;Y^8`}b7K&z@-5;OCAyT9bZK05Sujgh-G{hl zl$4$53_gCJ+Nka7@WJa1)?+Aa%>=sqLwC2aeinY%Gr_ddVAd(5xp6lAj-o0 zI(}M7#UaukG~0(ovVWmu$>^2asD{iJR;eN}T0EOX|pgI`u8-1VUQ;bNY- zLZa6{G6y!6OGl6SO07*;mv_3Z-Sik}1keF|-kdZfxiC{)8x!kaLIf&9YUmR-%3rS! z+#Jkc5fdtXcOlev`O&nYJ&@8=9DY*UGzt1bkE%4cqPI+Bb_4=lHZ}FReAx$=EQ3pS z)JBw*pU2KP)fQUTtTSP>izM3# zNVdci?QFHU7im0|A6Q{UYK=NR8?t1zZQXa$WlnM2F4T<$cY#if=ch^=VQ1CI4D?FnVds2TIn| zBJm$1Di#iK;^n{PX;yT!GX@!f(=F538=I<{XfU!cu>+V`IcX7@g+R{cc8)YUY+Rh+ zg-Ztj07yU#=x@devZe!I2QL7CAjGIbj5)-ZK#U~BxI>J~QyDF@s)e()$-iq;1hVBF z#MncOBg8O5j3UH5wIBvrlYr!L$eB~QECK-Qkxu!gKXZT+k2(=k6C?o(B> zrwX*pDj-8k6C-CDT4oV&Dr@KeaJI64Yx?Q5o*LAEl>OD}(@9zUt=3<~Psi}ok1b@I zF~rzGj1eufjETFeoujc64fr4Y)Tf1=ttdFpH7SiK4=aF`9ROtIX5nOG=U}4;uu=m6 z)Zlt@cElHL<;`<<0>|Cy79hvpLUm5|e|@;fD?!d~34k1Q{0p0R z7M3&o7Do|_M(d!ejB)mm{Q|v4*nm_ntcR%1N8l?-SP76vDtAz#oJLC-5ib+V;28>H z%+!E+&AZKx!5zXEqa7CL^8T2lwa@zn5s+qm#nm+t79A^Ih)V%BcT(~V(&4&0@t-eZ zC^}~9h{o4wC0z^=2>KaIy=o~Fma60_RH7ISQb4p=r%`ke46bWxDM`tAT;XGnF0K_& z9T_77*UrhnJGiJyT8Yn&5vjnwcp%-@cNl7yDq4=JwWsYppE>hB&05H$ z21apKW`T;bK#Sw1Ss9=MGq3!NJ5@fbwY!H|lT#D6TnTLOz ztZhClsDL(ZjK-MXtjeb}bD-{uA_*;Vlh21K!bDJ|q;#TAklvC1+D9lgSm;#BhHY`+ z-daPP5+T>$t+t(mc)}Zn$n2=A>KWTV0WImRUR+|9rL=cqzvea#Op|?VLCvA(7=L*( zOG3lc()UAPQoxU^*tT||w0P~3x27T@=cUfo0o%CoL!s^D8|hO;NTD!<`4sN3$t=_uycuv z0!4*6IQdEcc@=O!vL?1>&gP_S-2eKZ578u-0)-HI(ApP#9F6Z98V6lO-lr>0ZpW=Z znaJ1B&@o6cNKsxwOG=U&!hCQhqYOGwhH*R#Z*-@3zwla`Do#FniE-m1N~rX6O-&N< zl2 zEke!lc^Yn6_01jeZr-BTg^&Pv0yL=SMJ|aV0NL79Vm}VNKo-1UP?E1ylD|cgpJu|R zb{8fmI)64G>ay9=J~)h=+6?q_KTX1o7CK{nEwfxu(f)JH?;f6Ifj|Er eZ#O6BcaF|(j^O)?m7NX1&WcD$DW)Kf_&)&QsW2%3 literal 0 HcmV?d00001 diff --git a/inst/templates/cohortCapr.R b/inst/templates/cohortCapr.R deleted file mode 100644 index daae8dd..0000000 --- a/inst/templates/cohortCapr.R +++ /dev/null @@ -1,255 +0,0 @@ -## ----knitr, include=FALSE----------------------------------------------------- -knitr::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file()) - -knitr::opts_chunk$set(echo = TRUE) - -# knitr::purl( -# input = './inst/templates/cohortCapr_md.Rmd', -# output = './inst/templates/cohortCapr.R' -# ) - - -## ----Get project configurations----------------------------------------------- -connectionConfig <- config::get(config = 'config', file = './inst/config/connection_config.yml') -config_oth <- config::get(config = 'config', file = './inst/config/config.yml') - - -## ----Load libraries----------------------------------------------------------- -library(RSQLite) -library(tibble) -library(DatabaseConnector) -library(CohortGenerator) -library(CirceR) -library(Capr) - - -## ----connect to database, eval=TRUE, include=TRUE----------------------------- -# Use connection details from configuration -connectionDetails <- createConnectionDetails( - dbms = connectionConfig$dbms, - user = connectionConfig$user, - password = connectionConfig$password, - server = connectionConfig$server, - port = connectionConfig$port, - oracleDriver = connectionConfig$oracleDriver, - pathToDriver = connectionConfig$pathToDriver -) - - -## ----concept sets, echo=TRUE-------------------------------------------------- -## Concept sets -source("./R/conceptSets.R") - -# Establish connection -con <- connect(connectionDetails) - -conceptSets$conceptSets <- conceptSets$conceptSets %>% - # Add details for all concepts (excl. descendants) - lapply(FUN = getConceptSetDetails, - con = con, - vocabularyDatabaseSchema = connectionConfig$vocabulary_schema) - -# Disconnect -disconnect(con) - - -## ----count occurences--------------------------------------------------------- -## Count occurrences of each concept in data - -# Establish connection -con <- connect(connectionDetails) - -# Get countOccurrences function -source("./R/countOccurrences.R") - -# Get links between tables and fields as input -source("./R/table_linked_to_concept_field.R") - -additionalVarsCounts <- - countOccurrences( - conceptSets$concepts$additional, - c("condition_occurrence", "procedure_occurrence", "measurement", "observation"), - links, - con, - connectionConfig$cdm_schema, - connectionConfig$vocabulary_schema, - save_path = config_oth$save_path_counts - ) %>% print() - -# Disconnect -disconnect(con) - - -## ----Standard non-standard check---------------------------------------------- -# Connect to DB -con <- connect(connectionDetails) - -# Return table of non-standard concepts -source('./R/isStandard.R') -nonStandard <- isStandard( - db_connection = con, - data_concepts_path = config_oth$concepts_path, - vocab_schema = connectionConfig$vocabulary_schema, - # (optional) Save the results (with standard and non-standard concepts) - save_path = config_oth$save_path_isStandard -) - -# Disconnect -disconnect(con) - -# Print all non-standard concepts -nonStandard - - - -## ----Standard non-standard check concept set---------------------------------- -# connect to DB -con <- connect(connectionDetails) - -# run for labTests conceptSet -labTests <- conceptSets$conceptSets$labTests - -# check standardness across concept set -source('./R/isStandardCS.R') -nonStandardCS <- isStandardCS( - db_connection = con, - conceptSet = conceptSets$conceptSets$labTests, - # (optional) Save the results (with standard and non-standard concepts) - save_path = config_oth$save_path_isStandard -) - -# Disconnect -disconnect(con) - -# print results (non-standard) -nonStandardCS - - -## ----Cohort definition-------------------------------------------------------- -## Cohort definition -# Create cohort definition -ch <- cohort( - entry = entry( - # enter patients who have had cardiac surgery - procedure(conceptSets$conceptSets$cardiacSurgery), - observationWindow = continuousObservation(0, 0), - primaryCriteriaLimit = "All" - ), - attrition = attrition( - withAny( - # include all cardiac complications - atLeast( - x = 1, - # include all cardiac complications represented by condition concepts - query = conditionOccurrence(conceptSets$conceptSets$cardiacComplications) - ), - atLeast( - x = 1, - # include all cardiac complications represented by procedure concepts - query = procedure(conceptSets$conceptSets$cardiacComplications) - ) - ), - withAny( - atLeast( - x = 1, - # include patients who have had laboratory measurements - query = measurement(conceptSets$conceptSets$labTests) - ) - ) - ), - exit = exit( - endStrategy = observationExit() - ) -) - - -## ----json and sql------------------------------------------------------------- -## Cohort json and sql -# Generate json for cohort -chJson <- ch %>% - Capr::toCirce() %>% - jsonlite::toJSON(pretty = TRUE, auto_unbox = TRUE) %>% - as.character() - -# Generate cohort sql query -sql <- CirceR::buildCohortQuery( - expression = CirceR::cohortExpressionFromJson(chJson), - options = CirceR::createGenerateOptions(generateStats = FALSE) -) - - -## ----Save cohort and concept set json----------------------------------------- -write(chJson, paste0(config_oth$save_path_json, "/cohort.json")) -for (cs in names(conceptSets$conceptSets)) { - writeConceptSet( - x = conceptSets$conceptSets[[cs]], - path = paste(config_oth$save_path_json, "/", cs, "_cs.json", sep="") - ) -} - - -## ----Create and generate cohorts---------------------------------------------- -# Establish connection -con <- connect(connectionDetails) - -# Cohorts to create -cohortsToCreate <- tibble::tibble( - cohortId = 9876, - cohortName = "cohort", - sql = sql -) - -# Cohort tables -cohortTableNames <- CohortGenerator::getCohortTableNames(cohortTable = "cohort") -CohortGenerator::createCohortTables( - connectionDetails = connectionDetails, - cohortDatabaseSchema = "cohort", - cohortTableNames = cohortTableNames, -) - -# Generate the cohorts -cohortsGenerated <- CohortGenerator::generateCohortSet( - connectionDetails = connectionDetails, - cdmDatabaseSchema = "cdm", - cohortDatabaseSchema = "cohort", - cohortTableNames = cohortTableNames, - cohortDefinitionSet = cohortsToCreate -) - -# Get cohort counts -cohortCounts <- CohortGenerator::getCohortCounts( - connectionDetails = connectionDetails, - cohortDatabaseSchema = "cohort", - cohortTable = cohortTableNames$cohortTable -) - -# Disconnect -disconnect(con) - - -cohortCounts - - -## ----Number of people in DB--------------------------------------------------- -# Establish connection -con <- connect(connectionDetails) - -# Count unique person_id in the person table -query_person <- - paste0("SELECT COUNT(DISTINCT person_id) AS num_persons FROM ", connectionConfig$cdm_schema, ".person") -result_person <- dbGetQuery(con, query_person)$num_persons - -# Count unique subject_id in the cardiac_arrest table -query_cohort <- - paste0("SELECT COUNT(DISTINCT subject_id) AS num_persons FROM ", connectionConfig$cohort_schema, ".cohort") - -result_cohort <- dbGetQuery(con, query_cohort)$num_persons - -# Print results -cat("Number of persons in dataset: ", result_person, "\n") -cat("Number of persons in cohort: ", result_cohort, "\n") - - -# Disconnect -disconnect(con) - diff --git a/inst/templates/cohortCapr_template.R b/inst/templates/cohortCapr_template.R deleted file mode 100644 index 407f551..0000000 --- a/inst/templates/cohortCapr_template.R +++ /dev/null @@ -1,255 +0,0 @@ -## ----knitr, include=FALSE----------------------------------------------------- -knitr::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file()) - -knitr::opts_chunk$set(echo = TRUE) - -knitr::purl( - input = './inst/templates/cohortCapr_md.Rmd', - output = './inst/templates/cohortCapr_template.R' -) - - -## ----Get project configurations----------------------------------------------- -connectionConfig <- config::get(config = 'config', file = './inst/config/connection_config.yml') -config_oth <- config::get(config = 'config', file = './inst/config/config.yml') - - -## ----Load libraries----------------------------------------------------------- -library(RSQLite) -library(tibble) -library(DatabaseConnector) -library(CohortGenerator) -library(CirceR) -library(Capr) - - -## ----connect to database, eval=TRUE, include=TRUE----------------------------- -# Use connection details from configuration -connectionDetails <- createConnectionDetails( - dbms = connectionConfig$dbms, - user = connectionConfig$user, - password = connectionConfig$password, - server = connectionConfig$server, - port = connectionConfig$port, - oracleDriver = connectionConfig$oracleDriver, - pathToDriver = connectionConfig$pathToDriver -) - - -## ----concept sets, echo=TRUE-------------------------------------------------- -## Concept sets -source("./R/conceptSets.R") - -# Establish connection -con <- connect(connectionDetails) - -conceptSets$conceptSets <- conceptSets$conceptSets %>% - # Add details for all concepts (excl. descendants) - lapply(FUN = getConceptSetDetails, - con = con, - vocabularyDatabaseSchema = connectionConfig$vocabulary_schema) - -# Disconnect -disconnect(con) - - -## ----count occurences--------------------------------------------------------- -## Count occurrences of each concept in data - -# Establish connection -con <- connect(connectionDetails) - -# Get countOccurrences function -source("./R/countOccurrences.R") - -# Get links between tables and fields as input -source("./R/table_linked_to_concept_field.R") - -additionalVarsCounts <- - countOccurrences( - conceptSets$concepts$additional, - c("condition_occurrence", "procedure_occurrence", "measurement", "observation"), - links, - con, - connectionConfig$cdm_schema, - connectionConfig$vocabulary_schema, - save_path = config_oth$save_path_counts - ) %>% print() - -# Disconnect -disconnect(con) - - -## ----Standard non-standard check---------------------------------------------- -# Connect to DB -con <- connect(connectionDetails) - -# Return table of non-standard concepts -source('./R/isStandard.R') -nonStandard <- isStandard( - db_connection = con, - data_concepts_path = config_oth$concepts_path, - vocab_schema = connectionConfig$vocabulary_schema, - # (optional) Save the results (with standard and non-standard concepts) - save_path = config_oth$save_path_isStandard -) - -# Disconnect -disconnect(con) - -# Print all non-standard concepts -nonStandard - - - -## ----Standard non-standard check concept set---------------------------------- -# connect to DB -con <- connect(connectionDetails) - -# run for labTests conceptSet -labTests <- conceptSets$conceptSets$labTests - -# check standardness across concept set -source('./R/isStandardCS.R') -nonStandardCS <- isStandardCS( - db_connection = con, - conceptSet = conceptSets$conceptSets$labTests, - # (optional) Save the results (with standard and non-standard concepts) - save_path = config_oth$save_path_isStandard -) - -# Disconnect -disconnect(con) - -# print results (non-standard) -nonStandardCS - - -## ----Cohort definition-------------------------------------------------------- -## Cohort definition -# Create cohort definition -ch <- cohort( - entry = entry( - # enter patients who have had cardiac surgery - procedure(conceptSets$conceptSets$cardiacSurgery), - observationWindow = continuousObservation(0, 0), - primaryCriteriaLimit = "All" - ), - attrition = attrition( - withAny( - # include all cardiac complications - atLeast( - x = 1, - # include all cardiac complications represented by condition concepts - query = conditionOccurrence(conceptSets$conceptSets$cardiacComplications) - ), - atLeast( - x = 1, - # include all cardiac complications represented by procedure concepts - query = procedure(conceptSets$conceptSets$cardiacComplications) - ) - ), - withAny( - atLeast( - x = 1, - # include patients who have had laboratory measurements - query = measurement(conceptSets$conceptSets$labTests) - ) - ) - ), - exit = exit( - endStrategy = observationExit() - ) -) - - -## ----json and sql------------------------------------------------------------- -## Cohort json and sql -# Generate json for cohort -chJson <- ch %>% - Capr::toCirce() %>% - jsonlite::toJSON(pretty = TRUE, auto_unbox = TRUE) %>% - as.character() - -# Generate cohort sql query -sql <- CirceR::buildCohortQuery( - expression = CirceR::cohortExpressionFromJson(chJson), - options = CirceR::createGenerateOptions(generateStats = FALSE) -) - - -## ----Save cohort and concept set json----------------------------------------- -write(chJson, paste0(config_oth$save_path_json, "/cohort.json")) -for (cs in names(conceptSets$conceptSets)) { - writeConceptSet( - x = conceptSets$conceptSets[[cs]], - path = paste(config_oth$save_path_json, "/", cs, "_cs.json", sep="") - ) -} - - -## ----Create and generate cohorts---------------------------------------------- -# Establish connection -con <- connect(connectionDetails) - -# Cohorts to create -cohortsToCreate <- tibble::tibble( - cohortId = 9876, - cohortName = "cohort", - sql = sql -) - -# Cohort tables -cohortTableNames <- CohortGenerator::getCohortTableNames(cohortTable = "cohort") -CohortGenerator::createCohortTables( - connectionDetails = connectionDetails, - cohortDatabaseSchema = "cohort", - cohortTableNames = cohortTableNames, -) - -# Generate the cohorts -cohortsGenerated <- CohortGenerator::generateCohortSet( - connectionDetails = connectionDetails, - cdmDatabaseSchema = "cdm", - cohortDatabaseSchema = "cohort", - cohortTableNames = cohortTableNames, - cohortDefinitionSet = cohortsToCreate -) - -# Get cohort counts -cohortCounts <- CohortGenerator::getCohortCounts( - connectionDetails = connectionDetails, - cohortDatabaseSchema = "cohort", - cohortTable = cohortTableNames$cohortTable -) - -# Disconnect -disconnect(con) - - -cohortCounts - - -## ----Number of people in DB--------------------------------------------------- -# Establish connection -con <- connect(connectionDetails) - -# Count unique person_id in the person table -query_person <- - paste0("SELECT COUNT(DISTINCT person_id) AS num_persons FROM ", connectionConfig$cdm_schema, ".person") -result_person <- dbGetQuery(con, query_person)$num_persons - -# Count unique subject_id in the cardiac_arrest table -query_cohort <- - paste0("SELECT COUNT(DISTINCT subject_id) AS num_persons FROM ", connectionConfig$cohort_schema, ".cohort") - -result_cohort <- dbGetQuery(con, query_cohort)$num_persons - -# Print results -cat("Number of persons in dataset: ", result_person, "\n") -cat("Number of persons in cohort: ", result_cohort, "\n") - - -# Disconnect -disconnect(con) - From a6e7682658730b55591bad9606064b3012c4702a Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Mon, 9 Sep 2024 09:45:47 +0200 Subject: [PATCH 11/27] update functions with stopifnots --- R/countOccurrences.R | 12 +++++++----- R/isStandard.R | 4 ++++ R/isStandardCS.R | 3 +++ R/isStandardDB.R | 8 +++++++- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/R/countOccurrences.R b/R/countOccurrences.R index 0a6aeea..fb41038 100644 --- a/R/countOccurrences.R +++ b/R/countOccurrences.R @@ -26,11 +26,13 @@ #' ) #' #' @export -countOccurrences <- function(v, tables, links, db_connection, cdm_schema, vocab_schema, save_path = NULL) { - stopifnot(is.vector(v)) - stopifnot(is.character(tables) & is.vector(tables)) - stopifnot(is.list(links)) - stopifnot(is.character(cdm_schema)) +countOccurrences <- function(db_connection, cdm_schema, vocab_schema, v, tables, links, save_path) { + stopifnot("Error: No valid database connection provided." = DatabaseConnector::dbIsValid(db_connection)) + stopifnot("Error: v is not a valid vector. Please provide a vector of concept_ids." = is.vector(v)) + stopifnot("Error: tables is not a valid character vector. Please provide CDM table names." = is.character(tables) & is.vector(tables)) + stopifnot("Error: No links between tables and respective concept_id fields provided." = is.list(links)) + stopifnot("Error: No string provided as cdm_schema" = is.character(cdm_schema)) + stopifnot("Error: No string provided as save_path" = is.character(save_path)) results <- list() diff --git a/R/isStandard.R b/R/isStandard.R index 5d24fa3..9e15e65 100644 --- a/R/isStandard.R +++ b/R/isStandard.R @@ -22,6 +22,10 @@ #' @importFrom DatabaseConnector connect disconnect querySql #' @export isStandard <- function(db_connection, data_concepts_path, vocab_schema, save_path = NULL) { + stopifnot("Error: No or invalid database connection" = DatabaseConnector::dbIsValid(db_connection)) + stopifnot("Error: No string provided as data_concepts_path. Please point to a directory of CSVs with fields 'conceptId' and 'source_code'" = is.character(data_concepts_path)) + stopifnot("Error: No string provided as vocab_schema" = is.character(vocab_schema)) + # Read concept table from SQL database concept_table_query <- SqlRender::render( "SELECT concept_id, CONCEPT_NAME, standard_concept FROM @vocab_schema.concept", diff --git a/R/isStandardCS.R b/R/isStandardCS.R index 01fda15..78a2bf0 100644 --- a/R/isStandardCS.R +++ b/R/isStandardCS.R @@ -15,6 +15,9 @@ #' #' @export isStandardCS <- function(conceptSet, save_path = NULL) { + stopifnot("Error: No valid Capr concept set provided. Ensure the class of your conceptSet is 'ConceptSet' from the Capr package" = !is.null(conceptSet) && class(conceptSet) == "ConceptSet") + stopifnot("error: save_path is not a string" = is.null(save_path) | is.character(save_path)) + # Initialize vectors for non-standard concepts nonStandard <- c() conceptNameNonStandard <- c() diff --git a/R/isStandardDB.R b/R/isStandardDB.R index 78bdcc4..f51b94d 100644 --- a/R/isStandardDB.R +++ b/R/isStandardDB.R @@ -27,7 +27,13 @@ #' @importFrom DatabaseConnector querySql #' @importFrom SqlRender render translate #' @export -isStandardDB <- function(db_connection, cdm_schema, vocab_schema, links, save_path = NULL) { +isStandardDB <- function(db_connection, cdm_schema, vocab_schema, links, save_path) { + stopifnot("Error: No or invalid database connection" = DatabaseConnector::dbIsValid(db_connection)) + stopifnot("Error: No string provided as cdm_schema" = is.character(cdm_schema)) + stopifnot("Error: No string provided as vocab_schema" = is.character(vocab_schema)) + stopifnot("Error: No valid links between tables and concept id fields provided" = is.list(links)) + stopifnot("Error: No string provided as save path" = is.null(save_path) | is.character(save_path)) + # get tables tables <- names(links) From 5de802d4747248177f636f18c5f6a65fd817973c Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Tue, 10 Sep 2024 09:27:35 +0200 Subject: [PATCH 12/27] move sample data --- inst/extdata/json/.gitkeep | 0 .../5.10_cardiac_radiology.csv | 0 .../original_tables/5.11_cardiac_los.csv | 0 .../original_tables/5.12_additional.csv | 0 .../original_tables/5.13_laboratory_tests.csv | 0 .../5.14_cardiac_complications.csv | 0 .../original_tables/5.15_vital_signs.csv | 0 .../original_tables/5.16_hsjd_clinical.csv | 0 .../original_tables/5.17_hsjd_surgery.csv | 0 .../5.18_hsjd_hospitalisation.csv | 0 .../5.19_hsjd_complication.csv | 0 .../original_tables/5.21_healthcare_use.csv} | 0 .../original_tables/5.22_vital_signs.csv | 0 .../5.23_physical_examination_signs.csv | 0 .../5.24_laboratory_test_results_uc2.csv | 0 .../5.25_arterial_blood_gas.csv | 0 .../original_tables/5.26_venous_blood_gas.csv | 0 .../5.28_patient_characteristics.csv | 0 .../5.28_uc3_patient_characteristics.csv | 0 .../5.29_uc3_lab_measurements.csv | 0 .../original_tables/5.30_uc3_treatments.csv | 0 .../original_tables/5.31_uc3_surgery.csv | 0 .../5.3_vis_score_medications.csv | 0 .../5.4_vasopressors_inotropes.csv | 0 .../5.5_immunosuppressants.csv | 0 .../5.6_antibiotic_medication.csv | 0 .../original_tables/5.7_antifungals.csv | 0 .../5.8_antibiotic_resistance.csv | 0 .../original_tables/5.9_cardiac_surgery.csv | 0 .../uc1.csv | 0 .../uc2.csv | 0 .../uc3.csv | 0 .../5.29_lab_measurements_uc3.csv | 37 -------- .../original_tables/5.30_treatments.csv | 85 ------------------- .../5.31_surgery_specific_parameters.csv | 85 ------------------- inst/extdata/standard_concepts/.gitkeep | 0 inst/extdata/standardness/.gitkeep | 0 inst/extdata/vocabularies/.gitkeep | 0 38 files changed, 207 deletions(-) delete mode 100644 inst/extdata/json/.gitkeep rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.10_cardiac_radiology.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.11_cardiac_los.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.12_additional.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.13_laboratory_tests.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.14_cardiac_complications.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.15_vital_signs.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.16_hsjd_clinical.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.17_hsjd_surgery.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.18_hsjd_hospitalisation.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.19_hsjd_complication.csv (100%) rename inst/extdata/{phems_variables_by_uc/original_tables/5.21_healthcare_use_diagnoses_procedures_current_eps.csv => phems_variables/original_tables/5.21_healthcare_use.csv} (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.22_vital_signs.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.23_physical_examination_signs.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.24_laboratory_test_results_uc2.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.25_arterial_blood_gas.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.26_venous_blood_gas.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.28_patient_characteristics.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.28_uc3_patient_characteristics.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.29_uc3_lab_measurements.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.30_uc3_treatments.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.31_uc3_surgery.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.3_vis_score_medications.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.4_vasopressors_inotropes.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.5_immunosuppressants.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.6_antibiotic_medication.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.7_antifungals.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.8_antibiotic_resistance.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/original_tables/5.9_cardiac_surgery.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/uc1.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/uc2.csv (100%) rename inst/extdata/{phems_variables_by_uc => phems_variables}/uc3.csv (100%) delete mode 100644 inst/extdata/phems_variables_by_uc/original_tables/5.29_lab_measurements_uc3.csv delete mode 100644 inst/extdata/phems_variables_by_uc/original_tables/5.30_treatments.csv delete mode 100644 inst/extdata/phems_variables_by_uc/original_tables/5.31_surgery_specific_parameters.csv delete mode 100644 inst/extdata/standard_concepts/.gitkeep delete mode 100644 inst/extdata/standardness/.gitkeep delete mode 100644 inst/extdata/vocabularies/.gitkeep diff --git a/inst/extdata/json/.gitkeep b/inst/extdata/json/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.10_cardiac_radiology.csv b/inst/extdata/phems_variables/original_tables/5.10_cardiac_radiology.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.10_cardiac_radiology.csv rename to inst/extdata/phems_variables/original_tables/5.10_cardiac_radiology.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.11_cardiac_los.csv b/inst/extdata/phems_variables/original_tables/5.11_cardiac_los.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.11_cardiac_los.csv rename to inst/extdata/phems_variables/original_tables/5.11_cardiac_los.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.12_additional.csv b/inst/extdata/phems_variables/original_tables/5.12_additional.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.12_additional.csv rename to inst/extdata/phems_variables/original_tables/5.12_additional.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.13_laboratory_tests.csv b/inst/extdata/phems_variables/original_tables/5.13_laboratory_tests.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.13_laboratory_tests.csv rename to inst/extdata/phems_variables/original_tables/5.13_laboratory_tests.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.14_cardiac_complications.csv b/inst/extdata/phems_variables/original_tables/5.14_cardiac_complications.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.14_cardiac_complications.csv rename to inst/extdata/phems_variables/original_tables/5.14_cardiac_complications.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.15_vital_signs.csv b/inst/extdata/phems_variables/original_tables/5.15_vital_signs.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.15_vital_signs.csv rename to inst/extdata/phems_variables/original_tables/5.15_vital_signs.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.16_hsjd_clinical.csv b/inst/extdata/phems_variables/original_tables/5.16_hsjd_clinical.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.16_hsjd_clinical.csv rename to inst/extdata/phems_variables/original_tables/5.16_hsjd_clinical.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.17_hsjd_surgery.csv b/inst/extdata/phems_variables/original_tables/5.17_hsjd_surgery.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.17_hsjd_surgery.csv rename to inst/extdata/phems_variables/original_tables/5.17_hsjd_surgery.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.18_hsjd_hospitalisation.csv b/inst/extdata/phems_variables/original_tables/5.18_hsjd_hospitalisation.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.18_hsjd_hospitalisation.csv rename to inst/extdata/phems_variables/original_tables/5.18_hsjd_hospitalisation.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.19_hsjd_complication.csv b/inst/extdata/phems_variables/original_tables/5.19_hsjd_complication.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.19_hsjd_complication.csv rename to inst/extdata/phems_variables/original_tables/5.19_hsjd_complication.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.21_healthcare_use_diagnoses_procedures_current_eps.csv b/inst/extdata/phems_variables/original_tables/5.21_healthcare_use.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.21_healthcare_use_diagnoses_procedures_current_eps.csv rename to inst/extdata/phems_variables/original_tables/5.21_healthcare_use.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.22_vital_signs.csv b/inst/extdata/phems_variables/original_tables/5.22_vital_signs.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.22_vital_signs.csv rename to inst/extdata/phems_variables/original_tables/5.22_vital_signs.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.23_physical_examination_signs.csv b/inst/extdata/phems_variables/original_tables/5.23_physical_examination_signs.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.23_physical_examination_signs.csv rename to inst/extdata/phems_variables/original_tables/5.23_physical_examination_signs.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.24_laboratory_test_results_uc2.csv b/inst/extdata/phems_variables/original_tables/5.24_laboratory_test_results_uc2.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.24_laboratory_test_results_uc2.csv rename to inst/extdata/phems_variables/original_tables/5.24_laboratory_test_results_uc2.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.25_arterial_blood_gas.csv b/inst/extdata/phems_variables/original_tables/5.25_arterial_blood_gas.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.25_arterial_blood_gas.csv rename to inst/extdata/phems_variables/original_tables/5.25_arterial_blood_gas.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.26_venous_blood_gas.csv b/inst/extdata/phems_variables/original_tables/5.26_venous_blood_gas.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.26_venous_blood_gas.csv rename to inst/extdata/phems_variables/original_tables/5.26_venous_blood_gas.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.28_patient_characteristics.csv b/inst/extdata/phems_variables/original_tables/5.28_patient_characteristics.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.28_patient_characteristics.csv rename to inst/extdata/phems_variables/original_tables/5.28_patient_characteristics.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.28_uc3_patient_characteristics.csv b/inst/extdata/phems_variables/original_tables/5.28_uc3_patient_characteristics.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.28_uc3_patient_characteristics.csv rename to inst/extdata/phems_variables/original_tables/5.28_uc3_patient_characteristics.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.29_uc3_lab_measurements.csv b/inst/extdata/phems_variables/original_tables/5.29_uc3_lab_measurements.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.29_uc3_lab_measurements.csv rename to inst/extdata/phems_variables/original_tables/5.29_uc3_lab_measurements.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.30_uc3_treatments.csv b/inst/extdata/phems_variables/original_tables/5.30_uc3_treatments.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.30_uc3_treatments.csv rename to inst/extdata/phems_variables/original_tables/5.30_uc3_treatments.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.31_uc3_surgery.csv b/inst/extdata/phems_variables/original_tables/5.31_uc3_surgery.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.31_uc3_surgery.csv rename to inst/extdata/phems_variables/original_tables/5.31_uc3_surgery.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.3_vis_score_medications.csv b/inst/extdata/phems_variables/original_tables/5.3_vis_score_medications.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.3_vis_score_medications.csv rename to inst/extdata/phems_variables/original_tables/5.3_vis_score_medications.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.4_vasopressors_inotropes.csv b/inst/extdata/phems_variables/original_tables/5.4_vasopressors_inotropes.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.4_vasopressors_inotropes.csv rename to inst/extdata/phems_variables/original_tables/5.4_vasopressors_inotropes.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.5_immunosuppressants.csv b/inst/extdata/phems_variables/original_tables/5.5_immunosuppressants.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.5_immunosuppressants.csv rename to inst/extdata/phems_variables/original_tables/5.5_immunosuppressants.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.6_antibiotic_medication.csv b/inst/extdata/phems_variables/original_tables/5.6_antibiotic_medication.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.6_antibiotic_medication.csv rename to inst/extdata/phems_variables/original_tables/5.6_antibiotic_medication.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.7_antifungals.csv b/inst/extdata/phems_variables/original_tables/5.7_antifungals.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.7_antifungals.csv rename to inst/extdata/phems_variables/original_tables/5.7_antifungals.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.8_antibiotic_resistance.csv b/inst/extdata/phems_variables/original_tables/5.8_antibiotic_resistance.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.8_antibiotic_resistance.csv rename to inst/extdata/phems_variables/original_tables/5.8_antibiotic_resistance.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.9_cardiac_surgery.csv b/inst/extdata/phems_variables/original_tables/5.9_cardiac_surgery.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/original_tables/5.9_cardiac_surgery.csv rename to inst/extdata/phems_variables/original_tables/5.9_cardiac_surgery.csv diff --git a/inst/extdata/phems_variables_by_uc/uc1.csv b/inst/extdata/phems_variables/uc1.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/uc1.csv rename to inst/extdata/phems_variables/uc1.csv diff --git a/inst/extdata/phems_variables_by_uc/uc2.csv b/inst/extdata/phems_variables/uc2.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/uc2.csv rename to inst/extdata/phems_variables/uc2.csv diff --git a/inst/extdata/phems_variables_by_uc/uc3.csv b/inst/extdata/phems_variables/uc3.csv similarity index 100% rename from inst/extdata/phems_variables_by_uc/uc3.csv rename to inst/extdata/phems_variables/uc3.csv diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.29_lab_measurements_uc3.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.29_lab_measurements_uc3.csv deleted file mode 100644 index b85eb8d..0000000 --- a/inst/extdata/phems_variables_by_uc/original_tables/5.29_lab_measurements_uc3.csv +++ /dev/null @@ -1,37 +0,0 @@ -sourceCode,concept_id -factor VIII inhibitor titer ,3024942  -factor VIII inhibitor titer ,44777562  -factor VIII activity measurement ,3022520  -factor VIII activity measurement ,3011832  -factor VIII activity measurement ,8985  -factor VIII activity measurement ,9332  -factor VIII activity measurement ,8554  -Von Willebrand factor activity measurement ,43534000  -Von Willebrand factor activity measurement ,8985  -Von Willebrand factor activity measurement ,9332  -Von Willebrand factor activity measurement ,8554  -Von Willebrand factor antigen measurement ,3002124  -Von Willebrand factor antigen measurement ,8985  -Von Willebrand factor antigen measurement ,9332  -Von Willebrand factor antigen measurement ,8554  -Von Willebrand factor propeptide measurement ,3023693  -Von Willebrand factor propeptide measurement ,3042349  -Von Willebrand factor propeptide measurement ,8763  -activated partial thromboplastin time (APTT) ,4175016   -activated partial thromboplastin time (APTT) ,8555  -activated partial thromboplastin time (APTT) ,8523  -Prothrombin time (PT) ,3034426  -Prothrombin time (PT) ,8555  -Prothrombin time (PT) ,8523  -Prothrombin time (PT) ,8554  -platelet count ,4267147 -platelet count ,44777588  -hematocrit ,3009542  -hematocrit ,44777604  -hematocrit ,8554 -fibrinogen ,3016407  -fibrinogen ,8636  -ALT ,3006923  -ALT ,8645  -AST ,3013721  -AST ,8645  diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.30_treatments.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.30_treatments.csv deleted file mode 100644 index bb7b564..0000000 --- a/inst/extdata/phems_variables_by_uc/original_tables/5.30_treatments.csv +++ /dev/null @@ -1,85 +0,0 @@ -sourceCode,concept_id -factor VIII  ,35766745  -factor VIII  ,21154209  -factor VIII  ,35831239  -factor VIII  ,40745282  -factor VIII  ,8985  -factor VIII dose is continuous infusion or bolus dose ,40492862  -factor VIII dose is continuous infusion or bolus dose ,4129275  -factor VIII dose is continuous infusion or bolus dose ,4265597  -desmopressin ,1517070  -desmopressin ,9655  -desmopressin ,8576  -desmopressin ,9662  -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA diff --git a/inst/extdata/phems_variables_by_uc/original_tables/5.31_surgery_specific_parameters.csv b/inst/extdata/phems_variables_by_uc/original_tables/5.31_surgery_specific_parameters.csv deleted file mode 100644 index 8f57188..0000000 --- a/inst/extdata/phems_variables_by_uc/original_tables/5.31_surgery_specific_parameters.csv +++ /dev/null @@ -1,85 +0,0 @@ -sourceCode,concept_id -Medical/ surgical procedure ,45888085  -NaCl administration during surgery ,967823  -NA,8587  -plasma administration during surgery ,4028665  -datetime start anesthesia ,45888867  -blood loss during surgery ,4308716  -blood transfusion during surgery ,37017589  -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA -NA,NA diff --git a/inst/extdata/standard_concepts/.gitkeep b/inst/extdata/standard_concepts/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/inst/extdata/standardness/.gitkeep b/inst/extdata/standardness/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/inst/extdata/vocabularies/.gitkeep b/inst/extdata/vocabularies/.gitkeep deleted file mode 100644 index e69de29..0000000 From cc92edcec6f02ca4cf1716d8dbc46fa171736f6c Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Tue, 10 Sep 2024 09:29:45 +0200 Subject: [PATCH 13/27] update code and RData --- R/conceptSets.R | 1057 ------------------------------------------ R/countOccurrences.R | 13 +- R/data.R | 14 + R/isStandard.R | 13 +- R/isStandardCS.R | 6 +- R/isStandardDB.R | 16 +- R/main.R | 92 ---- 7 files changed, 45 insertions(+), 1166 deletions(-) delete mode 100644 R/conceptSets.R create mode 100644 R/data.R delete mode 100644 R/main.R diff --git a/R/conceptSets.R b/R/conceptSets.R deleted file mode 100644 index 853bd4d..0000000 --- a/R/conceptSets.R +++ /dev/null @@ -1,1057 +0,0 @@ -#' @name conceptSets -#' @title Concept set definitions by use case -#' -#' @description -#' This script defines and expands various concept sets related to medical data. It utilizes the Capr library to fetch all descendant concepts -#' for each defined concept set, ensuring comprehensive coverage of related medical concepts. -#' -#' @details The script initializes by defining multiple concept sets within a list structure. Each concept set contains unique identifiers for medical concepts, -#' which are expanded to include all descendant concepts using the Capr library's functionality. The expanded concept sets are then stored in a new list within -#' the `conceptSets` object. Finally, the script outputs a confirmation message indicating successful sourcing and expansion of concept sets. -#' -#' @note This script requires the Capr library to be installed and loaded for proper execution. -#' @note Duplicated concepts within the same UC have been removed; keeping the first occurrence. -#' @export - -library(Capr) - -## Define list of concepts to use for concept sets -conceptSets <- list( - concepts = list( - ## UC1 - uc1 = c( - # 5.3 VIS score medications - 1337720, # source: dobutamine /// concept: dobutamine - 1337860, # source: dopamine /// concept: dopamine - 1343916, # source: epinephrine /// concept: epinephrine - 1368671, # source: milrinone /// concept: milrinone - 1321341, # source: norepinephrin /// concept: norepinephrine - 1507835, # source: vasopressin /// concept: vasopressin (USP) - - # 5.4 vasopressors and inotropes - 1143374, # source: Ephedrine /// concept: ephedrine - 1183554, # source: Isoproterenol /// concept: isoproterenol - 40173184, # source: Levosimendan /// concept: levosimendan - 1135766, # source: Phenylephrine /// concept: phenylephrine - 19119253, # source: Terlipressin /// concept: terlipressin - - # 5.9 cardiac surgery - 4049734, # source: Application of band to pulmonary artery /// concept: Banding of pulmonary artery - 4019929, # source: Unspecified repair of tetralogy of fallot /// concept: Repair of tetralogy of Fallot - 4019932, # source: Repositioning of transposed great arteries /// concept: Arterial switch operation - 4017751, # source: Unspecified correction of total anomalous pulmonary venous connection /// concept: Repair of total anomalous pulmonary venous connection - 4020376, # source: Primary repair of defect of interatrial septum NEC/repair of defect of interatrial septum using pericardial patch /// concept: Closure of defect of interatrial septum using pericardial patch - 4020506, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Creation of valved conduit between right ventricle of heart and pulmonary artery - 4019950, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Revision of valved cardiac conduit - 4020508, # source: Correction of persistent sinus venosus /// concept: Repair of sinus venosus - 4018441, # source: Correction of partial anomalous pulmonary venous drainage /// concept: Repair of partial anomalous pulmonary venous connection - 4020520, # source: Open aortic valvotomy /// concept: Open aortic valvotomy - 4018747, # source: Repair of subaortic stenosis /// concept: Operations on the left ventricular outflow tract - 4019233, # source: Unspecified creation of shunt to pulmonary artery from subclavian artery using interposition tube pr /// concept: Creation of shunt from subclavian artery to pulmonary artery using interposition tube prosthesis - 4019237, # source: Creation of anastomosis to pulmonary artery from vena cava /// concept: Anastomosis of vena cava to pulmonary artery - 4018926, # source: Other specified : repair of pulmonary artery /// concept: Repair of pulmonary artery - 4021725, # source: Removal of band from pulmonary artery /// concept: Removal of band from pulmonary artery - 4019026, # source: Other specified: plastic repair of aorta /// concept: Plastic repair of aorta - 4020812, # source: Plastic repair of aorta and end to end anastomosis of aorta /// concept: Plastic repair of aorta and end-to-end anastomosis of aorta - 4019028, # source: Release of vascular ring of aorta /// concept: Release of vascular ring of aorta - 44790092, # source: Relief of left ventricular outflow tract obstruction /// concept: Relief of left ventricular outflow tract obstruction - 44789857, # source: Total cavopulmonary connection with extracardiac inferior caval vein topulmonary artery conduit /// concept: Total cavopulmonary connection with extracardiac inferior caval vein to pulmonary artery conduit - 4336751, # source: Unspecified other transplantation of heart/allotransplantation of heart NEC /// concept: Allotransplant of heart - 4049979, # source: Repair of double outlet right ventricle /// concept: Repair of double outlet right ventricle - 4050114, # source: Closure of patent ductus arteriosus NEC /// concept: Closure of ductus arteriosus with clip - 4052536, # source: Extracorporeal membrane oxygenation /// concept: Extracorporeal membrane oxygenation - 44790415, # source: Aortic root pulmonary valve autograft with right vent to pulmonary artery valved conduit/ aortic root pulmonary valve autograft with right vent to pulmonary artery aortoventriculoplasty /// concept: Aortic root replacement using pulmonary valve autograft with right ventricle to pulmonary artery valved conduit and aortoventriculoplasty - 4144921, # source: Implantation of cardiac pacemaker system NEC /// concept: Implantation of cardiac pacemaker - 4137127, # source: Unspecified other transplantation of heart/allotransplantation of heart NEC /// concept: Transplantation of heart - 44793133, # source: Aortopulmonary reconstruction with systemic to pulmonary arterial shunt /// concept: Aortopulmonary reconstruction with systemic to pulmonary arterial shunt - 4293619, # source: Tricuspid valve repair NEC /// concept: Repair of tricuspid valve - 4296790, # source: Transposition of coronary artery NEC /// concept: Transposition of coronary artery - 4139214, # source: Open implantation of ventricular assist device /// concept: Open implantation of cardiac ventricular assist device - 4178479, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Replacement of valved cardiac conduit - 40486525, # source: Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum /// concept: Primary repair of defect of atrioventricular septum - 4187380, # source: Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum /// concept: Repair of ostium primum defect - 4199899, # source: Unspecified repair of defect of interventricular septum /// concept: Closure of ventricular septal defect - 4203153, # source: Replacement of mitral valve NEC /// concept: Replacement of mitral valve - 4217615, # source: Plication of diaphragm /// concept: Plication of diaphragm - 4308136, # source: Repair of tetralogy of fallot using transannular patch /// concept: Complete repair of tetralogy of Fallot with transannular patch - 4312194, # source: Aortic valve repair NEC /// concept: Repair of heart valve - 4339184, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Replacement of pulmonary valve - 4232476, # source: Repair of defect of interventricular septum using prosthetic patch/unspecified repair of defect of interventricular septum /// concept: Repair of ventricular septal defect with prosthesis - - # 5.10 cardiac radiology - 4019824, # source: US transoesophageal echocardiogram (toe) /// concept: Transesophageal echocardiography - 4032404, # source: IR bronchoscopy /// concept: Bronchoscopy - 4065416, # source: Exercise test (non-CPET) /// concept: Exercise tolerance test - 4345925, # source: FL video swallow /// concept: Videofluoroscopy swallow - 4083106, # source: US cranial contents /// concept: US scan of head - 4083108, # source: US neck /// concept: US scan of neck - 4082979, # source: MRI head /// concept: MRI of head - 4093436, # source: US thorax and pleural cavity /// concept: Ultrasonography of thorax - 4125350, # source: CT head /// concept: CT of head - 4125530, # source: US urinary tract /// concept: US urinary tract - 44802640, # source: MRI cardiac complex congenital /// concept: MRI study for cardiac congenital anomaly - 4163872, # source: XR chest /// concept: Plain chest X-ray - 4167029, # source: US doppler groin both /// concept: Ultrasonography of inguinal region - 4167052, # source: US doppler renal both /// concept: Doppler ultrasonography of kidney - 4305221, # source: US abdomen and pelvis/ US abdomen /// concept: US scan of abdomen and pelvis - 4303522, # source: US diaphragmatic region /// concept: US scan of diaphragm - 4306317, # source: CT heart with contrast/ CT cardiac angiogram coronary/ CT cardiac gated with contrast /// concept: CT angiography of coronary artery with contrast - 4169275, # source: XR chest and abdomen /// concept: X-ray of chest and abdomen - 4322380, # source: IR PICC line insertion /// concept: Insertion of peripherally inserted central catheter - 4140473, # source: 24h holter monitor /// concept: Holter extended electrocardiographic recording - 4329508, # source: US thorax and pleural cavity /// concept: Ultrasonography of pleural cavity - 4335392, # source: US doppler lower limb veins both /// concept: Doppler ultrasonography of vein of lower limb - 4203365, # source: Epicardial echocardiogram /// concept: Epicardial echocardiography - 4335825, # source: US transthoracic echocardiogram/ us transthoracic echocardiogram (pre- admission)/ US transthoracic echocardiogram (sedated) /// concept: Transthoracic echocardiography - 40482732, # source: IR tunnelled central venous line insertion /// concept: Insertion of tunneled venous catheter - 40489841, # source: US doppler jugular vein both /// concept: Doppler ultrasonography of jugular vein - 40492338, # source: Cardiopulmonary exercise test (CPET) /// concept: Cardiopulmonary exercise test - 40488431, # source: Pacemaker/ICD interrogation (in clinic)/ pacemaker/ICD interrogation (other) /// concept: Interrogation of cardiac pacemaker - 42873079, # source: IR tunnelled central venous line removal /// concept: Removal of tunneled central venous catheter - 4261497, # source: US abdomen and pelvis/ US abdomen /// concept: Ultrasonography of abdomen - 4205144, # source: EEG routine portable /// concept: Portable electroencephalogram - 4181917, # source: EEG routine /// concept: Electroencephalogram - 4264477, # source: XR abdomen /// concept: Diagnostic radiography of abdomen - 45764527, # source: 24h holter monitor /// concept: Electrocardiographic Holter analyzer - 45765560, # source: Event monitor /// concept: Cardiovascular monitor - 4327032, # source: CT thorax with contrast /// concept: CT of thorax with contrast - 35622931, # source: US doppler /// concept: Doppler ultrasound - 44813863, # source: US vocal cord /// concept: Ultrasonography of vocal cord - 4312208, # source: IR bronchogram /// concept: Contrast bronchogram - 4235141, # source: Pacemaker/ICD device check - remote patient initiated /// concept: Check artificial pacemaker - - # 5.11 cardiac length of stay - 4123933, # source: ICU admission (start datetime and end datetime) /// concept: Admission to pediatric intensive care unit - 8715, # source: Total hospital admission (start datetime and end datetime) /// concept: Hospital admission - 4161811, # source: HDU admission (start datetime and end datetime) /// concept: Admission to high dependency unit - 36675203, # source: Cardiology ward admission (start datetime and end datetime) /// concept: Admission to pediatric cardiology department - - # 5.12 additional variables - 4095105, # source: Base Excess /// concept: Base deficit measurement - 4234469, # source: Diagnoses /// concept: Diagnosis - 40493026, # source: Mechanical ventilation /// concept: Mechanical ventilator - 44803020, # source: Reason for ICU admission: (Main reason for ICU admission is not recovery from surgery or a procedure, Recovery from a bypass cardiac procedure, recovery from a non-bypass cardiac procedure, recovery from non-cardiac procedure) /// concept: Primary reason for admission - 4209008, # source: Pupillary reaction /// concept: Pupillary function - 260134, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Croup - 432571, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Malignant lymphoma - 4029498, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Seizure disorder - 317009, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Asthma - 201957, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Necrotizing enterocolitis in fetus OR newborn - 43530727, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Spontaneous cerebral hemorrhage - 29783, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Severe combined immunodeficiency disease - 321042, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Cardiac arrest - 4165112, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Bronchiolitis - 443727, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Diabetic ketoacidosis - 314383, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Myocarditis - 4245975, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Hepatic failure - 440207, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Hypoplastic left heart syndrome - 42537745, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Bone marrow transplant present - 442588, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Obstructive sleep apnea syndrome - 4213310, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Degenerative disease of the central nervous system - 321319, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Cardiomyopathy - 317510, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Leukemia - 5083, # source: Outpatient appointment type (telephone/ clinic visit etc.) /// concept: Telehealth - 42869590, # source: FiO2 /// concept: Oxygen/Gas total [Pure volume fraction] Inhaled gas - 3027946, # source: PaCO2 /// concept: Carbon dioxide [Partial pressure] in Arterial blood - 3004249, # source: Systolic blood pressure /// concept: Systolic blood pressure - - # 5.13 laboratory tests - 4298431, # source: Immature WBC Count /// concept: White blood cell count - 3007670, # source: Neutrophil Count /// concept: Neutrophil Ab [Units/volume] in Serum - 40762351, # source: Hemoglobin /// concept: Hemoglobin [Moles/volume] in Blood - 37393863, # source: Platelet Count /// concept: Platelet count - 3009542, # source: Hematocrit /// concept: Hematocrit [Volume Fraction] of Blood - 3034426, # source: INR Prothrombin Time /// concept: Prothrombin time (PT) - 3047181, # source: Lactate /// concept: Lactate [Moles/volume] in Blood - 3051825, # source: Creatinine /// concept: Creatinine [Mass/volume] in Blood - 3024561, # source: Albumin /// concept: Albumin [Mass/volume] in Serum or Plasma - 3024641, # source: Blood urea nitrogen /// concept: Urea nitrogen [Moles/volume] in Serum or Plasma - 3013826, # source: Glucose /// concept: Glucose [Moles/volume] in Serum or Plasma - 3006140, # source: Bilirubin /// concept: Bilirubin.total [Moles/volume] in Serum or Plasma - 3019550, # source: Sodium /// concept: Sodium [Moles/volume] in Serum or Plasma - 3005456, # source: Potassium /// concept: Potassium [Moles/volume] in Blood - 3033836, # source: Magnesium /// concept: Magnesium [Moles/volume] in Blood - 3018572, # source: Chloride /// concept: Chloride [Moles/volume] in Blood - 3015377, # source: Calcium /// concept: Calcium [Moles/volume] in Serum or Plasma - 3003458, # source: Phosphate /// concept: Phosphate [Moles/volume] in Serum or Plasma - 3020460, # source: CRP /// concept: C reactive protein [Mass/volume] in Serum or Plasma - 3006923, # source: ALT /// concept: Alanine aminotransferase [Enzymatic activity/volume] in Serum or Plasma - 3013721, # source: AST /// concept: Aspartate aminotransferase [Enzymatic activity/volume] in Serum or Plasma - 37392672, # source: pH (venous) /// concept: Blood venous pH - 37399161, # source: pH (arterial) /// concept: Blood arterial pH - 3021447, # source: pCO2 (venous) /// concept: Carbon dioxide [Partial pressure] in Venous blood - 3024354, # source: pO2 (venous) /// concept: Oxygen [Partial pressure] in Venous blood - 3027801, # source: pO2 (arterial) /// concept: Oxygen [Partial pressure] in Arterial blood - 3027273, # source: Bicarbonate (venous) /// concept: Bicarbonate [Moles/volume] in Venous blood - 3008152, # source: Bicarbonate (arterial) /// concept: Bicarbonate [Moles/volume] in Arterial blood - - # 5.14 cardiac complications - 4051330, # source: LCOS - renal support (CVVH/ PD) /// concept: Continuous venovenous hemofiltration - 4295705, # source: Surgical injury - Reexplore for bleeding /// concept: Exploratory incision - 377091, # source: Neurological injury - seizure /// concept: Seizure - 439847, # source: Neurological injury - intracranial haemmhorage/ intracranial bleeding /// concept: Intracranial hemorrhage - 4308537, # source: Surgical injury - Blood Loss /// concept: Injury to blood vessel during surgery - 443454, # source: Neurological injury - infarction /// concept: Cerebral infarction - 4185565, # source: Low cardiac output state (LCOS) - ECMO /// concept: Low cardiac output syndrome - 42537043, # source: CVL infections /// concept: CLABSI - central line associated bloodstream infection - 4306136, # source: Surgical injury - Chylothorax /// concept: Chylothorax - - # 5.15 vital signs - 3027018, # source: Age-dependent HR /// concept: Heart rate - 3024171, # source: Age-dependent RR /// concept: Respiratory rate - 3012888, # source: DBP (Dyastolic Blood Pressure) /// concept: Diastolic blood pressure - 4020553, # source: SpO2 /// concept: Oxygen saturation measurement - - # 5.16 Clinical variables suggested by HSJD - 3025315, # source: Weight /// concept: Body weight - 3036277, # source: Height /// concept: Body height - 4201235, # source: Body Surface Area (BSA) - Combination of weight and height /// concept: body surface area - 4275564, # source: Cardiac surgeries (Interventions) /// concept: Operation on heart - - # 5.17 surgery-related variables suggested by HSJD - 40490494, # source: STAT/EACTS score of surgery /// concept: Society of Thoracic Surgeons risk calculator - 4301351, # source: Surgery start datetime, end datetime /// concept: Surgical procedure - 4336464, # source: Cardiac bypass start datetime, end datetime /// concept: Coronary artery bypass graft - 4201547, # source: Cross-clamping start datetime, end datetime /// concept: Placement of arterial cross clamp - 37152781, # source: Deep hypothermic circulatory arrest start datetime, end datetime /// concept: Hypothermic circulatory arrest - 4272324, # source: Antegrade Cerebral Perfusion start datetime, end datetime /// concept: Cardiopulmonary bypass operation - 4150627, # source: Extubation event /// concept: Removal of endotracheal tube - - # 5.18 hospitalisation-related variables suggested by HSJD - 42539650, # source: Vasoactive infusion start datetime, end datetime /// concept: Administration of intravenous vasoactive drug - 4179206, # source: Postop central venous catheter in/start datetime, out/end datetime /// concept: Central venous catheter - 37158404, # source: Invasive Mechanical Ventilation LOS /// concept: Invasive mechanical ventilation - 4177224, # source: Non-Invasive Mechanical Ventilation LOS /// concept: Non-invasive ventilation - - # 5.19 complications-related variables suggested by HSJD - 4202832, # source: intubation /// concept: Intubation - 4044892, # source: Sternum reopening (procedure undertaken) /// concept: Procedure on sternum - 4046868, # source: Vocal Cord Dysfunction /// concept: Vocal cord dysfunction - 4275136, # source: Diaphragmatic Paralysis /// concept: Paralysis of diaphragm - 253796, # source: Pneumothorax /// concept: Pneumothorax - 44783799, # source: Tracheostomy /// concept: Exteriorization of trachea - 44784217, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Cardiac arrhythmia - 315643, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Tachyarrhythmia - 4228448, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Bradyarrhythmia - 4068155, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Atrial arrhythmia - 4185572, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Ventricular arrhythmia - 46234437, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: ivabradine - 1309944, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: amiodarone - 1354860, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: flecainide - 4353741, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Cardioversion - 4117045, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Atrial overdrive pacing - 4049398, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Temporary cardiac pacemaker procedure - 4051940, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Permanent cardiac pacemaker procedure - 609312 # source: Listed for heart transplantation /// concept: Awaiting transplantation of heart - ), - - ## UC2 - uc2 = c( - # 5.4 vasopressors and inotropes - 1337720, # source: Dobutamine /// concept: dobutamine - 1337860, # source: Dopamine /// concept: dopamine - 1143374, # source: Ephedrine /// concept: ephedrine - 1343916, # source: Epinephrine /// concept: epinephrine - 1183554, # source: Isoproterenol /// concept: isoproterenol - 40173184, # source: Levosimendan /// concept: levosimendan - 1368671, # source: Milrinone /// concept: milrinone - 1321341, # source: Norepinephrine /// concept: norepinephrine - 1135766, # source: Phenylephrine /// concept: phenylephrine - 19119253, # source: Terlipressin /// concept: terlipressin - 1507835, # source: Vasopressin /// concept: vasopressin (USP) - - # 5.5 immunosuppressants - 4273629, # source: Chemotherapy /// concept: Chemotherapy - 1518254, # source: Dexamethasone /// concept: dexamethasone - 975125, # source: Hydrocortisone /// concept: hydrocortisone - 1506270, # source: Methylprednisolone /// concept: methylprednisolone - 21603754, # source: Monoclonal Antibodies /// concept: Monoclonal antibodies - 1550557, # source: Prednisolone /// concept: prednisolone - - # 5.6 antibiotic medications - 1713332, # source: Amoxicillin /// concept: amoxicillin - 1759842, # source: Amoxicillin clavulanate /// concept: clavulanate - 1717327, # source: Ampicillin /// concept: ampicillin - 1734104, # source: Azithromycin /// concept: azithromycin - 1836430, # source: Trimethoprim-Sulfamethoxazole /// concept: sulfamethoxazole - 1705674, # source: Trimethoprim-Sulfamethoxazole /// concept: trimethoprim - 1836948, # source: Tetracycline /// concept: tetracycline - 902722, # source: Tobramycin /// concept: tobramycin - 1707687, # source: Vancomycin /// concept: vancomycin - 19010400, # source: Fusidic acid /// concept: fusidate - 45892419, # source: Gentamicin /// concept: gentamicin - 45892599, # source: Ceftolozane-Tazovactam /// concept: ceftolozane - 46221507, # source: Ceftazidime-Avibactam /// concept: avibactam - 1736887, # source: Linezolid /// concept: linezolid - 1748975, # source: Cefepime /// concept: cefepime - 1750500, # source: Clarithromycin /// concept: clarithromycin - 1769535, # source: Cefadroxil /// concept: cefadroxil - 1771162, # source: Cefazolin /// concept: cefazolin - 1774470, # source: Cefotaxime /// concept: cefotaxime - 1776684, # source: Ceftazidime /// concept: ceftazidime - 1778162, # source: Cefuroxime /// concept: cefuroxime - 1786617, # source: Daptomycin /// concept: daptomycin - 1797513, # source: Ciprofloxacin /// concept: ciprofloxacin - 997881, # source: Clindamycin /// concept: clindamycin - 901845, # source: Colistin /// concept: colistin - 1709170, # source: Meropenem /// concept: meropenem - 1717963, # source: Ertapenem /// concept: ertapenem - 1741122, # source: Piperacillin-Tazobactam /// concept: tazobactam - 1746114, # source: Piperacillin-Tazobactam /// concept: piperacillin - 1746940, # source: Erythromycin /// concept: erythromycin - 951511, # source: Mupirocin /// concept: mupirocin - 956653, # source: Fosfomycin /// concept: fosfomycin - 1778262, # source: Imipenem /// concept: imipenem - 19078399, # source: Teicoplanin /// concept: teicoplanin - 1790868, # source: Amikacin /// concept: amikacin - 920293, # source: Nitrofurantoin /// concept: nitrofurantoin - 1721543, # source: Norfloxacin /// concept: norfloxacin - 1724703, # source: Oxacillin /// concept: oxacillin - 1728416, # source: Penicillin /// concept: penicillin G - 1742253, # source: Levofloxacin /// concept: levofloxacin - 1763204, # source: Rifampicin /// concept: rifampin - - # 5.7 antifungal medications - 1714277, # source: Voriconazole /// concept: voriconazole - 35606695, # source: Isovuconazole /// concept: isavuconazole - 19018013, # source: Micafungin /// concept: micafungin - 19026450, # source: Andiulafungin /// concept: anidulafungin - 1754994, # source: Fluconazole /// concept: fluconazole - - # 5.8 antibiotic resistance - 4019195, # source: MRSA /// concept: Methicillin resistant Staphylococcus aureus - 4257547, # source: ESBL /// concept: Extended spectrum beta-lactamase producing bacteria - 37017134, # source: Drug-resistant /// concept: Multidrug-resistant bacteria - - # 5.21 healthcare use - 37174269, # source: Diagnosis of acute infection having the potential for progression to sepsis1+2 /// concept: At increased risk of sepsis - 4032243, # source: Dialysis /// concept: Dialysis procedure - 197320, # source: acute kidney injury /// concept: Acute kidney injury - 4074689, # source: "Chest opening, chest drainage" /// concept: Open drainage of pleural cavity - 4084670, # source: Surgical admission (non-urgent) /// concept: Non-urgent surgical admission - 4070667, # source: Urinary catheter /// concept: Urinary catheter - 44790095, # source: Invasive ventilation /// concept: Invasive ventilation - 4052536, # source: ECMO /// concept: Extracorporeal membrane oxygenation - 4051330, # source: Dialysis /// concept: Continuous venovenous hemofiltration - 44790567, # source: Origin (external) /// concept: Patient transfer from hospital to hospital - 133327, # source: viremia /// concept: Viremia - 4097216, # source: Endotracheal tube /// concept: Endotracheal tube - 4085730, # source: Antibiotics /// concept: Antibiotic therapy - 4123946, # source: Surgical admission (urgent) /// concept: Admission to surgical department - 4208341, # source: organ transplant /// concept: Solid organ transplant - 4193843, # source: Oxygenation index /// concept: Oxygenation index measurement - 4235043, # source: Ventricular assist device (VAD) /// concept: Ventricular assist device - 443392, # source: Cancer /// concept: Malignant neoplastic disease - 4181511, # source: Antineoplastics /// concept: Administration of antineoplastic agent - 4294886, # source: Origin (internal) /// concept: "Patient transfer, in-hospital" - 4301351, # source: Surgery previous to prediction time point /// concept: Surgical procedure - 4140762, # source: Antivirals /// concept: Antiviral therapy - 4177205, # source: Peripheral IV cannulas /// concept: Cannulation - 4177224, # source: Non-invasive ventilation /// concept: Non-invasive ventilation - 45758028, # source: Arterial blood pressure catheter /// concept: Arterial blood pressure catheter - 44803020, # source: Reason for admission /// concept: Primary reason for admission - 4179206, # source: Central venous catheter /// concept: Central venous catheter - 132736, # source: bacteremia /// concept: Bacteremia - 44783799, # source: Tracheostomy /// concept: Exteriorization of trachea - 45768671, # source: asplenia /// concept: Asplenia - 4324124, # source: Peritoneal dialysis /// concept: Peritoneal dialysis - 435785, # source: meningitis /// concept: Meningitis - 201820, # source: Diagnosis of chronic condition /// concept: Diabetes mellitus - 42538045, # source: Nasogastric/orogastric tube /// concept: Nasogastric/orogastric tube stylet - 37206601, # source: ECMO type /// concept: Venoarterial extracorporeal membrane oxygenation - 37206603, # source: ECMO type /// concept: Venovenous extracorporeal membrane oxygenation - 4314777, # source: Immunosuppressors /// concept: Immunosuppressive therapy - 604243, # source: neutropenia /// concept: Acquired neutropenia - 444187, # source: injury with open wound /// concept: Open wound - 22281, # source: sickle cell disease /// concept: Sickle cell-hemoglobin SS disease - 435613, # source: cellulitis /// concept: Cellulitis - 4134120, # source: cerebral palsy /// concept: Cerebral palsy - 444202, # source: Abcess /// concept: Abscess - 312723, # source: Diagnosis of chronic condition /// concept: Congenital heart disease - 255573, # source: Diagnosis of chronic condition /// concept: Chronic obstructive lung disease - 255848, # source: pneumonia /// concept: Pneumonia - 433740, # source: immunodeficiency /// concept: Immunodeficiency disorder - 4080011, # source: Diagnosis of organ system dysfunction /// concept: Organ dysfunction syndrome - 434821, # source: Diagnosis of SIRS /// concept: Systemic inflammatory response syndrome - 81539, # source: mitochondrial disease /// concept: Mitochondrial cytopathy - 4103588, # source: tuberculosis /// concept: Acute tuberculosis - 443783, # source: Diagnosis of chronic condition /// concept: Chronic disease - 4140977, # source: Diagnosis of condition producing immunodeficiency /// concept: Secondary immune deficiency disorder - 201606, # source: Crohn's disease /// concept: Crohn's disease - 4243475, # source: hepatitis /// concept: Acute hepatitis - 4300243, # source: surgical site inflammation /// concept: Postoperative complication - 439125, # source: Down's syndrome /// concept: Complete trisomy 21 syndrome - 321042, # source: cardiac arrest /// concept: Cardiac arrest - 4331815, # source: UTI /// concept: Acute urinary tract infection - 195212, # source: Cushing's disease /// concept: Hypercortisolism - 196152, # source: peritonitis /// concept: Peritonitis - 314383, # source: miocarditis /// concept: Myocarditis - 195314, # source: nephrotic syndrome /// concept: Nephrotic syndrome - 441589, # source: endocarditis /// concept: Endocarditis - 4271450, # source: Diagnosis of acute infection having the potential for progression to sepsis1+2 /// concept: Acute infectious disease - 81893, # source: ulcerative colitis /// concept: Ulcerative colitis - 80809, # source: rheumatoid arthritis /// concept: Rheumatoid arthritis - 4322814, # source: Meningo-encephalitis /// concept: Meningoencephalitis - 36716945, # source: renal insufficiency /// concept: Renal insufficiency - 440448, # source: appendicitis /// concept: Appendicitis - 433968, # source: candidiasis /// concept: Candidiasis - 44807226, # source: necrotizing enterocolitis /// concept: Necrotising enterocolitis - 132797, # source: Previous diagnosis of sepsis measure /// concept: Sepsis - 21602722, # source: Corticoids /// concept: CORTICOSTEROIDS FOR SYSTEMIC USE - 42869590, # source: FiO2 /// concept: Oxygen/Gas total [Pure volume fraction] Inhaled gas - 42527086, # source: Mean Airway Pressure (MAP) /// concept: Mean airway pressure - 1340204, # source: Previous diagnosis of sepsis measure /// concept: History of event - - # 5.22 vital signs UC2 - 4096101, # source: SpO2 /// concept: Measurement of oxygen saturation at periphery - 3025315, # source: Weight /// concept: Body weight - 3020891, # source: Body temperature /// concept: Body temperature - 3012888, # source: DBP (Diastolic blood pressure) /// concept: Diastolic blood pressure - 3004249, # source: SBP (Systolic Blood Pressure) /// concept: Systolic blood pressure - 3014315, # source: Urine output /// concept: Urine output - 3024171, # source: RR /// concept: Respiratory rate - 3027018, # source: HR /// concept: Heart rate - - # 5.23 physical examination signs - 4224504, # source: Central pulse /// concept: Pulse - 4314539, # source: Peripheral pulse (pressure) /// concept: Arterial pulse pressure - 21490963, # source: Pupillary reactivity (right) /// concept: Right pupil Pupillary response - 3032652, # source: GCS /// concept: Glasgow coma scale - 3045676, # source: Capillary refill time /// concept: Capillary refill [Time] - 21491763, # source: Pupillary reactivity (left) /// concept: Left pupil Pupillary response - 3021415, # source: Pupillary size (left) /// concept: Left pupil Diameter Auto - 3027214, # source: Pupillary size (right) /// concept: Right pupil Diameter Auto - - # 5.24 lab tests UC2 - 37393605, # source: D-dimer /// concept: D-dimer level - 4017361, # source: Blood urea nitrogen /// concept: Blood urea nitrogen measurement - 4036356, # source: Bacterial pathogen detection /// concept: Detection of bacteria - 44789220, # source: Ionized calcium /// concept: Ionised calcium measurement - 4094436, # source: Fibrinogen /// concept: Fibrinogen measurement - 4118986, # source: Direct bilirubin /// concept: Bilirubin measurement - 4196268, # source: PCR panel /// concept: Polymerase chain reaction observation - 440029, # source: Viral pathogen detection /// concept: Viral disease - 4212899, # source: Leukocytes /// concept: Total white blood count - 4175016, # source: Thromboplastin time /// concept: Partial thromboplastin time, activated - 42536081, # source: MR-proADM /// concept: Adrenal medulla hormone - 4299649, # source: Quantification of colonies in culture /// concept: Quantitative microbial culture and measurement - 44806682, # source: Antibiotic resistance /// concept: Infection resistant to multiple antibiotics - 432545, # source: Name of bacterial pathogen detected /// concept: Bacterial infectious disease - 3013826, # source: Glucose /// concept: Glucose [Moles/volume] in Serum or Plasma - 3046279, # source: PCT /// concept: Procalcitonin [Mass/volume] in Serum or Plasma - 3033291, # source: Interleukin-6 /// concept: Interleukin 6 [Mass/volume] in Body fluid - - # 5.25 arterial blood gas - 3003396, # source: Base excess /// concept: Base excess in Arterial blood by calculation - 3019977, # source: pH /// concept: pH of Arterial blood - 3008152, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Arterial blood - 3027946, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Arterial blood - 3027801, # source: PaO2 /// concept: Oxygen [Partial pressure] in Arterial blood - - # 5.26 venous blood gas - 3009343, # source: pH /// concept: pH of Capillary blood - 3027273, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Venous blood - 3003129, # source: Base excess /// concept: Base excess in Capillary blood by calculation - 3002032, # source: Base excess /// concept: Base excess in Venous blood by calculation - 3015235, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Capillary blood - 3023024, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Capillary blood - 3021447, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Venous blood - 3028626, # source: PaO2 /// concept: Oxygen [Partial pressure] in Capillary blood - 3024354, # source: PaO2 /// concept: Oxygen [Partial pressure] in Venous blood - 3012544 # source: pH /// concept: pH of Venous blood - ), - - ## UC3 - uc3 = c( - # 5.28 Patient characteristics - 434007, # source: hemophilia A diagnosis /// concept: hereditary factor VIII deficiency disease - 4094223, # source: hemophilia A subtype/ severity /// concept: mild hereditary factor VIII deficiency disease - 4140661, # source: hemophilia A subtype/ severity /// concept: moderate hereditary factor VIII deficiency disease - 4056830, # source: hemophilia A subtype/ severity /// concept: severe hereditary factor VIII deficiency disease - 3003694, # source: blood group /// concept: ABO and Rh group [Type] in Blood - 37393608, # source: factor VIII inhibitor status /// concept: factor VIII inhibitor activity - 4126681, # source: factor VIII inhibitor status /// concept: detected - 9190, # source: factor VIII inhibitor status /// concept: not detected - - # 5.29 Lab Measurements - 3024942, # source: factor VIII inhibitor titer /// concept: coagulation factor VIII inhibitor [Units/volume] in platelet poor plasma by coagulation assay - 3022520, # source: factor VIII activity measurement /// concept: coagulation factor VIII activated [Units/volume] in platelet poor plasma by coagulation assay - 3011832, # source: factor VIII activity measurement /// concept: coagulation factor VIII activity [Units/volume] in platelet poor plasma by Chromogenic assay - 43534000, # source: Von Willebrand factor activity measurement /// concept: von Willebrand factor (vWf) activity [Units/volume] in platelet poor plasma by Immunoassay - 3002124, # source: Von Willebrand factor antigen measurement /// concept: von Willebrand factor (vWf) Ag [Units/volume] in platelet poor plasma by Immunoassay - 3023693, # source: Von Willebrand factor propeptide measurement /// concept: von Willebrand factor (vWf) multimers in platelet poor plasma by Immunoblot - 3042349, # source: Von Willebrand factor propeptide measurement /// concept: von Willebrand factor (vWf) cleaving protease inhibitor [Units/volume] in platelet poor plasma - 4175016, # source: activated partial thromboplastin time (APTT) /// concept: partial thromboplastin time, activated - 3034426, # source: Prothrombin time (PT) /// concept: prothrombin time (PT) - 4267147, # source: platelet count /// concept: platelet count - 3009542, # source: hematocrit /// concept: Hematocrit [Volume Fraction] of Blood - 3016407, # source: fibrinogen /// concept: fibrinogen [mass/volume] in platelet poor plasma by coagulation assay - 3006923, # source: ALT /// concept: alanine aminotransferase [enzymatic activity/volume] in serum or plasma - 3013721, # source: AST /// concept: aspartate aminotransferase [enzymatic activity/volume] in serum or plasma - - # 5.30 Treatments - 1352213, # source: factor VIII /// concept: factor VIII (umbrella term) - 793042, # source: factor VIII /// concept: emicizumab (umbrella term) - 40492862, # source: factor VIII dose is continuous infusion or bolus dose /// concept: mode of drug administration - 4129275, # source: factor VIII dose is continuous infusion or bolus dose /// concept: continuous infusion - 4265597, # source: factor VIII dose is continuous infusion or bolus dose /// concept: by bolus infusions - 1517070, # source: desmopressin /// concept: desmopressin - - # 5.31 Surgery-specific parameters - 4172515, # source: Medical/ surgical procedure /// concept: Therapeutic procedure - 967823, # source: NaCl administration during surgery /// concept: sodium chloride - 4028665, # source: plasma administration during surgery /// concept: plasma transfusion - 4160439, # source: datetime start anesthesia /// concept: Administration of anesthesia - 4308716, # source: blood loss during surgery /// concept: intraoperative hemorrhage - 37017589 # source: blood transfusion during surgery /// concept: Bleeding during surgery requiring transfusion - ), - - # 5.3 VIS score medications - visScoreMedications = c( - 1337720, # source: dobutamine /// concept: dobutamine - 1337860, # source: dopamine /// concept: dopamine - 1343916, # source: epinephrine /// concept: epinephrine - 1368671, # source: milrinone /// concept: milrinone - 1321341, # source: norepinephrin /// concept: norepinephrine - 1507835 # source: vasopressin /// concept: vasopressin (USP) - ), - - # 5.4 vasopressors and inotropes - vasopressors_inotropes = c( - 1337720, # source: Dobutamine /// concept: dobutamine - 1337860, # source: Dopamine /// concept: dopamine - 1143374, # source: Ephedrine /// concept: ephedrine - 1343916, # source: Epinephrine /// concept: epinephrine - 1183554, # source: Isoproterenol /// concept: isoproterenol - 40173184, # source: Levosimendan /// concept: levosimendan - 1368671, # source: Milrinone /// concept: milrinone - 1321341, # source: Norepinephrine /// concept: norepinephrine - 1135766, # source: Phenylephrine /// concept: phenylephrine - 19119253, # source: Terlipressin /// concept: terlipressin - 1507835 # source: Vasopressin /// concept: vasopressin (USP) - ), - - # 5.5 immunosuppressants - immunosuppressants = c( - 4273629, # source: Chemotherapy /// concept: Chemotherapy - 1518254, # source: Dexamethasone /// concept: dexamethasone - 975125, # source: Hydrocortisone /// concept: hydrocortisone - 1506270, # source: Methylprednisolone /// concept: methylprednisolone - 21603754, # source: Monoclonal Antibodies /// concept: Monoclonal antibodies - 1550557 # source: Prednisolone /// concept: prednisolone - ), - - # 5.6 antibiotic medications - antibiotics = c( - 1713332, # source: Amoxicillin /// concept: amoxicillin - 1759842, # source: Amoxicillin clavulanate /// concept: clavulanate - 1717327, # source: Ampicillin /// concept: ampicillin - 1734104, # source: Azithromycin /// concept: azithromycin - 1836430, # source: Trimethoprim-Sulfamethoxazole /// concept: sulfamethoxazole - 1705674, # source: Trimethoprim-Sulfamethoxazole /// concept: trimethoprim - 1836948, # source: Tetracycline /// concept: tetracycline - 902722, # source: Tobramycin /// concept: tobramycin - 1707687, # source: Vancomycin /// concept: vancomycin - 19010400, # source: Fusidic acid /// concept: fusidate - 45892419, # source: Gentamicin /// concept: gentamicin - 45892599, # source: Ceftolozane-Tazovactam /// concept: ceftolozane - 46221507, # source: Ceftazidime-Avibactam /// concept: avibactam - 1736887, # source: Linezolid /// concept: linezolid - 1748975, # source: Cefepime /// concept: cefepime - 1750500, # source: Clarithromycin /// concept: clarithromycin - 1769535, # source: Cefadroxil /// concept: cefadroxil - 1771162, # source: Cefazolin /// concept: cefazolin - 1774470, # source: Cefotaxime /// concept: cefotaxime - 1776684, # source: Ceftazidime /// concept: ceftazidime - 1778162, # source: Cefuroxime /// concept: cefuroxime - 1786617, # source: Daptomycin /// concept: daptomycin - 1797513, # source: Ciprofloxacin /// concept: ciprofloxacin - 997881, # source: Clindamycin /// concept: clindamycin - 901845, # source: Colistin /// concept: colistin - 1709170, # source: Meropenem /// concept: meropenem - 1717963, # source: Ertapenem /// concept: ertapenem - 1518254, # source: Dexamethasone /// concept: dexamethasone - 1741122, # source: Piperacillin-Tazobactam /// concept: tazobactam - 1746114, # source: Piperacillin-Tazobactam /// concept: piperacillin - 1746940, # source: Erythromycin /// concept: erythromycin - 951511, # source: Mupirocin /// concept: mupirocin - 956653, # source: Fosfomycin /// concept: fosfomycin - 975125, # source: Hydrocortisone /// concept: hydrocortisone - 1778262, # source: Imipenem /// concept: imipenem - 19078399, # source: Teicoplanin /// concept: teicoplanin - 1790868, # source: Amikacin /// concept: amikacin - 1506270, # source: Methylprednisolone /// concept: methylprednisolone - 920293, # source: Nitrofurantoin /// concept: nitrofurantoin - 1721543, # source: Norfloxacin /// concept: norfloxacin - 1724703, # source: Oxacillin /// concept: oxacillin - 1728416, # source: Penicillin /// concept: penicillin G - 1742253, # source: Levofloxacin /// concept: levofloxacin - 1550557, # source: Prednisolone /// concept: prednisolone - 1763204 # source: Rifampicin /// concept: rifampin - ), - - # 5.7 antifungal medications - antifungals = c( - 1714277, # source: Voriconazole /// concept: voriconazole - 35606695, # source: Isovuconazole /// concept: isavuconazole - 19018013, # source: Micafungin /// concept: micafungin - 19026450, # source: Andiulafungin /// concept: anidulafungin - 1754994 # source: Fluconazole /// concept: fluconazole - ), - - # 5.8 antibiotic resistance - antibioticResistance = c( - 4019195, # source: MRSA /// concept: Methicillin resistant Staphylococcus aureus - 4257547, # source: ESBL /// concept: Extended spectrum beta-lactamase producing bacteria - 37017134, # source: Drug-resistant /// concept: Multidrug-resistant bacteria - 1707687, # source: Vancomycin-resistant /// concept: vancomycin - 997881, # source: Clindamycin-resistant /// concept: clindamycin - 1746940 # source: Erythromycin-resistant /// concept: erythromycin - ), - - # 5.9 cardiac surgery - cardiacSurgery = c( - 4049734, # source: Application of band to pulmonary artery /// concept: Banding of pulmonary artery - 4019929, # source: Unspecified repair of tetralogy of fallot /// concept: Repair of tetralogy of Fallot - 4019932, # source: Repositioning of transposed great arteries /// concept: Arterial switch operation - 4017751, # source: Unspecified correction of total anomalous pulmonary venous connection /// concept: Repair of total anomalous pulmonary venous connection - 4020376, # source: Primary repair of defect of interatrial septum NEC/repair of defect of interatrial septum using pericardial patch /// concept: Closure of defect of interatrial septum using pericardial patch - 4020506, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Creation of valved conduit between right ventricle of heart and pulmonary artery - 4019950, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Revision of valved cardiac conduit - 4020508, # source: Correction of persistent sinus venosus /// concept: Repair of sinus venosus - 4018441, # source: Correction of partial anomalous pulmonary venous drainage /// concept: Repair of partial anomalous pulmonary venous connection - 4020520, # source: Open aortic valvotomy /// concept: Open aortic valvotomy - 4018747, # source: Repair of subaortic stenosis /// concept: Operations on the left ventricular outflow tract - 4019233, # source: Unspecified creation of shunt to pulmonary artery from subclavian artery using interposition tube pr /// concept: Creation of shunt from subclavian artery to pulmonary artery using interposition tube prosthesis - 4019237, # source: Creation of anastomosis to pulmonary artery from vena cava /// concept: Anastomosis of vena cava to pulmonary artery - 4018926, # source: Other specified : repair of pulmonary artery /// concept: Repair of pulmonary artery - 4021725, # source: Removal of band from pulmonary artery /// concept: Removal of band from pulmonary artery - 4019026, # source: Other specified: plastic repair of aorta /// concept: Plastic repair of aorta - 4020812, # source: Plastic repair of aorta and end to end anastomosis of aorta /// concept: Plastic repair of aorta and end-to-end anastomosis of aorta - 4019028, # source: Release of vascular ring of aorta /// concept: Release of vascular ring of aorta - 44790092, # source: Relief of left ventricular outflow tract obstruction /// concept: Relief of left ventricular outflow tract obstruction - 44789857, # source: Total cavopulmonary connection with extracardiac inferior caval vein topulmonary artery conduit /// concept: Total cavopulmonary connection with extracardiac inferior caval vein to pulmonary artery conduit - 4336751, # source: Unspecified other transplantation of heart/allotransplantation of heart NEC /// concept: Allotransplant of heart - 4049979, # source: Repair of double outlet right ventricle /// concept: Repair of double outlet right ventricle - 4050114, # source: Closure of patent ductus arteriosus NEC /// concept: Closure of ductus arteriosus with clip - 4052536, # source: Extracorporeal membrane oxygenation /// concept: Extracorporeal membrane oxygenation - 44790415, # source: Aortic root pulmonary valve autograft with right vent to pulmonary artery valved conduit/ aortic root pulmonary valve autograft with right vent to pulmonary artery aortoventriculoplasty /// concept: Aortic root replacement using pulmonary valve autograft with right ventricle to pulmonary artery valved conduit and aortoventriculoplasty - 4144921, # source: Implantation of cardiac pacemaker system NEC /// concept: Implantation of cardiac pacemaker - 4137127, # source: Unspecified other transplantation of heart/allotransplantation of heart NEC /// concept: Transplantation of heart - 44793133, # source: Aortopulmonary reconstruction with systemic to pulmonary arterial shunt /// concept: Aortopulmonary reconstruction with systemic to pulmonary arterial shunt - 4293619, # source: Tricuspid valve repair NEC /// concept: Repair of tricuspid valve - 4296790, # source: Transposition of coronary artery NEC /// concept: Transposition of coronary artery - 4139214, # source: Open implantation of ventricular assist device /// concept: Open implantation of cardiac ventricular assist device - 4178479, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Replacement of valved cardiac conduit - 40486525, # source: Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum /// concept: Primary repair of defect of atrioventricular septum - 4187380, # source: Primary repair of defect of atrioventricular septum NEC/repair of persistent ostium primum/repair of persistent ostium primum /// concept: Repair of ostium primum defect - 4199899, # source: Unspecified repair of defect of interventricular septum /// concept: Closure of ventricular septal defect - 4203153, # source: Replacement of mitral valve NEC /// concept: Replacement of mitral valve - 4217615, # source: Plication of diaphragm /// concept: Plication of diaphragm - 4308136, # source: Repair of tetralogy of fallot using transannular patch /// concept: Complete repair of tetralogy of Fallot with transannular patch - 4312194, # source: Aortic valve repair NEC /// concept: Repair of heart valve - 4339184, # source: Revision of cardiac conduit nec/creation of valved conduit between Right ventricle of heart and Pulmonary artery/replacement of valved cardiac conduit/ replacement of pulmonary valve nec /// concept: Replacement of pulmonary valve - 4232476 # source: Repair of defect of interventricular septum using prosthetic patch/unspecified repair of defect of interventricular septum /// concept: Repair of ventricular septal defect with prosthesis - ), - - # 5.10 cardiac radiology - cardiacRadiology = c( - 4019824, # source: US transoesophageal echocardiogram (toe) /// concept: Transesophageal echocardiography - 4032404, # source: IR bronchoscopy /// concept: Bronchoscopy - 4065416, # source: Exercise test (non-CPET) /// concept: Exercise tolerance test - 4345925, # source: FL video swallow /// concept: Videofluoroscopy swallow - 4083106, # source: US cranial contents /// concept: US scan of head - 4083108, # source: US neck /// concept: US scan of neck - 4082979, # source: MRI head /// concept: MRI of head - 4093436, # source: US thorax and pleural cavity /// concept: Ultrasonography of thorax - 4125350, # source: CT head /// concept: CT of head - 4125530, # source: US urinary tract /// concept: US urinary tract - 44802640, # source: MRI cardiac complex congenital /// concept: MRI study for cardiac congenital anomaly - 4163872, # source: XR chest /// concept: Plain chest X-ray - 4167029, # source: US doppler groin both /// concept: Ultrasonography of inguinal region - 4167052, # source: US doppler renal both /// concept: Doppler ultrasonography of kidney - 4305221, # source: US abdomen and pelvis/ US abdomen /// concept: US scan of abdomen and pelvis - 4303522, # source: US diaphragmatic region /// concept: US scan of diaphragm - 4306317, # source: CT heart with contrast/ CT cardiac angiogram coronary/ CT cardiac gated with contrast /// concept: CT angiography of coronary artery with contrast - 4169275, # source: XR chest and abdomen /// concept: X-ray of chest and abdomen - 4322380, # source: IR PICC line insertion /// concept: Insertion of peripherally inserted central catheter - 4140473, # source: 24h holter monitor /// concept: Holter extended electrocardiographic recording - 4329508, # source: US thorax and pleural cavity /// concept: Ultrasonography of pleural cavity - 4335392, # source: US doppler lower limb veins both /// concept: Doppler ultrasonography of vein of lower limb - 4203365, # source: Epicardial echocardiogram /// concept: Epicardial echocardiography - 4335825, # source: US transthoracic echocardiogram/ us transthoracic echocardiogram (pre- admission)/ US transthoracic echocardiogram (sedated) /// concept: Transthoracic echocardiography - 40482732, # source: IR tunnelled central venous line insertion /// concept: Insertion of tunneled venous catheter - 40489841, # source: US doppler jugular vein both /// concept: Doppler ultrasonography of jugular vein - 40492338, # source: Cardiopulmonary exercise test (CPET) /// concept: Cardiopulmonary exercise test - 40488431, # source: Pacemaker/ICD interrogation (in clinic)/ pacemaker/ICD interrogation (other) /// concept: Interrogation of cardiac pacemaker - 42873079, # source: IR tunnelled central venous line removal /// concept: Removal of tunneled central venous catheter - 4261497, # source: US abdomen and pelvis/ US abdomen /// concept: Ultrasonography of abdomen - 4205144, # source: EEG routine portable /// concept: Portable electroencephalogram - 4181917, # source: EEG routine /// concept: Electroencephalogram - 4264477, # source: XR abdomen /// concept: Diagnostic radiography of abdomen - 45764527, # source: 24h holter monitor /// concept: Electrocardiographic Holter analyzer - 45765560, # source: Event monitor /// concept: Cardiovascular monitor - 4327032, # source: CT thorax with contrast /// concept: CT of thorax with contrast - 35622931, # source: US doppler /// concept: Doppler ultrasound - 44813863, # source: US vocal cord /// concept: Ultrasonography of vocal cord - 4312208, # source: IR bronchogram /// concept: Contrast bronchogram - 4235141 # source: Pacemaker/ICD device check - remote patient initiated /// concept: Check artificial pacemaker - ), - - # 5.11 cardiac length of stay - cardiac_LOS = c( - 4123933, # source: ICU admission (start datetime and end datetime) /// concept: Admission to pediatric intensive care unit - 8715, # source: Total hospital admission (start datetime and end datetime) /// concept: Hospital admission - 4161811, # source: HDU admission (start datetime and end datetime) /// concept: Admission to high dependency unit - 36675203 # source: Cardiology ward admission (start datetime and end datetime) /// concept: Admission to pediatric cardiology department - ), - - # 5.12 additional variables - additional = c( - 4095105, # source: Base Excess /// concept: Base deficit measurement - 4123933, # source: Elective ICU admission /// concept: Admission to pediatric intensive care unit - 4234469, # source: Diagnoses /// concept: Diagnosis - 40493026, # source: Mechanical ventilation /// concept: Mechanical ventilator - 44803020, # source: Reason for ICU admission: (Main reason for ICU admission is not recovery from surgery or a procedure, Recovery from a bypass cardiac procedure, recovery from a non-bypass cardiac procedure, recovery from non-cardiac procedure) /// concept: Primary reason for admission - 4209008, # source: Pupillary reaction /// concept: Pupillary function - 260134, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Croup - 432571, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Malignant lymphoma - 4029498, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Seizure disorder - 317009, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Asthma - 201957, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Necrotizing enterocolitis in fetus OR newborn - 43530727, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Spontaneous cerebral hemorrhage - 29783, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Severe combined immunodeficiency disease - 321042, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Cardiac arrest - 4165112, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Bronchiolitis - 443727, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Diabetic ketoacidosis - 314383, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Myocarditis - 4245975, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Hepatic failure - 440207, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Hypoplastic left heart syndrome - 42537745, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Bone marrow transplant present - 442588, # source: Low Risk Diagnoses: None, asthma, bronchiolitis, croup, obstructive sleep apnea, diabetic ketoacidosis, seizure disorder /// concept: Obstructive sleep apnea syndrome - 4213310, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Degenerative disease of the central nervous system - 321319, # source: High Risk Diagnoses: (None, spontaneous cerbral hemorrhage, cardiomyopathy or myocarditis, hypoplastic left heart syndrome, neurodegenerative disorder, necrotizing enterocolitis) /// concept: Cardiomyopathy - 317510, # source: Very High Risk Diagnoses: None, cardiac arrest preceding ICU admission, severe combined immune deficiency, leukemia or lymphoma after first induction, bone marrow transplant recipient, liver failure /// concept: Leukemia - 5083, # source: Outpatient appointment type (telephone/ clinic visit etc.) /// concept: Telehealth - 42869590, # source: FiO2 /// concept: Oxygen/Gas total [Pure volume fraction] Inhaled gas - 3027946, # source: PaCO2 /// concept: Carbon dioxide [Partial pressure] in Arterial blood - 3004249 # source: Systolic blood pressure /// concept: Systolic blood pressure - ), - - # 5.13 laboratory tests - labTests = c( - 4298431, # source: Immature WBC Count /// concept: White blood cell count - 3007670, # source: Neutrophil Count /// concept: Neutrophil Ab [Units/volume] in Serum - 40762351, # source: Hemoglobin /// concept: Hemoglobin [Moles/volume] in Blood - 37393863, # source: Platelet Count /// concept: Platelet count - 3009542, # source: Hematocrit /// concept: Hematocrit [Volume Fraction] of Blood - 3034426, # source: INR Prothrombin Time /// concept: Prothrombin time (PT) - 3047181, # source: Lactate /// concept: Lactate [Moles/volume] in Blood - 3051825, # source: Creatinine /// concept: Creatinine [Mass/volume] in Blood - 3024561, # source: Albumin /// concept: Albumin [Mass/volume] in Serum or Plasma - 3024641, # source: Blood urea nitrogen /// concept: Urea nitrogen [Moles/volume] in Serum or Plasma - 3013826, # source: Glucose /// concept: Glucose [Moles/volume] in Serum or Plasma - 3006140, # source: Bilirubin /// concept: Bilirubin.total [Moles/volume] in Serum or Plasma - 3019550, # source: Sodium /// concept: Sodium [Moles/volume] in Serum or Plasma - 3005456, # source: Potassium /// concept: Potassium [Moles/volume] in Blood - 3033836, # source: Magnesium /// concept: Magnesium [Moles/volume] in Blood - 3018572, # source: Chloride /// concept: Chloride [Moles/volume] in Blood - 3015377, # source: Calcium /// concept: Calcium [Moles/volume] in Serum or Plasma - 3003458, # source: Phosphate /// concept: Phosphate [Moles/volume] in Serum or Plasma - 3020460, # source: CRP /// concept: C reactive protein [Mass/volume] in Serum or Plasma - 3006923, # source: ALT /// concept: Alanine aminotransferase [Enzymatic activity/volume] in Serum or Plasma - 3013721, # source: AST /// concept: Aspartate aminotransferase [Enzymatic activity/volume] in Serum or Plasma - 37392672, # source: pH (venous) /// concept: Blood venous pH - 37399161, # source: pH (arterial) /// concept: Blood arterial pH - 3021447, # source: pCO2 (venous) /// concept: Carbon dioxide [Partial pressure] in Venous blood - 3027946, # source: pCO2 (arterial) /// concept: Carbon dioxide [Partial pressure] in Arterial blood - 3024354, # source: pO2 (venous) /// concept: Oxygen [Partial pressure] in Venous blood - 3027801, # source: pO2 (arterial) /// concept: Oxygen [Partial pressure] in Arterial blood - 3027273, # source: Bicarbonate (venous) /// concept: Bicarbonate [Moles/volume] in Venous blood - 3008152 # source: Bicarbonate (arterial) /// concept: Bicarbonate [Moles/volume] in Arterial blood - ), - - # 5.14 cardiac complications - cardiacComplications = c( - 4051330, # source: LCOS - renal support (CVVH/ PD) /// concept: Continuous venovenous hemofiltration - 4123933, # source: ICU ward stay /// concept: Admission to pediatric intensive care unit - 4295705, # source: Surgical injury - Reexplore for bleeding /// concept: Exploratory incision - 377091, # source: Neurological injury - seizure /// concept: Seizure - 439847, # source: Neurological injury - intracranial haemmhorage/ intracranial bleeding /// concept: Intracranial hemorrhage - 4308537, # source: Surgical injury - Blood Loss /// concept: Injury to blood vessel during surgery - 321042, # source: LCOS - Cardiac arrest /// concept: Cardiac arrest - 443454, # source: Neurological injury - infarction /// concept: Cerebral infarction - 4185565, # source: Low cardiac output state (LCOS) - ECMO /// concept: Low cardiac output syndrome - 42537043, # source: CVL infections /// concept: CLABSI - central line associated bloodstream infection - 4306136 # source: Surgical injury - Chylothorax /// concept: Chylothorax - ), - - # 5.15 Vital signs - vitalSigns = c( - 3027018, # source: Age-dependent HR /// concept: Heart rate - 3024171, # source: Age-dependent RR /// concept: Respiratory rate - 3004249, # source: SBP (Systolic Blood Pressure) /// concept: Systolic blood pressure - 3012888, # source: DBP (Dyastolic Blood Pressure) /// concept: Diastolic blood pressure - 4020553 # source: SpO2 /// concept: Oxygen saturation measurement - ), - - # 5.16 HSJD clinical - HSJDClinical = c( - 3025315, # source: Weight /// concept: Body weight - 3036277, # source: Height /// concept: Body height - 4201235, # source: Body Surface Area (BSA) - Combination of weight and height /// concept: body surface area - 4275564 # source: Cardiac surgeries (Interventions) /// concept: Operation on heart - ), - - # 5.17 HSJD Surgery - HSJDSurgery = c( - 40490494, # source: STAT/EACTS score of surgery /// concept: Society of Thoracic Surgeons risk calculator - 4301351, # source: Surgery start datetime, end datetime /// concept: Surgical procedure - 4336464, # source: Cardiac bypass start datetime, end datetime /// concept: Coronary artery bypass graft - 4201547, # source: Cross-clamping start datetime, end datetime /// concept: Placement of arterial cross clamp - 37152781, # source: Deep hypothermic circulatory arrest start datetime, end datetime /// concept: Hypothermic circulatory arrest - 4272324, # source: Antegrade Cerebral Perfusion start datetime, end datetime /// concept: Cardiopulmonary bypass operation - 4150627 # source: Extubation event /// concept: Removal of endotracheal tube - ), - - # 5.18 HSJD Hospitalisations - HSJDHospitalisation = c( - 44803020, # source: Admission reason /// concept: Primary reason for admission - 42539650, # source: Vasoactive infusion start datetime, end datetime /// concept: Administration of intravenous vasoactive drug - 4179206, # source: Postop central venous catheter in/start datetime, out/end datetime /// concept: Central venous catheter - 37158404, # source: Invasive Mechanical Ventilation LOS /// concept: Invasive mechanical ventilation - 4177224 # source: Non-Invasive Mechanical Ventilation LOS /// concept: Non-invasive ventilation - ), - - # 5.19 HSJD Complications - HSJDcomplications = c( - 4202832, # source: intubation /// concept: Intubation - 4275564, # source: Cardiac surgeries (interventions) /// concept: Operation on heart - 4044892, # source: Sternum reopening (procedure undertaken) /// concept: Procedure on sternum - 4046868, # source: Vocal Cord Dysfunction /// concept: Vocal cord dysfunction - 4275136, # source: Diaphragmatic Paralysis /// concept: Paralysis of diaphragm - 253796, # source: Pneumothorax /// concept: Pneumothorax - 44783799, # source: Tracheostomy /// concept: Exteriorization of trachea - 44784217, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Cardiac arrhythmia - 315643, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Tachyarrhythmia - 4228448, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Bradyarrhythmia - 4068155, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Atrial arrhythmia - 4185572, # source: Arrhythmia diagnosis (tachyarrhythmia, bradyarrhythmia, atrial, ventricular etc.) /// concept: Ventricular arrhythmia - 46234437, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: ivabradine - 1309944, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: amiodarone - 1354860, # source: Drugs administered; Arrhythmia therapy (drugs): IV anthyarritmics (ivabradine, amiodarone, flecainide) /// concept: flecainide - 4353741, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Cardioversion - 4117045, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Atrial overdrive pacing - 4049398, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Temporary cardiac pacemaker procedure - 4051940, # source: Arrhythmia therapy (procedures): Cardioversion, Rapid atrial pacing, temporary pacing, permanent pacing /// concept: Permanent cardiac pacemaker procedure - 609312 # source: Listed for heart transplantation /// concept: Awaiting transplantation of heart - ), - - # 5.21 healthcare use - healthcareUse = c( - 37174269, # source: Diagnosis of acute infection having the potential for progression to sepsis1+2 /// concept: At increased risk of sepsis - 4032243, # source: Dialysis /// concept: Dialysis procedure - 197320, # source: acute kidney injury /// concept: Acute kidney injury - 4074689, # source: "Chest opening, chest drainage" /// concept: Open drainage of pleural cavity - 4084670, # source: Surgical admission (non-urgent) /// concept: Non-urgent surgical admission - 4070667, # source: Urinary catheter /// concept: Urinary catheter - 44790095, # source: Invasive ventilation /// concept: Invasive ventilation - 4052536, # source: ECMO /// concept: Extracorporeal membrane oxygenation - 4051330, # source: Dialysis /// concept: Continuous venovenous hemofiltration - 44790567, # source: Origin (external) /// concept: Patient transfer from hospital to hospital - 133327, # source: viremia /// concept: Viremia - 4097216, # source: Endotracheal tube /// concept: Endotracheal tube - 4085730, # source: Antibiotics /// concept: Antibiotic therapy - 4123946, # source: Surgical admission (urgent) /// concept: Admission to surgical department - 4208341, # source: organ transplant /// concept: Solid organ transplant - 4193843, # source: Oxygenation index /// concept: Oxygenation index measurement - 4235043, # source: Ventricular assist device (VAD) /// concept: Ventricular assist device - 443392, # source: Cancer /// concept: Malignant neoplastic disease - 4181511, # source: Antineoplastics /// concept: Administration of antineoplastic agent - 4294886, # source: Origin (internal) /// concept: "Patient transfer, in-hospital" - 4301351, # source: Surgery previous to prediction time point /// concept: Surgical procedure - 4140762, # source: Antivirals /// concept: Antiviral therapy - 4177205, # source: Peripheral IV cannulas /// concept: Cannulation - 4177224, # source: Non-invasive ventilation /// concept: Non-invasive ventilation - 45758028, # source: Arterial blood pressure catheter /// concept: Arterial blood pressure catheter - 44803020, # source: Reason for admission /// concept: Primary reason for admission - 4179206, # source: Central venous catheter /// concept: Central venous catheter - 132736, # source: bacteremia /// concept: Bacteremia - 44783799, # source: Tracheostomy /// concept: Exteriorization of trachea - 45768671, # source: asplenia /// concept: Asplenia - 4324124, # source: Peritoneal dialysis /// concept: Peritoneal dialysis - 435785, # source: meningitis /// concept: Meningitis - 201820, # source: Diagnosis of chronic condition /// concept: Diabetes mellitus - 42538045, # source: Nasogastric/orogastric tube /// concept: Nasogastric/orogastric tube stylet - 37206601, # source: ECMO type /// concept: Venoarterial extracorporeal membrane oxygenation - 37206603, # source: ECMO type /// concept: Venovenous extracorporeal membrane oxygenation - 4314777, # source: Immunosuppressors /// concept: Immunosuppressive therapy - 604243, # source: neutropenia /// concept: Acquired neutropenia - 444187, # source: injury with open wound /// concept: Open wound - 22281, # source: sickle cell disease /// concept: Sickle cell-hemoglobin SS disease - 435613, # source: cellulitis /// concept: Cellulitis - 4134120, # source: cerebral palsy /// concept: Cerebral palsy - 444202, # source: Abcess /// concept: Abscess - 312723, # source: Diagnosis of chronic condition /// concept: Congenital heart disease - 255573, # source: Diagnosis of chronic condition /// concept: Chronic obstructive lung disease - 255848, # source: pneumonia /// concept: Pneumonia - 433740, # source: immunodeficiency /// concept: Immunodeficiency disorder - 4080011, # source: Diagnosis of organ system dysfunction /// concept: Organ dysfunction syndrome - 434821, # source: Diagnosis of SIRS /// concept: Systemic inflammatory response syndrome - 81539, # source: mitochondrial disease /// concept: Mitochondrial cytopathy - 4103588, # source: tuberculosis /// concept: Acute tuberculosis - 443783, # source: Diagnosis of chronic condition /// concept: Chronic disease - 4140977, # source: Diagnosis of condition producing immunodeficiency /// concept: Secondary immune deficiency disorder - 201606, # source: Crohn's disease /// concept: Crohn's disease - 4243475, # source: hepatitis /// concept: Acute hepatitis - 4300243, # source: surgical site inflammation /// concept: Postoperative complication - 439125, # source: Down's syndrome /// concept: Complete trisomy 21 syndrome - 321042, # source: cardiac arrest /// concept: Cardiac arrest - 4331815, # source: UTI /// concept: Acute urinary tract infection - 195212, # source: Cushing's disease /// concept: Hypercortisolism - 196152, # source: peritonitis /// concept: Peritonitis - 314383, # source: miocarditis /// concept: Myocarditis - 195314, # source: nephrotic syndrome /// concept: Nephrotic syndrome - 441589, # source: endocarditis /// concept: Endocarditis - 4271450, # source: Diagnosis of acute infection having the potential for progression to sepsis1+2 /// concept: Acute infectious disease - 81893, # source: ulcerative colitis /// concept: Ulcerative colitis - 80809, # source: rheumatoid arthritis /// concept: Rheumatoid arthritis - 4322814, # source: Meningo-encephalitis /// concept: Meningoencephalitis - 36716945, # source: renal insufficiency /// concept: Renal insufficiency - 440448, # source: appendicitis /// concept: Appendicitis - 433968, # source: candidiasis /// concept: Candidiasis - 44807226, # source: necrotizing enterocolitis /// concept: Necrotising enterocolitis - 132797, # source: Previous diagnosis of sepsis measure /// concept: Sepsis - 21602722, # source: Corticoids /// concept: CORTICOSTEROIDS FOR SYSTEMIC USE - 42869590, # source: FiO2 /// concept: Oxygen/Gas total [Pure volume fraction] Inhaled gas - 42527086, # source: Mean Airway Pressure (MAP) /// concept: Mean airway pressure - 1340204 # source: Previous diagnosis of sepsis measure /// concept: History of event - ), - - # 5.22 vital signs UC2 - vitalSignsUC2 = c( - 4096101, # source: SpO2 /// concept: Measurement of oxygen saturation at periphery - 3025315, # source: Weight /// concept: Body weight - 3020891, # source: Body temperature /// concept: Body temperature - 3012888, # source: DBP (Diastolic blood pressure) /// concept: Diastolic blood pressure - 3004249, # source: SBP (Systolic Blood Pressure) /// concept: Systolic blood pressure - 3014315, # source: Urine output /// concept: Urine output - 3024171, # source: RR /// concept: Respiratory rate - 3027018 # source: HR /// concept: Heart rate - ), - - # 5.23 physical examination signs - physicalExaminationSigns = c( - 4224504, # source: Central pulse /// concept: Pulse - 4314539, # source: Peripheral pulse (pressure) /// concept: Arterial pulse pressure - 21490963, # source: Pupillary reactivity (right) /// concept: Right pupil Pupillary response - 3032652, # source: GCS /// concept: Glasgow coma scale - 3045676, # source: Capillary refill time /// concept: Capillary refill [Time] - 21491763, # source: Pupillary reactivity (left) /// concept: Left pupil Pupillary response - 3021415, # source: Pupillary size (left) /// concept: Left pupil Diameter Auto - 3027214 # source: Pupillary size (right) /// concept: Right pupil Diameter Auto - ), - - # 5.24 lab tests UC2 - labTestsUC2 = c( - 37393605, # source: D-dimer /// concept: D-dimer level - 4017361, # source: Blood urea nitrogen /// concept: Blood urea nitrogen measurement - 4036356, # source: Bacterial pathogen detection /// concept: Detection of bacteria - 44789220, # source: Ionized calcium /// concept: Ionised calcium measurement - 4094436, # source: Fibrinogen /// concept: Fibrinogen measurement - 4118986, # source: Direct bilirubin /// concept: Bilirubin measurement - 4196268, # source: PCR panel /// concept: Polymerase chain reaction observation - 440029, # source: Viral pathogen detection /// concept: Viral disease - 4212899, # source: Leukocytes /// concept: Total white blood count - 4175016, # source: Thromboplastin time /// concept: Partial thromboplastin time, activated - 42536081, # source: MR-proADM /// concept: Adrenal medulla hormone - 4299649, # source: Quantification of colonies in culture /// concept: Quantitative microbial culture and measurement - 44806682, # source: Antibiotic resistance /// concept: Infection resistant to multiple antibiotics - 432545, # source: Name of bacterial pathogen detected /// concept: Bacterial infectious disease - 3013826, # source: Glucose /// concept: Glucose [Moles/volume] in Serum or Plasma - 3046279, # source: PCT /// concept: Procalcitonin [Mass/volume] in Serum or Plasma - 3033291 # source: Interleukin-6 /// concept: Interleukin 6 [Mass/volume] in Body fluid - ), - - # 5.25 arterial blood gas - arterialBloodGas = c( - 3003396, # source: Base excess /// concept: Base excess in Arterial blood by calculation - 3019977, # source: pH /// concept: pH of Arterial blood - 3008152, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Arterial blood - 3027946, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Arterial blood - 3027801 # source: PaO2 /// concept: Oxygen [Partial pressure] in Arterial blood - ), - - # 5.26 venous blood gas - venousBloodGas = c( - 3009343, # source: pH /// concept: pH of Capillary blood - 3027273, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Venous blood - 3003129, # source: Base excess /// concept: Base excess in Capillary blood by calculation - 3002032, # source: Base excess /// concept: Base excess in Venous blood by calculation - 3015235, # source: HCO3 /// concept: Bicarbonate [Moles/volume] in Capillary blood - 3023024, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Capillary blood - 3021447, # source: pCO2 /// concept: Carbon dioxide [Partial pressure] in Venous blood - 3028626, # source: PaO2 /// concept: Oxygen [Partial pressure] in Capillary blood - 3024354, # source: PaO2 /// concept: Oxygen [Partial pressure] in Venous blood - 3012544 # source: pH /// concept: pH of Venous blood - ), - - # 5.28 Patient characteristics - UC3PateintCharacteristics = c( - 434007, # source: hemophilia A diagnosis /// concept: hereditary factor VIII deficiency disease - 4094223, # source: hemophilia A subtype/ severity /// concept: mild hereditary factor VIII deficiency disease - 4140661, # source: hemophilia A subtype/ severity /// concept: moderate hereditary factor VIII deficiency disease - 4056830, # source: hemophilia A subtype/ severity /// concept: severe hereditary factor VIII deficiency disease - 3003694, # source: blood group /// concept: ABO and Rh group [Type] in Blood - 37393608, # source: factor VIII inhibitor status /// concept: factor VIII inhibitor activity - 4126681, # source: factor VIII inhibitor status /// concept: detected - 9190 # source: factor VIII inhibitor status /// concept: not detected - ), - - # 5.29 Lab Measurements - UC3LabMeasurements = c( - 3024942, # source: factor VIII inhibitor titer /// concept: coagulation factor VIII inhibitor [Units/volume] in platelet poor plasma by coagulation assay - 3022520, # source: factor VIII activity measurement /// concept: coagulation factor VIII activated [Units/volume] in platelet poor plasma by coagulation assay - 3011832, # source: factor VIII activity measurement /// concept: coagulation factor VIII activity [Units/volume] in platelet poor plasma by Chromogenic assay - 43534000, # source: Von Willebrand factor activity measurement /// concept: von Willebrand factor (vWf) activity [Units/volume] in platelet poor plasma by Immunoassay - 3002124, # source: Von Willebrand factor antigen measurement /// concept: von Willebrand factor (vWf) Ag [Units/volume] in platelet poor plasma by Immunoassay - 3023693, # source: Von Willebrand factor propeptide measurement /// concept: von Willebrand factor (vWf) multimers in platelet poor plasma by Immunoblot - 3042349, # source: Von Willebrand factor propeptide measurement /// concept: von Willebrand factor (vWf) cleaving protease inhibitor [Units/volume] in platelet poor plasma - 4175016, # source: activated partial thromboplastin time (APTT) /// concept: partial thromboplastin time, activated - 3034426, # source: Prothrombin time (PT) /// concept: prothrombin time (PT) - 4267147, # source: platelet count /// concept: platelet count - 3009542, # source: hematocrit /// concept: Hematocrit [Volume Fraction] of Blood - 3016407, # source: fibrinogen /// concept: fibrinogen [mass/volume] in platelet poor plasma by coagulation assay - 3006923, # source: ALT /// concept: alanine aminotransferase [enzymatic activity/volume] in serum or plasma - 3013721 # source: AST /// concept: aspartate aminotransferase [enzymatic activity/volume] in serum or plasma - ), - - # 5.30 Treatments - UC3Treatments = c( - 1352213, # source: factor VIII /// concept: factor VIII (umbrella term) - 793042, # source: factor VIII /// concept: emicizumab (umbrella term) - 40492862, # source: factor VIII dose is continuous infusion or bolus dose /// concept: mode of drug administration - 4129275, # source: factor VIII dose is continuous infusion or bolus dose /// concept: continuous infusion - 4265597, # source: factor VIII dose is continuous infusion or bolus dose /// concept: by bolus infusions - 1517070 # source: desmopressin /// concept: desmopressin - ), - - # 5.31 Surgery-specific parameters - UC3Surgery = c( - 4172515, # source: Medical/ surgical procedure /// concept: Therapeutic procedure - 967823, # source: NaCl administration during surgery /// concept: sodium chloride - 4028665, # source: plasma administration during surgery /// concept: plasma transfusion - 4160439, # source: datetime start anesthesia /// concept: Administration of anesthesia - 4308716, # source: blood loss during surgery /// concept: intraoperative hemorrhage - 37017589 # source: blood transfusion during surgery /// concept: Bleeding during surgery requiring transfusion - ) - ) -) - -## Extend with descendants -conceptSets$conceptSets <- list() -for (cs in names(conceptSets$concepts)) { - conceptSets$conceptSets[[cs]] <- cs(descendants(conceptSets$concepts[[cs]]), name = cs) -} - -cat("\nSourced concept sets\n") diff --git a/R/countOccurrences.R b/R/countOccurrences.R index fb41038..e6c3b77 100644 --- a/R/countOccurrences.R +++ b/R/countOccurrences.R @@ -1,13 +1,15 @@ -#' This function counts the occurrences of specified concept ids within specified tables in an OMOP database, +#' Count Occurrences of Concept IDs in OMOP Database +#' +#' This function counts the occurrences of specified concept IDs within specified tables in an OMOP database, #' including direct occurrences and occurrences through descendants, based on a provided cdm_schema and links. #' It returns a tibble summarizing the counts across persons and across records. #' -#' @param v A vector of concept_ids to count occurrences for. -#' @param tables A character vector of CDM table names to search within. -#' @param links A list linking each table to its respective concept_id field. #' @param db_connection A database connection object through which queries will be executed. #' @param cdm_schema The database cdm_schema in which the tables are located. #' @param vocab_schema The database vocab_schema in which the concept tables are located. +#' @param v A vector of concept_ids to count occurrences for. +#' @param tables A character vector of CDM table names to search within. +#' @param links A list linking each table to its respective concept_id field. #' @param save_path The path to save the results to as a CSV file. If NULL, the results are not saved. #' #' @return A tibble with columns for the number of times any concept from 'v' occurs: direct count of persons, @@ -20,9 +22,10 @@ #' # `tables` contains the names of the tables to search, `links` defines the relevant fields, #' # and `v` contains the values to search for: #' results <- countOccurrences( +#' db_connection = db_connection, cdm_schema = "public", vocab_schema = "vocabulary", #' v = c(1, 2), tables = c("observation", "condition_occurrence"), #' links = list(observation = "observation_concept_id", condition_occurrence = "condition_concept_id"), -#' db_connection = db_connection, cdm_schema = "public", vocab_schema = "vocabulary" +#' save_path = NULL #' ) #' #' @export diff --git a/R/data.R b/R/data.R new file mode 100644 index 0000000..79fff79 --- /dev/null +++ b/R/data.R @@ -0,0 +1,14 @@ +#' @name conceptSets +#' @title Concept set definitions by use case +#' +#' @description +#' ConceptSets related to PHEMS variables are defined in ./data_raw/conceptSetsPHEMS.R. The base Capr library is used to fetch all descendant concepts +#' for each defined concept set, ensuring comprehensive coverage of related medical concepts. +#' +#' @details The script initializes by defining multiple concept sets within a list structure. Each concept set contains unique identifiers for medical concepts, +#' which are expanded to include all descendant concepts using the Capr library's functionality. The expanded concept sets are then stored in a new list within +#' the `conceptSets` object. Finally, the script outputs a confirmation message indicating successful sourcing and expansion of concept sets. +#' +#' @note This script requires the Capr library to be installed and loaded for proper execution. +#' @note Duplicated concepts within the same UC have been removed; keeping the first occurrence. +"conceptSets" \ No newline at end of file diff --git a/R/isStandard.R b/R/isStandard.R index 9e15e65..3aad27b 100644 --- a/R/isStandard.R +++ b/R/isStandard.R @@ -56,7 +56,8 @@ isStandard <- function(db_connection, data_concepts_path, vocab_schema, save_pat if (length(tables) == 0) { stop("No CSV files found in the specified directory.") } - + + empty_tables <- c() for (table_path in tables) { table_name <- basename(table_path) @@ -98,14 +99,18 @@ isStandard <- function(db_connection, data_concepts_path, vocab_schema, save_pat # Save if not empty and save_path is provided if (!is.null(save_path) && nrow(joined) > 0) { - message(paste0("saving file: ", table_name)) - readr::write_csv(joined, paste0(save_path, "/", table_name)) + message(paste0("saving file: ./isStandard_", table_name)) + readr::write_csv(joined, paste0(save_path, "/isStandard_", table_name)) } else if (is.null(save_path)) { next } else { - message(paste("No matches found for concept set.\n")) + empty_tables <- append(empty_tables, table_name) + message(paste0("No matches found for file: ", data_concepts_path, "/", table_name, ".\n")) } } + message(paste0("A file with the names of tables/files without non-standard concepts is saved here: ", + save_path, "/isStandard_OnlyStandard.txt")) + readr::write_file(paste(empty_tables, collapse="\n"), paste0(save_path, "/isStandard_OnlyStandard.txt")) # Create table of non-standard concepts res <- tibble::tibble( diff --git a/R/isStandardCS.R b/R/isStandardCS.R index 78a2bf0..e24f4b3 100644 --- a/R/isStandardCS.R +++ b/R/isStandardCS.R @@ -16,7 +16,7 @@ #' @export isStandardCS <- function(conceptSet, save_path = NULL) { stopifnot("Error: No valid Capr concept set provided. Ensure the class of your conceptSet is 'ConceptSet' from the Capr package" = !is.null(conceptSet) && class(conceptSet) == "ConceptSet") - stopifnot("error: save_path is not a string" = is.null(save_path) | is.character(save_path)) + stopifnot("Error: save_path is not a string" = is.null(save_path) | is.character(save_path)) # Initialize vectors for non-standard concepts nonStandard <- c() @@ -55,8 +55,8 @@ isStandardCS <- function(conceptSet, save_path = NULL) { # Save if not empty and save_path is provided if (!is.null(save_path) && nrow(df) > 0) { - message(paste0("saving file: CONCEPTSET_", cs_name)) - readr::write_csv(df, paste0(save_path, "/CONCEPTSET_", cs_name, ".csv")) + message(paste0("saving file: isStandardCS_", cs_name)) + readr::write_csv(df, paste0(save_path, "/isStandardCS_", cs_name, ".csv")) } else if (is.null(save_path)) { message("No save path specified; returning non-standard concepts\n") } else { diff --git a/R/isStandardDB.R b/R/isStandardDB.R index f51b94d..558180f 100644 --- a/R/isStandardDB.R +++ b/R/isStandardDB.R @@ -37,6 +37,7 @@ isStandardDB <- function(db_connection, cdm_schema, vocab_schema, links, save_pa # get tables tables <- names(links) + empty_tables <- c() for (table in tables) { # Read concept table from SQL database concept_table_query <- SqlRender::render(sprintf( @@ -76,19 +77,24 @@ isStandardDB <- function(db_connection, cdm_schema, vocab_schema, links, save_pa } else { res <- dplyr::bind_rows(res, nonStandardDF) } - } # Save if not empty and save_path is provided if (!is.null(save_path) && nrow(res) > 0) { - readr::write_csv(concept_table, paste0(save_path, "/", table)) - message(paste0("Saved results to ", save_path, "/", table, "\n")) + readr::write_csv(concept_table, paste0(save_path, "/isStandardDB_", table)) + message(paste0("Saved results to ", save_path, "/isStandardDB_", table, "\n")) } else if (is.null(save_path)) { message("No save path provided, only returning non-standard concepts DF") } else if (nrow(res) == 0) { + empty_tables <- append(empty_tables, table) message("No non-standard concepts found in DB; not saving any file.\n") } - + } + + # Save file with empty tables + message(paste0("A file with the names of tables/files without non-standard concepts is saved here: ", + save_path, "/isStandardDB_AllStandard.txt")) + readr::write_file(paste(empty_tables, collapse=""), paste0(save_path, "/isStandardDB_AllStandard.txt")) + message(paste0("Finished checking for non-standard concepts.\n", nrow(res), " non-standard concepts found across tables.")) - return(res) } diff --git a/R/main.R b/R/main.R deleted file mode 100644 index d588fa0..0000000 --- a/R/main.R +++ /dev/null @@ -1,92 +0,0 @@ -## Load libraries ============================================================== -library(RSQLite) -library(tibble) -library(DatabaseConnector) -library(CohortGenerator) -library(CirceR) -library(Capr) - - -## Set-up config =============================================================== -connectionConfig <- config::get( - config = "config", file = "./inst/config/connection_config.yml" -) -config_oth <- config::get( - config = "config", file = "./inst/config/config.yml" -) - - -## Connect to DB =============================================================== -# Use connection details from configuration -connectionDetails <- createConnectionDetails( - dbms = connectionConfig$dbms, - user = connectionConfig$user, - password = connectionConfig$password, - server = connectionConfig$server, - port = connectionConfig$port, - oracleDriver = connectionConfig$oracleDriver, - pathToDriver = connectionConfig$pathToDriver -) - - -## Concept sets ================================================================ -source("./R/conceptSets.R") - -# Establish connection -con <- connect(connectionDetails) - -conceptSets$conceptSets <- conceptSets$conceptSets %>% - # Add details for all concepts (excl. descendants) - lapply( - FUN = getConceptSetDetails, - con = con, - vocabularyDatabaseSchema = connectionConfig$vocabulary_schema - ) - - -## Concept counts ============================================================== - -# Get countOccurrences function -source("./R/countOccurrences.R") - -# Get links between tables and fields as input -source("./R/table_linked_to_concept_field.R") - -countOccurrences( - v = conceptSets$concepts$uc1, - tables = names(links), # Query all CDM tables - links = links, # Links between tables and concept_id fields (table:field) - db_connection = con, - cdm_schema = connectionConfig$cdm_schema, - vocab_schema = connectionConfig$vocabulary_schema, - save_path = config_oth$save_path_counts -) - - -## Standard and non-standard concepts given a database connection ============== -# Return table of non-standard concepts -source("./R/isStandardDB.R") -isStandardDB( - db_connection = con, - cdm_schema = connectionConfig$cdm_schema, - vocab_schema = connectionConfig$vocabulary_schema, - links = links, - # (optional) Save the results (with standard and non-standard concepts) - save_path = config_oth$save_path_isStandard -) - - -## Standard and non-standard concepts given a concept set ====================== -# UC2 used as an Example concept set -uc2 <- conceptSets$conceptSets$uc2 - -# check standardness across concept set -source("./R/isStandardCS.R") -isStandardCS( - conceptSet = conceptSets$conceptSets$uc2, - # (optional) Save the results (with standard and non-standard concepts) - save_path = config_oth$save_path_isStandard -) - -# Disconnect -disconnect(con) From 4019666899892fcdafe1a46aa512fa7e57acebe3 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Tue, 10 Sep 2024 09:59:08 +0200 Subject: [PATCH 14/27] update docs --- ...-PHEMS-package.Rd => CaprPHEMS-package.Rd} | 10 +- man/conceptSets.Rd | 16 ++- man/countOccurrences.Rd | 41 ++++-- man/cs.Rd | 127 +++++++++--------- man/figures/logo.png | Bin 68680 -> 0 bytes man/isStandardCS.Rd | 10 +- man/isStandardDB.Rd | 39 ++++++ 7 files changed, 148 insertions(+), 95 deletions(-) rename man/{Capr-PHEMS-package.Rd => CaprPHEMS-package.Rd} (84%) delete mode 100644 man/figures/logo.png create mode 100644 man/isStandardDB.Rd diff --git a/man/Capr-PHEMS-package.Rd b/man/CaprPHEMS-package.Rd similarity index 84% rename from man/Capr-PHEMS-package.Rd rename to man/CaprPHEMS-package.Rd index 628b6a7..5affd2a 100644 --- a/man/Capr-PHEMS-package.Rd +++ b/man/CaprPHEMS-package.Rd @@ -1,13 +1,11 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/Capr.R \docType{package} -\name{Capr-PHEMS-package} -\alias{Capr-PHEMS} -\alias{Capr-PHEMS-package} -\title{Capr-PHEMS: Cohort Definition Application Programming - project specific for PHEMS} +\name{CaprPHEMS-package} +\alias{CaprPHEMS} +\alias{CaprPHEMS-package} +\title{CaprPHEMS: Cohort Definition Application Programming - project specific for PHEMS} \description{ -\if{html}{\figure{logo.png}{options: style='float: right' alt='logo' width='120'}} - Provides a programming language for defining cohort definitions in R to use in studies for Observational Health Data Sciences and Informatics (OHDSI). The functions in 'Capr' allow for the programmatic creation of OHDSI concept sets and cohorts that can be serialized to 'OHDSI' compatible 'json' files or to 'OHDSI-SQL'. 'Capr' functions can be used to create, save, and load component parts to a cohort definition allowing R programmers to easily reuse cohort logic. 'Capr' provides tools to create a large number of OHDSI cohorts while also helping bridge the gap between human readable descriptions of clinical phenotypes and their computational implementation. For PHEMS this package has been extended with additional functions to support PHEMS cohort creation. } \seealso{ diff --git a/man/conceptSets.Rd b/man/conceptSets.Rd index fbf9568..51a1750 100644 --- a/man/conceptSets.Rd +++ b/man/conceptSets.Rd @@ -1,10 +1,17 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/conceptSets.R +% Please edit documentation in R/data.R +\docType{data} \name{conceptSets} \alias{conceptSets} -\title{Medical Concept Sets Definition and Expansion} +\title{Concept set definitions by use case} +\format{ +An object of class \code{list} of length 2. +} +\usage{ +conceptSets +} \description{ -This script defines and expands various concept sets related to medical data. It utilizes the Capr library to fetch all descendant concepts +ConceptSets related to PHEMS variables are defined in ./data_raw/conceptSetsPHEMS.R. The base Capr library is used to fetch all descendant concepts for each defined concept set, ensuring comprehensive coverage of related medical concepts. } \details{ @@ -14,4 +21,7 @@ the `conceptSets` object. Finally, the script outputs a confirmation message ind } \note{ This script requires the Capr library to be installed and loaded for proper execution. + +Duplicated concepts within the same UC have been removed; keeping the first occurrence. } +\keyword{datasets} diff --git a/man/countOccurrences.Rd b/man/countOccurrences.Rd index 93627cf..0c3ecc6 100644 --- a/man/countOccurrences.Rd +++ b/man/countOccurrences.Rd @@ -2,31 +2,41 @@ % Please edit documentation in R/countOccurrences.R \name{countOccurrences} \alias{countOccurrences} -\title{Count Occurrences of Values in Database Tables} +\title{Count Occurrences of Concept IDs in OMOP Database} \usage{ -countOccurrences(v, tables, links, db_connection, cdm_schema, vocab_schema) +countOccurrences( + db_connection, + cdm_schema, + vocab_schema, + v, + tables, + links, + save_path +) } \arguments{ +\item{db_connection}{A database connection object through which queries will be executed.} + +\item{cdm_schema}{The database cdm_schema in which the tables are located.} + +\item{vocab_schema}{The database vocab_schema in which the concept tables are located.} + \item{v}{A vector of concept_ids to count occurrences for.} \item{tables}{A character vector of CDM table names to search within.} \item{links}{A list linking each table to its respective concept_id field.} -\item{db_connection}{A database connection object through which queries will be executed.} - -\item{cdm_schema}{The database cdm_schema in which the tables are located.} - -\item{vocab_schema}{The database vocab_schema in which the concept tables are located.} +\item{save_path}{The path to save the results to as a CSV file. If NULL, the results are not saved.} } \value{ -A tibble with columns for the number of times any concept from 'v' occurs: direct count of persons, - direct count of records, descendant count of persons, and descendant count of records. - The tibble also includes the concept names derived from `v` and is arranged by the total +A tibble with columns for the number of times any concept from 'v' occurs: direct count of persons, + direct count of records, descendant count of persons, and descendant count of records. + The tibble also includes the concept names and domain ids derived from `v` and is arranged by the total record count (direct + descendant). } \description{ -This function counts the occurrences of specified concept ids within specified tables in a OMOP database, +This function counts the occurrences of specified concept IDs within specified tables in an OMOP database, including direct occurrences and occurrences through descendants, based on a provided cdm_schema and links. It returns a tibble summarizing the counts across persons and across records. } @@ -34,8 +44,11 @@ It returns a tibble summarizing the counts across persons and across records. # Assuming `db_connection` is a valid database connection, `cdm_schema` is set to "public", # `tables` contains the names of the tables to search, `links` defines the relevant fields, # and `v` contains the values to search for: -results <- countOccurrences(v = c(1, 2), tables = c("observation", "condition_occurrence"), - links = list(observation = "observation_concept_id", condition_occurrence = "condition_concept_id", ...), - db_connection = db_connection, cdm_schema = "public") +results <- countOccurrences( + db_connection = db_connection, cdm_schema = "public", vocab_schema = "vocabulary", + v = c(1, 2), tables = c("observation", "condition_occurrence"), + links = list(observation = "observation_concept_id", condition_occurrence = "condition_concept_id"), + save_path = NULL +) } diff --git a/man/cs.Rd b/man/cs.Rd index cbc89be..0f1e8a7 100644 --- a/man/cs.Rd +++ b/man/cs.Rd @@ -1,66 +1,61 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/conceptSet.R -\docType{data} -\name{cs} -\alias{cs} -\alias{exclude} -\alias{mapped} -\alias{descendants} -\title{Create a concept set} -\format{ -An object of class \code{character} of length 1. -} -\usage{ -cs - -exclude(...) - -mapped(...) - -descendants(...) -} -\arguments{ -\item{...}{One or more numeric vectors that can be coerced to integers, or -Calls to helper functions "exclude", "descendants", or "mapped".} - -\item{name}{A name for the concept set} - -\item{id}{An id for the concept set} -} -\value{ -A Capr Concept Set Object - -A list of Capr concepts - -A list of Capr concepts - -A list of Capr concepts -} -\description{ -cs is used to create concept set expressions. - -`exclude` is meant to be used inside `cs` when creating a new concept set. - -`mapped` is meant to be used inside `cs` when creating a new concept set. - -`descendants` is meant to be used inside `cs` when creating a new concept set. -} -\section{Functions}{ -\itemize{ -\item \code{exclude()}: exclude concepts - -\item \code{mapped()}: Include mapped concepts - -\item \code{descendants()}: Include descendants - -}} -\examples{ -cs(1, 2, name = "concepts") -cs(1, c(10, 11, 2), name = "concepts") -cs(1, seq(2, 10, 2), name = "concepts") -cs(1, 2, 3, exclude(4, 5), name = "concepts") -cs(1, 2, 3, exclude(4, 5), mapped(6, 7), name = "concepts") -cs(1, 2, 3, exclude(4, 5), mapped(6, 7), descendants(8, 9), name = "concepts") -cs(descendants(1, 2, 3), exclude(descendants(8, 9)), name = "concepts") -} -\keyword{datasets} +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/conceptSet.R +\name{cs} +\alias{cs} +\alias{exclude} +\alias{mapped} +\alias{descendants} +\title{Create a concept set} +\usage{ +cs(..., name, id = NULL) + +exclude(...) + +mapped(...) + +descendants(...) +} +\arguments{ +\item{...}{One or more numeric vectors that can be coerced to integers, or +Calls to helper functions "exclude", "descendants", or "mapped".} + +\item{name}{A name for the concept set} + +\item{id}{An id for the concept set} +} +\value{ +A Capr Concept Set Object + +A list of Capr concepts + +A list of Capr concepts + +A list of Capr concepts +} +\description{ +cs is used to create concept set expressions. + +`exclude` is meant to be used inside `cs` when creating a new concept set. + +`mapped` is meant to be used inside `cs` when creating a new concept set. + +`descendants` is meant to be used inside `cs` when creating a new concept set. +} +\section{Functions}{ +\itemize{ +\item \code{exclude()}: exclude concepts + +\item \code{mapped()}: Include mapped concepts + +\item \code{descendants()}: Include descendants + +}} +\examples{ +cs(1, 2, name = "concepts") +cs(1, c(10, 11, 2), name = "concepts") +cs(1, seq(2, 10, 2), name = "concepts") +cs(1, 2, 3, exclude(4, 5), name = "concepts") +cs(1, 2, 3, exclude(4, 5), mapped(6, 7), name = "concepts") +cs(1, 2, 3, exclude(4, 5), mapped(6, 7), descendants(8, 9), name = "concepts") +cs(descendants(1, 2, 3), exclude(descendants(8, 9)), name = "concepts") +} diff --git a/man/figures/logo.png b/man/figures/logo.png deleted file mode 100644 index 8747244eda6320a27f611aa1a2e19b876faa2216..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68680 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ν^d-F4nE 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 H_2hp6wHM@7 diff --git a/man/isStandardCS.Rd b/man/isStandardCS.Rd index 4fb8a47..3feb432 100644 --- a/man/isStandardCS.Rd +++ b/man/isStandardCS.Rd @@ -4,26 +4,24 @@ \alias{isStandardCS} \title{Check for Non-Standard Concepts in Concept Sets} \usage{ -isStandardCS(db_connection, conceptSet, save_path = NULL) +isStandardCS(conceptSet, save_path = NULL) } \arguments{ -\item{db_connection}{A DBI database connection object to the SQL database containing the standard concepts table. This parameter is currently not used in the function but intended for future use where database queries might be necessary.} - \item{conceptSet}{An object representing a set of concepts, containing details such as concept ID, concept name, and whether it is a standard concept. The structure of this object should support `@Expression` to access the individual concepts and their properties.} \item{save_path}{(Optional) The file path where the details of non-standard concepts should be saved as a CSV file. If not provided, the information will not be saved but will still be checked for non-standard concepts.} } \value{ -A tibble containing the columns `concept_name`, `concept_id`, `concept_set`, and `standard`, which represent the concept name, concept ID, the name of the concept set, and the standard status for each concept found to be non-standard or not classified as standard. +A tibble containing the columns `concept_name`, `concept_id`, `concept_set`, and `standard_concept`, which represent the concept name, concept ID, the name of the concept set, and the standard status for each concept found to be non-standard or not classified as standard. } \description{ This function examines a concept set for non-standard concepts by comparing them against a standard concepts table in a SQL database. It identifies non-standard concepts and optionally saves the details of these non-standard concepts to a specified path. } \details{ -The function processes a given concept set to identify non-standard concepts. Non-standard concepts are those not marked as 'S' (Standard) or 'C' (Classification) in their `standard_concept` attribute. The function creates a data frame with concept details, filters out standard and classification concepts, and if a `save_path` is provided, saves this information to a CSV file. If no non-standard concepts are found, appropriate messages are displayed. +The function processes a given concept set to identify non-standard concepts. Non-standard concepts are those not marked as 'S' (Standard) or 'C' (Classification) in their `standard_concept` attribute. The function creates a data frame with concept details, replaces empty `standard_concept` values with "Non-standard", filters out standard and classification concepts, and if a `save_path` is provided, saves this information to a CSV file. If no non-standard concepts are found, appropriate messages are displayed. } \examples{ # Assuming you have a concept set `conceptSet`: -non_standard_concepts <- isStandardCS(db_conn, conceptSet, "path/to/save_standard_AND_non_standard/") +non_standard_concepts <- isStandardCS(conceptSet, "path/to/save_standard_AND_non_standard/") } diff --git a/man/isStandardDB.Rd b/man/isStandardDB.Rd new file mode 100644 index 0000000..d45f5fb --- /dev/null +++ b/man/isStandardDB.Rd @@ -0,0 +1,39 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/isStandardDB.R +\name{isStandardDB} +\alias{isStandardDB} +\title{Identify Non-Standard Concepts in Database} +\usage{ +isStandardDB(db_connection, cdm_schema, vocab_schema, links, save_path) +} +\arguments{ +\item{db_connection}{A DBI database connection object to the SQL database containing the standard concepts table.} + +\item{cdm_schema}{The schema name of the Common Data Model (CDM) database containing the source tables.} + +\item{vocab_schema}{The schema name of the vocabulary database containing the standard concepts table.} + +\item{links}{A named list where each name is a table name and each value is a vector of two strings: the column names for `concept_id` and `source_code` in that table.} + +\item{save_path}{(Optional) The file path where the joined tables containing non-standard concepts should be saved. If not provided, the tables will not be saved but will still be checked for non-standard concepts.} +} +\value{ +A tibble containing the columns `concept_id`, `concept_name`, `source_code`, and `source_table`, representing the concept ID, concept name, source code, and source table name for each non-standard concept found. +} +\description{ +This function checks a set of tables for non-standard concepts by comparing them against the concept table in a SQL database. It identifies non-standard concepts and optionally saves the joined tables containing these non-standard concepts. +} +\details{ +The function first queries the `concept` table from the provided SQL database to retrieve the standard concepts. It then reads each specified table, preparing and joining it with the standard concepts table based on the concept ID. Non-standard concepts are identified based on the `standard_concept` column being `NA`. Information about these non-standard concepts is collected and returned as a tibble. The function also adds a `source_table` column to indicate the source table name. + +If a `save_path` is provided, each joined table (including both standard and non-standard concepts) is saved to the specified directory with the same name as the original table file. +} +\examples{ +# Assuming you have a valid DBI connection `db_conn` and your tables are specified in the `links` list: +links <- list( + "table1" = c("concept_id_col1", "source_code_col1"), + "table2" = c("concept_id_col2", "source_code_col2") +) +non_standard_concepts <- isStandardDB(db_conn, "cdm_schema", "vocab_schema", links, "path/to/save_non_standard/") + +} From 8f44f424e23d688d0bf046e7e4556264c2fadc2a Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Tue, 10 Sep 2024 09:59:33 +0200 Subject: [PATCH 15/27] update configs --- inst/config/config-sample.yml | 10 ++++++++-- inst/config/connection_config-sample.yml | 24 ++++++++++++++---------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/inst/config/config-sample.yml b/inst/config/config-sample.yml index b8aac3a..ef83c3d 100644 --- a/inst/config/config-sample.yml +++ b/inst/config/config-sample.yml @@ -1,4 +1,8 @@ --- +# 1. Copy this file using [cp ./config/config-sample.yml ./config/config.yml] +# 2. In the new file, add the paths under the `config` key; changes in default values will have no effect. + +#========================================================================================================= ## Default configuration values # Default values are necessary for the `config` CRAN library, not used in package otherwise # No need to change these values @@ -6,10 +10,12 @@ default: concepts_path: 'inst/extdata/phems_variables_by_table' # required for isStandard() function; specifies path to concept list directory with sourceCode and concept_id save_path_isStandard: 'inst/extdata/phems_variables_by_table/is_standard' # (optional) if saving standard concept check results. Point to existing directory. save_path_json: 'inst/extdata/json' # (optional) if saving cohort and/or concept set as json). Point to existing directory + save_path_counts: './inst/extdata/countoccurrences' # where to save results from countOccurrences() ## Paths for CSVs of concepts and saves -# Replace with your paths +# Add your paths here config: concepts_path: '' save_path_isStandard: '' - save_path_json: '' \ No newline at end of file + save_path_json: '' + save_path_counts: '' \ No newline at end of file diff --git a/inst/config/connection_config-sample.yml b/inst/config/connection_config-sample.yml index 1e2bc71..ac8a1d5 100644 --- a/inst/config/connection_config-sample.yml +++ b/inst/config/connection_config-sample.yml @@ -1,18 +1,22 @@ --- +# 1. Copy this file using [cp ./config/connection_config-sample.yml ./config/connection_config.yml] +# 2. In the new file, add your connection details under the `config` key; changes in default values will have no effect. + +#=============================================================================================== ## Default configuration values # Default values are necessary for the `config` CRAN library, not used in package otherwise # No need to change these values; they are unused default: dbms: 'postgres' # Database management system - user: 'postgres' - password: null - server: localhost/omop_db - port: 5432 - oracleDriver: null - pathToDriver: '~/jdbc/' - cdm_schema: 'cdm' - vocabulary_schema: 'vocab' - cohort_schema: 'cohort' + user: 'postgres' # username + password: null # password + server: localhost/omop_db # server + port: 5432 # port + oracleDriver: null # Oracle driver + pathToDriver: '~/jdbc/' # path to driver + cdm_schema: 'cdm' # schema where the OMOP CDM is stored + vocabulary_schema: 'vocab' # schema where the vocabulary tables are stored + cohort_schema: 'cohort' # schema where the cohort tables are stored (may be left empty if not using cohorts for now) ## Connection details # Replace with your connection details @@ -22,7 +26,7 @@ default: # as not all of these details may be required. # cdm_schema should point to the OMOP CDM schema # vocabulary_schema should point to the schema where the vocabulary tables are stored -# cohort_schema should point to the schema where the cohort tables are stored +# cohort_schema should point to the schema where the cohort tables are stored; this is only necessary to provide if you are using cohorts # All schemas should be EXISTING in the database config: dbms: '' From d98434490762661cd0a9f1195adc102e24605b19 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Tue, 10 Sep 2024 10:16:17 +0200 Subject: [PATCH 16/27] update R project --- .Rbuildignore | 43 ++-- .gitignore | 34 +-- Capr-PHEMS.Rproj => CaprPHEMS.Rproj | 0 DESCRIPTION | 6 +- NAMESPACE | 206 +++++++++--------- README.md | 2 +- .../Capr-PHEMS_examples.Rmd | 8 +- .../pdf_vignette}/Capr-PHEMS_examples.pdf | Bin inst/scripts/main.R | 99 +++++++++ renv.lock | 24 +- 10 files changed, 253 insertions(+), 169 deletions(-) rename Capr-PHEMS.Rproj => CaprPHEMS.Rproj (100%) rename {inst/templates => extras}/Capr-PHEMS_examples.Rmd (95%) rename {inst/templates => extras/pdf_vignette}/Capr-PHEMS_examples.pdf (100%) create mode 100644 inst/scripts/main.R diff --git a/.Rbuildignore b/.Rbuildignore index d879437..dd9378b 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,21 +1,22 @@ -^requirements\.txt$ -^renv$ -^renv\.lock$ -^Capr\.Rproj$ -^\.Rproj\.user$ -.github -deploy.sh -compare_versions -^doc$ -^Meta$ -^_pkgdown\.yml$ -^docs$ -^extras$ -^man-roxygen$ -^scratch$ -^work$ -^README\.Rmd$ -^pkgdown$ -^cran-comments\.md$ -^CRAN-SUBMISSION$ -^LICENSE\.md$ +^requirements\.txt$ +^renv$ +^renv\.lock$ +^Capr\.Rproj$ +^\.Rproj\.user$ +.github +deploy.sh +compare_versions +^doc$ +^Meta$ +^_pkgdown\.yml$ +^docs$ +^extras$ +^man-roxygen$ +^scratch$ +^work$ +^README\.Rmd$ +^pkgdown$ +^cran-comments\.md$ +^CRAN-SUBMISSION$ +^LICENSE\.md$ +^data-raw$ diff --git a/.gitignore b/.gitignore index 0d23c3b..8d4b32d 100644 --- a/.gitignore +++ b/.gitignore @@ -12,32 +12,8 @@ scratch/ inst/doc # project-specific -alphabetically_sort.py -parse_requirements.py - -inst/config/* -!inst/config/*-sample.yml - -inst/extdata/**/* - -!inst/extdata/phems_variables_by_uc -!inst/extdata/phems_variables_by_uc/* -!inst/extdata/phems_variables_by_uc/*/* - -!inst/extdata/standardness - -!inst/extdata/json -inst/extdata/json/* - -!inst/extdata/standard_concepts -inst/extdata/standard_concepts/* - -!inst/extdata/vocabularies -inst/extdata/vocabularies/* - -R/process_ucs.R - - -!*.gitkeep - -renv \ No newline at end of file +data-raw +*config.yml +renv/ +*.py +process_ucs.R \ No newline at end of file diff --git a/Capr-PHEMS.Rproj b/CaprPHEMS.Rproj similarity index 100% rename from Capr-PHEMS.Rproj rename to CaprPHEMS.Rproj diff --git a/DESCRIPTION b/DESCRIPTION index 2e4c1a1..1078c17 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,4 +1,4 @@ -Package: Capr-PHEMS +Package: CaprPHEMS Title: Cohort Definition Application Programming - project specific for PHEMS Version: 2.0.8 Authors@R: c( @@ -67,9 +67,11 @@ Collate: 'exit.R' 'cohort.R' 'collectCodesetId.R' - 'conceptSets.R' 'countOccurrences.R' + 'data.R' 'isStandard.R' 'isStandardCS.R' + 'isStandardDB.R' 'table_linked_to_concept_field.R' 'utils.R' +LazyData: true diff --git a/NAMESPACE b/NAMESPACE index 3267899..d8ef099 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,100 +1,106 @@ -# Generated by roxygen2: do not edit by hand - -S3method(compile,Cohort) -export("%>%") -export(age) -export(as.json) -export(atLeast) -export(atMost) -export(attrition) -export(bt) -export(censoringEvents) -export(cohort) -export(compile) -export(conceptSets) -export(conditionEra) -export(conditionOccurrence) -export(conditionType) -export(continuousObservation) -export(countOccurrences) -export(cs) -export(dateAdjustment) -export(daysOfSupply) -export(death) -export(descendants) -export(deviceExposure) -export(drugEra) -export(drugExit) -export(drugExposure) -export(drugQuantity) -export(drugRefills) -export(drugType) -export(duringInterval) -export(endDate) -export(entry) -export(eq) -export(era) -export(eventEnds) -export(eventStarts) -export(exactly) -export(exclude) -export(exit) -export(female) -export(firstOccurrence) -export(fixedExit) -export(getConceptSetDetails) -export(gt) -export(gte) -export(isStandard) -export(isStandardCS) -export(links) -export(lt) -export(lte) -export(makeCohortSet) -export(male) -export(mapped) -export(measurement) -export(measurementType) -export(nbt) -export(nestedWithAll) -export(nestedWithAny) -export(nestedWithAtLeast) -export(nestedWithAtMost) -export(observation) -export(observationExit) -export(observationType) -export(procedure) -export(procedureType) -export(rangeHigh) -export(rangeLow) -export(readConceptSet) -export(startDate) -export(toCirce) -export(unit) -export(valueAsNumber) -export(visit) -export(visitType) -export(withAll) -export(withAny) -export(withAtLeast) -export(withAtMost) -export(writeCohort) -export(writeConceptSet) -exportMethods("==") -exportMethods(collectGuid) -exportMethods(compile) -import(dplyr) -importFrom(DBI,dbGetQuery) -importFrom(dplyr,across) -importFrom(dplyr,filter) -importFrom(dplyr,inner_join) -importFrom(dplyr,mutate) -importFrom(dplyr,select) -importFrom(generics,compile) -importFrom(magrittr,"%>%") -importFrom(methods,"slot<-") -importFrom(readr,read_csv) -importFrom(readr,write_csv) -importFrom(rlang,"%||%") -importFrom(rlang,":=") -importFrom(rlang,.data) +# Generated by roxygen2: do not edit by hand + +S3method(compile,Cohort) +export("%>%") +export(age) +export(as.json) +export(atLeast) +export(atMost) +export(attrition) +export(bt) +export(censoringEvents) +export(cohort) +export(compile) +export(conditionEra) +export(conditionOccurrence) +export(conditionType) +export(continuousObservation) +export(countOccurrences) +export(cs) +export(dateAdjustment) +export(daysOfSupply) +export(death) +export(descendants) +export(deviceExposure) +export(drugEra) +export(drugExit) +export(drugExposure) +export(drugQuantity) +export(drugRefills) +export(drugType) +export(duringInterval) +export(endDate) +export(entry) +export(eq) +export(era) +export(eventEnds) +export(eventStarts) +export(exactly) +export(exclude) +export(exit) +export(female) +export(firstOccurrence) +export(fixedExit) +export(getConceptSetDetails) +export(gt) +export(gte) +export(isStandard) +export(isStandardCS) +export(isStandardDB) +export(links) +export(lt) +export(lte) +export(makeCohortSet) +export(male) +export(mapped) +export(measurement) +export(measurementType) +export(nbt) +export(nestedWithAll) +export(nestedWithAny) +export(nestedWithAtLeast) +export(nestedWithAtMost) +export(observation) +export(observationExit) +export(observationType) +export(procedure) +export(procedureType) +export(rangeHigh) +export(rangeLow) +export(readConceptSet) +export(startDate) +export(toCirce) +export(unit) +export(valueAsNumber) +export(visit) +export(visitType) +export(withAll) +export(withAny) +export(withAtLeast) +export(withAtMost) +export(writeCohort) +export(writeConceptSet) +exportMethods("==") +exportMethods(collectGuid) +exportMethods(compile) +import(dplyr) +importFrom(DatabaseConnector,connect) +importFrom(DatabaseConnector,disconnect) +importFrom(DatabaseConnector,querySql) +importFrom(SqlRender,render) +importFrom(SqlRender,translate) +importFrom(dplyr,across) +importFrom(dplyr,bind_rows) +importFrom(dplyr,filter) +importFrom(dplyr,inner_join) +importFrom(dplyr,mutate) +importFrom(dplyr,rename) +importFrom(dplyr,select) +importFrom(generics,compile) +importFrom(magrittr,"%>%") +importFrom(methods,"slot<-") +importFrom(readr,read_csv) +importFrom(readr,write_csv) +importFrom(rlang,"%||%") +importFrom(rlang,":=") +importFrom(rlang,.data) diff --git a/README.md b/README.md index fd2f4d6..7a1599f 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ and fill in your configuration details. 4c. .Rprofile will be sourced when opening the project; this will trigger renv::init() to initialize the environment. When prompted whether to use a DESCRIPTION file for dependency discovery, select option 1 to use the DESCRIPTION file. Next, you may be prompted the project already has a lockfile with another set of options. Here also select option 1 to restore the project from the lockfile. This will install all required packages to the environment. Your renv is now activated. -5. A template script is provided under ./inst/templates/ as both an R script and .Rmd file. The code between these files is identical. It is recommended to start by using the .Rmd file, so chunks of code can easily be run at will. These chunks of code are self-explanatory. These templates serve as examples of how Capr and Capr-PHEMS can be used and it is encouraged to modify them locally as you see fit. +5. Run inst/scripts/main.R. This will save all the by The Hyve requested files to your device under inst/extdata/standardness for non-standard concept checks or inst/extdata/countoccurrences for the countOccurrences function. Please confirm these saved results may be shared prior to sharing. # User Documentation diff --git a/inst/templates/Capr-PHEMS_examples.Rmd b/extras/Capr-PHEMS_examples.Rmd similarity index 95% rename from inst/templates/Capr-PHEMS_examples.Rmd rename to extras/Capr-PHEMS_examples.Rmd index b24f31e..1debcc2 100644 --- a/inst/templates/Capr-PHEMS_examples.Rmd +++ b/extras/Capr-PHEMS_examples.Rmd @@ -1,10 +1,10 @@ --- -title: "Capr-PHEMS example usage" +title: "CaprPHEMS example usage" author: "Guus @TheHyve" date: "2024-08-29" output: pdf_document --- -## Set-up knitr +## Set-up ```{r knitr, include=FALSE} knitr::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file()) @@ -58,14 +58,14 @@ This function can be applied to any concept set and returns the concept_name, standardness, the domain, the source vocabulary and code, and more. ```{r concept sets, echo=TRUE} ## Concept sets -source("./R/conceptSets.R") +data(conceptSets) # Establish connection con <- connect(connectionDetails) conceptSets$conceptSets <- conceptSets$conceptSets %>% # Add details for all concepts (excl. descendants) - lapply(FUN = getConceptSetDetails, + lapply(FUN = Capr::getConceptSetDetails, con = con, vocabularyDatabaseSchema = connectionConfig$vocabulary_schema) diff --git a/inst/templates/Capr-PHEMS_examples.pdf b/extras/pdf_vignette/Capr-PHEMS_examples.pdf similarity index 100% rename from inst/templates/Capr-PHEMS_examples.pdf rename to extras/pdf_vignette/Capr-PHEMS_examples.pdf diff --git a/inst/scripts/main.R b/inst/scripts/main.R new file mode 100644 index 0000000..35055a1 --- /dev/null +++ b/inst/scripts/main.R @@ -0,0 +1,99 @@ +## Load libraries ============================================================== +library(RSQLite) +library(tibble) +library(DatabaseConnector) +library(CohortGenerator) +library(CirceR) +library(Capr) + + +## Set-up config =============================================================== +connectionConfig <- config::get( + config = "config", file = "./inst/config/connection_config.yml" +) +config_oth <- config::get( + config = "config", file = "./inst/config/config.yml" +) + + +## Connect to DB =============================================================== +# Use connection details from configuration +connectionDetails <- createConnectionDetails( + dbms = connectionConfig$dbms, + user = connectionConfig$user, + password = connectionConfig$password, + server = connectionConfig$server, + port = connectionConfig$port, + oracleDriver = connectionConfig$oracleDriver, + pathToDriver = connectionConfig$pathToDriver +) + + +## Concept sets ================================================================ +data(conceptSets, package="CaprPHEMS") +# Establish connection +con <- connect(connectionDetails) + +conceptSets$conceptSets <- conceptSets$conceptSets %>% + # Add details for all concepts (excl. descendants) + lapply( + FUN = Capr::getConceptSetDetails, + con = con, + vocabularyDatabaseSchema = connectionConfig$vocabulary_schema + ) + +# Disconnect +disconnect(con) + + +## Concept counts ============================================================== + +# Establish connection +con <- connect(connectionDetails) + +CaprPHEMS:::countOccurrences( + v = conceptSets$concepts$uc1, + tables = names(links), # Query all CDM tables + links = CaprPHEMS:::links, # Links between tables and concept_id fields (table:field) + db_connection = con, + cdm_schema = connectionConfig$cdm_schema, + vocab_schema = connectionConfig$vocabulary_schema, + save_path = config_oth$save_path_counts +) + +# Disconnect +disconnect(con) + +## Standard and non-standard concepts given a database connection ============== +# Establish connection +con <- connect(connectionDetails) + +# Return table of non-standard concepts +CaprPHEMS:::isStandardDB( + db_connection = con, + cdm_schema = connectionConfig$cdm_schema, + vocab_schema = connectionConfig$vocabulary_schema, + links = CaprPHEMS::links, + # (optional) Save the results (with standard and non-standard concepts) + save_path = config_oth$save_path_isStandard +) + +# Disconnect +disconnect(con) + +## Standard and non-standard concepts given a concept set ====================== +# Establish connection +con <- connect(connectionDetails) + +# UC2 used as an Example concept set +uc2 <- conceptSets$conceptSets$uc2 + +# check standardness across concept set +CaprPHEMS::isStandardCS( + conceptSet = conceptSets$conceptSets$uc2, + # (optional) Save the results (with standard and non-standard concepts) + save_path = config_oth$save_path_isStandard +) + +# Disconnect +disconnect(con) diff --git a/renv.lock b/renv.lock index ab095ac..1a76e5b 100644 --- a/renv.lock +++ b/renv.lock @@ -77,18 +77,18 @@ }, "Rcpp": { "Package": "Rcpp", - "Version": "1.0.12", + "Version": "1.0.13", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "methods", "utils" ], - "Hash": "5ea2700d21e038ace58269ecdbeb9ec0" + "Hash": "f27411eb6d9c3dada5edd444b8416675" }, "SqlRender": { "Package": "SqlRender", - "Version": "1.18.0", + "Version": "1.18.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -96,7 +96,7 @@ "rJava", "rlang" ], - "Hash": "e1762de0f08b14658d74989c10e2f265" + "Hash": "ea71a7a1a06f53090d9fa72fdf21cd76" }, "backports": { "Package": "backports", @@ -146,7 +146,7 @@ }, "checkmate": { "Package": "checkmate", - "Version": "2.3.1", + "Version": "2.3.2", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -154,7 +154,7 @@ "backports", "utils" ], - "Hash": "c01cab1cb0f9125211a6fc99d540e315" + "Hash": "0ec787de547f8a134e7ac0470048ec47" }, "cli": { "Package": "cli", @@ -189,13 +189,13 @@ }, "cpp11": { "Package": "cpp11", - "Version": "0.4.7", + "Version": "0.5.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R" ], - "Hash": "5a295d7d963cc5035284dcdbaf334f4e" + "Hash": "91570bba75d0c9d3f1040c835cee8fba" }, "crayon": { "Package": "crayon", @@ -239,14 +239,14 @@ }, "digest": { "Package": "digest", - "Version": "0.6.36", + "Version": "0.6.37", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "utils" ], - "Hash": "fd6824ad91ede64151e93af67df6376b" + "Hash": "33698c4b3127fc9f506654607fb73676" }, "dplyr": { "Package": "dplyr", @@ -682,7 +682,7 @@ }, "withr": { "Package": "withr", - "Version": "3.0.0", + "Version": "3.0.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -690,7 +690,7 @@ "grDevices", "graphics" ], - "Hash": "d31b6c62c10dcf11ec530ca6b0dd5d35" + "Hash": "07909200e8bbe90426fbfeb73e1e27aa" } } } From 3f9748dfc2251d5128aa6b8aa74c397597eda61e Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Tue, 10 Sep 2024 10:17:19 +0200 Subject: [PATCH 17/27] update conceptSets to RData --- data/conceptSets.rda | Bin 0 -> 6181 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/conceptSets.rda diff --git a/data/conceptSets.rda b/data/conceptSets.rda new file mode 100644 index 0000000000000000000000000000000000000000..e552939d35c54d6fe8f7e0b2ff5fdadd09263757 GIT binary patch literal 6181 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 jgz^XZX Date: Tue, 10 Sep 2024 11:27:32 +0200 Subject: [PATCH 18/27] replace triple colon with double in CaprPHEMS:: calls --- inst/scripts/main.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inst/scripts/main.R b/inst/scripts/main.R index 35055a1..b8cb2e4 100644 --- a/inst/scripts/main.R +++ b/inst/scripts/main.R @@ -51,10 +51,10 @@ disconnect(con) # Establish connection con <- connect(connectionDetails) -CaprPHEMS:::countOccurrences( +CaprPHEMS::countOccurrences( v = conceptSets$concepts$uc1, tables = names(links), # Query all CDM tables - links = CaprPHEMS:::links, # Links between tables and concept_id fields (table:field) + links = CaprPHEMS::links, # Links between tables and concept_id fields (table:field) db_connection = con, cdm_schema = connectionConfig$cdm_schema, vocab_schema = connectionConfig$vocabulary_schema, @@ -69,7 +69,7 @@ disconnect(con) con <- connect(connectionDetails) # Return table of non-standard concepts -CaprPHEMS:::isStandardDB( +CaprPHEMS::isStandardDB( db_connection = con, cdm_schema = connectionConfig$cdm_schema, vocab_schema = connectionConfig$vocabulary_schema, From cb2def1fec5a79252d0fc0bf41547077d92e3a96 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Tue, 10 Sep 2024 12:24:58 +0200 Subject: [PATCH 19/27] update isStandardDB --- R/isStandardDB.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/isStandardDB.R b/R/isStandardDB.R index 558180f..4118f84 100644 --- a/R/isStandardDB.R +++ b/R/isStandardDB.R @@ -92,7 +92,7 @@ isStandardDB <- function(db_connection, cdm_schema, vocab_schema, links, save_pa # Save file with empty tables message(paste0("A file with the names of tables/files without non-standard concepts is saved here: ", - save_path, "/isStandardDB_AllStandard.txt")) + save_path, "/isStandardDB_OnlyStandard.txt")) readr::write_file(paste(empty_tables, collapse=""), paste0(save_path, "/isStandardDB_AllStandard.txt")) message(paste0("Finished checking for non-standard concepts.\n", nrow(res), " non-standard concepts found across tables.")) From b3fbaaa6c0455a068a251f6ea3dd1b588ec8969f Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Tue, 10 Sep 2024 12:31:53 +0200 Subject: [PATCH 20/27] small update .Rprofile --- .Rprofile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.Rprofile b/.Rprofile index 6e0d474..7174a78 100644 --- a/.Rprofile +++ b/.Rprofile @@ -10,5 +10,8 @@ if (any(list.files() == "renv")) { } else { message("No renv initialized, calling renv::init()") message("Please select to use only the DESCRIPTION file for dependency discovery if prompted, and next select 'Restore the project from the lockfile'") + if (!requireNamespace("renv", quietly = TRUE)) { + install.packages("renv") + } renv::init() } From 4e890bb3327fe57785bc241232db4cf336ca1b20 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Tue, 10 Sep 2024 12:34:56 +0200 Subject: [PATCH 21/27] small update .Rprofile --- .Rprofile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.Rprofile b/.Rprofile index 7174a78..68183d7 100644 --- a/.Rprofile +++ b/.Rprofile @@ -11,7 +11,7 @@ if (any(list.files() == "renv")) { message("No renv initialized, calling renv::init()") message("Please select to use only the DESCRIPTION file for dependency discovery if prompted, and next select 'Restore the project from the lockfile'") if (!requireNamespace("renv", quietly = TRUE)) { - install.packages("renv") + utils::install.packages("renv") } renv::init() } From 5fb332ff4157b109939180636a23c82067f70e54 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Tue, 10 Sep 2024 15:01:21 +0200 Subject: [PATCH 22/27] small update .Rprofile --- .Rprofile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.Rprofile b/.Rprofile index 68183d7..3d672d6 100644 --- a/.Rprofile +++ b/.Rprofile @@ -10,7 +10,7 @@ if (any(list.files() == "renv")) { } else { message("No renv initialized, calling renv::init()") message("Please select to use only the DESCRIPTION file for dependency discovery if prompted, and next select 'Restore the project from the lockfile'") - if (!requireNamespace("renv", quietly = TRUE)) { + if (!require("renv", quietly = TRUE)) { utils::install.packages("renv") } renv::init() From 8bc087531602fff17d2abdeb97e7c5905a3d7644 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Tue, 10 Sep 2024 15:46:53 +0200 Subject: [PATCH 23/27] update readme --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7a1599f..19b9454 100644 --- a/README.md +++ b/README.md @@ -34,13 +34,16 @@ For Capr-PHEMS, it is recommended to clone the repo and work from the template s Please make sure you have the following: - R version >= 4.4.0 - RStudio >= 2024.04.2 -- (CRAN library) renv >= 1.0.7 -1. Clone the repo: +1a. Clone the repo: ``` git clone https://github.com/thehyve/Capr-PHEMS.git ``` +1b. Install CaprPHEMS: +``` +devtools::install_local(") +``` 2. Navigate to ./inst/config/. Here you will find two sample configuration files; config-sample.yml and connection_config-sample.yml @@ -56,7 +59,7 @@ and fill in your configuration details. 4a. Open RStudio and verify renv >= 1.0.7 is installed by calling packageVersion("renv"). If not installed, call install.packages("renv) -4b. In the top-right "Project" dropdown menu, select "Open Project" and open ./Capr-PHEMS.Rproj +4b. In the top-right "Project" dropdown menu, select "Open Project" and open ./CaprPHEMS.Rproj 4c. .Rprofile will be sourced when opening the project; this will trigger renv::init() to initialize the environment. When prompted whether to use a DESCRIPTION file for dependency discovery, select option 1 to use the DESCRIPTION file. Next, you may be prompted the project already has a lockfile with another set of options. Here also select option 1 to restore the project from the lockfile. This will install all required packages to the environment. Your renv is now activated. From 617d824141256672337c75f6215435f43028629e Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Tue, 10 Sep 2024 15:52:55 +0200 Subject: [PATCH 24/27] update readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 19b9454..79f8d1a 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,9 @@ and fill in your configuration details. 5. Run inst/scripts/main.R. This will save all the by The Hyve requested files to your device under inst/extdata/standardness for non-standard concept checks or inst/extdata/countoccurrences for the countOccurrences function. Please confirm these saved results may be shared prior to sharing. + +To better understand the functions and what they require and produce, the user may take a look at extras/Capr-PHEMS_examples.Rmd (or extras/pdf_vignettes/Capr-PHEMS_examples.Rmd). Examples with sample data are provided along with executable code in this MD script. + # User Documentation Documentation can be found on the [package website](https://ohdsi.github.io/Capr/). From 756d911a7b28ece2bd28aede80f37fecfefc194f Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Thu, 19 Sep 2024 10:35:18 +0200 Subject: [PATCH 25/27] add countoccurrences folder --- inst/extdata/countoccurrences/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 inst/extdata/countoccurrences/.gitignore diff --git a/inst/extdata/countoccurrences/.gitignore b/inst/extdata/countoccurrences/.gitignore new file mode 100644 index 0000000..4cd53b6 --- /dev/null +++ b/inst/extdata/countoccurrences/.gitignore @@ -0,0 +1 @@ +count_occurrences.csv \ No newline at end of file From 07e23f5e2ac20dd48fd9d75acdbe3fa74d6d87e6 Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Thu, 19 Sep 2024 10:36:27 +0200 Subject: [PATCH 26/27] update R code --- inst/scripts/main.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/scripts/main.R b/inst/scripts/main.R index b8cb2e4..11fb2fb 100644 --- a/inst/scripts/main.R +++ b/inst/scripts/main.R @@ -53,7 +53,7 @@ con <- connect(connectionDetails) CaprPHEMS::countOccurrences( v = conceptSets$concepts$uc1, - tables = names(links), # Query all CDM tables + tables = names(CaprPHEMS::links), # Query all CDM tables links = CaprPHEMS::links, # Links between tables and concept_id fields (table:field) db_connection = con, cdm_schema = connectionConfig$cdm_schema, From c67de7fd7f8d71236a05b047f642f363ac8d379f Mon Sep 17 00:00:00 2001 From: Guus Wilmink Date: Thu, 19 Sep 2024 10:46:54 +0200 Subject: [PATCH 27/27] update inst --- inst/config/config-sample.yml | 6 +++--- inst/extdata/countoccurrences/.gitignore | 3 ++- inst/extdata/standardness/.gitignore | 2 ++ 3 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 inst/extdata/standardness/.gitignore diff --git a/inst/config/config-sample.yml b/inst/config/config-sample.yml index ef83c3d..dd61f00 100644 --- a/inst/config/config-sample.yml +++ b/inst/config/config-sample.yml @@ -7,9 +7,9 @@ # Default values are necessary for the `config` CRAN library, not used in package otherwise # No need to change these values default: - concepts_path: 'inst/extdata/phems_variables_by_table' # required for isStandard() function; specifies path to concept list directory with sourceCode and concept_id - save_path_isStandard: 'inst/extdata/phems_variables_by_table/is_standard' # (optional) if saving standard concept check results. Point to existing directory. - save_path_json: 'inst/extdata/json' # (optional) if saving cohort and/or concept set as json). Point to existing directory + concepts_path: './inst/extdata/phems_variables/' # required for isStandard() function; specifies path to concept list directory with sourceCode and concept_id + save_path_isStandard: './inst/extdata/standardness' # (optional) if saving standard concept check results. Point to existing directory. + save_path_json: './inst/extdata/json' # (optional) if saving cohort and/or concept set as json). Point to existing directory save_path_counts: './inst/extdata/countoccurrences' # where to save results from countOccurrences() ## Paths for CSVs of concepts and saves diff --git a/inst/extdata/countoccurrences/.gitignore b/inst/extdata/countoccurrences/.gitignore index 4cd53b6..444668a 100644 --- a/inst/extdata/countoccurrences/.gitignore +++ b/inst/extdata/countoccurrences/.gitignore @@ -1 +1,2 @@ -count_occurrences.csv \ No newline at end of file +!.gitignore +* \ No newline at end of file diff --git a/inst/extdata/standardness/.gitignore b/inst/extdata/standardness/.gitignore new file mode 100644 index 0000000..a3a0c8b --- /dev/null +++ b/inst/extdata/standardness/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file