В то время как предварительно обозначенные профили конфиденциальности DICOM PS3.15 охватывают многие случаи использования, учреждения здравоохранения часто имеют уникальные требования к конфигурации. В этом руководстве вы узнаете, как дизайн персонализированных профилей анонимности ДИКОМ, которые согласуются с конкретными политиками вашей организации.
Таблица контента
- Почему нужны персонализированные профили
- Понимание шаблонов и действий
- Создание персонализированных профилей
- Загрузка персонализированных профилей в коде
- Реальный мировой сценарий
- Валидация и тестирование
- Заключение
Почему нужны персонализированные профили
Предефинированные профили конфиденциальности обеспечивают солидный фундамент, но они могут не отвечать всем институциональным требованиям. Вам может понадобиться персонализированный профиль, когда ваша организация требует сохранения конкретных институционных идентификаторов для внутренней прослеживаемости, в то время как все еще анонимизирует данные пациентов. Некоторые исследовательские сотрудничества могут потребовать определенной демографии, сохранившейся при удалении прямых идентифицированных. Внутренние потоки работы по обеспечению качества могут требовать информации о устройстве, что стандартные файлы будут удалены.
Консолидированные профили дают вам точный контроль над тем, какие теги DICOM модифицированы и как, позволяя соблюдать ваши конкретные политики управления данными.
Понимание Таг шаблоны и действия
Таблицы DICOM идентифицируются групповыми и элементарными номерами в формате (GGGG,EEEE). К примеру, Пациентское имя (0010,0010) и Идентификатор пациента ( 0010.0020).
К имеющимся действиям относятся D (Delete), который удаляет обозначение полностью из набора данных, **Z (Zero)*, которое заменяет значение пустым или нулевым значениям, X (Remove), которая удаливает этикетку, если присутствует похожа на Delete; *K (Keep) который сохраняет оригинальную стоимость неизменным; C (Clean), который очищает значение путем удаления идентификационной информации контекстуально; и **U (Replace with UID).
Выбор правильного шага зависит от вашего использования. Используйте D или X для тегов, которые никогда не должны появляться в анонимном выходе.Использовайте Z, когда тег должен существовать, но должен быть пустым.Избирайте K для знаков, которых вы хотите точно сохранить.Употребляйте C для текстовых полей, содержащих встроенные идентификаторы.Инструментируйте U для UID, которым нужно заменить при сохранении уникальности.
Создание персонализированных профилей
Персональные профили могут быть определены в трех форматах.Выберите тот, который лучше всего подходит для вашего рабочего потока.
CSV формат
CSV - самый простой формат, идеальный для простых профилей:
TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0010,0030);X
(0010,0040);K
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0080);D
(0008,0081);D
(0008,1030);C
(0008,103E);C
(0010,1010);K
(0010,1030);K
Этот профиль нулюет имя и идентификацию пациента, удаляет дату рождения, сохраняет половые и демографические показатели пациентов, заменяет все УИД, извлекает информацию о учреждении и очищает описания.
Формат JSON
JSON обеспечивает лучшую структуру для сложных профилей с метаданными:
{
"profileName": "Hospital Research Profile",
"version": "1.0",
"description": "Custom profile for research data sharing",
"actions": [
{ "TagPattern": "(0010,0010)", "Action": "Z", "Comment": "Patient Name" },
{ "TagPattern": "(0010,0020)", "Action": "Z", "Comment": "Patient ID" },
{ "TagPattern": "(0010,0030)", "Action": "X", "Comment": "Birth Date" },
{ "TagPattern": "(0010,0040)", "Action": "K", "Comment": "Patient Sex" },
{ "TagPattern": "(0020,000D)", "Action": "U", "Comment": "Study Instance UID" },
{ "TagPattern": "(0020,000E)", "Action": "U", "Comment": "Series Instance UID" },
{ "TagPattern": "(0008,0018)", "Action": "U", "Comment": "SOP Instance UID" },
{ "TagPattern": "(0008,0080)", "Action": "D", "Comment": "Institution Name" },
{ "TagPattern": "(0008,0081)", "Action": "D", "Comment": "Institution Address" },
{ "TagPattern": "(0008,1030)", "Action": "C", "Comment": "Study Description" }
]
}
XML формат
XML предпочтительнее для среды с существующими XML-инструментами:
<?xml version="1.0" encoding="utf-8"?>
<ConfidentialityProfile name="Hospital Research Profile" version="1.0">
<Description>Custom profile for research data sharing</Description>
<TagActions>
<TagAction TagPattern="(0010,0010)" Action="Z">Patient Name</TagAction>
<TagAction TagPattern="(0010,0020)" Action="Z">Patient ID</TagAction>
<TagAction TagPattern="(0010,0030)" Action="X">Birth Date</TagAction>
<TagAction TagPattern="(0010,0040)" Action="K">Patient Sex</TagAction>
<TagAction TagPattern="(0020,000D)" Action="U">Study Instance UID</TagAction>
<TagAction TagPattern="(0020,000E)" Action="U">Series Instance UID</TagAction>
<TagAction TagPattern="(0008,0018)" Action="U">SOP Instance UID</TagAction>
<TagAction TagPattern="(0008,0080)" Action="D">Institution Name</TagAction>
<TagAction TagPattern="(0008,0081)" Action="D">Institution Address</TagAction>
<TagAction TagPattern="(0008,1030)" Action="C">Study Description</TagAction>
</TagActions>
</ConfidentialityProfile>
Загрузка персонализированных профилей в Коде
Загрузка персонализированных профилей в вашем приложении .NET проста:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Anonymization;
// Load from CSV
ConfidentialityProfile csvProfile = ConfidentialityProfile.LoadFromCsvFile(
"profiles/hospital_research.csv",
ConfidentialityProfileOptions.All
);
// Load from JSON
ConfidentialityProfile jsonProfile = ConfidentialityProfile.LoadFromJsonFile(
"profiles/hospital_research.json",
ConfidentialityProfileOptions.All
);
// Load from XML
ConfidentialityProfile xmlProfile = ConfidentialityProfile.LoadFromXmlFile(
"profiles/hospital_research.xml",
ConfidentialityProfileOptions.All
);
// Create anonymizer with custom profile
Anonymizer anonymizer = new(csvProfile);
// Anonymize files
DicomFile dcm = DicomFile.Open("patient_study.dcm");
DicomFile anonymizedDcm = anonymizer.Anonymize(dcm);
anonymizedDcm.Save("anonymized_study.dcm");
Console.WriteLine("Anonymization completed with custom profile!");
Примеры сценария реального мира
Сценарий 1: Внутреннее обеспечение качества
Сохранить информацию о учреждении и устройстве для внутреннего отслеживания при анонимизации данных пациентов:
TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0010,0030);X
(0008,0080);K
(0008,0081);K
(0008,1010);K
(0008,1090);K
(0018,1000);K
Сценарий 2: Внешнее исследовательское сотрудничество
Максимальная анонимность с сохранившимися демографическими характеристиками для исследований населения:
TagPattern;Action
(0010,0010);X
(0010,0020);X
(0010,0030);X
(0010,0040);K
(0010,1010);K
(0010,1020);K
(0010,1030);K
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0080);X
(0008,0081);X
(0008,1030);X
(0008,103E);X
Сценарий 3: Координация мультисайтных исследований
Заменить УИД при сохранении исследовательских отношений для соединения данных:
TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);K
(0020,0010);K
(0020,0011);K
(0020,0013);K
Валидация и тестирование
Всегда проверяйте персонализированные профили перед запуском производства:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Anonymization;
string profilePath = "profiles/custom_profile.csv";
string testDataFolder = "test_samples";
string outputFolder = "validation_output";
// Load custom profile
ConfidentialityProfile profile = ConfidentialityProfile.LoadFromCsvFile(
profilePath,
ConfidentialityProfileOptions.All
);
Anonymizer anonymizer = new(profile);
Directory.CreateDirectory(outputFolder);
// Process test files
string[] testFiles = Directory.GetFiles(testDataFolder, "*.dcm");
int successCount = 0;
int failCount = 0;
foreach (string filePath in testFiles)
{
try
{
DicomFile dcm = DicomFile.Open(filePath);
DicomFile anonymized = anonymizer.Anonymize(dcm);
string outputPath = Path.Combine(outputFolder, Path.GetFileName(filePath));
anonymized.Save(outputPath);
Console.WriteLine($"✓ {Path.GetFileName(filePath)}");
successCount++;
}
catch (Exception ex)
{
Console.WriteLine($"✗ {Path.GetFileName(filePath)}: {ex.Message}");
failCount++;
}
}
Console.WriteLine($"\nValidation Summary:");
Console.WriteLine($" Succeeded: {successCount}");
Console.WriteLine($" Failed: {failCount}");
Console.WriteLine($"\nReview output files in: {outputFolder}");
После выполнения валидации, открывайте анонимные файлы в дисплее DICOM и убедитесь, что ожидаемые теги модифицируются правильно, сохраняются сохранившиеся этиги, UID заменяются надлежащим образом, а чувствительные данные не остаются в очищенных полях.
Заключение — заключение
Персональные профили конфиденциальности дают вам гибкость для внедрения анонимности DICOM, которая точно соответствует политике вашей институции в области частной жизни. Независимо от того, нужно ли сохранять конкретные идентификаторы для внутреннего использования, сохранить демографию для исследований или применять максимальную анонимизацию для внешнего обмена, персонализированный профиль позволяет.
Ключевые рекомендации включают в себя документирование ваших выборов профиля для целей аудита, версионный контроль профильных файлов для отслеживания изменений, тщательное тестирование профилей перед использованием производства, а также периодически проверяют профили, поскольку требования эволюционируют.
Для получения дополнительной информации о анонимности DICOM и АПИ Aspose.Medical, посетите ДокументацияШаблоны для общего профильного сценария доступны в разделе Примеры.
More in this category
- Подготовка DICOM Datasets для AI и машинного обучения с Aspose.Medical
- Почему анонимизация DICOM имеет значение для HIPAA и GDPR в рабочих потоках .NET
- Создание DICOM Anonymization Microservice в ASP.NET Core
- Сохранение метаданных DICOM в базах данных SQL и NoSQL с помощью C#
- DICOM анонимизация для Cloud PACS и Teleradiology в C#