1 | LRX ;SLC/BA/DALISC/FHS - UTILITY ROUTINES -- PREVIOUSLY ^LAB("X","...") ;1/26/07 18:36
|
---|
2 | ;;5.2;LAB SERVICE;**65,153,201,217,290,360,350**;Sep 27, 1994;Build 10
|
---|
3 | PT ;patient info
|
---|
4 | ;
|
---|
5 | N X,I,N,Y
|
---|
6 | D KVAR^VADPT
|
---|
7 | K LRTREA,LRWRD,AGE S (AGE,PNM,SEX,DOB,DOD,SSN,VA200,LRWRD,LRRB,LRTREA,VA("PID"),VA("BID"))=""
|
---|
8 | I $G(LRDFN),'$G(LRDPF),$G(^LR(LRDFN,0)) S LRDPF=$P(^(0),U,2),DFN=$P(^(0),U,3)
|
---|
9 | S LREND=0 S:$G(DFN)<1!('$G(LRDPF)) LREND=1 Q:$G(LREND)
|
---|
10 | I +$G(LRDPF)'=2 D
|
---|
11 | . S X=$$GET1^DID(1,+LRDPF,"","GLOBAL NAME","ANS","ANS1")
|
---|
12 | . S X=X_DFN_",0)",X=$S($D(@X):@X,1:""),LRWRD=$S($D(^(.1)):$P(^(.1),U),1:0),LRRB=$S($D(^(.101)):$P(^(.101),U),1:""),DOD=$S($D(^(.35)):$P(^(.35),U),1:"")
|
---|
13 | . S PNM=$P(X,U),SSN=$P(X,U,9) Q:+$G(LRDPF)=62.3
|
---|
14 | . S SEX=$P(X,U,2),SEX=$S(SEX="":"M",1:SEX)
|
---|
15 | . S DOB=$P(X,U,3)
|
---|
16 | . S AGE=$S($D(DT)&(DOB?1(7N,7N1".".6N)):DT-DOB\10000,1:"??")
|
---|
17 | . S AGE(2)=$$AGE2(DOB,$G(LRCDT)) ;Age of the patient when the specimen was collected (default =99Yr if no valid DOB present)
|
---|
18 | . ;Default for LRCDT (collection date) is DT
|
---|
19 | I +$G(LRDPF)=2 D
|
---|
20 | . N I,X,N,Y
|
---|
21 | . D OERR^VADPT D:'VAERR
|
---|
22 | . . S PNM=VADM(1)
|
---|
23 | . . S SEX=$P(VADM(5),U),DOB=$P(VADM(3),U),DOD=$P(VADM(6),U)
|
---|
24 | . . S AGE=VADM(4),AGE(2)=$$AGE2(DOB,$G(LRCDT))
|
---|
25 | . . ; S SSN=$P(VADM(2),U),LRWRD=$P(VAIN(4),U,2)
|
---|
26 | . . S SSN=VA("PID"),LRWRD=$P(VAIN(4),U,2) ; for VOE
|
---|
27 | . . S LRWRD(1)=+VAIN(4),LRRB=VAIN(5),LRPRAC=+VAIN(2)
|
---|
28 | . . S:VAIN(3) LRTREA=+VAIN(3)
|
---|
29 | D SSNFM^LRU
|
---|
30 | Q
|
---|
31 | DEM ;Call DEM^VADPT instead of OERR used above
|
---|
32 | N X,I,N,Y
|
---|
33 | D KVAR^VADPT
|
---|
34 | K LRTREA,LRWRD,AGE S (AGE,PNM,SEX,DOB,SSN,VA200,LRWRD,LRRB,LRTREA,VA("PID"),VA("BID"))=""
|
---|
35 | I $G(LRDFN),'$G(LRDPF),$G(^LR(LRDFN,0)) S LRDPF=$P(^(0),U,2),DFN=$P(^(0),U,3)
|
---|
36 | S LREND=0 S:$G(DFN)<1!('$G(LRDPF)) LREND=1 Q:$G(LREND)
|
---|
37 | I +$G(LRDPF)'=2 D
|
---|
38 | . S X=^DIC(+LRDPF,0,"GL")_DFN_",0)",X=$S($D(@X):@X,1:""),LRWRD=$S($D(^(.1)):$P(^(.1),U),1:0),LRRB=$S($D(^(.101)):$P(^(.101),U),1:"")
|
---|
39 | . S PNM=$P(X,U),SEX=$P(X,U,2),SEX=$S(SEX="":"M",1:SEX),DOB=$P(X,U,3)
|
---|
40 | . S AGE=$S($D(DT)&(DOB?1(7N,7N1".".6N)):DT-DOB\10000,1:"??")
|
---|
41 | . S AGE(2)=$$AGE2(DOB,$G(LRCDT))
|
---|
42 | . S SSN=$P(X,U,9)
|
---|
43 | I +$G(LRDPF)=2 N I,X,N,Y D
|
---|
44 | . D DEM^VADPT D:'VAERR
|
---|
45 | . . S PNM=VADM(1),SEX=$P(VADM(5),U)
|
---|
46 | . . ; S DOB=$P(VADM(3),U),SSN=$P(VADM(2),U)
|
---|
47 | . . S DOB=$P(VADM(3),U),SSN=VA("PID") ; for VOE
|
---|
48 | . . S AGE=VADM(4),AGE(2)=$$AGE2(DOB,$G(LRCDT))
|
---|
49 | D SSNFM^LRU
|
---|
50 | Q
|
---|
51 | DD ;date/time format
|
---|
52 | S Y=$$FMTE^XLFDT(Y,"5Z")
|
---|
53 | S Y=$P(Y,"@")_" "_$P($P(Y,"@",2),":",1,2)
|
---|
54 | Q
|
---|
55 | DDOLD ;OLD
|
---|
56 | I $E(Y,4,7)="0000" S Y=$S($E(Y)=2:"19"_$E(Y,2,3),1:"20"_$E(Y,2,3)) Q
|
---|
57 | S Y=$E(Y,4,5)_"/"_$E(Y,6,7)_"/"_$E(Y,2,3)_$S(Y#1:" "_$E(Y_0,9,10)_":"_$E(Y_"000",11,12),1:"")
|
---|
58 | Q
|
---|
59 | DT ;current date format is LRDT0
|
---|
60 | N X,DIK,DIC,%I,DICS,%DT
|
---|
61 | D DT^DICRW
|
---|
62 | S Y=$$FMTE^XLFDT(DT,"5D")
|
---|
63 | S LRDT0=Y
|
---|
64 | Q
|
---|
65 | DTOLD ;2-DIGIT
|
---|
66 | ;current date format is LRDT0
|
---|
67 | N X,DIK,DIC,%I,DICS,%DT
|
---|
68 | D DT^DICRW
|
---|
69 | S Y=$P(DT,".") D DDOLD S LRDTO=Y
|
---|
70 | Q
|
---|
71 | DASH ;line of dashes
|
---|
72 | W !,$E("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------",1,IOM-1)
|
---|
73 | Q
|
---|
74 | EQUALS ;line of equals
|
---|
75 | W !,$E("====================================================================================================================================================================================================================",1,IOM-1)
|
---|
76 | Q
|
---|
77 | DUZ ;user info
|
---|
78 | S (LRUSNM,LRUSI)="" Q:'$D(X) Q:'$D(^VA(200,+X,0)) S LRUSNM=$P(^(0),"^"),LRUSI=$P(^(0),"^",2)
|
---|
79 | Q
|
---|
80 | DOC ;provider info
|
---|
81 | I $L(X),'X S LRDOC=X Q
|
---|
82 | S LRDOC=$P($G(^VA(200,+X,0)),U)
|
---|
83 | S:LRDOC="" LRDOC="Unknown"
|
---|
84 | Q
|
---|
85 | PRAC(X) ;prac info
|
---|
86 | N Y
|
---|
87 | I $L(X),'X Q X
|
---|
88 | S Y=$P($G(^VA(200,+X,0)),U)
|
---|
89 | S:Y="" Y="Unknown"
|
---|
90 | Q Y
|
---|
91 | YMD ;year/month/date
|
---|
92 | S %=%H>21549+%H-.1,%Y=%\365.25+141,%=%#365.25\1,%D=%+306#(%Y#4=0+365)#153#61#31+1,%M=%-%D\29+1,X=%Y_"00"+%M_"00"+%D K %Y,%D,%M,%
|
---|
93 | Q
|
---|
94 | STAMP ;time stamp
|
---|
95 | S X="N",%DT="ET" D ^%DT
|
---|
96 | Q
|
---|
97 | KEYCOM ;key to result flags
|
---|
98 | D EQUALS W !!," ------------------------------ COMMENTS ------------------------------",!," Key: 'L' = reference Low, 'H' = reference Hi, '*' = critical range"
|
---|
99 | Q
|
---|
100 | URG ;urgencys
|
---|
101 | K LRURG S LRURG(0)="ROUTINE" S I=0 F S I=$O(^LAB(62.05,I)) Q:I<1 I $D(^(I,0)) S:'$P(^(0),U,3) LRURG(I)=$P(^(0),U)
|
---|
102 | Q
|
---|
103 | ADD ;date format
|
---|
104 | S Y=$E("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC",$E(Y,4,5)*3-2,$E(Y,4,5)*3)_" "_$S(Y#100:$J(Y#100\1,2)_", ",1:"")_(Y\10000+1700)_$S(Y#1:" "_$E(Y_0,9,10)_":"_$E(Y_"000",11,12),1:"")
|
---|
105 | Q
|
---|
106 | INF ;Display Infectious Warning
|
---|
107 | I $L($G(IO)),$D(^LR(LRDFN,.091)),$L(^(.091)),'$G(LRQUIET) W !,$C(7)," Pat Info: ",^(.091) Q
|
---|
108 | Q
|
---|
109 | LRGLIN ;
|
---|
110 | N HZ
|
---|
111 | D GSET^%ZISS W IOG1
|
---|
112 | F HZ=1:1:79 W IOHL
|
---|
113 | W IOG0 D GKILL^%ZISS
|
---|
114 | W !
|
---|
115 | Q
|
---|
116 | LRUID(LRAA,LRAD,LRAN) ;Extrinsic function call to create a unique
|
---|
117 | ;accession identifier for an accession number. See description
|
---|
118 | ;of field .092 in file 68 for a full explanation of this number.
|
---|
119 | ;This function returns a value equal to the unique ID generated.
|
---|
120 | ;LRAA=ien in file 68, accession area
|
---|
121 | ;LRAD=ien for accession date in field 68.01
|
---|
122 | ;LRAN=ien for accession number in field 68.02
|
---|
123 | Q:$S('$G(LRAA):1,'$D(^LRO(68,LRAA,.4)):1,1:0) 0
|
---|
124 | N DA,DIE,DLAYGO,DR,LRMNTH,LRUID,LRQTR,LRTYPE,LRYR1,LRYR2,LRJUL
|
---|
125 | S LRUID=$P($G(^LRO(68,LRAA,.4)),"^") ;start building LRUID
|
---|
126 | S:$L(LRUID)'=2 LRUID="0"_LRUID
|
---|
127 | S LRTYPE=$P($G(^LRO(68,LRAA,0)),"^",3)
|
---|
128 | S LRYR1=$E(LRAD,3)
|
---|
129 | S LRYR2=$E(LRAD,2,3)
|
---|
130 | S LRMNTH=$E(LRAD,4,5)
|
---|
131 | S LRQTR=0_(LRMNTH\3.1+1)
|
---|
132 | I "DW"[LRTYPE D
|
---|
133 | . S X1=LRAD,X2=$E(LRAD,1,3)_"0101" D ^%DTC
|
---|
134 | . S X=X+1,LRJUL=$E("000",1,3-$L(X))_X
|
---|
135 | . S LRUID=LRUID_LRYR1_LRJUL
|
---|
136 | . S LRUID=LRUID_$E("0000",1,4-$L(LRAN))_LRAN
|
---|
137 | I LRTYPE="Y" D
|
---|
138 | . S LRUID=LRUID_LRYR2_$E("000000",1,6-$L(LRAN))_LRAN
|
---|
139 | I LRTYPE="Q" D
|
---|
140 | . S LRUID=LRUID_LRYR1_LRQTR
|
---|
141 | . S LRUID=LRUID_$E("00000",1,5-$L(LRAN))_LRAN
|
---|
142 | I LRTYPE="M" D
|
---|
143 | . S LRUID=LRUID_LRYR1_LRMNTH_$E("00000",1,5-$L(LRAN))_LRAN
|
---|
144 | L +^LRO(68,"C"):99999
|
---|
145 | I $D(^LRO(68,"C",LRUID)),'$D(^LRO(68,"C",LRUID,LRAA,LRAD,LRAN)) D
|
---|
146 | . N X
|
---|
147 | . S X=$E(LRUID,3,10)
|
---|
148 | . F S LRUID="00"_X Q:'$D(^LRO(68,"C",LRUID)) S X=X+1 S:X>99999999 X=11111111
|
---|
149 | ;The following fields are also set in rtn LROLOVER
|
---|
150 | SET3 I $G(LRORDRR)'="R" S DR="16////"_LRUID
|
---|
151 | I $G(LRORDRR)="R" D
|
---|
152 | . S DR=";16.1////"_+$G(LRRSITE("RSITE"))_";16.2////"_+$G(LRRSITE("RPSITE"))_";16.3////"_LRUID_";16.4////"_LRSD("RUID")
|
---|
153 | . I '$G(LRRSITE("IDTYPE")),'$D(^LRO(68,"C",LRSD("RUID"))) S LRUID=LRSD("RUID") ; Use sender's UID, unless previously used.
|
---|
154 | . S DR="16////"_LRUID_DR
|
---|
155 | S DA=LRAN,DA(1)=LRAD,DA(2)=LRAA,DIE="^LRO(68,"_DA(2)_",1,"_DA(1)_",1,",DLAYGO=68
|
---|
156 | D ^DIE
|
---|
157 | L -^LRO(68,"C")
|
---|
158 | S LRORU3=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,.3))
|
---|
159 | Q LRUID
|
---|
160 | ;
|
---|
161 | KVAR ;Kill laboratory/VADPT patient demographics
|
---|
162 | K LRTREA,LRWRD,PNM,SEX,DOB,DOD,SSN,LRWRD,LRRB,LRTREA,VA,LRDFN,LRDPF,LREND,VAERR
|
---|
163 | D KVA^VADPT
|
---|
164 | Q
|
---|
165 | ADDPT ;Returns VAPA( Patient data
|
---|
166 | N X,I,N,Y D ADD^VADPT Q
|
---|
167 | OPDPT ;Returns VAPD( Patient data
|
---|
168 | N X,I,N,Y D OPD^VADPT Q
|
---|
169 | SVCPT ;Returns VASV( Patient data
|
---|
170 | N X,I,N,Y D SVC^VADPT Q
|
---|
171 | OADPT ;Returns VAOA( Patient data
|
---|
172 | N X,I,N,Y D OAD^VADPT Q
|
---|
173 | INPPT ;Returns VAIN( Patient data
|
---|
174 | N X,I,N,Y D INP^VADPT Q
|
---|
175 | IN5PT ;Returns VAIP( Patient data
|
---|
176 | N X,I,N,Y D IN5^VADPT Q
|
---|
177 | PIDPT ;Returns VA("PID") and VA("BID") Patient Identifier
|
---|
178 | N X,I,N,Y D PID^VADPT Q
|
---|
179 | ;
|
---|
180 | ;
|
---|
181 | QUIT
|
---|
182 | Y2K(X,LRYR) ; --> used to convert 2digit year to 4digit century and year
|
---|
183 | ; 1/1/91 TO 1/1/1991
|
---|
184 | ;
|
---|
185 | ;S X=$P(X,".") ;--> Date only. Not time
|
---|
186 | S LRYR=$G(LRYR,"5S")
|
---|
187 | N YR
|
---|
188 | S Y=$$FMTE^XLFDT(X,LRYR)
|
---|
189 | I $L($P(Y,"/"))=1 S $P(Y,"/")="0"_$P(Y,"/") ;--> pad for 2digit day
|
---|
190 | I $L($P(Y,"/",2))=1 S $P(Y,"/",2)="0"_$P(Y,"/",2) ;--> for 2digit month
|
---|
191 | Q Y
|
---|
192 | ;
|
---|
193 | QUIT
|
---|
194 | RD ;DIR read
|
---|
195 | N Y,X
|
---|
196 | K LRANSY,LRANSX
|
---|
197 | S LREND=0 W !
|
---|
198 | D ^DIR I $D(DTOUT)!($D(DUOUT))!($D(DIRUT))!($D(DIROUT)) S LREND=1
|
---|
199 | S LRANSY=$G(Y),LRANSX=$G(X)
|
---|
200 | Q
|
---|
201 | AGE2(DOB,LRCDT) ;Entry point if passing only a valid Date without patient
|
---|
202 | ; DOB, LRCDT must be defined in VA FileManager internal format
|
---|
203 | ; Date error will return 99yr
|
---|
204 | N X,Y,%DT
|
---|
205 | I '$G(LRCDT) S LRCDT=$$DT^XLFDT
|
---|
206 | I '$G(DOB) Q "99yr" ;no DOB passed
|
---|
207 | S DOB=$P(DOB,".")
|
---|
208 | S X=DOB,LRCDT=$P(LRCDT,".")
|
---|
209 | I $S(DOB'=+DOB:1,LRCDT'=+LRCDT:1,1:0) Q "99yr"
|
---|
210 | I $S(DOB'?7N.NE:1,LRCDT'?7N.NE:1,1:0) Q "99yr"
|
---|
211 | D ^%DT I Y'>0 Q "99yr" ;invalid date
|
---|
212 | S X=LRCDT
|
---|
213 | K %DT D ^%DT I Y'>0 Q "99yr" ;invalid date
|
---|
214 | ;
|
---|
215 | CALC ;Calculate timeframe based on difference between DOB and collection
|
---|
216 | ; date. Time is stripped off.
|
---|
217 | ; .0001-24 hour = dy
|
---|
218 | ; 0-29 days = dy
|
---|
219 | ; 30-730 dy = mo
|
---|
220 | ; >24 mo = yr
|
---|
221 | ;
|
---|
222 | I DOB>LRCDT Q "99yr" ;DOB in future
|
---|
223 | I DOB=LRCDT Q "1dy" ;same dates---pass 1 day old
|
---|
224 | S X=$E(LRCDT,1,3)-$E(DOB,1,3)-($E(LRCDT,4,7)<$E(DOB,4,7))
|
---|
225 | I X>1 S X=+X_"yr" Q X ;age 2 years or more---pass in years
|
---|
226 | S X=$$FMDIFF^XLFDT(LRCDT,DOB,1)
|
---|
227 | I X>30 S X=X\30_"mo" Q X ;over 30 days---pass in months
|
---|
228 | E S X=X_"dy" Q X ;under 31 days---pass in days
|
---|
229 | Q "99yr"
|
---|