사전 설정된 DICOM PS3.15 개인 정보 보호 프로파일은 많은 사용 사례를 다루고 있지만, 의료 기관은 종종 독특한 개인정보 보호 요구 사항을 가지고 있습니다.이 가이드에서는 조직의 특정 정책과 일치하는 사용자 지정된 디코마 익명화 프로필을 ** 설계하는 방법을 배울 것입니다.
테이블 콘텐츠
왜 사용자 지정 프로필이 필요합니까
사전 설정된 개인 정보 보호 프로파일은 견고한 기초를 제공하지만 모든 기관 요구 사항을 충족시키지 못할 수 있습니다. 조직이 내부 추적 가능성을 위해 특정 제도 식별자를 유지하고 환자 데이터를 아직도 익명화 할 필요가있을 때 사용자 지정된 프로필이 필요할 수도 있음. 일부 연구 협력은 직접 식단을 제거하는 동안 보존 된 일종의 인구 통계를 필요로 할지도 모릅니다.
사용자 지정 프로파일은 DICOM 태그가 어떤 방식으로 변경되고 있는지 정확한 통제를 제공하며, 특정 데이터 관리 정책을 준수할 수 있습니다.
이해 태그 패턴 및 행동 {# 이해-tag-patterns-and-actions}
DICOM 태그는 형식 (GGGG,EEEE)의 그룹 및 요소 번호로 식별됩니다.예를 들어, 환자 이름은 (0010,0010)이며 환자의 ID는 ( 0010.0020).
사용 가능한 행동에는 데이터 세트에서 표지판을 완전히 제거하는 D (Delete), 빈 또는 제로 길이 값으로 가치를 대체 하는 **Z (Zero)****, *X (Remove)***가 Delete와 유사한 표시를 삭제하는 경우, **K (Keep)*가 원본 숫자를 변하지 않게 유지하는 *C (Clean) **가 컨텍스트적으로 식별 정보를 삭제함으로써 가치를 청소하고 **U (UID로 교체하는)는 새롭게 생성된 독특한 ID로 대신합니다.
올바른 행동을 선택하는 것은 사용 사례에 따라 달라집니다. 익명 출력에 나타나지 않아야 할 태그를 위해 D 또는 X를 사용합니다. 태그가 존재해야하지만 텅 비어 있어야하는 경우 Z를 사용할 수 있습니다. 정확하게 저장하고자하는 태그에 대해 K를 이용하십시오. 삽입 된 식별자를 포함할 수있는 텍스트 필드를 위해 C를 활용하세요. 유일성을 유지하는 동안 교체해야하는 UID를위한 U를 적용하려면.
사용자 지정 프로필 만들기
사용자 지정 프로필은 세 가지 형식으로 정의할 수 있습니다.당신의 작업 흐름에 가장 적합한 하나를 선택합니다.
CSV 형식
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
(0008,103E);C
(0010,1010);K
(0010,1030);K
이 프로필은 환자의 이름과 ID를 제거하고 출생 날짜를 삭제하고, 환자 성별과 인구 통계를 유지하며, 모든 UID를 대체하고 기관 정보를 삭제하며 설명을 청소합니다.
JSON 형식
JSON은 복잡한 메타 데이터 프로필을 위한 더 나은 구조를 제공합니다.
{
"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" }
]
}
XML 형식
XML은 기존 XML 도구를 가진 환경에서 선호됩니다 :
<?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>
코드에서 사용자 지정 프로필을 업로드
.NET 애플리케이션에서 사용자 지정 프로필을 다운로드하는 것은 간단합니다 :
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!");
현실 세계 시나리오 예제(#real-world-scenario-examples)
시나리오 1 : 내부 품질 보증
환자 데이터를 익명화하는 동안 내부 추적을 위한 기관 및 장치 정보를 유지하십시오.
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
시나리오 2 : 외부 연구 협력
인구 조사에 대한 보존 된 인류 기록을 가진 최대 익명화 :
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
시나리오 3 : 멀티 사이트 연구 조정
데이터 연결을위한 연구 관계를 유지하는 동안 UID를 교체하십시오 :
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
통증 및 테스트
항상 생산 배치 전에 사용자 지정 프로파일을 확인하십시오 :
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}");
검증이 실행되면 DICOM 시청기에서 익명화된 파일을 열고 예상 태그가 올바르게 수정되고, 저장된 태그를 보존하고, UID가 적절하게 교체되며, 민감한 데이터가 청소된 필드에 남아 있지 않음을 확인합니다.
결론을 내리며
사용자 지정 개인 정보 보호 프로파일은 귀하의 기관의 개인정보 보호 정책과 정확하게 일치하는 DICOM 익명화를 구현할 수 있는 유연성을 제공합니다.내부 사용을 위한 특정 식별자를 유지하고, 연구를 위한 인구 통계를 유지하거나, 외부 공유를 위해 최대한의 익명을 적용해야 하는지 여부에 대해서는, 사용자가 사용하는 프로필은 이를 가능하게 합니다.
핵심 권장 사항은 검토 목적으로 프로필 선택을 문서화하고, 변화를 추적하기 위해 버전 컨트롤 프로파일을 제어하며, 생산 사용을 앞두고 프리필을 철저히 테스트하고 요구 사항이 진화함에 따라 정기적으로 분석하는 것입니다.
DICOM 익명화 및 Aspose.Medical API에 대한 자세한 내용은 다음을 참조하십시오. 문서화일반 프로필 시나리오에 대한 템플릿은 예제 섹션에서 사용할 수 있습니다.