creating a Dicom C-move message from an ORM

20 views
Skip to first unread message

Steve

unread,
Jul 17, 2013, 5:26:25 PM7/17/13
to Ensemble-in...@googlegroups.com
Hello,
 
I would like to take a ORM from a RIS on the exam completed status (which contains the Dicom study ID) and create a dicom c-move.  Then send the C-move to the dicom server.  Has anyone accomplish this type of developement?  If so, can you share your experience?
 
Thanks,
 
Steve Neary

JohnZ- RADNTX

unread,
Jul 17, 2013, 10:58:19 PM7/17/13
to Ensemble-in...@googlegroups.com
The sample production is pretty good for getting the Dicom Connectivty going the. Key being associations and abstract syntaxes... I have some transformations from hl7 to Dicom cfind but c move should be pretty easy

Steve

unread,
Jul 18, 2013, 9:48:30 AM7/18/13
to Ensemble-in...@googlegroups.com

Steve

unread,
Jul 18, 2013, 9:54:05 AM7/18/13
to Ensemble-in...@googlegroups.com

On Wednesday, July 17, 2013 3:26:25 PM UTC-6, Steve wrote:
JohnZ,
 
Would you be willing to let me take a look at your cfind transform?  I did look at the sample production so I think I should be able to setup the operation fine, I would like to look at a transform if possible.
 
Thanks,
 
Steve

John Zarate

unread,
Jul 19, 2013, 11:07:46 AM7/19/13
to Ensemble-in...@googlegroups.com
http://localhost:57772/csp/docbook/DocBook.UI.Page.cls?KEY=EDICOM_storage_production#EDICOM_C195145
Has the C-STORE demo


If you look in the sample production class you will see a couple of setups.  Go to ENSEMBLE-->INTEROPERATE---> DICOM setups and To make the association on the production level, and set DICOM AET Title... Part of the production code will create the list for your transfer syntax using "listbuild"
My Example is DCMROUTER that I am sending C-FIND to I also sent to a Duplex DICOM operation.


PRODUCTION CODE STARTS HERE---

Include EnsDICOM


Class RISICOB.RISICOB Extends Ens.Production [ ProcedureBlock ]
{........ Production Definition........}


Write !,"Configure JDICOM Storage      AET DCMROUTER, 192.168.72.45, 104"

#; We will be accepting Storage requests from DCMROUTER
Do ##class(EnsLib.DICOM.Util.AssociationContext).CreateAssociation("DCMROUTER","ENSEMBLETEST",$ListBuild($$$IMPLICITVRLETRANSFERSYNTAX))
Do ##class(EnsLib.DICOM.Util.AssociationContext).CreateAssociation("ENSEMBLETEST","DCMROUTER",$ListBuild($$$IMPLICITVRLETRANSFERSYNTAX))
Quit
}

/// Override this in your Production class to do setup before the Production starts
ClassMethod OnStart(pTimeStarted As %String) As %Status
{
#; Make sure that the associations exist
If '##class(EnsLib.DICOM.Util.AssociationContext).AETExists("DCMROUTER","ENSEMBLETEST")
{
Do ##class(EnsLib.DICOM.Util.AssociationContext).CreateAssociation("DCMROUTER","ENSEMBLETEST",$ListBuild($$$IMPLICITVRLETRANSFERSYNTAX))
}
If '##class(EnsLib.DICOM.Util.AssociationContext).AETExists("ENSEMBLETEST","DCMROUTER")
{
Do ##class(EnsLib.DICOM.Util.AssociationContext).CreateAssociation("ENSEMBLETEST","DCMROUTER",$ListBuild($$$IMPLICITVRLETRANSFERSYNTAX))
}
Quit $$$OK }


--------HL7 to DICOM TRANSFORM is here--------

