Nors iš anksto apibrėžti DICOM PS3.15 konfidencialumo profiliai apima daugybę naudojimo atvejų, sveikatos priežiūros įstaigos dažnai turi unikalius privatumo reikalavimus. Šiame vadove jūs sužinosite, kaip dizainuoti pritaikytus DIKOM anonimiškumo profilius, kurie atitinka konkrečias jūsų organizacijos politiką. Mes apimsime etiketės modelius, veiksmus ir pateiksime šablonus CSV, JSON ir XML formatais.

Turinio lentelė

Kodėl reikalingi pritaikyti profiliai

Iš anksto apibrėžti konfidencialumo profiliai suteikia tvirtą pagrindą, tačiau jie negali patenkinti visų institucinių reikalavimų. Jums gali prireikti pritaikytų profilių, kai jūsų organizacija reikalauja, kad būtų išsaugoti tam tikri instituciniai identifikatoriai vidiniam atsekamumui, o paciento duomenys vis dar anonimiški. Kai kurioms mokslinių tyrimų bendradarbiavimo organizacijoms gali reikėti tam tikrai demografijos, išlaikytos pašalinant tiesioginius identifikatorius. Vidaus kokybės užtikrinimo darbo srautai gali būti reikalinga prietaiso informacija, kurią standartizuotos profiliai būtų pašalintos. Be to, regioniniai teisės aktai gali įpareigoti konkrečią duomenų elementų tvarkymą.

Kūrybiniai profiliai suteikia jums tikslią kontrolę, kuriomis DICOM žymėmis keičiamos ir kaip, leidžiant laikytis jūsų konkrečių duomenų valdymo politikos.

Suprasti ženklo modelius ir veiksmus {# suprasti-tag-patterns-and-actions}

DICOM ženklai yra identifikuojami grupės ir elementų skaičiais formatu (GGGG,EEEE). Pavyzdžiui, Paciento vardas yra (0010,0010) ir paciento tapatybė yra (010.0020).

Galimi veiksmai apima D (ištrinti), kuri visiškai pašalina žymę iš duomenų rinkinio, **Z (zero)**, kuris pakeičia vertę tuščia arba nulio ilgio vertė, X (Išeikite), kad pašalins ženklą, jei ji yra panaši į ištrinimą, *K (Silaikyti), kuris išsaugo originalųjį vertes nepasikeitęs,**C (Švarus), kuris valo pašalinant identifikuojančią informaciją kontekstiniu požiūriu, ir **U (Nukreipkite su UID), kurio pakaitalas yra naujai sukurtas unikalus identifikatorius.

Pasirinkti teisingą veiksmą priklauso nuo jūsų naudojimo atvejo. Naudokite D arba X žymėms, kurios niekada neturėtų pasirodyti anonimiškame išleidime.Naudok Z, kai etiketė turi egzistuoti, bet turėtų būti tuščia.Nuo K žymiams, kuriuos norite tiksliai išsaugoti.naudodami C tekstinius laukus, kurie gali turėti įterptus identifikatorius.

Sukurti pritaikytus profilius

Pritaikytus profilius galima apibrėžti trimis formatais. Pasirinkite tą, kuris geriausiai tinka jūsų darbo srautui.

CSV formatas

CSV yra paprasčiausias formatas, idealus paprastoms profilėms:

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

Šis profilis nulemia paciento vardą ir tapatybę, pašalina gimimo datą, saugo pacientų lytį ir demografiją, pakeičia visus UID, ištrina institucijos informaciją ir išvalys aprašymus.

JSON formatas

JSON suteikia geresnę struktūrą sudėtingoms profiliams su metadatais:

{
  "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 formatas

XML yra pageidautina aplinkoms su esamais XML įrankiais:

<?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>

Parsisiųsti pritaikytus profilius kodu

Atsisiųsti pritaikytus profilius jūsų .NET programoje yra paprasta:

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

Realaus pasaulio scenarijų pavyzdžiai

1 scenarijus: vidaus kokybės užtikrinimas

Išsaugokite įstaigos ir prietaiso informaciją vidiniam stebėjimui, tuo pačiu anonimizuojant pacientų duomenis:

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 scenarijus: išorės mokslinių tyrimų bendradarbiavimas

Maksimalus anonimiškumas su išsaugotomis demografijomis gyventojų tyrimams:

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 scenarijus: daugiapakopio tyrimo koordinavimas

Pakeiskite UID, išlaikydami studijų santykius duomenų ryšiams:

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

Validavimas ir bandymas

Visada patvirtinkite pritaikytus profilius prieš pradedant gamybą:

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

Vykdydami patvirtinimą, atidarykite anonimiškus failus DICOM žiūrovas ir patikrinkite, kad numatytos žymės yra teisingai modifikuotos, išsaugotos žymios yra saugomos, UID yra tinkamai pakeistos, ir jokių jautrių duomenų nėra išvalytose srityse.

Išvada – išvadas

Pritaikytos konfidencialumo profiliai suteikia jums lankstumo įgyvendinti DICOM anonimiškumą, kuris tiksliai atitinka jūsų įstaigos privatumo politiką. Nesvarbu, ar reikia išsaugoti konkrečius identifikatorius vidiniam naudojimui, saugoti demografiją moksliniams tyrimams ar taikyti maksimalų anonimizavimą išorinio dalijimo tikslais, pritaikyti profilius leidžia.

Pagrindinės rekomendacijos apima jūsų profilo pasirinkimų dokumentavimą audito tikslais, versijos profilio failų kontrolę, kad būtų galima stebėti pokyčius, profilius išsamiai išbandyti prieš gamybos naudojimą ir periodiškai peržiūrėti profilį, kai reikalavimai vystosi.

Norėdami gauti daugiau informacijos apie DICOM anonimiškumą ir Aspose.Medical API, apsilankykite dokumentacijaPaprastų profilio scenarijų šablonai pateikiami pavyzdžių skyriuje.

More in this category