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 :
- Extraction et transformation des métadonnées DICOM dans la table delta bronze
- Transformation des métadonnées de la table delta bronze à la table delta argent
- 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 :
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.
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.
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.
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
- Pour plus d’informations sur les raisons pour lesquelles nous promouvons ces 30 balises DICOM particulières, consultez Extraction de balises DICOM.
- Pour en savoir plus sur le modèle d’ingestion (ajout), accédez à Ajouter un modèle dans la lakehouse bronze.
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.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. |