Definición de subconjuntos de conceptos clínicos con el Lenguaje de Restricciones de Expresiones de SNOMED CT
La amplitud de SNOMED CT, con más de 360,000 conceptos clínicos, requiere la definición de subconjuntos de conceptos específicos para garantizar su uso en escenarios concretos, como la entrada y validación de datos (por ejemplo, para garantizar que los diagnósticos registrados son de un tipo de enfermedad específico, como enfermedades hepáticas), protocolos clínicos, análisis y minería de datos (por ejemplo, para filtrar aquellos casos donde el paciente ha tenido un trasplante de órgano), desarrollo de sistemas de ayuda a la decisión (por ejemplo, identificación de enfermedades infecciosas) o investigación clínica. Esto ayuda a que diferentes sistemas y organizaciones interpreten y compartan datos de salud de forma coherente y sin ambigüedades, es decir, con altos niveles de interoperabilidad semántica.
Estos subconjuntos se pueden especificar de dos maneras:
Conviene notar la dificultad de manejar subconjuntos potencialmente grandes, formados por miles de conceptos. Además, el hecho de que SNOMED CT lance una nueva versión mensualmente obliga a actualizar los subconjuntos en busca de conceptos nuevos o conceptos que han sido desactivados si queremos tener nuestro modelo de información alineado con la versión más reciente de SNOMED CT.
Para poder definir expresiones que representen de manera intensional y formalmente subconjuntos de conceptos clínicos, SNOMED CT dispone de un lenguaje denominado Expression Constraint Language, abreviado, ECL [1]. Este lenguaje proporciona una serie de operadores que están alineados con el modelo lógico de la terminología. Conviene recordar que en SNOMED CT existen dos tipos de relaciones: las relaciones es un/a, que permiten especificar jerarquías de conceptos (por ejemplo, 1131000122107 |alergia al melocotón| es un subtipo de 91932007 |alergia a fruta|, que a su vez es un subtipo de 414285001 |alergia alimentaria|, y así sucesivamente hasta llegar al concepto raíz de SNOMED CT); y las relaciones de atributo, que permiten relacionar conceptos entre diferentes jerarquías (por ejemplo, 1131000122107 |alergia al melocotón| tiene una relación de atributo de tipo 246075003 |agente causal| con el concepto 735049002 |melocotón|). Como dato añadido, en SNOMED CT existen actualmente 125 tipos de relaciones de atributo, entre las que se incluyen 246075003 |agente causal|, 42752001 |debido a|, 363698007 |sitio del hallazgo|, 127489000 |tiene como ingrediente activo| o 410675002 |vía de administración|, entre otros.
Las expresiones ECL más sencillas son las que seleccionan una jerarquía. Por ejemplo, la expresión:
< 609328004 |alergia| |
define el subconjunto formado por todos los conceptos de SNOMED CT que son descendientes (subtipo) del concepto 609328004 |alergia| (nótese el uso del operador “<”, que significa descendientes o subtipos). Para refinar esta jerarquía y seleccionar, por ejemplo, únicamente aquellos conceptos que representan alergias causadas por un producto biológico o farmacéutico, entrarían en juego la relación de atributo 246075003 |agente causal| y la jerarquía de productos biológicos/farmacéuticos, de esta forma:
< 609328004 |alergia|: 246075003 |agente causal| = < 373873005 |producto biológico/farmacéutico| |
(nótese el uso del operador “:” para aplicar el refinamiento formado por el atributo 246075003 |agente causal| y la jerarquía < 373873005 |producto biológico/farmacéutico|). Algunos conceptos que se obtendrían al ejecutar esta expresión serían 23611000122102 |alergia a amilasa|, 22181000122105 |alergia a vacuna frente a la hepatitis A y B| o 22101000122103 |alergia a vacuna frente al sarampión|.
Del mismo modo, pero sustituyendo el operador “=” (igual) por “!=” (distinto), podemos seleccionar las alergias causadas por conceptos distintos a productos biológicos/farmacéuticos:
< 609328004 |alergia|: 246075003 |agente causal|!= < 373873005 |producto biológico/farmacéutico| |
como, por ejemplo, 5611000122107 |alergia a caseína|, 1269425007 |alergia a gluten| o 1003755004 |alergia a látex|, entre otros.
El lenguaje ECL también permite el uso de operadores lógicos (“AND”, “OR” y “MINUS”) para combinar expresiones. Por ejemplo, podemos seleccionar las alergias a vegetales, las alergias a carnes y las alergias a moluscos mediante el operador lógico “OR” (unión de conjuntos):
< 16067251000119104 |alergia a vegetales| OR < 703931001 |alergia a carne| OR < 712842007 |alergia a molusco| |
Pero ECL no sólo permite especificar subconjuntos sencillos como los que hemos presentado a modo de introducción al lenguaje. Su riqueza en operadores y los filtros añadidos en sus versiones más recientes, hacen de él un lenguaje tan potente que nos permite especificar subconjuntos tan complejos como nos permita nuestra propia imaginación o necesidad. ECL permite, por ejemplo, especificar jerarquías a partir de descendientes (“<”) incluyendo al concepto raíz de la jerarquía (“<<”), o ascendientes (“>”) incluyendo al concepto raíz de la jerarquía (“>>”). Es posible también seleccionar hijos de un concepto (“<!”) incluyendo al propio concepto (“<<!”), padres (“>!”) o miembros de un refset (“^”). ECL permite recorrer la expresión en orden inverso (“R”) y establecer el número de relaciones de un atributo concreto que han de tener los conceptos para satisfacer la expresión mediante el uso de cardinalidad (“[x..y]”). Además, ECL permite añadir filtros que los conceptos o sus descripciones deben satisfacer para ser incluidos en el subconjunto (“{{ }}”). En el caso de los conceptos, estos filtros se pueden aplicar sobre su estado de definición (primitivo/definido), su módulo, su fecha de creación o su estado (activo/inactivo). Por su parte, los filtros en las descripciones se pueden aplicar sobre su idioma, su tipo (descripción completa/sinónimo) y su aceptabilidad (preferida/aceptable).
Por ejemplo, la siguiente expresión define el subconjunto de los virus causantes de enfermedades que contienen las palabras “influenza” o “humano” en alguna de sus descripciones y que además están localizadas en al menos dos estructuras corporales, alguna de las cuales no es ni el aparato respiratorio ni el aparato digestivo:
< 49872002 |virus|: R 246075003 |agente causal| = (< 64572001 |enfermedad| {{ term = (wild:»*influenza*» wild:»*humano*»)}} : [2..*] 363698007 |sitio del hallazgo| != (< 20139000 |estructura del aparato respiratorio| OR < 86762007 |estructura del aparato digestivo|)) |
Este subconjunto contiene virus como 725894000 |virus Influenza|, 9482002 |papilomavirus humano| o 19965007 |virus del herpes simple humano|, entre otros.
Desde los inicios del lenguaje ECL, hace ya casi 10 años, Veratech ha seguido de cerca su evolución y utilidad. Esto nos ha llevado a desarrollar un motor de ejecución propio [2] con funcionalidades avanzadas como la simplificación de las expresiones. Este motor ha sido incluido en el visor de SNOMED CT del Ministerio de Sanidad [3] fortaleciendo nuestra capacidad para ofrecer soluciones innovadoras y especializadas en el área de la interoperabilidad semántica de la información de salud en general y en SNOMED CT en particular.
Referencias
[1] https://confluence.ihtsdotools.org/display/DOCECL/
[2] Giménez-Solano, Vicente Miguel; Maldonado Segura, José Alberto; Boscá, Diego; Salas-García, Santiago; Robles Viejo, Montserrat (2021). Definition and validation of SNOMED CT subsets using the expression constraint language. Journal of Biomedical Informatics, 2021. https://doi.org/10.1016/j.jbi.2021.103747