DICOM-Metadatentransformation Zuordnung in Datenlösungen für das Gesundheitswesen
Dieser Artikel erklärt, wie die DICOM-Datentransformationsfunktion in Datenlösungen für das Gesundheitswesen DICOM-Metadaten über verschiedene Lakehouse-Ebenen hinweg extrahiert und transformiert. Sie können sich auch über den End-to-End-Metadatentransformationsprozess informieren und die Transformationszuordnung auf jeder Ebene verstehen.
Die Metadatentransformation durch die Erfassungspipeline besteht aus den folgenden drei aufeinanderfolgenden Phasen:
- Extraktion und Transformation von DICOM-Metadaten in eine Bronze-Delta-Tabelle
- Metadatentransformation von der Bronze- zur Silber-Delta-Tabelle
- Metadatentransformation von der Silber- zur Gold-Delta-Tabelle
In den folgenden Abschnitten wird die Transformationszuordnung für die einzelnen Phasen ausführlich beschrieben.
Transformationszuordnung für DICOM-Metadaten in eine Bronze-Delta-Tabelle
Es gibt mehr als 5000 DICOM-Tags, die durch den DICOM-Standard definiert sind, einschließlich herstellerspezifischer privater Tags. In diesem Abschnitt wird beschrieben, welche Tags wir abrufen, und der Extraktionsprozess im Bronze-Lakehouse erklärt.
Der Prozess zur Tag-Extraktion und ImagingDicom Delta-Tabellenerstellung umfasst die folgenden Aktionen:
Extrahieren aus DICOM-Dateien: Extrahieren Sie eine Sammlung aller Tags aus den DICOM-Dateien (DCM) in der optimierten Ordnerstruktur im Bronze-Lakehouse.
Ausschluss von Pixeldaten-Tags: Schließen Sie das DICOM-Pixeldaten-Tag (7FE0,0010) und die Attribute des Bildpixel-Datenmoduls aus der Sammlung aus. Das DICOM-Pixeldaten-Tag enthält Details auf Bild-/Pixelebene.
JSON-Zuordnung: Ordnen Sie alle extrahierten DICOM-Tags einer JSON-Struktur von Schlüssel-Wert-Paaren im folgenden Schema zu:
METADATA_JSON_DICT_SCHEMA = MapType ( StringType(), StructType([ StructField("vr", StringType(), True), StructField("Value", ArrayType(StringType(), True), True) ]) )
Diese Schlüssel-Wert-JSON-Paare werden in die Spalte metadata in der bronzenen Lakehouse ImagingDicom Deltatabelle geschrieben.
Anmerkung
Die Spalte
metadata_string
speichert die Metadaten auch als Zeichenfolge, da Fabric-Endpunkte SQL keine komplexen Datentypen wie Strukturen, Arrays und Maps unterstützen. Sie können diese Spalten mit SQL Endpunkt (T-SQL) als Zeichenfolgen abfragen oder mit Spark mit ihren nativen Typen (Strukturen, Arrays, Maps) arbeiten.Extraktion und Zuordnung zu Bronze Lakehouse: Extrahieren Sie außerdem die folgenden 29 DICOM-Tags und schreiben Sie sie in die entsprechenden Zielspalten in der ImagingDicom Delta-Tabelle:
Quell-DICOM-Tag Zielspalte Erforderlich (0020,000D) [studyInstanceUid]
Ja (0010,0010) [patientName]
Nr. (0010,0040) [patientSex]
Nr. (0010,0020) [patientId]
Ja (0010,0030) [patientBirthDate]
Nr. (0008,0050) [accessionNumber]
Ja (0008,0090) [referringPhysicianName]
Ja (0008,0020) [studyDate]
Ja (0008,1030) [studyDescription]
Ja (0020,000E) [seriesInstanceUid]
Ja (0008,0060) [modality]
Ja (0008,0061) [modalitiesInStudy]
Ja (0040,0244) [performedProcedureStepStartDate]
Nr. (0008,1090) [manufacturerModelName]
Nr. (0008,0018) [sopInstanceUid]
Ja (0008,0030) [studyTime]
Ja (0008,0201) [timezoneOffsetFromUtc]
Ja (0020,1206) [numberOfStudyRelatedSeries]
Ja (0020,1208) [numberOfStudyRelatedInstances]
Ja (0020,0011) [seriesNumber]
Ja (0008,103E) [seriesDescription]
Ja (0020,1209) [numberOfSeriesRelatedInstances]
Ja (0018,0015) [bodyPartExamined]
Ja (0020,0060) [laterality]
Ja (0008,0021) [seriesDate]
Ja (0008,0031) [seriesTime]
Ja (0008,0016) [sopClassUid]
Ja (0020,0013) [instanceNumber]
Ja (0042,0010) [documentTitle]
Ja Anmerkung
Weitere Informationen darüber, warum wir gerade diese 29 DICOM-Tags höher stufen, finden Sie unter Extraktion von DICOM-Tags.
Um mehr über das Erfassungsmuster (Anfügen) zu erfahren, gehen Sie zum Anfügemuster im Bronze-Lakehouse.
Die
modalitiesInStudy_string
Spalte speichert auch den Tag modalitiesInStudy als Zeichenfolge, da Fabric-Endpunkte SQL keine komplexen Datentypen wie Strukturen, Arrays und Maps unterstützen. Sie können diese Spalten mit SQL Endpunkt (T-SQL) als Zeichenfolgen abfragen oder mit Spark mit ihren nativen Typen (Strukturen, Arrays, Maps) arbeiten.
DCM-Dateipfadspeicher: Der vollständige Dateipfad für die DCM-Datei wird in die Spalte
filePath
in der ImagingDicom Delta-Tabelle geschrieben.Protokollierung der Änderungszeit: Der letzte Zeitstempel, zu dem die DCM-Datei an ihrer Quelle geändert wurde, wird in die Spalte
sourceModifiedAt
der ImagingDicom-Deltatabelle geschrieben.Namespace-Speicher: Der Namespace-Wert wird in die Spalte
sourceSystem
in der ImagingDicom Delta-Tabelle geschrieben. Dieser Wert leitet sich vom Ordnernamen in der einheitlichen Ordnerstruktur ab.- Bei der regulären Aufnahme ist der Namespace-Wert der Ordnername nach
Files\Process\Imaging\DICOM
. - Bei der BYOS-Aufnahme (Bring Your Own Storage) ist der Namespace-Wert der Ordnername nach
Files\External\Imaging\DICOM
.
- Bei der regulären Aufnahme ist der Namespace-Wert der Ordnername nach
Protokollierung der Ausführungszeit: Das Ausführungsdatum und die Ausführungszeit des Notebooks werden in die Spalte
createdDatetime
der ImagingDicom Delta-Tabelle geschrieben.
Transformationszuordnung für Bronze- in Silber-Delta-Tabelle
Die folgenden Tabellen erläutern die vollständigen Zuordnung für die Transformation von DICOM-Metadaten von der bronzenen Lakehouse ImagingDicom Delta-Tabelle in die ImagingMetastore - und ImagingStudy Delta-Tabellen in der silbernen Lakehouse. Die Delta-Tabelle ImagingMetastore speichert die DICOM-Tags für jede DCM-Datei als JSON-Schlüssel-Wert-Paare in den Metadatenspalten. Durch das Kopieren aller Metadaten vom bronzenen ins silberne Ebene bleibt die Datenintegrität über alle Ebenen hinweg erhalten. Die ImagingStudy Deltatabelle enthält die 29 für Ausrichtung ausgewählten DICOM-Tags mit FHIR-Standardfeldern. Es enthält außerdem weitere Felder zur Unterstützung der Datenverfolgung und -herkunft.
Quellspalte in ImagingDicom | Zielspalte im ImagingMetastore | Zuordnungsdetails |
---|---|---|
k. A. | msftModifiedDatetime |
Eingeschlossen durch die gemeinsame Delta-Merge-Logik, die auf alle Tabellen im silbernen Ebene angewendet wird. |
studyInstanceUid |
studyInstanceUid |
Leiten Sie Zuordnung mit einer Eins-zu-Eins-Beziehung. Jeder Wert in der Quellspalte wird direkt einem einzelnen entsprechenden Wert im Ziel zugeordnet. |
seriesInstanceUid |
seriesInstanceUid |
Leiten Sie Zuordnung mit einer Eins-zu-Eins-Beziehung. |
sopInstanceUid |
sopInstanceUid |
Leiten Sie Zuordnung mit einer Eins-zu-Eins-Beziehung. |
sourceSystem |
msftSourceSystem |
Leiten Sie Zuordnung mit einer Eins-zu-Eins-Beziehung. |
metadata |
metadata |
Leiten Sie Zuordnung mit einer Eins-zu-Eins-Beziehung. |
metadata_string |
metadata_string |
Leiten Sie Zuordnung mit einer Eins-zu-Eins-Beziehung. |
filePath |
filePath |
Leiten Sie Zuordnung mit einer Eins-zu-Eins-Beziehung. |
sourceModifiedAt |
sourceModifiedAt |
Leiten Sie Zuordnung mit einer Eins-zu-Eins-Beziehung. |
k. A. | id |
Eine GUID, die mit dem Python-UUID-Modul generiert wurde. |
k. A. | msftCreatedDatetime |
Eingeschlossen durch die gemeinsame Delta-Merge-Logik, die auf alle Tabellen im silbernen Ebene angewendet wird. |
Quellspalte in ImagingDicom | Zielspalte in ImagingStudy | Zuordnungsdetails |
---|---|---|
k. A. | msftModifiedDatetime |
Eingeschlossen durch die gemeinsame Delta-Merge-Logik, die auf alle Tabellen im silbernen Ebene angewendet wird. |
k. A. | id |
Eine GUID, die mit dem Python-UUID-Modul generiert wurde. |
k. A. | resourceType |
"ImagingStudy" |
sourceSystem |
msftSourceSystem |
Kein direktes Zuordnung. Die DICOM-Datentransformationsfunktion verwendet die Spalte sourceSystem im bronzenen Lakehouse, um den Ordner Namespace zu erstellen, wenn die generierten NDJSON-Dateien in den Ordner Process geschrieben werden. Weitere Informationen zum Ordner Namespace finden Sie unter Einheitliche Ordnerstruktur: Ordnerbeschreibungen. In dieser Phase verwendet der klinische Bronze-Aufnahmedienst den Ordnernamen Namespace , um die Spalte msftSourceSystem im silbernen Lakehouse zu füllen. Wenn beispielsweise der sourceSystem Wert in der Bronze-Tabelle MyPACSsystem ImagingDicom als definiert ist, schreibt der Imaging Bronze-Aufnahmedienst die neu erstellten NDJSON-Dateien in die folgende Ordnerstruktur: Process\Clinical\FHIR-NDJSON\MyPACSsystem\YYYY\MM\DD\ImagingStudy-<timestamp>.ndjson . Wenn die klinische Bronze-Aufnahme diese Dateien aufnimmt, füllt sie die msftSourceSystem Spalte automatisch mit MyPACSsystem aus der Ordnerstruktur und überträgt den gleichen Wert an das silberne Ebene. |
k. A. | msftFilePath |
Dateipfad zum generierten ImagingStudy NDJSON im Process\Clinical\FHIR-NDJSON\DICOM-HDS Ordner. |
filePath |
extension |
"extension": [{"url": "lit('file_path')", "valueUrl": "col('FilePath')"}] Der Wert für FilePath enthält den ABFS-Dateipfad in OneLake für alle DCM-Dateien auf Instanzebene, die Teil dieser ImagingStudy sind. |
k. A. | meta | "meta": {"lastUpdated":"current_timestamp()"} |
studyInstanceUid accessionNumber |
identifier |
ImagingStudy.identifier.where(system = 'urn:dicom:uid') =>StudyInstanceUID ImagingStudy.identifier.where(type.coding.system = 'http://terminology.hl7.org/CodeSystem/v2-0203' und type.coding.code = 'ACSN')) =>"AccessionNumber" |
k. A. | status |
"available" |
modalitiesInStudy |
modality |
modality = List{code = col('ModalitiesInStudy')} |
patientId |
subject |
""subject"": {""identifier"": {""type"": {""coding"": [{""system"": ""lit('http://terminology.hl7.org/CodeSystem/v2-0203')"",""code"": ""lit('MR')""}]},""value"": ""col('PatientID')""},""type": ""lit('Patient')""}," |
patientName patientBirthDate patientSex |
subject |
"subject": {"extension": [{"url": "lit('name')", "valueString": "col('PatientName')"}, {"url": "lit('birthDate')", "valueDateTime": "col('PatientBirthDate')"}, {"url": "lit('gender')", "valueCode": "col('PatientSex')"}]} |
studyDate studyTime timezoneOffsetFromUtc |
started |
concat_ws(' ', col('StudyDate'), col('StudyTime'), col('TimezoneOffsetFromUTC')) |
numberOfStudyRelatedSeries |
numberOfSeries |
col('NumberOfStudyRelatedSeries') |
numberOfStudyRelatedInstances |
numberOfInstances |
col('NumberOfStudyRelatedInstances') |
studyDescription |
description |
col('StudyDescription') |
seriesInstanceUid seriesDate seriesTime timezoneOffsetFromUtc modality laterality bodyPartExamined numberOfSeriesRelatedInstances seriesDescription seriesNumber sopInstanceUid sopClassUid instanceNumber documentTitle |
series |
{"series": [{"uid": "col('SeriesInstanceUID')", "started": {"tag": "SeriesDate,SeriesTime,TimezoneOffsetFromUTC", "calc": "concat_ws(' ', col('SeriesDate'), col('SeriesTime'), col('TimezoneOffsetFromUTC')).cast(TimestampType())"}, "modality": {"code": "col('Modality')", "system": "lit('https://dicom.nema.org/resources/ontology/DCM')"}, "laterality": {"display": "col('Laterality')"}, "bodySite": {"display": "col('BodyPartExamined')"}, "numberOfInstances": "col('NumberOfSeriesRelatedInstances')", "description": "col('SeriesDescription')", "number": "col('SeriesNumber')", "instance": [{"uid": "col('SOPInstanceUID')", "sopClass": {"code": "col('SOPClassUID')"}, "number": "col('InstanceNumber')", "title": "col('DocumentTitle')", "extension": [{"url": "lit('file_path')", "valueUrl": "col('FilePath')"}]}]}]} |
k. A. | meta.lastupdated |
Currenttimestamp() |
k. A. | msftCreatedDatetime |
Eingeschlossen durch die gemeinsame Delta-Merge-Logik, die auf alle Tabellen im silbernen Ebene angewendet wird. |
Anmerkung
Spalten mit dem Suffix
Orig
werden im silbernen Lakehouse erstellt, um Originalwerte von Feldern aus dem bronzenen Ebene zu speichern. Dieses Standardverfahren umfasst die folgenden Spalten in der Tabelle ImagingStudy :meta_lastUpdatedOrig
,identifierOrig
,idOrig
undstartedOrig
.Spalten mit dem Suffix
_string
speichern Zeichenfolgenversionen von Feldern, die komplexe JSON-Daten enthalten, und ermöglichen Abfragen über die SQL-Analyse Endpunkt. Dieses Vorgehen gilt für alle Tabellen im silbernen Lakehouse und umfasst die folgenden Spalten in der Tabelle ImagingStudy :meta_string
,text_string
,contained_string
,identifier_string
,modality_string
,subject_string
,encounter_string
,basedOn_string
,referrer_string
,interpreter_string
,endpoint_string
,procedureReference_string
,procedureCode_string
,location_string
,reasonCode_string
,reasonReference_string
,note_string
,series_string
undidentifierOrig_string
.Einige Felder in der Tabelle ImagingStudy werden mit dem Schema FHIR ImagingStudy in ausrichten generiert. Da das bronzene Ebene jedoch keine Daten aus den DCM-Dateien extrahiert, die diesen Feldern genau entsprechen, bleiben die zugehörigen Spalten in der silbernen Tabelle leer. Daher enthalten die folgenden Spalten in der Tabelle ImagingStudy Nullwerte:
implicitRules
,language
,text
,contained
,encounter
,basedOn
,referrer
,interpreter
,endpoint
,procedureReference
,procedureCode
,location
,reasonCode
,reasonReference
undnote
.
Transformationszuordnung für Silber- in Gold-Delta-Tabelle
Die folgende Tabelle erläutert die vollständigen Zuordnung für die Transformation von DICOM-Daten in der silbernen Lakehouse ImagingStudy Delta-Tabelle in die Observational Medical Outcomes Partnership (OMOP) Image_Occurrence Delta-Tabelle in der goldenen Lakehouse.
Quelle-Spalte in ImagingStudy | Zielspalte in OMOP Image_Occurrence | Datentyp | Zuordnungsdetails |
---|---|---|---|
series.started |
image_occurrence_date |
date | Datum des Auftretens des bildgebenden Verfahrens (Serie). |
series.modality (Kombination aus series.modality.code und series.modality.system ) |
modality_concept_id |
string | concat_ws('<->', exp_series.modality.code, exp_series.modality.system) |
k. A. | SourceTable |
string | 'ImagingStudy_FHIR' |
id |
msftSourceRecordId |
string | Vom System generierte ID des Quelldatensatzes. |
identifier['studyInstanceUid'] |
image_study_uid |
string | DICOM-Studien-UID. |
subject |
person_id |
Integer | Personen-ID der Person, die dem aufgezeichneten Vorgang zugeordnet ist. |
Ein Array von Wörterbuchwerten, wobei der Schlüssel instance.uid und der Wert ist instance.extension[0].valueUrl |
local_path |
string | to_json(transform(exp_series.instance, x -> map('instanceid', x.uid, 'local_path', from_json(x.extension, 'array<struct<valueUrl:string,url:string>>')[0].valueUrl))) |
k. A. | SourceModifiedOn |
DateTime | Änderungsdatum aufzeichnen. |
resourceType |
msftSourceTableName |
string | 'Imaging Study' |
msftModifiedDatetime |
msftModifiedDatetime |
DateTime | Leiten Sie Zuordnung mit einer Eins-zu-Eins-Beziehung. |
series.uid |
image_occurrence_id |
string | Eindeutiger Schlüssel, der einem ImagingStudy-Datensatz zugewiesen wird. |
series.modality.code |
modality_source_value |
string | Modalität der Serie. |
Anmerkung
Einige Felder in der Goldtabelle werden mit dem Schema OMOP Image_Occurrence zu ausrichten generiert. Da die Bronze-Tabelle Ebene jedoch keine Daten extrahiert, die diesen Feldern genau entsprechen, bleiben die zugehörigen Spalten in der Gold-Tabelle leer. Daher enthalten die folgenden Spalten in der Tabelle Image_Occurrence Nullwerte: visit_occurrence_id
, procedure_occurrence_id
und anatomic_site_concept_id
.