Mientras que los perfiles de confidencialidad predefinidos de DICOM PS3.15 cubren muchos casos de uso, las instituciones de salud a menudo tienen requisitos de privacidad únicos. En esta guía, usted aprenderá cómo diseñar profiles de anonimización personalizados de PACO que se ajusten a las políticas específicas de su organización. Nos cubrirán patrones de etiquetas, acciones y proporcionarán templates en formatos CSV, JSON y XML.

Tabla de contenidos

¿Por qué son necesarios los perfiles personalizados?

Los perfiles de confidencialidad predefinidos proporcionan una base sólida, pero no pueden satisfacer todos los requisitos institucionales. Usted puede necesitar profiles personalizados cuando su organización requiere la retención de identificadores institucionales específicos para la rastreabilidad interna mientras que todavía anonimizan los datos del paciente. Algunas colaboraciones de investigación pueden requerir ciertas demografías preservadas mientras se elimina las identificadoras directas. Los flujos de trabajo de garantía de calidad internos pueden exigir información del dispositivo que los perfil estándar eliminaría. Además, las regulaciones regionales pueden obligar el manejo específico de ciertos elementos de datos.

Los perfiles personalizados le dan un control preciso sobre qué etiquetas DICOM se modifican y cómo, permitiendo el cumplimiento de sus políticas específicas de gestión de datos.

Comprender los patrones de etiquetas y las acciones

Las etiquetas DICOM se identifican por los números de grupo y elemento en el formato (GGGG,EEEE). Por ejemplo, el Nombre del paciente es (0010,0010) y el ID del pacientes es (010.0020). Los perfiles personalizados especifican patrones que coinciden con estas etiqueta y las acciones a aplicar.

Las acciones disponibles incluyen D (Delete) que elimina la etiqueta en su totalidad del conjunto de datos, Z (Zero)** que reemplaza el valor con un valor vacío o de longitud cero; X (Remove)* que remove el etiquetado si presente semejante a Delete; K (Keep) que conserva el precio original inalterado, C (Clean), que limpia el valore eliminando la información de identificación contextual, y **U (Replace con UID) ** que sustituye por un identificador único recién generado.

La elección de la acción correcta depende de su caso de uso. Utilice D o X para las etiquetas que nunca deberían aparecer en la salida anónima. Use Z cuando la etiqueta debe existir pero debe estar vacía. Usa K para los etiquetes que desea conservar con precisión. Utilize C para campos de texto que pueden contener identificadores incorporados. U para UIDs que deben ser reemplazados mientras se mantiene la unicidad.

Creación de perfiles personalizados

Los perfiles personalizados se pueden definir en tres formatos. elegir el que mejor se ajuste a su flujo de trabajo.

El formato CSV

CSV es el formato más simple, ideal para perfiles sencillos:

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

Este perfil cero el nombre y la identificación del paciente, elimina la fecha de nacimiento, mantiene el sexo y las demografías de los pacientes, reemplaza todos los UIDs, elimina la información de la institución y limpia las descripciones.

El formato JSON

JSON proporciona una mejor estructura para los perfiles complejos con metadatos:

{
  "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" }
  ]
}

El formato XML

XML es preferido para los entornos con herramientas XML existentes:

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

Cargar perfiles personalizados en código

Cargar perfiles personalizados en su aplicación .NET es sencillo:

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

Exemplos de escenario del mundo real

Escenario 1: Aseguramiento de calidad interno

Retenir la información de la institución y el dispositivo para el seguimiento interno al mismo tiempo que anonimizar los datos del paciente:

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

Escenario 2: Cooperación de Investigación Externa

Anonimización máxima con demografía conservada para los estudios de población:

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

Escenario 3: Coordinación del estudio multi-site

Substituir UIDs mientras se mantienen las relaciones de estudio para la conexión de datos:

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

Validación y prueba

Siempre validar los perfiles personalizados antes del lanzamiento de la producción:

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

Después de ejecutar la validación, abra los archivos anónimos en un visualizador DICOM y verifique que las etiquetas esperadas se modifican correctamente, se conservan las etapas retenidas, los UID se sustituyen adecuadamente, y no se quedan datos sensibles en los campos limpios.

La conclusión

Los perfiles de confidencialidad personalizados le dan la flexibilidad para implementar la anonimización de DICOM que exactamente coincide con las políticas de privacidad de su institución. Ya sea que necesite mantener identificadores específicos para uso interno, preservar demografías para investigación, o aplicar la máxima anónima para compartir externo, los perfís personalizado lo hacen posible.

Las recomendaciones clave incluyen la documentación de sus opciones de perfil para fines de auditoría, los archivos de perfiles de control de versión para rastrear los cambios, la prueba de los profiles cuidadosamente antes de que se utilice la producción, y la revisión periódica del perfil a medida que los requisitos evolucionan.

Para obtener más información sobre la anonimización de DICOM y la API Aspose.Medical, visite el DocumentaciónTemplates para escenarios de perfil comunes están disponibles en la sección de ejemplos.

More in this category