Anonymize Data on Store - dcm4che/dcm4chee-arc-light GitHub Wiki

Overview

Depending on your application requirements, anonymize DICOM dataset attribute values based on Supported De-identification Profiles when DICOM objects are stored to the archive from external systems.

The anonymized values of attributes in DICOM dataset is only present in the database. It is not coerced in the DICOM files stored on the storage system.

This howto will provide configuration, test and verification steps for :

Additionally, refer

Coercion using New Archive Attribute Coercion

Configuration

Using archive UI

Using Apache LDAP Directory Studio / ldif scripts

Create an LDIF file for following coercion

version: 1

dn: cn=coerce-c-store-rq - allModalities2vna - anonymize - new,dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
changetype: add
objectClass: dcmArchiveAttributeCoercion2
cn: coerce-c-store-rq - allModalities2vna - anonymize - new
dcmDIMSE: C_STORE_RQ
dcmURI: deidentify:RetainDeviceIdentityOption,RetainUIDsOption
dicomTransferRole: SCU
dcmProperty: SendingApplicationEntityTitle=DEIDENT_NEW
dcmRulePriority: 1

and import it into LDAP using ldapmodify command line utility

ldapmodify -xW -Dcn=admin,dc=dcm4che,dc=org -f config.ldif

Test

Send test study to archive using storescu tool.

storescu -b DEIDENT_NEW -c DCM4CHEE@localhost:11112 ~/work/testdata/DICOM/modality/CT/CT2

Verification

In archive server log at $WILDFLY_HOME/standalone/log/server.log

15:08:13,611 INFO  [org.dcm4che3.net.Connection] (EE-ManagedExecutorService-default-Thread-1) Accept connection Socket[addr=/127.0.0.1,port=33505,localport=11112]
15:08:13,645 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2) >> A-ASSOCIATE-RQ
15:08:13,646 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2) << A-ASSOCIATE-AC
15:08:13,694 INFO  [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2) >> 1:C-STORE-RQ[pcid=5, prior=0
  cuid=1.2.840.10008.5.1.4.1.1.2 - CT Image Storage
  iuid=1.3.12.2.1107.5.8.1.12345678.199508041416590861483 - ?
  tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
15:08:13,757 INFO  [org.dcm4chee.arc.coerce.impl.DeIdentificationCoercionProcessor] (EE-ManagedExecutorService-default-Thread-16) Deidentified attributes by coercion ArchiveAttributeCoercion2[cn=coerce-c-store-rq - allModalities2vna - anonymize - new, priority=1, DIMSE=C_STORE_RQ, role=SCU, cuids=[], conditions={SendingApplicationEntityTitle=DEIDENT_NEW}, uri=deidentify:RetainDeviceIdentityOption,RetainUIDsOption, description=null, onFailure=RETHROW, sufficient=false, attributeUpdatePolicy=MERGE, mergeAttributes=[], deviceCoercionParam=null, otherCoercionParams={}]
15:08:13,821 INFO  [org.dcm4chee.arc.patient.impl.PatientServiceEJB] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2): No Patient ID in received object
15:08:13,826 INFO  [org.dcm4chee.arc.patient.impl.PatientServiceEJB] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2): Create Patient[pk=183, id=PatientID[pk=182, id=P-00000001, issuer=TESTISS], name=null]
15:08:13,829 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2): Create Study[pk=145, uid=1.3.12.2.1107.5.8.1.12345678.199508041416590859569, id=*]
15:08:13,833 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2): Create Series[pk=174, uid=1.3.12.2.1107.5.8.1.12345678.199508041416590860429, no=0, mod=CT]
15:08:13,837 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2): Create Instance[pk=360, uid=1.3.12.2.1107.5.8.1.12345678.199508041416590861483, class=1.2.840.10008.5.1.4.1.1.2, no=1]
15:08:13,838 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2): Create Location[pk=613, systemID=fs1, path=2023/04/22/5E9204E8/5E9C00D5/5E9C75E8, tsuid=1.2.840.10008.1.2, size=529512, status=OK, objectType=DICOM_FILE]
15:08:13,877 INFO  [org.dcm4chee.arc.store.impl.StoreServiceImpl] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2): Updated DB in 120 ms
15:08:13,884 INFO  [org.dcm4chee.arc.patient.impl.PatientServiceEJB] (EE-ManagedExecutorService-default-Thread-16) No duplicate record with equal Patient ID found Patient[pk=183, id=PatientID[pk=182, id=P-00000001, issuer=TESTISS], name=null]
15:08:13,888 INFO  [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2) << 1:C-STORE-RSP[pcid=5, status=0H
  cuid=1.2.840.10008.5.1.4.1.1.2 - CT Image Storage
  iuid=1.3.12.2.1107.5.8.1.12345678.199508041416590861483 - ?
  tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
15:08:13,891 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2) >> A-RELEASE-RQ
15:08:13,891 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-DEIDENT_NEW(2) << A-RELEASE-RP
15:08:13,942 INFO  [org.dcm4che3.net.Association] (EE-ManagedScheduledExecutorService-default-Thread-5) DCM4CHEE<-DEIDENT_NEW(2): close Socket[addr=view-localhost/127.0.0.1,port=33505,localport=11112]

In archive UI

⚠️ **GitHub.com Fallback** ⚠️