| 1 | TIULRR ; SLC/JM - Restricted Record Library functions ;7/17/01
 | 
|---|
| 2 |  ;;1.0;TEXT INTEGRATION UTILITIES;**58,121**;Jun 20, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | INITRR(ASKONCE) ; Initializes Restricted Record List
 | 
|---|
| 7 |  ; If ASKONCE is true, calls to PTRES will only ask once for any given
 | 
|---|
| 8 |  ; patient.  If they answer no it will not ask again.  If ASKONCE is
 | 
|---|
| 9 |  ; false, it will continue to ask on the same patient until they 
 | 
|---|
| 10 |  ; answer Yes (used when called from list manager)
 | 
|---|
| 11 |  N MSG
 | 
|---|
| 12 |  S MSG=$S('($D(DUZ)#2):"user code",'$D(^VA(200,DUZ,0)):"user name",1:"")
 | 
|---|
| 13 |  I MSG'="" D  Q
 | 
|---|
| 14 |  .K TIURRECL
 | 
|---|
| 15 |  .I $D(VALMAR) D FULL^VALM1
 | 
|---|
| 16 |  .W !!?2,"Your ",MSG," is undefined. This must be defined to access"
 | 
|---|
| 17 |  .W !?2,"patient information.",!
 | 
|---|
| 18 |  I $G(TIURRECL("DUZ"))'=DUZ D  ;DUZ has changed - start over
 | 
|---|
| 19 |  .K TIURRECL
 | 
|---|
| 20 |  .S TIURRECL("DUZ")=DUZ
 | 
|---|
| 21 |  S TIURRECL("RCNT")=+$G(TIURRECL("RCNT"))+1
 | 
|---|
| 22 |  I TIURRECL("RCNT")=1 D  ; First reference call
 | 
|---|
| 23 |  .S TIURRECL=0
 | 
|---|
| 24 |  .I +$G(ASKONCE) S TIURRECL("ONCE")="X"
 | 
|---|
| 25 |  Q
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 | KILLRR ; Kills the Restricted Record List
 | 
|---|
| 28 |  I '$D(TIURRECL) Q
 | 
|---|
| 29 |  S TIURRECL("RCNT")=+$G(TIURRECL("RCNT"))-1
 | 
|---|
| 30 |  I +TIURRECL("RCNT")<1 K TIURRECL
 | 
|---|
| 31 |  Q
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 | DOCRES(TIUDA)   ; Evaluate Restricted Record for a specific Document
 | 
|---|
| 34 |  N TIUY,TIUD0 S TIUY=0
 | 
|---|
| 35 |  S TIUD0=$G(^TIU(8925,TIUDA,0)) G:+$P(TIUD0,U,2)'>0 DOCRESX
 | 
|---|
| 36 |  S TIUY=$$PTRES(+$P(TIUD0,U,2))
 | 
|---|
| 37 | DOCRESX Q TIUY
 | 
|---|
| 38 | PTRES(DFN) ; Returns TRUE if patient is restricted 
 | 
|---|
| 39 |  I '$D(TIURRECL) Q 0 ; Does not function if INITRR has not been called
 | 
|---|
| 40 |  N TIUBAD
 | 
|---|
| 41 |  S TIUBAD=0
 | 
|---|
| 42 |  I +$$GET1^DIQ(38.1,+$G(DFN),2,"I") D
 | 
|---|
| 43 |  .N DOCHECK
 | 
|---|
| 44 |  .S TIUBAD=1,DOCHECK=1
 | 
|---|
| 45 |  .I TIURRECL>0 D
 | 
|---|
| 46 |  ..N I,IDX,SRCH,DONE
 | 
|---|
| 47 |  ..S SRCH=U_DFN_"=",DONE=0
 | 
|---|
| 48 |  ..F I=1:1:TIURRECL D  Q:DONE
 | 
|---|
| 49 |  ...S IDX=$F(TIURRECL(I),SRCH)
 | 
|---|
| 50 |  ...I IDX D
 | 
|---|
| 51 |  ....S DONE=1,DOCHECK=0
 | 
|---|
| 52 |  ....I $D(TIURRECL("ONCE")) S TIUBAD=+$E(TIURRECL(I),IDX)
 | 
|---|
| 53 |  ....E  S TIUBAD=0
 | 
|---|
| 54 |  .I DOCHECK D
 | 
|---|
| 55 |  ..I $D(VALMAR) D FULL^VALM1
 | 
|---|
| 56 |  ..N Y,DTOUT,DUOUT,DOADD
 | 
|---|
| 57 |  ..S Y=$$CHECK(DFN)
 | 
|---|
| 58 |  ..I ($D(DTOUT))!($D(DUOUT)) S DOADD=0
 | 
|---|
| 59 |  ..E  D
 | 
|---|
| 60 |  ...I Y'=-1 S TIUBAD=0
 | 
|---|
| 61 |  ...S DOADD=(Y'=-1)!($D(TIURRECL("ONCE")))
 | 
|---|
| 62 |  ..I DOADD D
 | 
|---|
| 63 |  ...N ADD
 | 
|---|
| 64 |  ...S ADD=0
 | 
|---|
| 65 |  ...I TIURRECL=0 S ADD=1
 | 
|---|
| 66 |  ...E  I $L(TIURRECL(TIURRECL))>200 S ADD=1
 | 
|---|
| 67 |  ...I ADD S TIURRECL=TIURRECL+1,TIURRECL(TIURRECL)=U
 | 
|---|
| 68 |  ...S TIURRECL(TIURRECL)=TIURRECL(TIURRECL)_DFN_"="_TIUBAD_U
 | 
|---|
| 69 |  Q TIUBAD
 | 
|---|
| 70 | DOCCHK(TIUDA)   ; Wrap CHECK
 | 
|---|
| 71 |  Q +$$CHECK($P($G(^TIU(8925,TIUDA,0)),U,2))
 | 
|---|
| 72 | CHECK(DFN)      ; call ^DIC to execute check
 | 
|---|
| 73 |  N DIC,X,Y
 | 
|---|
| 74 |  S DIC=2,X="`"_DFN,DIC(0)="E"
 | 
|---|
| 75 |  W !! D ^DIC
 | 
|---|
| 76 |  Q Y
 | 
|---|