| 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
 | 
|---|