Condividi tramite


Trasformazione dei dati DICOM nelle soluzioni per dati sanitari

Nota

Questo contenuto è in fase di aggiornamento.

In questo articolo viene descritto come l'ambiente delle soluzioni per dati sanitari estrae e trasforma i metadati DICOM in diversi livelli dei lakehouse. Apprenderai inoltre il processo di trasformazione dei metadati end-to-end e il mapping delle trasformazioni a ogni livello.

Il processo di trasformazione dei metadati tramite la pipeline di inserimento è costituito dalle tre fasi consecutive seguenti:

  1. Estrazione e trasformazione di metadati DICOM in una tabella delta Bronze
  2. Trasformazione dei metadati dalla tabella delta Bronze a Silver
  3. Trasformazione dei metadati dalla tabella delta Silver a Gold

Le sezioni seguenti descrivono in dettaglio il mapping della trasformazione per ogni fase.

Mapping della trasformazione dei metadati DICOM a una tabella delta Bronze

Esistono più di 5000 tag DICOM definiti dallo standard DICOM, inclusi i tag privati specifici del fornitore. Questa sezione identifica quali tag recuperiamo e spiega il processo di estrazione nel lakehouse Bronze.

Il processo di estrazione dei tag comporta le seguenti azioni:

  1. Estrazione da file DICOM: estrai una raccolta di tutti i tag dai file DICOM (DCM) nella struttura di cartelle ottimizzata nel lakehouse Bronze.

  2. Esclusione del tag dei dati pixel: esclude il tag dei dati pixel DICOM (7FE0,0010) e gli attributi del modulo dei dati pixel immagine dalla raccolta. Il tag dei dati pixel DICOM include dettagli a livello di immagine/pixel.

  3. Mapping JSON: mappa tutti i tag DICOM estratti in una struttura JSON di coppie chiave-valore nello schema seguente:

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

    Queste coppie JSON chiave-valore vengono scritte nella colonna dei metadati nella tabella delta dicomimagingmetastore del lakehouse Bronze.

  4. Estrazione e mapping al lakehouse Bronze: estrai ulteriormente i seguenti 30 tag DICOM e scriveli nelle rispettive colonne di destinazione nella tabella delta dicomimagingmetastore:

    Tag DICOM di origine Colonna di destinazione
    (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. Registrazione del tempo di esecuzione: la data e l'ora di esecuzione del notebook vengono scritte nella colonna created_date della tabella delta dicomimagingmetastore.

  6. Memorizzazione del percorso del file DCM: il percorso completo del file DCM viene scritto nella colonna filepath della tabella delta dicomimagingmetastore.

Mapping della trasformazione della tabella delta da Bronze a Silver

Le tabelle seguenti illustrano il mapping completo per la trasformazione dei metadati DICOM nella tabella delta dicomimagingmetastore del lakehouse Bronze alla tabella delta FHIR ImagingStudy nel lakehouse Silver.

Tag DICOM di origine in dicomimagingmetastore Colonna di destinazione in ImagingStudy Dettagli del mapping
ND id Un GUID generato usando il modulo UUID Python.
ND meta.lastupdated Timestamp di creazione del file NDJSON.
StudyInstanceUID (0020,000D)
Numero di collocazione (0080,0050)
identifier ImagingStudy.identifier.where(system = 'urn:dicom:uid') =>StudyInstanceUID

ImagingStudy.identifier.where(type.coding.system = 'http://terminology.hl7.org/CodeSystem/v2-0203' e type.coding.code = 'ACSN')) =>"AccessionNumber"
Modalità in Study (0008,0061) modality modality = List{code = col('ModalitiesInStudy')}
ID paziente (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')""},"
Nome paziente (0010,0010)
Data di nascita paziente (0010,0030)
Sesso paziente (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')

Dettagli a livello di serie

Tag DICOM di origine in dicomimagingmetastore Colonna di destinazione in ImagingStudy Dettagli del mapping
SeriesInstanceUID (0020,000E) series.uid col('SeriesInstanceUID')
SeriesNumber (0020,0011) series.number col('SeriesNumber')
Modality (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')
Laterality (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')
ND status "available"
ND Series.Instance.Extension "extension": [{"url": "lit('file_path')", "valueUrl": "col('FilePath')"}]

Il valore di FilePath include il percorso del file ABFS in OneLake per tutti i file DCM a livello di istanza che fanno parte di questo ImagingStudy.
ND resourceType "ImagingStudy"

Mapping della trasformazione della tabella delta da Silver a Gold

La tabella seguente illustra il mapping completo per la trasformazione dei metadati DICOM nella tabella delta ImagingStudy del lakehouse Silver alla tabella delta OMOP Imag_Occurrence nel lakehouse Gold.

Colonna di origine in ImagingStudy Colonna di destinazione in OMOP Image_Occurrence Tipo di dati Dettagli del mapping
series.uid image_occurrence_id integer Chiave univoca fornita a un record di studio di imaging.
subject person_id integer ID persona della persona associata alla procedura registrata.
series.instance.extension local_path string {InstanceID; StoragePath}

Una raccolta di file DCM per tutte le istanze della serie. La raccolta include una matrice JSON di coppie chiave-valore.
series.started image_occurrence_date data Data di occorrenza della procedura di imaging (serie).
identifier['StudyInstanceUID'] image_study_UID string UID Studio DICOM
series.uid image_series_UID string UID serie DICOM
series.modality modality string Modalità della serie.