Technically speaking, DICOM Modality Worklist is a task manager just like a piece of paper with short text and a check box or the tasks application on your iPhone (or Android). But for the imaging center or RAD department the advantages are enormous. The most obvious benefit is that there’s no need to reconcile all kind of misspelled names in the PACS because the patient name is no longer keyed in on the modality workstation but received electronically via the MWL query. The fact that the requested procedure is also received electronically reduces the chance for doing the wrong procedure to the wrong patient. Combined with Modality Performed Procedure step (MPPS), that allows the modality to report the task status, take ownership over the task and checkmark it as done when completed, the up side is obvious. No wonder then, that many HMO’s require Modality Worklist as a mandatory feature for every imaging device they purchase.
The most basic abstraction of a task is a short description of what should be done and a checkbox. That’s all it takes. The MWL data model is a bit more complicated and has two levels.
The top, parent, level is called “Requested Procedure” (RP) and holds the information about the patient (name, id), the study (accession number, study instance UID) and the procedure. The procedure can be described as text using attribute (0032,1060) – “Requested Procedure Description” or in a more sophisticated manner using the (0032,1064) – “Requested Procedure Code Sequence” where static tables of codes and meanings can be used to configure and maintain procedures in the RIS or HIS.
The child level is called “Scheduled Procedure Step” (SPS) and holds attributes relevant to the modality and the actual procedure to be made. A single requested procedure may hold more than one SPS if the request is for a multi-modality study, for example a chest X-Ray and a CT or whatever combination, or if for example two protocols should be applied (e.g. Chest and Abdomen). As a modality, we will use the data in the RP to identify the patient and eliminate re-typing of the name and ID and the SPS to determine what exactly to do.
The DICOM images that the modality will create should use the attributes received from the MWL. When MWL is implemented, the Study Instance UID is generated in the RIS so if a multi-modality procedure is done, each modality will create a series and attach it to the Study by using the Study Instance UID received in the MWL query.
The Modality Worklist Server is responsible for managing the tasks. On one hand it provides means to schedule new tasks (e.g. via HL7 or using a web form) and on the other hand it provides means to get the list of scheduled tasks (via DICOM).
In this post, we’re going to write a simple MWL client using RZDCX DICOM Toolkit and discuss the details of the service and how the workflow is implemented. We’ll leave the MPPS for a future post.
Let’s start with a simplified overview of the workflow at the imaging center or the radiology department.
- An order is made for an imaging service, let’s say for example a chest X-Ray. The order can be made in various ways. For example it can arrive as a HL7 message from the HIS (Hospital Information System), or it can be that the patient walks in an the order is made at the reception desk. In either case, a new record is created in the worklist manager with the information for the service.
- The order is scheduled and assigned to the X-Ray machine or Room that will perform the exam. If there are many X-Ray machines, the order may be assigned to one of them. The assignment is made by setting the AE title on the order and setting a date. The exact way it is done, is very much the business of the worklist manager implementation. DICOM only defines the data model entities. The relevant entity for this is scheduled procedure step. It’s an abstraction of a task with description of what should be done, when it should be done and who should do it.
- When the X-Ray machine makes a modality worklist query, it gets the list of scheduled tasks and performs them.
Let’s have a look at a modality
worklist client.
On the upper left of this single form application you see the DICOM network parameters that we’ve already seen on chapter 5 of the DICOM tutorial when talking about DICOM networking.
On the upper right side we have some filter attributes that we can use that make a lot of sense. We can filter by the AE title that the procedure was scheduled for, by the type of modality it was scheduled for and using the scheduled date. For demonstration purpose, the date matching attributes here are very detailed in order to show all possible date and time exact, open and closed range matching.
The Query button packs the filter into a DICOM object and then sends it to the MWL server using the Query method of the DCXREQ interface. The SOP class for Modality Worklist is “1.2.840.10008.5.1.4.31”.
The construction of the query object is a bit tricky because we have to build the parent-child hierarchy. The mechanism of making queries for hierarchical objects is called sequence matching. The server (Q/R SCP) should search all the matching Requested Procedures that have at least one child Scheduled Procedure Step with attributes that matches the query. If it finds such, the complete RP with all its child nodes is sent as a result. The client (Query SCU) may set exactly one child node in the query.
The RP and SPS entities have many attributes but for this post what’s important is to understand that we, as a modality, are performing a schedule procedure step so we are looking for the child entity. The AE title, modality and scheduled date are all attributes of the schedule procedure step so in order to perform the matching, we create a filter for the scheduled procedure step and then put it into a requested procedure object as a sequence element and this is the query we send. Here’s the code:
// Fill the query object
rp = new
DCXOBJ();
sps = new
DCXOBJ();
el = new
DCXELM();
// Build the Scheduled procedure Step (SPS) item
el.Init((int)DICOM_TAGS_ENUM.ScheduledStationAETitle);
sps.insertElement(el);
// A lot of code to handle all the cases of date
and time matching
// that eventually goes into the elements:
ScheduledProcedureStepStartDate and ScheduledProcedureStepStartTime
el.Init((int)DICOM_TAGS_ENUM.ScheduledProcedureStepStartDate);
…
/// This adds a filter for time
el.Init((int)DICOM_TAGS_ENUM.ScheduledProcedureStepStartTime);
…
// Handle the modality Combo Box
el.Init((int)DICOM_TAGS_ENUM.Modality);
if
(comboBoxModality..SelectedItem.ToString() != "Any")
el.Value =
comboBoxModality.SelectedItem.ToString();
sps.insertElement(el);
// Now we put it as an item to sequence
spsIt = new
DCXOBJIterator();
spsIt.Insert(sps);
// and add the sequence Scheduled Procedure Step
Sequence to the requested procedure (parent) object
el.Init((int)DICOM_TAGS_ENUM.ScheduledProcedureStepSequence);
el.Value = spsIt;
rp.insertElement(el);
/// Add the Requested Procedure attributes that we
would like to get
el.Init((int)DICOM_TAGS_ENUM.RequestedProcedureID);
rp.insertElement(el);
el.Init((int)DICOM_TAGS_ENUM.RequestedProcedureDescription);
rp.insertElement(el);
el.Init((int)DICOM_TAGS_ENUM.studyInstanceUID);
rp.insertElement(el);
el.Init((int)DICOM_TAGS_ENUM.PatientsName);
rp.insertElement(el);
el.Init((int)DICOM_TAGS_ENUM.patientID);
rp.insertElement(el);
el.Init((int)DICOM_TAGS_ENUM.AccessionNumber);
rp.insertElement(el);
// Create the requester object and connect it's
callback to our method
req = new
DCXREQClass();
req.OnQueryResponseRecieved += new IDCXREQEvents_OnQueryResponseRecievedEventHandler(OnQueryResponseRecievedAction);
rp.Dump("query.txt");
// send the query command
it = req.Query(LocalAEEdit.Text,
TargetAEEdit.Text,
HostEdit.Text,
ushort.Parse(PortEdit.Text),
"1.2.840.10008.5.1.4.31", /// Modality Worklist SOP Class
rp);We can handle the results either in the callback OnQueryResponseRecievedAction or iterate over the items in DCXREQ.Query return value. In this example we’ll do the later and unpack some of the attributes of the RP into a data grid. Here’s the code for it:
private void
LoadResultsToGrid(DCXOBJIterator
it)
{
DCXOBJ currObj = null;
try
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("Patient Name", typeof(string)));
dt.Columns.Add(new DataColumn("Accession Number", typeof(string)));
dt.Columns.Add(new DataColumn("Requested Procedure ID", typeof(string)));
dt.Columns.Add(new DataColumn("Requested Procedure Description",
typeof(string)));
// Iterate over the query results
for (; !it.AtEnd();
it.Next())
{
currObj =
it.Get();
dr =
dt.NewRow();
dr["Patient Name"]
= TryGetString(currObj, DICOM_TAGS_ENUM.patientName);
dr["Accession Number"]
= TryGetString(currObj,DICOM_TAGS_ENUM.AccessionNumber);
dr["Requested Procedure ID"]
= TryGetString(currObj,DICOM_TAGS_ENUM.RequestedProcedureID);
dr["Requested Procedure
Description"] = TryGetString(currObj,DICOM_TAGS_ENUM.RequestedProcedureDescription);
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
dgvQueryResults.DataSource = dv;
}
finally
{
ReleaseComObject(currObj);
}
The full source code modality worklist SCU example can be
downloaded from here. This example has a master-detail data grid view that shows the SPS’s of the
selected RP.
Don’t forget to download and register MODALIZER-SDK (32 or 64
depending on your OS) before building the project.
Really helpful article.
ReplyDeleteLooking ahead for MPPS deciphering...
Thank you
Thank you very much,
ReplyDeleteAll of these articles are very helpfull.
I tried modality worklist,
but got error like this
'DUL Finite State Machine Error: No action defined, state 5 event 17'
any idea?
That's a protocol error.
DeleteOne of the sides, does not respond according to the expected.
Can you add a log to the application and repeat the test.
At the form load add this:
app = new DCXAPP();
app.StartLogging("c:\\rzdcxLog.txt");
Than run again and post here the log file.
We'll analyze it online
I solved it.
DeleteThe given port number was false.
I changed it and it works :)
Thanks a lot.
This comment has been removed by the author.
ReplyDeleteHi! your contact page is broken :S,
ReplyDeleteI thank your dicom posts, Im trying to create a SCP-MWL server, your appi is able to create it?
thanks.
Thanks no-body.
DeleteI fixed it.
Look at this post: http://dicomiseasy.blogspot.co.il/2012/07/dicom-modality-worklist-server.html
about MWL SCP
Roni
Hello.. i am using this client (DICOM Modality Worklist) but can't seem to make a connection to the server.. Maybe i just missed this info somewhere but what port number is this client listening to by default?
ReplyDeleteHi
DeleteThis DICOM Modality Worklist SCU (client) does not listen to any port.
It initiates an association with the peer DICOM application that listen on a port on another computer.
Hi from Mexico!
ReplyDeleteI'm traing to run your aplication but I got this error:
Query failed: DUL Association Rejected.
Any idea ?
Hi !
ReplyDeleteI am a french student in computer science. In the context of my school, I've to code a Dicom software. I have decided to code a Worklist implementation but despite all my research some part of the Dicom standard escape me.
I asked Roni (e-mail) about the "Admission ID", because I didn't know the meaning of this field. I share here his answer which can help everyone :
"Admission id is an id that is created or assigned to the patient when admitted to the ward.
For example when you visit a clinic, the secretary at the front desk opens a file for you and assigns an id to it.
So this can be the admission id.
It had no other logic attached to it in DICOM.
In general you should look at the attribute type.
There are types 1, 2, and 3.
If it's not a 1, this means you can most probably live without it."
I agree with that, but I have another question : how do you identify a patient ? With the Patient ID, the Accession Number or the Admission ID ? Do all the patients have an Admission id AND a Patient id ?
Thank you so much again Roni for this first answer.
Regards,
Laura.
Hi Laura,
DeleteThe identifier of the patient is Patient ID.
Accession Number identifies the current page or incident or encounter of treatment in the patient record. It is related to study level.
Regards,
Roni
If you are not coming from a clinical background, all these different ID numbers can be confusing. I would look at the Admission ID as an account number. Upon admission, an account number is assigned that is used, among other things, to track all billing, procedures, etc. for that 'admission.' Next visit to doctor or hospital would/could generate another Admission (account) ID. Patient ID is unique to the PATIENT. Accession number is for the EXAM, for instance, a chest xray would have a unique accession number for that particular patient. If they had another chest xray later, it would get another unique accession number. The admission ID is for that particular visit or admission. Hopefully, this helps.
DeleteSCU has fired a query on SCP.but the SCP returns "The response from SCP was not success" and the Error comment returns a "."(dot). what may the problem.
ReplyDelete[DicomQueryAPI::list] The response from SCP was not success .
[DicomQueryAPI::list] Error Comment : .
I this with out toolkit? If so, post the complete log please.
DeleteDoes the RZDCX toolkit is free?
ReplyDeleteI am siva,
ReplyDeleteI am not understanding RZDCX modalityworklistSCU,Query/RetriveSCU and mppsSCU code sample.who is the sender and listener and how to configure AET ,IPADDRESS AND PORT.I am strugling with send data to modality.Please give solution.advance thanks
RZDCX code samples helping me,but i am not under standing flow between these exaples and modalites.Please help me.
ReplyDeleteplease help me,i am .net developer.i am facing problem with send patient data to modalities.i am using RZDCX examples.i am not understanding modalityworklistscu,query/retrivescu and mpps.please tell me who is listener and who is the client.please help me.
ReplyDeleteDear Suvarna
DeleteAll these examples are SCU or Client. I'm sorry that I can't answer you general call for help but if you have more specific questions please ask. I suggest that you read again the post and maybe try reading other resources that maybe more clear to you.
Regards
Roni
please help me,i am .net developer,i am facing the problem for send patient data to modality.what is the use of modality worklist scu ,query/retrive scu and MPPS SCU.which is good example for send patient information to modality.please help me.advance thanks
ReplyDeleteHi Suvarna, Hope you have completed MWL scu by this time. Can you please share the details to robbinjames@gmail.com
Deleteplease help me,i am .net developer, i want modality worklist scp .net source code for send scheduled patient information to modality.advance thanks.
ReplyDeleteIn a worklist it is possible to have 2 different methods with the same number of access (same patient)?
ReplyDeleteIf the answer is Yes, can you give an example?
Thank you
In a worklist it is possible to have 2 different methods with the same number of access (same patient)?
ReplyDeleteIf the answer is Yes, can you give an example?
Thank you
Yes, in the response you can have two scheduled procedure steps for the same scheduled procedure. See the screenshot at the top of this post
DeleteI'd seen the picture above, but you might attach a file example to better understand how it works.
DeleteThank you
Thanks a lot for this excellent blog about DICOM an the great explanation of the backgrounds.
ReplyDeleteI would have one question. What is the best case to handle a missing RP Description (0032,1060) in the MWL?
Thanks a lot!
Is it better not to process and attempt to fix the RIS config (that's how we handle) or can it be effectively worked around on the modality?
Hi Tobias,
DeleteSorry for the late replay.
According to the DICOM standard Requested Procedure Description or Requested Procedure Description should be provided by the SCP. IHE extend the requirement also to the SCU.
How you handle missing attribute really depends on your workflow. I tend to take the more elaborative attitude but others may think differently.
If you decide to reject MWL records due to missing attribute make sure to have a clear message to the user why you did this including the offending attribute name and tag.
Consider displaying the record grayed out with the error information so it is displayed but can't be used.
Regards,
Roni
Thank your for this Toolkit, it really helping me.
ReplyDeleteI m using the Toolkit to implement an application requesting the worklist from a Worklist Server using Delphi XE4.
the server is running fine with MS SQL express. I can request the list and i m getting patient information quickly
Things was going good until i face a problem converting this line to delphi when displaying SPS elements.
DCXOBJIterator spsIt = currObj.getElementByTag((int) DICOM_TAGS_ENUM.ScheduledProcedureStepSequence).Value as DCXOBJIterator;
The casting of the Value ( an OleVariant) to DCXOBJIterator failed and gives error during compilation.
I tried many typacasting forma but there is no way to iterate over the SPS.
Can u help please ?
How to get the SPSs in DELPHI
Thanks in advance
Thanks a lot for the article.
ReplyDeleteI was wondering if I can get number of images associated to a study from the modality worklist? The question is how the PACS would know if all the images for study/patient are received.
Cheers,
Arash
Hi Arash,
DeleteGreat question! Because there's an answer ;) When the Modality sends MPPS COMPLETED it should include the list of SOP Instance UID's that were created during the procedure. This way the PACS knows exactly the content of the procedure.
Roni
Thanks for the great article!
ReplyDeleteI've a question - I've created a service which supposed to connect to a RIS server and get the worklist related to my facility.
My question is how do i get it by hl7 query? Do i query first for all the patients related to my facility and then query for their orders or i have any dedicated query specially for this purpose?
I want to mantion that i'm creating dicom objects only after scan so i cant query for future orders via dicom.
Thanks in advanced,
Doron.
Thanks for the great article!
ReplyDeleteI've a question - I've created a service which supposed to connect to a RIS server and get the worklist related to my facility.
My question is how do i get it by hl7 query? Do i query first for all the patients related to my facility and then query for their orders or i have any dedicated query specially for this purpose?
I want to mantion that i'm creating dicom objects only after scan so i cant query for future orders via dicom.
Thanks in advanced,
Doron.
I am trying to build a MWL query request, but somehow get some tags wrong, or missing some.
ReplyDeleteI know how to build a C-Find Query for example CT Series on a Dicom Archive on PATIENT or STUDY level. I assume a Qquery for the modality worklist must be similar, but somehow I am not getting results.
(0000,0002) "1.2.840.10008.5.1.4.31"
(0000,0100) ? ?
...
(0008,0052) ? ? or can I just dismiss this whole tag?
What are the minimium respond flags that I need to put in my request, Or can I just request for all MWLs on a "demo server"...
Could you send an example of that query you create with your toolkit? rp.Dump("query.txt");
thanks for your blog,
Matthias
Dear Author!
ReplyDeleteI could get value of some tags such as :PatientSex,PatientBirthDate,PatientAge when using method TryGetString. It always raise exception in the method TryGetString. Could you please tell me why and how to fix it?. This is mycode:
string PatientSex = TryGetString(currObj, DICOM_TAGS_ENUM.PatientSex);
string PatientBirthDate = TryGetString(currObj, DICOM_TAGS_ENUM.PatientBirthDate);
string Age = Utility.Int32Dbnull(TryGetString(currObj, DICOM_TAGS_ENUM.PatientAge);
private string TryGetString(DCXOBJ obj, DICOM_TAGS_ENUM tag)
{
try
{
DCXELM e = obj.getElementByTag((int)tag);
if (e != null && e.Value != null)
return obj.getElementByTag((int)tag).Value.ToString();
else
return "N/A";
}
catch (COMException)
{
return "N/A";
}
}
The exception is probably "element not found". You can use GetElement instead which will not throw exception in this case and return null.
DeleteHi, the links here "The full source code modality worklist SCU example can be downloaded from here." are dead. Could you fix it please ?
ReplyDeleteI have what may seem like a very odd question. How does one determine from looking at the data dictionary or any other part what particular attributes are um associated to dicom worklist? for example. why do modalities usually ask and pass referring physician (0008090) but not requesting(0032,1032), etc? I work in the middle between hl7 and dicom. i have a project and would like to receive diagnosis code and description (0008,1080 and 0008,1084) into my broker. I have no way to know if a modality is going to ask for any particular code any thoughts would be helpful.
ReplyDeleteWe have implemented the modality worklist with a GE modality.We are getting the following error message on the GE console. "Association to modality Work list Server (SCP) refused."If we the “update” button once or twice, it recovers, but it’s almost like the timeout on the handshake is too short for the process to respond or something. Any assistance would be greatly appreciated! Thank you!
ReplyDeleteRefused means that your AE title is either not configured or configured wrongly on the worklist SCP. Check your configuration on both sides.
DeleteThis is usually an A-ASSOCIATE Response that says that you are not recognized or recognized but not authorized to communicate with the called system.
Hi
ReplyDeleteI am working on MWL SCU implementation. As part of implementation I have find a way to uniquely identify the work-list. Can you please tell me as per DICOM standard, what tag can be used to identify a work-list ?
Yo7 can use requested procedure id
DeleteHi
ReplyDeleteI am working on MWL SCU implementation. As part of implementation I have find a way to uniquely identify the work-list. Can you please tell me as per DICOM standard, what tag can be used to identify a work-list ?
Hi,
DeleteWorklist items have two major levels : the requested procedure and the scheduled step. Each have their own ID. At the top procedure level you have Requested Procedure ID (0040,1001) and at the child scheduled procedure step leve you have Schedule Procedure Step ID (0040,0009). Additionally, the work item carries other identifiers such as Accession Number and Study Instance UID but they don’t identify the work item itself but rather related entities.
I hope this helps. See also: http://dicom.nema.org/medical/Dicom/current/output/html/part04.html#sect_K.6.1
Roni
Hello, what object and/or example should I be using to write to the [RZ_DICOM_HL7].[dbo].[N_PATIENT] table?
ReplyDeleteStephen
Has anyone else noticed that this does not conform to the standard? The standard defines that each Modality Worklist Information Model, sent in response to the C-FIND Request, should only have one Item in the Scheduled Procedure Step Sequence. See http://dicom.nema.org/medical/dicom/current/output/html/part04.html#sect_K.6.1.2.2 In the example above, there are multiple Scheduled Procedure Steps in the Sequence.
ReplyDeleteIt’s confirmant. It’s true that the request should have exactly one child. But that’s what this example do
DeleteHello,
ReplyDeleteI running Dicomserver.exe in verbose mode and running Worklistmanager adding new row succesfully, then running ModalityWorklistSCU sample, but MWL could not get though and I found the following error at Dicomserver, please advise how to solve the problem
# Dicom-Data-Set
# Used TransferSyntax: Unknown Transfer Syntax
(0000,0000) UL 0 # 4, 1 CommandGroupLength
(0000,0002) UI =FINDModalityWorklistInformationModel # 22, 1 AffectedSOPClassUID
(0000,0100) US 32800 # 2, 1 CommandField
(0000,0120) US 1 # 2, 1 MessageIDBeingRespondedTo
(0000,0800) US 257 # 2, 1 DataSetType
(0000,0900) US 0 # 2, 1 Status
2018-06-1209:23:51.954000 25448 DEBUG DIMSE sendDcmDataset: sending 82 bytes
2018-06-1209:23:51.970000 25448 DEBUG WriteToConnection, length: 12, bytes written: 12, loop no: 1
2018-06-1209:23:51.970000 25448 DEBUG WriteToConnection, length: 82, bytes written: 82, loop no: 1
2018-06-1209:23:51.970000 25448 INFO DIMSE receiveCommand
2018-06-1209:23:51.970000 25448 DEBUG In DIMSE_readNextPDV, Blocking=1, timeout=5
2018-06-1209:23:51.970000 25448 DEBUG In readPDUHeadTCP, About to call defragmentTCP, block=1, (*association)->timerStart=0, timeput=5
2018-06-1209:23:51.970000 25448 DEBUG In readPDUBodyTCP, About to call defragmentTCP, block=1, (*association)->timerStart=0, timeput=5, (*association)->nextPDULength)4
2018-06-1209:23:51.986000 25448 DEBUG Peer requested release
2018-06-1209:23:51.986000 25448 DEBUG WriteToConnection, length: 10, bytes written: 10, loop no: 1
2018-06-1209:23:51.986000 25448 INFO Dropping association (closing socket, cleaning up
2018-06-1209:23:51.986000 25448 DEBUG Assocation ended (not timeout)
2018-06-1209:23:52.001000 25448 DEBUG AssocThread Ended
0006:0312 No requests for associations for this server
2018-06-1209:24:21.684000 19920 DEBUG ASSOC ERROR
2018-06-1209:24:21.684000 19920 ERROR Connected assoc didn't go through, maybe timeout
0006:0312 No requests for associations for this server
2018-06-1209:24:21.700000 8556 DEBUG ASSOC ERROR
2018-06-1209:24:21.700000 8556 ERROR Connected assoc didn't go through, maybe timeout
It looks like configuration error
DeleteYes, it is. the problem solved so far. Thanks anyway,
DeleteWhy does Patient Birth date as 0000-00-00 from the following c# code
ReplyDeletedr["Patient BirthDate"] = getElementByTagID(currObj, (int)DICOM_TAGS_ENUM.PatientsBirthDate);
while looking at Dicomserver in verbose mode, I saw patient birth date is 2561-06-11 which is correct info.
# Dicom-Data-Set
# Used TransferSyntax: Unknown Transfer Syntax
(0008,0050) SH [166673699441148] # 16, 1 AccessionNumber
(0008,0090) PN [Dr.Me] # 6, 1 ReferringPhysicianName
(0010,0010) PN [somsri^somsriName] # 18, 1 PatientName
(0010,0020) LO [12345] # 6, 1 PatientID
(0010,0030) DA [2561-06-11] # 10, 1 PatientBirthDate
What version of RZDCX are you using?
DeleteYes, it is due to I'm using an old version of RZDCX, after update the latest one, the problem solved, thanks for your response any way.
DeleteThanks for sharing.
ReplyDeleteI do have one question. there some clinical document which need to be transfer from RIS/HIS to modality. for example EDD (estimated due date) is a very useful data in ultrasound (OB-GYN).
could you explain how clinical/visiting information transfer due to worklist?
Practically, the closest I could find is here https://static.healthcare.siemens.com/siemens_hwem-hwem_ssxa_websites-context-root/wcm/idc/groups/public/@global/@services/documents/download/mda4/odgz/~edisp/bonsai_va11_dcs-06170004.pdf and the EDD is filled manually by the operator
ReplyDeleteDear Roni,
Deletethank you for taking time and search for it.
the document that you gave me is a dicom conformance for Siemens US modality. I do read some other dicom conformance as well. but my problem is actually happen due my lack of knowledge of dicom.
I could not find out how to transfer extended dicom or context like EDD to modality.... if you could tell me about these structures, it would be a great help
Don’t forget to download and register RZDCX (32 or 64 depending on your OS) before building the project
ReplyDeleteNot working also
If I quiery all worklist without filter any date, I found that ScheduledProcedureStepStartDate did not sent from Dicom server, it shown N/A. However, if I filter exact date or From-To date then ScheduledProcedureStepStartDate will be sent from Dicom Server? Why.
ReplyDeleteIn order to get an attribute in the response you have to i clude it in the request identifier. Maybe when you don’t filter buy date you don’t add it at all? What tools are you using for scu and acp?
DeleteThanks for explanation. I am trying to post-process MRI dicom that has been stored in PACS, then append new dicoms as new series. Dicoms are queried and retrieved using study root information model, but the problem is that the transfered dicoms do not have 'Patient name', or 'patient ID' tags. So the new dicoms cannot be added to the existing study. The fact that the dicoms from the PACS does not contain patient information seems to be related to the Worklist, so I came to this point. Could you advice if there is a point that I am missing?
ReplyDeleteCheck why you don't get patient name and ID from the worklist.
Deleteif you want to add a series to a study I suggest that you take a different approach.
first query the study from the PACS and even retrieve it completely.
Then add your series, then send the new series to the PACS.
You have this feature in MODALIZER+ implemented.
Check https://modalizer.plus/
You can download an evaluation (30 days free)
Go to the query screen and search for your study then right click the line and select "Add image/eport as new Series"