Cara membuat profil anonim DICOM yang disesuaikan dari CSV, JSON atau XML

Cara membuat profil anonim DICOM yang disesuaikan dari CSV, JSON atau XML

Tutorial ini menunjukkan cara membuat profil anonimitas DICOM yang disesuaikan menggunakan file CSV, JSON, atau XML dalam C#.Profil yang tersuai memungkinkan Anda untuk menentukan dengan tepat tag apa yang harus dihapus, digantikan atau disimpan sesuai dengan kebijakan privasi spesifik institusi Anda.

Mengapa membuat profil yang disesuaikan?

Profil DICOM PS3.15 tidak dapat memenuhi semua persyaratan institusi. profil tersuai memungkinkan Anda:

  • Mengekalkan identifikasi institusi khusus untuk traceability internal
  • Mengaplikasikan peraturan privasi khusus organisasi
  • Memenuhi persyaratan regulasi yang unik di yurisdiksi Anda

Tag Aksi yang dijelaskan

Tindakan berikut dapat diterapkan pada tag DICOM:

Aksikodedeskripsi
menghapusDMenghapus tag sepenuhnya dari data set
0 0 0ZMengganti nilai dengan nilai kosong atau nol
MenghapusXMenghapus jika ada (sama dengan menghapus)
KeepKSimpan nilai asli yang tidak berubah
CleanCMembersihkan nilai dengan menghapus informasi identifikasi
Mengganti dengan UIDUMengganti dengan UID yang baru diproduksi

Persyaratan: Persiapan Lingkungan

  • Menginstal Visual Studio atau IDE .NET yang kompatibel.
  • Mencipta aplikasi .NET 8 baru.
  • Instal Aspose.Medical dari NuGet Package Manager.
  • Siapkan file definisi profil yang disesuaikan.

Panduan langkah demi langkah untuk membuat profil yang disesuaikan

Langkah 1: Instalasi Aspose.Medical

Tambahkan perpustakaan Aspose.Medical ke proyek Anda menggunakan NuGet.

Install-Package Aspose.Medical

Langkah 2: Mencipta Definisi Profil CSV

Mencipta file CSV dengan pola tag dan tindakan.Setiap baris mendefinisikan label dan aksi.

  • Profil dan CV : *
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=“Kopi kode”

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

Profil ini :

  • Nama dan ID pasien Zeros
  • Menghapus tanggal lahir
  • Perbedaan Seks Pacient
  • Menggantikan Study, Series, dan SOP Instance UID
  • Menghapus informasi institusi
  • Pembersihan studi deskripsi

Langkah 3: Membuat Definisi Profil JSON (Alternatif)

Buat file JSON dengan definisi tag yang sama.

  • Profil dan 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" }
]

Langkah 4: Membuat Definisi Profil XML (Alternatif)

Buat file XML dengan definisi tag yang sama.

  • Profil 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>

Langkah 5: Mengisi Profil Custom

Download profil yang disesuaikan menggunakan metode yang sesuai untuk format file Anda.

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

Langkah 6: Gunakan profil yang disesuaikan

Mencipta Anonymizer dengan profil yang dimuat dan menerapkannya ke file 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");

Contoh kode lengkap dengan profil CSV

Berikut adalah contoh lengkap menggunakan profil tersuai berdasarkan 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!");

Contoh skenario praktis

Skenario 1: Retain Institution ID untuk Tracking Internal

TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0008,0080);K
(0008,0081);K

Skenario 2: Mengganti semua UID saat mempertahankan hubungan

TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);K

Skenario 3: Privasi maksimum untuk berbagi eksternal

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);X

Validasi: Menguji Profil Custom Anda

Selalu validasi profil yang disesuaikan sebelum penggunaan produksi:

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

Penyalahgunaan File Path

Jika file profil tidak dapat ditemukan:

string profilePath = "profile.csv";
if (!File.Exists(profilePath))
{
    Console.WriteLine($"Profile file not found: {profilePath}");
    return;
}

Invalid tag pattern atau tindakan

Memastikan pola tag mengikuti format (GGGG,EEEE) di mana GGGG adalah kelompok dan EEEE adalah elemen dalam hexadecimal. tindakan yang sah adalah: D, Z, X, K, C, U.

Praktik terbaik untuk profil tersuai

  • Kontrol versi: Simpan file profil dalam kontrol versi untuk memantau perubahan dari waktu ke waktu.
  • Dokumentasi: Tambahkan komentar yang menjelaskan mengapa tindakan spesifik dipilih untuk setiap tag.
  • Testing: Validasi profil dengan data tes sebelum memohon untuk menghasilkan file DICOM.
  • Backup: Selalu menyimpan backup dari file profil asli.
  • Review: Periodis revisi profil untuk memastikan mereka masih memenuhi persyaratan regulasi.

Informasi Tambahan

  • Pertimbangkan untuk membuat profil berbilang untuk kasus penggunaan yang berbeda (perkongsian internal, penelitian eksternal, dll).
  • Dokumen profil yang digunakan ketika anonimkan file untuk tujuan audit.
  • Format JSON dan XML menawarkan struktur yang lebih baik untuk profil yang kompleks dengan definisi yang tertutup.

Kesimpulan

Tutorial ini telah menunjukkan bagaimana untuk membuat profil anonimitas DICOM yang disesuaikan menggunakan CSV, JSON, atau XML file dalam C# dengan Aspose.Medical.

 Indonesia