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