Dela via


mappning av DICOM-metadataomvandling i lösningar för hälso- och sjukvårdsdata

Den här artikeln förklarar hur miljön DICOM-dataomvandling i vårddatalösningar extraherar och omvandlar DICOM-metadata på olika sjöhusnivåer. Du kan även lära dig om den kompletta omvandlingsprocessen för metadata och förstå omvandlingsmappningen på varje nivå.

Metadataomvandling genom inmatningspipelinen består av följande tre på varandra följande steg:

  1. Extrahering och omvandling av DICOM-metadata till bronsdeltatabell
  2. Metadataomvandling från brons- till silverdeltatabell
  3. Metadataomvandling från silver- till gulddeltatabell

I följande avsnitt beskrivs omvandlingsmappningen för varje steg.

Omvandlingsmappning för DICOM-metadata till bronsdeltatabell

Det finns mer än 5000 DICOM-taggar som definieras av DICOM-standarden, inklusive leverantörsspecifika privata taggar. Det här avsnittet identifierar vilka taggar vi hämtar och förklarar data vid extrahering i bronssjöhuset.

Processen för att extrahera taggar och skapa deltatabeller i ImagingDicom omfattar följande åtgärder:

  1. Extrahering från DICOM-filer: Extrahera en samling av alla taggar från DICOM-filerna (DCM) i den optimerade mappstrukturen i bronssjöhuset.

  2. Exkludering av pixeldatatagg: Exkludera DICOM-pixeldatataggen (7FE0,0010) och bildpixeldatamodulens attribut från samlingen. DICOM-pixeldatataggen innehåller information på bild-/pixelnivå.

  3. JSON-mappning: Mappa alla extraherade DICOM-taggar till en JSON-struktur med nyckel/värde-par i följande schema:

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

    Dessa JSON-par med nyckel/värde skrivs till metadatakolumnen i brons sjöhus ImagingDicom-deltatabellen .

    Obs

    Kolumnen metadata_string lagrar också metadata som en sträng eftersom infrastrukturresurser SQL slutpunkter inte stöder komplexa datatyper som strukturer, matriser och kartor. Du kan fråga dessa kolumner som strängar med hjälp av SQL slutpunkt (T-SQL) eller arbeta med deras interna typer (structs, matriser, kartor) med hjälp av Spark.

  4. Extrahering och mappning till brons sjöhus: Extrahera ytterligare följande 29 DICOM-taggar och skriv dem till respektive målkolumner i ImagingDicom-deltatabellen :

    Källa DICOM-tagg Målkolumn Obligatoriskt
    (0020,000D) [studyInstanceUid] Ja
    (0010,0010) [patientName] Nej.
    (0010,0040) [patientSex] Nej.
    (0010,0020) [patientId] Ja
    (0010,0030) [patientBirthDate] Nej.
    (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] Nej.
    (0008,1090) [manufacturerModelName] Nej.
    (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

    Obs

    • Mer information om varför vi höjer upp just dessa 29 DICOM-taggar finns i Extrahering av DICOM-taggar.

    • För att lära dig mer om inmatningsmönstret (lägga till), gå till Lägga till mönstret i bronssjöhuset.

    • Kolumnen modalitiesInStudy_string lagrar också taggen moditiesInStudy som en sträng eftersom Fabric SQL-slutpunkter inte stöder komplexa datatyper som strukturer, matriser och kartor. Du kan fråga dessa kolumner som strängar med hjälp av SQL slutpunkt (T-SQL) eller arbeta med deras interna typer (structs, matriser, kartor) med hjälp av Spark.

  5. Lagring av DCM-filsökväg: Den fullständiga sökvägen för DCM-filen skrivs till kolumnen filePath i deltatabellen ImagingDicom .

  6. Loggning av ändringstid: Den senaste tidsstämpeln då DCM-filen ändrades vid källan skrivs till kolumnen sourceModifiedAt i deltatabellen ImagingDicom .

  7. Namnområdeslagring: Namnområdesvärdet skrivs till kolumnen sourceSystem i deltatabellen ImagingDicom . Det här värdet härleds från mappnamnet i den enhetliga mappstrukturen.

    • För vanlig inmatning är namnområdesvärdet mappnamnet efter Files\Process\Imaging\DICOM.
    • För BYOS-inmatning (Bring Your Own Storage) är namnområdesvärdet mappnamnet efter Files\External\Imaging\DICOM.
  8. Loggning av körningstid: Notebook-filens körningsdatum och tid skrivs till kolumnen createdDatetime i deltatabellen ImagingDicom .

Omvandlingsmappning för brons till silver deltatabell

I följande tabeller förklaras den fullständiga mappning för omvandlingen av DICOM-metadata från brons sjöhus ImagingDicom deltatabellen till ImagingMetastore och ImagingStudy deltatabeller i silver sjöhus. Deltatabellen ImagingMetastore lagrar DICOM-taggarna för varje DCM-fil som JSON-nyckel/värde-par i metadatakolumnerna. Genom att kopiera alla metadata från brons- till silverlagret lager bevaras dataintegriteten mellan lagren. Deltatabellen ImagingStudy innehåller de 29 DICOM-taggar som valts för justering med FHIR-standardfält. Den innehåller också fler fält som stöder dataspårning och ursprung.

Källkolumn i ImagingDicom Målkolumn i ImagingMetastore Mappningsegenskaper
- msftModifiedDatetime Ingår via den vanliga deltasammanslagningslogiken som tillämpas på alla tabeller i silver lager.
studyInstanceUid studyInstanceUid Direkt mappning med en en-till-en-relation. Varje värde i källkolumnen mappar direkt till ett enda motsvarande värde i målet.
seriesInstanceUid seriesInstanceUid Direkt mappning med en en-till-en-relation.
sopInstanceUid sopInstanceUid Direkt mappning med en en-till-en-relation.
sourceSystem msftSourceSystem Direkt mappning med en en-till-en-relation.
metadata metadata Direkt mappning med en en-till-en-relation.
metadata_string metadata_string Direkt mappning med en en-till-en-relation.
filePath filePath Direkt mappning med en en-till-en-relation.
sourceModifiedAt sourceModifiedAt Direkt mappning med en en-till-en-relation.
- id Ett GUID som genereras med hjälp av Python UUID-modulen.
- msftCreatedDatetime Ingår via den vanliga deltasammanslagningslogiken som tillämpas på alla tabeller i silver lager.
Källkolumn i ImagingDicom Målkolumn i ImagingStudy Mappningsegenskaper
- msftModifiedDatetime Ingår via den vanliga deltasammanslagningslogiken som tillämpas på alla tabeller i silver lager.
- id Ett GUID som genereras med hjälp av Python UUID-modulen.
- resourceType "ImagingStudy"
sourceSystem msftSourceSystem Inte en direkt mappning. DICOM-datatransformeringsfunktionen använder kolumnen sourceSystem i brons sjöhus för att skapa mappen Namespace när du skriver de genererade NDJSON-filerna till mappen Process . Mer information om namnområdesmappen finns i Enhetlig mappstruktur: Mappbeskrivningar. I det här skedet använder den kliniska bronsinmatningstjänsten namnet på Namespace-mappen för att fylla i kolumnen msftSourceSystem i silver sjöhus.

Om sourceSystem värdet till exempel definieras som MyPACSsystem i tabellen brons ImagingDicom , skriver avbildningstjänsten för bronsinmatning de nyligen skapade NDJSON-filerna till följande mappstruktur: Process\Clinical\FHIR-NDJSON\MyPACSsystem\YYYY\MM\DD\ImagingStudy-<timestamp>.ndjson. När den kliniska bronsinmatningen hämtar dessa filer fylls kolumnen msftSourceSystem automatiskt i MyPACSsystem från mappstrukturen och sprider samma värde till silver lager.
- msftFilePath Filsökväg till den genererade ImagingStudy NDJSON i mappen Process\Clinical\FHIR-NDJSON\DICOM-HDS .
filePath extension "extension": [{"url": "lit('file_path')", "valueUrl": "col('FilePath')"}]

Värdet för FilePath inkluderar ABFS-filsökvägen i OneLake för alla DCM-filer på instansnivå som ingår i denna ImagingStudy.
- 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' och type.coding.code = 'ACSN')) =>"AccessionNumber"
- 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')"}]}]}]}
- meta.lastupdated Currenttimestamp()
- msftCreatedDatetime Ingår via den vanliga deltasammanslagningslogiken som tillämpas på alla tabeller i silver lager.

Obs

  • Kolumner med suffixet Orig skapas i silver sjöhus för att lagra ursprungliga värden för fält som kommer från brons-lager. Den här standardmetoden omfattar följande kolumner i tabellen ImagingStudy : meta_lastUpdatedOrig, identifierOrig, idOrig, och startedOrig.

  • Kolumner med suffixet _string lagrar strängifierade versioner av fält som innehåller komplexa JSON-data, vilket gör det möjligt att köra frågor via analys-slutpunkt SQL. Denna praxis gäller för alla tabeller i silver sjöhus och inkluderar följande kolumner i ImagingStudy-tabellen : 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 och. identifierOrig_string

  • Vissa fält i tabellen ImagingStudy genereras för att justera med FHIR ImagingStudy-schemat . Men eftersom bronslagret inte extraherar data från DCM-filerna som korrekt motsvarar dessa fält, förblir de relaterade kolumnerna i silvertabellen tomma. Det innebär att följande kolumner i tabellen ImagingStudy innehåller null-värden: , ,, implicitRules language text contained encounter basedOn referrer interpreter endpoint procedureReference procedureCode location reasonCode reasonReference note

Omvandlingsmappning för silver till guld deltatabell

I följande tabell förklaras den fullständiga mappning för omvandlingen av DICOM-data i deltatabellen silver sjöhus ImagingStudy till deltatabellen Observational Medical Outcomes Partnership (OMOP) Image_Occurrence i guld sjöhus.

Källkolumn i ImagingStudy Målkolumn i OMOP Image_Occurrence Datatyp Mappningsegenskaper
series.started image_occurrence_date datum Datum för förekomst av avbildningsprocedur (serie).
series.modality (kombination av series.modality.code och series.modality.system) modality_concept_id string concat_ws('<->', exp_series.modality.code, exp_series.modality.system)
- SourceTable string 'ImagingStudy_FHIR'
id msftSourceRecordId string Systemgenererat ID för källposten.
identifier['studyInstanceUid'] image_study_uid string UID för DICOM-studie.
subject person_id integer Person-ID för den person som är associerad med det registrerade förfarandet.
En matris med ordlistevärden, där nyckeln är instance.uid och värdet är 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)))
- SourceModifiedOn datetime Datum för ändring av post.
resourceType msftSourceTableName string 'Imaging Study'
msftModifiedDatetime msftModifiedDatetime datetime Direkt mappning med en en-till-en-relation.
series.uid image_occurrence_id string Unik nyckel som ges till en bildstudiepost.
series.modality.code modality_source_value string Seriens modalitet.

Obs

Vissa fält i guldtabellen genereras för att justera med det OMOP Image_Occurrence schemat. Men eftersom bronslagret inte extraherar data som korrekt motsvarar dessa fält förblir de relaterade kolumnerna i guldtabellen tomma. Det innebär att följande kolumner i tabellen Image_Occurrence innehåller null-värden: visit_occurrence_id, procedure_occurrence_id, och anatomic_site_concept_id.