Enquanto os perfis de confidencialidade predefinidos DICOM PS3.15 cobrem muitos casos de uso, as instituições de saúde muitas vezes têm requisitos de privacidade únicos. nesta guia, você aprenderá como dizinar perfís de anonimato personalizados DIKOM que se alinham com as políticas específicas da sua organização. Nós cobriremos padrões de tag, ações e forneceremos modelos em formatos CSV, JSON e XML.

Tabela de Conteúdo

Por que os perfis personalizados são necessários

Os perfis de confidencialidade predefinidos fornecem uma base sólida, mas eles podem não atender a todas as exigências institucionais. Você pode precisar de perfís personalizados quando a sua organização requer a retenção de identificadores Institucionais específicos para a rastreabilidade interna, enquanto ainda anonimiza os dados do paciente. Algumas colaboração de pesquisa pode necessitar de determinadas demografias preservadas ao remover identificações diretas. Fluxos de trabalho de garantia de qualidade internos podem exigir informações de dispositivo que o perfil padrão seria removido.

Os perfis personalizados dão-lhe o controle preciso sobre quais tags DICOM são modificados e como, permitindo o cumprimento das suas políticas específicas de governação de dados.

Compreender Tag Patterns e Ações

Os rótulos DICOM são identificados por grupos e números de elementos no formato (GGGG,EEEE). Por exemplo, o nome do paciente é (0010,0010) e o ID do pacientes é (010.0020).

As ações disponíveis incluem D (Delete) que remove o rótulo inteiramente do conjunto de dados, Z (Zero)** que substitui o valor com um valor vazio ou zero-duração; X (Remove)* que elimina a etiqueta se presente semelhante ao Delete; K (Keep) que mantém o seu valor original inalterado; **C (Clean), que limpa o preço removendo informações de identificação contextualmente; e **U (Replace with UID) ** que é substituído por um identificador único recentemente gerado.

Escolher a ação certa depende do seu uso. Use D ou X para tags que nunca deverão aparecer em uma saída anônima. use Z quando a tag deve existir, mas deve ser vazia. usar K para Tags que você deseja preservar exatamente. utilizar C para campos de texto que podem conter identificadores incorporados.

Criação de perfis personalizados

Os perfis personalizados podem ser definidos em três formatos. Escolha o que melhor se encaixa no seu fluxo de trabalho.

Formato CSV

O CSV é o formato mais simples, ideal para perfis 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

Este perfil nuliza o nome e ID do paciente, remove a data de nascimento, mantém o sexo e a demografia dos pacientes, substitui todos os UIDs, elimina as informações institucionais e limpa as descrições.

Formato JSON

JSON fornece uma melhor estrutura para perfis complexos com metadados:

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

Formato XML

O XML é preferido para ambientes com ferramentas 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>

Carregar perfis personalizados em Código

Carregar perfis personalizados em seu aplicativo .NET é simples:

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 cenário do mundo real

Sinais 1: Seguro de Qualidade Interno

Mantenha informações institucionais e de dispositivos para rastreamento interno, enquanto anonimiza os dados do 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

Escenário 2: Cooperação de Pesquisa Externa

Anonimização máxima com demografia preservada para estudos populacionais:

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

Escenário 3: Coordenação do Estudo Multi-Site

Substituir UIDs enquanto preserva relações de estudo para ligação de dados:

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

Validação e teste

Verifique sempre os perfis personalizados antes do lançamento da produção:

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

Depois de executar a validação, abra os arquivos anónimos em um visualizador DICOM e verifique que as etiquetas esperadas são modificadas corretamente, as etapas mantidas são preservadas, os UIDs são adequadamente substituídos e nenhum dados sensíveis permanece em campos limpos.

CONCLUSÃO (conclusão)

Os perfis de confidencialidade personalizados dão-lhe a flexibilidade para implementar a anonimização da DICOM que corresponde exatamente às políticas de privacidade da sua instituição. Se você precisa manter identificadores específicos para uso interno, preservar demografia para pesquisa, ou aplicar a máxima anonimizada para compartilhamento externo, os perfís personalizáveis o tornam possível.

As principais recomendações incluem a documentação das suas escolhas de perfil para fins de auditoria, o controle de versão dos arquivos de perfis para rastrear as mudanças, testar os perfís cuidadosamente antes da utilização da produção, e a revisão periódica dos profís à medida que os requisitos evoluem.

Para mais informações sobre a anonimização do DICOM e a API Aspose.Medical, visite o site DocumentaçãoTemplates para cenários de perfil comuns estão disponíveis na seção de exemplos.

More in this category