| [613] | 1 | RORRP013 ;HCIOFO/SG - RPC: ACCESS & SECURITY ; 11/9/05 8:56am | 
|---|
|  | 2 | ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | Q | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | ;***** RETURNS A LIST OF REGISTRIES ACCESSIBLE TO THE GUI USER | 
|---|
|  | 7 | ; RPC: [ROR GUI ACCESS] | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | ; .RESULTS      Reference to a local variable where the results | 
|---|
|  | 10 | ;               are returned to. | 
|---|
|  | 11 | ; | 
|---|
|  | 12 | ; [USER]        User IEN in the NEW PERSON file. By default | 
|---|
|  | 13 | ;               (if $G(USER)'>0), the DUZ is used). | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | ; Return Values: | 
|---|
|  | 16 | ; | 
|---|
|  | 17 | ; A negative value of the first "^"-piece of the RESULTS(0) indicates | 
|---|
|  | 18 | ; an error (see the RPCSTK^RORERR procedure for more details). | 
|---|
|  | 19 | ; | 
|---|
|  | 20 | ; RESULTS(0)            Number of accessible registries | 
|---|
|  | 21 | ; | 
|---|
|  | 22 | ; RESULTS(i)            Registry descriptor | 
|---|
|  | 23 | ;                         ^01: Registry IEN | 
|---|
|  | 24 | ;                         ^02: Registry name | 
|---|
|  | 25 | ;                         ^03: Administrator? (0 or 1) | 
|---|
|  | 26 | ;                         ^04: Short description | 
|---|
|  | 27 | ; | 
|---|
|  | 28 | ACREGLST(RESULTS,USER) ; | 
|---|
|  | 29 | N ADMIN,CNT,IENS,KEY,RC,REGIEN,RORBUF,RORERRDL,RORMSG,TMP | 
|---|
|  | 30 | K RESULTS  S RESULTS(0)=0 | 
|---|
|  | 31 | D CLEAR^RORERR("ACREGLST^RORRP013",1) | 
|---|
|  | 32 | ;--- Check the version of the GUI | 
|---|
|  | 33 | I $G(XWBAPVER)<1.5  D  D RPCSTK^RORERR(.RESULTS,RC)  Q | 
|---|
|  | 34 | . N DIERR,DIHELP,DIMSG | 
|---|
|  | 35 | . S TMP("CV")=$S($G(XWBAPVER)>0:XWBAPVER,1:"1.0") | 
|---|
|  | 36 | . S TMP("RV")="1.5" | 
|---|
|  | 37 | . D BLD^DIALOG(7980000.006,.TMP,,"RORBUF") | 
|---|
|  | 38 | . S RC=$$ERROR^RORERR(-107,,.RORBUF) | 
|---|
|  | 39 | . K RORBUF,TMP | 
|---|
|  | 40 | ;--- User must be defined | 
|---|
|  | 41 | I $G(USER)'>0  S USER=+$G(DUZ)  Q:USER'>0 | 
|---|
|  | 42 | ; | 
|---|
|  | 43 | S (CNT,RC,REGIEN)=0 | 
|---|
|  | 44 | F  S REGIEN=$O(^ROR(798.1,"ACL",USER,REGIEN))  Q:REGIEN=""  D  Q:RC<0 | 
|---|
|  | 45 | . Q:REGIEN'>0  S IENS=REGIEN_","  K RORBUF | 
|---|
|  | 46 | . D GETS^DIQ(798.1,IENS,".01;4",,"RORBUF","RORMSG") | 
|---|
|  | 47 | . I $G(DIERR)  S RC=$$DBS^RORERR("RORMSG",-9,,,798.1,IENS)  Q | 
|---|
|  | 48 | . ;--- Add the registry descriptor to the list | 
|---|
|  | 49 | . S CNT=CNT+1,RESULTS(CNT)=REGIEN_"^"_$G(RORBUF(798.1,IENS,.01)) | 
|---|
|  | 50 | . S $P(RESULTS(CNT),"^",4)=$G(RORBUF(798.1,IENS,4)) | 
|---|
|  | 51 | . ;--- Check if the user has the administrator security key | 
|---|
|  | 52 | . S KEY="",ADMIN=0 | 
|---|
|  | 53 | . F  S KEY=$O(^ROR(798.1,"ACL",USER,REGIEN,KEY))  Q:KEY=""  D  Q:RC<0 | 
|---|
|  | 54 | . . I KEY?1"ROR"1.E  S:KEY["ADMIN" ADMIN=1 | 
|---|
|  | 55 | . S $P(RESULTS(CNT),"^",3)=ADMIN | 
|---|
|  | 56 | ; | 
|---|
|  | 57 | I RC'<0  D:CNT'>0  S RESULTS(0)=CNT | 
|---|
|  | 58 | . D ACVIOLTN^RORLOG(-91)  ; Record the access violation | 
|---|
|  | 59 | E  D RPCSTK^RORERR(.RESULTS,RC) | 
|---|
|  | 60 | Q | 
|---|
|  | 61 | ; | 
|---|
|  | 62 | ;***** RETURNS THE LIST OF ACCESS VIOLATIONS | 
|---|
|  | 63 | ; RPC: [ROR LOG GET ACCESS VIOLATIONS] | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | ; .RESULTS      Reference to a local variable where the results | 
|---|
|  | 66 | ;               are returned to. | 
|---|
|  | 67 | ; | 
|---|
|  | 68 | ; [STDT]        Start date (by default, from the earliest violation) | 
|---|
|  | 69 | ; [ENDT]        End date (by default, to the latest violation) | 
|---|
|  | 70 | ; | 
|---|
|  | 71 | ; Return Values: | 
|---|
|  | 72 | ; | 
|---|
|  | 73 | ; A negative value of the first "^"-piece of the RESULTS(0) indicates | 
|---|
|  | 74 | ; an error (see the RPCSTK^RORERR procedure for more details). | 
|---|
|  | 75 | ; | 
|---|
|  | 76 | ; Otherwise, number of logs is returned in the RESULTS(0) and the | 
|---|
|  | 77 | ; subsequent nodes of the RESULTS array contain the violations. | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | ; @RESULTS@(0)          Number of access violations | 
|---|
|  | 80 | ; | 
|---|
|  | 81 | ; @RESULTS@(i)          Access violation descriptor | 
|---|
|  | 82 | ;                         ^01: Date/Time (int) | 
|---|
|  | 83 | ;                         ^02: User Name | 
|---|
|  | 84 | ;                         ^03: User IEN | 
|---|
|  | 85 | ;                         ^04: Message | 
|---|
|  | 86 | ; | 
|---|
|  | 87 | AVLIST(RESULTS,STDT,ENDT) ; | 
|---|
|  | 88 | N BUF,CNT,DATE,IEN,IENS,RC,ROOT,RORBUF,RORERRDL,RORMSG | 
|---|
|  | 89 | D CLEAR^RORERR("AVLIST^RORRP013",1) | 
|---|
|  | 90 | ;--- Check the parameters | 
|---|
|  | 91 | S STDT=$G(STDT)\1,ENDT=$G(ENDT)\1 | 
|---|
|  | 92 | S ENDT=$S(ENDT>0:$$FMADD^XLFDT(ENDT,1),1:9999999) | 
|---|
|  | 93 | ;--- Initialize the variables | 
|---|
|  | 94 | S ROOT=$$ROOT^DILFD(798.7,,1),CNT=0 | 
|---|
|  | 95 | K RESULTS  S RESULTS=$$ALLOC^RORTMP() | 
|---|
|  | 96 | ;--- Browse through the logs | 
|---|
|  | 97 | S DATE=STDT | 
|---|
|  | 98 | F  S DATE=$O(@ROOT@("B",DATE))  Q:DATE=""  Q:DATE'<ENDT  D | 
|---|
|  | 99 | . S IEN=0 | 
|---|
|  | 100 | . F  S IEN=$O(@ROOT@("B",DATE,IEN))  Q:IEN'>0  D | 
|---|
|  | 101 | . . S IENS=IEN_","  K RORBUF | 
|---|
|  | 102 | . . D GETS^DIQ(798.7,IENS,".01;1;7","EI","RORBUF","RORMSG") | 
|---|
|  | 103 | . . Q:$G(DIERR) | 
|---|
|  | 104 | . . ;--- Check for the 'Access Violation' Activity | 
|---|
|  | 105 | . . Q:$G(RORBUF(798.7,IENS,1,"I"))'=6 | 
|---|
|  | 106 | . . ;--- Date/Time of the event | 
|---|
|  | 107 | . . S BUF=$G(RORBUF(798.7,IENS,.01,"I")) | 
|---|
|  | 108 | . . ;--- User Name (ext) | 
|---|
|  | 109 | . . S $P(BUF,"^",2)=$G(RORBUF(798.7,IENS,7,"E")) | 
|---|
|  | 110 | . . ;--- User IEN (int) | 
|---|
|  | 111 | . . S $P(BUF,"^",3)=$G(RORBUF(798.7,IENS,7,"I")) | 
|---|
|  | 112 | . . ;--- Message | 
|---|
|  | 113 | . . S $P(BUF,"^",4)=$$GET1^DIQ(798.74,"1,"_IENS,2,,,"RORMSG") | 
|---|
|  | 114 | . . ;--- Add the record to the output | 
|---|
|  | 115 | . . S CNT=CNT+1,@RESULTS@(CNT)=BUF | 
|---|
|  | 116 | ;--- Number of violations | 
|---|
|  | 117 | S @RESULTS@(0)=CNT | 
|---|
|  | 118 | Q | 
|---|
|  | 119 | ; | 
|---|
|  | 120 | ;***** ADDS THE USERS WHO HAVE THE SECURITY KEY TO THE LIST | 
|---|
|  | 121 | ; | 
|---|
|  | 122 | ; KEYNAME       Name of the security key | 
|---|
|  | 123 | ; ACCESS        Level of the user access to the registry | 
|---|
|  | 124 | ;               (1-User, 2-Administrator, 3-IRM) | 
|---|
|  | 125 | ; | 
|---|
|  | 126 | ; Return Values: | 
|---|
|  | 127 | ; | 
|---|
|  | 128 | KLIST(KEYNAME,ACCESS) ; | 
|---|
|  | 129 | N IEN  S IEN=0 | 
|---|
|  | 130 | F  S IEN=$O(^XUSEC(KEYNAME,IEN))  Q:IEN'>0  D | 
|---|
|  | 131 | . S $P(@RORULST@(IEN,0),"^",ACCESS)=1 | 
|---|
|  | 132 | Q | 
|---|
|  | 133 | ; | 
|---|
|  | 134 | ;***** RETURNS THE LIST OF REGISTRY USERS | 
|---|
|  | 135 | ; RPC: [ROR GET REGISTRY USERS] | 
|---|
|  | 136 | ; | 
|---|
|  | 137 | ; .RESULTS      Reference to a local variable where the results | 
|---|
|  | 138 | ;               are returned to. | 
|---|
|  | 139 | ; | 
|---|
|  | 140 | ; REGIEN        Registry IEN | 
|---|
|  | 141 | ; | 
|---|
|  | 142 | ; Return Values: | 
|---|
|  | 143 | ; | 
|---|
|  | 144 | ; A negative value of the first "^"-piece of the RESULTS(0) indicates | 
|---|
|  | 145 | ; an error (see the RPCSTK^RORERR procedure for more details). | 
|---|
|  | 146 | ; | 
|---|
|  | 147 | ; Otherwise, number of users is returned in the RESULTS(0) and the | 
|---|
|  | 148 | ; subsequent nodes of the RESULTS array contain the users. | 
|---|
|  | 149 | ; | 
|---|
|  | 150 | ; @RESULTS@(0)          Number of users | 
|---|
|  | 151 | ; | 
|---|
|  | 152 | ; @RESULTS@(i)          User descriptor | 
|---|
|  | 153 | ;                         ^01: User IEN (DUZ) | 
|---|
|  | 154 | ;                         ^02: User Name | 
|---|
|  | 155 | ;                         ^03: User          (0/1) | 
|---|
|  | 156 | ;                         ^04: Administrator (0/1) | 
|---|
|  | 157 | ;                         ^05: IRM           (0/1) | 
|---|
|  | 158 | ; | 
|---|
|  | 159 | USERLIST(RESULTS,REGIEN) ; | 
|---|
|  | 160 | N ACCESS,ADMIN,CNT,IEN,NAME,RORERRDL,RORMSG,RORULST | 
|---|
|  | 161 | D CLEAR^RORERR("USERLIST^RORRP013",1) | 
|---|
|  | 162 | ;--- Check the parameters | 
|---|
|  | 163 | I $G(REGIEN)'>0  D  D RPCSTK^RORERR(.RESULTS,RC)  Q | 
|---|
|  | 164 | . S RC=$$ERROR^RORERR(-88,,,,"REGIEN",$G(REGIEN)) | 
|---|
|  | 165 | S REGIEN=+REGIEN | 
|---|
|  | 166 | ;--- Initialize the variables | 
|---|
|  | 167 | K RESULTS  S RESULTS=$$ALLOC^RORTMP() | 
|---|
|  | 168 | S RORULST=$$ALLOC^RORTMP() | 
|---|
|  | 169 | ;--- Browse the security keys | 
|---|
|  | 170 | S NAME="" | 
|---|
|  | 171 | F  S NAME=$O(^ROR(798.1,REGIEN,18,"B",NAME))  Q:NAME=""  D | 
|---|
|  | 172 | . S ADMIN=(NAME?1"ROR"1.E)&(NAME["ADMIN") | 
|---|
|  | 173 | . D KLIST(NAME,$S(ADMIN:2,1:1)) | 
|---|
|  | 174 | ;--- Add the authorized IRM personnel | 
|---|
|  | 175 | D KLIST("ROR VA IRM",3) | 
|---|
|  | 176 | ;--- Sort the users by their names | 
|---|
|  | 177 | S IEN=0 | 
|---|
|  | 178 | F  S IEN=$O(@RORULST@(IEN))  Q:IEN'>0  D | 
|---|
|  | 179 | . S NAME=$$GET1^DIQ(200,IEN_",",.01,,,"RORMSG") | 
|---|
|  | 180 | . S:NAME'="" @RORULST@("B",NAME,IEN)="" | 
|---|
|  | 181 | ;--- Generate the output | 
|---|
|  | 182 | S NAME="",CNT=0 | 
|---|
|  | 183 | F  S NAME=$O(@RORULST@("B",NAME)) Q:NAME=""  D | 
|---|
|  | 184 | . S IEN=0 | 
|---|
|  | 185 | . F  S IEN=$O(@RORULST@("B",NAME,IEN)) Q:IEN'>0  D | 
|---|
|  | 186 | . . S ACCESS=$G(@RORULST@(IEN,0)) | 
|---|
|  | 187 | . . S CNT=CNT+1,@RESULTS@(CNT)=IEN_"^"_NAME_"^"_ACCESS | 
|---|
|  | 188 | S @RESULTS@(0)=CNT | 
|---|
|  | 189 | ;--- Cleanup | 
|---|
|  | 190 | D FREE^RORTMP(RORULST) | 
|---|
|  | 191 | Q | 
|---|