Alors que les profils de confidentialité DICOM PS3.15 prédéfinis couvrent de nombreux cas d’utilisation, les établissements de santé ont souvent des exigences uniques en matière de vie privée. Dans ce guide, vous apprendrez comment concevoir profiles personnalisés de l’anonymisation DicOM qui s’alignent avec les politiques spécifiques de votre organisation.
Table des contenus
- Pourquoi les profils personnalisés sont nécessaires
- Comprendre les modèles et les actions
- Créer des profils personnalisés
- Télécharger des profils personnalisés en code
- Exemples de scénario réel
- Validation et test
- Conclusion
Pourquoi les profils personnalisés sont nécessaires
Les profils de confidentialité prédéfinis fournissent une base solide, mais ils ne peuvent pas répondre à toutes les exigences institutionnelles. Vous pourriez avoir besoin de profiles personnalisés lorsque votre organisation nécessite la conservation de identifiants institutionnels spécifiques pour la traçabilité interne tout en anonymisant toujours les données des patients. Certaines collaborations de recherche pourraient nécessiter certaines démographies préservées pendant la suppression d’identificateurs directs. Les flux de travail de garantie de qualité internes pourront exiger des informations sur le dispositif que les profils standards supprimeraient.
Les profils personnalisés vous donnent un contrôle précis sur lequel les tags DICOM sont modifiés et comment, ce qui permet de respecter vos politiques spécifiques de gouvernance des données.
Comprendre les modèles et actions de tag
Les étiquettes DICOM sont identifiées par les nombres de groupe et d’élément dans le format (GGGG,EEEE). Par exemple, le nom du patient est (0010,0010) et l’ID de la personne ( 0010.0020).
Les actions disponibles comprennent D (Delete) qui supprime le tag entièrement du dataset, Z (Zero)** qui remplacera la valeur par une valeur vide ou nulle longueur, X (Remove)** qui retire la marque si présente semblable à Delete, *K (Keep) qui maintient l’original sans changement,**C (Clean), qui nettoie cette valeur en supprimant les informations d’identification contextuellement, et **U (Replace avec UID) ** qui remplace un identifiant unique nouvellement généré.
Choisir la bonne action dépend de votre cas d’utilisation. Utilisez D ou X pour les tags qui ne devraient jamais apparaître dans une sortie anonymisée. utilisez Z lorsque le tag doit exister mais doit être vide. utiliser K pour des tags que vous voulez conserver exactement.utilisez C pour le texte des champs qui peuvent contenir des identifiants intégrés.
Créer des profils personnalisés
Les profils personnalisés peuvent être définis en trois formats. Choisissez celui qui convient le mieux à votre flux de travail.
Formats CSV
CSV est le format le plus simple, idéal pour des profils simples :
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
Ce profil cérame le nom et l’identité du patient, supprime la date de naissance, maintient le sexe et la démographie des patients, remplacent tous les UID, effacent les informations institutionnelles et nettoie les descriptions.
Formats JSON
JSON fournit une meilleure structure pour les profils complexes avec des métadonnées:
{
"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" }
]
}
Formats XML
XML est préférable pour les environnements avec des outils XML existants:
<?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>
Télécharger des profils personnalisés en code
Télécharger des profils personnalisés dans votre application .NET est simple :
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!");
Exemples de scénario du monde réel
Scénario 1 : Assurance qualité interne
Retenir les informations de l’institution et du dispositif pour le suivi interne tout en anonymisant les données des patients :
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
Scénario 2 : Collaboration en recherche extérieure
Anonymisation maximale avec démographies conservées pour les études de population :
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
Scénario 3 : Coordination des études multi-sites
Remplacer les UID tout en préservant les relations d’étude pour le lien de données:
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
Validation et test {#validations et tests}
Valider toujours les profils personnalisés avant le déploiement de la production:
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}");
Après l’exécution de la validation, ouvrez les fichiers anonymisés dans un visualisateur DICOM et vérifiez que les tags attendus sont correctement modifiés, des tags conservés sont conservées, les UID sont appropriément remplacés et aucune donnée sensible ne reste dans les champs nettoyés.
La conclusion (conclusion)
Les profils de confidentialité personnalisés vous donnent la flexibilité à mettre en œuvre l’anonymisation DICOM qui correspond exactement aux politiques de protection de la vie privée de votre institution. Que vous ayez besoin de conserver des identifiants spécifiques pour une utilisation interne, de préserver les démographies pour la recherche, ou d’appliquer une anonymisation maximale pour le partage extérieur, les profiles personnalizés le permettent.
Les recommandations clés comprennent la documentation de vos choix de profil à des fins d’audit, le contrôle de la version des fichiers de profils pour suivre les changements, l’essai des profiles avant utilisation en production, et la révision périodiquement du profil au fur et à mesure que les exigences évoluent.
Pour plus d’informations sur l’anonymisation de DICOM et la API Aspose.Medical, visitez le site La documentationLes modèles pour les scénarios de profil communs sont disponibles dans la section Exemples.
More in this category
- Créer un Microservice d'anonymisation DICOM dans ASP.NET Core
- Pourquoi l'anonymisation DICOM est importante pour HIPAA et GDPR dans les flux de travail .NET
- Préparation de DICOM Datasets pour l'AI et le Machine Learning avec Aspose.Medical
- Stockage des métadonnées DICOM dans les bases de données SQL et NoSQL avec C#
- DICOM Anonymisation pour Cloud PACS et Teleradiology dans C#