From 01b8228580705d80d5e3c918733aad71bd36a78b Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Mon, 15 Dec 2025 11:25:04 +0100 Subject: [PATCH 001/110] JSON schema now has consistent example typing for numbers --- relecov_tools/build_schema.py | 54 +++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 3f863046..81a8a0cf 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -255,6 +255,8 @@ def _load_laboratory_addresses(self): def validate_database_definition(self, json_data): """Validate the mandatory features and ensure: - No duplicate enum values in the JSON schema. + - All fields have an example. + - All examples should have the same type as JSON schema. - Date formats follow 'YYYY-MM-DD'. Args: @@ -264,10 +266,13 @@ def validate_database_definition(self, json_data): dict: A dictionary containing errors found, categorized by: - Missing features - Duplicate enums + - Missing examples + - Invalid example types - Incorrect date formats """ log_errors = { "missing_features": {}, + "missing_examples": {}, "duplicate_enums": {}, "invalid_example_types": {}, "invalid_date_formats": {}, @@ -309,24 +314,37 @@ def validate_database_definition(self, json_data): ] log_errors["duplicate_enums"][prop_name] = duplicates - # Check date format for properties with type=string and format=date - if ( - prop_features["type"] == "string" - and prop_features.get("format") == "date" - ): - example = prop_features.get("examples") - if example: - if isinstance(example, datetime): - example = example.strftime("%Y-%m-%d") - if isinstance(example, str): - try: - datetime.strptime(example, "%Y-%m-%d") - except ValueError: - if prop_name not in log_errors["invalid_date_formats"]: - log_errors["invalid_date_formats"][prop_name] = [] - log_errors["invalid_date_formats"][prop_name].append( - f"Invalid date format '{example}', expected 'YYYY-MM-DD'" - ) + + # Check for missing examples + example = prop_features.get("examples") + if example is None: + log_errors["missing_examples"][prop_name] = [f"Missing example."] + + feature_type = prop_features["type"] + match feature_type: + # Check date format for properties with type=string and format=date + case "string": + if prop_features.get("format") == "date": + if isinstance(example, datetime): + example = example.strftime("%Y-%m-%d") + if isinstance(example, str): + try: + datetime.strptime(example, "%Y-%m-%d") + except ValueError: + if prop_name not in log_errors["invalid_date_formats"]: + log_errors["invalid_date_formats"][prop_name] = [] + log_errors["invalid_date_formats"][prop_name].append( + f"Invalid date format '{example}', expected 'YYYY-MM-DD'" + ) + + case "integer" | "number": + function_to_convert = float if feature_type == "number" else int + try: + example = function_to_convert(example) + except ValueError: + log_errors["invalid_example_types"][prop_name] = [ + f"Value {example} is not a valid {feature_type}" + ] # return log errors if any if any(log_errors.values()): From fb4f1302b4dd09dd5047537dc37b049e35eac4ec Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Mon, 15 Dec 2025 11:33:30 +0100 Subject: [PATCH 002/110] now lints description --- relecov_tools/build_schema.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 81a8a0cf..6504ebe1 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -481,9 +481,18 @@ def handle_nan(value): items = value.split("; ") if remove_ontology and target_key == "enum": items = [re.sub(r"\s*\[.*?\]", "", item).strip() for item in items] - json_dict[target_key] = items if target_key == "enum" else [value] + # Examples for integer/number fields should be consistent. + try: + items = [float(x) for x in items] + items = [int(x) if x.is_integer() else x for x in items] + except ValueError: + pass + json_dict[target_key] = items elif target_key == "description": - json_dict[target_key] = handle_nan(data_dict.get(target_key, "")) + json_dict[target_key] = handle_nan(data_dict.get(target_key, "")).strip() + if (not json_dict[target_key].endswith(".") + and not json_dict["description"].endswith(")")): + json_dict[target_key] = f"{json_dict['target_key']}." else: json_dict[target_key] = handle_nan(data_dict.get(target_key, "")) return json_dict From 76392d0f59e24500efe0860fbb7fc9f11e0f1d7f Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Mon, 15 Dec 2025 11:51:15 +0100 Subject: [PATCH 003/110] Enum storage moved to --- relecov_tools/build_schema.py | 43 +++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 6504ebe1..127d703f 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -481,18 +481,11 @@ def handle_nan(value): items = value.split("; ") if remove_ontology and target_key == "enum": items = [re.sub(r"\s*\[.*?\]", "", item).strip() for item in items] - # Examples for integer/number fields should be consistent. - try: - items = [float(x) for x in items] - items = [int(x) if x.is_integer() else x for x in items] - except ValueError: - pass - json_dict[target_key] = items elif target_key == "description": json_dict[target_key] = handle_nan(data_dict.get(target_key, "")).strip() if (not json_dict[target_key].endswith(".") and not json_dict["description"].endswith(")")): - json_dict[target_key] = f"{json_dict['target_key']}." + json_dict[target_key] = f"{json_dict[target_key]}." else: json_dict[target_key] = handle_nan(data_dict.get(target_key, "")) return json_dict @@ -588,6 +581,11 @@ def build_new_schema(self, json_data, schema_draft): common_lab_enum = "; ".join(self._lab_uniques["collecting_institution"]) + # Define "$defs" property. This will hold all enum values for all the properties. + definitions = { + "enums": {} + } + # Read property_ids in the database. # Perform checks and create (for each property) feature object like: # {'example':'A', 'ontology': 'B'...}. @@ -601,7 +599,9 @@ def build_new_schema(self, json_data, schema_draft): "submitting_institution", "sequencing_institution", ): - db_features_dic["enum"] = common_lab_enum + definitions["enums"][property_id] = { + "enum": common_lab_enum + } # Parse property_ids that needs to be incorporated as complex fields in json_schema if json_data[property_id].get("complex_field (Y/N)") == "Y": @@ -653,6 +653,30 @@ def build_new_schema(self, json_data, schema_draft): pass options_dict[key] = value schema_property.update(options_dict) + elif db_feature_key == "enum": + enums_value = self.standard_jsonschema_object( + db_features_dic, db_feature_key, remove_ontology=False + ) + if enums_value: + definitions["enums"][property_id] = enums_value + reference = { + "$ref": f"#/$defs/enums/{property_id}" + } + schema_property.update(reference) + elif db_feature_key == "examples": + examples_value = self.standard_jsonschema_object( + db_features_dic, db_feature_key, remove_ontology=False + ) + if db_features_dic["type"] in ("integer", "number"): + # Examples for integer/number fields should be consistent. + try: + examples_value[db_feature_key] = [float(x) for x in examples_value[db_feature_key]] + examples_value[db_feature_key] = [int(x) if x.is_integer() else x for x in examples_value[db_feature_key]] + except ValueError: + pass + schema_property[schema_feature_key] = examples_value[ + db_feature_key + ] else: std_json_feature = self.standard_jsonschema_object( db_features_dic, db_feature_key, remove_ontology=False @@ -672,6 +696,7 @@ def build_new_schema(self, json_data, schema_draft): required_property_unique.append(key) # TODO: So far it appears at the end of the new json schema. Ideally it should be placed before the properties statement. new_schema["required"] = required_property_unique + new_schema["$defs"] = definitions grouped_anyof = {} for prop_id, prop_data in json_data.items(): From c32bca205eb0a15e142d17670e86fdbfd5046998 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Mon, 15 Dec 2025 12:29:29 +0100 Subject: [PATCH 004/110] Added new template version --- .../Relecov_metadata_template_v3.2.3.xlsx | Bin 235983 -> 0 bytes .../Relecov_metadata_template_v3.2.4.xlsx | Bin 0 -> 236628 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 relecov_tools/assets/Relecov_metadata_template_v3.2.3.xlsx create mode 100644 relecov_tools/assets/Relecov_metadata_template_v3.2.4.xlsx diff --git a/relecov_tools/assets/Relecov_metadata_template_v3.2.3.xlsx b/relecov_tools/assets/Relecov_metadata_template_v3.2.3.xlsx deleted file mode 100755 index 23f913be2e62a7c3719bb099cd4a22f80219ffa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235983 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%0Dlr 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 RAVs`D7zS+LCr<+s3;<*mwMqa0 diff --git a/relecov_tools/assets/Relecov_metadata_template_v3.2.4.xlsx b/relecov_tools/assets/Relecov_metadata_template_v3.2.4.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..984961dbbcce28eb3f16a143e3f21c86fe152785 GIT binary patch literal 236628 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 Im;odh0O>kfO#lD@ literal 0 HcmV?d00001 From 807aaf86b8d0c4a850f7aefde13f70083d30bde6 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Mon, 15 Dec 2025 12:29:50 +0100 Subject: [PATCH 005/110] Added v3.2.4 relecov schema --- relecov_tools/schema/relecov_schema.json | 8673 +++++++++++----------- 1 file changed, 4474 insertions(+), 4199 deletions(-) diff --git a/relecov_tools/schema/relecov_schema.json b/relecov_tools/schema/relecov_schema.json index 62d2bf57..713996b7 100644 --- a/relecov_tools/schema/relecov_schema.json +++ b/relecov_tools/schema/relecov_schema.json @@ -3,20 +3,11 @@ "$id": "https://github.com/BU-ISCIII/relecov-tools/blob/main/relecov_tools/schema/relecov_schema.json", "title": "relecov-tools Schema.", "description": "Json Schema that specifies the structure, content, and validation rules for relecov-tools", - "version": "3.2.3", + "version": "3.2.4", "type": "object", "properties": { "organism": { - "enum": [ - "Severe acute respiratory syndrome coronavirus 2 [LOINC:LA31065-8]", - "Respiratory syncytial virus [SNOMED:6415009]", - "Influenza virus [SNOMED:725894000]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/organism", "examples": [ "Severe acute respiratory syndrome coronavirus 2 [NCBITaxon:2697049]" ], @@ -34,7 +25,7 @@ ], "ontology": "0", "type": "string", - "description": "Identificator provided by the Public Health system", + "description": "Identificator provided by the Public Health system.", "classification": "Sample collection and processing", "label": "Public Health sample id (SIVIRA)", "fill_mode": "sample", @@ -46,7 +37,7 @@ ], "ontology": "GENEPIO:0001123", "type": "string", - "description": "Sample ID provided by the laboratory that collects the sample, the collecting institution is requested in column L of this file", + "description": "Sample ID provided by the laboratory that collects the sample, the collecting institution is requested in column L of this file.", "classification": "Database Identifiers", "label": "Sample ID given by originating laboratory", "fill_mode": "sample", @@ -58,7 +49,7 @@ ], "ontology": "GENEPIO:0001148", "type": "string", - "description": "Sample ID provided by the submitting laboratory that delivers the sample. The submitting laboratory is requested in column M", + "description": "Sample ID provided by the submitting laboratory that delivers the sample. The submitting laboratory is requested in column M.", "classification": "Sequencing", "label": "Sample ID given by the submitting laboratory", "fill_mode": "sample", @@ -70,7 +61,7 @@ ], "ontology": "0", "type": "string", - "description": "Sample identification provided by the microbiology laboratory", + "description": "Sample identification provided by the microbiology laboratory.", "classification": "Sample collection and processing", "label": "Sample ID given in the microbiology lab", "fill_mode": "sample", @@ -82,7 +73,7 @@ ], "ontology": "GENEPIO:0001644", "type": "string", - "description": "Sample identification provided if multiple rna-extraction or passages", + "description": "Sample identification provided if multiple rna-extraction or passages.", "classification": "Database Identifiers", "label": "Sample ID given if multiple rna-extraction or passages", "fill_mode": "sample", @@ -106,7 +97,8 @@ ], "ontology": "GENEPIO:0001139", "type": "string", - "description": "ID generated when uploading the sample to ENA", + "identifiers_org_prefix": "ena.embl", + "description": "ID generated when uploading the sample to ENA.", "classification": "Public databases", "label": "ENA Sample ID", "fill_mode": "batch", @@ -137,895 +129,7 @@ "header": "Y" }, "collecting_institution": { - "enum": [ - "Adinfa, Sociedad Cooperativa Andaluza", - "Alm Univass S.L.", - "Antic Hospital De Sant Jaume I Santa Magdalena", - "Aptima Centre Clinic - Mutua De Terrassa", - "Area Psiquiatrica San Juan De Dios", - "Avances Medicos S.A.", - "Avantmedic", - "Banc de Sang i Teixits Catalunya", - "Benito Menni Complex Assistencial En Salut Mental", - "Benito Menni, Complex Assistencial En Salut Mental", - "Cap La Salut", - "Cap Mataro Centre", - "Cap Montmelo", - "Cap Montornes", - "Casal De Curacio", - "Casaverde Centro De Rehabilitacion Neurologico De Extremadura S.L.", - "Casta Guadarrama", - "Castell D'Oliana Residencial,S.L", - "Catlab-Centre Analitiques Terrassa, Aie", - "Centre Collserola Mutual", - "Centre D'Hospitalitzacio I Hospital De Dia Trastorns De La Conducta", - "Centre D'Oftalmologia Barraquer", - "Centre De Prevencio I Rehabilitacio Asepeyo", - "Centre De Salut Doctor Vilaseca-Can Mariner", - "Centre Forum", - "Centre Geriatric Del Maresme", - "Centre Hospitalari Policlinica Barcelona", - "Centre Integral De Serveis En Salut Mental Comunitaria", - "Centre La Creueta", - "Centre Medic Molins, Sl", - "Centre Mq Reus", - "Centre Palamos Gent Gran", - "Centre Polivalent Can Fosc", - "Centre Sanitari Del Solsones, Fpc", - "Centre Social I Sanitari Frederica Montseny", - "Centre Sociosanitari Bernat Jaume", - "Centre Sociosanitari Blauclinic Dolors Aleu", - "Centre Sociosanitari Can Torras", - "Centre Sociosanitari Ciutat De Reus", - "Centre Sociosanitari D'Esplugues", - "Centre Sociosanitari De L'Hospitalet - Consorci Sanitari Integral", - "Centre Sociosanitari De Puigcerda", - "Centre Sociosanitari Del Centre Integral De Salut Cotxeres", - "Centre Sociosanitari El Carme", - "Centre Sociosanitari I Residencia Assistida Salou", - "Centre Sociosanitari Isabel Roig", - "Centre Sociosanitari Llevant", - "Centre Sociosanitari Parc Hospitalari Marti I Julia", - "Centre Sociosanitari Ricard Fortuny", - "Centre Sociosanitari Sant Jordi De La Vall D'Hebron", - "Centre Sociosanitari Sarquavitae Sant Jordi", - "Centre Sociosanitari Verge Del Puig", - "Centres Assistencials Dr. Emili Mira I Lopez (Recinte Torribera).", - "Centro Asistencial Albelda De Iregua", - "Centro Asistencial Hnas. Hospitalarias Del Sagrado Corazon De Jesus", - "Centro Asistencial San Juan De Dios", - "Centro De Atencion A La Salud Mental, La Milagrosa", - "Centro De Rehabilitacion Neurologica Casaverde", - "Centro De Rehabilitacion Psicosocial Nuestra Señora Del Pilar", - "Centro De Rehabilitacion Psicosocial San Juan De Dios", - "Centro De Rehabilitacion Psicosocial Santo Cristo De Los Milagros", - "Centro De Tratamiento De Drogodependientes El Alba", - "Centro De Tratamiento Integral Montevil", - "Centro Habilitado Ernest Lluch", - "Centro Hospitalario Benito Menni", - "Centro Hospitalario De Alta Resolucion De Cazorla", - "Centro Hospitalario Padre Menni", - "Centro Medico De Asturias", - "Centro Medico El Carmen", - "Centro Medico Pintado", - "Centro Medico Teknon, Grupo Quironsalud", - "Centro Neuropsiquiatrico Nuestra Señora Del Carmen", - "Centro Oncoloxico De Galicia", - "Centro Residencial Domusvi La Salut Josep Servat.", - "Centro Salud Mental Perez Espinosa", - "Centro San Francisco Javier", - "Centro San Juan De Dios Ciempozuelos", - "Centro Sanitario Bajo Cinca-Baix Cinca", - "Centro Sanitario Cinco Villas", - "Centro Sanitario Residencial Las Palmas (Cesar Las Palmas)", - "Centro Sociosanitario De Convalecencia Nuestra Señora Virgen Del Carmen", - "Centro Sociosanitario De Convalencencia Los Jazmines", - "Centro Sociosanitario De Merida", - "Centro Sociosanitario De Plasencia", - "Centro Terapeutico Vista Alegre", - "Centro de Investigación Biomédica de Aragón", - "Clinica Activa Mutua 2008", - "Clinica Arcangel San Miguel - Pamplona", - "Clinica Asturias", - "Clinica Bandama", - "Clinica Bofill", - "Clinica Cajal", - "Clinica Cemtro", - "Clinica Corachan", - "Clinica Coroleu - Ssr Hestia.", - "Clinica Creu Blanca", - "Clinica Cristo Rey", - "Clinica De Salud Mental Miguel De Mañara", - "Clinica Diagonal", - "Clinica Doctor Sanz Vazquez", - "Clinica Dr. Leon", - "Clinica El Seranil", - "Clinica Ercilla Mutualia", - "Clinica Galatea", - "Clinica Girona", - "Clinica Guimon, S.A.", - "Clinica Imq Zorrotzaurre", - "Clinica Imske", - "Clinica Indautxu, S.A.", - "Clinica Isadora S.A.", - "Clinica Jorgani", - "Clinica Juaneda", - "Clinica Juaneda Mahon", - "Clinica Juaneda Menorca", - "Clinica La Luz, S.L.", - "Clinica Lluria", - "Clinica Lopez Ibor", - "Clinica Los Alamos", - "Clinica Los Manzanos", - "Clinica Los Naranjos", - "Clinica Luz De Palma", - "Clinica Mc Copernic", - "Clinica Mc Londres", - "Clinica Mi Nova Aliança", - "Clinica Montpellier, Grupo Hla, S.A.U", - "Clinica Nostra Senyora De Guadalupe", - "Clinica Nostra Senyora Del Remei", - "Clinica Nuestra Se?Ora De Aranzazu", - "Clinica Nuestra Señora De La Paz", - "Clinica Perpetuo Socorro De Lerida, Grupo Hla, Slu", - "Clinica Planas", - "Clinica Ponferrada Recoletas", - "Clinica Psicogeriatrica Josefina Arregui", - "Clinica Psiquiatrica Bellavista", - "Clinica Psiquiatrica Padre Menni", - "Clinica Psiquiatrica Somio", - "Clinica Quirurgica Onyar", - "Clinica Residencia El Pinar", - "Clinica Rotger", - "Clinica Sagrada Familia", - "Clinica Salus Infirmorum", - "Clinica San Felipe", - "Clinica San Miguel", - "Clinica San Rafael", - "Clinica Sant Antoni", - "Clinica Sant Josep", - "Clinica Santa Creu", - "Clinica Santa Isabel", - "Clinica Santa Maria De La Asuncion (Inviza S. A.)", - "Clinica Santa Teresa", - "Clinica Soquimex", - "Clinica Tara", - "Clinica Terres De L'Ebre", - "Clinica Tres Torres", - "Clinica Universidad De Navarra", - "Clinica Virgen Blanca", - "Clinica Vistahermosa Grupo Hla", - "Clinicas Del Sur Slu", - "Complejo Asistencial Benito Menni", - "Complejo Asistencial De Soria", - "Complejo Asistencial De Zamora", - "Complejo Asistencial De Ávila", - "Complejo Asistencial Universitario De Burgos", - "Complejo Asistencial Universitario De León", - "Complejo Asistencial Universitario De Palencia", - "Complejo Asistencial Universitario De Salamanca", - "Complejo Hospital Costa Del Sol", - "Complejo Hospital Infanta Margarita", - "Complejo Hospital La Merced", - "Complejo Hospital San Juan De La Cruz", - "Complejo Hospital Universitario Clínico San Cecilio", - "Complejo Hospital Universitario De Jaén", - "Complejo Hospital Universitario De Puerto Real", - "Complejo Hospital Universitario Juan Ramón Jiménez", - "Complejo Hospital Universitario Puerta Del Mar", - "Complejo Hospital Universitario Regional De Málaga", - "Complejo Hospital Universitario Reina Sofía", - "Complejo Hospital Universitario Torrecárdenas", - "Complejo Hospital Universitario Virgen De La Victoria", - "Complejo Hospital Universitario Virgen De Las Nieves", - "Complejo Hospital Universitario Virgen De Valme", - "Complejo Hospital Universitario Virgen Del Rocío", - "Complejo Hospital Universitario Virgen Macarena", - "Complejo Hospital Valle De Los Pedroches", - "Complejo Hospitalario De Albacete", - "Complejo Hospitalario De Cartagena Chc", - "Complejo Hospitalario De Cáceres", - "Complejo Hospitalario De Don Benito-Villanueva De La Serena", - "Complejo Hospitalario De Toledo", - "Complejo Hospitalario Del Área De Salud De Mérida", - "Complejo Hospitalario Gregorio Marañón", - "Complejo Hospitalario Infanta Leonor", - "Complejo Hospitalario La Paz", - "Complejo Hospitalario Llerena-Zafra", - "Complejo Hospitalario San Pedro Hospital De La Rioja", - "Complejo Hospitalario Universitario De Badajoz", - "Complejo Hospitalario Universitario De Canarias", - "Complejo Hospitalario Universitario De Gran Canaria Dr. Negrín", - "Complejo Hospitalario Universitario Insular Materno Infantil", - "Complejo Hospitalario Universitario Nuestra Señora De Candelaria", - "Complejo Instituto Psiquiátrico Servicios De Salud Mental José Germain", - "Complexo Hospitalario Universitario A Coruña", - "Complexo Hospitalario Universitario De Ferrol", - "Complexo Hospitalario Universitario De Lugo", - "Complexo Hospitalario Universitario De Ourense", - "Complexo Hospitalario Universitario De Pontevedra", - "Complexo Hospitalario Universitario De Santiago", - "Complexo Hospitalario Universitario De Vigo", - "Comunitat Terapeutica Arenys De Munt", - "Concheiro Centro Medico Quirurgico", - "Consejería de Sanidad", - "Consorcio Hospital General Universitario De Valencia", - "Consorcio Hospitalario Provincial De Castellon", - "Consorcio LUCIA (SACYL,ITACYL UBU,UVa)", - "Cqm Clinic Maresme, Sl", - "Cti De La Corredoria", - "Eatica", - "Espitau Val D'Aran", - "Fraternidad Muprespa, Mutua Colaboradora Con La Seguridad Social Nº 275", - "Fremap Hospital Majadahonda", - "Fremap, Hospital De Barcelona", - "Fremap, Hospital De Vigo", - "Fremap_Hospital Y Centro De Rehabilitacion De Sevilla", - "Fundacio Hospital De L'Esperit Sant", - "Fundacio Hospital Sant Joan De Deu (Martorell)", - "Fundacio Puigvert - Iuna", - "Fundacio Sanitaria Sant Josep", - "Fundacio Sant Hospital.", - "Fundacion Cudeca. Centro De Cuidados Paliativos", - "Fundacion Hospital De Aviles", - "Fundacion Instituto San Jose", - "Fundacion Instituto Valenciano De Oncologia", - "Fundacion Sanatorio Adaro", - "Fundació Althaia-Manresa", - "Fundació Fisabio", - "Gerencia de Atención Primaria Pontevedra Sur", - "Germanes Hospitalaries. Hospital Sagrat Cor", - "Grupo Quironsalud Pontevedra", - "Hc Marbella International Hospital", - "Helicopteros Sanitarios Hospital", - "Hestia Balaguer.", - "Hestia Duran I Reynals", - "Hestia Gracia", - "Hestia La Robleda", - "Hestia Palau.", - "Hestia San Jose", - "Hm El Pilar", - "Hm Galvez", - "Hm Hospitales 1.989, S.A.", - "Hm Malaga", - "Hm Modelo-Belen", - "Hm Nou Delfos", - "Hm Regla", - "Hospital 9 De Octubre", - "Hospital Aita Menni", - "Hospital Alto Guadalquivir", - "Hospital Arnau De Vilanova", - "Hospital Asepeyo Madrid", - "Hospital Asilo De La Real Piedad De Cehegin", - "Hospital Asociado Universitario Guadarrama", - "Hospital Asociado Universitario Virgen De La Poveda", - "Hospital Beata Maria Ana", - "Hospital Begoña", - "Hospital Bidasoa (Osi Bidasoa)", - "Hospital C. M. Virgen De La Caridad Cartagena", - "Hospital Campo Arañuelo", - "Hospital Can Misses", - "Hospital Carlos Iii", - "Hospital Carmen Y Severo Ochoa", - "Hospital Casaverde Valladolid", - "Hospital Catolico Casa De Salud", - "Hospital Central De La Cruz Roja, San Jose Y Santa Adela", - "Hospital Central De La Defensa Gomez Ulla", - "Hospital Centro De Andalucia", - "Hospital Centro De Cuidados Laguna", - "Hospital Centro Medico Virgen De La Caridad Caravaca", - "Hospital Ciudad De Coria", - "Hospital Ciudad De Telde", - "Hospital Civil", - "Hospital Clinic De Barcelona", - "Hospital Clinic De Barcelona, Seu Plato", - "Hospital Clinic De Barcelona, Seu Sabino De Arana", - "Hospital Clinica Benidorm", - "Hospital Clinico Universitario De Valencia", - "Hospital Clinico Universitario De Valladolid", - "Hospital Clinico Universitario Lozano Blesa", - "Hospital Clinico Universitario Virgen De La Arrixaca", - "Hospital Comarcal", - "Hospital Comarcal D'Amposta", - "Hospital Comarcal De Blanes", - "Hospital Comarcal De L'Alt Penedes", - "Hospital Comarcal De Laredo", - "Hospital Comarcal De Vinaros", - "Hospital Comarcal Del Noroeste", - "Hospital Comarcal Del Pallars", - "Hospital Comarcal D´Inca", - "Hospital Comarcal Mora D'Ebre", - "Hospital Comarcal Sant Jaume De Calella", - "Hospital Cruz Roja De Bilbao - Victoria Eugenia", - "Hospital Cruz Roja De Cordoba", - "Hospital Cruz Roja Gijon", - "Hospital D'Igualada", - "Hospital D'Olot I Comarcal De La Garrotxa", - "Hospital De Alcañiz", - "Hospital De Alta Resolucion De Alcala La Real", - "Hospital De Alta Resolucion De Alcaudete", - "Hospital De Alta Resolucion De Benalmadena", - "Hospital De Alta Resolucion De Ecija", - "Hospital De Alta Resolucion De Especialidades De La Janda", - "Hospital De Alta Resolucion De Estepona", - "Hospital De Alta Resolucion De Guadix", - "Hospital De Alta Resolucion De Lebrija", - "Hospital De Alta Resolucion De Loja", - "Hospital De Alta Resolucion De Moron De La Frontera", - "Hospital De Alta Resolucion De Puente Genil", - "Hospital De Alta Resolucion De Utrera", - "Hospital De Alta Resolucion Eltoyo", - "Hospital De Alta Resolucion Sierra De Segura", - "Hospital De Alta Resolucion Sierra Norte", - "Hospital De Alta Resolucion Valle Del Guadiato", - "Hospital De Antequera", - "Hospital De Barbastro", - "Hospital De Barcelona", - "Hospital De Baza", - "Hospital De Benavente Complejo Asistencial De Zamora", - "Hospital De Berga", - "Hospital De Bermeo", - "Hospital De Calahorra", - "Hospital De Campdevanol", - "Hospital De Cantoblanco", - "Hospital De Cerdanya / Hopital De Cerdagne", - "Hospital De Cronicos De Mislata (Antiguo Hospital Militar De Valencia)", - "Hospital De Cuidados Medios Villademar", - "Hospital De Denia", - "Hospital De Emergencia Covid 19", - "Hospital De Figueres", - "Hospital De Formentera", - "Hospital De Gorliz", - "Hospital De Hellin", - "Hospital De Jaca Salud", - "Hospital De Jarrio", - "Hospital De Jove", - "Hospital De L'Esperança.", - "Hospital De La Axarquia", - "Hospital De La Creu Roja Espanyola", - "Hospital De La Fuenfria", - "Hospital De La Inmaculada Concepcion", - "Hospital De La Malva-Rosa", - "Hospital De La Mujer", - "Hospital De La Reina", - "Hospital De La Rioja", - "Hospital De La Santa Creu", - "Hospital De La Santa Creu I Sant Pau", - "Hospital De La Serrania", - "Hospital De La V.O.T. De San Francisco De Asis", - "Hospital De La Vega Lorenzo Guirao", - "Hospital De Leon Complejo Asistencial Universitario De Leon", - "Hospital De Leza", - "Hospital De Llevant", - "Hospital De Lliria", - "Hospital De Luarca", - "Hospital De Manacor", - "Hospital De Manises", - "Hospital De Mataro", - "Hospital De Mendaro (Osi Bajo Deba)", - "Hospital De Merida", - "Hospital De Mollet", - "Hospital De Montilla", - "Hospital De Neurotraumatologia Y Rehabilitacion Del H.U. Virgen De Las Nieves", - "Hospital De Ofra", - "Hospital De Palamos", - "Hospital De Rehabilitacion Psiquiatrica Prisma", - "Hospital De Rehabilitacion Y Traumatologia Del H.U. Virgen Del Rocio", - "Hospital De Riotinto", - "Hospital De Sabadell", - "Hospital De Sagunto", - "Hospital De Salud Mental Casta Salud Arevalo", - "Hospital De Salud Mental Provincial", - "Hospital De San Antonio", - "Hospital De San Jose", - "Hospital De San Rafael", - "Hospital De Sant Andreu", - "Hospital De Sant Celoni.", - "Hospital De Sant Jaume", - "Hospital De Sant Joan De Deu (Manresa)", - "Hospital De Sant Joan De Deu.", - "Hospital De Sant Joan Despi Moises Broggi", - "Hospital De Sant Llatzer", - "Hospital De Sant Pau I Santa Tecla", - "Hospital De Terrassa.", - "Hospital De Tortosa Verge De La Cinta", - "Hospital De Viladecans", - "Hospital De Zafra", - "Hospital De Zaldibar", - "Hospital De Zamudio", - "Hospital De Zumarraga (Osi Goierri - Alto Urola)", - "Hospital Del Mar", - "Hospital Del Norte", - "Hospital Del Oriente De Asturias Francisco Grande Covian", - "Hospital Del Sur", - "Hospital Del Vendrell", - "Hospital Doctor Moliner", - "Hospital Doctor Oloriz", - "Hospital Doctor Sagaz", - "Hospital Don Benito-Villanueva De La Serena", - "Hospital Dos De Maig", - "Hospital Egarsat Sant Honorat", - "Hospital El Angel", - "Hospital El Bierzo", - "Hospital El Escorial", - "Hospital El Pilar", - "Hospital El Tomillar", - "Hospital Ernest Lluch Martin", - "Hospital Fatima", - "Hospital Francesc De Borja De Gandia", - "Hospital Fuensanta", - "Hospital Fuente Bermeja- Complejo Asistencial Universitario De Burgos-", - "Hospital G. Universitario J.M. Morales Meseguer", - "Hospital Galdakao-Usansolo Asociado A La Upv/Ehu", - "Hospital Garcia Orcoyen", - "Hospital General De Almansa", - "Hospital General De Fuerteventura", - "Hospital General De Granollers.", - "Hospital General De L'Hospitalet", - "Hospital General De La Defensa En Zaragoza", - "Hospital General De La Santisima Trinidad", - "Hospital General De Llerena", - "Hospital General De Mallorca", - "Hospital General De Ontinyent", - "Hospital General De Requena", - "Hospital General De Segovia Complejo Asistencial De Segovia", - "Hospital General De Tomelloso", - "Hospital General De Valdepeñas", - "Hospital General De Villalba", - "Hospital General De Villarrobledo", - "Hospital General La Mancha Centro", - "Hospital General Nuestra Señora Del Prado", - "Hospital General Penitenciari", - "Hospital General Santa Maria Del Puerto", - "Hospital General Universitario De Albacete", - "Hospital General Universitario De Castellon", - "Hospital General Universitario De Ciudad Real", - "Hospital General Universitario De Elche", - "Hospital General Universitario De Elda-Virgen De La Salud", - "Hospital General Universitario Dr. Balmis", - "Hospital General Universitario Gregorio Marañon", - "Hospital General Universitario Los Arcos Del Mar Menor", - "Hospital General Universitario Reina Sofia", - "Hospital General Universitario Santa Lucia", - "Hospital Geriatrico Virgen Del Valle", - "Hospital Gijon", - "Hospital Hernan Cortes Miraflores", - "Hospital Hestia Madrid", - "Hospital Hla Universitario Moncloa", - "Hospital Hm Nuevo Belen", - "Hospital Hm Rosaleda-Hm La Esperanza", - "Hospital Hm San Francisco", - "Hospital Hm Valles", - "Hospital Ibermutuamur - Patologia Laboral", - "Hospital Imed Elche", - "Hospital Imed Gandia", - "Hospital Imed Levante", - "Hospital Imed San Jorge", - "Hospital Infanta Elena", - "Hospital Infanta Margarita", - "Hospital Infantil", - "Hospital Infantil Universitario Niño Jesus", - "Hospital Insular De Lanzarote", - "Hospital Insular Nuestra Señora De Los Reyes", - "Hospital Intermutual De Euskadi", - "Hospital Intermutual De Levante", - "Hospital Internacional Hcb Denia", - "Hospital Internacional Hm Santa Elena", - "Hospital Jaume Nadal Meroles", - "Hospital Jerez Puerta Del Sur", - "Hospital Joan March", - "Hospital Juaneda Muro", - "Hospital La Antigua", - "Hospital La Inmaculada", - "Hospital La Magdalena", - "Hospital La Merced", - "Hospital La Milagrosa S.A.", - "Hospital La Paloma", - "Hospital La Pedrera", - "Hospital La Vega Grupo Hla", - "Hospital Latorre", - "Hospital Lluis Alcanyis De Xativa", - "Hospital Los Madroños", - "Hospital Los Montalvos (Complejo Asistencial Universitario De Salamanca)", - "Hospital Los Morales", - "Hospital Mare De Deu De La Merce", - "Hospital Marina Baixa De La Vila Joiosa", - "Hospital Maritimo De Torremolinos", - "Hospital Materno - Infantil Del H.U. Reina Sofia", - "Hospital Materno Infantil", - "Hospital Materno Infantil Del H.U.R. De Malaga", - "Hospital Materno-Infantil", - "Hospital Materno-Infantil Del H.U. De Jaen", - "Hospital Materno-Infantil Del H.U. Virgen De Las Nieves", - "Hospital Mateu Orfila", - "Hospital Maz", - "Hospital Md Anderson Cancer Center Madrid", - "Hospital Medimar Internacional", - "Hospital Medina Del Campo", - "Hospital Mediterraneo", - "Hospital Mesa Del Castillo", - "Hospital Metropolitano De Jaen", - "Hospital Mompia", - "Hospital Monte Naranco", - "Hospital Monte San Isidro Complejo Asistencial Universitario De Leon", - "Hospital Municipal De Badalona", - "Hospital Mutua Montañesa", - "Hospital Nacional De Paraplejicos", - "Hospital Neurotraumatologico Del H.U. De Jaen", - "Hospital Nisa Aguas Vivas", - "Hospital Ntra. Sra. Del Perpetuo Socorro", - "Hospital Nuestra Señora De America", - "Hospital Nuestra Señora De Gracia", - "Hospital Nuestra Señora De Guadalupe", - "Hospital Nuestra Señora De La Salud Hla Sl", - "Hospital Nuestra Señora De Sonsoles", - "Hospital Obispo Polanco", - "Hospital Ochoa", - "Hospital Palma Del Rio", - "Hospital Pardo De Aravaca", - "Hospital Pare Jofre", - "Hospital Parque", - "Hospital Parque Fuerteventura", - "Hospital Parque Marazuela", - "Hospital Parque San Francisco", - "Hospital Parque Vegas Altas", - "Hospital Perpetuo Socorro", - "Hospital Perpetuo Socorro Alameda", - "Hospital Polivalente Anexo Juan Carlos I", - "Hospital Provincial", - "Hospital Provincial De Avila", - "Hospital Provincial De Zamora Complejo Asistencial De Zamora", - "Hospital Provincial Ntra.Sra.De La Misericordia", - "Hospital Psiquiatric", - "Hospital Psiquiatrico Doctor Rodriguez Lafora", - "Hospital Psiquiatrico Penitenciario", - "Hospital Psiquiatrico Penitenciario De Fontcalent", - "Hospital Psiquiatrico Roman Alberca", - "Hospital Psiquiatrico San Francisco De Asis", - "Hospital Psiquiatrico San Juan De Dios", - "Hospital Psiquiatrico San Luis", - "Hospital Publico Da Barbanza", - "Hospital Publico Da Mariña", - "Hospital Publico De Monforte", - "Hospital Publico De Valdeorras", - "Hospital Publico De Verin", - "Hospital Publico Do Salnes", - "Hospital Publico Virxe Da Xunqueira", - "Hospital Puerta De Andalucia", - "Hospital Punta De Europa", - "Hospital Quiron Campo De Gibraltar", - "Hospital Quiron Salud Costa Adeje", - "Hospital Quiron Salud Del Valles - Clinica Del Valles", - "Hospital Quiron Salud Lugo", - "Hospital Quiron Salud Tenerife", - "Hospital Quiron Salud Valle Del Henares", - "Hospital Quironsalud A Coruña", - "Hospital Quironsalud Albacete", - "Hospital Quironsalud Barcelona", - "Hospital Quironsalud Bizkaia", - "Hospital Quironsalud Caceres", - "Hospital Quironsalud Ciudad Real", - "Hospital Quironsalud Clideba", - "Hospital Quironsalud Cordoba", - "Hospital Quironsalud Huelva", - "Hospital Quironsalud Infanta Luisa", - "Hospital Quironsalud Malaga", - "Hospital Quironsalud Marbella", - "Hospital Quironsalud Murcia", - "Hospital Quironsalud Palmaplanas", - "Hospital Quironsalud Sagrado Corazon", - "Hospital Quironsalud San Jose", - "Hospital Quironsalud Santa Cristina", - "Hospital Quironsalud Son Veri", - "Hospital Quironsalud Sur", - "Hospital Quironsalud Toledo", - "Hospital Quironsalud Torrevieja", - "Hospital Quironsalud Valencia", - "Hospital Quironsalud Vida", - "Hospital Quironsalud Vitoria", - "Hospital Quironsalud Zaragoza", - "Hospital Rafael Mendez", - "Hospital Recoletas Cuenca, S.L.U.", - "Hospital Recoletas De Burgos", - "Hospital Recoletas De Palencia", - "Hospital Recoletas De Zamora", - "Hospital Recoletas Marbella Slu", - "Hospital Recoletas Salud Campo Grande", - "Hospital Recoletas Salud Felipe Ii", - "Hospital Recoletas Segovia Nuestra Señora De La Misericordia", - "Hospital Reina Sofia", - "Hospital Residencia Sant Camil - Consorci Sanitari De L'Alt Penedes I Garraf", - "Hospital Ribera Almendralejo", - "Hospital Ribera Badajoz", - "Hospital Ribera Covadonga", - "Hospital Ribera Juan Cardona", - "Hospital Ribera Polusa", - "Hospital Ribera Povisa", - "Hospital Ricardo Bermingham", - "Hospital Rio Carrion Complejo Asistencial Universitario De Palencia", - "Hospital Royo Villanova", - "Hospital Ruber Internacional", - "Hospital Ruber Juan Bravo", - "Hospital Sagrado Corazon De Jesus", - "Hospital San Agustin", - "Hospital San Camilo", - "Hospital San Carlos De Denia Grupo Hla", - "Hospital San Carlos De San Fernando", - "Hospital San Eloy", - "Hospital San Francisco De Asis", - "Hospital San Jose", - "Hospital San Jose Solimat", - "Hospital San Juan De Dios", - "Hospital San Juan De Dios Burgos", - "Hospital San Juan De Dios De Cordoba", - "Hospital San Juan De Dios De Sevilla", - "Hospital San Juan De Dios Del Aljarafe", - "Hospital San Juan De Dios Donostia", - "Hospital San Juan De Dios Leon", - "Hospital San Juan De Dios Tenerife", - "Hospital San Juan De La Cruz", - "Hospital San Juan Grande", - "Hospital San Lazaro", - "Hospital San Pedro De Alcantara", - "Hospital San Rafael", - "Hospital San Roque De Guia", - "Hospital San Telmo ,Complejo Asistencial Universitario De Palencia", - "Hospital Sanitas Cima", - "Hospital Sant Antoni Abat - Consorci Sanitari Del Garraf.", - "Hospital Sant Joan De Deu", - "Hospital Sant Joan De Deu Inca", - "Hospital Sant Joan De Deu Lleida", - "Hospital Sant Vicent Del Raspeig", - "Hospital Santa Ana", - "Hospital Santa Barbara", - "Hospital Santa Barbara ,Complejo Asistencial De Soria", - "Hospital Santa Caterina-Ias", - "Hospital Santa Clotilde", - "Hospital Santa Isabel Complejo Asistencial Universitario De Leon", - "Hospital Santa Maria", - "Hospital Santa Maria Del Rosell", - "Hospital Santa Marina", - "Hospital Santa Teresa", - "Hospital Santiago Apostol", - "Hospital Santos Reyes", - "Hospital Siberia-Serena", - "Hospital Sierrallana", - "Hospital Sociosanitari De Lloret De Mar", - "Hospital Sociosanitari De Mollet", - "Hospital Sociosanitari Francoli", - "Hospital Sociosanitari Mutuam Girona", - "Hospital Sociosanitari Mutuam Guell", - "Hospital Sociosanitari Pere Virgili", - "Hospital Son Llatzer", - "Hospital Tierra De Barros", - "Hospital Universitari Arnau De Vilanova De Lleida", - "Hospital Universitari De Bellvitge", - "Hospital Universitari De Girona Dr. Josep Trueta", - "Hospital Universitari De Sant Joan De Reus", - "Hospital Universitari De Vic", - "Hospital Universitari General De Catalunya", - "Hospital Universitari Germans Trias I Pujol De Badalona", - "Hospital Universitari Joan Xxiii De Tarragona", - "Hospital Universitari Mutua De Terrassa", - "Hospital Universitari Quir¿N Dexeus", - "Hospital Universitari Sagrat Cor", - "Hospital Universitari Son Espases", - "Hospital Universitari Vall D'Hebron", - "Hospital Universitario 12 De Octubre", - "Hospital Universitario Araba (Sede Txagorritxu Y Sede Santiago)", - "Hospital Universitario Basurto", - "Hospital Universitario Central De Asturias", - "Hospital Universitario Clinico San Carlos", - "Hospital Universitario Clinico San Cecilio", - "Hospital Universitario Costa Del Sol", - "Hospital Universitario Cruces", - "Hospital Universitario De Badajoz", - "Hospital Universitario De Burgos Complejo Asistencial Univer. De Burgos", - "Hospital Universitario De Cabueñes", - "Hospital Universitario De Caceres", - "Hospital Universitario De Canarias", - "Hospital Universitario De Ceuta", - "Hospital Universitario De Fuenlabrada", - "Hospital Universitario De Getafe", - "Hospital Universitario De Gran Canaria Dr. Negrin", - "Hospital Universitario De Guadalajara", - "Hospital Universitario De Jaen", - "Hospital Universitario De Jerez De La Frontera", - "Hospital Universitario De La Linea De La Concepcion", - "Hospital Universitario De La Plana", - "Hospital Universitario De La Princesa", - "Hospital Universitario De La Ribera", - "Hospital Universitario De Mostoles", - "Hospital Universitario De Navarra", - "Hospital Universitario De Poniente", - "Hospital Universitario De Puerto Real", - "Hospital Universitario De Salamanca ,Complejo Asistencial Universitario De", - "Hospital Universitario De Salud Mental Juan Carlos I", - "Hospital Universitario De Toledo (Hut)", - "Hospital Universitario De Torrejon", - "Hospital Universitario De Torrevieja", - "Hospital Universitario Del Henares", - "Hospital Universitario Del Sureste", - "Hospital Universitario Del Tajo", - "Hospital Universitario Donostia", - "Hospital Universitario Dr. Jose Molina Orosa", - "Hospital Universitario Dr. Peset Aleixandre", - "Hospital Universitario Fundacion Alcorcon", - "Hospital Universitario Fundacion Jimenez Diaz", - "Hospital Universitario General De La Palma", - "Hospital Universitario Hm Madrid", - "Hospital Universitario Hm Monteprincipe", - "Hospital Universitario Hm Puerta Del Sur", - "Hospital Universitario Hm Sanchinarro", - "Hospital Universitario Hm Torrelodones", - "Hospital Universitario Hospiten Bellevue", - "Hospital Universitario Hospiten Rambla", - "Hospital Universitario Hospiten Sur", - "Hospital Universitario Infanta Cristina", - "Hospital Universitario Infanta Elena", - "Hospital Universitario Infanta Leonor", - "Hospital Universitario Infanta Sofia", - "Hospital Universitario Jose Germain", - "Hospital Universitario Juan Ramon Jimenez", - "Hospital Universitario La Moraleja", - "Hospital Universitario La Paz", - "Hospital Universitario La Zarzuela", - "Hospital Universitario Marques De Valdecilla", - "Hospital Universitario Miguel Servet", - "Hospital Universitario Nuestra Señora De Candelaria", - "Hospital Universitario Nuestra Señora Del Perpetuo Socorro", - "Hospital Universitario Principe De Asturias", - "Hospital Universitario Puerta De Hierro Majadahonda", - "Hospital Universitario Puerta Del Mar", - "Hospital Universitario Quironsalud Madrid", - "Hospital Universitario Ramon Y Cajal", - "Hospital Universitario Regional De Malaga", - "Hospital Universitario Reina Sofia", - "Hospital Universitario Rio Hortega", - "Hospital Universitario San Agustin", - "Hospital Universitario San Jorge", - "Hospital Universitario San Juan De Alicante", - "Hospital Universitario San Pedro", - "Hospital Universitario San Roque Las Palmas", - "Hospital Universitario San Roque Maspalomas", - "Hospital Universitario Santa Cristina", - "Hospital Universitario Severo Ochoa", - "Hospital Universitario Torrecardenas", - "Hospital Universitario Vinalopo", - "Hospital Universitario Virgen De La Victoria", - "Hospital Universitario Virgen De Las Nieves", - "Hospital Universitario Virgen De Valme", - "Hospital Universitario Virgen Del Rocio", - "Hospital Universitario Virgen Macarena", - "Hospital Universitario Vithas Las Palmas", - "Hospital Universitario Y Politecnico La Fe", - "Hospital Urduliz Ospitalea", - "Hospital Valle De Guadalhorce De Cartama", - "Hospital Valle De Laciana", - "Hospital Valle De Los Pedroches", - "Hospital Valle Del Nalon", - "Hospital Vazquez Diaz", - "Hospital Vega Baja De Orihuela", - "Hospital Viamed Bahia De Cadiz", - "Hospital Viamed Montecanal", - "Hospital Viamed Novo Sancti Petri", - "Hospital Viamed San Jose", - "Hospital Viamed Santa Angela De La Cruz", - "Hospital Viamed Santa Elena, S.L", - "Hospital Viamed Santiago", - "Hospital Viamed Tarragona", - "Hospital Victoria Eugenia De La Cruz Roja Española", - "Hospital Virgen De Altagracia", - "Hospital Virgen De La Bella", - "Hospital Virgen De La Concha Complejo Asistencial De Zamora", - "Hospital Virgen De La Luz", - "Hospital Virgen De La Torre", - "Hospital Virgen De Las Montañas", - "Hospital Virgen De Los Lirios", - "Hospital Virgen Del Alcazar De Lorca", - "Hospital Virgen Del Camino", - "Hospital Virgen Del Castillo", - "Hospital Virgen Del Mar", - "Hospital Virgen Del Miron ,Complejo Asistencial De Soria", - "Hospital Virgen Del Puerto", - "Hospital Vital Alvarez Buylla", - "Hospital Vithas Castellon", - "Hospital Vithas Granada", - "Hospital Vithas Parque San Antonio", - "Hospital Vithas Sevilla", - "Hospital Vithas Valencia Consuelo", - "Hospital Vithas Vitoria", - "Hospital Vithas Xanit Estepona", - "Hospital Vithas Xanit Internacional", - "Hospiten Clinica Roca San Agustin", - "Hospiten Lanzarote", - "Idcsalud Mostoles Sa", - "Imed Valencia", - "Institut Catala D'Oncologia - Hospital Duran I Reynals", - "Institut Catala D'Oncologia - Hospital Germans Trias I Pujol", - "Institut Catala D'Oncologia Girona - Hospital Josep Trueta", - "Institut Guttmann", - "Institut Pere Mata, S.A", - "Instituto De Enfermedades Neurologicas De Castilla-La Mancha", - "Instituto De Salud Carlos Iii - Centro Nacional De Microbiologia", - "Instituto De Traumatologia De Union De Mutuas (Matepss Nº 267)", - "Instituto Oftalmologico Fernandez-Vega", - "Instituto Provincial De Rehabilitacion", - "Instituto Tecnológico y de Energías Renovables, S.A. (ITER, S.A.)", - "Ita Canet", - "Ita Clinic Bcn", - "Ita Godella", - "Ita Maresme", - "Ivan Mañero Clinic", - "Juaneda Miramar", - "Lab Clínic ICS Camp de Tarragona-Terres de l'Ebre. Hospital Joan XXIII", - "Laboratori De Referencia De Catalunya", - "Laboratorio Echevarne, Sa", - "Lepant Residencial Qgg, Sl", - "Microbiología HUC San Cecilio", - "Microbiología. Hospital Universitario Virgen del Rocio", - "Ministerio Sanidad", - "Mutua Balear", - "Mutua De Granollers, Mutua De Previsio Social A Prima Fixa", - "Mutualia Clinica Pakea", - "Nou Hospital Evangelic", - "Organizacion Sanitaria Integrada Debagoiena", - "Parc Sanitari Sant Joan De Deu - Numancia", - "Parc Sanitari Sant Joan De Deu - Recinte Sant Boi.", - "Parc Sanitari Sant Joan De Deu - Til·Lers", - "Parc Sanitari Sant Joan De Deu - Uhpp - 1", - "Parc Sanitari Sant Joan De Deu - Uhpp - 2", - "Pius Hospital De Valls", - "Plataforma de Genómica y Bioinformática", - "Plataforma de Medicina Computacional, Fundación Progreso y Salud", - "Policlinica Comarcal Del Vendrell.", - "Policlinica Gipuzkoa", - "Policlinica Nuestra Sra. Del Rosario", - "Policlinico Riojano Nuestra Señora De Valvanera", - "Presidencia del Gobierno", - "Prytanis Hospitalet Centre Sociosanitari", - "Prytanis Sant Boi Centre Sociosanitari", - "Quinta Medica De Reposo", - "Red De Salud Mental De Araba (Hospital Psiquiatrico De Araba)", - "Residencia Alt Camp", - "Residencia De Gent Gran Puig D'En Roca", - "Residencia De Salud Mental Nuestra Se?Ora Del Carmen", - "Residencia Geriatrica Maria Gay", - "Residencia L'Estada", - "Residencia Puig-Reig", - "Residencia Santa Susanna", - "Residencia Santa Tecla Ponent", - "Residencia Terraferma", - "Residencia Vila-Seca", - "Ribera Hospital De Molina", - "Ronda De Dalt, Centre Sociosanitari", - "Sanatorio Bilbaino", - "Sanatorio Dr. Muñoz", - "Sanatorio Esquerdo, S.A.", - "Sanatorio Nuestra Señora Del Rosario", - "Sanatorio Sagrado Corazon", - "Sanatorio San Francisco De Borja Fontilles", - "Sanatorio Usurbil, S. L.", - "Santo Y Real Hospital De Caridad", - "Sar Mont Marti", - "Serveis Clinics, S.A.", - "Servicio Madrileño De Salud", - "Servicio de Microbiologia HU Son Espases", - "Servicios Sanitarios Y Asistenciales", - "U.R.R. De Enfermos Psiquicos Alcohete", - "Unidad De Rehabilitacion De Larga Estancia", - "Unidad Rehabilitadora De Media Estancia Profesor Rey Ardid", - "Unidades Clinicas Y De Rehabilitacion De Salud Mental", - "Unitat Polivalent Benito Menni En Salut Mental De L'Hospitalet-El Prat De Llobregat", - "Unitat Polivalent En Salut Mental D'Amposta", - "Unitat Polivalent Salut Mental Barcelona-Nord", - "Unitat Terapeutica-Educativa Acompanya'M", - "Villablanca Serveis Assistencials, Sa", - "Vithas Hospital Montserrat", - "Vithas Hospital Nosa Señora De Fatima", - "Vithas Hospital Perpetuo Internacional", - "Vithas Hospital Santa Cruz" - ], + "$ref": "#/$defs/enums/collecting_institution", "examples": [ "Hospital Universitario de Ceuta" ], @@ -1038,895 +142,7 @@ "header": "Y" }, "submitting_institution": { - "enum": [ - "Adinfa, Sociedad Cooperativa Andaluza", - "Alm Univass S.L.", - "Antic Hospital De Sant Jaume I Santa Magdalena", - "Aptima Centre Clinic - Mutua De Terrassa", - "Area Psiquiatrica San Juan De Dios", - "Avances Medicos S.A.", - "Avantmedic", - "Banc de Sang i Teixits Catalunya", - "Benito Menni Complex Assistencial En Salut Mental", - "Benito Menni, Complex Assistencial En Salut Mental", - "Cap La Salut", - "Cap Mataro Centre", - "Cap Montmelo", - "Cap Montornes", - "Casal De Curacio", - "Casaverde Centro De Rehabilitacion Neurologico De Extremadura S.L.", - "Casta Guadarrama", - "Castell D'Oliana Residencial,S.L", - "Catlab-Centre Analitiques Terrassa, Aie", - "Centre Collserola Mutual", - "Centre D'Hospitalitzacio I Hospital De Dia Trastorns De La Conducta", - "Centre D'Oftalmologia Barraquer", - "Centre De Prevencio I Rehabilitacio Asepeyo", - "Centre De Salut Doctor Vilaseca-Can Mariner", - "Centre Forum", - "Centre Geriatric Del Maresme", - "Centre Hospitalari Policlinica Barcelona", - "Centre Integral De Serveis En Salut Mental Comunitaria", - "Centre La Creueta", - "Centre Medic Molins, Sl", - "Centre Mq Reus", - "Centre Palamos Gent Gran", - "Centre Polivalent Can Fosc", - "Centre Sanitari Del Solsones, Fpc", - "Centre Social I Sanitari Frederica Montseny", - "Centre Sociosanitari Bernat Jaume", - "Centre Sociosanitari Blauclinic Dolors Aleu", - "Centre Sociosanitari Can Torras", - "Centre Sociosanitari Ciutat De Reus", - "Centre Sociosanitari D'Esplugues", - "Centre Sociosanitari De L'Hospitalet - Consorci Sanitari Integral", - "Centre Sociosanitari De Puigcerda", - "Centre Sociosanitari Del Centre Integral De Salut Cotxeres", - "Centre Sociosanitari El Carme", - "Centre Sociosanitari I Residencia Assistida Salou", - "Centre Sociosanitari Isabel Roig", - "Centre Sociosanitari Llevant", - "Centre Sociosanitari Parc Hospitalari Marti I Julia", - "Centre Sociosanitari Ricard Fortuny", - "Centre Sociosanitari Sant Jordi De La Vall D'Hebron", - "Centre Sociosanitari Sarquavitae Sant Jordi", - "Centre Sociosanitari Verge Del Puig", - "Centres Assistencials Dr. Emili Mira I Lopez (Recinte Torribera).", - "Centro Asistencial Albelda De Iregua", - "Centro Asistencial Hnas. Hospitalarias Del Sagrado Corazon De Jesus", - "Centro Asistencial San Juan De Dios", - "Centro De Atencion A La Salud Mental, La Milagrosa", - "Centro De Rehabilitacion Neurologica Casaverde", - "Centro De Rehabilitacion Psicosocial Nuestra Señora Del Pilar", - "Centro De Rehabilitacion Psicosocial San Juan De Dios", - "Centro De Rehabilitacion Psicosocial Santo Cristo De Los Milagros", - "Centro De Tratamiento De Drogodependientes El Alba", - "Centro De Tratamiento Integral Montevil", - "Centro Habilitado Ernest Lluch", - "Centro Hospitalario Benito Menni", - "Centro Hospitalario De Alta Resolucion De Cazorla", - "Centro Hospitalario Padre Menni", - "Centro Medico De Asturias", - "Centro Medico El Carmen", - "Centro Medico Pintado", - "Centro Medico Teknon, Grupo Quironsalud", - "Centro Neuropsiquiatrico Nuestra Señora Del Carmen", - "Centro Oncoloxico De Galicia", - "Centro Residencial Domusvi La Salut Josep Servat.", - "Centro Salud Mental Perez Espinosa", - "Centro San Francisco Javier", - "Centro San Juan De Dios Ciempozuelos", - "Centro Sanitario Bajo Cinca-Baix Cinca", - "Centro Sanitario Cinco Villas", - "Centro Sanitario Residencial Las Palmas (Cesar Las Palmas)", - "Centro Sociosanitario De Convalecencia Nuestra Señora Virgen Del Carmen", - "Centro Sociosanitario De Convalencencia Los Jazmines", - "Centro Sociosanitario De Merida", - "Centro Sociosanitario De Plasencia", - "Centro Terapeutico Vista Alegre", - "Centro de Investigación Biomédica de Aragón", - "Clinica Activa Mutua 2008", - "Clinica Arcangel San Miguel - Pamplona", - "Clinica Asturias", - "Clinica Bandama", - "Clinica Bofill", - "Clinica Cajal", - "Clinica Cemtro", - "Clinica Corachan", - "Clinica Coroleu - Ssr Hestia.", - "Clinica Creu Blanca", - "Clinica Cristo Rey", - "Clinica De Salud Mental Miguel De Mañara", - "Clinica Diagonal", - "Clinica Doctor Sanz Vazquez", - "Clinica Dr. Leon", - "Clinica El Seranil", - "Clinica Ercilla Mutualia", - "Clinica Galatea", - "Clinica Girona", - "Clinica Guimon, S.A.", - "Clinica Imq Zorrotzaurre", - "Clinica Imske", - "Clinica Indautxu, S.A.", - "Clinica Isadora S.A.", - "Clinica Jorgani", - "Clinica Juaneda", - "Clinica Juaneda Mahon", - "Clinica Juaneda Menorca", - "Clinica La Luz, S.L.", - "Clinica Lluria", - "Clinica Lopez Ibor", - "Clinica Los Alamos", - "Clinica Los Manzanos", - "Clinica Los Naranjos", - "Clinica Luz De Palma", - "Clinica Mc Copernic", - "Clinica Mc Londres", - "Clinica Mi Nova Aliança", - "Clinica Montpellier, Grupo Hla, S.A.U", - "Clinica Nostra Senyora De Guadalupe", - "Clinica Nostra Senyora Del Remei", - "Clinica Nuestra Se?Ora De Aranzazu", - "Clinica Nuestra Señora De La Paz", - "Clinica Perpetuo Socorro De Lerida, Grupo Hla, Slu", - "Clinica Planas", - "Clinica Ponferrada Recoletas", - "Clinica Psicogeriatrica Josefina Arregui", - "Clinica Psiquiatrica Bellavista", - "Clinica Psiquiatrica Padre Menni", - "Clinica Psiquiatrica Somio", - "Clinica Quirurgica Onyar", - "Clinica Residencia El Pinar", - "Clinica Rotger", - "Clinica Sagrada Familia", - "Clinica Salus Infirmorum", - "Clinica San Felipe", - "Clinica San Miguel", - "Clinica San Rafael", - "Clinica Sant Antoni", - "Clinica Sant Josep", - "Clinica Santa Creu", - "Clinica Santa Isabel", - "Clinica Santa Maria De La Asuncion (Inviza S. A.)", - "Clinica Santa Teresa", - "Clinica Soquimex", - "Clinica Tara", - "Clinica Terres De L'Ebre", - "Clinica Tres Torres", - "Clinica Universidad De Navarra", - "Clinica Virgen Blanca", - "Clinica Vistahermosa Grupo Hla", - "Clinicas Del Sur Slu", - "Complejo Asistencial Benito Menni", - "Complejo Asistencial De Soria", - "Complejo Asistencial De Zamora", - "Complejo Asistencial De Ávila", - "Complejo Asistencial Universitario De Burgos", - "Complejo Asistencial Universitario De León", - "Complejo Asistencial Universitario De Palencia", - "Complejo Asistencial Universitario De Salamanca", - "Complejo Hospital Costa Del Sol", - "Complejo Hospital Infanta Margarita", - "Complejo Hospital La Merced", - "Complejo Hospital San Juan De La Cruz", - "Complejo Hospital Universitario Clínico San Cecilio", - "Complejo Hospital Universitario De Jaén", - "Complejo Hospital Universitario De Puerto Real", - "Complejo Hospital Universitario Juan Ramón Jiménez", - "Complejo Hospital Universitario Puerta Del Mar", - "Complejo Hospital Universitario Regional De Málaga", - "Complejo Hospital Universitario Reina Sofía", - "Complejo Hospital Universitario Torrecárdenas", - "Complejo Hospital Universitario Virgen De La Victoria", - "Complejo Hospital Universitario Virgen De Las Nieves", - "Complejo Hospital Universitario Virgen De Valme", - "Complejo Hospital Universitario Virgen Del Rocío", - "Complejo Hospital Universitario Virgen Macarena", - "Complejo Hospital Valle De Los Pedroches", - "Complejo Hospitalario De Albacete", - "Complejo Hospitalario De Cartagena Chc", - "Complejo Hospitalario De Cáceres", - "Complejo Hospitalario De Don Benito-Villanueva De La Serena", - "Complejo Hospitalario De Toledo", - "Complejo Hospitalario Del Área De Salud De Mérida", - "Complejo Hospitalario Gregorio Marañón", - "Complejo Hospitalario Infanta Leonor", - "Complejo Hospitalario La Paz", - "Complejo Hospitalario Llerena-Zafra", - "Complejo Hospitalario San Pedro Hospital De La Rioja", - "Complejo Hospitalario Universitario De Badajoz", - "Complejo Hospitalario Universitario De Canarias", - "Complejo Hospitalario Universitario De Gran Canaria Dr. Negrín", - "Complejo Hospitalario Universitario Insular Materno Infantil", - "Complejo Hospitalario Universitario Nuestra Señora De Candelaria", - "Complejo Instituto Psiquiátrico Servicios De Salud Mental José Germain", - "Complexo Hospitalario Universitario A Coruña", - "Complexo Hospitalario Universitario De Ferrol", - "Complexo Hospitalario Universitario De Lugo", - "Complexo Hospitalario Universitario De Ourense", - "Complexo Hospitalario Universitario De Pontevedra", - "Complexo Hospitalario Universitario De Santiago", - "Complexo Hospitalario Universitario De Vigo", - "Comunitat Terapeutica Arenys De Munt", - "Concheiro Centro Medico Quirurgico", - "Consejería de Sanidad", - "Consorcio Hospital General Universitario De Valencia", - "Consorcio Hospitalario Provincial De Castellon", - "Consorcio LUCIA (SACYL,ITACYL UBU,UVa)", - "Cqm Clinic Maresme, Sl", - "Cti De La Corredoria", - "Eatica", - "Espitau Val D'Aran", - "Fraternidad Muprespa, Mutua Colaboradora Con La Seguridad Social Nº 275", - "Fremap Hospital Majadahonda", - "Fremap, Hospital De Barcelona", - "Fremap, Hospital De Vigo", - "Fremap_Hospital Y Centro De Rehabilitacion De Sevilla", - "Fundacio Hospital De L'Esperit Sant", - "Fundacio Hospital Sant Joan De Deu (Martorell)", - "Fundacio Puigvert - Iuna", - "Fundacio Sanitaria Sant Josep", - "Fundacio Sant Hospital.", - "Fundacion Cudeca. Centro De Cuidados Paliativos", - "Fundacion Hospital De Aviles", - "Fundacion Instituto San Jose", - "Fundacion Instituto Valenciano De Oncologia", - "Fundacion Sanatorio Adaro", - "Fundació Althaia-Manresa", - "Fundació Fisabio", - "Gerencia de Atención Primaria Pontevedra Sur", - "Germanes Hospitalaries. Hospital Sagrat Cor", - "Grupo Quironsalud Pontevedra", - "Hc Marbella International Hospital", - "Helicopteros Sanitarios Hospital", - "Hestia Balaguer.", - "Hestia Duran I Reynals", - "Hestia Gracia", - "Hestia La Robleda", - "Hestia Palau.", - "Hestia San Jose", - "Hm El Pilar", - "Hm Galvez", - "Hm Hospitales 1.989, S.A.", - "Hm Malaga", - "Hm Modelo-Belen", - "Hm Nou Delfos", - "Hm Regla", - "Hospital 9 De Octubre", - "Hospital Aita Menni", - "Hospital Alto Guadalquivir", - "Hospital Arnau De Vilanova", - "Hospital Asepeyo Madrid", - "Hospital Asilo De La Real Piedad De Cehegin", - "Hospital Asociado Universitario Guadarrama", - "Hospital Asociado Universitario Virgen De La Poveda", - "Hospital Beata Maria Ana", - "Hospital Begoña", - "Hospital Bidasoa (Osi Bidasoa)", - "Hospital C. M. Virgen De La Caridad Cartagena", - "Hospital Campo Arañuelo", - "Hospital Can Misses", - "Hospital Carlos Iii", - "Hospital Carmen Y Severo Ochoa", - "Hospital Casaverde Valladolid", - "Hospital Catolico Casa De Salud", - "Hospital Central De La Cruz Roja, San Jose Y Santa Adela", - "Hospital Central De La Defensa Gomez Ulla", - "Hospital Centro De Andalucia", - "Hospital Centro De Cuidados Laguna", - "Hospital Centro Medico Virgen De La Caridad Caravaca", - "Hospital Ciudad De Coria", - "Hospital Ciudad De Telde", - "Hospital Civil", - "Hospital Clinic De Barcelona", - "Hospital Clinic De Barcelona, Seu Plato", - "Hospital Clinic De Barcelona, Seu Sabino De Arana", - "Hospital Clinica Benidorm", - "Hospital Clinico Universitario De Valencia", - "Hospital Clinico Universitario De Valladolid", - "Hospital Clinico Universitario Lozano Blesa", - "Hospital Clinico Universitario Virgen De La Arrixaca", - "Hospital Comarcal", - "Hospital Comarcal D'Amposta", - "Hospital Comarcal De Blanes", - "Hospital Comarcal De L'Alt Penedes", - "Hospital Comarcal De Laredo", - "Hospital Comarcal De Vinaros", - "Hospital Comarcal Del Noroeste", - "Hospital Comarcal Del Pallars", - "Hospital Comarcal D´Inca", - "Hospital Comarcal Mora D'Ebre", - "Hospital Comarcal Sant Jaume De Calella", - "Hospital Cruz Roja De Bilbao - Victoria Eugenia", - "Hospital Cruz Roja De Cordoba", - "Hospital Cruz Roja Gijon", - "Hospital D'Igualada", - "Hospital D'Olot I Comarcal De La Garrotxa", - "Hospital De Alcañiz", - "Hospital De Alta Resolucion De Alcala La Real", - "Hospital De Alta Resolucion De Alcaudete", - "Hospital De Alta Resolucion De Benalmadena", - "Hospital De Alta Resolucion De Ecija", - "Hospital De Alta Resolucion De Especialidades De La Janda", - "Hospital De Alta Resolucion De Estepona", - "Hospital De Alta Resolucion De Guadix", - "Hospital De Alta Resolucion De Lebrija", - "Hospital De Alta Resolucion De Loja", - "Hospital De Alta Resolucion De Moron De La Frontera", - "Hospital De Alta Resolucion De Puente Genil", - "Hospital De Alta Resolucion De Utrera", - "Hospital De Alta Resolucion Eltoyo", - "Hospital De Alta Resolucion Sierra De Segura", - "Hospital De Alta Resolucion Sierra Norte", - "Hospital De Alta Resolucion Valle Del Guadiato", - "Hospital De Antequera", - "Hospital De Barbastro", - "Hospital De Barcelona", - "Hospital De Baza", - "Hospital De Benavente Complejo Asistencial De Zamora", - "Hospital De Berga", - "Hospital De Bermeo", - "Hospital De Calahorra", - "Hospital De Campdevanol", - "Hospital De Cantoblanco", - "Hospital De Cerdanya / Hopital De Cerdagne", - "Hospital De Cronicos De Mislata (Antiguo Hospital Militar De Valencia)", - "Hospital De Cuidados Medios Villademar", - "Hospital De Denia", - "Hospital De Emergencia Covid 19", - "Hospital De Figueres", - "Hospital De Formentera", - "Hospital De Gorliz", - "Hospital De Hellin", - "Hospital De Jaca Salud", - "Hospital De Jarrio", - "Hospital De Jove", - "Hospital De L'Esperança.", - "Hospital De La Axarquia", - "Hospital De La Creu Roja Espanyola", - "Hospital De La Fuenfria", - "Hospital De La Inmaculada Concepcion", - "Hospital De La Malva-Rosa", - "Hospital De La Mujer", - "Hospital De La Reina", - "Hospital De La Rioja", - "Hospital De La Santa Creu", - "Hospital De La Santa Creu I Sant Pau", - "Hospital De La Serrania", - "Hospital De La V.O.T. De San Francisco De Asis", - "Hospital De La Vega Lorenzo Guirao", - "Hospital De Leon Complejo Asistencial Universitario De Leon", - "Hospital De Leza", - "Hospital De Llevant", - "Hospital De Lliria", - "Hospital De Luarca", - "Hospital De Manacor", - "Hospital De Manises", - "Hospital De Mataro", - "Hospital De Mendaro (Osi Bajo Deba)", - "Hospital De Merida", - "Hospital De Mollet", - "Hospital De Montilla", - "Hospital De Neurotraumatologia Y Rehabilitacion Del H.U. Virgen De Las Nieves", - "Hospital De Ofra", - "Hospital De Palamos", - "Hospital De Rehabilitacion Psiquiatrica Prisma", - "Hospital De Rehabilitacion Y Traumatologia Del H.U. Virgen Del Rocio", - "Hospital De Riotinto", - "Hospital De Sabadell", - "Hospital De Sagunto", - "Hospital De Salud Mental Casta Salud Arevalo", - "Hospital De Salud Mental Provincial", - "Hospital De San Antonio", - "Hospital De San Jose", - "Hospital De San Rafael", - "Hospital De Sant Andreu", - "Hospital De Sant Celoni.", - "Hospital De Sant Jaume", - "Hospital De Sant Joan De Deu (Manresa)", - "Hospital De Sant Joan De Deu.", - "Hospital De Sant Joan Despi Moises Broggi", - "Hospital De Sant Llatzer", - "Hospital De Sant Pau I Santa Tecla", - "Hospital De Terrassa.", - "Hospital De Tortosa Verge De La Cinta", - "Hospital De Viladecans", - "Hospital De Zafra", - "Hospital De Zaldibar", - "Hospital De Zamudio", - "Hospital De Zumarraga (Osi Goierri - Alto Urola)", - "Hospital Del Mar", - "Hospital Del Norte", - "Hospital Del Oriente De Asturias Francisco Grande Covian", - "Hospital Del Sur", - "Hospital Del Vendrell", - "Hospital Doctor Moliner", - "Hospital Doctor Oloriz", - "Hospital Doctor Sagaz", - "Hospital Don Benito-Villanueva De La Serena", - "Hospital Dos De Maig", - "Hospital Egarsat Sant Honorat", - "Hospital El Angel", - "Hospital El Bierzo", - "Hospital El Escorial", - "Hospital El Pilar", - "Hospital El Tomillar", - "Hospital Ernest Lluch Martin", - "Hospital Fatima", - "Hospital Francesc De Borja De Gandia", - "Hospital Fuensanta", - "Hospital Fuente Bermeja- Complejo Asistencial Universitario De Burgos-", - "Hospital G. Universitario J.M. Morales Meseguer", - "Hospital Galdakao-Usansolo Asociado A La Upv/Ehu", - "Hospital Garcia Orcoyen", - "Hospital General De Almansa", - "Hospital General De Fuerteventura", - "Hospital General De Granollers.", - "Hospital General De L'Hospitalet", - "Hospital General De La Defensa En Zaragoza", - "Hospital General De La Santisima Trinidad", - "Hospital General De Llerena", - "Hospital General De Mallorca", - "Hospital General De Ontinyent", - "Hospital General De Requena", - "Hospital General De Segovia Complejo Asistencial De Segovia", - "Hospital General De Tomelloso", - "Hospital General De Valdepeñas", - "Hospital General De Villalba", - "Hospital General De Villarrobledo", - "Hospital General La Mancha Centro", - "Hospital General Nuestra Señora Del Prado", - "Hospital General Penitenciari", - "Hospital General Santa Maria Del Puerto", - "Hospital General Universitario De Albacete", - "Hospital General Universitario De Castellon", - "Hospital General Universitario De Ciudad Real", - "Hospital General Universitario De Elche", - "Hospital General Universitario De Elda-Virgen De La Salud", - "Hospital General Universitario Dr. Balmis", - "Hospital General Universitario Gregorio Marañon", - "Hospital General Universitario Los Arcos Del Mar Menor", - "Hospital General Universitario Reina Sofia", - "Hospital General Universitario Santa Lucia", - "Hospital Geriatrico Virgen Del Valle", - "Hospital Gijon", - "Hospital Hernan Cortes Miraflores", - "Hospital Hestia Madrid", - "Hospital Hla Universitario Moncloa", - "Hospital Hm Nuevo Belen", - "Hospital Hm Rosaleda-Hm La Esperanza", - "Hospital Hm San Francisco", - "Hospital Hm Valles", - "Hospital Ibermutuamur - Patologia Laboral", - "Hospital Imed Elche", - "Hospital Imed Gandia", - "Hospital Imed Levante", - "Hospital Imed San Jorge", - "Hospital Infanta Elena", - "Hospital Infanta Margarita", - "Hospital Infantil", - "Hospital Infantil Universitario Niño Jesus", - "Hospital Insular De Lanzarote", - "Hospital Insular Nuestra Señora De Los Reyes", - "Hospital Intermutual De Euskadi", - "Hospital Intermutual De Levante", - "Hospital Internacional Hcb Denia", - "Hospital Internacional Hm Santa Elena", - "Hospital Jaume Nadal Meroles", - "Hospital Jerez Puerta Del Sur", - "Hospital Joan March", - "Hospital Juaneda Muro", - "Hospital La Antigua", - "Hospital La Inmaculada", - "Hospital La Magdalena", - "Hospital La Merced", - "Hospital La Milagrosa S.A.", - "Hospital La Paloma", - "Hospital La Pedrera", - "Hospital La Vega Grupo Hla", - "Hospital Latorre", - "Hospital Lluis Alcanyis De Xativa", - "Hospital Los Madroños", - "Hospital Los Montalvos (Complejo Asistencial Universitario De Salamanca)", - "Hospital Los Morales", - "Hospital Mare De Deu De La Merce", - "Hospital Marina Baixa De La Vila Joiosa", - "Hospital Maritimo De Torremolinos", - "Hospital Materno - Infantil Del H.U. Reina Sofia", - "Hospital Materno Infantil", - "Hospital Materno Infantil Del H.U.R. De Malaga", - "Hospital Materno-Infantil", - "Hospital Materno-Infantil Del H.U. De Jaen", - "Hospital Materno-Infantil Del H.U. Virgen De Las Nieves", - "Hospital Mateu Orfila", - "Hospital Maz", - "Hospital Md Anderson Cancer Center Madrid", - "Hospital Medimar Internacional", - "Hospital Medina Del Campo", - "Hospital Mediterraneo", - "Hospital Mesa Del Castillo", - "Hospital Metropolitano De Jaen", - "Hospital Mompia", - "Hospital Monte Naranco", - "Hospital Monte San Isidro Complejo Asistencial Universitario De Leon", - "Hospital Municipal De Badalona", - "Hospital Mutua Montañesa", - "Hospital Nacional De Paraplejicos", - "Hospital Neurotraumatologico Del H.U. De Jaen", - "Hospital Nisa Aguas Vivas", - "Hospital Ntra. Sra. Del Perpetuo Socorro", - "Hospital Nuestra Señora De America", - "Hospital Nuestra Señora De Gracia", - "Hospital Nuestra Señora De Guadalupe", - "Hospital Nuestra Señora De La Salud Hla Sl", - "Hospital Nuestra Señora De Sonsoles", - "Hospital Obispo Polanco", - "Hospital Ochoa", - "Hospital Palma Del Rio", - "Hospital Pardo De Aravaca", - "Hospital Pare Jofre", - "Hospital Parque", - "Hospital Parque Fuerteventura", - "Hospital Parque Marazuela", - "Hospital Parque San Francisco", - "Hospital Parque Vegas Altas", - "Hospital Perpetuo Socorro", - "Hospital Perpetuo Socorro Alameda", - "Hospital Polivalente Anexo Juan Carlos I", - "Hospital Provincial", - "Hospital Provincial De Avila", - "Hospital Provincial De Zamora Complejo Asistencial De Zamora", - "Hospital Provincial Ntra.Sra.De La Misericordia", - "Hospital Psiquiatric", - "Hospital Psiquiatrico Doctor Rodriguez Lafora", - "Hospital Psiquiatrico Penitenciario", - "Hospital Psiquiatrico Penitenciario De Fontcalent", - "Hospital Psiquiatrico Roman Alberca", - "Hospital Psiquiatrico San Francisco De Asis", - "Hospital Psiquiatrico San Juan De Dios", - "Hospital Psiquiatrico San Luis", - "Hospital Publico Da Barbanza", - "Hospital Publico Da Mariña", - "Hospital Publico De Monforte", - "Hospital Publico De Valdeorras", - "Hospital Publico De Verin", - "Hospital Publico Do Salnes", - "Hospital Publico Virxe Da Xunqueira", - "Hospital Puerta De Andalucia", - "Hospital Punta De Europa", - "Hospital Quiron Campo De Gibraltar", - "Hospital Quiron Salud Costa Adeje", - "Hospital Quiron Salud Del Valles - Clinica Del Valles", - "Hospital Quiron Salud Lugo", - "Hospital Quiron Salud Tenerife", - "Hospital Quiron Salud Valle Del Henares", - "Hospital Quironsalud A Coruña", - "Hospital Quironsalud Albacete", - "Hospital Quironsalud Barcelona", - "Hospital Quironsalud Bizkaia", - "Hospital Quironsalud Caceres", - "Hospital Quironsalud Ciudad Real", - "Hospital Quironsalud Clideba", - "Hospital Quironsalud Cordoba", - "Hospital Quironsalud Huelva", - "Hospital Quironsalud Infanta Luisa", - "Hospital Quironsalud Malaga", - "Hospital Quironsalud Marbella", - "Hospital Quironsalud Murcia", - "Hospital Quironsalud Palmaplanas", - "Hospital Quironsalud Sagrado Corazon", - "Hospital Quironsalud San Jose", - "Hospital Quironsalud Santa Cristina", - "Hospital Quironsalud Son Veri", - "Hospital Quironsalud Sur", - "Hospital Quironsalud Toledo", - "Hospital Quironsalud Torrevieja", - "Hospital Quironsalud Valencia", - "Hospital Quironsalud Vida", - "Hospital Quironsalud Vitoria", - "Hospital Quironsalud Zaragoza", - "Hospital Rafael Mendez", - "Hospital Recoletas Cuenca, S.L.U.", - "Hospital Recoletas De Burgos", - "Hospital Recoletas De Palencia", - "Hospital Recoletas De Zamora", - "Hospital Recoletas Marbella Slu", - "Hospital Recoletas Salud Campo Grande", - "Hospital Recoletas Salud Felipe Ii", - "Hospital Recoletas Segovia Nuestra Señora De La Misericordia", - "Hospital Reina Sofia", - "Hospital Residencia Sant Camil - Consorci Sanitari De L'Alt Penedes I Garraf", - "Hospital Ribera Almendralejo", - "Hospital Ribera Badajoz", - "Hospital Ribera Covadonga", - "Hospital Ribera Juan Cardona", - "Hospital Ribera Polusa", - "Hospital Ribera Povisa", - "Hospital Ricardo Bermingham", - "Hospital Rio Carrion Complejo Asistencial Universitario De Palencia", - "Hospital Royo Villanova", - "Hospital Ruber Internacional", - "Hospital Ruber Juan Bravo", - "Hospital Sagrado Corazon De Jesus", - "Hospital San Agustin", - "Hospital San Camilo", - "Hospital San Carlos De Denia Grupo Hla", - "Hospital San Carlos De San Fernando", - "Hospital San Eloy", - "Hospital San Francisco De Asis", - "Hospital San Jose", - "Hospital San Jose Solimat", - "Hospital San Juan De Dios", - "Hospital San Juan De Dios Burgos", - "Hospital San Juan De Dios De Cordoba", - "Hospital San Juan De Dios De Sevilla", - "Hospital San Juan De Dios Del Aljarafe", - "Hospital San Juan De Dios Donostia", - "Hospital San Juan De Dios Leon", - "Hospital San Juan De Dios Tenerife", - "Hospital San Juan De La Cruz", - "Hospital San Juan Grande", - "Hospital San Lazaro", - "Hospital San Pedro De Alcantara", - "Hospital San Rafael", - "Hospital San Roque De Guia", - "Hospital San Telmo ,Complejo Asistencial Universitario De Palencia", - "Hospital Sanitas Cima", - "Hospital Sant Antoni Abat - Consorci Sanitari Del Garraf.", - "Hospital Sant Joan De Deu", - "Hospital Sant Joan De Deu Inca", - "Hospital Sant Joan De Deu Lleida", - "Hospital Sant Vicent Del Raspeig", - "Hospital Santa Ana", - "Hospital Santa Barbara", - "Hospital Santa Barbara ,Complejo Asistencial De Soria", - "Hospital Santa Caterina-Ias", - "Hospital Santa Clotilde", - "Hospital Santa Isabel Complejo Asistencial Universitario De Leon", - "Hospital Santa Maria", - "Hospital Santa Maria Del Rosell", - "Hospital Santa Marina", - "Hospital Santa Teresa", - "Hospital Santiago Apostol", - "Hospital Santos Reyes", - "Hospital Siberia-Serena", - "Hospital Sierrallana", - "Hospital Sociosanitari De Lloret De Mar", - "Hospital Sociosanitari De Mollet", - "Hospital Sociosanitari Francoli", - "Hospital Sociosanitari Mutuam Girona", - "Hospital Sociosanitari Mutuam Guell", - "Hospital Sociosanitari Pere Virgili", - "Hospital Son Llatzer", - "Hospital Tierra De Barros", - "Hospital Universitari Arnau De Vilanova De Lleida", - "Hospital Universitari De Bellvitge", - "Hospital Universitari De Girona Dr. Josep Trueta", - "Hospital Universitari De Sant Joan De Reus", - "Hospital Universitari De Vic", - "Hospital Universitari General De Catalunya", - "Hospital Universitari Germans Trias I Pujol De Badalona", - "Hospital Universitari Joan Xxiii De Tarragona", - "Hospital Universitari Mutua De Terrassa", - "Hospital Universitari Quir¿N Dexeus", - "Hospital Universitari Sagrat Cor", - "Hospital Universitari Son Espases", - "Hospital Universitari Vall D'Hebron", - "Hospital Universitario 12 De Octubre", - "Hospital Universitario Araba (Sede Txagorritxu Y Sede Santiago)", - "Hospital Universitario Basurto", - "Hospital Universitario Central De Asturias", - "Hospital Universitario Clinico San Carlos", - "Hospital Universitario Clinico San Cecilio", - "Hospital Universitario Costa Del Sol", - "Hospital Universitario Cruces", - "Hospital Universitario De Badajoz", - "Hospital Universitario De Burgos Complejo Asistencial Univer. De Burgos", - "Hospital Universitario De Cabueñes", - "Hospital Universitario De Caceres", - "Hospital Universitario De Canarias", - "Hospital Universitario De Ceuta", - "Hospital Universitario De Fuenlabrada", - "Hospital Universitario De Getafe", - "Hospital Universitario De Gran Canaria Dr. Negrin", - "Hospital Universitario De Guadalajara", - "Hospital Universitario De Jaen", - "Hospital Universitario De Jerez De La Frontera", - "Hospital Universitario De La Linea De La Concepcion", - "Hospital Universitario De La Plana", - "Hospital Universitario De La Princesa", - "Hospital Universitario De La Ribera", - "Hospital Universitario De Mostoles", - "Hospital Universitario De Navarra", - "Hospital Universitario De Poniente", - "Hospital Universitario De Puerto Real", - "Hospital Universitario De Salamanca ,Complejo Asistencial Universitario De", - "Hospital Universitario De Salud Mental Juan Carlos I", - "Hospital Universitario De Toledo (Hut)", - "Hospital Universitario De Torrejon", - "Hospital Universitario De Torrevieja", - "Hospital Universitario Del Henares", - "Hospital Universitario Del Sureste", - "Hospital Universitario Del Tajo", - "Hospital Universitario Donostia", - "Hospital Universitario Dr. Jose Molina Orosa", - "Hospital Universitario Dr. Peset Aleixandre", - "Hospital Universitario Fundacion Alcorcon", - "Hospital Universitario Fundacion Jimenez Diaz", - "Hospital Universitario General De La Palma", - "Hospital Universitario Hm Madrid", - "Hospital Universitario Hm Monteprincipe", - "Hospital Universitario Hm Puerta Del Sur", - "Hospital Universitario Hm Sanchinarro", - "Hospital Universitario Hm Torrelodones", - "Hospital Universitario Hospiten Bellevue", - "Hospital Universitario Hospiten Rambla", - "Hospital Universitario Hospiten Sur", - "Hospital Universitario Infanta Cristina", - "Hospital Universitario Infanta Elena", - "Hospital Universitario Infanta Leonor", - "Hospital Universitario Infanta Sofia", - "Hospital Universitario Jose Germain", - "Hospital Universitario Juan Ramon Jimenez", - "Hospital Universitario La Moraleja", - "Hospital Universitario La Paz", - "Hospital Universitario La Zarzuela", - "Hospital Universitario Marques De Valdecilla", - "Hospital Universitario Miguel Servet", - "Hospital Universitario Nuestra Señora De Candelaria", - "Hospital Universitario Nuestra Señora Del Perpetuo Socorro", - "Hospital Universitario Principe De Asturias", - "Hospital Universitario Puerta De Hierro Majadahonda", - "Hospital Universitario Puerta Del Mar", - "Hospital Universitario Quironsalud Madrid", - "Hospital Universitario Ramon Y Cajal", - "Hospital Universitario Regional De Malaga", - "Hospital Universitario Reina Sofia", - "Hospital Universitario Rio Hortega", - "Hospital Universitario San Agustin", - "Hospital Universitario San Jorge", - "Hospital Universitario San Juan De Alicante", - "Hospital Universitario San Pedro", - "Hospital Universitario San Roque Las Palmas", - "Hospital Universitario San Roque Maspalomas", - "Hospital Universitario Santa Cristina", - "Hospital Universitario Severo Ochoa", - "Hospital Universitario Torrecardenas", - "Hospital Universitario Vinalopo", - "Hospital Universitario Virgen De La Victoria", - "Hospital Universitario Virgen De Las Nieves", - "Hospital Universitario Virgen De Valme", - "Hospital Universitario Virgen Del Rocio", - "Hospital Universitario Virgen Macarena", - "Hospital Universitario Vithas Las Palmas", - "Hospital Universitario Y Politecnico La Fe", - "Hospital Urduliz Ospitalea", - "Hospital Valle De Guadalhorce De Cartama", - "Hospital Valle De Laciana", - "Hospital Valle De Los Pedroches", - "Hospital Valle Del Nalon", - "Hospital Vazquez Diaz", - "Hospital Vega Baja De Orihuela", - "Hospital Viamed Bahia De Cadiz", - "Hospital Viamed Montecanal", - "Hospital Viamed Novo Sancti Petri", - "Hospital Viamed San Jose", - "Hospital Viamed Santa Angela De La Cruz", - "Hospital Viamed Santa Elena, S.L", - "Hospital Viamed Santiago", - "Hospital Viamed Tarragona", - "Hospital Victoria Eugenia De La Cruz Roja Española", - "Hospital Virgen De Altagracia", - "Hospital Virgen De La Bella", - "Hospital Virgen De La Concha Complejo Asistencial De Zamora", - "Hospital Virgen De La Luz", - "Hospital Virgen De La Torre", - "Hospital Virgen De Las Montañas", - "Hospital Virgen De Los Lirios", - "Hospital Virgen Del Alcazar De Lorca", - "Hospital Virgen Del Camino", - "Hospital Virgen Del Castillo", - "Hospital Virgen Del Mar", - "Hospital Virgen Del Miron ,Complejo Asistencial De Soria", - "Hospital Virgen Del Puerto", - "Hospital Vital Alvarez Buylla", - "Hospital Vithas Castellon", - "Hospital Vithas Granada", - "Hospital Vithas Parque San Antonio", - "Hospital Vithas Sevilla", - "Hospital Vithas Valencia Consuelo", - "Hospital Vithas Vitoria", - "Hospital Vithas Xanit Estepona", - "Hospital Vithas Xanit Internacional", - "Hospiten Clinica Roca San Agustin", - "Hospiten Lanzarote", - "Idcsalud Mostoles Sa", - "Imed Valencia", - "Institut Catala D'Oncologia - Hospital Duran I Reynals", - "Institut Catala D'Oncologia - Hospital Germans Trias I Pujol", - "Institut Catala D'Oncologia Girona - Hospital Josep Trueta", - "Institut Guttmann", - "Institut Pere Mata, S.A", - "Instituto De Enfermedades Neurologicas De Castilla-La Mancha", - "Instituto De Salud Carlos Iii - Centro Nacional De Microbiologia", - "Instituto De Traumatologia De Union De Mutuas (Matepss Nº 267)", - "Instituto Oftalmologico Fernandez-Vega", - "Instituto Provincial De Rehabilitacion", - "Instituto Tecnológico y de Energías Renovables, S.A. (ITER, S.A.)", - "Ita Canet", - "Ita Clinic Bcn", - "Ita Godella", - "Ita Maresme", - "Ivan Mañero Clinic", - "Juaneda Miramar", - "Lab Clínic ICS Camp de Tarragona-Terres de l'Ebre. Hospital Joan XXIII", - "Laboratori De Referencia De Catalunya", - "Laboratorio Echevarne, Sa", - "Lepant Residencial Qgg, Sl", - "Microbiología HUC San Cecilio", - "Microbiología. Hospital Universitario Virgen del Rocio", - "Ministerio Sanidad", - "Mutua Balear", - "Mutua De Granollers, Mutua De Previsio Social A Prima Fixa", - "Mutualia Clinica Pakea", - "Nou Hospital Evangelic", - "Organizacion Sanitaria Integrada Debagoiena", - "Parc Sanitari Sant Joan De Deu - Numancia", - "Parc Sanitari Sant Joan De Deu - Recinte Sant Boi.", - "Parc Sanitari Sant Joan De Deu - Til·Lers", - "Parc Sanitari Sant Joan De Deu - Uhpp - 1", - "Parc Sanitari Sant Joan De Deu - Uhpp - 2", - "Pius Hospital De Valls", - "Plataforma de Genómica y Bioinformática", - "Plataforma de Medicina Computacional, Fundación Progreso y Salud", - "Policlinica Comarcal Del Vendrell.", - "Policlinica Gipuzkoa", - "Policlinica Nuestra Sra. Del Rosario", - "Policlinico Riojano Nuestra Señora De Valvanera", - "Presidencia del Gobierno", - "Prytanis Hospitalet Centre Sociosanitari", - "Prytanis Sant Boi Centre Sociosanitari", - "Quinta Medica De Reposo", - "Red De Salud Mental De Araba (Hospital Psiquiatrico De Araba)", - "Residencia Alt Camp", - "Residencia De Gent Gran Puig D'En Roca", - "Residencia De Salud Mental Nuestra Se?Ora Del Carmen", - "Residencia Geriatrica Maria Gay", - "Residencia L'Estada", - "Residencia Puig-Reig", - "Residencia Santa Susanna", - "Residencia Santa Tecla Ponent", - "Residencia Terraferma", - "Residencia Vila-Seca", - "Ribera Hospital De Molina", - "Ronda De Dalt, Centre Sociosanitari", - "Sanatorio Bilbaino", - "Sanatorio Dr. Muñoz", - "Sanatorio Esquerdo, S.A.", - "Sanatorio Nuestra Señora Del Rosario", - "Sanatorio Sagrado Corazon", - "Sanatorio San Francisco De Borja Fontilles", - "Sanatorio Usurbil, S. L.", - "Santo Y Real Hospital De Caridad", - "Sar Mont Marti", - "Serveis Clinics, S.A.", - "Servicio Madrileño De Salud", - "Servicio de Microbiologia HU Son Espases", - "Servicios Sanitarios Y Asistenciales", - "U.R.R. De Enfermos Psiquicos Alcohete", - "Unidad De Rehabilitacion De Larga Estancia", - "Unidad Rehabilitadora De Media Estancia Profesor Rey Ardid", - "Unidades Clinicas Y De Rehabilitacion De Salud Mental", - "Unitat Polivalent Benito Menni En Salut Mental De L'Hospitalet-El Prat De Llobregat", - "Unitat Polivalent En Salut Mental D'Amposta", - "Unitat Polivalent Salut Mental Barcelona-Nord", - "Unitat Terapeutica-Educativa Acompanya'M", - "Villablanca Serveis Assistencials, Sa", - "Vithas Hospital Montserrat", - "Vithas Hospital Nosa Señora De Fatima", - "Vithas Hospital Perpetuo Internacional", - "Vithas Hospital Santa Cruz" - ], + "$ref": "#/$defs/enums/submitting_institution", "examples": [ "Instituto de Salud Carlos III " ], @@ -1939,901 +155,13 @@ "header": "Y" }, "sequencing_institution": { - "enum": [ - "Adinfa, Sociedad Cooperativa Andaluza", - "Alm Univass S.L.", - "Antic Hospital De Sant Jaume I Santa Magdalena", - "Aptima Centre Clinic - Mutua De Terrassa", - "Area Psiquiatrica San Juan De Dios", - "Avances Medicos S.A.", - "Avantmedic", - "Banc de Sang i Teixits Catalunya", - "Benito Menni Complex Assistencial En Salut Mental", - "Benito Menni, Complex Assistencial En Salut Mental", - "Cap La Salut", - "Cap Mataro Centre", - "Cap Montmelo", - "Cap Montornes", - "Casal De Curacio", - "Casaverde Centro De Rehabilitacion Neurologico De Extremadura S.L.", - "Casta Guadarrama", - "Castell D'Oliana Residencial,S.L", - "Catlab-Centre Analitiques Terrassa, Aie", - "Centre Collserola Mutual", - "Centre D'Hospitalitzacio I Hospital De Dia Trastorns De La Conducta", - "Centre D'Oftalmologia Barraquer", - "Centre De Prevencio I Rehabilitacio Asepeyo", - "Centre De Salut Doctor Vilaseca-Can Mariner", - "Centre Forum", - "Centre Geriatric Del Maresme", - "Centre Hospitalari Policlinica Barcelona", - "Centre Integral De Serveis En Salut Mental Comunitaria", - "Centre La Creueta", - "Centre Medic Molins, Sl", - "Centre Mq Reus", - "Centre Palamos Gent Gran", - "Centre Polivalent Can Fosc", - "Centre Sanitari Del Solsones, Fpc", - "Centre Social I Sanitari Frederica Montseny", - "Centre Sociosanitari Bernat Jaume", - "Centre Sociosanitari Blauclinic Dolors Aleu", - "Centre Sociosanitari Can Torras", - "Centre Sociosanitari Ciutat De Reus", - "Centre Sociosanitari D'Esplugues", - "Centre Sociosanitari De L'Hospitalet - Consorci Sanitari Integral", - "Centre Sociosanitari De Puigcerda", - "Centre Sociosanitari Del Centre Integral De Salut Cotxeres", - "Centre Sociosanitari El Carme", - "Centre Sociosanitari I Residencia Assistida Salou", - "Centre Sociosanitari Isabel Roig", - "Centre Sociosanitari Llevant", - "Centre Sociosanitari Parc Hospitalari Marti I Julia", - "Centre Sociosanitari Ricard Fortuny", - "Centre Sociosanitari Sant Jordi De La Vall D'Hebron", - "Centre Sociosanitari Sarquavitae Sant Jordi", - "Centre Sociosanitari Verge Del Puig", - "Centres Assistencials Dr. Emili Mira I Lopez (Recinte Torribera).", - "Centro Asistencial Albelda De Iregua", - "Centro Asistencial Hnas. Hospitalarias Del Sagrado Corazon De Jesus", - "Centro Asistencial San Juan De Dios", - "Centro De Atencion A La Salud Mental, La Milagrosa", - "Centro De Rehabilitacion Neurologica Casaverde", - "Centro De Rehabilitacion Psicosocial Nuestra Señora Del Pilar", - "Centro De Rehabilitacion Psicosocial San Juan De Dios", - "Centro De Rehabilitacion Psicosocial Santo Cristo De Los Milagros", - "Centro De Tratamiento De Drogodependientes El Alba", - "Centro De Tratamiento Integral Montevil", - "Centro Habilitado Ernest Lluch", - "Centro Hospitalario Benito Menni", - "Centro Hospitalario De Alta Resolucion De Cazorla", - "Centro Hospitalario Padre Menni", - "Centro Medico De Asturias", - "Centro Medico El Carmen", - "Centro Medico Pintado", - "Centro Medico Teknon, Grupo Quironsalud", - "Centro Neuropsiquiatrico Nuestra Señora Del Carmen", - "Centro Oncoloxico De Galicia", - "Centro Residencial Domusvi La Salut Josep Servat.", - "Centro Salud Mental Perez Espinosa", - "Centro San Francisco Javier", - "Centro San Juan De Dios Ciempozuelos", - "Centro Sanitario Bajo Cinca-Baix Cinca", - "Centro Sanitario Cinco Villas", - "Centro Sanitario Residencial Las Palmas (Cesar Las Palmas)", - "Centro Sociosanitario De Convalecencia Nuestra Señora Virgen Del Carmen", - "Centro Sociosanitario De Convalencencia Los Jazmines", - "Centro Sociosanitario De Merida", - "Centro Sociosanitario De Plasencia", - "Centro Terapeutico Vista Alegre", - "Centro de Investigación Biomédica de Aragón", - "Clinica Activa Mutua 2008", - "Clinica Arcangel San Miguel - Pamplona", - "Clinica Asturias", - "Clinica Bandama", - "Clinica Bofill", - "Clinica Cajal", - "Clinica Cemtro", - "Clinica Corachan", - "Clinica Coroleu - Ssr Hestia.", - "Clinica Creu Blanca", - "Clinica Cristo Rey", - "Clinica De Salud Mental Miguel De Mañara", - "Clinica Diagonal", - "Clinica Doctor Sanz Vazquez", - "Clinica Dr. Leon", - "Clinica El Seranil", - "Clinica Ercilla Mutualia", - "Clinica Galatea", - "Clinica Girona", - "Clinica Guimon, S.A.", - "Clinica Imq Zorrotzaurre", - "Clinica Imske", - "Clinica Indautxu, S.A.", - "Clinica Isadora S.A.", - "Clinica Jorgani", - "Clinica Juaneda", - "Clinica Juaneda Mahon", - "Clinica Juaneda Menorca", - "Clinica La Luz, S.L.", - "Clinica Lluria", - "Clinica Lopez Ibor", - "Clinica Los Alamos", - "Clinica Los Manzanos", - "Clinica Los Naranjos", - "Clinica Luz De Palma", - "Clinica Mc Copernic", - "Clinica Mc Londres", - "Clinica Mi Nova Aliança", - "Clinica Montpellier, Grupo Hla, S.A.U", - "Clinica Nostra Senyora De Guadalupe", - "Clinica Nostra Senyora Del Remei", - "Clinica Nuestra Se?Ora De Aranzazu", - "Clinica Nuestra Señora De La Paz", - "Clinica Perpetuo Socorro De Lerida, Grupo Hla, Slu", - "Clinica Planas", - "Clinica Ponferrada Recoletas", - "Clinica Psicogeriatrica Josefina Arregui", - "Clinica Psiquiatrica Bellavista", - "Clinica Psiquiatrica Padre Menni", - "Clinica Psiquiatrica Somio", - "Clinica Quirurgica Onyar", - "Clinica Residencia El Pinar", - "Clinica Rotger", - "Clinica Sagrada Familia", - "Clinica Salus Infirmorum", - "Clinica San Felipe", - "Clinica San Miguel", - "Clinica San Rafael", - "Clinica Sant Antoni", - "Clinica Sant Josep", - "Clinica Santa Creu", - "Clinica Santa Isabel", - "Clinica Santa Maria De La Asuncion (Inviza S. A.)", - "Clinica Santa Teresa", - "Clinica Soquimex", - "Clinica Tara", - "Clinica Terres De L'Ebre", - "Clinica Tres Torres", - "Clinica Universidad De Navarra", - "Clinica Virgen Blanca", - "Clinica Vistahermosa Grupo Hla", - "Clinicas Del Sur Slu", - "Complejo Asistencial Benito Menni", - "Complejo Asistencial De Soria", - "Complejo Asistencial De Zamora", - "Complejo Asistencial De Ávila", - "Complejo Asistencial Universitario De Burgos", - "Complejo Asistencial Universitario De León", - "Complejo Asistencial Universitario De Palencia", - "Complejo Asistencial Universitario De Salamanca", - "Complejo Hospital Costa Del Sol", - "Complejo Hospital Infanta Margarita", - "Complejo Hospital La Merced", - "Complejo Hospital San Juan De La Cruz", - "Complejo Hospital Universitario Clínico San Cecilio", - "Complejo Hospital Universitario De Jaén", - "Complejo Hospital Universitario De Puerto Real", - "Complejo Hospital Universitario Juan Ramón Jiménez", - "Complejo Hospital Universitario Puerta Del Mar", - "Complejo Hospital Universitario Regional De Málaga", - "Complejo Hospital Universitario Reina Sofía", - "Complejo Hospital Universitario Torrecárdenas", - "Complejo Hospital Universitario Virgen De La Victoria", - "Complejo Hospital Universitario Virgen De Las Nieves", - "Complejo Hospital Universitario Virgen De Valme", - "Complejo Hospital Universitario Virgen Del Rocío", - "Complejo Hospital Universitario Virgen Macarena", - "Complejo Hospital Valle De Los Pedroches", - "Complejo Hospitalario De Albacete", - "Complejo Hospitalario De Cartagena Chc", - "Complejo Hospitalario De Cáceres", - "Complejo Hospitalario De Don Benito-Villanueva De La Serena", - "Complejo Hospitalario De Toledo", - "Complejo Hospitalario Del Área De Salud De Mérida", - "Complejo Hospitalario Gregorio Marañón", - "Complejo Hospitalario Infanta Leonor", - "Complejo Hospitalario La Paz", - "Complejo Hospitalario Llerena-Zafra", - "Complejo Hospitalario San Pedro Hospital De La Rioja", - "Complejo Hospitalario Universitario De Badajoz", - "Complejo Hospitalario Universitario De Canarias", - "Complejo Hospitalario Universitario De Gran Canaria Dr. Negrín", - "Complejo Hospitalario Universitario Insular Materno Infantil", - "Complejo Hospitalario Universitario Nuestra Señora De Candelaria", - "Complejo Instituto Psiquiátrico Servicios De Salud Mental José Germain", - "Complexo Hospitalario Universitario A Coruña", - "Complexo Hospitalario Universitario De Ferrol", - "Complexo Hospitalario Universitario De Lugo", - "Complexo Hospitalario Universitario De Ourense", - "Complexo Hospitalario Universitario De Pontevedra", - "Complexo Hospitalario Universitario De Santiago", - "Complexo Hospitalario Universitario De Vigo", - "Comunitat Terapeutica Arenys De Munt", - "Concheiro Centro Medico Quirurgico", - "Consejería de Sanidad", - "Consorcio Hospital General Universitario De Valencia", - "Consorcio Hospitalario Provincial De Castellon", - "Consorcio LUCIA (SACYL,ITACYL UBU,UVa)", - "Cqm Clinic Maresme, Sl", - "Cti De La Corredoria", - "Eatica", - "Espitau Val D'Aran", - "Fraternidad Muprespa, Mutua Colaboradora Con La Seguridad Social Nº 275", - "Fremap Hospital Majadahonda", - "Fremap, Hospital De Barcelona", - "Fremap, Hospital De Vigo", - "Fremap_Hospital Y Centro De Rehabilitacion De Sevilla", - "Fundacio Hospital De L'Esperit Sant", - "Fundacio Hospital Sant Joan De Deu (Martorell)", - "Fundacio Puigvert - Iuna", - "Fundacio Sanitaria Sant Josep", - "Fundacio Sant Hospital.", - "Fundacion Cudeca. Centro De Cuidados Paliativos", - "Fundacion Hospital De Aviles", - "Fundacion Instituto San Jose", - "Fundacion Instituto Valenciano De Oncologia", - "Fundacion Sanatorio Adaro", - "Fundació Althaia-Manresa", - "Fundació Fisabio", - "Gerencia de Atención Primaria Pontevedra Sur", - "Germanes Hospitalaries. Hospital Sagrat Cor", - "Grupo Quironsalud Pontevedra", - "Hc Marbella International Hospital", - "Helicopteros Sanitarios Hospital", - "Hestia Balaguer.", - "Hestia Duran I Reynals", - "Hestia Gracia", - "Hestia La Robleda", - "Hestia Palau.", - "Hestia San Jose", - "Hm El Pilar", - "Hm Galvez", - "Hm Hospitales 1.989, S.A.", - "Hm Malaga", - "Hm Modelo-Belen", - "Hm Nou Delfos", - "Hm Regla", - "Hospital 9 De Octubre", - "Hospital Aita Menni", - "Hospital Alto Guadalquivir", - "Hospital Arnau De Vilanova", - "Hospital Asepeyo Madrid", - "Hospital Asilo De La Real Piedad De Cehegin", - "Hospital Asociado Universitario Guadarrama", - "Hospital Asociado Universitario Virgen De La Poveda", - "Hospital Beata Maria Ana", - "Hospital Begoña", - "Hospital Bidasoa (Osi Bidasoa)", - "Hospital C. M. Virgen De La Caridad Cartagena", - "Hospital Campo Arañuelo", - "Hospital Can Misses", - "Hospital Carlos Iii", - "Hospital Carmen Y Severo Ochoa", - "Hospital Casaverde Valladolid", - "Hospital Catolico Casa De Salud", - "Hospital Central De La Cruz Roja, San Jose Y Santa Adela", - "Hospital Central De La Defensa Gomez Ulla", - "Hospital Centro De Andalucia", - "Hospital Centro De Cuidados Laguna", - "Hospital Centro Medico Virgen De La Caridad Caravaca", - "Hospital Ciudad De Coria", - "Hospital Ciudad De Telde", - "Hospital Civil", - "Hospital Clinic De Barcelona", - "Hospital Clinic De Barcelona, Seu Plato", - "Hospital Clinic De Barcelona, Seu Sabino De Arana", - "Hospital Clinica Benidorm", - "Hospital Clinico Universitario De Valencia", - "Hospital Clinico Universitario De Valladolid", - "Hospital Clinico Universitario Lozano Blesa", - "Hospital Clinico Universitario Virgen De La Arrixaca", - "Hospital Comarcal", - "Hospital Comarcal D'Amposta", - "Hospital Comarcal De Blanes", - "Hospital Comarcal De L'Alt Penedes", - "Hospital Comarcal De Laredo", - "Hospital Comarcal De Vinaros", - "Hospital Comarcal Del Noroeste", - "Hospital Comarcal Del Pallars", - "Hospital Comarcal D´Inca", - "Hospital Comarcal Mora D'Ebre", - "Hospital Comarcal Sant Jaume De Calella", - "Hospital Cruz Roja De Bilbao - Victoria Eugenia", - "Hospital Cruz Roja De Cordoba", - "Hospital Cruz Roja Gijon", - "Hospital D'Igualada", - "Hospital D'Olot I Comarcal De La Garrotxa", - "Hospital De Alcañiz", - "Hospital De Alta Resolucion De Alcala La Real", - "Hospital De Alta Resolucion De Alcaudete", - "Hospital De Alta Resolucion De Benalmadena", - "Hospital De Alta Resolucion De Ecija", - "Hospital De Alta Resolucion De Especialidades De La Janda", - "Hospital De Alta Resolucion De Estepona", - "Hospital De Alta Resolucion De Guadix", - "Hospital De Alta Resolucion De Lebrija", - "Hospital De Alta Resolucion De Loja", - "Hospital De Alta Resolucion De Moron De La Frontera", - "Hospital De Alta Resolucion De Puente Genil", - "Hospital De Alta Resolucion De Utrera", - "Hospital De Alta Resolucion Eltoyo", - "Hospital De Alta Resolucion Sierra De Segura", - "Hospital De Alta Resolucion Sierra Norte", - "Hospital De Alta Resolucion Valle Del Guadiato", - "Hospital De Antequera", - "Hospital De Barbastro", - "Hospital De Barcelona", - "Hospital De Baza", - "Hospital De Benavente Complejo Asistencial De Zamora", - "Hospital De Berga", - "Hospital De Bermeo", - "Hospital De Calahorra", - "Hospital De Campdevanol", - "Hospital De Cantoblanco", - "Hospital De Cerdanya / Hopital De Cerdagne", - "Hospital De Cronicos De Mislata (Antiguo Hospital Militar De Valencia)", - "Hospital De Cuidados Medios Villademar", - "Hospital De Denia", - "Hospital De Emergencia Covid 19", - "Hospital De Figueres", - "Hospital De Formentera", - "Hospital De Gorliz", - "Hospital De Hellin", - "Hospital De Jaca Salud", - "Hospital De Jarrio", - "Hospital De Jove", - "Hospital De L'Esperança.", - "Hospital De La Axarquia", - "Hospital De La Creu Roja Espanyola", - "Hospital De La Fuenfria", - "Hospital De La Inmaculada Concepcion", - "Hospital De La Malva-Rosa", - "Hospital De La Mujer", - "Hospital De La Reina", - "Hospital De La Rioja", - "Hospital De La Santa Creu", - "Hospital De La Santa Creu I Sant Pau", - "Hospital De La Serrania", - "Hospital De La V.O.T. De San Francisco De Asis", - "Hospital De La Vega Lorenzo Guirao", - "Hospital De Leon Complejo Asistencial Universitario De Leon", - "Hospital De Leza", - "Hospital De Llevant", - "Hospital De Lliria", - "Hospital De Luarca", - "Hospital De Manacor", - "Hospital De Manises", - "Hospital De Mataro", - "Hospital De Mendaro (Osi Bajo Deba)", - "Hospital De Merida", - "Hospital De Mollet", - "Hospital De Montilla", - "Hospital De Neurotraumatologia Y Rehabilitacion Del H.U. Virgen De Las Nieves", - "Hospital De Ofra", - "Hospital De Palamos", - "Hospital De Rehabilitacion Psiquiatrica Prisma", - "Hospital De Rehabilitacion Y Traumatologia Del H.U. Virgen Del Rocio", - "Hospital De Riotinto", - "Hospital De Sabadell", - "Hospital De Sagunto", - "Hospital De Salud Mental Casta Salud Arevalo", - "Hospital De Salud Mental Provincial", - "Hospital De San Antonio", - "Hospital De San Jose", - "Hospital De San Rafael", - "Hospital De Sant Andreu", - "Hospital De Sant Celoni.", - "Hospital De Sant Jaume", - "Hospital De Sant Joan De Deu (Manresa)", - "Hospital De Sant Joan De Deu.", - "Hospital De Sant Joan Despi Moises Broggi", - "Hospital De Sant Llatzer", - "Hospital De Sant Pau I Santa Tecla", - "Hospital De Terrassa.", - "Hospital De Tortosa Verge De La Cinta", - "Hospital De Viladecans", - "Hospital De Zafra", - "Hospital De Zaldibar", - "Hospital De Zamudio", - "Hospital De Zumarraga (Osi Goierri - Alto Urola)", - "Hospital Del Mar", - "Hospital Del Norte", - "Hospital Del Oriente De Asturias Francisco Grande Covian", - "Hospital Del Sur", - "Hospital Del Vendrell", - "Hospital Doctor Moliner", - "Hospital Doctor Oloriz", - "Hospital Doctor Sagaz", - "Hospital Don Benito-Villanueva De La Serena", - "Hospital Dos De Maig", - "Hospital Egarsat Sant Honorat", - "Hospital El Angel", - "Hospital El Bierzo", - "Hospital El Escorial", - "Hospital El Pilar", - "Hospital El Tomillar", - "Hospital Ernest Lluch Martin", - "Hospital Fatima", - "Hospital Francesc De Borja De Gandia", - "Hospital Fuensanta", - "Hospital Fuente Bermeja- Complejo Asistencial Universitario De Burgos-", - "Hospital G. Universitario J.M. Morales Meseguer", - "Hospital Galdakao-Usansolo Asociado A La Upv/Ehu", - "Hospital Garcia Orcoyen", - "Hospital General De Almansa", - "Hospital General De Fuerteventura", - "Hospital General De Granollers.", - "Hospital General De L'Hospitalet", - "Hospital General De La Defensa En Zaragoza", - "Hospital General De La Santisima Trinidad", - "Hospital General De Llerena", - "Hospital General De Mallorca", - "Hospital General De Ontinyent", - "Hospital General De Requena", - "Hospital General De Segovia Complejo Asistencial De Segovia", - "Hospital General De Tomelloso", - "Hospital General De Valdepeñas", - "Hospital General De Villalba", - "Hospital General De Villarrobledo", - "Hospital General La Mancha Centro", - "Hospital General Nuestra Señora Del Prado", - "Hospital General Penitenciari", - "Hospital General Santa Maria Del Puerto", - "Hospital General Universitario De Albacete", - "Hospital General Universitario De Castellon", - "Hospital General Universitario De Ciudad Real", - "Hospital General Universitario De Elche", - "Hospital General Universitario De Elda-Virgen De La Salud", - "Hospital General Universitario Dr. Balmis", - "Hospital General Universitario Gregorio Marañon", - "Hospital General Universitario Los Arcos Del Mar Menor", - "Hospital General Universitario Reina Sofia", - "Hospital General Universitario Santa Lucia", - "Hospital Geriatrico Virgen Del Valle", - "Hospital Gijon", - "Hospital Hernan Cortes Miraflores", - "Hospital Hestia Madrid", - "Hospital Hla Universitario Moncloa", - "Hospital Hm Nuevo Belen", - "Hospital Hm Rosaleda-Hm La Esperanza", - "Hospital Hm San Francisco", - "Hospital Hm Valles", - "Hospital Ibermutuamur - Patologia Laboral", - "Hospital Imed Elche", - "Hospital Imed Gandia", - "Hospital Imed Levante", - "Hospital Imed San Jorge", - "Hospital Infanta Elena", - "Hospital Infanta Margarita", - "Hospital Infantil", - "Hospital Infantil Universitario Niño Jesus", - "Hospital Insular De Lanzarote", - "Hospital Insular Nuestra Señora De Los Reyes", - "Hospital Intermutual De Euskadi", - "Hospital Intermutual De Levante", - "Hospital Internacional Hcb Denia", - "Hospital Internacional Hm Santa Elena", - "Hospital Jaume Nadal Meroles", - "Hospital Jerez Puerta Del Sur", - "Hospital Joan March", - "Hospital Juaneda Muro", - "Hospital La Antigua", - "Hospital La Inmaculada", - "Hospital La Magdalena", - "Hospital La Merced", - "Hospital La Milagrosa S.A.", - "Hospital La Paloma", - "Hospital La Pedrera", - "Hospital La Vega Grupo Hla", - "Hospital Latorre", - "Hospital Lluis Alcanyis De Xativa", - "Hospital Los Madroños", - "Hospital Los Montalvos (Complejo Asistencial Universitario De Salamanca)", - "Hospital Los Morales", - "Hospital Mare De Deu De La Merce", - "Hospital Marina Baixa De La Vila Joiosa", - "Hospital Maritimo De Torremolinos", - "Hospital Materno - Infantil Del H.U. Reina Sofia", - "Hospital Materno Infantil", - "Hospital Materno Infantil Del H.U.R. De Malaga", - "Hospital Materno-Infantil", - "Hospital Materno-Infantil Del H.U. De Jaen", - "Hospital Materno-Infantil Del H.U. Virgen De Las Nieves", - "Hospital Mateu Orfila", - "Hospital Maz", - "Hospital Md Anderson Cancer Center Madrid", - "Hospital Medimar Internacional", - "Hospital Medina Del Campo", - "Hospital Mediterraneo", - "Hospital Mesa Del Castillo", - "Hospital Metropolitano De Jaen", - "Hospital Mompia", - "Hospital Monte Naranco", - "Hospital Monte San Isidro Complejo Asistencial Universitario De Leon", - "Hospital Municipal De Badalona", - "Hospital Mutua Montañesa", - "Hospital Nacional De Paraplejicos", - "Hospital Neurotraumatologico Del H.U. De Jaen", - "Hospital Nisa Aguas Vivas", - "Hospital Ntra. Sra. Del Perpetuo Socorro", - "Hospital Nuestra Señora De America", - "Hospital Nuestra Señora De Gracia", - "Hospital Nuestra Señora De Guadalupe", - "Hospital Nuestra Señora De La Salud Hla Sl", - "Hospital Nuestra Señora De Sonsoles", - "Hospital Obispo Polanco", - "Hospital Ochoa", - "Hospital Palma Del Rio", - "Hospital Pardo De Aravaca", - "Hospital Pare Jofre", - "Hospital Parque", - "Hospital Parque Fuerteventura", - "Hospital Parque Marazuela", - "Hospital Parque San Francisco", - "Hospital Parque Vegas Altas", - "Hospital Perpetuo Socorro", - "Hospital Perpetuo Socorro Alameda", - "Hospital Polivalente Anexo Juan Carlos I", - "Hospital Provincial", - "Hospital Provincial De Avila", - "Hospital Provincial De Zamora Complejo Asistencial De Zamora", - "Hospital Provincial Ntra.Sra.De La Misericordia", - "Hospital Psiquiatric", - "Hospital Psiquiatrico Doctor Rodriguez Lafora", - "Hospital Psiquiatrico Penitenciario", - "Hospital Psiquiatrico Penitenciario De Fontcalent", - "Hospital Psiquiatrico Roman Alberca", - "Hospital Psiquiatrico San Francisco De Asis", - "Hospital Psiquiatrico San Juan De Dios", - "Hospital Psiquiatrico San Luis", - "Hospital Publico Da Barbanza", - "Hospital Publico Da Mariña", - "Hospital Publico De Monforte", - "Hospital Publico De Valdeorras", - "Hospital Publico De Verin", - "Hospital Publico Do Salnes", - "Hospital Publico Virxe Da Xunqueira", - "Hospital Puerta De Andalucia", - "Hospital Punta De Europa", - "Hospital Quiron Campo De Gibraltar", - "Hospital Quiron Salud Costa Adeje", - "Hospital Quiron Salud Del Valles - Clinica Del Valles", - "Hospital Quiron Salud Lugo", - "Hospital Quiron Salud Tenerife", - "Hospital Quiron Salud Valle Del Henares", - "Hospital Quironsalud A Coruña", - "Hospital Quironsalud Albacete", - "Hospital Quironsalud Barcelona", - "Hospital Quironsalud Bizkaia", - "Hospital Quironsalud Caceres", - "Hospital Quironsalud Ciudad Real", - "Hospital Quironsalud Clideba", - "Hospital Quironsalud Cordoba", - "Hospital Quironsalud Huelva", - "Hospital Quironsalud Infanta Luisa", - "Hospital Quironsalud Malaga", - "Hospital Quironsalud Marbella", - "Hospital Quironsalud Murcia", - "Hospital Quironsalud Palmaplanas", - "Hospital Quironsalud Sagrado Corazon", - "Hospital Quironsalud San Jose", - "Hospital Quironsalud Santa Cristina", - "Hospital Quironsalud Son Veri", - "Hospital Quironsalud Sur", - "Hospital Quironsalud Toledo", - "Hospital Quironsalud Torrevieja", - "Hospital Quironsalud Valencia", - "Hospital Quironsalud Vida", - "Hospital Quironsalud Vitoria", - "Hospital Quironsalud Zaragoza", - "Hospital Rafael Mendez", - "Hospital Recoletas Cuenca, S.L.U.", - "Hospital Recoletas De Burgos", - "Hospital Recoletas De Palencia", - "Hospital Recoletas De Zamora", - "Hospital Recoletas Marbella Slu", - "Hospital Recoletas Salud Campo Grande", - "Hospital Recoletas Salud Felipe Ii", - "Hospital Recoletas Segovia Nuestra Señora De La Misericordia", - "Hospital Reina Sofia", - "Hospital Residencia Sant Camil - Consorci Sanitari De L'Alt Penedes I Garraf", - "Hospital Ribera Almendralejo", - "Hospital Ribera Badajoz", - "Hospital Ribera Covadonga", - "Hospital Ribera Juan Cardona", - "Hospital Ribera Polusa", - "Hospital Ribera Povisa", - "Hospital Ricardo Bermingham", - "Hospital Rio Carrion Complejo Asistencial Universitario De Palencia", - "Hospital Royo Villanova", - "Hospital Ruber Internacional", - "Hospital Ruber Juan Bravo", - "Hospital Sagrado Corazon De Jesus", - "Hospital San Agustin", - "Hospital San Camilo", - "Hospital San Carlos De Denia Grupo Hla", - "Hospital San Carlos De San Fernando", - "Hospital San Eloy", - "Hospital San Francisco De Asis", - "Hospital San Jose", - "Hospital San Jose Solimat", - "Hospital San Juan De Dios", - "Hospital San Juan De Dios Burgos", - "Hospital San Juan De Dios De Cordoba", - "Hospital San Juan De Dios De Sevilla", - "Hospital San Juan De Dios Del Aljarafe", - "Hospital San Juan De Dios Donostia", - "Hospital San Juan De Dios Leon", - "Hospital San Juan De Dios Tenerife", - "Hospital San Juan De La Cruz", - "Hospital San Juan Grande", - "Hospital San Lazaro", - "Hospital San Pedro De Alcantara", - "Hospital San Rafael", - "Hospital San Roque De Guia", - "Hospital San Telmo ,Complejo Asistencial Universitario De Palencia", - "Hospital Sanitas Cima", - "Hospital Sant Antoni Abat - Consorci Sanitari Del Garraf.", - "Hospital Sant Joan De Deu", - "Hospital Sant Joan De Deu Inca", - "Hospital Sant Joan De Deu Lleida", - "Hospital Sant Vicent Del Raspeig", - "Hospital Santa Ana", - "Hospital Santa Barbara", - "Hospital Santa Barbara ,Complejo Asistencial De Soria", - "Hospital Santa Caterina-Ias", - "Hospital Santa Clotilde", - "Hospital Santa Isabel Complejo Asistencial Universitario De Leon", - "Hospital Santa Maria", - "Hospital Santa Maria Del Rosell", - "Hospital Santa Marina", - "Hospital Santa Teresa", - "Hospital Santiago Apostol", - "Hospital Santos Reyes", - "Hospital Siberia-Serena", - "Hospital Sierrallana", - "Hospital Sociosanitari De Lloret De Mar", - "Hospital Sociosanitari De Mollet", - "Hospital Sociosanitari Francoli", - "Hospital Sociosanitari Mutuam Girona", - "Hospital Sociosanitari Mutuam Guell", - "Hospital Sociosanitari Pere Virgili", - "Hospital Son Llatzer", - "Hospital Tierra De Barros", - "Hospital Universitari Arnau De Vilanova De Lleida", - "Hospital Universitari De Bellvitge", - "Hospital Universitari De Girona Dr. Josep Trueta", - "Hospital Universitari De Sant Joan De Reus", - "Hospital Universitari De Vic", - "Hospital Universitari General De Catalunya", - "Hospital Universitari Germans Trias I Pujol De Badalona", - "Hospital Universitari Joan Xxiii De Tarragona", - "Hospital Universitari Mutua De Terrassa", - "Hospital Universitari Quir¿N Dexeus", - "Hospital Universitari Sagrat Cor", - "Hospital Universitari Son Espases", - "Hospital Universitari Vall D'Hebron", - "Hospital Universitario 12 De Octubre", - "Hospital Universitario Araba (Sede Txagorritxu Y Sede Santiago)", - "Hospital Universitario Basurto", - "Hospital Universitario Central De Asturias", - "Hospital Universitario Clinico San Carlos", - "Hospital Universitario Clinico San Cecilio", - "Hospital Universitario Costa Del Sol", - "Hospital Universitario Cruces", - "Hospital Universitario De Badajoz", - "Hospital Universitario De Burgos Complejo Asistencial Univer. De Burgos", - "Hospital Universitario De Cabueñes", - "Hospital Universitario De Caceres", - "Hospital Universitario De Canarias", - "Hospital Universitario De Ceuta", - "Hospital Universitario De Fuenlabrada", - "Hospital Universitario De Getafe", - "Hospital Universitario De Gran Canaria Dr. Negrin", - "Hospital Universitario De Guadalajara", - "Hospital Universitario De Jaen", - "Hospital Universitario De Jerez De La Frontera", - "Hospital Universitario De La Linea De La Concepcion", - "Hospital Universitario De La Plana", - "Hospital Universitario De La Princesa", - "Hospital Universitario De La Ribera", - "Hospital Universitario De Mostoles", - "Hospital Universitario De Navarra", - "Hospital Universitario De Poniente", - "Hospital Universitario De Puerto Real", - "Hospital Universitario De Salamanca ,Complejo Asistencial Universitario De", - "Hospital Universitario De Salud Mental Juan Carlos I", - "Hospital Universitario De Toledo (Hut)", - "Hospital Universitario De Torrejon", - "Hospital Universitario De Torrevieja", - "Hospital Universitario Del Henares", - "Hospital Universitario Del Sureste", - "Hospital Universitario Del Tajo", - "Hospital Universitario Donostia", - "Hospital Universitario Dr. Jose Molina Orosa", - "Hospital Universitario Dr. Peset Aleixandre", - "Hospital Universitario Fundacion Alcorcon", - "Hospital Universitario Fundacion Jimenez Diaz", - "Hospital Universitario General De La Palma", - "Hospital Universitario Hm Madrid", - "Hospital Universitario Hm Monteprincipe", - "Hospital Universitario Hm Puerta Del Sur", - "Hospital Universitario Hm Sanchinarro", - "Hospital Universitario Hm Torrelodones", - "Hospital Universitario Hospiten Bellevue", - "Hospital Universitario Hospiten Rambla", - "Hospital Universitario Hospiten Sur", - "Hospital Universitario Infanta Cristina", - "Hospital Universitario Infanta Elena", - "Hospital Universitario Infanta Leonor", - "Hospital Universitario Infanta Sofia", - "Hospital Universitario Jose Germain", - "Hospital Universitario Juan Ramon Jimenez", - "Hospital Universitario La Moraleja", - "Hospital Universitario La Paz", - "Hospital Universitario La Zarzuela", - "Hospital Universitario Marques De Valdecilla", - "Hospital Universitario Miguel Servet", - "Hospital Universitario Nuestra Señora De Candelaria", - "Hospital Universitario Nuestra Señora Del Perpetuo Socorro", - "Hospital Universitario Principe De Asturias", - "Hospital Universitario Puerta De Hierro Majadahonda", - "Hospital Universitario Puerta Del Mar", - "Hospital Universitario Quironsalud Madrid", - "Hospital Universitario Ramon Y Cajal", - "Hospital Universitario Regional De Malaga", - "Hospital Universitario Reina Sofia", - "Hospital Universitario Rio Hortega", - "Hospital Universitario San Agustin", - "Hospital Universitario San Jorge", - "Hospital Universitario San Juan De Alicante", - "Hospital Universitario San Pedro", - "Hospital Universitario San Roque Las Palmas", - "Hospital Universitario San Roque Maspalomas", - "Hospital Universitario Santa Cristina", - "Hospital Universitario Severo Ochoa", - "Hospital Universitario Torrecardenas", - "Hospital Universitario Vinalopo", - "Hospital Universitario Virgen De La Victoria", - "Hospital Universitario Virgen De Las Nieves", - "Hospital Universitario Virgen De Valme", - "Hospital Universitario Virgen Del Rocio", - "Hospital Universitario Virgen Macarena", - "Hospital Universitario Vithas Las Palmas", - "Hospital Universitario Y Politecnico La Fe", - "Hospital Urduliz Ospitalea", - "Hospital Valle De Guadalhorce De Cartama", - "Hospital Valle De Laciana", - "Hospital Valle De Los Pedroches", - "Hospital Valle Del Nalon", - "Hospital Vazquez Diaz", - "Hospital Vega Baja De Orihuela", - "Hospital Viamed Bahia De Cadiz", - "Hospital Viamed Montecanal", - "Hospital Viamed Novo Sancti Petri", - "Hospital Viamed San Jose", - "Hospital Viamed Santa Angela De La Cruz", - "Hospital Viamed Santa Elena, S.L", - "Hospital Viamed Santiago", - "Hospital Viamed Tarragona", - "Hospital Victoria Eugenia De La Cruz Roja Española", - "Hospital Virgen De Altagracia", - "Hospital Virgen De La Bella", - "Hospital Virgen De La Concha Complejo Asistencial De Zamora", - "Hospital Virgen De La Luz", - "Hospital Virgen De La Torre", - "Hospital Virgen De Las Montañas", - "Hospital Virgen De Los Lirios", - "Hospital Virgen Del Alcazar De Lorca", - "Hospital Virgen Del Camino", - "Hospital Virgen Del Castillo", - "Hospital Virgen Del Mar", - "Hospital Virgen Del Miron ,Complejo Asistencial De Soria", - "Hospital Virgen Del Puerto", - "Hospital Vital Alvarez Buylla", - "Hospital Vithas Castellon", - "Hospital Vithas Granada", - "Hospital Vithas Parque San Antonio", - "Hospital Vithas Sevilla", - "Hospital Vithas Valencia Consuelo", - "Hospital Vithas Vitoria", - "Hospital Vithas Xanit Estepona", - "Hospital Vithas Xanit Internacional", - "Hospiten Clinica Roca San Agustin", - "Hospiten Lanzarote", - "Idcsalud Mostoles Sa", - "Imed Valencia", - "Institut Catala D'Oncologia - Hospital Duran I Reynals", - "Institut Catala D'Oncologia - Hospital Germans Trias I Pujol", - "Institut Catala D'Oncologia Girona - Hospital Josep Trueta", - "Institut Guttmann", - "Institut Pere Mata, S.A", - "Instituto De Enfermedades Neurologicas De Castilla-La Mancha", - "Instituto De Salud Carlos Iii - Centro Nacional De Microbiologia", - "Instituto De Traumatologia De Union De Mutuas (Matepss Nº 267)", - "Instituto Oftalmologico Fernandez-Vega", - "Instituto Provincial De Rehabilitacion", - "Instituto Tecnológico y de Energías Renovables, S.A. (ITER, S.A.)", - "Ita Canet", - "Ita Clinic Bcn", - "Ita Godella", - "Ita Maresme", - "Ivan Mañero Clinic", - "Juaneda Miramar", - "Lab Clínic ICS Camp de Tarragona-Terres de l'Ebre. Hospital Joan XXIII", - "Laboratori De Referencia De Catalunya", - "Laboratorio Echevarne, Sa", - "Lepant Residencial Qgg, Sl", - "Microbiología HUC San Cecilio", - "Microbiología. Hospital Universitario Virgen del Rocio", - "Ministerio Sanidad", - "Mutua Balear", - "Mutua De Granollers, Mutua De Previsio Social A Prima Fixa", - "Mutualia Clinica Pakea", - "Nou Hospital Evangelic", - "Organizacion Sanitaria Integrada Debagoiena", - "Parc Sanitari Sant Joan De Deu - Numancia", - "Parc Sanitari Sant Joan De Deu - Recinte Sant Boi.", - "Parc Sanitari Sant Joan De Deu - Til·Lers", - "Parc Sanitari Sant Joan De Deu - Uhpp - 1", - "Parc Sanitari Sant Joan De Deu - Uhpp - 2", - "Pius Hospital De Valls", - "Plataforma de Genómica y Bioinformática", - "Plataforma de Medicina Computacional, Fundación Progreso y Salud", - "Policlinica Comarcal Del Vendrell.", - "Policlinica Gipuzkoa", - "Policlinica Nuestra Sra. Del Rosario", - "Policlinico Riojano Nuestra Señora De Valvanera", - "Presidencia del Gobierno", - "Prytanis Hospitalet Centre Sociosanitari", - "Prytanis Sant Boi Centre Sociosanitari", - "Quinta Medica De Reposo", - "Red De Salud Mental De Araba (Hospital Psiquiatrico De Araba)", - "Residencia Alt Camp", - "Residencia De Gent Gran Puig D'En Roca", - "Residencia De Salud Mental Nuestra Se?Ora Del Carmen", - "Residencia Geriatrica Maria Gay", - "Residencia L'Estada", - "Residencia Puig-Reig", - "Residencia Santa Susanna", - "Residencia Santa Tecla Ponent", - "Residencia Terraferma", - "Residencia Vila-Seca", - "Ribera Hospital De Molina", - "Ronda De Dalt, Centre Sociosanitari", - "Sanatorio Bilbaino", - "Sanatorio Dr. Muñoz", - "Sanatorio Esquerdo, S.A.", - "Sanatorio Nuestra Señora Del Rosario", - "Sanatorio Sagrado Corazon", - "Sanatorio San Francisco De Borja Fontilles", - "Sanatorio Usurbil, S. L.", - "Santo Y Real Hospital De Caridad", - "Sar Mont Marti", - "Serveis Clinics, S.A.", - "Servicio Madrileño De Salud", - "Servicio de Microbiologia HU Son Espases", - "Servicios Sanitarios Y Asistenciales", - "U.R.R. De Enfermos Psiquicos Alcohete", - "Unidad De Rehabilitacion De Larga Estancia", - "Unidad Rehabilitadora De Media Estancia Profesor Rey Ardid", - "Unidades Clinicas Y De Rehabilitacion De Salud Mental", - "Unitat Polivalent Benito Menni En Salut Mental De L'Hospitalet-El Prat De Llobregat", - "Unitat Polivalent En Salut Mental D'Amposta", - "Unitat Polivalent Salut Mental Barcelona-Nord", - "Unitat Terapeutica-Educativa Acompanya'M", - "Villablanca Serveis Assistencials, Sa", - "Vithas Hospital Montserrat", - "Vithas Hospital Nosa Señora De Fatima", - "Vithas Hospital Perpetuo Internacional", - "Vithas Hospital Santa Cruz" - ], + "$ref": "#/$defs/enums/sequencing_institution", "examples": [ "Instituto de Salud Carlos III " ], "ontology": "GENEPIO:0100416", "type": "string", - "description": "The name of the agency that generated the sequence", + "description": "The name of the agency that generated the sequence.", "classification": "Sequencing", "label": "Sequencing Institution", "fill_mode": "sample", @@ -2846,7 +174,7 @@ "ontology": "SNOMED:399445004", "type": "string", "format": "date", - "description": "The date on which the sample was collected. YYYY-MM-DD", + "description": "The date on which the sample was collected. YYYY-MM-DD.", "classification": "Sample collection and processing", "label": "Sample Collection Date", "fill_mode": "sample", @@ -2859,25 +187,14 @@ "ontology": "SNOMED:281271004", "type": "string", "format": "date", - "description": "The date on which the sample was received. YYYY-MM-DD", + "description": "The date on which the sample was received. YYYY-MM-DD.", "classification": "Sample collection and processing", "label": "Sample Received Date", "fill_mode": "sample", "header": "Y" }, "purpose_sampling": { - "enum": [ - "Cluster/Outbreak Investigation [GENEPIO:0100001]", - "Diagnostic Testing [GENEPIO:0100002]", - "Research [LOINC:LP173021-9]", - "Protocol Testing [GENEPIO:0100024]", - "Surveillance [GENEPIO:0100004]", - "Other [NCIT:C124261]", - "Not Collected [LOINC:LA4700-6]", - "Not Applicable [SNOMED:385432009]", - "Missing [LOINC:LA14698-7]", - "Not Provided [SNOMED:434941000124101]" - ], + "$ref": "#/$defs/enums/purpose_sampling", "examples": [ "Surveillance" ], @@ -2895,197 +212,14 @@ ], "ontology": "NCIT:C115535", "type": "string", - "description": "Conditions under which the sample is stored", + "description": "Conditions under which the sample is stored.", "classification": "Sample collection and processing", "label": "Biological Sample Storage Condition", "fill_mode": "batch", "header": "Y" }, "specimen_source": { - "enum": [ - "Specimen from abscess [SNOMED:119371008]", - "Specimen from intra-abdominal abscess [SNOMED:16211211000119102]", - "Fluid specimen from Bartholin gland cyst [SNOMED:446128003]", - "Specimen from abscess of brain [SNOMED:446774006]", - "Specimen from head and neck structure [SNOMED:430220009]", - "Specimen of neck abscess [SNOMED:1023721000122100]", - "Fluid specimen from epidural space [SNOMED:444965000]", - "Specimen from abscess of liver [SNOMED:446674003]", - "Specimen from breast [SNOMED:127456000]", - "Specimen from abscess of tooth [SNOMED:29021000087108]", - "Oropharyngeal aspirate [SNOMED:258412000]", - "Soft tissue specimen [SNOMED:309072003]", - "Specimen from abscess of lung [SNOMED:29011000087100]", - "Specimen of fluid from cyst of kidney [SNOMED:16220971000119101]", - "Specimen from a subphrenic abscess [SNOMED:75981000122101]", - "Nucleic acid specimen [SNOMED:448789008]", - "Water specimen [SNOMED:119318008]", - "Air specimen [SNOMED:446302006]", - "Specimen obtained by bronchial aspiration [SNOMED:441903006]", - "Gastric aspirate specimen [SNOMED:168137004]", - "Specimen from nasopharyngeal structure [SNOMED:430248009]", - "Nasopharyngeal aspirate [SNOMED:258411007]", - "Specimen from endotracheal tube [SNOMED:119307008]", - "Bile specimen [SNOMED:119341000]", - "Articular tissue specimen [SNOMED:309126004]", - "Specimen from brain obtained by biopsy [SNOMED:432139004]", - "Skin biopsy specimen [SNOMED:309066003]", - "Mouth biopsy specimen [SNOMED:309188000]", - "Tissue specimen from uterine cervix [SNOMED:127481002]", - "Duodenal biopsy specimen [SNOMED:309216003]", - "Specimen from endometrium obtained by biopsy [SNOMED:122704003]", - "Specimen from intervertebral disc [SNOMED:438960000]", - "Specimen obtained from skin of the scapular region biopsy [SNOMED:76011000122104]", - "Esophageal biopsy specimen [SNOMED:309209004]", - "Fascia biopsy specimen [SNOMED:309118007]", - "Lymph node biopsy specimen [SNOMED:309079007]", - "Gastric biopsy specimen [SNOMED:309211008]", - "Liver biopsy specimen [SNOMED:309203003]", - "Tissue specimen from gastrointestinal tract [SNOMED:127466008]", - "Tissue specimen from large intestine [SNOMED:122643008]", - "Muscle biopsy specimen [SNOMED:309507001]", - "Soft tissue biopsy specimen [SNOMED:309074002]", - "Specimen from pericardium obtained by biopsy [SNOMED:434250007]", - "Pleura biopsy specimen [SNOMED:309172000]", - "Specimen from lung obtained by biopsy [SNOMED:122610009]", - "Prostate biopsy specimen [SNOMED:309132009]", - "Rectal biopsy specimen [SNOMED:309262006]", - "Synovium biopsy specimen [SNOMED:309122002]", - "Tendon biopsy specimen [SNOMED:309113003]", - "Tissue specimen from small intestine [SNOMED:122638001]", - "Erythrocyte specimen from blood product [SNOMED:122582004]", - "Platelet specimen [SNOMED:119358005]", - "Specimen from plasma bag [SNOMED:119305000]", - "Specimen from blood bag [SNOMED:119304001]", - "Specimen from bronchoscope [SNOMED:76081000122109]", - "Gallstone specimen [SNOMED:258492001]", - "Renal stone specimen [SNOMED:258495004]", - "Specimen of implantable venous access port [SNOMED:76091000122107]", - "Catheter tip submitted as specimen [SNOMED:119312009]", - "Calculus specimen [SNOMED:119350003]", - "Bronchial brushings specimen [SNOMED:309176002]", - "Scotch tape slide specimen [SNOMED:258664003]", - "Specimen of cystoscope [SNOMED:76031000122108]", - "Blood clot specimen [SNOMED:258582006]", - "Serum specimen from blood product [SNOMED:122591000]", - "Specimen of a sent Colonoscope [SNOMED:76041000122100]", - "Specimen from cornea [SNOMED:119400006]", - "Conjunctival swab [SNOMED:258498002]", - "Intrauterine contraceptive device submitted as specimen [SNOMED:473415003]", - "Abdominal cavity fluid specimen [SNOMED:8761000122107]", - "Body fluid specimen obtained via chest tube [SNOMED:447375004]", - "Specimen of a sent duodenoscope [SNOMED:76051000122103]", - "Swab of endocervix [SNOMED:444787003]", - "Specimen of a sent endoscope [SNOMED:76061000122101]", - "Coughed sputum specimen [SNOMED:119335007]", - "Sputum specimen obtained by sputum induction [SNOMED:258610001]", - "Drainage fluid specimen [SNOMED:258455001]", - "Specimen from endometrium [SNOMED:119396006]", - "Glans penis swab [SNOMED:258512002]", - "Specimen from mediastinum [SNOMED:433326001]", - "Ear swab specimen [SNOMED:309166000]", - "Middle ear fluid specimen [SNOMED:258466008]", - "Swab from gastrostomy stoma [SNOMED:472886009]", - "Specimen of diabetic foot ulcer exudate [SNOMED:75991000122103]", - "Swab from external stoma wound [SNOMED:29001000087102]", - "Swab from tracheostomy wound [SNOMED:472870002]", - "Specimen obtained by swabbing ureterostomy wound [SNOMED:1023731000122102]", - "Specimen obtained by vesicostomy wound swabbing [SNOMED:1023741000122105]", - "specimen obtained by colostomy wound swabbing [SNOMED:1023751000122107]", - "Specimen obtained by swabbing ileostomy wound[SNOMED:1023761000122109]", - "Swab of umbilicus [SNOMED:445367006]", - "Swab from placenta [SNOMED:472879001]", - "Urethral swab [SNOMED:258530009]", - "Vaginal swab [SNOMED:258520000]", - "Rectal swab [SNOMED:258528007]", - "Oropharyngeal swab [SNOMED:461911000124106]", - "Skin swab [SNOMED:258503004]", - "Swab from tonsil [SNOMED:472867001]", - "Specimen from graft [SNOMED:29031000087105]", - "Swab from larynx [SNOMED:472888005]", - "Swab of internal nose [SNOMED:445297001]", - "Nasopharyngeal swab [SNOMED:258500001]", - "Swab of vascular catheter insertion site [SNOMED:735950000]", - "Vulval swab [SNOMED:258523003]", - "Specimen of sent gastroscope [SNOMED:76071000122106]", - "Stool specimen [SNOMED:119339001]", - "Hematoma specimen [SNOMED:258588005]", - "Blood specimen obtained for blood culture [SNOMED:446131002]", - "Specimen from surgical wound [SNOMED:734380008]", - "Specimen from bone [SNOMED: 430268003]", - "Aqueous humor specimen [SNOMED:258444001]", - "Vitreous humor specimen [SNOMED:258438000]", - "Graft specimen from patient [SNOMED:440493002]", - "Allogeneic bone graft material submitted as specimen [SNOMED:33631000087102]", - "Bronchoalveolar lavage fluid specimen [SNOMED:258607008]", - "Specimen of bone graft obtained through lavage [SNOMED:1023771000122104]", - "Mediastinal specimen obtained by lavage [SNOMED:76021000122105]", - "Nasopharyngeal washings [SNOMED:258467004]", - "Breast fluid specimen [SNOMED:309055005]", - "Contact lens submitted as specimen [SNOMED:440473005]", - "Intraocular lens specimen [SNOMED:258602002]", - "Leukocyte specimen from patient [SNOMED:122584003]", - "Lymphocyte specimen [SNOMED:119353001]", - "Fluid specimen [SNOMED:258442002]", - "Amniotic fluid specimen [SNOMED:119373006]", - "Joint fluid specimen [SNOMED:431361003]", - "Peritoneal fluid specimen [SNOMED:168139001]", - "Cerebrospinal fluid specimen obtained via ventriculoperitoneal shunt [SNOMED:446861007]", - "Cerebrospinal fluid specimen [SNOMED:258450006]", - "Pericardial fluid specimen [SNOMED:122571007]", - "Pleural fluid specimen [SNOMED:418564007]", - "Cyst fluid specimen [SNOMED:258453008]", - "Genital lochia specimen [SNOMED:122579009]", - "Device submitted as specimen [SNOMED:472919007]", - "Meconium specimen [SNOMED:119340004]", - "Bone marrow specimen [SNOMED:119359002]", - "Tissue specimen from amniotic membrane [SNOMED:446837000]", - "Microbial isolate [SNOMED:119303007]", - "Specimen from environment [SNOMED:440229008]", - "Intravenous lipid infusion fluid specimen [SNOMED:258650003]", - "Urine specimen obtained by single catheterization of urinary bladder [SNOMED:447589008]", - "Urine specimen obtained from urinary collection bag [SNOMED:446306009]", - "Urine specimen [SNOMED:122575003]", - "Mid-stream urine specimen [SNOMED:258574006]", - "Urine specimen from nephrostomy tube [SNOMED:442173007]", - "Urine specimen obtained via indwelling urinary catheter [SNOMED:446846006]", - "Postejaculation urine specimen [SNOMED:445743000]", - "Urine specimen obtained from kidney [SNOMED:446907008]", - "Suprapubic urine specimen [SNOMED:447488002]", - "Parasite specimen [SNOMED:258617003]", - "Hair specimen [SNOMED:119326000]", - "Tissue specimen from placenta [SNOMED:122736005]", - "Specimen from prosthetic device [SNOMED:438660002]", - "Cardiac pacemaker lead submitted as specimen [SNOMED:473417006]", - "Specimen of sent vascular catheter puncture [SNOMED:8561000122101]", - "Peritoneal catheter submitted as specimen [SNOMED:472944004]", - "Intracranial ventricular catheter submitted as specimen [SNOMED:472940008]", - "Corneal scraping specimen [SNOMED:258485006]", - "Serum specimen [SNOMED:119364003]", - "Prostatic fluid specimen [SNOMED:258470000]", - "Seminal fluid specimen [SNOMED:119347001]", - "Specimen from nasal sinus [SNOMED:430238007]", - "Pharmaceutical product submitted as specimen [SNOMED:446137003]", - "Surface swab [SNOMED:258537007]", - "Skin ulcer swab [SNOMED:258505006]", - "Specimen obtained from genital ulcer [SNOMED:76001000122102 ]", - "Nail specimen [SNOMED:119327009]", - "Heart valve specimen [SNOMED:258542004]", - "Native heart valve specimen [SNOMED:258544003]", - "Specimen from prosthetic heart valve [SNOMED:1003714002]", - "Vegetation from heart valve [SNOMED:258437005]", - "Skin cyst specimen [SNOMED:309075001]", - "Cardiac pacemaker submitted as specimen [SNOMED:33491000087103]", - "Blood specimen [SNOMED: 119297000]", - "Plasma specimen [SNOMED:119361006]", - "Biopsy specimen [SNOMED:258415003]", - "Peritoneal dialysate specimen [SNOMED:168140004]", - "Dialysate specimen [SNOMED:258454002]", - "Not Collected [LOINC:LA4700-6]", - "Not Applicable [SNOMED:385432009]", - "Missing [LOINC:LA14698-7]", - "Not Provided [SNOMED:434941000124101]" - ], + "$ref": "#/$defs/enums/specimen_source", "examples": [ "Nasopharynx exudate" ], @@ -3098,45 +232,7 @@ "header": "Y" }, "environmental_material": { - "enum": [ - "Air vent [ENVO:03501208]", - "Banknote [ENVO:00003896]", - "Bed rail [ENVO:03501209]", - "Building Floor [SNOMED:258535004]", - "Cloth [SNOMED:81293006]", - "Control Panel [ENVO:03501210]", - "Door [SNOMED:224751004]", - "Door Handle [ENVO:03501211]", - "Face Mask [SNOMED:261352009]", - "Face Shield [SNOMED:706724001]", - "Food [SNOMED:255620007]", - "Food Packaging [MeSH:D018857]", - "Glass [SNOMED:32039001]", - "Handrail [ENVO:03501212]", - "Hospital Gown [OBI:0002796]", - "Light Switch [ENVO:03501213]", - "Locker [ENVO:03501214]", - "N95 Mask [OBI:0002790]", - "Nurse Call Button [ENVO:03501215]", - "Paper [LOINC:LA26662-9]", - "Particulate matter [ENVO:01000060]", - "Plastic [SNOMED:61088005]", - "PPE Gown [GENEPIO:0100025]", - "Sewage [SNOMED:224939005]", - "Sink [SNOMED:705607007]", - "Soil [SNOMED:415555003]", - "Stainless Steel material [SNOMED:256506002]", - "Tissue Paper [ENVO:03501217]", - "Toilet Bowl [ENVO:03501218]", - "Water [SNOMED:11713004]", - "Wastewater [ENVO:00002001]", - "Window [SNOMED:224755008]", - "Wood [SNOMED:14402002]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/environmental_material", "examples": [ "Food isolate" ], @@ -3149,34 +245,7 @@ "header": "Y" }, "environmental_system": { - "enum": [ - "Acute care facility [ENVO:03501135]", - "Animal house [ENVO:00003040]", - "Bathroom [SNOMED:223359008]", - "Clinical assessment centre [ENVO:03501136]", - "Conference venue [ENVO:03501127]", - "Corridor [SNOMED:224720006]", - "Daycare [LOINC:LA26176-0]", - "Emergency room (ER) [LOINC:LA7172-]", - "Family practice clinic [ENVO:03501186]", - "Group home [ENVO:03501196]", - "Homeless shelter [NCIT:C204034]", - "Hospital [SNOMED:22232009]", - "Intensive Care Unit (ICU) [ENVO:03501152]", - "Long Term Care Facility [LOINC:LP173046-6]", - "Patient room [SNOMED:462598009]", - "Prison [LOINC:LA18820-3]", - "Production Facility [SNOMED:257605002]", - "School [SNOMED:257698009]", - "Sewage Plant [ENVO:00003043]", - "Subway train [ENVO:03501109]", - "Wet market [ENVO:03501198]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/environmental_system", "examples": [ "Earth surface" ], @@ -3189,57 +258,20 @@ "header": "Y" }, "collection_device": { - "enum": [ - "Air filter [SNOMED:972002]", - "Blood Collection Tube [NCIT:C113122]", - "Bronchoscope [SNOMED:706028009]", - "Collection Container [NCIT:C43446] [NCIT:C43446]", - "Collection Cup [GENEPIO:0100026] [GENEPIO:0100026]", - "Filter [SNOMED:116250002]", - "Needle [SNOMED:79068005]", - "Serum Collection Tube [NCIT:C113675]", - "Sputum Collection Tube [GENEPIO:0002115]", - "Suction Catheter [SNOMED:58253008]", - "Swab [SNOMED:257261003]", - "Other [NCIT:C17649]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/collection_device", "examples": [ "Swab" ], "ontology": "GENEPIO:0001234", "type": "string", - "description": "A data field which describes the instrument or container used to collect the sample. ", + "description": "A data field which describes the instrument or container used to collect the sample.", "classification": "Sample collection and processing", "label": "Collection Device", "fill_mode": "batch", "header": "Y" }, "host_common_name": { - "enum": [ - "Human [LOINC:LA19711-3]", - "Bat [LOINC:LA31034-4]", - "Cat [SNOMED:257528009]", - "Chicken [SNOMED:2022008]", - "Civet [SNOMED:75427002]", - "Cow [LOINC:LA31041-9]", - "Dog [LOINC:LA14178-0]", - "Lion [SNOMED:112507006]", - "Mink [SNOMED:57418000]", - "Pangolin [SNOMED:106948007]", - "Pig [LOINC:LA31036-9]", - "Pigeon [LOINC:LP31646-0]", - "Tiger [SNOMED:79047009]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/host_common_name", "examples": [ "Human" ], @@ -3253,13 +285,13 @@ }, "host_age_years": { "examples": [ - "55" + 55 ], "ontology": "SNOMED:424144002", "type": "integer", "minimum": 3, "maximum": 120, - "description": "Age of host at the time of sampling. Age between 3 and 110 years old. Recommended", + "description": "Age of host at the time of sampling. Age between 3 and 110 years old. Recommended.", "classification": "Host information", "label": "Host Age Years", "fill_mode": "sample", @@ -3267,53 +299,33 @@ }, "host_age_months": { "examples": [ - "14" + 14 ], "ontology": "LOINC:LA33639-8", "type": "integer", "minimum": 0, "maximum": 36, - "description": "ONLY when [Host Age years] < 3. Age of host at the time of sampling. If the age is less than three years indicate in months between 0 and 36. Recommended", + "description": "ONLY when [Host Age years] < 3. Age of host at the time of sampling. If the age is less than three years indicate in months between 0 and 36. Recommended.", "classification": "Host information", "label": "Host Age Months", "fill_mode": "sample", "header": "Y" }, "host_gender": { - "enum": [ - "Female [LOINC:LA3-6]", - "Male [LOINC:LA2-8]", - "Non-binary Gender [SNOMED:772004004]", - "Transgender (assigned male at birth) [GSSO:004004]", - "Transgender (assigned female at birth) [GSSO:004005]", - "Undeclared [GSSO:000131]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/host_gender", "examples": [ "Female" ], "ontology": "SNOMED:263495000", "type": "string", - "description": "The gender of the host at the time of sample collection. Recomended", + "description": "The gender of the host at the time of sample collection. Recomended.", "classification": "Host information", "label": "Host Gender", "fill_mode": "sample", "header": "Y" }, "vaccinated": { - "enum": [ - "Yes [SNOMED:373066001]", - "No [SNOMED:373067005]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/vaccinated", "examples": [ "Yes" ], @@ -3326,57 +338,33 @@ "header": "Y" }, "medicated": { - "enum": [ - "Yes [SNOMED:373066001]", - "No [SNOMED:373067005]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/medicated", "examples": [ "Yes" ], "ontology": "SNOMED:18629005", "type": "string", - "description": "Has received medication for the identified treatment or prophylaxis", + "description": "Has received medication for the identified treatment or prophylaxis.", "classification": "Host information", "label": "Specific medication for treatment or prophylaxis", "fill_mode": "sample", "header": "Y" }, "hospitalized": { - "enum": [ - "Yes [SNOMED:373066001]", - "No [SNOMED:373067005]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/hospitalized", "examples": [ "Yes" ], "ontology": "LOINC:LA15417-1", "type": "string", - "description": "Whether the patient was admitted to a hospital", + "description": "Whether the patient was admitted to a hospital.", "classification": "Host information", "label": "Hospitalization", "fill_mode": "sample", "header": "Y" }, "icu_admission": { - "enum": [ - "Yes [SNOMED:373066001]", - "No [SNOMED:373067005]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/icu_admission", "examples": [ "Yes" ], @@ -3389,15 +377,7 @@ "header": "Y" }, "death": { - "enum": [ - "Yes [SNOMED:373066001]", - "No [SNOMED:373067005]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/death", "examples": [ "No" ], @@ -3410,15 +390,7 @@ "header": "Y" }, "immunosuppressed": { - "enum": [ - "Yes [SNOMED:373066001]", - "No [SNOMED:373067005]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/immunosuppressed", "examples": [ "No" ], @@ -3437,7 +409,7 @@ "ontology": "GENEPIO:0001447", "type": "string", "format": "date", - "description": "The date the sample was sequenced. YYYY-MM-DD", + "description": "The date the sample was sequenced. YYYY-MM-DD.", "classification": "Sequencing", "label": "Sequencing Date", "fill_mode": "batch", @@ -3449,26 +421,14 @@ ], "ontology": "OBI_0302884", "type": "string", - "description": "DNA/RNA extraction protocol", + "description": "DNA/RNA extraction protocol.", "classification": "Sequencing", "label": "Nucleic acid extraction protocol", "fill_mode": "batch", "header": "Y" }, "all_in_one_library_kit": { - "enum": [ - "Ion Xpress", - "ABL_DeepChek NGS", - "Ion AmpliSeq Kit for Chef DL8", - "NEBNext Fast DNA Library Prep Set for Ion Torrent", - "NEBNext ARTIC SARS-CoV-2 FS", - "Illumina COVIDSeq Test [CIDO:0020172]", - "Illumina COVIDSeq Assay", - "ABL DeepChek® Assay WG SC2 V1", - "ABL DeepChek® Assay WG SC2 V4", - "Not Provided [SNOMED:434941000124101]", - "Other [NCIT:C17649]" - ], + "$ref": "#/$defs/enums/all_in_one_library_kit", "examples": [ "Ion Xpress" ], @@ -3481,35 +441,7 @@ "header": "Y" }, "library_preparation_kit": { - "enum": [ - "Illumina DNA PCR-Free Prep", - "Illumina DNA Prep", - "Illumina FFPE DNA Prep", - "Illumina Stranded mRNA Prep", - "Nextera XT DNA Library Preparation Kit", - "TrueSeq ChIP Library Preparation Kit", - "TruSeq DNA Nano", - "TruSeq DNA Nano Library Prep Kit for NeoPrep", - "TruSeq DNA PCR-Free", - "TruSeq RNA Library Prep Kit v2", - "TruSeq Stranded Total RNA", - "TruSeq Stranded mRNA", - "Nextera XT", - "NEBNex Fast DNA Library Prep Set for Ion Torrent", - "Nextera DNA Flex", - "Ion AmpliSeq Kit Library Kit Plus", - "Ion AmpliSeq Library Kit 2.0", - "Ion Xpress Plus Fragment Library Kit", - "Oxford Nanopore Sequencing Kit", - "SQK-RBK110-96", - "SQK-RBK114-96", - "Nanopore COVID Maxi: 9216 samples", - "Nanopore COVID Midi: 2304 samples", - "Nanopore COVID Mini: 576 samples", - "Vela Diagnostics:ViroKey SQ FLEX Library Prep Reagents", - "Not Provided [SNOMED:434941000124101]", - "Other [NCIT:C17649]" - ], + "$ref": "#/$defs/enums/library_preparation_kit", "examples": [ "Illumina DNA Prep Tagmentation" ], @@ -3522,21 +454,13 @@ "header": "Y" }, "enrichment_protocol": { - "enum": [ - "Amplicon [GENEPIO:0001974]", - "Probes [OMIT:0016121]", - "Custom probes [OMIT:0016112]", - "Custom amplicon [OMIT:0016112]", - "No enrichment [NCIT:C154307]", - "Other [NCIT:C17649]", - "Not Provided [SNOMED:434941000124101]" - ], + "$ref": "#/$defs/enums/enrichment_protocol", "examples": [ "Amplicon" ], "ontology": "EFO_0009089", "type": "string", - "description": "Type of enrichment protocol", + "description": "Type of enrichment protocol.", "classification": "Sequencing", "label": "Enrichment Protocol", "fill_mode": "batch", @@ -3548,30 +472,14 @@ ], "ontology": "0", "type": "string", - "description": "Specify if you have used another enrichment protocol", + "description": "Specify if you have used another enrichment protocol.", "classification": "Sequencing", "label": "If Enrichment Protocol Is Other, Specify", "fill_mode": "batch", "header": "Y" }, "enrichment_panel": { - "enum": [ - "ARTIC", - "Exome 2.5", - "Illumina respiratory Virus Oligo Panel", - "Illumina AmpliSeq Community panel", - "Illumina AmpliSeq SARS-CoV-2 Research Panel for Illumina", - "Ion AmpliSeq SARS-CoV-2 Research Panel", - "xGen SC2 Midnight1200 Amplicon Panel", - "Oxford Nanopore Technologies Midnight Amplicon Panel", - "ViroKey SQ FLEX SARS-CoV-2 Primer Set", - "NEBNext VarSkip Short SARS-CoV-2 primers", - "Illumina Microbial Amplicon Prep-Influenza A/B", - "Illumina Respiratory Pathogen ID/AMR Enrichment Panel", - "Illumina Viral Surveillance Panel v2", - "Twist Bioscience Respiratory Virus Research Panel", - "Other [NCIT:C17649]" - ], + "$ref": "#/$defs/enums/enrichment_panel", "examples": [ "ARTIC" ], @@ -3589,44 +497,20 @@ ], "ontology": "0", "type": "string", - "description": "Specify if you have used another enrichment panel/assay", + "description": "Specify if you have used another enrichment panel/assay.", "classification": "Sequencing", "label": "If Enrichment panel/assay Is Other, Specify", "fill_mode": "batch", "header": "Y" }, "enrichment_panel_version": { - "enum": [ - "ARTIC v1", - "ARTIC v2", - "ARTIC v3", - "ARTIC v4", - "ARTIC v4.1", - "ARTIC v5", - "ARTIC v5.1", - "ARTIC v5.2", - "ARTIC v5.3", - "ARTIC v5.3.2", - "Illumina AmpliSeq Community panel", - "Illumina AmpliSeq SARS-CoV-2 Research Panel for Illumina", - "Illumina Respiratory Virus Oligos Panel V1", - "Illumina Respiratory Virus Oligos Panel V2", - "Ion AmpliSeq SARS-CoV-2 Insight", - "xGen SC2 Midnight1200 Amplicon Panel", - "Midnight Amplicon Panel v1", - "Midnight Amplicon Panel v2", - "Midnight Amplicon Panel v3", - "ViroKey SQ FLEX SARS-CoV-2 Primer Set", - "NEBNext VarSkip Short SARS-CoV-2 primers", - "Illumina Viral Surveillance Panel v2", - "Other [NCIT:C17649]" - ], + "$ref": "#/$defs/enums/enrichment_panel_version", "examples": [ "ARTIC v4" ], "ontology": "0", "type": "string", - "description": "Version fo the enrichment panel", + "description": "Version fo the enrichment panel.", "classification": "Sequencing", "label": "Enrichment panel/assay version", "fill_mode": "batch", @@ -3634,7 +518,7 @@ }, "number_of_samples_in_run": { "examples": [ - "96" + 96 ], "ontology": "KISAO_0000326", "type": "integer", @@ -3659,95 +543,7 @@ "header": "Y" }, "sequencing_instrument_model": { - "enum": [ - "Illumina sequencing instrument [GENEPIO:0100105]", - "Illumina Genome Analyzer [GENEPIO:0100106]", - "Illumina Genome Analyzer II [OBI:0000703]", - "Illumina Genome Analyzer IIx [OBI:0002000]", - "Illumina HiScanSQ [GENEPIO:0100109]", - "Illumina HiSeq [GENEPIO:0100110]", - "Illumina HiSeq X [GENEPIO:0100111]", - "Illumina HiSeq X Five [GENEPIO:0100112]", - "Illumina HiSeq X Ten [GENEPIO:0100113]", - "Illumina HiSeq 1000 [OBI:0002022]", - "Illumina HiSeq 1500 [GENEPIO:0100115]", - "Illumina HiSeq 2000 [OBI:0002001]", - "Illumina HiSeq 2500 [OBI:0002002]", - "Illumina HiSeq 3000 [OBI:0002048]", - "Illumina HiSeq 4000 [OBI:0002049]", - "Illumina iSeq [GENEPIO:0100120]", - "Illumina iSeq 100 [GENEPIO:0100121]", - "Illumina NovaSeq [GENEPIO:0100122]", - "Illumina NovaSeq 6000 [GENEPIO:0100123]", - "Illumina MiniSeq [GENEPIO:0100124]", - "Illumina MiSeq [OBI:0002003]", - "Illumina NextSeq [GENEPIO:0100126]", - "Illumina NextSeq 500 [OBI:0002021]", - "Illumina NextSeq 550 [GENEPIO:0100128]", - "Illumina NextSeq 1000 [OBI:0003606]", - "Illumina NextSeq 2000 [GENEPIO:0100129]", - "Illumina NextSeq 6000", - "Ion GeneStudio S5 Prime", - "Ion GeneStudio S5 Plus", - "Ion GeneStudio S5", - "Ion Torrent sequencing instrument [GENEPIO:0100135]", - "Ion Torrent Genexus", - "Ion Torrent PGM [GENEPIO:0100136]", - "Ion Torrent Proton [GENEPIO:0100137]", - "Ion Torrent S5 [GENEPIO:0100139]", - "Ion Torrent S5 XL [GENEPIO:0100138]", - "MinION [GENEPIO:0100142]", - "GridION [GENEPIO:0100141]", - "PromethION [GENEPIO:0100143]", - "Pacific Biosciences sequencing instrument [GENEPIO:0100130]", - "PacBio RS [GENEPIO:0100131]", - "PacBio RS II [OBI:0002012]", - "PacBio Sequel [GENEPIO:0100133]", - "PacBio Sequel II [GENEPIO:0100134]", - "Oxford Nanopore sequencing instrument [GENEPIO:0100140]", - "Oxford Nanopore GridION [GENEPIO:0100141]", - "Oxford Nanopore MinION [GENEPIO:0100142]", - "Oxford Nanopore PromethION [GENEPIO:0100143]", - "AB 310 Genetic Analyzer", - "AB 3130 Genetic Analyzer", - "AB 3130xL Genetic Analyzer", - "AB 3500 Genetic Analyzer", - "AB 3500xL Genetic Analyzer", - "AB 3730 Genetic Analyzer", - "AB 3730xL Genetic Analyzer", - "AB SOLID System [OBI:0000696]", - "AB SOLID System 2.0 [EFO:0004442]", - "AB SOLID System 3.0 [EFO:0004439]", - "AB SOLID 3 Plus System [OBI:0002007]", - "AB SOLID 4 System [EFO:0004438]", - "AB SOLID 4hq System [AB SOLID 4hq System]", - "AB SOLID PI System [EFO:0004437]", - "AB. 5500 Genetic Analyzer", - "AB 5500xl Genetic Analyzer", - "AB 5500xl-W Genetic Analysis System", - "BGI Genomics sequencing instrument [GENEPIO:0100144]", - "BGISEQ-500 [GENEPIO:0100145]", - "BGISEQ-50", - "DNBSEQ-T7 [GENEPIO:0100147]", - "DNBSEQ-G400 [GENEPIO:0100148]", - "DNBSEQ-G400 FAST [GENEPIO:0100149]", - "MGI sequencing instrument [GENEPIO:0100146]", - "MGISEQ-2000RS", - "MGI DNBSEQ-T7 [GENEPIO:0100147]", - "MGI DNBSEQ-G400 [GENEPIO:0100148]", - "MGI DNBSEQ-G400RS FAST [GENEPIO:0100149]", - "MGI DNBSEQ-G50 [GENEPIO:0100150]", - "454 GS [EFO:0004431]", - "454 GS 20 [EFO:0004206]", - "454 GS FLX + [EFO:0004432]", - "454 GS FLX Titanium [EFO:0004433]", - "454 GS FLX Junior [GENEPIO:0001938]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/sequencing_instrument_model", "examples": [ "Illumina NextSeq 550" ], @@ -3760,145 +556,20 @@ "header": "Y" }, "flowcell_kit": { - "enum": [ - "HiSeq 3000/4000 PE Cluster Kit", - "HiSeq 3000/4000 SBS Kit (50 cycles)", - "HiSeq 3000/4000 SBS Kit (150 cycles)", - "HiSeq 3000/4000 SBS Kit (300 cycles)", - "HiSeq 3000/4000 SBS Kit", - "HiSeq 3000/4000 SR Cluster Kit", - "TG HiSeq 3000/4000 SBS Kit (50 cycles)", - "TG HiSeq 3000/4000 SBS Kit (150 cycles)", - "TG HiSeq 3000/4000 SBS Kit (300 cycles)", - "TG HiSeq 3000/4000 PE ClusterKit", - "TG HiSeq 3000/4000 SR ClusterKit", - "HiSeq PE Cluster Kit v4 cBot", - "HiSeq SR Rapid Cluster Kit v2", - "HiSeq PE Rapid Cluster Kit v2", - "TG HiSeq Rapid PE Cluster Kit v2", - "HiSeq Rapid Duo cBot Sample Loading Kit", - "TG TruSeq Rapid Duo cBot Sample Loading Kit", - "HiSeq Rapid SBS Kit v2 (50 cycles)", - "HiSeq Rapid SBS Kit v2 (200 cycles)", - "HiSeq Rapid SBS Kit v2 (500 cycles)", - "TG HiSeq Rapid SBS Kit v2 (200 Cycle)", - "TG HiSeq Rapid SBS Kit v2 (50 Cycle)", - "HiSeq SR Cluster Kit v4 cBot", - "TG HiSeq SR Cluster Kit v4 – cBot", - "TG HiSeq PE Cluster Kit v4 – cBot", - "HiSeq X Ten Reagent Kit v2.5", - "HiSeq X Ten Reagent Kit v2.5 – 10 pack", - "HiSeq X Five Reagent Kit v2.5", - "MiSeq Reagent Kit v3 (150-cycle)", - "MiSeq Reagent Kit v3 (600-cycle)", - "TG MiSeq Reagent Kit v3 (600 cycle)", - "TG MiSeq Reagent Kit v3 (150 cycle)", - "MiSeq Reagent Kit v2 (50-cycles)", - "MiSeq Reagent Kit v2 (300-cycles)", - "MiSeq Reagent Kit v2 (500-cycles)", - "MiniSeq Rapid Reagent Kit (100 cycles)", - "MiniSeq High Output Reagent Kit (75-cycles)", - "MiniSeq High Output Reagent Kit (150-cycles)", - "NextSeq 1000/2000 P1 Reagents (300 Cycles)", - "NextSeq 1000/2000 P2 Reagents (100 Cycles) v3", - "NextSeq 1000/2000 P2 Reagents (200 Cycles) v3", - "NextSeq 1000/2000 P2 Reagents (300 Cycles) v3", - "NextSeq 2000 P3 Reagents (50 Cycles)", - "NextSeq 2000 P3 Reagents (100 Cycles)", - "NextSeq 2000 P3 Reagents (200 Cycles)", - "NextSeq 2000 P3 Reagents (300 Cycles)", - "NextSeq 1000/2000 Read and Index Primers", - "NextSeq 1000/2000 Index Primer Kit", - "NextSeq 1000/2000 Read Primer Kit", - "NextSeq 500/550 High Output Kit v2.5 (75 Cycles)", - "NextSeq 500/550 High Output Kit v2.5 (150 Cycles)", - "NextSeq 500/550 High Output Kit v2.5 (300 Cycles)", - "NextSeq 500/550 Mid Output Kit v2.5 (150 Cycles)", - "NextSeq 500/550 Mid Output Kit v2.5 (300 Cycles)", - "TG NextSeq 500/550 High Output Kit v2.5 (75 Cycles)", - "TG NextSeq 500/550 High Output Kit v2.5 (150 Cycles)", - "TG NextSeq 500/550 High Output Kit v2.5 (300 Cycles)", - "TG NextSeq 500/550 Mid Output Kit v2.5 (150 Cycles)", - "TG NextSeq 500/550 Mid Output Kit v2.5 (300 Cycles)", - "NovaSeq 6000 S4 Reagent Kit v1.5 (300 cycles)", - "NovaSeq 6000 S4 Reagent Kit v1.5 (200 cycles)", - "NovaSeq 6000 S4 Reagent Kit v1.5 (35 cycles)", - "NovaSeq 6000 S2 Reagent Kit v1.5 (300 cycles)", - "NovaSeq 6000 S2 Reagent Kit v1.5 (200 cycles)", - "NovaSeq 6000 S2 Reagent Kit v1.5 (100 cycles)", - "NovaSeq 6000 S1 Reagent Kit v1.5 (300 cycles)", - "NovaSeq 6000 S1 Reagent Kit v1.5 (200 cycles)", - "NovaSeq 6000 S1 Reagent Kit v1.5 (100 cycles)", - "NovaSeq 6000 SP Reagent Kit v1.5 (500 cycles)", - "NovaSeq 6000 SP Reagent Kit v1.5 (300 cycles)", - "NovaSeq 6000 SP Reagent Kit v1.5 (200 cycles)", - "NovaSeq 6000 SP Reagent Kit v1.5 (100 cycles)", - "NovaSeq 6000 SP Reagent Kit (100 cycles)", - "NovaSeq 6000 SP Reagent Kit (200 cycles)", - "NovaSeq 6000 SP Reagent Kit (300 cycles)", - "NovaSeq 6000 SP Reagent Kit (500 cycles)", - "NovaSeq 6000 S1 Reagent Kit (100 cycles)", - "NovaSeq 6000 S1 Reagent Kit (200 cycles)", - "NovaSeq 6000 S1 Reagent Kit (300 cycles)", - "NovaSeq 6000 S2 Reagent Kit (100 cycles)", - "NovaSeq 6000 S2 Reagent Kit (200 cycles)", - "NovaSeq 6000 S2 Reagent Kit (300 cycles)", - "NovaSeq 6000 S4 Reagent Kit (200 cycles)", - "NovaSeq 6000 S4 Reagent Kit (300 cycles)", - "NovaSeq 6000 S4 Reagent Kit (300 Cycles) – 10 pack", - "NovaSeq 6000 S4 Reagent Kit (300 Cycles) – 20 pack", - "NovaSeq 6000 S4 Reagent Kit (300 Cycles) – 40 pack", - "NovaSeq Library Tubes Accessory Pack (24 tubes)", - "NovaSeq XP 4-Lane Kit v1.5", - "NovaSeq XP 2-Lane Kit v1.5", - "NovaSeq XP 2-Lane Kit", - "NovaSeq Xp 4-Lane Kit", - "NovaSeq Xp Flow Cell Dock", - "NovaSeq Xp 2-Lane Manifold Pack", - "NovaSeq Xp 4-Lane Manifold Pack", - "PhiX Control v3", - "TG PhiX Control Kit v3", - "NextSeq PhiX Control Kit", - "Single-Read", - "TruSeq Dual Index Sequencing Primer Box", - "Paired-End", - "TruSeq PE Cluster Kit v3-cBot-HS", - "TruSeq PE Cluster Kit v5-CS-GA", - "TruSeq SBS Kit v3-HS (200 cycles)", - "TruSeq SBS Kit v3-HS (50 cycles)", - "TG TruSeq SBS Kit v3 - HS (200-cycles)", - "TruSeq SBS Kit v5-GA", - "TruSeq SR Cluster Kit v3-cBot-HS", - "TG TruSeq SR Cluster Kit v1-cBot – HS", - "iSeq 100 i1 Reagent v2 (300-cycle)", - "iSeq 100 i1 Reagent v2 (300-cycle) 4 pack", - "iSeq 100 i1 Reagent v2 (300-cycle) 8 pack", - "Ion 540 Chip Kit", - "Not Provided [SNOMED:434941000124101]", - "Other [NCIT:C17649]" - ], + "$ref": "#/$defs/enums/flowcell_kit", "examples": [ "NextSeq 500/550 High Output Kit v2.5 (75 Cycles)" ], "ontology": "0", "type": "string", - "description": "Flowcell sequencer used for sequencing the sample", + "description": "Flowcell sequencer used for sequencing the sample.", "classification": "Sequencing", "label": "Flowcell Kit", "fill_mode": "batch", "header": "Y" }, "library_source": { - "enum": [ - "Genomic single cell [EDAM:4028]", - "Transcriptomic [NCIT:C153189]", - "Metagenomic [NCIT:C201925]", - "Metatranscriptomic [NCIT:C201926]", - "Synthetic [BAO:0003073]", - "Viral rna [NCIT:C204811]", - "Other [NCIT:C17649]", - "Not Provided [SNOMED:434941000124101]" - ], + "$ref": "#/$defs/enums/library_source", "examples": [ "viral RNA source" ], @@ -3911,35 +582,7 @@ "header": "Y" }, "library_selection": { - "enum": [ - "RANDOM [LOINC:LA29504-0]", - "PCR [LOINC:LA26418-6]", - "RANDOM PCR [GENEPIO:0001957]", - "RT-PCR [LOINC:LP435370-4]", - "HMPR [GENEPIO:0001949]", - "MF [GENEPIO:0001952]", - "repeat fractionation", - "size fractionation [GENEPIO:0001963]", - "MSLL [GENEPIO:0001954]", - "cDNA [NCIT:C324]", - "ChIP [GENEPIO:0001947]", - "MNase [GENEPIO:0001953]", - "DNase [GENEPIO:0001948]", - "Hybrid Selection [GENEPIO:0001950]", - "Reduced Representation [GENEPIO:0001960]", - "Restriction Digest [GENEPIO:0001961]", - "5-methylcytidine antibody [GENEPIO:0001941]", - "MBD2 protein methyl-CpG binding domain [GENEPIO:0001951]", - "CAGE [GENEPIO:0001942]", - "RACE [GENEPIO:0001956]", - "MDA [EFO:0008800]", - "padlock probes capture method", - "Oligo-dT [NCIT:C18685]", - "Inverse rRNA selection", - "ChIP-Seq [NCIT:C106049]", - "Other [NCIT:C17649]", - "Not Provided [SNOMED:434941000124101]" - ], + "$ref": "#/$defs/enums/library_selection", "examples": [ "PCR method" ], @@ -3952,29 +595,7 @@ "header": "Y" }, "library_strategy": { - "enum": [ - "Bisultife-Seq strategy [GENEPIO:0001975]", - "CTS strategy [GENEPIO:0001978]", - "ChIP-Seq strategy [GENEPIO:0001979]", - "DNase-Hypersensitivity strategy [GENEPIO:0001980]", - "EST strategy [GENEPIO:0001981]", - "FL-cDNA strategy [GENEPIO:0001983]", - "MB-Seq strategy [GENEPIO:0001984]", - "MNase-Seq strategy [GENEPIO:0001985]", - "MRE-Seq strategy [GENEPIO:0001986]", - "MeDIP-Seq strategy [GENEPIO:0001987]", - "RNA-Seq strategy [GENEPIO:0001990]", - "WCS strategy [GENEPIO:0001991]", - "WGS strategy [GENEPIO:0001992]", - "WXS strategy [GENEPIO:0001993]", - "Amplicon [GENEPIO:0001974]", - "Clone end strategy [GENEPIO:0001976]", - "Clone strategy [GENEPIO:0001977]", - "Finishing strategy [GENEPIO:0001982]", - "Other library strategy [GENEPIO:0001988]", - "Pool clone strategy [GENEPIO:0001989]", - "Not Provided [SNOMED:434941000124101]" - ], + "$ref": "#/$defs/enums/library_strategy", "examples": [ "WGS strategy" ], @@ -3987,63 +608,20 @@ "header": "Y" }, "library_layout": { - "enum": [ - "Single-end [OBI:0002481]", - "Paired-end [OBI:0001852]" - ], + "$ref": "#/$defs/enums/library_layout", "examples": [ "Single-end" ], "ontology": "NCIT:C175894", "type": "string", - "description": "Single or paired sequencing configuration", + "description": "Single or paired sequencing configuration.", "classification": "Sequencing", "label": "Library Layout", "fill_mode": "batch", "header": "Y" }, "gene_name_1": { - "enum": [ - "E gene [LOINC:LP422409-5]", - "M gene [LOINC:LP422882-3]", - "N gene [LOINC:LP417599-0]", - "Spike gene [GENEPIO:0100154]", - "orf1ab (rep) [LOINC:LP437152-4]", - "orf1a (pp1a) [LP428394-3]", - "nsp11 [GENEPIO:0100157]", - "nsp1 [GENEPIO:0100158]", - "nsp2 [GENEPIO:0100159]", - "nsp3 [GENEPIO:0100160]", - "nsp4 [GENEPIO:0100161]", - "nsp5 [GENEPIO:0100162]", - "nsp6 [GENEPIO:0100163]", - "nsp7 [GENEPIO:0100164]", - "nsp8 [GENEPIO:0100165]", - "nsp9 [GENEPIO:0100166]", - "nsp10 [GENEPIO:0100167]", - "RdRp gene (nsp12) [GENEPIO:0100168]", - "hel gene (nsp13) [GENEPIO:0100169]", - "exoN gene (nsp14) [GENEPIO:0100170]", - "nsp15 [GENEPIO:0100171]", - "nsp16 [GENEPIO:0100172]", - "orf3a [GENEPIO:0100173]", - "orf3b [GENEPIO:0100174]", - "orf6 (ns6) [GENEPIO:0100175]", - "orf7a [GENEPIO:0100176]", - "orf7b (ns7b) [GENEPIO:0100177]", - "orf8 (ns8) [GENEPIO:0100178]", - "orf9b [GENEPIO:0100179]", - "orf9c [GENEPIO:0100180]", - "orf10 [GENEPIO:0100181]", - "orf14 [GENEPIO:0100182]", - "SARS-COV-2 5' UTR [GENEPIO:0100183]", - "Other [NCIT:C124261]", - "Not Applicable [LOINC:LA4720-4]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/gene_name_1", "examples": [ "ORF1ab" ], @@ -4057,7 +635,7 @@ }, "diagnostic_pcr_Ct_value_1": { "examples": [ - "40" + 40 ], "ontology": "GENEPIO:0001509", "type": "number", @@ -4070,47 +648,7 @@ "header": "Y" }, "gene_name_2": { - "enum": [ - "E gene [LOINC:LP422409-5]", - "M gene [LOINC:LP422882-3]", - "N gene [LOINC:LP417599-0]", - "Spike gene [GENEPIO:0100154]", - "orf1ab (rep) [LOINC:LP437152-4]", - "orf1a (pp1a) [LOINC:LP428394-3]", - "nsp11 [GENEPIO:0100157]", - "nsp1 [GENEPIO:0100158]", - "nsp2 [GENEPIO:0100159]", - "nsp3 [GENEPIO:0100160]", - "nsp4 [GENEPIO:0100161]", - "nsp5 [GENEPIO:0100162]", - "nsp6 [GENEPIO:0100163]", - "nsp7 [GENEPIO:0100164]", - "nsp8 [GENEPIO:0100165]", - "nsp9 [GENEPIO:0100166]", - "nsp10 [GENEPIO:0100167]", - "RdRp gene (nsp12) [GENEPIO:0100168]", - "hel gene (nsp13) [GENEPIO:0100169]", - "exoN gene (nsp14) [GENEPIO:0100170]", - "nsp15 [GENEPIO:0100171]", - "nsp16 [GENEPIO:0100172]", - "orf3a [GENEPIO:0100173]", - "orf3b [GENEPIO:0100174]", - "orf6 (ns6) [GENEPIO:0100175]", - "orf7a [GENEPIO:0100176]", - "orf7b (ns7b) [GENEPIO:0100177]", - "orf8 (ns8) [GENEPIO:0100178]", - "orf9b [GENEPIO:0100179]", - "orf9c [GENEPIO:0100180]", - "orf10 [GENEPIO:0100181]", - "orf14 [GENEPIO:0100182]", - "SARS-COV-2 5' UTR [GENEPIO:0100183]", - "Other [NCIT:C124261]", - "Not Applicable [LOINC:LA4720-4]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/gene_name_2", "examples": [ "S" ], @@ -4166,7 +704,7 @@ ], "ontology": "GENEPIO:0001477", "type": "string", - "description": "A data field which describes the user-specified filename of the read 2 (r2) file. ", + "description": "A data field which describes the user-specified filename of the read 2 (r2) file.", "classification": "Bioinformatics and QC metrics fields", "label": "Sequence file R2", "fill_mode": "sample", @@ -4178,7 +716,7 @@ ], "ontology": "NCIT:C70663", "type": "string", - "description": "Unique identifier for each sample", + "description": "Unique identifier for each sample.", "classification": "Sample collection and processing", "label": "Unique identifier", "fill_mode": "batch", @@ -4190,7 +728,7 @@ ], "ontology": "NCIT:C104504", "type": "string", - "description": "Unique identifier for each analysis batch", + "description": "Unique identifier for each analysis batch.", "classification": "Sample collection and processing", "label": "Batch identifier", "fill_mode": "batch", @@ -4262,7 +800,7 @@ ], "ontology": "GENEPIO:0001803", "type": "string", - "description": "Autonomic center Code", + "description": "Autonomic center Code.", "classification": "Sample collection and processing", "label": "Autonomic Center Code", "fill_mode": "batch", @@ -4293,283 +831,7 @@ "header": "N" }, "geo_loc_country": { - "enum": [ - "Afghanistan [GAZ:00006882]", - "Albania [GAZ:00002953]", - "Algeria [GAZ:00000563]", - "American Samoa [GAZ:00003957]", - "Andorra [GAZ:00002948]", - "Angola [GAZ:00001095]", - "Anguilla [GAZ:00009159]", - "Antarctica [GAZ:00000462]", - "Antigua and Barbuda [GAZ:00006883]", - "Argentina [GAZ:00002928]", - "Armenia [GAZ:00004094]", - "Aruba [GAZ:00004025]", - "Ashmore and Cartier Islands [GAZ:00005901]", - "Australia [GAZ:00000463]", - "Austria [GAZ:00002942]", - "Azerbaijan [GAZ:00004941]", - "Bahamas [GAZ:00002733]", - "Bahrain [GAZ:00005281]", - "Baker Island [GAZ:00007117]", - "Bangladesh [GAZ:00003750]", - "Barbados [GAZ:00001251]", - "Bassas da India [GAZ:00005810]", - "Belarus [GAZ:00006886]", - "Belgium [GAZ:00002938]", - "Belize [GAZ:00002934]", - "Benin [GAZ:00000904]", - "Bermuda [GAZ:00001264]", - "Bhutan [GAZ:00003920]", - "Bolivia [GAZ:00002511]", - "Borneo [GAZ:00025355]", - "Bosnia and Herzegovina [GAZ:00006887]", - "Botswana [GAZ:00001097]", - "Bouvet Island [GAZ:00001453]", - "Brazil [GAZ:00002828]", - "British Virgin Islands [GAZ:00003961]", - "Brunei [GAZ:00003901]", - "Bulgaria [GAZ:00002950]", - "Burkina Faso [GAZ:00000905]", - "Burundi [GAZ:00001090]", - "Cambodia [GAZ:00006888]", - "Cameroon [GAZ:00001093]", - "Canada [GAZ:00002560]", - "Cape Verde [GAZ:00001227]", - "Cayman Islands [GAZ:00003986]", - "Central African Republic [GAZ:00001089]", - "Chad [GAZ:00000586]", - "Chile [GAZ:00002825]", - "China [GAZ:00002845]", - "Christmas Island [GAZ:00005915]", - "Clipperton Island [GAZ:00005838]", - "Cocos Islands [GAZ:00009721]", - "Colombia [GAZ:00002929]", - "Comoros [GAZ:00005820]", - "Cook Islands [GAZ:00053798]", - "Coral Sea Islands [GAZ:00005917]", - "Costa Rica [GAZ:00002901]", - "Cote d'Ivoire [GAZ:00000906]", - "Croatia [GAZ:00002719]", - "Cuba [GAZ:00003762]", - "Curacao [GAZ:00012582]", - "Cyprus [GAZ:00004006]", - "Czech Republic [GAZ:00002954]", - "Democratic Republic of the Congo [GAZ:00001086]", - "Denmark [GAZ:00005852]", - "Djibouti [GAZ:00000582]", - "Dominica [GAZ:00006890]", - "Dominican Republic [GAZ:00003952]", - "Ecuador [GAZ:00002912]", - "Egypt [GAZ:00003934]", - "El Salvador [GAZ:00002935]", - "Equatorial Guinea [GAZ:00001091]", - "Eritrea [GAZ:00000581]", - "Estonia [GAZ:00002959]", - "Eswatini [GAZ:00001099]", - "Ethiopia [GAZ:00000567]", - "Europa Island [GAZ:00005811]", - "Falkland Islands [GAZ:00001412]", - "Faroe Islands [GAZ:00059206]", - "Fiji [GAZ:00006891]", - "Finland [GAZ:00002937]", - "France [GAZ:00003940]", - "French Guiana [GAZ:00002516]", - "French Polynesia [GAZ:00002918]", - "French Southern and Antarctic Lands [GAZ:00003753]", - "Gabon [GAZ:00001092]", - "Gambia [GAZ:00000907]", - "Gaza Strip [GAZ:00009571]", - "Georgia [GAZ:00004942]", - "Germany [GAZ:00002646]", - "Ghana [GAZ:00000908]", - "Gibraltar [GAZ:00003987]", - "Glorioso Islands [GAZ:00005808]", - "Greece [GAZ:00002945]", - "Greenland [GAZ:00001507]", - "Grenada [GAZ:02000573]", - "Guadeloupe [GAZ:00067142]", - "Guam [GAZ:00003706]", - "Guatemala [GAZ:00002936]", - "Guernsey [GAZ:00001550]", - "Guinea [GAZ:00000909]", - "Guinea-Bissau [GAZ:00000910]", - "Guyana [GAZ:00002522]", - "Haiti [GAZ:00003953]", - "Heard Island and McDonald Islands [GAZ:00009718]", - "Honduras [GAZ:00002894]", - "Hong Kong [GAZ:00003203]", - "Howland Island [GAZ:00007120]", - "Hungary [GAZ:00002952]", - "Iceland [GAZ:00000843]", - "India [GAZ:00002839]", - "Indonesia [GAZ:00003727]", - "Iran [GAZ:00004474]", - "Iraq [GAZ:00004483]", - "Ireland [GAZ:00002943]", - "Isle of Man [GAZ:00052477]", - "Israel [GAZ:00002476]", - "Italy [GAZ:00002650]", - "Jamaica [GAZ:00003781]", - "Jan Mayen [GAZ:00005853]", - "Japan [GAZ:00002747]", - "Jarvis Island [GAZ:00007118]", - "Jersey [GAZ:00001551]", - "Johnston Atoll [GAZ:00007114]", - "Jordan [GAZ:00002473]", - "Juan de Nova Island [GAZ:00005809]", - "Kazakhstan [GAZ:00004999]", - "Kenya [GAZ:00001101]", - "Kerguelen Archipelago [GAZ:00005682]", - "Kingman Reef [GAZ:00007116]", - "Kiribati [GAZ:00006894]", - "Kosovo [GAZ:00011337]", - "Kuwait [GAZ:00005285]", - "Kyrgyzstan [GAZ:00006893]", - "Laos [GAZ:00006889]", - "Latvia [GAZ:00002958]", - "Lebanon [GAZ:00002478]", - "Lesotho [GAZ:00001098]", - "Liberia [GAZ:00000911]", - "Libya [GAZ:00000566]", - "Liechtenstein [GAZ:00003858]", - "Line Islands [GAZ:00007144]", - "Lithuania [GAZ:00002960]", - "Luxembourg [GAZ:00002947]", - "Macau [GAZ:00003202]", - "Madagascar [GAZ:00001108]", - "Malawi [GAZ:00001105]", - "Malaysia [GAZ:00003902]", - "Maldives [GAZ:00006924]", - "Mali [GAZ:00000584]", - "Malta [GAZ:00004017]", - "Marshall Islands [GAZ:00007161]", - "Martinique [GAZ:00067143]", - "Mauritania [GAZ:00000583]", - "Mauritius [GAZ:00003745]", - "Mayotte [GAZ:00003943]", - "Mexico [GAZ:00002852]", - "Micronesia [GAZ:00005862]", - "Midway Islands [GAZ:00007112]", - "Moldova [GAZ:00003897]", - "Monaco [GAZ:00003857]", - "Mongolia [GAZ:00008744]", - "Montenegro [GAZ:00006898]", - "Montserrat [GAZ:00003988]", - "Morocco [GAZ:00000565]", - "Mozambique [GAZ:00001100]", - "Myanmar [GAZ:00006899]", - "Namibia [GAZ:00001096]", - "Nauru [GAZ:00006900]", - "Navassa Island [GAZ:00007119]", - "Nepal [GAZ:00004399]", - "Netherlands [GAZ:00002946]", - "New Caledonia [GAZ:00005206]", - "New Zealand [GAZ:00000469]", - "Nicaragua [GAZ:00002978]", - "Niger [GAZ:00000585]", - "Nigeria [GAZ:00000912]", - "Niue [GAZ:00006902]", - "Norfolk Island [GAZ:00005908]", - "North Korea [GAZ:00002801]", - "North Macedonia [GAZ:00006895]", - "North Sea [GAZ:00002284]", - "Northern Mariana Islands [GAZ:00003958]", - "Norway [GAZ:00002699]", - "Oman [GAZ:00005283]", - "Pakistan [GAZ:00005246]", - "Palau [GAZ:00006905]", - "Panama [GAZ:00002892]", - "Papua New Guinea [GAZ:00003922]", - "Paracel Islands [GAZ:00010832]", - "Paraguay [GAZ:00002933]", - "Peru [GAZ:00002932]", - "Philippines [GAZ:00004525]", - "Pitcairn Islands [GAZ:00005867]", - "Poland [GAZ:00002939]", - "Portugal [GAZ:00004126]", - "Puerto Rico [GAZ:00006935]", - "Qatar [GAZ:00005286]", - "Republic of the Congo [GAZ:00001088]", - "Reunion [GAZ:00003945]", - "Romania [GAZ:00002951]", - "Ross Sea [GAZ:00023304]", - "Russia [GAZ:00002721]", - "Rwanda [GAZ:00001087]", - "Saint Helena [GAZ:00000849]", - "Saint Kitts and Nevis [GAZ:00006906]", - "Saint Lucia [GAZ:00006909]", - "Saint Pierre and Miquelon [GAZ:00003942]", - "Saint Martin [GAZ:00005841]", - "Saint Vincent and the Grenadines [GAZ:02000565]", - "Samoa [GAZ:00006910]", - "San Marino [GAZ:00003102]", - "Sao Tome and Principe [GAZ:00006927]", - "Saudi Arabia [GAZ:00005279]", - "Senegal [GAZ:00000913]", - "Serbia [GAZ:00002957]", - "Seychelles [GAZ:00006922]", - "Sierra Leone [GAZ:00000914]", - "Singapore [GAZ:00003923]", - "Sint Maarten [GAZ:00012579]", - "Slovakia [GAZ:00002956]", - "Slovenia [GAZ:00002955]", - "Solomon Islands [GAZ:00005275]", - "Somalia [GAZ:00001104]", - "South Africa [GAZ:00001094]", - "South Georgia and the South Sandwich Islands [GAZ:00003990]", - "South Korea [GAZ:00002802]", - "South Sudan [GAZ:00233439]", - "Spain [GAZ:00003936]", - "Spratly Islands [GAZ:00010831]", - "Sri Lanka [GAZ:00003924]", - "State of Palestine [GAZ:00002475]", - "Sudan [GAZ:00000560]", - "Suriname [GAZ:00002525]", - "Svalbard [GAZ:00005396]", - "Swaziland [GAZ:00001099]", - "Sweden [GAZ:00002729]", - "Switzerland [GAZ:00002941]", - "Syria [GAZ:00002474]", - "Taiwan [GAZ:00005341]", - "Tajikistan [GAZ:00006912]", - "Tanzania [GAZ:00001103]", - "Thailand [GAZ:00003744]", - "Timor-Leste [GAZ:00006913]", - "Togo [GAZ:00000915]", - "Tokelau [GAZ:00260188]", - "Tonga [GAZ:00006916]", - "Trinidad and Tobago [GAZ:00003767]", - "Tromelin Island [GAZ:00005812]", - "Tunisia [GAZ:00000562]", - "Turkey [GAZ:00000558]", - "Turkmenistan [GAZ:00005018]", - "Turks and Caicos Islands [GAZ:00003955]", - "Tuvalu [GAZ:00009715]", - "USA [GAZ:00002459]", - "Uganda [GAZ:00001102]", - "Ukraine [GAZ:00002724]", - "United Arab Emirates [GAZ:00005282]", - "United Kingdom [GAZ:00002637]", - "Uruguay [GAZ:00002930]", - "Uzbekistan [GAZ:00004979]", - "Vanuatu [GAZ:00006918]", - "Venezuela [GAZ:00002931]", - "Viet Nam [GAZ:00003756]", - "Virgin Islands [GAZ:00003959]", - "Wake Island [GAZ:00007111]", - "Wallis and Futuna [GAZ:00007191]", - "West Bank [GAZ:00009572]", - "Western Sahara [GAZ:00000564]", - "Yemen [GAZ:00005284]", - "Zambia [GAZ:00001107]", - "Zimbabwe [GAZ:00001106]", - "Not Applicable [GENEPIO:0001619]", - "Not Collected [GENEPIO:0001620]", - "Missing [GENEPIO:0001618]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/geo_loc_country", "examples": [ "South Africa [GAZ:00001094]" ], @@ -4582,27 +844,7 @@ "header": "N" }, "geo_loc_state": { - "enum": [ - "Andalucía", - "Aragón", - "Canarias", - "Cantabria", - "Castilla - La Mancha", - "Castilla y León", - "Cataluña", - "Ceuta", - "Comunidad de Madrid", - "Comunidad Foral de Navarra", - "Comunitat Valenciana", - "Extremadura", - "Galicia", - "Illes Balears", - "La Rioja", - "Melilla", - "País Vasco", - "Principado de Asturias", - "Región de Murcia" - ], + "$ref": "#/$defs/enums/geo_loc_state", "examples": [ "Andalucía" ], @@ -4627,64 +869,11 @@ "header": "N" }, "geo_loc_region": { - "enum": [ - "Almería", - "Cádiz", - "Córdoba", - "Granada", - "Huelva", - "Jaén", - "Málaga", - "Sevilla", - "Huesca", - "Teruel", - "Zaragoza", - "Asturias", - "Illes Balears", - "Las Palmas", - "Santa Cruz de Tenerife", - "Cantabria", - "Ávila", - "Burgos", - "León", - "Palencia", - "Salamanca", - "Segovia", - "Soria", - "Valladolid", - "Zamora", - "Albacete", - "Ciudad Real", - "Cuenca", - "Guadalajara", - "Toledo", - "Barcelona", - "Girona", - "Lleida", - "Tarragona", - "Alicante/Alacant", - "Castellón/Castelló", - "Valencia/València", - "Badajoz", - "Cáceres", - "A Coruña", - "Lugo", - "Ourense", - "Pontevedra", - "Madrid", - "Murcia", - "Navarra", - "Araba/Álava", - "Gipuzkoa", - "Bizkaia", - "La Rioja", - "Ceuta", - "Melilla" - ], + "$ref": "#/$defs/enums/geo_loc_region", "examples": [ "Almería" ], - "ontology": "NCIT:C87189", + "ontology": "NCIT:C25632 ", "type": "string", "description": "The county/region of origin of the sample.", "classification": "Sample collection and processing", @@ -4746,7 +935,7 @@ ], "ontology": "mesh:D009935", "type": "string", - "description": "The type of entity to which the facility is affiliated", + "description": "The type of entity to which the facility is affiliated.", "classification": "Sample collection and processing", "label": "Functional Dependency", "fill_mode": "batch", @@ -4758,7 +947,7 @@ ], "ontology": "NCIT:C93878", "type": "string", - "description": "Official code of Institution’s functional classification or primary service purpose", + "description": "Official code of Institution’s functional classification or primary service purpose.", "classification": "Sample collection and processing", "label": "Center Class Code", "fill_mode": "batch", @@ -4770,7 +959,7 @@ ], "ontology": "NCIT:C188820", "type": "string", - "description": "Institution’s functional classification or primary service purpose", + "description": "Institution’s functional classification or primary service purpose.", "classification": "Sample collection and processing", "label": "Center Class Function", "fill_mode": "batch", @@ -4837,64 +1026,20 @@ "header": "N" }, "study_type": { - "enum": [ - "Whole Genome Sequencing [SNOMED:51201000000109]", - "Metagenomics [LOINC:103566-6]", - "Transcriptome Analysis [GENEPIO:0001111", - "Resequencing [NCIT:C41254", - "Epigenetics [NCIT:C153190]", - "Synthetic Genomics [NCIT:C84343]", - "Forensic or Paleo-genomics [EDAM:3943]", - "Gene Regulation Study [EDAM:0204]", - "Cancer Genomics [NCIT:C18247]", - "Population Genomics [EDAM:3796]", - "RNASeq [OBI:0001177]", - "Exome Sequencing [LOINC:LP248469-1]", - "Pooled Clone Sequencing [OBI:2100402]", - "Transcriptome Sequencing [NCIT:C124261]", - "Other [NCIT:C17649]", - "Not Provided [SNOMED:434941000124101]" - ], + "$ref": "#/$defs/enums/study_type", "examples": [ "Whole Genome Sequencing [NCIT:C101294]" ], "ontology": "NCIT:C142175", "type": "string", - "description": "The nature of the investigation or the investigational use for which the study is being done", + "description": "The nature of the investigation or the investigational use for which the study is being done.", "classification": "Public databases", "label": "Study type", "fill_mode": "batch", "header": "N" }, "anatomical_material": { - "enum": [ - "Air specimen [SNOMED:446302006]", - "Amniotic Fluid [SNOMED:77012006]", - "Aqueous Humor [SNOMED:425460003]", - "Blood Clot [SNOMED:75753009]", - "Body Fluid [SNOMED:32457005]", - "Calculus [SNOMED:56381008]", - "Cerebrospinal Fluid [SNOMED:258450006]", - "Cerebrospinal Fluid [SNOMED:65216001]", - "Cyst Fluid [SNOMED:734110008]", - "Dialysate specimen [SNOMED:258454002]", - "Erythrocyte [SNOMED:41898006]", - "Fluid [SNOMED:255765007]", - "Intravenous Fluid [SNOMED:118431008]", - "Pericardial Fluid [SNOMED:34429004]", - "Placenta [SNOMED:258538002]", - "Platelet [SNOMED:16378004]", - "Pleural Fluid [SNOMED:2778004]", - "Synovial Fluid [SNOMED:6085005]", - "Tissue [UBERON:0000479]", - "Vitreous Humor [SNOMED:426101004]", - "Blood [LOINC:4226865]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/anatomical_material", "examples": [ "Blood [UBERON:0000178]" ], @@ -4907,142 +1052,39 @@ "header": "N" }, "anatomical_part": { - "enum": [ - "Abdominal cavity [UBERON:0003684]", - "Articulation [UBERON:0004905]", - "Blood [LOINC:4226865]", - "Blood [SNOMED:87612001]", - "Bone [UBERON:0002481]", - "Bone marrow [UBERON:0002371]", - "Brain [UBERON:0000955]", - "Breast [UBERON:0000310]", - "Bronchus [UBERON:0002185]", - "Calcareous tooth [UBERON:0001091]", - "Cardiac valve [UBERON:0000946]", - "Conjunctiva [UBERON:0001811]", - "Cornea [UBERON:0000964]", - "Duodenum [UBERON:0002114]", - "Ear [UBERON:0001690]", - "Endometrium [UBERON:0001295]", - "Entire head and neck [SNOMED:361355005]", - "Epidural space [UBERON:0003691]", - "Esophagus [UBERON:0001043]", - "Fascia [UBERON:0008982]", - "Gallbladder [UBERON:0002110]", - "Glans penis [UBERON:0001299]", - "Intervertebral disc [UBERON:0001066]", - "Intestine [UBERON:0000160]", - "Liver [UBERON:0002107]", - "Lung [UBERON:0002048]", - "Lymph node [UBERON:0000029]", - "Mayor vestibular gland [UBERON:0000460]", - "Mediastinum [UBERON:0003728]", - "Middle ear [UBERON:0001756]", - "Mouth [UBERON:0000165]", - "Muscle organ [UBERON:0001630]", - "Nail [UBERON:0001705]", - "Nasopharynx [UBERON:0003582]", - "Oropharynx [UBERON:0001729]", - "Pericardial sac [UBERON:0002406]", - "Peritoneal cavity [UBERON:0001179]", - "Pleura [UBERON:0000977]", - "Pleural cavity [UBERON:0002402]", - "Skin of body [UBERON:0002097]", - "Skin ulcer [SNOMED:46742003]", - "Soft tissue [SNOMED:87784001]", - "Stomach [UBERON:0000945]", - "Synovial joint [UBERON:0002217]", - "Ureter [UBERON:0000056]", - "Vagina [UBERON:0000996]", - "Larynx [UBERON:0001737]", - "Rectum [UBERON:0001052]", - "Urethra [UBERON:0000057]", - "Endocervix [UBERON:0000458]", - "Prostate gland [UBERON:0002367]", - "Uterus [UBERON:0000995]", - "Kidney [UBERON:0002113]", - "Nose [UBERON:0000004]", - "Mammalian vulva [UBERON:0000997]", - "Lower respiratory tract [SNOMED:447081004]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/anatomical_part", "examples": [ "Nasopharynx [UBERON:0001728]" ], "ontology": "GENEPIO:0001214", "type": "string", - "description": "A data field which describes the substance obtained from an anatomical part of an organism. ", + "description": "A data field which describes the substance obtained from an anatomical part of an organism.", "classification": "Sample collection and processing", "label": "Anatomical Part", "fill_mode": "batch", "header": "N" }, "collection_method": { - "enum": [ - "Amniocentesis [SNOMED:34536000]", - "Suprapublic Aspiration [GENEPIO:0100028]", - "Tracheal Aspiration [GENEPIO:0100029]", - "Vacuum Aspiration [NCIT:C93274]", - "Needle Biopsy [SNOMED:129249002]", - "Filtration [SNOMED:702940009]", - "Lavage [NCIT:C38068]", - "Aspiration [SNOMED:14766002]", - "Biopsy [SNOMED:86273004]", - "Bronchoalveolar Lavage [SNOMED:258607008]", - "Drainage procedure [SNOMED:122462000]", - "Scraping [SNOMED:56757003]", - "Swab [SNOMED:408098004]", - "Wash [SNOMED:258610001]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/collection_method", "examples": [ "Trachel Aspiration" ], "ontology": "LOINC:LP32732-7", "type": "string", - "description": "A data field which describes the process used to collect the sample. ", + "description": "A data field which describes the process used to collect the sample.", "classification": "Sample collection and processing", "label": "Collection Method", "fill_mode": "batch", "header": "N" }, "body_product": { - "enum": [ - "Breast Milk [SNOMED:226789007]", - "Feces [SNOMED:39477002]", - "Mucus [SNOMED:49909006]", - "Sweat [SNOMED:74616000]", - "Tear [LOINC:LP7622-6]", - "Bile [SNOMED:70150004]", - "Blood [LOINC:4226865]", - "Lochia [SNOMED:49636006]", - "Meconium [UBERON:0007109]", - "Plasma [SNOMED:50863008]", - "Pus [SNOMED:11311000]", - "Serum [SNOMED:67922002]", - "Sputum [SNOMED:45710003]", - "Urine [LOINC:LA30054-3]", - "Tonsil [UBERON:0002372]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/body_product", "examples": [ "Feces" ], "ontology": "SNOMED:364684009", "type": "string", - "description": "A data field which describes the substance excreted/secreted from an organism. ", + "description": "A data field which describes the substance excreted/secreted from an organism.", "classification": "Sample collection and processing", "label": "Body Product", "fill_mode": "batch", @@ -5061,28 +1103,7 @@ "header": "N" }, "host_scientific_name": { - "enum": [ - "Bos taurus [SNOMED:34618005]", - "Canis lupus familiaris [SNOMED:125079008]", - "Chiroptera [SNOMED:388074005]", - "Columbidae [SNOMED:107099008]", - "Felis catus [SNOMED:448169003]", - "Gallus gallus [SNOMED:47290002]", - "Homo sapiens [SNOMED:337915000]", - "Manis [SNOMED:43739001]", - "Manis javanica [SNOMED:330131000009103]", - "Neovison vison [SNOMED:447523007]", - "Panthera leo [SNOMED:112507006]", - "Panthera tigris [SNOMED:79047009]", - "Rhinolophidae [SNOMED:392085002]", - "Rhinolophus affinis [NCBITaxon:59477]", - "Sus scrofa domesticus [SNOMED:331171000009105]", - "Viverridae [SNOMED:388833006]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]" - ], + "$ref": "#/$defs/enums/host_scientific_name", "examples": [ "Homo sapiens [NCBITaxon:9606]" ], @@ -5095,16 +1116,7 @@ "header": "N" }, "host_disease": { - "enum": [ - "COVID-19 [SNOMED:840539006]", - "Respiratory Syncytial Virus Infection [SNOMED:55735004]", - "Influenza Infection [SNOMED:408687004]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/host_disease", "examples": [ "COVID-19 [MONDO:0100096]" ], @@ -5117,37 +1129,7 @@ "header": "N" }, "purpose_of_sequencing": { - "enum": [ - "Baseline surveillance (random sampling) [GENEPIO:0100005]", - "Targeted surveillance (non-random sampling) [GENEPIO:0100006]", - "Priority surveillance projects [GENEPIO:0100007]", - "Screening for Variants of Concern (VOC) [GENEPIO:0100008]", - "Sample has epidemiological link to Variant of Concern (VoC) [GENEPIO:0100273]", - "Sample has epidemiological link to Omicron Variant [GENEPIO:0100274]", - "Longitudinal surveillance (repeat sampling of individuals) [GENEPIO:0100009]", - "Re-infection surveillance [GENEPIO:0100010]", - "Vaccine escape surveillance [GENEPIO:0100011]", - "Travel-associated surveillance [GENEPIO:0100012]", - "Domestic travel surveillance [GENEPIO:0100013]", - "Interstate/ interprovincial travel surveillance [GENEPIO:0100275]", - "Intra-state/ intra-provincial travel surveillance [GENEPIO:0100276]", - "International travel surveillance [GENEPIO:0100014]", - "Surveillance of international border crossing by air travel or ground transport [GENEPIO:0100015]", - "Surveillance of international border crossing by air travel [GENEPIO:0100016]", - "Surveillance of international border crossing by ground transport [GENEPIO:0100017]", - "Surveillance from international worker testing [GENEPIO:0100018]", - "Cluster/Outbreak investigation [GENEPIO:0100001]", - "Multi-jurisdictional outbreak investigation [GENEPIO:0100020]", - "Intra-jurisdictional outbreak investigation [GENEPIO:0100021]", - "Research [LOINC:LP173021-9]", - "Viral passage experiment [GENEPIO:0100023]", - "Protocol testing [GENEPIO:0100024]", - "Not Applicable [SNOMED:385432009]", - "Not Collected [LOINC:LA4700-6]", - "Not Provided [SNOMED:434941000124101]", - "Missing [LOINC:LA14698-7]", - "Restricted Access [GENEPIO:0001810]" - ], + "$ref": "#/$defs/enums/purpose_of_sequencing", "examples": [ "Baseline surveillance (random sampling) [GENEPIO:0100005]" ], @@ -5184,16 +1166,7 @@ "header": "N" }, "sequencing_instrument_platform": { - "enum": [ - "Oxford Nanopore [OBI:0002750]", - "Illumina [OBI:0000759]", - "Ion Torrent [GENEPIO:0002683]", - "PacBio [GENEPIO:0001927]", - "BGI [GENEPIO:0004324]", - "MGI [GENEPIO:0004325]", - "Other [NCIT:C17649]", - "Not Provided [SNOMED:434941000124101]" - ], + "$ref": "#/$defs/enums/sequencing_instrument_platform", "examples": [ "Illumina" ], @@ -5207,13 +1180,13 @@ }, "read_length": { "examples": [ - "75" + 75 ], "ontology": "NCIT:C153362", "type": "integer", "minimum": 0, "maximum": 10000, - "description": "Number of base pairs per read", + "description": "Number of base pairs per read.", "classification": "Sequencing", "label": "Read length", "fill_mode": "batch", @@ -5221,7 +1194,7 @@ }, "number_of_reads": { "examples": [ - "75" + 75 ], "ontology": "NCIT:C153362", "type": "integer", @@ -5237,7 +1210,7 @@ ], "ontology": "NCIT:C171276", "type": "string", - "description": "Checksum md5 value to validate successful file transmission in R1", + "description": "Checksum md5 value to validate successful file transmission in R1.", "classification": "Bioinformatics and QC metrics fields", "label": "Sequence fastq R1 md5", "fill_mode": "sample", @@ -5249,7 +1222,7 @@ ], "ontology": "NCIT:C171276", "type": "string", - "description": "Checksum md5 value to validate successful file transmission in R2", + "description": "Checksum md5 value to validate successful file transmission in R2.", "classification": "Bioinformatics and QC metrics fields", "label": "Sequence fastq R2 md5", "fill_mode": "sample", @@ -5310,7 +1283,7 @@ "ontology": "OBI:0002471", "type": "string", "format": "date", - "description": "The time of a sample analysis process YYYY-MM-DD", + "description": "The time of a sample analysis process YYYY-MM-DD.", "classification": "Bioinformatics and QC metrics fields", "label": "processing_date", "fill_mode": "batch", @@ -5389,20 +1362,13 @@ "header": "N" }, "commercial_open_source_both": { - "enum": [ - "Commercial [SWO:1000002]", - "Open Source [SWO:1000008]", - "Both", - "None", - "Not Provided [SNOMED:434941000124101", - "Not Applicable [GENEPIO:0001619]" - ], + "$ref": "#/$defs/enums/commercial_open_source_both", "examples": [ "Commercial" ], "ontology": "0", "type": "string", - "description": "If bioinformatics protocol used was open-source or commercial", + "description": "If bioinformatics protocol used was open-source or commercial.", "classification": "Bioinformatic Analysis fields", "label": "Commercial/Open-source/both", "fill_mode": "batch", @@ -5438,7 +1404,7 @@ ], "ontology": "MS_1002386", "type": "string", - "description": "Preprocessing software name other", + "description": "Preprocessing software name other.", "classification": "Bioinformatic Analysis fields", "label": "If preprocessing Is Other, Specify", "fill_mode": "batch", @@ -5486,7 +1452,7 @@ ], "ontology": "0", "type": "string", - "description": "Mapping software used other", + "description": "Mapping software used other.", "classification": "Bioinformatic Analysis fields", "label": "If mapping Is Other, Specify", "fill_mode": "batch", @@ -5534,7 +1500,7 @@ ], "ontology": "0", "type": "string", - "description": "Assembly software version", + "description": "Assembly software version.", "classification": "Bioinformatic Analysis fields", "label": "If assembly Is Other, Specify", "fill_mode": "batch", @@ -5558,7 +1524,7 @@ ], "ontology": "CAO:000237", "type": "string", - "description": "Bioinfo JSON with metadata information", + "description": "Bioinfo JSON with metadata information.", "classification": "Bioinformatic Analysis fields", "label": "Bioinfo JSON", "fill_mode": "batch", @@ -5594,7 +1560,7 @@ ], "ontology": "LOINC:LA20883-7", "type": "string", - "description": "Variant calling software version", + "description": "Variant calling software version.", "classification": "Bioinformatic Variants", "label": "Variant calling software version", "fill_mode": "batch", @@ -5606,7 +1572,7 @@ ], "ontology": "0", "type": "string", - "description": "Specify if you have used another variant calling software", + "description": "Specify if you have used another variant calling software.", "classification": "Bioinformatic Variants", "label": "If variant calling Is Other, Specify", "fill_mode": "batch", @@ -5618,7 +1584,7 @@ ], "ontology": "NCIT:C44175", "type": "string", - "description": "Params used for variant calling", + "description": "Params used for variant calling.", "classification": "Bioinformatic Variants", "label": "Variant calling params", "fill_mode": "batch", @@ -5642,7 +1608,7 @@ ], "ontology": "GENEPIO:0001461", "type": "string", - "description": "The name of the consensus sequence filename", + "description": "The name of the consensus sequence filename.", "classification": "Bioinformatic Analysis fields", "label": "Consensus sequence filename", "fill_mode": "batch", @@ -5702,7 +1668,7 @@ ], "ontology": "0", "type": "string", - "description": "Specify if you have used another consensus software", + "description": "Specify if you have used another consensus software.", "classification": "Bioinformatic Analysis fields", "label": "If consensus Is Other, Specify", "fill_mode": "batch", @@ -5726,7 +1692,7 @@ ], "ontology": "NCIT:C44175", "type": "string", - "description": "Parameters used for consensus generation", + "description": "Parameters used for consensus generation.", "classification": "Bioinformatic Analysis fields", "label": "Consensus params", "fill_mode": "batch", @@ -5758,9 +1724,9 @@ }, "number_of_reads_sequenced": { "examples": [ - "387566" + 387566 ], - "ontology": "0", + "ontology": "NCIT:C164667", "type": "integer", "minimum": 0, "maximum": 50000000, @@ -5772,13 +1738,13 @@ }, "pass_reads": { "examples": [ - "153812" + 153812 ], "ontology": "GENEPIO:0000087", "type": "integer", "minimum": 0, "maximum": 50000000, - "description": "Number of reads that pass quality control threshold", + "description": "Number of reads that pass quality control threshold.", "classification": "Bioinformatics and QC metrics fields", "label": "Number of reads passing filters", "fill_mode": "batch", @@ -5786,13 +1752,13 @@ }, "per_reads_host": { "examples": [ - "0.19" + 0.19 ], "ontology": "NCIT:C185251", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of reads mapped to host", + "description": "Percentage of reads mapped to host.", "classification": "Bioinformatics and QC metrics fields", "label": "%Reads host", "fill_mode": "batch", @@ -5800,13 +1766,13 @@ }, "per_reads_virus": { "examples": [ - "99.69" + 99.69 ], "ontology": "NCIT:C185251", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of reads mapped to virus", + "description": "Percentage of reads mapped to virus.", "classification": "Bioinformatics and QC metrics fields", "label": "%Reads virus", "fill_mode": "batch", @@ -5814,13 +1780,13 @@ }, "per_unmapped": { "examples": [ - "0.13" + 0.13 ], "ontology": "0", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of reads unmapped to virus or to host", + "description": "Percentage of reads unmapped to virus or to host.", "classification": "Bioinformatics and QC metrics fields", "label": "%Unmapped", "fill_mode": "batch", @@ -5828,7 +1794,7 @@ }, "depth_of_coverage_value": { "examples": [ - "400" + 400 ], "ontology": "GENEPIO:0001474", "type": "integer", @@ -5842,13 +1808,13 @@ }, "per_genome_greater_10x": { "examples": [ - "96" + 96 ], "ontology": "0", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of genome with coverage greater than 10x", + "description": "Percentage of genome with coverage greater than 10x.", "classification": "Bioinformatics and QC metrics fields", "label": "% Genome > 10x", "fill_mode": "batch", @@ -5856,13 +1822,13 @@ }, "per_Ns": { "examples": [ - "3" + 3 ], "ontology": "0", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of Ns", + "description": "Percentage of Ns.", "classification": "Bioinformatics and QC metrics fields", "label": "%Ns", "fill_mode": "batch", @@ -5870,13 +1836,13 @@ }, "number_of_Ns": { "examples": [ - "2000" + 2000 ], "ontology": "0", "type": "integer", "minimum": 0, "maximum": 100000, - "description": "Number of Ns", + "description": "Number of Ns.", "classification": "Bioinformatics and QC metrics fields", "label": "Number of Ns", "fill_mode": "batch", @@ -5884,7 +1850,7 @@ }, "ns_per_100_kbp": { "examples": [ - "300" + 300 ], "ontology": "GENEPIO:0001484", "type": "number", @@ -5898,13 +1864,13 @@ }, "number_of_variants_in_consensus": { "examples": [ - "130" + 130 ], "ontology": "NCIT:C181350", "type": "integer", "minimum": 0, "maximum": 10000, - "description": "The number of variants found in consensus sequence", + "description": "The number of variants found in consensus sequence.", "classification": "Bioinformatic Variants", "label": "Number of variants (AF > 75%)", "fill_mode": "batch", @@ -5912,13 +1878,13 @@ }, "number_of_variants_with_effect": { "examples": [ - "93" + 93 ], "ontology": "NCIT:C181350", "type": "integer", "minimum": 0, "maximum": 10000, - "description": "The number of missense variants", + "description": "The number of missense variants.", "classification": "Bioinformatic Variants", "label": "Number of variants with effect", "fill_mode": "batch", @@ -5926,13 +1892,13 @@ }, "number_of_sgene_frameshifts": { "examples": [ - "0" + 0 ], "ontology": "GENEPIO:0001457", "type": "integer", "minimum": 0, "maximum": 1000, - "description": "Number of frameshifts in Sgene", + "description": "Number of frameshifts in Sgene.", "classification": "Bioinformatics and QC metrics fields", "label": "Number of frameshifts in Sgene", "fill_mode": "batch", @@ -5940,13 +1906,13 @@ }, "number_of_unambiguous_bases": { "examples": [ - "29000" + 29000 ], "ontology": "GENEPIO:0001457", "type": "integer", "minimum": 0, "maximum": 30000, - "description": "Number of unambiguous bases", + "description": "Number of unambiguous bases.", "classification": "Bioinformatics and QC metrics fields", "label": "Number of unambiguous bases", "fill_mode": "batch", @@ -5954,13 +1920,13 @@ }, "per_ldmutations": { "examples": [ - "98" + 98 ], "ontology": "GENEPIO:0001457", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of Lineage Defining Mutations", + "description": "Percentage of Lineage Defining Mutations.", "classification": "Bioinformatics and QC metrics fields", "label": "Percentage of Lineage Defining Mutations", "fill_mode": "batch", @@ -5968,13 +1934,13 @@ }, "per_sgene_ambiguous": { "examples": [ - "0" + 0 ], "ontology": "GENEPIO:0001457", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of sSgene ambiguous bases", + "description": "Percentage of sSgene ambiguous bases.", "classification": "Bioinformatics and QC metrics fields", "label": "Percentage of sSgene ambiguous bases", "fill_mode": "batch", @@ -5982,13 +1948,13 @@ }, "per_sgene_coverage": { "examples": [ - "99" + 99 ], "ontology": "GENEPIO:0001457", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of Sgene coverage", + "description": "Percentage of Sgene coverage.", "classification": "Bioinformatics and QC metrics fields", "label": "Percentage of Sgene coverage", "fill_mode": "batch", @@ -6000,7 +1966,7 @@ ], "ontology": "GENEPIO:0001457", "type": "string", - "description": "Quality control evaluation", + "description": "Quality control evaluation.", "classification": "Bioinformatics and QC metrics fields", "label": "Quality control evaluation", "fill_mode": "batch", @@ -6012,7 +1978,7 @@ ], "ontology": "0", "type": "string", - "description": "Quality control failed fields", + "description": "Quality control failed fields.", "classification": "Bioinformatics and QC metrics fields", "label": "Quality control failed fields", "fill_mode": "batch", @@ -6024,7 +1990,7 @@ ], "ontology": "0", "type": "string", - "description": "Name of the JSON Schema", + "description": "Name of the JSON Schema.", "classification": "Files info", "label": "Schema Name", "fill_mode": "batch", @@ -6036,7 +2002,7 @@ ], "ontology": "0", "type": "string", - "description": "Version of the JSON Schema", + "description": "Version of the JSON Schema.", "classification": "Files info", "label": "Schema Version", "fill_mode": "batch", @@ -6055,13 +2021,7 @@ "header": "N" }, "variant_designation": { - "enum": [ - "Variant of Interest (VOI) [GENEPIO:0100083]", - "Variant of Concern (VOC) [GENEPIO:0100082]", - "Variant Under Monitoring (VUM) [GENEPIO:0100279]", - "Not Provided [SNOMED:434941000124101]", - "Not Applicable [GENEPIO:0001619]" - ], + "$ref": "#/$defs/enums/variant_designation", "examples": [ "Variant of Concern (VOC) [GENEPIO:0100083]" ], @@ -6091,7 +2051,7 @@ ], "ontology": "NCIT:C25284", "type": "string", - "description": "default must remain 'betacoronavirus'", + "description": "default must remain 'betacoronavirus'.", "classification": "Public databases", "label": "GISAID covv type", "fill_mode": "sample", @@ -6103,6 +2063,7 @@ ], "ontology": "GENEPIO:0001145", "type": "string", + "identifiers_org_prefix": "ena.embl", "description": "A data field which describes the GenBank/ENA/DDBJ identifier assigned to the sequence in the International Nucleotide Sequence Database Collaboration (INSDC) archives. GenBank = National Genetic Sequence Data Base; ENA = European Nucleotide Archive; DDBJ = DNA DataBank of Japan Example Guidance: Store the accession returned from a GenBank/ENA/DDBJ submission (viral genome assembly).", "classification": "Public databases", "label": "Analysis Accession", @@ -6115,6 +2076,7 @@ ], "ontology": "GENEPIO:0001136", "type": "string", + "identifiers_org_prefix": "ena.embl", "description": "An identifier data field which describes the International Nucleotide Sequence Database Collaboration (INSDC) accession number of the BioProject(s) to which the BioSample belongs.", "classification": "Public databases", "label": "Study accession", @@ -6127,7 +2089,8 @@ ], "ontology": "0", "type": "string", - "description": "Experiment Accession", + "identifiers_org_prefix": "ena.embl", + "description": "Experiment Accession.", "classification": "Public databases", "label": "Experiment Accession", "fill_mode": "batch", @@ -6139,6 +2102,7 @@ ], "ontology": "0", "type": "string", + "identifiers_org_prefix": "ena.embl", "description": "Run Identifier: A sequence of characters used to uniquely identify a particular run of a test on a particular batch of samples.", "classification": "Public databases", "label": "Run Accession", @@ -6151,7 +2115,8 @@ ], "ontology": "0", "type": "string", - "description": "Submission Accession", + "identifiers_org_prefix": "ena.embl", + "description": "Submission Accession.", "classification": "Public databases", "label": "Submission Accession", "fill_mode": "batch", @@ -6175,7 +2140,7 @@ ], "ontology": "OPMI_0000380", "type": "string", - "description": "Title of study", + "description": "Title of study.", "classification": "Public databases", "label": "Study title", "fill_mode": "batch", @@ -6197,9 +2162,9 @@ "examples": [ "P17157_1007" ], - "ontology": "BU_ISCIII:045", + "ontology": "0", "type": "string", - "description": "Broker name", + "description": "Broker name.", "classification": "Public databases", "label": "Broker Name", "fill_mode": "batch", @@ -6224,7 +2189,7 @@ ], "ontology": "GENEPIO:0001388", "type": "string", - "description": "Status of the host", + "description": "Status of the host.", "classification": "Public databases", "label": "Host health state", "fill_mode": "batch", @@ -6243,13 +2208,7 @@ "header": "N" }, "file_format": { - "enum": [ - "BAM [EDAM:2572]", - "CRAM [EDAM:3462]", - "FASTQ [EDAM:1930]", - "FASTA [EDAM:1929]", - "Not Provided [SNOMED:434941000124101]" - ], + "$ref": "#/$defs/enums/file_format", "examples": [ "BAM,CRAM,FASTQ" ], @@ -6267,7 +2226,7 @@ ], "ontology": "GENEPIO:0001797", "type": "string", - "description": "Name of the person who collected the specimen", + "description": "Name of the person who collected the specimen.", "classification": "Sample collection and processing", "label": "Sample collector name", "fill_mode": "batch", @@ -6364,7 +2323,7 @@ "ontology": "LOINC:40783184", "type": "string", "format": "date", - "description": "Date when the clade analysis was performed via Nextclade", + "description": "Date when the clade analysis was performed via Nextclade.", "classification": "Genomic Typing fields", "label": "Clade Assignment Date", "fill_mode": "batch", @@ -6424,7 +2383,7 @@ ], "ontology": "0", "type": "string", - "description": "Version of the algorithm used by the lineage assignment software", + "description": "Version of the algorithm used by the lineage assignment software.", "classification": "Genomic Typing fields", "label": "Lineage Algorithm Software Version", "fill_mode": "batch", @@ -6461,7 +2420,7 @@ "ontology": "LOINC:40783184", "type": "string", "format": "date", - "description": "Date when the lineage analysis was performed", + "description": "Date when the lineage analysis was performed.", "classification": "Genomic Typing fields", "label": "Lineage Assignment Date", "fill_mode": "batch", @@ -6473,7 +2432,7 @@ ], "ontology": "0", "type": "string", - "description": "File containing results from lineage analysis", + "description": "File containing results from lineage analysis.", "classification": "Genomic Typing fields", "label": "Lineage Assignment File", "fill_mode": "batch", @@ -6485,7 +2444,7 @@ ], "ontology": "0", "type": "string", - "description": "Version of the lineage assignment database", + "description": "Version of the lineage assignment database.", "classification": "Genomic Typing fields", "label": "Pangolin Database Version", "fill_mode": "batch", @@ -6636,6 +2595,4322 @@ "host_scientific_name", "sequencing_instrument_platform" ], + "$defs": { + "enums": { + "organism": { + "enum": [ + "Severe acute respiratory syndrome coronavirus 2 [LOINC:LA31065-8]", + "Respiratory syncytial virus [SNOMED:6415009]", + "Influenza virus [SNOMED:725894000]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "collecting_institution": { + "enum": [ + "Instituto de Salud Carlos III", + "Red De Salud Mental De Araba (Hospital Psiquiátrico De Araba)", + "Hospital San José", + "Hospital Quirónsalud Vitoria", + "Hospital De Cuidados San Onofre, S.L. (Hospital De Cuidados San Onofre)", + "Hospital De Leza", + "Hospital Universitario De Araba (Sede Txagorritxu Y Sede Santiago)", + "Complejo Hospitalario Universitario De Albacete", + "Hospital General Universitario De Albacete", + "Clínica Santa Cristina Albacete", + "Hospital De Hellín", + "Quironsalud Hospital Albacete", + "Hospital Universitario Nuestra Señora Del Perpetuo Socorro", + "Hospital General De Almansa", + "Hospital General De Villarobledo", + "Centro De Atención A La Salud Mental La Milagrosa", + "Hospital General Universitario De Alicante", + "Clínica Vistahermosa Grupo Hla", + "Vithas Hospital Perpetuo Internacional", + "Hospital Virgen De Los Lirios", + "Sanatorio San Jorge S.L.", + "Hospital Clínica Benidorm", + "Hospital San Carlos De Denia Grupo Hla", + "Hospital General Universitario De Elche", + "Hospital General Universitario De Elda-Virgen De La Salud", + "Hospital Sant Vicent Del Raspeig", + "Sanatorio San Francisco De Borja Fontilles", + "Hospital Marina Baixa De La Vila Joiosa", + "Hospital Vega Baja De Orihuela", + "Hospital Internacional Medimar, S.A.", + "Hospital Psiquiátrico Penitenciario De Fontcalent", + "Hospital Universitario San Juan De Alicante", + "Centro Médico Acuario", + "Hospìtal Quironsalud Torrevieja", + "Hospital Imed Levante", + "Hospital Universitario De Torrevieja", + "Hospital De Denia", + "Hospital La Pedrera", + "Centro De Rehabilitación Neurológica Casaverde", + "Centro Militar de Veterinaria de la Defensa", + "Gerencia de Salud de Area de Soria", + "Hospital Universitario Vinalopo", + "Hospital Imed Elche", + "Hospital Torrecárdenas", + "Hospital De La Cruz Roja", + "Hospital Virgen Del Mar", + "Hospital La Inmaculada", + "Hospital Universitario Torrecárdenas", + "Hospital Mediterráneo", + "Hospital De Poniente", + "Hospital De Alta Resolución El Toyo", + "Hospital Nuestra Señora De Sonsoles", + "Hospital Provincial De Ávila", + "Clínica Santa Teresa", + "Complejo Asistencial De Avila", + "Hospital De Salud Mental Casta Salud Arévalo", + "Complejo Hospitalario Universitario De Badajoz", + "Hospital Universitario De Badajoz", + "Hospital Materno Infantil", + "Hospital Fundación San Juan De Dios De Extremadura", + "Hospital Don Benito-Villanueva De La Serena", + "Hospital General De Llerena", + "Hospital De Mérida", + "Centro Sociosanitario De Mérida", + "Hospital Quirónsalud Santa Justa", + "Hospital Quironsalud Clideba", + "Hospital Parque Via De La Plata", + "Hospital De Zafra", + "Complejo Hospitalario Llerena-Zafra", + "Hospital Perpetuo Socorro", + "Hospital Siberia-Serena", + "Hospital Tierra De Barros", + "Complejo H. Don Benito-Vva De La Serena", + "Complejo Hospitalario Del Área De Salud De Mérida", + "Casaverde. Centro De Rehabilitación Neurológico De Extremadura", + "Clínica Extremeña De Salud", + "Hospital Parque Vegas Altas", + "Hospital General De Mallorca", + "Hospital Psiquiàtric", + "Clínica Mutua Balear", + "Hospital De La Cruz Roja Española", + "Hospital Sant Joan De Deu", + "Clínica Rotger", + "Clinica Juaneda", + "Policlínica Miramar", + "Hospital Joan March", + "Hospital Can Misses", + "Hospital Residencia Asistida Cas Serres", + "Policlínica Nuestra Señora Del Rosario, S.A.", + "Clínica Juaneda Menorca", + "Hospital General De Muro", + "Clinica Juaneda Mahon", + "Hospital Manacor", + "Hospital Son Llatzer", + "Hospital Quirónsalud Palmaplanas", + "Hospital De Formentera", + "Hospital Comarcal D'Inca", + "Hospital Mateu Orfila", + "Hospital Universitari Son Espases", + "Servicio de Microbiologia HU Son Espases", + "Hospital De Llevant", + "Hospital Clinic Balear", + "Clínica Luz De Palma", + "Hospital Clínic De Barcelona, Seu Sabino De Arana", + "Hospital Del Mar", + "Hospital De L'Esperança", + "Hospital Clínic De Barcelona", + "Hospital Fremap Barcelona", + "Centre De Prevenció I Rehabilitació Asepeyo", + "Clínica Mc Copèrnic", + "Clínica Mc Londres", + "Hospital Egarsat Sant Honorat", + "Hospital Dos De Maig", + "Hospital El Pilar", + "Hospital Sant Rafael", + "Clínica Nostra Senyora Del Remei", + "Clínica Sagrada Família", + "Hospital Mare De Déu De La Mercè", + "Clínica Solarium", + "Hospital De La Santa Creu I Sant Pau", + "Nou Hospital Evangèlic", + "Hospital De Nens De Barcelona", + "Institut Guttmann", + "Fundació Puigvert - Iuna", + "Hestia Palau.", + "Hospital Universitari Sagrat Cor", + "Clínica Corachan", + "Clínica Tres Torres", + "Hospital Quirónsalud Barcelona", + "Centre Mèdic Delfos", + "Centre Mèdic Sant Jordi De Sant Andreu", + "Hospital Plató", + "Hospital Universitari Quirón Dexeus", + "Centro Médico Teknon, Grupo Quironsalud", + "Hospital De Barcelona", + "Centre Hospitalari Policlínica Barcelona", + "Centre D'Oftalmologia Barraquer", + "Hestia Duran I Reynals", + "Serveis Clínics, S.A.", + "Clínica Coroleu - Ssr Hestia.", + "Clínica Planas", + "Hospital Universitari Germans Trias I Pujol De Badalona", + "Hospital Municipal De Badalona", + "Centre Sociosanitari El Carme", + "Hospital Comarcal De Sant Bernabé", + "Hospital Comarcal Sant Jaume De Calella", + "Hospital De Sant Joan De Déu.", + "Clínica Nostra Senyora De Guadalupe", + "Hospital General De Granollers.", + "Hospital Universitari De Bellvitge", + "Hospital General De L'Hospitalet", + "Lab Clínic ICS Camp de Tarragona-Terres de l'Ebre. Hospital Joan XXIII", + "LABORATORI DE REFERENCIA DE CATALUNYA", + "Banc de Sang i Teixits Catalunya", + "Laboratorio Echevarne, SA Sant Cugat del Vallès", + "Fundació Sanitària Sant Josep", + "Hospital De Sant Jaume", + "Clínica Sant Josep", + "Centre Hospitalari.", + "Fundació Althaia-Manresa", + "Hospital De Sant Joan De Déu (Manresa)", + "Hospital De Sant Andreu", + "Germanes Hospitalàries. Hospital Sagrat Cor", + "Fundació Hospital Sant Joan De Déu", + "Centre Mèdic Molins, Sl", + "Hospital De Mollet", + "Hospital De Sabadell", + "Benito Menni,Complex Assistencial En Salut Mental.", + "Parc Sanitari Sant Joan De Déu - Recinte Sant Boi.", + "Parc Sanitari Sant Joan De Déu - Hospital General", + "Hospital De Sant Celoni.", + "Hospital Universitari General De Catalunya", + "Casal De Curació", + "Hospital Residència Sant Camil - Consorci Sanitari Del Garraf.", + "Centres Assistencials Dr. Emili Mira I López (Recinte Torribera).", + "Fundació Hospital De L'Esperit Sant", + "Hospital De Terrassa.", + "Hospital De Sant Llàtzer", + "Hospital Universitari Mútua De Terrassa", + "Hospital Universitari De Vic", + "Hospital De La Santa Creu", + "Hospital De Viladecans", + "Hospital Sant Antoni Abat - Consorci Sanitari Del Garraf.", + "Centre Sociosanitari Can Torras", + "Hestia Maresme", + "Prytanis Sant Boi Centre Sociosanitari", + "Centre Sociosanitari Verge Del Puig", + "Residència L'Estada", + "Residència Puig-Reig", + "Residència Santa Susanna", + "Hospital De Mataró", + "Hospital Universitari Vall D'Hebron", + "Centre Polivalent Can Fosc", + "Hospital Sociosanitari Mutuam Güell", + "Mútua De Granollers, Mútua De Previsió Social A Prima Fixa", + "Hospital Comarcal De L'Alt Penedès.", + "Àptima Centre Clínic - Mútua De Terrassa", + "Institut Català D'Oncologia - Hospital Duran I Reynals", + "Sar Mont Martí", + "Regina Sar", + "Centre Vallparadís", + "Ita Maresme", + "Clínica Llúria", + "Antic Hospital De Sant Jaume I Santa Magdalena", + "Parc Sanitari Sant Joan De Déu - Numància", + "Prytanis Hospitalet Centre Sociosanitari", + "Comunitat Terapèutica Arenys De Munt", + "Hospital Sociosanitari Pere Virgili", + "Benito Menni Complex Assistencial En Salut Mental", + "Hospital Sanitas Cima", + "Parc Sanitari Sant Joan De Deu - Brians 1.", + "Institut Català D'Oncologia - Hospital Germans Trias I Pujol", + "CAP La Salut EAP Badalona", + "CAP Mataró-6 (Gatassa)", + "CAP Can Mariner Santa Coloma-1", + "CAP Montmeló (Montornès)", + "Centre Collserola Mutual", + "Centre Sociosanitari Sarquavitae Sant Jordi", + "Hospital General Penitenciari", + "Centre Sociosanitari De L'Hospitalet - Consorci Sanitari Integral", + "Sar La Salut Josep Servat", + "Clínica Creu Blanca", + "Hestia Gràcia", + "Centre Sociosanitari D'Esplugues", + "Centre Sociosanitari Ricard Fortuny", + "Centre Residencial Amma Diagonal", + "Centre Fòrum", + "Centre Sociosanitari Blauclínic Dolors Aleu", + "Parc Sanitari Sant Joan De Déu - Til·Lers", + "Clínica Galatea", + "Hospital D'Igualada", + "Centre Social I Sanitari Frederica Montseny", + "Parc Sanitari Sant Joan De Deu-Serveis Sanitaris Centre Penitenciari Brians-2", + "Centre Integral De Serveis En Salut Mental Comunitària", + "Centre Sociosanitari Sant Jordi De La Vall D'Hebron", + "Lepant Residencial Qgg, Sl", + "Mapfre Quavitae Barcelona", + "Unitat Polivalent Salut Mental Barcelona-Nord", + "Cqm Clínic Maresme, Sl", + "Serveis Sanitaris La Roca Del Valles 2", + "Clínica Del Vallès", + "Centre Gerontològic Amma Sant Cugat", + "Serveis Sanitaris Sant Joan De Vilatorrada", + "Centre Sociosanitari Stauros", + "Hospital De Sant Joan Despí Moisès Broggi", + "Amma Horta", + "Unitat Polivalent Benito Menni En Salut Mental De L'Hospitalet-El Prat De Llobregat", + "Centre Sociosanitari Del Centre Integral De Salut Cotxeres", + "Clínica Sant Antoni", + "Clínica Diagonal", + "Hospital Sociosanitari De Mollet", + "Centre Sociosanitari Isabel Roig", + "Iván Mañero Clínic", + "Institut Trastorn Límit", + "Centre D'Hospitalització I Hospital De Dia Trastorns De La Conducta", + "Sarquavitae Bonanova", + "Centre La Creueta", + "Unitat Terapèutica-Educativa Acompanya'M", + "Hospital Fuente Bermeja", + "Hospital Recoletas De Burgos", + "Hospital San Juan De Dios De Burgos", + "Hospital Santos Reyes", + "Hospital Residencia Asistida De La Luz", + "Hospital Santiago Apóstol", + "Complejo Asistencial Universitario De Burgos", + "Hospital Universitario De Burgos", + "Hospital San Pedro De Alcántara", + "Hospital Provincial Nuestra Señora De La Montaña", + "Hospital Ciudad De Coria", + "Hospital Campo Arañuelo", + "Hospital Virgen Del Puerto", + "Hospital Sociosanitario De Plasencia", + "Complejo Hospitalario De Cáceres", + "Hospital Quirón Salud De Cáceres", + "Clínica Soquimex", + "Clinica Quirúrgica Cacereña, S.A-(Clínica San Francisco)", + "Hospital Universitario Puerta Del Mar", + "Clínica La Salud", + "Hospital San Rafael", + "Hospital Punta De Europa", + "Clínica Los Álamos", + "Hospital Universitario De Jerez De La Frontera", + "Hospital San Juan Grande", + "Hospital De La Línea De La Concepción", + "Hospital General Santa María Del Puerto", + "Hospital Universitario De Puerto Real", + "Hospital Virgen De Las Montañas", + "Hospital Virgen Del Camino", + "Hospital Jerez Puerta Del Sur", + "Hospital Viamed Bahía De Cádiz", + "Hospital Punta De Europa", + "Hospital Viamed Novo Sancti Petri", + "Clínica Serman - Instituto Médico", + "Hospital Quirón Campo De Gibraltar", + "Hospital Punta Europa. Unidad De Cuidados Medios", + "Hospital San Carlos", + "Hospital De La Línea De La Concepción", + "Hospital General Universitario De Castellón", + "Hospital La Magdalena", + "Consorcio Hospitalario Provincial De Castellón", + "Hospital Comarcal De Vinaròs", + "Hospital Universitario De La Plana", + "Instituto De Traumatologia De Unión De Mutuas (Matepss Nº 267)", + "Hospital Rey D. Jaime", + "Servicios Sanitarios Del Centro Penitenciario De Castellón Ii (Albocàsser)", + "Servicios Sanitarios Y Asistenciales", + "Hospital Quirónsalud Ciudad Real", + "Hospital General La Mancha Centro", + "Hospital Virgen De Altagracia", + "Hospital Santa Bárbara", + "Hospital General De Valdepeñas", + "Hospital General De Ciudad Real", + "Hospital General De Tomelloso", + "Hospital Universitario Reina Sofía", + "Hospital Los Morales", + "Hospital Materno-Infantil Del H.U. Reina Sofía", + "Hospital Provincial", + "Hospital De La Cruz Roja De Córdoba", + "Hospital San Juan De Dios De Córdoba", + "Hospital Infanta Margarita", + "Hospital Valle De Los Pedroches", + "Hospital De Montilla", + "Hospital La Arruzafa-Instituto De Oftalmología", + "Hospital De Alta Resolución De Puente Genil", + "Hospital De Alta Resolución Valle Del Guadiato", + "Hospital General Del H.U. Reina Sofía", + "Hospital Quironsalud Córdoba", + "Complexo Hospitalario Universitario A Coruña", + "Hospital Universitario A Coruña", + "Hospital Teresa Herrera (Materno-Infantil)", + "Hospital Maritimo De Oza", + "Centro Oncoloxico De Galicia", + "Hospital Quironsalud A Coruña", + "Hospital Hm Modelo", + "Maternidad Hm Belen", + "Hospital Abente Y Lago", + "Complexo Hospitalario Universitario De Ferrol", + "Hospital Universitario Arquitecto Marcide", + "Hospital Juan Cardona", + "Hospital Naval", + "Complexo Hospitalario Universitario De Santiago", + "Hospital Clinico Universitario De Santiago", + "Hospital Gil Casares", + "Hospital Medico Cirurxico De Conxo", + "Hospital Psiquiatrico De Conxo", + "Hospital Hm Esperanza", + "Hospital Hm Rosaleda", + "Sanatorio La Robleda", + "Hospital Da Barbanza", + "Hospital Virxe Da Xunqueira", + "Hm Modelo (Grupo)", + "Hospital Hm Rosaleda - Hm La Esperanza", + "Hospital Virgen De La Luz", + "Hospital Recoletas Cuenca S.L.U.", + "Hospital Universitari De Girona Dr. Josep Trueta", + "Clínica Bofill", + "Clínica Girona", + "Clínica Quirúrgica Onyar", + "Clínica Salus Infirmorum", + "Hospital De Sant Jaume", + "Hospital De Campdevànol", + "Hospital De Figueres", + "Clínica Santa Creu", + "Hospital Sociosanitari De Lloret De Mar", + "Hospital D'Olot I Comarcal De La Garrotxa", + "Hospital De Palamós", + "Residència De Gent Gran Puig D'En Roca", + "Hospital Comarcal De Blanes", + "Residència Geriàtrica Maria Gay", + "Hospital Sociosanitari Mutuam Girona", + "Centre Sociosanitari De Puigcerdà", + "Centre Sociosanitari Bernat Jaume", + "Institut Català D'Oncologia Girona - Hospital Josep Trueta", + "Hospital Santa Caterina-Ias", + "Centre Palamós Gent Gran", + "Centre Sociosanitari Parc Hospitalari Martí I Julià", + "Hospital De Cerdanya / Hôpital De Cerdagne", + "Hospital General Del H.U. Virgen De Las Nieves", + "Hospital De Neurotraumatología Y Rehabilitación", + "Hospital De La Inmaculada Concepción", + "Hospital De Baza", + "Hospital Santa Ana", + "Hospital Universitario Virgen De Las Nieves", + "Hospital De Alta Resolución De Guadix", + "Hospital De Alta Resolución De Loja", + "Hospital Vithas La Salud", + "Hospital Universitario San Cecilio", + "Microbiología HUC San Cecilio", + "Hospital Materno-Infantil Virgen De Las Nieves", + "Hospital Universitario De Guadalajara", + "Clínica La Antigua", + "Clínica Dr. Sanz Vázquez", + "U.R.R. De Enfermos Psíquicos Alcohete", + "Instituto De Enfermedades Neurológicas De Castilla-La Mancha", + "Mutualia-Clinica Pakea", + "Hospital Ricardo Bermingham (Fundación Matia)", + "Policlínica Gipuzkoa S.A.", + "Hospital Quirón Salud Donostia", + "Fundación Onkologikoa Fundazioa", + "Organización Sanitaria Integrada Bidasoa (Osi Bidasoa)", + "Organización Sanitaria Integrada Alto Deba", + "Hospital Aita Menni", + "Hospital Psiquiátrico San Juan De Dios", + "Clinica Santa María De La Asunción, (Inviza, S.A.)", + "Sanatorio De Usurbil, S.L.", + "Hospital De Zumarraga", + "Hospital De Mendaro", + "Hospital Universitario Donostia-Donostia Unibertsitate Ospitalea", + "Hospital San Juan De Dios Donostia", + "Hospital Infanta Elena", + "Hospital Vázquez Díaz", + "Hospital Blanca Paloma", + "Clínica Los Naranjos", + "Hospital De Riotinto", + "Hospital Universitario Juan Ramón Jiménez", + "Hospital Juan Ramón Jiménez", + "Hospital Costa De La Luz", + "Hospital Virgen De La Bella", + "Hospital General San Jorge", + "Centro De Rehab. Psicosocial Santo Cristo De Los Milagros", + "Hospital Sagrado Corazón De Jesús", + "Hospital Viamed Santiago", + "Hospital De Barbastro", + "Hospital De Jaca.Salud", + "Centro Sanitario Bajo Cinca-Baix Cinca", + "Hospital General Del H.U. De Jaén", + "Hospital Doctor Sagaz", + "Hospital Neurotraumatológico Del H.U. De Jaén", + "Clínica Cristo Rey", + "Hospital San Agustín", + "Hospital San Juan De La Cruz", + "Hospital Universitario De Jaén", + "Hospital Alto Guadalquivir", + "Hospital Materno-Infantil Del H.U. De Jaén", + "Hospital De Alta Resolución Sierra De Segura", + "Hospital De Alta Resolución De Alcaudete", + "Hospital De Alta Resolución De Alcalá La Real", + "Hospital De León", + "Hospital Monte San Isidro", + "Regla Hm Hospitales", + "Hospital Hm San Francisco", + "Hospital Santa Isabel", + "Hospital El Bierzo", + "Hospital De La Reina", + "Hospital San Juan De Dios", + "Complejo Asistencial Universitario De León", + "Clínica Altollano", + "Clínica Ponferrada", + "Hospital Valle De Laciana", + "Hospital Universitari Arnau De Vilanova De Lleida", + "Hospital Santa Maria", + "Vithas Hospital Montserrat", + "Clínica Perpetuo Socorro De Lérida, Grupo Hla, Slu", + "Clínica Terres De Ponent", + "Clínica Psiquiàtrica Bellavista", + "Fundació Sant Hospital.", + "Centre Sanitari Del Solsonès, Fpc", + "Hospital Comarcal Del Pallars", + "Espitau Val D'Aran", + "Hestia Balaguer.", + "Residència Terraferma", + "Castell D'Oliana Residencial,S.L", + "Hospital Jaume Nadal Meroles", + "Sant Joan De Déu Terres De Lleida", + "Reeixir", + "Hospital Sant Joan De Déu Lleida", + "Complejo Hospitalario San Millan San Pedro De La Rioja", + "Hospital San Pedro", + "Hospital General De La Rioja", + "Policlínico Riojano Nuestra Señora De Valvanera, S.A.", + "Fundación Hospital Calahorra", + "Clínica Los Manzanos", + "Centro Asistencial De Albelda De Iregua", + "Centro Sociosanitario De Convalecencia Los Jazmines", + "Centro Sociosanitario De Convalecencia Nuestra Señora Virgen Del Carmen", + "Complexo Hospitalario Universitario De Lugo", + "Hospital De Calde (Psiquiatrico)", + "Hospital Polusa", + "Sanatorio Nosa Señora Dos Ollos Grandes", + "Hospital Publico Da Mariña", + "Hospital De Monforte", + "Hospital Universitario Lucus Augusti", + "Hospital Universitario La Paz", + "Hospital Ramón Y Cajal", + "Hospital Universitario 12 De Octubre", + "Hospital Clínico San Carlos", + "Hospital Virgen De La Torre", + "Hospital Universitario Santa Cristina", + "Hospital Universitario De La Princesa", + "Hospital Infantil Universitario Niño Jesus", + "Hospital Central De La Cruz Roja San José Y Santa Adela", + "Hospital Carlos Iii", + "Hospital Cantoblanco", + "Complejo Hospitalario Gregorio Marañón", + "Hospital General Universitario Gregorio Marañón", + "Instituto Provincial De Rehabilitación", + "Hospital Dr. R. Lafora", + "Sanatorio Nuestra Señora Del Rosario", + "Hospital De La V.O.T. De San Francisco De Asís", + "Hospital Quirónsalud San José", + "Hospital Beata María Ana. Hh. Hospitalarias Sgdo. C. De Jesús", + "Clínica Santa Elena", + "Hospital San Francisco De Asís", + "Clínica San Miguel", + "Clínica Nuestra Sra. De La Paz", + "Fundación Instituto San José", + "Hospital Universitario Fundación Jiménez Díaz", + "Hestia Madrid (Clínica Sear, S.A.)", + "Hospital Ruber Juan Bravo 39", + "Hospital Vithas Nuestra Señora De América", + "Hospital Virgen De La Paloma, S.A.", + "Clínica La Luz, S.L.", + "Fuensanta S.L. (Clínica Fuensanta)", + "Hospital Ruber Juan Bravo 49", + "Hospital Ruber Internacional", + "Clínica La Milagrosa", + "Hospital Universitario La Zarzuela", + "Hospital Universitario Hm Nuevo Belen", + "Sanatorio Neuropsiquiátrico Doctor León", + "Instituto De Investigaciones Neuropsiquiátricas Dr. López Ibor", + "Sanatorio Esquerdo, S.A.", + "Hospital Central De La Defensa Gomez Ulla", + "Hospital Universitario Príncipe De Asturias", + "Hospital De La Fuenfría", + "Hh. Hh. Sgdo. C. De Jesús. Complejo Asistencial Benito Menni", + "Centro San Juan De Dios", + "Hospital Monográfico Asepeyo De Traumat. Cirugía Y Rehabilitación", + "Hospital Guadarrama", + "Hospital Universitario Severo Ochoa", + "Instituto Psiquiátrico Servicios De Salud Mental José Germain-1 Luna", + "Fremap Hospital Y Centro De Rehabilitación De Majadahonda", + "Hospital Universitario De Móstoles", + "Hospital El Escorial", + "Hospital Virgen De La Poveda", + "Hospital De Madrid", + "Hospital Universitario De Getafe", + "Clínica Isadora", + "Hospital Universitario Moncloa", + "Hospital Universitario Fundación Alcorcón", + "Clinica Cemtro", + "Hospital Universitario Hm Montepríncipe", + "Centro Oncológico Md Anderson International España", + "Hospital Quironsalud Sur", + "Hospital Universitario De Fuenlabrada", + "Hospital Universitario Hm Torrelodones", + "Complejo Universitario La Paz", + "Hospital La Moraleja", + "Hospital Los Madroños", + "Hospital Quirónsalud Madrid", + "Hospital Centro De Cuidados Laguna", + "Hospital Universitario Madrid Sanchinarro", + "Hospital Universitario Infanta Elena", + "Vitas Nisa Pardo De Aravaca.", + "Hospital Universitario Infanta Sofía", + "Hospital Universitario Del Henares", + "Hospital Universitario Infanta Leonor", + "Hospital Universitario Del Sureste", + "Hospital Universitario Del Tajo", + "Hospital Universitario Infanta Cristina", + "Hospital Universitario Puerta De Hierro Majadahonda", + "Casta Guadarrama", + "Hospital Universitario De Torrejón", + "Hospital Rey Juan Carlos", + "Hospital General De Villalba", + "Hm Universitario Puerta Del Sur", + "Hm Valles", + "Hospital Casaverde De Madrid", + "Clínica Universidad De Navarra", + "Complejo Hospitalario Universitario Infanta Leonor", + "Clínica San Vicente", + "Instituto Psiquiátrico Servicios De Salud Mental José Germain", + "Instituto Psiquiátrico Servicios De Salud Mental José Germain-2 Aragón", + "Hospital General Del H.U.R. De Málaga", + "Hospital Virgen De La Victoria", + "Hospital Civil", + "Centro Asistencial San Juan De Dios", + "Centro Asistencial Hnas. Hosp. Del Sagrado Corazón De Jesús", + "Hospital Vithas Parque San Antonio", + "Hospital El Ángel", + "Hospital Doctor Gálvez", + "Clínica De La Encarnación", + "Hospital Psiquiátrico San Francisco De Asís", + "Clínica Nuestra Sra. Del Pilar", + "Hospital De Antequera", + "Hospital Quironsalud Marbella", + "Hospital De La Axarquía", + "Hospital Marítimo De Torremolinos", + "Hospital Universitario Regional De Málaga", + "Hospital Universitario Virgen De La Victoria", + "Hospital Materno-Infantil Del H.U.R. De Málaga", + "Hospital Costa Del Sol", + "Hospital F.A.C. Doctor Pascual", + "Clínica El Seranil", + "Hc Marbella International Hospital", + "Hospital Humanline Banús", + "Clínica Rincón", + "Hospiten Estepona", + "Fundación Cudeca. Centro De Cuidados Paliativos", + "Xanit Hospital Internacional", + "Comunidad Terapéutica San Antonio", + "Hospital De Alta Resolución De Benalmádena", + "Hospital Quironsalud Málaga", + "Cenyt Hospital", + "Clínica Ochoa", + "Centro De Reproducción Asistida De Marbella (Ceram)", + "Helicópteros Sanitarios Hospital", + "Hospital De La Serranía", + "Hospital Valle Del Guadalhorce De Cártama", + "Hospital Clínico Universitario Virgen De La Arrixaca", + "Hospital General Universitario Reina Sofía", + "Plataforma de Medicina Computacional, Fundación Progreso y Salud", + "Hospital Psiquiátrico Roman Alberca", + "Hospital Quirónsalud Murcia", + "Hospital La Vega", + "Hospital Mesa Del Castillo", + "Sanatorio Doctor Muñoz S.L.", + "Clínica Médico-Quirúrgica San José, S.A.", + "Hospital Comarcal Del Noroeste", + "Clínica Doctor Bernal S.L.", + "Hospital Santa María Del Rosell", + "Santo Y Real Hospital De Caridad", + "Hospital Nuestra Señora Del Perpetuo Socorro", + "Fundacion Hospital Real Piedad", + "Hospital Virgen Del Alcázar De Lorca", + "Hospital General Universitario Los Arcos Del Mar Menor", + "Hospital Virgen Del Castillo", + "Hospital Rafael Méndez", + "Hospital General Universitario J.M. Morales Meseguer", + "Hospital Ibermutuamur-Patología Laboral", + "Hospital De La Vega Lorenzo Guirao", + "Hospital De Molina", + "Clínica San Felipe Del Mediterráneo", + "Hospital De Cuidados Medios Villademar", + "Residencia Los Almendros", + "Complejo Hospitalario Universitario De Cartagena", + "Hospital General Universitario Santa Lucia", + "Consorcio LUCIA (SACYL,ITACYL UBU,UVa)", + "Hospital Perpetuo Socorro Alameda", + "Hospital C.M.V. Caridad Cartagena", + "Centro San Francisco Javier", + "Clinica Psiquiatrica Padre Menni", + "Clinica Universidad De Navarra", + "CATLAB", + "Clinica San Miguel", + "Clínica San Fermín", + "Centro Hospitalario Benito Menni", + "Hospital García Orcoyen", + "Hospital Reina Sofía", + "Clínica Psicogeriátrica Josefina Arregui", + "Complejo Hospitalario De Navarra", + "Complexo Hospitalario Universitario De Ourense", + "Hospital Universitario Cristal", + "Hospital Santo Cristo De Piñor (Psiquiatrico)", + "Hospital Santa Maria Nai", + "Centro Medico El Carmen", + "Hospital De Valdeorras", + "Hospital De Verin", + "Clinica Santa Teresa", + "Hospital Monte Naranco", + "Centro Médico De Asturias", + "Clínica Asturias", + "Clínica San Rafael", + "Hospital Universitario San Agustín", + "Fundación Hospital De Avilés", + "Hospital Carmen Y Severo Ochoa", + "Hospital Comarcal De Jarrio", + "Hospital De Cabueñes", + "Sanatorio Nuestra Señora De Covadonga", + "Fundación Hospital De Jove", + "Hospital Begoña De Gijón, S.L.", + "Hospital Valle Del Nalón", + "Fundació Fisabio", + "Fundación Sanatorio Adaro", + "Hospital V. Álvarez Buylla", + "Hospital Universitario Central De Asturias", + "Hospital Del Oriente De Asturias Francisco Grande Covián", + "Hospital De Luarca -Asistencia Médica Occidentalsl", + "Instituto Salud Mental Pérez-Espinosa Oria, S.L.", + "Clínica Psiquiátrica Somió", + "Clínica Cirugía Plástica Y Estética Fernández Y Fernández Cossío", + "Hospital Gijón", + "Centro Terapéutico Vista Alegre", + "Instituto Oftalmológico Fernández -Vega", + "Hospital Rio Carrión", + "Hospital San Telmo", + "Hospital Psiquiatrico San Luis", + "Área Psiquiátrica Del Centro Asistencial San Juan De Dios", + "Hospital Recoletas De Palencia", + "Complejo Asistencial Universitario De Palencia", + "Hospital Universitario Materno-Infantil De Canarias", + "Hospital Universitario Insular De Gran Canaria", + "Unidades Clínicas Y De Rehabilitación (Ucyr)", + "Sanatorio Dermatológico Regional", + "Fundación Benéfica Canaria Casa Asilo San José", + "Vithas Hospital Santa Catalina", + "Hospital Policlínico La Paloma, S.A.", + "Instituto Policlínico Cajal, S.L.", + "Hospital San Roque Las Palmas De Gran Canaria", + "Clínica Bandama", + "Hospital Doctor José Molina Orosa", + "Hospital Insular De Lanzarote", + "Hospital General De Fuerteventura", + "Quinta Médica De Reposo, S.A.", + "Hospital De San Roque Guía", + "Hospital Ciudad De Telde", + "Complejo Hospitalario Universitario Insular-Materno Infantil", + "Hospital Clínica Roca (Roca Gestión Hospitalaria)", + "Hospital Universitario De Gran Canaria Dr. Negrín", + "Hospiten Lanzarote (Clínicas Del Sur S.L.U.)", + "Complejo Hospitalario Universitario De Gran Canaria Dr. Negrín", + "Hospital San Roque Maspalomas", + "Clínica Parque Fuerteventura", + "Clinica Jorgani", + "Hospital Universitario Montecelo", + "Gerencia de Atención Primaria Pontevedra Sur", + "Hospital Provincial De Pontevedra", + "Hestia Santa Maria", + "Hospital Quironsalud Miguel Dominguez", + "Instituto De Neuro-Rehabilitacion Quironsalud Pontevedra", + "Hospital Meixoeiro", + "Hospital Nicolas Peña", + "Fremap, Hospital De Vigo", + "Hospital Povisa", + "Hospital Hm Vigo", + "Vithas Hospital Nosa Señora De Fatima", + "Concheiro Centro Medico Quirurgico", + "Centro Medico Pintado", + "Sanatorio Psiquiatrico San Jose", + "Clinica Residencia El Pinar", + "Complexo Hospitalario Universitario De Pontevedra", + "Hospital Do Salnes", + "Complexo Hospitalario Universitario De Vigo", + "Hospital Universitario Alvaro Cunqueiro", + "Plataforma de Genómica y Bioinformática", + "Complejo Asistencial Universitario De Salamanca", + "Hospital Universitario De Salamanca", + "Hospital General De La Santísima Trinidad", + "Hospital Los Montalvos", + "Complejo Hospitalario Universitario Ntra. Sra. De Candelaria", + "Hospital Universitario Nuestra Señora De Candelaria", + "Hospital De Ofra", + "Instituto Tecnológico y de Energías Renovables, S.A. (ITER, S.A.)", + "Unidades Clínicas Y De Rehabilitación De Salud Mental", + "Hospital Febles Campos", + "Hospital Quirón Tenerife", + "Vithas Hospital Santa Cruz", + "Clínica Parque, S.A.", + "Hospiten Sur", + "Hospital Universitario De Canarias (H.U.C)", + "Hospital De La Santísima Trinidad", + "Clínica Vida", + "Hospital Bellevue", + "Hospital Nuestra Señora De Guadalupe", + "Hospital Nuestra Señora De Los Dolores", + "Hospital Insular Ntra. Sra. De Los Reyes", + "Hospital Quirón Costa Adeje", + "Hospital Rambla S.L.", + "Hospital General De La Palma", + "Complejo Hospitalario Universitario De Canarias", + "Hospital Del Norte", + "Hospital Del Sur", + "Clínica Tara", + "Hospital Universitario Marqués De Valdecilla", + "Hospital Ramón Negrete", + "Hospital Santa Clotilde - Orden Hospitalaria San Juan De Dios.", + "Centro Hospitalario Padre Menni", + "Hospital Comarcal De Laredo", + "Hospital Sierrallana", + "Clínica Mompía, S.A.U.", + "Complejo Asistencial De Segovia", + "Hospital General De Segovia", + "Hospital Recoletas Segovia Ntra. Sra. De La Misericordia", + "Unidad De Rehabilitación Psiquiátrica Ntra. Sra. De La Fuencisla", + "Hospital General Del H.U. Virgen Del Rocío", + "Hospital Virgen De Valme", + "Hospital Virgen Macarena", + "Hospital San Lázaro", + "Hospital Victoria Eugenia De La Cruz Roja Española", + "Hospital San Juan De Dios De Sevilla", + "Hospital Duques Del Infantado", + "Clínica Santa Isabel", + "Hospital Quironsalud Sagrado Corazón", + "Hospital Fátima", + "Hospital Quironsalud Infanta Luisa", + "Clínica Nuestra Señora De Aránzazu", + "Residencia De Salud Mental Nuestra Señora Del Carmen", + "Hospital El Tomillar", + "Hospital De Alta Resolución De Morón De La Frontera", + "Hospital La Merced", + "Hospital Universitario Virgen Del Rocío", + "Microbiología. Hospital Universitario Virgen del Rocio", + "Hospital Universitario Virgen Macarena", + "Hospital Universitario Virgen De Valme", + "Fremap, Hospital Y Centro De Rehabilitación De Sevilla", + "Hospital Psiquiátrico Penitenciario", + "Hospital San Juan De Dios Del Aljarafe", + "Hospital Nisa Sevilla-Aljarafe", + "Hospital De Alta Resolución De Utrera", + "Hospital De Alta Resolución Sierra Norte", + "Hospital Viamed Santa Ángela De La Cruz", + "Hospital De Alta Resolución De Écija", + "Clínica De Salud Mental Miguel De Mañara", + "Hospital De Rehabilitación Y Traumatología Virgen Del Rocío", + "Hospital De Alta Resolución De Lebrija", + "Hospital Infantil", + "Hospital De La Mujer", + "Hospital Virgen Del Mirón", + "Complejo Asistencial De Soria", + "Hospital Universitari Joan Xxiii De Tarragona", + "Hospital Sociosanitari Francolí", + "Hospital De Sant Pau I Santa Tecla", + "Hospital Viamed Monegal", + "Clínica Activa Mútua 2008", + "Hospital Comarcal Móra D'Ebre", + "Hospital Universitari De Sant Joan De Reus", + "Centre Mq Reus", + "Villablanca Serveis Assistencials, Sa", + "Institut Pere Mata, S.A", + "Hospital De Tortosa Verge De La Cinta", + "Clínica Terres De L'Ebre", + "Policlínica Comarcal Del Vendrell.", + "Pius Hospital De Valls", + "Residència Alt Camp", + "Centre Sociosanitari Ciutat De Reus", + "Hospital Comarcal D'Amposta", + "Centre Sociosanitari Llevant", + "Residència Vila-Seca", + "Unitat Polivalent En Salut Mental D'Amposta", + "Hospital Del Vendrell", + "Centre Sociosanitari I Residència Assistida Salou", + "Residència Santa Tecla Ponent", + "Unitat De Referència De Psiquiatria I Trastorns De La Conducta Alimentària (Urpi)", + "Hospital Obispo Polanco", + "Centro De Rehabilitacion Psicosocial San Juan De Dios", + "Hospital De Alcañiz", + "Hospital Virgen De La Salud", + "Hospital Geriátrico Virgen Del Valle", + "Hospital Nacional De Parapléjicos", + "Hospital Provincial Nuestra Señora De La Misericordia", + "Hospital General Nuestra Señora Del Prado", + "Consejería de Sanidad", + "Clínica Marazuela, S.A.", + "Complejo Hospitalario De Toledo", + "Hospital Laboral Solimat Mutua Colaboradora Con La Ss Nº 72", + "Quirón Salud Toledo", + "Hospital Universitario Y Politécnico La Fe", + "Hospital Universitario Dr. Peset Aleixandre", + "Hospital Arnau De Vilanova", + "Hospital Clínico Universitario De Valencia", + "Hospital De La Malva-Rosa", + "Consorcio Hospital General Universitario De Valencia", + "Hospital Católico Casa De Salud", + "Hospital Nisa Valencia Al Mar", + "Fundación Instituto Valenciano De Oncología", + "Hospital Virgen Del Consuelo", + "Hospital Quirón Valencia", + "Hospital Psiquiátrico Provincial", + "Casa De Reposo San Onofre", + "Hospital Francesc De Borja De Gandia", + "Hospital Lluís Alcanyís De Xàtiva", + "Hospital General De Ontinyent", + "Hospital Intermutual De Levante", + "Hospital De Sagunto", + "Hospital Doctor Moliner", + "Hospital General De Requena", + "Hospital 9 De Octubre", + "Centro Médico Gandia", + "Hospital Nisa Aguas Vivas", + "Clinica Fontana", + "Hospital Universitario De La Ribera", + "Hospital Pare Jofré", + "Hospital De Manises", + "Hospital De Crónicos De Mislata (Antiguo Hospital Militar De Valencia)", + "Hospital De Llíria", + "Imed Valencia", + "Unidad De Desintoxicación Hospitalaria", + "Hospital Universitario Rio Hortega", + "Hospital Clínico Universitario De Valladolid", + "Sanatorio Sagrado Corazón", + "Hospital Medina Del Campo", + "Hospital De Valladolid Felipe Ii", + "Hospital Campo Grande", + "Hospital Santa Marina", + "Hospital Intermutual De Euskadi", + "Clínica Ercilla Mutualia", + "Hospital Cruz Roja De Bilbao", + "Sanatorio Bilbaíno", + "Hospital De Basurto", + "Imq Clínica Virgen Blanca", + "Clínica Guimon S.A.", + "Clínica Indautxu", + "Hospital Universitario De Cruces", + "Osi Barakaldo-Sestao", + "Hospital San Eloy", + "Red De Salud Mental De Bizkaia (Hospital De Bermeo)", + "Hospital Galdakao-Usansolo", + "Hospital Gorliz", + "Red De Salud Mental De Bizkaia (Hospital De Zaldibar)", + "Red De Salud Mental De Bizkaia (Hospital De Zamudio)", + "Avances Médicos S.A", + "Hospital Quironsalud Bizkaia", + "Clínica Imq Zorrotzaurre", + "Hospital Urduliz Ospitalea", + "Hospital Virgen De La Concha", + "Hospital Provincial De Zamora", + "Hospital De Benavente", + "Complejo Asistencial De Zamora", + "Hospital Recoletas De Zamora", + "Hospital Clínico Universitario Lozano Blesa", + "Hospital Universitario Miguel Servet", + "Hospital Royo Villanova", + "Centro de Investigación Biomédica de Aragón", + "Centro De Rehabilitacion Psicosocial Nuestra Señora Del Pilar", + "Hospital Nuestra Señora De Gracia", + "Hospital Maz", + "Clínica Montpelier Grupo Hla, S.A.U", + "Centro Neuropsiquiátrico Nuestra Señora Del Carmen", + "Hospital Quironsalud Zaragoza", + "Clínica Nuestra Señora Del Pilar", + "Hospital General De La Defensa De Zaragoza", + "Hospital Ernest Lluch Martin", + "Unidad De Rehabilitacion De Larga Estancia", + "Unidad Rehabilitadora De Media Estancia Profesor Rey Ardid", + "Hospital De Rehabilitacion Psiquiatrica Prisma", + "Centro Sanitario Cinco Villas", + "Hospital Viamed Montecanal", + "Hospital Universitario De Ceuta", + "Hospital Comarcal de Melilla", + "Presidencia del Gobierno", + "Ministerio Sanidad" + ] + }, + "submitting_institution": { + "enum": [ + "Instituto de Salud Carlos III", + "Red De Salud Mental De Araba (Hospital Psiquiátrico De Araba)", + "Hospital San José", + "Hospital Quirónsalud Vitoria", + "Hospital De Cuidados San Onofre, S.L. (Hospital De Cuidados San Onofre)", + "Hospital De Leza", + "Hospital Universitario De Araba (Sede Txagorritxu Y Sede Santiago)", + "Complejo Hospitalario Universitario De Albacete", + "Hospital General Universitario De Albacete", + "Clínica Santa Cristina Albacete", + "Hospital De Hellín", + "Quironsalud Hospital Albacete", + "Hospital Universitario Nuestra Señora Del Perpetuo Socorro", + "Hospital General De Almansa", + "Hospital General De Villarobledo", + "Centro De Atención A La Salud Mental La Milagrosa", + "Hospital General Universitario De Alicante", + "Clínica Vistahermosa Grupo Hla", + "Vithas Hospital Perpetuo Internacional", + "Hospital Virgen De Los Lirios", + "Sanatorio San Jorge S.L.", + "Hospital Clínica Benidorm", + "Hospital San Carlos De Denia Grupo Hla", + "Hospital General Universitario De Elche", + "Hospital General Universitario De Elda-Virgen De La Salud", + "Hospital Sant Vicent Del Raspeig", + "Sanatorio San Francisco De Borja Fontilles", + "Hospital Marina Baixa De La Vila Joiosa", + "Hospital Vega Baja De Orihuela", + "Hospital Internacional Medimar, S.A.", + "Hospital Psiquiátrico Penitenciario De Fontcalent", + "Hospital Universitario San Juan De Alicante", + "Centro Médico Acuario", + "Hospìtal Quironsalud Torrevieja", + "Hospital Imed Levante", + "Hospital Universitario De Torrevieja", + "Hospital De Denia", + "Hospital La Pedrera", + "Centro De Rehabilitación Neurológica Casaverde", + "Centro Militar de Veterinaria de la Defensa", + "Gerencia de Salud de Area de Soria", + "Hospital Universitario Vinalopo", + "Hospital Imed Elche", + "Hospital Torrecárdenas", + "Hospital De La Cruz Roja", + "Hospital Virgen Del Mar", + "Hospital La Inmaculada", + "Hospital Universitario Torrecárdenas", + "Hospital Mediterráneo", + "Hospital De Poniente", + "Hospital De Alta Resolución El Toyo", + "Hospital Nuestra Señora De Sonsoles", + "Hospital Provincial De Ávila", + "Clínica Santa Teresa", + "Complejo Asistencial De Avila", + "Hospital De Salud Mental Casta Salud Arévalo", + "Complejo Hospitalario Universitario De Badajoz", + "Hospital Universitario De Badajoz", + "Hospital Materno Infantil", + "Hospital Fundación San Juan De Dios De Extremadura", + "Hospital Don Benito-Villanueva De La Serena", + "Hospital General De Llerena", + "Hospital De Mérida", + "Centro Sociosanitario De Mérida", + "Hospital Quirónsalud Santa Justa", + "Hospital Quironsalud Clideba", + "Hospital Parque Via De La Plata", + "Hospital De Zafra", + "Complejo Hospitalario Llerena-Zafra", + "Hospital Perpetuo Socorro", + "Hospital Siberia-Serena", + "Hospital Tierra De Barros", + "Complejo H. Don Benito-Vva De La Serena", + "Complejo Hospitalario Del Área De Salud De Mérida", + "Casaverde. Centro De Rehabilitación Neurológico De Extremadura", + "Clínica Extremeña De Salud", + "Hospital Parque Vegas Altas", + "Hospital General De Mallorca", + "Hospital Psiquiàtric", + "Clínica Mutua Balear", + "Hospital De La Cruz Roja Española", + "Hospital Sant Joan De Deu", + "Clínica Rotger", + "Clinica Juaneda", + "Policlínica Miramar", + "Hospital Joan March", + "Hospital Can Misses", + "Hospital Residencia Asistida Cas Serres", + "Policlínica Nuestra Señora Del Rosario, S.A.", + "Clínica Juaneda Menorca", + "Hospital General De Muro", + "Clinica Juaneda Mahon", + "Hospital Manacor", + "Hospital Son Llatzer", + "Hospital Quirónsalud Palmaplanas", + "Hospital De Formentera", + "Hospital Comarcal D'Inca", + "Hospital Mateu Orfila", + "Hospital Universitari Son Espases", + "Servicio de Microbiologia HU Son Espases", + "Hospital De Llevant", + "Hospital Clinic Balear", + "Clínica Luz De Palma", + "Hospital Clínic De Barcelona, Seu Sabino De Arana", + "Hospital Del Mar", + "Hospital De L'Esperança", + "Hospital Clínic De Barcelona", + "Hospital Fremap Barcelona", + "Centre De Prevenció I Rehabilitació Asepeyo", + "Clínica Mc Copèrnic", + "Clínica Mc Londres", + "Hospital Egarsat Sant Honorat", + "Hospital Dos De Maig", + "Hospital El Pilar", + "Hospital Sant Rafael", + "Clínica Nostra Senyora Del Remei", + "Clínica Sagrada Família", + "Hospital Mare De Déu De La Mercè", + "Clínica Solarium", + "Hospital De La Santa Creu I Sant Pau", + "Nou Hospital Evangèlic", + "Hospital De Nens De Barcelona", + "Institut Guttmann", + "Fundació Puigvert - Iuna", + "Hestia Palau.", + "Hospital Universitari Sagrat Cor", + "Clínica Corachan", + "Clínica Tres Torres", + "Hospital Quirónsalud Barcelona", + "Centre Mèdic Delfos", + "Centre Mèdic Sant Jordi De Sant Andreu", + "Hospital Plató", + "Hospital Universitari Quirón Dexeus", + "Centro Médico Teknon, Grupo Quironsalud", + "Hospital De Barcelona", + "Centre Hospitalari Policlínica Barcelona", + "Centre D'Oftalmologia Barraquer", + "Hestia Duran I Reynals", + "Serveis Clínics, S.A.", + "Clínica Coroleu - Ssr Hestia.", + "Clínica Planas", + "Hospital Universitari Germans Trias I Pujol De Badalona", + "Hospital Municipal De Badalona", + "Centre Sociosanitari El Carme", + "Hospital Comarcal De Sant Bernabé", + "Hospital Comarcal Sant Jaume De Calella", + "Hospital De Sant Joan De Déu.", + "Clínica Nostra Senyora De Guadalupe", + "Hospital General De Granollers.", + "Hospital Universitari De Bellvitge", + "Hospital General De L'Hospitalet", + "Lab Clínic ICS Camp de Tarragona-Terres de l'Ebre. Hospital Joan XXIII", + "LABORATORI DE REFERENCIA DE CATALUNYA", + "Banc de Sang i Teixits Catalunya", + "Laboratorio Echevarne, SA Sant Cugat del Vallès", + "Fundació Sanitària Sant Josep", + "Hospital De Sant Jaume", + "Clínica Sant Josep", + "Centre Hospitalari.", + "Fundació Althaia-Manresa", + "Hospital De Sant Joan De Déu (Manresa)", + "Hospital De Sant Andreu", + "Germanes Hospitalàries. Hospital Sagrat Cor", + "Fundació Hospital Sant Joan De Déu", + "Centre Mèdic Molins, Sl", + "Hospital De Mollet", + "Hospital De Sabadell", + "Benito Menni,Complex Assistencial En Salut Mental.", + "Parc Sanitari Sant Joan De Déu - Recinte Sant Boi.", + "Parc Sanitari Sant Joan De Déu - Hospital General", + "Hospital De Sant Celoni.", + "Hospital Universitari General De Catalunya", + "Casal De Curació", + "Hospital Residència Sant Camil - Consorci Sanitari Del Garraf.", + "Centres Assistencials Dr. Emili Mira I López (Recinte Torribera).", + "Fundació Hospital De L'Esperit Sant", + "Hospital De Terrassa.", + "Hospital De Sant Llàtzer", + "Hospital Universitari Mútua De Terrassa", + "Hospital Universitari De Vic", + "Hospital De La Santa Creu", + "Hospital De Viladecans", + "Hospital Sant Antoni Abat - Consorci Sanitari Del Garraf.", + "Centre Sociosanitari Can Torras", + "Hestia Maresme", + "Prytanis Sant Boi Centre Sociosanitari", + "Centre Sociosanitari Verge Del Puig", + "Residència L'Estada", + "Residència Puig-Reig", + "Residència Santa Susanna", + "Hospital De Mataró", + "Hospital Universitari Vall D'Hebron", + "Centre Polivalent Can Fosc", + "Hospital Sociosanitari Mutuam Güell", + "Mútua De Granollers, Mútua De Previsió Social A Prima Fixa", + "Hospital Comarcal De L'Alt Penedès.", + "Àptima Centre Clínic - Mútua De Terrassa", + "Institut Català D'Oncologia - Hospital Duran I Reynals", + "Sar Mont Martí", + "Regina Sar", + "Centre Vallparadís", + "Ita Maresme", + "Clínica Llúria", + "Antic Hospital De Sant Jaume I Santa Magdalena", + "Parc Sanitari Sant Joan De Déu - Numància", + "Prytanis Hospitalet Centre Sociosanitari", + "Comunitat Terapèutica Arenys De Munt", + "Hospital Sociosanitari Pere Virgili", + "Benito Menni Complex Assistencial En Salut Mental", + "Hospital Sanitas Cima", + "Parc Sanitari Sant Joan De Deu - Brians 1.", + "Institut Català D'Oncologia - Hospital Germans Trias I Pujol", + "CAP La Salut EAP Badalona", + "CAP Mataró-6 (Gatassa)", + "CAP Can Mariner Santa Coloma-1", + "CAP Montmeló (Montornès)", + "Centre Collserola Mutual", + "Centre Sociosanitari Sarquavitae Sant Jordi", + "Hospital General Penitenciari", + "Centre Sociosanitari De L'Hospitalet - Consorci Sanitari Integral", + "Sar La Salut Josep Servat", + "Clínica Creu Blanca", + "Hestia Gràcia", + "Centre Sociosanitari D'Esplugues", + "Centre Sociosanitari Ricard Fortuny", + "Centre Residencial Amma Diagonal", + "Centre Fòrum", + "Centre Sociosanitari Blauclínic Dolors Aleu", + "Parc Sanitari Sant Joan De Déu - Til·Lers", + "Clínica Galatea", + "Hospital D'Igualada", + "Centre Social I Sanitari Frederica Montseny", + "Parc Sanitari Sant Joan De Deu-Serveis Sanitaris Centre Penitenciari Brians-2", + "Centre Integral De Serveis En Salut Mental Comunitària", + "Centre Sociosanitari Sant Jordi De La Vall D'Hebron", + "Lepant Residencial Qgg, Sl", + "Mapfre Quavitae Barcelona", + "Unitat Polivalent Salut Mental Barcelona-Nord", + "Cqm Clínic Maresme, Sl", + "Serveis Sanitaris La Roca Del Valles 2", + "Clínica Del Vallès", + "Centre Gerontològic Amma Sant Cugat", + "Serveis Sanitaris Sant Joan De Vilatorrada", + "Centre Sociosanitari Stauros", + "Hospital De Sant Joan Despí Moisès Broggi", + "Amma Horta", + "Unitat Polivalent Benito Menni En Salut Mental De L'Hospitalet-El Prat De Llobregat", + "Centre Sociosanitari Del Centre Integral De Salut Cotxeres", + "Clínica Sant Antoni", + "Clínica Diagonal", + "Hospital Sociosanitari De Mollet", + "Centre Sociosanitari Isabel Roig", + "Iván Mañero Clínic", + "Institut Trastorn Límit", + "Centre D'Hospitalització I Hospital De Dia Trastorns De La Conducta", + "Sarquavitae Bonanova", + "Centre La Creueta", + "Unitat Terapèutica-Educativa Acompanya'M", + "Hospital Fuente Bermeja", + "Hospital Recoletas De Burgos", + "Hospital San Juan De Dios De Burgos", + "Hospital Santos Reyes", + "Hospital Residencia Asistida De La Luz", + "Hospital Santiago Apóstol", + "Complejo Asistencial Universitario De Burgos", + "Hospital Universitario De Burgos", + "Hospital San Pedro De Alcántara", + "Hospital Provincial Nuestra Señora De La Montaña", + "Hospital Ciudad De Coria", + "Hospital Campo Arañuelo", + "Hospital Virgen Del Puerto", + "Hospital Sociosanitario De Plasencia", + "Complejo Hospitalario De Cáceres", + "Hospital Quirón Salud De Cáceres", + "Clínica Soquimex", + "Clinica Quirúrgica Cacereña, S.A-(Clínica San Francisco)", + "Hospital Universitario Puerta Del Mar", + "Clínica La Salud", + "Hospital San Rafael", + "Hospital Punta De Europa", + "Clínica Los Álamos", + "Hospital Universitario De Jerez De La Frontera", + "Hospital San Juan Grande", + "Hospital De La Línea De La Concepción", + "Hospital General Santa María Del Puerto", + "Hospital Universitario De Puerto Real", + "Hospital Virgen De Las Montañas", + "Hospital Virgen Del Camino", + "Hospital Jerez Puerta Del Sur", + "Hospital Viamed Bahía De Cádiz", + "Hospital Punta De Europa", + "Hospital Viamed Novo Sancti Petri", + "Clínica Serman - Instituto Médico", + "Hospital Quirón Campo De Gibraltar", + "Hospital Punta Europa. Unidad De Cuidados Medios", + "Hospital San Carlos", + "Hospital De La Línea De La Concepción", + "Hospital General Universitario De Castellón", + "Hospital La Magdalena", + "Consorcio Hospitalario Provincial De Castellón", + "Hospital Comarcal De Vinaròs", + "Hospital Universitario De La Plana", + "Instituto De Traumatologia De Unión De Mutuas (Matepss Nº 267)", + "Hospital Rey D. Jaime", + "Servicios Sanitarios Del Centro Penitenciario De Castellón Ii (Albocàsser)", + "Servicios Sanitarios Y Asistenciales", + "Hospital Quirónsalud Ciudad Real", + "Hospital General La Mancha Centro", + "Hospital Virgen De Altagracia", + "Hospital Santa Bárbara", + "Hospital General De Valdepeñas", + "Hospital General De Ciudad Real", + "Hospital General De Tomelloso", + "Hospital Universitario Reina Sofía", + "Hospital Los Morales", + "Hospital Materno-Infantil Del H.U. Reina Sofía", + "Hospital Provincial", + "Hospital De La Cruz Roja De Córdoba", + "Hospital San Juan De Dios De Córdoba", + "Hospital Infanta Margarita", + "Hospital Valle De Los Pedroches", + "Hospital De Montilla", + "Hospital La Arruzafa-Instituto De Oftalmología", + "Hospital De Alta Resolución De Puente Genil", + "Hospital De Alta Resolución Valle Del Guadiato", + "Hospital General Del H.U. Reina Sofía", + "Hospital Quironsalud Córdoba", + "Complexo Hospitalario Universitario A Coruña", + "Hospital Universitario A Coruña", + "Hospital Teresa Herrera (Materno-Infantil)", + "Hospital Maritimo De Oza", + "Centro Oncoloxico De Galicia", + "Hospital Quironsalud A Coruña", + "Hospital Hm Modelo", + "Maternidad Hm Belen", + "Hospital Abente Y Lago", + "Complexo Hospitalario Universitario De Ferrol", + "Hospital Universitario Arquitecto Marcide", + "Hospital Juan Cardona", + "Hospital Naval", + "Complexo Hospitalario Universitario De Santiago", + "Hospital Clinico Universitario De Santiago", + "Hospital Gil Casares", + "Hospital Medico Cirurxico De Conxo", + "Hospital Psiquiatrico De Conxo", + "Hospital Hm Esperanza", + "Hospital Hm Rosaleda", + "Sanatorio La Robleda", + "Hospital Da Barbanza", + "Hospital Virxe Da Xunqueira", + "Hm Modelo (Grupo)", + "Hospital Hm Rosaleda - Hm La Esperanza", + "Hospital Virgen De La Luz", + "Hospital Recoletas Cuenca S.L.U.", + "Hospital Universitari De Girona Dr. Josep Trueta", + "Clínica Bofill", + "Clínica Girona", + "Clínica Quirúrgica Onyar", + "Clínica Salus Infirmorum", + "Hospital De Sant Jaume", + "Hospital De Campdevànol", + "Hospital De Figueres", + "Clínica Santa Creu", + "Hospital Sociosanitari De Lloret De Mar", + "Hospital D'Olot I Comarcal De La Garrotxa", + "Hospital De Palamós", + "Residència De Gent Gran Puig D'En Roca", + "Hospital Comarcal De Blanes", + "Residència Geriàtrica Maria Gay", + "Hospital Sociosanitari Mutuam Girona", + "Centre Sociosanitari De Puigcerdà", + "Centre Sociosanitari Bernat Jaume", + "Institut Català D'Oncologia Girona - Hospital Josep Trueta", + "Hospital Santa Caterina-Ias", + "Centre Palamós Gent Gran", + "Centre Sociosanitari Parc Hospitalari Martí I Julià", + "Hospital De Cerdanya / Hôpital De Cerdagne", + "Hospital General Del H.U. Virgen De Las Nieves", + "Hospital De Neurotraumatología Y Rehabilitación", + "Hospital De La Inmaculada Concepción", + "Hospital De Baza", + "Hospital Santa Ana", + "Hospital Universitario Virgen De Las Nieves", + "Hospital De Alta Resolución De Guadix", + "Hospital De Alta Resolución De Loja", + "Hospital Vithas La Salud", + "Hospital Universitario San Cecilio", + "Microbiología HUC San Cecilio", + "Hospital Materno-Infantil Virgen De Las Nieves", + "Hospital Universitario De Guadalajara", + "Clínica La Antigua", + "Clínica Dr. Sanz Vázquez", + "U.R.R. De Enfermos Psíquicos Alcohete", + "Instituto De Enfermedades Neurológicas De Castilla-La Mancha", + "Mutualia-Clinica Pakea", + "Hospital Ricardo Bermingham (Fundación Matia)", + "Policlínica Gipuzkoa S.A.", + "Hospital Quirón Salud Donostia", + "Fundación Onkologikoa Fundazioa", + "Organización Sanitaria Integrada Bidasoa (Osi Bidasoa)", + "Organización Sanitaria Integrada Alto Deba", + "Hospital Aita Menni", + "Hospital Psiquiátrico San Juan De Dios", + "Clinica Santa María De La Asunción, (Inviza, S.A.)", + "Sanatorio De Usurbil, S.L.", + "Hospital De Zumarraga", + "Hospital De Mendaro", + "Hospital Universitario Donostia-Donostia Unibertsitate Ospitalea", + "Hospital San Juan De Dios Donostia", + "Hospital Infanta Elena", + "Hospital Vázquez Díaz", + "Hospital Blanca Paloma", + "Clínica Los Naranjos", + "Hospital De Riotinto", + "Hospital Universitario Juan Ramón Jiménez", + "Hospital Juan Ramón Jiménez", + "Hospital Costa De La Luz", + "Hospital Virgen De La Bella", + "Hospital General San Jorge", + "Centro De Rehab. Psicosocial Santo Cristo De Los Milagros", + "Hospital Sagrado Corazón De Jesús", + "Hospital Viamed Santiago", + "Hospital De Barbastro", + "Hospital De Jaca.Salud", + "Centro Sanitario Bajo Cinca-Baix Cinca", + "Hospital General Del H.U. De Jaén", + "Hospital Doctor Sagaz", + "Hospital Neurotraumatológico Del H.U. De Jaén", + "Clínica Cristo Rey", + "Hospital San Agustín", + "Hospital San Juan De La Cruz", + "Hospital Universitario De Jaén", + "Hospital Alto Guadalquivir", + "Hospital Materno-Infantil Del H.U. De Jaén", + "Hospital De Alta Resolución Sierra De Segura", + "Hospital De Alta Resolución De Alcaudete", + "Hospital De Alta Resolución De Alcalá La Real", + "Hospital De León", + "Hospital Monte San Isidro", + "Regla Hm Hospitales", + "Hospital Hm San Francisco", + "Hospital Santa Isabel", + "Hospital El Bierzo", + "Hospital De La Reina", + "Hospital San Juan De Dios", + "Complejo Asistencial Universitario De León", + "Clínica Altollano", + "Clínica Ponferrada", + "Hospital Valle De Laciana", + "Hospital Universitari Arnau De Vilanova De Lleida", + "Hospital Santa Maria", + "Vithas Hospital Montserrat", + "Clínica Perpetuo Socorro De Lérida, Grupo Hla, Slu", + "Clínica Terres De Ponent", + "Clínica Psiquiàtrica Bellavista", + "Fundació Sant Hospital.", + "Centre Sanitari Del Solsonès, Fpc", + "Hospital Comarcal Del Pallars", + "Espitau Val D'Aran", + "Hestia Balaguer.", + "Residència Terraferma", + "Castell D'Oliana Residencial,S.L", + "Hospital Jaume Nadal Meroles", + "Sant Joan De Déu Terres De Lleida", + "Reeixir", + "Hospital Sant Joan De Déu Lleida", + "Complejo Hospitalario San Millan San Pedro De La Rioja", + "Hospital San Pedro", + "Hospital General De La Rioja", + "Policlínico Riojano Nuestra Señora De Valvanera, S.A.", + "Fundación Hospital Calahorra", + "Clínica Los Manzanos", + "Centro Asistencial De Albelda De Iregua", + "Centro Sociosanitario De Convalecencia Los Jazmines", + "Centro Sociosanitario De Convalecencia Nuestra Señora Virgen Del Carmen", + "Complexo Hospitalario Universitario De Lugo", + "Hospital De Calde (Psiquiatrico)", + "Hospital Polusa", + "Sanatorio Nosa Señora Dos Ollos Grandes", + "Hospital Publico Da Mariña", + "Hospital De Monforte", + "Hospital Universitario Lucus Augusti", + "Hospital Universitario La Paz", + "Hospital Ramón Y Cajal", + "Hospital Universitario 12 De Octubre", + "Hospital Clínico San Carlos", + "Hospital Virgen De La Torre", + "Hospital Universitario Santa Cristina", + "Hospital Universitario De La Princesa", + "Hospital Infantil Universitario Niño Jesus", + "Hospital Central De La Cruz Roja San José Y Santa Adela", + "Hospital Carlos Iii", + "Hospital Cantoblanco", + "Complejo Hospitalario Gregorio Marañón", + "Hospital General Universitario Gregorio Marañón", + "Instituto Provincial De Rehabilitación", + "Hospital Dr. R. Lafora", + "Sanatorio Nuestra Señora Del Rosario", + "Hospital De La V.O.T. De San Francisco De Asís", + "Hospital Quirónsalud San José", + "Hospital Beata María Ana. Hh. Hospitalarias Sgdo. C. De Jesús", + "Clínica Santa Elena", + "Hospital San Francisco De Asís", + "Clínica San Miguel", + "Clínica Nuestra Sra. De La Paz", + "Fundación Instituto San José", + "Hospital Universitario Fundación Jiménez Díaz", + "Hestia Madrid (Clínica Sear, S.A.)", + "Hospital Ruber Juan Bravo 39", + "Hospital Vithas Nuestra Señora De América", + "Hospital Virgen De La Paloma, S.A.", + "Clínica La Luz, S.L.", + "Fuensanta S.L. (Clínica Fuensanta)", + "Hospital Ruber Juan Bravo 49", + "Hospital Ruber Internacional", + "Clínica La Milagrosa", + "Hospital Universitario La Zarzuela", + "Hospital Universitario Hm Nuevo Belen", + "Sanatorio Neuropsiquiátrico Doctor León", + "Instituto De Investigaciones Neuropsiquiátricas Dr. López Ibor", + "Sanatorio Esquerdo, S.A.", + "Hospital Central De La Defensa Gomez Ulla", + "Hospital Universitario Príncipe De Asturias", + "Hospital De La Fuenfría", + "Hh. Hh. Sgdo. C. De Jesús. Complejo Asistencial Benito Menni", + "Centro San Juan De Dios", + "Hospital Monográfico Asepeyo De Traumat. Cirugía Y Rehabilitación", + "Hospital Guadarrama", + "Hospital Universitario Severo Ochoa", + "Instituto Psiquiátrico Servicios De Salud Mental José Germain-1 Luna", + "Fremap Hospital Y Centro De Rehabilitación De Majadahonda", + "Hospital Universitario De Móstoles", + "Hospital El Escorial", + "Hospital Virgen De La Poveda", + "Hospital De Madrid", + "Hospital Universitario De Getafe", + "Clínica Isadora", + "Hospital Universitario Moncloa", + "Hospital Universitario Fundación Alcorcón", + "Clinica Cemtro", + "Hospital Universitario Hm Montepríncipe", + "Centro Oncológico Md Anderson International España", + "Hospital Quironsalud Sur", + "Hospital Universitario De Fuenlabrada", + "Hospital Universitario Hm Torrelodones", + "Complejo Universitario La Paz", + "Hospital La Moraleja", + "Hospital Los Madroños", + "Hospital Quirónsalud Madrid", + "Hospital Centro De Cuidados Laguna", + "Hospital Universitario Madrid Sanchinarro", + "Hospital Universitario Infanta Elena", + "Vitas Nisa Pardo De Aravaca.", + "Hospital Universitario Infanta Sofía", + "Hospital Universitario Del Henares", + "Hospital Universitario Infanta Leonor", + "Hospital Universitario Del Sureste", + "Hospital Universitario Del Tajo", + "Hospital Universitario Infanta Cristina", + "Hospital Universitario Puerta De Hierro Majadahonda", + "Casta Guadarrama", + "Hospital Universitario De Torrejón", + "Hospital Rey Juan Carlos", + "Hospital General De Villalba", + "Hm Universitario Puerta Del Sur", + "Hm Valles", + "Hospital Casaverde De Madrid", + "Clínica Universidad De Navarra", + "Complejo Hospitalario Universitario Infanta Leonor", + "Clínica San Vicente", + "Instituto Psiquiátrico Servicios De Salud Mental José Germain", + "Instituto Psiquiátrico Servicios De Salud Mental José Germain-2 Aragón", + "Hospital General Del H.U.R. De Málaga", + "Hospital Virgen De La Victoria", + "Hospital Civil", + "Centro Asistencial San Juan De Dios", + "Centro Asistencial Hnas. Hosp. Del Sagrado Corazón De Jesús", + "Hospital Vithas Parque San Antonio", + "Hospital El Ángel", + "Hospital Doctor Gálvez", + "Clínica De La Encarnación", + "Hospital Psiquiátrico San Francisco De Asís", + "Clínica Nuestra Sra. Del Pilar", + "Hospital De Antequera", + "Hospital Quironsalud Marbella", + "Hospital De La Axarquía", + "Hospital Marítimo De Torremolinos", + "Hospital Universitario Regional De Málaga", + "Hospital Universitario Virgen De La Victoria", + "Hospital Materno-Infantil Del H.U.R. De Málaga", + "Hospital Costa Del Sol", + "Hospital F.A.C. Doctor Pascual", + "Clínica El Seranil", + "Hc Marbella International Hospital", + "Hospital Humanline Banús", + "Clínica Rincón", + "Hospiten Estepona", + "Fundación Cudeca. Centro De Cuidados Paliativos", + "Xanit Hospital Internacional", + "Comunidad Terapéutica San Antonio", + "Hospital De Alta Resolución De Benalmádena", + "Hospital Quironsalud Málaga", + "Cenyt Hospital", + "Clínica Ochoa", + "Centro De Reproducción Asistida De Marbella (Ceram)", + "Helicópteros Sanitarios Hospital", + "Hospital De La Serranía", + "Hospital Valle Del Guadalhorce De Cártama", + "Hospital Clínico Universitario Virgen De La Arrixaca", + "Hospital General Universitario Reina Sofía", + "Plataforma de Medicina Computacional, Fundación Progreso y Salud", + "Hospital Psiquiátrico Roman Alberca", + "Hospital Quirónsalud Murcia", + "Hospital La Vega", + "Hospital Mesa Del Castillo", + "Sanatorio Doctor Muñoz S.L.", + "Clínica Médico-Quirúrgica San José, S.A.", + "Hospital Comarcal Del Noroeste", + "Clínica Doctor Bernal S.L.", + "Hospital Santa María Del Rosell", + "Santo Y Real Hospital De Caridad", + "Hospital Nuestra Señora Del Perpetuo Socorro", + "Fundacion Hospital Real Piedad", + "Hospital Virgen Del Alcázar De Lorca", + "Hospital General Universitario Los Arcos Del Mar Menor", + "Hospital Virgen Del Castillo", + "Hospital Rafael Méndez", + "Hospital General Universitario J.M. Morales Meseguer", + "Hospital Ibermutuamur-Patología Laboral", + "Hospital De La Vega Lorenzo Guirao", + "Hospital De Molina", + "Clínica San Felipe Del Mediterráneo", + "Hospital De Cuidados Medios Villademar", + "Residencia Los Almendros", + "Complejo Hospitalario Universitario De Cartagena", + "Hospital General Universitario Santa Lucia", + "Consorcio LUCIA (SACYL,ITACYL UBU,UVa)", + "Hospital Perpetuo Socorro Alameda", + "Hospital C.M.V. Caridad Cartagena", + "Centro San Francisco Javier", + "Clinica Psiquiatrica Padre Menni", + "Clinica Universidad De Navarra", + "CATLAB", + "Clinica San Miguel", + "Clínica San Fermín", + "Centro Hospitalario Benito Menni", + "Hospital García Orcoyen", + "Hospital Reina Sofía", + "Clínica Psicogeriátrica Josefina Arregui", + "Complejo Hospitalario De Navarra", + "Complexo Hospitalario Universitario De Ourense", + "Hospital Universitario Cristal", + "Hospital Santo Cristo De Piñor (Psiquiatrico)", + "Hospital Santa Maria Nai", + "Centro Medico El Carmen", + "Hospital De Valdeorras", + "Hospital De Verin", + "Clinica Santa Teresa", + "Hospital Monte Naranco", + "Centro Médico De Asturias", + "Clínica Asturias", + "Clínica San Rafael", + "Hospital Universitario San Agustín", + "Fundación Hospital De Avilés", + "Hospital Carmen Y Severo Ochoa", + "Hospital Comarcal De Jarrio", + "Hospital De Cabueñes", + "Sanatorio Nuestra Señora De Covadonga", + "Fundación Hospital De Jove", + "Hospital Begoña De Gijón, S.L.", + "Hospital Valle Del Nalón", + "Fundació Fisabio", + "Fundación Sanatorio Adaro", + "Hospital V. Álvarez Buylla", + "Hospital Universitario Central De Asturias", + "Hospital Del Oriente De Asturias Francisco Grande Covián", + "Hospital De Luarca -Asistencia Médica Occidentalsl", + "Instituto Salud Mental Pérez-Espinosa Oria, S.L.", + "Clínica Psiquiátrica Somió", + "Clínica Cirugía Plástica Y Estética Fernández Y Fernández Cossío", + "Hospital Gijón", + "Centro Terapéutico Vista Alegre", + "Instituto Oftalmológico Fernández -Vega", + "Hospital Rio Carrión", + "Hospital San Telmo", + "Hospital Psiquiatrico San Luis", + "Área Psiquiátrica Del Centro Asistencial San Juan De Dios", + "Hospital Recoletas De Palencia", + "Complejo Asistencial Universitario De Palencia", + "Hospital Universitario Materno-Infantil De Canarias", + "Hospital Universitario Insular De Gran Canaria", + "Unidades Clínicas Y De Rehabilitación (Ucyr)", + "Sanatorio Dermatológico Regional", + "Fundación Benéfica Canaria Casa Asilo San José", + "Vithas Hospital Santa Catalina", + "Hospital Policlínico La Paloma, S.A.", + "Instituto Policlínico Cajal, S.L.", + "Hospital San Roque Las Palmas De Gran Canaria", + "Clínica Bandama", + "Hospital Doctor José Molina Orosa", + "Hospital Insular De Lanzarote", + "Hospital General De Fuerteventura", + "Quinta Médica De Reposo, S.A.", + "Hospital De San Roque Guía", + "Hospital Ciudad De Telde", + "Complejo Hospitalario Universitario Insular-Materno Infantil", + "Hospital Clínica Roca (Roca Gestión Hospitalaria)", + "Hospital Universitario De Gran Canaria Dr. Negrín", + "Hospiten Lanzarote (Clínicas Del Sur S.L.U.)", + "Complejo Hospitalario Universitario De Gran Canaria Dr. Negrín", + "Hospital San Roque Maspalomas", + "Clínica Parque Fuerteventura", + "Clinica Jorgani", + "Hospital Universitario Montecelo", + "Gerencia de Atención Primaria Pontevedra Sur", + "Hospital Provincial De Pontevedra", + "Hestia Santa Maria", + "Hospital Quironsalud Miguel Dominguez", + "Instituto De Neuro-Rehabilitacion Quironsalud Pontevedra", + "Hospital Meixoeiro", + "Hospital Nicolas Peña", + "Fremap, Hospital De Vigo", + "Hospital Povisa", + "Hospital Hm Vigo", + "Vithas Hospital Nosa Señora De Fatima", + "Concheiro Centro Medico Quirurgico", + "Centro Medico Pintado", + "Sanatorio Psiquiatrico San Jose", + "Clinica Residencia El Pinar", + "Complexo Hospitalario Universitario De Pontevedra", + "Hospital Do Salnes", + "Complexo Hospitalario Universitario De Vigo", + "Hospital Universitario Alvaro Cunqueiro", + "Plataforma de Genómica y Bioinformática", + "Complejo Asistencial Universitario De Salamanca", + "Hospital Universitario De Salamanca", + "Hospital General De La Santísima Trinidad", + "Hospital Los Montalvos", + "Complejo Hospitalario Universitario Ntra. Sra. De Candelaria", + "Hospital Universitario Nuestra Señora De Candelaria", + "Hospital De Ofra", + "Instituto Tecnológico y de Energías Renovables, S.A. (ITER, S.A.)", + "Unidades Clínicas Y De Rehabilitación De Salud Mental", + "Hospital Febles Campos", + "Hospital Quirón Tenerife", + "Vithas Hospital Santa Cruz", + "Clínica Parque, S.A.", + "Hospiten Sur", + "Hospital Universitario De Canarias (H.U.C)", + "Hospital De La Santísima Trinidad", + "Clínica Vida", + "Hospital Bellevue", + "Hospital Nuestra Señora De Guadalupe", + "Hospital Nuestra Señora De Los Dolores", + "Hospital Insular Ntra. Sra. De Los Reyes", + "Hospital Quirón Costa Adeje", + "Hospital Rambla S.L.", + "Hospital General De La Palma", + "Complejo Hospitalario Universitario De Canarias", + "Hospital Del Norte", + "Hospital Del Sur", + "Clínica Tara", + "Hospital Universitario Marqués De Valdecilla", + "Hospital Ramón Negrete", + "Hospital Santa Clotilde - Orden Hospitalaria San Juan De Dios.", + "Centro Hospitalario Padre Menni", + "Hospital Comarcal De Laredo", + "Hospital Sierrallana", + "Clínica Mompía, S.A.U.", + "Complejo Asistencial De Segovia", + "Hospital General De Segovia", + "Hospital Recoletas Segovia Ntra. Sra. De La Misericordia", + "Unidad De Rehabilitación Psiquiátrica Ntra. Sra. De La Fuencisla", + "Hospital General Del H.U. Virgen Del Rocío", + "Hospital Virgen De Valme", + "Hospital Virgen Macarena", + "Hospital San Lázaro", + "Hospital Victoria Eugenia De La Cruz Roja Española", + "Hospital San Juan De Dios De Sevilla", + "Hospital Duques Del Infantado", + "Clínica Santa Isabel", + "Hospital Quironsalud Sagrado Corazón", + "Hospital Fátima", + "Hospital Quironsalud Infanta Luisa", + "Clínica Nuestra Señora De Aránzazu", + "Residencia De Salud Mental Nuestra Señora Del Carmen", + "Hospital El Tomillar", + "Hospital De Alta Resolución De Morón De La Frontera", + "Hospital La Merced", + "Hospital Universitario Virgen Del Rocío", + "Microbiología. Hospital Universitario Virgen del Rocio", + "Hospital Universitario Virgen Macarena", + "Hospital Universitario Virgen De Valme", + "Fremap, Hospital Y Centro De Rehabilitación De Sevilla", + "Hospital Psiquiátrico Penitenciario", + "Hospital San Juan De Dios Del Aljarafe", + "Hospital Nisa Sevilla-Aljarafe", + "Hospital De Alta Resolución De Utrera", + "Hospital De Alta Resolución Sierra Norte", + "Hospital Viamed Santa Ángela De La Cruz", + "Hospital De Alta Resolución De Écija", + "Clínica De Salud Mental Miguel De Mañara", + "Hospital De Rehabilitación Y Traumatología Virgen Del Rocío", + "Hospital De Alta Resolución De Lebrija", + "Hospital Infantil", + "Hospital De La Mujer", + "Hospital Virgen Del Mirón", + "Complejo Asistencial De Soria", + "Hospital Universitari Joan Xxiii De Tarragona", + "Hospital Sociosanitari Francolí", + "Hospital De Sant Pau I Santa Tecla", + "Hospital Viamed Monegal", + "Clínica Activa Mútua 2008", + "Hospital Comarcal Móra D'Ebre", + "Hospital Universitari De Sant Joan De Reus", + "Centre Mq Reus", + "Villablanca Serveis Assistencials, Sa", + "Institut Pere Mata, S.A", + "Hospital De Tortosa Verge De La Cinta", + "Clínica Terres De L'Ebre", + "Policlínica Comarcal Del Vendrell.", + "Pius Hospital De Valls", + "Residència Alt Camp", + "Centre Sociosanitari Ciutat De Reus", + "Hospital Comarcal D'Amposta", + "Centre Sociosanitari Llevant", + "Residència Vila-Seca", + "Unitat Polivalent En Salut Mental D'Amposta", + "Hospital Del Vendrell", + "Centre Sociosanitari I Residència Assistida Salou", + "Residència Santa Tecla Ponent", + "Unitat De Referència De Psiquiatria I Trastorns De La Conducta Alimentària (Urpi)", + "Hospital Obispo Polanco", + "Centro De Rehabilitacion Psicosocial San Juan De Dios", + "Hospital De Alcañiz", + "Hospital Virgen De La Salud", + "Hospital Geriátrico Virgen Del Valle", + "Hospital Nacional De Parapléjicos", + "Hospital Provincial Nuestra Señora De La Misericordia", + "Hospital General Nuestra Señora Del Prado", + "Consejería de Sanidad", + "Clínica Marazuela, S.A.", + "Complejo Hospitalario De Toledo", + "Hospital Laboral Solimat Mutua Colaboradora Con La Ss Nº 72", + "Quirón Salud Toledo", + "Hospital Universitario Y Politécnico La Fe", + "Hospital Universitario Dr. Peset Aleixandre", + "Hospital Arnau De Vilanova", + "Hospital Clínico Universitario De Valencia", + "Hospital De La Malva-Rosa", + "Consorcio Hospital General Universitario De Valencia", + "Hospital Católico Casa De Salud", + "Hospital Nisa Valencia Al Mar", + "Fundación Instituto Valenciano De Oncología", + "Hospital Virgen Del Consuelo", + "Hospital Quirón Valencia", + "Hospital Psiquiátrico Provincial", + "Casa De Reposo San Onofre", + "Hospital Francesc De Borja De Gandia", + "Hospital Lluís Alcanyís De Xàtiva", + "Hospital General De Ontinyent", + "Hospital Intermutual De Levante", + "Hospital De Sagunto", + "Hospital Doctor Moliner", + "Hospital General De Requena", + "Hospital 9 De Octubre", + "Centro Médico Gandia", + "Hospital Nisa Aguas Vivas", + "Clinica Fontana", + "Hospital Universitario De La Ribera", + "Hospital Pare Jofré", + "Hospital De Manises", + "Hospital De Crónicos De Mislata (Antiguo Hospital Militar De Valencia)", + "Hospital De Llíria", + "Imed Valencia", + "Unidad De Desintoxicación Hospitalaria", + "Hospital Universitario Rio Hortega", + "Hospital Clínico Universitario De Valladolid", + "Sanatorio Sagrado Corazón", + "Hospital Medina Del Campo", + "Hospital De Valladolid Felipe Ii", + "Hospital Campo Grande", + "Hospital Santa Marina", + "Hospital Intermutual De Euskadi", + "Clínica Ercilla Mutualia", + "Hospital Cruz Roja De Bilbao", + "Sanatorio Bilbaíno", + "Hospital De Basurto", + "Imq Clínica Virgen Blanca", + "Clínica Guimon S.A.", + "Clínica Indautxu", + "Hospital Universitario De Cruces", + "Osi Barakaldo-Sestao", + "Hospital San Eloy", + "Red De Salud Mental De Bizkaia (Hospital De Bermeo)", + "Hospital Galdakao-Usansolo", + "Hospital Gorliz", + "Red De Salud Mental De Bizkaia (Hospital De Zaldibar)", + "Red De Salud Mental De Bizkaia (Hospital De Zamudio)", + "Avances Médicos S.A", + "Hospital Quironsalud Bizkaia", + "Clínica Imq Zorrotzaurre", + "Hospital Urduliz Ospitalea", + "Hospital Virgen De La Concha", + "Hospital Provincial De Zamora", + "Hospital De Benavente", + "Complejo Asistencial De Zamora", + "Hospital Recoletas De Zamora", + "Hospital Clínico Universitario Lozano Blesa", + "Hospital Universitario Miguel Servet", + "Hospital Royo Villanova", + "Centro de Investigación Biomédica de Aragón", + "Centro De Rehabilitacion Psicosocial Nuestra Señora Del Pilar", + "Hospital Nuestra Señora De Gracia", + "Hospital Maz", + "Clínica Montpelier Grupo Hla, S.A.U", + "Centro Neuropsiquiátrico Nuestra Señora Del Carmen", + "Hospital Quironsalud Zaragoza", + "Clínica Nuestra Señora Del Pilar", + "Hospital General De La Defensa De Zaragoza", + "Hospital Ernest Lluch Martin", + "Unidad De Rehabilitacion De Larga Estancia", + "Unidad Rehabilitadora De Media Estancia Profesor Rey Ardid", + "Hospital De Rehabilitacion Psiquiatrica Prisma", + "Centro Sanitario Cinco Villas", + "Hospital Viamed Montecanal", + "Hospital Universitario De Ceuta", + "Hospital Comarcal de Melilla", + "Presidencia del Gobierno", + "Ministerio Sanidad" + ] + }, + "sequencing_institution": { + "enum": [ + "Instituto de Salud Carlos III", + "Red De Salud Mental De Araba (Hospital Psiquiátrico De Araba)", + "Hospital San José", + "Hospital Quirónsalud Vitoria", + "Hospital De Cuidados San Onofre, S.L. (Hospital De Cuidados San Onofre)", + "Hospital De Leza", + "Hospital Universitario De Araba (Sede Txagorritxu Y Sede Santiago)", + "Complejo Hospitalario Universitario De Albacete", + "Hospital General Universitario De Albacete", + "Clínica Santa Cristina Albacete", + "Hospital De Hellín", + "Quironsalud Hospital Albacete", + "Hospital Universitario Nuestra Señora Del Perpetuo Socorro", + "Hospital General De Almansa", + "Hospital General De Villarobledo", + "Centro De Atención A La Salud Mental La Milagrosa", + "Hospital General Universitario De Alicante", + "Clínica Vistahermosa Grupo Hla", + "Vithas Hospital Perpetuo Internacional", + "Hospital Virgen De Los Lirios", + "Sanatorio San Jorge S.L.", + "Hospital Clínica Benidorm", + "Hospital San Carlos De Denia Grupo Hla", + "Hospital General Universitario De Elche", + "Hospital General Universitario De Elda-Virgen De La Salud", + "Hospital Sant Vicent Del Raspeig", + "Sanatorio San Francisco De Borja Fontilles", + "Hospital Marina Baixa De La Vila Joiosa", + "Hospital Vega Baja De Orihuela", + "Hospital Internacional Medimar, S.A.", + "Hospital Psiquiátrico Penitenciario De Fontcalent", + "Hospital Universitario San Juan De Alicante", + "Centro Médico Acuario", + "Hospìtal Quironsalud Torrevieja", + "Hospital Imed Levante", + "Hospital Universitario De Torrevieja", + "Hospital De Denia", + "Hospital La Pedrera", + "Centro De Rehabilitación Neurológica Casaverde", + "Centro Militar de Veterinaria de la Defensa", + "Gerencia de Salud de Area de Soria", + "Hospital Universitario Vinalopo", + "Hospital Imed Elche", + "Hospital Torrecárdenas", + "Hospital De La Cruz Roja", + "Hospital Virgen Del Mar", + "Hospital La Inmaculada", + "Hospital Universitario Torrecárdenas", + "Hospital Mediterráneo", + "Hospital De Poniente", + "Hospital De Alta Resolución El Toyo", + "Hospital Nuestra Señora De Sonsoles", + "Hospital Provincial De Ávila", + "Clínica Santa Teresa", + "Complejo Asistencial De Avila", + "Hospital De Salud Mental Casta Salud Arévalo", + "Complejo Hospitalario Universitario De Badajoz", + "Hospital Universitario De Badajoz", + "Hospital Materno Infantil", + "Hospital Fundación San Juan De Dios De Extremadura", + "Hospital Don Benito-Villanueva De La Serena", + "Hospital General De Llerena", + "Hospital De Mérida", + "Centro Sociosanitario De Mérida", + "Hospital Quirónsalud Santa Justa", + "Hospital Quironsalud Clideba", + "Hospital Parque Via De La Plata", + "Hospital De Zafra", + "Complejo Hospitalario Llerena-Zafra", + "Hospital Perpetuo Socorro", + "Hospital Siberia-Serena", + "Hospital Tierra De Barros", + "Complejo H. Don Benito-Vva De La Serena", + "Complejo Hospitalario Del Área De Salud De Mérida", + "Casaverde. Centro De Rehabilitación Neurológico De Extremadura", + "Clínica Extremeña De Salud", + "Hospital Parque Vegas Altas", + "Hospital General De Mallorca", + "Hospital Psiquiàtric", + "Clínica Mutua Balear", + "Hospital De La Cruz Roja Española", + "Hospital Sant Joan De Deu", + "Clínica Rotger", + "Clinica Juaneda", + "Policlínica Miramar", + "Hospital Joan March", + "Hospital Can Misses", + "Hospital Residencia Asistida Cas Serres", + "Policlínica Nuestra Señora Del Rosario, S.A.", + "Clínica Juaneda Menorca", + "Hospital General De Muro", + "Clinica Juaneda Mahon", + "Hospital Manacor", + "Hospital Son Llatzer", + "Hospital Quirónsalud Palmaplanas", + "Hospital De Formentera", + "Hospital Comarcal D'Inca", + "Hospital Mateu Orfila", + "Hospital Universitari Son Espases", + "Servicio de Microbiologia HU Son Espases", + "Hospital De Llevant", + "Hospital Clinic Balear", + "Clínica Luz De Palma", + "Hospital Clínic De Barcelona, Seu Sabino De Arana", + "Hospital Del Mar", + "Hospital De L'Esperança", + "Hospital Clínic De Barcelona", + "Hospital Fremap Barcelona", + "Centre De Prevenció I Rehabilitació Asepeyo", + "Clínica Mc Copèrnic", + "Clínica Mc Londres", + "Hospital Egarsat Sant Honorat", + "Hospital Dos De Maig", + "Hospital El Pilar", + "Hospital Sant Rafael", + "Clínica Nostra Senyora Del Remei", + "Clínica Sagrada Família", + "Hospital Mare De Déu De La Mercè", + "Clínica Solarium", + "Hospital De La Santa Creu I Sant Pau", + "Nou Hospital Evangèlic", + "Hospital De Nens De Barcelona", + "Institut Guttmann", + "Fundació Puigvert - Iuna", + "Hestia Palau.", + "Hospital Universitari Sagrat Cor", + "Clínica Corachan", + "Clínica Tres Torres", + "Hospital Quirónsalud Barcelona", + "Centre Mèdic Delfos", + "Centre Mèdic Sant Jordi De Sant Andreu", + "Hospital Plató", + "Hospital Universitari Quirón Dexeus", + "Centro Médico Teknon, Grupo Quironsalud", + "Hospital De Barcelona", + "Centre Hospitalari Policlínica Barcelona", + "Centre D'Oftalmologia Barraquer", + "Hestia Duran I Reynals", + "Serveis Clínics, S.A.", + "Clínica Coroleu - Ssr Hestia.", + "Clínica Planas", + "Hospital Universitari Germans Trias I Pujol De Badalona", + "Hospital Municipal De Badalona", + "Centre Sociosanitari El Carme", + "Hospital Comarcal De Sant Bernabé", + "Hospital Comarcal Sant Jaume De Calella", + "Hospital De Sant Joan De Déu.", + "Clínica Nostra Senyora De Guadalupe", + "Hospital General De Granollers.", + "Hospital Universitari De Bellvitge", + "Hospital General De L'Hospitalet", + "Lab Clínic ICS Camp de Tarragona-Terres de l'Ebre. Hospital Joan XXIII", + "LABORATORI DE REFERENCIA DE CATALUNYA", + "Banc de Sang i Teixits Catalunya", + "Laboratorio Echevarne, SA Sant Cugat del Vallès", + "Fundació Sanitària Sant Josep", + "Hospital De Sant Jaume", + "Clínica Sant Josep", + "Centre Hospitalari.", + "Fundació Althaia-Manresa", + "Hospital De Sant Joan De Déu (Manresa)", + "Hospital De Sant Andreu", + "Germanes Hospitalàries. Hospital Sagrat Cor", + "Fundació Hospital Sant Joan De Déu", + "Centre Mèdic Molins, Sl", + "Hospital De Mollet", + "Hospital De Sabadell", + "Benito Menni,Complex Assistencial En Salut Mental.", + "Parc Sanitari Sant Joan De Déu - Recinte Sant Boi.", + "Parc Sanitari Sant Joan De Déu - Hospital General", + "Hospital De Sant Celoni.", + "Hospital Universitari General De Catalunya", + "Casal De Curació", + "Hospital Residència Sant Camil - Consorci Sanitari Del Garraf.", + "Centres Assistencials Dr. Emili Mira I López (Recinte Torribera).", + "Fundació Hospital De L'Esperit Sant", + "Hospital De Terrassa.", + "Hospital De Sant Llàtzer", + "Hospital Universitari Mútua De Terrassa", + "Hospital Universitari De Vic", + "Hospital De La Santa Creu", + "Hospital De Viladecans", + "Hospital Sant Antoni Abat - Consorci Sanitari Del Garraf.", + "Centre Sociosanitari Can Torras", + "Hestia Maresme", + "Prytanis Sant Boi Centre Sociosanitari", + "Centre Sociosanitari Verge Del Puig", + "Residència L'Estada", + "Residència Puig-Reig", + "Residència Santa Susanna", + "Hospital De Mataró", + "Hospital Universitari Vall D'Hebron", + "Centre Polivalent Can Fosc", + "Hospital Sociosanitari Mutuam Güell", + "Mútua De Granollers, Mútua De Previsió Social A Prima Fixa", + "Hospital Comarcal De L'Alt Penedès.", + "Àptima Centre Clínic - Mútua De Terrassa", + "Institut Català D'Oncologia - Hospital Duran I Reynals", + "Sar Mont Martí", + "Regina Sar", + "Centre Vallparadís", + "Ita Maresme", + "Clínica Llúria", + "Antic Hospital De Sant Jaume I Santa Magdalena", + "Parc Sanitari Sant Joan De Déu - Numància", + "Prytanis Hospitalet Centre Sociosanitari", + "Comunitat Terapèutica Arenys De Munt", + "Hospital Sociosanitari Pere Virgili", + "Benito Menni Complex Assistencial En Salut Mental", + "Hospital Sanitas Cima", + "Parc Sanitari Sant Joan De Deu - Brians 1.", + "Institut Català D'Oncologia - Hospital Germans Trias I Pujol", + "CAP La Salut EAP Badalona", + "CAP Mataró-6 (Gatassa)", + "CAP Can Mariner Santa Coloma-1", + "CAP Montmeló (Montornès)", + "Centre Collserola Mutual", + "Centre Sociosanitari Sarquavitae Sant Jordi", + "Hospital General Penitenciari", + "Centre Sociosanitari De L'Hospitalet - Consorci Sanitari Integral", + "Sar La Salut Josep Servat", + "Clínica Creu Blanca", + "Hestia Gràcia", + "Centre Sociosanitari D'Esplugues", + "Centre Sociosanitari Ricard Fortuny", + "Centre Residencial Amma Diagonal", + "Centre Fòrum", + "Centre Sociosanitari Blauclínic Dolors Aleu", + "Parc Sanitari Sant Joan De Déu - Til·Lers", + "Clínica Galatea", + "Hospital D'Igualada", + "Centre Social I Sanitari Frederica Montseny", + "Parc Sanitari Sant Joan De Deu-Serveis Sanitaris Centre Penitenciari Brians-2", + "Centre Integral De Serveis En Salut Mental Comunitària", + "Centre Sociosanitari Sant Jordi De La Vall D'Hebron", + "Lepant Residencial Qgg, Sl", + "Mapfre Quavitae Barcelona", + "Unitat Polivalent Salut Mental Barcelona-Nord", + "Cqm Clínic Maresme, Sl", + "Serveis Sanitaris La Roca Del Valles 2", + "Clínica Del Vallès", + "Centre Gerontològic Amma Sant Cugat", + "Serveis Sanitaris Sant Joan De Vilatorrada", + "Centre Sociosanitari Stauros", + "Hospital De Sant Joan Despí Moisès Broggi", + "Amma Horta", + "Unitat Polivalent Benito Menni En Salut Mental De L'Hospitalet-El Prat De Llobregat", + "Centre Sociosanitari Del Centre Integral De Salut Cotxeres", + "Clínica Sant Antoni", + "Clínica Diagonal", + "Hospital Sociosanitari De Mollet", + "Centre Sociosanitari Isabel Roig", + "Iván Mañero Clínic", + "Institut Trastorn Límit", + "Centre D'Hospitalització I Hospital De Dia Trastorns De La Conducta", + "Sarquavitae Bonanova", + "Centre La Creueta", + "Unitat Terapèutica-Educativa Acompanya'M", + "Hospital Fuente Bermeja", + "Hospital Recoletas De Burgos", + "Hospital San Juan De Dios De Burgos", + "Hospital Santos Reyes", + "Hospital Residencia Asistida De La Luz", + "Hospital Santiago Apóstol", + "Complejo Asistencial Universitario De Burgos", + "Hospital Universitario De Burgos", + "Hospital San Pedro De Alcántara", + "Hospital Provincial Nuestra Señora De La Montaña", + "Hospital Ciudad De Coria", + "Hospital Campo Arañuelo", + "Hospital Virgen Del Puerto", + "Hospital Sociosanitario De Plasencia", + "Complejo Hospitalario De Cáceres", + "Hospital Quirón Salud De Cáceres", + "Clínica Soquimex", + "Clinica Quirúrgica Cacereña, S.A-(Clínica San Francisco)", + "Hospital Universitario Puerta Del Mar", + "Clínica La Salud", + "Hospital San Rafael", + "Hospital Punta De Europa", + "Clínica Los Álamos", + "Hospital Universitario De Jerez De La Frontera", + "Hospital San Juan Grande", + "Hospital De La Línea De La Concepción", + "Hospital General Santa María Del Puerto", + "Hospital Universitario De Puerto Real", + "Hospital Virgen De Las Montañas", + "Hospital Virgen Del Camino", + "Hospital Jerez Puerta Del Sur", + "Hospital Viamed Bahía De Cádiz", + "Hospital Punta De Europa", + "Hospital Viamed Novo Sancti Petri", + "Clínica Serman - Instituto Médico", + "Hospital Quirón Campo De Gibraltar", + "Hospital Punta Europa. Unidad De Cuidados Medios", + "Hospital San Carlos", + "Hospital De La Línea De La Concepción", + "Hospital General Universitario De Castellón", + "Hospital La Magdalena", + "Consorcio Hospitalario Provincial De Castellón", + "Hospital Comarcal De Vinaròs", + "Hospital Universitario De La Plana", + "Instituto De Traumatologia De Unión De Mutuas (Matepss Nº 267)", + "Hospital Rey D. Jaime", + "Servicios Sanitarios Del Centro Penitenciario De Castellón Ii (Albocàsser)", + "Servicios Sanitarios Y Asistenciales", + "Hospital Quirónsalud Ciudad Real", + "Hospital General La Mancha Centro", + "Hospital Virgen De Altagracia", + "Hospital Santa Bárbara", + "Hospital General De Valdepeñas", + "Hospital General De Ciudad Real", + "Hospital General De Tomelloso", + "Hospital Universitario Reina Sofía", + "Hospital Los Morales", + "Hospital Materno-Infantil Del H.U. Reina Sofía", + "Hospital Provincial", + "Hospital De La Cruz Roja De Córdoba", + "Hospital San Juan De Dios De Córdoba", + "Hospital Infanta Margarita", + "Hospital Valle De Los Pedroches", + "Hospital De Montilla", + "Hospital La Arruzafa-Instituto De Oftalmología", + "Hospital De Alta Resolución De Puente Genil", + "Hospital De Alta Resolución Valle Del Guadiato", + "Hospital General Del H.U. Reina Sofía", + "Hospital Quironsalud Córdoba", + "Complexo Hospitalario Universitario A Coruña", + "Hospital Universitario A Coruña", + "Hospital Teresa Herrera (Materno-Infantil)", + "Hospital Maritimo De Oza", + "Centro Oncoloxico De Galicia", + "Hospital Quironsalud A Coruña", + "Hospital Hm Modelo", + "Maternidad Hm Belen", + "Hospital Abente Y Lago", + "Complexo Hospitalario Universitario De Ferrol", + "Hospital Universitario Arquitecto Marcide", + "Hospital Juan Cardona", + "Hospital Naval", + "Complexo Hospitalario Universitario De Santiago", + "Hospital Clinico Universitario De Santiago", + "Hospital Gil Casares", + "Hospital Medico Cirurxico De Conxo", + "Hospital Psiquiatrico De Conxo", + "Hospital Hm Esperanza", + "Hospital Hm Rosaleda", + "Sanatorio La Robleda", + "Hospital Da Barbanza", + "Hospital Virxe Da Xunqueira", + "Hm Modelo (Grupo)", + "Hospital Hm Rosaleda - Hm La Esperanza", + "Hospital Virgen De La Luz", + "Hospital Recoletas Cuenca S.L.U.", + "Hospital Universitari De Girona Dr. Josep Trueta", + "Clínica Bofill", + "Clínica Girona", + "Clínica Quirúrgica Onyar", + "Clínica Salus Infirmorum", + "Hospital De Sant Jaume", + "Hospital De Campdevànol", + "Hospital De Figueres", + "Clínica Santa Creu", + "Hospital Sociosanitari De Lloret De Mar", + "Hospital D'Olot I Comarcal De La Garrotxa", + "Hospital De Palamós", + "Residència De Gent Gran Puig D'En Roca", + "Hospital Comarcal De Blanes", + "Residència Geriàtrica Maria Gay", + "Hospital Sociosanitari Mutuam Girona", + "Centre Sociosanitari De Puigcerdà", + "Centre Sociosanitari Bernat Jaume", + "Institut Català D'Oncologia Girona - Hospital Josep Trueta", + "Hospital Santa Caterina-Ias", + "Centre Palamós Gent Gran", + "Centre Sociosanitari Parc Hospitalari Martí I Julià", + "Hospital De Cerdanya / Hôpital De Cerdagne", + "Hospital General Del H.U. Virgen De Las Nieves", + "Hospital De Neurotraumatología Y Rehabilitación", + "Hospital De La Inmaculada Concepción", + "Hospital De Baza", + "Hospital Santa Ana", + "Hospital Universitario Virgen De Las Nieves", + "Hospital De Alta Resolución De Guadix", + "Hospital De Alta Resolución De Loja", + "Hospital Vithas La Salud", + "Hospital Universitario San Cecilio", + "Microbiología HUC San Cecilio", + "Hospital Materno-Infantil Virgen De Las Nieves", + "Hospital Universitario De Guadalajara", + "Clínica La Antigua", + "Clínica Dr. Sanz Vázquez", + "U.R.R. De Enfermos Psíquicos Alcohete", + "Instituto De Enfermedades Neurológicas De Castilla-La Mancha", + "Mutualia-Clinica Pakea", + "Hospital Ricardo Bermingham (Fundación Matia)", + "Policlínica Gipuzkoa S.A.", + "Hospital Quirón Salud Donostia", + "Fundación Onkologikoa Fundazioa", + "Organización Sanitaria Integrada Bidasoa (Osi Bidasoa)", + "Organización Sanitaria Integrada Alto Deba", + "Hospital Aita Menni", + "Hospital Psiquiátrico San Juan De Dios", + "Clinica Santa María De La Asunción, (Inviza, S.A.)", + "Sanatorio De Usurbil, S.L.", + "Hospital De Zumarraga", + "Hospital De Mendaro", + "Hospital Universitario Donostia-Donostia Unibertsitate Ospitalea", + "Hospital San Juan De Dios Donostia", + "Hospital Infanta Elena", + "Hospital Vázquez Díaz", + "Hospital Blanca Paloma", + "Clínica Los Naranjos", + "Hospital De Riotinto", + "Hospital Universitario Juan Ramón Jiménez", + "Hospital Juan Ramón Jiménez", + "Hospital Costa De La Luz", + "Hospital Virgen De La Bella", + "Hospital General San Jorge", + "Centro De Rehab. Psicosocial Santo Cristo De Los Milagros", + "Hospital Sagrado Corazón De Jesús", + "Hospital Viamed Santiago", + "Hospital De Barbastro", + "Hospital De Jaca.Salud", + "Centro Sanitario Bajo Cinca-Baix Cinca", + "Hospital General Del H.U. De Jaén", + "Hospital Doctor Sagaz", + "Hospital Neurotraumatológico Del H.U. De Jaén", + "Clínica Cristo Rey", + "Hospital San Agustín", + "Hospital San Juan De La Cruz", + "Hospital Universitario De Jaén", + "Hospital Alto Guadalquivir", + "Hospital Materno-Infantil Del H.U. De Jaén", + "Hospital De Alta Resolución Sierra De Segura", + "Hospital De Alta Resolución De Alcaudete", + "Hospital De Alta Resolución De Alcalá La Real", + "Hospital De León", + "Hospital Monte San Isidro", + "Regla Hm Hospitales", + "Hospital Hm San Francisco", + "Hospital Santa Isabel", + "Hospital El Bierzo", + "Hospital De La Reina", + "Hospital San Juan De Dios", + "Complejo Asistencial Universitario De León", + "Clínica Altollano", + "Clínica Ponferrada", + "Hospital Valle De Laciana", + "Hospital Universitari Arnau De Vilanova De Lleida", + "Hospital Santa Maria", + "Vithas Hospital Montserrat", + "Clínica Perpetuo Socorro De Lérida, Grupo Hla, Slu", + "Clínica Terres De Ponent", + "Clínica Psiquiàtrica Bellavista", + "Fundació Sant Hospital.", + "Centre Sanitari Del Solsonès, Fpc", + "Hospital Comarcal Del Pallars", + "Espitau Val D'Aran", + "Hestia Balaguer.", + "Residència Terraferma", + "Castell D'Oliana Residencial,S.L", + "Hospital Jaume Nadal Meroles", + "Sant Joan De Déu Terres De Lleida", + "Reeixir", + "Hospital Sant Joan De Déu Lleida", + "Complejo Hospitalario San Millan San Pedro De La Rioja", + "Hospital San Pedro", + "Hospital General De La Rioja", + "Policlínico Riojano Nuestra Señora De Valvanera, S.A.", + "Fundación Hospital Calahorra", + "Clínica Los Manzanos", + "Centro Asistencial De Albelda De Iregua", + "Centro Sociosanitario De Convalecencia Los Jazmines", + "Centro Sociosanitario De Convalecencia Nuestra Señora Virgen Del Carmen", + "Complexo Hospitalario Universitario De Lugo", + "Hospital De Calde (Psiquiatrico)", + "Hospital Polusa", + "Sanatorio Nosa Señora Dos Ollos Grandes", + "Hospital Publico Da Mariña", + "Hospital De Monforte", + "Hospital Universitario Lucus Augusti", + "Hospital Universitario La Paz", + "Hospital Ramón Y Cajal", + "Hospital Universitario 12 De Octubre", + "Hospital Clínico San Carlos", + "Hospital Virgen De La Torre", + "Hospital Universitario Santa Cristina", + "Hospital Universitario De La Princesa", + "Hospital Infantil Universitario Niño Jesus", + "Hospital Central De La Cruz Roja San José Y Santa Adela", + "Hospital Carlos Iii", + "Hospital Cantoblanco", + "Complejo Hospitalario Gregorio Marañón", + "Hospital General Universitario Gregorio Marañón", + "Instituto Provincial De Rehabilitación", + "Hospital Dr. R. Lafora", + "Sanatorio Nuestra Señora Del Rosario", + "Hospital De La V.O.T. De San Francisco De Asís", + "Hospital Quirónsalud San José", + "Hospital Beata María Ana. Hh. Hospitalarias Sgdo. C. De Jesús", + "Clínica Santa Elena", + "Hospital San Francisco De Asís", + "Clínica San Miguel", + "Clínica Nuestra Sra. De La Paz", + "Fundación Instituto San José", + "Hospital Universitario Fundación Jiménez Díaz", + "Hestia Madrid (Clínica Sear, S.A.)", + "Hospital Ruber Juan Bravo 39", + "Hospital Vithas Nuestra Señora De América", + "Hospital Virgen De La Paloma, S.A.", + "Clínica La Luz, S.L.", + "Fuensanta S.L. (Clínica Fuensanta)", + "Hospital Ruber Juan Bravo 49", + "Hospital Ruber Internacional", + "Clínica La Milagrosa", + "Hospital Universitario La Zarzuela", + "Hospital Universitario Hm Nuevo Belen", + "Sanatorio Neuropsiquiátrico Doctor León", + "Instituto De Investigaciones Neuropsiquiátricas Dr. López Ibor", + "Sanatorio Esquerdo, S.A.", + "Hospital Central De La Defensa Gomez Ulla", + "Hospital Universitario Príncipe De Asturias", + "Hospital De La Fuenfría", + "Hh. Hh. Sgdo. C. De Jesús. Complejo Asistencial Benito Menni", + "Centro San Juan De Dios", + "Hospital Monográfico Asepeyo De Traumat. Cirugía Y Rehabilitación", + "Hospital Guadarrama", + "Hospital Universitario Severo Ochoa", + "Instituto Psiquiátrico Servicios De Salud Mental José Germain-1 Luna", + "Fremap Hospital Y Centro De Rehabilitación De Majadahonda", + "Hospital Universitario De Móstoles", + "Hospital El Escorial", + "Hospital Virgen De La Poveda", + "Hospital De Madrid", + "Hospital Universitario De Getafe", + "Clínica Isadora", + "Hospital Universitario Moncloa", + "Hospital Universitario Fundación Alcorcón", + "Clinica Cemtro", + "Hospital Universitario Hm Montepríncipe", + "Centro Oncológico Md Anderson International España", + "Hospital Quironsalud Sur", + "Hospital Universitario De Fuenlabrada", + "Hospital Universitario Hm Torrelodones", + "Complejo Universitario La Paz", + "Hospital La Moraleja", + "Hospital Los Madroños", + "Hospital Quirónsalud Madrid", + "Hospital Centro De Cuidados Laguna", + "Hospital Universitario Madrid Sanchinarro", + "Hospital Universitario Infanta Elena", + "Vitas Nisa Pardo De Aravaca.", + "Hospital Universitario Infanta Sofía", + "Hospital Universitario Del Henares", + "Hospital Universitario Infanta Leonor", + "Hospital Universitario Del Sureste", + "Hospital Universitario Del Tajo", + "Hospital Universitario Infanta Cristina", + "Hospital Universitario Puerta De Hierro Majadahonda", + "Casta Guadarrama", + "Hospital Universitario De Torrejón", + "Hospital Rey Juan Carlos", + "Hospital General De Villalba", + "Hm Universitario Puerta Del Sur", + "Hm Valles", + "Hospital Casaverde De Madrid", + "Clínica Universidad De Navarra", + "Complejo Hospitalario Universitario Infanta Leonor", + "Clínica San Vicente", + "Instituto Psiquiátrico Servicios De Salud Mental José Germain", + "Instituto Psiquiátrico Servicios De Salud Mental José Germain-2 Aragón", + "Hospital General Del H.U.R. De Málaga", + "Hospital Virgen De La Victoria", + "Hospital Civil", + "Centro Asistencial San Juan De Dios", + "Centro Asistencial Hnas. Hosp. Del Sagrado Corazón De Jesús", + "Hospital Vithas Parque San Antonio", + "Hospital El Ángel", + "Hospital Doctor Gálvez", + "Clínica De La Encarnación", + "Hospital Psiquiátrico San Francisco De Asís", + "Clínica Nuestra Sra. Del Pilar", + "Hospital De Antequera", + "Hospital Quironsalud Marbella", + "Hospital De La Axarquía", + "Hospital Marítimo De Torremolinos", + "Hospital Universitario Regional De Málaga", + "Hospital Universitario Virgen De La Victoria", + "Hospital Materno-Infantil Del H.U.R. De Málaga", + "Hospital Costa Del Sol", + "Hospital F.A.C. Doctor Pascual", + "Clínica El Seranil", + "Hc Marbella International Hospital", + "Hospital Humanline Banús", + "Clínica Rincón", + "Hospiten Estepona", + "Fundación Cudeca. Centro De Cuidados Paliativos", + "Xanit Hospital Internacional", + "Comunidad Terapéutica San Antonio", + "Hospital De Alta Resolución De Benalmádena", + "Hospital Quironsalud Málaga", + "Cenyt Hospital", + "Clínica Ochoa", + "Centro De Reproducción Asistida De Marbella (Ceram)", + "Helicópteros Sanitarios Hospital", + "Hospital De La Serranía", + "Hospital Valle Del Guadalhorce De Cártama", + "Hospital Clínico Universitario Virgen De La Arrixaca", + "Hospital General Universitario Reina Sofía", + "Plataforma de Medicina Computacional, Fundación Progreso y Salud", + "Hospital Psiquiátrico Roman Alberca", + "Hospital Quirónsalud Murcia", + "Hospital La Vega", + "Hospital Mesa Del Castillo", + "Sanatorio Doctor Muñoz S.L.", + "Clínica Médico-Quirúrgica San José, S.A.", + "Hospital Comarcal Del Noroeste", + "Clínica Doctor Bernal S.L.", + "Hospital Santa María Del Rosell", + "Santo Y Real Hospital De Caridad", + "Hospital Nuestra Señora Del Perpetuo Socorro", + "Fundacion Hospital Real Piedad", + "Hospital Virgen Del Alcázar De Lorca", + "Hospital General Universitario Los Arcos Del Mar Menor", + "Hospital Virgen Del Castillo", + "Hospital Rafael Méndez", + "Hospital General Universitario J.M. Morales Meseguer", + "Hospital Ibermutuamur-Patología Laboral", + "Hospital De La Vega Lorenzo Guirao", + "Hospital De Molina", + "Clínica San Felipe Del Mediterráneo", + "Hospital De Cuidados Medios Villademar", + "Residencia Los Almendros", + "Complejo Hospitalario Universitario De Cartagena", + "Hospital General Universitario Santa Lucia", + "Consorcio LUCIA (SACYL,ITACYL UBU,UVa)", + "Hospital Perpetuo Socorro Alameda", + "Hospital C.M.V. Caridad Cartagena", + "Centro San Francisco Javier", + "Clinica Psiquiatrica Padre Menni", + "Clinica Universidad De Navarra", + "CATLAB", + "Clinica San Miguel", + "Clínica San Fermín", + "Centro Hospitalario Benito Menni", + "Hospital García Orcoyen", + "Hospital Reina Sofía", + "Clínica Psicogeriátrica Josefina Arregui", + "Complejo Hospitalario De Navarra", + "Complexo Hospitalario Universitario De Ourense", + "Hospital Universitario Cristal", + "Hospital Santo Cristo De Piñor (Psiquiatrico)", + "Hospital Santa Maria Nai", + "Centro Medico El Carmen", + "Hospital De Valdeorras", + "Hospital De Verin", + "Clinica Santa Teresa", + "Hospital Monte Naranco", + "Centro Médico De Asturias", + "Clínica Asturias", + "Clínica San Rafael", + "Hospital Universitario San Agustín", + "Fundación Hospital De Avilés", + "Hospital Carmen Y Severo Ochoa", + "Hospital Comarcal De Jarrio", + "Hospital De Cabueñes", + "Sanatorio Nuestra Señora De Covadonga", + "Fundación Hospital De Jove", + "Hospital Begoña De Gijón, S.L.", + "Hospital Valle Del Nalón", + "Fundació Fisabio", + "Fundación Sanatorio Adaro", + "Hospital V. Álvarez Buylla", + "Hospital Universitario Central De Asturias", + "Hospital Del Oriente De Asturias Francisco Grande Covián", + "Hospital De Luarca -Asistencia Médica Occidentalsl", + "Instituto Salud Mental Pérez-Espinosa Oria, S.L.", + "Clínica Psiquiátrica Somió", + "Clínica Cirugía Plástica Y Estética Fernández Y Fernández Cossío", + "Hospital Gijón", + "Centro Terapéutico Vista Alegre", + "Instituto Oftalmológico Fernández -Vega", + "Hospital Rio Carrión", + "Hospital San Telmo", + "Hospital Psiquiatrico San Luis", + "Área Psiquiátrica Del Centro Asistencial San Juan De Dios", + "Hospital Recoletas De Palencia", + "Complejo Asistencial Universitario De Palencia", + "Hospital Universitario Materno-Infantil De Canarias", + "Hospital Universitario Insular De Gran Canaria", + "Unidades Clínicas Y De Rehabilitación (Ucyr)", + "Sanatorio Dermatológico Regional", + "Fundación Benéfica Canaria Casa Asilo San José", + "Vithas Hospital Santa Catalina", + "Hospital Policlínico La Paloma, S.A.", + "Instituto Policlínico Cajal, S.L.", + "Hospital San Roque Las Palmas De Gran Canaria", + "Clínica Bandama", + "Hospital Doctor José Molina Orosa", + "Hospital Insular De Lanzarote", + "Hospital General De Fuerteventura", + "Quinta Médica De Reposo, S.A.", + "Hospital De San Roque Guía", + "Hospital Ciudad De Telde", + "Complejo Hospitalario Universitario Insular-Materno Infantil", + "Hospital Clínica Roca (Roca Gestión Hospitalaria)", + "Hospital Universitario De Gran Canaria Dr. Negrín", + "Hospiten Lanzarote (Clínicas Del Sur S.L.U.)", + "Complejo Hospitalario Universitario De Gran Canaria Dr. Negrín", + "Hospital San Roque Maspalomas", + "Clínica Parque Fuerteventura", + "Clinica Jorgani", + "Hospital Universitario Montecelo", + "Gerencia de Atención Primaria Pontevedra Sur", + "Hospital Provincial De Pontevedra", + "Hestia Santa Maria", + "Hospital Quironsalud Miguel Dominguez", + "Instituto De Neuro-Rehabilitacion Quironsalud Pontevedra", + "Hospital Meixoeiro", + "Hospital Nicolas Peña", + "Fremap, Hospital De Vigo", + "Hospital Povisa", + "Hospital Hm Vigo", + "Vithas Hospital Nosa Señora De Fatima", + "Concheiro Centro Medico Quirurgico", + "Centro Medico Pintado", + "Sanatorio Psiquiatrico San Jose", + "Clinica Residencia El Pinar", + "Complexo Hospitalario Universitario De Pontevedra", + "Hospital Do Salnes", + "Complexo Hospitalario Universitario De Vigo", + "Hospital Universitario Alvaro Cunqueiro", + "Plataforma de Genómica y Bioinformática", + "Complejo Asistencial Universitario De Salamanca", + "Hospital Universitario De Salamanca", + "Hospital General De La Santísima Trinidad", + "Hospital Los Montalvos", + "Complejo Hospitalario Universitario Ntra. Sra. De Candelaria", + "Hospital Universitario Nuestra Señora De Candelaria", + "Hospital De Ofra", + "Instituto Tecnológico y de Energías Renovables, S.A. (ITER, S.A.)", + "Unidades Clínicas Y De Rehabilitación De Salud Mental", + "Hospital Febles Campos", + "Hospital Quirón Tenerife", + "Vithas Hospital Santa Cruz", + "Clínica Parque, S.A.", + "Hospiten Sur", + "Hospital Universitario De Canarias (H.U.C)", + "Hospital De La Santísima Trinidad", + "Clínica Vida", + "Hospital Bellevue", + "Hospital Nuestra Señora De Guadalupe", + "Hospital Nuestra Señora De Los Dolores", + "Hospital Insular Ntra. Sra. De Los Reyes", + "Hospital Quirón Costa Adeje", + "Hospital Rambla S.L.", + "Hospital General De La Palma", + "Complejo Hospitalario Universitario De Canarias", + "Hospital Del Norte", + "Hospital Del Sur", + "Clínica Tara", + "Hospital Universitario Marqués De Valdecilla", + "Hospital Ramón Negrete", + "Hospital Santa Clotilde - Orden Hospitalaria San Juan De Dios.", + "Centro Hospitalario Padre Menni", + "Hospital Comarcal De Laredo", + "Hospital Sierrallana", + "Clínica Mompía, S.A.U.", + "Complejo Asistencial De Segovia", + "Hospital General De Segovia", + "Hospital Recoletas Segovia Ntra. Sra. De La Misericordia", + "Unidad De Rehabilitación Psiquiátrica Ntra. Sra. De La Fuencisla", + "Hospital General Del H.U. Virgen Del Rocío", + "Hospital Virgen De Valme", + "Hospital Virgen Macarena", + "Hospital San Lázaro", + "Hospital Victoria Eugenia De La Cruz Roja Española", + "Hospital San Juan De Dios De Sevilla", + "Hospital Duques Del Infantado", + "Clínica Santa Isabel", + "Hospital Quironsalud Sagrado Corazón", + "Hospital Fátima", + "Hospital Quironsalud Infanta Luisa", + "Clínica Nuestra Señora De Aránzazu", + "Residencia De Salud Mental Nuestra Señora Del Carmen", + "Hospital El Tomillar", + "Hospital De Alta Resolución De Morón De La Frontera", + "Hospital La Merced", + "Hospital Universitario Virgen Del Rocío", + "Microbiología. Hospital Universitario Virgen del Rocio", + "Hospital Universitario Virgen Macarena", + "Hospital Universitario Virgen De Valme", + "Fremap, Hospital Y Centro De Rehabilitación De Sevilla", + "Hospital Psiquiátrico Penitenciario", + "Hospital San Juan De Dios Del Aljarafe", + "Hospital Nisa Sevilla-Aljarafe", + "Hospital De Alta Resolución De Utrera", + "Hospital De Alta Resolución Sierra Norte", + "Hospital Viamed Santa Ángela De La Cruz", + "Hospital De Alta Resolución De Écija", + "Clínica De Salud Mental Miguel De Mañara", + "Hospital De Rehabilitación Y Traumatología Virgen Del Rocío", + "Hospital De Alta Resolución De Lebrija", + "Hospital Infantil", + "Hospital De La Mujer", + "Hospital Virgen Del Mirón", + "Complejo Asistencial De Soria", + "Hospital Universitari Joan Xxiii De Tarragona", + "Hospital Sociosanitari Francolí", + "Hospital De Sant Pau I Santa Tecla", + "Hospital Viamed Monegal", + "Clínica Activa Mútua 2008", + "Hospital Comarcal Móra D'Ebre", + "Hospital Universitari De Sant Joan De Reus", + "Centre Mq Reus", + "Villablanca Serveis Assistencials, Sa", + "Institut Pere Mata, S.A", + "Hospital De Tortosa Verge De La Cinta", + "Clínica Terres De L'Ebre", + "Policlínica Comarcal Del Vendrell.", + "Pius Hospital De Valls", + "Residència Alt Camp", + "Centre Sociosanitari Ciutat De Reus", + "Hospital Comarcal D'Amposta", + "Centre Sociosanitari Llevant", + "Residència Vila-Seca", + "Unitat Polivalent En Salut Mental D'Amposta", + "Hospital Del Vendrell", + "Centre Sociosanitari I Residència Assistida Salou", + "Residència Santa Tecla Ponent", + "Unitat De Referència De Psiquiatria I Trastorns De La Conducta Alimentària (Urpi)", + "Hospital Obispo Polanco", + "Centro De Rehabilitacion Psicosocial San Juan De Dios", + "Hospital De Alcañiz", + "Hospital Virgen De La Salud", + "Hospital Geriátrico Virgen Del Valle", + "Hospital Nacional De Parapléjicos", + "Hospital Provincial Nuestra Señora De La Misericordia", + "Hospital General Nuestra Señora Del Prado", + "Consejería de Sanidad", + "Clínica Marazuela, S.A.", + "Complejo Hospitalario De Toledo", + "Hospital Laboral Solimat Mutua Colaboradora Con La Ss Nº 72", + "Quirón Salud Toledo", + "Hospital Universitario Y Politécnico La Fe", + "Hospital Universitario Dr. Peset Aleixandre", + "Hospital Arnau De Vilanova", + "Hospital Clínico Universitario De Valencia", + "Hospital De La Malva-Rosa", + "Consorcio Hospital General Universitario De Valencia", + "Hospital Católico Casa De Salud", + "Hospital Nisa Valencia Al Mar", + "Fundación Instituto Valenciano De Oncología", + "Hospital Virgen Del Consuelo", + "Hospital Quirón Valencia", + "Hospital Psiquiátrico Provincial", + "Casa De Reposo San Onofre", + "Hospital Francesc De Borja De Gandia", + "Hospital Lluís Alcanyís De Xàtiva", + "Hospital General De Ontinyent", + "Hospital Intermutual De Levante", + "Hospital De Sagunto", + "Hospital Doctor Moliner", + "Hospital General De Requena", + "Hospital 9 De Octubre", + "Centro Médico Gandia", + "Hospital Nisa Aguas Vivas", + "Clinica Fontana", + "Hospital Universitario De La Ribera", + "Hospital Pare Jofré", + "Hospital De Manises", + "Hospital De Crónicos De Mislata (Antiguo Hospital Militar De Valencia)", + "Hospital De Llíria", + "Imed Valencia", + "Unidad De Desintoxicación Hospitalaria", + "Hospital Universitario Rio Hortega", + "Hospital Clínico Universitario De Valladolid", + "Sanatorio Sagrado Corazón", + "Hospital Medina Del Campo", + "Hospital De Valladolid Felipe Ii", + "Hospital Campo Grande", + "Hospital Santa Marina", + "Hospital Intermutual De Euskadi", + "Clínica Ercilla Mutualia", + "Hospital Cruz Roja De Bilbao", + "Sanatorio Bilbaíno", + "Hospital De Basurto", + "Imq Clínica Virgen Blanca", + "Clínica Guimon S.A.", + "Clínica Indautxu", + "Hospital Universitario De Cruces", + "Osi Barakaldo-Sestao", + "Hospital San Eloy", + "Red De Salud Mental De Bizkaia (Hospital De Bermeo)", + "Hospital Galdakao-Usansolo", + "Hospital Gorliz", + "Red De Salud Mental De Bizkaia (Hospital De Zaldibar)", + "Red De Salud Mental De Bizkaia (Hospital De Zamudio)", + "Avances Médicos S.A", + "Hospital Quironsalud Bizkaia", + "Clínica Imq Zorrotzaurre", + "Hospital Urduliz Ospitalea", + "Hospital Virgen De La Concha", + "Hospital Provincial De Zamora", + "Hospital De Benavente", + "Complejo Asistencial De Zamora", + "Hospital Recoletas De Zamora", + "Hospital Clínico Universitario Lozano Blesa", + "Hospital Universitario Miguel Servet", + "Hospital Royo Villanova", + "Centro de Investigación Biomédica de Aragón", + "Centro De Rehabilitacion Psicosocial Nuestra Señora Del Pilar", + "Hospital Nuestra Señora De Gracia", + "Hospital Maz", + "Clínica Montpelier Grupo Hla, S.A.U", + "Centro Neuropsiquiátrico Nuestra Señora Del Carmen", + "Hospital Quironsalud Zaragoza", + "Clínica Nuestra Señora Del Pilar", + "Hospital General De La Defensa De Zaragoza", + "Hospital Ernest Lluch Martin", + "Unidad De Rehabilitacion De Larga Estancia", + "Unidad Rehabilitadora De Media Estancia Profesor Rey Ardid", + "Hospital De Rehabilitacion Psiquiatrica Prisma", + "Centro Sanitario Cinco Villas", + "Hospital Viamed Montecanal", + "Hospital Universitario De Ceuta", + "Hospital Comarcal de Melilla", + "Presidencia del Gobierno", + "Ministerio Sanidad" + ] + }, + "purpose_sampling": { + "enum": [ + "Cluster/Outbreak Investigation [GENEPIO:0100001]", + "Diagnostic Testing [GENEPIO:0100002]", + "Research [LOINC:LP173021-9]", + "Protocol Testing [GENEPIO:0100024]", + "Surveillance [GENEPIO:0100004]", + "Other [NCIT:C124261]", + "Not Collected [LOINC:LA4700-6]", + "Not Applicable [SNOMED:385432009]", + "Missing [LOINC:LA14698-7]", + "Not Provided [SNOMED:434941000124101]" + ] + }, + "specimen_source": { + "enum": [ + "Specimen from abscess [SNOMED:119371008]", + "Specimen from intra-abdominal abscess [SNOMED:16211211000119102]", + "Fluid specimen from Bartholin gland cyst [SNOMED:446128003]", + "Specimen from abscess of brain [SNOMED:446774006]", + "Specimen from head and neck structure [SNOMED:430220009]", + "Specimen of neck abscess [SNOMED:1023721000122100]", + "Fluid specimen from epidural space [SNOMED:444965000]", + "Specimen from abscess of liver [SNOMED:446674003]", + "Specimen from breast [SNOMED:127456000]", + "Specimen from abscess of tooth [SNOMED:29021000087108]", + "Oropharyngeal aspirate [SNOMED:258412000]", + "Soft tissue specimen [SNOMED:309072003]", + "Specimen from abscess of lung [SNOMED:29011000087100]", + "Specimen of fluid from cyst of kidney [SNOMED:16220971000119101]", + "Specimen from a subphrenic abscess [SNOMED:75981000122101]", + "Nucleic acid specimen [SNOMED:448789008]", + "Water specimen [SNOMED:119318008]", + "Air specimen [SNOMED:446302006]", + "Specimen obtained by bronchial aspiration [SNOMED:441903006]", + "Gastric aspirate specimen [SNOMED:168137004]", + "Specimen from nasopharyngeal structure [SNOMED:430248009]", + "Nasopharyngeal aspirate [SNOMED:258411007]", + "Specimen from endotracheal tube [SNOMED:119307008]", + "Bile specimen [SNOMED:119341000]", + "Articular tissue specimen [SNOMED:309126004]", + "Specimen from brain obtained by biopsy [SNOMED:432139004]", + "Skin biopsy specimen [SNOMED:309066003]", + "Mouth biopsy specimen [SNOMED:309188000]", + "Tissue specimen from uterine cervix [SNOMED:127481002]", + "Duodenal biopsy specimen [SNOMED:309216003]", + "Specimen from endometrium obtained by biopsy [SNOMED:122704003]", + "Specimen from intervertebral disc [SNOMED:438960000]", + "Specimen obtained from skin of the scapular region biopsy [SNOMED:76011000122104]", + "Esophageal biopsy specimen [SNOMED:309209004]", + "Fascia biopsy specimen [SNOMED:309118007]", + "Lymph node biopsy specimen [SNOMED:309079007]", + "Gastric biopsy specimen [SNOMED:309211008]", + "Liver biopsy specimen [SNOMED:309203003]", + "Tissue specimen from gastrointestinal tract [SNOMED:127466008]", + "Tissue specimen from large intestine [SNOMED:122643008]", + "Muscle biopsy specimen [SNOMED:309507001]", + "Soft tissue biopsy specimen [SNOMED:309074002]", + "Specimen from pericardium obtained by biopsy [SNOMED:434250007]", + "Pleura biopsy specimen [SNOMED:309172000]", + "Specimen from lung obtained by biopsy [SNOMED:122610009]", + "Prostate biopsy specimen [SNOMED:309132009]", + "Rectal biopsy specimen [SNOMED:309262006]", + "Synovium biopsy specimen [SNOMED:309122002]", + "Tendon biopsy specimen [SNOMED:309113003]", + "Tissue specimen from small intestine [SNOMED:122638001]", + "Erythrocyte specimen from blood product [SNOMED:122582004]", + "Platelet specimen [SNOMED:119358005]", + "Specimen from plasma bag [SNOMED:119305000]", + "Specimen from blood bag [SNOMED:119304001]", + "Specimen from bronchoscope [SNOMED:76081000122109]", + "Gallstone specimen [SNOMED:258492001]", + "Renal stone specimen [SNOMED:258495004]", + "Specimen of implantable venous access port [SNOMED:76091000122107]", + "Catheter tip submitted as specimen [SNOMED:119312009]", + "Calculus specimen [SNOMED:119350003]", + "Bronchial brushings specimen [SNOMED:309176002]", + "Scotch tape slide specimen [SNOMED:258664003]", + "Specimen of cystoscope [SNOMED:76031000122108]", + "Blood clot specimen [SNOMED:258582006]", + "Serum specimen from blood product [SNOMED:122591000]", + "Specimen of a sent Colonoscope [SNOMED:76041000122100]", + "Specimen from cornea [SNOMED:119400006]", + "Conjunctival swab [SNOMED:258498002]", + "Intrauterine contraceptive device submitted as specimen [SNOMED:473415003]", + "Abdominal cavity fluid specimen [SNOMED:8761000122107]", + "Body fluid specimen obtained via chest tube [SNOMED:447375004]", + "Specimen of a sent duodenoscope [SNOMED:76051000122103]", + "Swab of endocervix [SNOMED:444787003]", + "Specimen of a sent endoscope [SNOMED:76061000122101]", + "Coughed sputum specimen [SNOMED:119335007]", + "Sputum specimen obtained by sputum induction [SNOMED:258610001]", + "Drainage fluid specimen [SNOMED:258455001]", + "Specimen from endometrium [SNOMED:119396006]", + "Glans penis swab [SNOMED:258512002]", + "Specimen from mediastinum [SNOMED:433326001]", + "Ear swab specimen [SNOMED:309166000]", + "Middle ear fluid specimen [SNOMED:258466008]", + "Swab from gastrostomy stoma [SNOMED:472886009]", + "Specimen of diabetic foot ulcer exudate [SNOMED:75991000122103]", + "Swab from external stoma wound [SNOMED:29001000087102]", + "Swab from tracheostomy wound [SNOMED:472870002]", + "Specimen obtained by swabbing ureterostomy wound [SNOMED:1023731000122102]", + "Specimen obtained by vesicostomy wound swabbing [SNOMED:1023741000122105]", + "specimen obtained by colostomy wound swabbing [SNOMED:1023751000122107]", + "Specimen obtained by swabbing ileostomy wound[SNOMED:1023761000122109]", + "Swab of umbilicus [SNOMED:445367006]", + "Swab from placenta [SNOMED:472879001]", + "Urethral swab [SNOMED:258530009]", + "Vaginal swab [SNOMED:258520000]", + "Rectal swab [SNOMED:258528007]", + "Oropharyngeal swab [SNOMED:461911000124106]", + "Skin swab [SNOMED:258503004]", + "Swab from tonsil [SNOMED:472867001]", + "Specimen from graft [SNOMED:29031000087105]", + "Swab from larynx [SNOMED:472888005]", + "Swab of internal nose [SNOMED:445297001]", + "Nasopharyngeal swab [SNOMED:258500001]", + "Swab of vascular catheter insertion site [SNOMED:735950000]", + "Vulval swab [SNOMED:258523003]", + "Specimen of sent gastroscope [SNOMED:76071000122106]", + "Stool specimen [SNOMED:119339001]", + "Hematoma specimen [SNOMED:258588005]", + "Blood specimen obtained for blood culture [SNOMED:446131002]", + "Specimen from surgical wound [SNOMED:734380008]", + "Specimen from bone [SNOMED: 430268003]", + "Aqueous humor specimen [SNOMED:258444001]", + "Vitreous humor specimen [SNOMED:258438000]", + "Graft specimen from patient [SNOMED:440493002]", + "Allogeneic bone graft material submitted as specimen [SNOMED:33631000087102]", + "Bronchoalveolar lavage fluid specimen [SNOMED:258607008]", + "Specimen of bone graft obtained through lavage [SNOMED:1023771000122104]", + "Mediastinal specimen obtained by lavage [SNOMED:76021000122105]", + "Nasopharyngeal washings [SNOMED:258467004]", + "Breast fluid specimen [SNOMED:309055005]", + "Contact lens submitted as specimen [SNOMED:440473005]", + "Intraocular lens specimen [SNOMED:258602002]", + "Leukocyte specimen from patient [SNOMED:122584003]", + "Lymphocyte specimen [SNOMED:119353001]", + "Fluid specimen [SNOMED:258442002]", + "Amniotic fluid specimen [SNOMED:119373006]", + "Joint fluid specimen [SNOMED:431361003]", + "Peritoneal fluid specimen [SNOMED:168139001]", + "Cerebrospinal fluid specimen obtained via ventriculoperitoneal shunt [SNOMED:446861007]", + "Cerebrospinal fluid specimen [SNOMED:258450006]", + "Pericardial fluid specimen [SNOMED:122571007]", + "Pleural fluid specimen [SNOMED:418564007]", + "Cyst fluid specimen [SNOMED:258453008]", + "Genital lochia specimen [SNOMED:122579009]", + "Device submitted as specimen [SNOMED:472919007]", + "Meconium specimen [SNOMED:119340004]", + "Bone marrow specimen [SNOMED:119359002]", + "Tissue specimen from amniotic membrane [SNOMED:446837000]", + "Microbial isolate [SNOMED:119303007]", + "Specimen from environment [SNOMED:440229008]", + "Intravenous lipid infusion fluid specimen [SNOMED:258650003]", + "Urine specimen obtained by single catheterization of urinary bladder [SNOMED:447589008]", + "Urine specimen obtained from urinary collection bag [SNOMED:446306009]", + "Urine specimen [SNOMED:122575003]", + "Mid-stream urine specimen [SNOMED:258574006]", + "Urine specimen from nephrostomy tube [SNOMED:442173007]", + "Urine specimen obtained via indwelling urinary catheter [SNOMED:446846006]", + "Postejaculation urine specimen [SNOMED:445743000]", + "Urine specimen obtained from kidney [SNOMED:446907008]", + "Suprapubic urine specimen [SNOMED:447488002]", + "Parasite specimen [SNOMED:258617003]", + "Hair specimen [SNOMED:119326000]", + "Tissue specimen from placenta [SNOMED:122736005]", + "Specimen from prosthetic device [SNOMED:438660002]", + "Cardiac pacemaker lead submitted as specimen [SNOMED:473417006]", + "Specimen of sent vascular catheter puncture [SNOMED:8561000122101]", + "Peritoneal catheter submitted as specimen [SNOMED:472944004]", + "Intracranial ventricular catheter submitted as specimen [SNOMED:472940008]", + "Corneal scraping specimen [SNOMED:258485006]", + "Serum specimen [SNOMED:119364003]", + "Prostatic fluid specimen [SNOMED:258470000]", + "Seminal fluid specimen [SNOMED:119347001]", + "Specimen from nasal sinus [SNOMED:430238007]", + "Pharmaceutical product submitted as specimen [SNOMED:446137003]", + "Surface swab [SNOMED:258537007]", + "Skin ulcer swab [SNOMED:258505006]", + "Specimen obtained from genital ulcer [SNOMED:76001000122102 ]", + "Nail specimen [SNOMED:119327009]", + "Heart valve specimen [SNOMED:258542004]", + "Native heart valve specimen [SNOMED:258544003]", + "Specimen from prosthetic heart valve [SNOMED:1003714002]", + "Vegetation from heart valve [SNOMED:258437005]", + "Skin cyst specimen [SNOMED:309075001]", + "Cardiac pacemaker submitted as specimen [SNOMED:33491000087103]", + "Blood specimen [SNOMED: 119297000]", + "Plasma specimen [SNOMED:119361006]", + "Biopsy specimen [SNOMED:258415003]", + "Peritoneal dialysate specimen [SNOMED:168140004]", + "Dialysate specimen [SNOMED:258454002]", + "Not Collected [LOINC:LA4700-6]", + "Not Applicable [SNOMED:385432009]", + "Missing [LOINC:LA14698-7]", + "Not Provided [SNOMED:434941000124101]" + ] + }, + "environmental_material": { + "enum": [ + "Air vent [ENVO:03501208]", + "Banknote [ENVO:00003896]", + "Bed rail [ENVO:03501209]", + "Building Floor [SNOMED:258535004]", + "Cloth [SNOMED:81293006]", + "Control Panel [ENVO:03501210]", + "Door [SNOMED:224751004]", + "Door Handle [ENVO:03501211]", + "Face Mask [SNOMED:261352009]", + "Face Shield [SNOMED:706724001]", + "Food [SNOMED:255620007]", + "Food Packaging [MeSH:D018857]", + "Glass [SNOMED:32039001]", + "Handrail [ENVO:03501212]", + "Hospital Gown [OBI:0002796]", + "Light Switch [ENVO:03501213]", + "Locker [ENVO:03501214]", + "N95 Mask [OBI:0002790]", + "Nurse Call Button [ENVO:03501215]", + "Paper [LOINC:LA26662-9]", + "Particulate matter [ENVO:01000060]", + "Plastic [SNOMED:61088005]", + "PPE Gown [GENEPIO:0100025]", + "Sewage [SNOMED:224939005]", + "Sink [SNOMED:705607007]", + "Soil [SNOMED:415555003]", + "Stainless Steel material [SNOMED:256506002]", + "Tissue Paper [ENVO:03501217]", + "Toilet Bowl [ENVO:03501218]", + "Water [SNOMED:11713004]", + "Wastewater [ENVO:00002001]", + "Window [SNOMED:224755008]", + "Wood [SNOMED:14402002]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "environmental_system": { + "enum": [ + "Acute care facility [ENVO:03501135]", + "Animal house [ENVO:00003040]", + "Bathroom [SNOMED:223359008]", + "Clinical assessment centre [ENVO:03501136]", + "Conference venue [ENVO:03501127]", + "Corridor [SNOMED:224720006]", + "Daycare [LOINC:LA26176-0]", + "Emergency room (ER) [LOINC:LA7172-]", + "Family practice clinic [ENVO:03501186]", + "Group home [ENVO:03501196]", + "Homeless shelter [NCIT:C204034]", + "Hospital [SNOMED:22232009]", + "Intensive Care Unit (ICU) [ENVO:03501152]", + "Long Term Care Facility [LOINC:LP173046-6]", + "Patient room [SNOMED:462598009]", + "Prison [LOINC:LA18820-3]", + "Production Facility [SNOMED:257605002]", + "School [SNOMED:257698009]", + "Sewage Plant [ENVO:00003043]", + "Subway train [ENVO:03501109]", + "Wet market [ENVO:03501198]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "collection_device": { + "enum": [ + "Air filter [SNOMED:972002]", + "Blood Collection Tube [NCIT:C113122]", + "Bronchoscope [SNOMED:706028009]", + "Collection Container [NCIT:C43446] [NCIT:C43446]", + "Collection Cup [GENEPIO:0100026] [GENEPIO:0100026]", + "Filter [SNOMED:116250002]", + "Needle [SNOMED:79068005]", + "Serum Collection Tube [NCIT:C113675]", + "Sputum Collection Tube [GENEPIO:0002115]", + "Suction Catheter [SNOMED:58253008]", + "Swab [SNOMED:257261003]", + "Other [NCIT:C17649]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "host_common_name": { + "enum": [ + "Human [LOINC:LA19711-3]", + "Bat [LOINC:LA31034-4]", + "Cat [SNOMED:257528009]", + "Chicken [SNOMED:2022008]", + "Civet [SNOMED:75427002]", + "Cow [LOINC:LA31041-9]", + "Dog [LOINC:LA14178-0]", + "Lion [SNOMED:112507006]", + "Mink [SNOMED:57418000]", + "Pangolin [SNOMED:106948007]", + "Pig [LOINC:LA31036-9]", + "Pigeon [LOINC:LP31646-0]", + "Tiger [SNOMED:79047009]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "host_gender": { + "enum": [ + "Female [LOINC:LA3-6]", + "Male [LOINC:LA2-8]", + "Non-binary Gender [SNOMED:772004004]", + "Transgender (assigned male at birth) [GSSO:004004]", + "Transgender (assigned female at birth) [GSSO:004005]", + "Undeclared [GSSO:000131]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "vaccinated": { + "enum": [ + "Yes [SNOMED:373066001]", + "No [SNOMED:373067005]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "medicated": { + "enum": [ + "Yes [SNOMED:373066001]", + "No [SNOMED:373067005]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "hospitalized": { + "enum": [ + "Yes [SNOMED:373066001]", + "No [SNOMED:373067005]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "icu_admission": { + "enum": [ + "Yes [SNOMED:373066001]", + "No [SNOMED:373067005]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "death": { + "enum": [ + "Yes [SNOMED:373066001]", + "No [SNOMED:373067005]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "immunosuppressed": { + "enum": [ + "Yes [SNOMED:373066001]", + "No [SNOMED:373067005]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "all_in_one_library_kit": { + "enum": [ + "Ion Xpress", + "ABL_DeepChek NGS", + "Ion AmpliSeq Kit for Chef DL8", + "NEBNext Fast DNA Library Prep Set for Ion Torrent", + "NEBNext ARTIC SARS-CoV-2 FS", + "Illumina COVIDSeq Test [CIDO:0020172]", + "Illumina COVIDSeq Assay", + "ABL DeepChek® Assay WG SC2 V1", + "ABL DeepChek® Assay WG SC2 V4", + "Not Provided [SNOMED:434941000124101]", + "Other [NCIT:C17649]" + ] + }, + "library_preparation_kit": { + "enum": [ + "Illumina DNA PCR-Free Prep", + "Illumina DNA Prep", + "Illumina FFPE DNA Prep", + "Illumina Stranded mRNA Prep", + "Nextera XT DNA Library Preparation Kit", + "TrueSeq ChIP Library Preparation Kit", + "TruSeq DNA Nano", + "TruSeq DNA Nano Library Prep Kit for NeoPrep", + "TruSeq DNA PCR-Free", + "TruSeq RNA Library Prep Kit v2", + "TruSeq Stranded Total RNA", + "TruSeq Stranded mRNA", + "Nextera XT", + "NEBNex Fast DNA Library Prep Set for Ion Torrent", + "Nextera DNA Flex", + "Ion AmpliSeq Kit Library Kit Plus", + "Ion AmpliSeq Library Kit 2.0", + "Ion Xpress Plus Fragment Library Kit", + "Oxford Nanopore Sequencing Kit", + "SQK-RBK110-96", + "SQK-RBK114-96", + "Nanopore COVID Maxi: 9216 samples", + "Nanopore COVID Midi: 2304 samples", + "Nanopore COVID Mini: 576 samples", + "Vela Diagnostics:ViroKey SQ FLEX Library Prep Reagents", + "Not Provided [SNOMED:434941000124101]", + "Other [NCIT:C17649]" + ] + }, + "enrichment_protocol": { + "enum": [ + "Amplicon [GENEPIO:0001974]", + "Probes [OMIT:0016121]", + "Custom probes [OMIT:0016112]", + "Custom amplicon [OMIT:0016112]", + "No enrichment [NCIT:C154307]", + "Other [NCIT:C17649]", + "Not Provided [SNOMED:434941000124101]" + ] + }, + "enrichment_panel": { + "enum": [ + "ARTIC", + "Exome 2.5", + "Illumina respiratory Virus Oligo Panel", + "Illumina AmpliSeq Community panel", + "Illumina AmpliSeq SARS-CoV-2 Research Panel for Illumina", + "Illumina FluA/B", + "Ion AmpliSeq SARS-CoV-2 Research Panel", + "xGen SC2 Midnight1200 Amplicon Panel", + "Oxford Nanopore Technologies Midnight Amplicon Panel", + "ViroKey SQ FLEX SARS-CoV-2 Primer Set", + "NEBNext VarSkip Short SARS-CoV-2 primers", + "Illumina Microbial Amplicon Prep-Influenza A/B", + "Illumina Respiratory Pathogen ID/AMR Enrichment Panel", + "Illumina Viral Surveillance Panel v2", + "Twist Bioscience Respiratory Virus Research Panel", + "Other [NCIT:C17649]" + ] + }, + "enrichment_panel_version": { + "enum": [ + "ARTIC v1", + "ARTIC v2", + "ARTIC v3", + "ARTIC v4", + "ARTIC v4.1", + "ARTIC v5", + "ARTIC v5.1", + "ARTIC v5.2", + "ARTIC v5.3", + "ARTIC v5.3.2", + "Illumina AmpliSeq Community panel", + "Illumina AmpliSeq SARS-CoV-2 Research Panel for Illumina", + "Illumina Respiratory Virus Oligos Panel V1", + "Illumina Respiratory Virus Oligos Panel V2", + "Ion AmpliSeq SARS-CoV-2 Insight", + "xGen SC2 Midnight1200 Amplicon Panel", + "Midnight Amplicon Panel v1", + "Midnight Amplicon Panel v2", + "Midnight Amplicon Panel v3", + "ViroKey SQ FLEX SARS-CoV-2 Primer Set", + "NEBNext VarSkip Short SARS-CoV-2 primers", + "Illumina Viral Surveillance Panel v2", + "Other [NCIT:C17649]" + ] + }, + "sequencing_instrument_model": { + "enum": [ + "Illumina sequencing instrument [GENEPIO:0100105]", + "Illumina Genome Analyzer [GENEPIO:0100106]", + "Illumina Genome Analyzer II [OBI:0000703]", + "Illumina Genome Analyzer IIx [OBI:0002000]", + "Illumina HiScanSQ [GENEPIO:0100109]", + "Illumina HiSeq [GENEPIO:0100110]", + "Illumina HiSeq X [GENEPIO:0100111]", + "Illumina HiSeq X Five [GENEPIO:0100112]", + "Illumina HiSeq X Ten [GENEPIO:0100113]", + "Illumina HiSeq 1000 [OBI:0002022]", + "Illumina HiSeq 1500 [GENEPIO:0100115]", + "Illumina HiSeq 2000 [OBI:0002001]", + "Illumina HiSeq 2500 [OBI:0002002]", + "Illumina HiSeq 3000 [OBI:0002048]", + "Illumina HiSeq 4000 [OBI:0002049]", + "Illumina iSeq [GENEPIO:0100120]", + "Illumina iSeq 100 [GENEPIO:0100121]", + "Illumina NovaSeq [GENEPIO:0100122]", + "Illumina NovaSeq 6000 [GENEPIO:0100123]", + "Illumina MiniSeq [GENEPIO:0100124]", + "Illumina MiSeq [OBI:0002003]", + "Illumina NextSeq [GENEPIO:0100126]", + "Illumina NextSeq 500 [OBI:0002021]", + "Illumina NextSeq 550 [GENEPIO:0100128]", + "Illumina NextSeq 1000 [OBI:0003606]", + "Illumina NextSeq 2000 [GENEPIO:0100129]", + "Illumina NextSeq 6000", + "Ion GeneStudio S5 Prime", + "Ion GeneStudio S5 Plus", + "Ion GeneStudio S5", + "Ion Torrent sequencing instrument [GENEPIO:0100135]", + "Ion Torrent Genexus", + "Ion Torrent PGM [GENEPIO:0100136]", + "Ion Torrent Proton [GENEPIO:0100137]", + "Ion Torrent S5 [GENEPIO:0100139]", + "Ion Torrent S5 XL [GENEPIO:0100138]", + "MinION [GENEPIO:0100142]", + "GridION [GENEPIO:0100141]", + "PromethION [GENEPIO:0100143]", + "Pacific Biosciences sequencing instrument [GENEPIO:0100130]", + "PacBio RS [GENEPIO:0100131]", + "PacBio RS II [OBI:0002012]", + "PacBio Sequel [GENEPIO:0100133]", + "PacBio Sequel II [GENEPIO:0100134]", + "Oxford Nanopore sequencing instrument [GENEPIO:0100140]", + "Oxford Nanopore GridION [GENEPIO:0100141]", + "Oxford Nanopore MinION [GENEPIO:0100142]", + "Oxford Nanopore PromethION [GENEPIO:0100143]", + "AB 310 Genetic Analyzer", + "AB 3130 Genetic Analyzer", + "AB 3130xL Genetic Analyzer", + "AB 3500 Genetic Analyzer", + "AB 3500xL Genetic Analyzer", + "AB 3730 Genetic Analyzer", + "AB 3730xL Genetic Analyzer", + "AB SOLID System [OBI:0000696]", + "AB SOLID System 2.0 [EFO:0004442]", + "AB SOLID System 3.0 [EFO:0004439]", + "AB SOLID 3 Plus System [OBI:0002007]", + "AB SOLID 4 System [EFO:0004438]", + "AB SOLID 4hq System [AB SOLID 4hq System]", + "AB SOLID PI System [EFO:0004437]", + "AB. 5500 Genetic Analyzer", + "AB 5500xl Genetic Analyzer", + "AB 5500xl-W Genetic Analysis System", + "BGI Genomics sequencing instrument [GENEPIO:0100144]", + "BGISEQ-500 [GENEPIO:0100145]", + "BGISEQ-50", + "DNBSEQ-T7 [GENEPIO:0100147]", + "DNBSEQ-G400 [GENEPIO:0100148]", + "DNBSEQ-G400 FAST [GENEPIO:0100149]", + "MGI sequencing instrument [GENEPIO:0100146]", + "MGISEQ-2000RS", + "MGI DNBSEQ-T7 [GENEPIO:0100147]", + "MGI DNBSEQ-G400 [GENEPIO:0100148]", + "MGI DNBSEQ-G400RS FAST [GENEPIO:0100149]", + "MGI DNBSEQ-G50 [GENEPIO:0100150]", + "454 GS [EFO:0004431]", + "454 GS 20 [EFO:0004206]", + "454 GS FLX + [EFO:0004432]", + "454 GS FLX Titanium [EFO:0004433]", + "454 GS FLX Junior [GENEPIO:0001938]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "flowcell_kit": { + "enum": [ + "HiSeq 3000/4000 PE Cluster Kit", + "HiSeq 3000/4000 SBS Kit (50 cycles)", + "HiSeq 3000/4000 SBS Kit (150 cycles)", + "HiSeq 3000/4000 SBS Kit (300 cycles)", + "HiSeq 3000/4000 SBS Kit", + "HiSeq 3000/4000 SR Cluster Kit", + "TG HiSeq 3000/4000 SBS Kit (50 cycles)", + "TG HiSeq 3000/4000 SBS Kit (150 cycles)", + "TG HiSeq 3000/4000 SBS Kit (300 cycles)", + "TG HiSeq 3000/4000 PE ClusterKit", + "TG HiSeq 3000/4000 SR ClusterKit", + "HiSeq PE Cluster Kit v4 cBot", + "HiSeq SR Rapid Cluster Kit v2", + "HiSeq PE Rapid Cluster Kit v2", + "TG HiSeq Rapid PE Cluster Kit v2", + "HiSeq Rapid Duo cBot Sample Loading Kit", + "TG TruSeq Rapid Duo cBot Sample Loading Kit", + "HiSeq Rapid SBS Kit v2 (50 cycles)", + "HiSeq Rapid SBS Kit v2 (200 cycles)", + "HiSeq Rapid SBS Kit v2 (500 cycles)", + "TG HiSeq Rapid SBS Kit v2 (200 Cycle)", + "TG HiSeq Rapid SBS Kit v2 (50 Cycle)", + "HiSeq SR Cluster Kit v4 cBot", + "TG HiSeq SR Cluster Kit v4 – cBot", + "TG HiSeq PE Cluster Kit v4 – cBot", + "HiSeq X Ten Reagent Kit v2.5", + "HiSeq X Ten Reagent Kit v2.5 – 10 pack", + "HiSeq X Five Reagent Kit v2.5", + "MiSeq Reagent Kit v3 (150-cycle)", + "MiSeq Reagent Kit v3 (600-cycle)", + "TG MiSeq Reagent Kit v3 (600 cycle)", + "TG MiSeq Reagent Kit v3 (150 cycle)", + "MiSeq Reagent Kit v2 (50-cycles)", + "MiSeq Reagent Kit v2 (300-cycles)", + "MiSeq Reagent Kit v2 (500-cycles)", + "MiniSeq Rapid Reagent Kit (100 cycles)", + "MiniSeq High Output Reagent Kit (75-cycles)", + "MiniSeq High Output Reagent Kit (150-cycles)", + "NextSeq 1000/2000 P1 Reagents (300 Cycles)", + "NextSeq 1000/2000 P2 Reagents (100 Cycles) v3", + "NextSeq 1000/2000 P2 Reagents (200 Cycles) v3", + "NextSeq 1000/2000 P2 Reagents (300 Cycles) v3", + "NextSeq 2000 P3 Reagents (50 Cycles)", + "NextSeq 2000 P3 Reagents (100 Cycles)", + "NextSeq 2000 P3 Reagents (200 Cycles)", + "NextSeq 2000 P3 Reagents (300 Cycles)", + "NextSeq 1000/2000 Read and Index Primers", + "NextSeq 1000/2000 Index Primer Kit", + "NextSeq 1000/2000 Read Primer Kit", + "NextSeq 500/550 High Output Kit v2.5 (75 Cycles)", + "NextSeq 500/550 High Output Kit v2.5 (150 Cycles)", + "NextSeq 500/550 High Output Kit v2.5 (300 Cycles)", + "NextSeq 500/550 Mid Output Kit v2.5 (150 Cycles)", + "NextSeq 500/550 Mid Output Kit v2.5 (300 Cycles)", + "TG NextSeq 500/550 High Output Kit v2.5 (75 Cycles)", + "TG NextSeq 500/550 High Output Kit v2.5 (150 Cycles)", + "TG NextSeq 500/550 High Output Kit v2.5 (300 Cycles)", + "TG NextSeq 500/550 Mid Output Kit v2.5 (150 Cycles)", + "TG NextSeq 500/550 Mid Output Kit v2.5 (300 Cycles)", + "NovaSeq 6000 S4 Reagent Kit v1.5 (300 cycles)", + "NovaSeq 6000 S4 Reagent Kit v1.5 (200 cycles)", + "NovaSeq 6000 S4 Reagent Kit v1.5 (35 cycles)", + "NovaSeq 6000 S2 Reagent Kit v1.5 (300 cycles)", + "NovaSeq 6000 S2 Reagent Kit v1.5 (200 cycles)", + "NovaSeq 6000 S2 Reagent Kit v1.5 (100 cycles)", + "NovaSeq 6000 S1 Reagent Kit v1.5 (300 cycles)", + "NovaSeq 6000 S1 Reagent Kit v1.5 (200 cycles)", + "NovaSeq 6000 S1 Reagent Kit v1.5 (100 cycles)", + "NovaSeq 6000 SP Reagent Kit v1.5 (500 cycles)", + "NovaSeq 6000 SP Reagent Kit v1.5 (300 cycles)", + "NovaSeq 6000 SP Reagent Kit v1.5 (200 cycles)", + "NovaSeq 6000 SP Reagent Kit v1.5 (100 cycles)", + "NovaSeq 6000 SP Reagent Kit (100 cycles)", + "NovaSeq 6000 SP Reagent Kit (200 cycles)", + "NovaSeq 6000 SP Reagent Kit (300 cycles)", + "NovaSeq 6000 SP Reagent Kit (500 cycles)", + "NovaSeq 6000 S1 Reagent Kit (100 cycles)", + "NovaSeq 6000 S1 Reagent Kit (200 cycles)", + "NovaSeq 6000 S1 Reagent Kit (300 cycles)", + "NovaSeq 6000 S2 Reagent Kit (100 cycles)", + "NovaSeq 6000 S2 Reagent Kit (200 cycles)", + "NovaSeq 6000 S2 Reagent Kit (300 cycles)", + "NovaSeq 6000 S4 Reagent Kit (200 cycles)", + "NovaSeq 6000 S4 Reagent Kit (300 cycles)", + "NovaSeq 6000 S4 Reagent Kit (300 Cycles) – 10 pack", + "NovaSeq 6000 S4 Reagent Kit (300 Cycles) – 20 pack", + "NovaSeq 6000 S4 Reagent Kit (300 Cycles) – 40 pack", + "NovaSeq Library Tubes Accessory Pack (24 tubes)", + "NovaSeq XP 4-Lane Kit v1.5", + "NovaSeq XP 2-Lane Kit v1.5", + "NovaSeq XP 2-Lane Kit", + "NovaSeq Xp 4-Lane Kit", + "NovaSeq Xp Flow Cell Dock", + "NovaSeq Xp 2-Lane Manifold Pack", + "NovaSeq Xp 4-Lane Manifold Pack", + "PhiX Control v3", + "TG PhiX Control Kit v3", + "NextSeq PhiX Control Kit", + "Single-Read", + "TruSeq Dual Index Sequencing Primer Box", + "Paired-End", + "TruSeq PE Cluster Kit v3-cBot-HS", + "TruSeq PE Cluster Kit v5-CS-GA", + "TruSeq SBS Kit v3-HS (200 cycles)", + "TruSeq SBS Kit v3-HS (50 cycles)", + "TG TruSeq SBS Kit v3 - HS (200-cycles)", + "TruSeq SBS Kit v5-GA", + "TruSeq SR Cluster Kit v3-cBot-HS", + "TG TruSeq SR Cluster Kit v1-cBot – HS", + "iSeq 100 i1 Reagent v2 (300-cycle)", + "iSeq 100 i1 Reagent v2 (300-cycle) 4 pack", + "iSeq 100 i1 Reagent v2 (300-cycle) 8 pack", + "Ion 540 Chip Kit", + "Not Provided [SNOMED:434941000124101]", + "Other [NCIT:C17649]" + ] + }, + "library_source": { + "enum": [ + "Genomic single cell [EDAM:4028]", + "Transcriptomic [NCIT:C153189]", + "Metagenomic [NCIT:C201925]", + "Metatranscriptomic [NCIT:C201926]", + "Synthetic [BAO:0003073]", + "Viral rna [NCIT:C204811]", + "Other [NCIT:C17649]", + "Not Provided [SNOMED:434941000124101]" + ] + }, + "library_selection": { + "enum": [ + "RANDOM [LOINC:LA29504-0]", + "PCR [LOINC:LA26418-6]", + "RANDOM PCR [GENEPIO:0001957]", + "RT-PCR [LOINC:LP435370-4]", + "HMPR [GENEPIO:0001949]", + "MF [GENEPIO:0001952]", + "repeat fractionation", + "size fractionation [GENEPIO:0001963]", + "MSLL [GENEPIO:0001954]", + "cDNA [NCIT:C324]", + "ChIP [GENEPIO:0001947]", + "MNase [GENEPIO:0001953]", + "DNase [GENEPIO:0001948]", + "Hybrid Selection [GENEPIO:0001950]", + "Reduced Representation [GENEPIO:0001960]", + "Restriction Digest [GENEPIO:0001961]", + "5-methylcytidine antibody [GENEPIO:0001941]", + "MBD2 protein methyl-CpG binding domain [GENEPIO:0001951]", + "CAGE [GENEPIO:0001942]", + "RACE [GENEPIO:0001956]", + "MDA [EFO:0008800]", + "padlock probes capture method", + "Oligo-dT [NCIT:C18685]", + "Inverse rRNA selection", + "ChIP-Seq [NCIT:C106049]", + "Other [NCIT:C17649]", + "Not Provided [SNOMED:434941000124101]" + ] + }, + "library_strategy": { + "enum": [ + "Bisultife-Seq strategy [GENEPIO:0001975]", + "CTS strategy [GENEPIO:0001978]", + "ChIP-Seq strategy [GENEPIO:0001979]", + "DNase-Hypersensitivity strategy [GENEPIO:0001980]", + "EST strategy [GENEPIO:0001981]", + "FL-cDNA strategy [GENEPIO:0001983]", + "MB-Seq strategy [GENEPIO:0001984]", + "MNase-Seq strategy [GENEPIO:0001985]", + "MRE-Seq strategy [GENEPIO:0001986]", + "MeDIP-Seq strategy [GENEPIO:0001987]", + "RNA-Seq strategy [GENEPIO:0001990]", + "WCS strategy [GENEPIO:0001991]", + "WGS strategy [GENEPIO:0001992]", + "WXS strategy [GENEPIO:0001993]", + "Amplicon [GENEPIO:0001974]", + "Clone end strategy [GENEPIO:0001976]", + "Clone strategy [GENEPIO:0001977]", + "Finishing strategy [GENEPIO:0001982]", + "Other library strategy [GENEPIO:0001988]", + "Pool clone strategy [GENEPIO:0001989]", + "Not Provided [SNOMED:434941000124101]" + ] + }, + "library_layout": { + "enum": [ + "Single-end [OBI:0002481]", + "Paired-end [OBI:0001852]" + ] + }, + "gene_name_1": { + "enum": [ + "E gene [LOINC:LP422409-5]", + "M gene [LOINC:LP422882-3]", + "N gene [LOINC:LP417599-0]", + "Spike gene [GENEPIO:0100154]", + "orf1ab (rep) [LOINC:LP437152-4]", + "orf1a (pp1a) [LP428394-3]", + "nsp11 [GENEPIO:0100157]", + "nsp1 [GENEPIO:0100158]", + "nsp2 [GENEPIO:0100159]", + "nsp3 [GENEPIO:0100160]", + "nsp4 [GENEPIO:0100161]", + "nsp5 [GENEPIO:0100162]", + "nsp6 [GENEPIO:0100163]", + "nsp7 [GENEPIO:0100164]", + "nsp8 [GENEPIO:0100165]", + "nsp9 [GENEPIO:0100166]", + "nsp10 [GENEPIO:0100167]", + "RdRp gene (nsp12) [GENEPIO:0100168]", + "hel gene (nsp13) [GENEPIO:0100169]", + "exoN gene (nsp14) [GENEPIO:0100170]", + "nsp15 [GENEPIO:0100171]", + "nsp16 [GENEPIO:0100172]", + "orf3a [GENEPIO:0100173]", + "orf3b [GENEPIO:0100174]", + "orf6 (ns6) [GENEPIO:0100175]", + "orf7a [GENEPIO:0100176]", + "orf7b (ns7b) [GENEPIO:0100177]", + "orf8 (ns8) [GENEPIO:0100178]", + "orf9b [GENEPIO:0100179]", + "orf9c [GENEPIO:0100180]", + "orf10 [GENEPIO:0100181]", + "orf14 [GENEPIO:0100182]", + "SARS-COV-2 5' UTR [GENEPIO:0100183]", + "Other [NCIT:C124261]", + "Not Applicable [LOINC:LA4720-4]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "gene_name_2": { + "enum": [ + "E gene [LOINC:LP422409-5]", + "M gene [LOINC:LP422882-3]", + "N gene [LOINC:LP417599-0]", + "Spike gene [GENEPIO:0100154]", + "orf1ab (rep) [LOINC:LP437152-4]", + "orf1a (pp1a) [LOINC:LP428394-3]", + "nsp11 [GENEPIO:0100157]", + "nsp1 [GENEPIO:0100158]", + "nsp2 [GENEPIO:0100159]", + "nsp3 [GENEPIO:0100160]", + "nsp4 [GENEPIO:0100161]", + "nsp5 [GENEPIO:0100162]", + "nsp6 [GENEPIO:0100163]", + "nsp7 [GENEPIO:0100164]", + "nsp8 [GENEPIO:0100165]", + "nsp9 [GENEPIO:0100166]", + "nsp10 [GENEPIO:0100167]", + "RdRp gene (nsp12) [GENEPIO:0100168]", + "hel gene (nsp13) [GENEPIO:0100169]", + "exoN gene (nsp14) [GENEPIO:0100170]", + "nsp15 [GENEPIO:0100171]", + "nsp16 [GENEPIO:0100172]", + "orf3a [GENEPIO:0100173]", + "orf3b [GENEPIO:0100174]", + "orf6 (ns6) [GENEPIO:0100175]", + "orf7a [GENEPIO:0100176]", + "orf7b (ns7b) [GENEPIO:0100177]", + "orf8 (ns8) [GENEPIO:0100178]", + "orf9b [GENEPIO:0100179]", + "orf9c [GENEPIO:0100180]", + "orf10 [GENEPIO:0100181]", + "orf14 [GENEPIO:0100182]", + "SARS-COV-2 5' UTR [GENEPIO:0100183]", + "Other [NCIT:C124261]", + "Not Applicable [LOINC:LA4720-4]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "geo_loc_country": { + "enum": [ + "Afghanistan [GAZ:00006882]", + "Albania [GAZ:00002953]", + "Algeria [GAZ:00000563]", + "American Samoa [GAZ:00003957]", + "Andorra [GAZ:00002948]", + "Angola [GAZ:00001095]", + "Anguilla [GAZ:00009159]", + "Antarctica [GAZ:00000462]", + "Antigua and Barbuda [GAZ:00006883]", + "Argentina [GAZ:00002928]", + "Armenia [GAZ:00004094]", + "Aruba [GAZ:00004025]", + "Ashmore and Cartier Islands [GAZ:00005901]", + "Australia [GAZ:00000463]", + "Austria [GAZ:00002942]", + "Azerbaijan [GAZ:00004941]", + "Bahamas [GAZ:00002733]", + "Bahrain [GAZ:00005281]", + "Baker Island [GAZ:00007117]", + "Bangladesh [GAZ:00003750]", + "Barbados [GAZ:00001251]", + "Bassas da India [GAZ:00005810]", + "Belarus [GAZ:00006886]", + "Belgium [GAZ:00002938]", + "Belize [GAZ:00002934]", + "Benin [GAZ:00000904]", + "Bermuda [GAZ:00001264]", + "Bhutan [GAZ:00003920]", + "Bolivia [GAZ:00002511]", + "Borneo [GAZ:00025355]", + "Bosnia and Herzegovina [GAZ:00006887]", + "Botswana [GAZ:00001097]", + "Bouvet Island [GAZ:00001453]", + "Brazil [GAZ:00002828]", + "British Virgin Islands [GAZ:00003961]", + "Brunei [GAZ:00003901]", + "Bulgaria [GAZ:00002950]", + "Burkina Faso [GAZ:00000905]", + "Burundi [GAZ:00001090]", + "Cambodia [GAZ:00006888]", + "Cameroon [GAZ:00001093]", + "Canada [GAZ:00002560]", + "Cape Verde [GAZ:00001227]", + "Cayman Islands [GAZ:00003986]", + "Central African Republic [GAZ:00001089]", + "Chad [GAZ:00000586]", + "Chile [GAZ:00002825]", + "China [GAZ:00002845]", + "Christmas Island [GAZ:00005915]", + "Clipperton Island [GAZ:00005838]", + "Cocos Islands [GAZ:00009721]", + "Colombia [GAZ:00002929]", + "Comoros [GAZ:00005820]", + "Cook Islands [GAZ:00053798]", + "Coral Sea Islands [GAZ:00005917]", + "Costa Rica [GAZ:00002901]", + "Cote d'Ivoire [GAZ:00000906]", + "Croatia [GAZ:00002719]", + "Cuba [GAZ:00003762]", + "Curacao [GAZ:00012582]", + "Cyprus [GAZ:00004006]", + "Czech Republic [GAZ:00002954]", + "Democratic Republic of the Congo [GAZ:00001086]", + "Denmark [GAZ:00005852]", + "Djibouti [GAZ:00000582]", + "Dominica [GAZ:00006890]", + "Dominican Republic [GAZ:00003952]", + "Ecuador [GAZ:00002912]", + "Egypt [GAZ:00003934]", + "El Salvador [GAZ:00002935]", + "Equatorial Guinea [GAZ:00001091]", + "Eritrea [GAZ:00000581]", + "Estonia [GAZ:00002959]", + "Eswatini [GAZ:00001099]", + "Ethiopia [GAZ:00000567]", + "Europa Island [GAZ:00005811]", + "Falkland Islands [GAZ:00001412]", + "Faroe Islands [GAZ:00059206]", + "Fiji [GAZ:00006891]", + "Finland [GAZ:00002937]", + "France [GAZ:00003940]", + "French Guiana [GAZ:00002516]", + "French Polynesia [GAZ:00002918]", + "French Southern and Antarctic Lands [GAZ:00003753]", + "Gabon [GAZ:00001092]", + "Gambia [GAZ:00000907]", + "Gaza Strip [GAZ:00009571]", + "Georgia [GAZ:00004942]", + "Germany [GAZ:00002646]", + "Ghana [GAZ:00000908]", + "Gibraltar [GAZ:00003987]", + "Glorioso Islands [GAZ:00005808]", + "Greece [GAZ:00002945]", + "Greenland [GAZ:00001507]", + "Grenada [GAZ:02000573]", + "Guadeloupe [GAZ:00067142]", + "Guam [GAZ:00003706]", + "Guatemala [GAZ:00002936]", + "Guernsey [GAZ:00001550]", + "Guinea [GAZ:00000909]", + "Guinea-Bissau [GAZ:00000910]", + "Guyana [GAZ:00002522]", + "Haiti [GAZ:00003953]", + "Heard Island and McDonald Islands [GAZ:00009718]", + "Honduras [GAZ:00002894]", + "Hong Kong [GAZ:00003203]", + "Howland Island [GAZ:00007120]", + "Hungary [GAZ:00002952]", + "Iceland [GAZ:00000843]", + "India [GAZ:00002839]", + "Indonesia [GAZ:00003727]", + "Iran [GAZ:00004474]", + "Iraq [GAZ:00004483]", + "Ireland [GAZ:00002943]", + "Isle of Man [GAZ:00052477]", + "Israel [GAZ:00002476]", + "Italy [GAZ:00002650]", + "Jamaica [GAZ:00003781]", + "Jan Mayen [GAZ:00005853]", + "Japan [GAZ:00002747]", + "Jarvis Island [GAZ:00007118]", + "Jersey [GAZ:00001551]", + "Johnston Atoll [GAZ:00007114]", + "Jordan [GAZ:00002473]", + "Juan de Nova Island [GAZ:00005809]", + "Kazakhstan [GAZ:00004999]", + "Kenya [GAZ:00001101]", + "Kerguelen Archipelago [GAZ:00005682]", + "Kingman Reef [GAZ:00007116]", + "Kiribati [GAZ:00006894]", + "Kosovo [GAZ:00011337]", + "Kuwait [GAZ:00005285]", + "Kyrgyzstan [GAZ:00006893]", + "Laos [GAZ:00006889]", + "Latvia [GAZ:00002958]", + "Lebanon [GAZ:00002478]", + "Lesotho [GAZ:00001098]", + "Liberia [GAZ:00000911]", + "Libya [GAZ:00000566]", + "Liechtenstein [GAZ:00003858]", + "Line Islands [GAZ:00007144]", + "Lithuania [GAZ:00002960]", + "Luxembourg [GAZ:00002947]", + "Macau [GAZ:00003202]", + "Madagascar [GAZ:00001108]", + "Malawi [GAZ:00001105]", + "Malaysia [GAZ:00003902]", + "Maldives [GAZ:00006924]", + "Mali [GAZ:00000584]", + "Malta [GAZ:00004017]", + "Marshall Islands [GAZ:00007161]", + "Martinique [GAZ:00067143]", + "Mauritania [GAZ:00000583]", + "Mauritius [GAZ:00003745]", + "Mayotte [GAZ:00003943]", + "Mexico [GAZ:00002852]", + "Micronesia [GAZ:00005862]", + "Midway Islands [GAZ:00007112]", + "Moldova [GAZ:00003897]", + "Monaco [GAZ:00003857]", + "Mongolia [GAZ:00008744]", + "Montenegro [GAZ:00006898]", + "Montserrat [GAZ:00003988]", + "Morocco [GAZ:00000565]", + "Mozambique [GAZ:00001100]", + "Myanmar [GAZ:00006899]", + "Namibia [GAZ:00001096]", + "Nauru [GAZ:00006900]", + "Navassa Island [GAZ:00007119]", + "Nepal [GAZ:00004399]", + "Netherlands [GAZ:00002946]", + "New Caledonia [GAZ:00005206]", + "New Zealand [GAZ:00000469]", + "Nicaragua [GAZ:00002978]", + "Niger [GAZ:00000585]", + "Nigeria [GAZ:00000912]", + "Niue [GAZ:00006902]", + "Norfolk Island [GAZ:00005908]", + "North Korea [GAZ:00002801]", + "North Macedonia [GAZ:00006895]", + "North Sea [GAZ:00002284]", + "Northern Mariana Islands [GAZ:00003958]", + "Norway [GAZ:00002699]", + "Oman [GAZ:00005283]", + "Pakistan [GAZ:00005246]", + "Palau [GAZ:00006905]", + "Panama [GAZ:00002892]", + "Papua New Guinea [GAZ:00003922]", + "Paracel Islands [GAZ:00010832]", + "Paraguay [GAZ:00002933]", + "Peru [GAZ:00002932]", + "Philippines [GAZ:00004525]", + "Pitcairn Islands [GAZ:00005867]", + "Poland [GAZ:00002939]", + "Portugal [GAZ:00004126]", + "Puerto Rico [GAZ:00006935]", + "Qatar [GAZ:00005286]", + "Republic of the Congo [GAZ:00001088]", + "Reunion [GAZ:00003945]", + "Romania [GAZ:00002951]", + "Ross Sea [GAZ:00023304]", + "Russia [GAZ:00002721]", + "Rwanda [GAZ:00001087]", + "Saint Helena [GAZ:00000849]", + "Saint Kitts and Nevis [GAZ:00006906]", + "Saint Lucia [GAZ:00006909]", + "Saint Pierre and Miquelon [GAZ:00003942]", + "Saint Martin [GAZ:00005841]", + "Saint Vincent and the Grenadines [GAZ:02000565]", + "Samoa [GAZ:00006910]", + "San Marino [GAZ:00003102]", + "Sao Tome and Principe [GAZ:00006927]", + "Saudi Arabia [GAZ:00005279]", + "Senegal [GAZ:00000913]", + "Serbia [GAZ:00002957]", + "Seychelles [GAZ:00006922]", + "Sierra Leone [GAZ:00000914]", + "Singapore [GAZ:00003923]", + "Sint Maarten [GAZ:00012579]", + "Slovakia [GAZ:00002956]", + "Slovenia [GAZ:00002955]", + "Solomon Islands [GAZ:00005275]", + "Somalia [GAZ:00001104]", + "South Africa [GAZ:00001094]", + "South Georgia and the South Sandwich Islands [GAZ:00003990]", + "South Korea [GAZ:00002802]", + "South Sudan [GAZ:00233439]", + "Spain [GAZ:00003936]", + "Spratly Islands [GAZ:00010831]", + "Sri Lanka [GAZ:00003924]", + "State of Palestine [GAZ:00002475]", + "Sudan [GAZ:00000560]", + "Suriname [GAZ:00002525]", + "Svalbard [GAZ:00005396]", + "Swaziland [GAZ:00001099]", + "Sweden [GAZ:00002729]", + "Switzerland [GAZ:00002941]", + "Syria [GAZ:00002474]", + "Taiwan [GAZ:00005341]", + "Tajikistan [GAZ:00006912]", + "Tanzania [GAZ:00001103]", + "Thailand [GAZ:00003744]", + "Timor-Leste [GAZ:00006913]", + "Togo [GAZ:00000915]", + "Tokelau [GAZ:00260188]", + "Tonga [GAZ:00006916]", + "Trinidad and Tobago [GAZ:00003767]", + "Tromelin Island [GAZ:00005812]", + "Tunisia [GAZ:00000562]", + "Turkey [GAZ:00000558]", + "Turkmenistan [GAZ:00005018]", + "Turks and Caicos Islands [GAZ:00003955]", + "Tuvalu [GAZ:00009715]", + "USA [GAZ:00002459]", + "Uganda [GAZ:00001102]", + "Ukraine [GAZ:00002724]", + "United Arab Emirates [GAZ:00005282]", + "United Kingdom [GAZ:00002637]", + "Uruguay [GAZ:00002930]", + "Uzbekistan [GAZ:00004979]", + "Vanuatu [GAZ:00006918]", + "Venezuela [GAZ:00002931]", + "Viet Nam [GAZ:00003756]", + "Virgin Islands [GAZ:00003959]", + "Wake Island [GAZ:00007111]", + "Wallis and Futuna [GAZ:00007191]", + "West Bank [GAZ:00009572]", + "Western Sahara [GAZ:00000564]", + "Yemen [GAZ:00005284]", + "Zambia [GAZ:00001107]", + "Zimbabwe [GAZ:00001106]", + "Not Applicable [GENEPIO:0001619]", + "Not Collected [GENEPIO:0001620]", + "Missing [GENEPIO:0001618]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "geo_loc_state": { + "enum": [ + "Andalucía", + "Aragón", + "Canarias", + "Cantabria", + "Castilla - La Mancha", + "Castilla y León", + "Cataluña", + "Ceuta", + "Comunidad de Madrid", + "Comunidad Foral de Navarra", + "Comunitat Valenciana", + "Extremadura", + "Galicia", + "Illes Balears", + "La Rioja", + "Melilla", + "País Vasco", + "Principado de Asturias", + "Región de Murcia" + ] + }, + "geo_loc_region": { + "enum": [ + "Almería", + "Cádiz", + "Córdoba", + "Granada", + "Huelva", + "Jaén", + "Málaga", + "Sevilla", + "Huesca", + "Teruel", + "Zaragoza", + "Asturias", + "Illes Balears", + "Las Palmas", + "Santa Cruz de Tenerife", + "Cantabria", + "Ávila", + "Burgos", + "León", + "Palencia", + "Salamanca", + "Segovia", + "Soria", + "Valladolid", + "Zamora", + "Albacete", + "Ciudad Real", + "Cuenca", + "Guadalajara", + "Toledo", + "Barcelona", + "Girona", + "Lleida", + "Tarragona", + "Alicante/Alacant", + "Castellón/Castelló", + "Valencia/València", + "Badajoz", + "Cáceres", + "A Coruña", + "Lugo", + "Ourense", + "Pontevedra", + "Madrid", + "Murcia", + "Navarra", + "Araba/Álava", + "Gipuzkoa", + "Bizkaia", + "La Rioja", + "Ceuta", + "Melilla" + ] + }, + "study_type": { + "enum": [ + "Whole Genome Sequencing [SNOMED:51201000000109]", + "Metagenomics [LOINC:103566-6]", + "Transcriptome Analysis [GENEPIO:0001111", + "Resequencing [NCIT:C41254", + "Epigenetics [NCIT:C153190]", + "Synthetic Genomics [NCIT:C84343]", + "Forensic or Paleo-genomics [EDAM:3943]", + "Gene Regulation Study [EDAM:0204]", + "Cancer Genomics [NCIT:C18247]", + "Population Genomics [EDAM:3796]", + "RNASeq [OBI:0001177]", + "Exome Sequencing [LOINC:LP248469-1]", + "Pooled Clone Sequencing [OBI:2100402]", + "Transcriptome Sequencing [NCIT:C124261]", + "Other [NCIT:C17649]", + "Not Provided [SNOMED:434941000124101]" + ] + }, + "anatomical_material": { + "enum": [ + "Air specimen [SNOMED:446302006]", + "Amniotic Fluid [SNOMED:77012006]", + "Aqueous Humor [SNOMED:425460003]", + "Blood Clot [SNOMED:75753009]", + "Body Fluid [SNOMED:32457005]", + "Calculus [SNOMED:56381008]", + "Cerebrospinal Fluid [SNOMED:258450006]", + "Cerebrospinal Fluid [SNOMED:65216001]", + "Cyst Fluid [SNOMED:734110008]", + "Dialysate specimen [SNOMED:258454002]", + "Erythrocyte [SNOMED:41898006]", + "Fluid [SNOMED:255765007]", + "Intravenous Fluid [SNOMED:118431008]", + "Pericardial Fluid [SNOMED:34429004]", + "Placenta [SNOMED:258538002]", + "Platelet [SNOMED:16378004]", + "Pleural Fluid [SNOMED:2778004]", + "Synovial Fluid [SNOMED:6085005]", + "Tissue [UBERON:0000479]", + "Vitreous Humor [SNOMED:426101004]", + "Blood [LOINC:4226865]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "anatomical_part": { + "enum": [ + "Abdominal cavity [UBERON:0003684]", + "Articulation [UBERON:0004905]", + "Blood [LOINC:4226865]", + "Blood [SNOMED:87612001]", + "Bone [UBERON:0002481]", + "Bone marrow [UBERON:0002371]", + "Brain [UBERON:0000955]", + "Breast [UBERON:0000310]", + "Bronchus [UBERON:0002185]", + "Calcareous tooth [UBERON:0001091]", + "Cardiac valve [UBERON:0000946]", + "Conjunctiva [UBERON:0001811]", + "Cornea [UBERON:0000964]", + "Duodenum [UBERON:0002114]", + "Ear [UBERON:0001690]", + "Endometrium [UBERON:0001295]", + "Entire head and neck [SNOMED:361355005]", + "Epidural space [UBERON:0003691]", + "Esophagus [UBERON:0001043]", + "Fascia [UBERON:0008982]", + "Gallbladder [UBERON:0002110]", + "Glans penis [UBERON:0001299]", + "Intervertebral disc [UBERON:0001066]", + "Intestine [UBERON:0000160]", + "Liver [UBERON:0002107]", + "Lung [UBERON:0002048]", + "Lymph node [UBERON:0000029]", + "Mayor vestibular gland [UBERON:0000460]", + "Mediastinum [UBERON:0003728]", + "Middle ear [UBERON:0001756]", + "Mouth [UBERON:0000165]", + "Muscle organ [UBERON:0001630]", + "Nail [UBERON:0001705]", + "Nasopharynx [UBERON:0003582]", + "Oropharynx [UBERON:0001729]", + "Pericardial sac [UBERON:0002406]", + "Peritoneal cavity [UBERON:0001179]", + "Pleura [UBERON:0000977]", + "Pleural cavity [UBERON:0002402]", + "Skin of body [UBERON:0002097]", + "Skin ulcer [SNOMED:46742003]", + "Soft tissue [SNOMED:87784001]", + "Stomach [UBERON:0000945]", + "Synovial joint [UBERON:0002217]", + "Ureter [UBERON:0000056]", + "Vagina [UBERON:0000996]", + "Larynx [UBERON:0001737]", + "Rectum [UBERON:0001052]", + "Urethra [UBERON:0000057]", + "Endocervix [UBERON:0000458]", + "Prostate gland [UBERON:0002367]", + "Uterus [UBERON:0000995]", + "Kidney [UBERON:0002113]", + "Nose [UBERON:0000004]", + "Mammalian vulva [UBERON:0000997]", + "Lower respiratory tract [SNOMED:447081004]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "collection_method": { + "enum": [ + "Amniocentesis [SNOMED:34536000]", + "Suprapublic Aspiration [GENEPIO:0100028]", + "Tracheal Aspiration [GENEPIO:0100029]", + "Vacuum Aspiration [NCIT:C93274]", + "Needle Biopsy [SNOMED:129249002]", + "Filtration [SNOMED:702940009]", + "Lavage [NCIT:C38068]", + "Aspiration [SNOMED:14766002]", + "Biopsy [SNOMED:86273004]", + "Bronchoalveolar Lavage [SNOMED:258607008]", + "Drainage procedure [SNOMED:122462000]", + "Scraping [SNOMED:56757003]", + "Swab [SNOMED:408098004]", + "Wash [SNOMED:258610001]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "body_product": { + "enum": [ + "Breast Milk [SNOMED:226789007]", + "Feces [SNOMED:39477002]", + "Mucus [SNOMED:49909006]", + "Sweat [SNOMED:74616000]", + "Tear [LOINC:LP7622-6]", + "Bile [SNOMED:70150004]", + "Blood [LOINC:4226865]", + "Lochia [SNOMED:49636006]", + "Meconium [UBERON:0007109]", + "Plasma [SNOMED:50863008]", + "Pus [SNOMED:11311000]", + "Serum [SNOMED:67922002]", + "Sputum [SNOMED:45710003]", + "Urine [LOINC:LA30054-3]", + "Tonsil [UBERON:0002372]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "host_scientific_name": { + "enum": [ + "Bos taurus [SNOMED:34618005]", + "Canis lupus familiaris [SNOMED:125079008]", + "Chiroptera [SNOMED:388074005]", + "Columbidae [SNOMED:107099008]", + "Felis catus [SNOMED:448169003]", + "Gallus gallus [SNOMED:47290002]", + "Homo sapiens [SNOMED:337915000]", + "Manis [SNOMED:43739001]", + "Manis javanica [SNOMED:330131000009103]", + "Neovison vison [SNOMED:447523007]", + "Panthera leo [SNOMED:112507006]", + "Panthera tigris [SNOMED:79047009]", + "Rhinolophidae [SNOMED:392085002]", + "Rhinolophus affinis [NCBITaxon:59477]", + "Sus scrofa domesticus [SNOMED:331171000009105]", + "Viverridae [SNOMED:388833006]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]" + ] + }, + "host_disease": { + "enum": [ + "COVID-19 [SNOMED:840539006]", + "Respiratory Syncytial Virus Infection [SNOMED:55735004]", + "Influenza Infection [SNOMED:408687004]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "purpose_of_sequencing": { + "enum": [ + "Baseline surveillance (random sampling) [GENEPIO:0100005]", + "Targeted surveillance (non-random sampling) [GENEPIO:0100006]", + "Priority surveillance projects [GENEPIO:0100007]", + "Screening for Variants of Concern (VOC) [GENEPIO:0100008]", + "Sample has epidemiological link to Variant of Concern (VoC) [GENEPIO:0100273]", + "Sample has epidemiological link to Omicron Variant [GENEPIO:0100274]", + "Longitudinal surveillance (repeat sampling of individuals) [GENEPIO:0100009]", + "Re-infection surveillance [GENEPIO:0100010]", + "Vaccine escape surveillance [GENEPIO:0100011]", + "Travel-associated surveillance [GENEPIO:0100012]", + "Domestic travel surveillance [GENEPIO:0100013]", + "Interstate/ interprovincial travel surveillance [GENEPIO:0100275]", + "Intra-state/ intra-provincial travel surveillance [GENEPIO:0100276]", + "International travel surveillance [GENEPIO:0100014]", + "Surveillance of international border crossing by air travel or ground transport [GENEPIO:0100015]", + "Surveillance of international border crossing by air travel [GENEPIO:0100016]", + "Surveillance of international border crossing by ground transport [GENEPIO:0100017]", + "Surveillance from international worker testing [GENEPIO:0100018]", + "Cluster/Outbreak investigation [GENEPIO:0100001]", + "Multi-jurisdictional outbreak investigation [GENEPIO:0100020]", + "Intra-jurisdictional outbreak investigation [GENEPIO:0100021]", + "Research [LOINC:LP173021-9]", + "Viral passage experiment [GENEPIO:0100023]", + "Protocol testing [GENEPIO:0100024]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ] + }, + "sequencing_instrument_platform": { + "enum": [ + "Oxford Nanopore [OBI:0002750]", + "Illumina [OBI:0000759]", + "Ion Torrent [GENEPIO:0002683]", + "PacBio [GENEPIO:0001927]", + "BGI [GENEPIO:0004324]", + "MGI [GENEPIO:0004325]", + "Other [NCIT:C17649]", + "Not Provided [SNOMED:434941000124101]" + ] + }, + "commercial_open_source_both": { + "enum": [ + "Commercial [SWO:1000002]", + "Open Source [SWO:1000008]", + "Both", + "None", + "Not Provided [SNOMED:434941000124101", + "Not Applicable [GENEPIO:0001619]" + ] + }, + "variant_designation": { + "enum": [ + "Variant of Interest (VOI) [GENEPIO:0100083]", + "Variant of Concern (VOC) [GENEPIO:0100082]", + "Variant Under Monitoring (VUM) [GENEPIO:0100279]", + "Not Provided [SNOMED:434941000124101]", + "Not Applicable [GENEPIO:0001619]" + ] + }, + "file_format": { + "enum": [ + "BAM [EDAM:2572]", + "CRAM [EDAM:3462]", + "FASTQ [EDAM:1930]", + "FASTA [EDAM:1929]", + "Not Provided [SNOMED:434941000124101]" + ] + } + } + }, "anyOf": [ { "required": [ From 83516e6236939371144bbf65a462358cce6fb056 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Mon, 15 Dec 2025 12:30:36 +0100 Subject: [PATCH 006/110] linted code --- relecov_tools/build_schema.py | 46 ++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 127d703f..07df2107 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -314,7 +314,6 @@ def validate_database_definition(self, json_data): ] log_errors["duplicate_enums"][prop_name] = duplicates - # Check for missing examples example = prop_features.get("examples") if example is None: @@ -481,10 +480,12 @@ def handle_nan(value): items = value.split("; ") if remove_ontology and target_key == "enum": items = [re.sub(r"\s*\[.*?\]", "", item).strip() for item in items] + json_dict[target_key] = items elif target_key == "description": json_dict[target_key] = handle_nan(data_dict.get(target_key, "")).strip() - if (not json_dict[target_key].endswith(".") - and not json_dict["description"].endswith(")")): + if not json_dict[target_key].endswith(".") and not json_dict[ + "description" + ].endswith(")"): json_dict[target_key] = f"{json_dict[target_key]}." else: json_dict[target_key] = handle_nan(data_dict.get(target_key, "")) @@ -582,9 +583,7 @@ def build_new_schema(self, json_data, schema_draft): common_lab_enum = "; ".join(self._lab_uniques["collecting_institution"]) # Define "$defs" property. This will hold all enum values for all the properties. - definitions = { - "enums": {} - } + definitions = {"enums": {}} # Read property_ids in the database. # Perform checks and create (for each property) feature object like: @@ -599,9 +598,7 @@ def build_new_schema(self, json_data, schema_draft): "submitting_institution", "sequencing_institution", ): - definitions["enums"][property_id] = { - "enum": common_lab_enum - } + definitions["enums"][property_id] = {"enum": common_lab_enum} # Parse property_ids that needs to be incorporated as complex fields in json_schema if json_data[property_id].get("complex_field (Y/N)") == "Y": @@ -659,9 +656,7 @@ def build_new_schema(self, json_data, schema_draft): ) if enums_value: definitions["enums"][property_id] = enums_value - reference = { - "$ref": f"#/$defs/enums/{property_id}" - } + reference = {"$ref": f"#/$defs/enums/{property_id}"} schema_property.update(reference) elif db_feature_key == "examples": examples_value = self.standard_jsonschema_object( @@ -670,8 +665,13 @@ def build_new_schema(self, json_data, schema_draft): if db_features_dic["type"] in ("integer", "number"): # Examples for integer/number fields should be consistent. try: - examples_value[db_feature_key] = [float(x) for x in examples_value[db_feature_key]] - examples_value[db_feature_key] = [int(x) if x.is_integer() else x for x in examples_value[db_feature_key]] + examples_value[db_feature_key] = [ + float(x) for x in examples_value[db_feature_key] + ] + examples_value[db_feature_key] = [ + int(x) if x.is_integer() else x + for x in examples_value[db_feature_key] + ] except ValueError: pass schema_property[schema_feature_key] = examples_value[ @@ -913,6 +913,7 @@ def create_metadatalab_excel(self, json_schema): ] required_properties = set(json_schema.get("required", [])) schema_properties = json_schema.get("properties") + enum_defs = json_schema.get("$defs", {}).get("enums", {}) try: schema_properties_flatten = relecov_tools.assets.schema_utils.metadatalab_template.schema_to_flatten_json( @@ -942,11 +943,18 @@ def create_metadatalab_excel(self, json_schema): def clean_ontologies(enums): return [re.sub(r"\s*\[.*?\]", "", item).strip() for item in enums] - df["enum"] = df["enum"].apply( - lambda enum_list: ( - clean_ontologies(enum_list) - if isinstance(enum_list, list) - else enum_list + def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: + property_id = ref.split("/")[-1] + values = enum_defs[property_id]["enum"] + return ( + clean_ontologies(values) if isinstance(values, list) else values + ) + + df["enum"] = df["$ref"].apply( + lambda row: ( + resolve_enum_ref(row, enum_defs=enum_defs) + if not pd.isna(row) + else row ) ) common_dropdown = self._lab_dropdowns["collecting_institution"] From 5c29d227a90755133561233aeee534102a73a24c Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Mon, 15 Dec 2025 12:48:00 +0100 Subject: [PATCH 007/110] Updated CHANGELOG --- CHANGELOG.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 96595f59..e188caec 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,26 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.7.5dev] - 2025-XX-XX : + +### Credits + +- [Enrique Sapena](https://github.com/ESapenaVentura) + +#### Added enhancements + +- Added handling of $refs for enums and typo fixing/style formatting for build_schema module [#844](https://github.com/BU-ISCIII/relecov-tools/pull/844) + +#### Fixes + +- Fix small bug on type/examples consistency for float/integer fields in JSON schema generation (build_schema module) [#844](https://github.com/BU-ISCIII/relecov-tools/pull/844) + +#### Changed + +#### Removed + +### Requirements + ## [1.7.4] - 2025-12-15 : ### Credits From 40116adcceb87ba7d295b86d1742febf04160fe8 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Mon, 15 Dec 2025 12:50:37 +0100 Subject: [PATCH 008/110] F541 linting error solved --- relecov_tools/build_schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 07df2107..7fdbaedf 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -317,7 +317,7 @@ def validate_database_definition(self, json_data): # Check for missing examples example = prop_features.get("examples") if example is None: - log_errors["missing_examples"][prop_name] = [f"Missing example."] + log_errors["missing_examples"][prop_name] = ["Missing example."] feature_type = prop_features["type"] match feature_type: From 995f5013b07502d322dff24222a1ca20d086226b Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Tue, 16 Dec 2025 12:11:02 +0100 Subject: [PATCH 009/110] Fixed catching empty enum def for individual properties --- relecov_tools/build_schema.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 7fdbaedf..be7b3a15 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -945,7 +945,12 @@ def clean_ontologies(enums): def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: property_id = ref.split("/")[-1] - values = enum_defs[property_id]["enum"] + try: + values = enum_defs[property_id]["enum"] + except KeyError: + self.log.error(f"Error finding enum for property '{property_id}'; not found in $defs") + stderr.print(f"[red]Error finding enum for property '{property_id}'; not found in $defs") + return [] return ( clean_ontologies(values) if isinstance(values, list) else values ) From 783f862a40bc8e8894ee01bfc597ca2ab4e35759 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Thu, 18 Dec 2025 17:34:31 +0100 Subject: [PATCH 010/110] Fixed black linting error --- relecov_tools/build_schema.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index be7b3a15..bba49d61 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -948,8 +948,12 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: try: values = enum_defs[property_id]["enum"] except KeyError: - self.log.error(f"Error finding enum for property '{property_id}'; not found in $defs") - stderr.print(f"[red]Error finding enum for property '{property_id}'; not found in $defs") + self.log.error( + f"Error finding enum for property '{property_id}'; not found in $defs" + ) + stderr.print( + f"[red]Error finding enum for property '{property_id}'; not found in $defs" + ) return [] return ( clean_ontologies(values) if isinstance(values, list) else values From b34905e7bb17bc57ebf0503942cc457efdc4b699 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 19 Dec 2025 09:49:20 +0100 Subject: [PATCH 011/110] re-factor build_new_schema --- relecov_tools/build_schema.py | 356 ++++++++++++++++++---------------- 1 file changed, 188 insertions(+), 168 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index bba49d61..59876aed 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -452,9 +452,9 @@ def create_schema_draft_template(self): ) ) return draft_template - + """ def standard_jsonschema_object(self, data_dict, target_key, remove_ontology=False): - """ + Create a standard JSON Schema object for a given key in the data dictionary. Args: @@ -463,7 +463,7 @@ def standard_jsonschema_object(self, data_dict, target_key, remove_ontology=Fals Returns: json_dict (dict): The JSON Schema object for the target key. - """ + # For enum and examples, wrap the value in a list json_dict = {} @@ -473,6 +473,8 @@ def handle_nan(value): return "" return str(value) + + if target_key in ["enum", "examples"]: value = handle_nan(data_dict.get(target_key, "")) # if no value, json key won't be necessary, then avoid adding it @@ -490,6 +492,7 @@ def handle_nan(value): else: json_dict[target_key] = handle_nan(data_dict.get(target_key, "")) return json_dict + """ # TODO: needs validation def complex_jsonschema_object(self, property_id, features_dict): @@ -522,7 +525,7 @@ def complex_jsonschema_object(self, property_id, features_dict): if json_key == "required": continue feature_schema = self.standard_jsonschema_object( - complex_json_data[sub_property_id], db_feature_key + sub_property_id, complex_json_data[sub_property_id], db_feature_key ) if feature_schema: complex_json_feature[json_key] = feature_schema[db_feature_key] @@ -538,188 +541,205 @@ def complex_jsonschema_object(self, property_id, features_dict): json_dict["required"] = required_fields return json_dict + + def standard_jsonschema_object(self, property_id, property_feature_key: str, value: any[str, int, float, pd.NaN], clean_ontologies=False): + """ + Process a property from the resulting JSON from - def build_new_schema(self, json_data, schema_draft): + Args: + property_id (_type_): _description_ + value (_type_): _description_ + clean_ontologies (bool, optional): _description_. Defaults to False. + + Returns: + _type_: _description_ """ - Build a new JSON Schema based on the provided JSON data and draft template. + + # Function to handle NaN values + def handle_nan(value): + if pd.isna(value) or value in ["nan", "NaN", "None", "none"]: + return "" + return str(value) + + jsonschema_value = {} + #value = handle_nan(value) + match property_feature_key, value: + case "options", str(value): + options_list = [option.split(":") for option in value.split(",")] + # Handling minLengh, minimum, maximum etc + for key, value in options_list: + key = key.strip() + value = value.strip() + try: + value = float(value) + value = int(value) if value.is_integer() else value + except ValueError: + pass + jsonschema_value[key] = value + case "examples", str(value): + jsonschema_value = {property_feature_key: value.split("; ")} + # KNOWN ISSUE: MORE THAN 1 EXAMPLE WILL BE TREATED AS STRING + # Known not a solution: if parse string, some str examples are parsed as int/number + case "examples", int(value) | float(value): + value = float(value) + value = [int(value) if value.is_integer() else value] + jsonschema_value = {property_feature_key: value} + case "enum", str(enums): + jsonschema_value = {"$ref": f"#/$defs/enums/{property_id}"} + case _, value if not pd.isna(value): + # Non-serializable JSON values (e.g. datetimes) + try: + json.dumps(value) + except (TypeError, OverflowError): + value = str(value) + jsonschema_value = {property_feature_key: value} + case _, _: + pass + + return jsonschema_value + + def handle_properties(self, json_data: dict) -> list[dict, list[str]]: + schema_property = {} + required_property = [] + definitions = {"$defs": {"enums": {}}} + + # List of properties to check in the features dictionary (it maps values between database features and json schema features): + # key[db_feature_key]: value[schema_feature_key] + # TODO mapping_features should be part of a config file, and this way it could be specific to each project (Maybe part of configJson?) + mapping_features = { + "enum": "enum", + "examples": "examples", + "ontology_id": "ontology", + "type": "type", + "options": "options", + "description": "description", + "classification": "classification", + "label_name": "label", + "fill_mode": "fill_mode", + "required (Y/N)": "required", + "submitting_lab_form": "header", + } + exclude_fields = ["required (Y/N)", "submitting_lab_form"] + # Flag property values that belong outside the property: + # - is_required: if required, goes to root 'required' keyword + # - has_enum: if there is an enum, store it for '$defs' + for property_id, db_features_dic in json_data.items(): + is_required = True if db_features_dic.get("required (Y/N)", "") == "Y" else False + has_enum = db_features_dic.get("enum", False) + + # Create empty placeholder + schema_property[property_id] = {} + # If property is complex, call build schema again; else, continue function + is_complex = True if db_features_dic.get("complex_field (Y/N)", "") == "Y" else False + # FIXME CHECK HOW COMPLEX JSON_DATA IS HANDLED IN MEPRAM SCHEMA, but recursion should suffice + if is_complex: + schema_draft = self.create_schema_draft_template() + complex_json_feature = self.build_new_schema(db_features_dic, schema_draft, root_schema=False) + if complex_json_feature: + schema_property["type"] = "array" + schema_property["items"] = complex_json_feature + else: + for db_feature_key, db_feature_value in db_features_dic.items(): + if db_feature_key in exclude_fields: + continue + # Extra check to avoid non-mapping properties. Aun queda por evitar que se metan propiedades (e.g. required (Y/N)) + if db_feature_key in mapping_features: + std_json_feature = self.standard_jsonschema_object(property_id, db_feature_key, db_feature_value) + if std_json_feature: + schema_property[property_id].update(std_json_feature) + + # If flag was set, update values accordingly per property + if is_required: + required_property.append(property_id) + + # TODO: FIX THIS CHECK, FOR SOME REASON NAN does this shit + if isinstance(has_enum, str): + enum = [value.strip() for value in has_enum.split("; ")] + definitions["$defs"]["enums"][property_id] = {} + definitions["$defs"]["enums"][property_id]["enum"] = enum + + # Just to be completely sure, but it should be unique + required_property = list(set(required_property)) + + + return schema_property, required_property, definitions + + def schema_build_all_of(self, json_data): + + all_of_base = [] + + # Generate all the anyOf within + all_any_of = [] + conditional_required = {key: value["conditional_required_group"].strip() + for key, value in json_data.items() + if not pd.isna(value["conditional_required_group"])} + groups = list(set(conditional_required.values())) + conditional_required_by_group = {group: [key for key in conditional_required.keys() + if conditional_required[key] == group] + for group in groups} + for group, keys in conditional_required_by_group.items(): + any_of = [{"required": [key]} for key in keys] + all_any_of.append({"anyOf": any_of}) + + all_of_base.extend(all_any_of) + + # For future: generate if_then within (for required props when specific value) + # FUTURE: all_of_base.extend(all_if_then) + + return all_of_base + + + def build_new_schema(self, json_data, schema_draft, root_schema=True): + """ + Build a new JSON Schema based on the provided JSON data and draft template, in three stages: + - Pre-properties: all the operations needed prior to handling the properties (e.g. creation of root properties) + - properties: handling both simple and complex properties on a separate function + - Post-properties: All the operations needed after handling properties (e.g. defining which properties are required) Parameters: json_data (dict): Dictionary containing the properties and values of the database definition. schema_draft (dict): The JSON Schema draft template. + root_schema(bool): True if is root of schema, False if not (e.g. complex property generation) Returns: schema_draft (dict): The newly created JSON Schema. """ - # Fill schema header - # FIXME: it gets 'relecov-tools' instead of RELECOV - new_schema = schema_draft - project_name = relecov_tools.utils.get_package_name() - new_schema["$id"] = relecov_tools.utils.get_schema_url() - new_schema["title"] = f"{project_name} Schema." - new_schema["description"] = ( - f"Json Schema that specifies the structure, content, and validation rules for {project_name}" - ) - new_schema["version"] = self.version + # Pre-properties + if root_schema: + # Fill schema header + # FIXME: it gets 'relecov-tools' instead of RELECOV + new_schema = schema_draft + project_name = relecov_tools.utils.get_package_name() + new_schema["$id"] = relecov_tools.utils.get_schema_url() + new_schema["title"] = f"{project_name} Schema." + new_schema["description"] = ( + f"Json Schema that specifies the structure, content, and validation rules for {project_name}" + ) + new_schema["version"] = self.version # Fill schema properties + # Properties try: - # List of properties to check in the features dictionary (it maps values between database features and json schema features): - # key[db_feature_key]: value[schema_feature_key] - mapping_features = { - "enum": "enum", - "examples": "examples", - "ontology_id": "ontology", - "type": "type", - "options": "options", - "description": "description", - "classification": "classification", - "label_name": "label", - "fill_mode": "fill_mode", - "required (Y/N)": "required", - "submitting_lab_form": "header", - } - required_property_unique = [] - - common_lab_enum = "; ".join(self._lab_uniques["collecting_institution"]) + properties, required, defs = self.handle_properties(json_data) + except Exception as e: + self.log.error(f"Error building properties: {str(e)}") + stderr.print(f"[red]Error building properties: {str(e)}") + raise e from e - # Define "$defs" property. This will hold all enum values for all the properties. - definitions = {"enums": {}} + # Post-properties + # Finally, send schema_property object to the new json schema draft. + new_schema["properties"] = properties + new_schema["required"] = required + new_schema.update(defs) - # Read property_ids in the database. - # Perform checks and create (for each property) feature object like: - # {'example':'A', 'ontology': 'B'...}. - # Finally this objet will be written to the new schema. - for property_id, db_features_dic in json_data.items(): - schema_property = {} - required_property = {} + # Build the allOf keyword + all_of = self.schema_build_all_of(json_data) + new_schema["allOf"] = all_of - if property_id in ( - "collecting_institution", - "submitting_institution", - "sequencing_institution", - ): - definitions["enums"][property_id] = {"enum": common_lab_enum} + # Future: Here it can be extended to build other keywords at the end following the example above - # Parse property_ids that needs to be incorporated as complex fields in json_schema - if json_data[property_id].get("complex_field (Y/N)") == "Y": - complex_json_feature = self.complex_jsonschema_object( - property_id, mapping_features - ) - if complex_json_feature: - schema_property["type"] = "array" - schema_property["items"] = complex_json_feature - schema_property["additionalProperties"] = False - # For those that follows standard format, add them to json schema as well. - else: - for db_feature_key, schema_feature_key in mapping_features.items(): - # Verifiy that db_feature_key is present in the database (processed excel (aka 'json_data')) - if db_feature_key not in db_features_dic: - self.log.info( - f"Feature {db_feature_key} is not present in database ({self.excel_file_path})" - ) - stderr.print( - f"[INFO] Feature {db_feature_key} is not present in database ({self.excel_file_path})" - ) - continue - if ( - "required" in db_feature_key - or "required" == schema_feature_key - ): - is_required = str(db_features_dic[db_feature_key]) - if is_required != "nan": - required_property[property_id] = is_required - elif db_feature_key == "options": - options_value = str( - db_features_dic.get("options", "") - ).strip() - if options_value: - options_dict = {} - options_list = options_value.split(",") - - for option in options_list: - key_value = option.split(":") - if len(key_value) == 2: - key = key_value[0].strip() - value = key_value[1].strip() - try: - if "." in value: - value = float(value) - else: - value = int(value) - except ValueError: - pass - options_dict[key] = value - schema_property.update(options_dict) - elif db_feature_key == "enum": - enums_value = self.standard_jsonschema_object( - db_features_dic, db_feature_key, remove_ontology=False - ) - if enums_value: - definitions["enums"][property_id] = enums_value - reference = {"$ref": f"#/$defs/enums/{property_id}"} - schema_property.update(reference) - elif db_feature_key == "examples": - examples_value = self.standard_jsonschema_object( - db_features_dic, db_feature_key, remove_ontology=False - ) - if db_features_dic["type"] in ("integer", "number"): - # Examples for integer/number fields should be consistent. - try: - examples_value[db_feature_key] = [ - float(x) for x in examples_value[db_feature_key] - ] - examples_value[db_feature_key] = [ - int(x) if x.is_integer() else x - for x in examples_value[db_feature_key] - ] - except ValueError: - pass - schema_property[schema_feature_key] = examples_value[ - db_feature_key - ] - else: - std_json_feature = self.standard_jsonschema_object( - db_features_dic, db_feature_key, remove_ontology=False - ) - if std_json_feature: - schema_property[schema_feature_key] = std_json_feature[ - db_feature_key - ] - else: - continue - # Finally, send schema_property object to the new json schema draft. - new_schema["properties"][property_id] = schema_property - - # Add to schema draft the recorded porperty_ids. - for key, values in required_property.items(): - if values == "Y": - required_property_unique.append(key) - # TODO: So far it appears at the end of the new json schema. Ideally it should be placed before the properties statement. - new_schema["required"] = required_property_unique - new_schema["$defs"] = definitions - grouped_anyof = {} - - for prop_id, prop_data in json_data.items(): - group = str(prop_data.get("conditional_required_group", "")).strip() - if group and group.lower() != "nan": - grouped_anyof.setdefault(group, []).append(prop_id) - anyof_rules = [] - for props in grouped_anyof.values(): - if len(props) >= 1: - anyof_rules.extend([{"required": [prop]} for prop in props]) - for prop in props: - if prop in required_property_unique: - required_property_unique.remove(prop) - if anyof_rules: - new_schema["anyOf"] = anyof_rules - - # Return new schema - return new_schema - except Exception as e: - self.log.error(f"Error building schema: {str(e)}") - stderr.print(f"[red]Error building schema: {str(e)}") - raise + return new_schema def verify_schema(self, schema): """ From a3bfc0b5de25fd6213d7452a0ace31f4e143aff0 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 19 Dec 2025 10:55:23 +0100 Subject: [PATCH 012/110] fixed minor typo --- relecov_tools/build_schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 59876aed..39bdaf8b 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -652,7 +652,7 @@ def handle_properties(self, json_data: dict) -> list[dict, list[str]]: if is_required: required_property.append(property_id) - # TODO: FIX THIS CHECK, FOR SOME REASON NAN does this shit + # TODO: FIX THIS CHECK, FOR SOME REASON NAN does this if isinstance(has_enum, str): enum = [value.strip() for value in has_enum.split("; ")] definitions["$defs"]["enums"][property_id] = {} From 41d2b7bd294be228484673a5ea1018196ba4af59 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 19 Dec 2025 12:59:33 +0100 Subject: [PATCH 013/110] Now works with mepram schema (complex properties) --- relecov_tools/build_schema.py | 38 +++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 39bdaf8b..f9b36830 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -633,11 +633,21 @@ def handle_properties(self, json_data: dict) -> list[dict, list[str]]: is_complex = True if db_features_dic.get("complex_field (Y/N)", "") == "Y" else False # FIXME CHECK HOW COMPLEX JSON_DATA IS HANDLED IN MEPRAM SCHEMA, but recursion should suffice if is_complex: - schema_draft = self.create_schema_draft_template() - complex_json_feature = self.build_new_schema(db_features_dic, schema_draft, root_schema=False) + # TODO check with team if we want more basic info in subschema (e.g. title) + schema_draft = { + "type": "object", + "properties": {}, + "required": [] + } + subschema = self.read_database_definition(property_id) + complex_json_feature = self.build_new_schema(subschema, schema_draft, root_schema=False) if complex_json_feature: - schema_property["type"] = "array" - schema_property["items"] = complex_json_feature + # I don't fully like this: enums this way wouldn't be fully unique (defs are identified by non-unique key) + if complex_json_feature.get("$defs"): + definitions.update(complex_json_feature["$defs"]) + complex_json_feature.pop("$defs") + schema_property[property_id]["type"] = "array" + schema_property[property_id]["items"] = complex_json_feature else: for db_feature_key, db_feature_value in db_features_dic.items(): if db_feature_key in exclude_fields: @@ -657,7 +667,7 @@ def handle_properties(self, json_data: dict) -> list[dict, list[str]]: enum = [value.strip() for value in has_enum.split("; ")] definitions["$defs"]["enums"][property_id] = {} definitions["$defs"]["enums"][property_id]["enum"] = enum - + # Just to be completely sure, but it should be unique required_property = list(set(required_property)) @@ -670,9 +680,9 @@ def schema_build_all_of(self, json_data): # Generate all the anyOf within all_any_of = [] - conditional_required = {key: value["conditional_required_group"].strip() + conditional_required = {key: value.get("conditional_required_group").strip() for key, value in json_data.items() - if not pd.isna(value["conditional_required_group"])} + if not pd.isna(value.get("conditional_required_group"))} groups = list(set(conditional_required.values())) conditional_required_by_group = {group: [key for key in conditional_required.keys() if conditional_required[key] == group] @@ -705,10 +715,10 @@ def build_new_schema(self, json_data, schema_draft, root_schema=True): schema_draft (dict): The newly created JSON Schema. """ # Pre-properties + new_schema = schema_draft if root_schema: # Fill schema header # FIXME: it gets 'relecov-tools' instead of RELECOV - new_schema = schema_draft project_name = relecov_tools.utils.get_package_name() new_schema["$id"] = relecov_tools.utils.get_schema_url() new_schema["title"] = f"{project_name} Schema." @@ -724,18 +734,20 @@ def build_new_schema(self, json_data, schema_draft, root_schema=True): except Exception as e: self.log.error(f"Error building properties: {str(e)}") stderr.print(f"[red]Error building properties: {str(e)}") - raise e from e + raise e # Post-properties # Finally, send schema_property object to the new json schema draft. new_schema["properties"] = properties - new_schema["required"] = required - new_schema.update(defs) + if required: + new_schema["required"] = required + if defs: + new_schema.update(defs) # Build the allOf keyword all_of = self.schema_build_all_of(json_data) - new_schema["allOf"] = all_of - + if all_of: + new_schema["allOf"] = all_of # Future: Here it can be extended to build other keywords at the end following the example above From 46498d4699223cff0a6e24b1afc59c19e3a86a75 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 19 Dec 2025 13:43:27 +0100 Subject: [PATCH 014/110] Fixed typing error --- relecov_tools/build_schema.py | 91 +---------------------------------- 1 file changed, 1 insertion(+), 90 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index f9b36830..8ea13129 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -452,97 +452,8 @@ def create_schema_draft_template(self): ) ) return draft_template - """ - def standard_jsonschema_object(self, data_dict, target_key, remove_ontology=False): - - Create a standard JSON Schema object for a given key in the data dictionary. - - Args: - data_dict (dict): The data dictionary containing the properties. - target_key (str): The key for which to create the JSON Schema object. - - Returns: - json_dict (dict): The JSON Schema object for the target key. - - # For enum and examples, wrap the value in a list - json_dict = {} - - # Function to handle NaN values - def handle_nan(value): - if pd.isna(value) or value in ["nan", "NaN", "None", "none"]: - return "" - return str(value) - - - - if target_key in ["enum", "examples"]: - value = handle_nan(data_dict.get(target_key, "")) - # if no value, json key won't be necessary, then avoid adding it - if len(value) > 0 or target_key == "examples": - items = value.split("; ") - if remove_ontology and target_key == "enum": - items = [re.sub(r"\s*\[.*?\]", "", item).strip() for item in items] - json_dict[target_key] = items - elif target_key == "description": - json_dict[target_key] = handle_nan(data_dict.get(target_key, "")).strip() - if not json_dict[target_key].endswith(".") and not json_dict[ - "description" - ].endswith(")"): - json_dict[target_key] = f"{json_dict[target_key]}." - else: - json_dict[target_key] = handle_nan(data_dict.get(target_key, "")) - return json_dict - """ - - # TODO: needs validation - def complex_jsonschema_object(self, property_id, features_dict): - """ - Create a complex (nested) JSON Schema object for a given property ID. - - Args: - property_id (str): The ID of the property for which to create the JSON Schema object. - features_dict (dict): A dictionary mapping database features to JSON Schema features. - - Returns: - json_dict (dict): The complex JSON Schema object. - """ - json_dict = {"type": "object", "properties": {}} - required_fields = [] - - # Read tab-dedicated sheet in excell database - try: - complex_json_data = self.read_database_definition(sheet_id=property_id) - except ValueError as e: - self.log.error(f"{e}") - stderr.print(f"[yellow]{e}") - return None - - # Add sub property items - for sub_property_id, _ in complex_json_data.items(): - json_dict["properties"][sub_property_id] = {} - complex_json_feature = {} - for db_feature_key, json_key in features_dict.items(): - if json_key == "required": - continue - feature_schema = self.standard_jsonschema_object( - sub_property_id, complex_json_data[sub_property_id], db_feature_key - ) - if feature_schema: - complex_json_feature[json_key] = feature_schema[db_feature_key] - json_dict["properties"][sub_property_id] = complex_json_feature - - required_flag = str( - complex_json_data[sub_property_id].get("required (Y/N)", "") - ).strip() - if required_flag.upper() == "Y": - required_fields.append(sub_property_id) - - if required_fields: - json_dict["required"] = required_fields - - return json_dict - def standard_jsonschema_object(self, property_id, property_feature_key: str, value: any[str, int, float, pd.NaN], clean_ontologies=False): + def standard_jsonschema_object(self, property_id, property_feature_key: str, value: any, clean_ontologies=False): """ Process a property from the resulting JSON from From 4ca5c496b809a51d30ae70fcd5cc42ccaf504434 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 19 Dec 2025 16:20:40 +0100 Subject: [PATCH 015/110] Cleaned, documented and linted --- relecov_tools/build_schema.py | 131 +++++++++++++++++++--------------- 1 file changed, 73 insertions(+), 58 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 8ea13129..004a37ae 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -452,32 +452,28 @@ def create_schema_draft_template(self): ) ) return draft_template - - def standard_jsonschema_object(self, property_id, property_feature_key: str, value: any, clean_ontologies=False): + + def standard_jsonschema_object( + self, property_id: str, property_feature_key: str, value: any + ) -> dict[str, any]: """ - Process a property from the resulting JSON from + Process a property keyword with their value and return a dictionary with fields for a property. Args: - property_id (_type_): _description_ - value (_type_): _description_ - clean_ontologies (bool, optional): _description_. Defaults to False. + property_id (str): Name of the property. + property_feature_key (str): Property keyword. + value (any): Property keyword value. Returns: - _type_: _description_ + jsonschema_value (dict): {keyword: value}, parsed for each of the options """ - - # Function to handle NaN values - def handle_nan(value): - if pd.isna(value) or value in ["nan", "NaN", "None", "none"]: - return "" - return str(value) jsonschema_value = {} - #value = handle_nan(value) + # Match/Case statement to evaluate the key:value pairs in the database and transform them to schema-compliant dictionaries. match property_feature_key, value: case "options", str(value): options_list = [option.split(":") for option in value.split(",")] - # Handling minLengh, minimum, maximum etc + # Handling float/ints stored as str for key, value in options_list: key = key.strip() value = value.strip() @@ -487,18 +483,17 @@ def handle_nan(value): except ValueError: pass jsonschema_value[key] = value + # FIXME multiple examples will always be loaded as str, regardless of actual type case "examples", str(value): jsonschema_value = {property_feature_key: value.split("; ")} - # KNOWN ISSUE: MORE THAN 1 EXAMPLE WILL BE TREATED AS STRING - # Known not a solution: if parse string, some str examples are parsed as int/number case "examples", int(value) | float(value): value = float(value) value = [int(value) if value.is_integer() else value] jsonschema_value = {property_feature_key: value} - case "enum", str(enums): + case "enum", str(): jsonschema_value = {"$ref": f"#/$defs/enums/{property_id}"} case _, value if not pd.isna(value): - # Non-serializable JSON values (e.g. datetimes) + # Non-serializable JSON value check and parsing (e.g. datetimes) try: json.dumps(value) except (TypeError, OverflowError): @@ -506,17 +501,24 @@ def handle_nan(value): jsonschema_value = {property_feature_key: value} case _, _: pass - + return jsonschema_value - def handle_properties(self, json_data: dict) -> list[dict, list[str]]: + def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, list, dict]: + """ + Handle the generation of simple and nested properties from the database definition. + + Args: + json_data (dict): dictionary with structure {property_name: database_definition_dictionary} + + Returns: + jsonschema_value (tuple): tuple containing the properties, required properties identified during the handling, and enums. + """ schema_property = {} - required_property = [] + required_properties = [] definitions = {"$defs": {"enums": {}}} - # List of properties to check in the features dictionary (it maps values between database features and json schema features): - # key[db_feature_key]: value[schema_feature_key] - # TODO mapping_features should be part of a config file, and this way it could be specific to each project (Maybe part of configJson?) + # TODO mapping_features should be part of a config file, and this way it could be specific to each project mapping_features = { "enum": "enum", "examples": "examples", @@ -530,30 +532,30 @@ def handle_properties(self, json_data: dict) -> list[dict, list[str]]: "required (Y/N)": "required", "submitting_lab_form": "header", } - exclude_fields = ["required (Y/N)", "submitting_lab_form"] + exclude_fields = ["required (Y/N)"] # Flag property values that belong outside the property: # - is_required: if required, goes to root 'required' keyword # - has_enum: if there is an enum, store it for '$defs' for property_id, db_features_dic in json_data.items(): - is_required = True if db_features_dic.get("required (Y/N)", "") == "Y" else False + is_required = ( + True if db_features_dic.get("required (Y/N)", "") == "Y" else False + ) has_enum = db_features_dic.get("enum", False) # Create empty placeholder schema_property[property_id] = {} # If property is complex, call build schema again; else, continue function - is_complex = True if db_features_dic.get("complex_field (Y/N)", "") == "Y" else False - # FIXME CHECK HOW COMPLEX JSON_DATA IS HANDLED IN MEPRAM SCHEMA, but recursion should suffice + is_complex = ( + True if db_features_dic.get("complex_field (Y/N)", "") == "Y" else False + ) if is_complex: - # TODO check with team if we want more basic info in subschema (e.g. title) - schema_draft = { - "type": "object", - "properties": {}, - "required": [] - } + schema_draft = {"type": "object", "properties": {}, "required": []} subschema = self.read_database_definition(property_id) - complex_json_feature = self.build_new_schema(subschema, schema_draft, root_schema=False) + complex_json_feature = self.build_new_schema( + subschema, schema_draft, root_schema=False + ) if complex_json_feature: - # I don't fully like this: enums this way wouldn't be fully unique (defs are identified by non-unique key) + # FIXME: Find a way to make enums to point to a unique definition if complex_json_feature.get("$defs"): definitions.update(complex_json_feature["$defs"]) complex_json_feature.pop("$defs") @@ -563,41 +565,56 @@ def handle_properties(self, json_data: dict) -> list[dict, list[str]]: for db_feature_key, db_feature_value in db_features_dic.items(): if db_feature_key in exclude_fields: continue - # Extra check to avoid non-mapping properties. Aun queda por evitar que se metan propiedades (e.g. required (Y/N)) + # Extra check to avoid non-mapping properties. if db_feature_key in mapping_features: - std_json_feature = self.standard_jsonschema_object(property_id, db_feature_key, db_feature_value) + std_json_feature = self.standard_jsonschema_object( + property_id, db_feature_key, db_feature_value + ) if std_json_feature: schema_property[property_id].update(std_json_feature) - - # If flag was set, update values accordingly per property + + # If property is required, add it to list if is_required: - required_property.append(property_id) - - # TODO: FIX THIS CHECK, FOR SOME REASON NAN does this + required_properties.append(property_id) + # If there is an enum in the property, parse it and add it to definitions if isinstance(has_enum, str): enum = [value.strip() for value in has_enum.split("; ")] definitions["$defs"]["enums"][property_id] = {} definitions["$defs"]["enums"][property_id]["enum"] = enum # Just to be completely sure, but it should be unique - required_property = list(set(required_property)) - + required_properties = list(set(required_properties)) + + return schema_property, required_properties, definitions - return schema_property, required_property, definitions + def schema_build_all_of(self, json_data: dict) -> list: + """ + Build the subschemas in 'allOf' keyword from the database definition. - def schema_build_all_of(self, json_data): + Args: + json_data (dict): dictionary with structure {property_name: database_definition_dictionary} + Returns: + all_of_base (list): list containing all the subschemas to test in 'allOf' + """ all_of_base = [] # Generate all the anyOf within all_any_of = [] - conditional_required = {key: value.get("conditional_required_group").strip() - for key, value in json_data.items() - if not pd.isna(value.get("conditional_required_group"))} + conditional_required = { + key: value.get("conditional_required_group").strip() + for key, value in json_data.items() + if not pd.isna(value.get("conditional_required_group")) + } groups = list(set(conditional_required.values())) - conditional_required_by_group = {group: [key for key in conditional_required.keys() - if conditional_required[key] == group] - for group in groups} + conditional_required_by_group = { + group: [ + key + for key in conditional_required.keys() + if conditional_required[key] == group + ] + for group in groups + } for group, keys in conditional_required_by_group.items(): any_of = [{"required": [key]} for key in keys] all_any_of.append({"anyOf": any_of}) @@ -609,8 +626,7 @@ def schema_build_all_of(self, json_data): return all_of_base - - def build_new_schema(self, json_data, schema_draft, root_schema=True): + def build_new_schema(self, json_data: dict[str, dict], schema_draft: dict, root_schema: bool = True) -> dict[str, any]: """ Build a new JSON Schema based on the provided JSON data and draft template, in three stages: - Pre-properties: all the operations needed prior to handling the properties (e.g. creation of root properties) @@ -620,7 +636,7 @@ def build_new_schema(self, json_data, schema_draft, root_schema=True): Parameters: json_data (dict): Dictionary containing the properties and values of the database definition. schema_draft (dict): The JSON Schema draft template. - root_schema(bool): True if is root of schema, False if not (e.g. complex property generation) + root_schema (bool): True if is root of schema, False if not (e.g. complex property generation) Returns: schema_draft (dict): The newly created JSON Schema. @@ -661,7 +677,6 @@ def build_new_schema(self, json_data, schema_draft, root_schema=True): new_schema["allOf"] = all_of # Future: Here it can be extended to build other keywords at the end following the example above - return new_schema def verify_schema(self, schema): From 0b2ab893a9a481b248c15aed65bf7f3ef7d2a150 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Tue, 16 Dec 2025 12:11:02 +0100 Subject: [PATCH 016/110] Fixed catching empty enum def for individual properties --- relecov_tools/build_schema.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 004a37ae..a2a518cf 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -906,12 +906,8 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: try: values = enum_defs[property_id]["enum"] except KeyError: - self.log.error( - f"Error finding enum for property '{property_id}'; not found in $defs" - ) - stderr.print( - f"[red]Error finding enum for property '{property_id}'; not found in $defs" - ) + self.log.error(f"Error finding enum for property '{property_id}'; not found in $defs") + stderr.print(f"[red]Error finding enum for property '{property_id}'; not found in $defs") return [] return ( clean_ontologies(values) if isinstance(values, list) else values From ec1b9a2f060c26d31f95cc22e4b6ceac741fe56a Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Thu, 18 Dec 2025 17:34:31 +0100 Subject: [PATCH 017/110] Fixed black linting error --- relecov_tools/build_schema.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index a2a518cf..004a37ae 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -906,8 +906,12 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: try: values = enum_defs[property_id]["enum"] except KeyError: - self.log.error(f"Error finding enum for property '{property_id}'; not found in $defs") - stderr.print(f"[red]Error finding enum for property '{property_id}'; not found in $defs") + self.log.error( + f"Error finding enum for property '{property_id}'; not found in $defs" + ) + stderr.print( + f"[red]Error finding enum for property '{property_id}'; not found in $defs" + ) return [] return ( clean_ontologies(values) if isinstance(values, list) else values From 3ca2c413bebba3dff252bf38c9fbeb5bfd879173 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 19 Dec 2025 13:43:27 +0100 Subject: [PATCH 018/110] Fixed typing error --- relecov_tools/build_schema.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 004a37ae..57dd910b 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -452,6 +452,7 @@ def create_schema_draft_template(self): ) ) return draft_template +<<<<<<< HEAD def standard_jsonschema_object( self, property_id: str, property_feature_key: str, value: any @@ -467,6 +468,27 @@ def standard_jsonschema_object( Returns: jsonschema_value (dict): {keyword: value}, parsed for each of the options """ +======= + + def standard_jsonschema_object(self, property_id, property_feature_key: str, value: any, clean_ontologies=False): + """ + Process a property from the resulting JSON from + + Args: + property_id (_type_): _description_ + value (_type_): _description_ + clean_ontologies (bool, optional): _description_. Defaults to False. + + Returns: + _type_: _description_ + """ + + # Function to handle NaN values + def handle_nan(value): + if pd.isna(value) or value in ["nan", "NaN", "None", "none"]: + return "" + return str(value) +>>>>>>> 2f8d2efe (Fixed typing error) jsonschema_value = {} # Match/Case statement to evaluate the key:value pairs in the database and transform them to schema-compliant dictionaries. From dddd3821ba46735828be567ac51a876e1dd537d9 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Sun, 21 Dec 2025 09:41:17 +0100 Subject: [PATCH 019/110] mapping_features and exclude_fields moved to configurables --- relecov_tools/build_schema.py | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 57dd910b..cfbdd6aa 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -541,20 +541,8 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, list, dic definitions = {"$defs": {"enums": {}}} # TODO mapping_features should be part of a config file, and this way it could be specific to each project - mapping_features = { - "enum": "enum", - "examples": "examples", - "ontology_id": "ontology", - "type": "type", - "options": "options", - "description": "description", - "classification": "classification", - "label_name": "label", - "fill_mode": "fill_mode", - "required (Y/N)": "required", - "submitting_lab_form": "header", - } - exclude_fields = ["required (Y/N)"] + mapping_features = self.configurables.get("database_mapping_features", {}) + exclude_fields = self.configurables.get("database_exclude_features", []) # Flag property values that belong outside the property: # - is_required: if required, goes to root 'required' keyword # - has_enum: if there is an enum, store it for '$defs' From ab79b33bf938bee506fffe449446342bee1b5df4 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Sun, 21 Dec 2025 10:01:47 +0100 Subject: [PATCH 020/110] return empty post-property fields to avoid multiple checks --- relecov_tools/build_schema.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index cfbdd6aa..cd25681c 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -526,7 +526,7 @@ def handle_nan(value): return jsonschema_value - def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, list, dict]: + def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dict]: """ Handle the generation of simple and nested properties from the database definition. @@ -593,11 +593,14 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, list, dic definitions["$defs"]["enums"][property_id]["enum"] = enum # Just to be completely sure, but it should be unique - required_properties = list(set(required_properties)) + required_properties = {"required": list(set(required_properties))} if required_properties else {} + + # Check that there are definitions + definitions = definitions if definitions["$defs"]["enums"].values() else {} return schema_property, required_properties, definitions - def schema_build_all_of(self, json_data: dict) -> list: + def schema_build_all_of(self, json_data: dict) -> dict: """ Build the subschemas in 'allOf' keyword from the database definition. @@ -634,7 +637,7 @@ def schema_build_all_of(self, json_data: dict) -> list: # For future: generate if_then within (for required props when specific value) # FUTURE: all_of_base.extend(all_if_then) - return all_of_base + return {"allOf": all_of_base} if all_of_base else {} def build_new_schema(self, json_data: dict[str, dict], schema_draft: dict, root_schema: bool = True) -> dict[str, any]: """ @@ -676,15 +679,12 @@ def build_new_schema(self, json_data: dict[str, dict], schema_draft: dict, root_ # Post-properties # Finally, send schema_property object to the new json schema draft. new_schema["properties"] = properties - if required: - new_schema["required"] = required - if defs: - new_schema.update(defs) + new_schema.update(required) + new_schema.update(defs) # Build the allOf keyword all_of = self.schema_build_all_of(json_data) - if all_of: - new_schema["allOf"] = all_of + new_schema.update(all_of) # Future: Here it can be extended to build other keywords at the end following the example above return new_schema From 22061c3bfd3abe1b1203db130e8a504b63884646 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Mon, 22 Dec 2025 10:25:23 +0100 Subject: [PATCH 021/110] Added configurables for build_schema --- relecov_tools/conf/build_schema_config.json | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/relecov_tools/conf/build_schema_config.json b/relecov_tools/conf/build_schema_config.json index 593f1ed8..5a7d3278 100644 --- a/relecov_tools/conf/build_schema_config.json +++ b/relecov_tools/conf/build_schema_config.json @@ -77,6 +77,20 @@ "Bioinformatics and QC metrics fields" ], "mepram": [] - } + }, + "database_mapping_features": { + "enum": "enum", + "examples": "examples", + "ontology_id": "ontology", + "type": "type", + "options": "options", + "description": "description", + "classification": "classification", + "label_name": "label", + "fill_mode": "fill_mode", + "required (Y/N)": "required", + "submitting_lab_form": "header" + }, + "database_exclude_features": ["required (Y/N)"] } } From a0abfda443a69f44651d5e9b716c5d8817815826 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 19 Dec 2025 10:55:23 +0100 Subject: [PATCH 022/110] fixed minor typo --- extra_config.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 extra_config.yaml diff --git a/extra_config.yaml b/extra_config.yaml new file mode 100644 index 00000000..26ee670d --- /dev/null +++ b/extra_config.yaml @@ -0,0 +1,13 @@ +download: + conf_file: '' + download_option: download_clean + output_dir: '' + password: '' + subfolder: RELECOV + user: '' +validate: + excel_sheet: '' + json_file: '' + json_schema_file: relecov_tools/schema/relecov_schema.json + metadata: '' + output_dir: '' From 881601bae56a4a84a242c98210078221d28a49cc Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Mon, 5 Jan 2026 09:38:43 +0100 Subject: [PATCH 023/110] Deleted extra_config.yaml --- extra_config.yaml | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 extra_config.yaml diff --git a/extra_config.yaml b/extra_config.yaml deleted file mode 100644 index 26ee670d..00000000 --- a/extra_config.yaml +++ /dev/null @@ -1,13 +0,0 @@ -download: - conf_file: '' - download_option: download_clean - output_dir: '' - password: '' - subfolder: RELECOV - user: '' -validate: - excel_sheet: '' - json_file: '' - json_schema_file: relecov_tools/schema/relecov_schema.json - metadata: '' - output_dir: '' From 7b624e73080ad03fc02f768932d2ddc476d5eacc Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Tue, 13 Jan 2026 16:01:38 +0100 Subject: [PATCH 024/110] renamed function to jsonschema_object --- relecov_tools/build_schema.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index cd25681c..0e2bbc11 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -454,7 +454,7 @@ def create_schema_draft_template(self): return draft_template <<<<<<< HEAD - def standard_jsonschema_object( + def jsonschema_object( self, property_id: str, property_feature_key: str, value: any ) -> dict[str, any]: """ @@ -577,7 +577,7 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dic continue # Extra check to avoid non-mapping properties. if db_feature_key in mapping_features: - std_json_feature = self.standard_jsonschema_object( + std_json_feature = self.jsonschema_object( property_id, db_feature_key, db_feature_value ) if std_json_feature: From a56113ddcecadf0abc2ccb75a794e2a114ece35d Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Tue, 13 Jan 2026 16:53:58 +0100 Subject: [PATCH 025/110] Fixed bug where definitions did not update correctly for complex properties --- relecov_tools/build_schema.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 0e2bbc11..afa948c7 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -540,7 +540,6 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dic required_properties = [] definitions = {"$defs": {"enums": {}}} - # TODO mapping_features should be part of a config file, and this way it could be specific to each project mapping_features = self.configurables.get("database_mapping_features", {}) exclude_fields = self.configurables.get("database_exclude_features", []) # Flag property values that belong outside the property: @@ -555,9 +554,7 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dic # Create empty placeholder schema_property[property_id] = {} # If property is complex, call build schema again; else, continue function - is_complex = ( - True if db_features_dic.get("complex_field (Y/N)", "") == "Y" else False - ) + is_complex = db_features_dic.get("complex_field (Y/N)", "") == "Y" if is_complex: schema_draft = {"type": "object", "properties": {}, "required": []} subschema = self.read_database_definition(property_id) @@ -567,8 +564,7 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dic if complex_json_feature: # FIXME: Find a way to make enums to point to a unique definition if complex_json_feature.get("$defs"): - definitions.update(complex_json_feature["$defs"]) - complex_json_feature.pop("$defs") + definitions.update({"$defs": complex_json_feature.pop("$defs")}) schema_property[property_id]["type"] = "array" schema_property[property_id]["items"] = complex_json_feature else: From 50f3bee4c7b687cf7173784cc03ab671f19d9905 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Wed, 14 Jan 2026 12:13:58 +0100 Subject: [PATCH 026/110] Fixed possible overwrite in nested schemas --- relecov_tools/build_schema.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index afa948c7..e87dcda9 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -546,9 +546,7 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dic # - is_required: if required, goes to root 'required' keyword # - has_enum: if there is an enum, store it for '$defs' for property_id, db_features_dic in json_data.items(): - is_required = ( - True if db_features_dic.get("required (Y/N)", "") == "Y" else False - ) + is_required = db_features_dic.get("required (Y/N)", "") == "Y" has_enum = db_features_dic.get("enum", False) # Create empty placeholder @@ -562,9 +560,15 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dic subschema, schema_draft, root_schema=False ) if complex_json_feature: - # FIXME: Find a way to make enums to point to a unique definition if complex_json_feature.get("$defs"): - definitions.update({"$defs": complex_json_feature.pop("$defs")}) + # Prune the defs from the complex property + complex_defs = complex_json_feature.pop("$defs") + complex_defs["enums"] = {property_id: complex_defs["enums"]} + definitions["$defs"]["enums"].update(complex_defs["enums"]) + # Fix the "$refs" adding the name of the parent property + for property_key, value in complex_json_feature["properties"].items(): + if "$ref" in value: + value["$ref"] = value["$ref"].replace(f"/{property_key}", f"/{property_id}/{property_key}") schema_property[property_id]["type"] = "array" schema_property[property_id]["items"] = complex_json_feature else: From 1bd887efd209f7ff32b92eedf1b5b63612c50ffd Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Wed, 14 Jan 2026 13:04:15 +0100 Subject: [PATCH 027/110] fixed comment --- relecov_tools/build_schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index e87dcda9..30da0245 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -685,7 +685,7 @@ def build_new_schema(self, json_data: dict[str, dict], schema_draft: dict, root_ # Build the allOf keyword all_of = self.schema_build_all_of(json_data) new_schema.update(all_of) - # Future: Here it can be extended to build other keywords at the end following the example above + # From here it can be extended to build other keywords at the end following the example above return new_schema From 00e95480c5236f55bb5c295bb13241471b1bf0ca Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Thu, 22 Jan 2026 11:24:31 +0100 Subject: [PATCH 028/110] fix map of properties --- relecov_tools/build_schema.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 30da0245..4e35762f 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -578,7 +578,7 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dic # Extra check to avoid non-mapping properties. if db_feature_key in mapping_features: std_json_feature = self.jsonschema_object( - property_id, db_feature_key, db_feature_value + property_id, mapping_features[db_feature_key], db_feature_value ) if std_json_feature: schema_property[property_id].update(std_json_feature) @@ -912,15 +912,19 @@ def clean_ontologies(enums): return [re.sub(r"\s*\[.*?\]", "", item).strip() for item in enums] def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: - property_id = ref.split("/")[-1] + property_key = ref.split("enums/")[-1] + property_id = property_key.split("/") try: - values = enum_defs[property_id]["enum"] + values = enum_defs # Kinda ñejh workaround, like in pagination + for property_node in property_id: + values = values[property_node] + values = values["enum"] except KeyError: self.log.error( - f"Error finding enum for property '{property_id}'; not found in $defs" + f"Error finding enum for property '{".".join(property_id)}'; not found in $defs" ) stderr.print( - f"[red]Error finding enum for property '{property_id}'; not found in $defs" + f"[red]Error finding enum for property '{".".join(property_id)}'; not found in $defs" ) return [] return ( @@ -957,8 +961,10 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: # 3. Headers / filtering # ------------------------------------------------------------------ # if "header" in df.columns: + print(df[df["label"] == "Organism species"]) df["header"] = df["header"].astype(str).str.strip() df_filtered = df[df["header"].str.upper() == "Y"] + print(df_filtered["label"]) else: self.log.warning( "No se encontró la columna 'header', usando df sin filtrar." @@ -992,7 +998,7 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: # -- METADATA_LAB try: - metadatalab_header = ["REQUERIDO", "EJEMPLOS", "DESCRIPCIÓN", "CAMPO"] + metadatalab_header = ["CAMPO", "DESCRIPCIÓN", "EJEMPLOS", "REQUERIDO"] df_metadata = pd.DataFrame(columns=metadatalab_header) df_metadata["REQUERIDO"] = df_filtered["required"].apply( lambda x: "YES" if str(x).upper() in ["Y", "YES"] else "" @@ -1002,6 +1008,7 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: ) df_metadata["DESCRIPCIÓN"] = df_filtered["description"] df_metadata["CAMPO"] = df_filtered["label"] + print(len(df_metadata.index)) df_metadata = df_metadata.transpose() except Exception as e: self.log.error(f"Error creating MetadataLab sheet: {e}") From d2f1c77642f3054749d2b42fdd73c8143203f88c Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 23 Jan 2026 12:52:40 +0100 Subject: [PATCH 029/110] Header order changes, now excel only generates used fields' validation --- relecov_tools/build_schema.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 4e35762f..cd2f0f26 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -961,10 +961,8 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: # 3. Headers / filtering # ------------------------------------------------------------------ # if "header" in df.columns: - print(df[df["label"] == "Organism species"]) df["header"] = df["header"].astype(str).str.strip() df_filtered = df[df["header"].str.upper() == "Y"] - print(df_filtered["label"]) else: self.log.warning( "No se encontró la columna 'header', usando df sin filtrar." @@ -1008,7 +1006,6 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: ) df_metadata["DESCRIPCIÓN"] = df_filtered["description"] df_metadata["CAMPO"] = df_filtered["label"] - print(len(df_metadata.index)) df_metadata = df_metadata.transpose() except Exception as e: self.log.error(f"Error creating MetadataLab sheet: {e}") @@ -1017,8 +1014,9 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: # -- DATA_VALIDATION try: - datavalidation_header = ["EJEMPLOS", "DESCRIPCIÓN", "CAMPO"] + datavalidation_header = ["CAMPO", "DESCRIPCIÓN", "EJEMPLOS"] df_hasenum = df[pd.notnull(df.enum)] + df_hasenum = df_hasenum[df_hasenum["label"].isin(df_filtered["label"])] df_validation = pd.DataFrame(columns=datavalidation_header) df_validation["tmp_property"] = df_hasenum["property_id"] df_validation["EJEMPLOS"] = df_hasenum["examples"].apply( @@ -1158,7 +1156,10 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: # ------------------------------------------------------------------------------ # We scroll through the columns of METADATA_LAB (original order of df) - for col_idx, property_id in enumerate(df["property_id"], start=1): + column = 1 + for col_idx, property_id in enumerate(df_filtered["property_id"], start=1): + if not property_id in df_hasenum["property_id"].values: + continue # Select list of values if property_id in special_dropdowns: enum_values = special_dropdowns[property_id] @@ -1169,9 +1170,9 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: if not isinstance(enum_values, list) or len(enum_values) == 0: continue - + column += 1 # Write on sheet DROPDOWNS - col_letter = openpyxl.utils.get_column_letter(col_idx) + col_letter = openpyxl.utils.get_column_letter(column) for i, val in enumerate(enum_values, start=1): ws_dropdowns[f"{col_letter}{i}"].value = val From c870e378b7b5d595bfab0926c93c74661f3412df Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 23 Jan 2026 12:53:13 +0100 Subject: [PATCH 030/110] Added support for complex schemas in excel production --- .../schema_utils/metadatalab_template.py | 26 +++++-------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/relecov_tools/assets/schema_utils/metadatalab_template.py b/relecov_tools/assets/schema_utils/metadatalab_template.py index ebcfbc0c..9f88cab8 100644 --- a/relecov_tools/assets/schema_utils/metadatalab_template.py +++ b/relecov_tools/assets/schema_utils/metadatalab_template.py @@ -20,7 +20,7 @@ ) -def schema_to_flatten_json(json_data, required_properties=None): +def schema_to_flatten_json(json_data, required_properties=None, parent_property_id=""): """Return the schema flattened to a list while keeping parent metadata.""" try: required_set = set(required_properties or []) @@ -34,31 +34,17 @@ def schema_to_flatten_json(json_data, required_properties=None): ) if is_complex_array: items_schema = features.get("items", {}) - complex_properties = items_schema.get("properties", {}) required_list = items_schema.get( "required", features.get("required", []) ) - complex_required = set(required_list) - for ( - complex_property_id, - complex_feature, - ) in complex_properties.items(): - row = dict(complex_feature) - row["property_id"] = f"{property_id}.{complex_property_id}" - row["field_id"] = complex_property_id - row["parent_property_id"] = property_id - row["parent_label"] = features.get("label", "") - row["parent_classification"] = features.get( - "classification", "" - ) - row["is_required"] = complex_property_id in complex_required - flatten_rows.append(row) + complex_row = schema_to_flatten_json(items_schema.get("properties", {}), required_properties=required_list, parent_property_id=f"{property_id}.") + flatten_rows.extend(complex_row) else: row = dict(features) - row["property_id"] = property_id + row["property_id"] = f"{parent_property_id}{property_id}" row["field_id"] = property_id - row["parent_property_id"] = None - row["parent_label"] = "" + row["parent_property_id"] = None #or parent_property_id + row["parent_label"] = "" #parent_property_id row["parent_classification"] = "" row["is_required"] = property_id in required_set flatten_rows.append(row) From c7cc9dc179e27c8ec652f3fb30d07caa48ea2b6b Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 23 Jan 2026 13:03:27 +0100 Subject: [PATCH 031/110] Swish and lint --- .../schema_utils/metadatalab_template.py | 11 ++-- relecov_tools/build_schema.py | 50 ++++++++----------- 2 files changed, 27 insertions(+), 34 deletions(-) diff --git a/relecov_tools/assets/schema_utils/metadatalab_template.py b/relecov_tools/assets/schema_utils/metadatalab_template.py index 9f88cab8..7e36fd2e 100644 --- a/relecov_tools/assets/schema_utils/metadatalab_template.py +++ b/relecov_tools/assets/schema_utils/metadatalab_template.py @@ -10,7 +10,6 @@ from openpyxl.formatting.rule import FormulaRule from openpyxl.styles import PatternFill - log = logging.getLogger(__name__) stderr = rich.console.Console( stderr=True, @@ -37,14 +36,18 @@ def schema_to_flatten_json(json_data, required_properties=None, parent_property_ required_list = items_schema.get( "required", features.get("required", []) ) - complex_row = schema_to_flatten_json(items_schema.get("properties", {}), required_properties=required_list, parent_property_id=f"{property_id}.") + complex_row = schema_to_flatten_json( + items_schema.get("properties", {}), + required_properties=required_list, + parent_property_id=f"{property_id}.", + ) flatten_rows.extend(complex_row) else: row = dict(features) row["property_id"] = f"{parent_property_id}{property_id}" row["field_id"] = property_id - row["parent_property_id"] = None #or parent_property_id - row["parent_label"] = "" #parent_property_id + row["parent_property_id"] = None # or parent_property_id + row["parent_label"] = "" # parent_property_id row["parent_classification"] = "" row["is_required"] = property_id in required_set flatten_rows.append(row) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index cd2f0f26..8dff1497 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -452,7 +452,6 @@ def create_schema_draft_template(self): ) ) return draft_template -<<<<<<< HEAD def jsonschema_object( self, property_id: str, property_feature_key: str, value: any @@ -468,27 +467,6 @@ def jsonschema_object( Returns: jsonschema_value (dict): {keyword: value}, parsed for each of the options """ -======= - - def standard_jsonschema_object(self, property_id, property_feature_key: str, value: any, clean_ontologies=False): - """ - Process a property from the resulting JSON from - - Args: - property_id (_type_): _description_ - value (_type_): _description_ - clean_ontologies (bool, optional): _description_. Defaults to False. - - Returns: - _type_: _description_ - """ - - # Function to handle NaN values - def handle_nan(value): - if pd.isna(value) or value in ["nan", "NaN", "None", "none"]: - return "" - return str(value) ->>>>>>> 2f8d2efe (Fixed typing error) jsonschema_value = {} # Match/Case statement to evaluate the key:value pairs in the database and transform them to schema-compliant dictionaries. @@ -566,9 +544,13 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dic complex_defs["enums"] = {property_id: complex_defs["enums"]} definitions["$defs"]["enums"].update(complex_defs["enums"]) # Fix the "$refs" adding the name of the parent property - for property_key, value in complex_json_feature["properties"].items(): + for property_key, value in complex_json_feature[ + "properties" + ].items(): if "$ref" in value: - value["$ref"] = value["$ref"].replace(f"/{property_key}", f"/{property_id}/{property_key}") + value["$ref"] = value["$ref"].replace( + f"/{property_key}", f"/{property_id}/{property_key}" + ) schema_property[property_id]["type"] = "array" schema_property[property_id]["items"] = complex_json_feature else: @@ -578,7 +560,9 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dic # Extra check to avoid non-mapping properties. if db_feature_key in mapping_features: std_json_feature = self.jsonschema_object( - property_id, mapping_features[db_feature_key], db_feature_value + property_id, + mapping_features[db_feature_key], + db_feature_value, ) if std_json_feature: schema_property[property_id].update(std_json_feature) @@ -593,7 +577,9 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dic definitions["$defs"]["enums"][property_id]["enum"] = enum # Just to be completely sure, but it should be unique - required_properties = {"required": list(set(required_properties))} if required_properties else {} + required_properties = ( + {"required": list(set(required_properties))} if required_properties else {} + ) # Check that there are definitions definitions = definitions if definitions["$defs"]["enums"].values() else {} @@ -639,7 +625,9 @@ def schema_build_all_of(self, json_data: dict) -> dict: return {"allOf": all_of_base} if all_of_base else {} - def build_new_schema(self, json_data: dict[str, dict], schema_draft: dict, root_schema: bool = True) -> dict[str, any]: + def build_new_schema( + self, json_data: dict[str, dict], schema_draft: dict, root_schema: bool = True + ) -> dict[str, any]: """ Build a new JSON Schema based on the provided JSON data and draft template, in three stages: - Pre-properties: all the operations needed prior to handling the properties (e.g. creation of root properties) @@ -915,7 +903,7 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: property_key = ref.split("enums/")[-1] property_id = property_key.split("/") try: - values = enum_defs # Kinda ñejh workaround, like in pagination + values = enum_defs # Kinda ñejh workaround, like in pagination for property_node in property_id: values = values[property_node] values = values["enum"] @@ -1157,8 +1145,10 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: # We scroll through the columns of METADATA_LAB (original order of df) column = 1 - for col_idx, property_id in enumerate(df_filtered["property_id"], start=1): - if not property_id in df_hasenum["property_id"].values: + for col_idx, property_id in enumerate( + df_filtered["property_id"], start=1 + ): + if property_id not in df_hasenum["property_id"].values: continue # Select list of values if property_id in special_dropdowns: From 670614fb5258b8bf47f068fe9c5ad01c7bdf3c91 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 23 Jan 2026 13:11:04 +0100 Subject: [PATCH 032/110] Fixed typo on log message --- relecov_tools/build_schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 8dff1497..f1580b25 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -909,7 +909,7 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: values = values["enum"] except KeyError: self.log.error( - f"Error finding enum for property '{".".join(property_id)}'; not found in $defs" + f"Error finding enum for property '{'.'.join(property_id)}'; not found in $defs" ) stderr.print( f"[red]Error finding enum for property '{".".join(property_id)}'; not found in $defs" From 38211de88e35a74ca27189a87f5837f831caa54a Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 23 Jan 2026 13:14:48 +0100 Subject: [PATCH 033/110] Fixed typo on log message --- relecov_tools/build_schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index f1580b25..03cc4e10 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -912,7 +912,7 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: f"Error finding enum for property '{'.'.join(property_id)}'; not found in $defs" ) stderr.print( - f"[red]Error finding enum for property '{".".join(property_id)}'; not found in $defs" + f"[red]Error finding enum for property '{'.'.join(property_id)}'; not found in $defs" ) return [] return ( From f79a7c650ed16a69b28b5970dd7a402e751f51d2 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 23 Jan 2026 14:03:44 +0100 Subject: [PATCH 034/110] Updated CHANGELOG --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e188caec..953696c7 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,9 +17,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), #### Fixes - Fix small bug on type/examples consistency for float/integer fields in JSON schema generation (build_schema module) [#844](https://github.com/BU-ISCIII/relecov-tools/pull/844) +- Fix header generation for `METADATA_LAB` and `DATA_VALIDATION`: now "CAMPO" is the first row, "REQUIRED" last [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) +- Now Metadatalab validation sheets (DATA_VALIDATION and DROPDOWNS) only generate the included fields, not all of them [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) #### Changed +- Changed `build_schema.build_new_schema` function: Now recursively iterates on complex properties to generate subschemas [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) +- Changed `assets/schema_utils/metadatalab_template.py`: Now supports iterative recursion to flatten nested schemas [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) + #### Removed ### Requirements From 6ba145f6c0be384796040068fbb69f7392eed756 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 23 Jan 2026 14:06:42 +0100 Subject: [PATCH 035/110] Fixed comments --- relecov_tools/build_schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 03cc4e10..bb7c0768 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -903,7 +903,7 @@ def resolve_enum_ref(ref: str, enum_defs: dict) -> list[str]: property_key = ref.split("enums/")[-1] property_id = property_key.split("/") try: - values = enum_defs # Kinda ñejh workaround, like in pagination + values = enum_defs for property_node in property_id: values = values[property_node] values = values["enum"] From 4e94b1d928d2554be5fa2a75b6801d67fddd10c9 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 23 Jan 2026 15:14:57 +0100 Subject: [PATCH 036/110] Black fixexd linting --- relecov_tools/assets/pipeline_utils/utils.py | 1 + relecov_tools/gisaid_upload.py | 1 - relecov_tools/log_summary.py | 1 - relecov_tools/mail.py | 1 - relecov_tools/utils.py | 1 + relecov_tools/validate.py | 1 - 6 files changed, 2 insertions(+), 4 deletions(-) diff --git a/relecov_tools/assets/pipeline_utils/utils.py b/relecov_tools/assets/pipeline_utils/utils.py index 6cd53bab..68e4f164 100644 --- a/relecov_tools/assets/pipeline_utils/utils.py +++ b/relecov_tools/assets/pipeline_utils/utils.py @@ -2,6 +2,7 @@ """ Common utility function used for relecov_tools package. """ + import json import logging import os diff --git a/relecov_tools/gisaid_upload.py b/relecov_tools/gisaid_upload.py index 09267430..75964b54 100644 --- a/relecov_tools/gisaid_upload.py +++ b/relecov_tools/gisaid_upload.py @@ -10,7 +10,6 @@ from Bio import SeqIO from relecov_tools.config_json import ConfigJson - # import site diff --git a/relecov_tools/log_summary.py b/relecov_tools/log_summary.py index e8956503..522a412c 100755 --- a/relecov_tools/log_summary.py +++ b/relecov_tools/log_summary.py @@ -14,7 +14,6 @@ import relecov_tools.utils from relecov_tools.config_json import ConfigJson - log = logging.getLogger(__name__) stderr = Console( stderr=True, diff --git a/relecov_tools/mail.py b/relecov_tools/mail.py index 99358e12..1c6358bf 100644 --- a/relecov_tools/mail.py +++ b/relecov_tools/mail.py @@ -15,7 +15,6 @@ from relecov_tools.config_json import ConfigJson from relecov_tools.log_summary import LogSum - log = logging.getLogger(__name__) diff --git a/relecov_tools/utils.py b/relecov_tools/utils.py index e2b8b2fd..115bc3e5 100755 --- a/relecov_tools/utils.py +++ b/relecov_tools/utils.py @@ -2,6 +2,7 @@ """ Common utility function used for relecov_tools package. """ + import os import sys import glob diff --git a/relecov_tools/validate.py b/relecov_tools/validate.py index 2e404b9f..3adfb3de 100755 --- a/relecov_tools/validate.py +++ b/relecov_tools/validate.py @@ -16,7 +16,6 @@ from relecov_tools.base_module import BaseModule from relecov_tools.rest_api import RestApi - stderr = rich.console.Console( stderr=True, style="dim", From fde48e13363782a358b290bff89da97b3859c8e0 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 6 Feb 2026 09:16:04 +0100 Subject: [PATCH 037/110] Fixed datetime recognition for schema example generation and validation --- relecov_tools/build_schema.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index bb7c0768..e9698a05 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -323,7 +323,7 @@ def validate_database_definition(self, json_data): match feature_type: # Check date format for properties with type=string and format=date case "string": - if prop_features.get("format") == "date": + if "format:date" in str(prop_features.get("options", "")): if isinstance(example, datetime): example = example.strftime("%Y-%m-%d") if isinstance(example, str): @@ -486,6 +486,10 @@ def jsonschema_object( # FIXME multiple examples will always be loaded as str, regardless of actual type case "examples", str(value): jsonschema_value = {property_feature_key: value.split("; ")} + case "examples", datetime(): + value = value.strftime("%Y-%m-%dT%H:%M:%S") + value = value.replace("T00:00:00", "") + jsonschema_value = {property_feature_key: value} case "examples", int(value) | float(value): value = float(value) value = [int(value) if value.is_integer() else value] From 1b6e36549af29c2a44bee997d5254993903f1276 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Fri, 6 Feb 2026 09:19:25 +0100 Subject: [PATCH 038/110] Updated changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 953696c7..9ba00b2c 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Fix small bug on type/examples consistency for float/integer fields in JSON schema generation (build_schema module) [#844](https://github.com/BU-ISCIII/relecov-tools/pull/844) - Fix header generation for `METADATA_LAB` and `DATA_VALIDATION`: now "CAMPO" is the first row, "REQUIRED" last [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) - Now Metadatalab validation sheets (DATA_VALIDATION and DROPDOWNS) only generate the included fields, not all of them [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) +- Fixed datetime recognition for schema example generation and validation [#854](https://github.com/BU-ISCIII/relecov-tools/pull/854) #### Changed From 6f7c08f6e98a08142e2c77bcbdb1110b92c3a65b Mon Sep 17 00:00:00 2001 From: ESapenaVentura <38617863+ESapenaVentura@users.noreply.github.com> Date: Mon, 9 Feb 2026 12:21:57 +0000 Subject: [PATCH 039/110] Fixed examples value for datetimes --- relecov_tools/build_schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index e9698a05..1e92687d 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -489,7 +489,7 @@ def jsonschema_object( case "examples", datetime(): value = value.strftime("%Y-%m-%dT%H:%M:%S") value = value.replace("T00:00:00", "") - jsonschema_value = {property_feature_key: value} + jsonschema_value = {property_feature_key: [value]} case "examples", int(value) | float(value): value = float(value) value = [int(value) if value.is_integer() else value] From fcb9dc6ed7a4f644963a3af1bbbb91ff702f3f17 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Mon, 9 Feb 2026 13:56:13 +0100 Subject: [PATCH 040/110] Fixed typo on date detection --- relecov_tools/build_schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 1e92687d..cd0875bf 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -323,7 +323,7 @@ def validate_database_definition(self, json_data): match feature_type: # Check date format for properties with type=string and format=date case "string": - if "format:date" in str(prop_features.get("options", "")): + if "format:date" in str(prop_features.get("options", "")).replace(" ", ""): if isinstance(example, datetime): example = example.strftime("%Y-%m-%d") if isinstance(example, str): From 554f67f437e2880f3ddd1667ec4913f23dd5ffd3 Mon Sep 17 00:00:00 2001 From: ESapenaVentura Date: Mon, 9 Feb 2026 13:57:51 +0100 Subject: [PATCH 041/110] linted with black --- relecov_tools/build_schema.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index cd0875bf..8dbfed44 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -323,7 +323,9 @@ def validate_database_definition(self, json_data): match feature_type: # Check date format for properties with type=string and format=date case "string": - if "format:date" in str(prop_features.get("options", "")).replace(" ", ""): + if "format:date" in str(prop_features.get("options", "")).replace( + " ", "" + ): if isinstance(example, datetime): example = example.strftime("%Y-%m-%d") if isinstance(example, str): From 3ae1006cd5b8a9c155d126e26e2a39693a60804a Mon Sep 17 00:00:00 2001 From: albatalavera Date: Thu, 5 Feb 2026 15:43:38 +0100 Subject: [PATCH 042/110] Fix issues related to header order change in Submitting Lab Form --- .../schema_utils/metadatalab_template.py | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/relecov_tools/assets/schema_utils/metadatalab_template.py b/relecov_tools/assets/schema_utils/metadatalab_template.py index 7e36fd2e..e163f853 100644 --- a/relecov_tools/assets/schema_utils/metadatalab_template.py +++ b/relecov_tools/assets/schema_utils/metadatalab_template.py @@ -139,6 +139,17 @@ def excel_formater(df, writer, sheet, out_file, have_index=True, have_header=Tru } ) + # First column format + no_fill_formater = workbook.add_format( + { + "bold": True, + "text_wrap": False, + "valign": "center", + "fg_color": "#D4D3D3", # Light gray + "locked": True, + } + ) + cell_formater = workbook.add_format( { "border": 1, # Apply border to every cell @@ -193,7 +204,7 @@ def excel_formater(df, writer, sheet, out_file, have_index=True, have_header=Tru stderr.print( f"Error writing first column at row {row_num}: {e}" ) - if row_num == 0 and col_num >= 0 and sheet == "METADATA_LAB": + if row_num == 3 and col_num >= 0 and sheet == "METADATA_LAB": try: worksheet.write( row_num, @@ -211,6 +222,16 @@ def excel_formater(df, writer, sheet, out_file, have_index=True, have_header=Tru worksheet.write(index_num, 0, index_val, first_col_formater) except Exception as e: stderr.print(f"Error writing first column at row {row_num}: {e}") + + if sheet == "METADATA_LAB": + # Format the first column for all data rows (from row 5 onwards) + max_rows = 1000 # Maximum number of rows to format + for row_num in range(len(df), max_rows): + try: + worksheet.write(row_num, 0, "", no_fill_formater) + except Exception as e: + stderr.print(f"Error formatting first column at row {row_num}: {e}") + except Exception as e: stderr.print(f"Error in excel_formater: {e}") @@ -220,7 +241,7 @@ def create_condition(ws_metadata, conditions, df_filtered): label_to_property = dict(zip(df_filtered["label"], df_filtered["property_id"])) column_map = {} - for cell in ws_metadata[4]: + for cell in ws_metadata[1]: property_id = label_to_property.get(cell.value) if property_id in conditions: column_map[property_id] = cell.column_letter @@ -277,7 +298,7 @@ def add_conditional_format_age_check( label_to_property = dict(zip(df_filtered["label"], df_filtered["property_id"])) column_map = {} - for cell in ws_metadata[4]: + for cell in ws_metadata[1]: property_id = label_to_property.get(cell.value) if property_id: column_map[property_id] = cell.column_letter From 83acbefed937ae6d1ffa6e4c36518c6f67e45a8c Mon Sep 17 00:00:00 2001 From: albatalavera Date: Thu, 5 Feb 2026 15:47:05 +0100 Subject: [PATCH 043/110] Update metadatalab_template.py for MEPRAM and fix errors related to header order change --- relecov_tools/conf/build_schema_config.json | 56 +++++++++++++++++---- 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/relecov_tools/conf/build_schema_config.json b/relecov_tools/conf/build_schema_config.json index 5a7d3278..dad1f57b 100644 --- a/relecov_tools/conf/build_schema_config.json +++ b/relecov_tools/conf/build_schema_config.json @@ -2,7 +2,7 @@ "projects" : { "relecov": { "host_age_years": { - "header_row_idx": 5, + "header_row_idx": 1, "max_rows": 1000, "validation_type": "whole", "operator": "between", @@ -12,7 +12,7 @@ "error_title": "Valor no permitido" }, "host_age_months": { - "header_row_idx": 5, + "header_row_idx": 1, "max_rows": 1000, "validation_type": "whole", "operator": "between", @@ -22,7 +22,7 @@ "error_title": "Valor no permitido" }, "sample_collection_date": { - "header_row_idx": 5, + "header_row_idx": 1, "max_rows": 1000, "validation_type": "custom", "formula1": "=ISNUMBER({col_letter}5)", @@ -31,7 +31,7 @@ "format_cells_as_date": true }, "sample_received_date": { - "header_row_idx": 5, + "header_row_idx": 1, "max_rows": 1000, "validation_type": "custom", "formula1": "=ISNUMBER({col_letter}5)", @@ -40,7 +40,7 @@ "format_cells_as_date": true }, "sequencing_date": { - "header_row_idx": 5, + "header_row_idx": 1, "max_rows": 1000, "validation_type": "custom", "formula1": "=ISNUMBER({col_letter}5)", @@ -50,15 +50,43 @@ } }, "mepram": { - "host_age_test": { - "header_row_idx": 5, + "host_age_years": { + "header_row_idx": 1, "max_rows": 1000, "validation_type": "whole", "operator": "between", "formula1": "3", "formula2": "110", - "error_message": "El valor debe estar entre 3 y 110 años.", + "error_message": "El valor debe estar entre 3 y 110 años. Si es inferior a 3 años, debe rellenar la siguiente columna: [Host Age Months].", "error_title": "Valor no permitido" + }, + "host_age_months": { + "header_row_idx": 1, + "max_rows": 1000, + "validation_type": "whole", + "operator": "between", + "formula1": "0", + "formula2": "35", + "error_message": "El valor debe estar entre 0 y 35 meses.", + "error_title": "Valor no permitido" + }, + "patient_birth_date": { + "header_row_idx": 1, + "max_rows": 1000, + "validation_type": "custom", + "formula1": "=ISNUMBER({col_letter}5)", + "error_message": "Ingrese la fecha en formato correcto YYYY-MM-DD (ejemplo: 2024-02-12).", + "error_title": "Formato de fecha incorrecto", + "format_cells_as_date": true + }, + "sample_collection_date": { + "header_row_idx": 1, + "max_rows": 1000, + "validation_type": "custom", + "formula1": "=ISNUMBER({col_letter}5)", + "error_message": "Ingrese la fecha en formato correcto YYYY-MM-DD (ejemplo: 2024-02-12).", + "error_title": "Formato de fecha incorrecto", + "format_cells_as_date": true } } }, @@ -76,7 +104,17 @@ "Public databases", "Bioinformatics and QC metrics fields" ], - "mepram": [] + "mepram": [ + "Database Identifiers", + "Sample collection and processing", + "Host information", + "Host exposure information", + "Files info", + "Bioinformatics and QC metrics fields", + "Contributor Acknowledgement", + "Strain characterization", + "Other" + ] }, "database_mapping_features": { "enum": "enum", From 72f1848a5f099dcedccc996e687246b27a05599d Mon Sep 17 00:00:00 2001 From: albatalavera Date: Wed, 11 Feb 2026 10:20:49 +0100 Subject: [PATCH 044/110] Update the classification_filters list in build_schema_config.json for MEPRAM proyect --- relecov_tools/conf/build_schema_config.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/relecov_tools/conf/build_schema_config.json b/relecov_tools/conf/build_schema_config.json index dad1f57b..d1ad0c2e 100644 --- a/relecov_tools/conf/build_schema_config.json +++ b/relecov_tools/conf/build_schema_config.json @@ -107,6 +107,8 @@ "mepram": [ "Database Identifiers", "Sample collection and processing", + "Public databases", + "Sequencing", "Host information", "Host exposure information", "Files info", From 8a79532b7d72c3db5bc72abfc26a2aabdc0479a6 Mon Sep 17 00:00:00 2001 From: albatalavera Date: Wed, 11 Feb 2026 19:58:44 +0100 Subject: [PATCH 045/110] Linted with black --- relecov_tools/assets/schema_utils/metadatalab_template.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/assets/schema_utils/metadatalab_template.py b/relecov_tools/assets/schema_utils/metadatalab_template.py index e163f853..f9f8e804 100644 --- a/relecov_tools/assets/schema_utils/metadatalab_template.py +++ b/relecov_tools/assets/schema_utils/metadatalab_template.py @@ -222,7 +222,7 @@ def excel_formater(df, writer, sheet, out_file, have_index=True, have_header=Tru worksheet.write(index_num, 0, index_val, first_col_formater) except Exception as e: stderr.print(f"Error writing first column at row {row_num}: {e}") - + if sheet == "METADATA_LAB": # Format the first column for all data rows (from row 5 onwards) max_rows = 1000 # Maximum number of rows to format From c02d2c258ba43bbfc34f1ba5ca1df3077dc18e87 Mon Sep 17 00:00:00 2001 From: albatalavera Date: Thu, 12 Feb 2026 09:05:15 +0100 Subject: [PATCH 046/110] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ba00b2c..82f854a4 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Fix header generation for `METADATA_LAB` and `DATA_VALIDATION`: now "CAMPO" is the first row, "REQUIRED" last [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) - Now Metadatalab validation sheets (DATA_VALIDATION and DROPDOWNS) only generate the included fields, not all of them [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) - Fixed datetime recognition for schema example generation and validation [#854](https://github.com/BU-ISCIII/relecov-tools/pull/854) +- Restore formatting and validation behavior after header reordering + add Excel warnings for MEPRAM [#856] (https://github.com/BU-ISCIII/relecov-tools/pull/856) #### Changed From 4faed74e22d5fcc4d04fc73dad37d1876365a935 Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 12:19:00 +0100 Subject: [PATCH 047/110] Included configuration overwriting through extra_config and validation via required_conf --- relecov_tools/config_json.py | 321 ++++++++++++++++++++++++++--------- 1 file changed, 242 insertions(+), 79 deletions(-) diff --git a/relecov_tools/config_json.py b/relecov_tools/config_json.py index 1c89532d..13afaf7a 100644 --- a/relecov_tools/config_json.py +++ b/relecov_tools/config_json.py @@ -3,6 +3,7 @@ import os import yaml import logging +import copy import relecov_tools.utils @@ -67,8 +68,7 @@ def __init__( """ # ── 1. Load defaults ------------------------------------------------ with open(json_file, "r", encoding="utf-8") as fh: - base_conf = json.load(fh) - + self.base_conf = json.load(fh) # ── 2. Optionally load user overrides ------------------------------- extra_conf, active_extra = {}, False if extra_config and os.path.isfile(ConfigJson._extra_config_path): @@ -87,23 +87,12 @@ def __init__( "Run `relecov-tools add-extra-config` to include additional configuration" ) - # ── 3. Build an index --------------- - # Needed to relocate overrides that appear outside their branch - self._leaf_parent = {} - - def _index_parents(node: dict, top_key: str): - if not isinstance(node, dict): - return - for k, v in node.items(): - self._leaf_parent.setdefault(k, top_key) - _index_parents(v, top_key) - - for first_level_key, subtree in base_conf.items(): - _index_parents(subtree, first_level_key) - - # ── 4. Merge defaults + overrides into params/commands --------------- - self.json_data = self._nested_merge_with_commands(base_conf, extra_conf) - + # ── 3. Merge defaults + overrides into params/args --------------- + self.json_data = self._nested_merge_with_args(self.base_conf, extra_conf) + missing_required = self.validate_configuration(self.json_data) + if missing_required: + log.error(f"Could not validate current configuration. Missing required config: {missing_required}") + raise ValueError(f"Required configuration missing in current config: {missing_required}") log.debug( "Loaded additional configuration." if active_extra @@ -200,46 +189,137 @@ def _recursive_lookup(node, key): # ── 4. Legacy with deeper nesting ─────────────────────────────────── return _recursive_lookup(topic_block, found) - - def include_extra_config(self, config_file, config_name=None, force=False): - """Include given file content as additional configuration for later usage. - + + def validate_configuration(self, config_dict: dict): + """Validate the given configuration dictionary, preferably after merge. + Args: - config_name (str): Name of the config key that will be added. - config_file (str): Path to the input file, either Json or Yaml format. - force (bool, optional): Force replacement of existing configuration if needed. + config_name (dict): Dictionary containing all the configuration from + the JSON or YAML file. Raises: - ValueError: If provided config_file does not have a supported extension. + ValueError: If any there is any required field missing. + + Returns: + missing_required (list): List of the missing configuration fields. """ - - def validate_new_config(config_name, current_conf, force=False): - """Check if config_name is already in configuration""" - if config_name in current_conf.keys(): - if force: - log.info( - f"`{config_name}` already in config. Replacing its content..." - ) - return True - else: - err_txt = f"Cannot add `{config_name}`: already in config. Set `force` to force replacement" - log.error(err_txt) - return False + def recursive_validation(deep_conf: dict, parent: str): + """Recursively check if required keys are present in given config""" + missing = [] + required_list = deep_conf.get(req_key, []) + for req in required_list: + if deep_conf.get(req, "") == "": + # No he usado `not` porque 0 y False son valores válidos + new_parent = ".".join([parent, req]) if parent else req + missing.append(new_parent) + for key, val in deep_conf.items(): + if isinstance(val, dict): + new_parent = ".".join([parent, key]) if parent else key + missing.extend(recursive_validation(val, new_parent)) + return missing + + req_key = "required_conf" + glob_required = config_dict.pop(req_key) if req_key in config_dict else [] + log.debug(f"Starting config validation for given keys: {config_dict.keys()}") + missing_required = [x for x in glob_required if not config_dict.get(x)] + for key in config_dict.keys(): + conf_data = config_dict[key] + if "params" in conf_data and "commands" in conf_data: + # Its parsed from _nested_merge_with_args() so config is inside params + missing_required.extend( + recursive_validation(config_dict[key]["params"], parent=key) + ) else: + missing_required.extend( + recursive_validation(config_dict[key], parent=key) + ) + return missing_required + + def insert_new_config(self, config_name, current_conf, force=False): + """Check if config_name is already in configuration""" + if config_name in current_conf.keys(): + if force: + log.info( + f"`{config_name}` already in config. Replacing its content..." + ) return True + else: + err_txt = f"Cannot add `{config_name}`: already in config. Set `force` to force replacement" + log.error(err_txt) + return False + else: + return True + + def merge_config(self, config_dict, new_config, force=True): + """ + Recursively merge a new configuration dictionary into an existing one. - def rec_merge_config(current_conf, new_conf, force=False): + This method updates ``config_dict`` with values from ``new_config`` while: + - Preserving existing keys unless specified with **force** + - Recursively merging nested dictionaries + - Tracking which changes were applied or canceled + - Delegating overwrite decisions to ``self.insert_new_config`` + + Args: + config_dict (dict): + The original configuration dictionary to update. + + new_config (dict): + The new configuration values to merge into the original dictionary. + + force (bool, optional): + If True, allows overwriting existing values. Defaults to True. + + Returns: + tuple: + - merged_dict (dict): The updated configuration dictionary. + - summary (dict): A dictionary summarizing merge actions with keys: + * "Included": list of applied changes + * "Canceled": list of rejected changes + """ + def _rec_merge(current_conf, new_conf, force=False, parent=""): """Recursively add new configuration without deleting the existing keys""" for k, v in new_conf.items(): - if isinstance(v, dict) and k in current_conf: - rec_merge_config(current_conf[k], v, force=force) + new_parent = ".".join([parent, k]) if parent else k + if k in current_conf and current_conf[k] == v: + continue + if isinstance(v, dict) and k in current_conf and isinstance(current_conf[k], dict): + _rec_merge(current_conf[k], v, force=force, parent=new_parent) else: - change_msg = f"{k}: {current_conf.get(k, '')} -> {v}" - if not validate_new_config(k, current_conf, force=force): + change_msg = f"{new_parent}: {current_conf.get(k, '')} -> {v}" + if not self.insert_new_config(k, current_conf, force=force): summary["Canceled"].append(change_msg) continue + if k == "required_conf": + try: + updated_list = list(set(current_conf.get(k, []) + v)) + change_msg = f"{new_parent}: {current_conf.get(k, '')} -> {updated_list}" + current_conf[k] = updated_list + except TypeError: + log.error( + f"Skipped {new_parent}. It should be a list instead of {type(v)}" + ) + else: + current_conf[k] = v summary["Included"].append(change_msg) - current_conf[k] = v + return current_conf + + summary = {"Canceled": [], "Included": []} + merged_dict = _rec_merge(config_dict, new_config, force=force) + return merged_dict, summary + + + def include_extra_config(self, config_file, config_name=None, force=False): + """Include given file content as additional configuration for later usage. + + Args: + config_name (str): Name of the config key that will be added. + config_file (str): Path to the input file, either Json or Yaml format. + force (bool, optional): Force replacement of existing configuration if needed. + + Raises: + ValueError: If provided config_file does not have a supported extension. + """ if not os.path.isfile(str(config_file)): raise FileNotFoundError(f"Extra config file {config_file} does not exist") @@ -263,9 +343,9 @@ def rec_merge_config(current_conf, new_conf, force=False): ) if additional_config is not None: if config_name is None: - rec_merge_config(additional_config, file_content, force=force) + additional_config, summary = self.merge_config(additional_config, file_content, force=force) else: - if validate_new_config(config_name, self.json_data, force=force): + if self.insert_new_config(config_name, self.json_data, force=force): msg = f"{config_name}: {file_content}" summary["Included"].append(msg) additional_config.update({config_name: file_content}) @@ -275,6 +355,13 @@ def rec_merge_config(current_conf, new_conf, force=False): else: additional_config = {config_name: file_content} summary["Included"].extend(list(additional_config.keys())) + full_test_conf, _ = self.merge_config( + copy.deepcopy(self.base_conf), additional_config, force=force + ) + missing_required = self.validate_configuration(full_test_conf) + if missing_required: + log.error(f"Could not validate incoming extra config. Missing required config: {missing_required}") + raise ValueError(f"Required configuration missing from incoming config: {missing_required}") relecov_tools.utils.write_json_to_file( additional_config, ConfigJson._extra_config_path ) @@ -284,36 +371,108 @@ def rec_merge_config(current_conf, new_conf, force=False): print(state, ":\n", "\n".join([str(msg) for msg in changes])) return - def remove_extra_config(self, config_name): - """Remove key from extra_config configuration file + def remove_extra_config(self, topic=None, deep=None, force=False): + """Remove key from extra_config configuration file. Args: - config_name (str): _description_ + topic (str | None): top-level key + deep (str | None): nested key to remove + force (bool): if False, ask for confirmation """ - if config_name is None: + + if topic is None and deep is None: + # Remove extra_config.json file + if not force: + confirm = input("Remove entire extra_config file? [y/N]: ") + if confirm.lower() != "y": + print("Aborted.") + return + try: os.remove(ConfigJson._extra_config_path) log.info("Removed extra config file.") except OSError as e: log.error(f"Could not remove extra config file: {e}") + return + + with open(ConfigJson._extra_config_path, "r") as fh: + additional_config = json.load(fh) + + removed_paths = [] + + def recursive_remove(d, key_to_remove, current_path=""): + """Recursively search and remove configuration""" + removed = False + + if isinstance(d, dict): + keys_to_delete = [] + for k, v in d.items(): + path = f"{current_path}.{k}" if current_path else k + + if k == key_to_remove: + keys_to_delete.append((path, k)) + removed = True + else: + if recursive_remove(v, key_to_remove, path): + removed = True + + for tup in keys_to_delete: + path = tup[0] + k = tup[1] + if not force: + confirm = input(f"Remove '{path}'? [y/N]: ") + if confirm.lower() != "y": + print(f"Skipped {path}.") + continue + d.pop(k) + removed_paths.append(path) + + elif isinstance(d, list): + for idx, item in enumerate(d): + path = f"{current_path}[{idx}]" + if recursive_remove(item, key_to_remove, path): + removed = True + + return removed + + if topic and deep is None: + # Only remove topic + if topic not in additional_config: + log.error(f"Main key `{topic}` not found in extra_config") return - else: - with open(ConfigJson._extra_config_path, "r") as fh: - additional_config = json.load(fh) - try: - additional_config.pop(config_name) - except KeyError: - log.error(f"{config_name} not found in extra_config for removal") - return - except OSError as e: - log.error(f"Could not remove {config_name} key: {e}") + + if not force: + confirm = input(f"Remove entire config '{topic}'? [y/N]: ") + if confirm.lower() != "y": + print("Aborted.") + return + + additional_config.pop(topic) + removed_paths.append(topic) + + elif topic and deep: + if topic not in additional_config: + log.error(f"Main key `{topic}` not found in extra_config") return - relecov_tools.utils.write_json_to_file( - additional_config, ConfigJson._extra_config_path - ) - log.info(f"Successfully removed {config_name} from extra config") - print(f"Finished clearing extra config: {config_name}") - return + # Try to find config deep inside topic + recursive_remove(additional_config[topic], deep, topic) + + elif topic is None and deep: + # Try to find deep anywhere, even for multiple matches + recursive_remove(additional_config, deep) + + if not removed_paths: + log.warning(f"No matches found for topic={topic}, deep={deep}") + return + + # ---- write updated file ---- + relecov_tools.utils.write_json_to_file( + additional_config, + ConfigJson._extra_config_path + ) + + log.info(f"Removed {len(removed_paths)} key(s)") + print(f"Finished clearing extra config. Removed: {removed_paths}") def get_lab_code(self, submitting_institution): """Get the corresponding code for the given submitting institution""" @@ -331,27 +490,31 @@ def get_lab_code(self, submitting_institution): log.warning(f"{submitting_institution} not found in institutions_config") return - def _nested_merge_with_commands(self, base_conf: dict, extra_conf: dict) -> dict: + def _nested_merge_with_args(self, base_conf: dict, extra_conf: dict) -> dict: """ - Produce the *params / commands* structure described in the class docstring. + Produce the *params / args* structure described in the class docstring. - • Everything from *configuration.json* → **params** - • Everything from *extra_config.json* → **commands** + • Everything from 'args' in *extra_config.json* → **commands** + • Everything else *configuration.json* or *extra_config.json* → **params** (relocating the key to its first-level parent if necessary). + • Note: Data from *extra_config.json* will override config in *configuration.json* """ merged = {} + base_reqs = base_conf.pop("required_conf") if "required_conf" in base_conf else [] + extra_reqs = extra_conf.pop("required_conf") if "required_conf" in extra_conf else [] + merged_reqs = list(set(base_reqs + extra_reqs)) + merged["required_conf"] = merged_reqs + for key, val in base_conf.items(): merged[key] = {"params": val, "commands": {}} for key, val in extra_conf.items(): + val_args = val.get("args", []) if key in merged: - merged[key]["commands"] = val - elif key in self._leaf_parent: - parent = self._leaf_parent[key] - merged.setdefault(parent, {"params": {}, "commands": {}}) - merged[parent]["commands"][key] = val + merged[key]["commands"] = val_args + current_params = copy.deepcopy(merged[key]["params"]) + merged[key]["params"], _ = self.merge_config(current_params, val) else: - merged[key] = {"params": {}, "commands": val} - + merged[key] = {"params": val, "commands": val_args} return merged From f3b6c16ede270efbc6fbabaeeb862794660436de Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 12:32:31 +0100 Subject: [PATCH 048/110] Updated add-extra-config and included Initial configuration description --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5a6c7dcb..5c972ea7 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,10 @@ Further explanation for each argument: - `--debug`: Activate DEBUG logs. When not provided, logs will only show the most relevant information. - `--hex-code`: By default all files generated will include a date and an unique hexadecimal code which is randomly generated upon execution. Using this argument you can pre-define the resulting hexadecimal code. NOTE: Keep in mind that this could overwrite existing files. +### Initial configuration. + +Prior to using any module you will need to setup specific configuration for your project using `add-extra-config` module, usage documentation [here](#add-extra-config). There are examples of `initial_config.yaml` files in `relecov_tools/conf/`. Make sure to preserve the `required_conf` keys defined in `relecov_tools/conf/configuration.json`, as they are always validated at runtime. + ## Modules #### download @@ -480,7 +484,7 @@ Options: #### add-extra-config -This command is used to create an additional config file that will override the configuration in `conf/configuration.json`. You may pass this configuration in a YAML or JSON file. If you want the keys in your additional configuration to be grouped under a certain keyname, use param `-n, --config_name`. Otherwise, the file content will be parsed with no additional processing. +This command is used to create an additional config file that will override the configuration in `conf/configuration.json` except for `required_conf` keys which are merged from the two configs. Passing the whole configuration in a YAML or JSON file is recommended. If you want the keys in your additional configuration to be grouped under a certain keyname, use param `-n, --config_name`. Otherwise, the file content will be parsed with no additional processing. The resulting configuration can be found in `/.relecov_tools/extra_config.json` ``` Usage: relecov-tools add-extra-config [OPTIONS] @@ -492,8 +496,10 @@ Options: -f, --config_file TEXT Path to the input file: Json or Yaml format --force Force replacement of existing configuration if needed - --clear_config Remove given config_name from extra config: Use with + --remove_config Remove given config_name from extra config: Use with empty --config_name to remove all + --topic_config Name of the primary config key. Only used with + --remove_config to narrow the search for --config_name" --help Show this message and exit. ``` From f53bc55b4f4f99f2a45c095ba1e2c6113b898541 Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 12:33:37 +0100 Subject: [PATCH 049/110] Included a new arg in add-extra-config to narrow removal --- relecov_tools/__main__.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/relecov_tools/__main__.py b/relecov_tools/__main__.py index b5976ee0..fb1f4ed9 100755 --- a/relecov_tools/__main__.py +++ b/relecov_tools/__main__.py @@ -102,7 +102,6 @@ def merge_with_extra_config(ctx, add_extra_config=False): sig = inspect.signature(func) valid_keys = sig.parameters.keys() filtered = {k: v for k, v in merged.items() if k in valid_keys} - return filtered @@ -1381,13 +1380,20 @@ def upload_results( help="Force replacement of existing configuration if needed", ) @click.option( - "--clear_config", + "-r", + "--remove_config", is_flag=True, default=False, help="Remove given config_name from extra config: Use with empty --config_name to remove all", ) +@click.option( + "-t", + "--topic_config", + default=None, + help="Name of the primary config key. Only used with --remove_config to narrow the search for --config_name", +) @click.pass_context -def add_extra_config(ctx, config_name, config_file, force, clear_config): +def add_extra_config(ctx, config_name, config_file, force, remove_config, topic_config): """Save given file content as additional configuration""" debug = ctx.obj.get("debug", False) try: @@ -1395,8 +1401,8 @@ def add_extra_config(ctx, config_name, config_file, force, clear_config): config_json = relecov_tools.config_json.ConfigJson(extra_config=True) else: config_json = relecov_tools.config_json.ConfigJson() - if clear_config: - config_json.remove_extra_config(config_name) + if remove_config: + config_json.remove_extra_config(topic=topic_config, deep=config_name, force=force) else: config_json.include_extra_config( config_file, config_name=config_name, force=force From ebde61f694fe72e7ec984f1dcf7140fa5c87a51d Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 12:35:42 +0100 Subject: [PATCH 050/110] Removed all project-specific configuration --- relecov_tools/conf/configuration.json | 382 ++++++-------------------- 1 file changed, 77 insertions(+), 305 deletions(-) mode change 100755 => 100644 relecov_tools/conf/configuration.json diff --git a/relecov_tools/conf/configuration.json b/relecov_tools/conf/configuration.json old mode 100755 new mode 100644 index 9ffa45d2..a157f55c --- a/relecov_tools/conf/configuration.json +++ b/relecov_tools/conf/configuration.json @@ -1,18 +1,17 @@ -{ +{ + "required_conf": ["generic", "pipeline_manager", "sftp_handle", "read_lab_metadata", "upload_to_gisaid", "upload_to_ena", "update_db"], "generic": { + "required_conf": ["project_name", "logs_config", "validate_config", "json_schemas", "institution_mapping_file", "not_provided_field"], + "project_name": "", "logs_config": { - "default_outpath": "/tmp/" + "default_outpath": "/tmp/", + "modules_outpath": {} }, "validate_config": { - "default_sample_id_registry": "/tmp/unique_sampleid_registry.json", "starting_date": "2020-01-01", "sample_id_ontology": "GENEPIO:0000079" }, - "json_schemas": { - "relecov_schema": "relecov_schema.json", - "ena_schema": "ena_schema.json", - "gisaid_schema": "gisaid_schema.json" - }, + "json_schemas": {}, "institution_mapping_file": { "ISCIII": "ISCIII.json", "HUGTiP": "HUGTiP.json" @@ -20,56 +19,40 @@ "not_provided_field": "Not Provided [SNOMED:434941000124101]" }, "pipeline_manager": { - "analysis_group": "RLV", - "analysis_user": "icasas_C", + "required_conf": [ + "analysis_group", + "analysis_user", + "doc_folder", + "analysis_folder", + "sample_stored_folder", + "sample_link_folder", + "organism_config" + ], + "analysis_group": "", + "analysis_user": "", "doc_folder": "DOC", "analysis_folder": "ANALYSIS", "sample_stored_folder": "RAW", "sample_link_folder": "00-reads", - "organism_config": { - "Severe acute respiratory syndrome coronavirus 2 [LOINC:LA31065-8]": { - "pipeline_template": "viralrecon", - "service_tag": "SARSCOV2", - "group_by_fields": [ - "sequencing_instrument_platform", - "enrichment_panel", - "enrichment_panel_version" - ] - }, - "Respiratory syncytial virus [SNOMED:6415009]": { - "pipeline_template": "IRMA", - "service_tag": "GENOMERSV", - "group_by_fields": [ - "sequencing_instrument_platform", - "enrichment_panel", - "enrichment_panel_version" - ] - }, - "Influenza virus [SNOMED:725894000]": { - "pipeline_templates": ["IRMA", "taxprofiler"], - "service_tag": "GENOMEFLU", - "group_by_fields": [ - "sequencing_instrument_platform" - ] - } - } + "organism_config": {} }, "sftp_handle": { - "sftp_connection": { - "sftp_server": "sftpgenvigies.isciii.es", - "sftp_port": "22" - }, - "metadata_processing": { - "sample_id_col": "Sample ID given for sequencing", - "header_flag": "CAMPO", - "excel_sheet": "METADATA_LAB", - "alternative_sheet": "5.Viral Characterisation and Se", - "alternative_flag": "CAMPO", - "alternative_sample_id_col": "Sample ID given for sequencing" - }, + "required_conf": [ + "sftp_connection", + "metadata_processing", + "abort_if_md5_mismatch", + "analysis_results_folder", + "platform_storage_folder", + "allowed_file_extensions", + "allowed_download_options", + "skip_when_found", + "sample_name_regex" + ], + "sftp_connection": {}, + "metadata_processing": {}, "abort_if_md5_mismatch": "False", "analysis_results_folder": "ANALYSIS_RESULTS", - "platform_storage_folder": "/tmp/relecov", + "platform_storage_folder": "", "allowed_file_extensions": [ ".fastq.gz", ".fastq", @@ -94,7 +77,16 @@ "sample_name_regex": "(?P.+?)(?:[_\\. -]R?[12]|[_\\. -]read[12]|[_\\. -][12])?(?:_L\\d{3})?(?:_\\d{3})?(?:\\.(?:f(?:ast)?q(?:\\.gz)?|bam|cram))$" }, "read_lab_metadata": { - "default_project": "relecov", + "required_conf": [ + "schema_file", + "unique_sample_id", + "fixed_fields", + "organism_mapping", + "lab_metadata_req_json", + "required_post_processing", + "samples_json_fields", + "required_copy_from_other_field" + ], "schema_file": "relecov_schema.json", "unique_sample_id": "sequencing_sample_id", "fixed_fields": { @@ -115,130 +107,9 @@ "host_disease": "Influenza Infection [SNOMED:408687004]" } }, - "metadata_lab_heading": [ - "Organism", - "Public Health sample id (SIVIRA)", - "Sample ID given by originating laboratory", - "Sample ID given by the submitting laboratory", - "Sample ID given in the microbiology lab", - "Sample ID given if multiple rna-extraction or passages", - "Sample ID given for sequencing", - "ENA Sample ID", - "GISAID Virus Name", - "GISAID id", - "Originating Laboratory", - "Submitting Institution", - "Sequencing Institution", - "Sample Collection Date", - "Sample Received Date", - "Purpose of sampling", - "Biological Sample Storage Condition", - "Specimen source", - "Environmental Material", - "Environmental System", - "Collection Device", - "Host", - "Host Age Years", - "Host Age Months", - "Host Gender", - "Vaccinated", - "Specific medication for treatment or prophylaxis", - "Hospitalization", - "Admission to intensive care unit", - "Death", - "Immunosuppression", - "Sequencing Date", - "Nucleic acid extraction protocol", - "Commercial All-in-one library kit", - "Library Preparation Kit", - "Enrichment Protocol", - "If Enrichment Protocol Is Other, Specify", - "Enrichment panel/assay", - "If Enrichment panel/assay Is Other, Specify", - "Enrichment panel/assay version", - "Number Of Samples In Run", - "Runid", - "Sequencing Instrument Model", - "Flowcell Kit", - "Source material", - "Capture method", - "Sequencing technique", - "Library Layout", - "Gene Name 1", - "Diagnostic Pcr Ct Value 1", - "Gene Name 2", - "Diagnostic Pcr Ct Value-2", - "Authors", - "Sequence file R1", - "Sequence file R2" - ], - "alt_heading_equivalences": { - "Sample ID": "Sample ID given for sequencing", - "LAB ID" : "Originating Laboratory", - "Sequencing date\n Formato: YYYY-MM-DD" : "Sequencing Date", - "Commercial All-in-one library kit" : "Commercial All-in-one library kit", - "Library preparation kit " : "Library Preparation Kit", - "Enrichment protocol" : "Enrichment Protocol", - "if enrichment protocol is Other, specify" : "If Enrichment Protocol Is Other, Specify", - "Amplicon protocol" : "Enrichment panel/assay", - "if enrichment panel/assay is Other, specify" : "If Enrichment panel/assay Is Other, Specify", - "Amplicon version" : "Enrichment panel/assay version", - "Number Of Samples In Run" : "Number Of Samples In Run", - "Number of variants with effect (missense, frameshit, stop codon)" : "Number of variants with effect", - "Sequencing platforms (Illumina, Nanopore, IonTorrent, PacBio, other)" : "Sequencing Instrument Model", - "Variant designation table filename" : "Lineage analysis file", - "Library preparation kit" : "Library Preparation Kit", - "Library layout" : "Library Layout", - "Read lenght" : "Read length", - "SARS-CoV-2 Lineage designation" : "Lineage designation", - "fastq filename R1" : "Sequence file R1 fastq", - "fastq filename R2" : "Sequence file R2 fastq" - }, - "lab_metadata_req_json": { - "laboratory_data": { - "file": "laboratory_address.json", - "map_field": "collecting_institution_code_1", - "adding_fields": [ - "collecting_institution", - "collecting_institution_code_2", - "autonom_cod", - "collecting_institution_address", - "collecting_institution_email", - "geo_loc_state", - "geo_loc_state_cod", - "geo_loc_region", - "geo_loc_region_cod", - "geo_loc_city", - "geo_loc_city_cod", - "geo_loc_country", - "post_code", - "dep_func", - "center_class_code", - "collecting_institution_function", - "lab_geo_loc_latitude", - "lab_geo_loc_longitude", - "collecting_institution_phone" - ] - }, - "geo_location_data": { - "file": "geo_loc_cities.json", - "map_field": "geo_loc_city", - "adding_fields": [ - "geo_loc_latitude", - "geo_loc_longitude" - ] - }, - "specimen_source_splitting": { - "file": "anatomical_material_collection_method.json", - "map_field": "specimen_source", - "adding_fields": [ - "anatomical_material", - "anatomical_part", - "body_product", - "collection_method" - ] - } - }, + "metadata_lab_heading": [], + "alt_heading_equivalences": {}, + "lab_metadata_req_json": {}, "required_post_processing": { "host_common_name": { "Human": "host_scientific_name::Homo sapiens" @@ -251,18 +122,8 @@ "Oxford Nanopore": "sequencing_instrument_platform::Oxford Nanopore" } }, - "required_copy_from_other_field": { - "isolate_sample_id": "sequencing_sample_id" - }, - "samples_json_fields": [ - "sequence_file_R1_md5", - "sequence_file_R2_md5", - "sequence_file_R1", - "sequence_file_R2", - "sequence_file_path_R1", - "sequence_file_path_R2", - "batch_id" - ], + "required_copy_from_other_field": {}, + "samples_json_fields": [], "projects": { "mepram": { "schema_file": "mepram_schema.json", @@ -315,21 +176,11 @@ "covv_subm_sample_id", "covv_authors" ], - "GISAID_configuration": { - "submitter": "GISAID_ID" - } + "GISAID_configuration": {} }, "upload_to_ena": { - "ENA_configuration": { - "study_alias": "RELECOV", - "design_description": "Design Description", - "experiment_title": "Project for ENA submission RELECOV", - "study_title": "RELECOV Spanish Network for genomics surveillance", - "study_type": "Whole Genome Sequencing", - "study_id": "ERP137164", - "ena_broker_name": "Instituto de Salud Carlos III" - }, - "checklist": "ERC000033", + "ENA_configuration": {}, + "checklist": "", "templates_path": "", "tool": { "tool_name": "ena-upload-cli", @@ -385,125 +236,46 @@ "instrument_model", "collecting institution" ], - "ena_fixed_fields": { - "broker_name": "Instituto de Salud Carlos III", - "file_format": "FASTQ", - "study_alias": "RELECOV", - "study_title": "RELECOV Spanish Network for genomics surveillance", - "study_abstract": "RELECOV is a Spanish Network for genomics surveillance", - "insert_size": "0" - }, + "ena_fixed_fields": {}, "accession_fields": [ "ena_study_accession", "ena_sample_accession", "ena_experiment_accession", "ena_run_accession" ], - "additional_formating": { - "sample_description": [ - "host_common_name", - "anatomical_part", - "collection_method" - ], - "design_description": [ - "library_layout", - "library_preparation_kit", - "library_selection", - "library_strategy" - ], - "sequence_file_path_R1": [ - "sequence_file_path_R1", - "sequence_file_R1" - ], - "sequence_file_path_R2": [ - "sequence_file_path_R2", - "sequence_file_R2" - ], - "experiment_alias": [ - "isolate_sample_id", - "sample_collection_date" - ], - "run_alias": [ - "isolate_sample_id", - "sample_collection_date" - ], - "experiment_title": [ - "sequencing_instrument_model", - "isolate_sample_id" - ], - "file_name": [ - "sequence_file_R1", - "sequence_file_R2" - ], - "file_checksum": [ - "sequence_file_R1_md5", - "sequence_file_R2_md5" - ] - } + "additional_formating": {} }, "update_db": { - "platform-params":{ - "iskylims": { - "server_url": "http://relecov-iskylims.isciiides.es", - "api_url": "/wetlab/api/", - "store_samples": "create-sample", - "url_project_fields": "projects-fields", - "url_sample_fields": "sample-fields", - "url_lab_request_mapping": "lab-request-mapping", - "param_sample_project": "project", - "project_name": "relecov", - "token": "" - }, - "relecov": { - "server_url": "http://relecov-platform.isciiides.es", - "api_url": "/api/", - "store_samples": "createSampleData", - "bioinfodata": "createBioinfoData", - "variantdata": "createVariantData", - "check_sample": "checkSampleExists", - "sftp_info": "sftpInfo", - "token": "" - } - }, + "required_conf": ["platform-params", "data_upload_types", "full_update_steps", "iskylims_fixed_values"], + "platform-params": {}, "data_upload_types": [ "sample", "bioinfodata", "variantdata" ], "full_update_steps": [ - { "id": "1", "type": "sample", "platform": "iskylims" }, - { "id": "2", "type": "sample", "platform": "relecov" }, - { "id": "3", "type": "bioinfodata", "platform": "relecov" }, - { "id": "4", "type": "variantdata", "platform": "relecov" } + { + "id": "1", + "type": "sample", + "platform": "iskylims" + }, + { + "id": "2", + "type": "sample", + "platform": "relecov" + }, + { + "id": "3", + "type": "bioinfodata", + "platform": "relecov" + }, + { + "id": "4", + "type": "variantdata", + "platform": "relecov" + } ], - "iskylims_fixed_values": { - "patient_core": "", - "sample_project": "Relecov", - "only_recorded": "Yes", - "sample_location": "Not defined" - }, - "relecov_sample_metadata": [ - "authors", - "collecting_institution", - "collecting_institution_code_1", - "collecting_lab_sample_id", - "ena_broker_name", - "ena_sample_accession", - "gisaid_accession_id", - "gisaid_virus_name", - "microbiology_lab_sample_id", - "sequence_file_path_R1", - "sequence_file_path_R2", - "schema_name", - "schema_version", - "sequencing_date", - "sequence_file_R1_md5", - "sequence_file_R2_md5", - "sequence_file_R1", - "sequence_file_R2", - "sequencing_sample_id", - "submitting_institution", - "submitting_lab_sample_id" - ] + "iskylims_fixed_values": {}, + "relecov_sample_metadata": [] } } From 6c11da34d8a2ef96e994c8c948bddf8bb36a9043 Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 12:36:07 +0100 Subject: [PATCH 051/110] Updated how project name is extracted from config --- relecov_tools/read_lab_metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/read_lab_metadata.py b/relecov_tools/read_lab_metadata.py index d8504bb0..9a283f7d 100755 --- a/relecov_tools/read_lab_metadata.py +++ b/relecov_tools/read_lab_metadata.py @@ -105,7 +105,7 @@ def __init__( self.readmeta_config = ( self.configuration.get_configuration("read_lab_metadata") or {} ) - default_project = self.readmeta_config.get("default_project") or "relecov" + default_project = self.configuration.get_topic_data("generic", "project_name") self.project = (project or default_project).lower() self.project_config = self._load_project_config( self.readmeta_config, self.project, default_project From 247c532dee157e7dbdb86fb8200e90ad2cf4c014 Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 12:40:21 +0100 Subject: [PATCH 052/110] Included initial_config.yaml files for three projects --- .../conf/initial_config-EQA2026.yaml | 346 ++++++++++++++++ relecov_tools/conf/initial_config-MEPRAM.yaml | 371 ++++++++++++++++++ .../conf/initial_config-relecov.yaml | 371 ++++++++++++++++++ 3 files changed, 1088 insertions(+) create mode 100644 relecov_tools/conf/initial_config-EQA2026.yaml create mode 100644 relecov_tools/conf/initial_config-MEPRAM.yaml create mode 100644 relecov_tools/conf/initial_config-relecov.yaml diff --git a/relecov_tools/conf/initial_config-EQA2026.yaml b/relecov_tools/conf/initial_config-EQA2026.yaml new file mode 100644 index 00000000..0487c4d1 --- /dev/null +++ b/relecov_tools/conf/initial_config-EQA2026.yaml @@ -0,0 +1,346 @@ +# THIS INITIAL CONFIG SHOULD BE SET AFTER INSTALLATION +# MAKE A COPY OF THIS FILE IN YOUR HOME AND CONFIGURE IT TO YOUR NEEDS +# THEN RUN: relecov-tools add-extra-config --config_file path/to/initial_config_copy.yaml +# IMPORTANT: Do not remove nor modify the required_conf keys unless you explicitly need to, that would surely break the code +# NOTE: Each key in 'modules_outpath' must match with a Command as listed with `relecov-tools --help` (but with '_' instead of '-') + +required_conf: ['generic', 'pipeline_manager', 'sftp_handle', 'read_lab_metadata', 'upload_to_gisaid', 'upload_to_ena', 'update_db', 'build_schema', 'download', 'logs_to_excel', 'mail_sender', 'map', 'metadata_homogeneizer', 'read_bioinfo_metadata', 'upload_results', 'validate', 'wrapper'] +generic: + required_conf: ["project_name", "json_schemas", "logs_config", "validate_config"] + project_name: "EQA2026" + logs_config: + default_outpath: /tmp/ + modules_outpath: + wrapper: /tmp/wrapper + download: /tmp/download + pipeline_manager: /tmp/pipeline_manager + read_bioinfo_metadata: /tmp/read_bioinfo_metadata + json_schemas: + relecov_schema: relecov_schema_EQA.json + validate_config: + sample_id_ontology: "GENEPIO:0001123" + +# CONFIG FOR MODULE PARAMETERS +mail_sender: + required_conf: ["args"] + args: + delivery_template_path_file: /path/templates/ + email_host: host + email_port: port + email_host_user: email@gmail.com + email_use_tls: true + yaml_cred_path: /path/credentials.yml + institutions_guide_path: /path/contacts.json +download: + required_conf: ["args"] + args: + user: '' + password: '' + conf_file: '' + download_option: '' + output_dir: '' + target_folders: [] + subfolder: RELECOV +read_lab_metadata: + required_conf: ["args", "unique_sample_id", "metadata_lab_heading_file", "alt_heading_equivalences", "lab_metadata_req_json", "samples_json_fields"] + args: + metadata_file: '' + sample_list_file: '' + output_dir: '' + files_folder: '' + cast_values_from_schema: true + sample_data_map_field: collecting_lab_sample_id + schema_file: relecov_schema_EQA.json + metadata_lab_heading_file: read_lab_metadata_heading_default.json + alt_heading_equivalences: + Sample ID: Sample ID given for sequencing + LAB ID: Originating Laboratory + "Sequencing date Formato: YYYY-MM-DD": Sequencing Date + Commercial All-in-one library kit: Commercial All-in-one library kit + 'Library preparation kit ': Library Preparation Kit + Enrichment protocol: Enrichment Protocol + if enrichment protocol is Other, specify: If Enrichment Protocol Is Other, Specify + Amplicon protocol: Enrichment panel/assay + if enrichment panel/assay is Other, specify: If Enrichment panel/assay Is Other, Specify + Amplicon version: Enrichment panel/assay version + Number Of Samples In Run: Number Of Samples In Run + Number of variants with effect (missense, frameshit, stop codon): Number of variants with effect + Sequencing platforms (Illumina, Nanopore, IonTorrent, PacBio, other): Sequencing Instrument Model + Variant designation table filename: Lineage analysis file + Library preparation kit: Library Preparation Kit + Library layout: Library Layout + Read lenght: Read length + SARS-CoV-2 Lineage designation: Lineage designation + fastq filename R1: Sequence file R1 fastq + fastq filename R2: Sequence file R2 fastq + lab_metadata_req_json: {} + json_enrich: + on_missing_schema_field: warn + required_copy_from_other_field: {} + samples_json_fields: + - sequence_file_R1_md5 + - sequence_file_R2_md5 + - sequence_file_R1 + - sequence_file_R2 + - sequence_file_path_R1 + - sequence_file_path_R2 + - batch_id + +validate: + required_conf: ["args"] + args: + json_file: '' + json_schema_file: '' + metadata: '' + output_dir: '' + excel_sheet: '' + upload_files: false + logsum_file: '' + +map: + required_conf: ["args"] + args: + destination_schema: '' + json_file: '' + origin_schema: '' + output_dir: '' + schema_file: '' + +upload_to_ena: + required_conf: ["args", "ENA_configuration", "checklist", "ena_fixed_fields", "additional_formating"] + args: + user: '' + password: '' + center: '' + ena_json: '' + template_path: '' + action: ADD + dev: false + upload_fastq: false + metadata_types: [] + output_dir: '' + ENA_configuration: + study_alias: RELECOV + design_description: Design Description + experiment_title: Project for ENA submission RELECOV + study_title: RELECOV Spanish Network for genomics surveillance + study_type: Whole Genome Sequencing + study_id: ERP137164 + ena_broker_name: Instituto de Salud Carlos III + checklist: ERC000033 + ena_fixed_fields: + broker_name: Instituto de Salud Carlos III + file_format: FASTQ + study_alias: RELECOV + study_title: RELECOV Spanish Network for genomics surveillance + study_abstract: RELECOV is a Spanish Network for genomics surveillance + insert_size: '0' + additional_formating: + sample_description: + - host_common_name + - anatomical_part + - collection_method + design_description: + - library_layout + - library_preparation_kit + - library_selection + - library_strategy + sequence_file_path_R1: + - sequence_file_path_R1 + - sequence_file_R1 + sequence_file_path_R2: + - sequence_file_path_R2 + - sequence_file_R2 + experiment_alias: + - isolate_sample_id + - sample_collection_date + run_alias: + - isolate_sample_id + - sample_collection_date + experiment_title: + - sequencing_instrument_model + - isolate_sample_id + file_name: + - sequence_file_R1 + - sequence_file_R2 + file_checksum: + - sequence_file_R1_md5 + - sequence_file_R2_md5 + +upload_to_gisaid: + required_conf: ["args"] + args: + user: '' + password: '' + client_id: '' + token: '' + gisaid_json: '' + input_path: '' + output_dir: '' + frameshift: '' + proxy_config: '' + single: false + gzip: false + GISAID_configuration: + submitter: GISAID_ID + +update_db: + required_conf: ["args", "platform-params", "iskylims_fixed_values", "relecov_sample_metadata"] + args: + user: '' + password: '' + json: '' + type: '' + platform: '' + server_url: '' + full_update: false + long_table: '' + platform-params: + iskylims: + server_url: http://relecov-iskylims.isciiides.es + api_url: /wetlab/api/ + store_samples: create-sample + url_project_fields: projects-fields + url_sample_fields: sample-fields + param_sample_project: project + project_name: relecov + token: '' + relecov: + server_url: http://relecov-platform.isciiides.es + api_url: /api/ + store_samples: createSampleData + bioinfodata: createBioinfoData + variantdata: createVariantData + check_sample: checkSampleExists + sftp_info: sftpInfo + token: '' + iskylims_fixed_values: + patient_core: '' + sample_project: Relecov + only_recorded: 'Yes' + sample_location: Not defined + relecov_sample_metadata: + - authors + - collecting_institution + - collecting_institution_code_1 + - collecting_lab_sample_id + - ena_broker_name + - ena_sample_accession + - gisaid_accession_id + - gisaid_virus_name + - microbiology_lab_sample_id + - sequence_file_path_R1 + - sequence_file_path_R2 + - schema_name + - schema_version + - sequencing_date + - sequence_file_R1_md5 + - sequence_file_R2_md5 + - sequence_file_R1 + - sequence_file_R2 + - sequencing_sample_id + - submitting_institution + - submitting_lab_sample_id + full_update_steps: [ + { "id": "1", "type": "sample", "platform": "iskylims" }, + { "id": "2", "type": "sample", "platform": "relecov" }, + { "id": "3", "type": "bioinfodata", "platform": "relecov" }, + { "id": "4", "type": "variantdata", "platform": "relecov" } + ] + +read_bioinfo_metadata: + required_conf: ["args"] + args: + json_file: '' + input_folder: '' + output_dir: '' + software_name: '' + update: false + +metadata_homogeneizer: + required_conf: ["args"] + args: + institution: '' + directory: '' + output_dir: '' + +pipeline_manager: + required_conf: ["args", "analysis_group", "analysis_user", "organism_config"] + args: + input: '' + templates_root: '' + output_dir: '' + folder_names: [] + analysis_group: RLV + analysis_user: icasas_C + organism_config: + Severe acute respiratory syndrome coronavirus 2 [LOINC:LA31065-8]: + pipeline_template: viralrecon + service_tag: SARSCOV2 + group_by_fields: + - sequencing_instrument_platform + - enrichment_panel + - enrichment_panel_version + Respiratory syncytial virus [SNOMED:6415009]: + pipeline_template: IRMA + service_tag: GENOMERSV + group_by_fields: + - sequencing_instrument_platform + - enrichment_panel + - enrichment_panel_version + Influenza virus [SNOMED:725894000]: + pipeline_templates: + - IRMA + - taxprofiler + service_tag: GENOMEFLU + group_by_fields: + - sequencing_instrument_platform + +build_schema: + required_conf: ["args"] + args: + input_file: '' + schema_base: '' + draft_version: '' + diff: false + version: '' + project: '' + non_interactive: false + output_dir: '' + +logs_to_excel: + required_conf: ["args"] + args: + lab_code: '' + output_dir: '' + files: [] + +wrapper: + required_conf: ["args"] + args: + output_dir: '' + +upload_results: + required_conf: ["args"] + args: + user: '' + password: '' + batch_id: '' + template_path: '' + project: Relecov + +sftp_handle: + required_conf: ["sftp_connection", "platform_storage_folder", "analysis_results_folder", "metadata_processing"] + sftp_connection: + sftp_server: sftpgenvigies.isciii.es + sftp_port: '22' + platform_storage_folder: /tmp/relecov + analysis_results_folder: ANALYSIS_RESULTS + metadata_processing: + required_conf: ["header_flag", "excel_sheet", "sample_id_col"] + header_flag: CAMPO + excel_sheet: METADATA_LAB + alternative_sheet: 5.Viral Characterisation and Se + alternative_flag: CAMPO + sample_id_col: Sample ID given by originating laboratory + alternative_sample_id_col: Sample ID given by originating laboratory diff --git a/relecov_tools/conf/initial_config-MEPRAM.yaml b/relecov_tools/conf/initial_config-MEPRAM.yaml new file mode 100644 index 00000000..e0dfe02d --- /dev/null +++ b/relecov_tools/conf/initial_config-MEPRAM.yaml @@ -0,0 +1,371 @@ +# THIS INITIAL CONFIG SHOULD BE SET AFTER INSTALLATION +# MAKE A COPY OF THIS FILE IN YOUR HOME AND CONFIGURE IT TO YOUR NEEDS +# THEN RUN: relecov-tools add-extra-config --config_file path/to/initial_config_copy.yaml +# IMPORTANT: Do not remove nor modify the required_conf keys unless you explicitly need to, that would surely break the code +# NOTE: Each key in 'modules_outpath' must match with a Command as listed with `relecov-tools --help` (but with '_' instead of '-') + +required_conf: ['generic', 'pipeline_manager', 'sftp_handle', 'read_lab_metadata', 'upload_to_gisaid', 'upload_to_ena', 'update_db', 'build_schema', 'download', 'logs_to_excel', 'mail_sender', 'map', 'metadata_homogeneizer', 'read_bioinfo_metadata', 'upload_results', 'validate', 'wrapper'] + +generic: + required_conf: ["project_name", "json_schemas", "logs_config"] + project_name: "MePRAM" + logs_config: + default_outpath: /tmp/ + modules_outpath: + wrapper: /tmp/wrapper + download: /tmp/download + pipeline_manager: /tmp/pipeline_manager + read_bioinfo_metadata: /tmp/read_bioinfo_metadata + json_schemas: + relecov_schema: mepram_schema.json + +# CONFIG FOR MODULE PARAMETERS +mail_sender: + required_conf: ["args"] + args: + delivery_template_path_file: /path/templates/ + email_host: host + email_port: port + email_host_user: email@gmail.com + email_use_tls: true + yaml_cred_path: /path/credentials.yml + institutions_guide_path: /path/contacts.json + +download: + required_conf: ["args"] + args: + user: '' + password: '' + conf_file: '' + download_option: '' + output_dir: '' + target_folders: [] + subfolder: REDLABRA + +read_lab_metadata: + required_conf: ["args", "unique_sample_id", "metadata_lab_heading_file", "alt_heading_equivalences", "lab_metadata_req_json", "samples_json_fields"] + args: + metadata_file: '' + sample_list_file: '' + output_dir: '' + files_folder: '' + cast_values_from_schema: true + metadata_lab_heading_file: read_lab_metadata_heading_default.json + alt_heading_equivalences: + Sample ID: Sample ID given for sequencing + LAB ID: Originating Laboratory + "Sequencing date Formato: YYYY-MM-DD": Sequencing Date + Commercial All-in-one library kit: Commercial All-in-one library kit + 'Library preparation kit ': Library Preparation Kit + Enrichment protocol: Enrichment Protocol + if enrichment protocol is Other, specify: If Enrichment Protocol Is Other, Specify + Amplicon protocol: Enrichment panel/assay + if enrichment panel/assay is Other, specify: If Enrichment panel/assay Is Other, Specify + Amplicon version: Enrichment panel/assay version + Number Of Samples In Run: Number Of Samples In Run + Number of variants with effect (missense, frameshit, stop codon): Number of variants with effect + Sequencing platforms (Illumina, Nanopore, IonTorrent, PacBio, other): Sequencing Instrument Model + Variant designation table filename: Lineage analysis file + Library preparation kit: Library Preparation Kit + Library layout: Library Layout + Read lenght: Read length + SARS-CoV-2 Lineage designation: Lineage designation + fastq filename R1: Sequence file R1 fastq + fastq filename R2: Sequence file R2 fastq + lab_metadata_req_json: + laboratory_data: + file: laboratory_address.json + map_field: collecting_institution_code_1 + adding_fields: + - collecting_institution_address + - collecting_institution_email + - collecting_institution_code_1 + - collecting_institution_code_2 + - geo_loc_state + - geo_loc_state_cod + - geo_loc_region + - geo_loc_city + - geo_loc_country + geo_location_data: + file: geo_loc_cities.json + map_field: geo_loc_city + adding_fields: + - geo_loc_latitude + - geo_loc_longitude + specimen_source_splitting: + file: anatomical_material_collection_method.json + map_field: specimen_source + adding_fields: + - anatomical_material + - anatomical_part + - body_product + - collection_method + required_copy_from_other_field: + isolate_sample_id: sequencing_sample_id + samples_json_fields: + - sequence_file_R1_md5 + - sequence_file_R2_md5 + - sequence_file_R1 + - sequence_file_R2 + - sequence_file_path_R1 + - sequence_file_path_R2 + - batch_id + +validate: + required_conf: ["args"] + args: + json_file: '' + json_schema_file: '' + metadata: '' + output_dir: '' + excel_sheet: '' + upload_files: false + logsum_file: '' + +map: + required_conf: ["args"] + args: + destination_schema: '' + json_file: '' + origin_schema: '' + output_dir: '' + schema_file: '' + +upload_to_ena: + required_conf: ["args", "ENA_configuration", "checklist", "ena_fixed_fields", "additional_formating"] + args: + user: '' + password: '' + center: '' + ena_json: '' + template_path: '' + action: ADD + dev: false + upload_fastq: false + metadata_types: [] + output_dir: '' + ENA_configuration: + study_alias: MEPRAM + design_description: Design Description + experiment_title: Project for ENA submission MEPRAM + study_title: MEPRAM Network + study_type: Whole Genome Sequencing + study_id: ERP137164 + ena_broker_name: Instituto de Salud Carlos III + checklist: ERC000033 + ena_fixed_fields: + broker_name: Instituto de Salud Carlos III + file_format: FASTQ + study_alias: MEPRAM + study_title: MEPRAM Network + study_abstract: MEPRAM is a Network + insert_size: '0' + additional_formating: + sample_description: + - host_common_name + - anatomical_part + - collection_method + design_description: + - library_layout + - library_preparation_kit + - library_selection + - library_strategy + sequence_file_path_R1: + - sequence_file_path_R1 + - sequence_file_R1 + sequence_file_path_R2: + - sequence_file_path_R2 + - sequence_file_R2 + experiment_alias: + - isolate_sample_id + - sample_collection_date + run_alias: + - isolate_sample_id + - sample_collection_date + experiment_title: + - sequencing_instrument_model + - isolate_sample_id + file_name: + - sequence_file_R1 + - sequence_file_R2 + file_checksum: + - sequence_file_R1_md5 + - sequence_file_R2_md5 + +upload_to_gisaid: + required_conf: ["args"] + args: + user: '' + password: '' + client_id: '' + token: '' + gisaid_json: '' + input_path: '' + output_dir: '' + frameshift: '' + proxy_config: '' + single: false + gzip: false + GISAID_configuration: + submitter: GISAID_ID + +update_db: + required_conf: ["args", "platform-params", "iskylims_fixed_values", "relecov_sample_metadata"] + args: + user: '' + password: '' + json: '' + type: '' + platform: '' + server_url: '' + full_update: false + long_table: '' + platform-params: + iskylims: + server_url: http://relecov-iskylims.isciiides.es + api_url: /wetlab/api/ + store_samples: create-sample + url_project_fields: projects-fields + url_sample_fields: sample-fields + param_sample_project: project + project_name: relecov + token: '' + relecov: + server_url: http://relecov-platform.isciiides.es + api_url: /api/ + store_samples: createSampleData + bioinfodata: createBioinfoData + variantdata: createVariantData + check_sample: checkSampleExists + sftp_info: sftpInfo + token: '' + iskylims_fixed_values: + patient_core: '' + sample_project: Mepram + only_recorded: 'Yes' + sample_location: Not defined + relecov_sample_metadata: + - authors + - collecting_institution + - collecting_institution_code_1 + - collecting_lab_sample_id + - ena_broker_name + - ena_sample_accession + - gisaid_accession_id + - gisaid_virus_name + - microbiology_lab_sample_id + - sequence_file_path_R1 + - sequence_file_path_R2 + - schema_name + - schema_version + - sequencing_date + - sequence_file_R1_md5 + - sequence_file_R2_md5 + - sequence_file_R1 + - sequence_file_R2 + - sequencing_sample_id + - submitting_institution + - submitting_lab_sample_id + full_update_steps: [ + { "id": "1", "type": "sample", "platform": "iskylims" }, + { "id": "2", "type": "sample", "platform": "relecov" }, + { "id": "3", "type": "bioinfodata", "platform": "relecov" }, + { "id": "4", "type": "variantdata", "platform": "relecov" } + ] + +read_bioinfo_metadata: + required_conf: ["args"] + args: + json_file: '' + input_folder: '' + output_dir: '' + software_name: '' + update: false + +metadata_homogeneizer: + required_conf: ["args"] + args: + institution: '' + directory: '' + output_dir: '' + +pipeline_manager: + required_conf: ["args", "analysis_group", "analysis_user", "organism_config"] + args: + input: '' + templates_root: '' + output_dir: '' + folder_names: [] + analysis_group: RLV + analysis_user: icasas_C + organism_config: + Severe acute respiratory syndrome coronavirus 2 [LOINC:LA31065-8]: + pipeline_template: viralrecon + service_tag: SARSCOV2 + group_by_fields: + - sequencing_instrument_platform + - enrichment_panel + - enrichment_panel_version + Respiratory syncytial virus [SNOMED:6415009]: + pipeline_template: IRMA + service_tag: GENOMERSV + group_by_fields: + - sequencing_instrument_platform + - enrichment_panel + - enrichment_panel_version + Influenza virus [SNOMED:725894000]: + pipeline_templates: + - IRMA + - taxprofiler + service_tag: GENOMEFLU + group_by_fields: + - sequencing_instrument_platform + +build_schema: + required_conf: ["args"] + args: + input_file: '' + schema_base: '' + draft_version: '' + diff: false + version: '' + project: '' + non_interactive: false + output_dir: '' + +logs_to_excel: + required_conf: ["args"] + args: + lab_code: '' + output_dir: '' + files: [] + +wrapper: + required_conf: ["args"] + args: + output_dir: '' + +upload_results: + required_conf: ["args"] + args: + user: '' + password: '' + batch_id: '' + template_path: '' + project: Mepram + +sftp_handle: + required_conf: ["sftp_connection", "platform_storage_folder", "analysis_results_folder", "metadata_processing"] + sftp_connection: + sftp_server: sftpgenvigies.isciii.es + sftp_port: '22' + platform_storage_folder: /tmp/mepram + analysis_results_folder: ANALYSIS_RESULTS + metadata_processing: + required_conf: ["header_flag", "excel_sheet", "sample_id_col"] + header_flag: CAMPO + excel_sheet: METADATA_LAB + alternative_sheet: 5.Viral Characterisation and Se + alternative_flag: CAMPO + sample_id_col: Sample ID given for sequencing + alternative_sample_id_col: Sample ID given for sequencing diff --git a/relecov_tools/conf/initial_config-relecov.yaml b/relecov_tools/conf/initial_config-relecov.yaml new file mode 100644 index 00000000..0230e0b9 --- /dev/null +++ b/relecov_tools/conf/initial_config-relecov.yaml @@ -0,0 +1,371 @@ +# THIS INITIAL CONFIG SHOULD BE SET AFTER INSTALLATION +# MAKE A COPY OF THIS FILE IN YOUR HOME AND CONFIGURE IT TO YOUR NEEDS +# THEN RUN: relecov-tools add-extra-config --config_file path/to/initial_config_copy.yaml +# IMPORTANT: Do not remove nor modify the required_conf keys unless you explicitly need to, that would surely break the code +# NOTE: Each key in 'modules_outpath' must match with a Command as listed with `relecov-tools --help` (but with '_' instead of '-') + +required_conf: ['generic', 'pipeline_manager', 'sftp_handle', 'read_lab_metadata', 'upload_to_gisaid', 'upload_to_ena', 'update_db', 'build_schema', 'download', 'logs_to_excel', 'mail_sender', 'map', 'metadata_homogeneizer', 'read_bioinfo_metadata', 'upload_results', 'validate', 'wrapper'] + +generic: + required_conf: ["project_name", "json_schemas", "logs_config"] + project_name: "Relecov" + logs_config: + default_outpath: /tmp/ + modules_outpath: + wrapper: /tmp/wrapper + download: /tmp/download + pipeline_manager: /tmp/pipeline_manager + read_bioinfo_metadata: /tmp/read_bioinfo_metadata + json_schemas: + relecov_schema: relecov_schema.json + +# CONFIG FOR MODULE PARAMETERS +mail_sender: + required_conf: ["args"] + args: + delivery_template_path_file: /path/templates/ + email_host: host + email_port: port + email_host_user: email@gmail.com + email_use_tls: true + yaml_cred_path: /path/credentials.yml + institutions_guide_path: /path/contacts.json + +download: + required_conf: ["args"] + args: + user: '' + password: '' + conf_file: '' + download_option: '' + output_dir: '' + target_folders: [] + subfolder: RELECOV + +read_lab_metadata: + required_conf: ["args", "unique_sample_id", "metadata_lab_heading_file", "alt_heading_equivalences", "lab_metadata_req_json", "samples_json_fields"] + args: + metadata_file: '' + sample_list_file: '' + output_dir: '' + files_folder: '' + cast_values_from_schema: true + metadata_lab_heading_file: read_lab_metadata_heading_default.json + alt_heading_equivalences: + Sample ID: Sample ID given for sequencing + LAB ID: Originating Laboratory + "Sequencing date Formato: YYYY-MM-DD": Sequencing Date + Commercial All-in-one library kit: Commercial All-in-one library kit + 'Library preparation kit ': Library Preparation Kit + Enrichment protocol: Enrichment Protocol + if enrichment protocol is Other, specify: If Enrichment Protocol Is Other, Specify + Amplicon protocol: Enrichment panel/assay + if enrichment panel/assay is Other, specify: If Enrichment panel/assay Is Other, Specify + Amplicon version: Enrichment panel/assay version + Number Of Samples In Run: Number Of Samples In Run + Number of variants with effect (missense, frameshit, stop codon): Number of variants with effect + Sequencing platforms (Illumina, Nanopore, IonTorrent, PacBio, other): Sequencing Instrument Model + Variant designation table filename: Lineage analysis file + Library preparation kit: Library Preparation Kit + Library layout: Library Layout + Read lenght: Read length + SARS-CoV-2 Lineage designation: Lineage designation + fastq filename R1: Sequence file R1 fastq + fastq filename R2: Sequence file R2 fastq + lab_metadata_req_json: + laboratory_data: + file: laboratory_address.json + map_field: collecting_institution_code_1 + adding_fields: + - collecting_institution_address + - collecting_institution_email + - collecting_institution_code_1 + - collecting_institution_code_2 + - geo_loc_state + - geo_loc_state_cod + - geo_loc_region + - geo_loc_city + - geo_loc_country + geo_location_data: + file: geo_loc_cities.json + map_field: geo_loc_city + adding_fields: + - geo_loc_latitude + - geo_loc_longitude + specimen_source_splitting: + file: anatomical_material_collection_method.json + map_field: specimen_source + adding_fields: + - anatomical_material + - anatomical_part + - body_product + - collection_method + required_copy_from_other_field: + isolate_sample_id: sequencing_sample_id + samples_json_fields: + - sequence_file_R1_md5 + - sequence_file_R2_md5 + - sequence_file_R1 + - sequence_file_R2 + - sequence_file_path_R1 + - sequence_file_path_R2 + - batch_id + +validate: + required_conf: ["args"] + args: + json_file: '' + json_schema_file: '' + metadata: '' + output_dir: '' + excel_sheet: '' + upload_files: false + logsum_file: '' + +map: + required_conf: ["args"] + args: + destination_schema: '' + json_file: '' + origin_schema: '' + output_dir: '' + schema_file: '' + +upload_to_ena: + required_conf: ["args", "ENA_configuration", "checklist", "ena_fixed_fields", "additional_formating"] + args: + user: '' + password: '' + center: '' + ena_json: '' + template_path: '' + action: ADD + dev: false + upload_fastq: false + metadata_types: [] + output_dir: '' + ENA_configuration: + study_alias: RELECOV + design_description: Design Description + experiment_title: Project for ENA submission RELECOV + study_title: RELECOV Spanish Network for genomics surveillance + study_type: Whole Genome Sequencing + study_id: ERP137164 + ena_broker_name: Instituto de Salud Carlos III + checklist: ERC000033 + ena_fixed_fields: + broker_name: Instituto de Salud Carlos III + file_format: FASTQ + study_alias: RELECOV + study_title: RELECOV Spanish Network for genomics surveillance + study_abstract: RELECOV is a Spanish Network for genomics surveillance + insert_size: '0' + additional_formating: + sample_description: + - host_common_name + - anatomical_part + - collection_method + design_description: + - library_layout + - library_preparation_kit + - library_selection + - library_strategy + sequence_file_path_R1: + - sequence_file_path_R1 + - sequence_file_R1 + sequence_file_path_R2: + - sequence_file_path_R2 + - sequence_file_R2 + experiment_alias: + - isolate_sample_id + - sample_collection_date + run_alias: + - isolate_sample_id + - sample_collection_date + experiment_title: + - sequencing_instrument_model + - isolate_sample_id + file_name: + - sequence_file_R1 + - sequence_file_R2 + file_checksum: + - sequence_file_R1_md5 + - sequence_file_R2_md5 + +upload_to_gisaid: + required_conf: ["args"] + args: + user: '' + password: '' + client_id: '' + token: '' + gisaid_json: '' + input_path: '' + output_dir: '' + frameshift: '' + proxy_config: '' + single: false + gzip: false + GISAID_configuration: + submitter: GISAID_ID + +update_db: + required_conf: ["args", "platform-params", "iskylims_fixed_values", "relecov_sample_metadata"] + args: + user: '' + password: '' + json: '' + type: '' + platform: '' + server_url: '' + full_update: false + long_table: '' + platform-params: + iskylims: + server_url: http://relecov-iskylims.isciiides.es + api_url: /wetlab/api/ + store_samples: create-sample + url_project_fields: projects-fields + url_sample_fields: sample-fields + param_sample_project: project + project_name: relecov + token: '' + relecov: + server_url: http://relecov-platform.isciiides.es + api_url: /api/ + store_samples: createSampleData + bioinfodata: createBioinfoData + variantdata: createVariantData + check_sample: checkSampleExists + sftp_info: sftpInfo + token: '' + iskylims_fixed_values: + patient_core: '' + sample_project: Relecov + only_recorded: 'Yes' + sample_location: Not defined + relecov_sample_metadata: + - authors + - collecting_institution + - collecting_institution_code_1 + - collecting_lab_sample_id + - ena_broker_name + - ena_sample_accession + - gisaid_accession_id + - gisaid_virus_name + - microbiology_lab_sample_id + - sequence_file_path_R1 + - sequence_file_path_R2 + - schema_name + - schema_version + - sequencing_date + - sequence_file_R1_md5 + - sequence_file_R2_md5 + - sequence_file_R1 + - sequence_file_R2 + - sequencing_sample_id + - submitting_institution + - submitting_lab_sample_id + full_update_steps: [ + { "id": "1", "type": "sample", "platform": "iskylims" }, + { "id": "2", "type": "sample", "platform": "relecov" }, + { "id": "3", "type": "bioinfodata", "platform": "relecov" }, + { "id": "4", "type": "variantdata", "platform": "relecov" } + ] + +read_bioinfo_metadata: + required_conf: ["args"] + args: + json_file: '' + input_folder: '' + output_dir: '' + software_name: '' + update: false + +metadata_homogeneizer: + required_conf: ["args"] + args: + institution: '' + directory: '' + output_dir: '' + +pipeline_manager: + required_conf: ["args", "analysis_group", "analysis_user", "organism_config"] + args: + input: '' + templates_root: '' + output_dir: '' + folder_names: [] + analysis_group: RLV + analysis_user: icasas_C + organism_config: + Severe acute respiratory syndrome coronavirus 2 [LOINC:LA31065-8]: + pipeline_template: viralrecon + service_tag: SARSCOV2 + group_by_fields: + - sequencing_instrument_platform + - enrichment_panel + - enrichment_panel_version + Respiratory syncytial virus [SNOMED:6415009]: + pipeline_template: IRMA + service_tag: GENOMERSV + group_by_fields: + - sequencing_instrument_platform + - enrichment_panel + - enrichment_panel_version + Influenza virus [SNOMED:725894000]: + pipeline_templates: + - IRMA + - taxprofiler + service_tag: GENOMEFLU + group_by_fields: + - sequencing_instrument_platform + +build_schema: + required_conf: ["args"] + args: + input_file: '' + schema_base: '' + draft_version: '' + diff: false + version: '' + project: '' + non_interactive: false + output_dir: '' + +logs_to_excel: + required_conf: ["args"] + args: + lab_code: '' + output_dir: '' + files: [] + +wrapper: + required_conf: ["args"] + args: + output_dir: '' + +upload_results: + required_conf: ["args"] + args: + user: '' + password: '' + batch_id: '' + template_path: '' + project: Relecov + +sftp_handle: + required_conf: ["sftp_connection", "platform_storage_folder", "analysis_results_folder", "metadata_processing"] + sftp_connection: + sftp_server: sftpgenvigies.isciii.es + sftp_port: '22' + platform_storage_folder: /tmp/relecov + analysis_results_folder: ANALYSIS_RESULTS + metadata_processing: + required_conf: ["header_flag", "excel_sheet", "sample_id_col"] + header_flag: CAMPO + excel_sheet: METADATA_LAB + alternative_sheet: 5.Viral Characterisation and Se + alternative_flag: CAMPO + sample_id_col: Sample ID given for sequencing + alternative_sample_id_col: Sample ID given for sequencing From d9f817abcbec3a5d1194263cd20b5a1098d1d050 Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 12:43:19 +0100 Subject: [PATCH 053/110] Included configuration overwriting through extra_config and validation via required_conf.Lint --- relecov_tools/config_json.py | 54 +++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/relecov_tools/config_json.py b/relecov_tools/config_json.py index 13afaf7a..f2209ee6 100644 --- a/relecov_tools/config_json.py +++ b/relecov_tools/config_json.py @@ -91,8 +91,12 @@ def __init__( self.json_data = self._nested_merge_with_args(self.base_conf, extra_conf) missing_required = self.validate_configuration(self.json_data) if missing_required: - log.error(f"Could not validate current configuration. Missing required config: {missing_required}") - raise ValueError(f"Required configuration missing in current config: {missing_required}") + log.error( + f"Could not validate current configuration. Missing required config: {missing_required}" + ) + raise ValueError( + f"Required configuration missing in current config: {missing_required}" + ) log.debug( "Loaded additional configuration." if active_extra @@ -189,20 +193,21 @@ def _recursive_lookup(node, key): # ── 4. Legacy with deeper nesting ─────────────────────────────────── return _recursive_lookup(topic_block, found) - + def validate_configuration(self, config_dict: dict): """Validate the given configuration dictionary, preferably after merge. - + Args: config_name (dict): Dictionary containing all the configuration from the JSON or YAML file. Raises: ValueError: If any there is any required field missing. - + Returns: missing_required (list): List of the missing configuration fields. """ + def recursive_validation(deep_conf: dict, parent: str): """Recursively check if required keys are present in given config""" missing = [] @@ -239,9 +244,7 @@ def insert_new_config(self, config_name, current_conf, force=False): """Check if config_name is already in configuration""" if config_name in current_conf.keys(): if force: - log.info( - f"`{config_name}` already in config. Replacing its content..." - ) + log.info(f"`{config_name}` already in config. Replacing its content...") return True else: err_txt = f"Cannot add `{config_name}`: already in config. Set `force` to force replacement" @@ -249,7 +252,7 @@ def insert_new_config(self, config_name, current_conf, force=False): return False else: return True - + def merge_config(self, config_dict, new_config, force=True): """ Recursively merge a new configuration dictionary into an existing one. @@ -276,14 +279,19 @@ def merge_config(self, config_dict, new_config, force=True): - summary (dict): A dictionary summarizing merge actions with keys: * "Included": list of applied changes * "Canceled": list of rejected changes - """ + """ + def _rec_merge(current_conf, new_conf, force=False, parent=""): """Recursively add new configuration without deleting the existing keys""" for k, v in new_conf.items(): new_parent = ".".join([parent, k]) if parent else k if k in current_conf and current_conf[k] == v: continue - if isinstance(v, dict) and k in current_conf and isinstance(current_conf[k], dict): + if ( + isinstance(v, dict) + and k in current_conf + and isinstance(current_conf[k], dict) + ): _rec_merge(current_conf[k], v, force=force, parent=new_parent) else: change_msg = f"{new_parent}: {current_conf.get(k, '')} -> {v}" @@ -307,7 +315,6 @@ def _rec_merge(current_conf, new_conf, force=False, parent=""): summary = {"Canceled": [], "Included": []} merged_dict = _rec_merge(config_dict, new_config, force=force) return merged_dict, summary - def include_extra_config(self, config_file, config_name=None, force=False): """Include given file content as additional configuration for later usage. @@ -343,7 +350,9 @@ def include_extra_config(self, config_file, config_name=None, force=False): ) if additional_config is not None: if config_name is None: - additional_config, summary = self.merge_config(additional_config, file_content, force=force) + additional_config, summary = self.merge_config( + additional_config, file_content, force=force + ) else: if self.insert_new_config(config_name, self.json_data, force=force): msg = f"{config_name}: {file_content}" @@ -360,8 +369,12 @@ def include_extra_config(self, config_file, config_name=None, force=False): ) missing_required = self.validate_configuration(full_test_conf) if missing_required: - log.error(f"Could not validate incoming extra config. Missing required config: {missing_required}") - raise ValueError(f"Required configuration missing from incoming config: {missing_required}") + log.error( + f"Could not validate incoming extra config. Missing required config: {missing_required}" + ) + raise ValueError( + f"Required configuration missing from incoming config: {missing_required}" + ) relecov_tools.utils.write_json_to_file( additional_config, ConfigJson._extra_config_path ) @@ -467,8 +480,7 @@ def recursive_remove(d, key_to_remove, current_path=""): # ---- write updated file ---- relecov_tools.utils.write_json_to_file( - additional_config, - ConfigJson._extra_config_path + additional_config, ConfigJson._extra_config_path ) log.info(f"Removed {len(removed_paths)} key(s)") @@ -501,8 +513,12 @@ def _nested_merge_with_args(self, base_conf: dict, extra_conf: dict) -> dict: """ merged = {} - base_reqs = base_conf.pop("required_conf") if "required_conf" in base_conf else [] - extra_reqs = extra_conf.pop("required_conf") if "required_conf" in extra_conf else [] + base_reqs = ( + base_conf.pop("required_conf") if "required_conf" in base_conf else [] + ) + extra_reqs = ( + extra_conf.pop("required_conf") if "required_conf" in extra_conf else [] + ) merged_reqs = list(set(base_reqs + extra_reqs)) merged["required_conf"] = merged_reqs From 2509bcc9fb583d4a54f77205ed02369ffbf6a617 Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 12:44:24 +0100 Subject: [PATCH 054/110] Included a new arg in add-extra-config to narrow removal. Lint --- relecov_tools/__main__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/relecov_tools/__main__.py b/relecov_tools/__main__.py index fb1f4ed9..6d21502f 100755 --- a/relecov_tools/__main__.py +++ b/relecov_tools/__main__.py @@ -1402,7 +1402,9 @@ def add_extra_config(ctx, config_name, config_file, force, remove_config, topic_ else: config_json = relecov_tools.config_json.ConfigJson() if remove_config: - config_json.remove_extra_config(topic=topic_config, deep=config_name, force=force) + config_json.remove_extra_config( + topic=topic_config, deep=config_name, force=force + ) else: config_json.include_extra_config( config_file, config_name=config_name, force=force From 6a1fd849305df41adbc024ee8610c51e44ea680b Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 13:00:54 +0100 Subject: [PATCH 055/110] Updated workflow to load initial configuration first --- .github/workflows/test_modules.yml | 6 ++++++ .github/workflows/test_sftp_modules.yml | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_modules.yml b/.github/workflows/test_modules.yml index 93e6478e..1d0f45ee 100755 --- a/.github/workflows/test_modules.yml +++ b/.github/workflows/test_modules.yml @@ -47,6 +47,12 @@ jobs: run: | pip install -r requirements.txt pip install . + + - name: Load profile config (relecov) + run: | + relecov-tools add-extra-config \ + --config_file relecov_tools/conf/initial_config-relecov.yaml --force + - name: Run each module tests run: | relecov-tools map -j tests/data/map_validate/processed_metadata_lab_test.json -p relecov_tools/schema/relecov_schema.json ${{ matrix.map_args }} -o . diff --git a/.github/workflows/test_sftp_modules.yml b/.github/workflows/test_sftp_modules.yml index 66ffddf4..6c08fc96 100644 --- a/.github/workflows/test_sftp_modules.yml +++ b/.github/workflows/test_sftp_modules.yml @@ -53,6 +53,11 @@ jobs: run: | pip install -r requirements.txt pip install . + + - name: Load profile config (relecov) + run: | + relecov-tools add-extra-config \ + --config_file relecov_tools/conf/initial_config-relecov.yaml --force - name: Run sftp_handle tests run: | @@ -88,7 +93,12 @@ jobs: run: | pip install -r requirements.txt pip install . - + + - name: Load profile config (relecov) + run: | + relecov-tools add-extra-config \ + --config_file relecov_tools/conf/initial_config-relecov.yaml --force + - name: Run Wrapper tests run: | python3 tests/test_wrapper_handle.py --download_option ${{ matrix.download_options }} From a3d2e84d79ec9381e365a80ab4f29f180a47d2cd Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 13:07:37 +0100 Subject: [PATCH 056/110] Updated CHANGELOG.md --- CHANGELOG.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82f854a4..01d9d087 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,15 +4,21 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [1.7.5dev] - 2025-XX-XX : +## [1.8.0dev] - 2025-XX-XX : ### Credits - [Enrique Sapena](https://github.com/ESapenaVentura) +- [Pablo Mata](https://github.com/shettland) #### Added enhancements - Added handling of $refs for enums and typo fixing/style formatting for build_schema module [#844](https://github.com/BU-ISCIII/relecov-tools/pull/844) +- Included configuration overwriting and validation via add-extra-config module [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 +- Included a new arg `topic_config` in add-extra-config to narrow config removal [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 +- Updated add-extra-config and included Initial configuration description in README.md [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 +- Updated test workflows to load initial_config-relecov.yaml first [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 +- Included three initial_config.yaml files for three projects: relecov, mepram & EQA2026 [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 #### Fixes @@ -26,9 +32,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Changed `build_schema.build_new_schema` function: Now recursively iterates on complex properties to generate subschemas [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) - Changed `assets/schema_utils/metadatalab_template.py`: Now supports iterative recursion to flatten nested schemas [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) +- Updated how project name is extracted from config in read-lab-metadata [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 #### Removed +- Removed all project-specific config from configuration.json and moved it to initial_config.yaml files [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 + ### Requirements ## [1.7.4] - 2025-12-15 : From 3cbfb9e6f42759bc825ba6f3af42205558ab4c9d Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 13:15:23 +0100 Subject: [PATCH 057/110] Included configuration overwriting through extra_config and validation via required_conf.Lint2 --- relecov_tools/config_json.py | 1 - 1 file changed, 1 deletion(-) diff --git a/relecov_tools/config_json.py b/relecov_tools/config_json.py index f2209ee6..1b52388a 100644 --- a/relecov_tools/config_json.py +++ b/relecov_tools/config_json.py @@ -478,7 +478,6 @@ def recursive_remove(d, key_to_remove, current_path=""): log.warning(f"No matches found for topic={topic}, deep={deep}") return - # ---- write updated file ---- relecov_tools.utils.write_json_to_file( additional_config, ConfigJson._extra_config_path ) From 65e3080dad844a0dad05c37263affb9b37e5bd57 Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 13:24:17 +0100 Subject: [PATCH 058/110] Included default values for project_name, analysis_group and analysis_user --- relecov_tools/conf/configuration.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/relecov_tools/conf/configuration.json b/relecov_tools/conf/configuration.json index a157f55c..4e6b984e 100644 --- a/relecov_tools/conf/configuration.json +++ b/relecov_tools/conf/configuration.json @@ -2,7 +2,7 @@ "required_conf": ["generic", "pipeline_manager", "sftp_handle", "read_lab_metadata", "upload_to_gisaid", "upload_to_ena", "update_db"], "generic": { "required_conf": ["project_name", "logs_config", "validate_config", "json_schemas", "institution_mapping_file", "not_provided_field"], - "project_name": "", + "project_name": "default", "logs_config": { "default_outpath": "/tmp/", "modules_outpath": {} @@ -28,8 +28,8 @@ "sample_link_folder", "organism_config" ], - "analysis_group": "", - "analysis_user": "", + "analysis_group": "default", + "analysis_user": "default", "doc_folder": "DOC", "analysis_folder": "ANALYSIS", "sample_stored_folder": "RAW", From 14fddc6b6266686e1a434e8956032b7502be20a4 Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 15:52:06 +0100 Subject: [PATCH 059/110] Added explanation about required_conf as reviewer suggested --- relecov_tools/conf/initial_config-EQA2026.yaml | 3 +++ relecov_tools/conf/initial_config-MEPRAM.yaml | 2 ++ relecov_tools/conf/initial_config-relecov.yaml | 2 ++ 3 files changed, 7 insertions(+) diff --git a/relecov_tools/conf/initial_config-EQA2026.yaml b/relecov_tools/conf/initial_config-EQA2026.yaml index 0487c4d1..9d8e4c9b 100644 --- a/relecov_tools/conf/initial_config-EQA2026.yaml +++ b/relecov_tools/conf/initial_config-EQA2026.yaml @@ -4,9 +4,12 @@ # IMPORTANT: Do not remove nor modify the required_conf keys unless you explicitly need to, that would surely break the code # NOTE: Each key in 'modules_outpath' must match with a Command as listed with `relecov-tools --help` (but with '_' instead of '-') +# required_conf lists will be merged with the ones in configuration.json without override, keeping the sum of both required_conf: ['generic', 'pipeline_manager', 'sftp_handle', 'read_lab_metadata', 'upload_to_gisaid', 'upload_to_ena', 'update_db', 'build_schema', 'download', 'logs_to_excel', 'mail_sender', 'map', 'metadata_homogeneizer', 'read_bioinfo_metadata', 'upload_results', 'validate', 'wrapper'] + generic: required_conf: ["project_name", "json_schemas", "logs_config", "validate_config"] + # Keep in mind that a required field missing or equal to "" will raise a validation error project_name: "EQA2026" logs_config: default_outpath: /tmp/ diff --git a/relecov_tools/conf/initial_config-MEPRAM.yaml b/relecov_tools/conf/initial_config-MEPRAM.yaml index e0dfe02d..9516257e 100644 --- a/relecov_tools/conf/initial_config-MEPRAM.yaml +++ b/relecov_tools/conf/initial_config-MEPRAM.yaml @@ -4,10 +4,12 @@ # IMPORTANT: Do not remove nor modify the required_conf keys unless you explicitly need to, that would surely break the code # NOTE: Each key in 'modules_outpath' must match with a Command as listed with `relecov-tools --help` (but with '_' instead of '-') +# required_conf lists will be merged with the ones in configuration.json without override, keeping the sum of both required_conf: ['generic', 'pipeline_manager', 'sftp_handle', 'read_lab_metadata', 'upload_to_gisaid', 'upload_to_ena', 'update_db', 'build_schema', 'download', 'logs_to_excel', 'mail_sender', 'map', 'metadata_homogeneizer', 'read_bioinfo_metadata', 'upload_results', 'validate', 'wrapper'] generic: required_conf: ["project_name", "json_schemas", "logs_config"] + # Keep in mind that a required field missing or equal to "" will raise a validation error project_name: "MePRAM" logs_config: default_outpath: /tmp/ diff --git a/relecov_tools/conf/initial_config-relecov.yaml b/relecov_tools/conf/initial_config-relecov.yaml index 0230e0b9..070a0bf8 100644 --- a/relecov_tools/conf/initial_config-relecov.yaml +++ b/relecov_tools/conf/initial_config-relecov.yaml @@ -4,10 +4,12 @@ # IMPORTANT: Do not remove nor modify the required_conf keys unless you explicitly need to, that would surely break the code # NOTE: Each key in 'modules_outpath' must match with a Command as listed with `relecov-tools --help` (but with '_' instead of '-') +# required_conf lists will be merged with the ones in configuration.json without override, keeping the sum of both required_conf: ['generic', 'pipeline_manager', 'sftp_handle', 'read_lab_metadata', 'upload_to_gisaid', 'upload_to_ena', 'update_db', 'build_schema', 'download', 'logs_to_excel', 'mail_sender', 'map', 'metadata_homogeneizer', 'read_bioinfo_metadata', 'upload_results', 'validate', 'wrapper'] generic: required_conf: ["project_name", "json_schemas", "logs_config"] + # Keep in mind that a required field missing or equal to "" will raise a validation error project_name: "Relecov" logs_config: default_outpath: /tmp/ From bb88660134ef808b4e243237105a121cc3644c1f Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 16:10:42 +0100 Subject: [PATCH 060/110] Added functional annotations and updated config dict description --- relecov_tools/config_json.py | 78 +++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 27 deletions(-) diff --git a/relecov_tools/config_json.py b/relecov_tools/config_json.py index 1b52388a..03431b08 100644 --- a/relecov_tools/config_json.py +++ b/relecov_tools/config_json.py @@ -4,6 +4,7 @@ import yaml import logging import copy +from typing import Any, Optional import relecov_tools.utils @@ -16,17 +17,21 @@ class ConfigJson: ---------------------------------------------------------------------------- Purpose ------- - Load *configuration.json* (defaults) and, optionally, the user - *extra_config.json* (overrides). Internally we normalise everything to the - dual-level layout **params / commands**: + Load *configuration.json* (defaults) and the user's *extra_config.json* (overrides) + which should be created using an initial_config***.yaml file via relecov-tools add-extra-config. + Internally self.json_data is normalised to a dual-level layout **params / commands**: { + "required_conf": + ["download", "generic", ...] # ← If these keys are not present in the config or are equal to "", config validation will fail. "download": { - "params": { # ← defaults (configuration.json) + "params": { # ← Params from configuration.json + extra_config.json (Extra_config overrides if found in both). + "required_conf": + ["threads", "output_dir"] # ← required_conf keeps the sum of those in configuration.json and extra_config after merge, not overrided. "threads": 4, "output_dir": "/default/path" }, - "commands": { # ← overrides (extra_config.json) + "commands": { # ← `args` from extra_config.json to be used as *args for the modules if not given via CLI "threads": 8 } }, @@ -53,9 +58,11 @@ class ConfigJson: def __init__( self, - json_file=os.path.join(os.path.dirname(__file__), "conf", "configuration.json"), - extra_config=False, - ): + json_file: str = os.path.join( + os.path.dirname(__file__), "conf", "configuration.json" + ), + extra_config: bool = False, + ) -> None: """Load config content in configuration.json and additional config if required Parameters @@ -104,7 +111,9 @@ def __init__( ) self.topic_config = list(self.json_data.keys()) - def get_configuration(self, topic: str, *, raw: bool = False): + def get_configuration( + self, topic: str, *, raw: bool = False + ) -> Optional[dict[str, Any]]: """ Return the configuration block for *topic*. @@ -136,14 +145,14 @@ def get_configuration(self, topic: str, *, raw: bool = False): return block - def get_topic_data(self, topic: str, found: str): + def get_topic_data(self, topic: str, found: str) -> Any: """ Fetch a single value *found* from *topic*. Search priority ---------------- 1. **commands** – overrides - 2. **params** – defaults + 2. **params** – merged from default and extra_config. Overrided by extra_config if in both 3. Recursive search inside both dicts 4. Legacy flat section (back-compat) @@ -154,7 +163,7 @@ def get_topic_data(self, topic: str, found: str): """ # ── Helper: depth-first search in nested dicts ────────────────────── - def _recursive_lookup(node, key): + def _recursive_lookup(node: Any, key: str) -> Any: """Searches for `key` at any level of nested dictionaries.""" if not isinstance(node, dict): return None @@ -194,7 +203,7 @@ def _recursive_lookup(node, key): # ── 4. Legacy with deeper nesting ─────────────────────────────────── return _recursive_lookup(topic_block, found) - def validate_configuration(self, config_dict: dict): + def validate_configuration(self, config_dict: dict) -> list[str]: """Validate the given configuration dictionary, preferably after merge. Args: @@ -208,7 +217,7 @@ def validate_configuration(self, config_dict: dict): missing_required (list): List of the missing configuration fields. """ - def recursive_validation(deep_conf: dict, parent: str): + def recursive_validation(deep_conf: dict, parent: str) -> list[str]: """Recursively check if required keys are present in given config""" missing = [] required_list = deep_conf.get(req_key, []) @@ -240,7 +249,9 @@ def recursive_validation(deep_conf: dict, parent: str): ) return missing_required - def insert_new_config(self, config_name, current_conf, force=False): + def insert_new_config( + self, config_name: str, current_conf: dict, force: bool = False + ) -> bool: """Check if config_name is already in configuration""" if config_name in current_conf.keys(): if force: @@ -253,7 +264,9 @@ def insert_new_config(self, config_name, current_conf, force=False): else: return True - def merge_config(self, config_dict, new_config, force=True): + def merge_config( + self, config_dict: dict, new_config: dict, force: bool = True + ) -> tuple[dict, dict]: """ Recursively merge a new configuration dictionary into an existing one. @@ -281,7 +294,9 @@ def merge_config(self, config_dict, new_config, force=True): * "Canceled": list of rejected changes """ - def _rec_merge(current_conf, new_conf, force=False, parent=""): + def _rec_merge( + current_conf: dict, new_conf: dict, force: bool = False, parent: str = "" + ) -> dict: """Recursively add new configuration without deleting the existing keys""" for k, v in new_conf.items(): new_parent = ".".join([parent, k]) if parent else k @@ -316,7 +331,9 @@ def _rec_merge(current_conf, new_conf, force=False, parent=""): merged_dict = _rec_merge(config_dict, new_config, force=force) return merged_dict, summary - def include_extra_config(self, config_file, config_name=None, force=False): + def include_extra_config( + self, config_file: str, config_name: Optional[str] = None, force: bool = False + ) -> None: """Include given file content as additional configuration for later usage. Args: @@ -384,13 +401,18 @@ def include_extra_config(self, config_file, config_name=None, force=False): print(state, ":\n", "\n".join([str(msg) for msg in changes])) return - def remove_extra_config(self, topic=None, deep=None, force=False): + def remove_extra_config( + self, + topic: Optional[str] = None, + deep: Optional[str] = None, + force: bool = False, + ) -> None: """Remove key from extra_config configuration file. Args: topic (str | None): top-level key deep (str | None): nested key to remove - force (bool): if False, ask for confirmation + force (bool): if False, ask for confirmation before removing """ if topic is None and deep is None: @@ -413,13 +435,15 @@ def remove_extra_config(self, topic=None, deep=None, force=False): removed_paths = [] - def recursive_remove(d, key_to_remove, current_path=""): + def recursive_remove( + config: Any, key_to_remove: str, current_path: str = "" + ) -> bool: """Recursively search and remove configuration""" removed = False - if isinstance(d, dict): + if isinstance(config, dict): keys_to_delete = [] - for k, v in d.items(): + for k, v in config.items(): path = f"{current_path}.{k}" if current_path else k if k == key_to_remove: @@ -437,11 +461,11 @@ def recursive_remove(d, key_to_remove, current_path=""): if confirm.lower() != "y": print(f"Skipped {path}.") continue - d.pop(k) + config.pop(k) removed_paths.append(path) - elif isinstance(d, list): - for idx, item in enumerate(d): + elif isinstance(config, list): + for idx, item in enumerate(config): path = f"{current_path}[{idx}]" if recursive_remove(item, key_to_remove, path): removed = True @@ -485,7 +509,7 @@ def recursive_remove(d, key_to_remove, current_path=""): log.info(f"Removed {len(removed_paths)} key(s)") print(f"Finished clearing extra config. Removed: {removed_paths}") - def get_lab_code(self, submitting_institution): + def get_lab_code(self, submitting_institution: Optional[str]) -> Optional[str]: """Get the corresponding code for the given submitting institution""" if submitting_institution is None: log.warning("No submitting institution could be found to update lab_code") From 8f059789133cfae2c0463c684ac9914df54b8133 Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 16:11:13 +0100 Subject: [PATCH 061/110] Updated Initial configuration description --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5c972ea7..1f69a200 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,8 @@ Further explanation for each argument: ### Initial configuration. -Prior to using any module you will need to setup specific configuration for your project using `add-extra-config` module, usage documentation [here](#add-extra-config). There are examples of `initial_config.yaml` files in `relecov_tools/conf/`. Make sure to preserve the `required_conf` keys defined in `relecov_tools/conf/configuration.json`, as they are always validated at runtime. +Prior to using any module you will need to setup specific configuration for your project using `add-extra-config` module, usage documentation [here](#add-extra-config). There are examples of `initial_config.yaml` files in `relecov_tools/conf/` that can be used as template. +You can also override the config in `relecov_tools/conf/configuration.json` with this method except for the `required_conf` keys which we recommend to preserve as they are always validated at runtime. You can add new `required_conf` elements into your `extra_config.json` but the resulting list will be the sum of both, not overriden. ## Modules From 95dd294b56db101a439bef61ef10dcbff5f480c2 Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 16:11:48 +0100 Subject: [PATCH 062/110] Added descriptions for required_conf and args keys --- relecov_tools/conf/initial_config-EQA2026.yaml | 1 + relecov_tools/conf/initial_config-MEPRAM.yaml | 1 + relecov_tools/conf/initial_config-relecov.yaml | 1 + 3 files changed, 3 insertions(+) diff --git a/relecov_tools/conf/initial_config-EQA2026.yaml b/relecov_tools/conf/initial_config-EQA2026.yaml index 9d8e4c9b..b24220e8 100644 --- a/relecov_tools/conf/initial_config-EQA2026.yaml +++ b/relecov_tools/conf/initial_config-EQA2026.yaml @@ -26,6 +26,7 @@ generic: # CONFIG FOR MODULE PARAMETERS mail_sender: required_conf: ["args"] + # args can be used to set default values for the modules, can be overriden via CLI args: delivery_template_path_file: /path/templates/ email_host: host diff --git a/relecov_tools/conf/initial_config-MEPRAM.yaml b/relecov_tools/conf/initial_config-MEPRAM.yaml index 9516257e..bba30152 100644 --- a/relecov_tools/conf/initial_config-MEPRAM.yaml +++ b/relecov_tools/conf/initial_config-MEPRAM.yaml @@ -24,6 +24,7 @@ generic: # CONFIG FOR MODULE PARAMETERS mail_sender: required_conf: ["args"] + # args can be used to set default values for the modules, can be overriden via CLI args: delivery_template_path_file: /path/templates/ email_host: host diff --git a/relecov_tools/conf/initial_config-relecov.yaml b/relecov_tools/conf/initial_config-relecov.yaml index 070a0bf8..12c33f33 100644 --- a/relecov_tools/conf/initial_config-relecov.yaml +++ b/relecov_tools/conf/initial_config-relecov.yaml @@ -24,6 +24,7 @@ generic: # CONFIG FOR MODULE PARAMETERS mail_sender: required_conf: ["args"] + # args can be used to set default values for the modules, can be overriden via CLI args: delivery_template_path_file: /path/templates/ email_host: host From 0e39aa554efb29b133bdb1d575948f862d0a7d6d Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 16:20:00 +0100 Subject: [PATCH 063/110] Included default value for platform_storage_folder --- relecov_tools/conf/configuration.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/conf/configuration.json b/relecov_tools/conf/configuration.json index 4e6b984e..23090e9a 100644 --- a/relecov_tools/conf/configuration.json +++ b/relecov_tools/conf/configuration.json @@ -52,7 +52,7 @@ "metadata_processing": {}, "abort_if_md5_mismatch": "False", "analysis_results_folder": "ANALYSIS_RESULTS", - "platform_storage_folder": "", + "platform_storage_folder": "/tmp/", "allowed_file_extensions": [ ".fastq.gz", ".fastq", From f43fd2558e722d443021116dc582e601d3d67e7f Mon Sep 17 00:00:00 2001 From: Shettland Date: Thu, 19 Feb 2026 16:38:18 +0100 Subject: [PATCH 064/110] Updated workflow to load initial configuration first. fix --- .github/workflows/test_modules.yml | 5 +++++ .github/workflows/test_sftp_modules.yml | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_modules.yml b/.github/workflows/test_modules.yml index 1d0f45ee..9ef88d52 100755 --- a/.github/workflows/test_modules.yml +++ b/.github/workflows/test_modules.yml @@ -93,6 +93,11 @@ jobs: run: | pip install -r requirements.txt pip install . + + - name: Load profile config (relecov) + run: | + relecov-tools add-extra-config \ + --config_file relecov_tools/conf/initial_config-relecov.yaml --force - name: Run read-lab-metadata module if: matrix.modules == 'read-lab-metadata' diff --git a/.github/workflows/test_sftp_modules.yml b/.github/workflows/test_sftp_modules.yml index 6c08fc96..65d323b8 100644 --- a/.github/workflows/test_sftp_modules.yml +++ b/.github/workflows/test_sftp_modules.yml @@ -1,6 +1,8 @@ name: test_sftp_modules on: + push: + branches: "**" pull_request_target: types: [opened, reopened, synchronize] branches: "**" @@ -93,7 +95,7 @@ jobs: run: | pip install -r requirements.txt pip install . - + - name: Load profile config (relecov) run: | relecov-tools add-extra-config \ From 93b7eee4669296bdb5d32b32bfbcea44ce34282a Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 09:52:12 +0100 Subject: [PATCH 065/110] Included some params to work with github workflow --- relecov_tools/conf/initial_config-relecov.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/relecov_tools/conf/initial_config-relecov.yaml b/relecov_tools/conf/initial_config-relecov.yaml index 12c33f33..b69ac90a 100644 --- a/relecov_tools/conf/initial_config-relecov.yaml +++ b/relecov_tools/conf/initial_config-relecov.yaml @@ -20,6 +20,8 @@ generic: read_bioinfo_metadata: /tmp/read_bioinfo_metadata json_schemas: relecov_schema: relecov_schema.json + ena_schema: ena_schema.json + gisaid_schema: gisaid_schema.json # CONFIG FOR MODULE PARAMETERS mail_sender: @@ -280,6 +282,7 @@ read_bioinfo_metadata: required_conf: ["args"] args: json_file: '' + json_schema_file: 'relecov_schema.json' input_folder: '' output_dir: '' software_name: '' @@ -361,7 +364,7 @@ sftp_handle: required_conf: ["sftp_connection", "platform_storage_folder", "analysis_results_folder", "metadata_processing"] sftp_connection: sftp_server: sftpgenvigies.isciii.es - sftp_port: '22' + sftp_port: '50122' platform_storage_folder: /tmp/relecov analysis_results_folder: ANALYSIS_RESULTS metadata_processing: From ee4bed056ffa5715f7b58300f336abd4fd1705e5 Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 09:58:56 +0100 Subject: [PATCH 066/110] Included missing json_schema_file param for read-bioinfo-metadata --- .github/workflows/test_modules.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test_modules.yml b/.github/workflows/test_modules.yml index 9ef88d52..1f40825e 100755 --- a/.github/workflows/test_modules.yml +++ b/.github/workflows/test_modules.yml @@ -121,6 +121,7 @@ jobs: run: | relecov-tools read-bioinfo-metadata \ --json_file tests/data/read_bioinfo_metadata/validated_samples.json \ + --json_schema_file relecov_tools/schema/relecov_schema.json --input_folder tests/data/read_bioinfo_metadata/analysis_folder/ \ --software_name viralrecon \ --soft_validation \ From e9df02f2b4f6485b19422581eff3cd3c215be622 Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 10:28:25 +0100 Subject: [PATCH 067/110] Removed conflicting creation of another extra_config --- tests/test_validate.py | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/tests/test_validate.py b/tests/test_validate.py index bc672af2..64932050 100644 --- a/tests/test_validate.py +++ b/tests/test_validate.py @@ -52,10 +52,6 @@ def main(): help="Path to the previous process's log summary JSON file.", ) args = parser.parse_args() - print("Creating extra_config yaml") - conf_file = generate_config_yaml() - config_json = ConfigJson() - config_json.include_extra_config(conf_file, config_name=None, force=True) print("Fixing filepaths in json file") update_json_filepaths(args.json_file) print("Initiating validate module") @@ -68,32 +64,6 @@ def main(): clean_remote_test(invalid_sftp_folder) -def generate_config_yaml(): - """Generate the wrapper_config.yaml file with the desired structure.""" - config_data = { - "download": { - "user": "", - "password": "", - "conf_file": "", - "output_dir": "", - "download_option": "download_clean", - "subfolder": "RELECOV", - }, - "validate": { - "json_file": "", - "metadata": "", - "output_dir": "", - "excel_sheet": "", - "json_schema_file": "relecov_tools/schema/relecov_schema.json", - }, - } - - with open("extra_config.yaml", "w") as file: - yaml.dump(config_data, file, default_flow_style=False) - - return "extra_config.yaml" - - def clean_remote_test(invalid_sftp_folder): # First clean the repository. print("Initating sftp module") From 3e31b34f088921e757e2bc83f5ed834b9fb2bca3 Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 10:30:03 +0100 Subject: [PATCH 068/110] Included missing json_schema_file param --- relecov_tools/conf/initial_config-relecov.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/relecov_tools/conf/initial_config-relecov.yaml b/relecov_tools/conf/initial_config-relecov.yaml index b69ac90a..043f98a4 100644 --- a/relecov_tools/conf/initial_config-relecov.yaml +++ b/relecov_tools/conf/initial_config-relecov.yaml @@ -42,7 +42,7 @@ download: user: '' password: '' conf_file: '' - download_option: '' + download_option: 'download_clean' output_dir: '' target_folders: [] subfolder: RELECOV @@ -120,7 +120,7 @@ validate: required_conf: ["args"] args: json_file: '' - json_schema_file: '' + json_schema_file: 'relecov_tools/schema/relecov_schema.json' metadata: '' output_dir: '' excel_sheet: '' @@ -282,7 +282,7 @@ read_bioinfo_metadata: required_conf: ["args"] args: json_file: '' - json_schema_file: 'relecov_schema.json' + json_schema_file: 'relecov_tools/schema/relecov_schema.json' input_folder: '' output_dir: '' software_name: '' From 0eb4ff2479f765a7b6043f32c3a0fa04fb42c084 Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 10:44:44 +0100 Subject: [PATCH 069/110] Included missing json_schema_file param for read-bioinfo-metadata. --- .github/workflows/test_modules.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_modules.yml b/.github/workflows/test_modules.yml index 1f40825e..a5069de3 100755 --- a/.github/workflows/test_modules.yml +++ b/.github/workflows/test_modules.yml @@ -121,7 +121,7 @@ jobs: run: | relecov-tools read-bioinfo-metadata \ --json_file tests/data/read_bioinfo_metadata/validated_samples.json \ - --json_schema_file relecov_tools/schema/relecov_schema.json + --json_schema_file relecov_tools/schema/relecov_schema.json \ --input_folder tests/data/read_bioinfo_metadata/analysis_folder/ \ --software_name viralrecon \ --soft_validation \ From 3388314562fc286db70d5720ff3571f1ac1fc058 Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 10:54:24 +0100 Subject: [PATCH 070/110] Added --debug param to map test --- .github/workflows/test_modules.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_modules.yml b/.github/workflows/test_modules.yml index a5069de3..9747da14 100755 --- a/.github/workflows/test_modules.yml +++ b/.github/workflows/test_modules.yml @@ -55,7 +55,7 @@ jobs: - name: Run each module tests run: | - relecov-tools map -j tests/data/map_validate/processed_metadata_lab_test.json -p relecov_tools/schema/relecov_schema.json ${{ matrix.map_args }} -o . + relecov-tools --debug map -j tests/data/map_validate/processed_metadata_lab_test.json -p relecov_tools/schema/relecov_schema.json ${{ matrix.map_args }} -o . env: OUTPUT_LOCATION: ${{ github.workspace }}/tests/ - name: Upload output file From 1b8a991317ba9e7c5479b58f2a91639374158fba Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 10:56:16 +0100 Subject: [PATCH 071/110] Included extra_config=True in config init --- relecov_tools/map.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/map.py b/relecov_tools/map.py index bde0359d..323ea0d5 100755 --- a/relecov_tools/map.py +++ b/relecov_tools/map.py @@ -31,7 +31,7 @@ def __init__( output_dir=None, ): super().__init__(output_dir=output_dir, called_module=__name__) - config_json = ConfigJson() + config_json = ConfigJson(extra_config=True) self.config_json = config_json if origin_schema is None: origin_schema = os.path.join( From 40d63920d4a96704fcbfa23564deaae889d2be3a Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 11:16:52 +0100 Subject: [PATCH 072/110] Updated initial config --- relecov_tools/conf/initial_config-relecov.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/conf/initial_config-relecov.yaml b/relecov_tools/conf/initial_config-relecov.yaml index 043f98a4..7e358eca 100644 --- a/relecov_tools/conf/initial_config-relecov.yaml +++ b/relecov_tools/conf/initial_config-relecov.yaml @@ -364,7 +364,7 @@ sftp_handle: required_conf: ["sftp_connection", "platform_storage_folder", "analysis_results_folder", "metadata_processing"] sftp_connection: sftp_server: sftpgenvigies.isciii.es - sftp_port: '50122' + sftp_port: '22' platform_storage_folder: /tmp/relecov analysis_results_folder: ANALYSIS_RESULTS metadata_processing: From 097c5ae7343558853b3d03d0e060ed6410d9301b Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 11:19:48 +0100 Subject: [PATCH 073/110] Activated extra_config=True for ConfigJson init --- relecov_tools/build_schema.py | 2 +- relecov_tools/ena_upload.py | 2 +- relecov_tools/gisaid_upload.py | 6 +++--- relecov_tools/read_bioinfo_metadata.py | 2 +- tests/test_wrapper_handle.py | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 8dbfed44..06ec53dc 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -115,7 +115,7 @@ def __init__( self.configurables = ( config_build_schema.get_configuration("configurables") or {} ) - config_json = ConfigJson() + config_json = ConfigJson(extra_config=True) if self.project in available_projects: self.project_config = config_data.get(self.project, {}) diff --git a/relecov_tools/ena_upload.py b/relecov_tools/ena_upload.py index 25c411eb..297a4b2b 100755 --- a/relecov_tools/ena_upload.py +++ b/relecov_tools/ena_upload.py @@ -119,7 +119,7 @@ def __init__( stderr.print(f"[red]Unsupported metadata xml types: {wrong_types}") sys.exit(1) - config_json = ConfigJson() + config_json = ConfigJson(extra_config=True) self.config_json = config_json self.checklist = self.config_json.get_configuration("upload_to_ena")[ "checklist" diff --git a/relecov_tools/gisaid_upload.py b/relecov_tools/gisaid_upload.py index 75964b54..c9da5fe2 100644 --- a/relecov_tools/gisaid_upload.py +++ b/relecov_tools/gisaid_upload.py @@ -128,7 +128,7 @@ def complete_mand_fields(self, dataframe): dataframe.loc[dataframe["covv_type"] == "", "covv_type"] = "betacoronavirus" dataframe.loc[dataframe["covv_passage"] == "", "covv_passage"] = "Original" - config_json = ConfigJson() + config_json = ConfigJson(extra_config=True) gisaid_config = config_json.get_configuration("upload_to_gisaid")[ "GISAID_configuration" ] @@ -150,7 +150,7 @@ def metadata_to_csv(self): data = relecov_tools.utils.read_json_file(self.gisaid_json) df_data = pd.DataFrame(data) - config_json = ConfigJson() + config_json = ConfigJson(extra_config=True) fields = config_json.get_configuration("upload_to_gisaid")["gisaid_csv_headers"] col_df = list(df_data.columns) @@ -158,7 +158,7 @@ def metadata_to_csv(self): if field not in col_df: df_data.insert(4, field, "") - config_lab_json = ConfigJson() + config_lab_json = ConfigJson(extra_config=True) lab_json_conf = config_lab_json.get_topic_data( "read_lab_metadata", "laboratory_data" ) diff --git a/relecov_tools/read_bioinfo_metadata.py b/relecov_tools/read_bioinfo_metadata.py index af9b8d5e..06d0bfb8 100755 --- a/relecov_tools/read_bioinfo_metadata.py +++ b/relecov_tools/read_bioinfo_metadata.py @@ -94,7 +94,7 @@ def __init__( self.logsum = self.parent_log_summary(output_dir=output_dir) # Init config - self.config_json = ConfigJson() + self.config_json = ConfigJson(extra_config=True) # Init attributes self._init_input_folder(input_folder) diff --git a/tests/test_wrapper_handle.py b/tests/test_wrapper_handle.py index ef5dbe23..7d431bbc 100755 --- a/tests/test_wrapper_handle.py +++ b/tests/test_wrapper_handle.py @@ -131,7 +131,7 @@ def prepare_remote_test(**kwargs): ) print("Initiating ProcessWrapper") - config_json = ConfigJson() + config_json = ConfigJson(extra_config=True) config_json.include_extra_config(conf_file, config_name=None, force=True) wrapper_manager = Wrapper( # Initialize ProcessWrapper with the config file output_dir=kwargs["output_dir"], From 9f7f5795b69a4f309492f10477d14bfc2c57a052 Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 11:26:18 +0100 Subject: [PATCH 074/110] Moved configjson load up in init --- relecov_tools/validate.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/relecov_tools/validate.py b/relecov_tools/validate.py index 3adfb3de..5dc1b386 100755 --- a/relecov_tools/validate.py +++ b/relecov_tools/validate.py @@ -42,7 +42,8 @@ def __init__( super().__init__(output_dir=output_dir, called_module=__name__) self.log.info("Initiating validation process") - + # Check and load config params + self.config = ConfigJson(extra_config=True) # Check CLI arguments if json_schema_file is None: schema_name = self.config.get_topic_data("generic", "relecov_schema") @@ -128,9 +129,6 @@ def __init__( len(corrupted_from_samples), ) - # Check and load config params - self.config = ConfigJson(extra_config=True) - req_conf = ["download"] * bool(upload_files) + ["update_db"] * bool(check_db) missing = [ conf for conf in req_conf if self.config.get_configuration(conf) is None From 02896493acf56a934d6a65d86aced424be96a229 Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 12:02:02 +0100 Subject: [PATCH 075/110] Moved validate --upload-files test to test_sftp_modules.yaml --- .github/workflows/test_modules.yml | 3 +- .github/workflows/test_sftp_modules.yml | 40 ++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test_modules.yml b/.github/workflows/test_modules.yml index 9747da14..18e13a75 100755 --- a/.github/workflows/test_modules.yml +++ b/.github/workflows/test_modules.yml @@ -127,13 +127,12 @@ jobs: --soft_validation \ -o $OUTPUT_LOCATION - - name: Run validate module with upload files (default) + - name: Run validate module without --upload-files param (no sftp) if: matrix.modules == 'validate' run: | python3 tests/test_validate.py \ -j tests/data/map_validate/processed_metadata_lab_test.json \ -m tests/data/map_validate/metadata_lab_test.xlsx \ - --upload_files \ -o tests/data/map_validate/ \ -s relecov_tools/schema/relecov_schema.json \ -l tests/data/map_validate/previous_processes_log_summary.json diff --git a/.github/workflows/test_sftp_modules.yml b/.github/workflows/test_sftp_modules.yml index 65d323b8..583fa455 100644 --- a/.github/workflows/test_sftp_modules.yml +++ b/.github/workflows/test_sftp_modules.yml @@ -108,4 +108,42 @@ jobs: TEST_USER: ${{ secrets.TEST_USER }} TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }} TEST_PORT: ${{ secrets.TEST_PORT }} - OUTPUT_LOCATION: ${{ github.workspace }}/tests/ \ No newline at end of file + OUTPUT_LOCATION: ${{ github.workspace }}/tests/ + + + test_validate_upload: + runs-on: ubuntu-latest + needs: test_wrapper + if: github.repository_owner == 'BU-ISCIII' + + steps: + - name: Set up Python 3.12 + uses: actions/setup-python@v3 + with: + python-version: '3.12' + + - name: Checkout code + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + + - name: Install package and dependencies + run: | + pip install -r requirements.txt + pip install . + + - name: Load profile config (relecov) + run: | + relecov-tools add-extra-config \ + --config_file relecov_tools/conf/initial_config-relecov.yaml --force + - name: Run validate module with upload files (expected default) + if: github.repository_owner == 'BU-ISCIII' + run: | + python3 tests/test_validate.py \ + -j tests/data/map_validate/processed_metadata_lab_test.json \ + -m tests/data/map_validate/metadata_lab_test.xlsx \ + --upload_files \ + -o tests/data/map_validate/ \ + -s relecov_tools/schema/relecov_schema.json \ + -l tests/data/map_validate/previous_processes_log_summary.json From 41f1b7dd23925d1b01371d82e402ee42e7ccddbb Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 12:08:51 +0100 Subject: [PATCH 076/110] Moved validate --upload-files test to test_sftp_modules.yaml. --- .github/workflows/test_modules.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_modules.yml b/.github/workflows/test_modules.yml index 18e13a75..dc77dab3 100755 --- a/.github/workflows/test_modules.yml +++ b/.github/workflows/test_modules.yml @@ -130,7 +130,7 @@ jobs: - name: Run validate module without --upload-files param (no sftp) if: matrix.modules == 'validate' run: | - python3 tests/test_validate.py \ + relecov-tools validate \ -j tests/data/map_validate/processed_metadata_lab_test.json \ -m tests/data/map_validate/metadata_lab_test.xlsx \ -o tests/data/map_validate/ \ From 24fdc4ae3917717135b37f2342cd63a4ed007919 Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 12:22:24 +0100 Subject: [PATCH 077/110] Removed unused imports --- tests/test_validate.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/test_validate.py b/tests/test_validate.py index 64932050..61ead0c9 100644 --- a/tests/test_validate.py +++ b/tests/test_validate.py @@ -2,11 +2,9 @@ import os import sys import argparse -import yaml import json from relecov_tools.validate import Validate from relecov_tools.download import Download -from relecov_tools.config_json import ConfigJson def main(): From e6eb570aec08d76d57148963e60167285ef01fa1 Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 12:22:37 +0100 Subject: [PATCH 078/110] Updated CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01d9d087..dcc65fa1 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,12 +27,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Now Metadatalab validation sheets (DATA_VALIDATION and DROPDOWNS) only generate the included fields, not all of them [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) - Fixed datetime recognition for schema example generation and validation [#854](https://github.com/BU-ISCIII/relecov-tools/pull/854) - Restore formatting and validation behavior after header reordering + add Excel warnings for MEPRAM [#856] (https://github.com/BU-ISCIII/relecov-tools/pull/856) +- Adapted github actions workflows to load extra_config first [#863](https://github.com/BU-ISCIII/relecov-tools/pull/863) #### Changed - Changed `build_schema.build_new_schema` function: Now recursively iterates on complex properties to generate subschemas [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) - Changed `assets/schema_utils/metadatalab_template.py`: Now supports iterative recursion to flatten nested schemas [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) - Updated how project name is extracted from config in read-lab-metadata [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 +- Include extra_config=True in all modules that did not have it [#863](https://github.com/BU-ISCIII/relecov-tools/pull/863) #### Removed From 47a0d2b356e51a2e36ac75b8382544dd918540e6 Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 12:41:16 +0100 Subject: [PATCH 079/110] Left modules_outpath empty to fix sftp_modules workflow --- relecov_tools/conf/initial_config-relecov.yaml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/relecov_tools/conf/initial_config-relecov.yaml b/relecov_tools/conf/initial_config-relecov.yaml index 7e358eca..b814ac4e 100644 --- a/relecov_tools/conf/initial_config-relecov.yaml +++ b/relecov_tools/conf/initial_config-relecov.yaml @@ -13,11 +13,7 @@ generic: project_name: "Relecov" logs_config: default_outpath: /tmp/ - modules_outpath: - wrapper: /tmp/wrapper - download: /tmp/download - pipeline_manager: /tmp/pipeline_manager - read_bioinfo_metadata: /tmp/read_bioinfo_metadata + modules_outpath: {} json_schemas: relecov_schema: relecov_schema.json ena_schema: ena_schema.json From 8cd82c87f690f11e6e880b81b6cfbb4b2c3cbd0c Mon Sep 17 00:00:00 2001 From: Shettland Date: Fri, 20 Feb 2026 12:55:28 +0100 Subject: [PATCH 080/110] Included extra_config=True in ConfigJson load --- .../assets/schema_utils/custom_validators.py | 4 ++-- relecov_tools/download.py | 2 +- relecov_tools/sftp_client.py | 2 +- relecov_tools/upload_database.py | 2 +- relecov_tools/utils.py | 12 ++++++------ 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/relecov_tools/assets/schema_utils/custom_validators.py b/relecov_tools/assets/schema_utils/custom_validators.py index 20ddcd53..9c61033d 100644 --- a/relecov_tools/assets/schema_utils/custom_validators.py +++ b/relecov_tools/assets/schema_utils/custom_validators.py @@ -32,7 +32,7 @@ def validate_with_exceptions(schema, data, errors): if ( error.validator == "type" and error.instance - == relecov_tools.config_json.ConfigJson().get_topic_data( + == relecov_tools.config_json.ConfigJson(extra_config=True).get_topic_data( "generic", "not_provided_field" ) and prop_schema.get("type") in ["integer", "number"] @@ -43,7 +43,7 @@ def validate_with_exceptions(schema, data, errors): if ( error.validator == "format" and error.instance - == relecov_tools.config_json.ConfigJson().get_topic_data( + == relecov_tools.config_json.ConfigJson(extra_config=True).get_topic_data( "generic", "not_provided_field" ) and prop_schema.get("type") == "string" diff --git a/relecov_tools/download.py b/relecov_tools/download.py index fcc29bb4..24f81f30 100755 --- a/relecov_tools/download.py +++ b/relecov_tools/download.py @@ -49,7 +49,7 @@ def __init__( """Initializes the sftp object""" super().__init__(output_dir=output_dir, called_module="download") self.log.info("Initiating download process") - config_json = ConfigJson() + config_json = ConfigJson(extra_config=True) self.allowed_file_ext = config_json.get_topic_data( "sftp_handle", "allowed_file_extensions" ) diff --git a/relecov_tools/sftp_client.py b/relecov_tools/sftp_client.py index 3a7ef0c0..e6faedcb 100644 --- a/relecov_tools/sftp_client.py +++ b/relecov_tools/sftp_client.py @@ -33,7 +33,7 @@ class SftpClient: def __init__(self, conf_file=None, username=None, password=None): if not conf_file: - config_json = ConfigJson() + config_json = ConfigJson(extra_config=True) self.sftp_server = config_json.get_topic_data("sftp_handle", "sftp_server") self.sftp_port = config_json.get_topic_data("sftp_handle", "sftp_port") else: diff --git a/relecov_tools/upload_database.py b/relecov_tools/upload_database.py index 581c697c..c40279c1 100644 --- a/relecov_tools/upload_database.py +++ b/relecov_tools/upload_database.py @@ -38,7 +38,7 @@ def __init__( self.logsum = self.parent_log_summary() # Load configuration early to access update_db settings - self.config_json = ConfigJson() + self.config_json = ConfigJson(extra_config=True) self.data_upload_types = self._load_data_upload_types() self.full_update_steps = self._load_full_update_steps() diff --git a/relecov_tools/utils.py b/relecov_tools/utils.py index 115bc3e5..36e1493e 100755 --- a/relecov_tools/utils.py +++ b/relecov_tools/utils.py @@ -101,9 +101,9 @@ def read_excel_file(f_name, sheet_name, header_flag, leave_empty=True): data_row[heading[idx]] = ( None if leave_empty - else relecov_tools.config_json.ConfigJson().get_topic_data( - "generic", "not_provided_field" - ) + else relecov_tools.config_json.ConfigJson( + extra_config=True + ).get_topic_data("generic", "not_provided_field") ) else: data_row[heading[idx]] = l_row[idx] @@ -133,9 +133,9 @@ def read_excel_file(f_name, sheet_name, header_flag, leave_empty=True): data_row[heading[idx]] = ( None if leave_empty - else relecov_tools.config_json.ConfigJson().get_topic_data( - "generic", "not_provided_field" - ) + else relecov_tools.config_json.ConfigJson( + extra_config=True + ).get_topic_data("generic", "not_provided_field") ) else: data_row[heading[idx]] = val From a4239a91de6d25a06d76346b27a2791ea7a4a685 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 18 Feb 2026 11:28:01 +0100 Subject: [PATCH 081/110] Split Initial config into projects + Configuration.json migration into initial configs --- relecov_tools/conf/initial_config.yaml | 132 ------------------------- 1 file changed, 132 deletions(-) delete mode 100644 relecov_tools/conf/initial_config.yaml diff --git a/relecov_tools/conf/initial_config.yaml b/relecov_tools/conf/initial_config.yaml deleted file mode 100644 index f678928b..00000000 --- a/relecov_tools/conf/initial_config.yaml +++ /dev/null @@ -1,132 +0,0 @@ -# THIS INITIAL CONFIG SHOULD BE SET AFTER INSTALLATION -# MAKE A COPY OF THIS FILE IN YOUR HOME AND CONFIGURE IT TO YOUR NEEDS -# THEN RUN: relecov-tools add-extra-config --config_file path/to/initial_config_copy.yaml -# NOTE: Each key in 'modules_outpath' must match with a Command as listed with `relecov-tools --help` (but with '_' instead of '-') -logs_config: - default_outpath: - /tmp/ - modules_outpath: - wrapper: /tmp/wrapper - download: /tmp/download - pipeline_manager: /tmp/pipeline_manager - read_bioinfo_metadata: /tmp/read_bioinfo_metadata - -# REQUIRED: send-mail module -mail_sender: - delivery_template_path_file: /path/templates/ - email_host: host - email_port: port - email_host_user: email@gmail.com - email_use_tls: True - yaml_cred_path: /path/credentials.yml - institutions_guide_path: /path/contacts.json - -download: - user: '' - password: '' - conf_file: '' - download_option: '' - output_dir: '' - target_folders: [] - subfolder: RELECOV - -read_lab_metadata: - metadata_file: '' - sample_list_file: '' - output_dir: '' - files_folder: '' - -validate: - json_file: '' - json_schema_file: '' - metadata: '' - output_dir: '' - excel_sheet: '' - upload_files: false - logsum_file: '' - -map: - destination_schema: '' - json_file: '' - origin_schema: '' - output_dir: '' - schema_file: '' - -upload_to_ena: - user: '' - password: '' - center: '' - ena_json: '' - template_path: '' - action: ADD - dev: false - upload_fastq: false - metadata_types: [] - output_dir: '' - -upload_to_gisaid: - user: '' - password: '' - client_id: '' - token: '' - gisaid_json: '' - input_path: '' - output_dir: '' - frameshift: '' - proxy_config: '' - single: false - gzip: false - -update_db: - user: '' - password: '' - json: '' - type: '' - platform: '' - server_url: '' - full_update: false - long_table: '' - -read_bioinfo_metadata: - json_file: '' - input_folder: '' - output_dir: '' - software_name: '' - update: false - -metadata_homogeneizer: - institution: '' - directory: '' - output_dir: '' - -pipeline_manager: - input: '' - templates_root: '' - config: '' - output_dir: '' - folder_names: [] - -build_schema: - input_file: '' - schema_base: '' - draft_version: '' - diff: false - version: '' - project: '' - non_interactive: false - output_dir: '' - -logs_to_excel: - lab_code: '' - output_dir: '' - files: [] - -wrapper: - output_dir: '' - -upload_results: - user: '' - password: '' - batch_id: '' - template_path: '' - project: Relecov From a2cffe7ce50dea3a96a5fe411368b2deac990334 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 18 Feb 2026 11:29:02 +0100 Subject: [PATCH 082/110] Update relecov_schema.json + Add new EQA schema --- .../read_lab_metadata_heading_default.json | 57 + relecov_tools/schema/relecov_schema.json | 4428 ++++++++--------- relecov_tools/schema/relecov_schema_EQA.json | 1665 +++++++ 3 files changed, 3917 insertions(+), 2233 deletions(-) create mode 100644 relecov_tools/conf/read_lab_metadata_heading_default.json create mode 100644 relecov_tools/schema/relecov_schema_EQA.json diff --git a/relecov_tools/conf/read_lab_metadata_heading_default.json b/relecov_tools/conf/read_lab_metadata_heading_default.json new file mode 100644 index 00000000..d85646b2 --- /dev/null +++ b/relecov_tools/conf/read_lab_metadata_heading_default.json @@ -0,0 +1,57 @@ +[ + "Organism", + "Public Health sample id (SIVIRA)", + "Sample ID given by originating laboratory", + "Sample ID given by the submitting laboratory", + "Sample ID given in the microbiology lab", + "Sample ID given if multiple rna-extraction or passages", + "Sample ID given for sequencing", + "ENA Sample ID", + "GISAID Virus Name", + "GISAID id", + "Originating Laboratory", + "Submitting Institution", + "Sequencing Institution", + "Sample Collection Date", + "Sample Received Date", + "Purpose of sampling", + "Biological Sample Storage Condition", + "Specimen source", + "Environmental Material", + "Environmental System", + "Collection Device", + "Host", + "Host Age Years", + "Host Age Months", + "Host Gender", + "Vaccinated", + "Specific medication for treatment or prophylaxis", + "Hospitalization", + "Admission to intensive care unit", + "Death", + "Immunosuppression", + "Sequencing Date", + "Nucleic acid extraction protocol", + "Commercial All-in-one library kit", + "Library Preparation Kit", + "Enrichment Protocol", + "If Enrichment Protocol Is Other, Specify", + "Enrichment panel/assay", + "If Enrichment panel/assay Is Other, Specify", + "Enrichment panel/assay version", + "Number Of Samples In Run", + "Runid", + "Sequencing Instrument Model", + "Flowcell Kit", + "Source material", + "Capture method", + "Sequencing technique", + "Library Layout", + "Gene Name 1", + "Diagnostic Pcr Ct Value 1", + "Gene Name 2", + "Diagnostic Pcr Ct Value-2", + "Authors", + "Sequence file R1", + "Sequence file R2" +] diff --git a/relecov_tools/schema/relecov_schema.json b/relecov_tools/schema/relecov_schema.json index 713996b7..e4aa02f8 100644 --- a/relecov_tools/schema/relecov_schema.json +++ b/relecov_tools/schema/relecov_schema.json @@ -7,2593 +7,2591 @@ "type": "object", "properties": { "organism": { - "$ref": "#/$defs/enums/organism", + "header": "Y", + "label": "Organism", + "ontology": "SNOMED:410607006", + "description": "Taxonomic species name of the organism.", "examples": [ "Severe acute respiratory syndrome coronavirus 2 [NCBITaxon:2697049]" ], - "ontology": "SNOMED:410607006", - "type": "string", - "description": "Taxonomic species name of the organism.", + "$ref": "#/$defs/enums/organism", "classification": "Sample collection and processing", - "label": "Organism", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "public_health_sample_id": { + "header": "Y", + "label": "Public Health sample id (SIVIRA)", + "ontology": "0", + "description": "Identificator provided by the Public Health system", "examples": [ "2022CEU03926" ], - "ontology": "0", - "type": "string", - "description": "Identificator provided by the Public Health system.", "classification": "Sample collection and processing", - "label": "Public Health sample id (SIVIRA)", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "collecting_lab_sample_id": { + "header": "Y", + "label": "Sample ID given by originating laboratory", + "ontology": "GENEPIO:0001123", + "description": "Sample ID provided by the laboratory that collects the sample, the collecting institution is requested in column L of this file", "examples": [ - "1197677" + 1197677 ], - "ontology": "GENEPIO:0001123", - "type": "string", - "description": "Sample ID provided by the laboratory that collects the sample, the collecting institution is requested in column L of this file.", "classification": "Database Identifiers", - "label": "Sample ID given by originating laboratory", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "submitting_lab_sample_id": { + "header": "Y", + "label": "Sample ID given by the submitting laboratory", + "ontology": "GENEPIO:0001148", + "description": "Sample ID provided by the submitting laboratory that delivers the sample. The submitting laboratory is requested in column M", "examples": [ - "202203144" + 202203144 ], - "ontology": "GENEPIO:0001148", - "type": "string", - "description": "Sample ID provided by the submitting laboratory that delivers the sample. The submitting laboratory is requested in column M.", "classification": "Sequencing", - "label": "Sample ID given by the submitting laboratory", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "microbiology_lab_sample_id": { + "header": "Y", + "label": "Sample ID given in the microbiology lab", + "ontology": "0", + "description": "Sample identification provided by the microbiology laboratory", "examples": [ - "220624" + 220624 ], - "ontology": "0", - "type": "string", - "description": "Sample identification provided by the microbiology laboratory.", "classification": "Sample collection and processing", - "label": "Sample ID given in the microbiology lab", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "isolate_sample_id": { + "header": "Y", + "label": "Sample ID given if multiple rna-extraction or passages", + "ontology": "GENEPIO:0001644", + "description": "Sample identification provided if multiple rna-extraction or passages", "examples": [ - "220624.1" + 220624.1 ], - "ontology": "GENEPIO:0001644", - "type": "string", - "description": "Sample identification provided if multiple rna-extraction or passages.", "classification": "Database Identifiers", - "label": "Sample ID given if multiple rna-extraction or passages", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "sequencing_sample_id": { + "header": "Y", + "label": "Sample ID given for sequencing", + "ontology": "GENEPIO:0000079", + "description": "ID assigned to the sample for sequencing. It must be a unique identifier. If the sample is re-sequenced, the run number should be included, preceded by a dot.", "examples": [ "SEQ_220624 (SEQ_220624.2)" ], - "ontology": "GENEPIO:0000079", - "type": "string", - "description": "ID assigned to the sample for sequencing. It must be a unique identifier. If the sample is re-sequenced, the run number should be included, preceded by a dot.", "classification": "Database Identifiers", - "label": "Sample ID given for sequencing", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "ena_sample_accession": { + "header": "Y", + "label": "ENA Sample ID", + "ontology": "GENEPIO:0001139", + "description": "ID generated when uploading the sample to ENA", "examples": [ "ERS123456" ], - "ontology": "GENEPIO:0001139", + "classification": "Public databases", "type": "string", "identifiers_org_prefix": "ena.embl", - "description": "ID generated when uploading the sample to ENA.", - "classification": "Public databases", - "label": "ENA Sample ID", - "fill_mode": "batch", - "header": "Y" + "fill_mode": "batch" }, "gisaid_virus_name": { + "header": "Y", + "label": "GISAID Virus Name", + "ontology": "GENEPIO:0100282", + "description": "The user-defined GISAID virus name assigned to the sequence.", "examples": [ "hCoV-19/Spain/CT-HUJT-RB31776/2022" ], - "ontology": "GENEPIO:0100282", - "type": "string", - "description": "The user-defined GISAID virus name assigned to the sequence.", "classification": "Public databases", - "label": "GISAID Virus Name", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "gisaid_accession_id": { + "header": "Y", + "label": "GISAID id", + "ontology": "NCIT:C180324", + "description": "GISAID sequence ID.", "examples": [ "EPI_ISL_11222687" ], - "ontology": "NCIT:C180324", - "type": "string", - "description": "GISAID sequence ID.", "classification": "Public databases", - "label": "GISAID id", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "collecting_institution": { - "$ref": "#/$defs/enums/collecting_institution", + "header": "Y", + "label": "Originating Laboratory", + "ontology": "GENEPIO:0001153", + "description": "The name of the agency/institution that collected the sample.", "examples": [ "Hospital Universitario de Ceuta" ], - "ontology": "GENEPIO:0001153", - "type": "string", - "description": "The name of the agency/institution that collected the sample.", + "$ref": "#/$defs/enums/collecting_institution", "classification": "Sample collection and processing", - "label": "Originating Laboratory", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "submitting_institution": { - "$ref": "#/$defs/enums/submitting_institution", + "header": "Y", + "label": "Submitting Institution", + "ontology": "GENEPIO:0001159", + "description": "The name of the agency that submitted the sequence to the platform.", "examples": [ "Instituto de Salud Carlos III " ], - "ontology": "GENEPIO:0001159", - "type": "string", - "description": "The name of the agency that submitted the sequence to the platform.", + "$ref": "#/$defs/enums/submitting_institution", "classification": "Sample collection and processing", - "label": "Submitting Institution", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "sequencing_institution": { - "$ref": "#/$defs/enums/sequencing_institution", + "header": "Y", + "label": "Sequencing Institution", + "ontology": "GENEPIO:0100416", + "description": "The name of the agency that generated the sequence", "examples": [ "Instituto de Salud Carlos III " ], - "ontology": "GENEPIO:0100416", - "type": "string", - "description": "The name of the agency that generated the sequence.", + "$ref": "#/$defs/enums/sequencing_institution", "classification": "Sequencing", - "label": "Sequencing Institution", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "sample_collection_date": { + "header": "Y", + "label": "Sample Collection Date", + "ontology": "SNOMED:399445004", + "description": "The date on which the sample was collected. YYYY-MM-DD", "examples": [ "2021-04-13" ], - "ontology": "SNOMED:399445004", + "classification": "Sample collection and processing", "type": "string", "format": "date", - "description": "The date on which the sample was collected. YYYY-MM-DD.", - "classification": "Sample collection and processing", - "label": "Sample Collection Date", - "fill_mode": "sample", - "header": "Y" + "fill_mode": "sample" }, "sample_received_date": { + "header": "Y", + "label": "Sample Received Date", + "ontology": "SNOMED:281271004", + "description": "The date on which the sample was received. YYYY-MM-DD", "examples": [ "2021-05-13" ], - "ontology": "SNOMED:281271004", + "classification": "Sample collection and processing", "type": "string", "format": "date", - "description": "The date on which the sample was received. YYYY-MM-DD.", - "classification": "Sample collection and processing", - "label": "Sample Received Date", - "fill_mode": "sample", - "header": "Y" + "fill_mode": "sample" }, "purpose_sampling": { - "$ref": "#/$defs/enums/purpose_sampling", + "header": "Y", + "label": "Purpose of sampling", + "ontology": "GENEPIO:0001198", + "description": "The reason that the sample was collected.", "examples": [ "Surveillance" ], - "ontology": "GENEPIO:0001198", - "type": "string", - "description": "The reason that the sample was collected.", + "$ref": "#/$defs/enums/purpose_sampling", "classification": "Sample collection and processing", - "label": "Purpose of sampling", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "sample_storage_conditions": { + "header": "Y", + "label": "Biological Sample Storage Condition", + "ontology": "NCIT:C115535", + "description": "Conditions under which the sample is stored", "examples": [ "-80ºC" ], - "ontology": "NCIT:C115535", - "type": "string", - "description": "Conditions under which the sample is stored.", "classification": "Sample collection and processing", - "label": "Biological Sample Storage Condition", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "specimen_source": { - "$ref": "#/$defs/enums/specimen_source", + "header": "Y", + "label": "Specimen source", + "ontology": "SNOMED:703065002", + "description": "Source of the specimen, merge of anatomical_part, anatomical_material, body_product and collection method.", "examples": [ "Nasopharynx exudate" ], - "ontology": "SNOMED:703065002", - "type": "string", - "description": "Source of the specimen, merge of anatomical_part, anatomical_material, body_product and collection method.", + "$ref": "#/$defs/enums/specimen_source", "classification": "Sample collection and processing", - "label": "Specimen source", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "environmental_material": { - "$ref": "#/$defs/enums/environmental_material", + "header": "Y", + "label": "Environmental Material", + "ontology": "GENEPIO:0001223", + "description": "A substance obtained from the natural or man-made environment e.g. soil, water, sewage, door handle, bed handrail, face mask.", "examples": [ "Food isolate" ], - "ontology": "GENEPIO:0001223", - "type": "string", - "description": "A substance obtained from the natural or man-made environment e.g. soil, water, sewage, door handle, bed handrail, face mask.", + "$ref": "#/$defs/enums/environmental_material", "classification": "Sample collection and processing", - "label": "Environmental Material", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "environmental_system": { - "$ref": "#/$defs/enums/environmental_system", + "header": "Y", + "label": "Environmental System", + "ontology": "GENEPIO:0001232", + "description": "A data field which describes an environmental location as a site in the natural or built environment.", "examples": [ "Earth surface" ], - "ontology": "GENEPIO:0001232", - "type": "string", - "description": "A data field which describes an environmental location as a site in the natural or built environment.", + "$ref": "#/$defs/enums/environmental_system", "classification": "Sample collection and processing", - "label": "Environmental System", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "collection_device": { - "$ref": "#/$defs/enums/collection_device", + "header": "Y", + "label": "Collection Device", + "ontology": "GENEPIO:0001234", + "description": "A data field which describes the instrument or container used to collect the sample. ", "examples": [ "Swab" ], - "ontology": "GENEPIO:0001234", - "type": "string", - "description": "A data field which describes the instrument or container used to collect the sample.", + "$ref": "#/$defs/enums/collection_device", "classification": "Sample collection and processing", - "label": "Collection Device", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "host_common_name": { - "$ref": "#/$defs/enums/host_common_name", + "header": "Y", + "label": "Host", + "ontology": "GENEPIO:0001386", + "description": "The commonly used name of the host.", "examples": [ "Human" ], - "ontology": "GENEPIO:0001386", - "type": "string", - "description": "The commonly used name of the host.", + "$ref": "#/$defs/enums/host_common_name", "classification": "Host information", - "label": "Host", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "host_age_years": { + "header": "Y", + "label": "Host Age Years", + "ontology": "SNOMED:424144002", + "description": "Age of host at the time of sampling. Age between 3 and 110 years old. Recommended", "examples": [ 55 ], - "ontology": "SNOMED:424144002", + "classification": "Host information", "type": "integer", "minimum": 3, "maximum": 120, - "description": "Age of host at the time of sampling. Age between 3 and 110 years old. Recommended.", - "classification": "Host information", - "label": "Host Age Years", - "fill_mode": "sample", - "header": "Y" + "fill_mode": "sample" }, "host_age_months": { + "header": "Y", + "label": "Host Age Months", + "ontology": "LOINC:LA33639-8", + "description": "ONLY when [Host Age years] < 3. Age of host at the time of sampling. If the age is less than three years indicate in months between 0 and 36. Recommended", "examples": [ 14 ], - "ontology": "LOINC:LA33639-8", + "classification": "Host information", "type": "integer", "minimum": 0, "maximum": 36, - "description": "ONLY when [Host Age years] < 3. Age of host at the time of sampling. If the age is less than three years indicate in months between 0 and 36. Recommended.", - "classification": "Host information", - "label": "Host Age Months", - "fill_mode": "sample", - "header": "Y" + "fill_mode": "sample" }, "host_gender": { - "$ref": "#/$defs/enums/host_gender", + "header": "Y", + "label": "Host Gender", + "ontology": "SNOMED:263495000", + "description": "The gender of the host at the time of sample collection. Recomended", "examples": [ "Female" ], - "ontology": "SNOMED:263495000", - "type": "string", - "description": "The gender of the host at the time of sample collection. Recomended.", + "$ref": "#/$defs/enums/host_gender", "classification": "Host information", - "label": "Host Gender", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "vaccinated": { - "$ref": "#/$defs/enums/vaccinated", + "header": "Y", + "label": "Vaccinated", + "ontology": "NCIT:C28385", + "description": "A status indicating that an individual has received a vaccination.", "examples": [ "Yes" ], - "ontology": "NCIT:C28385", - "type": "string", - "description": "A status indicating that an individual has received a vaccination.", + "$ref": "#/$defs/enums/vaccinated", "classification": "Host information", - "label": "Vaccinated", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "medicated": { - "$ref": "#/$defs/enums/medicated", + "header": "Y", + "label": "Specific medication for treatment or prophylaxis", + "ontology": "SNOMED:18629005", + "description": "Has received medication for the identified treatment or prophylaxis", "examples": [ "Yes" ], - "ontology": "SNOMED:18629005", - "type": "string", - "description": "Has received medication for the identified treatment or prophylaxis.", + "$ref": "#/$defs/enums/medicated", "classification": "Host information", - "label": "Specific medication for treatment or prophylaxis", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "hospitalized": { - "$ref": "#/$defs/enums/hospitalized", + "header": "Y", + "label": "Hospitalization", + "ontology": "LOINC:LA15417-1", + "description": "Whether the patient was admitted to a hospital", "examples": [ "Yes" ], - "ontology": "LOINC:LA15417-1", - "type": "string", - "description": "Whether the patient was admitted to a hospital.", + "$ref": "#/$defs/enums/hospitalized", "classification": "Host information", - "label": "Hospitalization", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "icu_admission": { - "$ref": "#/$defs/enums/icu_admission", + "header": "Y", + "label": "Admission to intensive care unit", + "ontology": "SNOMED:305351004", + "description": "Whether the patient required ICU care during the illness.", "examples": [ "Yes" ], - "ontology": "SNOMED:305351004", - "type": "string", - "description": "Whether the patient required ICU care during the illness.", + "$ref": "#/$defs/enums/icu_admission", "classification": "Host information", - "label": "Admission to intensive care unit", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "death": { - "$ref": "#/$defs/enums/death", + "header": "Y", + "label": "Death", + "ontology": "LOINC:LA7424-0", + "description": "Whether the patient died as a result of the infection.", "examples": [ "No" ], - "ontology": "LOINC:LA7424-0", - "type": "string", - "description": "Whether the patient died as a result of the infection.", + "$ref": "#/$defs/enums/death", "classification": "Host information", - "label": "Death", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "immunosuppressed": { - "$ref": "#/$defs/enums/immunosuppressed", + "header": "Y", + "label": "Immunosuppression", + "ontology": "SNOMED:38013005", + "description": "Whether the patient has a weakened immune system.", "examples": [ "No" ], - "ontology": "SNOMED:38013005", - "type": "string", - "description": "Whether the patient has a weakened immune system.", + "$ref": "#/$defs/enums/immunosuppressed", "classification": "Host information", - "label": "Immunosuppression", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "sequencing_date": { + "header": "Y", + "label": "Sequencing Date", + "ontology": "GENEPIO:0001447", + "description": "The date the sample was sequenced. YYYY-MM-DD", "examples": [ "2022-02-22" ], - "ontology": "GENEPIO:0001447", + "classification": "Sequencing", "type": "string", "format": "date", - "description": "The date the sample was sequenced. YYYY-MM-DD.", - "classification": "Sequencing", - "label": "Sequencing Date", - "fill_mode": "batch", - "header": "Y" + "fill_mode": "batch" }, "nucleic_acid_extraction_protocol": { + "header": "Y", + "label": "Nucleic acid extraction protocol", + "ontology": "OBI_0302884", + "description": "DNA/RNA extraction protocol", "examples": [ "RT-PCR" ], - "ontology": "OBI_0302884", - "type": "string", - "description": "DNA/RNA extraction protocol.", "classification": "Sequencing", - "label": "Nucleic acid extraction protocol", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "all_in_one_library_kit": { - "$ref": "#/$defs/enums/all_in_one_library_kit", + "header": "Y", + "label": "Commercial All-in-one library kit", + "ontology": "GENEPIO:0000085", + "description": "Packaged kits (containing adapters, indexes, enzymes, buffers etc), tailored for specific sequencing workflows, which allow the simplified preparation of sequencing-ready libraries for small genomes, amplicons, and plasmids.", "examples": [ "Ion Xpress" ], - "ontology": "GENEPIO:0000085", - "type": "string", - "description": "Packaged kits (containing adapters, indexes, enzymes, buffers etc), tailored for specific sequencing workflows, which allow the simplified preparation of sequencing-ready libraries for small genomes, amplicons, and plasmids.", + "$ref": "#/$defs/enums/all_in_one_library_kit", "classification": "Sequencing", - "label": "Commercial All-in-one library kit", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "library_preparation_kit": { - "$ref": "#/$defs/enums/library_preparation_kit", + "header": "Y", + "label": "Library Preparation Kit", + "ontology": "NCIT:C182085", + "description": "The name of the DNA library preparation kit used to generate the library being sequenced.", "examples": [ "Illumina DNA Prep Tagmentation" ], - "ontology": "NCIT:C182085", - "type": "string", - "description": "The name of the DNA library preparation kit used to generate the library being sequenced.", + "$ref": "#/$defs/enums/library_preparation_kit", "classification": "Sequencing", - "label": "Library Preparation Kit", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "enrichment_protocol": { - "$ref": "#/$defs/enums/enrichment_protocol", + "header": "Y", + "label": "Enrichment Protocol", + "ontology": "EFO_0009089", + "description": "Type of enrichment protocol", "examples": [ "Amplicon" ], - "ontology": "EFO_0009089", - "type": "string", - "description": "Type of enrichment protocol.", + "$ref": "#/$defs/enums/enrichment_protocol", "classification": "Sequencing", - "label": "Enrichment Protocol", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "if_enrichment_protocol_is_other_specify": { + "header": "Y", + "label": "If Enrichment Protocol Is Other, Specify", + "ontology": "0", + "description": "Specify if you have used another enrichment protocol", "examples": [ "Ultracentrifugation-based viral particle enrichment" ], - "ontology": "0", - "type": "string", - "description": "Specify if you have used another enrichment protocol.", "classification": "Sequencing", - "label": "If Enrichment Protocol Is Other, Specify", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "enrichment_panel": { - "$ref": "#/$defs/enums/enrichment_panel", + "header": "Y", + "label": "Enrichment panel/assay", + "ontology": "NGBO:6000323", + "description": "Commercial or custom panel/assay used for enrichment.", "examples": [ "ARTIC" ], - "ontology": "NGBO:6000323", - "type": "string", - "description": "Commercial or custom panel/assay used for enrichment.", + "$ref": "#/$defs/enums/enrichment_panel", "classification": "Sequencing", - "label": "Enrichment panel/assay", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "if_enrichment_panel_assay_is_other_specify": { + "header": "Y", + "label": "If Enrichment panel/assay Is Other, Specify", + "ontology": "0", + "description": "Specify if you have used another enrichment panel/assay", "examples": [ "Swift Normalase Amplicon SARS-CoV-2 Panel" ], - "ontology": "0", - "type": "string", - "description": "Specify if you have used another enrichment panel/assay.", "classification": "Sequencing", - "label": "If Enrichment panel/assay Is Other, Specify", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "enrichment_panel_version": { - "$ref": "#/$defs/enums/enrichment_panel_version", + "header": "Y", + "label": "Enrichment panel/assay version", + "ontology": "0", + "description": "Version fo the enrichment panel", "examples": [ "ARTIC v4" ], - "ontology": "0", - "type": "string", - "description": "Version fo the enrichment panel.", + "$ref": "#/$defs/enums/enrichment_panel_version", "classification": "Sequencing", - "label": "Enrichment panel/assay version", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "number_of_samples_in_run": { + "header": "Y", + "label": "Number Of Samples In Run", + "ontology": "KISAO_0000326", + "description": "Total count of samples included in the sequencing run.", "examples": [ 96 ], - "ontology": "KISAO_0000326", + "classification": "Sequencing", "type": "integer", "minimum": 1, "maximum": 10000, - "description": "Total count of samples included in the sequencing run.", - "classification": "Sequencing", - "label": "Number Of Samples In Run", - "fill_mode": "batch", - "header": "Y" + "fill_mode": "batch" }, "runID": { + "header": "Y", + "label": "Runid", + "ontology": "NCIT:C117058", + "description": "Unique sequencing run identifier.", "examples": [ "MiSeq_GEN_267_20220208_ICasas" ], - "ontology": "NCIT:C117058", - "type": "string", - "description": "Unique sequencing run identifier.", "classification": "Sequencing", - "label": "Runid", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "sequencing_instrument_model": { - "$ref": "#/$defs/enums/sequencing_instrument_model", + "header": "Y", + "label": "Sequencing Instrument Model", + "ontology": "GENEPIO:0001452", + "description": "The model of the sequencing instrument used.", "examples": [ "Illumina NextSeq 550" ], - "ontology": "GENEPIO:0001452", - "type": "string", - "description": "The model of the sequencing instrument used.", + "$ref": "#/$defs/enums/sequencing_instrument_model", "classification": "Sequencing", - "label": "Sequencing Instrument Model", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "flowcell_kit": { - "$ref": "#/$defs/enums/flowcell_kit", + "header": "Y", + "label": "Flowcell Kit", + "ontology": "0", + "description": "Flowcell sequencer used for sequencing the sample", "examples": [ "NextSeq 500/550 High Output Kit v2.5 (75 Cycles)" ], - "ontology": "0", - "type": "string", - "description": "Flowcell sequencer used for sequencing the sample.", + "$ref": "#/$defs/enums/flowcell_kit", "classification": "Sequencing", - "label": "Flowcell Kit", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "library_source": { - "$ref": "#/$defs/enums/library_source", + "header": "Y", + "label": "Source material", + "ontology": "GENEPIO:0001965", + "description": "Molecule type used to make the library.", "examples": [ "viral RNA source" ], - "ontology": "GENEPIO:0001965", - "type": "string", - "description": "Molecule type used to make the library.", + "$ref": "#/$defs/enums/library_source", "classification": "Sequencing", - "label": "Source material", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "library_selection": { - "$ref": "#/$defs/enums/library_selection", + "header": "Y", + "label": "Capture method", + "ontology": "GENEPIO:0001940", + "description": "Library capture method.", "examples": [ "PCR method" ], - "ontology": "GENEPIO:0001940", - "type": "string", - "description": "Library capture method.", + "$ref": "#/$defs/enums/library_selection", "classification": "Sequencing", - "label": "Capture method", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "library_strategy": { - "$ref": "#/$defs/enums/library_strategy", + "header": "Y", + "label": "Sequencing technique", + "ontology": "GENEPIO:0001973", + "description": "Overall sequencing strategy or approach.", "examples": [ "WGS strategy" ], - "ontology": "GENEPIO:0001973", - "type": "string", - "description": "Overall sequencing strategy or approach.", + "$ref": "#/$defs/enums/library_strategy", "classification": "Sequencing", - "label": "Sequencing technique", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "library_layout": { - "$ref": "#/$defs/enums/library_layout", + "header": "Y", + "label": "Library Layout", + "ontology": "NCIT:C175894", + "description": "Single or paired sequencing configuration", "examples": [ "Single-end" ], - "ontology": "NCIT:C175894", - "type": "string", - "description": "Single or paired sequencing configuration.", + "$ref": "#/$defs/enums/library_layout", "classification": "Sequencing", - "label": "Library Layout", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "gene_name_1": { - "$ref": "#/$defs/enums/gene_name_1", + "header": "Y", + "label": "Gene Name 1", + "ontology": "GENEPIO:0001507", + "description": "The name of the gene used in the diagnostic RT-PCR test.", "examples": [ "ORF1ab" ], - "ontology": "GENEPIO:0001507", - "type": "string", - "description": "The name of the gene used in the diagnostic RT-PCR test.", + "$ref": "#/$defs/enums/gene_name_1", "classification": "Pathogen diagnostic testing", - "label": "Gene Name 1", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "diagnostic_pcr_Ct_value_1": { + "header": "Y", + "label": "Diagnostic Pcr Ct Value 1", + "ontology": "GENEPIO:0001509", + "description": "The Ct value result from a diagnostic SARS-CoV-2 RT-PCR test.", "examples": [ 40 ], - "ontology": "GENEPIO:0001509", + "classification": "Pathogen diagnostic testing", "type": "number", "minimum": 0, "maximum": 40, - "description": "The Ct value result from a diagnostic SARS-CoV-2 RT-PCR test.", - "classification": "Pathogen diagnostic testing", - "label": "Diagnostic Pcr Ct Value 1", - "fill_mode": "batch", - "header": "Y" + "fill_mode": "batch" }, "gene_name_2": { - "$ref": "#/$defs/enums/gene_name_2", + "header": "Y", + "label": "Gene Name 2", + "ontology": "GENEPIO:0001510", + "description": "The name of the gene used in the diagnostic RT-PCR test.", "examples": [ "S" ], - "ontology": "GENEPIO:0001510", - "type": "string", - "description": "The name of the gene used in the diagnostic RT-PCR test.", + "$ref": "#/$defs/enums/gene_name_2", "classification": "Pathogen diagnostic testing", - "label": "Gene Name 2", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "diagnostic_pcr_Ct_value_2": { + "header": "Y", + "label": "Diagnostic Pcr Ct Value-2", + "ontology": "GENEPIO:0001512", + "description": "The cycle threshold (CT) value result from a diagnostic SARS-CoV-2 RT-PCR test.", "examples": [ - "40" + 40 ], - "ontology": "GENEPIO:0001512", + "classification": "Pathogen diagnostic testing", "type": "string", "minimum": 0, "maximum": 40, - "description": "The cycle threshold (CT) value result from a diagnostic SARS-CoV-2 RT-PCR test.", - "classification": "Pathogen diagnostic testing", - "label": "Diagnostic Pcr Ct Value-2", - "fill_mode": "batch", - "header": "Y" + "fill_mode": "batch" }, "authors": { + "header": "Y", + "label": "Authors", + "ontology": "NCIT:C183329", + "description": "A data field which describes the names of individuals contributing to the processes of sample collection, sequence generation, analysis, and data submission.", "examples": [ "Sánchez P" ], - "ontology": "NCIT:C183329", - "type": "string", - "description": "A data field which describes the names of individuals contributing to the processes of sample collection, sequence generation, analysis, and data submission.", "classification": "Public databases", - "label": "Authors", - "fill_mode": "batch", - "header": "Y" + "type": "string", + "fill_mode": "batch" }, "sequence_file_R1": { + "header": "Y", + "label": "Sequence file R1", + "ontology": "GENEPIO:0001476", + "description": "A data field which describes the user-specified filename of the read 1 (r1) file.", "examples": [ "ABC123_S1_L001_R1_001.fastq.gz" ], - "ontology": "GENEPIO:0001476", - "type": "string", - "description": "A data field which describes the user-specified filename of the read 1 (r1) file.", "classification": "Bioinformatics and QC metrics fields", - "label": "Sequence file R1", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "sequence_file_R2": { + "header": "Y", + "label": "Sequence file R2", + "ontology": "GENEPIO:0001477", + "description": "A data field which describes the user-specified filename of the read 2 (r2) file. ", "examples": [ "ABC123_S1_L001_R2_002.fastq.gz" ], - "ontology": "GENEPIO:0001477", - "type": "string", - "description": "A data field which describes the user-specified filename of the read 2 (r2) file.", "classification": "Bioinformatics and QC metrics fields", - "label": "Sequence file R2", - "fill_mode": "sample", - "header": "Y" + "type": "string", + "fill_mode": "sample" }, "unique_sample_id": { + "header": "N", + "label": "Unique identifier", + "ontology": "NCIT:C70663", + "description": "Unique identifier for each sample", "examples": [ "AXM1456" ], - "ontology": "NCIT:C70663", - "type": "string", - "description": "Unique identifier for each sample.", "classification": "Sample collection and processing", - "label": "Unique identifier", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "batch_id": { + "header": "N", + "label": "Batch identifier", + "ontology": "NCIT:C104504", + "description": "Unique identifier for each analysis batch", "examples": [ - "20250506140633" + 20250506140633 ], - "ontology": "NCIT:C104504", - "type": "string", - "description": "Unique identifier for each analysis batch.", "classification": "Sample collection and processing", - "label": "Batch identifier", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "submitting_institution_id": { + "header": "N", + "label": "Submitting Institution Identifier", + "ontology": "NCIT:C81294", + "description": "The Institution identifier that is submitting data or information.", "examples": [ "COD-1111-BU" ], - "ontology": "NCIT:C81294", - "type": "string", - "description": "The Institution identifier that is submitting data or information.", "classification": "Sample collection and processing", - "label": "Submitting Institution Identifier", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "collecting_institution_code_1": { - "examples": [ - "1328021542" - ], + "header": "N", + "label": "CCN", "ontology": "SNOMED:423901009", - "type": "string", "description": "CCN code from the agency/institution that collected the sample.", + "examples": [ + 1328021542 + ], "classification": "Sample collection and processing", - "label": "CCN", - "fill_mode": "sample", - "header": "N" + "type": "string", + "fill_mode": "sample" }, "collecting_institution_code_2": { - "examples": [ - "40059" - ], + "header": "N", + "label": "CODCNH", "ontology": "NCIT:C101703", - "type": "string", "description": "CODCNH code from the agency/institution that collected the sample.", + "examples": [ + 40059 + ], "classification": "Sample collection and processing", - "label": "CODCNH", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "collecting_institution_email": { + "header": "N", + "label": "Originating Laboratory Email", + "ontology": "OBI:0001890", + "description": "The email address of the contact responsible for follow-up regarding the sample.", "examples": [ "johnnyblogs@lab.ca" ], - "ontology": "OBI:0001890", - "type": "string", - "description": "The email address of the contact responsible for follow-up regarding the sample.", "classification": "Sample collection and processing", - "label": "Originating Laboratory Email", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "collecting_institution_address": { + "header": "N", + "label": "Originating Laboratory Address", + "ontology": "GENEPIO:0001158", + "description": "The mailing address of the agency collecting the sample.", "examples": [ "655 Lab St, Vancouver, British Columbia, V5N 2A2, Canada" ], - "ontology": "GENEPIO:0001158", - "type": "string", - "description": "The mailing address of the agency collecting the sample.", "classification": "Sample collection and processing", - "label": "Originating Laboratory Address", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "autonom_cod": { + "header": "N", + "label": "Autonomic Center Code", + "ontology": "GENEPIO:0001803", + "description": "Autonomic center Code", "examples": [ - "11380" + 11380 ], - "ontology": "GENEPIO:0001803", - "type": "string", - "description": "Autonomic center Code.", "classification": "Sample collection and processing", - "label": "Autonomic Center Code", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "submitting_institution_email": { + "header": "N", + "label": "Submitting Institution Email", + "ontology": "GENEPIO:0001165", + "description": "The email address of the contact responsible for follow-up regarding the sequence.", "examples": [ "RespLab@lab.ca" ], - "ontology": "GENEPIO:0001165", - "type": "string", - "description": "The email address of the contact responsible for follow-up regarding the sequence.", "classification": "Sample collection and processing", - "label": "Submitting Institution Email", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "submitting_institution_address": { + "header": "N", + "label": "Submitting Institution Address", + "ontology": "GENEPIO:0001167", + "description": "The mailing address of the agency submitting the sequence.", "examples": [ "123 Sunnybrooke St, Toronto, Ontario, M4P 1L6, Canada" ], - "ontology": "GENEPIO:0001167", - "type": "string", - "description": "The mailing address of the agency submitting the sequence.", "classification": "Sample collection and processing", - "label": "Submitting Institution Address", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "geo_loc_country": { - "$ref": "#/$defs/enums/geo_loc_country", + "header": "N", + "label": "Country", + "ontology": "GENEPIO:0001181", + "description": "The country of origin of the sample.", "examples": [ "South Africa [GAZ:00001094]" ], - "ontology": "GENEPIO:0001181", - "type": "string", - "description": "The country of origin of the sample.", + "$ref": "#/$defs/enums/geo_loc_country", "classification": "Sample collection and processing", - "label": "Country", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "geo_loc_state": { - "$ref": "#/$defs/enums/geo_loc_state", + "header": "N", + "label": "Autonomic Community", + "ontology": "GENEPIO:0001185", + "description": "The state/province/territory of origin of the sample.", "examples": [ "Andalucía" ], - "ontology": "GENEPIO:0001185", - "type": "string", - "description": "The state/province/territory of origin of the sample.", + "$ref": "#/$defs/enums/geo_loc_state", "classification": "Sample collection and processing", - "label": "Autonomic Community", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "geo_loc_state_cod": { - "examples": [ - "1" - ], + "header": "N", + "label": "Autonomic Community Code", "ontology": "NCIT:C218832", - "type": "string", "description": "Official Code of the state/province/territory of origin of the sample.", + "examples": [ + 1 + ], "classification": "Sample collection and processing", - "label": "Autonomic Community Code", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "geo_loc_region": { - "$ref": "#/$defs/enums/geo_loc_region", + "header": "N", + "label": "Province", + "ontology": "NCIT:C25632 ", + "description": "The county/region of origin of the sample.", "examples": [ "Almería" ], - "ontology": "NCIT:C25632 ", - "type": "string", - "description": "The county/region of origin of the sample.", + "$ref": "#/$defs/enums/geo_loc_region", "classification": "Sample collection and processing", - "label": "Province", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "geo_loc_region_cod": { + "header": "N", + "label": "Province Code", + "ontology": 0, + "description": "Official Code of the county/region of origin of the sample.", "examples": [ - "4" + 4 ], - "ontology": "0", - "type": "string", - "description": "Official Code of the county/region of origin of the sample.", "classification": "Sample collection and processing", - "label": "Province Code", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "geo_loc_city": { + "header": "N", + "label": "City", + "ontology": "GENEPIO:0001189", + "description": "The city of origin of the sample.", "examples": [ "Vancouver" ], - "ontology": "GENEPIO:0001189", - "type": "string", - "description": "The city of origin of the sample.", "classification": "Sample collection and processing", - "label": "City", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "geo_loc_city_cod": { + "header": "N", + "label": "City Code", + "ontology": 0, + "description": "Official Code of the city of origin of the sample.", "examples": [ - "40139" + 40139 ], - "ontology": "0", - "type": "string", - "description": "Official Code of the city of origin of the sample.", "classification": "Sample collection and processing", - "label": "City Code", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "post_code": { - "examples": [ - "4120" - ], + "header": "N", + "label": "Postal Code", "ontology": "NCIT:C25621", - "type": "string", "description": "Post Code of the agency/institution that collected the sample.", + "examples": [ + 4120 + ], "classification": "Sample collection and processing", - "label": "Postal Code", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "dep_func": { + "header": "N", + "label": "Functional Dependency", + "ontology": "mesh:D009935", + "description": "The type of entity to which the facility is affiliated", "examples": [ "Servicios O Institutos De Salud De Las Comunidades Autónomas" ], - "ontology": "mesh:D009935", - "type": "string", - "description": "The type of entity to which the facility is affiliated.", "classification": "Sample collection and processing", - "label": "Functional Dependency", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "center_class_code": { + "header": "N", + "label": "Center Class Code", + "ontology": "NCIT:C93878", + "description": "Official code of Institution’s functional classification or primary service purpose", "examples": [ "C11" ], - "ontology": "NCIT:C93878", - "type": "string", - "description": "Official code of Institution’s functional classification or primary service purpose.", "classification": "Sample collection and processing", - "label": "Center Class Code", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "collecting_institution_function": { + "header": "N", + "label": "Center Class Function", + "ontology": "NCIT:C188820", + "description": "Institution’s functional classification or primary service purpose", "examples": [ "Hospitales Generales" ], - "ontology": "NCIT:C188820", - "type": "string", - "description": "Institution’s functional classification or primary service purpose.", "classification": "Sample collection and processing", - "label": "Center Class Function", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "lab_geo_loc_latitude": { + "header": "N", + "label": "Originating Laboratory Latitude", + "ontology": "EFO:0005020", + "description": "The latitude coordinates of the geographical location of the agency/institution that collected the sample.", "examples": [ "36.8625108" ], - "ontology": "EFO:0005020", - "type": "string", - "description": "The latitude coordinates of the geographical location of the agency/institution that collected the sample.", "classification": "Sample collection and processing", - "label": "Originating Laboratory Latitude", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "lab_geo_loc_longitude": { + "header": "N", + "label": "Originating Laboratory Longitude", + "ontology": "EFO:0005021", + "description": "The longitude coordinates of the geographical location of the agency/institution that collected the sample.", "examples": [ "-2.4467449" ], - "ontology": "EFO:0005021", - "type": "string", - "description": "The longitude coordinates of the geographical location of the agency/institution that collected the sample.", "classification": "Sample collection and processing", - "label": "Originating Laboratory Longitude", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "collecting_institution_phone": { - "examples": [ - "950016114" - ], + "header": "N", + "label": "Originating Laboratory Phone", "ontology": "NCIT:C40978", - "type": "string", "description": "Phone of the agency/institution that collected the sample.", + "examples": [ + 950016114 + ], "classification": "Sample collection and processing", - "label": "Originating Laboratory Phone", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "geo_loc_latitude": { + "header": "N", + "label": "Geo Loc Latitude", + "ontology": "OBI:0001620", + "description": "The latitude coordinates of the geographical location of sample collection.", "examples": [ "38.98 N" ], - "ontology": "OBI:0001620", - "type": "string", - "description": "The latitude coordinates of the geographical location of sample collection.", "classification": "Sample collection and processing", - "label": "Geo Loc Latitude", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "geo_loc_longitude": { + "header": "N", + "label": "Geo Loc Longitude", + "ontology": "OBI:0001621", + "description": "The longitude coordinates of the geographical location of sample collection.", "examples": [ "77.11 W" ], - "ontology": "OBI:0001621", - "type": "string", - "description": "The longitude coordinates of the geographical location of sample collection.", "classification": "Sample collection and processing", - "label": "Geo Loc Longitude", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "study_type": { - "$ref": "#/$defs/enums/study_type", + "header": "N", + "label": "Study type", + "ontology": "NCIT:C142175", + "description": "The nature of the investigation or the investigational use for which the study is being done", "examples": [ "Whole Genome Sequencing [NCIT:C101294]" ], - "ontology": "NCIT:C142175", - "type": "string", - "description": "The nature of the investigation or the investigational use for which the study is being done.", + "$ref": "#/$defs/enums/study_type", "classification": "Public databases", - "label": "Study type", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "anatomical_material": { - "$ref": "#/$defs/enums/anatomical_material", + "header": "N", + "label": "Anatomical Material", + "ontology": "GENEPIO:0001211", + "description": "A substance obtained from an anatomical part of an organism e.g. tissue, blood.", "examples": [ "Blood [UBERON:0000178]" ], - "ontology": "GENEPIO:0001211", - "type": "string", - "description": "A substance obtained from an anatomical part of an organism e.g. tissue, blood.", + "$ref": "#/$defs/enums/anatomical_material", "classification": "Sample collection and processing", - "label": "Anatomical Material", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "anatomical_part": { - "$ref": "#/$defs/enums/anatomical_part", + "header": "N", + "label": "Anatomical Part", + "ontology": "GENEPIO:0001214", + "description": "A data field which describes the substance obtained from an anatomical part of an organism. ", "examples": [ "Nasopharynx [UBERON:0001728]" ], - "ontology": "GENEPIO:0001214", - "type": "string", - "description": "A data field which describes the substance obtained from an anatomical part of an organism.", + "$ref": "#/$defs/enums/anatomical_part", "classification": "Sample collection and processing", - "label": "Anatomical Part", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "collection_method": { - "$ref": "#/$defs/enums/collection_method", + "header": "N", + "label": "Collection Method", + "ontology": "LOINC:LP32732-7", + "description": "A data field which describes the process used to collect the sample. ", "examples": [ "Trachel Aspiration" ], - "ontology": "LOINC:LP32732-7", - "type": "string", - "description": "A data field which describes the process used to collect the sample.", + "$ref": "#/$defs/enums/collection_method", "classification": "Sample collection and processing", - "label": "Collection Method", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "body_product": { - "$ref": "#/$defs/enums/body_product", + "header": "N", + "label": "Body Product", + "ontology": "SNOMED:364684009", + "description": "A data field which describes the substance excreted/secreted from an organism. ", "examples": [ "Feces" ], - "ontology": "SNOMED:364684009", - "type": "string", - "description": "A data field which describes the substance excreted/secreted from an organism.", + "$ref": "#/$defs/enums/body_product", "classification": "Sample collection and processing", - "label": "Body Product", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "tax_id": { + "header": "N", + "label": "Tax ID", + "ontology": "NCIT:C164641", + "description": "The NCBITaxon identifier for the organism being sequenced.", "examples": [ "2697049" ], - "ontology": "NCIT:C164641", - "type": "string", - "description": "The NCBITaxon identifier for the organism being sequenced.", "classification": "Sample collection and processing", - "label": "Tax ID", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "host_scientific_name": { - "$ref": "#/$defs/enums/host_scientific_name", + "header": "N", + "label": "Host Scientific Name", + "ontology": "GENEPIO:0001387", + "description": "The taxonomic, or scientific name of the host.", "examples": [ "Homo sapiens [NCBITaxon:9606]" ], - "ontology": "GENEPIO:0001387", - "type": "string", - "description": "The taxonomic, or scientific name of the host.", + "$ref": "#/$defs/enums/host_scientific_name", "classification": "Host information", - "label": "Host Scientific Name", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "host_disease": { - "$ref": "#/$defs/enums/host_disease", + "header": "N", + "label": "Host disease", + "ontology": "SNOMED:64572001", + "description": "The name of the disease experienced by the host.", "examples": [ "COVID-19 [MONDO:0100096]" ], - "ontology": "SNOMED:64572001", - "type": "string", - "description": "The name of the disease experienced by the host.", + "$ref": "#/$defs/enums/host_disease", "classification": "Host information", - "label": "Host disease", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "purpose_of_sequencing": { - "$ref": "#/$defs/enums/purpose_of_sequencing", + "header": "N", + "label": "Purpose of Sequencing", + "ontology": "GENEPIO:0001445", + "description": "The reason that the sample was sequenced.", "examples": [ "Baseline surveillance (random sampling) [GENEPIO:0100005]" ], - "ontology": "GENEPIO:0001445", - "type": "string", - "description": "The reason that the sample was sequenced.", + "$ref": "#/$defs/enums/purpose_of_sequencing", "classification": "Sequencing", - "label": "Purpose of Sequencing", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "if_enrichment_panel_assay_version_other": { + "header": "N", + "label": "If Enrichment panel/assay version Is Other, Specify", + "ontology": 0, + "description": "A form or variant of software; one of a sequence of copies of a software program, each incorporating new modifications.", "examples": [ "2.1.3" ], - "ontology": "0", - "type": "string", - "description": "A form or variant of software; one of a sequence of copies of a software program, each incorporating new modifications.", "classification": "Sequencing", - "label": "If Enrichment panel/assay version Is Other, Specify", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "amplicon_pcr_primer_scheme": { + "header": "N", + "label": "Amplicon Pcr Primer Scheme", + "ontology": "GENEPIO:0001456", + "description": "The specifications of the primers (primer sequences, binding positions, fragment size generated etc) used to generate the amplicons to be sequenced.", "examples": [ "https://github.com/joshquick/artic-ncov2019/blob/master/primer_schemes/nCoV-2019/V3/nCoV-2019.tsv" ], - "ontology": "GENEPIO:0001456", - "type": "string", - "description": "The specifications of the primers (primer sequences, binding positions, fragment size generated etc) used to generate the amplicons to be sequenced.", "classification": "Sequencing", - "label": "Amplicon Pcr Primer Scheme", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "sequencing_instrument_platform": { - "$ref": "#/$defs/enums/sequencing_instrument_platform", + "header": "N", + "label": "Sequencing Instrument Platform", + "ontology": "GENEPIO:0000071", + "description": "A sequencing plaform (brand) is a name of a company that produces sequencer equipment.", "examples": [ "Illumina" ], - "ontology": "GENEPIO:0000071", - "type": "string", - "description": "A sequencing plaform (brand) is a name of a company that produces sequencer equipment.", + "$ref": "#/$defs/enums/sequencing_instrument_platform", "classification": "Sequencing", - "label": "Sequencing Instrument Platform", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "read_length": { + "header": "N", + "label": "Read length", + "ontology": "NCIT:C153362", + "description": "Number of base pairs per read", "examples": [ - 75 + "75" ], - "ontology": "NCIT:C153362", + "classification": "Sequencing", "type": "integer", "minimum": 0, "maximum": 10000, - "description": "Number of base pairs per read.", - "classification": "Sequencing", - "label": "Read length", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "number_of_reads": { - "examples": [ - 75 - ], + "header": "N", + "label": "Read count", "ontology": "NCIT:C153362", - "type": "integer", "description": "The number of nucleotides successfully ordered from each side of a nucleic acid fragment obtained after the completion of a sequencing process.", + "examples": [ + "75" + ], "classification": "Sequencing", - "label": "Read count", - "fill_mode": "batch", - "header": "N" + "type": "integer", + "fill_mode": "batch" }, "sequence_file_R1_md5": { + "header": "N", + "label": "Sequence fastq R1 md5", + "ontology": "NCIT:C171276", + "description": "Checksum md5 value to validate successful file transmission in R1", "examples": [ "b5242d60471e5a5a97b35531dbbe8c30" ], - "ontology": "NCIT:C171276", - "type": "string", - "description": "Checksum md5 value to validate successful file transmission in R1.", "classification": "Bioinformatics and QC metrics fields", - "label": "Sequence fastq R1 md5", - "fill_mode": "sample", - "header": "N" + "type": "string", + "fill_mode": "sample" }, "sequence_file_R2_md5": { + "header": "N", + "label": "Sequence fastq R2 md5", + "ontology": "NCIT:C171276", + "description": "Checksum md5 value to validate successful file transmission in R2", "examples": [ "b5242d60471e5a5a97b35531dbbe8c30" ], - "ontology": "NCIT:C171276", - "type": "string", - "description": "Checksum md5 value to validate successful file transmission in R2.", "classification": "Bioinformatics and QC metrics fields", - "label": "Sequence fastq R2 md5", - "fill_mode": "sample", - "header": "N" + "type": "string", + "fill_mode": "sample" }, "sequence_file_path_R1": { + "header": "N", + "label": "Filepath R1", + "ontology": "GENEPIO:0001478", + "description": "The filepath of the r1 file.", "examples": [ "/User/Documents/RespLab/Data/" ], - "ontology": "GENEPIO:0001478", - "type": "string", - "description": "The filepath of the r1 file.", "classification": "Files info", - "label": "Filepath R1", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "sequence_file_path_R2": { + "header": "N", + "label": "Filepath R2", + "ontology": "GENEPIO:0001479", + "description": "The filepath of the r2 file.", "examples": [ "/User/Documents/RespLab/Data/" ], - "ontology": "GENEPIO:0001479", - "type": "string", - "description": "The filepath of the r2 file.", "classification": "Files info", - "label": "Filepath R2", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "fast5_filename": { + "header": "N", + "label": "Filename fast5", + "ontology": "GENEPIO:0001480", + "description": "The user-specified filename of the FAST5 file.", "examples": [ "batch1a_sequences.fast5" ], - "ontology": "GENEPIO:0001480", - "type": "string", - "description": "The user-specified filename of the FAST5 file.", "classification": "Files info", - "label": "Filename fast5", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "fast5_filepath": { + "header": "N", + "label": "Filepath fast5", + "ontology": "GENEPIO:0001481", + "description": "The filepath of the FAST5 file.", "examples": [ "/User/Documents/RespLab/Data/" ], - "ontology": "GENEPIO:0001481", - "type": "string", - "description": "The filepath of the FAST5 file.", "classification": "Files info", - "label": "Filepath fast5", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "bioinformatics_analysis_date": { - "examples": [ - "2022-07-15 00:00:00" - ], + "header": "N", + "label": "processing_date", "ontology": "OBI:0002471", + "description": "The time of a sample analysis process YYYY-MM-DD", + "examples": "2022-07-15 00:00:00", + "classification": "Bioinformatics and QC metrics fields", "type": "string", "format": "date", - "description": "The time of a sample analysis process YYYY-MM-DD.", - "classification": "Bioinformatics and QC metrics fields", - "label": "processing_date", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "dehosting_method_software_name": { + "header": "N", + "label": "Dehosting Method", + "ontology": "GENEPIO:0001459", + "description": "The method used to remove host reads from the pathogen sequence.", "examples": [ "KRAKEN2_KRAKEN2 " ], - "ontology": "GENEPIO:0001459", - "type": "string", - "description": "The method used to remove host reads from the pathogen sequence.", "classification": "Bioinformatic Analysis fields", - "label": "Dehosting Method", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "dehosting_method_software_version": { + "header": "N", + "label": "Dehosting Method Version", + "ontology": "LOINC:LA20883-7", + "description": "The method version used to remove host reads from the pathogen sequence.", "examples": [ "2.4.1" ], - "ontology": "LOINC:LA20883-7", - "type": "string", - "description": "The method version used to remove host reads from the pathogen sequence.", "classification": "Bioinformatic Analysis fields", - "label": "Dehosting Method Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "reference_genome_accession": { + "header": "N", + "label": "Reference genome accession", + "ontology": "GENEPIO:0001485", + "description": "A persistent, unique identifier of a genome database entry.", "examples": [ "NC_045512.2" ], - "ontology": "GENEPIO:0001485", - "type": "string", - "description": "A persistent, unique identifier of a genome database entry.", "classification": "Bioinformatics and QC metrics fields", - "label": "Reference genome accession", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "bioinformatics_protocol_software_name": { + "header": "N", + "label": "Bioinformatics protocol", + "ontology": "GENEPIO:0001489", + "description": "The name of the bioinformatics protocol used.", "examples": [ "https://www.protocols.io/groups/cphln-sarscov2-sequencing-consortium/members" ], - "ontology": "GENEPIO:0001489", - "type": "string", - "description": "The name of the bioinformatics protocol used.", "classification": "Bioinformatic Analysis fields", - "label": "Bioinformatics protocol", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "if_bioinformatic_protocol_is_other_specify": { + "header": "N", + "label": "If bioinformatics protocol Is Other, Specify", + "ontology": "0", + "description": "The name of the bioinformatics protocol used.", "examples": [ "https://www.protocols.io/groups/cphln-sarscov2-sequencing-consortium/members" ], - "ontology": "0", - "type": "string", - "description": "The name of the bioinformatics protocol used.", "classification": "Bioinformatic Analysis fields", - "label": "If bioinformatics protocol Is Other, Specify", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "bioinformatics_protocol_software_version": { + "header": "N", + "label": "Bioinformatics protocol version", + "ontology": "LOINC:LA20883-7", + "description": "The version number of the bioinformatics protocol used.", "examples": [ "https://www.protocols.io/groups/cphln-sarscov2-sequencing-consortium/members" ], - "ontology": "LOINC:LA20883-7", - "type": "string", - "description": "The version number of the bioinformatics protocol used.", "classification": "Bioinformatic Analysis fields", - "label": "Bioinformatics protocol version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "commercial_open_source_both": { - "$ref": "#/$defs/enums/commercial_open_source_both", + "header": "N", + "label": "Commercial/Open-source/both", + "ontology": "0", + "description": "If bioinformatics protocol used was open-source or commercial", "examples": [ "Commercial" ], - "ontology": "0", - "type": "string", - "description": "If bioinformatics protocol used was open-source or commercial.", + "$ref": "#/$defs/enums/commercial_open_source_both", "classification": "Bioinformatic Analysis fields", - "label": "Commercial/Open-source/both", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "preprocessing_software_name": { + "header": "N", + "label": "Preprocessing software", + "ontology": "MS_1002386", + "description": "Software used for preprocessing step.", "examples": [ "fastp" ], - "ontology": "MS_1002386", - "type": "string", - "description": "Software used for preprocessing step.", "classification": "Bioinformatic Analysis fields", - "label": "Preprocessing software", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "preprocessing_software_version": { + "header": "N", + "label": "Preprocessing software version", + "ontology": "LOINC:LA20883-7", + "description": "Version of the preprocessing software used.", "examples": [ "v5.3.1" ], - "ontology": "LOINC:LA20883-7", - "type": "string", - "description": "Version of the preprocessing software used.", "classification": "Bioinformatic Analysis fields", - "label": "Preprocessing software version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "if_preprocessing_other": { + "header": "N", + "label": "If preprocessing Is Other, Specify", + "ontology": "MS_1002386", + "description": "Preprocessing software name other", "examples": [ "Seqtk" ], - "ontology": "MS_1002386", - "type": "string", - "description": "Preprocessing software name other.", "classification": "Bioinformatic Analysis fields", - "label": "If preprocessing Is Other, Specify", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "preprocessing_params": { + "header": "N", + "label": "Preprocessing params", + "ontology": "NCIT:C44175", + "description": "The parameters and settings used to perform preprocessing analysis.", "examples": [ "--cut_mean_quality 30" ], - "ontology": "NCIT:C44175", - "type": "string", - "description": "The parameters and settings used to perform preprocessing analysis.", "classification": "Bioinformatic Analysis fields", - "label": "Preprocessing params", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "mapping_software_name": { + "header": "N", + "label": "Mapping software", + "ontology": "NCIT:C175896", + "description": "Software used for mapping step.", "examples": [ "bowtie2" ], - "ontology": "NCIT:C175896", - "type": "string", - "description": "Software used for mapping step.", "classification": "Bioinformatic Analysis fields", - "label": "Mapping software", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "mapping_software_version": { + "header": "N", + "label": "Mapping software version", + "ontology": "LOINC:LA20883-7", + "description": "Version of the mapper used.", "examples": [ "v7.0.1" ], - "ontology": "LOINC:LA20883-7", - "type": "string", - "description": "Version of the mapper used.", "classification": "Bioinformatic Analysis fields", - "label": "Mapping software version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "if_mapping_other": { + "header": "N", + "label": "If mapping Is Other, Specify", + "ontology": "0", + "description": "Mapping software used other", "examples": [ "Mosaik" ], - "ontology": "0", - "type": "string", - "description": "Mapping software used other.", "classification": "Bioinformatic Analysis fields", - "label": "If mapping Is Other, Specify", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "mapping_params": { + "header": "N", + "label": "Mapping params", + "ontology": "NCIT:C44175", + "description": "Parameters used for mapping step.", "examples": [ "--seed 1" ], - "ontology": "NCIT:C44175", - "type": "string", - "description": "Parameters used for mapping step.", "classification": "Bioinformatic Analysis fields", - "label": "Mapping params", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "assembly": { + "header": "N", + "label": "Assembly software", + "ontology": "GENEPIO:0000090", + "description": "Software used for assembly of the pathogen genome.", "examples": [ "Spades" ], - "ontology": "GENEPIO:0000090", - "type": "string", - "description": "Software used for assembly of the pathogen genome.", "classification": "Bioinformatic Analysis fields", - "label": "Assembly software", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "assembly_version": { + "header": "N", + "label": "Assembly software version", + "ontology": "NCIT:C164455", + "description": "Version of the software used for assembly of the pathogen genome.", "examples": [ "Spades" ], - "ontology": "NCIT:C164455", - "type": "string", - "description": "Version of the software used for assembly of the pathogen genome.", "classification": "Bioinformatic Analysis fields", - "label": "Assembly software version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "if_assembly_other": { + "header": "N", + "label": "If assembly Is Other, Specify", + "ontology": "0", + "description": "Assembly software version", "examples": [ "v3.1" ], - "ontology": "0", - "type": "string", - "description": "Assembly software version.", "classification": "Bioinformatic Analysis fields", - "label": "If assembly Is Other, Specify", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "assembly_params": { + "header": "N", + "label": "Assembly params", + "ontology": "NCIT:C44175", + "description": "The parameters and settings used to perform genome assembly.", "examples": [ "-k 127,56,27" ], - "ontology": "NCIT:C44175", - "type": "string", - "description": "The parameters and settings used to perform genome assembly.", "classification": "Bioinformatic Analysis fields", - "label": "Assembly params", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "bioinfo_metadata_file": { + "header": "N", + "label": "Bioinfo JSON", + "ontology": "CAO:000237", + "description": "Bioinfo JSON with metadata information", "examples": [ "bioinfo_lab_metadata_COD-1111-BU_20250506140633_3C412C.json" ], - "ontology": "CAO:000237", - "type": "string", - "description": "Bioinfo JSON with metadata information.", "classification": "Bioinformatic Analysis fields", - "label": "Bioinfo JSON", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "vcf_filename": { + "header": "N", + "label": "VCF filename", + "ontology": "0", + "description": "Name of the vcf file.", "examples": [ "Ivar" ], - "ontology": "0", - "type": "string", - "description": "Name of the vcf file.", "classification": "Bioinformatic Variants", - "label": "VCF filename", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "variant_calling_software_name": { + "header": "N", + "label": "Variant calling software", + "ontology": "EDAM:operation_3227", + "description": "Software used for variant calling.", "examples": [ "Ivar" ], - "ontology": "EDAM:operation_3227", - "type": "string", - "description": "Software used for variant calling.", "classification": "Bioinformatic Variants", - "label": "Variant calling software", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "variant_calling_software_version": { + "header": "N", + "label": "Variant calling software version", + "ontology": "LOINC:LA20883-7", + "description": "Variant calling software version", "examples": [ "v4.1" ], - "ontology": "LOINC:LA20883-7", - "type": "string", - "description": "Variant calling software version.", "classification": "Bioinformatic Variants", - "label": "Variant calling software version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "if_variant_calling_other": { + "header": "N", + "label": "If variant calling Is Other, Specify", + "ontology": "0", + "description": "Specify if you have used another variant calling software", "examples": [ "GATK HaplotypeCaller" ], - "ontology": "0", - "type": "string", - "description": "Specify if you have used another variant calling software.", "classification": "Bioinformatic Variants", - "label": "If variant calling Is Other, Specify", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "variant_calling_params": { + "header": "N", + "label": "Variant calling params", + "ontology": "NCIT:C44175", + "description": "Params used for variant calling", "examples": [ "-t 0.5 -Q 20" ], - "ontology": "NCIT:C44175", - "type": "string", - "description": "Params used for variant calling.", "classification": "Bioinformatic Variants", - "label": "Variant calling params", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "consensus_sequence_name": { + "header": "N", + "label": "Consensus sequence name", + "ontology": "GENEPIO:0001460", + "description": "The name of the consensus sequence.", "examples": [ "2018086 NC_045512.2" ], - "ontology": "GENEPIO:0001460", - "type": "string", - "description": "The name of the consensus sequence.", "classification": "Bioinformatic Analysis fields", - "label": "Consensus sequence name", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "consensus_sequence_filename": { + "header": "N", + "label": "Consensus sequence filename", + "ontology": "GENEPIO:0001461", + "description": "The name of the consensus sequence filename", "examples": [ "2018102.consensus.fa" ], - "ontology": "GENEPIO:0001461", - "type": "string", - "description": "The name of the consensus sequence filename.", "classification": "Bioinformatic Analysis fields", - "label": "Consensus sequence filename", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "consensus_sequence_md5": { + "header": "N", + "label": "Consensus sequence name md5", + "ontology": "0", + "description": "The md5 of the consensus sequence.", "examples": [ "5gaskañlkdak3143242ñlkas" ], - "ontology": "0", - "type": "string", - "description": "The md5 of the consensus sequence.", "classification": "Bioinformatic Analysis fields", - "label": "Consensus sequence name md5", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "consensus_sequence_filepath": { + "header": "N", + "label": "Consensus sequence filepath", + "ontology": "GENEPIO:0001462", + "description": "The filepath of the consesnsus sequence file.", "examples": [ "/User/Documents/RespLab/Data/ncov123assembly.fasta" ], - "ontology": "GENEPIO:0001462", - "type": "string", - "description": "The filepath of the consesnsus sequence file.", "classification": "Bioinformatic Analysis fields", - "label": "Consensus sequence filepath", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "long_table_path": { + "header": "N", + "label": "Long table path", + "ontology": "0", + "description": "The path where the long table including all variants and annotations is.", "examples": [ "/User/Documents/RespLab/ncov123_longtable.tsv" ], - "ontology": "0", - "type": "string", - "description": "The path where the long table including all variants and annotations is.", "classification": "Bioinformatic Analysis fields", - "label": "Long table path", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "consensus_sequence_software_name": { + "header": "N", + "label": "Consensus software", + "ontology": "GENEPIO:0001463", + "description": "The name of software used to generate the consensus sequence.", "examples": [ "Ivar" ], - "ontology": "GENEPIO:0001463", - "type": "string", - "description": "The name of software used to generate the consensus sequence.", "classification": "Bioinformatic Analysis fields", - "label": "Consensus software", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "if_consensus_other": { + "header": "N", + "label": "If consensus Is Other, Specify", + "ontology": "0", + "description": "Specify if you have used another consensus software", "examples": [ "v1.3" ], - "ontology": "0", - "type": "string", - "description": "Specify if you have used another consensus software.", "classification": "Bioinformatic Analysis fields", - "label": "If consensus Is Other, Specify", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "consensus_sequence_software_version": { + "header": "N", + "label": "Consensus software version", + "ontology": "GENEPIO:0001469", + "description": "The version of the software used to generate the consensus sequence.", "examples": [ "1.3" ], - "ontology": "GENEPIO:0001469", - "type": "string", - "description": "The version of the software used to generate the consensus sequence.", "classification": "Bioinformatic Analysis fields", - "label": "Consensus software version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "consensus_params": { + "header": "N", + "label": "Consensus params", + "ontology": "NCIT:C44175", + "description": "Parameters used for consensus generation", "examples": [ "AF > 0.75" ], - "ontology": "NCIT:C44175", - "type": "string", - "description": "Parameters used for consensus generation.", "classification": "Bioinformatic Analysis fields", - "label": "Consensus params", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "consensus_genome_length": { + "header": "N", + "label": "Consensus genome length", + "ontology": "GENEPIO:0001483", + "description": "Size of the assembled genome described as the number of base pairs.", "examples": [ "38677" ], - "ontology": "GENEPIO:0001483", - "type": "string", - "description": "Size of the assembled genome described as the number of base pairs.", "classification": "Bioinformatics and QC metrics fields", - "label": "Consensus genome length", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "depth_of_coverage_threshold": { + "header": "N", + "label": "Depth of coverage threshold", + "ontology": "GENEPIO:0001475", + "description": "The threshold used as a cut-off for the depth of coverage.", "examples": [ "10x" ], - "ontology": "GENEPIO:0001475", - "type": "string", - "description": "The threshold used as a cut-off for the depth of coverage.", "classification": "Bioinformatics and QC metrics fields", - "label": "Depth of coverage threshold", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "number_of_reads_sequenced": { + "header": "N", + "label": "Number of reads sequenced ", + "ontology": "NCIT:C164667", + "description": "The number of total reads generated by the sequencing process.", "examples": [ - 387566 + "387566" ], - "ontology": "NCIT:C164667", + "classification": "Bioinformatics and QC metrics fields", "type": "integer", "minimum": 0, "maximum": 50000000, - "description": "The number of total reads generated by the sequencing process.", - "classification": "Bioinformatics and QC metrics fields", - "label": "Number of reads sequenced ", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "pass_reads": { + "header": "N", + "label": "Number of reads passing filters", + "ontology": "GENEPIO:0000087", + "description": "Number of reads that pass quality control threshold", "examples": [ 153812 ], - "ontology": "GENEPIO:0000087", + "classification": "Bioinformatics and QC metrics fields", "type": "integer", "minimum": 0, "maximum": 50000000, - "description": "Number of reads that pass quality control threshold.", - "classification": "Bioinformatics and QC metrics fields", - "label": "Number of reads passing filters", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "per_reads_host": { + "header": "N", + "label": "%Reads host", + "ontology": "NCIT:C185251", + "description": "Percentage of reads mapped to host", "examples": [ 0.19 ], - "ontology": "NCIT:C185251", + "classification": "Bioinformatics and QC metrics fields", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of reads mapped to host.", - "classification": "Bioinformatics and QC metrics fields", - "label": "%Reads host", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "per_reads_virus": { + "header": "N", + "label": "%Reads virus", + "ontology": "NCIT:C185251", + "description": "Percentage of reads mapped to virus", "examples": [ 99.69 ], - "ontology": "NCIT:C185251", + "classification": "Bioinformatics and QC metrics fields", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of reads mapped to virus.", - "classification": "Bioinformatics and QC metrics fields", - "label": "%Reads virus", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "per_unmapped": { + "header": "N", + "label": "%Unmapped", + "ontology": "0", + "description": "Percentage of reads unmapped to virus or to host", "examples": [ 0.13 ], - "ontology": "0", + "classification": "Bioinformatics and QC metrics fields", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of reads unmapped to virus or to host.", - "classification": "Bioinformatics and QC metrics fields", - "label": "%Unmapped", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "depth_of_coverage_value": { + "header": "N", + "label": "Depth of coverage Mean value", + "ontology": "GENEPIO:0001474", + "description": "The average number of reads representing each nucleotide in the reconstructed sequence.", "examples": [ 400 ], - "ontology": "GENEPIO:0001474", + "classification": "Bioinformatics and QC metrics fields", "type": "integer", "minimum": 0, "maximum": 1000000, - "description": "The average number of reads representing each nucleotide in the reconstructed sequence.", - "classification": "Bioinformatics and QC metrics fields", - "label": "Depth of coverage Mean value", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "per_genome_greater_10x": { + "header": "N", + "label": "% Genome > 10x", + "ontology": "0", + "description": "Percentage of genome with coverage greater than 10x", "examples": [ 96 ], - "ontology": "0", + "classification": "Bioinformatics and QC metrics fields", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of genome with coverage greater than 10x.", - "classification": "Bioinformatics and QC metrics fields", - "label": "% Genome > 10x", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "per_Ns": { + "header": "N", + "label": "%Ns", + "ontology": "0", + "description": "Percentage of Ns", "examples": [ 3 ], - "ontology": "0", + "classification": "Bioinformatics and QC metrics fields", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of Ns.", - "classification": "Bioinformatics and QC metrics fields", - "label": "%Ns", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "number_of_Ns": { + "header": "N", + "label": "Number of Ns", + "ontology": 0, + "description": "Number of Ns", "examples": [ 2000 ], - "ontology": "0", + "classification": "Bioinformatics and QC metrics fields", "type": "integer", "minimum": 0, "maximum": 100000, - "description": "Number of Ns.", - "classification": "Bioinformatics and QC metrics fields", - "label": "Number of Ns", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "ns_per_100_kbp": { + "header": "N", + "label": "Ns per 100 kbp", + "ontology": "GENEPIO:0001484", + "description": "The number of N symbols present in the consensus fasta sequence, per 100kbp of sequence.", "examples": [ - 300 + "300" ], - "ontology": "GENEPIO:0001484", + "classification": "Bioinformatics and QC metrics fields", "type": "number", "minimum": 0, "maximum": 100000, - "description": "The number of N symbols present in the consensus fasta sequence, per 100kbp of sequence.", - "classification": "Bioinformatics and QC metrics fields", - "label": "Ns per 100 kbp", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "number_of_variants_in_consensus": { + "header": "N", + "label": "Number of variants (AF > 75%)", + "ontology": "NCIT:C181350", + "description": "The number of variants found in consensus sequence", "examples": [ 130 ], - "ontology": "NCIT:C181350", + "classification": "Bioinformatic Variants", "type": "integer", "minimum": 0, "maximum": 10000, - "description": "The number of variants found in consensus sequence.", - "classification": "Bioinformatic Variants", - "label": "Number of variants (AF > 75%)", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "number_of_variants_with_effect": { + "header": "N", + "label": "Number of variants with effect", + "ontology": "NCIT:C181350", + "description": "The number of missense variants", "examples": [ 93 ], - "ontology": "NCIT:C181350", + "classification": "Bioinformatic Variants", "type": "integer", "minimum": 0, "maximum": 10000, - "description": "The number of missense variants.", - "classification": "Bioinformatic Variants", - "label": "Number of variants with effect", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "number_of_sgene_frameshifts": { + "header": "N", + "label": "Number of frameshifts in Sgene", + "ontology": "GENEPIO:0001457", + "description": "Number of frameshifts in Sgene", "examples": [ 0 ], - "ontology": "GENEPIO:0001457", + "classification": "Bioinformatics and QC metrics fields", "type": "integer", "minimum": 0, "maximum": 1000, - "description": "Number of frameshifts in Sgene.", - "classification": "Bioinformatics and QC metrics fields", - "label": "Number of frameshifts in Sgene", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "number_of_unambiguous_bases": { + "header": "N", + "label": "Number of unambiguous bases", + "ontology": "GENEPIO:0001457", + "description": "Number of unambiguous bases", "examples": [ 29000 ], - "ontology": "GENEPIO:0001457", + "classification": "Bioinformatics and QC metrics fields", "type": "integer", "minimum": 0, "maximum": 30000, - "description": "Number of unambiguous bases.", - "classification": "Bioinformatics and QC metrics fields", - "label": "Number of unambiguous bases", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "per_ldmutations": { + "header": "N", + "label": "Percentage of Lineage Defining Mutations", + "ontology": "GENEPIO:0001457", + "description": "Percentage of Lineage Defining Mutations", "examples": [ 98 ], - "ontology": "GENEPIO:0001457", + "classification": "Bioinformatics and QC metrics fields", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of Lineage Defining Mutations.", - "classification": "Bioinformatics and QC metrics fields", - "label": "Percentage of Lineage Defining Mutations", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "per_sgene_ambiguous": { + "header": "N", + "label": "Percentage of sSgene ambiguous bases", + "ontology": "GENEPIO:0001457", + "description": "Percentage of sSgene ambiguous bases", "examples": [ 0 ], - "ontology": "GENEPIO:0001457", + "classification": "Bioinformatics and QC metrics fields", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of sSgene ambiguous bases.", - "classification": "Bioinformatics and QC metrics fields", - "label": "Percentage of sSgene ambiguous bases", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "per_sgene_coverage": { + "header": "N", + "label": "Percentage of Sgene coverage", + "ontology": "GENEPIO:0001457", + "description": "Percentage of Sgene coverage", "examples": [ 99 ], - "ontology": "GENEPIO:0001457", + "classification": "Bioinformatics and QC metrics fields", "type": "number", "minimum": 0, "maximum": 100, - "description": "Percentage of Sgene coverage.", - "classification": "Bioinformatics and QC metrics fields", - "label": "Percentage of Sgene coverage", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "qc_test": { + "header": "N", + "label": "Quality control evaluation", + "ontology": "GENEPIO:0001457", + "description": "Quality control evaluation", "examples": [ "pass" ], - "ontology": "GENEPIO:0001457", - "type": "string", - "description": "Quality control evaluation.", "classification": "Bioinformatics and QC metrics fields", - "label": "Quality control evaluation", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "qc_failed": { + "header": "N", + "label": "Quality control failed fields", + "ontology": 0, + "description": "Quality control failed fields", "examples": [ "(per_sgene_coverage < 98.0)" ], - "ontology": "0", - "type": "string", - "description": "Quality control failed fields.", "classification": "Bioinformatics and QC metrics fields", - "label": "Quality control failed fields", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "schema_name": { + "header": "N", + "label": "Schema Name", + "ontology": 0, + "description": "Name of the JSON Schema", "examples": [ "relecov_schema.json" ], - "ontology": "0", - "type": "string", - "description": "Name of the JSON Schema.", "classification": "Files info", - "label": "Schema Name", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "schema_version": { + "header": "N", + "label": "Schema Version", + "ontology": 0, + "description": "Version of the JSON Schema", "examples": [ "v3.0.0" ], - "ontology": "0", - "type": "string", - "description": "Version of the JSON Schema.", "classification": "Files info", - "label": "Schema Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "variant_name": { + "header": "N", + "label": "Variant Name", + "ontology": "GENEPIO:0001498", + "description": "The variant classification of the lineage i.e. alpha, beta, etc.", "examples": [ "alpha" ], - "ontology": "GENEPIO:0001498", - "type": "string", - "description": "The variant classification of the lineage i.e. alpha, beta, etc.", "classification": "Genomic Typing fields", - "label": "Variant Name", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "variant_designation": { - "$ref": "#/$defs/enums/variant_designation", + "header": "N", + "label": "Variant designation", + "ontology": "GENEPIO:0001503", + "description": "The variant classification of the lineage i.e. variant, variant of concern.", "examples": [ "Variant of Concern (VOC) [GENEPIO:0100083]" ], - "ontology": "GENEPIO:0001503", - "type": "string", - "description": "The variant classification of the lineage i.e. variant, variant of concern.", + "$ref": "#/$defs/enums/variant_designation", "classification": "Genomic Typing fields", - "label": "Variant designation", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "gisaid_submitter_id": { + "header": "N", + "label": "GISAID submitter id", + "ontology": "NCIT:C54269", + "description": "GISAID sequence ID.", "examples": [ "ID9876" ], - "ontology": "NCIT:C54269", - "type": "string", - "description": "GISAID sequence ID.", "classification": "Public databases", - "label": "GISAID submitter id", - "fill_mode": "sample", - "header": "N" + "type": "string", + "fill_mode": "sample" }, "gisaid_covv_type": { + "header": "N", + "label": "GISAID covv type", + "ontology": "NCIT:C25284", + "description": "default must remain 'betacoronavirus'", "examples": [ "betacoronavirus" ], - "ontology": "NCIT:C25284", - "type": "string", - "description": "default must remain 'betacoronavirus'.", "classification": "Public databases", - "label": "GISAID covv type", - "fill_mode": "sample", - "header": "N" + "type": "string", + "fill_mode": "sample" }, "ena_analysis_accession": { + "header": "N", + "label": "Analysis Accession", + "ontology": "GENEPIO:0001145", + "description": "A data field which describes the GenBank/ENA/DDBJ identifier assigned to the sequence in the International Nucleotide Sequence Database Collaboration (INSDC) archives. GenBank = National Genetic Sequence Data Base; ENA = European Nucleotide Archive; DDBJ = DNA DataBank of Japan Example Guidance: Store the accession returned from a GenBank/ENA/DDBJ submission (viral genome assembly).", "examples": [ "ERP123456" ], - "ontology": "GENEPIO:0001145", + "classification": "Public databases", "type": "string", "identifiers_org_prefix": "ena.embl", - "description": "A data field which describes the GenBank/ENA/DDBJ identifier assigned to the sequence in the International Nucleotide Sequence Database Collaboration (INSDC) archives. GenBank = National Genetic Sequence Data Base; ENA = European Nucleotide Archive; DDBJ = DNA DataBank of Japan Example Guidance: Store the accession returned from a GenBank/ENA/DDBJ submission (viral genome assembly).", - "classification": "Public databases", - "label": "Analysis Accession", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "ena_study_accession": { + "header": "N", + "label": "Study accession", + "ontology": "GENEPIO:0001136", + "description": "An identifier data field which describes the International Nucleotide Sequence Database Collaboration (INSDC) accession number of the BioProject(s) to which the BioSample belongs.", "examples": [ "e.g PRJEB39632" ], - "ontology": "GENEPIO:0001136", + "classification": "Public databases", "type": "string", "identifiers_org_prefix": "ena.embl", - "description": "An identifier data field which describes the International Nucleotide Sequence Database Collaboration (INSDC) accession number of the BioProject(s) to which the BioSample belongs.", - "classification": "Public databases", - "label": "Study accession", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "ena_experiment_accession": { + "header": "N", + "label": "Experiment Accession", + "ontology": 0, + "description": "Experiment Accession", "examples": [ "e.g ERX4331406" ], - "ontology": "0", + "classification": "Public databases", "type": "string", "identifiers_org_prefix": "ena.embl", - "description": "Experiment Accession.", - "classification": "Public databases", - "label": "Experiment Accession", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "ena_run_accession": { + "header": "N", + "label": "Run Accession", + "ontology": 0, + "description": "Run Identifier: A sequence of characters used to uniquely identify a particular run of a test on a particular batch of samples.", "examples": [ "e.g ERX4331406" ], - "ontology": "0", + "classification": "Public databases", "type": "string", "identifiers_org_prefix": "ena.embl", - "description": "Run Identifier: A sequence of characters used to uniquely identify a particular run of a test on a particular batch of samples.", - "classification": "Public databases", - "label": "Run Accession", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "ena_submission_accession": { + "header": "N", + "label": "Submission Accession", + "ontology": 0, + "description": "Submission Accession", "examples": [ "e.g ERA2794974" ], - "ontology": "0", + "classification": "Public databases", "type": "string", "identifiers_org_prefix": "ena.embl", - "description": "Submission Accession.", - "classification": "Public databases", - "label": "Submission Accession", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "ena_experiment_title": { + "header": "N", + "label": "Experiment title", + "ontology": "NCIT:C181729", + "description": "Experiment Name: The name assigned to an experiment.", "examples": [ "e.g Illumina MiSeq paired end sequencing" ], - "ontology": "NCIT:C181729", - "type": "string", - "description": "Experiment Name: The name assigned to an experiment.", "classification": "Public databases", - "label": "Experiment title", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "study_title": { + "header": "N", + "label": "Study title", + "ontology": "OPMI_0000380", + "description": "Title of study", "examples": [ "e.g SARS-CoV-2 genomes from late April in Stockholm" ], - "ontology": "OPMI_0000380", - "type": "string", - "description": "Title of study.", "classification": "Public databases", - "label": "Study title", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "ena_study_alias": { + "header": "N", + "label": "Study alias", + "ontology": "SIO_001066", + "description": "A study is a process that realizes the steps of a study design.", "examples": [ "e.g Sweden" ], - "ontology": "SIO_001066", - "type": "string", - "description": "A study is a process that realizes the steps of a study design.", "classification": "Public databases", - "label": "Study alias", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "broker_name": { + "header": "N", + "label": "Broker Name", + "ontology": 0, + "description": "Broker name", "examples": [ "P17157_1007" ], - "ontology": "0", - "type": "string", - "description": "Broker name.", "classification": "Public databases", - "label": "Broker Name", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "ena_first_created_date": { + "header": "N", + "label": "First created date", + "ontology": "NCIT:C164483", + "description": "The date on which the activity or entity is created.", "examples": [ "e.g 2020-08-07" ], - "ontology": "NCIT:C164483", + "classification": "Public databases", "type": "string", "format": "date", - "description": "The date on which the activity or entity is created.", - "classification": "Public databases", - "label": "First created date", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "host_health_state": { + "header": "N", + "label": "Host health state", + "ontology": "GENEPIO:0001388", + "description": "Status of the host", "examples": [ "Asymptomatic" ], - "ontology": "GENEPIO:0001388", - "type": "string", - "description": "Status of the host.", "classification": "Public databases", - "label": "Host health state", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "ena_sample_description": { + "header": "N", + "label": "Sample Description", + "ontology": "sep:00196", + "description": "Free text description of the sample.", "examples": [ "Sample from Belgian Covid-19 patient. Sample was obtained at the Hospital AZ Rivierenland, in Antwerp, Belgium." ], - "ontology": "sep:00196", - "type": "string", - "description": "Free text description of the sample.", "classification": "Public databases", - "label": "Sample Description", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "file_format": { - "$ref": "#/$defs/enums/file_format", + "header": "N", + "label": "File format", + "ontology": "MS:1001459", + "description": "The run data file model.", "examples": [ "BAM,CRAM,FASTQ" ], - "ontology": "MS:1001459", - "type": "string", - "description": "The run data file model.", + "$ref": "#/$defs/enums/file_format", "classification": "Files info", - "label": "File format", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "collector_name": { + "header": "N", + "label": "Sample collector name", + "ontology": "GENEPIO:0001797", + "description": "Name of the person who collected the specimen", "examples": [ "John Smith, unknown" ], - "ontology": "GENEPIO:0001797", - "type": "string", - "description": "Name of the person who collected the specimen.", "classification": "Sample collection and processing", - "label": "Sample collector name", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "experiment_alias": { + "header": "N", + "label": "Experiment alias", + "ontology": "NCIT:C42790", + "description": "A coordinated set of actions and observations designed to generate data, with the ultimate goal of discovery or hypothesis testing.", "examples": [ "experiment_alias_7a" ], - "ontology": "NCIT:C42790", - "type": "string", - "description": "A coordinated set of actions and observations designed to generate data, with the ultimate goal of discovery or hypothesis testing.", "classification": "Sample collection and processing", - "label": "Experiment alias", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "run_alias": { + "header": "N", + "label": "Run Alias", + "ontology": "NCIT:C117058", + "description": "A sequence of characters used to uniquely identify a particular run of a test on a particular batch of samples.", "examples": [ "e.g ena-EXPERIMENT-KAROLINSKA INSITUTET-29-07-2020-14:50:07:151-1" ], - "ontology": "NCIT:C117058", - "type": "string", - "description": "A sequence of characters used to uniquely identify a particular run of a test on a particular batch of samples.", "classification": "Sequencing", - "label": "Run Alias", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "clade_assignment": { + "header": "N", + "label": "Clade Assignment", + "ontology": "NCIT:C179767", + "description": "An indication of the taxonomic clade grouping of organisms.", "examples": [ "B.1.1.7" ], - "ontology": "NCIT:C179767", - "type": "string", - "description": "An indication of the taxonomic clade grouping of organisms.", "classification": "Genomic Typing fields", - "label": "Clade Assignment", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "clade_assignment_software_name": { + "header": "N", + "label": "Clade Assignment Software Name", + "ontology": "GENEPIO:0001501", + "description": "The name of the software used to determine the clade.", "examples": [ "Nextclade" ], - "ontology": "GENEPIO:0001501", - "type": "string", - "description": "The name of the software used to determine the clade.", "classification": "Genomic Typing fields", - "label": "Clade Assignment Software Name", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "if_clade_assignment_other": { + "header": "N", + "label": "Other Clade Assignment Software", + "ontology": "0", + "description": "Other software used to determine clade.", "examples": [ "Custom Pipeline" ], - "ontology": "0", - "type": "string", - "description": "Other software used to determine clade.", "classification": "Genomic Typing fields", - "label": "Other Clade Assignment Software", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "clade_assignment_software_version": { + "header": "N", + "label": "Clade Assignment Software Version", + "ontology": "GENEPIO:0001502", + "description": "The version of the software used to determine the clade.", "examples": [ "3.1.2" ], - "ontology": "GENEPIO:0001502", - "type": "string", - "description": "The version of the software used to determine the clade.", "classification": "Genomic Typing fields", - "label": "Clade Assignment Software Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "clade_assignment_software_database_version": { + "header": "N", + "label": "Clade Assignment Software Database Version", + "ontology": "MS:1001016", + "description": "Version of the search database to determine the clade.", "examples": [ "1.2.1" ], - "ontology": "MS:1001016", - "type": "string", - "description": "Version of the search database to determine the clade.", "classification": "Genomic Typing fields", - "label": "Clade Assignment Software Database Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "clade_assignment_date": { + "header": "N", + "label": "Clade Assignment Date", + "ontology": "LOINC:40783184", + "description": "Date when the clade analysis was performed via Nextclade", "examples": [ - "20241204" + 20241204 ], - "ontology": "LOINC:40783184", + "classification": "Genomic Typing fields", "type": "string", "format": "date", - "description": "Date when the clade analysis was performed via Nextclade.", - "classification": "Genomic Typing fields", - "label": "Clade Assignment Date", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "lineage_assignment": { + "header": "N", + "label": "Lineage Assignment", + "ontology": "NCIT:C179767", + "description": "An indication of the taxonomic lineage grouping of organisms.", "examples": [ "KP.3.1.1" ], - "ontology": "NCIT:C179767", - "type": "string", - "description": "An indication of the taxonomic lineage grouping of organisms.", "classification": "Genomic Typing fields", - "label": "Lineage Assignment", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "lineage_assignment_software_name": { + "header": "N", + "label": "Lineage Assignment Software Name", + "ontology": "GENEPIO:0001501", + "description": "The name of the software used to determine the lineage.", "examples": [ "Pangolin" ], - "ontology": "GENEPIO:0001501", - "type": "string", - "description": "The name of the software used to determine the lineage.", "classification": "Genomic Typing fields", - "label": "Lineage Assignment Software Name", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "if_lineage_assignment_other": { + "header": "N", + "label": "Other Lineage Assignment Software", + "ontology": "0", + "description": "Other software used to determine lineage.", "examples": [ "Custom Pipeline" ], - "ontology": "0", - "type": "string", - "description": "Other software used to determine lineage.", "classification": "Genomic Typing fields", - "label": "Other Lineage Assignment Software", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "lineage_assignment_software_version": { + "header": "N", + "label": "Lineage Assignment Software Version", + "ontology": "GENEPIO:0001502", + "description": "The version of the software used to determine the lineage.", "examples": [ "2.2.1" ], - "ontology": "GENEPIO:0001502", - "type": "string", - "description": "The version of the software used to determine the lineage.", "classification": "Genomic Typing fields", - "label": "Lineage Assignment Software Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "lineage_algorithm_software_version": { + "header": "N", + "label": "Lineage Algorithm Software Version", + "ontology": 0, + "description": "Version of the algorithm used by the lineage assignment software", "examples": [ "PUSHER-v1.28" ], - "ontology": "0", - "type": "string", - "description": "Version of the algorithm used by the lineage assignment software.", "classification": "Genomic Typing fields", - "label": "Lineage Algorithm Software Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "lineage_assignment_scorpio_version": { + "header": "N", + "label": "Lineage Assignment Scorpio Version", + "ontology": "NCIT:C111093", + "description": "The version of the scorpio data used to determine the lineage.", "examples": [ "1.1.3" ], - "ontology": "NCIT:C111093", - "type": "string", - "description": "The version of the scorpio data used to determine the lineage.", "classification": "Genomic Typing fields", - "label": "Lineage Assignment Scorpio Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "lineage_assignment_constellation_version": { + "header": "N", + "label": "Lineage Assignment Constellation Version", + "ontology": "NCIT:C111093", + "description": "The version of the constellations databases used to determine the lineage.", "examples": [ "3.1.1" ], - "ontology": "NCIT:C111093", - "type": "string", - "description": "The version of the constellations databases used to determine the lineage.", "classification": "Genomic Typing fields", - "label": "Lineage Assignment Constellation Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "lineage_assignment_date": { + "header": "N", + "label": "Lineage Assignment Date", + "ontology": "LOINC:40783184", + "description": "Date when the lineage analysis was performed", "examples": [ - "20241204" + 20241204 ], - "ontology": "LOINC:40783184", + "classification": "Genomic Typing fields", "type": "string", "format": "date", - "description": "Date when the lineage analysis was performed.", - "classification": "Genomic Typing fields", - "label": "Lineage Assignment Date", - "fill_mode": "batch", - "header": "N" + "fill_mode": "batch" }, "lineage_assignment_file": { + "header": "N", + "label": "Lineage Assignment File", + "ontology": "0", + "description": "File containing results from lineage analysis", "examples": [ "lineage_analysis_results.csv" ], - "ontology": "0", - "type": "string", - "description": "File containing results from lineage analysis.", "classification": "Genomic Typing fields", - "label": "Lineage Assignment File", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "lineage_assignment_database_version": { + "header": "N", + "label": "Pangolin Database Version", + "ontology": 0, + "description": "Version of the lineage assignment database", "examples": [ "2.26.0" ], - "ontology": "0", - "type": "string", - "description": "Version of the lineage assignment database.", "classification": "Genomic Typing fields", - "label": "Pangolin Database Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "type_assignment": { + "header": "N", + "label": "Type Assignment", + "ontology": "NCIT:C179767", + "description": "An indication of the taxonomic grouping of organisms.", "examples": [ "RSV-A" ], - "ontology": "NCIT:C179767", - "type": "string", - "description": "An indication of the taxonomic grouping of organisms.", "classification": "Genomic Typing fields", - "label": "Type Assignment", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "type_assignment_software_name": { + "header": "N", + "label": "Type Assignment Software Name", + "ontology": "GENEPIO:0001501", + "description": "The name of the software used to determine the type.", "examples": [ "Nextclade" ], - "ontology": "GENEPIO:0001501", - "type": "string", - "description": "The name of the software used to determine the type.", "classification": "Genomic Typing fields", - "label": "Type Assignment Software Name", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "if_type_assignment_software_other": { + "header": "N", + "label": "Other Type Assignment Software", + "ontology": "0", + "description": "Other software iused to determine Type.", "examples": [ "Manual curation" ], - "ontology": "0", - "type": "string", - "description": "Other software iused to determine Type.", "classification": "Genomic Typing fields", - "label": "Other Type Assignment Software", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "type_assignment_software_version": { + "header": "N", + "label": "Type Assignment Software Version", + "ontology": "GENEPIO:0001502", + "description": "The version of the software used to determine thetype.", "examples": [ "2.0.1" ], - "ontology": "GENEPIO:0001502", - "type": "string", - "description": "The version of the software used to determine thetype.", "classification": "Genomic Typing fields", - "label": "Type Assignment Software Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "type_assignment_software_database_version": { + "header": "N", + "label": "Type Assignment Software Database Version", + "ontology": "MS:1001016", + "description": "Version of the search database.", "examples": [ "1.5.2" ], - "ontology": "MS:1001016", - "type": "string", - "description": "Version of the search database.", "classification": "Genomic Typing fields", - "label": "Type Assignment Software Database Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "subtype_assignment": { + "header": "N", + "label": "Subtype Assignment", + "ontology": "NCIT:C179767", + "description": "An indication of the taxonomic grouping of organisms.", "examples": [ "H1N1" ], - "ontology": "NCIT:C179767", - "type": "string", - "description": "An indication of the taxonomic grouping of organisms.", "classification": "Genomic Typing fields", - "label": "Subtype Assignment", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "subtype_assignment_software_name": { + "header": "N", + "label": "Subtype Assignment Software Name", + "ontology": "GENEPIO:0001501", + "description": "The name of the software used to determine the subtype.", "examples": [ "Nextclade" ], - "ontology": "GENEPIO:0001501", - "type": "string", - "description": "The name of the software used to determine the subtype.", "classification": "Genomic Typing fields", - "label": "Subtype Assignment Software Name", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "if_subtype_assignment_software_other": { - "examples": [ - "Custom Pipeline" - ], + "header": "N", + "label": "Other Subtype Assignment Software", "ontology": "0", - "type": "string", "description": "Other software used to determine Subtype.", + "examples": [ + "Custom Pipeline" + ], "classification": "Genomic Typing fields", - "label": "Other Subtype Assignment Software", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "subtype_assignment_software_version": { + "header": "N", + "label": "Subtype Assignment Software Version", + "ontology": "GENEPIO:0001502", + "description": "The version of the software used to determine the subtype.", "examples": [ "3.2.2" ], - "ontology": "GENEPIO:0001502", - "type": "string", - "description": "The version of the software used to determine the subtype.", "classification": "Genomic Typing fields", - "label": "Subtype Assignment Software Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" }, "subtype_assignment_software_database_version": { + "header": "N", + "label": "Subtype Assignment Software Database Version", + "ontology": "MS:1001016", + "description": "Version of the search database.", "examples": [ "3.1.3" ], - "ontology": "MS:1001016", - "type": "string", - "description": "Version of the search database.", "classification": "Genomic Typing fields", - "label": "Subtype Assignment Software Database Version", - "fill_mode": "batch", - "header": "N" + "type": "string", + "fill_mode": "batch" } }, "required": [ - "organism", - "collecting_lab_sample_id", - "isolate_sample_id", - "sequencing_sample_id", - "collecting_institution", - "submitting_institution", - "sample_collection_date", - "host_common_name", - "enrichment_panel", "enrichment_panel_version", - "sequencing_instrument_model", - "library_source", - "library_strategy", - "library_layout", "sequence_file_R1", - "collecting_institution_code_1", + "sequencing_sample_id", + "library_layout", + "library_source", + "sequencing_instrument_model", "collecting_institution_code_2", - "geo_loc_country", + "isolate_sample_id", + "organism", + "collecting_institution_code_1", + "host_common_name", + "submitting_institution", + "collecting_lab_sample_id", + "collecting_institution", "geo_loc_state", + "geo_loc_country", + "library_strategy", + "enrichment_panel", + "sequencing_instrument_platform", "geo_loc_state_cod", - "host_scientific_name", - "sequencing_instrument_platform" + "sample_collection_date", + "host_scientific_name" ], "$defs": { "enums": { @@ -2611,936 +2609,896 @@ }, "collecting_institution": { "enum": [ - "Instituto de Salud Carlos III", - "Red De Salud Mental De Araba (Hospital Psiquiátrico De Araba)", - "Hospital San José", - "Hospital Quirónsalud Vitoria", - "Hospital De Cuidados San Onofre, S.L. (Hospital De Cuidados San Onofre)", - "Hospital De Leza", - "Hospital Universitario De Araba (Sede Txagorritxu Y Sede Santiago)", - "Complejo Hospitalario Universitario De Albacete", - "Hospital General Universitario De Albacete", - "Clínica Santa Cristina Albacete", - "Hospital De Hellín", - "Quironsalud Hospital Albacete", - "Hospital Universitario Nuestra Señora Del Perpetuo Socorro", - "Hospital General De Almansa", - "Hospital General De Villarobledo", - "Centro De Atención A La Salud Mental La Milagrosa", - "Hospital General Universitario De Alicante", - "Clínica Vistahermosa Grupo Hla", - "Vithas Hospital Perpetuo Internacional", - "Hospital Virgen De Los Lirios", - "Sanatorio San Jorge S.L.", - "Hospital Clínica Benidorm", - "Hospital San Carlos De Denia Grupo Hla", - "Hospital General Universitario De Elche", - "Hospital General Universitario De Elda-Virgen De La Salud", - "Hospital Sant Vicent Del Raspeig", - "Sanatorio San Francisco De Borja Fontilles", - "Hospital Marina Baixa De La Vila Joiosa", - "Hospital Vega Baja De Orihuela", - "Hospital Internacional Medimar, S.A.", - "Hospital Psiquiátrico Penitenciario De Fontcalent", - "Hospital Universitario San Juan De Alicante", - "Centro Médico Acuario", - "Hospìtal Quironsalud Torrevieja", - "Hospital Imed Levante", - "Hospital Universitario De Torrevieja", - "Hospital De Denia", - "Hospital La Pedrera", - "Centro De Rehabilitación Neurológica Casaverde", + "Adinfa, Sociedad Cooperativa Andaluza", + "Alm Univass S.L.", + "Antic Hospital De Sant Jaume I Santa Magdalena", + "Aptima Centre Clinic - Mutua De Terrassa", + "Area Psiquiatrica San Juan De Dios", + "Avances Medicos S.A.", + "Avantmedic", + "Banc de Sang i Teixits Catalunya", + "Benito Menni Complex Assistencial En Salut Mental", + "Benito Menni, Complex Assistencial En Salut Mental", + "Cap La Salut", + "Cap Mataro Centre", + "Cap Montmelo", + "Cap Montornes", + "Casal De Curacio", + "Casaverde Centro De Rehabilitacion Neurologico De Extremadura S.L.", + "Casta Guadarrama", + "Castell D'Oliana Residencial,S.L", + "Catlab-Centre Analitiques Terrassa, Aie", + "Centre Collserola Mutual", + "Centre D'Hospitalitzacio I Hospital De Dia Trastorns De La Conducta", + "Centre D'Oftalmologia Barraquer", + "Centre De Prevencio I Rehabilitacio Asepeyo", + "Centre De Salut Doctor Vilaseca-Can Mariner", + "Centre Forum", + "Centre Geriatric Del Maresme", + "Centre Hospitalari Policlinica Barcelona", + "Centre Integral De Serveis En Salut Mental Comunitaria", + "Centre La Creueta", + "Centre Medic Molins, Sl", + "Centre Mq Reus", + "Centre Palamos Gent Gran", + "Centre Polivalent Can Fosc", + "Centre Sanitari Del Solsones, Fpc", + "Centre Social I Sanitari Frederica Montseny", + "Centre Sociosanitari Bernat Jaume", + "Centre Sociosanitari Blauclinic Dolors Aleu", + "Centre Sociosanitari Can Torras", + "Centre Sociosanitari Ciutat De Reus", + "Centre Sociosanitari D'Esplugues", + "Centre Sociosanitari De L'Hospitalet - Consorci Sanitari Integral", + "Centre Sociosanitari De Puigcerda", + "Centre Sociosanitari Del Centre Integral De Salut Cotxeres", + "Centre Sociosanitari El Carme", + "Centre Sociosanitari I Residencia Assistida Salou", + "Centre Sociosanitari Isabel Roig", + "Centre Sociosanitari Llevant", + "Centre Sociosanitari Parc Hospitalari Marti I Julia", + "Centre Sociosanitari Ricard Fortuny", + "Centre Sociosanitari Sant Jordi De La Vall D'Hebron", + "Centre Sociosanitari Sarquavitae Sant Jordi", + "Centre Sociosanitari Verge Del Puig", + "Centres Assistencials Dr. Emili Mira I Lopez (Recinte Torribera).", + "Centro Asistencial Albelda De Iregua", + "Centro Asistencial Hnas. Hospitalarias Del Sagrado Corazon De Jesus", + "Centro Asistencial San Juan De Dios", + "Centro De Atencion A La Salud Mental, La Milagrosa", + "Centro De Rehabilitacion Neurologica Casaverde", + "Centro De Rehabilitacion Psicosocial Nuestra Señora Del Pilar", + "Centro De Rehabilitacion Psicosocial San Juan De Dios", + "Centro De Rehabilitacion Psicosocial Santo Cristo De Los Milagros", + "Centro De Tratamiento De Drogodependientes El Alba", + "Centro De Tratamiento Integral Montevil", + "Centro Habilitado Ernest Lluch", + "Centro Hospitalario Benito Menni", + "Centro Hospitalario De Alta Resolucion De Cazorla", + "Centro Hospitalario Padre Menni", + "Centro Medico De Asturias", + "Centro Medico El Carmen", + "Centro Medico Pintado", + "Centro Medico Teknon, Grupo Quironsalud", "Centro Militar de Veterinaria de la Defensa", - "Gerencia de Salud de Area de Soria", - "Hospital Universitario Vinalopo", - "Hospital Imed Elche", - "Hospital Torrecárdenas", - "Hospital De La Cruz Roja", - "Hospital Virgen Del Mar", - "Hospital La Inmaculada", - "Hospital Universitario Torrecárdenas", - "Hospital Mediterráneo", - "Hospital De Poniente", - "Hospital De Alta Resolución El Toyo", - "Hospital Nuestra Señora De Sonsoles", - "Hospital Provincial De Ávila", - "Clínica Santa Teresa", - "Complejo Asistencial De Avila", - "Hospital De Salud Mental Casta Salud Arévalo", - "Complejo Hospitalario Universitario De Badajoz", - "Hospital Universitario De Badajoz", - "Hospital Materno Infantil", - "Hospital Fundación San Juan De Dios De Extremadura", - "Hospital Don Benito-Villanueva De La Serena", - "Hospital General De Llerena", - "Hospital De Mérida", - "Centro Sociosanitario De Mérida", - "Hospital Quirónsalud Santa Justa", - "Hospital Quironsalud Clideba", - "Hospital Parque Via De La Plata", - "Hospital De Zafra", - "Complejo Hospitalario Llerena-Zafra", - "Hospital Perpetuo Socorro", - "Hospital Siberia-Serena", - "Hospital Tierra De Barros", - "Complejo H. Don Benito-Vva De La Serena", - "Complejo Hospitalario Del Área De Salud De Mérida", - "Casaverde. Centro De Rehabilitación Neurológico De Extremadura", - "Clínica Extremeña De Salud", - "Hospital Parque Vegas Altas", - "Hospital General De Mallorca", - "Hospital Psiquiàtric", - "Clínica Mutua Balear", - "Hospital De La Cruz Roja Española", - "Hospital Sant Joan De Deu", - "Clínica Rotger", + "Centro Neuropsiquiatrico Nuestra Señora Del Carmen", + "Centro Oncoloxico De Galicia", + "Centro Residencial Domusvi La Salut Josep Servat.", + "Centro Salud Mental Perez Espinosa", + "Centro San Francisco Javier", + "Centro San Juan De Dios Ciempozuelos", + "Centro Sanitario Bajo Cinca-Baix Cinca", + "Centro Sanitario Cinco Villas", + "Centro Sanitario Residencial Las Palmas (Cesar Las Palmas)", + "Centro Sociosanitario De Convalecencia Nuestra Señora Virgen Del Carmen", + "Centro Sociosanitario De Convalencencia Los Jazmines", + "Centro Sociosanitario De Merida", + "Centro Sociosanitario De Plasencia", + "Centro Terapeutico Vista Alegre", + "Centro de Investigación Biomédica de Aragón", + "Clinica Activa Mutua 2008", + "Clinica Arcangel San Miguel - Pamplona", + "Clinica Asturias", + "Clinica Bandama", + "Clinica Bofill", + "Clinica Cajal", + "Clinica Cemtro", + "Clinica Corachan", + "Clinica Coroleu - Ssr Hestia.", + "Clinica Creu Blanca", + "Clinica Cristo Rey", + "Clinica De Salud Mental Miguel De Mañara", + "Clinica Diagonal", + "Clinica Doctor Sanz Vazquez", + "Clinica Dr. Leon", + "Clinica El Seranil", + "Clinica Ercilla Mutualia", + "Clinica Galatea", + "Clinica Girona", + "Clinica Guimon, S.A.", + "Clinica Imq Zorrotzaurre", + "Clinica Imske", + "Clinica Indautxu, S.A.", + "Clinica Isadora S.A.", + "Clinica Jorgani", "Clinica Juaneda", - "Policlínica Miramar", - "Hospital Joan March", - "Hospital Can Misses", - "Hospital Residencia Asistida Cas Serres", - "Policlínica Nuestra Señora Del Rosario, S.A.", - "Clínica Juaneda Menorca", - "Hospital General De Muro", "Clinica Juaneda Mahon", - "Hospital Manacor", - "Hospital Son Llatzer", - "Hospital Quirónsalud Palmaplanas", - "Hospital De Formentera", - "Hospital Comarcal D'Inca", - "Hospital Mateu Orfila", - "Hospital Universitari Son Espases", - "Servicio de Microbiologia HU Son Espases", - "Hospital De Llevant", - "Hospital Clinic Balear", - "Clínica Luz De Palma", - "Hospital Clínic De Barcelona, Seu Sabino De Arana", - "Hospital Del Mar", - "Hospital De L'Esperança", - "Hospital Clínic De Barcelona", - "Hospital Fremap Barcelona", - "Centre De Prevenció I Rehabilitació Asepeyo", - "Clínica Mc Copèrnic", - "Clínica Mc Londres", - "Hospital Egarsat Sant Honorat", - "Hospital Dos De Maig", - "Hospital El Pilar", - "Hospital Sant Rafael", - "Clínica Nostra Senyora Del Remei", - "Clínica Sagrada Família", - "Hospital Mare De Déu De La Mercè", - "Clínica Solarium", - "Hospital De La Santa Creu I Sant Pau", - "Nou Hospital Evangèlic", - "Hospital De Nens De Barcelona", - "Institut Guttmann", - "Fundació Puigvert - Iuna", + "Clinica Juaneda Menorca", + "Clinica La Luz, S.L.", + "Clinica Lluria", + "Clinica Lopez Ibor", + "Clinica Los Alamos", + "Clinica Los Manzanos", + "Clinica Los Naranjos", + "Clinica Luz De Palma", + "Clinica Mc Copernic", + "Clinica Mc Londres", + "Clinica Mi Nova Aliança", + "Clinica Montpellier, Grupo Hla, S.A.U", + "Clinica Nostra Senyora De Guadalupe", + "Clinica Nostra Senyora Del Remei", + "Clinica Nuestra Se?Ora De Aranzazu", + "Clinica Nuestra Señora De La Paz", + "Clinica Perpetuo Socorro De Lerida, Grupo Hla, Slu", + "Clinica Planas", + "Clinica Ponferrada Recoletas", + "Clinica Psicogeriatrica Josefina Arregui", + "Clinica Psiquiatrica Bellavista", + "Clinica Psiquiatrica Padre Menni", + "Clinica Psiquiatrica Somio", + "Clinica Quirurgica Onyar", + "Clinica Residencia El Pinar", + "Clinica Rotger", + "Clinica Sagrada Familia", + "Clinica Salus Infirmorum", + "Clinica San Felipe", + "Clinica San Miguel", + "Clinica San Rafael", + "Clinica Sant Antoni", + "Clinica Sant Josep", + "Clinica Santa Creu", + "Clinica Santa Isabel", + "Clinica Santa Maria De La Asuncion (Inviza S. A.)", + "Clinica Santa Teresa", + "Clinica Soquimex", + "Clinica Tara", + "Clinica Terres De L'Ebre", + "Clinica Tres Torres", + "Clinica Universidad De Navarra", + "Clinica Virgen Blanca", + "Clinica Vistahermosa Grupo Hla", + "Clinicas Del Sur Slu", + "Complejo Asistencial Benito Menni", + "Complejo Asistencial De Soria", + "Complejo Asistencial De Zamora", + "Complejo Asistencial De Ávila", + "Complejo Asistencial Universitario De Burgos", + "Complejo Asistencial Universitario De León", + "Complejo Asistencial Universitario De Palencia", + "Complejo Asistencial Universitario De Salamanca", + "Complejo Hospital Costa Del Sol", + "Complejo Hospital Infanta Margarita", + "Complejo Hospital La Merced", + "Complejo Hospital San Juan De La Cruz", + "Complejo Hospital Universitario Clínico San Cecilio", + "Complejo Hospital Universitario De Jaén", + "Complejo Hospital Universitario De Puerto Real", + "Complejo Hospital Universitario Juan Ramón Jiménez", + "Complejo Hospital Universitario Puerta Del Mar", + "Complejo Hospital Universitario Regional De Málaga", + "Complejo Hospital Universitario Reina Sofía", + "Complejo Hospital Universitario Torrecárdenas", + "Complejo Hospital Universitario Virgen De La Victoria", + "Complejo Hospital Universitario Virgen De Las Nieves", + "Complejo Hospital Universitario Virgen De Valme", + "Complejo Hospital Universitario Virgen Del Rocío", + "Complejo Hospital Universitario Virgen Macarena", + "Complejo Hospital Valle De Los Pedroches", + "Complejo Hospitalario De Albacete", + "Complejo Hospitalario De Cartagena Chc", + "Complejo Hospitalario De Cáceres", + "Complejo Hospitalario De Don Benito-Villanueva De La Serena", + "Complejo Hospitalario De Toledo", + "Complejo Hospitalario Del Área De Salud De Mérida", + "Complejo Hospitalario Gregorio Marañón", + "Complejo Hospitalario Infanta Leonor", + "Complejo Hospitalario La Paz", + "Complejo Hospitalario Llerena-Zafra", + "Complejo Hospitalario San Pedro Hospital De La Rioja", + "Complejo Hospitalario Universitario De Badajoz", + "Complejo Hospitalario Universitario De Canarias", + "Complejo Hospitalario Universitario De Gran Canaria Dr. Negrín", + "Complejo Hospitalario Universitario Insular Materno Infantil", + "Complejo Hospitalario Universitario Nuestra Señora De Candelaria", + "Complejo Instituto Psiquiátrico Servicios De Salud Mental José Germain", + "Complexo Hospitalario Universitario A Coruña", + "Complexo Hospitalario Universitario De Ferrol", + "Complexo Hospitalario Universitario De Lugo", + "Complexo Hospitalario Universitario De Ourense", + "Complexo Hospitalario Universitario De Pontevedra", + "Complexo Hospitalario Universitario De Santiago", + "Complexo Hospitalario Universitario De Vigo", + "Comunitat Terapeutica Arenys De Munt", + "Concheiro Centro Medico Quirurgico", + "Consejería de Sanidad", + "Consorcio Hospital General Universitario De Valencia", + "Consorcio Hospitalario Provincial De Castellon", + "Consorcio LUCIA (SACYL,ITACYL UBU,UVa)", + "Cqm Clinic Maresme, Sl", + "Cti De La Corredoria", + "Eatica", + "Espitau Val D'Aran", + "Fraternidad Muprespa, Mutua Colaboradora Con La Seguridad Social Nº 275", + "Fremap Hospital Majadahonda", + "Fremap, Hospital De Barcelona", + "Fremap, Hospital De Vigo", + "Fremap_Hospital Y Centro De Rehabilitacion De Sevilla", + "Fundacio Hospital De L'Esperit Sant", + "Fundacio Hospital Sant Joan De Deu (Martorell)", + "Fundacio Puigvert - Iuna", + "Fundacio Sanitaria Sant Josep", + "Fundacio Sant Hospital.", + "Fundacion Cudeca. Centro De Cuidados Paliativos", + "Fundacion Hospital De Aviles", + "Fundacion Instituto San Jose", + "Fundacion Instituto Valenciano De Oncologia", + "Fundacion Sanatorio Adaro", + "Fundació Althaia-Manresa", + "Fundació Fisabio", + "Gerencia de Atención Primaria Pontevedra Sur", + "Gerencia de Salud de Area de Soria", + "Germanes Hospitalaries. Hospital Sagrat Cor", + "Grupo Quironsalud Pontevedra", + "Hc Marbella International Hospital", + "Helicopteros Sanitarios Hospital", + "Hestia Balaguer.", + "Hestia Duran I Reynals", + "Hestia Gracia", + "Hestia La Robleda", "Hestia Palau.", - "Hospital Universitari Sagrat Cor", - "Clínica Corachan", - "Clínica Tres Torres", - "Hospital Quirónsalud Barcelona", - "Centre Mèdic Delfos", - "Centre Mèdic Sant Jordi De Sant Andreu", - "Hospital Plató", - "Hospital Universitari Quirón Dexeus", - "Centro Médico Teknon, Grupo Quironsalud", - "Hospital De Barcelona", - "Centre Hospitalari Policlínica Barcelona", - "Centre D'Oftalmologia Barraquer", - "Hestia Duran I Reynals", - "Serveis Clínics, S.A.", - "Clínica Coroleu - Ssr Hestia.", - "Clínica Planas", - "Hospital Universitari Germans Trias I Pujol De Badalona", - "Hospital Municipal De Badalona", - "Centre Sociosanitari El Carme", - "Hospital Comarcal De Sant Bernabé", - "Hospital Comarcal Sant Jaume De Calella", - "Hospital De Sant Joan De Déu.", - "Clínica Nostra Senyora De Guadalupe", - "Hospital General De Granollers.", - "Hospital Universitari De Bellvitge", - "Hospital General De L'Hospitalet", - "Lab Clínic ICS Camp de Tarragona-Terres de l'Ebre. Hospital Joan XXIII", - "LABORATORI DE REFERENCIA DE CATALUNYA", - "Banc de Sang i Teixits Catalunya", - "Laboratorio Echevarne, SA Sant Cugat del Vallès", - "Fundació Sanitària Sant Josep", - "Hospital De Sant Jaume", - "Clínica Sant Josep", - "Centre Hospitalari.", - "Fundació Althaia-Manresa", - "Hospital De Sant Joan De Déu (Manresa)", - "Hospital De Sant Andreu", - "Germanes Hospitalàries. Hospital Sagrat Cor", - "Fundació Hospital Sant Joan De Déu", - "Centre Mèdic Molins, Sl", - "Hospital De Mollet", - "Hospital De Sabadell", - "Benito Menni,Complex Assistencial En Salut Mental.", - "Parc Sanitari Sant Joan De Déu - Recinte Sant Boi.", - "Parc Sanitari Sant Joan De Déu - Hospital General", - "Hospital De Sant Celoni.", - "Hospital Universitari General De Catalunya", - "Casal De Curació", - "Hospital Residència Sant Camil - Consorci Sanitari Del Garraf.", - "Centres Assistencials Dr. Emili Mira I López (Recinte Torribera).", - "Fundació Hospital De L'Esperit Sant", - "Hospital De Terrassa.", - "Hospital De Sant Llàtzer", - "Hospital Universitari Mútua De Terrassa", - "Hospital Universitari De Vic", - "Hospital De La Santa Creu", - "Hospital De Viladecans", - "Hospital Sant Antoni Abat - Consorci Sanitari Del Garraf.", - "Centre Sociosanitari Can Torras", - "Hestia Maresme", - "Prytanis Sant Boi Centre Sociosanitari", - "Centre Sociosanitari Verge Del Puig", - "Residència L'Estada", - "Residència Puig-Reig", - "Residència Santa Susanna", - "Hospital De Mataró", - "Hospital Universitari Vall D'Hebron", - "Centre Polivalent Can Fosc", - "Hospital Sociosanitari Mutuam Güell", - "Mútua De Granollers, Mútua De Previsió Social A Prima Fixa", - "Hospital Comarcal De L'Alt Penedès.", - "Àptima Centre Clínic - Mútua De Terrassa", - "Institut Català D'Oncologia - Hospital Duran I Reynals", - "Sar Mont Martí", - "Regina Sar", - "Centre Vallparadís", - "Ita Maresme", - "Clínica Llúria", - "Antic Hospital De Sant Jaume I Santa Magdalena", - "Parc Sanitari Sant Joan De Déu - Numància", - "Prytanis Hospitalet Centre Sociosanitari", - "Comunitat Terapèutica Arenys De Munt", - "Hospital Sociosanitari Pere Virgili", - "Benito Menni Complex Assistencial En Salut Mental", - "Hospital Sanitas Cima", - "Parc Sanitari Sant Joan De Deu - Brians 1.", - "Institut Català D'Oncologia - Hospital Germans Trias I Pujol", - "CAP La Salut EAP Badalona", - "CAP Mataró-6 (Gatassa)", - "CAP Can Mariner Santa Coloma-1", - "CAP Montmeló (Montornès)", - "Centre Collserola Mutual", - "Centre Sociosanitari Sarquavitae Sant Jordi", - "Hospital General Penitenciari", - "Centre Sociosanitari De L'Hospitalet - Consorci Sanitari Integral", - "Sar La Salut Josep Servat", - "Clínica Creu Blanca", - "Hestia Gràcia", - "Centre Sociosanitari D'Esplugues", - "Centre Sociosanitari Ricard Fortuny", - "Centre Residencial Amma Diagonal", - "Centre Fòrum", - "Centre Sociosanitari Blauclínic Dolors Aleu", - "Parc Sanitari Sant Joan De Déu - Til·Lers", - "Clínica Galatea", - "Hospital D'Igualada", - "Centre Social I Sanitari Frederica Montseny", - "Parc Sanitari Sant Joan De Deu-Serveis Sanitaris Centre Penitenciari Brians-2", - "Centre Integral De Serveis En Salut Mental Comunitària", - "Centre Sociosanitari Sant Jordi De La Vall D'Hebron", - "Lepant Residencial Qgg, Sl", - "Mapfre Quavitae Barcelona", - "Unitat Polivalent Salut Mental Barcelona-Nord", - "Cqm Clínic Maresme, Sl", - "Serveis Sanitaris La Roca Del Valles 2", - "Clínica Del Vallès", - "Centre Gerontològic Amma Sant Cugat", - "Serveis Sanitaris Sant Joan De Vilatorrada", - "Centre Sociosanitari Stauros", - "Hospital De Sant Joan Despí Moisès Broggi", - "Amma Horta", - "Unitat Polivalent Benito Menni En Salut Mental De L'Hospitalet-El Prat De Llobregat", - "Centre Sociosanitari Del Centre Integral De Salut Cotxeres", - "Clínica Sant Antoni", - "Clínica Diagonal", - "Hospital Sociosanitari De Mollet", - "Centre Sociosanitari Isabel Roig", - "Iván Mañero Clínic", - "Institut Trastorn Límit", - "Centre D'Hospitalització I Hospital De Dia Trastorns De La Conducta", - "Sarquavitae Bonanova", - "Centre La Creueta", - "Unitat Terapèutica-Educativa Acompanya'M", - "Hospital Fuente Bermeja", - "Hospital Recoletas De Burgos", - "Hospital San Juan De Dios De Burgos", - "Hospital Santos Reyes", - "Hospital Residencia Asistida De La Luz", - "Hospital Santiago Apóstol", - "Complejo Asistencial Universitario De Burgos", - "Hospital Universitario De Burgos", - "Hospital San Pedro De Alcántara", - "Hospital Provincial Nuestra Señora De La Montaña", - "Hospital Ciudad De Coria", - "Hospital Campo Arañuelo", - "Hospital Virgen Del Puerto", - "Hospital Sociosanitario De Plasencia", - "Complejo Hospitalario De Cáceres", - "Hospital Quirón Salud De Cáceres", - "Clínica Soquimex", - "Clinica Quirúrgica Cacereña, S.A-(Clínica San Francisco)", - "Hospital Universitario Puerta Del Mar", - "Clínica La Salud", - "Hospital San Rafael", - "Hospital Punta De Europa", - "Clínica Los Álamos", - "Hospital Universitario De Jerez De La Frontera", - "Hospital San Juan Grande", - "Hospital De La Línea De La Concepción", - "Hospital General Santa María Del Puerto", - "Hospital Universitario De Puerto Real", - "Hospital Virgen De Las Montañas", - "Hospital Virgen Del Camino", - "Hospital Jerez Puerta Del Sur", - "Hospital Viamed Bahía De Cádiz", - "Hospital Punta De Europa", - "Hospital Viamed Novo Sancti Petri", - "Clínica Serman - Instituto Médico", - "Hospital Quirón Campo De Gibraltar", - "Hospital Punta Europa. Unidad De Cuidados Medios", - "Hospital San Carlos", - "Hospital De La Línea De La Concepción", - "Hospital General Universitario De Castellón", - "Hospital La Magdalena", - "Consorcio Hospitalario Provincial De Castellón", - "Hospital Comarcal De Vinaròs", - "Hospital Universitario De La Plana", - "Instituto De Traumatologia De Unión De Mutuas (Matepss Nº 267)", - "Hospital Rey D. Jaime", - "Servicios Sanitarios Del Centro Penitenciario De Castellón Ii (Albocàsser)", - "Servicios Sanitarios Y Asistenciales", - "Hospital Quirónsalud Ciudad Real", - "Hospital General La Mancha Centro", - "Hospital Virgen De Altagracia", - "Hospital Santa Bárbara", - "Hospital General De Valdepeñas", - "Hospital General De Ciudad Real", - "Hospital General De Tomelloso", - "Hospital Universitario Reina Sofía", - "Hospital Los Morales", - "Hospital Materno-Infantil Del H.U. Reina Sofía", - "Hospital Provincial", - "Hospital De La Cruz Roja De Córdoba", - "Hospital San Juan De Dios De Córdoba", - "Hospital Infanta Margarita", - "Hospital Valle De Los Pedroches", - "Hospital De Montilla", - "Hospital La Arruzafa-Instituto De Oftalmología", - "Hospital De Alta Resolución De Puente Genil", - "Hospital De Alta Resolución Valle Del Guadiato", - "Hospital General Del H.U. Reina Sofía", - "Hospital Quironsalud Córdoba", - "Complexo Hospitalario Universitario A Coruña", - "Hospital Universitario A Coruña", - "Hospital Teresa Herrera (Materno-Infantil)", - "Hospital Maritimo De Oza", - "Centro Oncoloxico De Galicia", - "Hospital Quironsalud A Coruña", - "Hospital Hm Modelo", - "Maternidad Hm Belen", - "Hospital Abente Y Lago", - "Complexo Hospitalario Universitario De Ferrol", - "Hospital Universitario Arquitecto Marcide", - "Hospital Juan Cardona", - "Hospital Naval", - "Complexo Hospitalario Universitario De Santiago", - "Hospital Clinico Universitario De Santiago", - "Hospital Gil Casares", - "Hospital Medico Cirurxico De Conxo", - "Hospital Psiquiatrico De Conxo", - "Hospital Hm Esperanza", - "Hospital Hm Rosaleda", - "Sanatorio La Robleda", - "Hospital Da Barbanza", - "Hospital Virxe Da Xunqueira", - "Hm Modelo (Grupo)", - "Hospital Hm Rosaleda - Hm La Esperanza", - "Hospital Virgen De La Luz", - "Hospital Recoletas Cuenca S.L.U.", - "Hospital Universitari De Girona Dr. Josep Trueta", - "Clínica Bofill", - "Clínica Girona", - "Clínica Quirúrgica Onyar", - "Clínica Salus Infirmorum", - "Hospital De Sant Jaume", - "Hospital De Campdevànol", - "Hospital De Figueres", - "Clínica Santa Creu", - "Hospital Sociosanitari De Lloret De Mar", - "Hospital D'Olot I Comarcal De La Garrotxa", - "Hospital De Palamós", - "Residència De Gent Gran Puig D'En Roca", - "Hospital Comarcal De Blanes", - "Residència Geriàtrica Maria Gay", - "Hospital Sociosanitari Mutuam Girona", - "Centre Sociosanitari De Puigcerdà", - "Centre Sociosanitari Bernat Jaume", - "Institut Català D'Oncologia Girona - Hospital Josep Trueta", - "Hospital Santa Caterina-Ias", - "Centre Palamós Gent Gran", - "Centre Sociosanitari Parc Hospitalari Martí I Julià", - "Hospital De Cerdanya / Hôpital De Cerdagne", - "Hospital General Del H.U. Virgen De Las Nieves", - "Hospital De Neurotraumatología Y Rehabilitación", - "Hospital De La Inmaculada Concepción", - "Hospital De Baza", - "Hospital Santa Ana", - "Hospital Universitario Virgen De Las Nieves", - "Hospital De Alta Resolución De Guadix", - "Hospital De Alta Resolución De Loja", - "Hospital Vithas La Salud", - "Hospital Universitario San Cecilio", - "Microbiología HUC San Cecilio", - "Hospital Materno-Infantil Virgen De Las Nieves", - "Hospital Universitario De Guadalajara", - "Clínica La Antigua", - "Clínica Dr. Sanz Vázquez", - "U.R.R. De Enfermos Psíquicos Alcohete", - "Instituto De Enfermedades Neurológicas De Castilla-La Mancha", - "Mutualia-Clinica Pakea", - "Hospital Ricardo Bermingham (Fundación Matia)", - "Policlínica Gipuzkoa S.A.", - "Hospital Quirón Salud Donostia", - "Fundación Onkologikoa Fundazioa", - "Organización Sanitaria Integrada Bidasoa (Osi Bidasoa)", - "Organización Sanitaria Integrada Alto Deba", - "Hospital Aita Menni", - "Hospital Psiquiátrico San Juan De Dios", - "Clinica Santa María De La Asunción, (Inviza, S.A.)", - "Sanatorio De Usurbil, S.L.", - "Hospital De Zumarraga", - "Hospital De Mendaro", - "Hospital Universitario Donostia-Donostia Unibertsitate Ospitalea", - "Hospital San Juan De Dios Donostia", - "Hospital Infanta Elena", - "Hospital Vázquez Díaz", - "Hospital Blanca Paloma", - "Clínica Los Naranjos", - "Hospital De Riotinto", - "Hospital Universitario Juan Ramón Jiménez", - "Hospital Juan Ramón Jiménez", - "Hospital Costa De La Luz", - "Hospital Virgen De La Bella", - "Hospital General San Jorge", - "Centro De Rehab. Psicosocial Santo Cristo De Los Milagros", - "Hospital Sagrado Corazón De Jesús", - "Hospital Viamed Santiago", - "Hospital De Barbastro", - "Hospital De Jaca.Salud", - "Centro Sanitario Bajo Cinca-Baix Cinca", - "Hospital General Del H.U. De Jaén", - "Hospital Doctor Sagaz", - "Hospital Neurotraumatológico Del H.U. De Jaén", - "Clínica Cristo Rey", - "Hospital San Agustín", - "Hospital San Juan De La Cruz", - "Hospital Universitario De Jaén", - "Hospital Alto Guadalquivir", - "Hospital Materno-Infantil Del H.U. De Jaén", - "Hospital De Alta Resolución Sierra De Segura", - "Hospital De Alta Resolución De Alcaudete", - "Hospital De Alta Resolución De Alcalá La Real", - "Hospital De León", - "Hospital Monte San Isidro", - "Regla Hm Hospitales", - "Hospital Hm San Francisco", - "Hospital Santa Isabel", - "Hospital El Bierzo", - "Hospital De La Reina", - "Hospital San Juan De Dios", - "Complejo Asistencial Universitario De León", - "Clínica Altollano", - "Clínica Ponferrada", - "Hospital Valle De Laciana", - "Hospital Universitari Arnau De Vilanova De Lleida", - "Hospital Santa Maria", - "Vithas Hospital Montserrat", - "Clínica Perpetuo Socorro De Lérida, Grupo Hla, Slu", - "Clínica Terres De Ponent", - "Clínica Psiquiàtrica Bellavista", - "Fundació Sant Hospital.", - "Centre Sanitari Del Solsonès, Fpc", - "Hospital Comarcal Del Pallars", - "Espitau Val D'Aran", - "Hestia Balaguer.", - "Residència Terraferma", - "Castell D'Oliana Residencial,S.L", - "Hospital Jaume Nadal Meroles", - "Sant Joan De Déu Terres De Lleida", - "Reeixir", - "Hospital Sant Joan De Déu Lleida", - "Complejo Hospitalario San Millan San Pedro De La Rioja", - "Hospital San Pedro", - "Hospital General De La Rioja", - "Policlínico Riojano Nuestra Señora De Valvanera, S.A.", - "Fundación Hospital Calahorra", - "Clínica Los Manzanos", - "Centro Asistencial De Albelda De Iregua", - "Centro Sociosanitario De Convalecencia Los Jazmines", - "Centro Sociosanitario De Convalecencia Nuestra Señora Virgen Del Carmen", - "Complexo Hospitalario Universitario De Lugo", - "Hospital De Calde (Psiquiatrico)", - "Hospital Polusa", - "Sanatorio Nosa Señora Dos Ollos Grandes", - "Hospital Publico Da Mariña", - "Hospital De Monforte", - "Hospital Universitario Lucus Augusti", - "Hospital Universitario La Paz", - "Hospital Ramón Y Cajal", - "Hospital Universitario 12 De Octubre", - "Hospital Clínico San Carlos", - "Hospital Virgen De La Torre", - "Hospital Universitario Santa Cristina", - "Hospital Universitario De La Princesa", - "Hospital Infantil Universitario Niño Jesus", - "Hospital Central De La Cruz Roja San José Y Santa Adela", - "Hospital Carlos Iii", - "Hospital Cantoblanco", - "Complejo Hospitalario Gregorio Marañón", - "Hospital General Universitario Gregorio Marañón", - "Instituto Provincial De Rehabilitación", - "Hospital Dr. R. Lafora", - "Sanatorio Nuestra Señora Del Rosario", - "Hospital De La V.O.T. De San Francisco De Asís", - "Hospital Quirónsalud San José", - "Hospital Beata María Ana. Hh. Hospitalarias Sgdo. C. De Jesús", - "Clínica Santa Elena", - "Hospital San Francisco De Asís", - "Clínica San Miguel", - "Clínica Nuestra Sra. De La Paz", - "Fundación Instituto San José", - "Hospital Universitario Fundación Jiménez Díaz", - "Hestia Madrid (Clínica Sear, S.A.)", - "Hospital Ruber Juan Bravo 39", - "Hospital Vithas Nuestra Señora De América", - "Hospital Virgen De La Paloma, S.A.", - "Clínica La Luz, S.L.", - "Fuensanta S.L. (Clínica Fuensanta)", - "Hospital Ruber Juan Bravo 49", - "Hospital Ruber Internacional", - "Clínica La Milagrosa", - "Hospital Universitario La Zarzuela", - "Hospital Universitario Hm Nuevo Belen", - "Sanatorio Neuropsiquiátrico Doctor León", - "Instituto De Investigaciones Neuropsiquiátricas Dr. López Ibor", - "Sanatorio Esquerdo, S.A.", - "Hospital Central De La Defensa Gomez Ulla", - "Hospital Universitario Príncipe De Asturias", - "Hospital De La Fuenfría", - "Hh. Hh. Sgdo. C. De Jesús. Complejo Asistencial Benito Menni", - "Centro San Juan De Dios", - "Hospital Monográfico Asepeyo De Traumat. Cirugía Y Rehabilitación", - "Hospital Guadarrama", - "Hospital Universitario Severo Ochoa", - "Instituto Psiquiátrico Servicios De Salud Mental José Germain-1 Luna", - "Fremap Hospital Y Centro De Rehabilitación De Majadahonda", - "Hospital Universitario De Móstoles", - "Hospital El Escorial", - "Hospital Virgen De La Poveda", - "Hospital De Madrid", - "Hospital Universitario De Getafe", - "Clínica Isadora", - "Hospital Universitario Moncloa", - "Hospital Universitario Fundación Alcorcón", - "Clinica Cemtro", - "Hospital Universitario Hm Montepríncipe", - "Centro Oncológico Md Anderson International España", - "Hospital Quironsalud Sur", - "Hospital Universitario De Fuenlabrada", - "Hospital Universitario Hm Torrelodones", - "Complejo Universitario La Paz", - "Hospital La Moraleja", - "Hospital Los Madroños", - "Hospital Quirónsalud Madrid", - "Hospital Centro De Cuidados Laguna", - "Hospital Universitario Madrid Sanchinarro", - "Hospital Universitario Infanta Elena", - "Vitas Nisa Pardo De Aravaca.", - "Hospital Universitario Infanta Sofía", - "Hospital Universitario Del Henares", - "Hospital Universitario Infanta Leonor", - "Hospital Universitario Del Sureste", - "Hospital Universitario Del Tajo", - "Hospital Universitario Infanta Cristina", - "Hospital Universitario Puerta De Hierro Majadahonda", - "Casta Guadarrama", - "Hospital Universitario De Torrejón", - "Hospital Rey Juan Carlos", - "Hospital General De Villalba", - "Hm Universitario Puerta Del Sur", - "Hm Valles", - "Hospital Casaverde De Madrid", - "Clínica Universidad De Navarra", - "Complejo Hospitalario Universitario Infanta Leonor", - "Clínica San Vicente", - "Instituto Psiquiátrico Servicios De Salud Mental José Germain", - "Instituto Psiquiátrico Servicios De Salud Mental José Germain-2 Aragón", - "Hospital General Del H.U.R. De Málaga", - "Hospital Virgen De La Victoria", - "Hospital Civil", - "Centro Asistencial San Juan De Dios", - "Centro Asistencial Hnas. Hosp. Del Sagrado Corazón De Jesús", - "Hospital Vithas Parque San Antonio", - "Hospital El Ángel", - "Hospital Doctor Gálvez", - "Clínica De La Encarnación", - "Hospital Psiquiátrico San Francisco De Asís", - "Clínica Nuestra Sra. Del Pilar", - "Hospital De Antequera", - "Hospital Quironsalud Marbella", - "Hospital De La Axarquía", - "Hospital Marítimo De Torremolinos", - "Hospital Universitario Regional De Málaga", - "Hospital Universitario Virgen De La Victoria", - "Hospital Materno-Infantil Del H.U.R. De Málaga", - "Hospital Costa Del Sol", - "Hospital F.A.C. Doctor Pascual", - "Clínica El Seranil", - "Hc Marbella International Hospital", - "Hospital Humanline Banús", - "Clínica Rincón", - "Hospiten Estepona", - "Fundación Cudeca. Centro De Cuidados Paliativos", - "Xanit Hospital Internacional", - "Comunidad Terapéutica San Antonio", - "Hospital De Alta Resolución De Benalmádena", - "Hospital Quironsalud Málaga", - "Cenyt Hospital", - "Clínica Ochoa", - "Centro De Reproducción Asistida De Marbella (Ceram)", - "Helicópteros Sanitarios Hospital", - "Hospital De La Serranía", - "Hospital Valle Del Guadalhorce De Cártama", - "Hospital Clínico Universitario Virgen De La Arrixaca", - "Hospital General Universitario Reina Sofía", - "Plataforma de Medicina Computacional, Fundación Progreso y Salud", - "Hospital Psiquiátrico Roman Alberca", - "Hospital Quirónsalud Murcia", - "Hospital La Vega", - "Hospital Mesa Del Castillo", - "Sanatorio Doctor Muñoz S.L.", - "Clínica Médico-Quirúrgica San José, S.A.", - "Hospital Comarcal Del Noroeste", - "Clínica Doctor Bernal S.L.", - "Hospital Santa María Del Rosell", - "Santo Y Real Hospital De Caridad", - "Hospital Nuestra Señora Del Perpetuo Socorro", - "Fundacion Hospital Real Piedad", - "Hospital Virgen Del Alcázar De Lorca", - "Hospital General Universitario Los Arcos Del Mar Menor", - "Hospital Virgen Del Castillo", - "Hospital Rafael Méndez", - "Hospital General Universitario J.M. Morales Meseguer", - "Hospital Ibermutuamur-Patología Laboral", - "Hospital De La Vega Lorenzo Guirao", - "Hospital De Molina", - "Clínica San Felipe Del Mediterráneo", - "Hospital De Cuidados Medios Villademar", - "Residencia Los Almendros", - "Complejo Hospitalario Universitario De Cartagena", - "Hospital General Universitario Santa Lucia", - "Consorcio LUCIA (SACYL,ITACYL UBU,UVa)", - "Hospital Perpetuo Socorro Alameda", - "Hospital C.M.V. Caridad Cartagena", - "Centro San Francisco Javier", - "Clinica Psiquiatrica Padre Menni", - "Clinica Universidad De Navarra", - "CATLAB", - "Clinica San Miguel", - "Clínica San Fermín", - "Centro Hospitalario Benito Menni", - "Hospital García Orcoyen", - "Hospital Reina Sofía", - "Clínica Psicogeriátrica Josefina Arregui", - "Complejo Hospitalario De Navarra", - "Complexo Hospitalario Universitario De Ourense", - "Hospital Universitario Cristal", - "Hospital Santo Cristo De Piñor (Psiquiatrico)", - "Hospital Santa Maria Nai", - "Centro Medico El Carmen", - "Hospital De Valdeorras", - "Hospital De Verin", - "Clinica Santa Teresa", - "Hospital Monte Naranco", - "Centro Médico De Asturias", - "Clínica Asturias", - "Clínica San Rafael", - "Hospital Universitario San Agustín", - "Fundación Hospital De Avilés", + "Hestia San Jose", + "Hm El Pilar", + "Hm Galvez", + "Hm Hospitales 1.989, S.A.", + "Hm Malaga", + "Hm Modelo-Belen", + "Hm Nou Delfos", + "Hm Regla", + "Hospital 9 De Octubre", + "Hospital Aita Menni", + "Hospital Alto Guadalquivir", + "Hospital Arnau De Vilanova", + "Hospital Asepeyo Madrid", + "Hospital Asilo De La Real Piedad De Cehegin", + "Hospital Asociado Universitario Guadarrama", + "Hospital Asociado Universitario Virgen De La Poveda", + "Hospital Beata Maria Ana", + "Hospital Begoña", + "Hospital Bidasoa (Osi Bidasoa)", + "Hospital C. M. Virgen De La Caridad Cartagena", + "Hospital Campo Arañuelo", + "Hospital Can Misses", + "Hospital Carlos Iii", "Hospital Carmen Y Severo Ochoa", - "Hospital Comarcal De Jarrio", - "Hospital De Cabueñes", - "Sanatorio Nuestra Señora De Covadonga", - "Fundación Hospital De Jove", - "Hospital Begoña De Gijón, S.L.", - "Hospital Valle Del Nalón", - "Fundació Fisabio", - "Fundación Sanatorio Adaro", - "Hospital V. Álvarez Buylla", - "Hospital Universitario Central De Asturias", - "Hospital Del Oriente De Asturias Francisco Grande Covián", - "Hospital De Luarca -Asistencia Médica Occidentalsl", - "Instituto Salud Mental Pérez-Espinosa Oria, S.L.", - "Clínica Psiquiátrica Somió", - "Clínica Cirugía Plástica Y Estética Fernández Y Fernández Cossío", - "Hospital Gijón", - "Centro Terapéutico Vista Alegre", - "Instituto Oftalmológico Fernández -Vega", - "Hospital Rio Carrión", - "Hospital San Telmo", - "Hospital Psiquiatrico San Luis", - "Área Psiquiátrica Del Centro Asistencial San Juan De Dios", - "Hospital Recoletas De Palencia", - "Complejo Asistencial Universitario De Palencia", - "Hospital Universitario Materno-Infantil De Canarias", - "Hospital Universitario Insular De Gran Canaria", - "Unidades Clínicas Y De Rehabilitación (Ucyr)", - "Sanatorio Dermatológico Regional", - "Fundación Benéfica Canaria Casa Asilo San José", - "Vithas Hospital Santa Catalina", - "Hospital Policlínico La Paloma, S.A.", - "Instituto Policlínico Cajal, S.L.", - "Hospital San Roque Las Palmas De Gran Canaria", - "Clínica Bandama", - "Hospital Doctor José Molina Orosa", - "Hospital Insular De Lanzarote", - "Hospital General De Fuerteventura", - "Quinta Médica De Reposo, S.A.", - "Hospital De San Roque Guía", + "Hospital Casaverde Valladolid", + "Hospital Catolico Casa De Salud", + "Hospital Central De La Cruz Roja, San Jose Y Santa Adela", + "Hospital Central De La Defensa Gomez Ulla", + "Hospital Centro De Andalucia", + "Hospital Centro De Cuidados Laguna", + "Hospital Centro Medico Virgen De La Caridad Caravaca", + "Hospital Ciudad De Coria", "Hospital Ciudad De Telde", - "Complejo Hospitalario Universitario Insular-Materno Infantil", - "Hospital Clínica Roca (Roca Gestión Hospitalaria)", - "Hospital Universitario De Gran Canaria Dr. Negrín", - "Hospiten Lanzarote (Clínicas Del Sur S.L.U.)", - "Complejo Hospitalario Universitario De Gran Canaria Dr. Negrín", - "Hospital San Roque Maspalomas", - "Clínica Parque Fuerteventura", - "Clinica Jorgani", - "Hospital Universitario Montecelo", - "Gerencia de Atención Primaria Pontevedra Sur", - "Hospital Provincial De Pontevedra", - "Hestia Santa Maria", - "Hospital Quironsalud Miguel Dominguez", - "Instituto De Neuro-Rehabilitacion Quironsalud Pontevedra", - "Hospital Meixoeiro", - "Hospital Nicolas Peña", - "Fremap, Hospital De Vigo", - "Hospital Povisa", - "Hospital Hm Vigo", - "Vithas Hospital Nosa Señora De Fatima", - "Concheiro Centro Medico Quirurgico", - "Centro Medico Pintado", - "Sanatorio Psiquiatrico San Jose", - "Clinica Residencia El Pinar", - "Complexo Hospitalario Universitario De Pontevedra", - "Hospital Do Salnes", - "Complexo Hospitalario Universitario De Vigo", - "Hospital Universitario Alvaro Cunqueiro", - "Plataforma de Genómica y Bioinformática", - "Complejo Asistencial Universitario De Salamanca", - "Hospital Universitario De Salamanca", - "Hospital General De La Santísima Trinidad", - "Hospital Los Montalvos", - "Complejo Hospitalario Universitario Ntra. Sra. De Candelaria", - "Hospital Universitario Nuestra Señora De Candelaria", - "Hospital De Ofra", - "Instituto Tecnológico y de Energías Renovables, S.A. (ITER, S.A.)", - "Unidades Clínicas Y De Rehabilitación De Salud Mental", - "Hospital Febles Campos", - "Hospital Quirón Tenerife", - "Vithas Hospital Santa Cruz", - "Clínica Parque, S.A.", - "Hospiten Sur", - "Hospital Universitario De Canarias (H.U.C)", - "Hospital De La Santísima Trinidad", - "Clínica Vida", - "Hospital Bellevue", - "Hospital Nuestra Señora De Guadalupe", - "Hospital Nuestra Señora De Los Dolores", - "Hospital Insular Ntra. Sra. De Los Reyes", - "Hospital Quirón Costa Adeje", - "Hospital Rambla S.L.", - "Hospital General De La Palma", - "Complejo Hospitalario Universitario De Canarias", - "Hospital Del Norte", - "Hospital Del Sur", - "Clínica Tara", - "Hospital Universitario Marqués De Valdecilla", - "Hospital Ramón Negrete", - "Hospital Santa Clotilde - Orden Hospitalaria San Juan De Dios.", - "Centro Hospitalario Padre Menni", + "Hospital Civil", + "Hospital Clinic De Barcelona", + "Hospital Clinic De Barcelona, Seu Plato", + "Hospital Clinic De Barcelona, Seu Sabino De Arana", + "Hospital Clinica Benidorm", + "Hospital Clinico Universitario De Valencia", + "Hospital Clinico Universitario De Valladolid", + "Hospital Clinico Universitario Lozano Blesa", + "Hospital Clinico Universitario Virgen De La Arrixaca", + "Hospital Comarcal", + "Hospital Comarcal D'Amposta", + "Hospital Comarcal De Blanes", + "Hospital Comarcal De L'Alt Penedes", "Hospital Comarcal De Laredo", - "Hospital Sierrallana", - "Clínica Mompía, S.A.U.", - "Complejo Asistencial De Segovia", - "Hospital General De Segovia", - "Hospital Recoletas Segovia Ntra. Sra. De La Misericordia", - "Unidad De Rehabilitación Psiquiátrica Ntra. Sra. De La Fuencisla", - "Hospital General Del H.U. Virgen Del Rocío", - "Hospital Virgen De Valme", - "Hospital Virgen Macarena", - "Hospital San Lázaro", - "Hospital Victoria Eugenia De La Cruz Roja Española", - "Hospital San Juan De Dios De Sevilla", - "Hospital Duques Del Infantado", - "Clínica Santa Isabel", - "Hospital Quironsalud Sagrado Corazón", - "Hospital Fátima", - "Hospital Quironsalud Infanta Luisa", - "Clínica Nuestra Señora De Aránzazu", - "Residencia De Salud Mental Nuestra Señora Del Carmen", - "Hospital El Tomillar", - "Hospital De Alta Resolución De Morón De La Frontera", - "Hospital La Merced", - "Hospital Universitario Virgen Del Rocío", - "Microbiología. Hospital Universitario Virgen del Rocio", - "Hospital Universitario Virgen Macarena", - "Hospital Universitario Virgen De Valme", - "Fremap, Hospital Y Centro De Rehabilitación De Sevilla", - "Hospital Psiquiátrico Penitenciario", - "Hospital San Juan De Dios Del Aljarafe", - "Hospital Nisa Sevilla-Aljarafe", - "Hospital De Alta Resolución De Utrera", - "Hospital De Alta Resolución Sierra Norte", - "Hospital Viamed Santa Ángela De La Cruz", - "Hospital De Alta Resolución De Écija", - "Clínica De Salud Mental Miguel De Mañara", - "Hospital De Rehabilitación Y Traumatología Virgen Del Rocío", - "Hospital De Alta Resolución De Lebrija", - "Hospital Infantil", + "Hospital Comarcal De Vinaros", + "Hospital Comarcal Del Noroeste", + "Hospital Comarcal Del Pallars", + "Hospital Comarcal D´Inca", + "Hospital Comarcal Mora D'Ebre", + "Hospital Comarcal Sant Jaume De Calella", + "Hospital Cruz Roja De Bilbao - Victoria Eugenia", + "Hospital Cruz Roja De Cordoba", + "Hospital Cruz Roja Gijon", + "Hospital D'Igualada", + "Hospital D'Olot I Comarcal De La Garrotxa", + "Hospital De Alcañiz", + "Hospital De Alta Resolucion De Alcala La Real", + "Hospital De Alta Resolucion De Alcaudete", + "Hospital De Alta Resolucion De Benalmadena", + "Hospital De Alta Resolucion De Ecija", + "Hospital De Alta Resolucion De Especialidades De La Janda", + "Hospital De Alta Resolucion De Estepona", + "Hospital De Alta Resolucion De Guadix", + "Hospital De Alta Resolucion De Lebrija", + "Hospital De Alta Resolucion De Loja", + "Hospital De Alta Resolucion De Moron De La Frontera", + "Hospital De Alta Resolucion De Puente Genil", + "Hospital De Alta Resolucion De Utrera", + "Hospital De Alta Resolucion Eltoyo", + "Hospital De Alta Resolucion Sierra De Segura", + "Hospital De Alta Resolucion Sierra Norte", + "Hospital De Alta Resolucion Valle Del Guadiato", + "Hospital De Antequera", + "Hospital De Barbastro", + "Hospital De Barcelona", + "Hospital De Baza", + "Hospital De Benavente Complejo Asistencial De Zamora", + "Hospital De Berga", + "Hospital De Bermeo", + "Hospital De Calahorra", + "Hospital De Campdevanol", + "Hospital De Cantoblanco", + "Hospital De Cerdanya / Hopital De Cerdagne", + "Hospital De Cronicos De Mislata (Antiguo Hospital Militar De Valencia)", + "Hospital De Cuidados Medios Villademar", + "Hospital De Denia", + "Hospital De Emergencia Covid 19", + "Hospital De Figueres", + "Hospital De Formentera", + "Hospital De Gorliz", + "Hospital De Hellin", + "Hospital De Jaca Salud", + "Hospital De Jarrio", + "Hospital De Jove", + "Hospital De L'Esperança.", + "Hospital De La Axarquia", + "Hospital De La Creu Roja Espanyola", + "Hospital De La Fuenfria", + "Hospital De La Inmaculada Concepcion", + "Hospital De La Malva-Rosa", "Hospital De La Mujer", - "Hospital Virgen Del Mirón", - "Complejo Asistencial De Soria", - "Hospital Universitari Joan Xxiii De Tarragona", - "Hospital Sociosanitari Francolí", + "Hospital De La Reina", + "Hospital De La Rioja", + "Hospital De La Santa Creu", + "Hospital De La Santa Creu I Sant Pau", + "Hospital De La Serrania", + "Hospital De La V.O.T. De San Francisco De Asis", + "Hospital De La Vega Lorenzo Guirao", + "Hospital De Leon Complejo Asistencial Universitario De Leon", + "Hospital De Leza", + "Hospital De Llevant", + "Hospital De Lliria", + "Hospital De Luarca", + "Hospital De Manacor", + "Hospital De Manises", + "Hospital De Mataro", + "Hospital De Mendaro (Osi Bajo Deba)", + "Hospital De Merida", + "Hospital De Mollet", + "Hospital De Montilla", + "Hospital De Neurotraumatologia Y Rehabilitacion Del H.U. Virgen De Las Nieves", + "Hospital De Ofra", + "Hospital De Palamos", + "Hospital De Rehabilitacion Psiquiatrica Prisma", + "Hospital De Rehabilitacion Y Traumatologia Del H.U. Virgen Del Rocio", + "Hospital De Riotinto", + "Hospital De Sabadell", + "Hospital De Sagunto", + "Hospital De Salud Mental Casta Salud Arevalo", + "Hospital De Salud Mental Provincial", + "Hospital De San Antonio", + "Hospital De San Jose", + "Hospital De San Rafael", + "Hospital De Sant Andreu", + "Hospital De Sant Celoni.", + "Hospital De Sant Jaume", + "Hospital De Sant Joan De Deu (Manresa)", + "Hospital De Sant Joan De Deu.", + "Hospital De Sant Joan Despi Moises Broggi", + "Hospital De Sant Llatzer", "Hospital De Sant Pau I Santa Tecla", - "Hospital Viamed Monegal", - "Clínica Activa Mútua 2008", - "Hospital Comarcal Móra D'Ebre", - "Hospital Universitari De Sant Joan De Reus", - "Centre Mq Reus", - "Villablanca Serveis Assistencials, Sa", - "Institut Pere Mata, S.A", + "Hospital De Terrassa.", "Hospital De Tortosa Verge De La Cinta", - "Clínica Terres De L'Ebre", - "Policlínica Comarcal Del Vendrell.", - "Pius Hospital De Valls", - "Residència Alt Camp", - "Centre Sociosanitari Ciutat De Reus", - "Hospital Comarcal D'Amposta", - "Centre Sociosanitari Llevant", - "Residència Vila-Seca", - "Unitat Polivalent En Salut Mental D'Amposta", + "Hospital De Viladecans", + "Hospital De Zafra", + "Hospital De Zaldibar", + "Hospital De Zamudio", + "Hospital De Zumarraga (Osi Goierri - Alto Urola)", + "Hospital Del Mar", + "Hospital Del Norte", + "Hospital Del Oriente De Asturias Francisco Grande Covian", + "Hospital Del Sur", "Hospital Del Vendrell", - "Centre Sociosanitari I Residència Assistida Salou", - "Residència Santa Tecla Ponent", - "Unitat De Referència De Psiquiatria I Trastorns De La Conducta Alimentària (Urpi)", - "Hospital Obispo Polanco", - "Centro De Rehabilitacion Psicosocial San Juan De Dios", - "Hospital De Alcañiz", - "Hospital Virgen De La Salud", - "Hospital Geriátrico Virgen Del Valle", - "Hospital Nacional De Parapléjicos", - "Hospital Provincial Nuestra Señora De La Misericordia", - "Hospital General Nuestra Señora Del Prado", - "Consejería de Sanidad", - "Clínica Marazuela, S.A.", - "Complejo Hospitalario De Toledo", - "Hospital Laboral Solimat Mutua Colaboradora Con La Ss Nº 72", - "Quirón Salud Toledo", - "Hospital Universitario Y Politécnico La Fe", - "Hospital Universitario Dr. Peset Aleixandre", - "Hospital Arnau De Vilanova", - "Hospital Clínico Universitario De Valencia", - "Hospital De La Malva-Rosa", - "Consorcio Hospital General Universitario De Valencia", - "Hospital Católico Casa De Salud", - "Hospital Nisa Valencia Al Mar", - "Fundación Instituto Valenciano De Oncología", - "Hospital Virgen Del Consuelo", - "Hospital Quirón Valencia", - "Hospital Psiquiátrico Provincial", - "Casa De Reposo San Onofre", + "Hospital Doctor Moliner", + "Hospital Doctor Oloriz", + "Hospital Doctor Sagaz", + "Hospital Don Benito-Villanueva De La Serena", + "Hospital Dos De Maig", + "Hospital Egarsat Sant Honorat", + "Hospital El Angel", + "Hospital El Bierzo", + "Hospital El Escorial", + "Hospital El Pilar", + "Hospital El Tomillar", + "Hospital Ernest Lluch Martin", + "Hospital Fatima", "Hospital Francesc De Borja De Gandia", - "Hospital Lluís Alcanyís De Xàtiva", + "Hospital Fuensanta", + "Hospital Fuente Bermeja- Complejo Asistencial Universitario De Burgos-", + "Hospital G. Universitario J.M. Morales Meseguer", + "Hospital Galdakao-Usansolo Asociado A La Upv/Ehu", + "Hospital Garcia Orcoyen", + "Hospital General De Almansa", + "Hospital General De Fuerteventura", + "Hospital General De Granollers.", + "Hospital General De L'Hospitalet", + "Hospital General De La Defensa En Zaragoza", + "Hospital General De La Santisima Trinidad", + "Hospital General De Llerena", + "Hospital General De Mallorca", "Hospital General De Ontinyent", - "Hospital Intermutual De Levante", - "Hospital De Sagunto", - "Hospital Doctor Moliner", "Hospital General De Requena", - "Hospital 9 De Octubre", - "Centro Médico Gandia", - "Hospital Nisa Aguas Vivas", - "Clinica Fontana", - "Hospital Universitario De La Ribera", - "Hospital Pare Jofré", - "Hospital De Manises", - "Hospital De Crónicos De Mislata (Antiguo Hospital Militar De Valencia)", - "Hospital De Llíria", - "Imed Valencia", - "Unidad De Desintoxicación Hospitalaria", - "Hospital Universitario Rio Hortega", - "Hospital Clínico Universitario De Valladolid", - "Sanatorio Sagrado Corazón", - "Hospital Medina Del Campo", - "Hospital De Valladolid Felipe Ii", - "Hospital Campo Grande", - "Hospital Santa Marina", + "Hospital General De Segovia Complejo Asistencial De Segovia", + "Hospital General De Tomelloso", + "Hospital General De Valdepeñas", + "Hospital General De Villalba", + "Hospital General De Villarrobledo", + "Hospital General La Mancha Centro", + "Hospital General Nuestra Señora Del Prado", + "Hospital General Penitenciari", + "Hospital General Santa Maria Del Puerto", + "Hospital General Universitario De Albacete", + "Hospital General Universitario De Castellon", + "Hospital General Universitario De Ciudad Real", + "Hospital General Universitario De Elche", + "Hospital General Universitario De Elda-Virgen De La Salud", + "Hospital General Universitario Dr. Balmis", + "Hospital General Universitario Gregorio Marañon", + "Hospital General Universitario Los Arcos Del Mar Menor", + "Hospital General Universitario Reina Sofia", + "Hospital General Universitario Santa Lucia", + "Hospital Geriatrico Virgen Del Valle", + "Hospital Gijon", + "Hospital Hernan Cortes Miraflores", + "Hospital Hestia Madrid", + "Hospital Hla Universitario Moncloa", + "Hospital Hm Nuevo Belen", + "Hospital Hm Rosaleda-Hm La Esperanza", + "Hospital Hm San Francisco", + "Hospital Hm Valles", + "Hospital Ibermutuamur - Patologia Laboral", + "Hospital Imed Elche", + "Hospital Imed Gandia", + "Hospital Imed Levante", + "Hospital Imed San Jorge", + "Hospital Infanta Elena", + "Hospital Infanta Margarita", + "Hospital Infantil", + "Hospital Infantil Universitario Niño Jesus", + "Hospital Insular De Lanzarote", + "Hospital Insular Nuestra Señora De Los Reyes", "Hospital Intermutual De Euskadi", - "Clínica Ercilla Mutualia", - "Hospital Cruz Roja De Bilbao", - "Sanatorio Bilbaíno", - "Hospital De Basurto", - "Imq Clínica Virgen Blanca", - "Clínica Guimon S.A.", - "Clínica Indautxu", - "Hospital Universitario De Cruces", - "Osi Barakaldo-Sestao", - "Hospital San Eloy", - "Red De Salud Mental De Bizkaia (Hospital De Bermeo)", - "Hospital Galdakao-Usansolo", - "Hospital Gorliz", - "Red De Salud Mental De Bizkaia (Hospital De Zaldibar)", - "Red De Salud Mental De Bizkaia (Hospital De Zamudio)", - "Avances Médicos S.A", + "Hospital Intermutual De Levante", + "Hospital Internacional Hcb Denia", + "Hospital Internacional Hm Santa Elena", + "Hospital Jaume Nadal Meroles", + "Hospital Jerez Puerta Del Sur", + "Hospital Joan March", + "Hospital Juaneda Muro", + "Hospital La Antigua", + "Hospital La Inmaculada", + "Hospital La Magdalena", + "Hospital La Merced", + "Hospital La Milagrosa S.A.", + "Hospital La Paloma", + "Hospital La Pedrera", + "Hospital La Vega Grupo Hla", + "Hospital Latorre", + "Hospital Lluis Alcanyis De Xativa", + "Hospital Los Madroños", + "Hospital Los Montalvos (Complejo Asistencial Universitario De Salamanca)", + "Hospital Los Morales", + "Hospital Mare De Deu De La Merce", + "Hospital Marina Baixa De La Vila Joiosa", + "Hospital Maritimo De Torremolinos", + "Hospital Materno - Infantil Del H.U. Reina Sofia", + "Hospital Materno Infantil", + "Hospital Materno Infantil Del H.U.R. De Malaga", + "Hospital Materno-Infantil", + "Hospital Materno-Infantil Del H.U. De Jaen", + "Hospital Materno-Infantil Del H.U. Virgen De Las Nieves", + "Hospital Mateu Orfila", + "Hospital Maz", + "Hospital Md Anderson Cancer Center Madrid", + "Hospital Medimar Internacional", + "Hospital Medina Del Campo", + "Hospital Mediterraneo", + "Hospital Mesa Del Castillo", + "Hospital Metropolitano De Jaen", + "Hospital Mompia", + "Hospital Monte Naranco", + "Hospital Monte San Isidro Complejo Asistencial Universitario De Leon", + "Hospital Municipal De Badalona", + "Hospital Mutua Montañesa", + "Hospital Nacional De Paraplejicos", + "Hospital Neurotraumatologico Del H.U. De Jaen", + "Hospital Nisa Aguas Vivas", + "Hospital Ntra. Sra. Del Perpetuo Socorro", + "Hospital Nuestra Señora De America", + "Hospital Nuestra Señora De Gracia", + "Hospital Nuestra Señora De Guadalupe", + "Hospital Nuestra Señora De La Salud Hla Sl", + "Hospital Nuestra Señora De Sonsoles", + "Hospital Obispo Polanco", + "Hospital Ochoa", + "Hospital Palma Del Rio", + "Hospital Pardo De Aravaca", + "Hospital Pare Jofre", + "Hospital Parque", + "Hospital Parque Fuerteventura", + "Hospital Parque Marazuela", + "Hospital Parque San Francisco", + "Hospital Parque Vegas Altas", + "Hospital Perpetuo Socorro", + "Hospital Perpetuo Socorro Alameda", + "Hospital Polivalente Anexo Juan Carlos I", + "Hospital Provincial", + "Hospital Provincial De Avila", + "Hospital Provincial De Zamora Complejo Asistencial De Zamora", + "Hospital Provincial Ntra.Sra.De La Misericordia", + "Hospital Psiquiatric", + "Hospital Psiquiatrico Doctor Rodriguez Lafora", + "Hospital Psiquiatrico Penitenciario", + "Hospital Psiquiatrico Penitenciario De Fontcalent", + "Hospital Psiquiatrico Roman Alberca", + "Hospital Psiquiatrico San Francisco De Asis", + "Hospital Psiquiatrico San Juan De Dios", + "Hospital Psiquiatrico San Luis", + "Hospital Publico Da Barbanza", + "Hospital Publico Da Mariña", + "Hospital Publico De Monforte", + "Hospital Publico De Valdeorras", + "Hospital Publico De Verin", + "Hospital Publico Do Salnes", + "Hospital Publico Virxe Da Xunqueira", + "Hospital Puerta De Andalucia", + "Hospital Punta De Europa", + "Hospital Quiron Campo De Gibraltar", + "Hospital Quiron Salud Costa Adeje", + "Hospital Quiron Salud Del Valles - Clinica Del Valles", + "Hospital Quiron Salud Lugo", + "Hospital Quiron Salud Tenerife", + "Hospital Quiron Salud Valle Del Henares", + "Hospital Quironsalud A Coruña", + "Hospital Quironsalud Albacete", + "Hospital Quironsalud Barcelona", "Hospital Quironsalud Bizkaia", - "Clínica Imq Zorrotzaurre", - "Hospital Urduliz Ospitalea", - "Hospital Virgen De La Concha", - "Hospital Provincial De Zamora", - "Hospital De Benavente", - "Complejo Asistencial De Zamora", + "Hospital Quironsalud Caceres", + "Hospital Quironsalud Ciudad Real", + "Hospital Quironsalud Clideba", + "Hospital Quironsalud Cordoba", + "Hospital Quironsalud Huelva", + "Hospital Quironsalud Infanta Luisa", + "Hospital Quironsalud Malaga", + "Hospital Quironsalud Marbella", + "Hospital Quironsalud Murcia", + "Hospital Quironsalud Palmaplanas", + "Hospital Quironsalud Sagrado Corazon", + "Hospital Quironsalud San Jose", + "Hospital Quironsalud Santa Cristina", + "Hospital Quironsalud Son Veri", + "Hospital Quironsalud Sur", + "Hospital Quironsalud Toledo", + "Hospital Quironsalud Torrevieja", + "Hospital Quironsalud Valencia", + "Hospital Quironsalud Vida", + "Hospital Quironsalud Vitoria", + "Hospital Quironsalud Zaragoza", + "Hospital Rafael Mendez", + "Hospital Recoletas Cuenca, S.L.U.", + "Hospital Recoletas De Burgos", + "Hospital Recoletas De Palencia", "Hospital Recoletas De Zamora", - "Hospital Clínico Universitario Lozano Blesa", - "Hospital Universitario Miguel Servet", + "Hospital Recoletas Marbella Slu", + "Hospital Recoletas Salud Campo Grande", + "Hospital Recoletas Salud Felipe Ii", + "Hospital Recoletas Segovia Nuestra Señora De La Misericordia", + "Hospital Reina Sofia", + "Hospital Residencia Sant Camil - Consorci Sanitari De L'Alt Penedes I Garraf", + "Hospital Ribera Almendralejo", + "Hospital Ribera Badajoz", + "Hospital Ribera Covadonga", + "Hospital Ribera Juan Cardona", + "Hospital Ribera Polusa", + "Hospital Ribera Povisa", + "Hospital Ricardo Bermingham", + "Hospital Rio Carrion Complejo Asistencial Universitario De Palencia", "Hospital Royo Villanova", - "Centro de Investigación Biomédica de Aragón", - "Centro De Rehabilitacion Psicosocial Nuestra Señora Del Pilar", - "Hospital Nuestra Señora De Gracia", - "Hospital Maz", - "Clínica Montpelier Grupo Hla, S.A.U", - "Centro Neuropsiquiátrico Nuestra Señora Del Carmen", - "Hospital Quironsalud Zaragoza", - "Clínica Nuestra Señora Del Pilar", - "Hospital General De La Defensa De Zaragoza", - "Hospital Ernest Lluch Martin", - "Unidad De Rehabilitacion De Larga Estancia", - "Unidad Rehabilitadora De Media Estancia Profesor Rey Ardid", - "Hospital De Rehabilitacion Psiquiatrica Prisma", - "Centro Sanitario Cinco Villas", - "Hospital Viamed Montecanal", + "Hospital Ruber Internacional", + "Hospital Ruber Juan Bravo", + "Hospital Sagrado Corazon De Jesus", + "Hospital San Agustin", + "Hospital San Camilo", + "Hospital San Carlos De Denia Grupo Hla", + "Hospital San Carlos De San Fernando", + "Hospital San Eloy", + "Hospital San Francisco De Asis", + "Hospital San Jose", + "Hospital San Jose Solimat", + "Hospital San Juan De Dios", + "Hospital San Juan De Dios Burgos", + "Hospital San Juan De Dios De Cordoba", + "Hospital San Juan De Dios De Sevilla", + "Hospital San Juan De Dios Del Aljarafe", + "Hospital San Juan De Dios Donostia", + "Hospital San Juan De Dios Leon", + "Hospital San Juan De Dios Tenerife", + "Hospital San Juan De La Cruz", + "Hospital San Juan Grande", + "Hospital San Lazaro", + "Hospital San Pedro De Alcantara", + "Hospital San Rafael", + "Hospital San Roque De Guia", + "Hospital San Telmo ,Complejo Asistencial Universitario De Palencia", + "Hospital Sanitas Cima", + "Hospital Sant Antoni Abat - Consorci Sanitari Del Garraf.", + "Hospital Sant Joan De Deu", + "Hospital Sant Joan De Deu Inca", + "Hospital Sant Joan De Deu Lleida", + "Hospital Sant Vicent Del Raspeig", + "Hospital Santa Ana", + "Hospital Santa Barbara", + "Hospital Santa Barbara ,Complejo Asistencial De Soria", + "Hospital Santa Caterina-Ias", + "Hospital Santa Clotilde", + "Hospital Santa Isabel Complejo Asistencial Universitario De Leon", + "Hospital Santa Maria", + "Hospital Santa Maria Del Rosell", + "Hospital Santa Marina", + "Hospital Santa Teresa", + "Hospital Santiago Apostol", + "Hospital Santos Reyes", + "Hospital Siberia-Serena", + "Hospital Sierrallana", + "Hospital Sociosanitari De Lloret De Mar", + "Hospital Sociosanitari De Mollet", + "Hospital Sociosanitari Francoli", + "Hospital Sociosanitari Mutuam Girona", + "Hospital Sociosanitari Mutuam Guell", + "Hospital Sociosanitari Pere Virgili", + "Hospital Son Llatzer", + "Hospital Tierra De Barros", + "Hospital Universitari Arnau De Vilanova De Lleida", + "Hospital Universitari De Bellvitge", + "Hospital Universitari De Girona Dr. Josep Trueta", + "Hospital Universitari De Sant Joan De Reus", + "Hospital Universitari De Vic", + "Hospital Universitari General De Catalunya", + "Hospital Universitari Germans Trias I Pujol De Badalona", + "Hospital Universitari Joan Xxiii De Tarragona", + "Hospital Universitari Mutua De Terrassa", + "Hospital Universitari Quir¿N Dexeus", + "Hospital Universitari Sagrat Cor", + "Hospital Universitari Son Espases", + "Hospital Universitari Vall D'Hebron", + "Hospital Universitario 12 De Octubre", + "Hospital Universitario Araba (Sede Txagorritxu Y Sede Santiago)", + "Hospital Universitario Basurto", + "Hospital Universitario Central De Asturias", + "Hospital Universitario Clinico San Carlos", + "Hospital Universitario Clinico San Cecilio", + "Hospital Universitario Costa Del Sol", + "Hospital Universitario Cruces", + "Hospital Universitario De Badajoz", + "Hospital Universitario De Burgos Complejo Asistencial Univer. De Burgos", + "Hospital Universitario De Cabueñes", + "Hospital Universitario De Caceres", + "Hospital Universitario De Canarias", "Hospital Universitario De Ceuta", - "Hospital Comarcal de Melilla", + "Hospital Universitario De Fuenlabrada", + "Hospital Universitario De Getafe", + "Hospital Universitario De Gran Canaria Dr. Negrin", + "Hospital Universitario De Guadalajara", + "Hospital Universitario De Jaen", + "Hospital Universitario De Jerez De La Frontera", + "Hospital Universitario De La Linea De La Concepcion", + "Hospital Universitario De La Plana", + "Hospital Universitario De La Princesa", + "Hospital Universitario De La Ribera", + "Hospital Universitario De Mostoles", + "Hospital Universitario De Navarra", + "Hospital Universitario De Poniente", + "Hospital Universitario De Puerto Real", + "Hospital Universitario De Salamanca ,Complejo Asistencial Universitario De", + "Hospital Universitario De Salud Mental Juan Carlos I", + "Hospital Universitario De Toledo (Hut)", + "Hospital Universitario De Torrejon", + "Hospital Universitario De Torrevieja", + "Hospital Universitario Del Henares", + "Hospital Universitario Del Sureste", + "Hospital Universitario Del Tajo", + "Hospital Universitario Donostia", + "Hospital Universitario Dr. Jose Molina Orosa", + "Hospital Universitario Dr. Peset Aleixandre", + "Hospital Universitario Fundacion Alcorcon", + "Hospital Universitario Fundacion Jimenez Diaz", + "Hospital Universitario General De La Palma", + "Hospital Universitario Hm Madrid", + "Hospital Universitario Hm Monteprincipe", + "Hospital Universitario Hm Puerta Del Sur", + "Hospital Universitario Hm Sanchinarro", + "Hospital Universitario Hm Torrelodones", + "Hospital Universitario Hospiten Bellevue", + "Hospital Universitario Hospiten Rambla", + "Hospital Universitario Hospiten Sur", + "Hospital Universitario Infanta Cristina", + "Hospital Universitario Infanta Elena", + "Hospital Universitario Infanta Leonor", + "Hospital Universitario Infanta Sofia", + "Hospital Universitario Jose Germain", + "Hospital Universitario Juan Ramon Jimenez", + "Hospital Universitario La Moraleja", + "Hospital Universitario La Paz", + "Hospital Universitario La Zarzuela", + "Hospital Universitario Lucus Augusti", + "Hospital Universitario Marques De Valdecilla", + "Hospital Universitario Miguel Servet", + "Hospital Universitario Nuestra Señora De Candelaria", + "Hospital Universitario Nuestra Señora Del Perpetuo Socorro", + "Hospital Universitario Principe De Asturias", + "Hospital Universitario Puerta De Hierro Majadahonda", + "Hospital Universitario Puerta Del Mar", + "Hospital Universitario Quironsalud Madrid", + "Hospital Universitario Ramon Y Cajal", + "Hospital Universitario Regional De Malaga", + "Hospital Universitario Reina Sofia", + "Hospital Universitario Rio Hortega", + "Hospital Universitario San Agustin", + "Hospital Universitario San Jorge", + "Hospital Universitario San Juan De Alicante", + "Hospital Universitario San Pedro", + "Hospital Universitario San Roque Las Palmas", + "Hospital Universitario San Roque Maspalomas", + "Hospital Universitario Santa Cristina", + "Hospital Universitario Severo Ochoa", + "Hospital Universitario Torrecardenas", + "Hospital Universitario Vinalopo", + "Hospital Universitario Virgen De La Victoria", + "Hospital Universitario Virgen De Las Nieves", + "Hospital Universitario Virgen De Valme", + "Hospital Universitario Virgen Del Rocio", + "Hospital Universitario Virgen Macarena", + "Hospital Universitario Vithas Las Palmas", + "Hospital Universitario Y Politecnico La Fe", + "Hospital Urduliz Ospitalea", + "Hospital Valle De Guadalhorce De Cartama", + "Hospital Valle De Laciana", + "Hospital Valle De Los Pedroches", + "Hospital Valle Del Nalon", + "Hospital Vazquez Diaz", + "Hospital Vega Baja De Orihuela", + "Hospital Viamed Bahia De Cadiz", + "Hospital Viamed Montecanal", + "Hospital Viamed Novo Sancti Petri", + "Hospital Viamed San Jose", + "Hospital Viamed Santa Angela De La Cruz", + "Hospital Viamed Santa Elena, S.L", + "Hospital Viamed Santiago", + "Hospital Viamed Tarragona", + "Hospital Victoria Eugenia De La Cruz Roja Española", + "Hospital Virgen De Altagracia", + "Hospital Virgen De La Bella", + "Hospital Virgen De La Concha Complejo Asistencial De Zamora", + "Hospital Virgen De La Luz", + "Hospital Virgen De La Torre", + "Hospital Virgen De Las Montañas", + "Hospital Virgen De Los Lirios", + "Hospital Virgen Del Alcazar De Lorca", + "Hospital Virgen Del Camino", + "Hospital Virgen Del Castillo", + "Hospital Virgen Del Mar", + "Hospital Virgen Del Miron ,Complejo Asistencial De Soria", + "Hospital Virgen Del Puerto", + "Hospital Vital Alvarez Buylla", + "Hospital Vithas Castellon", + "Hospital Vithas Granada", + "Hospital Vithas Parque San Antonio", + "Hospital Vithas Sevilla", + "Hospital Vithas Valencia Consuelo", + "Hospital Vithas Vitoria", + "Hospital Vithas Xanit Estepona", + "Hospital Vithas Xanit Internacional", + "Hospiten Clinica Roca San Agustin", + "Hospiten Lanzarote", + "Idcsalud Mostoles Sa", + "Imed Valencia", + "Institut Catala D'Oncologia - Hospital Duran I Reynals", + "Institut Catala D'Oncologia - Hospital Germans Trias I Pujol", + "Institut Catala D'Oncologia Girona - Hospital Josep Trueta", + "Institut Guttmann", + "Institut Pere Mata, S.A", + "Instituto De Enfermedades Neurologicas De Castilla-La Mancha", + "Instituto De Salud Carlos Iii - Centro Nacional De Microbiologia", + "Instituto De Traumatologia De Union De Mutuas (Matepss Nº 267)", + "Instituto Oftalmologico Fernandez-Vega", + "Instituto Provincial De Rehabilitacion", + "Instituto Tecnológico y de Energías Renovables, S.A. (ITER, S.A.)", + "Ita Canet", + "Ita Clinic Bcn", + "Ita Godella", + "Ita Maresme", + "Ivan Mañero Clinic", + "Juaneda Miramar", + "Lab Clínic ICS Camp de Tarragona-Terres de l'Ebre. Hospital Joan XXIII", + "Laboratori De Referencia De Catalunya", + "Laboratorio Echevarne, Sa", + "Lepant Residencial Qgg, Sl", + "Microbiología HUC San Cecilio", + "Microbiología. Hospital Universitario Virgen del Rocio", + "Ministerio Sanidad", + "Mutua Balear", + "Mutua De Granollers, Mutua De Previsio Social A Prima Fixa", + "Mutualia Clinica Pakea", + "Nou Hospital Evangelic", + "Organizacion Sanitaria Integrada Debagoiena", + "Parc Sanitari Sant Joan De Deu - Numancia", + "Parc Sanitari Sant Joan De Deu - Recinte Sant Boi.", + "Parc Sanitari Sant Joan De Deu - Til·Lers", + "Parc Sanitari Sant Joan De Deu - Uhpp - 1", + "Parc Sanitari Sant Joan De Deu - Uhpp - 2", + "Pius Hospital De Valls", + "Plataforma de Genómica y Bioinformática", + "Plataforma de Medicina Computacional, Fundación Progreso y Salud", + "Policlinica Comarcal Del Vendrell.", + "Policlinica Gipuzkoa", + "Policlinica Nuestra Sra. Del Rosario", + "Policlinico Riojano Nuestra Señora De Valvanera", "Presidencia del Gobierno", - "Ministerio Sanidad" + "Prytanis Hospitalet Centre Sociosanitari", + "Prytanis Sant Boi Centre Sociosanitari", + "Quinta Medica De Reposo", + "Red De Salud Mental De Araba (Hospital Psiquiatrico De Araba)", + "Residencia Alt Camp", + "Residencia De Gent Gran Puig D'En Roca", + "Residencia De Salud Mental Nuestra Se?Ora Del Carmen", + "Residencia Geriatrica Maria Gay", + "Residencia L'Estada", + "Residencia Puig-Reig", + "Residencia Santa Susanna", + "Residencia Santa Tecla Ponent", + "Residencia Terraferma", + "Residencia Vila-Seca", + "Ribera Hospital De Molina", + "Ronda De Dalt, Centre Sociosanitari", + "Sanatorio Bilbaino", + "Sanatorio Dr. Muñoz", + "Sanatorio Esquerdo, S.A.", + "Sanatorio Nuestra Señora Del Rosario", + "Sanatorio Sagrado Corazon", + "Sanatorio San Francisco De Borja Fontilles", + "Sanatorio Usurbil, S. L.", + "Santo Y Real Hospital De Caridad", + "Sar Mont Marti", + "Serveis Clinics, S.A.", + "Servicio Madrileño De Salud", + "Servicio de Microbiologia HU Son Espases", + "Servicios Sanitarios Y Asistenciales", + "U.R.R. De Enfermos Psiquicos Alcohete", + "Unidad De Rehabilitacion De Larga Estancia", + "Unidad Rehabilitadora De Media Estancia Profesor Rey Ardid", + "Unidades Clinicas Y De Rehabilitacion De Salud Mental", + "Unitat Polivalent Benito Menni En Salut Mental De L'Hospitalet-El Prat De Llobregat", + "Unitat Polivalent En Salut Mental D'Amposta", + "Unitat Polivalent Salut Mental Barcelona-Nord", + "Unitat Terapeutica-Educativa Acompanya'M", + "Villablanca Serveis Assistencials, Sa", + "Vithas Hospital Montserrat", + "Vithas Hospital Nosa Señora De Fatima", + "Vithas Hospital Perpetuo Internacional", + "Vithas Hospital Santa Cruz" ] }, "submitting_institution": { @@ -6911,15 +6869,19 @@ } } }, - "anyOf": [ - { - "required": [ - "all_in_one_library_kit" - ] - }, + "allOf": [ { - "required": [ - "library_preparation_kit" + "anyOf": [ + { + "required": [ + "all_in_one_library_kit" + ] + }, + { + "required": [ + "library_preparation_kit" + ] + } ] } ] diff --git a/relecov_tools/schema/relecov_schema_EQA.json b/relecov_tools/schema/relecov_schema_EQA.json new file mode 100644 index 00000000..b1a05566 --- /dev/null +++ b/relecov_tools/schema/relecov_schema_EQA.json @@ -0,0 +1,1665 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://github.com/BU-ISCIII/relecov-tools/blob/main/relecov_tools/schema/relecov_schema.json", + "title": "relecov-tools Schema.", + "description": "Json Schema that specifies the structure, content, and validation rules for relecov-tools", + "version": "1.0.0", + "type": "object", + "properties": { + "organism": { + "enum": [ + "Severe acute respiratory syndrome coronavirus 2 [LOINC:LA31065-8]", + "Influenza virus [SNOMED:725894000]" + ], + "examples": [ + "Severe acute respiratory syndrome coronavirus 2 [NCBITaxon:2697049]" + ], + "ontology": "SNOMED:410607006", + "type": "string", + "description": "Taxonomic species name of the organism.", + "classification": "Sample collection and processing", + "label": "Organism", + "fill_mode": "batch", + "header": "Y" + }, + "collecting_lab_sample_id": { + "examples": [ + "1197677" + ], + "ontology": "GENEPIO:0001123", + "type": "string", + "description": "Sample ID provided by the laboratory that collects the sample.", + "classification": "Database Identifiers", + "label": "Sample ID given by originating laboratory", + "fill_mode": "sample", + "header": "Y" + }, + "sample_received_date": { + "examples": [ + "2021-05-13" + ], + "ontology": "SNOMED:281271004", + "type": "string", + "format": "date", + "description": "The date on which the sample was received. YYYY-MM-DD", + "classification": "Sample collection and processing", + "label": "Sample Received Date", + "fill_mode": "sample", + "header": "N" + }, + "enrichment_protocol": { + "classification": "Sequencing", + "description": "Type of enrichment protocol", + "enum": [ + "Amplicon [GENEPIO:0001974]", + "Probes [OMIT:0016121]", + "Custom probes [OMIT:0016112]", + "Custom amplicon [OMIT:0016112]" + ], + "examples": [ + "Amplicon" + ], + "fill_mode": "batch", + "header": "Y", + "label": "Enrichment Protocol", + "ontology": "EFO_0009089", + "type": "string" + }, + "enrichment_panel": { + "enum": [ + "ARTIC", + "Exome 2.5", + "Illumina respiratory Virus Oligo Panel", + "Illumina AmpliSeq Community panel", + "Illumina AmpliSeq SARS-CoV-2 Research Panel for Illumina", + "Illumina FluA/B", + "Ion AmpliSeq SARS-CoV-2 Research Panel", + "xGen SC2 Midnight1200 Amplicon Panel", + "Oxford Nanopore Technologies Midnight Amplicon Panel", + "ViroKey SQ FLEX SARS-CoV-2 Primer Set", + "NEBNext VarSkip Short SARS-CoV-2 primers", + "Illumina Microbial Amplicon Prep-Influenza A/B", + "Illumina Respiratory Pathogen ID/AMR Enrichment Panel", + "Illumina Viral Surveillance Panel v2", + "Twist Bioscience Respiratory Virus Research Panel", + "Universal Influenza A primers (Zhou 2012 protocol)", + "Universal Influenza B primers (Zhou 2014 protocol)", + "Zhou 2009 single-reaction genomic amplification (in-silico)", + "CommonUni12/13 universal primers (Van den Hoecke 2015)", + "No Enrichment" + ], + "examples": [ + "ARTIC" + ], + "ontology": "NGBO:6000323", + "type": "string", + "description": "Commercial or custom panel/assay used for enrichment.", + "classification": "Sequencing", + "label": "Enrichment panel/assay", + "fill_mode": "batch", + "header": "Y" + }, + "enrichment_panel_version": { + "enum": [ + "ARTIC v1", + "ARTIC v2", + "ARTIC v3", + "ARTIC v4", + "ARTIC v4.1", + "ARTIC v4.2", + "ARTIC v4.3", + "ARTIC v4.4", + "ARTIC v4.5", + "ARTIC v4.6", + "ARTIC v4.7", + "ARTIC v4.8", + "ARTIC v4.9", + "ARTIC v4.10", + "ARTIC v5", + "ARTIC v5.1", + "ARTIC v5.2", + "ARTIC v5.3", + "ARTIC v5.3.2", + "Illumina AmpliSeq Community panel", + "Illumina AmpliSeq SARS-CoV-2 Research Panel for Illumina", + "Illumina Respiratory Virus Oligos Panel V1", + "Illumina Respiratory Virus Oligos Panel V2", + "Ion AmpliSeq SARS-CoV-2 Insight", + "xGen SC2 Midnight1200 Amplicon Panel", + "Midnight Amplicon Panel v1", + "Midnight Amplicon Panel v2", + "Midnight Amplicon Panel v3", + "ViroKey SQ FLEX SARS-CoV-2 Primer Set", + "NEBNext VarSkip Short SARS-CoV-2 primers", + "Illumina Viral Surveillance Panel v2", + "Zhou 2009 single-reaction genomic amplification (in-silico) v1.0", + "CommonUni12/13 universal primers (Van den Hoecke 2015) v1.0" + ], + "examples": [ + "ARTIC v4" + ], + "ontology": "0", + "type": "string", + "description": "Version fo the enrichment panel", + "classification": "Sequencing", + "label": "Enrichment panel/assay version", + "fill_mode": "batch", + "header": "Y" + }, + "library_layout": { + "enum": [ + "Single-end [OBI:0002481]", + "Paired-end [OBI:0001852]" + ], + "examples": [ + "Single-end" + ], + "ontology": "NCIT:C175894", + "type": "string", + "description": "Single or paired sequencing configuration", + "classification": "Sequencing", + "label": "Library Layout", + "fill_mode": "batch", + "header": "Y" + }, + "sequence_file_R1": { + "examples": [ + "ABC123_S1_L001_R1_001.fastq.gz" + ], + "ontology": "GENEPIO:0001476", + "type": "string", + "description": "A data field which describes the user-specified filename of the read 1 (r1) file.", + "classification": "Bioinformatics and QC metrics fields", + "label": "Sequence file R1", + "fill_mode": "sample", + "header": "Y" + }, + "sequence_file_R2": { + "examples": [ + "ABC123_S1_L001_R2_002.fastq.gz" + ], + "ontology": "GENEPIO:0001477", + "type": "string", + "description": "A data field which describes the user-specified filename of the read 2 (r2) file. ", + "classification": "Bioinformatics and QC metrics fields", + "label": "Sequence file R2", + "fill_mode": "sample", + "header": "Y" + }, + "sequence_file_R1_md5": { + "examples": [ + "b5242d60471e5a5a97b35531dbbe8c30" + ], + "ontology": "NCIT:C171276", + "type": "string", + "description": "Checksum md5 value to validate successful file transmission in R1.", + "classification": "Bioinformatics and QC metrics fields", + "label": "Sequence fastq R1 md5", + "fill_mode": "sample", + "header": "N" + }, + "sequence_file_R2_md5": { + "examples": [ + "b5242d60471e5a5a97b35531dbbe8c30" + ], + "ontology": "NCIT:C171276", + "type": "string", + "description": "Checksum md5 value to validate successful file transmission in R2.", + "classification": "Bioinformatics and QC metrics fields", + "label": "Sequence fastq R2 md5", + "fill_mode": "sample", + "header": "N" + }, + "sequence_file_path_R1": { + "examples": [ + "/User/Documents/RespLab/Data/" + ], + "ontology": "GENEPIO:0001478", + "type": "string", + "description": "The filepath of the r1 file.", + "classification": "Files info", + "label": "Filepath R1", + "fill_mode": "batch", + "header": "N" + }, + "sequence_file_path_R2": { + "examples": [ + "/User/Documents/RespLab/Data/" + ], + "ontology": "GENEPIO:0001479", + "type": "string", + "description": "The filepath of the r2 file.", + "classification": "Files info", + "label": "Filepath R2", + "fill_mode": "batch", + "header": "N" + }, + "batch_id": { + "examples": [ + "20250506140633" + ], + "ontology": "NCIT:C104504", + "type": "string", + "description": "Unique identifier for each analysis batch.", + "classification": "Sample collection and processing", + "label": "Batch identifier", + "fill_mode": "batch", + "header": "N" + }, + "file_format": { + "examples": [ + "BAM,CRAM,FASTQ" + ], + "ontology": "MS:1001459", + "enum": [ + "BAM [EDAM:2572]", + "CRAM [EDAM:3462]", + "FASTQ [EDAM:1930]", + "FASTA [EDAM:1929]", + "Not Provided [SNOMED:434941000124101]" + ], + "type": "string", + "description": "The run data file model.", + "classification": "Files info", + "label": "File format", + "fill_mode": "batch", + "header": "N" + }, + "sequencing_instrument_platform": { + "enum": [ + "Oxford Nanopore [OBI:0002750]", + "Illumina [OBI:0000759]", + "Ion Torrent [GENEPIO:0002683]", + "PacBio [GENEPIO:0001927]", + "BGI [GENEPIO:0004324]", + "MGI [GENEPIO:0004325]" + ], + "examples": [ + "Illumina" + ], + "ontology": "GENEPIO:0000071", + "type": "string", + "description": "A sequencing plaform (brand) is a name of a company that produces sequencer equipment.", + "classification": "Sequencing", + "label": "Sequencing Instrument Platform", + "fill_mode": "batch", + "header": "Y" + }, + "sequencing_instrument_model": { + "enum": [ + "Illumina sequencing instrument [GENEPIO:0100105]", + "Illumina Genome Analyzer [GENEPIO:0100106]", + "Illumina Genome Analyzer II [OBI:0000703]", + "Illumina Genome Analyzer IIx [OBI:0002000]", + "Illumina HiScanSQ [GENEPIO:0100109]", + "Illumina HiSeq [GENEPIO:0100110]", + "Illumina HiSeq X [GENEPIO:0100111]", + "Illumina HiSeq X Five [GENEPIO:0100112]", + "Illumina HiSeq X Ten [GENEPIO:0100113]", + "Illumina HiSeq 1000 [OBI:0002022]", + "Illumina HiSeq 1500 [GENEPIO:0100115]", + "Illumina HiSeq 2000 [OBI:0002001]", + "Illumina HiSeq 2500 [OBI:0002002]", + "Illumina HiSeq 3000 [OBI:0002048]", + "Illumina HiSeq 4000 [OBI:0002049]", + "Illumina iSeq [GENEPIO:0100120]", + "Illumina iSeq 100 [GENEPIO:0100121]", + "Illumina NovaSeq [GENEPIO:0100122]", + "Illumina NovaSeq 6000 [GENEPIO:0100123]", + "Illumina MiniSeq [GENEPIO:0100124]", + "Illumina MiSeq [OBI:0002003]", + "Illumina NextSeq [GENEPIO:0100126]", + "Illumina NextSeq 500 [OBI:0002021]", + "Illumina NextSeq 550 [GENEPIO:0100128]", + "Illumina NextSeq 1000 [OBI:0003606]", + "Illumina NextSeq 2000 [GENEPIO:0100129]", + "Illumina NextSeq 6000", + "Ion GeneStudio S5 Prime", + "Ion GeneStudio S5 Plus", + "Ion GeneStudio S5", + "Ion Torrent sequencing instrument [GENEPIO:0100135]", + "Ion Torrent Genexus", + "Ion Torrent PGM [GENEPIO:0100136]", + "Ion Torrent Proton [GENEPIO:0100137]", + "Ion Torrent S5 [GENEPIO:0100139]", + "Ion Torrent S5 XL [GENEPIO:0100138]", + "MinION [GENEPIO:0100142]", + "GridION [GENEPIO:0100141]", + "PromethION [GENEPIO:0100143]", + "Pacific Biosciences sequencing instrument [GENEPIO:0100130]", + "PacBio RS [GENEPIO:0100131]", + "PacBio RS II [OBI:0002012]", + "PacBio Sequel [GENEPIO:0100133]", + "PacBio Sequel II [GENEPIO:0100134]", + "Oxford Nanopore sequencing instrument [GENEPIO:0100140]", + "Oxford Nanopore GridION [GENEPIO:0100141]", + "Oxford Nanopore MinION [GENEPIO:0100142]", + "Oxford Nanopore PromethION [GENEPIO:0100143]", + "AB 310 Genetic Analyzer", + "AB 3130 Genetic Analyzer", + "AB 3130xL Genetic Analyzer", + "AB 3500 Genetic Analyzer", + "AB 3500xL Genetic Analyzer", + "AB 3730 Genetic Analyzer", + "AB 3730xL Genetic Analyzer", + "AB SOLID System [OBI:0000696]", + "AB SOLID System 2.0 [EFO:0004442]", + "AB SOLID System 3.0 [EFO:0004439]", + "AB SOLID 3 Plus System [OBI:0002007]", + "AB SOLID 4 System [EFO:0004438]", + "AB SOLID 4hq System [AB SOLID 4hq System]", + "AB SOLID PI System [EFO:0004437]", + "AB. 5500 Genetic Analyzer", + "AB 5500xl Genetic Analyzer", + "AB 5500xl-W Genetic Analysis System", + "BGI Genomics sequencing instrument [GENEPIO:0100144]", + "BGISEQ-500 [GENEPIO:0100145]", + "BGISEQ-50", + "DNBSEQ-T7 [GENEPIO:0100147]", + "DNBSEQ-G400 [GENEPIO:0100148]", + "DNBSEQ-G400 FAST [GENEPIO:0100149]", + "MGI sequencing instrument [GENEPIO:0100146]", + "MGISEQ-2000RS", + "MGI DNBSEQ-T7 [GENEPIO:0100147]", + "MGI DNBSEQ-G400 [GENEPIO:0100148]", + "MGI DNBSEQ-G400RS FAST [GENEPIO:0100149]", + "MGI DNBSEQ-G50 [GENEPIO:0100150]", + "454 GS [EFO:0004431]", + "454 GS 20 [EFO:0004206]", + "454 GS FLX + [EFO:0004432]", + "454 GS FLX Titanium [EFO:0004433]", + "454 GS FLX Junior [GENEPIO:0001938]", + "Not Applicable [SNOMED:385432009]", + "Not Collected [LOINC:LA4700-6]", + "Not Provided [SNOMED:434941000124101]", + "Missing [LOINC:LA14698-7]", + "Restricted Access [GENEPIO:0001810]" + ], + "examples": [ + "Illumina NextSeq 550" + ], + "ontology": "GENEPIO:0001452", + "type": "string", + "description": "The model of the sequencing instrument used.", + "classification": "Sequencing", + "label": "Sequencing Instrument Model", + "fill_mode": "batch", + "header": "Y" + }, + "read_length": { + "examples": [ + "75" + ], + "ontology": "NCIT:C153362", + "type": "integer", + "minimum": 0, + "maximum": 20000, + "description": "Number of base pairs per read", + "classification": "Sequencing", + "label": "Read length", + "fill_mode": "batch", + "header": "Y" + }, + "fragment_size": { + "examples": [ + "75" + ], + "ontology": "NCIT:C153362", + "type": "integer", + "description": "The number of nucleotides successfully ordered from each side of a nucleic acid fragment obtained after the completion of a sequencing process.", + "classification": "Sequencing", + "label": "Fragment size", + "fill_mode": "batch", + "header": "N" + }, + "submitting_institution_id": { + "enum": [ + "COD-2401", + "COD-2402", + "COD-2403", + "COD-2404", + "COD-2405", + "COD-2406", + "COD-2407", + "COD-2408", + "COD-2409", + "COD-2410", + "COD-2411", + "COD-2412", + "COD-2413", + "COD-2414", + "COD-2415", + "COD-2417", + "COD-2418", + "COD-2419", + "COD-2421", + "COD-2422", + "COD-2423", + "COD-2424", + "COD-2425", + "COD-2426", + "COD-2427", + "COD-2428", + "COD-2429", + "COD-2430", + "COD-2431", + "COD-2432", + "COD-2433", + "COD-2434", + "COD-2435", + "COD-2436", + "COD-2437", + "COD-2438", + "COD-2439", + "COD-2440", + "COD-2441", + "COD-2442", + "COD-2443", + "COD-2444", + "COD-2445", + "COD-2446", + "COD-2447", + "COD-2448", + "COD-2449", + "COD-2450", + "COD-2451", + "COD-2452", + "COD-2453", + "COD-2454", + "COD-2455", + "COD-2456", + "COD-2458", + "COD-2459", + "COD-2460" + ], + "examples": [ + "COD-1111-BU" + ], + "ontology": "NCIT:C81294", + "type": "string", + "description": "The Institution identifier that is submitting data or information.", + "classification": "Sample collection and processing", + "label": "Submitting Institution Identifier", + "fill_mode": "batch", + "header": "Y" + }, + "bioinformatics_analysis_date": { + "examples": [ + "2022-07-15 00:00:00" + ], + "ontology": "OBI:0002471", + "type": "string", + "format": "date", + "description": "The time of a sample analysis process YYYY-MM-DD", + "classification": "Bioinformatics and QC metrics fields", + "label": "processing_date", + "fill_mode": "batch", + "header": "Y" + }, + "dehosting_method_software_name": { + "enum": [ + "BMTagger", + "Kraken2", + "NCBI Human Read Scrubber", + "Centrifuge", + "bowtie2", + "DeconSeq", + "BWA-Mem", + "Custom host removal script" + ], + "examples": [ + "Kraken2" + ], + "ontology": "GENEPIO:0001459", + "type": "string", + "description": "The method used to remove host reads from the pathogen sequence.", + "classification": "Bioinformatic Analysis fields", + "label": "Dehosting Method", + "fill_mode": "batch", + "header": "Y" + }, + "dehosting_method_software_version": { + "examples": [ + "2.4.1" + ], + "ontology": "LOINC:LA20883-7", + "type": "string", + "description": "The method version used to remove host reads from the pathogen sequence.", + "classification": "Bioinformatic Analysis fields", + "label": "Dehosting Method Version", + "fill_mode": "batch", + "header": "Y" + }, + "reference_genome_accession": { + "examples": [ + "NC_045512.2" + ], + "ontology": "GENEPIO:0001485", + "type": "string", + "description": "A persistent, unique identifier of a genome database entry. If entering multiple entries, separate them with commas.", + "classification": "Bioinformatics and QC metrics fields", + "label": "Reference genome accession", + "fill_mode": "batch", + "header": "Y" + }, + "bioinformatics_protocol_software_name": { + "enum": [ + "nf-core/viralrecon", + "IRMA", + "DRAGEN COVID Lineage", + "DRAGEN Targeted Microbial", + "Ion Torrent Suite", + "SeqCovid", + "DeepChek", + "Influenza virus NGS Analysis", + "INSaFLU", + "Artic pipeline", + "Custom pipeline/workflow" + ], + "examples": [ + "https://www.protocols.io/groups/cphln-sarscov2-sequencing-consortium/members" + ], + "ontology": "GENEPIO:0001489", + "type": "string", + "description": "The name of the bioinformatics protocol used.", + "classification": "Bioinformatic Analysis fields", + "label": "Bioinformatics protocol", + "fill_mode": "batch", + "header": "Y" + }, + "if_bioinformatic_protocol_is_other_specify": { + "examples": [ + "https://www.protocols.io/groups/cphln-sarscov2-sequencing-consortium/members" + ], + "ontology": "0", + "type": "string", + "description": "The name of the bioinformatics protocol used if other.", + "classification": "Bioinformatic Analysis fields", + "label": "If bioinformatics protocol Is Other, Specify", + "fill_mode": "batch", + "header": "N" + }, + "bioinformatics_protocol_software_version": { + "examples": [ + "https://www.protocols.io/groups/cphln-sarscov2-sequencing-consortium/members" + ], + "ontology": "LOINC:LA20883-7", + "type": "string", + "description": "The version number of the bioinformatics protocol used.", + "classification": "Bioinformatic Analysis fields", + "label": "Bioinformatics protocol version", + "fill_mode": "batch", + "header": "Y" + }, + "commercial_open_source_both": { + "enum": [ + "Commercial [SWO:1000002]", + "Open Source [SWO:1000008]", + "Both" + ], + "examples": [ + "Commercial" + ], + "ontology": "0", + "type": "string", + "description": "If bioinformatics protocol used was open-source or commercial", + "classification": "Bioinformatic Analysis fields", + "label": "Commercial/Open-source/both", + "fill_mode": "batch", + "header": "Y" + }, + "preprocessing_software_name": { + "enum": [ + "Torrent BaseCaller", + "Fastp", + "Trimmomatic", + "IRMA custom script", + "Ion Torrent Suite", + "BBduk", + "cutadapt", + "skewer", + "FASTX-Toolkit", + "NanoFilt", + "FiltLong", + "SOAPnuke", + "Trim Galore", + "Nanocorrect", + "PoreSeq", + "NaS", + "NanoPack", + "Porechop", + "Custom preprocessing script" + ], + "examples": [ + "Fastp" + ], + "ontology": "MS_1002386", + "type": "string", + "description": "Software used for preprocessing step.", + "classification": "Bioinformatic Analysis fields", + "label": "Preprocessing software", + "fill_mode": "batch", + "header": "Y" + }, + "preprocessing_software_version": { + "examples": [ + "v5.3.1" + ], + "ontology": "LOINC:LA20883-7", + "type": "string", + "description": "Version of the preprocessing software used.", + "classification": "Bioinformatic Analysis fields", + "label": "Preprocessing software version", + "fill_mode": "batch", + "header": "Y" + }, + "if_preprocessing_other": { + "examples": [ + "Seqtk" + ], + "ontology": "MS_1002386", + "type": "string", + "description": "Preprocessing software name if other", + "classification": "Bioinformatic Analysis fields", + "label": "If preprocessing Is Other, Specify", + "fill_mode": "batch", + "header": "N" + }, + "preprocessing_params": { + "examples": [ + "--cut_mean_quality 30" + ], + "ontology": "NCIT:C44175", + "type": "string", + "description": "The parameters and settings used to perform preprocessing analysis.", + "classification": "Bioinformatic Analysis fields", + "label": "Preprocessing params", + "fill_mode": "batch", + "header": "Y" + }, + "mapping_software_name": { + "enum": [ + "bwa mem", + "bwa align", + "minimap2", + "bowtie2", + "tmap", + "BLAT", + "BBmap", + "HISAT2", + "KMA", + "GraphMap", + "NGMLR", + "marginAlign", + "Custom mapping script" + ], + "examples": [ + "bowtie2" + ], + "ontology": "NCIT:C175896", + "type": "string", + "description": "Software used for mapping step.", + "classification": "Bioinformatic Analysis fields", + "label": "Mapping software", + "fill_mode": "batch", + "header": "Y" + }, + "mapping_software_version": { + "examples": [ + "v7.0.1" + ], + "ontology": "LOINC:LA20883-7", + "type": "string", + "description": "Version of the mapper used.", + "classification": "Bioinformatic Analysis fields", + "label": "Mapping software version", + "fill_mode": "batch", + "header": "Y" + }, + "if_mapping_other": { + "examples": [ + "Mosaik" + ], + "ontology": "0", + "type": "string", + "description": "Mapping software used if other", + "classification": "Bioinformatic Analysis fields", + "label": "If mapping Is Other, Specify", + "fill_mode": "batch", + "header": "N" + }, + "mapping_params": { + "examples": [ + "--seed 1" + ], + "ontology": "NCIT:C44175", + "type": "string", + "description": "Parameters used for mapping step.", + "classification": "Bioinformatic Analysis fields", + "label": "Mapping params", + "fill_mode": "batch", + "header": "Y" + }, + "assembly": { + "enum": [ + "LABEL", + "SPAdes", + "viralSPAdes", + "Unicycler", + "AssemblerSPAdes plugin", + "Velvet", + "Trinity", + "Megahit", + "Trans-ABySS", + "Canu", + "Miniasm", + "Vicuna", + "SAVAGE", + "PEHaplo", + "SOAPdenovo", + "Custom assembly script" + ], + "examples": [ + "SPAdes" + ], + "ontology": "GENEPIO:0000090", + "type": "string", + "description": "Software used for assembly of the pathogen genome.", + "classification": "Bioinformatic Analysis fields", + "label": "Assembly software", + "fill_mode": "batch", + "header": "Y" + }, + "assembly_version": { + "examples": [ + "v3.1" + ], + "ontology": "NCIT:C164455", + "type": "string", + "description": "Version of the software used for assembly of the pathogen genome.", + "classification": "Bioinformatic Analysis fields", + "label": "Assembly software version", + "fill_mode": "batch", + "header": "Y" + }, + "if_assembly_other": { + "examples": [ + "ABySS" + ], + "ontology": "0", + "type": "string", + "description": "Assembly software used if other", + "classification": "Bioinformatic Analysis fields", + "label": "If assembly Is Other, Specify", + "fill_mode": "batch", + "header": "N" + }, + "assembly_params": { + "examples": [ + "-k 127,56,27" + ], + "ontology": "NCIT:C44175", + "type": "string", + "description": "The parameters and settings used to perform genome assembly.", + "classification": "Bioinformatic Analysis fields", + "label": "Assembly params", + "fill_mode": "batch", + "header": "Y" + }, + "bioinfo_metadata_file": { + "examples": [ + "bioinfo_lab_metadata_COD-1111-BU_20250506140633_3C412C.json" + ], + "ontology": "CAO:000237", + "type": "string", + "description": "Bioinfo JSON with metadata information", + "classification": "Bioinformatic Analysis fields", + "label": "Bioinfo JSON", + "fill_mode": "batch", + "header": "N" + }, + "vcf_filename": { + "examples": [ + "sample_name.vcf" + ], + "ontology": "0", + "type": "string", + "description": "Name of the vcf file. If entering multiple entries, separate them with commas.", + "classification": "Bioinformatic Variants", + "label": "VCF filename", + "fill_mode": "batch", + "header": "Y" + }, + "variant_calling_software_name": { + "enum": [ + "Ivar", + "bcftools", + "lofreq", + "Medaka", + "Clair3", + "Torrent VariantCaller plugin", + "IRMA custom VariantCaller", + "DRAGEN VariantCaller", + "Nanopolish", + "freebayes", + "Custom variant calling script" + ], + "examples": [ + "Ivar" + ], + "ontology": "EDAM:operation_3227", + "type": "string", + "description": "Software used for variant calling.", + "classification": "Bioinformatic Variants", + "label": "Variant calling software", + "fill_mode": "batch", + "header": "Y" + }, + "variant_calling_software_version": { + "examples": [ + "v4.1" + ], + "ontology": "LOINC:LA20883-7", + "type": "string", + "description": "Version of the variant calling software used to generate the VCF", + "classification": "Bioinformatic Variants", + "label": "Variant calling software version", + "fill_mode": "batch", + "header": "Y" + }, + "if_variant_calling_other": { + "examples": [ + "GATK HaplotypeCaller" + ], + "ontology": "0", + "type": "string", + "description": "Specify if you have used another variant calling software", + "classification": "Bioinformatic Variants", + "label": "If variant calling Is Other, Specify", + "fill_mode": "batch", + "header": "N" + }, + "variant_calling_params": { + "examples": [ + "-t 0.5 -Q 20" + ], + "ontology": "NCIT:C44175", + "type": "string", + "description": "Params used for variant calling", + "classification": "Bioinformatic Variants", + "label": "Variant calling params", + "fill_mode": "batch", + "header": "Y" + }, + "consensus_sequence_name": { + "examples": [ + "2018086 NC_045512.2" + ], + "ontology": "GENEPIO:0001460", + "type": "string", + "description": "The name of the consensus sequence. If entering multiple entries, separate them with commas.", + "classification": "Bioinformatic Analysis fields", + "label": "Consensus sequence name", + "fill_mode": "batch", + "header": "Y" + }, + "consensus_sequence_filename": { + "examples": [ + "2018102.consensus.fa" + ], + "ontology": "GENEPIO:0001461", + "type": "string", + "description": "Filename (including extension) of the consensus/assembled genome FASTA submitted for this sample. SARS-CoV-2: submit one FASTA file containing a single consensus sequence. Influenza: submit one FASTA file per sample containing all segments as a multi-FASTA (one record per segment).", + "classification": "Bioinformatic Analysis fields", + "label": "Consensus sequence filename", + "fill_mode": "batch", + "header": "Y" + }, + "consensus_sequence_md5": { + "examples": [ + "5gaskañlkdak3143242ñlkas" + ], + "ontology": "0", + "type": "string", + "description": "The md5 of the consensus sequence.", + "classification": "Bioinformatic Analysis fields", + "label": "Consensus sequence name md5", + "fill_mode": "batch", + "header": "Y" + }, + "consensus_sequence_filepath": { + "examples": [ + "/User/Documents/RespLab/Data/ncov123assembly.fasta" + ], + "ontology": "GENEPIO:0001462", + "type": "string", + "description": "The filepath of the consensus sequence file.", + "classification": "Bioinformatic Analysis fields", + "label": "Consensus sequence filepath", + "fill_mode": "batch", + "header": "N" + }, + "long_table_path": { + "examples": [ + "/User/Documents/RespLab/ncov123_longtable.tsv" + ], + "ontology": "0", + "type": "string", + "description": "The path where the long table including all variants and annotations is.", + "classification": "Bioinformatic Analysis fields", + "label": "Long table path", + "fill_mode": "batch", + "header": "N" + }, + "consensus_sequence_software_name": { + "enum": [ + "Ivar consensus", + "bcftools consensus", + "Torrent Generateconsensus plugin", + "samtools consensus", + "Medaka consensus", + "IRMA consensus", + "DRAGEN consensus", + "Custom consensus script" + ], + "examples": [ + "Ivar" + ], + "ontology": "GENEPIO:0001463", + "type": "string", + "description": "The name of software used to generate the consensus sequence.", + "classification": "Bioinformatic Analysis fields", + "label": "Consensus software", + "fill_mode": "batch", + "header": "Y" + }, + "if_consensus_other": { + "examples": [ + "Ivar" + ], + "ontology": "0", + "type": "string", + "description": "Specify if you have used another consensus software", + "classification": "Bioinformatic Analysis fields", + "label": "If consensus Is Other, Specify", + "fill_mode": "batch", + "header": "N" + }, + "consensus_sequence_software_version": { + "examples": [ + "1.3" + ], + "ontology": "GENEPIO:0001469", + "type": "string", + "description": "The version of the software used to generate the consensus sequence.", + "classification": "Bioinformatic Analysis fields", + "label": "Consensus software version", + "fill_mode": "batch", + "header": "Y" + }, + "consensus_params": { + "examples": [ + "AF > 0.75" + ], + "ontology": "NCIT:C44175", + "type": "string", + "description": "Parameters used for consensus generation", + "classification": "Bioinformatic Analysis fields", + "label": "Consensus params", + "fill_mode": "batch", + "header": "Y" + }, + "consensus_genome_length": { + "examples": [ + "38677" + ], + "ontology": "GENEPIO:0001483", + "type": "string", + "description": "Size of the assembled genome described as the number of base pairs. For fragmented genome viruses, all segments that make up the complete genome must be taken into account (.i.e. influenza; HA segment, NA segment, ...)", + "classification": "Bioinformatics and QC metrics fields", + "label": "Consensus genome length", + "fill_mode": "batch", + "header": "Y" + }, + "depth_of_coverage_threshold": { + "examples": [ + "10x" + ], + "ontology": "GENEPIO:0001475", + "type": "string", + "description": "The threshold used as a cut-off for the depth of coverage.", + "classification": "Bioinformatics and QC metrics fields", + "label": "Depth of coverage threshold", + "fill_mode": "batch", + "header": "Y" + }, + "number_of_reads_sequenced": { + "examples": [ + "387566" + ], + "ontology": "NCIT:C164667", + "type": "integer", + "minimum": 0, + "maximum": 50000000, + "description": "The number of total reads generated by the sequencing process.", + "classification": "Bioinformatics and QC metrics fields", + "label": "Number of reads sequenced", + "fill_mode": "batch", + "header": "Y" + }, + "pass_reads": { + "examples": [ + "153812" + ], + "ontology": "GENEPIO:0000087", + "type": "integer", + "minimum": 0, + "maximum": 50000000, + "description": "Number of reads that pass quality control threshold", + "classification": "Bioinformatics and QC metrics fields", + "label": "Number of reads passing filters", + "fill_mode": "batch", + "header": "Y" + }, + "per_reads_host": { + "examples": [ + "0.19" + ], + "ontology": "NCIT:C185251", + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Percentage of reads mapped to host", + "classification": "Bioinformatics and QC metrics fields", + "label": "%Reads host", + "fill_mode": "batch", + "header": "Y" + }, + "per_reads_virus": { + "examples": [ + "99.69" + ], + "ontology": "NCIT:C185251", + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Percentage of reads mapped to virus. For fragmented genome viruses, all segments that make up the complete genome must be taken into account (.i.e. influenza; HA segment, NA segment, ...)", + "classification": "Bioinformatics and QC metrics fields", + "label": "%Reads virus", + "fill_mode": "batch", + "header": "Y" + }, + "per_unmapped": { + "examples": [ + "0.13" + ], + "ontology": "0", + "type": "number", + "maximum": 100, + "description": "Percentage of reads unmapped to virus or to host", + "classification": "Bioinformatics and QC metrics fields", + "label": "%Unmapped", + "fill_mode": "batch", + "header": "Y" + }, + "depth_of_coverage_value": { + "examples": [ + "400" + ], + "ontology": "GENEPIO:0001474", + "type": "integer", + "minimum": 0, + "maximum": 1000000, + "description": "The average number of reads representing each nucleotide in the reconstructed sequence. For fragmented genome viruses, all segments that make up the complete genome must be taken into account (.i.e. influenza; HA segment, NA segment, ...)", + "classification": "Bioinformatics and QC metrics fields", + "label": "Depth of coverage Mean value", + "fill_mode": "batch", + "header": "Y" + }, + "per_genome_greater_10x": { + "examples": [ + "96" + ], + "ontology": "0", + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Percentage of genome with coverage greater than 10x. For fragmented genome viruses, all segments that make up the complete genome must be taken into account (.i.e. influenza; HA segment, NA segment, ...)", + "classification": "Bioinformatics and QC metrics fields", + "label": "% Genome > 10x", + "fill_mode": "batch", + "header": "Y" + }, + "per_Ns": { + "examples": [ + "3" + ], + "ontology": "0", + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Percentage of Ns. For fragmented genome viruses, all segments that make up the complete genome must be taken into account (.i.e. influenza; HA segment, NA segment, ...)", + "classification": "Bioinformatics and QC metrics fields", + "label": "%Ns", + "fill_mode": "batch", + "header": "Y" + }, + "number_of_Ns": { + "examples": [ + "2000" + ], + "ontology": "0", + "type": "integer", + "minimum": 0, + "maximum": 100000, + "description": "Total count of undetermined bases ('N') in the final consensus sequence. For fragmented genome viruses, all segments that make up the complete genome must be taken into account (.i.e. influenza; HA segment, NA segment, ...)", + "classification": "Bioinformatics and QC metrics fields", + "label": "Number of Ns", + "fill_mode": "batch", + "header": "Y" + }, + "ns_per_100_kbp": { + "examples": [ + "300" + ], + "ontology": "GENEPIO:0001484", + "type": "number", + "minimum": 0, + "maximum": 100000, + "description": "The number of N symbols present in the consensus fasta sequence, per 100kbp of sequence. For fragmented genome viruses, all segments that make up the complete genome must be taken into account (.i.e. influenza; HA segment, NA segment, ...)", + "classification": "Bioinformatics and QC metrics fields", + "label": "Ns per 100 kbp", + "fill_mode": "batch", + "header": "Y" + }, + "number_of_variants_in_consensus": { + "examples": [ + "130" + ], + "ontology": "NCIT:C181350", + "type": "integer", + "minimum": 0, + "maximum": 10000, + "description": "The number of variants found in consensus sequence. For fragmented genome viruses, all segments that make up the complete genome must be taken into account (.i.e. influenza; HA segment, NA segment, ...)", + "classification": "Bioinformatic Variants", + "label": "Number of variants (AF > 75%)", + "fill_mode": "batch", + "header": "Y" + }, + "number_of_variants_with_effect": { + "examples": [ + "93" + ], + "ontology": "NCIT:C181350", + "type": "integer", + "minimum": 0, + "maximum": 10000, + "description": "The number of missense variants. For fragmented genome viruses, all segments that make up the complete genome must be taken into account (.i.e. influenza; HA segment, NA segment, ...)", + "classification": "Bioinformatic Variants", + "label": "Number of variants with effect", + "fill_mode": "batch", + "header": "Y" + }, + "number_of_sgene_frameshifts": { + "examples": [ + "0" + ], + "ontology": "GENEPIO:0001457", + "type": "integer", + "minimum": 0, + "maximum": 1000, + "description": "Number of frameshift events detected within the SARS-CoV-2 Spike (S) gene region in the consensus", + "classification": "Bioinformatics and QC metrics fields", + "label": "Number of frameshifts in Sgene", + "fill_mode": "batch", + "header": "Y" + }, + "number_of_unambiguous_bases": { + "examples": [ + "29000" + ], + "ontology": "GENEPIO:0001457", + "type": "integer", + "minimum": 0, + "maximum": 30000, + "description": "Total count of non-ambiguous bases (A/C/G/T) in the final consensus sequence", + "classification": "Bioinformatics and QC metrics fields", + "label": "Number of unambiguous bases", + "fill_mode": "batch", + "header": "Y" + }, + "per_ldmutations": { + "examples": [ + "98" + ], + "ontology": "GENEPIO:0001457", + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Percentage of SARS-CoV-2 lineage-defining mutations (per assigned lineage) that are present in the sample.", + "classification": "Bioinformatics and QC metrics fields", + "label": "Percentage of Lineage Defining Mutations", + "fill_mode": "batch", + "header": "Y" + }, + "per_sgene_ambiguous": { + "examples": [ + "0" + ], + "ontology": "GENEPIO:0001457", + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Percentage of ambiguous bases ('N') within the SARS-CoV-2 Spike (S) gene region", + "classification": "Bioinformatics and QC metrics fields", + "label": "Percentage of sSgene ambiguous bases", + "fill_mode": "batch", + "header": "Y" + }, + "per_sgene_coverage": { + "examples": [ + "99" + ], + "ontology": "GENEPIO:0001457", + "type": "number", + "minimum": 0, + "maximum": 100, + "description": "Percentage (%) of positions within the SARS-CoV-2 Spike (S) gene that meet the pipeline's coverage threshold.", + "classification": "Bioinformatics and QC metrics fields", + "label": "Percentage of Sgene coverage", + "fill_mode": "batch", + "header": "Y" + }, + "qc_test": { + "enum": [ + "Pass", + "Fail" + ], + "examples": [ + "Pass" + ], + "ontology": "GENEPIO:0001457", + "type": "string", + "description": "Overall quality control outcome/determination for the sequence or analysis. If possible, align values to PHA4GE “quality control determination” terms for interoperability.", + "classification": "Bioinformatics and QC metrics fields", + "label": "Quality control evaluation", + "fill_mode": "batch", + "header": "Y" + }, + "variant_name": { + "examples": [ + "alpha" + ], + "ontology": "GENEPIO:0001498", + "type": "string", + "description": "The variant classification of the SARS-CoV-2 lineage i.e. alpha, beta, etc.", + "classification": "Genomic Typing fields", + "label": "Variant Name", + "fill_mode": "batch", + "header": "Y" + }, + "variant_designation": { + "enum": [ + "Variant of Interest (VOI) [GENEPIO:0100083]", + "Variant of Concern (VOC) [GENEPIO:0100082]", + "Variant Under Monitoring (VUM) [GENEPIO:0100279]" + ], + "examples": [ + "Variant of Concern (VOC) [GENEPIO:0100083]" + ], + "ontology": "GENEPIO:0001503", + "type": "string", + "description": "The variant classification of the SARS-CoV-2 lineage i.e. variant, variant of concern.", + "classification": "Genomic Typing fields", + "label": "Variant designation", + "fill_mode": "batch", + "header": "Y" + }, + "clade_assignment": { + "examples": [ + "B.1.1.7" + ], + "ontology": "NCIT:C179767", + "type": "string", + "description": "An indication of the taxonomic clade grouping of organisms. Examples: SARS-CoV-2 (Nextclade) e.g., 24E; Influenza (HA clade) e.g., C.5.1.", + "classification": "Genomic Typing fields", + "label": "Clade Assignment", + "fill_mode": "batch", + "header": "Y" + }, + "clade_assignment_software_name": { + "enum": [ + "Nextclade", + "USHER", + "Custom clade assignment script" + ], + "examples": [ + "Nextclade" + ], + "ontology": "GENEPIO:0001501", + "type": "string", + "description": "The name of the software used to determine the clade.", + "classification": "Genomic Typing fields", + "label": "Clade Assignment Software Name", + "fill_mode": "batch", + "header": "Y" + }, + "if_clade_assignment_other": { + "examples": [ + "Custom Pipeline" + ], + "ontology": "0", + "type": "string", + "description": "Other software used to determine clade.", + "classification": "Genomic Typing fields", + "label": "Other Clade Assignment Software", + "fill_mode": "batch", + "header": "N" + }, + "clade_assignment_software_version": { + "examples": [ + "3.1.2" + ], + "ontology": "GENEPIO:0001502", + "type": "string", + "description": "The version of the software used to determine the clade.", + "classification": "Genomic Typing fields", + "label": "Clade Assignment Software Version", + "fill_mode": "batch", + "header": "Y" + }, + "clade_assignment_software_database_version": { + "examples": [ + "1.2.1" + ], + "ontology": "MS:1001016", + "type": "string", + "description": "Version of the search database to determine the clade. (https://github.com/nextstrain/nextclade_data/releases)", + "classification": "Genomic Typing fields", + "label": "Clade Assignment Software Database Version", + "fill_mode": "batch", + "header": "Y" + }, + "clade_assignment_date": { + "examples": [ + "20241204" + ], + "ontology": "LOINC:40783184", + "type": "string", + "format": "date", + "description": "Date when the clade analysis was performed via Nextclade", + "classification": "Genomic Typing fields", + "label": "Clade Assignment Date", + "fill_mode": "batch", + "header": "Y" + }, + "lineage_assignment": { + "examples": [ + "KP.3.1.1" + ], + "ontology": "NCIT:C179767", + "type": "string", + "description": "An indication of the SARS-CoV-2 taxonomic lineage grouping of organisms.", + "classification": "Genomic Typing fields", + "label": "Lineage Assignment", + "fill_mode": "batch", + "header": "Y" + }, + "lineage_assignment_software_name": { + "enum": [ + "Pangolin", + "Nextclade", + "USHER", + "Custom lineage assignment script" + ], + "examples": [ + "Pangolin" + ], + "ontology": "GENEPIO:0001501", + "type": "string", + "description": "The name of the software used to determine the SARS-CoV-2 lineage.", + "classification": "Genomic Typing fields", + "label": "Lineage Assignment Software Name", + "fill_mode": "batch", + "header": "Y" + }, + "if_lineage_assignment_other": { + "examples": [ + "Custom Pipeline" + ], + "ontology": "0", + "type": "string", + "description": "Other software used to determine SARS-CoV-2 lineage.", + "classification": "Genomic Typing fields", + "label": "Other Lineage Assignment Software", + "fill_mode": "batch", + "header": "N" + }, + "lineage_assignment_software_version": { + "examples": [ + "2.2.1" + ], + "ontology": "GENEPIO:0001502", + "type": "string", + "description": "The version of the software used to determine the SARS-CoV-2 lineage.", + "classification": "Genomic Typing fields", + "label": "Lineage Assignment Software Version", + "fill_mode": "batch", + "header": "Y" + }, + "lineage_algorithm_software_version": { + "examples": [ + "PUSHER-v1.28" + ], + "ontology": "0", + "type": "string", + "description": "Version of the algorithm used by the SARS-CoV-2 lineage assignment software", + "classification": "Genomic Typing fields", + "label": "Lineage Algorithm Software Version", + "fill_mode": "batch", + "header": "Y" + }, + "lineage_assignment_scorpio_version": { + "examples": [ + "1.1.3" + ], + "ontology": "NCIT:C111093", + "type": "string", + "description": "The version of the scorpio data used to determine the SARS-CoV-2 lineage.", + "classification": "Genomic Typing fields", + "label": "Lineage Assignment Scorpio Version", + "fill_mode": "batch", + "header": "Y" + }, + "lineage_assignment_constellation_version": { + "examples": [ + "3.1.1" + ], + "ontology": "NCIT:C111093", + "type": "string", + "description": "The version of the constellations databases used to determine the SARS-CoV-2 lineage.", + "classification": "Genomic Typing fields", + "label": "Lineage Assignment Constellation Version", + "fill_mode": "batch", + "header": "Y" + }, + "lineage_assignment_date": { + "examples": [ + "20241204" + ], + "ontology": "LOINC:40783184", + "type": "string", + "format": "date", + "description": "Date when the SARS-CoV-2 lineage analysis was performed", + "classification": "Genomic Typing fields", + "label": "Lineage Assignment Date", + "fill_mode": "batch", + "header": "Y" + }, + "lineage_assignment_file": { + "examples": [ + "lineage_analysis_results.csv" + ], + "ontology": "0", + "type": "string", + "description": "File containing results from SARS-CoV-2 lineage analysis", + "classification": "Genomic Typing fields", + "label": "Lineage Assignment File", + "fill_mode": "batch", + "header": "Y" + }, + "lineage_assignment_database_version": { + "examples": [ + "2.26.0" + ], + "ontology": "0", + "type": "string", + "description": "Version of the lineage assignment database. Fill in only for SARS-CoV-2. For Influenza, enter “0” (zero) since this field is mandatory. (https://github.com/cov-lineages/pangolin-data/releases)", + "classification": "Genomic Typing fields", + "label": "Pangolin Database Version", + "fill_mode": "batch", + "header": "Y" + }, + "type_assignment": { + "examples": [ + "B" + ], + "ontology": "NCIT:C179767", + "type": "string", + "description": "An indication of the taxonomic grouping of organisms. Examples: Influenza e.g., A/B/C ; RSV e.g., RSV-A|RSV-B.", + "classification": "Genomic Typing fields", + "label": "Type Assignment", + "fill_mode": "batch", + "header": "Y" + }, + "type_assignment_software_name": { + "enum": [ + "IRMA typing", + "INSaFLU", + "Custom typing script" + ], + "examples": [ + "INSaFLU" + ], + "ontology": "GENEPIO:0001501", + "type": "string", + "description": "The name of the software used to determine the type.", + "classification": "Genomic Typing fields", + "label": "Type Assignment Software Name", + "fill_mode": "batch", + "header": "Y" + }, + "if_type_assignment_software_other": { + "examples": [ + "Manual curation" + ], + "ontology": "0", + "type": "string", + "description": "Other software iused to determine Type.", + "classification": "Genomic Typing fields", + "label": "Other Type Assignment Software", + "fill_mode": "batch", + "header": "N" + }, + "type_assignment_software_version": { + "examples": [ + "2.0.1" + ], + "ontology": "GENEPIO:0001502", + "type": "string", + "description": "The version of the software used to determine thetype.", + "classification": "Genomic Typing fields", + "label": "Type Assignment Software Version", + "fill_mode": "batch", + "header": "Y" + }, + "type_assignment_software_database_version": { + "examples": [ + "1.5.2" + ], + "ontology": "MS:1001016", + "type": "string", + "description": "Version of the search database.", + "classification": "Genomic Typing fields", + "label": "Type Assignment Software Database Version", + "fill_mode": "batch", + "header": "Y" + }, + "subtype_assignment": { + "examples": [ + "H1N1" + ], + "ontology": "NCIT:C179767", + "type": "string", + "description": "An indication of the taxonomic grouping of organisms.", + "classification": "Genomic Typing fields", + "label": "Subtype Assignment", + "fill_mode": "batch", + "header": "Y" + }, + "subtype_assignment_software_name": { + "enum": [ + "IRMA subtyping", + "INSaFLU", + "Custom subtyping script" + ], + "examples": [ + "INSaFLU" + ], + "ontology": "GENEPIO:0001501", + "type": "string", + "description": "The name of the software used to determine the subtype.", + "classification": "Genomic Typing fields", + "label": "Subtype Assignment Software Name", + "fill_mode": "batch", + "header": "Y" + }, + "if_subtype_assignment_software_other": { + "examples": [ + "Custom Pipeline" + ], + "ontology": "0", + "type": "string", + "description": "Other software used to determine Subtype.", + "classification": "Genomic Typing fields", + "label": "Other Subtype Assignment Software", + "fill_mode": "batch", + "header": "N" + }, + "subtype_assignment_software_version": { + "examples": [ + "3.2.2" + ], + "ontology": "GENEPIO:0001502", + "type": "string", + "description": "The version of the software used to determine the subtype.", + "classification": "Genomic Typing fields", + "label": "Subtype Assignment Software Version", + "fill_mode": "batch", + "header": "Y" + }, + "subtype_assignment_software_database_version": { + "examples": [ + "3.1.3" + ], + "ontology": "MS:1001016", + "type": "string", + "description": "Version of the search database.", + "classification": "Genomic Typing fields", + "label": "Subtype Assignment Software Database Version", + "fill_mode": "batch", + "header": "Y" + } + }, + "required": [ + "organism", + "collecting_lab_sample_id", + "enrichment_panel", + "sequencing_instrument_platform", + "submitting_institution_id", + "clade_assignment_software_database_version", + "lineage_assignment_database_version", + "type_assignment_software_database_version", + "subtype_assignment_software_database_version" + ] +} From a4ac6d261a7d4240a20f27e042c9d763ff9a767d Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 18 Feb 2026 11:29:17 +0100 Subject: [PATCH 083/110] Remove configurations from configuration.json --- relecov_tools/conf/configuration.json | 1 + 1 file changed, 1 insertion(+) diff --git a/relecov_tools/conf/configuration.json b/relecov_tools/conf/configuration.json index 23090e9a..c82f42ce 100644 --- a/relecov_tools/conf/configuration.json +++ b/relecov_tools/conf/configuration.json @@ -88,6 +88,7 @@ "required_copy_from_other_field" ], "schema_file": "relecov_schema.json", + "cast_values_from_schema": false, "unique_sample_id": "sequencing_sample_id", "fixed_fields": { "study_type": "Whole Genome Sequencing", From 6aa8d6098b89eb02537988599e32ecad2cd0eff4 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 18 Feb 2026 11:45:18 +0100 Subject: [PATCH 084/110] Fix build_schema to new initial config --- relecov_tools/build_schema.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 06ec53dc..7481ef97 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -532,6 +532,14 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dic for property_id, db_features_dic in json_data.items(): is_required = db_features_dic.get("required (Y/N)", "") == "Y" has_enum = db_features_dic.get("enum", False) + if property_id in [ + "collecting_institution", + "submitting_institution", + "sequencing_institution", + ]: + lab_values = self._lab_uniques.get(property_id, []) + if lab_values: + has_enum = "; ".join(lab_values) # Create empty placeholder schema_property[property_id] = {} From 361993ecd93f2f673dd5e72169d3a6a922471514 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 18 Feb 2026 11:45:39 +0100 Subject: [PATCH 085/110] Update download to new extra config --- relecov_tools/download.py | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/relecov_tools/download.py b/relecov_tools/download.py index 24f81f30..4ff65e50 100755 --- a/relecov_tools/download.py +++ b/relecov_tools/download.py @@ -126,6 +126,22 @@ def __init__( self.metadata_lab_heading = config_json.get_topic_data( "read_lab_metadata", "metadata_lab_heading" ) + if not self.metadata_lab_heading: + heading_file = config_json.get_topic_data( + "read_lab_metadata", "metadata_lab_heading_file" + ) + if heading_file: + if not os.path.isabs(heading_file): + heading_file = os.path.join( + os.path.dirname(os.path.realpath(__file__)), "conf", heading_file + ) + self.metadata_lab_heading = relecov_tools.utils.read_json_file( + heading_file + ) + else: + raise KeyError( + "Missing read_lab_metadata.metadata_lab_heading (or metadata_lab_heading_file) in configuration" + ) self.metadata_processing = config_json.get_topic_data( "sftp_handle", "metadata_processing" ) @@ -488,8 +504,15 @@ def set_nones_to_str(row, req_vals): return False sample_file_dict = {} metadata_ws, meta_header, header_row = self.read_metadata_file(meta_f_path) - # TODO Include these columns in config - index_sampleID = meta_header.index("Sample ID given for sequencing") + sample_id_col = self.metadata_processing.get( + "sample_id_col", "Sample ID given for sequencing" + ) + try: + index_sampleID = meta_header.index(sample_id_col) + except ValueError: + raise MetadataError( + f"Configured sample_id_col '{sample_id_col}' not found in metadata header" + ) index_layout = meta_header.index("Library Layout") index_fastq_r1 = meta_header.index("Sequence file R1") index_fastq_r2 = meta_header.index("Sequence file R2") @@ -512,7 +535,10 @@ def set_nones_to_str(row, req_vals): ): s_name = s_name + "_remove_" + str(counter) else: - log_text = "Found more samples with the same Sample ID given for sequencing. Only the first one remains." + log_text = ( + f"Found more samples with the same {sample_id_col}. " + "Only the first one remains." + ) stderr.print(log_text) self.include_warning(log_text, sample=s_name) continue From d773fa7e18c9767909577eae132f85fdbf384701 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 18 Feb 2026 11:46:45 +0100 Subject: [PATCH 086/110] Fix sftp modulo to match new extra config configuration --- relecov_tools/sftp_client.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/relecov_tools/sftp_client.py b/relecov_tools/sftp_client.py index e6faedcb..9d894162 100644 --- a/relecov_tools/sftp_client.py +++ b/relecov_tools/sftp_client.py @@ -54,6 +54,15 @@ def __init__(self, conf_file=None, username=None, password=None): "[red] Could not find the key " + e + "in config file " + conf_file ) sys.exit(1) + if self.sftp_port in (None, ""): + self.sftp_port = 22 + try: + self.sftp_port = int(self.sftp_port) + except (TypeError, ValueError): + log.warning( + "Could not parse sftp_port '%s'. Falling back to 22.", self.sftp_port + ) + self.sftp_port = 22 self.user_name = username self.password = password self.client = paramiko.SSHClient() @@ -85,6 +94,13 @@ def retrier(self, *args, **kwargs): def open_connection(self): """Establishing sftp connection""" log.info("Setting credentials for SFTP connection with remote server") + if not self.sftp_server: + msg = ( + "SFTP server not configured. Missing sftp_handle.sftp_connection.sftp_server " + "(or legacy sftp_handle.sftp_server)." + ) + log.error(msg) + raise ValueError(msg) self.client.connect( hostname=self.sftp_server, port=self.sftp_port, From 161b3f1fab6b9b633fd19bb9ee22a9ef2ddad177 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 18 Feb 2026 11:47:09 +0100 Subject: [PATCH 087/110] Fix validate to match new diferent extra configs / initial configs --- relecov_tools/validate.py | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/relecov_tools/validate.py b/relecov_tools/validate.py index 5dc1b386..5e4e5a1e 100755 --- a/relecov_tools/validate.py +++ b/relecov_tools/validate.py @@ -419,7 +419,10 @@ def create_invalid_metadata(self, invalid_json, metadata, out_folder): collecting_lab_sample_id are removed from excel """ if self.sample_id_field is None: - log_text = f"Invalid excel file won't be created: {self.SAMPLE_FIELD_ERROR}" + log_text = ( + "Invalid excel file won't be created: sample_id_field could not be " + "resolved from schema ontology" + ) self.logsum.add_error(entry=log_text) return self.log.info("Trying to create invalid metadata excel file...") @@ -441,7 +444,9 @@ def create_invalid_metadata(self, invalid_json, metadata, out_folder): stderr.print("Start preparation of invalid samples...") self.log.info("Start preparation of invalid samples") for row in invalid_json: - sample_list.append(str(row[self.sample_id_field])) + sid = row.get(self.sample_id_field) + if sid is not None: + sample_list.append(str(sid)) wb = openpyxl.load_workbook(metadata) try: ws_sheet = wb[self.excel_sheet] @@ -449,12 +454,22 @@ def create_invalid_metadata(self, invalid_json, metadata, out_folder): logtxt = f"No sheet named {self.excel_sheet} could be found in {metadata}" self.log.error(logtxt) raise - tag = "Sample ID given for sequencing" + tag = ( + self.json_schema.get("properties", {}) + .get(self.sample_id_field, {}) + .get("label", "Sample ID given for sequencing") + ) # Check if mandatory colum ($tag) is defined in metadata. try: - header_row = [idx + 1 for idx, x in enumerate(ws_sheet.values) if tag in x][ - 0 - ] + header_row = [ + idx + 1 + for idx, x in enumerate(ws_sheet.values) + if any( + isinstance(v, str) and v.strip() == tag + for v in x + if v is not None + ) + ][0] except IndexError: self.log.error( f"Column with tag '{tag}' not found in any row of the Excel sheet." @@ -467,7 +482,9 @@ def create_invalid_metadata(self, invalid_json, metadata, out_folder): ) consec_empty_rows = 0 id_col = [ - idx for idx, val in enumerate(ws_sheet[header_row]) if val.value == tag + idx + for idx, val in enumerate(ws_sheet[header_row]) + if isinstance(val.value, str) and val.value.strip() == tag ][0] for row in row_iterator: # if no data in 10 consecutive rows, break loop From 7b08adf632826fb78f245a5d71101c11cb1e037c Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 18 Feb 2026 11:47:38 +0100 Subject: [PATCH 088/110] Fix read-lab-meatadata to new project bases extra config --- relecov_tools/read_lab_metadata.py | 121 +++++++++++++++++++++-------- 1 file changed, 87 insertions(+), 34 deletions(-) diff --git a/relecov_tools/read_lab_metadata.py b/relecov_tools/read_lab_metadata.py index 9a283f7d..4cf15441 100755 --- a/relecov_tools/read_lab_metadata.py +++ b/relecov_tools/read_lab_metadata.py @@ -67,15 +67,28 @@ def __init__( ) raise FileNotFoundError(f"Metadata file {self.metadata_file} not found") + self.config_json = ConfigJson(extra_config=True) + self.configuration = self.config_json + self.institution_config = self.config_json.get_configuration( + "institutions_config" + ) + + self.readmeta_config = ( + self.configuration.get_configuration("read_lab_metadata") or {} + ) + default_project = self.readmeta_config.get("default_project") or "relecov" + self.project = (project or default_project).lower() + self.project_config = self._load_project_config( + self.readmeta_config, self.project, default_project + ) + if sample_list_file is None: stderr.print("[yellow]No samples_data.json file provided") self.log.warning("No samples_data.json file provided") if not os.path.isdir(str(files_folder)): stderr.print("[red]No samples file nor valid files folder provided") self.log.error("No samples file nor valid files folder provided") - raise FileNotFoundError( - "No samples file nor valid files folder provided" - ) + raise FileNotFoundError("No samples file nor valid files folder provided") self.files_folder = os.path.abspath(files_folder) if sample_list_file is not None and not os.path.exists(sample_list_file): @@ -167,9 +180,18 @@ def __init__( self.samples_json_fields = self.config_json.get_topic_data( "read_lab_metadata", "samples_json_fields" ) + cast_from_project = self.project_config.get("cast_values_from_schema") + if cast_from_project is None: + cast_from_project = self.config_json.get_topic_data( + "read_lab_metadata", "cast_values_from_schema" + ) + self.cast_values_from_schema = bool(cast_from_project) self.unique_sample_id = self.project_config.get( "unique_sample_id", "sequencing_sample_id" ) + self.sample_data_map_field = self.project_config.get("sample_data_map_field") + if not self.sample_data_map_field: + self.sample_data_map_field = self.unique_sample_id self.alt_heading_equivalences = ( self.project_config.get("alt_heading_equivalences", {}) or {} ) @@ -359,14 +381,21 @@ def safely_calculate_md5(file): n = 0 for sample in clean_metadata_rows: n += 1 - sample_id = str(sample.get(self.unique_sample_id)) - if not sample_id: - if sample.get("collecting_lab_sample_id"): - sample_id = sample["collecting_lab_sample_id"] - self.unique_sample_id = "collecting_lab_sample_id" - else: - sample_id = sample.get("sequence_file_R1", "").split(".")[0] - self.unique_sample_id = "sequence_file_R1" + id_field = self.sample_data_map_field or self.unique_sample_id + sample_id = sample.get(id_field) + sample_id_str = str(sample_id).strip() + if sample_id in (None, "") or sample_id_str.lower() in {"none", "nan"}: + sample_id = sample.get("collecting_lab_sample_id") + sample_id_str = str(sample_id).strip() + if sample_id in (None, "") or sample_id_str.lower() in {"none", "nan"}: + sample_id = sample.get("sequencing_sample_id") + sample_id_str = str(sample_id).strip() + if sample_id in (None, "") or sample_id_str.lower() in {"none", "nan"}: + sample_id = sample.get("sequence_file_R1", "").split(".")[0] + sample_id_str = str(sample_id).strip() + if not sample_id_str or sample_id_str.lower() in {"none", "nan"}: + sample_id_str = f"sample_{n}" + sample_id = sample_id_str files_dict = {} r1_file = sample.get("sequence_file_R1") r2_file = sample.get("sequence_file_R2") @@ -528,20 +557,32 @@ def adding_ontology_to_enum(self, m_data): enum_dict = {} for prop, values in self.relecov_sch_json["properties"].items(): enum_values = values.get("enum", []) + if not enum_values: + ref = values.get("$ref") + if isinstance(ref, str) and ref.startswith("#/"): + ref_value = self.relecov_sch_json + for part in ref[2:].split("/"): + if not isinstance(ref_value, dict): + ref_value = None + break + ref_value = ref_value.get(part) + if ref_value is None: + break + if isinstance(ref_value, dict): + enum_values = ref_value.get("enum", []) or [] ontologies_present = any( isinstance(enum, str) and re.search(r" \[\w+:.*\]$", enum) for enum in enum_values ) if not ontologies_present: continue - if "enum" in values: - enum_dict[prop] = {} - for enum in values["enum"]: - go_match = re.search(r"(.+) \[\w+:.*", enum) - if go_match: - enum_dict[prop][go_match.group(1)] = enum - else: - enum_dict[prop][enum] = enum + enum_dict[prop] = {} + for enum in enum_values: + go_match = re.search(r"(.+) \[\w+:.*", enum) + if go_match: + enum_dict[prop][go_match.group(1)] = enum + else: + enum_dict[prop][enum] = enum ontology_errors = {} for idx in range(len(m_data)): for key, e_values in enum_dict.items(): @@ -744,7 +785,8 @@ def adding_fields(self, metadata): self.log.info("Processing sample data file") s_json = {} # TODO: Change sequencing_sample_id for some unique ID used in RELECOV database - s_json["map_field"] = self.unique_sample_id + s_json["map_field"] = self.sample_data_map_field + s_json["file"] = "samples_data.json" s_json["adding_fields"] = self.samples_json_fields if self.sample_list_file: s_json["j_data"] = relecov_tools.utils.read_json_file(self.sample_list_file) @@ -883,18 +925,19 @@ def read_metadata_file(self): "type", "string" ) ) - try: - value = relecov_tools.utils.cast_value_to_schema_type( - value, schema_type - ) - except (ValueError, TypeError) as e: - log_text = ( - f"Type conversion error for {raw_key} (expected {schema_type}): " - f"{raw_value}. {e}" - ) - self.logsum.add_error(sample=sample_id, entry=log_text) - stderr.print(f"[red]{log_text}") - continue + if self.cast_values_from_schema: + try: + value = relecov_tools.utils.cast_value_to_schema_type( + value, schema_type + ) + except (ValueError, TypeError) as e: + log_text = ( + f"Type conversion error for {raw_key} (expected {schema_type}): " + f"{raw_value}. {e}" + ) + self.logsum.add_error(sample=sample_id, entry=log_text) + stderr.print(f"[red]{log_text}") + continue key_for_checks = ( canonical_key if isinstance(canonical_key, str) else str(raw_key) @@ -925,7 +968,11 @@ def read_metadata_file(self): ): if isinstance(raw_value, (float, int)): value = str(int(raw_value)) - elif isinstance(raw_value, (float, int)) and not isinstance(value, str): + elif ( + not self.cast_values_from_schema + and isinstance(raw_value, (float, int)) + and not isinstance(value, str) + ): value = str(raw_value) if ( @@ -935,7 +982,13 @@ def read_metadata_file(self): ): logtxt = f"Non-date field {raw_key} provided as date. Parsed as int" self.logsum.add_warning(sample=sample_id, entry=logtxt) - value = str(relecov_tools.utils.excel_date_to_num(raw_value)) + parsed = relecov_tools.utils.excel_date_to_num(raw_value) + if self.cast_values_from_schema: + value = relecov_tools.utils.cast_value_to_schema_type( + parsed, schema_type + ) + else: + value = str(parsed) if ( isinstance(schema_key, str) From 860dad10a6b68d881f4d1b11a6a21d0a5cfa2f0d Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 18 Feb 2026 11:47:57 +0100 Subject: [PATCH 089/110] Fix linting --- relecov_tools/download.py | 4 +++- relecov_tools/read_lab_metadata.py | 4 +++- relecov_tools/validate.py | 4 +--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/relecov_tools/download.py b/relecov_tools/download.py index 4ff65e50..7342a3ac 100755 --- a/relecov_tools/download.py +++ b/relecov_tools/download.py @@ -133,7 +133,9 @@ def __init__( if heading_file: if not os.path.isabs(heading_file): heading_file = os.path.join( - os.path.dirname(os.path.realpath(__file__)), "conf", heading_file + os.path.dirname(os.path.realpath(__file__)), + "conf", + heading_file, ) self.metadata_lab_heading = relecov_tools.utils.read_json_file( heading_file diff --git a/relecov_tools/read_lab_metadata.py b/relecov_tools/read_lab_metadata.py index 4cf15441..530258a7 100755 --- a/relecov_tools/read_lab_metadata.py +++ b/relecov_tools/read_lab_metadata.py @@ -88,7 +88,9 @@ def __init__( if not os.path.isdir(str(files_folder)): stderr.print("[red]No samples file nor valid files folder provided") self.log.error("No samples file nor valid files folder provided") - raise FileNotFoundError("No samples file nor valid files folder provided") + raise FileNotFoundError( + "No samples file nor valid files folder provided" + ) self.files_folder = os.path.abspath(files_folder) if sample_list_file is not None and not os.path.exists(sample_list_file): diff --git a/relecov_tools/validate.py b/relecov_tools/validate.py index 5e4e5a1e..2e41ef59 100755 --- a/relecov_tools/validate.py +++ b/relecov_tools/validate.py @@ -465,9 +465,7 @@ def create_invalid_metadata(self, invalid_json, metadata, out_folder): idx + 1 for idx, x in enumerate(ws_sheet.values) if any( - isinstance(v, str) and v.strip() == tag - for v in x - if v is not None + isinstance(v, str) and v.strip() == tag for v in x if v is not None ) ][0] except IndexError: From ebc3d757bae8af07cb0dc527d7a1427de8de5f85 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 18 Feb 2026 13:10:06 +0100 Subject: [PATCH 090/110] Add add-extra-config to Github Actions --- relecov_tools/schema/relecov_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/schema/relecov_schema.json b/relecov_tools/schema/relecov_schema.json index e4aa02f8..06fc9211 100644 --- a/relecov_tools/schema/relecov_schema.json +++ b/relecov_tools/schema/relecov_schema.json @@ -1281,7 +1281,7 @@ "label": "processing_date", "ontology": "OBI:0002471", "description": "The time of a sample analysis process YYYY-MM-DD", - "examples": "2022-07-15 00:00:00", + "examples": "2022-07-15", "classification": "Bioinformatics and QC metrics fields", "type": "string", "format": "date", From eac695291b2b3b8bd4304a7b3b728ef6cd87d48a Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 20 Feb 2026 10:06:38 +0100 Subject: [PATCH 091/110] Apply fix with PR861 testing --- relecov_tools/conf/configuration.json | 2 +- relecov_tools/schema/relecov_schema.json | 3546 +++++++++++----------- relecov_tools/validate.py | 1 + 3 files changed, 1735 insertions(+), 1814 deletions(-) diff --git a/relecov_tools/conf/configuration.json b/relecov_tools/conf/configuration.json index c82f42ce..017514d8 100644 --- a/relecov_tools/conf/configuration.json +++ b/relecov_tools/conf/configuration.json @@ -181,7 +181,7 @@ }, "upload_to_ena": { "ENA_configuration": {}, - "checklist": "", + "checklist": "default_checklist", "templates_path": "", "tool": { "tool_name": "ena-upload-cli", diff --git a/relecov_tools/schema/relecov_schema.json b/relecov_tools/schema/relecov_schema.json index 06fc9211..946d9178 100644 --- a/relecov_tools/schema/relecov_schema.json +++ b/relecov_tools/schema/relecov_schema.json @@ -1281,7 +1281,7 @@ "label": "processing_date", "ontology": "OBI:0002471", "description": "The time of a sample analysis process YYYY-MM-DD", - "examples": "2022-07-15", + "examples": ["2022-07-15"], "classification": "Bioinformatics and QC metrics fields", "type": "string", "format": "date", @@ -3503,1870 +3503,1790 @@ }, "submitting_institution": { "enum": [ - "Instituto de Salud Carlos III", - "Red De Salud Mental De Araba (Hospital Psiquiátrico De Araba)", - "Hospital San José", - "Hospital Quirónsalud Vitoria", - "Hospital De Cuidados San Onofre, S.L. (Hospital De Cuidados San Onofre)", - "Hospital De Leza", - "Hospital Universitario De Araba (Sede Txagorritxu Y Sede Santiago)", - "Complejo Hospitalario Universitario De Albacete", - "Hospital General Universitario De Albacete", - "Clínica Santa Cristina Albacete", - "Hospital De Hellín", - "Quironsalud Hospital Albacete", - "Hospital Universitario Nuestra Señora Del Perpetuo Socorro", - "Hospital General De Almansa", - "Hospital General De Villarobledo", - "Centro De Atención A La Salud Mental La Milagrosa", - "Hospital General Universitario De Alicante", - "Clínica Vistahermosa Grupo Hla", - "Vithas Hospital Perpetuo Internacional", - "Hospital Virgen De Los Lirios", - "Sanatorio San Jorge S.L.", - "Hospital Clínica Benidorm", - "Hospital San Carlos De Denia Grupo Hla", - "Hospital General Universitario De Elche", - "Hospital General Universitario De Elda-Virgen De La Salud", - "Hospital Sant Vicent Del Raspeig", - "Sanatorio San Francisco De Borja Fontilles", - "Hospital Marina Baixa De La Vila Joiosa", - "Hospital Vega Baja De Orihuela", - "Hospital Internacional Medimar, S.A.", - "Hospital Psiquiátrico Penitenciario De Fontcalent", - "Hospital Universitario San Juan De Alicante", - "Centro Médico Acuario", - "Hospìtal Quironsalud Torrevieja", - "Hospital Imed Levante", - "Hospital Universitario De Torrevieja", - "Hospital De Denia", - "Hospital La Pedrera", - "Centro De Rehabilitación Neurológica Casaverde", - "Centro Militar de Veterinaria de la Defensa", - "Gerencia de Salud de Area de Soria", - "Hospital Universitario Vinalopo", - "Hospital Imed Elche", - "Hospital Torrecárdenas", - "Hospital De La Cruz Roja", - "Hospital Virgen Del Mar", - "Hospital La Inmaculada", - "Hospital Universitario Torrecárdenas", - "Hospital Mediterráneo", - "Hospital De Poniente", - "Hospital De Alta Resolución El Toyo", - "Hospital Nuestra Señora De Sonsoles", - "Hospital Provincial De Ávila", - "Clínica Santa Teresa", - "Complejo Asistencial De Avila", - "Hospital De Salud Mental Casta Salud Arévalo", - "Complejo Hospitalario Universitario De Badajoz", - "Hospital Universitario De Badajoz", - "Hospital Materno Infantil", - "Hospital Fundación San Juan De Dios De Extremadura", - "Hospital Don Benito-Villanueva De La Serena", - "Hospital General De Llerena", - "Hospital De Mérida", - "Centro Sociosanitario De Mérida", - "Hospital Quirónsalud Santa Justa", - "Hospital Quironsalud Clideba", - "Hospital Parque Via De La Plata", - "Hospital De Zafra", - "Complejo Hospitalario Llerena-Zafra", - "Hospital Perpetuo Socorro", - "Hospital Siberia-Serena", - "Hospital Tierra De Barros", - "Complejo H. Don Benito-Vva De La Serena", - "Complejo Hospitalario Del Área De Salud De Mérida", - "Casaverde. Centro De Rehabilitación Neurológico De Extremadura", - "Clínica Extremeña De Salud", - "Hospital Parque Vegas Altas", - "Hospital General De Mallorca", - "Hospital Psiquiàtric", - "Clínica Mutua Balear", - "Hospital De La Cruz Roja Española", - "Hospital Sant Joan De Deu", - "Clínica Rotger", - "Clinica Juaneda", - "Policlínica Miramar", - "Hospital Joan March", - "Hospital Can Misses", - "Hospital Residencia Asistida Cas Serres", - "Policlínica Nuestra Señora Del Rosario, S.A.", - "Clínica Juaneda Menorca", - "Hospital General De Muro", - "Clinica Juaneda Mahon", - "Hospital Manacor", - "Hospital Son Llatzer", - "Hospital Quirónsalud Palmaplanas", - "Hospital De Formentera", - "Hospital Comarcal D'Inca", - "Hospital Mateu Orfila", - "Hospital Universitari Son Espases", - "Servicio de Microbiologia HU Son Espases", - "Hospital De Llevant", - "Hospital Clinic Balear", - "Clínica Luz De Palma", - "Hospital Clínic De Barcelona, Seu Sabino De Arana", - "Hospital Del Mar", - "Hospital De L'Esperança", - "Hospital Clínic De Barcelona", - "Hospital Fremap Barcelona", - "Centre De Prevenció I Rehabilitació Asepeyo", - "Clínica Mc Copèrnic", - "Clínica Mc Londres", - "Hospital Egarsat Sant Honorat", - "Hospital Dos De Maig", - "Hospital El Pilar", - "Hospital Sant Rafael", - "Clínica Nostra Senyora Del Remei", - "Clínica Sagrada Família", - "Hospital Mare De Déu De La Mercè", - "Clínica Solarium", - "Hospital De La Santa Creu I Sant Pau", - "Nou Hospital Evangèlic", - "Hospital De Nens De Barcelona", - "Institut Guttmann", - "Fundació Puigvert - Iuna", - "Hestia Palau.", - "Hospital Universitari Sagrat Cor", - "Clínica Corachan", - "Clínica Tres Torres", - "Hospital Quirónsalud Barcelona", - "Centre Mèdic Delfos", - "Centre Mèdic Sant Jordi De Sant Andreu", - "Hospital Plató", - "Hospital Universitari Quirón Dexeus", - "Centro Médico Teknon, Grupo Quironsalud", - "Hospital De Barcelona", - "Centre Hospitalari Policlínica Barcelona", - "Centre D'Oftalmologia Barraquer", - "Hestia Duran I Reynals", - "Serveis Clínics, S.A.", - "Clínica Coroleu - Ssr Hestia.", - "Clínica Planas", - "Hospital Universitari Germans Trias I Pujol De Badalona", - "Hospital Municipal De Badalona", - "Centre Sociosanitari El Carme", - "Hospital Comarcal De Sant Bernabé", - "Hospital Comarcal Sant Jaume De Calella", - "Hospital De Sant Joan De Déu.", - "Clínica Nostra Senyora De Guadalupe", - "Hospital General De Granollers.", - "Hospital Universitari De Bellvitge", - "Hospital General De L'Hospitalet", - "Lab Clínic ICS Camp de Tarragona-Terres de l'Ebre. Hospital Joan XXIII", - "LABORATORI DE REFERENCIA DE CATALUNYA", - "Banc de Sang i Teixits Catalunya", - "Laboratorio Echevarne, SA Sant Cugat del Vallès", - "Fundació Sanitària Sant Josep", - "Hospital De Sant Jaume", - "Clínica Sant Josep", - "Centre Hospitalari.", - "Fundació Althaia-Manresa", - "Hospital De Sant Joan De Déu (Manresa)", - "Hospital De Sant Andreu", - "Germanes Hospitalàries. Hospital Sagrat Cor", - "Fundació Hospital Sant Joan De Déu", - "Centre Mèdic Molins, Sl", - "Hospital De Mollet", - "Hospital De Sabadell", - "Benito Menni,Complex Assistencial En Salut Mental.", - "Parc Sanitari Sant Joan De Déu - Recinte Sant Boi.", - "Parc Sanitari Sant Joan De Déu - Hospital General", - "Hospital De Sant Celoni.", - "Hospital Universitari General De Catalunya", - "Casal De Curació", - "Hospital Residència Sant Camil - Consorci Sanitari Del Garraf.", - "Centres Assistencials Dr. Emili Mira I López (Recinte Torribera).", - "Fundació Hospital De L'Esperit Sant", - "Hospital De Terrassa.", - "Hospital De Sant Llàtzer", - "Hospital Universitari Mútua De Terrassa", - "Hospital Universitari De Vic", - "Hospital De La Santa Creu", - "Hospital De Viladecans", - "Hospital Sant Antoni Abat - Consorci Sanitari Del Garraf.", - "Centre Sociosanitari Can Torras", - "Hestia Maresme", - "Prytanis Sant Boi Centre Sociosanitari", - "Centre Sociosanitari Verge Del Puig", - "Residència L'Estada", - "Residència Puig-Reig", - "Residència Santa Susanna", - "Hospital De Mataró", - "Hospital Universitari Vall D'Hebron", - "Centre Polivalent Can Fosc", - "Hospital Sociosanitari Mutuam Güell", - "Mútua De Granollers, Mútua De Previsió Social A Prima Fixa", - "Hospital Comarcal De L'Alt Penedès.", - "Àptima Centre Clínic - Mútua De Terrassa", - "Institut Català D'Oncologia - Hospital Duran I Reynals", - "Sar Mont Martí", - "Regina Sar", - "Centre Vallparadís", - "Ita Maresme", - "Clínica Llúria", + "Adinfa, Sociedad Cooperativa Andaluza", + "Alm Univass S.L.", "Antic Hospital De Sant Jaume I Santa Magdalena", - "Parc Sanitari Sant Joan De Déu - Numància", - "Prytanis Hospitalet Centre Sociosanitari", - "Comunitat Terapèutica Arenys De Munt", - "Hospital Sociosanitari Pere Virgili", + "Aptima Centre Clinic - Mutua De Terrassa", + "Area Psiquiatrica San Juan De Dios", + "Avances Medicos S.A.", + "Avantmedic", + "Banc de Sang i Teixits Catalunya", "Benito Menni Complex Assistencial En Salut Mental", - "Hospital Sanitas Cima", - "Parc Sanitari Sant Joan De Deu - Brians 1.", - "Institut Català D'Oncologia - Hospital Germans Trias I Pujol", - "CAP La Salut EAP Badalona", - "CAP Mataró-6 (Gatassa)", - "CAP Can Mariner Santa Coloma-1", - "CAP Montmeló (Montornès)", + "Benito Menni, Complex Assistencial En Salut Mental", + "Cap La Salut", + "Cap Mataro Centre", + "Cap Montmelo", + "Cap Montornes", + "Casal De Curacio", + "Casaverde Centro De Rehabilitacion Neurologico De Extremadura S.L.", + "Casta Guadarrama", + "Castell D'Oliana Residencial,S.L", + "Catlab-Centre Analitiques Terrassa, Aie", "Centre Collserola Mutual", - "Centre Sociosanitari Sarquavitae Sant Jordi", - "Hospital General Penitenciari", - "Centre Sociosanitari De L'Hospitalet - Consorci Sanitari Integral", - "Sar La Salut Josep Servat", - "Clínica Creu Blanca", - "Hestia Gràcia", - "Centre Sociosanitari D'Esplugues", - "Centre Sociosanitari Ricard Fortuny", - "Centre Residencial Amma Diagonal", - "Centre Fòrum", - "Centre Sociosanitari Blauclínic Dolors Aleu", - "Parc Sanitari Sant Joan De Déu - Til·Lers", - "Clínica Galatea", - "Hospital D'Igualada", + "Centre D'Hospitalitzacio I Hospital De Dia Trastorns De La Conducta", + "Centre D'Oftalmologia Barraquer", + "Centre De Prevencio I Rehabilitacio Asepeyo", + "Centre De Salut Doctor Vilaseca-Can Mariner", + "Centre Forum", + "Centre Geriatric Del Maresme", + "Centre Hospitalari Policlinica Barcelona", + "Centre Integral De Serveis En Salut Mental Comunitaria", + "Centre La Creueta", + "Centre Medic Molins, Sl", + "Centre Mq Reus", + "Centre Palamos Gent Gran", + "Centre Polivalent Can Fosc", + "Centre Sanitari Del Solsones, Fpc", "Centre Social I Sanitari Frederica Montseny", - "Parc Sanitari Sant Joan De Deu-Serveis Sanitaris Centre Penitenciari Brians-2", - "Centre Integral De Serveis En Salut Mental Comunitària", - "Centre Sociosanitari Sant Jordi De La Vall D'Hebron", - "Lepant Residencial Qgg, Sl", - "Mapfre Quavitae Barcelona", - "Unitat Polivalent Salut Mental Barcelona-Nord", - "Cqm Clínic Maresme, Sl", - "Serveis Sanitaris La Roca Del Valles 2", - "Clínica Del Vallès", - "Centre Gerontològic Amma Sant Cugat", - "Serveis Sanitaris Sant Joan De Vilatorrada", - "Centre Sociosanitari Stauros", - "Hospital De Sant Joan Despí Moisès Broggi", - "Amma Horta", - "Unitat Polivalent Benito Menni En Salut Mental De L'Hospitalet-El Prat De Llobregat", + "Centre Sociosanitari Bernat Jaume", + "Centre Sociosanitari Blauclinic Dolors Aleu", + "Centre Sociosanitari Can Torras", + "Centre Sociosanitari Ciutat De Reus", + "Centre Sociosanitari D'Esplugues", + "Centre Sociosanitari De L'Hospitalet - Consorci Sanitari Integral", + "Centre Sociosanitari De Puigcerda", "Centre Sociosanitari Del Centre Integral De Salut Cotxeres", - "Clínica Sant Antoni", - "Clínica Diagonal", - "Hospital Sociosanitari De Mollet", + "Centre Sociosanitari El Carme", + "Centre Sociosanitari I Residencia Assistida Salou", "Centre Sociosanitari Isabel Roig", - "Iván Mañero Clínic", - "Institut Trastorn Límit", - "Centre D'Hospitalització I Hospital De Dia Trastorns De La Conducta", - "Sarquavitae Bonanova", - "Centre La Creueta", - "Unitat Terapèutica-Educativa Acompanya'M", - "Hospital Fuente Bermeja", - "Hospital Recoletas De Burgos", - "Hospital San Juan De Dios De Burgos", - "Hospital Santos Reyes", - "Hospital Residencia Asistida De La Luz", - "Hospital Santiago Apóstol", - "Complejo Asistencial Universitario De Burgos", - "Hospital Universitario De Burgos", - "Hospital San Pedro De Alcántara", - "Hospital Provincial Nuestra Señora De La Montaña", - "Hospital Ciudad De Coria", - "Hospital Campo Arañuelo", - "Hospital Virgen Del Puerto", - "Hospital Sociosanitario De Plasencia", - "Complejo Hospitalario De Cáceres", - "Hospital Quirón Salud De Cáceres", - "Clínica Soquimex", - "Clinica Quirúrgica Cacereña, S.A-(Clínica San Francisco)", - "Hospital Universitario Puerta Del Mar", - "Clínica La Salud", - "Hospital San Rafael", - "Hospital Punta De Europa", - "Clínica Los Álamos", - "Hospital Universitario De Jerez De La Frontera", - "Hospital San Juan Grande", - "Hospital De La Línea De La Concepción", - "Hospital General Santa María Del Puerto", - "Hospital Universitario De Puerto Real", - "Hospital Virgen De Las Montañas", - "Hospital Virgen Del Camino", - "Hospital Jerez Puerta Del Sur", - "Hospital Viamed Bahía De Cádiz", - "Hospital Punta De Europa", - "Hospital Viamed Novo Sancti Petri", - "Clínica Serman - Instituto Médico", - "Hospital Quirón Campo De Gibraltar", - "Hospital Punta Europa. Unidad De Cuidados Medios", - "Hospital San Carlos", - "Hospital De La Línea De La Concepción", - "Hospital General Universitario De Castellón", - "Hospital La Magdalena", - "Consorcio Hospitalario Provincial De Castellón", - "Hospital Comarcal De Vinaròs", - "Hospital Universitario De La Plana", - "Instituto De Traumatologia De Unión De Mutuas (Matepss Nº 267)", - "Hospital Rey D. Jaime", - "Servicios Sanitarios Del Centro Penitenciario De Castellón Ii (Albocàsser)", - "Servicios Sanitarios Y Asistenciales", - "Hospital Quirónsalud Ciudad Real", - "Hospital General La Mancha Centro", - "Hospital Virgen De Altagracia", - "Hospital Santa Bárbara", - "Hospital General De Valdepeñas", - "Hospital General De Ciudad Real", - "Hospital General De Tomelloso", - "Hospital Universitario Reina Sofía", - "Hospital Los Morales", - "Hospital Materno-Infantil Del H.U. Reina Sofía", - "Hospital Provincial", - "Hospital De La Cruz Roja De Córdoba", - "Hospital San Juan De Dios De Córdoba", - "Hospital Infanta Margarita", - "Hospital Valle De Los Pedroches", - "Hospital De Montilla", - "Hospital La Arruzafa-Instituto De Oftalmología", - "Hospital De Alta Resolución De Puente Genil", - "Hospital De Alta Resolución Valle Del Guadiato", - "Hospital General Del H.U. Reina Sofía", - "Hospital Quironsalud Córdoba", - "Complexo Hospitalario Universitario A Coruña", - "Hospital Universitario A Coruña", - "Hospital Teresa Herrera (Materno-Infantil)", - "Hospital Maritimo De Oza", + "Centre Sociosanitari Llevant", + "Centre Sociosanitari Parc Hospitalari Marti I Julia", + "Centre Sociosanitari Ricard Fortuny", + "Centre Sociosanitari Sant Jordi De La Vall D'Hebron", + "Centre Sociosanitari Sarquavitae Sant Jordi", + "Centre Sociosanitari Verge Del Puig", + "Centres Assistencials Dr. Emili Mira I Lopez (Recinte Torribera).", + "Centro Asistencial Albelda De Iregua", + "Centro Asistencial Hnas. Hospitalarias Del Sagrado Corazon De Jesus", + "Centro Asistencial San Juan De Dios", + "Centro De Atencion A La Salud Mental, La Milagrosa", + "Centro De Rehabilitacion Neurologica Casaverde", + "Centro De Rehabilitacion Psicosocial Nuestra Señora Del Pilar", + "Centro De Rehabilitacion Psicosocial San Juan De Dios", + "Centro De Rehabilitacion Psicosocial Santo Cristo De Los Milagros", + "Centro De Tratamiento De Drogodependientes El Alba", + "Centro De Tratamiento Integral Montevil", + "Centro Habilitado Ernest Lluch", + "Centro Hospitalario Benito Menni", + "Centro Hospitalario De Alta Resolucion De Cazorla", + "Centro Hospitalario Padre Menni", + "Centro Medico De Asturias", + "Centro Medico El Carmen", + "Centro Medico Pintado", + "Centro Medico Teknon, Grupo Quironsalud", + "Centro Militar de Veterinaria de la Defensa", + "Centro Neuropsiquiatrico Nuestra Señora Del Carmen", "Centro Oncoloxico De Galicia", - "Hospital Quironsalud A Coruña", - "Hospital Hm Modelo", - "Maternidad Hm Belen", - "Hospital Abente Y Lago", - "Complexo Hospitalario Universitario De Ferrol", - "Hospital Universitario Arquitecto Marcide", - "Hospital Juan Cardona", - "Hospital Naval", - "Complexo Hospitalario Universitario De Santiago", - "Hospital Clinico Universitario De Santiago", - "Hospital Gil Casares", - "Hospital Medico Cirurxico De Conxo", - "Hospital Psiquiatrico De Conxo", - "Hospital Hm Esperanza", - "Hospital Hm Rosaleda", - "Sanatorio La Robleda", - "Hospital Da Barbanza", - "Hospital Virxe Da Xunqueira", - "Hm Modelo (Grupo)", - "Hospital Hm Rosaleda - Hm La Esperanza", - "Hospital Virgen De La Luz", - "Hospital Recoletas Cuenca S.L.U.", - "Hospital Universitari De Girona Dr. Josep Trueta", - "Clínica Bofill", - "Clínica Girona", - "Clínica Quirúrgica Onyar", - "Clínica Salus Infirmorum", - "Hospital De Sant Jaume", - "Hospital De Campdevànol", - "Hospital De Figueres", - "Clínica Santa Creu", - "Hospital Sociosanitari De Lloret De Mar", - "Hospital D'Olot I Comarcal De La Garrotxa", - "Hospital De Palamós", - "Residència De Gent Gran Puig D'En Roca", - "Hospital Comarcal De Blanes", - "Residència Geriàtrica Maria Gay", - "Hospital Sociosanitari Mutuam Girona", - "Centre Sociosanitari De Puigcerdà", - "Centre Sociosanitari Bernat Jaume", - "Institut Català D'Oncologia Girona - Hospital Josep Trueta", - "Hospital Santa Caterina-Ias", - "Centre Palamós Gent Gran", - "Centre Sociosanitari Parc Hospitalari Martí I Julià", - "Hospital De Cerdanya / Hôpital De Cerdagne", - "Hospital General Del H.U. Virgen De Las Nieves", - "Hospital De Neurotraumatología Y Rehabilitación", - "Hospital De La Inmaculada Concepción", - "Hospital De Baza", - "Hospital Santa Ana", - "Hospital Universitario Virgen De Las Nieves", - "Hospital De Alta Resolución De Guadix", - "Hospital De Alta Resolución De Loja", - "Hospital Vithas La Salud", - "Hospital Universitario San Cecilio", - "Microbiología HUC San Cecilio", - "Hospital Materno-Infantil Virgen De Las Nieves", - "Hospital Universitario De Guadalajara", - "Clínica La Antigua", - "Clínica Dr. Sanz Vázquez", - "U.R.R. De Enfermos Psíquicos Alcohete", - "Instituto De Enfermedades Neurológicas De Castilla-La Mancha", - "Mutualia-Clinica Pakea", - "Hospital Ricardo Bermingham (Fundación Matia)", - "Policlínica Gipuzkoa S.A.", - "Hospital Quirón Salud Donostia", - "Fundación Onkologikoa Fundazioa", - "Organización Sanitaria Integrada Bidasoa (Osi Bidasoa)", - "Organización Sanitaria Integrada Alto Deba", - "Hospital Aita Menni", - "Hospital Psiquiátrico San Juan De Dios", - "Clinica Santa María De La Asunción, (Inviza, S.A.)", - "Sanatorio De Usurbil, S.L.", - "Hospital De Zumarraga", - "Hospital De Mendaro", - "Hospital Universitario Donostia-Donostia Unibertsitate Ospitalea", - "Hospital San Juan De Dios Donostia", - "Hospital Infanta Elena", - "Hospital Vázquez Díaz", - "Hospital Blanca Paloma", - "Clínica Los Naranjos", - "Hospital De Riotinto", - "Hospital Universitario Juan Ramón Jiménez", - "Hospital Juan Ramón Jiménez", - "Hospital Costa De La Luz", - "Hospital Virgen De La Bella", - "Hospital General San Jorge", - "Centro De Rehab. Psicosocial Santo Cristo De Los Milagros", - "Hospital Sagrado Corazón De Jesús", - "Hospital Viamed Santiago", - "Hospital De Barbastro", - "Hospital De Jaca.Salud", + "Centro Residencial Domusvi La Salut Josep Servat.", + "Centro Salud Mental Perez Espinosa", + "Centro San Francisco Javier", + "Centro San Juan De Dios Ciempozuelos", "Centro Sanitario Bajo Cinca-Baix Cinca", - "Hospital General Del H.U. De Jaén", - "Hospital Doctor Sagaz", - "Hospital Neurotraumatológico Del H.U. De Jaén", - "Clínica Cristo Rey", - "Hospital San Agustín", - "Hospital San Juan De La Cruz", - "Hospital Universitario De Jaén", - "Hospital Alto Guadalquivir", - "Hospital Materno-Infantil Del H.U. De Jaén", - "Hospital De Alta Resolución Sierra De Segura", - "Hospital De Alta Resolución De Alcaudete", - "Hospital De Alta Resolución De Alcalá La Real", - "Hospital De León", - "Hospital Monte San Isidro", - "Regla Hm Hospitales", - "Hospital Hm San Francisco", - "Hospital Santa Isabel", - "Hospital El Bierzo", - "Hospital De La Reina", - "Hospital San Juan De Dios", - "Complejo Asistencial Universitario De León", - "Clínica Altollano", - "Clínica Ponferrada", - "Hospital Valle De Laciana", - "Hospital Universitari Arnau De Vilanova De Lleida", - "Hospital Santa Maria", - "Vithas Hospital Montserrat", - "Clínica Perpetuo Socorro De Lérida, Grupo Hla, Slu", - "Clínica Terres De Ponent", - "Clínica Psiquiàtrica Bellavista", - "Fundació Sant Hospital.", - "Centre Sanitari Del Solsonès, Fpc", - "Hospital Comarcal Del Pallars", - "Espitau Val D'Aran", - "Hestia Balaguer.", - "Residència Terraferma", - "Castell D'Oliana Residencial,S.L", - "Hospital Jaume Nadal Meroles", - "Sant Joan De Déu Terres De Lleida", - "Reeixir", - "Hospital Sant Joan De Déu Lleida", - "Complejo Hospitalario San Millan San Pedro De La Rioja", - "Hospital San Pedro", - "Hospital General De La Rioja", - "Policlínico Riojano Nuestra Señora De Valvanera, S.A.", - "Fundación Hospital Calahorra", - "Clínica Los Manzanos", - "Centro Asistencial De Albelda De Iregua", - "Centro Sociosanitario De Convalecencia Los Jazmines", - "Centro Sociosanitario De Convalecencia Nuestra Señora Virgen Del Carmen", - "Complexo Hospitalario Universitario De Lugo", - "Hospital De Calde (Psiquiatrico)", - "Hospital Polusa", - "Sanatorio Nosa Señora Dos Ollos Grandes", - "Hospital Publico Da Mariña", - "Hospital De Monforte", - "Hospital Universitario Lucus Augusti", - "Hospital Universitario La Paz", - "Hospital Ramón Y Cajal", - "Hospital Universitario 12 De Octubre", - "Hospital Clínico San Carlos", - "Hospital Virgen De La Torre", - "Hospital Universitario Santa Cristina", - "Hospital Universitario De La Princesa", - "Hospital Infantil Universitario Niño Jesus", - "Hospital Central De La Cruz Roja San José Y Santa Adela", - "Hospital Carlos Iii", - "Hospital Cantoblanco", - "Complejo Hospitalario Gregorio Marañón", - "Hospital General Universitario Gregorio Marañón", - "Instituto Provincial De Rehabilitación", - "Hospital Dr. R. Lafora", - "Sanatorio Nuestra Señora Del Rosario", - "Hospital De La V.O.T. De San Francisco De Asís", - "Hospital Quirónsalud San José", - "Hospital Beata María Ana. Hh. Hospitalarias Sgdo. C. De Jesús", - "Clínica Santa Elena", - "Hospital San Francisco De Asís", - "Clínica San Miguel", - "Clínica Nuestra Sra. De La Paz", - "Fundación Instituto San José", - "Hospital Universitario Fundación Jiménez Díaz", - "Hestia Madrid (Clínica Sear, S.A.)", - "Hospital Ruber Juan Bravo 39", - "Hospital Vithas Nuestra Señora De América", - "Hospital Virgen De La Paloma, S.A.", - "Clínica La Luz, S.L.", - "Fuensanta S.L. (Clínica Fuensanta)", - "Hospital Ruber Juan Bravo 49", - "Hospital Ruber Internacional", - "Clínica La Milagrosa", - "Hospital Universitario La Zarzuela", - "Hospital Universitario Hm Nuevo Belen", - "Sanatorio Neuropsiquiátrico Doctor León", - "Instituto De Investigaciones Neuropsiquiátricas Dr. López Ibor", - "Sanatorio Esquerdo, S.A.", - "Hospital Central De La Defensa Gomez Ulla", - "Hospital Universitario Príncipe De Asturias", - "Hospital De La Fuenfría", - "Hh. Hh. Sgdo. C. De Jesús. Complejo Asistencial Benito Menni", - "Centro San Juan De Dios", - "Hospital Monográfico Asepeyo De Traumat. Cirugía Y Rehabilitación", - "Hospital Guadarrama", - "Hospital Universitario Severo Ochoa", - "Instituto Psiquiátrico Servicios De Salud Mental José Germain-1 Luna", - "Fremap Hospital Y Centro De Rehabilitación De Majadahonda", - "Hospital Universitario De Móstoles", - "Hospital El Escorial", - "Hospital Virgen De La Poveda", - "Hospital De Madrid", - "Hospital Universitario De Getafe", - "Clínica Isadora", - "Hospital Universitario Moncloa", - "Hospital Universitario Fundación Alcorcón", + "Centro Sanitario Cinco Villas", + "Centro Sanitario Residencial Las Palmas (Cesar Las Palmas)", + "Centro Sociosanitario De Convalecencia Nuestra Señora Virgen Del Carmen", + "Centro Sociosanitario De Convalencencia Los Jazmines", + "Centro Sociosanitario De Merida", + "Centro Sociosanitario De Plasencia", + "Centro Terapeutico Vista Alegre", + "Centro de Investigación Biomédica de Aragón", + "Clinica Activa Mutua 2008", + "Clinica Arcangel San Miguel - Pamplona", + "Clinica Asturias", + "Clinica Bandama", + "Clinica Bofill", + "Clinica Cajal", "Clinica Cemtro", - "Hospital Universitario Hm Montepríncipe", - "Centro Oncológico Md Anderson International España", - "Hospital Quironsalud Sur", - "Hospital Universitario De Fuenlabrada", - "Hospital Universitario Hm Torrelodones", - "Complejo Universitario La Paz", - "Hospital La Moraleja", - "Hospital Los Madroños", - "Hospital Quirónsalud Madrid", - "Hospital Centro De Cuidados Laguna", - "Hospital Universitario Madrid Sanchinarro", - "Hospital Universitario Infanta Elena", - "Vitas Nisa Pardo De Aravaca.", - "Hospital Universitario Infanta Sofía", - "Hospital Universitario Del Henares", - "Hospital Universitario Infanta Leonor", - "Hospital Universitario Del Sureste", - "Hospital Universitario Del Tajo", - "Hospital Universitario Infanta Cristina", - "Hospital Universitario Puerta De Hierro Majadahonda", - "Casta Guadarrama", - "Hospital Universitario De Torrejón", - "Hospital Rey Juan Carlos", - "Hospital General De Villalba", - "Hm Universitario Puerta Del Sur", - "Hm Valles", - "Hospital Casaverde De Madrid", - "Clínica Universidad De Navarra", - "Complejo Hospitalario Universitario Infanta Leonor", - "Clínica San Vicente", - "Instituto Psiquiátrico Servicios De Salud Mental José Germain", - "Instituto Psiquiátrico Servicios De Salud Mental José Germain-2 Aragón", - "Hospital General Del H.U.R. De Málaga", - "Hospital Virgen De La Victoria", - "Hospital Civil", - "Centro Asistencial San Juan De Dios", - "Centro Asistencial Hnas. Hosp. Del Sagrado Corazón De Jesús", - "Hospital Vithas Parque San Antonio", - "Hospital El Ángel", - "Hospital Doctor Gálvez", - "Clínica De La Encarnación", - "Hospital Psiquiátrico San Francisco De Asís", - "Clínica Nuestra Sra. Del Pilar", - "Hospital De Antequera", - "Hospital Quironsalud Marbella", - "Hospital De La Axarquía", - "Hospital Marítimo De Torremolinos", - "Hospital Universitario Regional De Málaga", - "Hospital Universitario Virgen De La Victoria", - "Hospital Materno-Infantil Del H.U.R. De Málaga", - "Hospital Costa Del Sol", - "Hospital F.A.C. Doctor Pascual", - "Clínica El Seranil", - "Hc Marbella International Hospital", - "Hospital Humanline Banús", - "Clínica Rincón", - "Hospiten Estepona", - "Fundación Cudeca. Centro De Cuidados Paliativos", - "Xanit Hospital Internacional", - "Comunidad Terapéutica San Antonio", - "Hospital De Alta Resolución De Benalmádena", - "Hospital Quironsalud Málaga", - "Cenyt Hospital", - "Clínica Ochoa", - "Centro De Reproducción Asistida De Marbella (Ceram)", - "Helicópteros Sanitarios Hospital", - "Hospital De La Serranía", - "Hospital Valle Del Guadalhorce De Cártama", - "Hospital Clínico Universitario Virgen De La Arrixaca", - "Hospital General Universitario Reina Sofía", - "Plataforma de Medicina Computacional, Fundación Progreso y Salud", - "Hospital Psiquiátrico Roman Alberca", - "Hospital Quirónsalud Murcia", - "Hospital La Vega", - "Hospital Mesa Del Castillo", - "Sanatorio Doctor Muñoz S.L.", - "Clínica Médico-Quirúrgica San José, S.A.", - "Hospital Comarcal Del Noroeste", - "Clínica Doctor Bernal S.L.", - "Hospital Santa María Del Rosell", - "Santo Y Real Hospital De Caridad", - "Hospital Nuestra Señora Del Perpetuo Socorro", - "Fundacion Hospital Real Piedad", - "Hospital Virgen Del Alcázar De Lorca", - "Hospital General Universitario Los Arcos Del Mar Menor", - "Hospital Virgen Del Castillo", - "Hospital Rafael Méndez", - "Hospital General Universitario J.M. Morales Meseguer", - "Hospital Ibermutuamur-Patología Laboral", - "Hospital De La Vega Lorenzo Guirao", - "Hospital De Molina", - "Clínica San Felipe Del Mediterráneo", - "Hospital De Cuidados Medios Villademar", - "Residencia Los Almendros", - "Complejo Hospitalario Universitario De Cartagena", - "Hospital General Universitario Santa Lucia", - "Consorcio LUCIA (SACYL,ITACYL UBU,UVa)", - "Hospital Perpetuo Socorro Alameda", - "Hospital C.M.V. Caridad Cartagena", - "Centro San Francisco Javier", + "Clinica Corachan", + "Clinica Coroleu - Ssr Hestia.", + "Clinica Creu Blanca", + "Clinica Cristo Rey", + "Clinica De Salud Mental Miguel De Mañara", + "Clinica Diagonal", + "Clinica Doctor Sanz Vazquez", + "Clinica Dr. Leon", + "Clinica El Seranil", + "Clinica Ercilla Mutualia", + "Clinica Galatea", + "Clinica Girona", + "Clinica Guimon, S.A.", + "Clinica Imq Zorrotzaurre", + "Clinica Imske", + "Clinica Indautxu, S.A.", + "Clinica Isadora S.A.", + "Clinica Jorgani", + "Clinica Juaneda", + "Clinica Juaneda Mahon", + "Clinica Juaneda Menorca", + "Clinica La Luz, S.L.", + "Clinica Lluria", + "Clinica Lopez Ibor", + "Clinica Los Alamos", + "Clinica Los Manzanos", + "Clinica Los Naranjos", + "Clinica Luz De Palma", + "Clinica Mc Copernic", + "Clinica Mc Londres", + "Clinica Mi Nova Aliança", + "Clinica Montpellier, Grupo Hla, S.A.U", + "Clinica Nostra Senyora De Guadalupe", + "Clinica Nostra Senyora Del Remei", + "Clinica Nuestra Se?Ora De Aranzazu", + "Clinica Nuestra Señora De La Paz", + "Clinica Perpetuo Socorro De Lerida, Grupo Hla, Slu", + "Clinica Planas", + "Clinica Ponferrada Recoletas", + "Clinica Psicogeriatrica Josefina Arregui", + "Clinica Psiquiatrica Bellavista", "Clinica Psiquiatrica Padre Menni", - "Clinica Universidad De Navarra", - "CATLAB", + "Clinica Psiquiatrica Somio", + "Clinica Quirurgica Onyar", + "Clinica Residencia El Pinar", + "Clinica Rotger", + "Clinica Sagrada Familia", + "Clinica Salus Infirmorum", + "Clinica San Felipe", "Clinica San Miguel", - "Clínica San Fermín", - "Centro Hospitalario Benito Menni", - "Hospital García Orcoyen", - "Hospital Reina Sofía", - "Clínica Psicogeriátrica Josefina Arregui", - "Complejo Hospitalario De Navarra", - "Complexo Hospitalario Universitario De Ourense", - "Hospital Universitario Cristal", - "Hospital Santo Cristo De Piñor (Psiquiatrico)", - "Hospital Santa Maria Nai", - "Centro Medico El Carmen", - "Hospital De Valdeorras", - "Hospital De Verin", + "Clinica San Rafael", + "Clinica Sant Antoni", + "Clinica Sant Josep", + "Clinica Santa Creu", + "Clinica Santa Isabel", + "Clinica Santa Maria De La Asuncion (Inviza S. A.)", "Clinica Santa Teresa", - "Hospital Monte Naranco", - "Centro Médico De Asturias", - "Clínica Asturias", - "Clínica San Rafael", - "Hospital Universitario San Agustín", - "Fundación Hospital De Avilés", - "Hospital Carmen Y Severo Ochoa", - "Hospital Comarcal De Jarrio", - "Hospital De Cabueñes", - "Sanatorio Nuestra Señora De Covadonga", - "Fundación Hospital De Jove", - "Hospital Begoña De Gijón, S.L.", - "Hospital Valle Del Nalón", - "Fundació Fisabio", - "Fundación Sanatorio Adaro", - "Hospital V. Álvarez Buylla", - "Hospital Universitario Central De Asturias", - "Hospital Del Oriente De Asturias Francisco Grande Covián", - "Hospital De Luarca -Asistencia Médica Occidentalsl", - "Instituto Salud Mental Pérez-Espinosa Oria, S.L.", - "Clínica Psiquiátrica Somió", - "Clínica Cirugía Plástica Y Estética Fernández Y Fernández Cossío", - "Hospital Gijón", - "Centro Terapéutico Vista Alegre", - "Instituto Oftalmológico Fernández -Vega", - "Hospital Rio Carrión", - "Hospital San Telmo", - "Hospital Psiquiatrico San Luis", - "Área Psiquiátrica Del Centro Asistencial San Juan De Dios", - "Hospital Recoletas De Palencia", + "Clinica Soquimex", + "Clinica Tara", + "Clinica Terres De L'Ebre", + "Clinica Tres Torres", + "Clinica Universidad De Navarra", + "Clinica Virgen Blanca", + "Clinica Vistahermosa Grupo Hla", + "Clinicas Del Sur Slu", + "Complejo Asistencial Benito Menni", + "Complejo Asistencial De Soria", + "Complejo Asistencial De Zamora", + "Complejo Asistencial De Ávila", + "Complejo Asistencial Universitario De Burgos", + "Complejo Asistencial Universitario De León", "Complejo Asistencial Universitario De Palencia", - "Hospital Universitario Materno-Infantil De Canarias", - "Hospital Universitario Insular De Gran Canaria", - "Unidades Clínicas Y De Rehabilitación (Ucyr)", - "Sanatorio Dermatológico Regional", - "Fundación Benéfica Canaria Casa Asilo San José", - "Vithas Hospital Santa Catalina", - "Hospital Policlínico La Paloma, S.A.", - "Instituto Policlínico Cajal, S.L.", - "Hospital San Roque Las Palmas De Gran Canaria", - "Clínica Bandama", - "Hospital Doctor José Molina Orosa", - "Hospital Insular De Lanzarote", - "Hospital General De Fuerteventura", - "Quinta Médica De Reposo, S.A.", - "Hospital De San Roque Guía", - "Hospital Ciudad De Telde", - "Complejo Hospitalario Universitario Insular-Materno Infantil", - "Hospital Clínica Roca (Roca Gestión Hospitalaria)", - "Hospital Universitario De Gran Canaria Dr. Negrín", - "Hospiten Lanzarote (Clínicas Del Sur S.L.U.)", + "Complejo Asistencial Universitario De Salamanca", + "Complejo Hospital Costa Del Sol", + "Complejo Hospital Infanta Margarita", + "Complejo Hospital La Merced", + "Complejo Hospital San Juan De La Cruz", + "Complejo Hospital Universitario Clínico San Cecilio", + "Complejo Hospital Universitario De Jaén", + "Complejo Hospital Universitario De Puerto Real", + "Complejo Hospital Universitario Juan Ramón Jiménez", + "Complejo Hospital Universitario Puerta Del Mar", + "Complejo Hospital Universitario Regional De Málaga", + "Complejo Hospital Universitario Reina Sofía", + "Complejo Hospital Universitario Torrecárdenas", + "Complejo Hospital Universitario Virgen De La Victoria", + "Complejo Hospital Universitario Virgen De Las Nieves", + "Complejo Hospital Universitario Virgen De Valme", + "Complejo Hospital Universitario Virgen Del Rocío", + "Complejo Hospital Universitario Virgen Macarena", + "Complejo Hospital Valle De Los Pedroches", + "Complejo Hospitalario De Albacete", + "Complejo Hospitalario De Cartagena Chc", + "Complejo Hospitalario De Cáceres", + "Complejo Hospitalario De Don Benito-Villanueva De La Serena", + "Complejo Hospitalario De Toledo", + "Complejo Hospitalario Del Área De Salud De Mérida", + "Complejo Hospitalario Gregorio Marañón", + "Complejo Hospitalario Infanta Leonor", + "Complejo Hospitalario La Paz", + "Complejo Hospitalario Llerena-Zafra", + "Complejo Hospitalario San Pedro Hospital De La Rioja", + "Complejo Hospitalario Universitario De Badajoz", + "Complejo Hospitalario Universitario De Canarias", "Complejo Hospitalario Universitario De Gran Canaria Dr. Negrín", - "Hospital San Roque Maspalomas", - "Clínica Parque Fuerteventura", - "Clinica Jorgani", - "Hospital Universitario Montecelo", - "Gerencia de Atención Primaria Pontevedra Sur", - "Hospital Provincial De Pontevedra", - "Hestia Santa Maria", - "Hospital Quironsalud Miguel Dominguez", - "Instituto De Neuro-Rehabilitacion Quironsalud Pontevedra", - "Hospital Meixoeiro", - "Hospital Nicolas Peña", - "Fremap, Hospital De Vigo", - "Hospital Povisa", - "Hospital Hm Vigo", - "Vithas Hospital Nosa Señora De Fatima", - "Concheiro Centro Medico Quirurgico", - "Centro Medico Pintado", - "Sanatorio Psiquiatrico San Jose", - "Clinica Residencia El Pinar", + "Complejo Hospitalario Universitario Insular Materno Infantil", + "Complejo Hospitalario Universitario Nuestra Señora De Candelaria", + "Complejo Instituto Psiquiátrico Servicios De Salud Mental José Germain", + "Complexo Hospitalario Universitario A Coruña", + "Complexo Hospitalario Universitario De Ferrol", + "Complexo Hospitalario Universitario De Lugo", + "Complexo Hospitalario Universitario De Ourense", "Complexo Hospitalario Universitario De Pontevedra", - "Hospital Do Salnes", + "Complexo Hospitalario Universitario De Santiago", "Complexo Hospitalario Universitario De Vigo", - "Hospital Universitario Alvaro Cunqueiro", - "Plataforma de Genómica y Bioinformática", - "Complejo Asistencial Universitario De Salamanca", - "Hospital Universitario De Salamanca", - "Hospital General De La Santísima Trinidad", - "Hospital Los Montalvos", - "Complejo Hospitalario Universitario Ntra. Sra. De Candelaria", - "Hospital Universitario Nuestra Señora De Candelaria", - "Hospital De Ofra", - "Instituto Tecnológico y de Energías Renovables, S.A. (ITER, S.A.)", - "Unidades Clínicas Y De Rehabilitación De Salud Mental", - "Hospital Febles Campos", - "Hospital Quirón Tenerife", - "Vithas Hospital Santa Cruz", - "Clínica Parque, S.A.", - "Hospiten Sur", - "Hospital Universitario De Canarias (H.U.C)", - "Hospital De La Santísima Trinidad", - "Clínica Vida", - "Hospital Bellevue", - "Hospital Nuestra Señora De Guadalupe", - "Hospital Nuestra Señora De Los Dolores", - "Hospital Insular Ntra. Sra. De Los Reyes", - "Hospital Quirón Costa Adeje", - "Hospital Rambla S.L.", - "Hospital General De La Palma", - "Complejo Hospitalario Universitario De Canarias", - "Hospital Del Norte", - "Hospital Del Sur", - "Clínica Tara", - "Hospital Universitario Marqués De Valdecilla", - "Hospital Ramón Negrete", - "Hospital Santa Clotilde - Orden Hospitalaria San Juan De Dios.", - "Centro Hospitalario Padre Menni", - "Hospital Comarcal De Laredo", - "Hospital Sierrallana", - "Clínica Mompía, S.A.U.", - "Complejo Asistencial De Segovia", - "Hospital General De Segovia", - "Hospital Recoletas Segovia Ntra. Sra. De La Misericordia", - "Unidad De Rehabilitación Psiquiátrica Ntra. Sra. De La Fuencisla", - "Hospital General Del H.U. Virgen Del Rocío", - "Hospital Virgen De Valme", - "Hospital Virgen Macarena", - "Hospital San Lázaro", - "Hospital Victoria Eugenia De La Cruz Roja Española", - "Hospital San Juan De Dios De Sevilla", - "Hospital Duques Del Infantado", - "Clínica Santa Isabel", - "Hospital Quironsalud Sagrado Corazón", - "Hospital Fátima", - "Hospital Quironsalud Infanta Luisa", - "Clínica Nuestra Señora De Aránzazu", - "Residencia De Salud Mental Nuestra Señora Del Carmen", - "Hospital El Tomillar", - "Hospital De Alta Resolución De Morón De La Frontera", - "Hospital La Merced", - "Hospital Universitario Virgen Del Rocío", - "Microbiología. Hospital Universitario Virgen del Rocio", - "Hospital Universitario Virgen Macarena", - "Hospital Universitario Virgen De Valme", - "Fremap, Hospital Y Centro De Rehabilitación De Sevilla", - "Hospital Psiquiátrico Penitenciario", - "Hospital San Juan De Dios Del Aljarafe", - "Hospital Nisa Sevilla-Aljarafe", - "Hospital De Alta Resolución De Utrera", - "Hospital De Alta Resolución Sierra Norte", - "Hospital Viamed Santa Ángela De La Cruz", - "Hospital De Alta Resolución De Écija", - "Clínica De Salud Mental Miguel De Mañara", - "Hospital De Rehabilitación Y Traumatología Virgen Del Rocío", - "Hospital De Alta Resolución De Lebrija", - "Hospital Infantil", - "Hospital De La Mujer", - "Hospital Virgen Del Mirón", - "Complejo Asistencial De Soria", - "Hospital Universitari Joan Xxiii De Tarragona", - "Hospital Sociosanitari Francolí", - "Hospital De Sant Pau I Santa Tecla", - "Hospital Viamed Monegal", - "Clínica Activa Mútua 2008", - "Hospital Comarcal Móra D'Ebre", - "Hospital Universitari De Sant Joan De Reus", - "Centre Mq Reus", - "Villablanca Serveis Assistencials, Sa", - "Institut Pere Mata, S.A", - "Hospital De Tortosa Verge De La Cinta", - "Clínica Terres De L'Ebre", - "Policlínica Comarcal Del Vendrell.", - "Pius Hospital De Valls", - "Residència Alt Camp", - "Centre Sociosanitari Ciutat De Reus", - "Hospital Comarcal D'Amposta", - "Centre Sociosanitari Llevant", - "Residència Vila-Seca", - "Unitat Polivalent En Salut Mental D'Amposta", - "Hospital Del Vendrell", - "Centre Sociosanitari I Residència Assistida Salou", - "Residència Santa Tecla Ponent", - "Unitat De Referència De Psiquiatria I Trastorns De La Conducta Alimentària (Urpi)", - "Hospital Obispo Polanco", - "Centro De Rehabilitacion Psicosocial San Juan De Dios", - "Hospital De Alcañiz", - "Hospital Virgen De La Salud", - "Hospital Geriátrico Virgen Del Valle", - "Hospital Nacional De Parapléjicos", - "Hospital Provincial Nuestra Señora De La Misericordia", - "Hospital General Nuestra Señora Del Prado", + "Comunitat Terapeutica Arenys De Munt", + "Concheiro Centro Medico Quirurgico", "Consejería de Sanidad", - "Clínica Marazuela, S.A.", - "Complejo Hospitalario De Toledo", - "Hospital Laboral Solimat Mutua Colaboradora Con La Ss Nº 72", - "Quirón Salud Toledo", - "Hospital Universitario Y Politécnico La Fe", - "Hospital Universitario Dr. Peset Aleixandre", - "Hospital Arnau De Vilanova", - "Hospital Clínico Universitario De Valencia", - "Hospital De La Malva-Rosa", "Consorcio Hospital General Universitario De Valencia", - "Hospital Católico Casa De Salud", - "Hospital Nisa Valencia Al Mar", - "Fundación Instituto Valenciano De Oncología", - "Hospital Virgen Del Consuelo", - "Hospital Quirón Valencia", - "Hospital Psiquiátrico Provincial", - "Casa De Reposo San Onofre", - "Hospital Francesc De Borja De Gandia", - "Hospital Lluís Alcanyís De Xàtiva", - "Hospital General De Ontinyent", - "Hospital Intermutual De Levante", - "Hospital De Sagunto", - "Hospital Doctor Moliner", - "Hospital General De Requena", - "Hospital 9 De Octubre", - "Centro Médico Gandia", - "Hospital Nisa Aguas Vivas", - "Clinica Fontana", - "Hospital Universitario De La Ribera", - "Hospital Pare Jofré", - "Hospital De Manises", - "Hospital De Crónicos De Mislata (Antiguo Hospital Militar De Valencia)", - "Hospital De Llíria", - "Imed Valencia", - "Unidad De Desintoxicación Hospitalaria", - "Hospital Universitario Rio Hortega", - "Hospital Clínico Universitario De Valladolid", - "Sanatorio Sagrado Corazón", - "Hospital Medina Del Campo", - "Hospital De Valladolid Felipe Ii", - "Hospital Campo Grande", - "Hospital Santa Marina", - "Hospital Intermutual De Euskadi", - "Clínica Ercilla Mutualia", - "Hospital Cruz Roja De Bilbao", - "Sanatorio Bilbaíno", - "Hospital De Basurto", - "Imq Clínica Virgen Blanca", - "Clínica Guimon S.A.", - "Clínica Indautxu", - "Hospital Universitario De Cruces", - "Osi Barakaldo-Sestao", - "Hospital San Eloy", - "Red De Salud Mental De Bizkaia (Hospital De Bermeo)", - "Hospital Galdakao-Usansolo", - "Hospital Gorliz", - "Red De Salud Mental De Bizkaia (Hospital De Zaldibar)", - "Red De Salud Mental De Bizkaia (Hospital De Zamudio)", - "Avances Médicos S.A", - "Hospital Quironsalud Bizkaia", - "Clínica Imq Zorrotzaurre", - "Hospital Urduliz Ospitalea", - "Hospital Virgen De La Concha", - "Hospital Provincial De Zamora", - "Hospital De Benavente", - "Complejo Asistencial De Zamora", - "Hospital Recoletas De Zamora", - "Hospital Clínico Universitario Lozano Blesa", - "Hospital Universitario Miguel Servet", - "Hospital Royo Villanova", - "Centro de Investigación Biomédica de Aragón", - "Centro De Rehabilitacion Psicosocial Nuestra Señora Del Pilar", - "Hospital Nuestra Señora De Gracia", - "Hospital Maz", - "Clínica Montpelier Grupo Hla, S.A.U", - "Centro Neuropsiquiátrico Nuestra Señora Del Carmen", - "Hospital Quironsalud Zaragoza", - "Clínica Nuestra Señora Del Pilar", - "Hospital General De La Defensa De Zaragoza", - "Hospital Ernest Lluch Martin", - "Unidad De Rehabilitacion De Larga Estancia", - "Unidad Rehabilitadora De Media Estancia Profesor Rey Ardid", - "Hospital De Rehabilitacion Psiquiatrica Prisma", - "Centro Sanitario Cinco Villas", - "Hospital Viamed Montecanal", - "Hospital Universitario De Ceuta", - "Hospital Comarcal de Melilla", - "Presidencia del Gobierno", - "Ministerio Sanidad" - ] - }, - "sequencing_institution": { - "enum": [ - "Instituto de Salud Carlos III", - "Red De Salud Mental De Araba (Hospital Psiquiátrico De Araba)", - "Hospital San José", - "Hospital Quirónsalud Vitoria", - "Hospital De Cuidados San Onofre, S.L. (Hospital De Cuidados San Onofre)", - "Hospital De Leza", - "Hospital Universitario De Araba (Sede Txagorritxu Y Sede Santiago)", - "Complejo Hospitalario Universitario De Albacete", - "Hospital General Universitario De Albacete", - "Clínica Santa Cristina Albacete", - "Hospital De Hellín", - "Quironsalud Hospital Albacete", - "Hospital Universitario Nuestra Señora Del Perpetuo Socorro", - "Hospital General De Almansa", - "Hospital General De Villarobledo", - "Centro De Atención A La Salud Mental La Milagrosa", - "Hospital General Universitario De Alicante", - "Clínica Vistahermosa Grupo Hla", - "Vithas Hospital Perpetuo Internacional", - "Hospital Virgen De Los Lirios", - "Sanatorio San Jorge S.L.", - "Hospital Clínica Benidorm", - "Hospital San Carlos De Denia Grupo Hla", - "Hospital General Universitario De Elche", - "Hospital General Universitario De Elda-Virgen De La Salud", - "Hospital Sant Vicent Del Raspeig", - "Sanatorio San Francisco De Borja Fontilles", - "Hospital Marina Baixa De La Vila Joiosa", - "Hospital Vega Baja De Orihuela", - "Hospital Internacional Medimar, S.A.", - "Hospital Psiquiátrico Penitenciario De Fontcalent", - "Hospital Universitario San Juan De Alicante", - "Centro Médico Acuario", - "Hospìtal Quironsalud Torrevieja", - "Hospital Imed Levante", - "Hospital Universitario De Torrevieja", - "Hospital De Denia", - "Hospital La Pedrera", - "Centro De Rehabilitación Neurológica Casaverde", - "Centro Militar de Veterinaria de la Defensa", + "Consorcio Hospitalario Provincial De Castellon", + "Consorcio LUCIA (SACYL,ITACYL UBU,UVa)", + "Cqm Clinic Maresme, Sl", + "Cti De La Corredoria", + "Eatica", + "Espitau Val D'Aran", + "Fraternidad Muprespa, Mutua Colaboradora Con La Seguridad Social Nº 275", + "Fremap Hospital Majadahonda", + "Fremap, Hospital De Barcelona", + "Fremap, Hospital De Vigo", + "Fremap_Hospital Y Centro De Rehabilitacion De Sevilla", + "Fundacio Hospital De L'Esperit Sant", + "Fundacio Hospital Sant Joan De Deu (Martorell)", + "Fundacio Puigvert - Iuna", + "Fundacio Sanitaria Sant Josep", + "Fundacio Sant Hospital.", + "Fundacion Cudeca. Centro De Cuidados Paliativos", + "Fundacion Hospital De Aviles", + "Fundacion Instituto San Jose", + "Fundacion Instituto Valenciano De Oncologia", + "Fundacion Sanatorio Adaro", + "Fundació Althaia-Manresa", + "Fundació Fisabio", + "Gerencia de Atención Primaria Pontevedra Sur", "Gerencia de Salud de Area de Soria", - "Hospital Universitario Vinalopo", - "Hospital Imed Elche", - "Hospital Torrecárdenas", - "Hospital De La Cruz Roja", - "Hospital Virgen Del Mar", - "Hospital La Inmaculada", - "Hospital Universitario Torrecárdenas", - "Hospital Mediterráneo", - "Hospital De Poniente", - "Hospital De Alta Resolución El Toyo", - "Hospital Nuestra Señora De Sonsoles", - "Hospital Provincial De Ávila", - "Clínica Santa Teresa", - "Complejo Asistencial De Avila", - "Hospital De Salud Mental Casta Salud Arévalo", - "Complejo Hospitalario Universitario De Badajoz", - "Hospital Universitario De Badajoz", - "Hospital Materno Infantil", - "Hospital Fundación San Juan De Dios De Extremadura", - "Hospital Don Benito-Villanueva De La Serena", - "Hospital General De Llerena", - "Hospital De Mérida", - "Centro Sociosanitario De Mérida", - "Hospital Quirónsalud Santa Justa", - "Hospital Quironsalud Clideba", - "Hospital Parque Via De La Plata", - "Hospital De Zafra", - "Complejo Hospitalario Llerena-Zafra", - "Hospital Perpetuo Socorro", - "Hospital Siberia-Serena", - "Hospital Tierra De Barros", - "Complejo H. Don Benito-Vva De La Serena", - "Complejo Hospitalario Del Área De Salud De Mérida", - "Casaverde. Centro De Rehabilitación Neurológico De Extremadura", - "Clínica Extremeña De Salud", - "Hospital Parque Vegas Altas", - "Hospital General De Mallorca", - "Hospital Psiquiàtric", - "Clínica Mutua Balear", - "Hospital De La Cruz Roja Española", - "Hospital Sant Joan De Deu", - "Clínica Rotger", - "Clinica Juaneda", - "Policlínica Miramar", - "Hospital Joan March", + "Germanes Hospitalaries. Hospital Sagrat Cor", + "Grupo Quironsalud Pontevedra", + "Hc Marbella International Hospital", + "Helicopteros Sanitarios Hospital", + "Hestia Balaguer.", + "Hestia Duran I Reynals", + "Hestia Gracia", + "Hestia La Robleda", + "Hestia Palau.", + "Hestia San Jose", + "Hm El Pilar", + "Hm Galvez", + "Hm Hospitales 1.989, S.A.", + "Hm Malaga", + "Hm Modelo-Belen", + "Hm Nou Delfos", + "Hm Regla", + "Hospital 9 De Octubre", + "Hospital Aita Menni", + "Hospital Alto Guadalquivir", + "Hospital Arnau De Vilanova", + "Hospital Asepeyo Madrid", + "Hospital Asilo De La Real Piedad De Cehegin", + "Hospital Asociado Universitario Guadarrama", + "Hospital Asociado Universitario Virgen De La Poveda", + "Hospital Beata Maria Ana", + "Hospital Begoña", + "Hospital Bidasoa (Osi Bidasoa)", + "Hospital C. M. Virgen De La Caridad Cartagena", + "Hospital Campo Arañuelo", "Hospital Can Misses", - "Hospital Residencia Asistida Cas Serres", - "Policlínica Nuestra Señora Del Rosario, S.A.", - "Clínica Juaneda Menorca", - "Hospital General De Muro", - "Clinica Juaneda Mahon", - "Hospital Manacor", - "Hospital Son Llatzer", - "Hospital Quirónsalud Palmaplanas", + "Hospital Carlos Iii", + "Hospital Carmen Y Severo Ochoa", + "Hospital Casaverde Valladolid", + "Hospital Catolico Casa De Salud", + "Hospital Central De La Cruz Roja, San Jose Y Santa Adela", + "Hospital Central De La Defensa Gomez Ulla", + "Hospital Centro De Andalucia", + "Hospital Centro De Cuidados Laguna", + "Hospital Centro Medico Virgen De La Caridad Caravaca", + "Hospital Ciudad De Coria", + "Hospital Ciudad De Telde", + "Hospital Civil", + "Hospital Clinic De Barcelona", + "Hospital Clinic De Barcelona, Seu Plato", + "Hospital Clinic De Barcelona, Seu Sabino De Arana", + "Hospital Clinica Benidorm", + "Hospital Clinico Universitario De Valencia", + "Hospital Clinico Universitario De Valladolid", + "Hospital Clinico Universitario Lozano Blesa", + "Hospital Clinico Universitario Virgen De La Arrixaca", + "Hospital Comarcal", + "Hospital Comarcal D'Amposta", + "Hospital Comarcal De Blanes", + "Hospital Comarcal De L'Alt Penedes", + "Hospital Comarcal De Laredo", + "Hospital Comarcal De Vinaros", + "Hospital Comarcal Del Noroeste", + "Hospital Comarcal Del Pallars", + "Hospital Comarcal D´Inca", + "Hospital Comarcal Mora D'Ebre", + "Hospital Comarcal Sant Jaume De Calella", + "Hospital Cruz Roja De Bilbao - Victoria Eugenia", + "Hospital Cruz Roja De Cordoba", + "Hospital Cruz Roja Gijon", + "Hospital D'Igualada", + "Hospital D'Olot I Comarcal De La Garrotxa", + "Hospital De Alcañiz", + "Hospital De Alta Resolucion De Alcala La Real", + "Hospital De Alta Resolucion De Alcaudete", + "Hospital De Alta Resolucion De Benalmadena", + "Hospital De Alta Resolucion De Ecija", + "Hospital De Alta Resolucion De Especialidades De La Janda", + "Hospital De Alta Resolucion De Estepona", + "Hospital De Alta Resolucion De Guadix", + "Hospital De Alta Resolucion De Lebrija", + "Hospital De Alta Resolucion De Loja", + "Hospital De Alta Resolucion De Moron De La Frontera", + "Hospital De Alta Resolucion De Puente Genil", + "Hospital De Alta Resolucion De Utrera", + "Hospital De Alta Resolucion Eltoyo", + "Hospital De Alta Resolucion Sierra De Segura", + "Hospital De Alta Resolucion Sierra Norte", + "Hospital De Alta Resolucion Valle Del Guadiato", + "Hospital De Antequera", + "Hospital De Barbastro", + "Hospital De Barcelona", + "Hospital De Baza", + "Hospital De Benavente Complejo Asistencial De Zamora", + "Hospital De Berga", + "Hospital De Bermeo", + "Hospital De Calahorra", + "Hospital De Campdevanol", + "Hospital De Cantoblanco", + "Hospital De Cerdanya / Hopital De Cerdagne", + "Hospital De Cronicos De Mislata (Antiguo Hospital Militar De Valencia)", + "Hospital De Cuidados Medios Villademar", + "Hospital De Denia", + "Hospital De Emergencia Covid 19", + "Hospital De Figueres", "Hospital De Formentera", - "Hospital Comarcal D'Inca", - "Hospital Mateu Orfila", - "Hospital Universitari Son Espases", - "Servicio de Microbiologia HU Son Espases", - "Hospital De Llevant", - "Hospital Clinic Balear", - "Clínica Luz De Palma", - "Hospital Clínic De Barcelona, Seu Sabino De Arana", - "Hospital Del Mar", - "Hospital De L'Esperança", - "Hospital Clínic De Barcelona", - "Hospital Fremap Barcelona", - "Centre De Prevenció I Rehabilitació Asepeyo", - "Clínica Mc Copèrnic", - "Clínica Mc Londres", - "Hospital Egarsat Sant Honorat", - "Hospital Dos De Maig", - "Hospital El Pilar", - "Hospital Sant Rafael", - "Clínica Nostra Senyora Del Remei", - "Clínica Sagrada Família", - "Hospital Mare De Déu De La Mercè", - "Clínica Solarium", + "Hospital De Gorliz", + "Hospital De Hellin", + "Hospital De Jaca Salud", + "Hospital De Jarrio", + "Hospital De Jove", + "Hospital De L'Esperança.", + "Hospital De La Axarquia", + "Hospital De La Creu Roja Espanyola", + "Hospital De La Fuenfria", + "Hospital De La Inmaculada Concepcion", + "Hospital De La Malva-Rosa", + "Hospital De La Mujer", + "Hospital De La Reina", + "Hospital De La Rioja", + "Hospital De La Santa Creu", "Hospital De La Santa Creu I Sant Pau", - "Nou Hospital Evangèlic", - "Hospital De Nens De Barcelona", - "Institut Guttmann", - "Fundació Puigvert - Iuna", - "Hestia Palau.", - "Hospital Universitari Sagrat Cor", - "Clínica Corachan", - "Clínica Tres Torres", - "Hospital Quirónsalud Barcelona", - "Centre Mèdic Delfos", - "Centre Mèdic Sant Jordi De Sant Andreu", - "Hospital Plató", - "Hospital Universitari Quirón Dexeus", - "Centro Médico Teknon, Grupo Quironsalud", - "Hospital De Barcelona", - "Centre Hospitalari Policlínica Barcelona", - "Centre D'Oftalmologia Barraquer", - "Hestia Duran I Reynals", - "Serveis Clínics, S.A.", - "Clínica Coroleu - Ssr Hestia.", - "Clínica Planas", - "Hospital Universitari Germans Trias I Pujol De Badalona", - "Hospital Municipal De Badalona", - "Centre Sociosanitari El Carme", - "Hospital Comarcal De Sant Bernabé", - "Hospital Comarcal Sant Jaume De Calella", - "Hospital De Sant Joan De Déu.", - "Clínica Nostra Senyora De Guadalupe", - "Hospital General De Granollers.", - "Hospital Universitari De Bellvitge", - "Hospital General De L'Hospitalet", - "Lab Clínic ICS Camp de Tarragona-Terres de l'Ebre. Hospital Joan XXIII", - "LABORATORI DE REFERENCIA DE CATALUNYA", - "Banc de Sang i Teixits Catalunya", - "Laboratorio Echevarne, SA Sant Cugat del Vallès", - "Fundació Sanitària Sant Josep", - "Hospital De Sant Jaume", - "Clínica Sant Josep", - "Centre Hospitalari.", - "Fundació Althaia-Manresa", - "Hospital De Sant Joan De Déu (Manresa)", - "Hospital De Sant Andreu", - "Germanes Hospitalàries. Hospital Sagrat Cor", - "Fundació Hospital Sant Joan De Déu", - "Centre Mèdic Molins, Sl", + "Hospital De La Serrania", + "Hospital De La V.O.T. De San Francisco De Asis", + "Hospital De La Vega Lorenzo Guirao", + "Hospital De Leon Complejo Asistencial Universitario De Leon", + "Hospital De Leza", + "Hospital De Llevant", + "Hospital De Lliria", + "Hospital De Luarca", + "Hospital De Manacor", + "Hospital De Manises", + "Hospital De Mataro", + "Hospital De Mendaro (Osi Bajo Deba)", + "Hospital De Merida", "Hospital De Mollet", + "Hospital De Montilla", + "Hospital De Neurotraumatologia Y Rehabilitacion Del H.U. Virgen De Las Nieves", + "Hospital De Ofra", + "Hospital De Palamos", + "Hospital De Rehabilitacion Psiquiatrica Prisma", + "Hospital De Rehabilitacion Y Traumatologia Del H.U. Virgen Del Rocio", + "Hospital De Riotinto", "Hospital De Sabadell", - "Benito Menni,Complex Assistencial En Salut Mental.", - "Parc Sanitari Sant Joan De Déu - Recinte Sant Boi.", - "Parc Sanitari Sant Joan De Déu - Hospital General", + "Hospital De Sagunto", + "Hospital De Salud Mental Casta Salud Arevalo", + "Hospital De Salud Mental Provincial", + "Hospital De San Antonio", + "Hospital De San Jose", + "Hospital De San Rafael", + "Hospital De Sant Andreu", "Hospital De Sant Celoni.", - "Hospital Universitari General De Catalunya", - "Casal De Curació", - "Hospital Residència Sant Camil - Consorci Sanitari Del Garraf.", - "Centres Assistencials Dr. Emili Mira I López (Recinte Torribera).", - "Fundació Hospital De L'Esperit Sant", + "Hospital De Sant Jaume", + "Hospital De Sant Joan De Deu (Manresa)", + "Hospital De Sant Joan De Deu.", + "Hospital De Sant Joan Despi Moises Broggi", + "Hospital De Sant Llatzer", + "Hospital De Sant Pau I Santa Tecla", "Hospital De Terrassa.", - "Hospital De Sant Llàtzer", - "Hospital Universitari Mútua De Terrassa", - "Hospital Universitari De Vic", - "Hospital De La Santa Creu", + "Hospital De Tortosa Verge De La Cinta", "Hospital De Viladecans", - "Hospital Sant Antoni Abat - Consorci Sanitari Del Garraf.", - "Centre Sociosanitari Can Torras", - "Hestia Maresme", - "Prytanis Sant Boi Centre Sociosanitari", - "Centre Sociosanitari Verge Del Puig", - "Residència L'Estada", - "Residència Puig-Reig", - "Residència Santa Susanna", - "Hospital De Mataró", - "Hospital Universitari Vall D'Hebron", - "Centre Polivalent Can Fosc", - "Hospital Sociosanitari Mutuam Güell", - "Mútua De Granollers, Mútua De Previsió Social A Prima Fixa", - "Hospital Comarcal De L'Alt Penedès.", - "Àptima Centre Clínic - Mútua De Terrassa", - "Institut Català D'Oncologia - Hospital Duran I Reynals", - "Sar Mont Martí", - "Regina Sar", - "Centre Vallparadís", + "Hospital De Zafra", + "Hospital De Zaldibar", + "Hospital De Zamudio", + "Hospital De Zumarraga (Osi Goierri - Alto Urola)", + "Hospital Del Mar", + "Hospital Del Norte", + "Hospital Del Oriente De Asturias Francisco Grande Covian", + "Hospital Del Sur", + "Hospital Del Vendrell", + "Hospital Doctor Moliner", + "Hospital Doctor Oloriz", + "Hospital Doctor Sagaz", + "Hospital Don Benito-Villanueva De La Serena", + "Hospital Dos De Maig", + "Hospital Egarsat Sant Honorat", + "Hospital El Angel", + "Hospital El Bierzo", + "Hospital El Escorial", + "Hospital El Pilar", + "Hospital El Tomillar", + "Hospital Ernest Lluch Martin", + "Hospital Fatima", + "Hospital Francesc De Borja De Gandia", + "Hospital Fuensanta", + "Hospital Fuente Bermeja- Complejo Asistencial Universitario De Burgos-", + "Hospital G. Universitario J.M. Morales Meseguer", + "Hospital Galdakao-Usansolo Asociado A La Upv/Ehu", + "Hospital Garcia Orcoyen", + "Hospital General De Almansa", + "Hospital General De Fuerteventura", + "Hospital General De Granollers.", + "Hospital General De L'Hospitalet", + "Hospital General De La Defensa En Zaragoza", + "Hospital General De La Santisima Trinidad", + "Hospital General De Llerena", + "Hospital General De Mallorca", + "Hospital General De Ontinyent", + "Hospital General De Requena", + "Hospital General De Segovia Complejo Asistencial De Segovia", + "Hospital General De Tomelloso", + "Hospital General De Valdepeñas", + "Hospital General De Villalba", + "Hospital General De Villarrobledo", + "Hospital General La Mancha Centro", + "Hospital General Nuestra Señora Del Prado", + "Hospital General Penitenciari", + "Hospital General Santa Maria Del Puerto", + "Hospital General Universitario De Albacete", + "Hospital General Universitario De Castellon", + "Hospital General Universitario De Ciudad Real", + "Hospital General Universitario De Elche", + "Hospital General Universitario De Elda-Virgen De La Salud", + "Hospital General Universitario Dr. Balmis", + "Hospital General Universitario Gregorio Marañon", + "Hospital General Universitario Los Arcos Del Mar Menor", + "Hospital General Universitario Reina Sofia", + "Hospital General Universitario Santa Lucia", + "Hospital Geriatrico Virgen Del Valle", + "Hospital Gijon", + "Hospital Hernan Cortes Miraflores", + "Hospital Hestia Madrid", + "Hospital Hla Universitario Moncloa", + "Hospital Hm Nuevo Belen", + "Hospital Hm Rosaleda-Hm La Esperanza", + "Hospital Hm San Francisco", + "Hospital Hm Valles", + "Hospital Ibermutuamur - Patologia Laboral", + "Hospital Imed Elche", + "Hospital Imed Gandia", + "Hospital Imed Levante", + "Hospital Imed San Jorge", + "Hospital Infanta Elena", + "Hospital Infanta Margarita", + "Hospital Infantil", + "Hospital Infantil Universitario Niño Jesus", + "Hospital Insular De Lanzarote", + "Hospital Insular Nuestra Señora De Los Reyes", + "Hospital Intermutual De Euskadi", + "Hospital Intermutual De Levante", + "Hospital Internacional Hcb Denia", + "Hospital Internacional Hm Santa Elena", + "Hospital Jaume Nadal Meroles", + "Hospital Jerez Puerta Del Sur", + "Hospital Joan March", + "Hospital Juaneda Muro", + "Hospital La Antigua", + "Hospital La Inmaculada", + "Hospital La Magdalena", + "Hospital La Merced", + "Hospital La Milagrosa S.A.", + "Hospital La Paloma", + "Hospital La Pedrera", + "Hospital La Vega Grupo Hla", + "Hospital Latorre", + "Hospital Lluis Alcanyis De Xativa", + "Hospital Los Madroños", + "Hospital Los Montalvos (Complejo Asistencial Universitario De Salamanca)", + "Hospital Los Morales", + "Hospital Mare De Deu De La Merce", + "Hospital Marina Baixa De La Vila Joiosa", + "Hospital Maritimo De Torremolinos", + "Hospital Materno - Infantil Del H.U. Reina Sofia", + "Hospital Materno Infantil", + "Hospital Materno Infantil Del H.U.R. De Malaga", + "Hospital Materno-Infantil", + "Hospital Materno-Infantil Del H.U. De Jaen", + "Hospital Materno-Infantil Del H.U. Virgen De Las Nieves", + "Hospital Mateu Orfila", + "Hospital Maz", + "Hospital Md Anderson Cancer Center Madrid", + "Hospital Medimar Internacional", + "Hospital Medina Del Campo", + "Hospital Mediterraneo", + "Hospital Mesa Del Castillo", + "Hospital Metropolitano De Jaen", + "Hospital Mompia", + "Hospital Monte Naranco", + "Hospital Monte San Isidro Complejo Asistencial Universitario De Leon", + "Hospital Municipal De Badalona", + "Hospital Mutua Montañesa", + "Hospital Nacional De Paraplejicos", + "Hospital Neurotraumatologico Del H.U. De Jaen", + "Hospital Nisa Aguas Vivas", + "Hospital Ntra. Sra. Del Perpetuo Socorro", + "Hospital Nuestra Señora De America", + "Hospital Nuestra Señora De Gracia", + "Hospital Nuestra Señora De Guadalupe", + "Hospital Nuestra Señora De La Salud Hla Sl", + "Hospital Nuestra Señora De Sonsoles", + "Hospital Obispo Polanco", + "Hospital Ochoa", + "Hospital Palma Del Rio", + "Hospital Pardo De Aravaca", + "Hospital Pare Jofre", + "Hospital Parque", + "Hospital Parque Fuerteventura", + "Hospital Parque Marazuela", + "Hospital Parque San Francisco", + "Hospital Parque Vegas Altas", + "Hospital Perpetuo Socorro", + "Hospital Perpetuo Socorro Alameda", + "Hospital Polivalente Anexo Juan Carlos I", + "Hospital Provincial", + "Hospital Provincial De Avila", + "Hospital Provincial De Zamora Complejo Asistencial De Zamora", + "Hospital Provincial Ntra.Sra.De La Misericordia", + "Hospital Psiquiatric", + "Hospital Psiquiatrico Doctor Rodriguez Lafora", + "Hospital Psiquiatrico Penitenciario", + "Hospital Psiquiatrico Penitenciario De Fontcalent", + "Hospital Psiquiatrico Roman Alberca", + "Hospital Psiquiatrico San Francisco De Asis", + "Hospital Psiquiatrico San Juan De Dios", + "Hospital Psiquiatrico San Luis", + "Hospital Publico Da Barbanza", + "Hospital Publico Da Mariña", + "Hospital Publico De Monforte", + "Hospital Publico De Valdeorras", + "Hospital Publico De Verin", + "Hospital Publico Do Salnes", + "Hospital Publico Virxe Da Xunqueira", + "Hospital Puerta De Andalucia", + "Hospital Punta De Europa", + "Hospital Quiron Campo De Gibraltar", + "Hospital Quiron Salud Costa Adeje", + "Hospital Quiron Salud Del Valles - Clinica Del Valles", + "Hospital Quiron Salud Lugo", + "Hospital Quiron Salud Tenerife", + "Hospital Quiron Salud Valle Del Henares", + "Hospital Quironsalud A Coruña", + "Hospital Quironsalud Albacete", + "Hospital Quironsalud Barcelona", + "Hospital Quironsalud Bizkaia", + "Hospital Quironsalud Caceres", + "Hospital Quironsalud Ciudad Real", + "Hospital Quironsalud Clideba", + "Hospital Quironsalud Cordoba", + "Hospital Quironsalud Huelva", + "Hospital Quironsalud Infanta Luisa", + "Hospital Quironsalud Malaga", + "Hospital Quironsalud Marbella", + "Hospital Quironsalud Murcia", + "Hospital Quironsalud Palmaplanas", + "Hospital Quironsalud Sagrado Corazon", + "Hospital Quironsalud San Jose", + "Hospital Quironsalud Santa Cristina", + "Hospital Quironsalud Son Veri", + "Hospital Quironsalud Sur", + "Hospital Quironsalud Toledo", + "Hospital Quironsalud Torrevieja", + "Hospital Quironsalud Valencia", + "Hospital Quironsalud Vida", + "Hospital Quironsalud Vitoria", + "Hospital Quironsalud Zaragoza", + "Hospital Rafael Mendez", + "Hospital Recoletas Cuenca, S.L.U.", + "Hospital Recoletas De Burgos", + "Hospital Recoletas De Palencia", + "Hospital Recoletas De Zamora", + "Hospital Recoletas Marbella Slu", + "Hospital Recoletas Salud Campo Grande", + "Hospital Recoletas Salud Felipe Ii", + "Hospital Recoletas Segovia Nuestra Señora De La Misericordia", + "Hospital Reina Sofia", + "Hospital Residencia Sant Camil - Consorci Sanitari De L'Alt Penedes I Garraf", + "Hospital Ribera Almendralejo", + "Hospital Ribera Badajoz", + "Hospital Ribera Covadonga", + "Hospital Ribera Juan Cardona", + "Hospital Ribera Polusa", + "Hospital Ribera Povisa", + "Hospital Ricardo Bermingham", + "Hospital Rio Carrion Complejo Asistencial Universitario De Palencia", + "Hospital Royo Villanova", + "Hospital Ruber Internacional", + "Hospital Ruber Juan Bravo", + "Hospital Sagrado Corazon De Jesus", + "Hospital San Agustin", + "Hospital San Camilo", + "Hospital San Carlos De Denia Grupo Hla", + "Hospital San Carlos De San Fernando", + "Hospital San Eloy", + "Hospital San Francisco De Asis", + "Hospital San Jose", + "Hospital San Jose Solimat", + "Hospital San Juan De Dios", + "Hospital San Juan De Dios Burgos", + "Hospital San Juan De Dios De Cordoba", + "Hospital San Juan De Dios De Sevilla", + "Hospital San Juan De Dios Del Aljarafe", + "Hospital San Juan De Dios Donostia", + "Hospital San Juan De Dios Leon", + "Hospital San Juan De Dios Tenerife", + "Hospital San Juan De La Cruz", + "Hospital San Juan Grande", + "Hospital San Lazaro", + "Hospital San Pedro De Alcantara", + "Hospital San Rafael", + "Hospital San Roque De Guia", + "Hospital San Telmo ,Complejo Asistencial Universitario De Palencia", + "Hospital Sanitas Cima", + "Hospital Sant Antoni Abat - Consorci Sanitari Del Garraf.", + "Hospital Sant Joan De Deu", + "Hospital Sant Joan De Deu Inca", + "Hospital Sant Joan De Deu Lleida", + "Hospital Sant Vicent Del Raspeig", + "Hospital Santa Ana", + "Hospital Santa Barbara", + "Hospital Santa Barbara ,Complejo Asistencial De Soria", + "Hospital Santa Caterina-Ias", + "Hospital Santa Clotilde", + "Hospital Santa Isabel Complejo Asistencial Universitario De Leon", + "Hospital Santa Maria", + "Hospital Santa Maria Del Rosell", + "Hospital Santa Marina", + "Hospital Santa Teresa", + "Hospital Santiago Apostol", + "Hospital Santos Reyes", + "Hospital Siberia-Serena", + "Hospital Sierrallana", + "Hospital Sociosanitari De Lloret De Mar", + "Hospital Sociosanitari De Mollet", + "Hospital Sociosanitari Francoli", + "Hospital Sociosanitari Mutuam Girona", + "Hospital Sociosanitari Mutuam Guell", + "Hospital Sociosanitari Pere Virgili", + "Hospital Son Llatzer", + "Hospital Tierra De Barros", + "Hospital Universitari Arnau De Vilanova De Lleida", + "Hospital Universitari De Bellvitge", + "Hospital Universitari De Girona Dr. Josep Trueta", + "Hospital Universitari De Sant Joan De Reus", + "Hospital Universitari De Vic", + "Hospital Universitari General De Catalunya", + "Hospital Universitari Germans Trias I Pujol De Badalona", + "Hospital Universitari Joan Xxiii De Tarragona", + "Hospital Universitari Mutua De Terrassa", + "Hospital Universitari Quir¿N Dexeus", + "Hospital Universitari Sagrat Cor", + "Hospital Universitari Son Espases", + "Hospital Universitari Vall D'Hebron", + "Hospital Universitario 12 De Octubre", + "Hospital Universitario Araba (Sede Txagorritxu Y Sede Santiago)", + "Hospital Universitario Basurto", + "Hospital Universitario Central De Asturias", + "Hospital Universitario Clinico San Carlos", + "Hospital Universitario Clinico San Cecilio", + "Hospital Universitario Costa Del Sol", + "Hospital Universitario Cruces", + "Hospital Universitario De Badajoz", + "Hospital Universitario De Burgos Complejo Asistencial Univer. De Burgos", + "Hospital Universitario De Cabueñes", + "Hospital Universitario De Caceres", + "Hospital Universitario De Canarias", + "Hospital Universitario De Ceuta", + "Hospital Universitario De Fuenlabrada", + "Hospital Universitario De Getafe", + "Hospital Universitario De Gran Canaria Dr. Negrin", + "Hospital Universitario De Guadalajara", + "Hospital Universitario De Jaen", + "Hospital Universitario De Jerez De La Frontera", + "Hospital Universitario De La Linea De La Concepcion", + "Hospital Universitario De La Plana", + "Hospital Universitario De La Princesa", + "Hospital Universitario De La Ribera", + "Hospital Universitario De Mostoles", + "Hospital Universitario De Navarra", + "Hospital Universitario De Poniente", + "Hospital Universitario De Puerto Real", + "Hospital Universitario De Salamanca ,Complejo Asistencial Universitario De", + "Hospital Universitario De Salud Mental Juan Carlos I", + "Hospital Universitario De Toledo (Hut)", + "Hospital Universitario De Torrejon", + "Hospital Universitario De Torrevieja", + "Hospital Universitario Del Henares", + "Hospital Universitario Del Sureste", + "Hospital Universitario Del Tajo", + "Hospital Universitario Donostia", + "Hospital Universitario Dr. Jose Molina Orosa", + "Hospital Universitario Dr. Peset Aleixandre", + "Hospital Universitario Fundacion Alcorcon", + "Hospital Universitario Fundacion Jimenez Diaz", + "Hospital Universitario General De La Palma", + "Hospital Universitario Hm Madrid", + "Hospital Universitario Hm Monteprincipe", + "Hospital Universitario Hm Puerta Del Sur", + "Hospital Universitario Hm Sanchinarro", + "Hospital Universitario Hm Torrelodones", + "Hospital Universitario Hospiten Bellevue", + "Hospital Universitario Hospiten Rambla", + "Hospital Universitario Hospiten Sur", + "Hospital Universitario Infanta Cristina", + "Hospital Universitario Infanta Elena", + "Hospital Universitario Infanta Leonor", + "Hospital Universitario Infanta Sofia", + "Hospital Universitario Jose Germain", + "Hospital Universitario Juan Ramon Jimenez", + "Hospital Universitario La Moraleja", + "Hospital Universitario La Paz", + "Hospital Universitario La Zarzuela", + "Hospital Universitario Lucus Augusti", + "Hospital Universitario Marques De Valdecilla", + "Hospital Universitario Miguel Servet", + "Hospital Universitario Nuestra Señora De Candelaria", + "Hospital Universitario Nuestra Señora Del Perpetuo Socorro", + "Hospital Universitario Principe De Asturias", + "Hospital Universitario Puerta De Hierro Majadahonda", + "Hospital Universitario Puerta Del Mar", + "Hospital Universitario Quironsalud Madrid", + "Hospital Universitario Ramon Y Cajal", + "Hospital Universitario Regional De Malaga", + "Hospital Universitario Reina Sofia", + "Hospital Universitario Rio Hortega", + "Hospital Universitario San Agustin", + "Hospital Universitario San Jorge", + "Hospital Universitario San Juan De Alicante", + "Hospital Universitario San Pedro", + "Hospital Universitario San Roque Las Palmas", + "Hospital Universitario San Roque Maspalomas", + "Hospital Universitario Santa Cristina", + "Hospital Universitario Severo Ochoa", + "Hospital Universitario Torrecardenas", + "Hospital Universitario Vinalopo", + "Hospital Universitario Virgen De La Victoria", + "Hospital Universitario Virgen De Las Nieves", + "Hospital Universitario Virgen De Valme", + "Hospital Universitario Virgen Del Rocio", + "Hospital Universitario Virgen Macarena", + "Hospital Universitario Vithas Las Palmas", + "Hospital Universitario Y Politecnico La Fe", + "Hospital Urduliz Ospitalea", + "Hospital Valle De Guadalhorce De Cartama", + "Hospital Valle De Laciana", + "Hospital Valle De Los Pedroches", + "Hospital Valle Del Nalon", + "Hospital Vazquez Diaz", + "Hospital Vega Baja De Orihuela", + "Hospital Viamed Bahia De Cadiz", + "Hospital Viamed Montecanal", + "Hospital Viamed Novo Sancti Petri", + "Hospital Viamed San Jose", + "Hospital Viamed Santa Angela De La Cruz", + "Hospital Viamed Santa Elena, S.L", + "Hospital Viamed Santiago", + "Hospital Viamed Tarragona", + "Hospital Victoria Eugenia De La Cruz Roja Española", + "Hospital Virgen De Altagracia", + "Hospital Virgen De La Bella", + "Hospital Virgen De La Concha Complejo Asistencial De Zamora", + "Hospital Virgen De La Luz", + "Hospital Virgen De La Torre", + "Hospital Virgen De Las Montañas", + "Hospital Virgen De Los Lirios", + "Hospital Virgen Del Alcazar De Lorca", + "Hospital Virgen Del Camino", + "Hospital Virgen Del Castillo", + "Hospital Virgen Del Mar", + "Hospital Virgen Del Miron ,Complejo Asistencial De Soria", + "Hospital Virgen Del Puerto", + "Hospital Vital Alvarez Buylla", + "Hospital Vithas Castellon", + "Hospital Vithas Granada", + "Hospital Vithas Parque San Antonio", + "Hospital Vithas Sevilla", + "Hospital Vithas Valencia Consuelo", + "Hospital Vithas Vitoria", + "Hospital Vithas Xanit Estepona", + "Hospital Vithas Xanit Internacional", + "Hospiten Clinica Roca San Agustin", + "Hospiten Lanzarote", + "Idcsalud Mostoles Sa", + "Imed Valencia", + "Institut Catala D'Oncologia - Hospital Duran I Reynals", + "Institut Catala D'Oncologia - Hospital Germans Trias I Pujol", + "Institut Catala D'Oncologia Girona - Hospital Josep Trueta", + "Institut Guttmann", + "Institut Pere Mata, S.A", + "Instituto De Enfermedades Neurologicas De Castilla-La Mancha", + "Instituto De Salud Carlos Iii - Centro Nacional De Microbiologia", + "Instituto De Traumatologia De Union De Mutuas (Matepss Nº 267)", + "Instituto Oftalmologico Fernandez-Vega", + "Instituto Provincial De Rehabilitacion", + "Instituto Tecnológico y de Energías Renovables, S.A. (ITER, S.A.)", + "Ita Canet", + "Ita Clinic Bcn", + "Ita Godella", "Ita Maresme", - "Clínica Llúria", - "Antic Hospital De Sant Jaume I Santa Magdalena", - "Parc Sanitari Sant Joan De Déu - Numància", + "Ivan Mañero Clinic", + "Juaneda Miramar", + "Lab Clínic ICS Camp de Tarragona-Terres de l'Ebre. Hospital Joan XXIII", + "Laboratori De Referencia De Catalunya", + "Laboratorio Echevarne, Sa", + "Lepant Residencial Qgg, Sl", + "Microbiología HUC San Cecilio", + "Microbiología. Hospital Universitario Virgen del Rocio", + "Ministerio Sanidad", + "Mutua Balear", + "Mutua De Granollers, Mutua De Previsio Social A Prima Fixa", + "Mutualia Clinica Pakea", + "Nou Hospital Evangelic", + "Organizacion Sanitaria Integrada Debagoiena", + "Parc Sanitari Sant Joan De Deu - Numancia", + "Parc Sanitari Sant Joan De Deu - Recinte Sant Boi.", + "Parc Sanitari Sant Joan De Deu - Til·Lers", + "Parc Sanitari Sant Joan De Deu - Uhpp - 1", + "Parc Sanitari Sant Joan De Deu - Uhpp - 2", + "Pius Hospital De Valls", + "Plataforma de Genómica y Bioinformática", + "Plataforma de Medicina Computacional, Fundación Progreso y Salud", + "Policlinica Comarcal Del Vendrell.", + "Policlinica Gipuzkoa", + "Policlinica Nuestra Sra. Del Rosario", + "Policlinico Riojano Nuestra Señora De Valvanera", + "Presidencia del Gobierno", "Prytanis Hospitalet Centre Sociosanitari", - "Comunitat Terapèutica Arenys De Munt", - "Hospital Sociosanitari Pere Virgili", + "Prytanis Sant Boi Centre Sociosanitari", + "Quinta Medica De Reposo", + "Red De Salud Mental De Araba (Hospital Psiquiatrico De Araba)", + "Residencia Alt Camp", + "Residencia De Gent Gran Puig D'En Roca", + "Residencia De Salud Mental Nuestra Se?Ora Del Carmen", + "Residencia Geriatrica Maria Gay", + "Residencia L'Estada", + "Residencia Puig-Reig", + "Residencia Santa Susanna", + "Residencia Santa Tecla Ponent", + "Residencia Terraferma", + "Residencia Vila-Seca", + "Ribera Hospital De Molina", + "Ronda De Dalt, Centre Sociosanitari", + "Sanatorio Bilbaino", + "Sanatorio Dr. Muñoz", + "Sanatorio Esquerdo, S.A.", + "Sanatorio Nuestra Señora Del Rosario", + "Sanatorio Sagrado Corazon", + "Sanatorio San Francisco De Borja Fontilles", + "Sanatorio Usurbil, S. L.", + "Santo Y Real Hospital De Caridad", + "Sar Mont Marti", + "Serveis Clinics, S.A.", + "Servicio Madrileño De Salud", + "Servicio de Microbiologia HU Son Espases", + "Servicios Sanitarios Y Asistenciales", + "U.R.R. De Enfermos Psiquicos Alcohete", + "Unidad De Rehabilitacion De Larga Estancia", + "Unidad Rehabilitadora De Media Estancia Profesor Rey Ardid", + "Unidades Clinicas Y De Rehabilitacion De Salud Mental", + "Unitat Polivalent Benito Menni En Salut Mental De L'Hospitalet-El Prat De Llobregat", + "Unitat Polivalent En Salut Mental D'Amposta", + "Unitat Polivalent Salut Mental Barcelona-Nord", + "Unitat Terapeutica-Educativa Acompanya'M", + "Villablanca Serveis Assistencials, Sa", + "Vithas Hospital Montserrat", + "Vithas Hospital Nosa Señora De Fatima", + "Vithas Hospital Perpetuo Internacional", + "Vithas Hospital Santa Cruz" + ] + }, + "sequencing_institution": { + "enum": [ + "Adinfa, Sociedad Cooperativa Andaluza", + "Alm Univass S.L.", + "Antic Hospital De Sant Jaume I Santa Magdalena", + "Aptima Centre Clinic - Mutua De Terrassa", + "Area Psiquiatrica San Juan De Dios", + "Avances Medicos S.A.", + "Avantmedic", + "Banc de Sang i Teixits Catalunya", "Benito Menni Complex Assistencial En Salut Mental", - "Hospital Sanitas Cima", - "Parc Sanitari Sant Joan De Deu - Brians 1.", - "Institut Català D'Oncologia - Hospital Germans Trias I Pujol", - "CAP La Salut EAP Badalona", - "CAP Mataró-6 (Gatassa)", - "CAP Can Mariner Santa Coloma-1", - "CAP Montmeló (Montornès)", + "Benito Menni, Complex Assistencial En Salut Mental", + "Cap La Salut", + "Cap Mataro Centre", + "Cap Montmelo", + "Cap Montornes", + "Casal De Curacio", + "Casaverde Centro De Rehabilitacion Neurologico De Extremadura S.L.", + "Casta Guadarrama", + "Castell D'Oliana Residencial,S.L", + "Catlab-Centre Analitiques Terrassa, Aie", "Centre Collserola Mutual", + "Centre D'Hospitalitzacio I Hospital De Dia Trastorns De La Conducta", + "Centre D'Oftalmologia Barraquer", + "Centre De Prevencio I Rehabilitacio Asepeyo", + "Centre De Salut Doctor Vilaseca-Can Mariner", + "Centre Forum", + "Centre Geriatric Del Maresme", + "Centre Hospitalari Policlinica Barcelona", + "Centre Integral De Serveis En Salut Mental Comunitaria", + "Centre La Creueta", + "Centre Medic Molins, Sl", + "Centre Mq Reus", + "Centre Palamos Gent Gran", + "Centre Polivalent Can Fosc", + "Centre Sanitari Del Solsones, Fpc", + "Centre Social I Sanitari Frederica Montseny", + "Centre Sociosanitari Bernat Jaume", + "Centre Sociosanitari Blauclinic Dolors Aleu", + "Centre Sociosanitari Can Torras", + "Centre Sociosanitari Ciutat De Reus", + "Centre Sociosanitari D'Esplugues", + "Centre Sociosanitari De L'Hospitalet - Consorci Sanitari Integral", + "Centre Sociosanitari De Puigcerda", + "Centre Sociosanitari Del Centre Integral De Salut Cotxeres", + "Centre Sociosanitari El Carme", + "Centre Sociosanitari I Residencia Assistida Salou", + "Centre Sociosanitari Isabel Roig", + "Centre Sociosanitari Llevant", + "Centre Sociosanitari Parc Hospitalari Marti I Julia", + "Centre Sociosanitari Ricard Fortuny", + "Centre Sociosanitari Sant Jordi De La Vall D'Hebron", "Centre Sociosanitari Sarquavitae Sant Jordi", + "Centre Sociosanitari Verge Del Puig", + "Centres Assistencials Dr. Emili Mira I Lopez (Recinte Torribera).", + "Centro Asistencial Albelda De Iregua", + "Centro Asistencial Hnas. Hospitalarias Del Sagrado Corazon De Jesus", + "Centro Asistencial San Juan De Dios", + "Centro De Atencion A La Salud Mental, La Milagrosa", + "Centro De Rehabilitacion Neurologica Casaverde", + "Centro De Rehabilitacion Psicosocial Nuestra Señora Del Pilar", + "Centro De Rehabilitacion Psicosocial San Juan De Dios", + "Centro De Rehabilitacion Psicosocial Santo Cristo De Los Milagros", + "Centro De Tratamiento De Drogodependientes El Alba", + "Centro De Tratamiento Integral Montevil", + "Centro Habilitado Ernest Lluch", + "Centro Hospitalario Benito Menni", + "Centro Hospitalario De Alta Resolucion De Cazorla", + "Centro Hospitalario Padre Menni", + "Centro Medico De Asturias", + "Centro Medico El Carmen", + "Centro Medico Pintado", + "Centro Medico Teknon, Grupo Quironsalud", + "Centro Militar de Veterinaria de la Defensa", + "Centro Neuropsiquiatrico Nuestra Señora Del Carmen", + "Centro Oncoloxico De Galicia", + "Centro Residencial Domusvi La Salut Josep Servat.", + "Centro Salud Mental Perez Espinosa", + "Centro San Francisco Javier", + "Centro San Juan De Dios Ciempozuelos", + "Centro Sanitario Bajo Cinca-Baix Cinca", + "Centro Sanitario Cinco Villas", + "Centro Sanitario Residencial Las Palmas (Cesar Las Palmas)", + "Centro Sociosanitario De Convalecencia Nuestra Señora Virgen Del Carmen", + "Centro Sociosanitario De Convalencencia Los Jazmines", + "Centro Sociosanitario De Merida", + "Centro Sociosanitario De Plasencia", + "Centro Terapeutico Vista Alegre", + "Centro de Investigación Biomédica de Aragón", + "Clinica Activa Mutua 2008", + "Clinica Arcangel San Miguel - Pamplona", + "Clinica Asturias", + "Clinica Bandama", + "Clinica Bofill", + "Clinica Cajal", + "Clinica Cemtro", + "Clinica Corachan", + "Clinica Coroleu - Ssr Hestia.", + "Clinica Creu Blanca", + "Clinica Cristo Rey", + "Clinica De Salud Mental Miguel De Mañara", + "Clinica Diagonal", + "Clinica Doctor Sanz Vazquez", + "Clinica Dr. Leon", + "Clinica El Seranil", + "Clinica Ercilla Mutualia", + "Clinica Galatea", + "Clinica Girona", + "Clinica Guimon, S.A.", + "Clinica Imq Zorrotzaurre", + "Clinica Imske", + "Clinica Indautxu, S.A.", + "Clinica Isadora S.A.", + "Clinica Jorgani", + "Clinica Juaneda", + "Clinica Juaneda Mahon", + "Clinica Juaneda Menorca", + "Clinica La Luz, S.L.", + "Clinica Lluria", + "Clinica Lopez Ibor", + "Clinica Los Alamos", + "Clinica Los Manzanos", + "Clinica Los Naranjos", + "Clinica Luz De Palma", + "Clinica Mc Copernic", + "Clinica Mc Londres", + "Clinica Mi Nova Aliança", + "Clinica Montpellier, Grupo Hla, S.A.U", + "Clinica Nostra Senyora De Guadalupe", + "Clinica Nostra Senyora Del Remei", + "Clinica Nuestra Se?Ora De Aranzazu", + "Clinica Nuestra Señora De La Paz", + "Clinica Perpetuo Socorro De Lerida, Grupo Hla, Slu", + "Clinica Planas", + "Clinica Ponferrada Recoletas", + "Clinica Psicogeriatrica Josefina Arregui", + "Clinica Psiquiatrica Bellavista", + "Clinica Psiquiatrica Padre Menni", + "Clinica Psiquiatrica Somio", + "Clinica Quirurgica Onyar", + "Clinica Residencia El Pinar", + "Clinica Rotger", + "Clinica Sagrada Familia", + "Clinica Salus Infirmorum", + "Clinica San Felipe", + "Clinica San Miguel", + "Clinica San Rafael", + "Clinica Sant Antoni", + "Clinica Sant Josep", + "Clinica Santa Creu", + "Clinica Santa Isabel", + "Clinica Santa Maria De La Asuncion (Inviza S. A.)", + "Clinica Santa Teresa", + "Clinica Soquimex", + "Clinica Tara", + "Clinica Terres De L'Ebre", + "Clinica Tres Torres", + "Clinica Universidad De Navarra", + "Clinica Virgen Blanca", + "Clinica Vistahermosa Grupo Hla", + "Clinicas Del Sur Slu", + "Complejo Asistencial Benito Menni", + "Complejo Asistencial De Soria", + "Complejo Asistencial De Zamora", + "Complejo Asistencial De Ávila", + "Complejo Asistencial Universitario De Burgos", + "Complejo Asistencial Universitario De León", + "Complejo Asistencial Universitario De Palencia", + "Complejo Asistencial Universitario De Salamanca", + "Complejo Hospital Costa Del Sol", + "Complejo Hospital Infanta Margarita", + "Complejo Hospital La Merced", + "Complejo Hospital San Juan De La Cruz", + "Complejo Hospital Universitario Clínico San Cecilio", + "Complejo Hospital Universitario De Jaén", + "Complejo Hospital Universitario De Puerto Real", + "Complejo Hospital Universitario Juan Ramón Jiménez", + "Complejo Hospital Universitario Puerta Del Mar", + "Complejo Hospital Universitario Regional De Málaga", + "Complejo Hospital Universitario Reina Sofía", + "Complejo Hospital Universitario Torrecárdenas", + "Complejo Hospital Universitario Virgen De La Victoria", + "Complejo Hospital Universitario Virgen De Las Nieves", + "Complejo Hospital Universitario Virgen De Valme", + "Complejo Hospital Universitario Virgen Del Rocío", + "Complejo Hospital Universitario Virgen Macarena", + "Complejo Hospital Valle De Los Pedroches", + "Complejo Hospitalario De Albacete", + "Complejo Hospitalario De Cartagena Chc", + "Complejo Hospitalario De Cáceres", + "Complejo Hospitalario De Don Benito-Villanueva De La Serena", + "Complejo Hospitalario De Toledo", + "Complejo Hospitalario Del Área De Salud De Mérida", + "Complejo Hospitalario Gregorio Marañón", + "Complejo Hospitalario Infanta Leonor", + "Complejo Hospitalario La Paz", + "Complejo Hospitalario Llerena-Zafra", + "Complejo Hospitalario San Pedro Hospital De La Rioja", + "Complejo Hospitalario Universitario De Badajoz", + "Complejo Hospitalario Universitario De Canarias", + "Complejo Hospitalario Universitario De Gran Canaria Dr. Negrín", + "Complejo Hospitalario Universitario Insular Materno Infantil", + "Complejo Hospitalario Universitario Nuestra Señora De Candelaria", + "Complejo Instituto Psiquiátrico Servicios De Salud Mental José Germain", + "Complexo Hospitalario Universitario A Coruña", + "Complexo Hospitalario Universitario De Ferrol", + "Complexo Hospitalario Universitario De Lugo", + "Complexo Hospitalario Universitario De Ourense", + "Complexo Hospitalario Universitario De Pontevedra", + "Complexo Hospitalario Universitario De Santiago", + "Complexo Hospitalario Universitario De Vigo", + "Comunitat Terapeutica Arenys De Munt", + "Concheiro Centro Medico Quirurgico", + "Consejería de Sanidad", + "Consorcio Hospital General Universitario De Valencia", + "Consorcio Hospitalario Provincial De Castellon", + "Consorcio LUCIA (SACYL,ITACYL UBU,UVa)", + "Cqm Clinic Maresme, Sl", + "Cti De La Corredoria", + "Eatica", + "Espitau Val D'Aran", + "Fraternidad Muprespa, Mutua Colaboradora Con La Seguridad Social Nº 275", + "Fremap Hospital Majadahonda", + "Fremap, Hospital De Barcelona", + "Fremap, Hospital De Vigo", + "Fremap_Hospital Y Centro De Rehabilitacion De Sevilla", + "Fundacio Hospital De L'Esperit Sant", + "Fundacio Hospital Sant Joan De Deu (Martorell)", + "Fundacio Puigvert - Iuna", + "Fundacio Sanitaria Sant Josep", + "Fundacio Sant Hospital.", + "Fundacion Cudeca. Centro De Cuidados Paliativos", + "Fundacion Hospital De Aviles", + "Fundacion Instituto San Jose", + "Fundacion Instituto Valenciano De Oncologia", + "Fundacion Sanatorio Adaro", + "Fundació Althaia-Manresa", + "Fundació Fisabio", + "Gerencia de Atención Primaria Pontevedra Sur", + "Gerencia de Salud de Area de Soria", + "Germanes Hospitalaries. Hospital Sagrat Cor", + "Grupo Quironsalud Pontevedra", + "Hc Marbella International Hospital", + "Helicopteros Sanitarios Hospital", + "Hestia Balaguer.", + "Hestia Duran I Reynals", + "Hestia Gracia", + "Hestia La Robleda", + "Hestia Palau.", + "Hestia San Jose", + "Hm El Pilar", + "Hm Galvez", + "Hm Hospitales 1.989, S.A.", + "Hm Malaga", + "Hm Modelo-Belen", + "Hm Nou Delfos", + "Hm Regla", + "Hospital 9 De Octubre", + "Hospital Aita Menni", + "Hospital Alto Guadalquivir", + "Hospital Arnau De Vilanova", + "Hospital Asepeyo Madrid", + "Hospital Asilo De La Real Piedad De Cehegin", + "Hospital Asociado Universitario Guadarrama", + "Hospital Asociado Universitario Virgen De La Poveda", + "Hospital Beata Maria Ana", + "Hospital Begoña", + "Hospital Bidasoa (Osi Bidasoa)", + "Hospital C. M. Virgen De La Caridad Cartagena", + "Hospital Campo Arañuelo", + "Hospital Can Misses", + "Hospital Carlos Iii", + "Hospital Carmen Y Severo Ochoa", + "Hospital Casaverde Valladolid", + "Hospital Catolico Casa De Salud", + "Hospital Central De La Cruz Roja, San Jose Y Santa Adela", + "Hospital Central De La Defensa Gomez Ulla", + "Hospital Centro De Andalucia", + "Hospital Centro De Cuidados Laguna", + "Hospital Centro Medico Virgen De La Caridad Caravaca", + "Hospital Ciudad De Coria", + "Hospital Ciudad De Telde", + "Hospital Civil", + "Hospital Clinic De Barcelona", + "Hospital Clinic De Barcelona, Seu Plato", + "Hospital Clinic De Barcelona, Seu Sabino De Arana", + "Hospital Clinica Benidorm", + "Hospital Clinico Universitario De Valencia", + "Hospital Clinico Universitario De Valladolid", + "Hospital Clinico Universitario Lozano Blesa", + "Hospital Clinico Universitario Virgen De La Arrixaca", + "Hospital Comarcal", + "Hospital Comarcal D'Amposta", + "Hospital Comarcal De Blanes", + "Hospital Comarcal De L'Alt Penedes", + "Hospital Comarcal De Laredo", + "Hospital Comarcal De Vinaros", + "Hospital Comarcal Del Noroeste", + "Hospital Comarcal Del Pallars", + "Hospital Comarcal D´Inca", + "Hospital Comarcal Mora D'Ebre", + "Hospital Comarcal Sant Jaume De Calella", + "Hospital Cruz Roja De Bilbao - Victoria Eugenia", + "Hospital Cruz Roja De Cordoba", + "Hospital Cruz Roja Gijon", + "Hospital D'Igualada", + "Hospital D'Olot I Comarcal De La Garrotxa", + "Hospital De Alcañiz", + "Hospital De Alta Resolucion De Alcala La Real", + "Hospital De Alta Resolucion De Alcaudete", + "Hospital De Alta Resolucion De Benalmadena", + "Hospital De Alta Resolucion De Ecija", + "Hospital De Alta Resolucion De Especialidades De La Janda", + "Hospital De Alta Resolucion De Estepona", + "Hospital De Alta Resolucion De Guadix", + "Hospital De Alta Resolucion De Lebrija", + "Hospital De Alta Resolucion De Loja", + "Hospital De Alta Resolucion De Moron De La Frontera", + "Hospital De Alta Resolucion De Puente Genil", + "Hospital De Alta Resolucion De Utrera", + "Hospital De Alta Resolucion Eltoyo", + "Hospital De Alta Resolucion Sierra De Segura", + "Hospital De Alta Resolucion Sierra Norte", + "Hospital De Alta Resolucion Valle Del Guadiato", + "Hospital De Antequera", + "Hospital De Barbastro", + "Hospital De Barcelona", + "Hospital De Baza", + "Hospital De Benavente Complejo Asistencial De Zamora", + "Hospital De Berga", + "Hospital De Bermeo", + "Hospital De Calahorra", + "Hospital De Campdevanol", + "Hospital De Cantoblanco", + "Hospital De Cerdanya / Hopital De Cerdagne", + "Hospital De Cronicos De Mislata (Antiguo Hospital Militar De Valencia)", + "Hospital De Cuidados Medios Villademar", + "Hospital De Denia", + "Hospital De Emergencia Covid 19", + "Hospital De Figueres", + "Hospital De Formentera", + "Hospital De Gorliz", + "Hospital De Hellin", + "Hospital De Jaca Salud", + "Hospital De Jarrio", + "Hospital De Jove", + "Hospital De L'Esperança.", + "Hospital De La Axarquia", + "Hospital De La Creu Roja Espanyola", + "Hospital De La Fuenfria", + "Hospital De La Inmaculada Concepcion", + "Hospital De La Malva-Rosa", + "Hospital De La Mujer", + "Hospital De La Reina", + "Hospital De La Rioja", + "Hospital De La Santa Creu", + "Hospital De La Santa Creu I Sant Pau", + "Hospital De La Serrania", + "Hospital De La V.O.T. De San Francisco De Asis", + "Hospital De La Vega Lorenzo Guirao", + "Hospital De Leon Complejo Asistencial Universitario De Leon", + "Hospital De Leza", + "Hospital De Llevant", + "Hospital De Lliria", + "Hospital De Luarca", + "Hospital De Manacor", + "Hospital De Manises", + "Hospital De Mataro", + "Hospital De Mendaro (Osi Bajo Deba)", + "Hospital De Merida", + "Hospital De Mollet", + "Hospital De Montilla", + "Hospital De Neurotraumatologia Y Rehabilitacion Del H.U. Virgen De Las Nieves", + "Hospital De Ofra", + "Hospital De Palamos", + "Hospital De Rehabilitacion Psiquiatrica Prisma", + "Hospital De Rehabilitacion Y Traumatologia Del H.U. Virgen Del Rocio", + "Hospital De Riotinto", + "Hospital De Sabadell", + "Hospital De Sagunto", + "Hospital De Salud Mental Casta Salud Arevalo", + "Hospital De Salud Mental Provincial", + "Hospital De San Antonio", + "Hospital De San Jose", + "Hospital De San Rafael", + "Hospital De Sant Andreu", + "Hospital De Sant Celoni.", + "Hospital De Sant Jaume", + "Hospital De Sant Joan De Deu (Manresa)", + "Hospital De Sant Joan De Deu.", + "Hospital De Sant Joan Despi Moises Broggi", + "Hospital De Sant Llatzer", + "Hospital De Sant Pau I Santa Tecla", + "Hospital De Terrassa.", + "Hospital De Tortosa Verge De La Cinta", + "Hospital De Viladecans", + "Hospital De Zafra", + "Hospital De Zaldibar", + "Hospital De Zamudio", + "Hospital De Zumarraga (Osi Goierri - Alto Urola)", + "Hospital Del Mar", + "Hospital Del Norte", + "Hospital Del Oriente De Asturias Francisco Grande Covian", + "Hospital Del Sur", + "Hospital Del Vendrell", + "Hospital Doctor Moliner", + "Hospital Doctor Oloriz", + "Hospital Doctor Sagaz", + "Hospital Don Benito-Villanueva De La Serena", + "Hospital Dos De Maig", + "Hospital Egarsat Sant Honorat", + "Hospital El Angel", + "Hospital El Bierzo", + "Hospital El Escorial", + "Hospital El Pilar", + "Hospital El Tomillar", + "Hospital Ernest Lluch Martin", + "Hospital Fatima", + "Hospital Francesc De Borja De Gandia", + "Hospital Fuensanta", + "Hospital Fuente Bermeja- Complejo Asistencial Universitario De Burgos-", + "Hospital G. Universitario J.M. Morales Meseguer", + "Hospital Galdakao-Usansolo Asociado A La Upv/Ehu", + "Hospital Garcia Orcoyen", + "Hospital General De Almansa", + "Hospital General De Fuerteventura", + "Hospital General De Granollers.", + "Hospital General De L'Hospitalet", + "Hospital General De La Defensa En Zaragoza", + "Hospital General De La Santisima Trinidad", + "Hospital General De Llerena", + "Hospital General De Mallorca", + "Hospital General De Ontinyent", + "Hospital General De Requena", + "Hospital General De Segovia Complejo Asistencial De Segovia", + "Hospital General De Tomelloso", + "Hospital General De Valdepeñas", + "Hospital General De Villalba", + "Hospital General De Villarrobledo", + "Hospital General La Mancha Centro", + "Hospital General Nuestra Señora Del Prado", "Hospital General Penitenciari", - "Centre Sociosanitari De L'Hospitalet - Consorci Sanitari Integral", - "Sar La Salut Josep Servat", - "Clínica Creu Blanca", - "Hestia Gràcia", - "Centre Sociosanitari D'Esplugues", - "Centre Sociosanitari Ricard Fortuny", - "Centre Residencial Amma Diagonal", - "Centre Fòrum", - "Centre Sociosanitari Blauclínic Dolors Aleu", - "Parc Sanitari Sant Joan De Déu - Til·Lers", - "Clínica Galatea", - "Hospital D'Igualada", - "Centre Social I Sanitari Frederica Montseny", - "Parc Sanitari Sant Joan De Deu-Serveis Sanitaris Centre Penitenciari Brians-2", - "Centre Integral De Serveis En Salut Mental Comunitària", - "Centre Sociosanitari Sant Jordi De La Vall D'Hebron", - "Lepant Residencial Qgg, Sl", - "Mapfre Quavitae Barcelona", - "Unitat Polivalent Salut Mental Barcelona-Nord", - "Cqm Clínic Maresme, Sl", - "Serveis Sanitaris La Roca Del Valles 2", - "Clínica Del Vallès", - "Centre Gerontològic Amma Sant Cugat", - "Serveis Sanitaris Sant Joan De Vilatorrada", - "Centre Sociosanitari Stauros", - "Hospital De Sant Joan Despí Moisès Broggi", - "Amma Horta", - "Unitat Polivalent Benito Menni En Salut Mental De L'Hospitalet-El Prat De Llobregat", - "Centre Sociosanitari Del Centre Integral De Salut Cotxeres", - "Clínica Sant Antoni", - "Clínica Diagonal", - "Hospital Sociosanitari De Mollet", - "Centre Sociosanitari Isabel Roig", - "Iván Mañero Clínic", - "Institut Trastorn Límit", - "Centre D'Hospitalització I Hospital De Dia Trastorns De La Conducta", - "Sarquavitae Bonanova", - "Centre La Creueta", - "Unitat Terapèutica-Educativa Acompanya'M", - "Hospital Fuente Bermeja", + "Hospital General Santa Maria Del Puerto", + "Hospital General Universitario De Albacete", + "Hospital General Universitario De Castellon", + "Hospital General Universitario De Ciudad Real", + "Hospital General Universitario De Elche", + "Hospital General Universitario De Elda-Virgen De La Salud", + "Hospital General Universitario Dr. Balmis", + "Hospital General Universitario Gregorio Marañon", + "Hospital General Universitario Los Arcos Del Mar Menor", + "Hospital General Universitario Reina Sofia", + "Hospital General Universitario Santa Lucia", + "Hospital Geriatrico Virgen Del Valle", + "Hospital Gijon", + "Hospital Hernan Cortes Miraflores", + "Hospital Hestia Madrid", + "Hospital Hla Universitario Moncloa", + "Hospital Hm Nuevo Belen", + "Hospital Hm Rosaleda-Hm La Esperanza", + "Hospital Hm San Francisco", + "Hospital Hm Valles", + "Hospital Ibermutuamur - Patologia Laboral", + "Hospital Imed Elche", + "Hospital Imed Gandia", + "Hospital Imed Levante", + "Hospital Imed San Jorge", + "Hospital Infanta Elena", + "Hospital Infanta Margarita", + "Hospital Infantil", + "Hospital Infantil Universitario Niño Jesus", + "Hospital Insular De Lanzarote", + "Hospital Insular Nuestra Señora De Los Reyes", + "Hospital Intermutual De Euskadi", + "Hospital Intermutual De Levante", + "Hospital Internacional Hcb Denia", + "Hospital Internacional Hm Santa Elena", + "Hospital Jaume Nadal Meroles", + "Hospital Jerez Puerta Del Sur", + "Hospital Joan March", + "Hospital Juaneda Muro", + "Hospital La Antigua", + "Hospital La Inmaculada", + "Hospital La Magdalena", + "Hospital La Merced", + "Hospital La Milagrosa S.A.", + "Hospital La Paloma", + "Hospital La Pedrera", + "Hospital La Vega Grupo Hla", + "Hospital Latorre", + "Hospital Lluis Alcanyis De Xativa", + "Hospital Los Madroños", + "Hospital Los Montalvos (Complejo Asistencial Universitario De Salamanca)", + "Hospital Los Morales", + "Hospital Mare De Deu De La Merce", + "Hospital Marina Baixa De La Vila Joiosa", + "Hospital Maritimo De Torremolinos", + "Hospital Materno - Infantil Del H.U. Reina Sofia", + "Hospital Materno Infantil", + "Hospital Materno Infantil Del H.U.R. De Malaga", + "Hospital Materno-Infantil", + "Hospital Materno-Infantil Del H.U. De Jaen", + "Hospital Materno-Infantil Del H.U. Virgen De Las Nieves", + "Hospital Mateu Orfila", + "Hospital Maz", + "Hospital Md Anderson Cancer Center Madrid", + "Hospital Medimar Internacional", + "Hospital Medina Del Campo", + "Hospital Mediterraneo", + "Hospital Mesa Del Castillo", + "Hospital Metropolitano De Jaen", + "Hospital Mompia", + "Hospital Monte Naranco", + "Hospital Monte San Isidro Complejo Asistencial Universitario De Leon", + "Hospital Municipal De Badalona", + "Hospital Mutua Montañesa", + "Hospital Nacional De Paraplejicos", + "Hospital Neurotraumatologico Del H.U. De Jaen", + "Hospital Nisa Aguas Vivas", + "Hospital Ntra. Sra. Del Perpetuo Socorro", + "Hospital Nuestra Señora De America", + "Hospital Nuestra Señora De Gracia", + "Hospital Nuestra Señora De Guadalupe", + "Hospital Nuestra Señora De La Salud Hla Sl", + "Hospital Nuestra Señora De Sonsoles", + "Hospital Obispo Polanco", + "Hospital Ochoa", + "Hospital Palma Del Rio", + "Hospital Pardo De Aravaca", + "Hospital Pare Jofre", + "Hospital Parque", + "Hospital Parque Fuerteventura", + "Hospital Parque Marazuela", + "Hospital Parque San Francisco", + "Hospital Parque Vegas Altas", + "Hospital Perpetuo Socorro", + "Hospital Perpetuo Socorro Alameda", + "Hospital Polivalente Anexo Juan Carlos I", + "Hospital Provincial", + "Hospital Provincial De Avila", + "Hospital Provincial De Zamora Complejo Asistencial De Zamora", + "Hospital Provincial Ntra.Sra.De La Misericordia", + "Hospital Psiquiatric", + "Hospital Psiquiatrico Doctor Rodriguez Lafora", + "Hospital Psiquiatrico Penitenciario", + "Hospital Psiquiatrico Penitenciario De Fontcalent", + "Hospital Psiquiatrico Roman Alberca", + "Hospital Psiquiatrico San Francisco De Asis", + "Hospital Psiquiatrico San Juan De Dios", + "Hospital Psiquiatrico San Luis", + "Hospital Publico Da Barbanza", + "Hospital Publico Da Mariña", + "Hospital Publico De Monforte", + "Hospital Publico De Valdeorras", + "Hospital Publico De Verin", + "Hospital Publico Do Salnes", + "Hospital Publico Virxe Da Xunqueira", + "Hospital Puerta De Andalucia", + "Hospital Punta De Europa", + "Hospital Quiron Campo De Gibraltar", + "Hospital Quiron Salud Costa Adeje", + "Hospital Quiron Salud Del Valles - Clinica Del Valles", + "Hospital Quiron Salud Lugo", + "Hospital Quiron Salud Tenerife", + "Hospital Quiron Salud Valle Del Henares", + "Hospital Quironsalud A Coruña", + "Hospital Quironsalud Albacete", + "Hospital Quironsalud Barcelona", + "Hospital Quironsalud Bizkaia", + "Hospital Quironsalud Caceres", + "Hospital Quironsalud Ciudad Real", + "Hospital Quironsalud Clideba", + "Hospital Quironsalud Cordoba", + "Hospital Quironsalud Huelva", + "Hospital Quironsalud Infanta Luisa", + "Hospital Quironsalud Malaga", + "Hospital Quironsalud Marbella", + "Hospital Quironsalud Murcia", + "Hospital Quironsalud Palmaplanas", + "Hospital Quironsalud Sagrado Corazon", + "Hospital Quironsalud San Jose", + "Hospital Quironsalud Santa Cristina", + "Hospital Quironsalud Son Veri", + "Hospital Quironsalud Sur", + "Hospital Quironsalud Toledo", + "Hospital Quironsalud Torrevieja", + "Hospital Quironsalud Valencia", + "Hospital Quironsalud Vida", + "Hospital Quironsalud Vitoria", + "Hospital Quironsalud Zaragoza", + "Hospital Rafael Mendez", + "Hospital Recoletas Cuenca, S.L.U.", "Hospital Recoletas De Burgos", - "Hospital San Juan De Dios De Burgos", - "Hospital Santos Reyes", - "Hospital Residencia Asistida De La Luz", - "Hospital Santiago Apóstol", - "Complejo Asistencial Universitario De Burgos", - "Hospital Universitario De Burgos", - "Hospital San Pedro De Alcántara", - "Hospital Provincial Nuestra Señora De La Montaña", - "Hospital Ciudad De Coria", - "Hospital Campo Arañuelo", - "Hospital Virgen Del Puerto", - "Hospital Sociosanitario De Plasencia", - "Complejo Hospitalario De Cáceres", - "Hospital Quirón Salud De Cáceres", - "Clínica Soquimex", - "Clinica Quirúrgica Cacereña, S.A-(Clínica San Francisco)", - "Hospital Universitario Puerta Del Mar", - "Clínica La Salud", - "Hospital San Rafael", - "Hospital Punta De Europa", - "Clínica Los Álamos", - "Hospital Universitario De Jerez De La Frontera", + "Hospital Recoletas De Palencia", + "Hospital Recoletas De Zamora", + "Hospital Recoletas Marbella Slu", + "Hospital Recoletas Salud Campo Grande", + "Hospital Recoletas Salud Felipe Ii", + "Hospital Recoletas Segovia Nuestra Señora De La Misericordia", + "Hospital Reina Sofia", + "Hospital Residencia Sant Camil - Consorci Sanitari De L'Alt Penedes I Garraf", + "Hospital Ribera Almendralejo", + "Hospital Ribera Badajoz", + "Hospital Ribera Covadonga", + "Hospital Ribera Juan Cardona", + "Hospital Ribera Polusa", + "Hospital Ribera Povisa", + "Hospital Ricardo Bermingham", + "Hospital Rio Carrion Complejo Asistencial Universitario De Palencia", + "Hospital Royo Villanova", + "Hospital Ruber Internacional", + "Hospital Ruber Juan Bravo", + "Hospital Sagrado Corazon De Jesus", + "Hospital San Agustin", + "Hospital San Camilo", + "Hospital San Carlos De Denia Grupo Hla", + "Hospital San Carlos De San Fernando", + "Hospital San Eloy", + "Hospital San Francisco De Asis", + "Hospital San Jose", + "Hospital San Jose Solimat", + "Hospital San Juan De Dios", + "Hospital San Juan De Dios Burgos", + "Hospital San Juan De Dios De Cordoba", + "Hospital San Juan De Dios De Sevilla", + "Hospital San Juan De Dios Del Aljarafe", + "Hospital San Juan De Dios Donostia", + "Hospital San Juan De Dios Leon", + "Hospital San Juan De Dios Tenerife", + "Hospital San Juan De La Cruz", "Hospital San Juan Grande", - "Hospital De La Línea De La Concepción", - "Hospital General Santa María Del Puerto", - "Hospital Universitario De Puerto Real", - "Hospital Virgen De Las Montañas", - "Hospital Virgen Del Camino", - "Hospital Jerez Puerta Del Sur", - "Hospital Viamed Bahía De Cádiz", - "Hospital Punta De Europa", - "Hospital Viamed Novo Sancti Petri", - "Clínica Serman - Instituto Médico", - "Hospital Quirón Campo De Gibraltar", - "Hospital Punta Europa. Unidad De Cuidados Medios", - "Hospital San Carlos", - "Hospital De La Línea De La Concepción", - "Hospital General Universitario De Castellón", - "Hospital La Magdalena", - "Consorcio Hospitalario Provincial De Castellón", - "Hospital Comarcal De Vinaròs", - "Hospital Universitario De La Plana", - "Instituto De Traumatologia De Unión De Mutuas (Matepss Nº 267)", - "Hospital Rey D. Jaime", - "Servicios Sanitarios Del Centro Penitenciario De Castellón Ii (Albocàsser)", - "Servicios Sanitarios Y Asistenciales", - "Hospital Quirónsalud Ciudad Real", - "Hospital General La Mancha Centro", - "Hospital Virgen De Altagracia", - "Hospital Santa Bárbara", - "Hospital General De Valdepeñas", - "Hospital General De Ciudad Real", - "Hospital General De Tomelloso", - "Hospital Universitario Reina Sofía", - "Hospital Los Morales", - "Hospital Materno-Infantil Del H.U. Reina Sofía", - "Hospital Provincial", - "Hospital De La Cruz Roja De Córdoba", - "Hospital San Juan De Dios De Córdoba", - "Hospital Infanta Margarita", - "Hospital Valle De Los Pedroches", - "Hospital De Montilla", - "Hospital La Arruzafa-Instituto De Oftalmología", - "Hospital De Alta Resolución De Puente Genil", - "Hospital De Alta Resolución Valle Del Guadiato", - "Hospital General Del H.U. Reina Sofía", - "Hospital Quironsalud Córdoba", - "Complexo Hospitalario Universitario A Coruña", - "Hospital Universitario A Coruña", - "Hospital Teresa Herrera (Materno-Infantil)", - "Hospital Maritimo De Oza", - "Centro Oncoloxico De Galicia", - "Hospital Quironsalud A Coruña", - "Hospital Hm Modelo", - "Maternidad Hm Belen", - "Hospital Abente Y Lago", - "Complexo Hospitalario Universitario De Ferrol", - "Hospital Universitario Arquitecto Marcide", - "Hospital Juan Cardona", - "Hospital Naval", - "Complexo Hospitalario Universitario De Santiago", - "Hospital Clinico Universitario De Santiago", - "Hospital Gil Casares", - "Hospital Medico Cirurxico De Conxo", - "Hospital Psiquiatrico De Conxo", - "Hospital Hm Esperanza", - "Hospital Hm Rosaleda", - "Sanatorio La Robleda", - "Hospital Da Barbanza", - "Hospital Virxe Da Xunqueira", - "Hm Modelo (Grupo)", - "Hospital Hm Rosaleda - Hm La Esperanza", - "Hospital Virgen De La Luz", - "Hospital Recoletas Cuenca S.L.U.", - "Hospital Universitari De Girona Dr. Josep Trueta", - "Clínica Bofill", - "Clínica Girona", - "Clínica Quirúrgica Onyar", - "Clínica Salus Infirmorum", - "Hospital De Sant Jaume", - "Hospital De Campdevànol", - "Hospital De Figueres", - "Clínica Santa Creu", + "Hospital San Lazaro", + "Hospital San Pedro De Alcantara", + "Hospital San Rafael", + "Hospital San Roque De Guia", + "Hospital San Telmo ,Complejo Asistencial Universitario De Palencia", + "Hospital Sanitas Cima", + "Hospital Sant Antoni Abat - Consorci Sanitari Del Garraf.", + "Hospital Sant Joan De Deu", + "Hospital Sant Joan De Deu Inca", + "Hospital Sant Joan De Deu Lleida", + "Hospital Sant Vicent Del Raspeig", + "Hospital Santa Ana", + "Hospital Santa Barbara", + "Hospital Santa Barbara ,Complejo Asistencial De Soria", + "Hospital Santa Caterina-Ias", + "Hospital Santa Clotilde", + "Hospital Santa Isabel Complejo Asistencial Universitario De Leon", + "Hospital Santa Maria", + "Hospital Santa Maria Del Rosell", + "Hospital Santa Marina", + "Hospital Santa Teresa", + "Hospital Santiago Apostol", + "Hospital Santos Reyes", + "Hospital Siberia-Serena", + "Hospital Sierrallana", "Hospital Sociosanitari De Lloret De Mar", - "Hospital D'Olot I Comarcal De La Garrotxa", - "Hospital De Palamós", - "Residència De Gent Gran Puig D'En Roca", - "Hospital Comarcal De Blanes", - "Residència Geriàtrica Maria Gay", + "Hospital Sociosanitari De Mollet", + "Hospital Sociosanitari Francoli", "Hospital Sociosanitari Mutuam Girona", - "Centre Sociosanitari De Puigcerdà", - "Centre Sociosanitari Bernat Jaume", - "Institut Català D'Oncologia Girona - Hospital Josep Trueta", - "Hospital Santa Caterina-Ias", - "Centre Palamós Gent Gran", - "Centre Sociosanitari Parc Hospitalari Martí I Julià", - "Hospital De Cerdanya / Hôpital De Cerdagne", - "Hospital General Del H.U. Virgen De Las Nieves", - "Hospital De Neurotraumatología Y Rehabilitación", - "Hospital De La Inmaculada Concepción", - "Hospital De Baza", - "Hospital Santa Ana", - "Hospital Universitario Virgen De Las Nieves", - "Hospital De Alta Resolución De Guadix", - "Hospital De Alta Resolución De Loja", - "Hospital Vithas La Salud", - "Hospital Universitario San Cecilio", - "Microbiología HUC San Cecilio", - "Hospital Materno-Infantil Virgen De Las Nieves", - "Hospital Universitario De Guadalajara", - "Clínica La Antigua", - "Clínica Dr. Sanz Vázquez", - "U.R.R. De Enfermos Psíquicos Alcohete", - "Instituto De Enfermedades Neurológicas De Castilla-La Mancha", - "Mutualia-Clinica Pakea", - "Hospital Ricardo Bermingham (Fundación Matia)", - "Policlínica Gipuzkoa S.A.", - "Hospital Quirón Salud Donostia", - "Fundación Onkologikoa Fundazioa", - "Organización Sanitaria Integrada Bidasoa (Osi Bidasoa)", - "Organización Sanitaria Integrada Alto Deba", - "Hospital Aita Menni", - "Hospital Psiquiátrico San Juan De Dios", - "Clinica Santa María De La Asunción, (Inviza, S.A.)", - "Sanatorio De Usurbil, S.L.", - "Hospital De Zumarraga", - "Hospital De Mendaro", - "Hospital Universitario Donostia-Donostia Unibertsitate Ospitalea", - "Hospital San Juan De Dios Donostia", - "Hospital Infanta Elena", - "Hospital Vázquez Díaz", - "Hospital Blanca Paloma", - "Clínica Los Naranjos", - "Hospital De Riotinto", - "Hospital Universitario Juan Ramón Jiménez", - "Hospital Juan Ramón Jiménez", - "Hospital Costa De La Luz", - "Hospital Virgen De La Bella", - "Hospital General San Jorge", - "Centro De Rehab. Psicosocial Santo Cristo De Los Milagros", - "Hospital Sagrado Corazón De Jesús", - "Hospital Viamed Santiago", - "Hospital De Barbastro", - "Hospital De Jaca.Salud", - "Centro Sanitario Bajo Cinca-Baix Cinca", - "Hospital General Del H.U. De Jaén", - "Hospital Doctor Sagaz", - "Hospital Neurotraumatológico Del H.U. De Jaén", - "Clínica Cristo Rey", - "Hospital San Agustín", - "Hospital San Juan De La Cruz", - "Hospital Universitario De Jaén", - "Hospital Alto Guadalquivir", - "Hospital Materno-Infantil Del H.U. De Jaén", - "Hospital De Alta Resolución Sierra De Segura", - "Hospital De Alta Resolución De Alcaudete", - "Hospital De Alta Resolución De Alcalá La Real", - "Hospital De León", - "Hospital Monte San Isidro", - "Regla Hm Hospitales", - "Hospital Hm San Francisco", - "Hospital Santa Isabel", - "Hospital El Bierzo", - "Hospital De La Reina", - "Hospital San Juan De Dios", - "Complejo Asistencial Universitario De León", - "Clínica Altollano", - "Clínica Ponferrada", - "Hospital Valle De Laciana", + "Hospital Sociosanitari Mutuam Guell", + "Hospital Sociosanitari Pere Virgili", + "Hospital Son Llatzer", + "Hospital Tierra De Barros", "Hospital Universitari Arnau De Vilanova De Lleida", - "Hospital Santa Maria", - "Vithas Hospital Montserrat", - "Clínica Perpetuo Socorro De Lérida, Grupo Hla, Slu", - "Clínica Terres De Ponent", - "Clínica Psiquiàtrica Bellavista", - "Fundació Sant Hospital.", - "Centre Sanitari Del Solsonès, Fpc", - "Hospital Comarcal Del Pallars", - "Espitau Val D'Aran", - "Hestia Balaguer.", - "Residència Terraferma", - "Castell D'Oliana Residencial,S.L", - "Hospital Jaume Nadal Meroles", - "Sant Joan De Déu Terres De Lleida", - "Reeixir", - "Hospital Sant Joan De Déu Lleida", - "Complejo Hospitalario San Millan San Pedro De La Rioja", - "Hospital San Pedro", - "Hospital General De La Rioja", - "Policlínico Riojano Nuestra Señora De Valvanera, S.A.", - "Fundación Hospital Calahorra", - "Clínica Los Manzanos", - "Centro Asistencial De Albelda De Iregua", - "Centro Sociosanitario De Convalecencia Los Jazmines", - "Centro Sociosanitario De Convalecencia Nuestra Señora Virgen Del Carmen", - "Complexo Hospitalario Universitario De Lugo", - "Hospital De Calde (Psiquiatrico)", - "Hospital Polusa", - "Sanatorio Nosa Señora Dos Ollos Grandes", - "Hospital Publico Da Mariña", - "Hospital De Monforte", - "Hospital Universitario Lucus Augusti", - "Hospital Universitario La Paz", - "Hospital Ramón Y Cajal", + "Hospital Universitari De Bellvitge", + "Hospital Universitari De Girona Dr. Josep Trueta", + "Hospital Universitari De Sant Joan De Reus", + "Hospital Universitari De Vic", + "Hospital Universitari General De Catalunya", + "Hospital Universitari Germans Trias I Pujol De Badalona", + "Hospital Universitari Joan Xxiii De Tarragona", + "Hospital Universitari Mutua De Terrassa", + "Hospital Universitari Quir¿N Dexeus", + "Hospital Universitari Sagrat Cor", + "Hospital Universitari Son Espases", + "Hospital Universitari Vall D'Hebron", "Hospital Universitario 12 De Octubre", - "Hospital Clínico San Carlos", - "Hospital Virgen De La Torre", - "Hospital Universitario Santa Cristina", - "Hospital Universitario De La Princesa", - "Hospital Infantil Universitario Niño Jesus", - "Hospital Central De La Cruz Roja San José Y Santa Adela", - "Hospital Carlos Iii", - "Hospital Cantoblanco", - "Complejo Hospitalario Gregorio Marañón", - "Hospital General Universitario Gregorio Marañón", - "Instituto Provincial De Rehabilitación", - "Hospital Dr. R. Lafora", - "Sanatorio Nuestra Señora Del Rosario", - "Hospital De La V.O.T. De San Francisco De Asís", - "Hospital Quirónsalud San José", - "Hospital Beata María Ana. Hh. Hospitalarias Sgdo. C. De Jesús", - "Clínica Santa Elena", - "Hospital San Francisco De Asís", - "Clínica San Miguel", - "Clínica Nuestra Sra. De La Paz", - "Fundación Instituto San José", - "Hospital Universitario Fundación Jiménez Díaz", - "Hestia Madrid (Clínica Sear, S.A.)", - "Hospital Ruber Juan Bravo 39", - "Hospital Vithas Nuestra Señora De América", - "Hospital Virgen De La Paloma, S.A.", - "Clínica La Luz, S.L.", - "Fuensanta S.L. (Clínica Fuensanta)", - "Hospital Ruber Juan Bravo 49", - "Hospital Ruber Internacional", - "Clínica La Milagrosa", - "Hospital Universitario La Zarzuela", - "Hospital Universitario Hm Nuevo Belen", - "Sanatorio Neuropsiquiátrico Doctor León", - "Instituto De Investigaciones Neuropsiquiátricas Dr. López Ibor", - "Sanatorio Esquerdo, S.A.", - "Hospital Central De La Defensa Gomez Ulla", - "Hospital Universitario Príncipe De Asturias", - "Hospital De La Fuenfría", - "Hh. Hh. Sgdo. C. De Jesús. Complejo Asistencial Benito Menni", - "Centro San Juan De Dios", - "Hospital Monográfico Asepeyo De Traumat. Cirugía Y Rehabilitación", - "Hospital Guadarrama", - "Hospital Universitario Severo Ochoa", - "Instituto Psiquiátrico Servicios De Salud Mental José Germain-1 Luna", - "Fremap Hospital Y Centro De Rehabilitación De Majadahonda", - "Hospital Universitario De Móstoles", - "Hospital El Escorial", - "Hospital Virgen De La Poveda", - "Hospital De Madrid", - "Hospital Universitario De Getafe", - "Clínica Isadora", - "Hospital Universitario Moncloa", - "Hospital Universitario Fundación Alcorcón", - "Clinica Cemtro", - "Hospital Universitario Hm Montepríncipe", - "Centro Oncológico Md Anderson International España", - "Hospital Quironsalud Sur", + "Hospital Universitario Araba (Sede Txagorritxu Y Sede Santiago)", + "Hospital Universitario Basurto", + "Hospital Universitario Central De Asturias", + "Hospital Universitario Clinico San Carlos", + "Hospital Universitario Clinico San Cecilio", + "Hospital Universitario Costa Del Sol", + "Hospital Universitario Cruces", + "Hospital Universitario De Badajoz", + "Hospital Universitario De Burgos Complejo Asistencial Univer. De Burgos", + "Hospital Universitario De Cabueñes", + "Hospital Universitario De Caceres", + "Hospital Universitario De Canarias", + "Hospital Universitario De Ceuta", "Hospital Universitario De Fuenlabrada", - "Hospital Universitario Hm Torrelodones", - "Complejo Universitario La Paz", - "Hospital La Moraleja", - "Hospital Los Madroños", - "Hospital Quirónsalud Madrid", - "Hospital Centro De Cuidados Laguna", - "Hospital Universitario Madrid Sanchinarro", - "Hospital Universitario Infanta Elena", - "Vitas Nisa Pardo De Aravaca.", - "Hospital Universitario Infanta Sofía", + "Hospital Universitario De Getafe", + "Hospital Universitario De Gran Canaria Dr. Negrin", + "Hospital Universitario De Guadalajara", + "Hospital Universitario De Jaen", + "Hospital Universitario De Jerez De La Frontera", + "Hospital Universitario De La Linea De La Concepcion", + "Hospital Universitario De La Plana", + "Hospital Universitario De La Princesa", + "Hospital Universitario De La Ribera", + "Hospital Universitario De Mostoles", + "Hospital Universitario De Navarra", + "Hospital Universitario De Poniente", + "Hospital Universitario De Puerto Real", + "Hospital Universitario De Salamanca ,Complejo Asistencial Universitario De", + "Hospital Universitario De Salud Mental Juan Carlos I", + "Hospital Universitario De Toledo (Hut)", + "Hospital Universitario De Torrejon", + "Hospital Universitario De Torrevieja", "Hospital Universitario Del Henares", - "Hospital Universitario Infanta Leonor", "Hospital Universitario Del Sureste", "Hospital Universitario Del Tajo", + "Hospital Universitario Donostia", + "Hospital Universitario Dr. Jose Molina Orosa", + "Hospital Universitario Dr. Peset Aleixandre", + "Hospital Universitario Fundacion Alcorcon", + "Hospital Universitario Fundacion Jimenez Diaz", + "Hospital Universitario General De La Palma", + "Hospital Universitario Hm Madrid", + "Hospital Universitario Hm Monteprincipe", + "Hospital Universitario Hm Puerta Del Sur", + "Hospital Universitario Hm Sanchinarro", + "Hospital Universitario Hm Torrelodones", + "Hospital Universitario Hospiten Bellevue", + "Hospital Universitario Hospiten Rambla", + "Hospital Universitario Hospiten Sur", "Hospital Universitario Infanta Cristina", + "Hospital Universitario Infanta Elena", + "Hospital Universitario Infanta Leonor", + "Hospital Universitario Infanta Sofia", + "Hospital Universitario Jose Germain", + "Hospital Universitario Juan Ramon Jimenez", + "Hospital Universitario La Moraleja", + "Hospital Universitario La Paz", + "Hospital Universitario La Zarzuela", + "Hospital Universitario Lucus Augusti", + "Hospital Universitario Marques De Valdecilla", + "Hospital Universitario Miguel Servet", + "Hospital Universitario Nuestra Señora De Candelaria", + "Hospital Universitario Nuestra Señora Del Perpetuo Socorro", + "Hospital Universitario Principe De Asturias", "Hospital Universitario Puerta De Hierro Majadahonda", - "Casta Guadarrama", - "Hospital Universitario De Torrejón", - "Hospital Rey Juan Carlos", - "Hospital General De Villalba", - "Hm Universitario Puerta Del Sur", - "Hm Valles", - "Hospital Casaverde De Madrid", - "Clínica Universidad De Navarra", - "Complejo Hospitalario Universitario Infanta Leonor", - "Clínica San Vicente", - "Instituto Psiquiátrico Servicios De Salud Mental José Germain", - "Instituto Psiquiátrico Servicios De Salud Mental José Germain-2 Aragón", - "Hospital General Del H.U.R. De Málaga", - "Hospital Virgen De La Victoria", - "Hospital Civil", - "Centro Asistencial San Juan De Dios", - "Centro Asistencial Hnas. Hosp. Del Sagrado Corazón De Jesús", - "Hospital Vithas Parque San Antonio", - "Hospital El Ángel", - "Hospital Doctor Gálvez", - "Clínica De La Encarnación", - "Hospital Psiquiátrico San Francisco De Asís", - "Clínica Nuestra Sra. Del Pilar", - "Hospital De Antequera", - "Hospital Quironsalud Marbella", - "Hospital De La Axarquía", - "Hospital Marítimo De Torremolinos", - "Hospital Universitario Regional De Málaga", + "Hospital Universitario Puerta Del Mar", + "Hospital Universitario Quironsalud Madrid", + "Hospital Universitario Ramon Y Cajal", + "Hospital Universitario Regional De Malaga", + "Hospital Universitario Reina Sofia", + "Hospital Universitario Rio Hortega", + "Hospital Universitario San Agustin", + "Hospital Universitario San Jorge", + "Hospital Universitario San Juan De Alicante", + "Hospital Universitario San Pedro", + "Hospital Universitario San Roque Las Palmas", + "Hospital Universitario San Roque Maspalomas", + "Hospital Universitario Santa Cristina", + "Hospital Universitario Severo Ochoa", + "Hospital Universitario Torrecardenas", + "Hospital Universitario Vinalopo", "Hospital Universitario Virgen De La Victoria", - "Hospital Materno-Infantil Del H.U.R. De Málaga", - "Hospital Costa Del Sol", - "Hospital F.A.C. Doctor Pascual", - "Clínica El Seranil", - "Hc Marbella International Hospital", - "Hospital Humanline Banús", - "Clínica Rincón", - "Hospiten Estepona", - "Fundación Cudeca. Centro De Cuidados Paliativos", - "Xanit Hospital Internacional", - "Comunidad Terapéutica San Antonio", - "Hospital De Alta Resolución De Benalmádena", - "Hospital Quironsalud Málaga", - "Cenyt Hospital", - "Clínica Ochoa", - "Centro De Reproducción Asistida De Marbella (Ceram)", - "Helicópteros Sanitarios Hospital", - "Hospital De La Serranía", - "Hospital Valle Del Guadalhorce De Cártama", - "Hospital Clínico Universitario Virgen De La Arrixaca", - "Hospital General Universitario Reina Sofía", - "Plataforma de Medicina Computacional, Fundación Progreso y Salud", - "Hospital Psiquiátrico Roman Alberca", - "Hospital Quirónsalud Murcia", - "Hospital La Vega", - "Hospital Mesa Del Castillo", - "Sanatorio Doctor Muñoz S.L.", - "Clínica Médico-Quirúrgica San José, S.A.", - "Hospital Comarcal Del Noroeste", - "Clínica Doctor Bernal S.L.", - "Hospital Santa María Del Rosell", - "Santo Y Real Hospital De Caridad", - "Hospital Nuestra Señora Del Perpetuo Socorro", - "Fundacion Hospital Real Piedad", - "Hospital Virgen Del Alcázar De Lorca", - "Hospital General Universitario Los Arcos Del Mar Menor", + "Hospital Universitario Virgen De Las Nieves", + "Hospital Universitario Virgen De Valme", + "Hospital Universitario Virgen Del Rocio", + "Hospital Universitario Virgen Macarena", + "Hospital Universitario Vithas Las Palmas", + "Hospital Universitario Y Politecnico La Fe", + "Hospital Urduliz Ospitalea", + "Hospital Valle De Guadalhorce De Cartama", + "Hospital Valle De Laciana", + "Hospital Valle De Los Pedroches", + "Hospital Valle Del Nalon", + "Hospital Vazquez Diaz", + "Hospital Vega Baja De Orihuela", + "Hospital Viamed Bahia De Cadiz", + "Hospital Viamed Montecanal", + "Hospital Viamed Novo Sancti Petri", + "Hospital Viamed San Jose", + "Hospital Viamed Santa Angela De La Cruz", + "Hospital Viamed Santa Elena, S.L", + "Hospital Viamed Santiago", + "Hospital Viamed Tarragona", + "Hospital Victoria Eugenia De La Cruz Roja Española", + "Hospital Virgen De Altagracia", + "Hospital Virgen De La Bella", + "Hospital Virgen De La Concha Complejo Asistencial De Zamora", + "Hospital Virgen De La Luz", + "Hospital Virgen De La Torre", + "Hospital Virgen De Las Montañas", + "Hospital Virgen De Los Lirios", + "Hospital Virgen Del Alcazar De Lorca", + "Hospital Virgen Del Camino", "Hospital Virgen Del Castillo", - "Hospital Rafael Méndez", - "Hospital General Universitario J.M. Morales Meseguer", - "Hospital Ibermutuamur-Patología Laboral", - "Hospital De La Vega Lorenzo Guirao", - "Hospital De Molina", - "Clínica San Felipe Del Mediterráneo", - "Hospital De Cuidados Medios Villademar", - "Residencia Los Almendros", - "Complejo Hospitalario Universitario De Cartagena", - "Hospital General Universitario Santa Lucia", - "Consorcio LUCIA (SACYL,ITACYL UBU,UVa)", - "Hospital Perpetuo Socorro Alameda", - "Hospital C.M.V. Caridad Cartagena", - "Centro San Francisco Javier", - "Clinica Psiquiatrica Padre Menni", - "Clinica Universidad De Navarra", - "CATLAB", - "Clinica San Miguel", - "Clínica San Fermín", - "Centro Hospitalario Benito Menni", - "Hospital García Orcoyen", - "Hospital Reina Sofía", - "Clínica Psicogeriátrica Josefina Arregui", - "Complejo Hospitalario De Navarra", - "Complexo Hospitalario Universitario De Ourense", - "Hospital Universitario Cristal", - "Hospital Santo Cristo De Piñor (Psiquiatrico)", - "Hospital Santa Maria Nai", - "Centro Medico El Carmen", - "Hospital De Valdeorras", - "Hospital De Verin", - "Clinica Santa Teresa", - "Hospital Monte Naranco", - "Centro Médico De Asturias", - "Clínica Asturias", - "Clínica San Rafael", - "Hospital Universitario San Agustín", - "Fundación Hospital De Avilés", - "Hospital Carmen Y Severo Ochoa", - "Hospital Comarcal De Jarrio", - "Hospital De Cabueñes", - "Sanatorio Nuestra Señora De Covadonga", - "Fundación Hospital De Jove", - "Hospital Begoña De Gijón, S.L.", - "Hospital Valle Del Nalón", - "Fundació Fisabio", - "Fundación Sanatorio Adaro", - "Hospital V. Álvarez Buylla", - "Hospital Universitario Central De Asturias", - "Hospital Del Oriente De Asturias Francisco Grande Covián", - "Hospital De Luarca -Asistencia Médica Occidentalsl", - "Instituto Salud Mental Pérez-Espinosa Oria, S.L.", - "Clínica Psiquiátrica Somió", - "Clínica Cirugía Plástica Y Estética Fernández Y Fernández Cossío", - "Hospital Gijón", - "Centro Terapéutico Vista Alegre", - "Instituto Oftalmológico Fernández -Vega", - "Hospital Rio Carrión", - "Hospital San Telmo", - "Hospital Psiquiatrico San Luis", - "Área Psiquiátrica Del Centro Asistencial San Juan De Dios", - "Hospital Recoletas De Palencia", - "Complejo Asistencial Universitario De Palencia", - "Hospital Universitario Materno-Infantil De Canarias", - "Hospital Universitario Insular De Gran Canaria", - "Unidades Clínicas Y De Rehabilitación (Ucyr)", - "Sanatorio Dermatológico Regional", - "Fundación Benéfica Canaria Casa Asilo San José", - "Vithas Hospital Santa Catalina", - "Hospital Policlínico La Paloma, S.A.", - "Instituto Policlínico Cajal, S.L.", - "Hospital San Roque Las Palmas De Gran Canaria", - "Clínica Bandama", - "Hospital Doctor José Molina Orosa", - "Hospital Insular De Lanzarote", - "Hospital General De Fuerteventura", - "Quinta Médica De Reposo, S.A.", - "Hospital De San Roque Guía", - "Hospital Ciudad De Telde", - "Complejo Hospitalario Universitario Insular-Materno Infantil", - "Hospital Clínica Roca (Roca Gestión Hospitalaria)", - "Hospital Universitario De Gran Canaria Dr. Negrín", - "Hospiten Lanzarote (Clínicas Del Sur S.L.U.)", - "Complejo Hospitalario Universitario De Gran Canaria Dr. Negrín", - "Hospital San Roque Maspalomas", - "Clínica Parque Fuerteventura", - "Clinica Jorgani", - "Hospital Universitario Montecelo", - "Gerencia de Atención Primaria Pontevedra Sur", - "Hospital Provincial De Pontevedra", - "Hestia Santa Maria", - "Hospital Quironsalud Miguel Dominguez", - "Instituto De Neuro-Rehabilitacion Quironsalud Pontevedra", - "Hospital Meixoeiro", - "Hospital Nicolas Peña", - "Fremap, Hospital De Vigo", - "Hospital Povisa", - "Hospital Hm Vigo", - "Vithas Hospital Nosa Señora De Fatima", - "Concheiro Centro Medico Quirurgico", - "Centro Medico Pintado", - "Sanatorio Psiquiatrico San Jose", - "Clinica Residencia El Pinar", - "Complexo Hospitalario Universitario De Pontevedra", - "Hospital Do Salnes", - "Complexo Hospitalario Universitario De Vigo", - "Hospital Universitario Alvaro Cunqueiro", - "Plataforma de Genómica y Bioinformática", - "Complejo Asistencial Universitario De Salamanca", - "Hospital Universitario De Salamanca", - "Hospital General De La Santísima Trinidad", - "Hospital Los Montalvos", - "Complejo Hospitalario Universitario Ntra. Sra. De Candelaria", - "Hospital Universitario Nuestra Señora De Candelaria", - "Hospital De Ofra", + "Hospital Virgen Del Mar", + "Hospital Virgen Del Miron ,Complejo Asistencial De Soria", + "Hospital Virgen Del Puerto", + "Hospital Vital Alvarez Buylla", + "Hospital Vithas Castellon", + "Hospital Vithas Granada", + "Hospital Vithas Parque San Antonio", + "Hospital Vithas Sevilla", + "Hospital Vithas Valencia Consuelo", + "Hospital Vithas Vitoria", + "Hospital Vithas Xanit Estepona", + "Hospital Vithas Xanit Internacional", + "Hospiten Clinica Roca San Agustin", + "Hospiten Lanzarote", + "Idcsalud Mostoles Sa", + "Imed Valencia", + "Institut Catala D'Oncologia - Hospital Duran I Reynals", + "Institut Catala D'Oncologia - Hospital Germans Trias I Pujol", + "Institut Catala D'Oncologia Girona - Hospital Josep Trueta", + "Institut Guttmann", + "Institut Pere Mata, S.A", + "Instituto De Enfermedades Neurologicas De Castilla-La Mancha", + "Instituto De Salud Carlos Iii - Centro Nacional De Microbiologia", + "Instituto De Traumatologia De Union De Mutuas (Matepss Nº 267)", + "Instituto Oftalmologico Fernandez-Vega", + "Instituto Provincial De Rehabilitacion", "Instituto Tecnológico y de Energías Renovables, S.A. (ITER, S.A.)", - "Unidades Clínicas Y De Rehabilitación De Salud Mental", - "Hospital Febles Campos", - "Hospital Quirón Tenerife", - "Vithas Hospital Santa Cruz", - "Clínica Parque, S.A.", - "Hospiten Sur", - "Hospital Universitario De Canarias (H.U.C)", - "Hospital De La Santísima Trinidad", - "Clínica Vida", - "Hospital Bellevue", - "Hospital Nuestra Señora De Guadalupe", - "Hospital Nuestra Señora De Los Dolores", - "Hospital Insular Ntra. Sra. De Los Reyes", - "Hospital Quirón Costa Adeje", - "Hospital Rambla S.L.", - "Hospital General De La Palma", - "Complejo Hospitalario Universitario De Canarias", - "Hospital Del Norte", - "Hospital Del Sur", - "Clínica Tara", - "Hospital Universitario Marqués De Valdecilla", - "Hospital Ramón Negrete", - "Hospital Santa Clotilde - Orden Hospitalaria San Juan De Dios.", - "Centro Hospitalario Padre Menni", - "Hospital Comarcal De Laredo", - "Hospital Sierrallana", - "Clínica Mompía, S.A.U.", - "Complejo Asistencial De Segovia", - "Hospital General De Segovia", - "Hospital Recoletas Segovia Ntra. Sra. De La Misericordia", - "Unidad De Rehabilitación Psiquiátrica Ntra. Sra. De La Fuencisla", - "Hospital General Del H.U. Virgen Del Rocío", - "Hospital Virgen De Valme", - "Hospital Virgen Macarena", - "Hospital San Lázaro", - "Hospital Victoria Eugenia De La Cruz Roja Española", - "Hospital San Juan De Dios De Sevilla", - "Hospital Duques Del Infantado", - "Clínica Santa Isabel", - "Hospital Quironsalud Sagrado Corazón", - "Hospital Fátima", - "Hospital Quironsalud Infanta Luisa", - "Clínica Nuestra Señora De Aránzazu", - "Residencia De Salud Mental Nuestra Señora Del Carmen", - "Hospital El Tomillar", - "Hospital De Alta Resolución De Morón De La Frontera", - "Hospital La Merced", - "Hospital Universitario Virgen Del Rocío", + "Ita Canet", + "Ita Clinic Bcn", + "Ita Godella", + "Ita Maresme", + "Ivan Mañero Clinic", + "Juaneda Miramar", + "Lab Clínic ICS Camp de Tarragona-Terres de l'Ebre. Hospital Joan XXIII", + "Laboratori De Referencia De Catalunya", + "Laboratorio Echevarne, Sa", + "Lepant Residencial Qgg, Sl", + "Microbiología HUC San Cecilio", "Microbiología. Hospital Universitario Virgen del Rocio", - "Hospital Universitario Virgen Macarena", - "Hospital Universitario Virgen De Valme", - "Fremap, Hospital Y Centro De Rehabilitación De Sevilla", - "Hospital Psiquiátrico Penitenciario", - "Hospital San Juan De Dios Del Aljarafe", - "Hospital Nisa Sevilla-Aljarafe", - "Hospital De Alta Resolución De Utrera", - "Hospital De Alta Resolución Sierra Norte", - "Hospital Viamed Santa Ángela De La Cruz", - "Hospital De Alta Resolución De Écija", - "Clínica De Salud Mental Miguel De Mañara", - "Hospital De Rehabilitación Y Traumatología Virgen Del Rocío", - "Hospital De Alta Resolución De Lebrija", - "Hospital Infantil", - "Hospital De La Mujer", - "Hospital Virgen Del Mirón", - "Complejo Asistencial De Soria", - "Hospital Universitari Joan Xxiii De Tarragona", - "Hospital Sociosanitari Francolí", - "Hospital De Sant Pau I Santa Tecla", - "Hospital Viamed Monegal", - "Clínica Activa Mútua 2008", - "Hospital Comarcal Móra D'Ebre", - "Hospital Universitari De Sant Joan De Reus", - "Centre Mq Reus", - "Villablanca Serveis Assistencials, Sa", - "Institut Pere Mata, S.A", - "Hospital De Tortosa Verge De La Cinta", - "Clínica Terres De L'Ebre", - "Policlínica Comarcal Del Vendrell.", + "Ministerio Sanidad", + "Mutua Balear", + "Mutua De Granollers, Mutua De Previsio Social A Prima Fixa", + "Mutualia Clinica Pakea", + "Nou Hospital Evangelic", + "Organizacion Sanitaria Integrada Debagoiena", + "Parc Sanitari Sant Joan De Deu - Numancia", + "Parc Sanitari Sant Joan De Deu - Recinte Sant Boi.", + "Parc Sanitari Sant Joan De Deu - Til·Lers", + "Parc Sanitari Sant Joan De Deu - Uhpp - 1", + "Parc Sanitari Sant Joan De Deu - Uhpp - 2", "Pius Hospital De Valls", - "Residència Alt Camp", - "Centre Sociosanitari Ciutat De Reus", - "Hospital Comarcal D'Amposta", - "Centre Sociosanitari Llevant", - "Residència Vila-Seca", - "Unitat Polivalent En Salut Mental D'Amposta", - "Hospital Del Vendrell", - "Centre Sociosanitari I Residència Assistida Salou", - "Residència Santa Tecla Ponent", - "Unitat De Referència De Psiquiatria I Trastorns De La Conducta Alimentària (Urpi)", - "Hospital Obispo Polanco", - "Centro De Rehabilitacion Psicosocial San Juan De Dios", - "Hospital De Alcañiz", - "Hospital Virgen De La Salud", - "Hospital Geriátrico Virgen Del Valle", - "Hospital Nacional De Parapléjicos", - "Hospital Provincial Nuestra Señora De La Misericordia", - "Hospital General Nuestra Señora Del Prado", - "Consejería de Sanidad", - "Clínica Marazuela, S.A.", - "Complejo Hospitalario De Toledo", - "Hospital Laboral Solimat Mutua Colaboradora Con La Ss Nº 72", - "Quirón Salud Toledo", - "Hospital Universitario Y Politécnico La Fe", - "Hospital Universitario Dr. Peset Aleixandre", - "Hospital Arnau De Vilanova", - "Hospital Clínico Universitario De Valencia", - "Hospital De La Malva-Rosa", - "Consorcio Hospital General Universitario De Valencia", - "Hospital Católico Casa De Salud", - "Hospital Nisa Valencia Al Mar", - "Fundación Instituto Valenciano De Oncología", - "Hospital Virgen Del Consuelo", - "Hospital Quirón Valencia", - "Hospital Psiquiátrico Provincial", - "Casa De Reposo San Onofre", - "Hospital Francesc De Borja De Gandia", - "Hospital Lluís Alcanyís De Xàtiva", - "Hospital General De Ontinyent", - "Hospital Intermutual De Levante", - "Hospital De Sagunto", - "Hospital Doctor Moliner", - "Hospital General De Requena", - "Hospital 9 De Octubre", - "Centro Médico Gandia", - "Hospital Nisa Aguas Vivas", - "Clinica Fontana", - "Hospital Universitario De La Ribera", - "Hospital Pare Jofré", - "Hospital De Manises", - "Hospital De Crónicos De Mislata (Antiguo Hospital Militar De Valencia)", - "Hospital De Llíria", - "Imed Valencia", - "Unidad De Desintoxicación Hospitalaria", - "Hospital Universitario Rio Hortega", - "Hospital Clínico Universitario De Valladolid", - "Sanatorio Sagrado Corazón", - "Hospital Medina Del Campo", - "Hospital De Valladolid Felipe Ii", - "Hospital Campo Grande", - "Hospital Santa Marina", - "Hospital Intermutual De Euskadi", - "Clínica Ercilla Mutualia", - "Hospital Cruz Roja De Bilbao", - "Sanatorio Bilbaíno", - "Hospital De Basurto", - "Imq Clínica Virgen Blanca", - "Clínica Guimon S.A.", - "Clínica Indautxu", - "Hospital Universitario De Cruces", - "Osi Barakaldo-Sestao", - "Hospital San Eloy", - "Red De Salud Mental De Bizkaia (Hospital De Bermeo)", - "Hospital Galdakao-Usansolo", - "Hospital Gorliz", - "Red De Salud Mental De Bizkaia (Hospital De Zaldibar)", - "Red De Salud Mental De Bizkaia (Hospital De Zamudio)", - "Avances Médicos S.A", - "Hospital Quironsalud Bizkaia", - "Clínica Imq Zorrotzaurre", - "Hospital Urduliz Ospitalea", - "Hospital Virgen De La Concha", - "Hospital Provincial De Zamora", - "Hospital De Benavente", - "Complejo Asistencial De Zamora", - "Hospital Recoletas De Zamora", - "Hospital Clínico Universitario Lozano Blesa", - "Hospital Universitario Miguel Servet", - "Hospital Royo Villanova", - "Centro de Investigación Biomédica de Aragón", - "Centro De Rehabilitacion Psicosocial Nuestra Señora Del Pilar", - "Hospital Nuestra Señora De Gracia", - "Hospital Maz", - "Clínica Montpelier Grupo Hla, S.A.U", - "Centro Neuropsiquiátrico Nuestra Señora Del Carmen", - "Hospital Quironsalud Zaragoza", - "Clínica Nuestra Señora Del Pilar", - "Hospital General De La Defensa De Zaragoza", - "Hospital Ernest Lluch Martin", + "Plataforma de Genómica y Bioinformática", + "Plataforma de Medicina Computacional, Fundación Progreso y Salud", + "Policlinica Comarcal Del Vendrell.", + "Policlinica Gipuzkoa", + "Policlinica Nuestra Sra. Del Rosario", + "Policlinico Riojano Nuestra Señora De Valvanera", + "Presidencia del Gobierno", + "Prytanis Hospitalet Centre Sociosanitari", + "Prytanis Sant Boi Centre Sociosanitari", + "Quinta Medica De Reposo", + "Red De Salud Mental De Araba (Hospital Psiquiatrico De Araba)", + "Residencia Alt Camp", + "Residencia De Gent Gran Puig D'En Roca", + "Residencia De Salud Mental Nuestra Se?Ora Del Carmen", + "Residencia Geriatrica Maria Gay", + "Residencia L'Estada", + "Residencia Puig-Reig", + "Residencia Santa Susanna", + "Residencia Santa Tecla Ponent", + "Residencia Terraferma", + "Residencia Vila-Seca", + "Ribera Hospital De Molina", + "Ronda De Dalt, Centre Sociosanitari", + "Sanatorio Bilbaino", + "Sanatorio Dr. Muñoz", + "Sanatorio Esquerdo, S.A.", + "Sanatorio Nuestra Señora Del Rosario", + "Sanatorio Sagrado Corazon", + "Sanatorio San Francisco De Borja Fontilles", + "Sanatorio Usurbil, S. L.", + "Santo Y Real Hospital De Caridad", + "Sar Mont Marti", + "Serveis Clinics, S.A.", + "Servicio Madrileño De Salud", + "Servicio de Microbiologia HU Son Espases", + "Servicios Sanitarios Y Asistenciales", + "U.R.R. De Enfermos Psiquicos Alcohete", "Unidad De Rehabilitacion De Larga Estancia", "Unidad Rehabilitadora De Media Estancia Profesor Rey Ardid", - "Hospital De Rehabilitacion Psiquiatrica Prisma", - "Centro Sanitario Cinco Villas", - "Hospital Viamed Montecanal", - "Hospital Universitario De Ceuta", - "Hospital Comarcal de Melilla", - "Presidencia del Gobierno", - "Ministerio Sanidad" + "Unidades Clinicas Y De Rehabilitacion De Salud Mental", + "Unitat Polivalent Benito Menni En Salut Mental De L'Hospitalet-El Prat De Llobregat", + "Unitat Polivalent En Salut Mental D'Amposta", + "Unitat Polivalent Salut Mental Barcelona-Nord", + "Unitat Terapeutica-Educativa Acompanya'M", + "Villablanca Serveis Assistencials, Sa", + "Vithas Hospital Montserrat", + "Vithas Hospital Nosa Señora De Fatima", + "Vithas Hospital Perpetuo Internacional", + "Vithas Hospital Santa Cruz" ] }, "purpose_sampling": { diff --git a/relecov_tools/validate.py b/relecov_tools/validate.py index 2e41ef59..27fbc8ad 100755 --- a/relecov_tools/validate.py +++ b/relecov_tools/validate.py @@ -40,6 +40,7 @@ def __init__( ): """Validate json file against the schema""" super().__init__(output_dir=output_dir, called_module=__name__) + self.config = ConfigJson(extra_config=True) self.log.info("Initiating validation process") # Check and load config params From 1a561266a46bc75188c9439895eb27f8a6bb6f10 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Mon, 23 Feb 2026 12:31:53 +0100 Subject: [PATCH 092/110] Fix relecov_schema.json --- relecov_tools/build_schema.py | 16 ++++++--- relecov_tools/schema/relecov_schema.json | 42 +++++++++++++----------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 7481ef97..24e8ac43 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -222,6 +222,11 @@ def _load_laboratory_addresses(self): Returns two dictionaries with key in the three special fields: - dropdowns[field] ........ list ‘ [] []’ - uniques[field] .......... unique names for schema enum + + NOTE: + For RELECOV, laboratory_address.json stores institution names under + `collecting_institution`. We intentionally reuse that same source for + collecting/submitting/sequencing to keep the three schema enums aligned. """ json_path = os.path.join( os.path.dirname(__file__), @@ -241,12 +246,13 @@ def _load_laboratory_addresses(self): for ccn, info in lab_data.items(): city = info.get("geo_loc_city", "").strip() - + name = info.get("collecting_institution", "").strip() + if not name: + continue + dropdown_entry = f"{name} [{city}] [{ccn}]" for f in fields: - name = info.get(f, "").strip() - if name: - dropdowns[f].append(f"{name} [{city}] [{ccn}]") - uniques[f].add(name) + dropdowns[f].append(dropdown_entry) + uniques[f].add(name) dropdowns = {k: sorted(v) for k, v in dropdowns.items()} uniques = {k: sorted(v) for k, v in uniques.items()} diff --git a/relecov_tools/schema/relecov_schema.json b/relecov_tools/schema/relecov_schema.json index 946d9178..43cf7688 100644 --- a/relecov_tools/schema/relecov_schema.json +++ b/relecov_tools/schema/relecov_schema.json @@ -147,7 +147,7 @@ "ontology": "GENEPIO:0001159", "description": "The name of the agency that submitted the sequence to the platform.", "examples": [ - "Instituto de Salud Carlos III " + "Instituto De Salud Carlos Iii - Centro Nacional De Microbiologia [Majadahonda] [1328021542]" ], "$ref": "#/$defs/enums/submitting_institution", "classification": "Sample collection and processing", @@ -160,7 +160,7 @@ "ontology": "GENEPIO:0100416", "description": "The name of the agency that generated the sequence", "examples": [ - "Instituto de Salud Carlos III " + "Instituto De Salud Carlos Iii - Centro Nacional De Microbiologia [Majadahonda] [1328021542]" ], "$ref": "#/$defs/enums/sequencing_institution", "classification": "Sequencing", @@ -1281,7 +1281,9 @@ "label": "processing_date", "ontology": "OBI:0002471", "description": "The time of a sample analysis process YYYY-MM-DD", - "examples": ["2022-07-15"], + "examples": [ + "2022-07-15" + ], "classification": "Bioinformatics and QC metrics fields", "type": "string", "format": "date", @@ -2174,7 +2176,7 @@ "ontology": "NCIT:C164483", "description": "The date on which the activity or entity is created.", "examples": [ - "e.g 2020-08-07" + "2020-08-07" ], "classification": "Public databases", "type": "string", @@ -2570,28 +2572,28 @@ } }, "required": [ - "enrichment_panel_version", "sequence_file_R1", - "sequencing_sample_id", - "library_layout", - "library_source", - "sequencing_instrument_model", - "collecting_institution_code_2", + "host_scientific_name", + "geo_loc_country", + "collecting_lab_sample_id", "isolate_sample_id", + "geo_loc_state", + "sample_collection_date", + "library_layout", "organism", - "collecting_institution_code_1", - "host_common_name", - "submitting_institution", - "collecting_lab_sample_id", + "sequencing_sample_id", + "library_source", "collecting_institution", - "geo_loc_state", - "geo_loc_country", "library_strategy", - "enrichment_panel", + "submitting_institution", "sequencing_instrument_platform", "geo_loc_state_cod", - "sample_collection_date", - "host_scientific_name" + "sequencing_instrument_model", + "collecting_institution_code_1", + "host_common_name", + "enrichment_panel_version", + "enrichment_panel", + "collecting_institution_code_2" ], "$defs": { "enums": { @@ -5758,6 +5760,8 @@ "Illumina Respiratory Pathogen ID/AMR Enrichment Panel", "Illumina Viral Surveillance Panel v2", "Twist Bioscience Respiratory Virus Research Panel", + "Universal Influenza A primers (Zhou 2012 protocol)", + "Universal Influenza B primers (Zhou 2014 protocol)", "Other [NCIT:C17649]" ] }, From 6501802de45f3f68061a47d2f5a05b873da84464 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Mon, 23 Feb 2026 12:38:52 +0100 Subject: [PATCH 093/110] Update build-schema to apply types to examples in schema --- relecov_tools/build_schema.py | 60 ++++++++++++++++-- relecov_tools/schema/relecov_schema.json | 80 ++++++++++++------------ 2 files changed, 95 insertions(+), 45 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 24e8ac43..13e4b581 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -461,8 +461,47 @@ def create_schema_draft_template(self): ) return draft_template + @staticmethod + def _cast_example_to_type(expected_type: str | None, value: any) -> any: + """Cast a single example value to the declared JSON-schema type when possible.""" + if not isinstance(expected_type, str): + return value + expected = expected_type.strip().lower() + if expected == "string": + return str(value) + if expected == "integer": + try: + return int(float(value)) + except (TypeError, ValueError): + return value + if expected == "number": + try: + return float(value) + except (TypeError, ValueError): + return value + if expected == "boolean": + if isinstance(value, bool): + return value + if isinstance(value, str): + normalized = value.strip().lower() + if normalized in ("true", "1", "yes", "y"): + return True + if normalized in ("false", "0", "no", "n"): + return False + return value + return value + + def _cast_examples_to_declared_type( + self, expected_type: str | None, values: list[any] + ) -> list[any]: + return [self._cast_example_to_type(expected_type, item) for item in values] + def jsonschema_object( - self, property_id: str, property_feature_key: str, value: any + self, + property_id: str, + property_feature_key: str, + value: any, + expected_type: str | None = None, ) -> dict[str, any]: """ Process a property keyword with their value and return a dictionary with fields for a property. @@ -493,15 +532,25 @@ def jsonschema_object( jsonschema_value[key] = value # FIXME multiple examples will always be loaded as str, regardless of actual type case "examples", str(value): - jsonschema_value = {property_feature_key: value.split("; ")} + parsed_examples = value.split("; ") + parsed_examples = self._cast_examples_to_declared_type( + expected_type, parsed_examples + ) + jsonschema_value = {property_feature_key: parsed_examples} case "examples", datetime(): value = value.strftime("%Y-%m-%dT%H:%M:%S") value = value.replace("T00:00:00", "") - jsonschema_value = {property_feature_key: [value]} + parsed_examples = self._cast_examples_to_declared_type( + expected_type, [value] + ) + jsonschema_value = {property_feature_key: parsed_examples} case "examples", int(value) | float(value): value = float(value) - value = [int(value) if value.is_integer() else value] - jsonschema_value = {property_feature_key: value} + parsed_examples = [int(value) if value.is_integer() else value] + parsed_examples = self._cast_examples_to_declared_type( + expected_type, parsed_examples + ) + jsonschema_value = {property_feature_key: parsed_examples} case "enum", str(): jsonschema_value = {"$ref": f"#/$defs/enums/{property_id}"} case _, value if not pd.isna(value): @@ -583,6 +632,7 @@ def handle_properties(self, json_data: dict[str, dict]) -> tuple[dict, dict, dic property_id, mapping_features[db_feature_key], db_feature_value, + expected_type=db_features_dic.get("type"), ) if std_json_feature: schema_property[property_id].update(std_json_feature) diff --git a/relecov_tools/schema/relecov_schema.json b/relecov_tools/schema/relecov_schema.json index 43cf7688..a9dad82b 100644 --- a/relecov_tools/schema/relecov_schema.json +++ b/relecov_tools/schema/relecov_schema.json @@ -37,7 +37,7 @@ "ontology": "GENEPIO:0001123", "description": "Sample ID provided by the laboratory that collects the sample, the collecting institution is requested in column L of this file", "examples": [ - 1197677 + "1197677" ], "classification": "Database Identifiers", "type": "string", @@ -49,7 +49,7 @@ "ontology": "GENEPIO:0001148", "description": "Sample ID provided by the submitting laboratory that delivers the sample. The submitting laboratory is requested in column M", "examples": [ - 202203144 + "202203144" ], "classification": "Sequencing", "type": "string", @@ -61,7 +61,7 @@ "ontology": "0", "description": "Sample identification provided by the microbiology laboratory", "examples": [ - 220624 + "220624" ], "classification": "Sample collection and processing", "type": "string", @@ -73,7 +73,7 @@ "ontology": "GENEPIO:0001644", "description": "Sample identification provided if multiple rna-extraction or passages", "examples": [ - 220624.1 + "220624.1" ], "classification": "Database Identifiers", "type": "string", @@ -639,7 +639,7 @@ "ontology": "GENEPIO:0001509", "description": "The Ct value result from a diagnostic SARS-CoV-2 RT-PCR test.", "examples": [ - 40 + 40.0 ], "classification": "Pathogen diagnostic testing", "type": "number", @@ -666,7 +666,7 @@ "ontology": "GENEPIO:0001512", "description": "The cycle threshold (CT) value result from a diagnostic SARS-CoV-2 RT-PCR test.", "examples": [ - 40 + "40" ], "classification": "Pathogen diagnostic testing", "type": "string", @@ -728,7 +728,7 @@ "ontology": "NCIT:C104504", "description": "Unique identifier for each analysis batch", "examples": [ - 20250506140633 + "20250506140633" ], "classification": "Sample collection and processing", "type": "string", @@ -752,7 +752,7 @@ "ontology": "SNOMED:423901009", "description": "CCN code from the agency/institution that collected the sample.", "examples": [ - 1328021542 + "1328021542" ], "classification": "Sample collection and processing", "type": "string", @@ -764,7 +764,7 @@ "ontology": "NCIT:C101703", "description": "CODCNH code from the agency/institution that collected the sample.", "examples": [ - 40059 + "40059" ], "classification": "Sample collection and processing", "type": "string", @@ -800,7 +800,7 @@ "ontology": "GENEPIO:0001803", "description": "Autonomic center Code", "examples": [ - 11380 + "11380" ], "classification": "Sample collection and processing", "type": "string", @@ -862,7 +862,7 @@ "ontology": "NCIT:C218832", "description": "Official Code of the state/province/territory of origin of the sample.", "examples": [ - 1 + "1" ], "classification": "Sample collection and processing", "type": "string", @@ -887,7 +887,7 @@ "ontology": 0, "description": "Official Code of the county/region of origin of the sample.", "examples": [ - 4 + "4" ], "classification": "Sample collection and processing", "type": "string", @@ -911,7 +911,7 @@ "ontology": 0, "description": "Official Code of the city of origin of the sample.", "examples": [ - 40139 + "40139" ], "classification": "Sample collection and processing", "type": "string", @@ -923,7 +923,7 @@ "ontology": "NCIT:C25621", "description": "Post Code of the agency/institution that collected the sample.", "examples": [ - 4120 + "4120" ], "classification": "Sample collection and processing", "type": "string", @@ -995,7 +995,7 @@ "ontology": "NCIT:C40978", "description": "Phone of the agency/institution that collected the sample.", "examples": [ - 950016114 + "950016114" ], "classification": "Sample collection and processing", "type": "string", @@ -1184,7 +1184,7 @@ "ontology": "NCIT:C153362", "description": "Number of base pairs per read", "examples": [ - "75" + 75 ], "classification": "Sequencing", "type": "integer", @@ -1198,7 +1198,7 @@ "ontology": "NCIT:C153362", "description": "The number of nucleotides successfully ordered from each side of a nucleic acid fragment obtained after the completion of a sequencing process.", "examples": [ - "75" + 75 ], "classification": "Sequencing", "type": "integer", @@ -1728,7 +1728,7 @@ "ontology": "NCIT:C164667", "description": "The number of total reads generated by the sequencing process.", "examples": [ - "387566" + 387566 ], "classification": "Bioinformatics and QC metrics fields", "type": "integer", @@ -1812,7 +1812,7 @@ "ontology": "0", "description": "Percentage of genome with coverage greater than 10x", "examples": [ - 96 + 96.0 ], "classification": "Bioinformatics and QC metrics fields", "type": "number", @@ -1826,7 +1826,7 @@ "ontology": "0", "description": "Percentage of Ns", "examples": [ - 3 + 3.0 ], "classification": "Bioinformatics and QC metrics fields", "type": "number", @@ -1854,7 +1854,7 @@ "ontology": "GENEPIO:0001484", "description": "The number of N symbols present in the consensus fasta sequence, per 100kbp of sequence.", "examples": [ - "300" + 300.0 ], "classification": "Bioinformatics and QC metrics fields", "type": "number", @@ -1924,7 +1924,7 @@ "ontology": "GENEPIO:0001457", "description": "Percentage of Lineage Defining Mutations", "examples": [ - 98 + 98.0 ], "classification": "Bioinformatics and QC metrics fields", "type": "number", @@ -1938,7 +1938,7 @@ "ontology": "GENEPIO:0001457", "description": "Percentage of sSgene ambiguous bases", "examples": [ - 0 + 0.0 ], "classification": "Bioinformatics and QC metrics fields", "type": "number", @@ -1952,7 +1952,7 @@ "ontology": "GENEPIO:0001457", "description": "Percentage of Sgene coverage", "examples": [ - 99 + 99.0 ], "classification": "Bioinformatics and QC metrics fields", "type": "number", @@ -2322,7 +2322,7 @@ "ontology": "LOINC:40783184", "description": "Date when the clade analysis was performed via Nextclade", "examples": [ - 20241204 + "20241204" ], "classification": "Genomic Typing fields", "type": "string", @@ -2419,7 +2419,7 @@ "ontology": "LOINC:40783184", "description": "Date when the lineage analysis was performed", "examples": [ - 20241204 + "20241204" ], "classification": "Genomic Typing fields", "type": "string", @@ -2572,28 +2572,28 @@ } }, "required": [ - "sequence_file_R1", + "isolate_sample_id", + "collecting_institution_code_2", "host_scientific_name", - "geo_loc_country", + "library_source", + "sequencing_instrument_model", "collecting_lab_sample_id", - "isolate_sample_id", - "geo_loc_state", - "sample_collection_date", - "library_layout", - "organism", + "collecting_institution_code_1", "sequencing_sample_id", - "library_source", - "collecting_institution", - "library_strategy", + "geo_loc_country", "submitting_institution", "sequencing_instrument_platform", + "enrichment_panel_version", "geo_loc_state_cod", - "sequencing_instrument_model", - "collecting_institution_code_1", "host_common_name", - "enrichment_panel_version", + "collecting_institution", + "library_layout", + "organism", + "library_strategy", + "sequence_file_R1", "enrichment_panel", - "collecting_institution_code_2" + "geo_loc_state", + "sample_collection_date" ], "$defs": { "enums": { From d6d8cbf742c7b3af85594d57aacc299aee3d3151 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Mon, 23 Feb 2026 12:52:37 +0100 Subject: [PATCH 094/110] Add log.warning to cast to type in build-schema --- relecov_tools/build_schema.py | 43 ++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 13e4b581..53e0fba2 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -461,8 +461,9 @@ def create_schema_draft_template(self): ) return draft_template - @staticmethod - def _cast_example_to_type(expected_type: str | None, value: any) -> any: + def _cast_example_to_type( + self, property_id: str, expected_type: str | None, value: any + ) -> any: """Cast a single example value to the declared JSON-schema type when possible.""" if not isinstance(expected_type, str): return value @@ -471,13 +472,31 @@ def _cast_example_to_type(expected_type: str | None, value: any) -> any: return str(value) if expected == "integer": try: - return int(float(value)) + parsed_number = float(value) except (TypeError, ValueError): + self.log.warning( + "Example value %r for property '%s' does not match expected type 'integer'. Keeping original value.", + value, + property_id, + ) + return value + if not parsed_number.is_integer(): + self.log.warning( + "Example value %r for property '%s' does not match expected type 'integer'. Keeping original value.", + value, + property_id, + ) return value + return int(parsed_number) if expected == "number": try: return float(value) except (TypeError, ValueError): + self.log.warning( + "Example value %r for property '%s' does not match expected type 'number'. Keeping original value.", + value, + property_id, + ) return value if expected == "boolean": if isinstance(value, bool): @@ -488,13 +507,21 @@ def _cast_example_to_type(expected_type: str | None, value: any) -> any: return True if normalized in ("false", "0", "no", "n"): return False + self.log.warning( + "Example value %r for property '%s' does not match expected type 'boolean'. Keeping original value.", + value, + property_id, + ) return value return value def _cast_examples_to_declared_type( - self, expected_type: str | None, values: list[any] + self, property_id: str, expected_type: str | None, values: list[any] ) -> list[any]: - return [self._cast_example_to_type(expected_type, item) for item in values] + return [ + self._cast_example_to_type(property_id, expected_type, item) + for item in values + ] def jsonschema_object( self, @@ -534,21 +561,21 @@ def jsonschema_object( case "examples", str(value): parsed_examples = value.split("; ") parsed_examples = self._cast_examples_to_declared_type( - expected_type, parsed_examples + property_id, expected_type, parsed_examples ) jsonschema_value = {property_feature_key: parsed_examples} case "examples", datetime(): value = value.strftime("%Y-%m-%dT%H:%M:%S") value = value.replace("T00:00:00", "") parsed_examples = self._cast_examples_to_declared_type( - expected_type, [value] + property_id, expected_type, [value] ) jsonschema_value = {property_feature_key: parsed_examples} case "examples", int(value) | float(value): value = float(value) parsed_examples = [int(value) if value.is_integer() else value] parsed_examples = self._cast_examples_to_declared_type( - expected_type, parsed_examples + property_id, expected_type, parsed_examples ) jsonschema_value = {property_feature_key: parsed_examples} case "enum", str(): From cc87661945925a8b334a4ebe462ebe07cfb351e9 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Mon, 23 Feb 2026 13:01:29 +0100 Subject: [PATCH 095/110] Remove legacy extra config load in read-lab-metadata --- relecov_tools/read_lab_metadata.py | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/relecov_tools/read_lab_metadata.py b/relecov_tools/read_lab_metadata.py index 530258a7..2aee2ccc 100755 --- a/relecov_tools/read_lab_metadata.py +++ b/relecov_tools/read_lab_metadata.py @@ -67,21 +67,6 @@ def __init__( ) raise FileNotFoundError(f"Metadata file {self.metadata_file} not found") - self.config_json = ConfigJson(extra_config=True) - self.configuration = self.config_json - self.institution_config = self.config_json.get_configuration( - "institutions_config" - ) - - self.readmeta_config = ( - self.configuration.get_configuration("read_lab_metadata") or {} - ) - default_project = self.readmeta_config.get("default_project") or "relecov" - self.project = (project or default_project).lower() - self.project_config = self._load_project_config( - self.readmeta_config, self.project, default_project - ) - if sample_list_file is None: stderr.print("[yellow]No samples_data.json file provided") self.log.warning("No samples_data.json file provided") @@ -121,6 +106,8 @@ def __init__( self.configuration.get_configuration("read_lab_metadata") or {} ) default_project = self.configuration.get_topic_data("generic", "project_name") + if not isinstance(default_project, str) or not default_project.strip(): + default_project = "relecov" self.project = (project or default_project).lower() self.project_config = self._load_project_config( self.readmeta_config, self.project, default_project @@ -259,7 +246,6 @@ def _load_project_config( ) merged = self._deep_merge_dicts(base_config, overrides or {}) merged.pop("projects", None) - merged.pop("default_project", None) return merged def _build_schema_field_map(self) -> dict[str, SchemaField]: From 98caee5e85886d48bb6c24047c5cc15dccbbf513 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Tue, 24 Feb 2026 08:23:29 +0100 Subject: [PATCH 096/110] Add env secrets to test validate upload --- .github/workflows/test_sftp_modules.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test_sftp_modules.yml b/.github/workflows/test_sftp_modules.yml index 583fa455..1d7d6be1 100644 --- a/.github/workflows/test_sftp_modules.yml +++ b/.github/workflows/test_sftp_modules.yml @@ -147,3 +147,8 @@ jobs: -o tests/data/map_validate/ \ -s relecov_tools/schema/relecov_schema.json \ -l tests/data/map_validate/previous_processes_log_summary.json + env: + TEST_USER: ${{ secrets.TEST_USER }} + TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }} + TEST_PORT: ${{ secrets.TEST_PORT }} + OUTPUT_LOCATION: ${{ github.workspace }}/tests/ From d9e401ac1bfba1422cea944fdcd017ec53494fda Mon Sep 17 00:00:00 2001 From: Alejandro Date: Tue, 24 Feb 2026 08:29:29 +0100 Subject: [PATCH 097/110] Update CHANGELOG --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dcc65fa1..9e887ba6 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,10 +10,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - [Enrique Sapena](https://github.com/ESapenaVentura) - [Pablo Mata](https://github.com/shettland) +- [Alejandro Bernabeu](https://github.com/aberdur) #### Added enhancements - Added handling of $refs for enums and typo fixing/style formatting for build_schema module [#844](https://github.com/BU-ISCIII/relecov-tools/pull/844) +- Refactor configuration.json migration to initial-config profiles [#860]https://github.com/BU-ISCIII/relecov-tools/pull/860 - Included configuration overwriting and validation via add-extra-config module [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 - Included a new arg `topic_config` in add-extra-config to narrow config removal [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 - Updated add-extra-config and included Initial configuration description in README.md [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 @@ -28,6 +30,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Fixed datetime recognition for schema example generation and validation [#854](https://github.com/BU-ISCIII/relecov-tools/pull/854) - Restore formatting and validation behavior after header reordering + add Excel warnings for MEPRAM [#856] (https://github.com/BU-ISCIII/relecov-tools/pull/856) - Adapted github actions workflows to load extra_config first [#863](https://github.com/BU-ISCIII/relecov-tools/pull/863) +- Fix missing env vars in test_upload_validate step for test_sftp_modules [#866](https://github.com/BU-ISCIII/relecov-tools/pull/866) #### Changed From 0c3a98b262698d7f4d0c60267c9ec8cd4cb6ffb4 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 25 Feb 2026 16:11:43 +0100 Subject: [PATCH 098/110] Add date parser for DDYYMM to DD-YY-MM --- relecov_tools/read_lab_metadata.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/relecov_tools/read_lab_metadata.py b/relecov_tools/read_lab_metadata.py index 2aee2ccc..1b2cafd8 100755 --- a/relecov_tools/read_lab_metadata.py +++ b/relecov_tools/read_lab_metadata.py @@ -932,6 +932,7 @@ def read_metadata_file(self): ) if isinstance(key_for_checks, str) and "date" in key_for_checks.lower(): pattern = r"^\d{4}[-/.]\d{2}[-/.]\d{2}" + compact_pattern = r"^\d{8}$" if isinstance(raw_value, dtime): value = str(raw_value.date()) elif re.match(pattern, str(raw_value)): @@ -939,6 +940,16 @@ def read_metadata_file(self): pattern, str(raw_value).replace("/", "-").replace(".", "-"), ).group(0) + elif re.match(compact_pattern, str(raw_value)): + try: + value = dtime.strptime(str(raw_value), "%Y%m%d").strftime( + "%Y-%m-%d" + ) + except ValueError: + log_text = f"Invalid date format in {raw_key}: {raw_value}" + self.logsum.add_error(sample=sample_id, entry=log_text) + stderr.print(f"[red]{log_text} for sample {sample_id}") + continue else: try: value = str(int(float(str(raw_value)))) From c9fc2e8cb136b6ee147487d983077f59de6a2ed7 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 25 Feb 2026 16:14:12 +0100 Subject: [PATCH 099/110] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e887ba6..6a3db990 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Updated add-extra-config and included Initial configuration description in README.md [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 - Updated test workflows to load initial_config-relecov.yaml first [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 - Included three initial_config.yaml files for three projects: relecov, mepram & EQA2026 [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 +- Normalize compact YYYYMMDD dates in read-lab-metadata [#867]https://github.com/BU-ISCIII/relecov-tools/pull/867 #### Fixes From a7a643e79914dc069b456d29a7bb159f861e544e Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 26 Feb 2026 10:21:22 +0100 Subject: [PATCH 100/110] Update relecov_schema.json title and add space removal check --- relecov_tools/build_schema.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/relecov_tools/build_schema.py b/relecov_tools/build_schema.py index 53e0fba2..537eecf1 100644 --- a/relecov_tools/build_schema.py +++ b/relecov_tools/build_schema.py @@ -745,8 +745,12 @@ def build_new_schema( # Fill schema header # FIXME: it gets 'relecov-tools' instead of RELECOV project_name = relecov_tools.utils.get_package_name() + if isinstance(project_name, str): + project_name = project_name.strip() + if " " in project_name: + project_name = re.sub(r"\s+", "-", project_name) new_schema["$id"] = relecov_tools.utils.get_schema_url() - new_schema["title"] = f"{project_name} Schema." + new_schema["title"] = f"{project_name}-schema" new_schema["description"] = ( f"Json Schema that specifies the structure, content, and validation rules for {project_name}" ) From e5e1ce31203c8278f333ba92bdb192f3ead483fc Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 26 Feb 2026 10:22:44 +0100 Subject: [PATCH 101/110] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a3db990..f84613c2 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Changed `assets/schema_utils/metadatalab_template.py`: Now supports iterative recursion to flatten nested schemas [#849](https://github.com/BU-ISCIII/relecov-tools/pull/849) - Updated how project name is extracted from config in read-lab-metadata [#861]https://github.com/BU-ISCIII/relecov-tools/pull/861 - Include extra_config=True in all modules that did not have it [#863](https://github.com/BU-ISCIII/relecov-tools/pull/863) +- Update relecov_schema.json title and add space removal check [#867]https://github.com/BU-ISCIII/relecov-tools/pull/867 #### Removed From 0d46312c90c8fb5454bf557bc14d2c64229c3e91 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 26 Feb 2026 15:31:13 +0100 Subject: [PATCH 102/110] Add new enum to type/subtype_assignment_software_name --- relecov_tools/schema/relecov_schema_EQA.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/relecov_tools/schema/relecov_schema_EQA.json b/relecov_tools/schema/relecov_schema_EQA.json index b1a05566..958c8b1b 100644 --- a/relecov_tools/schema/relecov_schema_EQA.json +++ b/relecov_tools/schema/relecov_schema_EQA.json @@ -1536,6 +1536,7 @@ "enum": [ "IRMA typing", "INSaFLU", + "INSaFLU", "Custom typing script" ], "examples": [ @@ -1601,6 +1602,7 @@ "enum": [ "IRMA subtyping", "INSaFLU", + "ABRicate", "Custom subtyping script" ], "examples": [ From a8660d0e5d7727a4352828376f9ee104e119dba5 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 26 Feb 2026 15:31:53 +0100 Subject: [PATCH 103/110] Fix initial EQA2026 submitting_institution_id complete from path to xlsx --- relecov_tools/conf/initial_config-EQA2026.yaml | 1 + relecov_tools/read_lab_metadata.py | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/relecov_tools/conf/initial_config-EQA2026.yaml b/relecov_tools/conf/initial_config-EQA2026.yaml index b24220e8..a30c1470 100644 --- a/relecov_tools/conf/initial_config-EQA2026.yaml +++ b/relecov_tools/conf/initial_config-EQA2026.yaml @@ -80,6 +80,7 @@ read_lab_metadata: lab_metadata_req_json: {} json_enrich: on_missing_schema_field: warn + force_submitting_institution_id_from_lab_code: false required_copy_from_other_field: {} samples_json_fields: - sequence_file_R1_md5 diff --git a/relecov_tools/read_lab_metadata.py b/relecov_tools/read_lab_metadata.py index 1b2cafd8..aeb771eb 100755 --- a/relecov_tools/read_lab_metadata.py +++ b/relecov_tools/read_lab_metadata.py @@ -152,6 +152,11 @@ def __init__( self.required_post_processing = ( self.project_config.get("required_post_processing", {}) or {} ) + self.force_submitting_institution_id_from_lab_code = bool( + self.project_config.get( + "force_submitting_institution_id_from_lab_code", True + ) + ) self.json_req_files = self.project_config.get("lab_metadata_req_json", {}) or {} self.schema_name = self.relecov_sch_json["title"] self.schema_version = self.relecov_sch_json["version"] @@ -499,7 +504,10 @@ def adding_fixed_fields(self, m_data): m_data[idx]["schema_name"] = self.schema_name if "schema_version" in self.schema_property_names: m_data[idx]["schema_version"] = self.schema_version - if "submitting_institution_id" in self.schema_property_names: + if ( + "submitting_institution_id" in self.schema_property_names + and self.force_submitting_institution_id_from_lab_code + ): m_data[idx]["submitting_institution_id"] = self.lab_code return m_data From a56913f15286b6b53e87f4e448dab803b1205485 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 26 Feb 2026 15:34:57 +0100 Subject: [PATCH 104/110] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f84613c2..e5e48a46 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Restore formatting and validation behavior after header reordering + add Excel warnings for MEPRAM [#856] (https://github.com/BU-ISCIII/relecov-tools/pull/856) - Adapted github actions workflows to load extra_config first [#863](https://github.com/BU-ISCIII/relecov-tools/pull/863) - Fix missing env vars in test_upload_validate step for test_sftp_modules [#866](https://github.com/BU-ISCIII/relecov-tools/pull/866) +- read-lab-metadata: keep submitting_institution_id from metadata in EQA initial-config [#868](https://github.com/BU-ISCIII/relecov-tools/pull/868) #### Changed From 111a641b7f72bd49a15878484f76863ac705c10d Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 26 Feb 2026 15:40:25 +0100 Subject: [PATCH 105/110] Hotfix schema --- relecov_tools/schema/relecov_schema_EQA.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/schema/relecov_schema_EQA.json b/relecov_tools/schema/relecov_schema_EQA.json index 958c8b1b..e7a97b16 100644 --- a/relecov_tools/schema/relecov_schema_EQA.json +++ b/relecov_tools/schema/relecov_schema_EQA.json @@ -1536,7 +1536,7 @@ "enum": [ "IRMA typing", "INSaFLU", - "INSaFLU", + "ABRicate", "Custom typing script" ], "examples": [ From b2a538aae63e4a5ad5a9727be1655c088a92f2e1 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 26 Feb 2026 15:52:17 +0100 Subject: [PATCH 106/110] Remove redundant boolean --- relecov_tools/read_lab_metadata.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/relecov_tools/read_lab_metadata.py b/relecov_tools/read_lab_metadata.py index aeb771eb..f3561d4d 100755 --- a/relecov_tools/read_lab_metadata.py +++ b/relecov_tools/read_lab_metadata.py @@ -152,10 +152,8 @@ def __init__( self.required_post_processing = ( self.project_config.get("required_post_processing", {}) or {} ) - self.force_submitting_institution_id_from_lab_code = bool( - self.project_config.get( - "force_submitting_institution_id_from_lab_code", True - ) + self.force_submitting_institution_id_from_lab_code = self.project_config.get( + "force_submitting_institution_id_from_lab_code", True ) self.json_req_files = self.project_config.get("lab_metadata_req_json", {}) or {} self.schema_name = self.relecov_sch_json["title"] From 5a2322ea7f07bb866fe101a5d66036419abd875f Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 27 Feb 2026 11:28:05 +0100 Subject: [PATCH 107/110] Updata main version --- relecov_tools/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relecov_tools/__main__.py b/relecov_tools/__main__.py index 6d21502f..01d5f3cb 100755 --- a/relecov_tools/__main__.py +++ b/relecov_tools/__main__.py @@ -39,7 +39,7 @@ stderr=True, force_terminal=relecov_tools.utils.rich_force_colors() ) -__version__ = "1.7.4" +__version__ = "1.8.0" # IMPORTANT: When defining a Click command function in this script, # you MUST include both 'ctx' (for @click.pass_context) and ALL the parameters From 9bc09dd7f5011e97e2c4922cd731a60c46356416 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 27 Feb 2026 11:28:12 +0100 Subject: [PATCH 108/110] Update CHANGELOG version --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5e48a46..0faf21cf 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [1.8.0dev] - 2025-XX-XX : +## [1.8.0] - 2025-27-02 : ### Credits From 17df1d4915dc24166ad48807b9cc04e01d9a5465 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 27 Feb 2026 11:28:35 +0100 Subject: [PATCH 109/110] Update pyproject version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f01a6b86..e39c6f28 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "relecov-tools" -version = "1.7.4" +version = "1.8.0" description = "Tools for managing and proccessing relecov network data." readme = "README.md" requires-python = ">=3.10" From 417a36bfe7de778dab866c29a6472375cc718062 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 27 Feb 2026 11:28:45 +0100 Subject: [PATCH 110/110] Update README version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f69a200..4cb1e916 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ $ relecov-tools --help \ \ / |__ / |__ | |___ | | | \ / / / \ | \ | | | | | | \ / / |--| | \ |___ |___ |___ |___ |___| \/ -RELECOV-tools version 1.7.4 +RELECOV-tools version 1.8.0 Usage: relecov-tools [OPTIONS] COMMAND [ARGS]... Options: