Healthcare 数据解决方案中的 DICOM 元数据转换映射
本文介绍医疗保健数据解决方案环境如何跨不同湖屋级别提取和转换 DICOM 元数据。 您还可以了解端到端元数据转换流程,并了解每个级别的转换映射。
通过引入管道的元数据转换由以下三个连续阶段组成:
- 将 DICOM 元数据提取和转换到铜牌增量表
- 将元数据从铜牌转换到银牌增量表
- 将元数据从银牌转换到金牌增量表
以下部分详细介绍了每个阶段的转换映射。
DICOM 元数据到铜牌增量表的转换映射
DICOM 标准定义了超过 5000 个 DICOM 标记,包括特定于供应商的专用标记。 本部门确定我们检索哪些标记,并解释铜牌湖屋中的提取流程。
标签提取和 ImagingDicom delta 表创建过程包括以下操作:
从 DICOM 文件中提取:将 DICOM (DCM) 文件中的所有标记集合提取到铜牌湖屋中的优化文件夹结构中。
像素数据标记排除:从集合中排除 DICOM 像素数据标记 (7FE0,0010) 和图像像素数据模块属性。 DICOM 像素数据标记包括图像/像素级别详细信息。
JSON 映射:将所有提取的 DICOM 标记映射到以下架构中键值对的 JSON 结构中:
METADATA_JSON_DICT_SCHEMA = MapType ( StringType(), StructType([ StructField("vr", StringType(), True), StructField("Value", ArrayType(StringType(), True), True) ]) )
这些键值 JSON 对将写入 铜牌湖屋 ImagingDicom delta 表中的元数据 列。
备注
该
metadata_string
列还将元数据存储为字符串,因为 Fabric SQL 终端节点不支持复杂的数据类型,例如结构、数组和映射。 您可以使用 SQL 终结点(T-SQL)以字符串形式查询这些列,也可以使用 Spark 处理其本机类型(结构、数组、映射)。提取并映射铜牌湖屋:进一步提取以下 29 个 DICOM 标签,并将它们写入 ImagingDicom delta 表中的相应目标列 :
源 DICOM 标记 目标列 必需 (0020,000D) [studyInstanceUid]
可以 (0010,0010) [patientName]
不可以 (0010,0040) [patientSex]
不可以 (0010,0020) [patientId]
可以 (0010,0030) [patientBirthDate]
不可以 (0008,0050) [accessionNumber]
可以 (0008,0090) [referringPhysicianName]
可以 (0008,0020) [studyDate]
可以 (0008,1030) [studyDescription]
可以 (0020,000E) [seriesInstanceUid]
可以 (0008,0060) [modality]
可以 (0008,0061) [modalitiesInStudy]
可以 (0040,0244) [performedProcedureStepStartDate]
不可以 (0008,1090) [manufacturerModelName]
不可以 (0008,0018) [sopInstanceUid]
可以 (0008,0030) [studyTime]
可以 (0008,0201) [timezoneOffsetFromUtc]
可以 (0020,1206) [numberOfStudyRelatedSeries]
可以 (0020,1208) [numberOfStudyRelatedInstances]
可以 (0020,0011) [seriesNumber]
可以 (0008,103E) [seriesDescription]
可以 (0020,1209) [numberOfSeriesRelatedInstances]
可以 (0018,0015) [bodyPartExamined]
可以 (0020,0060) [laterality]
可以 (0008,0021) [seriesDate]
可以 (0008,0031) [seriesTime]
可以 (0008,0016) [sopClassUid]
可以 (0020,0013) [instanceNumber]
可以 (0042,0010) [documentTitle]
可以 备注
有关我们为什么提升这 29 个特定 DICOM 标记的详细信息,请参阅 DICOM 标记提取。
若要了解有关引入模式(追加)的详细信息,请转到铜牌湖屋中的追加模式。
该
modalitiesInStudy_string
列还将 modalitiesInStudy 标签存储 为字符串,因为 Fabric SQL 端点不支持复杂的数据类型,例如结构、数组和映射。 您可以使用 SQL 终结点(T-SQL)以字符串形式查询这些列,也可以使用 Spark 处理其本机类型(结构、数组、映射)。
DCM 文件路径存储:DCM 文件的完整文件路径将写入
filePath
ImagingDicom delta 表中的 列。修改时间日志记录:DCM 文件在其源处修改的最新时间戳将写入
sourceModifiedAt
ImagingDicom delta 表中的 列。命名空间存储:命名空间值将写入 ImagingDicom
sourceSystem
delta 表中的 列。 此值派生自统一文件夹结构中的文件夹名称。- 对于常规摄取,namespace 值是之后
Files\Process\Imaging\DICOM
的文件夹名称。 - 对于自带存储(BYOS)摄取,命名空间值是之后
Files\External\Imaging\DICOM
的文件夹名称。
- 对于常规摄取,namespace 值是之后
执行时间日志记录:笔记本的执行日期和时间将写入
createdDatetime
ImagingDicom delta 表中的 列。
铜牌到银牌增量表的转换映射
下表说明了将 DICOM 元数据从铜牌湖屋 ImagingDicom 增量表转换为 银牌湖屋中的 ImagingMetastore 和 ImagingStudy 增量表的完整映射。 ImagingMetastore delta 表将每个 DCM 文件的 DICOM 标签作为 JSON 键值对存储在元数据列中。 将所有元数据从 bronze 图层复制到 silver 图层可保持各层之间的数据完整性。 ImagingStudy 增量表包括选择用于与 FHIR 标准字段对齐的 29 个 DICOM 标记。 它还包含更多字段以支持数据跟踪和世系。
ImagingDicom 中的源列 | ImagingMetastore 中的 Destination 列 | 映射详细信息 |
---|---|---|
不适用 | msftModifiedDatetime |
通过应用于 silver 图层中所有表的通用 delta merge logic 包含在内。 |
studyInstanceUid |
studyInstanceUid |
具有一对一关系的直接映射。 源列中的每个值都直接映射到目标中的单个对应值。 |
seriesInstanceUid |
seriesInstanceUid |
具有一对一关系的直接映射。 |
sopInstanceUid |
sopInstanceUid |
具有一对一关系的直接映射。 |
sourceSystem |
msftSourceSystem |
具有一对一关系的直接映射。 |
metadata |
metadata |
具有一对一关系的直接映射。 |
metadata_string |
metadata_string |
具有一对一关系的直接映射。 |
filePath |
filePath |
具有一对一关系的直接映射。 |
sourceModifiedAt |
sourceModifiedAt |
具有一对一关系的直接映射。 |
不适用 | id |
使用 Python UUID 模块生成的 GUID。 |
不适用 | msftCreatedDatetime |
通过应用于 silver 图层中所有表的通用 delta merge logic 包含在内。 |
ImagingDicom 中的源列 | ImagingStudy 中的目标列 | 映射详细信息 |
---|---|---|
不适用 | msftModifiedDatetime |
通过应用于 silver 图层中所有表的通用 delta merge logic 包含在内。 |
不适用 | id |
使用 Python UUID 模块生成的 GUID。 |
不适用 | resourceType |
"ImagingStudy" |
sourceSystem |
msftSourceSystem |
不是直接映射。 在将生成的 NDJSON 文件写入 Process sourceSystem 文件夹时,DICOM 数据转换功能使用 铜牌湖屋中的列创建 Namespace 文件夹。 要了解有关 Namespace 文件夹的更多信息 ,请参阅 统一文件夹结构:文件夹描述 。 在此阶段,Clinical bronze Ingestion Service 使用 Namespace 文件夹名称填充 msftSourceSystem silver 湖屋中的列。 例如,如果 sourceSystem 该值定义为 as MyPACSsystem 在 bronze ImagingDicom 表中,则成像 bronze 摄取服务会将新创建的 NDJSON 文件写入以下文件夹结构: Process\Clinical\FHIR-NDJSON\MyPACSsystem\YYYY\MM\DD\ImagingStudy-<timestamp>.ndjson 当 Clinical Bronze 摄取选取这些文件时,它会自动使用 msftSourceSystem 文件夹结构中的列填充 MyPACSsystem 列,并将相同的值传播到银色图层。 |
不适用 | msftFilePath |
文件夹中生成的 ImagingStudy NDJSON Process\Clinical\FHIR-NDJSON\DICOM-HDS 的文件路径。 |
filePath |
extension |
"extension": [{"url": "lit('file_path')", "valueUrl": "col('FilePath')"}] FilePath 的值包括 OneLake 中属于此 ImagingStudy 的所有实例级别 DCM 文件的 ABFS 文件路径。 |
不适用 | 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' 和 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 |
通过应用于 silver 图层中所有表的通用 delta merge logic 包含在内。 |
备注
在 silver 湖屋中创建带有
Orig
后缀的列,以存储源自 bronze 图层的字段的原始值。 此标准做法包括 ImagingStudy 表中的 以下列: 、、meta_lastUpdatedOrig
identifierOrig
和idOrig
。startedOrig
带有后缀的
_string
列存储包含复杂 JSON 数据的字段的字符串化版本,从而支持通过 SQL analytics 终结点进行查询。 这种做法适用于银色湖屋中的所有表,并包括 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
identifierOrig_string
生成 ImagingStudy 表中的某些字段 以与 FHIR ImagingStudy 架构对齐。 但是,由于 bronze 图层不会从 DCM 文件中提取与这些字段准确对应的数据,因此 silver 表中的相关列仍为空。 因此,ImagingStudy 表中的 以下列包含 null 值: ,
implicitRules
,language
,text
contained
encounter
basedOn
referrer
interpreter
endpoint
procedureReference
procedureCode
location
reasonCode
reasonReference
和。note
银牌到金牌增量表的转换映射
下表说明了将银牌湖屋 ImagingStudy delta 表中的 DICOM 数据转换为金牌湖屋中的 Observational Medical Outcomes Partnership(OMOP) Image_Occurrence delta 表的完整映射。
ImagingStudy 中的“源”列 | Image_Occurrence 中的 OMOP 目标列 | 数据类型 | 映射详细信息 |
---|---|---|---|
series.started |
image_occurrence_date |
日期 | 成像操作(系列)发生日期。 |
series.modality series.modality.code (和 series.modality.system 的组合) |
modality_concept_id |
string | concat_ws('<->', exp_series.modality.code, exp_series.modality.system) |
不适用 | SourceTable |
string | 'ImagingStudy_FHIR' |
id |
msftSourceRecordId |
string | 系统生成的源记录的 ID。 |
identifier['studyInstanceUid'] |
image_study_uid |
string | DICOM 研究 UID。 |
subject |
person_id |
integer | 与记录的手术相关联人员的人员 ID。 |
字典值的数组,其中 key is instance.uid 和 value 为 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 | 记录修改日期。 |
resourceType |
msftSourceTableName |
string | 'Imaging Study' |
msftModifiedDatetime |
msftModifiedDatetime |
datetime | 具有一对一关系的直接映射。 |
series.uid |
image_occurrence_id |
string | 成像研究记录的给定唯一密钥。 |
series.modality.code |
modality_source_value |
string | 系列的模态。 |
备注
Gold 表中的某些字段生成以对齐 OMOP Image_Occurrence 架构。 但是,由于 bronze 图层不会提取与这些字段准确对应的数据,因此 gold 表中的相关列将保持为空。 因此,Image_Occurrence 表中的以下列 包含 null 值: 、 visit_occurrence_id
和 procedure_occurrence_id
。 anatomic_site_concept_id