Como criar um perfil de anonimato DICOM personalizado a partir de CSV, JSON ou XML
Este tutorial demonstra como criar perfis de anonimato personalizados DICOM usando arquivos CSV, JSON ou XML em C#. Profis customizados permitem que você define exatamente quais tags devem ser removidos, substituídos ou mantidos de acordo com as políticas específicas de privacidade da sua instituição.
Por que criar perfis personalizados?
Os perfis DICOM PS3.15 predefinidos podem não atender a todos os requisitos institucionais.
- Manter identificadores institucionais específicos para a rastreabilidade interna
- Aplica as regras de privacidade específicas da organização
- Cumpre requisitos regulamentares únicos em sua jurisdição
Tag Ações explicadas
As seguintes ações podem ser aplicadas às tags DICOM:
| Ação | Código | Descrição |
|---|---|---|
| Eliminação | D | Remova o tag completamente do conjunto de dados |
| Zero | Z | Substituir o valor por um valor vazio ou zero |
| Remover | X | Remova se estiver presente (similar a Remover) |
| Keep | K | Mantenha o valor original inalterado |
| Clean | C | Limpe o valor removendo informações de identificação |
| Substituição por UID | U | Substituir com um novo UID gerado |
Título: Preparando o Meio Ambiente
- Instale o Visual Studio ou qualquer .NET IDE compatível.
- Crie um novo projeto de aplicação .NET 8 console.
- Instale Aspose.Medical do NuGet Package Manager.
- Prepare o seu arquivo de definição de perfil personalizado.
Guia passo a passo para criar perfis personalizados
Passo 1: Instalar Aspose.Medical
Adicione a Aspose.Medical Library ao seu projeto usando NuGet.
Install-Package Aspose.MedicalPasso 2: Crie uma definição de perfil CSV
Crie um arquivo CSV com padrões e ações de tag. Cada linha especifica uma tag e sua ação.
- Página de perfil.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<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“Copia do código”
<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>
Este perfil:
- Nome e ID do paciente Zeros
- Remova a data de nascimento
- O sexo do paciente
- Substitui Estudo, Série e SOP Instance UIDs
- Eliminação de informações institucionais
- Descrição do estudo Cleans
Passo 3: Crie uma definição de perfil JSON (Alternativa)
Crie um arquivo JSON com as mesmas definições de tag.
- Página inicial .json: *
[
{ "TagPattern": "(0010,0010)", "Action": "Z" },
{ "TagPattern": "(0010,0020)", "Action": "Z" },
{ "TagPattern": "(0010,0030)", "Action": "X" },
{ "TagPattern": "(0010,0040)", "Action": "K" },
{ "TagPattern": "(0020,000D)", "Action": "U" },
{ "TagPattern": "(0020,000E)", "Action": "U" },
{ "TagPattern": "(0008,0018)", "Action": "U" },
{ "TagPattern": "(0008,0080)", "Action": "D" },
{ "TagPattern": "(0008,0081)", "Action": "D" },
{ "TagPattern": "(0008,1030)", "Action": "C" }
]Passo 4: Crie uma definição de perfil XML (alternativa)
Crie um arquivo XML com as mesmas definições de tag.
- Profilo xml: *
<?xml version="1.0" encoding="utf-8"?>
<ConfidentialityProfile>
<TagAction TagPattern="(0010,0010)" Action="Z" />
<TagAction TagPattern="(0010,0020)" Action="Z" />
<TagAction TagPattern="(0010,0030)" Action="X" />
<TagAction TagPattern="(0010,0040)" Action="K" />
<TagAction TagPattern="(0020,000D)" Action="U" />
<TagAction TagPattern="(0020,000E)" Action="U" />
<TagAction TagPattern="(0008,0018)" Action="U" />
<TagAction TagPattern="(0008,0080)" Action="D" />
<TagAction TagPattern="(0008,0081)" Action="D" />
<TagAction TagPattern="(0008,1030)" Action="C" />
</ConfidentialityProfile>Passo 5: Carregar o perfil personalizado
Carregue o perfil personalizado usando o método apropriado para o seu formato de arquivo.
using Aspose.Medical.Dicom.Anonymization;
// Load from CSV
ConfidentialityProfile profileFromCsv = ConfidentialityProfile.LoadFromCsvFile(
"profile.csv",
ConfidentialityProfileOptions.All
);
// Or load from JSON
ConfidentialityProfile profileFromJson = ConfidentialityProfile.LoadFromJsonFile(
"profile.json",
ConfidentialityProfileOptions.All
);
// Or load from XML
ConfidentialityProfile profileFromXml = ConfidentialityProfile.LoadFromXmlFile(
"profile.xml",
ConfidentialityProfileOptions.All
);Passo 6: Aplique o perfil personalizado
Crie um Anonimizer com o perfil carregado e aplique-o aos arquivos DICOM.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Anonymization;
// Load custom profile
ConfidentialityProfile profile = ConfidentialityProfile.LoadFromCsvFile(
"profile.csv",
ConfidentialityProfileOptions.All
);
// Create anonymizer with custom profile
Anonymizer anonymizer = new(profile);
// Load and anonymize DICOM file
DicomFile dcm = DicomFile.Open("patient_study.dcm");
DicomFile anonymizedDcm = anonymizer.Anonymize(dcm);
anonymizedDcm.Save("anonymized_study.dcm");Exemplo de código completo com perfil CSV
Aqui está um exemplo completo usando um perfil personalizado baseado em CSV:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Anonymization;
// Load custom confidentiality profile from CSV
ConfidentialityProfile profile = ConfidentialityProfile.LoadFromCsvFile(
"hospital_privacy_profile.csv",
ConfidentialityProfileOptions.All
);
// Create anonymizer with the custom profile
Anonymizer anonymizer = new(profile);
// Load DICOM file
DicomFile dcm = DicomFile.Open("patient_scan.dcm");
// Anonymize using custom profile
DicomFile anonymizedDcm = anonymizer.Anonymize(dcm);
// Save result
anonymizedDcm.Save("anonymized_scan.dcm");
Console.WriteLine("Anonymization completed with custom profile!");Exemplos de cenário prático
Scenário 1: Retain Institution ID para rastreamento interno
TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0008,0080);K
(0008,0081);KScenário 2: substituir todos os UIDs enquanto preservam relações
TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);KCenário 3: Privacidade máxima para partilha externa
TagPattern;Action
(0010,0010);X
(0010,0020);X
(0010,0030);X
(0010,0040);X
(0008,0080);X
(0008,0081);X
(0008,1030);X
(0008,103E);XValidação: Testando seu perfil personalizado
Verifique sempre os perfis personalizados antes do uso da produção:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Anonymization;
// Load custom profile
ConfidentialityProfile profile = ConfidentialityProfile.LoadFromCsvFile(
"test_profile.csv",
ConfidentialityProfileOptions.All
);
Anonymizer anonymizer = new(profile);
// Test with sample files
string[] testFiles = Directory.GetFiles("test_samples", "*.dcm");
foreach (string filePath in testFiles)
{
try
{
DicomFile dcm = DicomFile.Open(filePath);
DicomFile anonymized = anonymizer.Anonymize(dcm);
string outputPath = Path.Combine("test_output", Path.GetFileName(filePath));
anonymized.Save(outputPath);
Console.WriteLine($"✓ Processed: {Path.GetFileName(filePath)}");
}
catch (Exception ex)
{
Console.WriteLine($"✗ Failed: {Path.GetFileName(filePath)} - {ex.Message}");
}
}
Console.WriteLine("\nValidation complete. Review output files in DICOM viewer.");Troubleshooting
Caminho de arquivo inválido
Se o arquivo de perfil não for encontrado:
string profilePath = "profile.csv";
if (!File.Exists(profilePath))
{
Console.WriteLine($"Profile file not found: {profilePath}");
return;
}Invalid Tag Pattern ou Ação
Assegurar que os padrões de tag seguem o formato (GGGG,EEEE) onde o GGGG é o grupo e o EEEE é a parte em hexadecimal. ações válidas são: D, Z, X, K, C, U.
Melhores práticas para perfis personalizados
- Controlar a versão: armazenar arquivos de perfil no controle da versão para rastrear mudanças ao longo do tempo.
- Documentação: Adicione comentários que explicam por que ações específicas foram selecionadas para cada tag.
- Testing: Valida os perfis com dados de teste antes de aplicar para a produção de arquivos DICOM.
- Backup: Mantenha sempre backups dos arquivos de perfil originais.
- Review: Revisão periódica dos perfis para garantir que ainda satisfaçam os requisitos regulamentares.
Informações adicionais
- Considere a criação de múltiplos perfis para diferentes casos de uso (compartilhamento interno, pesquisa externa, etc.).
- Documentos cujo perfil foi usado para anonimizar arquivos para fins de auditoria.
- Os formatos JSON e XML oferecem uma melhor estrutura para perfis complexos com definições nestas.
Conclusão
Este tutorial demonstrou como criar perfis de anonimato personalizados DICOM usando arquivos CSV, JSON, ou XML em C# com Aspose.Medical.Profiles personalizadas fornecem a flexibilidade para implementar políticas de privacidade específicas da instituição ao mesmo tempo que mantêm o cumprimento com as regras de saúde.