Ensure Patient Identifier
Content
- Overview
- Coercion using New Archive Attribute Coercion
- Coercion using Legacy Archive Attribute Coercion
Patient records in DCM4CHEE 5 are identified by a primary patient identifier. For cases wherein modalities store DICOM
objects to the archive without any Patient ID (0010,0020)
DICOM attributes in it, users can configure following coercion
to coerce missing Patient ID using Patient Name (0010,0010)
and hash value of Study Instance UID (0020,000D)
.
If no coercion is configured, patients with missing Patient ID (0010,0020)
are assigned values generated by Patient ID
ID Generator as archive's default Accept Missing Patient ID
is set to CREATE
The Patient ID coerced in the dataset is only present in the database. It is not coerced in the DICOM files stored on the storage system.
Refer
- Archive Coercions Basic Overview for general understanding on archive attribute coercions.
- Merge or Nullify Dataset Attributes for understanding this coercion type.
This howto will provide configuration, test and verification steps for :
although the former is recommended. See Important Notes.
Additionally, refer Where to configure Archive Attribute Coercion rules
Create an LDIF file for following coercion and Import Configuration changes in LDAP
version: 1
dn: cn=coerce-c-store-rq - allModalities2vna - ensurePatientID - new,dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
changetype: add
objectClass: dcmArchiveAttributeCoercion2
cn: coerce-c-store-rq - allModalities2vna - ensurePatientID - new
dcmDIMSE: C_STORE_RQ
dcmURI: merge-attrs:
dicomTransferRole: SCU
dcmProperty: SendingApplicationEntityTitle=ENSURE_PID_NEW
dcmProperty: PatientID!=.+
dcmRulePriority: 1
dcmMergeAttribute: PatientID={PatientName}-{StudyInstanceUID,hash}
Send test study to archive using storescu tool.
storescu -b ENSURE_PID_NEW -s "PatientID=" -c DCM4CHEE@localhost:11112 ~/work/testdata/DICOM/modality/US/US2
In archive server log at $WILDFLY_HOME/standalone/log/server.log
17:38:49,614 INFO [org.dcm4che3.net.Connection] (EE-ManagedExecutorService-default-Thread-1) Accept connection Socket[addr=/127.0.0.1,port=57559,localport=11112]
17:38:49,637 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-ENSURE_PID_NEW(1) >> A-ASSOCIATE-RQ
17:38:49,651 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-ENSURE_PID_NEW(1) << A-ASSOCIATE-AC
17:38:49,690 INFO [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-ENSURE_PID_NEW(1) >> 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]
17:38:49,847 INFO [org.dcm4chee.arc.coerce.impl.MergeAttributesCoercionProcessor] (EE-ManagedExecutorService-default-Thread-5) Merge Attributes using ArchiveAttributeCoercion2[cn=coerce-c-store-rq - allModalities2vna - ensurePatientID - new, priority=1, DIMSE=C_STORE_RQ, role=SCU, cuids=[], conditions={PatientID!=.+, SendingApplicationEntityTitle=ENSURE_PID_NEW}, uri=merge-attrs:, description=null, onFailure=RETHROW, sufficient=false, attributeUpdatePolicy=MERGE, mergeAttributes=[PatientID={PatientName}-{StudyInstanceUID,hash}], deviceCoercionParam=null, otherCoercionParams={}]
17:38:49,962 INFO [org.dcm4chee.arc.patient.impl.PatientServiceEJB] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-ENSURE_PID_NEW(1): Create Patient[pk=177, id=PatientID[pk=176, id=HD11^SAMPLE IMAGES^^^-F18C0EF9, issuer=null], name=HD11^SAMPLE IMAGES]
17:38:49,970 INFO [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-ENSURE_PID_NEW(1): Create Study[pk=139, uid=1.2.840.113543.6.6.4.1.623691791684870846611353555872217279695, id=20]
17:38:49,977 INFO [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-ENSURE_PID_NEW(1): Create Series[pk=168, uid=1.2.840.113543.6.6.4.1.323691791684870846611353555872217279695, no=1, mod=US]
17:38:49,982 INFO [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-ENSURE_PID_NEW(1): Create Instance[pk=350, uid=1.2.840.113543.6.6.4.1.61040196993270176841010767760672527419686, class=1.2.840.10008.5.1.4.1.1.6.1, no=4]
17:38:49,988 INFO [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-ENSURE_PID_NEW(1): Create Location[pk=603, systemID=fs1, path=2023/04/21/F18C0EF9/96892936/79C7289C, tsuid=1.2.840.10008.1.2, size=1441916, status=OK, objectType=DICOM_FILE]
17:38:50,058 INFO [org.dcm4chee.arc.store.impl.StoreServiceImpl] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-ENSURE_PID_NEW(1): Updated DB in 211 ms
17:38:50,069 INFO [org.dcm4chee.arc.patient.impl.PatientServiceEJB] (EE-ManagedExecutorService-default-Thread-5) No duplicate record with equal Patient ID found Patient[pk=177, id=PatientID[pk=176, id=HD11^SAMPLE IMAGES^^^-F18C0EF9, issuer=null], name=HD11^SAMPLE IMAGES]
17:38:50,077 INFO [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-ENSURE_PID_NEW(1) << 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]
17:38:50,080 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-ENSURE_PID_NEW(1) >> A-RELEASE-RQ
17:38:50,081 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-5) DCM4CHEE<-ENSURE_PID_NEW(1) << A-RELEASE-RP
17:38:50,132 INFO [org.dcm4che3.net.Association] (EE-ManagedScheduledExecutorService-default-Thread-3) DCM4CHEE<-ENSURE_PID_NEW(1): close Socket[addr=view-localhost/127.0.0.1,port=57559,localport=11112]
In archive UI
Create an LDIF file for following coercion and Import Configuration changes in LDAP
version: 1
dn: cn=coerce-c-store-rq - allModalities2vna - ensurePatientID - legacy,dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
changetype: add
objectClass: dcmArchiveAttributeCoercion
cn: coerce-c-store-rq - allModalities2vna - ensurePatientID - legacy
dcmDIMSE: C_STORE_RQ
dicomTransferRole: SCU
dcmProperty: SendingApplicationEntityTitle=ENSURE_PID_LGCY
dcmProperty: PatientID!=.+
dcmRulePriority: 1
dcmMergeAttribute: PatientID={PatientName}-{StudyInstanceUID,hash}
Send test study to archive using storescu tool.
storescu -b ENSURE_PID_LGCY -s "PatientID=" -c DCM4CHEE@localhost:11112 ~/work/testdata/DICOM/modality/CT/CT2
In archive server log at $WILDFLY_HOME/standalone/log/server.log
17:39:51,943 INFO [org.dcm4che3.net.Connection] (EE-ManagedExecutorService-default-Thread-1) Accept connection Socket[addr=/127.0.0.1,port=51577,localport=11112]
17:39:51,961 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-10) DCM4CHEE<-ENSURE_PID_LGCY(2) >> A-ASSOCIATE-RQ
17:39:51,962 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-10) DCM4CHEE<-ENSURE_PID_LGCY(2) << A-ASSOCIATE-AC
17:39:51,988 INFO [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-10) DCM4CHEE<-ENSURE_PID_LGCY(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]
17:39:52,001 INFO [org.dcm4chee.arc.conf.ArchiveAttributeCoercion] (EE-ManagedExecutorService-default-Thread-10) Merge attributes using coercion [cn=coerce-c-store-rq - allModalities2vna - ensurePatientID - legacy]
17:39:52,039 INFO [org.dcm4chee.arc.patient.impl.PatientServiceEJB] (EE-ManagedExecutorService-default-Thread-10) DCM4CHEE<-ENSURE_PID_LGCY(2): Create Patient[pk=178, id=PatientID[pk=177, id=COTTA^ANNA-5E9204E8, issuer=null], name=COTTA^ANNA]
17:39:52,042 INFO [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-10) DCM4CHEE<-ENSURE_PID_LGCY(2): Create Study[pk=140, uid=1.3.12.2.1107.5.8.1.12345678.199508041416590859569, id=000001]
17:39:52,045 INFO [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-10) DCM4CHEE<-ENSURE_PID_LGCY(2): Create Series[pk=169, uid=1.3.12.2.1107.5.8.1.12345678.199508041416590860429, no=0, mod=CT]
17:39:52,047 INFO [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-10) DCM4CHEE<-ENSURE_PID_LGCY(2): Create Instance[pk=351, uid=1.3.12.2.1107.5.8.1.12345678.199508041416590861483, class=1.2.840.10008.5.1.4.1.1.2, no=1]
17:39:52,048 INFO [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-10) DCM4CHEE<-ENSURE_PID_LGCY(2): Create Location[pk=604, systemID=fs1, path=2023/04/21/5E9204E8/5E9C00D5/5E9C75E8, tsuid=1.2.840.10008.1.2, size=529502, status=OK, objectType=DICOM_FILE]
17:39:52,074 INFO [org.dcm4chee.arc.store.impl.StoreServiceImpl] (EE-ManagedExecutorService-default-Thread-10) DCM4CHEE<-ENSURE_PID_LGCY(2): Updated DB in 72 ms
17:39:52,078 INFO [org.dcm4chee.arc.patient.impl.PatientServiceEJB] (EE-ManagedExecutorService-default-Thread-10) No duplicate record with equal Patient ID found Patient[pk=178, id=PatientID[pk=177, id=COTTA^ANNA-5E9204E8, issuer=null], name=COTTA^ANNA]
17:39:52,080 INFO [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-10) DCM4CHEE<-ENSURE_PID_LGCY(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]
17:39:52,083 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-10) DCM4CHEE<-ENSURE_PID_LGCY(2) >> A-RELEASE-RQ
17:39:52,083 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-10) DCM4CHEE<-ENSURE_PID_LGCY(2) << A-RELEASE-RP
17:39:52,134 INFO [org.dcm4che3.net.Association] (EE-ManagedScheduledExecutorService-default-Thread-7) DCM4CHEE<-ENSURE_PID_LGCY(2): close Socket[addr=view-localhost/127.0.0.1,port=51577,localport=11112]
In archive UI
DCM4CHEE 5 Documentation