Healthcare 数据解决方案中的 DICOM 元数据转换映射

本文介绍医疗保健数据解决方案环境如何跨不同湖屋级别提取和转换 DICOM 元数据。 您还可以了解端到端元数据转换流程,并了解每个级别的转换映射。

通过引入管道的元数据转换由以下三个连续阶段组成:

  1. 将 DICOM 元数据提取和转换到铜牌增量表
  2. 将元数据从铜牌转换到银牌增量表
  3. 将元数据从银牌转换到金牌增量表

以下部分详细介绍了每个阶段的转换映射。

DICOM 元数据到铜牌增量表的转换映射

DICOM 标准定义了超过 5000 个 DICOM 标记,包括特定于供应商的专用标记。 本部门确定我们检索哪些标记,并解释铜牌湖屋中的提取流程。

标签提取和 ImagingDicom delta 表创建过程包括以下操作:

  1. 从 DICOM 文件中提取:将 DICOM (DCM) 文件中的所有标记集合提取到铜牌湖屋中的优化文件夹结构中。

  2. 像素数据标记排除:从集合中排除 DICOM 像素数据标记 (7FE0,0010) 和图像像素数据模块属性。 DICOM 像素数据标记包括图像/像素级别详细信息。

  3. 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 处理其本机类型(结构、数组、映射)。

  4. 提取并映射铜牌湖屋:进一步提取以下 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 处理其本机类型(结构、数组、映射)。

  5. DCM 文件路径存储:DCM 文件的完整文件路径将写入 filePath ImagingDicom delta 表中的 列。

  6. 修改时间日志记录:DCM 文件在其源处修改的最新时间戳将写入 sourceModifiedAt ImagingDicom delta 表中的 列。

  7. 命名空间存储:命名空间值将写入 ImagingDicom sourceSystem delta 表中的 列。 此值派生自统一文件夹结构中的文件夹名称。

    • 对于常规摄取,namespace 值是之后 Files\Process\Imaging\DICOM的文件夹名称。
    • 对于自带存储(BYOS)摄取,命名空间值是之后 Files\External\Imaging\DICOM的文件夹名称。
  8. 执行时间日志记录:笔记本的执行日期和时间将写入 createdDatetime ImagingDicom delta 表中的 列。

铜牌到银牌增量表的转换映射

下表说明了将 DICOM 元数据从铜牌湖屋 ImagingDicom 增量表转换为 银牌湖屋中的 ImagingMetastoreImagingStudy 增量表的完整映射。 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 identifierOrigidOrigstartedOrig

  • 带有后缀的 _string 列存储包含复杂 JSON 数据的字段的字符串化版本,从而支持通过 SQL analytics 终结点进行查询。 这种做法适用于银色湖屋中的所有表,并包括 ImagingStudy 表中的 以下列:meta_stringtext_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 值:implicitRuleslanguagetext 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_idprocedure_occurrence_idanatomic_site_concept_id