Replace Queuing of Retrieve Tasks using UWL - dcm4che/dcm4chee-arc-light GitHub Wiki
This page briefly describes an alternative to current existing implementation of :
- Retrieve studies specified in CSV from external archive
- Mark studies for retrieve specified in CSV from external archive
- Retrieve matching studies from external archive
- Mark matching studies for retrieve from external archive
These services are currently processed by Wildfly's Java Message Service API (JMS) subsystem, which is slated to be
completely replaced by Unified Worklist
as part of future archive development.
- Configure a Remote Application Entity for external archive.
- Archive is pre-configured with a UPS Processing Rule for retrieving DICOM instances.
- Create a UPS Template Workitem with following modifications
in the request payload json.
- In order that the UPS records created by UPS template workitem gets processed by the pre-configured UPS processing rule,
set the value of
Scheduled Workitem Code Sequence (0040,4018)
to match that of UPS processing rule. - To change the default destination (STORESCP), configure a Remote Application Entity and use that value in
Destination AE
ofDICOM Storage Sequence
ofOutput Destination Sequence
.
- In order that the UPS records created by UPS template workitem gets processed by the pre-configured UPS processing rule,
set the value of
-
As UPS records creation using UPS template feature are yet to be implemented in the UI :
- Create UPS records for external studies specified in CSV file
- Create UPS records for external matching studies the same can be tested using RESTful service directly with curl.
-
Start storescp which acts as a destination.
-
Refer UPS Template Workitem to create / search UPS Template Workitems.
-
Create / obtain a CSV file containing study instance UIDs and (preferably also) Patient IDs with issuer in HL7CX format associated with those studies on the local archive. Note that, if there are no Patient IDs in the CSV file then UPS records for different studies get created under a single dummy patient. Specify the field numbers containing study instance UID and Patient ID with issuer in HL7CX format.
-
Select the
SOP Instance UID (0008,0018)
of the desired UPS Template Workitem received in search UPS template workitem response and use this value asupsTemplateUID
in followings service.curl -v -H "Content-type: text/csv" -X POST 'http[s]://<archive-host>:<port>/dcm4chee-arc/aets/<LocalArchiveAET>/studies/csv:1/workitems/<upsTemplateUID>?csvPatientID=2' --data-binary @testRetrieveCSV.csv
Optionally following query filters can be sent in the above request whose value shall be set in created UPS workitems
-
upsLabel
:Procedure Step Label
(can be used similar to existingBatch ID
in retrieve tasks) -
upsScheduledTime
:Scheduled Procedure Step Start DateTime
-
Test Create UPS records for external matching studies
- Select the desired UPS Template Workitem attributes received in response
and create a JSON file using this dataset. This JSON file shall be sent as request payload in the invoked service.
Optionally following query filters can be sent in the above request whose value shall be set in created UPS workitems
curl -v -H "Content-type:application/dicom+json" -X POST 'http[s]://<archive-host>:<port>/dcm4chee-arc/aets/<LocalArchiveAET>/dimse/<ExternalArchiveAET>/studies/workitems' --data @upsTemplateWorkitemAttrs.json
-
upsLabel
:Procedure Step Label
(can be used similar to existingBatch ID
in retrieve tasks) -
upsScheduledTime
:Scheduled Procedure Step Start DateTime
-
- Verify that UPS records were created by searching them in
Navigation -> UWL
and specifying any filters as required. - Once the
Scheduled Procedure Step Start DateTime
is reached, the created UPS records are processed, and the objects are received on the destination side. - Verify the list of SOP Instances slated to be retrieved using C-MOVE in
Input Information Sequence
. -
Performed Procedure Step Description
contains description stating the transfer of number of instances from local archive AET to configured destination AET.
C-MOVE and C-STORE requests / responses can also be verified in Wildfly's server log as :
09:50:38,724 INFO [org.dcm4che3.net.Connection] (EE-ManagedExecutorService-default-Thread-548) Initiate connection from /0.0.0.0:0 to localhost:11115
09:50:38,725 INFO [org.dcm4che3.net.Connection] (EE-ManagedExecutorService-default-Thread-548) Established connection Socket[addr=localhost/127.0.0.1,port=11115,localport=43311]
09:50:38,725 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-548) DCM4CHEE->STORESCP(77) << A-ASSOCIATE-RQ
09:50:38,726 INFO [org.dcm4che3.net.Association] (EE-ManagedScheduledExecutorService-default-Thread-1) DCM4CHEE<-DCM4CHEE(73): close Socket[addr=localhost/127.0.0.1,port=54387,localport=11112]
09:50:38,727 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-544) DCM4CHEE->STORESCP(77) >> A-ASSOCIATE-AC
09:50:38,729 INFO [org.dcm4che3.net.Dimse] (EE-ManagedScheduledExecutorService-default-Thread-13) DCM4CHEE<-DCM4CHEE(76) << 1:C-MOVE-RSP[pcid=1, remaining=2, completed=0, failed=0, warning=0, status=ff00H
cuid=1.2.840.10008.5.1.4.1.2.2.2 - Study Root Query/Retrieve Information Model - MOVE
tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
09:50:38,731 INFO [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-547) DCM4CHEE->DCM4CHEE(75) >> 1:C-MOVE-RSP[pcid=1, remaining=2, completed=0, failed=0, warning=0, status=ff00H
cuid=1.2.840.10008.5.1.4.1.2.2.2 - Study Root Query/Retrieve Information Model - MOVE
tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
09:50:38,731 INFO [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-545) DCM4CHEE->STORESCP(77) << 1:C-STORE-RQ[pcid=1, prior=0
orig=DCM4CHEE >> 1:C-MOVE-RQ
cuid=1.2.840.10008.5.1.4.1.1.20 - Nuclear Medicine Image Storage
iuid=1.2.840.113619.2.216.2.1.2642006132233562.11300 - ?
tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
09:50:38,733 INFO [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-545) DCM4CHEE->STORESCP(77) << 2:C-STORE-RQ[pcid=1, prior=0
orig=DCM4CHEE >> 1:C-MOVE-RQ
cuid=1.2.840.10008.5.1.4.1.1.20 - Nuclear Medicine Image Storage
iuid=1.2.840.113619.2.216.2.1.2642006131450734.9771 - ?
tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
09:50:38,734 INFO [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-544) DCM4CHEE->STORESCP(77) >> 1:C-STORE-RSP[pcid=1, status=0H
cuid=1.2.840.10008.5.1.4.1.1.20 - Nuclear Medicine Image Storage
iuid=1.2.840.113619.2.216.2.1.2642006132233562.11300 - ?
tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
09:50:38,739 INFO [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-544) DCM4CHEE->STORESCP(77) >> 2:C-STORE-RSP[pcid=1, status=0H
cuid=1.2.840.10008.5.1.4.1.1.20 - Nuclear Medicine Image Storage
iuid=1.2.840.113619.2.216.2.1.2642006131450734.9771 - ?
tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
09:50:38,746 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-545) DCM4CHEE->STORESCP(77) << A-RELEASE-RQ
09:50:38,746 INFO [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-545) DCM4CHEE<-DCM4CHEE(76) << 1:C-MOVE-RSP[pcid=1, completed=2, failed=0, warning=0, status=0H
cuid=1.2.840.10008.5.1.4.1.2.2.2 - Study Root Query/Retrieve Information Model - MOVE
tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
09:50:38,747 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-544) DCM4CHEE->STORESCP(77) >> A-RELEASE-RP
09:50:38,747 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-544) DCM4CHEE->STORESCP(77): close Socket[addr=localhost/127.0.0.1,port=11115,localport=43311]
09:50:38,747 INFO [org.dcm4che3.net.Dimse] (EE-ManagedExecutorService-default-Thread-547) DCM4CHEE->DCM4CHEE(75) >> 1:C-MOVE-RSP[pcid=1, completed=2, failed=0, warning=0, status=0H
cuid=1.2.840.10008.5.1.4.1.2.2.2 - Study Root Query/Retrieve Information Model - MOVE
tsuid=1.2.840.10008.1.2 - Implicit VR Little Endian]
09:50:38,747 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-546) DCM4CHEE->DCM4CHEE(75) << A-RELEASE-RQ
09:50:38,748 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-548) DCM4CHEE<-DCM4CHEE(76) >> A-RELEASE-RQ
09:50:38,748 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-548) DCM4CHEE<-DCM4CHEE(76) << A-RELEASE-RP
09:50:38,748 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-547) DCM4CHEE->DCM4CHEE(75) >> A-RELEASE-RP
09:50:38,748 INFO [org.dcm4che3.net.Association] (EE-ManagedExecutorService-default-Thread-547) DCM4CHEE->DCM4CHEE(75): close Socket[addr=localhost/127.0.0.1,port=11112,localport=44299]
09:50:38,755 INFO [org.dcm4chee.arc.ups.impl.UPSServiceEJB] (EE-ManagedExecutorService-default-Thread-546) DCM4CHEE: Update UPS[pk=301097, uid=2.25.200433259660085130731558299675522667642, state=COMPLETED]
09:50:38,798 INFO [org.dcm4che3.net.Association] (EE-ManagedScheduledExecutorService-default-Thread-10) DCM4CHEE<-DCM4CHEE(76): close Socket[addr=localhost/127.0.0.1,port=44299,localport=11112]