| 1 | MAGDIR83 ;WOIFO/PMK - Read a DICOM image file ; 06/06/2005  09:20
 | 
|---|
| 2 |  ;;3.0;IMAGING;**11,30,51**;26-August-2005
 | 
|---|
| 3 |  ;; +---------------------------------------------------------------+
 | 
|---|
| 4 |  ;; | Property of the US Government.                                |
 | 
|---|
| 5 |  ;; | No permission to copy or redistribute this software is given. |
 | 
|---|
| 6 |  ;; | Use of unreleased versions of this software requires the user |
 | 
|---|
| 7 |  ;; | to execute a written test agreement with the VistA Imaging    |
 | 
|---|
| 8 |  ;; | Development Office of the Department of Veterans Affairs,     |
 | 
|---|
| 9 |  ;; | telephone (301) 734-0100.                                     |
 | 
|---|
| 10 |  ;; |                                                               |
 | 
|---|
| 11 |  ;; | The Food and Drug Administration classifies this software as  |
 | 
|---|
| 12 |  ;; | a medical device.  As such, it may not be changed in any way. |
 | 
|---|
| 13 |  ;; | Modifications to this software may result in an adulterated   |
 | 
|---|
| 14 |  ;; | medical device under 21CFR820, the use of which is considered |
 | 
|---|
| 15 |  ;; | to be a violation of US Federal Statutes.                     |
 | 
|---|
| 16 |  ;; +---------------------------------------------------------------+
 | 
|---|
| 17 |  ;;
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ; M2MB server
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  ; This routine is invoked by the ^MAGDIR8 to update handle DICOM
 | 
|---|
| 22 |  ; CORRECT functions, that is, the "CORRECT" REQUEST item.
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  ; This is a four-step process:
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  ;    1) The "QUERY" record is sent, to obtain a list of corrected
 | 
|---|
| 27 |  ;       images.  The list is sent back to the gateway in a list of
 | 
|---|
| 28 |  ;       "CORRECT" RESULT items, each with new patient/study values.
 | 
|---|
| 29 |  ;       If the images are to be deleted, the list will contain "DELETE"
 | 
|---|
| 30 |  ;       instead of "FIXED" RESULT items.
 | 
|---|
| 31 |  ;    2) The gateway processes each corrected/deleted image, one at a
 | 
|---|
| 32 |  ;       time.
 | 
|---|
| 33 |  ;    3) The gateway sends a "PROCESSED | IMAGE" record is sent back to
 | 
|---|
| 34 |  ;       the server for each corrected image, so that each can be
 | 
|---|
| 35 |  ;       deleted from the list.  (This is called an RPC Callback.)
 | 
|---|
| 36 |  ;    4) Finally, the gateway sends a "PROCESSED | STUDY" record back to
 | 
|---|
| 37 |  ;       the server to delete the remainder of the study from the list.
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 | ENTRY ; update image acquisition statistics
 | 
|---|
| 40 |  N LOCATION,MACHID,STATUS
 | 
|---|
| 41 |  S STATUS=$P(ARGS,"|",1)
 | 
|---|
| 42 |  I STATUS="QUERY" D
 | 
|---|
| 43 |  . D QUERY
 | 
|---|
| 44 |  . Q
 | 
|---|
| 45 |  E  I STATUS="PROCESSED" D
 | 
|---|
| 46 |  . D PROCESS
 | 
|---|
| 47 |  . Q
 | 
|---|
| 48 |  Q
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 | QUERY ; get the list of DICOM CORRECTED files
 | 
|---|
| 51 |  N DELFLAG,ICOUNT,IMAGEIEN,INSTNAME,LOCATION,MACHID
 | 
|---|
| 52 |  N NEW,NEWNAME,NEWPID,NEWACN,NIMAGES,STUDYIEN,STUDYUID
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  S LOCATION=$P(ARGS,"|",2),MACHID=$P(ARGS,"|",3)
 | 
|---|
| 55 |  S NIMAGES=0,STUDYIEN=""
 | 
|---|
| 56 |  F  S STUDYIEN=$O(^MAGD(2006.575,"AFX",LOCATION,MACHID,STUDYIEN)) Q:'STUDYIEN  Q:NIMAGES>24  D
 | 
|---|
| 57 |  . S DELFLAG=^MAGD(2006.575,"AFX",LOCATION,MACHID,STUDYIEN)
 | 
|---|
| 58 |  . S INSTNAME=$P(^MAGD(2006.575,STUDYIEN,"AMFG"),"^",1)
 | 
|---|
| 59 |  . S STUDYUID=^MAGD(2006.575,STUDYIEN,"ASUID")
 | 
|---|
| 60 |  . S NEW=^MAGD(2006.575,STUDYIEN,"FIXD")
 | 
|---|
| 61 |  . S NEWNAME=$P(NEW,"^",3),NEWPID=$P(NEW,"^",4),NEWACN=$P(NEW,"^",5)
 | 
|---|
| 62 |  . S IMAGEIEN=STUDYIEN ; need to process the first image
 | 
|---|
| 63 |  . D QUERY1("NONE") ; first time - defer deleting this node
 | 
|---|
| 64 |  . S ICOUNT=0
 | 
|---|
| 65 |  . F  S ICOUNT=$O(^MAGD(2006.575,STUDYIEN,"RLATE",ICOUNT)) Q:'ICOUNT  Q:NIMAGES>24  D
 | 
