Trong khi các hồ sơ bảo mật DICOM PS3.15 được xác định trước bao gồm nhiều trường hợp sử dụng, các tổ chức chăm sóc sức khỏe thường có yêu cầu riêng tư độc đáo. Trong hướng dẫn này, bạn sẽ tìm hiểu làm thế nào để thiết kế các profiles anonimization tùy chỉnh DIKOM phù hợp với các chính sách cụ thể của doanh nghiệp của bạn. Chúng tôi sẽ bao phủ các mô hình tag, hành động, và cung cấp các mẫu trong CSV, JSON và định dạng XML.
Bảng nội dung
- Tại sao cần các hồ sơ tùy chỉnh
- Hiểu các mô hình Tag và hành động
- Tạo hồ sơ tùy chỉnh
- tải hồ sơ tùy chỉnh trong mã
- Ví dụ về kịch bản thế giới thực
- Kiểm tra và kiểm tra
- Kết luận
Tại sao hồ sơ tùy chỉnh cần
Các hồ sơ bảo mật được xác định trước cung cấp một nền tảng vững chắc, nhưng chúng không thể đáp ứng tất cả các yêu cầu tổ chức. Bạn có thể cần các Hồ sơ tùy chỉnh khi cơ quan của bạn đòi hỏi việc lưu trữ các mã nhận dạng cơ sở cụ thể cho khả năng theo dõi nội bộ trong khi vẫn giữ danh tính dữ liệu của bệnh nhân. Một số cộng tác nghiên cứu có lẽ cần một số dân số được duy trì trong lúc xóa các ID trực tiếp. Các dòng công việc bảo đảm chất lượng bên trong cũng có nghĩa là cần thông tin thiết bị mà các tập tin tiêu chuẩn sẽ loại bỏ.
Các hồ sơ tùy chỉnh cung cấp cho bạn sự kiểm soát chính xác về các thẻ DICOM được sửa đổi và làm thế nào, cho phép tuân thủ các chính sách quản lý dữ liệu cụ thể của bạn.
Hiểu Mẫu Tag và Hành động {# hiểu-mẫu tag-and-actions}
Các thẻ DICOM được xác định bằng số nhóm và các yếu tố trong định dạng (GGGG,EEEE). Ví dụ, Tên bệnh nhân là (0010,0010) và ID của người bệnh là (010.0020). Hồ sơ tùy chỉnh chỉ định các mô hình phù hợp với các thẻ này và hành động để áp dụng.
Các hành động có sẵn bao gồm D (Delete) mà loại bỏ nhãn hoàn toàn khỏi bộ dữ liệu, Z (Zero)** mà thay thế giá trị bằng một số lượng trống hoặc không chiều dài; X (Remove)* mà xóa thẻ nếu hiện diện tương tự như Delete; K (Keep) mà giữ lại số tiền ban đầu không thay đổi, C (Clean), mà làm sạch giá cả bằng cách loại trừ thông tin nhận dạng theo ngữ cảnh, và **U (Chọn thay với UID)*.
Chọn hành động đúng đắn phụ thuộc vào trường hợp sử dụng của bạn. Sử dụng D hoặc X cho các thẻ mà không bao giờ xuất hiện trong một kết quả ẩn danh. Thử dụng Z khi thẻ phải tồn tại nhưng nên trống rỗng. dùng K cho thẻ bạn muốn lưu trữ chính xác.
Tạo hồ sơ tùy chỉnh
Các hồ sơ tùy chỉnh có thể được xác định trong ba định dạng. chọn một phù hợp tốt nhất với dòng công việc của bạn.
định dạng CSV
CSV là định dạng đơn giản nhất, lý tưởng cho các hồ sơ trực tiếp:
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
Hồ sơ này xóa tên và ID của bệnh nhân, loại bỏ ngày sinh, giữ gìn giới tính và số lượng người bệnh, thay thế tất cả UID, xoá thông tin tổ chức và làm sạch các mô tả.
định dạng JSON
JSON cung cấp cấu trúc tốt hơn cho các hồ sơ phức tạp với metadata:
{
"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" }
]
}
định dạng XML
XML được ưu tiên cho môi trường với công cụ XML hiện có:
<?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>
Loading Custom Profiles in Code
Tải về các hồ sơ tùy chỉnh trong ứng dụng .NET của bạn là đơn giản:
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!");
Ví dụ kịch bản thế giới thực
Chương 1: Bảo đảm chất lượng nội bộ
Lưu trữ thông tin tổ chức và thiết bị để theo dõi nội bộ trong khi vô danh dữ liệu bệnh nhân:
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
Kịch bản 2: Hợp tác nghiên cứu bên ngoài
Tối đa danh tính với số lượng dân số được giữ lại cho các nghiên cứu dân cư:
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
Kịch bản 3: Sự phối hợp nghiên cứu đa trang
Thay thế UID trong khi duy trì mối quan hệ nghiên cứu cho kết nối dữ liệu:
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
Chứng nhận và kiểm tra
Luôn xác nhận hồ sơ tùy chỉnh trước khi triển khai sản xuất:
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}");
Sau khi xác thực được thực hiện, hãy mở các tệp vô danh trong trình duyệt DICOM và xác minh rằng các thẻ dự kiến được sửa đổi đúng cách, thẻ được giữ lại được bảo quản, UID được thay thế một cách thích hợp, và không có dữ liệu nhạy cảm còn lại trong các trường được làm sạch.
Kết luận = kết luận
Các hồ sơ bảo mật tùy chỉnh cung cấp cho bạn sự linh hoạt để thực hiện danh tính của DICOM phù hợp chính xác với chính sách quyền riêng tư của tổ chức của bạn. Cho dù bạn cần phải giữ lại các ID cụ thể cho sử dụng nội bộ, lưu trữ số lượng dân số cho nghiên cứu, hoặc áp dụng mức tối đa cho việc chia sẻ bên ngoài, các Hồ sơ tùy chọn làm cho nó có thể.
Các khuyến nghị chính bao gồm tài liệu các lựa chọn hồ sơ của bạn cho mục đích kiểm toán, phiên bản kiểm soát các tập tin Hồ sơ để theo dõi những thay đổi, kiểm tra các profiles kỹ lưỡng trước khi sử dụng sản xuất, và xem xét các profile thường xuyên khi các yêu cầu phát triển.
Để biết thêm thông tin về danh tính của DICOM và API Aspose.Medical, hãy truy cập Tài liệuCác mẫu cho các kịch bản hồ sơ chung có sẵn trong phần ví dụ.
More in this category
- Chuẩn bị DICOM Datasets cho AI và Machine Learning với Aspose.Medical
- Tại sao DICOM Anonymization quan trọng đối với HIPAA và GDPR trong dòng công việc .NET
- Xây dựng một DICOM Anonymization Microservice trong ASP.NET Core
- Lưu DICOM Metadata trong SQL và NoSQL Databases với C#
- DICOM Anonymization cho Cloud PACS và Teleradiology trong C#