[613] | 1 | MAGJEX3 ;WIRMFO/JHC VistaRad RPCs-Get PS & KEY Img data ; 1 Nov 2004 10:05 AM
|
---|
| 2 | ;;3.0;IMAGING;**18**;Mar 07, 2006
|
---|
| 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 | ERR N ERR S ERR=$$EC^%ZOSV S @MAGGRY@(0)="0^4~"_ERR
|
---|
| 20 | D @^%ZOSF("ERRTN")
|
---|
| 21 | Q:$Q 1 Q
|
---|
| 22 | ;
|
---|
| 23 | RPCIN(MAGGRY,PARAMS,DATA) ; RPC: MAGJ STUDY_DATA
|
---|
| 24 | ; Retrieve Key Image and/or Presentation State data for an Exam
|
---|
| 25 | ; PARAMS--TXID ^ DFN ^ DTI ^ CNI ^ RARPT ^ MAGIEN ^ PSDETAIL
|
---|
| 26 | ; TXID: Required; designates action to take:
|
---|
| 27 | ; 1 -- Key Image only
|
---|
| 28 | ; 2 -- Interp Images only
|
---|
| 29 | ; 3 -- Key and Interp Images
|
---|
| 30 | ; 4 -- PS data for input (in DATA): ImgIEN & PS_UID or PS_Indicators
|
---|
| 31 | ;
|
---|
| 32 | ; For TXID 1, 2, 3 either RARPT or MAGIEN is required to identify the exam
|
---|
| 33 | ; PSDETAIL--1/0; 1=Include PS data for above
|
---|
| 34 | ; RARPT--Rad report pointer; IMGIEN--can be Image or Group IEN
|
---|
| 35 | ; DATA--required for TXID=4 --array of input DATA: IMGIEN ^ [PSUID] ^ [PSIND]
|
---|
| 36 | ; If both PSUID and PSIND appear, the PSIND is IGNORED
|
---|
| 37 | ;
|
---|
| 38 | ; Results returned in @MAGGRY
|
---|
| 39 | ;
|
---|
| 40 | N $ETRAP,$ESTACK S $ETRAP="D ERR^MAGJEX3"
|
---|
| 41 | N REPLY,MAGLST,DIQUIET,TXID,RARPT,MAGIEN,STIEN,IMGIEN,PSUID,PSIND
|
---|
| 42 | N PSDETAIL,COUNTS,IMGCT,KEYCT,PSCT,INTCT,STRPT,KEYINT,PSLS,CT
|
---|
| 43 | S MAGLST="MAGJRPC" K MAGGRY S MAGGRY=$NA(^TMP($J,MAGLST)) K @MAGGRY
|
---|
| 44 | ; Note--return data is stored with indirection references to MAGGRY
|
---|
| 45 | S DIQUIET=1 D DT^DICRW
|
---|
| 46 | S TXID=+PARAMS,STRPT=""
|
---|
| 47 | I '(TXID>0&(TXID<5)) S REPLY="0~Invalid transaction (TX="_TXID_") requested by MAGJ STUDYDATA rpc call." G RPCINZ
|
---|
| 48 | S RARPT=$P(PARAMS,U,5),MAGIEN=$P(PARAMS,U,6),PSDETAIL=+$P(PARAMS,U,7)
|
---|
| 49 | S CT=0,PSCT=0
|
---|
| 50 | I TXID<4 D G RPCINZ
|
---|
| 51 | . S STIEN=$$STUDYID^MAGJUPD2(MAGIEN,RARPT,1)
|
---|
| 52 | . S STRPT=$S(RARPT:RARPT,1:$P($$GETRPT^MAGJUPD2(MAGIEN),U))
|
---|
| 53 | . I TXID=3 S KEYINT="KI" ; Key & Interp Images
|
---|
| 54 | . E I TXID=1 S KEYINT="K" ; Key Images
|
---|
| 55 | . E I TXID=2 S KEYINT="I" ; Interp Images
|
---|
| 56 | . D GETDAT("PSLS",STIEN,KEYINT)
|
---|
| 57 | . D GETKEY("@MAGGRY",.CT,PSDETAIL,.COUNTS)
|
---|
| 58 | . S IMGCT=+COUNTS,KEYCT=+$P(COUNTS,U,2),INTCT=+$P(COUNTS,U,3),PSCT=+$P(COUNTS,U,4)
|
---|
| 59 | . I 'KEYCT,'INTCT S REPLY="1~No Key/Interpretation Images defined for exam." Q
|
---|
| 60 | . S REPLY=1_"~: "
|
---|
| 61 | . S REPLY=REPLY_PSCT_" PS def"_$S(PSCT-1:"s",1:"")_" for "
|
---|
| 62 | . S REPLY=REPLY_KEYCT_" Key Image"_$S(KEYCT-1:"s",1:"")_"; "_INTCT_" Interpretation Image"_$S(INTCT-1:"s",1:"")_"; "_IMGCT_" Image"_$S(IMGCT-1:"s",1:"")_" checked."
|
---|
| 63 | ;
|
---|
| 64 | I TXID=4 D ; PS data for input ImgIEN & PS_UID or PS_Inds
|
---|
| 65 | . S IDATA="",IMGCT=0
|
---|
| 66 | . F S IDATA=$O(DATA(IDATA)) Q:IDATA="" S X=DATA(IDATA) I X]"" D
|
---|
| 67 | . . S IMGIEN=$P(X,U),PSUID=$P(X,U,2),PSIND=$P(X,U,3),IMGCT=IMGCT+1,COUNTS=0
|
---|
| 68 | . . I PSUID]"" S PSIND="" ; ignore psind if uid is supplied
|
---|
| 69 | . . I 'STRPT S STRPT=$P($$GETRPT^MAGJUPD2(IMGIEN),U)
|
---|
| 70 | . . E I STRPT'=$P($$GETRPT^MAGJUPD2(IMGIEN),U) Q ; don't intermix diff. studies, but continue
|
---|
| 71 | . . I '((PSUID]""!(PSIND]""))&IMGIEN) S REPLY="0~For MAGJ STUDYDATA (TX="_TXID_") invalid params passed to rpc call." Q
|
---|
| 72 | . . I PSUID]"" D GETPSID1("@MAGGRY",.CT,IMGIEN,PSUID,.COUNTS)
|
---|
| 73 | . . E I PSIND]"" D GETPSID2("@MAGGRY",.CT,IMGIEN,PSIND,.COUNTS)
|
---|
| 74 | . . S PSCT=PSCT+COUNTS
|
---|
| 75 | . . S REPLY=1_"~: "_PSCT_" PS def"_$S(PSCT-1:"s",1:"")_" for "_IMGCT_" Image"_$S(IMGCT-1:"s",1:"")_" checked."
|
---|
| 76 | RPCINZ S @MAGGRY@(0)=CT_U_REPLY
|
---|
| 77 | Q
|
---|
| 78 | ;
|
---|
| 79 | GETKEY(RET,CT,PSFLAG,COUNTS) ; Get Key images for study STIEN w/ PS refs
|
---|
| 80 | ; Results returned by indirection in array @RET, indexed by CT
|
---|
| 81 | ; if PSFLAG is true, return Pres State data
|
---|
| 82 | ; COUNTS contains ^-delim list of various counts (see below)
|
---|
| 83 | ;
|
---|
| 84 | N IMGIEN,UID,IMGCT,KEYCT,PSCT,INTCT,TYPE,IMGTRAK,LASTIMG,QREF
|
---|
| 85 | S CT=+$G(CT),PSFLAG=+$G(PSFLAG),(IMGCT,KEYCT,PSCT,INTCT)=0
|
---|
| 86 | I 'STIEN G GETKEYZ
|
---|
| 87 | S QREF="PSLS",LASTIMG=0
|
---|
| 88 | F S QREF=$Q(@QREF) Q:QREF="" S X=@QREF D
|
---|
| 89 | . S IMGIEN=+X,UID=$P(X,U,2),TYPE=$P(X,U,3)
|
---|
| 90 | . I IMGIEN'=LASTIMG D
|
---|
| 91 | . . I LASTIMG S CT=CT+1,@RET@(CT)="*END_IMAGE"
|
---|
| 92 | . . S CT=CT+1,@RET@(CT)="*IMAGE"
|
---|
| 93 | . . S CT=CT+1,@RET@(CT)=IMGIEN_U
|
---|
| 94 | . . S LASTIMG=IMGIEN S IMGCT=IMGCT+'$D(IMGTRAK(IMGIEN)),IMGTRAK(IMGIEN)=""
|
---|
| 95 | . Q:UID=""
|
---|
| 96 | . S CT=CT+1,@RET@(CT)="*PS",PSCT=PSCT+1
|
---|
| 97 | . S CT=CT+1,@RET@(CT)=UID_U_$S(TYPE="K":"KEY",TYPE="I":"INTERP",1:TYPE)
|
---|
| 98 | . I PSFLAG D GETPSDAT(.RET,.CT,IMGIEN,UID)
|
---|
| 99 | . S CT=CT+1,@RET@(CT)="*END_PS"
|
---|
| 100 | . I TYPE="K" S KEYCT=KEYCT+1
|
---|
| 101 | . I TYPE="I" S INTCT=INTCT+1
|
---|
| 102 | I LASTIMG S CT=CT+1,@RET@(CT)="*END_IMAGE"
|
---|
| 103 | GETKEYZ S COUNTS=IMGCT_U_KEYCT_U_INTCT_U_PSCT
|
---|
| 104 | Q
|
---|
| 105 | ;
|
---|
| 106 | ;
|
---|
| 107 | GETDAT(RET,STIEN,KEYINT) ; Get data for Key Interp images for study STIEN
|
---|
| 108 | ; Results returned by indirection in array @RET
|
---|
| 109 | N IMGIEN,UID,KIEN,PSIEN,STUDYREF,PSCT,TYPE,SEQNUM
|
---|
| 110 | S PSCT=0
|
---|
| 111 | I 'STIEN G GETDATZ
|
---|
| 112 | S STUDYREF=$NA(^MAG(2005.001,STIEN))
|
---|
| 113 | S KIEN=0
|
---|
| 114 | F S KIEN=$O(@STUDYREF@(1,KIEN)) Q:'KIEN S IMGIEN=$P($G(^(KIEN,0)),U),PSIEN=0 D
|
---|
| 115 | . F S PSIEN=$O(@STUDYREF@(1,KIEN,1,PSIEN)) Q:'PSIEN S X=$G(^(PSIEN,0)) D
|
---|
| 116 | . . S UID=$P(X,U),TYPE=$P(X,U,2),SEQNUM=$P(X,U,3),PSCT=PSCT+1
|
---|
| 117 | . . I UID]"" S:TYPE="" TYPE="I" S:SEQNUM="" SEQNUM=PSCT+10000
|
---|
| 118 | . . E Q
|
---|
| 119 | . . I TYPE="K",(KEYINT[TYPE) S @RET@(TYPE,SEQNUM,IMGIEN)=IMGIEN_U_UID_U_TYPE
|
---|
| 120 | . . I TYPE="I",(KEYINT[TYPE) S @RET@(TYPE,IMGIEN,SEQNUM)=IMGIEN_U_UID_U_TYPE
|
---|
| 121 | GETDATZ Q
|
---|
| 122 | ;
|
---|
| 123 | ;
|
---|
| 124 | GETPSDAT(RET,CT,IMGIEN,UID) ; Get PS text lines for input IMGIEN & UID
|
---|
| 125 | ; Results returned by indirection in array @RET, indexed by CT
|
---|
| 126 | ;
|
---|
| 127 | N IMGREF,UIDIEN,IEN
|
---|
| 128 | S CT=+$G(CT),UID=$G(UID)
|
---|
| 129 | I '(UID]""&IMGIEN) G GETPSDAZ
|
---|
| 130 | S IMGREF=$NA(^MAG(2005,IMGIEN))
|
---|
| 131 | S UIDIEN=$O(@IMGREF@(210,"B",UID,"")) Q:'UIDIEN S IEN=0 D
|
---|
| 132 | . F S IEN=$O(@IMGREF@(210,UIDIEN,1,IEN)) Q:'IEN S CT=CT+1,@RET@(CT)=^(IEN,0)
|
---|
| 133 | GETPSDAZ Q
|
---|
| 134 | ;
|
---|
| 135 | GETPSID1(RET,CT,IMGIEN,PSUID,HIT) ; For input IMGIEN & PSUID, return PS data
|
---|
| 136 | ; Results returned by indirection in array @RET, indexed by CT
|
---|
| 137 | ; HIT=1 if the image has a PS_UID stored
|
---|
| 138 | N X,TYP,IEN
|
---|
| 139 | S CT=+$G(CT),HIT=0
|
---|
| 140 | I '(PSUID]""&IMGIEN) G GETPSI1Z
|
---|
| 141 | S IMGREF=$NA(^MAG(2005,IMGIEN))
|
---|
| 142 | S IEN=$O(@IMGREF@(210,"B",PSUID,"")) I 'IEN G GETPSI1Z
|
---|
| 143 | S TYP=$P(@IMGREF@(210,IEN,0),U,2)
|
---|
| 144 | S CT=CT+1,@RET@(CT)="*IMAGE",HIT=1
|
---|
| 145 | S CT=CT+1,@RET@(CT)=IMGIEN_U
|
---|
| 146 | S CT=CT+1,@RET@(CT)="*PS"
|
---|
| 147 | S CT=CT+1,@RET@(CT)=PSUID_U_$S(TYP="K":"KEY",TYP="I":"INTERP",1:TYP)
|
---|
| 148 | D GETPSDAT(.RET,.CT,IMGIEN,PSUID)
|
---|
| 149 | S CT=CT+1,@RET@(CT)="*END_PS"
|
---|
| 150 | S CT=CT+1,@RET@(CT)="*END_IMAGE"
|
---|
| 151 | GETPSI1Z Q
|
---|
| 152 | ;
|
---|
| 153 | GETPSID2(RET,CT,IMGIEN,PSIND,HIT) ; For input IMGIEN & PSIND, return PS data
|
---|
| 154 | ; Results returned by indirection in array @RET, indexed by CT
|
---|
| 155 | ; HIT= incremented for each image with a PS stored for input psind
|
---|
| 156 | N X,TYP,IEN
|
---|
| 157 | S CT=+$G(CT),HIT=0
|
---|
| 158 | I '(PSIND]""&IMGIEN) G GETPSI2Z
|
---|
| 159 | S IMGREF=$NA(^MAG(2005,IMGIEN)),IEN=0
|
---|
| 160 | F S IEN=$O(@IMGREF@(210,IEN)) Q:'IEN S X=^(IEN,0),PSUID=$P(X,U),TYP=$P(X,U,2) I PSIND[TYP D
|
---|
| 161 | . I 'HIT D
|
---|
| 162 | . . S CT=CT+1,@RET@(CT)="*IMAGE"
|
---|
| 163 | . . S CT=CT+1,@RET@(CT)=IMGIEN_U
|
---|
| 164 | . S CT=CT+1,@RET@(CT)="*PS"
|
---|
| 165 | . S CT=CT+1,@RET@(CT)=PSUID_U_$S(TYP="K":"KEY",TYP="I":"INTERP",1:TYP)
|
---|
| 166 | . S HIT=HIT+1
|
---|
| 167 | . D GETPSDAT(.RET,.CT,IMGIEN,PSUID)
|
---|
| 168 | . S CT=CT+1,@RET@(CT)="*END_PS"
|
---|
| 169 | I HIT S CT=CT+1,@RET@(CT)="*END_IMAGE"
|
---|
| 170 | GETPSI2Z Q
|
---|
| 171 | ;
|
---|
| 172 | END ;
|
---|