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:
- Estrazione e trasformazione di metadati DICOM in una tabella delta Bronze
- Trasformazione dei metadati dalla tabella delta Bronze a Silver
- 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:
Estrazione da file DICOM: estrai una raccolta di tutti i tag dai file DICOM (DCM) nella struttura di cartelle ottimizzata nel lakehouse Bronze.
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.
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.
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
- Per ulteriori informazioni sul motivo per cui promuoviamo questi particolari 30 tag DICOM, vedi Estrazione di tag DICOM.
- Per altre informazioni sul modello di inserimento (append), vedi Modello di aggiunta nella lakehouse Bronze.
Registrazione del tempo di esecuzione: la data e l'ora di esecuzione del notebook vengono scritte nella colonna
created_date
della tabella delta dicomimagingmetastore.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. |