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
|
---|