Freigeben über


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:

  1. Extraktion und Transformation von DICOM-Metadaten in eine Bronze-Delta-Tabelle
  2. Metadatentransformation von der Bronze- zur Silber-Delta-Tabelle
  3. 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:

  1. Extrahieren aus DICOM-Dateien: Extrahieren Sie eine Sammlung aller Tags aus den DICOM-Dateien (DCM) in der optimierten Ordnerstruktur im Bronze-Lakehouse.

  2. 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.

  3. 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.

  4. 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.

  5. DCM-Dateipfadspeicher: Der vollständige Dateipfad für die DCM-Datei wird in die Spalte filePath in der ImagingDicom Delta-Tabelle geschrieben.

  6. 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.

  7. 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.
  8. 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 und startedOrig.

  • 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 und identifierOrig_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 und note.

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.