| 1 | LRDPA ;SLC/RWF/WTY/KLL - FILE OF FILES LOOKUP ON ENTITIES ; 2/28/03 4:10pm
 | 
|---|
| 2 |  ;;5.2;LAB SERVICE;**137,121,153,202,211,248,305,360**;Sep 27, 1994;Build 1
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;Reference to ^DIC( supported by IA #916
 | 
|---|
| 5 |  ;Reference to ^DIC("AC" supported by IA #511
 | 
|---|
| 6 |  ;Reference to ^ORD(100.99 supported by IA #2414
 | 
|---|
| 7 |  ;Reference to ^DIC supported by IA #10006
 | 
|---|
| 8 |  ;Reference to LK^ORX2 supported by IA #867
 | 
|---|
| 9 |  ;Reference to ULK^ORX2 supported by IA #867
 | 
|---|
| 10 |  ;Reference to $$DTIME^XUP supported by IA # -none available-
 | 
|---|
| 11 |  ;Reference to EN^DDIOL supported by IA #10142
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  ;IF '$D(DIC) USE PATIENT FILE, ALLOW "FILE:NAME" EXTENDED SYNTAX
 | 
|---|
| 14 |  ;IF DIC=0 ASK FILE NAME, IF PATIENT FILE, USE DPA, 
 | 
|---|
| 15 |  ;  OTHERWISE ^DIC LOOK-UP
 | 
|---|
| 16 |  ;IF DIC=N^GLOBAL, LOOK-UP ON FILE N
 | 
|---|
| 17 |  ;RETURN (DFN,Y)=IFN, LRDPF=N^GLOBAL, '$D(DIC), LRDFN=IFN OF ^LR 
 | 
|---|
| 18 |  ; GLOBAL  PNM=NAME,SSN=SSN,SSN(1)=LAST4,SSN(2)=SSN WITHOUT '-'
 | 
|---|
| 19 |  ;ROUTINE SSN^LRU CONTROLS SSN FORMAT
 | 
|---|
| 20 |  ;ALSO WILL RETURN LRLABKY variable if not defined.
 | 
|---|
| 21 |  ;LRLOOKUP=1 blocks ability to add new entries (lookup only)
 | 
|---|
| 22 |  S:$G(LRREFFL) DIC="67^LRT(67"
 | 
|---|
| 23 |  G:$G(LRORDRR)="R" ^LRDPAREF
 | 
|---|
| 24 |  S X="",U="^",DTIME=$$DTIME^XUP(DUZ)
 | 
|---|
| 25 |  S DIC(0)=$S('$D(DIC(0)):"EMQZ",DIC(0)["A":"EMQZ",1:DIC(0))
 | 
|---|
| 26 |  S:DIC(0)'["Z" DIC(0)=DIC(0)_"Z"
 | 
|---|
| 27 |  K DLAYGO I '($D(DIC)[0),DIC'=0,'$P(DIC,"^") S DIC=0
 | 
|---|
| 28 | DPA ;from LRUPS
 | 
|---|
| 29 |  D:'$D(LRLABKY) LABKEY^LRPARAM
 | 
|---|
| 30 |  K VADM,VAIN,VA
 | 
|---|
| 31 |  S LRDPF="" G ANY:'($D(DIC)[0)
 | 
|---|
| 32 |  R !,"Select Patient Name: ",X:DTIME
 | 
|---|
| 33 | DPA1 ;Entry point from PNAME^LRAPDA
 | 
|---|
| 34 |  I X'?1"%"9N.E,X=""!(X["^") S DFN=-1 K DLAYGO G END
 | 
|---|
| 35 |  ;The X'?1"%"9N.E was added since the VIC data stream contains a carat.
 | 
|---|
| 36 |  I X="??" W !,"You may enter patient identification or enter a file name followed by "":"".",!,"You may enter ""?:?"" for more extended help." G DPA
 | 
|---|
| 37 | EN1 ;from LRUG, LRUPS
 | 
|---|
| 38 |  I X[":" S LRX=$P(X,":",2),X=$P(X,":",1),DIC=0 K:LRX="" LRX G ANY:X=""!(X["?") W !," File: ",X G FL
 | 
|---|
| 39 | EN ;
 | 
|---|
| 40 |  S:DIC(0)'["Z" DIC(0)=DIC(0)_"Z"
 | 
|---|
| 41 |  S DIC="^DPT(",LRDPF="2^DPT(",VA200=""
 | 
|---|
| 42 |  ; DLAYGO not allowed for DPT( on first pass
 | 
|---|
| 43 |  S DIC("S")="S:X?1""%""9N.E1""?"" X=$E(X,2,10) I 1"
 | 
|---|
| 44 |  ;The DIC("S") was added to preprocess any data from a VIC card. The VIC
 | 
|---|
| 45 |  ;card data has guard codes before and after the patient data. The SSN
 | 
|---|
| 46 |  ;is extracted if these guard codes exist. DIC("S") was added in several
 | 
|---|
| 47 |  ;places and in all instances it is being killed immediately after use.
 | 
|---|
| 48 |  D ^DIC K DIC("S"),DLAYGO K:Y>0 DUOUT
 | 
|---|
| 49 |  ;Since VIC card data contains carats, DUOUT will be returned whenever
 | 
|---|
| 50 |  ;the VIC card is used.  If the user ^'s out, Y will be equal to -1.
 | 
|---|
| 51 |  ;If Y is greater than 0 the data is valid and DUOUT should be ignored.
 | 
|---|
| 52 |  I Y<1 K DIC D LAYG G DPA
 | 
|---|
| 53 |  S DFN=+Y,PNM=$P(Y(0),"^") D PT^LRX D:DOD'="" WARN G END
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | LAYG ;Don't allow DLAYGO on second pass.
 | 
|---|
| 56 |  K DLAYGO S DIC(0)="EQMZ" Q
 | 
|---|
| 57 |  Q:'$P($G(LRPARAM),"^",6)
 | 
|---|
| 58 |  Q:'$D(LRLABKY)
 | 
|---|
| 59 |  S DLAYGO=2 S DIC(0)="EQMZL"
 | 
|---|
| 60 |  Q
 | 
|---|
| 61 | ANY S:DIC'=0 LRDPF=+DIC_^DIC(+DIC,0,"GL") G FL1:DIC'=0 D FILE
 | 
|---|
| 62 |  G NONE:Y=-1,FL0
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 | FL S DIC="^DIC(",DIC(0)=$S(X]"":"EMQZ",1:"AEMQZ"),DIC("S")="I $D(^DIC(""AC"",""LR"",+Y))" D ^DIC G NONE:Y=-1
 | 
|---|
| 65 | FL0 S LRDPF=+Y_^DIC(+Y,0,"GL"),DIC=LRDPF I +$G(LRDPF)=2 K DIC G LRDPA
 | 
|---|
| 66 | FL1 ;
 | 
|---|
| 67 |  D:'$D(LRLABKY) LABKEY^LRPARAM
 | 
|---|
| 68 |  ;DLAYGO not allowed for DPT(
 | 
|---|
| 69 |  I +LRDPF'=2,'$G(LRLOOKUP) S DLAYGO=+LRDPF
 | 
|---|
| 70 |  S DIC="^"_$P(LRDPF,"^",2),DIC(0)=$S($D(LRX):"EMQZ",1:"AEMQZ")
 | 
|---|
| 71 |  I '$G(LRLOOKUP) D
 | 
|---|
| 72 |  .S DIC(0)=DIC(0)_$S(+LRDPF>60&(+LRDPF<70)&$D(LRLABKY):"L",+LRDPF>1000:"L",1:"")
 | 
|---|
| 73 |  .S:DIC(0)["L" DLAYGO=+LRDPF
 | 
|---|
| 74 |  S:$D(LRX) X=LRX K LRX,DIC("S")
 | 
|---|
| 75 |  I X["?" S DIC("S")="S:X?1""%""9N.E1""?"" X=$E(X,2,10) I 1" D ^DIC K DIC("S") K:Y>0 DUOUT S:DIC(0)'["A" DIC(0)=DIC(0)_"A"
 | 
|---|
| 76 |  W:DIC(0)'["A" "   Entry: ",X
 | 
|---|
| 77 |  S DIC("S")="S:X?1""%""9N.E1""?"" X=$E(X,2,10) I 1"
 | 
|---|
| 78 |  S:DIC="^LAB(62.3," DIC("S")=DIC("S")_" "_"I '$P(^LAB(62.3,Y,0),U,4)"
 | 
|---|
| 79 |  D ^DIC K DIC("S") G NONE:Y=-1 S DFN=+Y,PNM=$P(Y(0),"^") D PT^LRX
 | 
|---|
| 80 |  G END
 | 
|---|
| 81 | NONE S Y=-1,DFN=-1,LRDFN=-1,LRDPF="0^NULL("
 | 
|---|
| 82 |  K DIC,VAIN,VADM,VA S VA200="" Q
 | 
|---|
| 83 |  Q
 | 
|---|
| 84 | REASK S DFN=-1,DIC("S")="S:X?1""%""9N.E1""?"" X=$E(X,2,10) I 1",DIC(0)=DIC(0)_"A"
 | 
|---|
| 85 |  D ^DIC K:Y>0 DUOUT K DIC("S") G:Y<1 END S DFN=+Y,PNM=$P(Y(0),"^") D PT^LRX
 | 
|---|
| 86 | END ;from LROR, LRSETUP
 | 
|---|
| 87 |  S:'$D(DFN) DFN=-1 S Y=DFN
 | 
|---|
| 88 |  I DFN=-1 D  Q
 | 
|---|
| 89 |  .S LRDFN=-1 K DIC,DLAYGO S VA200=""
 | 
|---|
| 90 |  S X="^"_$P(LRDPF,"^",2)_Y_",""LR"")",LRDFN=+$S($D(@X):@X,1:-1)
 | 
|---|
| 91 |  G E3:LRDFN>0
 | 
|---|
| 92 |  L +^LR(0):5 I '$T D  Q
 | 
|---|
| 93 |  .S MSG="The LAB DATA file is locked.  Please try again later."
 | 
|---|
| 94 |  .D EN^DDIOL(MSG,"","!!") K MSG
 | 
|---|
| 95 |  .S (DFN,LRDFN)=-1,VA200=""
 | 
|---|
| 96 |  .K DIC,DLAYGO
 | 
|---|
| 97 |  S LRDFN=$P(^LR(0),"^",3)+1
 | 
|---|
| 98 |  I $D(@X) L -^LR(0) K DIC,DLAYGO G LRDPA
 | 
|---|
| 99 | E2 I $D(^LR(LRDFN)) S LRDFN=LRDFN+1 G E2
 | 
|---|
| 100 |  S ^LR(LRDFN,0)=LRDFN_"^"_+LRDPF_"^"_DFN,@X=LRDFN,^(0)=$P(^LR(0),"^",1,2)_"^"_LRDFN_"^"_(1+$P(^(0),"^",4)),^LR("B",LRDFN,LRDFN)="" L -^LR(0)
 | 
|---|
| 101 | E3 I '$D(^LR(LRDFN,0))#2 W !!,"Internal patient ID incorrect in ^LR( for ",PNM,".  Contact Lab Coordinator.",$C(7) S LRDFN=-1 Q
 | 
|---|
| 102 |  I LRDFN>0,$P(^LR(LRDFN,0),"^",2)'=+LRDPF!($P(^(0),"^",3)'=DFN) W !,$C(7),"Internal patient ID incorrect for ",PNM,".  Contact Lab Coordinator." S LRDFN=-1 Q
 | 
|---|
| 103 |  D INF^LRX
 | 
|---|
| 104 |  D ^LRDPA1:($D(LRDPAF)&(LRDFN>0)) K DIC,DLAYGO S VA200=""
 | 
|---|
| 105 |  I DFN,$P($G(^ORD(100.99,1,"CONV")),"^")=0 D EN^LR7OV2(DFN_";"_$P(LRDPF,"^",2),1)
 | 
|---|
| 106 |  Q
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 | FILE I X'["?" W !,"Select FILE: " R X:DTIME I X["^"!(X="") S X="",Y=-1 Q
 | 
|---|
| 109 |  D DICQ:X["?" G FILE:X=""
 | 
|---|
| 110 |  S DIC="^DIC(",DIC(0)="EMQZ"
 | 
|---|
| 111 |  S DIC("S")="I $D(^DIC(""AC"",""LR"",+Y)),+Y'=44"
 | 
|---|
| 112 |  D ^DIC K DIC("S") I Y=-1 G FILE
 | 
|---|
| 113 |  Q
 | 
|---|
| 114 | DICQ ;
 | 
|---|
| 115 |  S DIC="^DIC(",DIC(0)="EQZ",D="AC",X="LR"
 | 
|---|
| 116 |  S DIC("S")="I +Y'=44"  D IX^DIC
 | 
|---|
| 117 |  I Y=-1 S X="" Q
 | 
|---|
| 118 |  S X=Y(0,0)
 | 
|---|
| 119 |  K D,DIC S Y=1
 | 
|---|
| 120 |  Q
 | 
|---|
| 121 | % R %:DTIME Q:%=""!(%["N")!(%["Y")  W !,"Answer 'Y' or 'N': " G %
 | 
|---|
| 122 |  ;
 | 
|---|
| 123 | EN2(DFN,LOCK,TALK) ;Patient Lock
 | 
|---|
| 124 |  ;TALK 1:write, 0:silent
 | 
|---|
| 125 |  ;LOCK 1:lock, 0:unlock
 | 
|---|
| 126 |  Q:'$G(DFN)
 | 
|---|
| 127 |  S:'$D(LOCK) LOCK=0 S:'$D(TALK) TALK=0
 | 
|---|
| 128 |  S X=DFN_";DPT("
 | 
|---|
| 129 |  I LOCK D LK^ORX2
 | 
|---|
| 130 |  I 'LOCK D ULK^ORX2
 | 
|---|
| 131 |  Q
 | 
|---|
| 132 | WARN ;Warn the user the patient has died and display date of death (LR*5.2*360)
 | 
|---|
| 133 |  S Y=DOD D DD^LRX
 | 
|---|
| 134 |  W !?10,@LRVIDO,"Patient ",PNM," died on: ",Y,@LRVIDOF,!
 | 
|---|
| 135 |  S DIR(0)="Y"
 | 
|---|
| 136 |  S DIR("A")="Do you wish to continue with this patient [Yes/No]"
 | 
|---|
| 137 |  S DIR("T")=120
 | 
|---|
| 138 |  D ^DIR K DIR
 | 
|---|
| 139 |  I Y=0!($D(DIRUT)) S DFN=-1
 | 
|---|
| 140 |  K DIRUT
 | 
|---|
| 141 |  Q
 | 
|---|