| 1 | MAGJLS4 ;WIRMFO/JHC VistARad RPCs--History List ; 29 Jul 2003  10:00 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 ^TMP($J,"RET",0)="0^4~"_ERR
 | 
|---|
| 20 |  S MAGGRY=$NA(^TMP($J,"RET"))
 | 
|---|
| 21 |  D @^%ZOSF("ERRTN")
 | 
|---|
| 22 |  Q:$Q 1  Q
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  ; Subroutines for Vistarad History List functions
 | 
|---|
| 25 |  ; Entry Points:
 | 
|---|
| 26 |  ;   HIST -- All History List rpcs go here
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 | HIST(MAGGRY,PARAMS,DATA) ; History List RPC: MAGJ HISTORYLIST
 | 
|---|
| 29 |  ; PARAMS--TXID ^ TXDUZ ^ TXDIV
 | 
|---|
| 30 |  ; TXID: Required; designates action to take; see below
 | 
|---|
| 31 |  ; TXDUZ: Optional; if supplied, get data for another user (Read Only)
 | 
|---|
| 32 |  ; TXDIV: Optional; if supplied, get data for another division (Read Only)
 | 
|---|
| 33 |  ;   Note: for now, TXDIV is forced to the Logon Division
 | 
|---|
| 34 |  ; DATA--(optional) array of input data; depends on TXID; see subroutines by TXID
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  N $ETRAP,$ESTACK S $ETRAP="D ERR^MAGJLS4"
 | 
|---|
| 37 |  N TXID,TXDUZ,TXDIV,UPDATEOK,DIQUIET,REPLY
 | 
|---|
| 38 |  K ^TMP($J,"RET")
 | 
|---|
| 39 |  S TXID=+PARAMS,TXDUZ=+$P(PARAMS,U,2),TXDIV=+$P(PARAMS,U,3)
 | 
|---|
| 40 |  I 'TXDUZ S TXDUZ=DUZ
 | 
|---|
| 41 |  S UPDATEOK=TXDUZ=DUZ
 | 
|---|
| 42 |  S TXDIV=DUZ(2) ; Force to Logon Division for now
 | 
|---|
| 43 |  S REPLY="0^1~Performing History List operation."
 | 
|---|
| 44 |  I 'TXID!'("1,2,3"[TXID) S REPLY="0^4~Invalid History List operation requested." G HISTZ
 | 
|---|
| 45 |  I '$D(DATA)&(TXID=1!TXID=3) S REPLY="0^4~No data supplied for History List update/delete." G HISTZ
 | 
|---|
| 46 |  I 'UPDATEOK&("1,3"[TXID) S REPLY="0^4~The current History List may not be updated by the current user." G HISTZ
 | 
|---|
| 47 |  S DIQUIET=1 D DT^DICRW
 | 
|---|
| 48 |  I TXID=1 D HISTADD(.DATA,TXDUZ,TXDIV) G HISTZ
 | 
|---|
| 49 |  I TXID=2 D HISTUPD(TXDUZ,TXDIV) D HISTGET(TXDUZ,TXDIV) G HISTZ
 | 
|---|
| 50 |  I TXID=3 D HISTDEL(.DATA,TXDUZ,TXDIV) G HISTZ
 | 
|---|
| 51 |  ; I TXID=4 D HISTUPD(TXDUZ,TXDIV) G HISTZ ; for now, do this function with txid 2
 | 
|---|
| 52 | HISTZ ;
 | 
|---|
| 53 |  I 'REPLY S MAGGRY=$NA(^TMP($J,"RET")),@MAGGRY@(0)=REPLY
 | 
|---|
| 54 |  E  ; maggry otherwise has been set by called subroutine
 | 
|---|
| 55 |  Q
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 | HISTADD(DATA,TXDUZ,TXDIV) ; add records
 | 
|---|
| 58 |  N IDATA,ILOOP,CT,NOGO,EXID,HISDAT,HISTIEN,MAGRACNT
 | 
|---|
| 59 |  S IDATA="",CT=0,NOGO=0
 | 
|---|
| 60 |  F ILOOP=0:1 S IDATA=$O(DATA(IDATA)) Q:IDATA=""  D
 | 
|---|
| 61 |  . S EXID=$P(DATA(IDATA),"|"),HISDAT=$P(DATA(IDATA),"|",2)
 | 
|---|
| 62 |  . F I=1:1:4 I '+$P(EXID,U,I) S NOGO=1 Q
 | 
|---|
| 63 |  . I NOGO Q
 | 
|---|
| 64 |  . L +^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV):2
 | 
|---|
| 65 |  . E  Q
 | 
|---|
| 66 |  . S X=$G(^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV,0)),HISTIEN=+$P(X,U)+1,$P(^(0),U)=HISTIEN
 | 
