Partager via


Transformation des métadonnées DICOM dans les solutions de données de santé

Note

Ce contenu est en cours de mise à jour.

Cet article explique comment l’environnement de solutions de données de santé extrait et transforme les métadonnées DICOM à différents niveaux de la lakehouse. Vous pouvez également en apprendre davantage sur le processus de transformation des métadonnées de bout en bout et comprendre le mappage de transformation à chaque niveau.

La transformation des métadonnées via le pipeline d’ingestion comprend les trois phases consécutives suivantes :

  1. Extraction et transformation des métadonnées DICOM dans la table delta bronze
  2. Transformation des métadonnées de la table delta bronze à la table delta argent
  3. Transformation des métadonnées de la table delta argent à la table delta or

Les sections suivantes détaillent le mappage de transformation pour chaque phase.

Mappage de transformation pour les métadonnées DICOM dans la table delta bronze

Il existe plus de 5 000 balises DICOM définies par la norme DICOM, y compris des balises privées spécifiques au fournisseur. Cette section identifie quelles balises nous récupérons et explique le processus d’extraction dans la lakehouse bronze.

Le processus d’extraction de balises effectue les actions suivantes :

  1. Extraction des fichiers DICOM : extrayez une collection de toutes les balises des fichiers DICOM (DCM) dans la structure de dossiers optimisée de la lakehouse bronze.

  2. Exclusion de la balise de données de pixel : excluez la balise de données de pixel DICOM (7FE0,0010) et les attributs du module de données de pixel d’image de la collection. La balise de données de pixel DICOM inclut des détails au niveau de l’image ou du pixel.

  3. Mappage JSON : mappez toutes les balises DICOM extraites dans une structure JSON de paires de clé-valeur dans le schéma suivant :

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

    Ces paires JSON de clé-valeur sont écrites dans la colonne de métadonnées de la table delta dicomimagingmetastore de la lakehouse bronze.

  4. Extraction et mappage dans la lakehouse bronze : extrayez davantage les 30 balises DICOM suivantes et écrivez-les dans les colonnes de destination respectives de la table delta dicomimagingmetastore :

    Balise DICOM source Colonne de destination
    (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]

    Note

  5. Enregistrement du temps d’exécution : la date et l’heure d’exécution du notebook sont écrites dans la colonne created_date de la table delta dicomimagingmetastore.

  6. Stockage du chemin du fichier DCM : le chemin complet du fichier DCM est écrit dans la colonne filepath de la table delta dicomimagingmetastore.

Mappage de transformation de la table delta bronze à la table delta argent

Les tableaux suivants expliquent le mappage complet pour la transformation des métadonnées DICOM de la table delta dicomimagingmetastore dans la lakehouse bronze vers la table delta FHIR ImagingStudy dans la lakehouse argent.

Balise DICOM source dans dicomimagingmetastore Colonne de destination dans ImagingStudy Détails du mappage
N/A id Un GUID généré à l’aide du module UUID Python.
N/A meta.lastupdated Horodatage de création du fichier NDJSON.
StudyInstanceUID (0020,000D)
Numéro d’accession (0080,0050)
identifier ImagingStudy.identifier.where(system = 'urn:dicom:uid') =>StudyInstanceUID

ImagingStudy.identifier.where(type.coding.system = 'http://terminology.hl7.org/CodeSystem/v2-0203' et type.coding.code = 'ACSN')) =>"AccessionNumber"
Modalités de l’étude (0008,0061) modality modality = List{code = col('ModalitiesInStudy')}
ID du patient (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')""},"
Nom du patient (0010,0010)
Date de naissance du patient (0010,0030)
Sexe du patient (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')

Détails au niveau de la série

Balise DICOM source dans dicomimagingmetastore Colonne de destination dans ImagingStudy Détails du mappage
SeriesInstanceUID (0020,000E) series.uid col('SeriesInstanceUID')
SeriesNumber (0020,0011) series.number col('SeriesNumber')
Modalité (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')
Latéralité (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')
N/A status "available"
N/A Series.Instance.Extension "extension": [{"url": "lit('file_path')", "valueUrl": "col('FilePath')"}]

La valeur pour FilePath inclut le chemin du fichier ABFS dans OneLake pour tous les fichiers DCM au niveau de l’instance qui font partie de ce ImagingStudy.
N/A resourceType "ImagingStudy"

Mappage de transformation de la table delta argent à la table delta or

Le tableau suivant explique le mappage complet pour la transformation des métadonnées DICOM de la table delta ImagingStudy dans la lakehouse argent vers la table delta Image_Occurrence de l’Observational Medical Outcomes Partnership (OMOP) dans la lakehouse or.

Colonne source dans ImagingStudy Colonne de destination dans OMOP Image_Occurrence Type de données Détails du mappage
series.uid image_occurrence_id entier Clé unique fournie à un enregistrement d’étude d’imagerie.
subject person_id entier ID de la personne associée à la procédure enregistrée.
series.instance.extension local_path chaîne {InstanceID; StoragePath}

Une collection de fichiers DCM pour toutes les instances de cette série. La collection inclut un tableau JSON de paires de clé-valeur.
series.started image_occurrence_date date Date d’occurrence de la procédure d’imagerie (série).
identifier['StudyInstanceUID'] image_study_UID chaîne UID de l’étude DICOM
series.uid image_series_UID chaine UID de la série DICOM
series.modality modality chaine Modalité de la série.