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