|---|
| 67 |  . L -^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV)
 | 
|---|
| 68 |  . S ^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV,0,"ADD",HISTIEN)="|"_EXID_"|"_HISTIEN_U_HISDAT_"|"
 | 
|---|
| 69 |  . S CT=CT+1
 | 
|---|
| 70 |  I 'CT S REPLY="0^3~"_$S(ILOOP:"Unable to add records",1:"No records to add")_" to History List." Q
 | 
|---|
| 71 |  S MAGRACNT=0 D ACTIVE^MAGJLS2(.MAGGRY,9996)
 | 
|---|
| 72 |  S X=@MAGGRY@(0),X=+X_U_"1~"_$$HISTTL(TXDUZ,TXDIV),@MAGGRY@(0)=X
 | 
|---|
| 73 |  N TS S TS="" F I=2,0 S %H=$H+I D YMD^%DTC S TS=TS_$S(TS="":"",1:U)_X
 | 
|---|
| 74 |  S ^XTMP("MAGJ2",0)=TS_U_"VistaRad List Compile"
 | 
|---|
| 75 |  S REPLY=1
 | 
|---|
| 76 |  Q
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 | HISTTL(TXDUZ,TXDIV) ;  Build list title string
 | 
|---|
| 79 |  N LSTTL
 | 
|---|
| 80 |  S LSTTL="HISTORY LIST for "_$$USERINF^MAGJUTL3(TXDUZ,.01)_" at "_"Station #"_$$STATN^MAGJEX1(TXDIV)
 | 
|---|
| 81 |  S LSTTL=LSTTL_"|"_TXDUZ ; provide report's DUZ to client
 | 
|---|
| 82 |  Q LSTTL
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 | HISTGET(TXDUZ,TXDIV) ; Get full History List for input user for division txdiv
 | 
|---|
| 85 |  N MAGLST,LSTTL,LSTID,MAGLST
 | 
|---|
| 86 |  S TXDUZ=$G(TXDUZ,DUZ)
 | 
|---|
| 87 |  S TXDIV=$G(TXDIV,DUZ(2))
 | 
|---|
| 88 |  D PARAMS^MAGJLS2B(9996)
 | 
|---|
| 89 |  I 'LSTID S REPLY="0^4~Problem with History List Compile." Q
 | 
|---|
| 90 |  S LSTTL=$$HISTTL(TXDUZ,DUZ(2))
 | 
|---|
| 91 |  S X=$O(^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV,0))
 | 
|---|
| 92 |  I 'X S REPLY="0^1~No exams found for: "_LSTTL Q
 | 
|---|
| 93 |  S MAGLST=$NA(^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV))
 | 
|---|
| 94 |  D LSTOUT^MAGJLS2B(.MAGGRY,LSTID,MAGLST)
 | 
|---|
| 95 |  S REPLY=1
 | 
|---|
| 96 |  Q
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 | HISTDEL(DATA,TXDUZ,TXDIV) ; delete records
 | 
|---|
| 99 |  N IDATA,CT,HISTIEN,ALLDONE,LAST
 | 
|---|
| 100 |  S IDATA="",CT=0,ALLDONE=0
 | 
|---|
| 101 |  L +^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV):2
 | 
|---|
| 102 |  E  S REPLY="0^2~Unable to access HISTORY File for deleting records; try again later." Q
 | 
|---|
| 103 |  S MAGGRY=$NA(^TMP($J,"RET"))
 | 
|---|
| 104 |  F  S IDATA=$O(DATA(IDATA)) Q:IDATA=""!ALLDONE  D
 | 
|---|
| 105 |  . S HISTIEN=$P(DATA(IDATA),U)
 | 
|---|
| 106 |  . I HISTIEN,$D(^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV,HISTIEN)) K ^(HISTIEN) S CT=CT+1,@MAGGRY@(CT)=HISTIEN Q
 | 
|---|
| 107 |  . E  I HISTIEN="ALL" S HISTIEN=0 D  S ALLDONE=1
 | 
|---|
| 108 |  . . F  S HISTIEN=$O(^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV,HISTIEN)) Q:'HISTIEN  K ^(HISTIEN) S CT=CT+1,@MAGGRY@(CT)=HISTIEN
 | 
|---|
| 109 |  I '$D(^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV,0,"ADD")) S X=$O(^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV,""),-1),^(0)=X_U_X
 | 
|---|
| 110 |  L -^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV)
 | 
|---|
| 111 |  I 'CT S REPLY="0^3~No HISTORY List records found to delete."
 | 
|---|
| 112 |  E  S REPLY=CT_"^1~"_CT_" HISTORY List records deleted."
 | 
