| 1 | RAUTL6 ;HISC/GJC-Utility Routine ;2/19/98  10:52 | 
|---|
| 2 | ;;5.0;Radiology/Nuclear Medicine;;Mar 16, 1998 | 
|---|
| 3 | VARACC(DUZ) ; This subroutine will determine the Imaging Location, | 
|---|
| 4 | ; Imaging Type, and the Divisional access for a specific individual. | 
|---|
| 5 | ; Divisional Access as well as Imaging Type Access is derived from | 
|---|
| 6 | ; the Imaging Locs assigned to each Rad/Nuc Med user.  If the user | 
|---|
| 7 | ; holds the RA ALLOC key, that user has access to all Imaging Locs. | 
|---|
| 8 | ; This in turn implies that the user has all Divisional and Imaging | 
|---|
| 9 | ; Type access related to each specific Imaging Location. | 
|---|
| 10 | ; | 
|---|
| 11 | Q:'+$G(DUZ)  N RADIV,RAIMG,RAINDX,RAKEY,RALOC,RAMGRKEY | 
|---|
| 12 | S RAMGRKEY=0 | 
|---|
| 13 | ; | 
|---|
| 14 | ;                 *** RA ALLOC Key Holder *** | 
|---|
| 15 | ; If a RA ALLOC holder, set up Imaging Loc access from file 200. | 
|---|
| 16 | ; Format: RACCESS(DUZ,"LOC",IEN of 79.1)=.01 of 79.1, IEN of file 44^.01 of 44 | 
|---|
| 17 | ; | 
|---|
| 18 | I $D(^XUSEC("RA ALLOC",DUZ)) S RAMGRKEY=1 D | 
|---|
| 19 | . S RAINDX=0 | 
|---|
| 20 | . F  S RAINDX=$O(^RA(79.1,RAINDX)) Q:RAINDX'>0  D | 
|---|
| 21 | .. S RALOC(0)=$G(^RA(79.1,RAINDX,0)),RALOC(1)=+$P(RALOC(0),U) | 
|---|
| 22 | .. Q:RALOC(1)'>0  S RALOC(44)=$P($G(^SC(RALOC(1),0)),U) | 
|---|
| 23 | .. S RACCESS(DUZ,"LOC",RAINDX)=RALOC(1)_"^"_RALOC(44) | 
|---|
| 24 | .. Q | 
|---|
| 25 | . K RALOC | 
|---|
| 26 | . Q | 
|---|
| 27 | ; | 
|---|
| 28 | ;        *** Imaging Location Access *** | 
|---|
| 29 | ; If not a RA ALLOC holder, set up Imaging Loc access from file 200. | 
|---|
| 30 | ; Format: RACCESS(DUZ,"LOC",IEN of 79.1)=.01 of 79.1, IEN of file 44^.01 of 44 | 
|---|
| 31 | ; | 
|---|
| 32 | I 'RAMGRKEY,($D(^VA(200,DUZ,"RAL",0))),(+$O(^VA(200,DUZ,"RAL",0))) D | 
|---|
| 33 | . S RAINDX=0 | 
|---|
| 34 | . F  S RAINDX=$O(^VA(200,DUZ,"RAL",RAINDX)) Q:RAINDX'>0  D | 
|---|
| 35 | .. S RALOC(0)=$G(^VA(200,DUZ,"RAL",RAINDX,0)),RALOC(1)=+$P(RALOC(0),U) | 
|---|
| 36 | .. Q:RALOC(1)'>0  S RALOC(44)=+$P($G(^RA(79.1,RALOC(1),0)),U) | 
|---|
| 37 | .. S RACCESS(DUZ,"LOC",RALOC(1))=RALOC(44)_"^"_$P($G(^SC(RALOC(44),0)),U) | 
|---|
| 38 | .. Q | 
|---|
| 39 | . Q | 
|---|
| 40 | ; | 
|---|
| 41 | ;                 *** Division Access *** | 
|---|
| 42 | ; Format: RACCESS(DUZ,"DIV",IEN of 79,IEN of 79.1)="DIV";1 of file 79.1, pntr to file 4^.01 of 4 | 
|---|
| 43 | ; NOTE: The first piece of the "DIV" node is a pntr to 79 (Rad Div) | 
|---|
| 44 | ;       This value is DINUMED with file 4. | 
|---|
| 45 | ; | 
|---|
| 46 | ; Division is found in the Imaging Location file, ^RA(79.1 | 
|---|
| 47 | ; it is the first piece of the "DIV" node.  RAINDX is the IEN | 
|---|
| 48 | ; of ^RA(79.1 | 
|---|
| 49 | I $D(RACCESS(DUZ,"LOC")) D | 
|---|
| 50 | . S RAINDX=0 | 
|---|
| 51 | . F  S RAINDX=$O(RACCESS(DUZ,"LOC",RAINDX)) Q:RAINDX'>0  D | 
|---|
| 52 | .. S RADIV(0)=$G(^RA(79.1,RAINDX,"DIV")),RADIV(1)=+$P(RADIV(0),U) | 
|---|
| 53 | .. Q:RADIV(1)'>0  S RADIV(2)=+$P($G(^RA(79,RADIV(1),0)),U) | 
|---|
| 54 | .. S RACCESS(DUZ,"DIV",RADIV(1),RAINDX)=RADIV(2)_"^"_$P($G(^DIC(4,RADIV(2),0)),U) | 
|---|
| 55 | .. Q | 
|---|
| 56 | . Q | 
|---|
| 57 | ; | 
|---|
| 58 | ;                 *** Imaging Type Access *** | 
|---|
| 59 | ; Format: RACCESS(DUZ,"IMG",IEN of 79.2,IEN of 79.1)=^.01 of 79.2 | 
|---|
| 60 | ; NOTE: The sixth piece of the "zero" node is a pntr to 79.2 (Img Type) | 
|---|
| 61 | ; | 
|---|
| 62 | ; Imaging Type is found in the Imaging Location file (#79.1) | 
|---|
| 63 | ; it is the sixth piece of the "zero" node.  RAINDX is the IEN | 
|---|
| 64 | ; of ^RA(79.1 | 
|---|
| 65 | I $D(RACCESS(DUZ,"LOC")) D | 
|---|
| 66 | . S RAINDX=0 | 
|---|
| 67 | . F  S RAINDX=$O(RACCESS(DUZ,"LOC",RAINDX)) Q:RAINDX'>0  D | 
|---|
| 68 | .. S RAIMG(0)=$G(^RA(79.1,RAINDX,0)),RAIMG(1)=+$P(RAIMG(0),U,6) | 
|---|
| 69 | .. Q:RAIMG(1)'>0  S RAIMG(2)=$P($G(^RA(79.2,RAIMG(1),0)),U) | 
|---|
| 70 | .. S RACCESS(DUZ,"IMG",RAIMG(1),RAINDX)="^"_RAIMG(2) | 
|---|
| 71 | .. Q | 
|---|
| 72 | . Q | 
|---|
| 73 | Q | 
|---|
| 74 | DSPDIV ; Display 'Divisional Access' data | 
|---|
| 75 | N X0,X1,Y0,Y1,Y2,Y3 S X0=0,Y3=1 | 
|---|
| 76 | I '$D(RACCESS(RADUZ,"DIV")) D  Q | 
|---|
| 77 | . W !?5,"Access to Radiology/Nuclear Medicine Divisional data is not " | 
|---|
| 78 | . W "authorized.",$C(7) | 
|---|
| 79 | S Y1="<<< Divisions Included >>>" | 
|---|
| 80 | W !?5,Y1 | 
|---|
| 81 | F  S X0=$O(RACCESS(RADUZ,"DIV",X0)) Q:X0'>0  D | 
|---|
| 82 | . S X1=$O(RACCESS(RADUZ,"DIV",X0,0)) Q:X1'>0 | 
|---|
| 83 | . S Y0=$G(RACCESS(RADUZ,"DIV",X0,X1)) Q:Y0']"" | 
|---|
| 84 | . S Y2=$P(Y0,U,2) D PRINT | 
|---|
| 85 | . Q | 
|---|
| 86 | W ! | 
|---|
| 87 | Q | 
|---|
| 88 | DSPIMG ; Display 'Imaging Type' data | 
|---|
| 89 | N X0,X1,Y0,Y1,Y2,Y3 S X0=0,Y3=1 | 
|---|
| 90 | I '$D(RACCESS(RADUZ,"IMG")) D  Q | 
|---|
| 91 | . W !?5,"Access to Imaging Type data is not authorized." | 
|---|
| 92 | . W $C(7) | 
|---|
| 93 | S Y1="<<< Imaging Types Included >>>" | 
|---|
| 94 | W !?5,Y1 | 
|---|
| 95 | F  S X0=$O(RACCESS(RADUZ,"IMG",X0)) Q:X0'>0  D | 
|---|
| 96 | . S X1=0 | 
|---|
| 97 | . F  S X1=$O(RACCESS(RADUZ,"IMG",X0,X1)) Q:X1'>0  D | 
|---|
| 98 | .. S Y0=$G(RACCESS(RADUZ,"IMG",X0,X1)) Q:Y0']"" | 
|---|
| 99 | .. S Y2=$P(Y0,U,2) D PRINT | 
|---|
| 100 | .. Q | 
|---|
| 101 | . Q | 
|---|
| 102 | W ! | 
|---|
| 103 | Q | 
|---|
| 104 | DSPLOC ; Display 'Imaging Location' data | 
|---|
| 105 | N X0,Y0,Y1,Y2,Y3 S X0=0,Y3=1 | 
|---|
| 106 | I '$D(RACCESS(RADUZ,"LOC")) D  Q | 
|---|
| 107 | . W !?5,"Access to Imaging Location data is not authorized.",$C(7) | 
|---|
| 108 | S Y1="<<< Locations Included >>>" | 
|---|
| 109 | W !?5,Y1 | 
|---|
| 110 | F  S X0=$O(RACCESS(RADUZ,"LOC",X0)) Q:X0'>0  D | 
|---|
| 111 | . S Y0=$G(RACCESS(RADUZ,"LOC",X0)) Q:Y0']"" | 
|---|
| 112 | . S Y2=$P(Y0,U,2) D PRINT | 
|---|
| 113 | . Q | 
|---|
| 114 | W ! | 
|---|
| 115 | Q | 
|---|
| 116 | PRINT ; Print out data | 
|---|
| 117 | S Y3='Y3 | 
|---|
| 118 | I 'Y3 W !?5,Y2 | 
|---|
| 119 | E  W ?45,Y2 | 
|---|
| 120 | Q | 
|---|
| 121 | DIVSION(RADATE,RALIFN) ; Determine the division associated with the Requesting | 
|---|
| 122 | ; Location on a Rad/Nuc Med Order.  Use the PIMS utilities in VASITE. | 
|---|
| 123 | ; Returns an institution file ptr value or -1 if the division | 
|---|
| 124 | ; could not be determined. | 
|---|
| 125 | ; Input  - RADATE=a valid FileMan date (internal format) | 
|---|
| 126 | ;                 defaults to DT if passed in null | 
|---|
| 127 | ;          RALIFN=Req. Location from Rad/Nuc Med Order. | 
|---|
| 128 | ; Output - RA1DIV=valid pointer the the Institution File, else -1 | 
|---|
| 129 | N RA1DIV S:$G(RADATE)="" RADATE=DT | 
|---|
| 130 | ; note: field 3.5 in file 44 is named DIVISION & is a pntr to file 40.8 | 
|---|
| 131 | S RA1DIV=+$$SITE^VASITE(RADATE,+$$GET1^DIQ(44,RALIFN,3.5,"I")) | 
|---|
| 132 | ; if $$SITE^VASITE fails, return the medical center division of the | 
|---|
| 133 | ; primary medical center division (this is a ptr to file 40.8) | 
|---|
| 134 | S:RA1DIV=-1 RA1DIV=+$$SITE^VASITE(RADATE,+$$PRIM^VASITE(RADATE)) | 
|---|
| 135 | Q RA1DIV | 
|---|