Compartir a través de


Transformación de metadatos DICOM en soluciones de datos sanitarios

Nota

Este contenido se está actualizando actualmente.

En este artículo se explica cómo el entorno de soluciones de datos de atención sanitaria extrae y transforma los metadatos DICOM en diferentes niveles de almacén de lago. También puede obtener información sobre el proceso de transformación de metadatos de un extremo a otro y comprender la asignación de transformación en cada nivel.

La transformación de metadatos a través de la canalización de ingesta consta de las siguientes tres fases consecutivas:

  1. Extracción y transformación de metadatos DICOM en tabla delta bronce
  2. Transformación de metadatos de la tabla bronce a la tabla delta plata
  3. Transformación de metadatos de la tabla delta plata a oro

Las siguientes secciones detallan la asignación de transformación para cada etapa.

Asignación de transformación para metadatos DICOM en tabla delta bronce

Hay más de 5000 etiquetas DICOM definidas por el estándar DICOM, incluidas las etiquetas privadas específicas del proveedor. Esta sección identifica qué etiquetas recuperamos y explica el proceso de extracción en el almacén de lago bronce.

El proceso de extracción de etiquetas realiza las siguientes acciones:

  1. Extracción de archivos DICOM: Extraiga una colección de todas las etiquetas de los archivos DICOM (DCM) en la estructura de carpetas optimizada en el almacén de lago bronce.

  2. Exclusión de etiquetas de datos de píxeles: excluya la etiqueta de datos de píxeles DICOM (7FE0,0010) y los atributos del módulo de datos de píxeles de imagen de la colección. La etiqueta de datos de píxeles DICOM incluye detalles en el nivel de imagen/píxel.

  3. Asignación de JSON: Asigne todas las etiquetas DICOM extraídas en una estructura JSON de pares clave-valor en el siguiente esquema:

    METADATA_JSON_DICT_SCHEMA = MapType
       (
          StringType(),
          StructType([
                        StructField("vr", StringType(), True),
                        StructField("Value", ArrayType(StringType(), True), True)
                     ])
       )
    

    Estos pares JSON clave-valor se escriben en la columna de metadatos de la tabla delta dicomimagingmetastore del almacén de lago bronce.

  4. Extracción y asignación al almacén de lago bronce: Extraiga además las siguientes 30 etiquetas DICOM y escríbalas en las columnas de destino respectivas de la tabla delta dicomimagingmetastore:

    Etiqueta DICOM de origen Columna de destino
    (0020,000D) [studyinstanceuid]
    (0010,0010) [patientname]
    (0010,0020) [patientid]
    (0010,0030) [patientbirthdate]
    (0010,0040) [patientsex]
    (0008,0050) [accessionnumber]
    (0008,0090) [referringphysicianname]
    (0008,0020) [studydate]
    (0008,1030) [studydescription]
    (0008,0061) [modalitiesinstudy]
    (0020,000E) [seriesinstanceuid]
    (0008,0060) [modality]
    (0040,0244) [performedprocedurestepstartdate]
    (0008,1090) [manufacturermodelname]
    (0008,0018) [sopinstanceuid]
    (0008,0030) [studytime]
    (0008,0096) [referringphysicianidentificationsequence]
    (0008,0201) [timezoneoffsetfromutc]
    (0020,1206) [numberofstudyrelatedseries]
    (0020,1208) [numberofstudyrelatedinstances]
    (0020,0011) [seriesnumber]
    (0008,103E) [seriesdescription]
    (0020,1209) [numberofseriesrelatedinstances]
    (0018,0015) [bodypartexamined]
    (0020,0060) [laterality]
    (0008,0021) [seriesdate]
    (0008,0031) [seriestime]
    (0008,0016) [sopclassuid]
    (0020,0013) [instancenumber]
    (0042,0010) [documenttitle]

    Nota

  5. Registro del tiempo de ejecución: la fecha y hora de ejecución del cuaderno se escriben en la columna created_date de la tabla delta dicomimagingmetastore.

  6. Almacenamiento de la ruta de archivos DCM: la ruta de acceso completa del archivo DCM se escribe en la columna filepath de la tabla delta dicomimagingmetastore.

Asignación de transformación para tabla delta bronce a plata

En las tablas siguientes se explica la asignación completa para la transformación de los metadatos DICOM en la tabla delta dicomimagingmetastore del almacén de lago bronce a la tabla delta de FHIR ImagingStudy en el almacén de lago plata.