|---|
| 113 |  S @MAGGRY@(0)=REPLY
 | 
|---|
| 114 |  S REPLY=1
 | 
|---|
| 115 |  Q
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 | HISTUPD(TXDUZ,TXDIV) ; Update selected fields in History List
 | 
|---|
| 118 |  N LSTTL,CT,NOHIT,RAST,STATUS,REMOTE,RIST1,RIST2,RIST,RISTISME
 | 
|---|
| 119 |  N EXID,HISTIEN,RARPT,RADFN,RADTI,RACNI,XX1,XX2,T,X,DELETED,HDATE
 | 
|---|
| 120 |  S CT=0,NOHIT=0
 | 
|---|
| 121 |  S TXDUZ=$G(TXDUZ,DUZ)
 | 
|---|
| 122 |  S TXDIV=$G(TXDIV,DUZ(2))
 | 
|---|
| 123 |  S LSTTL=$$HISTTL(TXDUZ,DUZ(2))
 | 
|---|
| 124 |  S X=$O(^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV,0))
 | 
|---|
| 125 |  I 'X S REPLY="0^1~No exams found for: "_LSTTL Q
 | 
|---|
| 126 |  L +^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV):2
 | 
|---|
| 127 |  E  S REPLY="0^2~Unable to access HISTORY File for updating records; try again later." Q
 | 
|---|
| 128 |  S HISTIEN=0
 | 
|---|
| 129 |  F  S HISTIEN=$O(^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV,HISTIEN)) Q:'HISTIEN  S XX1=$G(^(HISTIEN,1)),XX2=$G(^(2)) D
 | 
|---|
| 130 |  . S EXID=$P(XX2,"|",2),RARPT=+$P(EXID,U,4),RADFN=+$P(EXID,U),RADTI=+$P(EXID,U,2),RACNI=+$P(EXID,U,3)
 | 
|---|
| 131 |  . ; <*> Below is for phase 1 Alpha, til have final user setting for this <*> to be removed
 | 
|---|
| 132 |  . ; Age limit parameter to be passed in with txid 2 rpc call; setting is on client <*>
 | 
|---|
| 133 |  . S HDATE=$P(XX2,U,13) D  Q:DELETED
 | 
|---|
| 134 |  . . S DELETED=0,HDATE=$P(HDATE,"@")
 | 
|---|
| 135 |  . . S X=HDATE,%DT="" D ^%DT S X=Y D H^%DTC K %DT
 | 
|---|
| 136 |  . . I %H<($H-3) K ^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV,HISTIEN) S DELETED=1 Q
 | 
|---|
| 137 |  . ; <*> End of temp change
 | 
|---|
| 138 |  . I RARPT,RADFN,RADTI,RACNI
 | 
|---|
| 139 |  . E  S NOHIT=NOHIT+1 Q
 | 
|---|
| 140 |  . D IMGINFO^MAGJUTL2(RARPT,.X) S REMOTE=$P(X,U,4)
 | 
|---|
| 141 |  . S X=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
 | 
|---|
| 142 |  . I X="" Q  ; rad exam deleted
 | 
|---|
| 143 |  . S RAST=$P(X,U,3),RIST1=$P(X,U,12),RIST2=$P(X,U,15)
 | 
|---|
| 144 |  . S STATUS=$S(RAST:$P(^RA(72,RAST,0),U),1:"")
 | 
|---|
| 145 |  . S (RIST,RISTISME)=""
 | 
|---|
| 146 |  . I RIST1!RIST2 S X=$$RIST^MAGJUTL1(RIST1,RIST2),RIST=$P(X,U),RISTISME=$P(X,U,2)
 | 
|---|
| 147 |  . S RISTISME=$S(RISTISME:"Y",1:"N")
 | 
|---|
| 148 |  . S $P(XX1,U,16)=RAST,$P(XX1,U,8)=STATUS,$P(XX1,U,12)=REMOTE
 | 
|---|
| 149 |  . S T=$P(XX2,"|"),$P(T,U,3)=RIST,$P(T,U,7)=RISTISME,$P(XX2,"|")=T
 | 
|---|
| 150 |  . S ^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV,HISTIEN,1)=XX1,^(2)=XX2
 | 
|---|
| 151 |  . S CT=CT+1
 | 
|---|
| 152 |  S X=$O(^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV,""),-1),^(0)=X_U_X ; <*> for phase 1 alpha only?
 | 
|---|
| 153 |  L -^XTMP("MAGJ2","HISTORY",TXDUZ,TXDIV)
 | 
|---|
| 154 |  S REPLY="0^1~HISTORY File records updated." Q
 | 
|---|
| 155 |  Q
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 | END Q  ; 
 | 
|---|