Докато предварително дефинирани профили за поверителност на DICOM PS3.15 обхващат много случаи на използване, здравни институции често имат уникални изисквания за неприкосновеност на личния живот. В този ръководство ще научите как да дизайн персонализирани профила за анонимизация на ДИКОМ, които съответстват на специфичните политики на вашата организация.

Таблица на съдържанието

Защо са необходими персонализирани профили

Предефинирани профили за поверителност осигуряват солидна основа, но те може да не отговарят на всички институционални изисквания. Може да се наложи персонализиране на профилите, когато вашата организация изисква запазване на специфични институционни идентификатори за вътрешно проследяване, докато все още анонимни данни за пациентите. Някои изследователски съвместни дейности могат да изискват определена демография, запазена при премахване на директни идентифициращи данни.

Персонализираните профили ви дават точен контрол върху коя етикет DICOM се модифицира и как, което позволява спазването на вашите специфични политики за управление на данните.

Разбиране на таг шаблони и действия {# разбиране-таг-патрини-и-акции}

Етикети DICOM се идентифицират по групи и номера на елемента във формат (GGGG,EEEE). Например, Пациентското име е (0010,0010) и Идентифициращият пациент е (010.0020).

Наличните действия включват D (Delete), който премахва етикета изцяло от базата данни, **Z (Zero), който заменя стойността с празна или нулева дължина стойност; **X (Remove)**, която преминава в случай, че е налице подобно на Delete, K (Keep), което запазва оригиналната стойка непроменена; C (Clean), който почиства стойностите чрез изтриване на идентифицираща информация контекстуално; и **U (Заместване с UID), което се замества с новосъздаден уникален идентификатор.

Изборът на правилното действие зависи от случая, в който използвате. Използвайте D или X за етикети, които никога не трябва да се появяват в анонимен изход.Използвай Z, когато етикетът е трябвало да съществува, но следва да бъде празен.Искористете K за Етикета, която искате да запазите точно.Употребявайте C за текстови полета, което може да съдържа вградени идентификатори.

Създаване на персонализирани профили

Профилите могат да бъдат дефинирани в три формати.Изберете един, който най-добре отговаря на вашия работен поток.

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

Този профил изтрива името и идентификацията на пациента, премахва датата на раждане, съхранява пола и демографията на пациенти, заменя всички UID, изчиства институционалната информация и почиства описанията.

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!");

Примери за реалния свят сценарий {#real world-scenario-examples}

Сценарий 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: Координация на мултисайтовите проучвания

Замяна на UID, като същевременно се запазват проучвания за връзки с данни:

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 и проверете, че очакваните етикети се модифицират правилно, запазените теги се съхраняват, UIDs се заменят адекватно и няма чувствителни данни в почистените полета.

Заключението е заключение

Профилите за персонализиране на поверителността ви дават гъвкавост за прилагане на анонимността на DICOM, която точно съответства на политиките за поверителен живот на вашата институция. Независимо дали трябва да запазите специфични идентификатори за вътрешна употреба, да съхранявате демографията за изследвания или да прилагате максимална анонимизация за външно споделяне, персоналните профили го правят възможно.

Ключовите препоръки включват документиране на вашите профилни опции за целите на одита, версията контролира профилните файлове за проследяване на промените, тестването на профилите задълбочено преди употреба на производството и периодично преразглеждане на професионалните профили, тъй като изискванията се развиват.

За повече информация относно анонимността на DICOM и Aspose.Medical API, посетете ДокументацияШаблони за общи профилни сценарии са на разположение в раздела Примери.

More in this category