Delen via


DICOM-metadatatransformatie toewijzing in oplossingen voor gezondheidszorggegevens

In dit artikel wordt uitgelegd hoe de DICOM-metagegevens in de omgeving voor oplossingen voor gezondheidszorggegevens op verschillende lakehouse-niveaus worden geëxtraheerd en getransformeerd. U leert ook meer over het end-to-end metagegevenstransformatieproces en krijgt inzicht in de transformatietoewijzing op elk niveau.

De metagegevenstransformatie via de opnamepijplijn bestaat uit de volgende drie opeenvolgende fasen:

  1. Extractie en transformatie van DICOM-metagegevens naar bronzen deltatabel
  2. Metagegevenstransformatie van bronzen naar zilveren deltatabel
  3. Metagegevenstransformatie van zilveren naar gouden deltatabel

In de volgende paragrafen wordt de transformatietoewijzing voor elke fase gedetailleerd beschreven.

Transformatietoewijzing voor DICOM-metagegevens aan bronzen deltatabel

Er zijn meer dan 5000 DICOM-tags gedefinieerd door de DICOM-standaard, inclusief leverancierspecifieke privétags. In deze sectie wordt aangegeven welke tags we ophalen en wordt het extractieproces in het bronzen lakehouse uitgelegd.

Het proces voor het extraheren van tags en het maken van ImagingDicom delta-tabellen omvat de volgende acties:

  1. Extractie uit DICOM-bestanden: extraheer een verzameling van alle tags uit de DICOM (DCM)-bestanden in de geoptimaliseerde mappenstructuur in het bronzen lakehouse.

  2. Uitsluiting van pixelgegevenstag: sluit de DICOM-pixelgegevenstag (7FE0,0010) en de modulekenmerken voor beeldpixelgegevens uit van de verzameling. De DICOM-pixelgegevenstag bevat details op beeld-/pixelniveau.

  3. JSON-toewijzing: wijs alle geëxtraheerde DICOM-tags toe aan een JSON-structuur van sleutel-waardeparen in het volgende schema:

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

    Deze sleutel-waarde-JSON-paren worden geschreven naar de metadata kolom in de bronzen lakehouse ImagingDicom delta-tabel.

    Notitie

    In de kolom metadata_string worden de metagegevens ook opgeslagen als een tekenreeks, omdat Fabric SQL-eindpunten geen complexe gegevenstypen ondersteunen, zoals structs, arrays en maps. U kunt deze kolommen als strings opvragen met behulp van SQL eindpunt (T-SQL) of met hun oorspronkelijke typen (structs, arrays, maps) werken met behulp van Spark.

  4. Extractie en toewijzing naar brons lakehouse: Extraheer de volgende 29 DICOM-tags verder en schrijf ze naar de respectievelijke bestemmingskolommen in de ImagingDicom delta-tabel:

    Bron-DICOM-tag Bestemmingskolom Vereist
    (0020,000D) [studyInstanceUid] Ja
    (0010,0010) [patientName] No
    (0010,0040) [patientSex] No
    (0010,0020) [patientId] Ja
    (0010,0030) [patientBirthDate] No
    (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] No
    (0008,1090) [manufacturerModelName] No
    (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

    Notitie

    • Zie Extractie van DICOM-tags voor meer informatie over waarom wij deze specifieke 29 tags promoten.

    • Zie Patroon toevoegen in het bronzen lakehouse voor meer informatie over het opnamepatroon (toevoegen).

    • In de kolom modalitiesInStudy_string wordt ook de tag modalitiesInStudy opgeslagen als een tekenreeks, omdat Fabric SQL-eindpunten geen complexe gegevenstypen ondersteunen, zoals structs, arrays en maps. U kunt deze kolommen als strings opvragen met behulp van SQL eindpunt (T-SQL) of met hun oorspronkelijke typen (structs, arrays, maps) werken met behulp van Spark.

  5. Opslag van DCM-bestandspad: het volledige bestandspad voor het DCM-bestand wordt weggeschreven naar de kolom filePath in de deltatabel ImagingDicom .

  6. Registratie van wijzigingstijd: het laatste tijdstempel waarop het DCM-bestand bij de bron is gewijzigd, wordt naar de kolom sourceModifiedAt in de deltatabel ImagingDicom geschreven.

  7. Naamruimteopslag: de naamruimtewaarde wordt weggeschreven naar de kolom in de deltatabel ImagingDicom. sourceSystem Deze waarde is afgeleid van de mapnaam in de uniforme mappenstructuur.

    • Voor normale opname is de naamruimtewaarde de mapnaam na Files\Process\Imaging\DICOM.
    • Voor BYOS-opname (Bring Your Own Storage) is de naamruimtewaarde de mapnaam na Files\External\Imaging\DICOM.
  8. Uitvoeringstijdregistratie: de uitvoeringsdatum en -tijd van het notebook worden weggeschreven naar de kolom in de deltatabel createdDatetime ImagingDicom .

Transformatietoewijzing voor bronzen naar zilveren deltatabel

De volgende tabellen geven uitleg over de volledige toewijzing voor de transformatie van DICOM-metagegevens van de bronzen lakehouse ImagingDicom deltatabel naar de ImagingMetastore en ImagingStudy deltatabellen in de zilveren lakehouse. De ImagingMetastore delta-tabel slaat de DICOM-tags voor elk DCM-bestand op als JSON-sleutel-waardeparen in de metagegevenskolommen. Door alle metagegevens van het brons naar het zilver te kopiëren laag blijft de gegevensintegriteit over de lagen heen behouden. De ImagingStudy delta-tabel bevat de 29 DICOM-tags die zijn geselecteerd voor uitlijning met FHIR-standaardvelden. Het bevat ook meer velden ter ondersteuning van gegevensregistratie en afstamming.

Bronkolom in ImagingDicom Bestemmingskolom in ImagingMetastore Toewijzingsdetails
N.v.t. msftModifiedDatetime Opgenomen via de algemene delta-samenvoegingslogica die op alle tabellen in de zilveren laag wordt toegepast.
studyInstanceUid studyInstanceUid Directe toewijzing met een één-op-één-relatie. Elke waarde in de bronkolom wordt rechtstreeks toegewezen aan een enkele overeenkomstige waarde in de bestemming.
seriesInstanceUid seriesInstanceUid Directe toewijzing met een één-op-één-relatie.
sopInstanceUid sopInstanceUid Directe toewijzing met een één-op-één-relatie.
sourceSystem msftSourceSystem Directe toewijzing met een één-op-één-relatie.
metadata metadata Directe toewijzing met een één-op-één-relatie.
metadata_string metadata_string Directe toewijzing met een één-op-één-relatie.
filePath filePath Directe toewijzing met een één-op-één-relatie.
sourceModifiedAt sourceModifiedAt Directe toewijzing met een één-op-één-relatie.
N.v.t. id Een GUID gegenereerd met behulp van de Python UUID-module.
N.v.t. msftCreatedDatetime Opgenomen via de algemene delta-samenvoegingslogica die op alle tabellen in de zilveren laag wordt toegepast.
Bronkolom in ImagingDicom Bestemmingskolom in ImagingStudy Toewijzingsdetails
N.v.t. msftModifiedDatetime Opgenomen via de algemene delta-samenvoegingslogica die op alle tabellen in de zilveren laag wordt toegepast.
N.v.t. id Een GUID gegenereerd met behulp van de Python UUID-module.
N.v.t. resourceType "ImagingStudy"
sourceSystem msftSourceSystem Niet direct toewijzing. De DICOM-gegevenstransformatiefunctie gebruikt de kolom sourceSystem in de bronzen lakehouse om de map Namespace te maken bij het schrijven van de gegenereerde NDJSON-bestanden naar de map Process . Zie Uniforme mapstructuur: mapbeschrijvingen voor meer informatie over de map Namespace. In deze fase gebruikt de klinische bronzen opnameservice de mapnaam Namespace om de kolom msftSourceSystem in de zilveren lakehouse te vullen.

Als de waarde sourceSystem bijvoorbeeld is gedefinieerd als MyPACSsystem in de tabel bronsImagingDicom , schrijft de imaging bronze-opnameservice de nieuw gemaakte NDJSON-bestanden naar de volgende mapstructuur: Process\Clinical\FHIR-NDJSON\MyPACSsystem\YYYY\MM\DD\ImagingStudy-<timestamp>.ndjson. Wanneer de klinische bronzen opname deze bestanden oppikt, wordt de kolom msftSourceSystem automatisch gevuld met MyPACSsystem uit de mapstructuur en wordt dezelfde waarde doorgegeven aan de zilveren laag.
N.v.t. msftFilePath Bestandspad naar de gegenereerde ImagingStudy NDJSON in de Process\Clinical\FHIR-NDJSON\DICOM-HDS map.
filePath extension "extension": [{"url": "lit('file_path')", "valueUrl": "col('FilePath')"}]

De waarde voor FilePath bevat het ABFS-bestandspad in OneLake voor alle DCM-bestanden op exemplaarniveau die deel uitmaken van deze ImagingStudy.
N.v.t. 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' en type.coding.code = 'ACSN')) =>"AccessionNumber"
N.v.t. 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')"}]}]}]}
N.v.t. meta.lastupdated Currenttimestamp()
N.v.t. msftCreatedDatetime Opgenomen via de algemene delta-samenvoegingslogica die op alle tabellen in de zilveren laag wordt toegepast.

Notitie

  • Kolommen met het achtervoegsel Orig worden gemaakt in de zilveren lakehouse om de oorspronkelijke waarden van velden uit de bronzen laag op te slaan. Deze standaardpraktijk omvat de volgende kolommen in de tabel ImagingStudy : meta_lastUpdatedOrig, identifierOrig, idOrig en startedOrig.

  • Kolommen met het achtervoegsel _string slaan stringversies op van velden met complexe JSON-gegevens, waardoor query's via de SQL-analyse eindpunt mogelijk worden. Deze praktijk is van toepassing op alle tabellen in de zilveren lakehouse en omvat de volgende kolommen in de tabel 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 en identifierOrig_string.

  • Sommige velden in de tabel ImagingStudy worden gegenereerd naar uitlijnen met het FHIR ImagingStudy schema. Omdat de bronzen laag echter geen gegevens uit de DCM-bestanden haalt die nauwkeurig overeenkomen met deze velden, blijven de gerelateerde kolommen in de zilveren tabel leeg. Als gevolg hiervan bevatten de volgende kolommen in de tabel ImagingStudy null-waarden: implicitRules, language, text, contained, encounter, basedOn, referrer, interpreter, endpoint, procedureReference, procedureCode, location, reasonCode, reasonReference en note.

Transformatietoewijzing voor zilveren naar gouden deltatabel

De volgende tabel geeft een overzicht van de volledige toewijzing voor de transformatie van DICOM-gegevens in de zilveren lakehouse ImagingStudy delta-tabel naar de Observational Medical Outcomes Partnership (OMOP) Image_Occurrence delta-tabel in de gouden lakehouse.

Bronkolom in ImagingStudy Bestemmingskolom in OMOP Image_Occurrence Gegevenstype Toewijzingsdetails
series.started image_occurrence_date datum Datum van optreden beeldvormingsprocedure (reeks).
series.modality (combinatie van series.modality.code en series.modality.system) modality_concept_id string concat_ws('<->', exp_series.modality.code, exp_series.modality.system)
N.v.t. SourceTable string 'ImagingStudy_FHIR'
id msftSourceRecordId string Door het systeem gegenereerde ID van het bronrecord.
identifier['studyInstanceUid'] image_study_uid string DICOM-studie-UID.
subject person_id integer Persoons-id van de persoon die bij de geregistreerde procedure hoort.
Een reeks woordenboekwaarden, waarbij de sleutel instance.uid is en de waarde 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)))
N.v.t. SourceModifiedOn datetime Datum van wijziging van het record.
resourceType msftSourceTableName string 'Imaging Study'
msftModifiedDatetime msftModifiedDatetime datetime Directe toewijzing met een één-op-één-relatie.
series.uid image_occurrence_id string Unieke sleutel voor een beeldvormingsonderzoeksrecord.
series.modality.code modality_source_value string Modaliteit van de reeks.

Notitie

Sommige velden in de gouden tabel genereren uitlijnen met het schema OMOP Image_Occurrence . Omdat de bronzen laag echter geen gegevens extraheert die nauwkeurig overeenkomen met deze velden, blijven de gerelateerde kolommen in de gouden tabel leeg. Als gevolg hiervan bevatten de volgende kolommen in de tabel Image_Occurrence null-waarden: visit_occurrence_id, procedure_occurrence_id en anatomic_site_concept_id.