Supplement DICOM Object Attributes - dcm4che/dcm4chee-arc-light GitHub Wiki

Overview

DICOM objects stored from modalities to the archive may not contain certain DICOM attributes in it. Configure following coercion to supplement missing attributes information.

The attributes supplemented to the dataset are 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 :

See Important Notes.

Additionally, refer Where to configure Archive Attribute Coercion rules

Configuration

Supplement from Device

Device which will be used in coercion. DICOM attributes specific fields configured on this device will be supplemented in stored DICOM objects when the coercion gets applied.

In Configuration menu - Devices tab, add a device (eg. storescu) containing attributes to be supplemented which will be referenced by the archive device dcm4chee-arc

Using archive UI

Using Apache LDAP Directory Studio / ldif scripts

Create an LDIF file for following device

version: 1

dn: dicomDeviceName=storescu,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
changetype: add
dicomInstalled: TRUE
dicomIssuerOfPatientID: Site A&1.2.40.0.13.1.1.999.111.1111&ISO
dicomDeviceName: storescu
dicomIssuerOfAdmissionID: Site A&1.2.40.0.13.1.1.999.111.1111&ISO
dicomIssuerOfAccessionNumber: Site A&1.2.40.0.13.1.1.999.111.1111&ISO
dicomInstitutionName: Site A
dicomInstitutionCode: (111.1111, 99DCM4CHEE, "Site A")
objectClass: dicomDevice
objectClass: dcmDevice
dicomPrimaryDeviceType: CT

and import it into LDAP using ldapmodify command line utility

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

Coercion using New Archive Attribute Coercion

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 - all2vna - supplementMissingAttrsFromDev - new,dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
changetype: add
objectClass: dcmArchiveAttributeCoercion2
cn: coerce-c-store-rq - all2vna - supplementMissingAttrsFromDev - new
dcmDIMSE: C_STORE_RQ
dcmURI: sup-from-dev:
dicomTransferRole: SCU
dcmProperty: SendingApplicationEntityTitle=SUP_MISS_NEW
dcmRulePriority: 1
dcmSupplementFromDeviceReference: dicomDeviceName=storescu,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org

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 SUP_MISS_NEW -s PatientID=P123 -s "IssuerOfPatientID=" -s AccessionNumber=ACC123 -s AdmissionID=ADM123 -s "InstitutionName=" -c DCM4CHEE@localhost:11112 ~/work/testdata/DICOM/modality/CT/CT2

Verification

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

22:26:58,278 INFO  [org.dcm4che3.net.Connection] (EE-ManagedExecutorService-default-Thread-1) Accept connection Socket[addr=/127.0.0.1,port=59353,localport=11112]
22:26:58,302 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3) >> A-ASSOCIATE-RQ
22:26:58,303 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3) << A-ASSOCIATE-AC
22:26:58,329 INFO  [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3) >> 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]
22:26:58,337 INFO  [org.dcm4chee.arc.coerce.impl.SupplementFromDeviceCoercionProcessor] (EE-ManagedExecutorService-default-Thread-16) Supplement composite object from device: storescu using coercion ArchiveAttributeCoercion2[cn=coerce-c-store-rq - all2vna - supplementMissingAttrsFromDev - new, priority=1, DIMSE=C_STORE_RQ, role=SCU, cuids=[], conditions={SendingApplicationEntityTitle=SUP_MISS_NEW}, uri=sup-from-dev:, description=null, onFailure=RETHROW, sufficient=false, attributeUpdatePolicy=MERGE, mergeAttributes=[], deviceCoercionParam=storescu, otherCoercionParams={}]
22:26:58,366 INFO  [org.dcm4chee.arc.patient.impl.PatientServiceEJB] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3): Create Patient[pk=28, id=PatientID[pk=28, id=P123, issuer=Site A&1.2.40.0.13.1.1.999.111.1111&ISO], name=COTTA^ANNA]
22:26:58,369 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3): Create Study[pk=25, uid=1.3.12.2.1107.5.8.1.12345678.199508041416590859569, id=000001]
22:26:58,371 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3): Create Series[pk=25, uid=1.3.12.2.1107.5.8.1.12345678.199508041416590860429, no=0, mod=CT]
22:26:58,373 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3): Create Instance[pk=92, uid=1.3.12.2.1107.5.8.1.12345678.199508041416590861483, class=1.2.840.10008.5.1.4.1.1.2, no=1]
22:26:58,374 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3): Create Location[pk=183, systemID=fs1, path=2023/04/17/5E9204E8/5E9C00D5/61ED4E7E, tsuid=1.2.840.10008.1.2, size=529498, status=OK, objectType=DICOM_FILE]
22:26:58,374 INFO  [org.dcm4chee.arc.store.impl.StoreServiceEJB] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3): Create Location[pk=184, systemID=metadata, path=2023/04/17/5E9204E8/5E9C00D5/E8E833B4, tsuid=null, size=10396, status=OK, objectType=METADATA]
22:26:58,428 INFO  [org.dcm4chee.arc.store.impl.StoreServiceImpl] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3): Updated DB in 91 ms
22:26:58,432 INFO  [org.dcm4chee.arc.patient.impl.PatientServiceEJB] (EE-ManagedExecutorService-default-Thread-16) No duplicate record with equal Patient ID found Patient[pk=28, id=PatientID[pk=28, id=P123, issuer=Site A&1.2.40.0.13.1.1.999.111.1111&ISO], name=COTTA^ANNA]
22:26:58,434 INFO  [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3) << 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]
22:26:58,436 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3) >> A-RELEASE-RQ
22:26:58,436 INFO  [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-16) DCM4CHEE<-SUP_MISS_NEW(3) << A-RELEASE-RP
22:26:58,487 INFO  [org.dcm4che3.net.Association] (EE-ManagedScheduledExecutorService-default-Thread-3) DCM4CHEE<-SUP_MISS_NEW(3): close Socket[addr=view-localhost/127.0.0.1,port=59353,localport=11112]

In archive UI

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