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:
- Extrahering och omvandling av DICOM-metadata till bronsdeltatabell
- Metadataomvandling från brons- till silverdeltatabell
- 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:
Extrahering från DICOM-filer: Extrahera en samling av alla taggar från DICOM-filerna (DCM) i den optimerade mappstrukturen i bronssjöhuset.
Exkludering av pixeldatatagg: Exkludera DICOM-pixeldatataggen (7FE0,0010) och bildpixeldatamodulens attribut från samlingen. DICOM-pixeldatataggen innehåller information på bild-/pixelnivå.
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.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.
Lagring av DCM-filsökväg: Den fullständiga sökvägen för DCM-filen skrivs till kolumnen
filePath
i deltatabellen ImagingDicom .Loggning av ändringstid: Den senaste tidsstämpeln då DCM-filen ändrades vid källan skrivs till kolumnen
sourceModifiedAt
i deltatabellen ImagingDicom .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
.
- För vanlig inmatning är namnområdesvärdet mappnamnet efter
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
, ochstartedOrig
.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
.