source: FOIAVistA/tag/r/IMAGING-MAG-ZMAG/MAGGSIUI.m@ 1154

Last change on this file since 1154 was 636, checked in by George Lilly, 15 years ago

WorldVistAEHR overlayed on FOIAVistA

File size: 7.9 KB
Line 
1MAGGSIUI ;WOIFO/GEK - Utilities for Image Import API
2 ;;3.0;IMAGING;**7,8,48,20,85**;16-March-2007;;Build 1039
3 ;; Per VHA Directive 2004-038, this routine should not be modified.
4 ;; +---------------------------------------------------------------+
5 ;; | Property of the US Government. |
6 ;; | No permission to copy or redistribute this software is given. |
7 ;; | Use of unreleased versions of this software requires the user |
8 ;; | to execute a written test agreement with the VistA Imaging |
9 ;; | Development Office of the Department of Veterans Affairs, |
10 ;; | telephone (301) 734-0100. |
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 Q
19REMOTE(MAGRY,MAGDATA) ;RPC [MAG4 REMOTE IMPORT]
20 ; Import Images from a Windows App, by sending an array.
21 I ($D(MAGDATA)<10) S MAGRY(0)="0^Missing Data Array !." Q
22 N I,J,ICT,DCT,MAGIX,IMAGES,ERR,X,Z
23 S (ERR,ICT,DCT)=0
24 S I="" F S I=$O(MAGDATA(I)) Q:I="" S X=MAGDATA(I) D Q:ERR
25 . S Z=$P(X,U)
26 . I (X="")!(Z="") S MAGRY(0)="0^INVALID Data in Input Array: Node "_I_"="""_X_"",ERR=1 Q
27 . I Z="IMAGE" S ICT=ICT+1,IMAGES(ICT)=$P(X,U,2,99) Q
28 . S DCT=DCT+1,MAGIX(Z)=$P(X,U,2,99)
29 I 'ERR D IMPORT(.MAGRY,.IMAGES,.MAGIX)
30 Q
31 ;
32IMPORT(MAGRY,IMAGES,MAGIX) ;
33 ; "IDFN","PXPKG","PXIEN","PXDT","TRKID","ACQD","ACQS","ACQL","STSCB","ITYPE",
34 ; "CMTH","CDUZ","USERNAME","PASSWORD","GDESC","DFLG","TRTYPE","DOCCTG","DOCDT",
35 ; "IXTYPE","IXSPEC","IXPROC","IXORIGIN ;Patch 8: Added Index fields
36 ;
37 ;Index fields Package, Class ("IXPKG" and "IXCLS") aren't accepted
38 ; they are computed values.
39 ; - Convert field codes into an Input Data Array,
40 ; validate, then set the Import Queue
41 ;
42 N $ETRAP,$ESTACK S $ETRAP="D ERR^"_$T(+0)
43 K MAGRY S MAGRY(0)="0^Importing data..."
44 N APISESS,MWIN
45 S MWIN=$$BROKER^XWBLIB
46 N PRM,CT,MAGA,MAGY,MAGTN,TNODE
47 N IDFN,PXPKG,PXIEN,PXDT,TRKID,ACQD,ACQS,ACQN,ACQL,STSCB,ITYPE,CMTH,CDUZ,USERNAME,PASSWORD
48 N GDESC,DFLG,TRTYPE,DOCCTG,DOCDT,IXPKG,IXCLS,IXTYPE,IXSPEC,IXPROC,IXORIGIN,MAX,SITEPLC
49 N ERR,MAGTM,QTIME,MAGIXZ
50 S CT=0,ERR=0
51 M MAGIXZ=MAGIX
52 ; DON'T CONVERT ACQS(really a ACQN) to a REAL ACQS, leave it ACQS to be converted by MAGGSIV
53 ;
54 F PRM="IDFN","PXPKG","PXIEN","PXDT","TRKID","ACQD","ACQS","ACQN","ACQL","STSCB","ITYPE","CMTH","CDUZ","USERNAME","PASSWORD","GDESC","DFLG","TRTYPE","DOCCTG","DOCDT","IXTYPE","IXSPEC","IXPROC","IXORIGIN" D
55 . S @PRM=$G(MAGIX(PRM)) K MAGIX(PRM) ; P8T14 added K.. and next line to account for field numbers later.
56 . Q
57 S PRM="" F S PRM=$O(MAGIX(PRM)) Q:PRM="" D SA(PRM,$G(MAGIX(PRM)))
58 ;
59 S MAGTM=$$NOW^XLFDT
60 I '$G(DUZ) S MAGRY(0)="0^DUZ is undefined." Q ;D ERRTRK Q
61 ; DATATRK sets Global var. APISESS = IEN of Session File.
62 D DATATRK
63 I '$$REQPARAM^MAGGSIU2() D ERRTRK Q
64 S MAX=$P(TRKID,";",1)="MAX"
65 ;I 'MWIN W !,"----------------" ZW W !,"---------------------"
66 ; Workaround VIC (Maximus) is sending Station Number
67 ; we'll convert to Institution IEN
68 I MAX&(ACQS]"") D Q:ERR
69 . S X=$O(^DIC(4,"D",ACQS,""))
70 . I X="" S MAGRY(0)="0^Invalid Station Number:(Maximus ACQS): "_ACQS,ERR=1 Q
71 . S SITEPLC=X ; We need the Place for the Queue
72 . ;S ACQS=X Out in 85. Don't change to ACQS, that's done in VAL^MAGGSIV
73 . Q
74 ; Change to Allow ACQN - STATION NUMBER from INSTITUTION File.
75 I $L(ACQN) D Q:ERR
76 . S ACQS=$O(^DIC(4,"D",ACQN,""))
77 . I ACQS="" S MAGRY(0)="0^Invalid STATION NUMBER: (ACQN): "_ACQN,ERR=1 Q
78 . ; VAL^MAGGSIV Will fail if ACQS is real and this is Maximus
79 . I MAX S ACQS=ACQN K ACQN Q
80 . S ACQN="" ;We converted to ACQS, lets make "" so no confusion later.
81 . Q
82 ;
83 ; Set the input data array
84 D SA(5,IDFN) ;PATIENT
85 D SA(16,PXPKG) ;PARENT DATA FILE
86 D SA(17,PXIEN) ;PARENT GLOBAL ROOT
87 D SA(15,PXDT) ; PROCEDURE/EXAM DATE/TIME
88 D SA(108,TRKID) ; TRACKING ID (new)
89 D SA("ACQD",ACQD) ; ACQUISTION DEVICE ( new )
90 I 'MAX S SITEPLC=ACQS D SA(.05,ACQS) ; this used to be fld 105
91 D SA(101,ACQL)
92 D SA("STATUSCB",STSCB) ; STATUS CALLBACK (was referred to as ExceptionHandler)
93 D SA(3,ITYPE) ; OBJECT TYPE
94 D SA("CALLMTH",CMTH) ; CALL METHOD
95 D SA(8,CDUZ) ; IMAGE SAVE BY
96 D SA("USERNAME",USERNAME)
97 D SA("PASSWORD",PASSWORD)
98 D SA(10,GDESC) ; SHORT DESCRIPTION
99 D SA("DELFLAG",DFLG) ; DELETE FLAG
100 D SA("TRNSTYP",TRTYPE) ; TRANSACTION TYPE
101 D SA(100,DOCCTG) ; document Main category
102 D SA(110,DOCDT) ; document date
103 ; Patch 8 allows Index fields to be imported.
104 ;"IXTYPE","IXSPEC","IXPROC","IXORIGIN"
105 D SA(42,IXTYPE) ; Index Type
106 D SA(43,IXPROC) ; Index Proc/Event
107 D SA(44,IXSPEC) ; Index Spec/SubSpec
108 D SA(45,IXORIGIN) ; Index Origin
109 ;
110 D VAL^MAGGSIV(.MAGRY,.MAGA,1) I 'MAGRY(0) D ERRTRK Q
111 I MAX D SA(.05,ACQS) ; this used to be fld 105
112 ; Also Done in MAGGSIA when image is being Saved.
113 I '$$VALINDEX^MAGGSIV1(.MAGRY,IXTYPE,IXSPEC,IXPROC) D ERRTRK Q
114 ; Array of Images to Import
115 D SI("IMAGES",.IMAGES) I 'MAGRY(0) D ERRTRK Q
116 K MAGRY
117 ;
118 I TRTYPE="NOQUEUE" M MAGRY=MAGA S MAGRY(0)="1^" Q
119 ; This call is for BP
120 S QTIME=$$NOW^XLFDT
121 ; p85 use ACQS instead of DUZ(2)
122 S MAGY=$$IMPORT^MAGBAPI(.MAGA,STSCB,TRKID,$$PLACE^MAGBAPI(SITEPLC))
123 ; Return Queue Number
124 I 'MAGY S MAGRY(0)="0^Error Setting Queue: "_$P(MAGY,U,2),MAGY=TRKID
125 E S MAGRY(0)=MAGY_"^Data has been Queued.",MAGY=+MAGY
126 ; for Testing, we'll track input array, and results array by Queue number.
127 I 'MAGRY(0) D ERRTRK Q
128 D LOGRES^MAGGSIU3(.MAGRY,0,APISESS)
129 ;
130 Q
131 ;
132SA(FLD,VAL) ;Set the data array with Fld,Value
133 Q:VAL=""
134 S CT=CT+1,MAGA(CT)=FLD_U_VAL
135 Q
136SI(FLD,ARR) ;Set the images into the data array
137 ; 'CT' is a global variable.
138 S MAGRY(0)="1^Valid Image file Extensions."
139 N I,MAGEXT,MAGFN
140 S I="" F S I=$O(ARR(I)) Q:I="" D Q:'MAGRY(0)
141 . S CT=CT+1
142 . I ($L($P(ARR(I),U),".")<2) S MAGRY(0)="0^Invalid file name: "_ARR(I) Q
143 . S MAGFN=$P(ARR(I),"^")
144 . S MAGEXT=$$UP^XLFSTR($P(MAGFN,".",$L(MAGFN,".")))
145 . I '$D(^MAG(2005.021,"B",MAGEXT)) S MAGRY(0)="0^Unsupported File Type:'."_MAGEXT Q
146 . S MAGA(CT)="IMAGE"_U_ARR(I)
147 Q
148GETARR(ARR,QNUM) ;RPC [MAG4 DATA FROM IMPORT QUEUE]
149 ; Get the Input Array from Queue Number
150 I '$G(QNUM) S ARR(0)="0^INVALID QUEUE Number: "_$G(QNUM) Q
151 D IMPAR^MAGQBUT2(.ARR,QNUM)
152 Q
153STATUSCB(MAGRY,STAT,TAGRTN,DOCB) ;RPC [MAG4 STATUS CALLBACK]
154 ; Report Status to calling application
155 ; Now the IAPI and OCX make this call. Not BP
156 ; STAT(0)= "0^message" or "1^message"
157 ; STAT(1)=TRKID,
158 ; (2)=QNUM
159 ; (3..N)=warnings
160 ;TAGRTN : The TAG^RTN to call with Status Array
161 ;DOCB : (1|0) to suppress execution of Status Callback
162 ;
163 N APISESS,TRKID,CBMSG
164 S DOCB=$S($G(DOCB)="":1,1:+$G(DOCB)) ; Default to TRUE
165 ; Old Import API and BP that made this call, will work : DOCB defaults to 1
166 S CBMSG=$S(DOCB:"Status Callback was called",1:"Status Callback was NOT called")
167 I DOCB D @(TAGRTN_"(.STAT)")
168 S MAGRY="1^"_CBMSG
169 S STAT($O(STAT(""),-1)+1)=MAGRY
170 S TRKID=$G(STAT(1))
171 ; Log Results. Always.
172 I $L(TRKID) D
173 . S APISESS=$$SES4TRK^MAGGSIU3(TRKID) ;
174 . I APISESS D LOGRES^MAGGSIU3(.STAT,0,APISESS) ;gek/send Tracking ID to log status
175 Q
176TESTCB(STATARR) ;TESTING. This is the Status Callback for testing.
177 ; the STATUSCB property must have a Valid "M" TAG^ROUTINE
178 ; TAG TESTCB exists so that STATUSCB validates successfully
179 Q
180ERRTRK ;Track bad data and Quit
181 N I
182 D LOGERR^MAGGSERR("---- New Error ----",APISESS)
183 S I="" F S I=$O(MAGRY(I)) Q:I="" D LOGERR^MAGGSERR(MAGRY(I),APISESS)
184 Q
185DATATRK ; Track the raw data being sent to the Import API.
186 ; Log the data being imported. Results are logged later.
187 N XY
188 S APISESS=$$LOG^MAGGSIU3(.XY,.MAGIXZ,.IMAGES,IDFN,ACQD,TRKID)
189 Q
190ERR ; ERROR TRAP FOR Import API
191 N ERR S ERR=$$EC^%ZOSV
192 S MAGRY(0)="0^ETRAP: "_ERR
193 D @^%ZOSF("ERRTN")
194 I $G(APISESS) D ERRTRK
195 Q
Note: See TracBrowser for help on using the repository browser.