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:
- Extractie en transformatie van DICOM-metagegevens naar bronzen deltatabel
- Metagegevenstransformatie van bronzen naar zilveren deltatabel
- 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:
Extractie uit DICOM-bestanden: extraheer een verzameling van alle tags uit de DICOM (DCM)-bestanden in de geoptimaliseerde mappenstructuur in het bronzen lakehouse.
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.
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.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.
Opslag van DCM-bestandspad: het volledige bestandspad voor het DCM-bestand wordt weggeschreven naar de kolom
filePath
in de deltatabel ImagingDicom .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.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
.
- Voor normale opname is de naamruimtewaarde de mapnaam na
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
enstartedOrig
.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
enidentifierOrig_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
ennote
.
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
.