Ensure Assigning Authority for Patient Identifier - dcm4che/dcm4chee-arc-light GitHub Wiki

Overview

Patient records in DCM4CHEE 5 are identified by a unique primary patient identifier. For cases wherein modalities store DICOM objects to the archive without any assigning authority i.e. Issuer of Patient ID (0010,0021) and / or Issuer of Patient ID Qualifiers Sequence (0010,0024) DICOM attributes in it, archive supplements the issuer by default, using the default configured coercion explained below. It uses a prefix DCM4CHEE and appends hash values of Patient Name and Patient Birth Date.

The Issuer of Patient ID / Issuer of Patient ID Qualifiers Sequence coerced in the dataset are only present in the database. It is not coerced in the DICOM files stored on the storage system.

Refer

This howto provides configuration, test and verification steps for :

to coerce issuer to a patient identifier configured by default on DCM4CHEE application entity.

Additionally, refer

Default configured Coercion

Configuration

Using archive UI

Using Apache LDAP Directory Studio / ldif scripts

Create an LDIF file for following coercion

version: 1

dn: cn=SupplementIssuerOfPatientID,dicomAETitle=DCM4CHEE,dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
changetype: add
dcmMergeAttribute: IssuerOfPatientID=DCM4CHEE.{PatientName,hash}.{PatientBirthDate,hash}
dcmDIMSE: C_STORE_RQ
dicomTransferRole: SCU
dcmProperty: IssuerOfPatientID!=.+
dcmProperty: SendingApplicationEntityTitle=ENSURE_ISS_PID
objectClass: dcmArchiveAttributeCoercion2
dcmURI: merge-attrs:
cn: SupplementIssuerOfPatientID

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 ENSURE_ISS_PID -s PatientBirthDate=19651212 -s PatientID=P123 -s "IssuerOfPatientID=" -c DCM4CHEE@localhost:11112 ~/work/testdata/DICOM/modality/US/US2

Verification

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

13:56:21,965 INFO  [org.dcm4che3.net.Connection] (EE-ManagedExecutorService-default-Thread-1) Accept connection Socket[addr=/127.0.0.1,port=45615,localport=11112]
13:56:22,030 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-6) DCM4CHEE<-ENSURE_ISS_PID(2) >> A-ASSOCIATE-RQ
13:56:22,031 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-6) DCM4CHEE<-ENSURE_ISS_PID(2) << A-ASSOCIATE-AC
13:56:22,097 INFO  [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-6) DCM4CHEE<-ENSURE_ISS_PID(2) >> 1:C-STORE-RQ[pcid=5, prior=0
  cuid=1.2.840.10008.5.1.4.1.1.6.1 - Ultrasound Image Storage
  iuid=1.2.840.113543.6.6.4.1.61040196993270176841010767760672527419686 - ?
  tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
13:56:22,131 INFO  [org.dcm4chee.arc.coerce.impl.MergeAttributesCoercionProcessor] (EE-ManagedExecutorService-default-Thread-6) Merge Attributes using ArchiveAttributeCoercion2[cn=SupplementIssuerOfPatientID, priority=0, DIMSE=C_STORE_RQ, role=SCU, cuids=[], conditions={IssuerOfPatientID!=.+, SendingApplicationEntityTitle=ENSURE_ISS_PID}, uri=merge-attrs:, description=null, onFailure=RETHROW, sufficient=false, attributeUpdatePolicy=MERGE, mergeAttributes=[IssuerOfPatientID=DCM4CHEE.{PatientName,hash}.{PatientBirthDate,hash}], deviceCoercionParam=null, otherCoercionParams={}]
13:56:22,194 INFO  [org.dcm4chee.arc.patient.impl.PatientServiceEJB] (EE-ManagedExecutorService-default-Thread-6) DCM4CHEE<-ENSURE_ISS_PID(2): Create Patient[pk=180, id=PatientID[pk=179, id=P123, issuer=DCM4CHEE.7EF143F2.null], name=HD11^SAMPLE IMAGES]
13:56:22,201 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-6) DCM4CHEE<-ENSURE_ISS_PID(2): Create Study[pk=142, uid=1.2.840.113543.6.6.4.1.623691791684870846611353555872217279695, id=20]
13:56:22,206 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-6) DCM4CHEE<-ENSURE_ISS_PID(2): Create Series[pk=171, uid=1.2.840.113543.6.6.4.1.323691791684870846611353555872217279695, no=1, mod=US]
13:56:22,213 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-6) DCM4CHEE<-ENSURE_ISS_PID(2): Create Instance[pk=357, uid=1.2.840.113543.6.6.4.1.61040196993270176841010767760672527419686, class=1.2.840.10008.5.1.4.1.1.6.1, no=4]
13:56:22,216 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-6) DCM4CHEE<-ENSURE_ISS_PID(2): Create Location[pk=610, systemID=fs1, path=2023/04/22/F18C0EF9/96892936/59A7CC83, tsuid=1.2.840.10008.1.2, size=1441928, status=OK, objectType=DICOM_FILE]
13:56:22,276 INFO  [org.dcm4chee.arc.store.impl.StoreServiceImpl] (EE-ManagedExecutorService-default-Thread-6) DCM4CHEE<-ENSURE_ISS_PID(2): Updated DB in 144 ms
13:56:22,285 INFO  [org.dcm4chee.arc.patient.impl.PatientServiceEJB] (EE-ManagedExecutorService-default-Thread-6) No duplicate record with equal Patient ID found Patient[pk=180, id=PatientID[pk=179, id=P123, issuer=DCM4CHEE.7EF143F2.null], name=HD11^SAMPLE IMAGES]
13:56:22,291 INFO  [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-6) DCM4CHEE<-ENSURE_ISS_PID(2) << 1:C-STORE-RSP[pcid=5, status=0H
  cuid=1.2.840.10008.5.1.4.1.1.6.1 - Ultrasound Image Storage
  iuid=1.2.840.113543.6.6.4.1.61040196993270176841010767760672527419686 - ?
  tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
13:56:22,296 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-6) DCM4CHEE<-ENSURE_ISS_PID(2) >> A-RELEASE-RQ
13:56:22,297 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-6) DCM4CHEE<-ENSURE_ISS_PID(2) << A-RELEASE-RP
13:56:22,348 INFO  [org.dcm4che3.net.Association] (EE-ManagedScheduledExecutorService-default-Thread-3) DCM4CHEE<-ENSURE_ISS_PID(2): close Socket[addr=view-localhost/127.0.0.1,port=45615,localport=11112]

In archive UI

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