|---|
| 66 |  . . S IMAGEIEN=^MAGD(2006.575,STUDYIEN,"RLATE",ICOUNT,0)
 | 
|---|
| 67 |  . . D QUERY1("IMAGE") ; regular image - delete it
 | 
|---|
| 68 |  . . S NIMAGES=NIMAGES+1
 | 
|---|
| 69 |  . . Q
 | 
|---|
| 70 |  . I 'ICOUNT D  ; end of study reached - delete first image & study
 | 
|---|
| 71 |  . . S IMAGEIEN=STUDYIEN ; need to delete first image and the study
 | 
|---|
| 72 |  . . D QUERY1("STUDY") ; second time, now delete the study entry
 | 
|---|
| 73 |  . . Q
 | 
|---|
| 74 |  . Q
 | 
|---|
| 75 |  Q
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 | QUERY1(DELTYPE) ; build one CORRECT Result PROCESS array node
 | 
|---|
| 78 |  N FROMPATH,X
 | 
|---|
| 79 |  S FROMPATH=$P($G(^MAGD(2006.575,IMAGEIEN,0)),"^",1) Q:FROMPATH=""
 | 
|---|
| 80 |  S X=$S(DELFLAG="D":"DELETE",1:"FIXED")
 | 
|---|
| 81 |  S X=X_"|"_IMAGEIEN_"|"_STUDYIEN_"|"_DELTYPE_"|"_INSTNAME
 | 
|---|
| 82 |  S X=X_"|"_FROMPATH_"|"_STUDYUID_"|"_NEWNAME_"|"_NEWPID_"|"_NEWACN
 | 
|---|
| 83 |  D RESULT^MAGDIR8("CORRECT",X)
 | 
|---|
| 84 |  Q
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  ; -----------------------  RPC CALLBACK ------------------------------
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 | PROCESS ; delete the processed corrected entry from the ^MAGD(2006.575) file
 | 
|---|
| 89 |  N DELTYPE,EXIST,FILEPATH,IMAGEIEN,LOCATION,RLATEIEN,STUDYIEN
 | 
|---|
| 90 |  S IMAGEIEN=$P(ARGS,"|",2),STUDYIEN=$P(ARGS,"|",3)
 | 
|---|
| 91 |  S DELTYPE=$P(ARGS,"|",4),FILEPATH=$P(ARGS,"|",6) ; ignore piece #5
 | 
|---|
| 92 |  I DELTYPE'="NONE" D  ; don't delete the first image/study in the list
 | 
|---|
| 93 |  . L +^MAGD(2006.575,0):1E9 ; Background process MUST wait
 | 
|---|
| 94 |  . I DELTYPE="IMAGE" D  ; delete this image
 | 
|---|
| 95 |  . . ; remove the related image cross-references
 | 
|---|
| 96 |  . . S RLATEIEN=$O(^MAGD(2006.575,STUDYIEN,"RLATE","B",IMAGEIEN,""))
 | 
|---|
| 97 |  . . I RLATEIEN D
 | 
|---|
| 98 |  . . . K ^MAGD(2006.575,STUDYIEN,"RLATE",RLATEIEN)
 | 
|---|
| 99 |  . . . K ^MAGD(2006.575,STUDYIEN,"RLATE","B",IMAGEIEN,RLATEIEN)
 | 
|---|
| 100 |  . . . S $P(^(0),"^",4)=$P(^MAGD(2006.575,STUDYIEN,"RLATE",0),"^",4)-1
 | 
|---|
| 101 |  . . . Q
 | 
|---|
| 102 |  . . Q
 | 
|---|
| 103 |  . E  I DELTYPE="STUDY" D  ; delete the first image and study information
 | 
|---|
| 104 |  . . ; remove the "AFX" and "F" cross-references
 | 
|---|
| 105 |  . . S STUDYUID=$P(ARGS,"|",7),MACHID=$P(ARGS,"|",8)
 | 
|---|
| 106 |  . . S LOCATION=$P(ARGS,"|",9)
 | 
|---|
| 107 |  . . K ^MAGD(2006.575,"AFX",LOCATION,MACHID,STUDYIEN)
 | 
|---|
| 108 |  . . K ^MAGD(2006.575,"F",LOCATION,STUDYUID,STUDYIEN)
 | 
|---|
| 109 |  . . Q
 | 
|---|
| 110 |  . ; Only subtract 1 from #entries, if we're actually deleting one:
 | 
|---|
| 111 |  . S EXIST=$D(^MAGD(2006.575,IMAGEIEN))
 | 
|---|
| 112 |  . K ^MAGD(2006.575,IMAGEIEN)
 | 
|---|
| 113 |  . K ^MAGD(2006.575,"B",FILEPATH,IMAGEIEN)
 | 
|---|
| 114 |  . S:EXIST $P(^(0),"^",4)=$P(^MAGD(2006.575,0),"^",4)-1
 | 
|---|
| 115 |  . L -^MAGD(2006.575,0)
 | 
|---|
| 116 |  . Q
 | 
|---|
| 117 |  D RESULT^MAGDIR8("CORRECT","COMPLETE|"_IMAGEIEN_"|"_STUDYIEN_"|"_DELTYPE)
 | 
|---|
| 118 |  Q
 | 
|---|