Include EnsDICOM Class RATC.HL7toNewDICOM Extends Ens.DataTransform { ClassMethod Transform(source As EnsLib.HL7.Message, target As EnsLib.DICOM.Document) As %Status { Set $ZT="Trap",tSC=$$$OK do { set target=##class(EnsLib.DICOM.Document).%New() set tSC=target.SetValueAt("1.2.840.10008.5.1.4.1.2.2.1","CommandSet.AffectedSOPClassUID") set tSC=target.SetValueAt("32","CommandSet.CommandField") set tSC=target.SetValueAt("C-FIND-RQ","CommandSet.CommandField") set tSC=target.SetValueAt("3","CommandSet.MessageID") set tSC=target.SetValueAt("0","CommandSet.Priority") set tSC=target.SetValueAt("258","CommandSet.CommandDataSetType") //DTTM set tSC=target.SetValueAt("20100225","DataSet.StudyDate") //set tSC=target.SetValueAt($Extract(source.GetValueAt("ORCgrp(1).OBRuniongrp.OBRunion.OBR:7.1"),"DataSet.(0008,0020)"),1,8) set tSC=target.SetValueAt("","DataSet.StudyTime") //set tSC=target.SetValueAt(source.GetValueAt("PIDgrpgrp(1).ORCgrp(1).OBR:FillerOrderNumber.entityidentifier"),"DataSet.AccessionNumber") set tSC=target.SetValueAt("3342222","DataSet.AccessionNumber") set tSC=target.SetValueAt("","DataSet.QueryRetrieveLevel") set tSC=target.SetValueAt("OT","DataSet.ModalitiesInStudy") set tSC=target.SetValueAt("","DataSet.InstitutionName") set tSC=target.SetValueAt("","DataSet.ReferringPhysicianName") set tSC=target.SetValueAt("","DataSet.StudyDescription") set tSC=target.SetValueAt(source.GetValueAt("PIDgrpgrp(1).PIDgrp.PID:PatientName"),"DataSet.PatientName") set tSC=target.SetValueAt(source.GetValueAt("PIDgrpgrp(1).PIDgrp.PID:PatientIdentifierList(1).ID"),"DataSet.PatientID") set tSC=target.SetValueAt(source.GetValueAt("PIDgrpgrp(1).PIDgrp.PID:7"),"DataSet.PatientBirthDate") // PIDgrpgrp(1).PIDgrp.PID:7 is same as PIDgrpgrp(1).PIDgrp.PID:DateTimeofBirth set tSC=target.SetValueAt(source.GetValueAt("PIDgrpgrp(1).PIDgrp.PID:AdministrativeSex"),"DataSet.PatientSex") //set tSC=target.SetValueAt("","DataSet.PatientAge") set tSC=target.SetValueAt("","DataSet.StudyInstanceUID") set tSC=target.SetValueAt("","DataSet.StudyID") set tSC=target.SetValueAt("STUDY","DataSet.(0008,0052)") Set tSC = $$$OK } while (0) Exit Quit tSC Trap Set $ZT="",tSC=$$$EnsSystemError Goto Exit } }



--
You received this message because you are subscribed to the Google Groups "InterSystems: Ensemble in Healthcare Community" group.
To post to this group, send email to Ensemble-in...@googlegroups.com
To unsubscribe from this group, send email to Ensemble-in-Healt...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/Ensemble-in-Healthcare?hl=en
---
You received this message because you are subscribed to the Google Groups "InterSystems: Ensemble in Healthcare" group.
To unsubscribe from this group and stop receiving emails from it, send an email to Ensemble-in-Healt...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

JohnZ- RADNTX

unread,
Oct 25, 2013, 3:37:18 PM10/25/13
to Ensemble-in...@googlegroups.com
Hey Steve, 
I wanted to follow up to see if you were able to get C-MOVE.  I haven't dealt with C-MOVE that much and I had a question.  Is there a DICOM message that would allow us to move a specific study to a different patient?  From my reading the C-MOVE is strictly moving the entire study "as is" to another store.
Reply all
Reply to author
Forward
0 new messages