| 1 | MAGGTIG ;WOIFO/GEK - MAGGT Image Get. Callbacks to Get Image lists ; [ 11/08/2001 17:18 ] | 
|---|
| 2 | ;;3.0;IMAGING;**8,48**;Jan 11, 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 | Q | 
|---|
| 19 | GRPCOUNT(MAGRY,MAGIEN) ; | 
|---|
| 20 | S MAGRY=+$P($G(^MAG(2005,MAGIEN,1,0)),U,4) | 
|---|
| 21 | Q | 
|---|
| 22 | IMAGES(MAGRY,MAGDFN) ;RPC [MAGG PAT IMAGES] | 
|---|
| 23 | ;  Call to return a list of images for a patient. | 
|---|
| 24 | ;   We are returning all images for a patient, Groups are returned | 
|---|
| 25 | ;   as one Image. | 
|---|
| 26 | ;   The Images are returned in Rev Chronological Order, latest image | 
|---|
| 27 | ;   first, oldest image last. | 
|---|
| 28 | ;   User can reorder at the workstation level. | 
|---|
| 29 | K MAGRY | 
|---|
| 30 | N Y,RDT,PRX,CT,IEN,GBLRET | 
|---|
| 31 | N $ETRAP,$ESTACK S $ETRAP="D ERRA^MAGGTERR" | 
|---|
| 32 | S MAGDFN=+MAGDFN | 
|---|
| 33 | ;  if no Images for the patient, then quit. | 
|---|
| 34 | I '$D(^MAG(2005,"APDTPX",MAGDFN)) S MAGRY(0)="1^0" Q | 
|---|
| 35 | ;   the "APDTPX" cross reference is : | 
|---|
| 36 | ;     "APDTPX",DFN,Rev Date,Procedure,MAGIEN ) | 
|---|
| 37 | ; | 
|---|
| 38 | ;  we'll use @ notation, this'll work if an Array or a Global Array is begin returned | 
|---|
| 39 | S GBLRET=0 | 
|---|
| 40 | S MAGRY="MAGRY" | 
|---|
| 41 | S CT=0,RDT="" | 
|---|
| 42 | F  S RDT=$O(^MAG(2005,"APDTPX",MAGDFN,RDT)) Q:'RDT  D | 
|---|
| 43 | . S PRX="" F  S PRX=$O(^MAG(2005,"APDTPX",MAGDFN,RDT,PRX)) Q:PRX=""  D | 
|---|
| 44 | . . S IEN="" | 
|---|
| 45 | . . F  S IEN=$O(^MAG(2005,"APDTPX",MAGDFN,RDT,PRX,IEN)) Q:'IEN  D | 
|---|
| 46 | . . . Q:$P($G(^MAG(2005,IEN,0)),"^",10)  ; CHILD OF GROUP | 
|---|
| 47 | . . . S CT=CT+1 | 
|---|
| 48 | . . . I (CT>100),'GBLRET D ARY2GLB | 
|---|
| 49 | . . . S MAGXX=IEN D INFO^MAGGTII | 
|---|
| 50 | . . . S @MAGRY@(CT)="B2^"_MAGFILE | 
|---|
| 51 | S @MAGRY@(0)="1^"_CT | 
|---|
| 52 | Q | 
|---|
| 53 | PHOTOS(MAGRY,MAGDFN) ;RPC [MAGG PAT PHOTOS] | 
|---|
| 54 | ; Call to return list of all Photo ID's on file for a patient. | 
|---|
| 55 | ;   We are returning all Photo ID images for a patient. | 
|---|
| 56 | ;   The Images are returned in Rev Chronological Order, latest image | 
|---|
| 57 | ;   first, oldest image last. | 
|---|
| 58 | K MAGRY | 
|---|
| 59 | N Y,RDT,PRX,CT,IEN,IENS,GBLRET,MAGXX | 
|---|
| 60 | N $ETRAP,$ESTACK S $ETRAP="D ERRA^MAGGTERR" | 
|---|
| 61 | S MAGDFN=+MAGDFN | 
|---|
| 62 | ;  if no Photo ID Images for the patient, then quit. | 
|---|
| 63 | I '$D(^MAG(2005,"APPXDT",MAGDFN,"PHOTO ID")) S MAGRY(0)="1^0" Q | 
|---|
| 64 | ;   the "APPXDT" cross reference is : | 
|---|
| 65 | ;     "APPXDT",DFN,Procedure,Rev Date,MAGIEN ) | 
|---|
| 66 | ; | 
|---|
| 67 | ;  we'll use @ notation, this'll work if an Array or a Global Array is begin returned | 
|---|
| 68 | S GBLRET=0 | 
|---|
| 69 | S MAGRY="MAGRY" | 
|---|
| 70 | S CT=0 | 
|---|
| 71 | S RDT="" F  S RDT=$O(^MAG(2005,"APPXDT",MAGDFN,"PHOTO ID",RDT)) Q:RDT=""  D | 
|---|
| 72 | . S IEN="" | 
|---|
| 73 | . F  S IEN=$O(^MAG(2005,"APPXDT",MAGDFN,"PHOTO ID",RDT,IEN)) Q:'IEN  D | 
|---|
| 74 | . . ;Q:$P($G(^MAG(2005,IEN,0)),"^",10)  ; CHILD OF GROUP | 
|---|
| 75 | . . S IENS(IEN)="" | 
|---|
| 76 | . . Q | 
|---|
| 77 | . Q | 
|---|
| 78 | S IEN="" F  S IEN=$O(IENS(IEN),-1) Q:'IEN  D | 
|---|
| 79 | . S CT=CT+1 | 
|---|
| 80 | . S MAGXX=IEN D INFO^MAGGTII | 
|---|
| 81 | . S @MAGRY@(CT)="B2^"_MAGFILE | 
|---|
| 82 | . Q | 
|---|
| 83 | S @MAGRY@(0)="1^"_CT | 
|---|
| 84 | Q | 
|---|
| 85 | EACHIMG(MAGRY,MAGDFN,MAX) ;RPC [MAGG PAT EACH IMAGE] | 
|---|
| 86 | ; Call Returns list of recent Patient images. | 
|---|
| 87 | ;   MAX = maximum number of images to return | 
|---|
| 88 | ;   MAGDFN = patient DFN | 
|---|
| 89 | ;   We are returning all images for a patient, and listing each image. | 
|---|
| 90 | ;   This is called from Capture Window where groups aren't listed. | 
|---|
| 91 | ;   The Images are returned in Rev Chronological Order, latest image | 
|---|
| 92 | ;   first, oldest image last. | 
|---|
| 93 | ;   User can decide how many of the most recent they want to list. | 
|---|
| 94 | K MAGRY | 
|---|
| 95 | N Y,RDT,PRX,CT,IEN,GBLRET | 
|---|
| 96 | S MAX=$S($G(MAX)>0:MAX,1:50) ; 50 IS DEFAULT | 
|---|
| 97 | N $ETRAP,$ESTACK S $ETRAP="D ERRG^MAGGTERR" | 
|---|
| 98 | S MAGDFN=+MAGDFN | 
|---|
| 99 | ;  if no Images for the patient, then quit. | 
|---|
| 100 | I '$D(^MAG(2005,"AC",MAGDFN)) S MAGRY(0)="1^0" Q | 
|---|
| 101 | ;   the "AC" cross reference is : | 
|---|
| 102 | ;     "AC",DFN,IEN ) | 
|---|
| 103 | ; | 
|---|
| 104 | ;  we'll use @ notation, this'll work if an Array or a Global Array is begin returned | 
|---|
| 105 | S GBLRET=0 | 
|---|
| 106 | S MAGRY="MAGRY" | 
|---|
| 107 | S CT=0,IEN="" | 
|---|
| 108 | F  S IEN=$O(^MAG(2005,"AC",MAGDFN,IEN),-1) Q:'IEN  D  Q:(CT>MAX) | 
|---|
| 109 | . Q:$P($G(^MAG(2005,IEN,0)),U,6)=11  ; NOT LISTING GROUP ENTRIES | 
|---|
| 110 | . S CT=CT+1 | 
|---|
| 111 | . I (CT>100),'GBLRET D ARY2GLB | 
|---|
| 112 | . S @MAGRY@(CT)=$$CAPINFO(IEN) | 
|---|
| 113 | S @MAGRY@(0)="1^"_CT | 
|---|
| 114 | Q | 
|---|
| 115 | CAPINFO(IEN) ; RETURN A STRING OF INFORMATION ABOUT THE IMAGE | 
|---|
| 116 | ; This is for Capture App | 
|---|
| 117 | N RETY,N2 | 
|---|
| 118 | S MAGXX=IEN D INFO^MAGGTII | 
|---|
| 119 | S RETY=$P(MAGFILE,U,1,7)_U | 
|---|
| 120 | S N2=$G(^MAG(2005,IEN,2)) | 
|---|
| 121 | S RETY=RETY_$$FMTE^XLFDT($P(N2,U,1),"5P")_U | 
|---|
| 122 | S X=$P(RETY,U,5),X=$$FMTE^XLFDT(X,"5"),X=$P(X,"@") | 
|---|
| 123 | S $P(RETY,U,5)=X | 
|---|
| 124 | Q RETY | 
|---|
| 125 | Q | 
|---|
| 126 | ARY2GLB ; Image count is getting big, switch from array to Global return type | 
|---|
| 127 | S GBLRET=1 | 
|---|
| 128 | K ^TMP("MAGGTIG",$J) | 
|---|
| 129 | S MAGRY="" | 
|---|
| 130 | M ^TMP("MAGGTIG",$J)=MAGRY | 
|---|
| 131 | K MAGRY | 
|---|
| 132 | S X=$$RTRNFMT^XWBLIB("GLOBAL ARRAY",1) | 
|---|
| 133 | S MAGRY=$NA(^TMP("MAGGTIG",$J)) | 
|---|
| 134 | Q | 
|---|
| 135 | GROUP(MAGRY,MAGIEN,NOCHK) ;RPC [MAGG GROUP IMAGES] | 
|---|
| 136 | ; CalL to Return image list of a Group. | 
|---|
| 137 | ; MAGIEN        =  the entry in MAG(2005 we assume it is a group. | 
|---|
| 138 | ; NOCHK         =  flag - Do (or) Not Do QI Check. | 
|---|
| 139 | N Y,MAGDFN,I,MAGCHILD,MAGCT,MAGTMPAR,MSGX,MAGQI,MAGY | 
|---|
| 140 | N MAGNOCHK | 
|---|
| 141 | ; | 
|---|
| 142 | ;Test BigGroup S BKG=+$G(BKG) | 
|---|
| 143 | ;Test BigGroup K ^TMP("MAGBGRP") | 
|---|
| 144 | S MAGIEN=+MAGIEN,MSGX="" | 
|---|
| 145 | S NOCHK=+$G(NOCHK) | 
|---|
| 146 | I '$D(^MAG(2005,MAGIEN,0)) S MAGRY(0)="0^ERROR: Image entry "_MAGIEN_" Doesn't exist" Q | 
|---|
| 147 | I $O(^MAG(2005,MAGIEN,1,0))="" S MAGRY(0)="0^ERROR: There are NO Images defined for this Group" Q | 
|---|
| 148 | ; | 
|---|
| 149 | ;  we'll use @ notation, this'll work if an Array or a Global Array is being returned | 
|---|
| 150 | S MAGRY="MAGRY" | 
|---|
| 151 | ; | 
|---|
| 152 | ;  if we are switching to a Global Array because too many images, | 
|---|
| 153 | ;  then set MAGRY and clean it up first | 
|---|
| 154 | ;I +$P($G(^MAG(2005,MAGIEN,1,0)),U,4)>100 | 
|---|
| 155 | D | 
|---|
| 156 | . S X=$$RTRNFMT^XWBLIB("GLOBAL ARRAY",1) | 
|---|
| 157 | . S MAGRY=$NA(^TMP("MAGGTIG",$J)) | 
|---|
| 158 | . K @MAGRY | 
|---|
| 159 | N $ETRAP,$ESTACK S $ETRAP="D ERRA^MAGGTERR" | 
|---|
| 160 | ; | 
|---|
| 161 | ;Test BigGroup I $D(^TMP("MAGBGRP",MAGIEN)) D  Q | 
|---|
| 162 | ;Test BigGroup . M ^TMP("MAGGTIG",$J)=^TMP("MAGBGRP",MAGIEN) | 
|---|
| 163 | ;Test BigGroup . Q | 
|---|
| 164 | ; integrity check, stop if group entry is questionable | 
|---|
| 165 | ;  NOCHK is sent from Image Delete window (so user with DELETE and SYSTEM keys) | 
|---|
| 166 | ;    can see group abstracts before the group is deleted. | 
|---|
| 167 | I 'NOCHK D CHK^MAGGSQI(.MAGQI,MAGIEN) I 'MAGQI(0) D  Q | 
|---|
| 168 | . S @MAGRY@(0)=MAGQI(0) | 
|---|
| 169 | ; | 
|---|
| 170 | S MAGNOCHK=1 | 
|---|
| 171 | S I=0,MAGCT=0,MAGDFN=$P(^MAG(2005,MAGIEN,0),"^",7) | 
|---|
| 172 | I $D(^MAG(2005,MAGIEN,1,"ADCM")) D | 
|---|
| 173 | . N INUM,SNUM | 
|---|
| 174 | . S INUM="" ; GEK 4/3/00  changed Q:'INUM  to  Q:INUM="" below | 
|---|
| 175 | . F  S INUM=$O(^MAG(2005,MAGIEN,1,"ADCM",INUM)) Q:INUM=""  D | 
|---|
| 176 | . . S SNUM="" | 
|---|
| 177 | . . F  S SNUM=$O(^MAG(2005,MAGIEN,1,"ADCM",INUM,SNUM)) Q:SNUM=""  D | 
|---|
| 178 | . . . S MAGCHILD="" | 
|---|
| 179 | . . . F  S MAGCHILD=$O(^MAG(2005,MAGIEN,1,"ADCM",INUM,SNUM,MAGCHILD)) Q:'MAGCHILD  D | 
|---|
| 180 | . . . . S MAGCT=MAGCT+1 | 
|---|
| 181 | . . . . I '$D(^MAG(2005,MAGCHILD)) D INVALID(MAGCHILD,.MSGX) S @MAGRY@(MAGCT)=MSGX Q | 
|---|
| 182 | . . . . ; Added for MAGQI integrity check | 
|---|
| 183 | . . . . K MAGY | 
|---|
| 184 | . . . . D CHKGRPCH^MAGGSQI(.MAGY,MAGIEN,MAGDFN,MAGCHILD) I 'MAGY D INVCH(.MAGY,MAGCHILD) S @MAGRY@(MAGCT)=MAGY Q | 
|---|
| 185 | . . . . S MAGXX=MAGCHILD | 
|---|
| 186 | . . . . S MAGTMPAR(MAGXX)="" | 
|---|
| 187 | . . . . D INFO^MAGGTII | 
|---|
| 188 | . . . . S $P(MAGFILE,U,12,13)=INUM_U_SNUM | 
|---|
| 189 | . . . . S @MAGRY@(MAGCT)="B2^"_MAGFILE | 
|---|
| 190 | . . . . ;Test BigGroup I 'BKG S @MAGRY@(MAGCT)="B2^"_MAGFILE | 
|---|
| 191 | . . . . ;Test BigGroup E  S ^TMP("MAGBGRP",MAGIEN,MAGCT)="B2^"_MAGFILE | 
|---|
| 192 | ;GEK 4/8/99 MODIFIED, because now we have groups, that some entries | 
|---|
| 193 | ;                     have dicom numbers and some don't.  So we have to go through the group again. | 
|---|
| 194 | ;Test BigGroup - Need a Pre/Post init, that fixes Groups where some entries have Dicom values, and some | 
|---|
| 195 | ;         don't.  In such a group, we will make Dicom values for the images that don't have them. | 
|---|
| 196 | ;         Testing in Washington - this will take hours. | 
|---|
| 197 | ; | 
|---|
| 198 | S I=0 | 
|---|
| 199 | F  S I=$O(^MAG(2005,MAGIEN,1,I)) Q:'I  D | 
|---|
| 200 | . S MAGCHILD=+^MAG(2005,MAGIEN,1,I,0) | 
|---|
| 201 | . I $D(MAGTMPAR(MAGCHILD)) Q | 
|---|
| 202 | . S MAGCT=MAGCT+1 | 
|---|
| 203 | . I '$D(^MAG(2005,MAGCHILD)) D INVALID(MAGCHILD,.MSGX) S @MAGRY@(MAGCT)=MSGX Q | 
|---|
| 204 | . ;Added for MAGQI integrity check | 
|---|
| 205 | . K MAGY | 
|---|
| 206 | . D CHKGRPCH^MAGGSQI(.MAGY,MAGIEN,MAGDFN,MAGCHILD) I 'MAGY D INVCH(.MAGY,MAGCHILD) S @MAGRY@(MAGCT)=MAGY Q | 
|---|
| 207 | . S MAGXX=MAGCHILD | 
|---|
| 208 | . D INFO^MAGGTII | 
|---|
| 209 | . S @MAGRY@(MAGCT)="B2^"_MAGFILE | 
|---|
| 210 | . ;Test BigGroup        I 'BKG S @MAGRY@(MAGCT)="B2^"_MAGFILE | 
|---|
| 211 | . ;Test BigGroup        E  S ^TMP("MAGBGRP",MAGIEN,MAGCT)="B2^"_MAGFILE | 
|---|
| 212 | S @MAGRY@(0)="1^"_MAGCT | 
|---|
| 213 | Q | 
|---|
| 214 | INVALID(MAGX,MAGZ) ; | 
|---|
| 215 | ; | 
|---|
| 216 | I $D(^MAG(2005.1,MAGX,0)) S MAGZ="B2^"_MAGX_"^^^INVALID Reference to Deleted Image^^66^^^^^^^^" | 
|---|
| 217 | E  S MAGZ="B2^"_MAGX_"^^^INVALID Image ID (IEN)^^67^^^^^^^^" | 
|---|
| 218 | ;Added with MAGQI integrity check, | 
|---|
| 219 | S MAGTMPAR(MAGX)="" | 
|---|
| 220 | Q | 
|---|
| 221 | INVCH(MSG,CHILD) ;Added for MAGQI integrity check | 
|---|
| 222 | ; MSG is passed by reference, we create a MAGFILE equivalent and pass it back. | 
|---|
| 223 | N EMSG | 
|---|
| 224 | S EMSG=$P(MSG,U,2) | 
|---|
| 225 | K MSG | 
|---|
| 226 | S $P(MSG,U)=CHILD | 
|---|
| 227 | ; remove dependency on c:\program files.   with   .\bmp\ | 
|---|
| 228 | S $P(MSG,U,2,3)="-1~Questionable Data Integrity^.\bmp\imageQA.bmp" | 
|---|
| 229 | S $P(MSG,U,4)=$P($G(^MAG(2005,CHILD,2)),U,4) | 
|---|
| 230 | S $P(MSG,U,6)=$S(($P(MSG,U,6)'=11):"99",1:11) | 
|---|
| 231 | ;this stops Delphi App from changing Abstract BMP to OFFLINE IMAGE | 
|---|
| 232 | S $P(MSG,U,10)="M" | 
|---|
| 233 | ;Send the error message | 
|---|
| 234 | S $P(MSG,U,17)=EMSG | 
|---|
| 235 | S MSG="B2^"_MSG | 
|---|
| 236 | S MAGTMPAR(CHILD)="" | 
|---|
| 237 | Q | 
|---|