Etiqueta DICOM de origen en dicomimagingmetastore Columna de destino en ImagingStudy Detalles de la asignación
No disponible id GUID generado mediante el módulo UUID de Python
No disponible meta.lastupdated Marca de tiempo de la creación del archivo NDJSON
StudyInstanceUID (0020,000D)
Número de acceso (0080,0050)
identifier ImagingStudy.identifier.where(system = 'urn:dicom:uid') =>StudyInstanceUID

ImagingStudy.identifier.where(type.coding.system = 'http://terminology.hl7.org/CodeSystem/v2-0203' y type.coding.code = 'ACSN')) =>"AccessionNumber"
Modalidades en el estudio (0008,0061) modality modality = List{code = col('ModalitiesInStudy')}
Id. del paciente (0010,0020) subject ""subject"": {""identifier"": {""type"": {""coding"": [{""system"": ""lit('http://terminology.hl7.org/CodeSystem/v2-0203')"",""code"": ""lit('MR')""}]},""value"": ""col('PatientID')""},""type": ""lit('Patient')""},"
Nombre del paciente (0010,0010)
Fecha de nacimiento del paciente (0010,0030)
Sexo del paciente (0010,0040)
subject "subject": {"extension": [{"url": "lit('name')", "valueString": "col('PatientName')"}, {"url": "lit('birthDate')", "valueDateTime": "col('PatientBirthDate')"}, {"url": "lit('gender')", "valueCode": "col('PatientSex')"}]}
StudyDate (0008,0020)
StudyTime (0008,0030)
TimezoneOffsetFromUTC(0008,0201)
started concat_ws(' ', col('StudyDate'), col('StudyTime'), col('TimezoneOffsetFromUTC'))
NumberOfStudyRelatedSeries (0020,1206) numberOfSeries col('NumberOfStudyRelatedSeries')
NumberOfStudyRelatedInstances (0020,1208) numberOfInstances col('NumberOfStudyRelatedInstances')
StudyDescription (0008,1030) description col('StudyDescription')

Detalles del nivel de serie

Etiqueta DICOM de origen en dicomimagingmetastore Columna de destino en ImagingStudy Detalles de la asignación
SeriesInstanceUID (0020,000E) series.uid col('SeriesInstanceUID')
SeriesNumber (0020,0011) series.number col('SeriesNumber')
Modalidad (0008,0060) series.modality modality.code = col('Modality')
SeriesDescription (0008,103E) series.description col('SeriesDescription')
NumberOfSeriesRelatedInstances (0020,1209) series.numberOfInstances col('NumberOfSeriesRelatedInstances')
BodyPartExamined (0018,0015) series.bodySite bodySite.display = col('BodyPartExamined')
Lateralidad (0020,0060) series.laterality laterality.display = col('Laterality')
SeriesDate (0008,0021)
SeriesTime (0008,0031)
TimezoneOffsetFromUTC (0008,0201)
series.started concat_ws(' ', col('SeriesDate'), col('SeriesTime'), col('TimezoneOffsetFromUTC')).cast(TimestampType())
SOPInstanceUID (0008,0018) series.instance.uid col('SOPInstanceUID')
SOPClassUID (0008,0016) series.instance.sopClass sopClass.code = col('SOPClassUID')
InstanceNumber (0020,0013) series.instance.number col('InstanceNumber')
DocumentTitle (0042,0010) series.instance.title col('DocumentTitle')
No disponible status "available"
No disponible Series.Instance.Extension "extension": [{"url": "lit('file_path')", "valueUrl": "col('FilePath')"}]

El valor de FilePath incluye la ruta de acceso al archivo ABFS en OneLake para todos los archivos DCM de nivel de instancia que forman parte de este ImagingStudy.
No disponible resourceType "ImagingStudy"

Asignación de transformación para tabla delta plata a oro

En la tabla siguiente se explica la asignación completa para la transformación de los metadatos DICOM en la tabla delta ImagingStudy del almacén de lago plata a la tabla delta Image_Occurrence de Observational Medical Outcomes Partnership (OMOP).

Columna de origen en ImagingStudy Columna de destino en Image_Occurrence de OMOP Tipo de datos Detalles de la asignación
series.uid image_occurrence_id entero Clave única que se le da a un registro de estudio de imágenes
subject person_id entero Id. de la persona asociada al procedimiento grabado
series.instance.extension local_path cadena {InstanceID; StoragePath}

Una colección de archivos DCM para todas las instancias de esa serie. La colección incluye una matriz JSON de pares de clave/valor.
series.started image_occurrence_date fecha Fecha de aparición del procedimiento de técnica de imagen (serie).
identifier['StudyInstanceUID'] image_study_UID cadena UID de estudio DICOM
series.uid image_series_UID cadena UID de la serie DICOM
series.modality modality cadena Modalidad de la serie.