1 | LRVR4 ;DALOI/CJS/DALOI/FHS - LAB ROUTINE DATA VERIFICATION ; 24 Jan 2004
|
---|
2 | ;;5.2;LAB SERVICE;**14,42,121,153,221,263,279,283,287,286,330**;Sep 27, 1994
|
---|
3 | I $D(LRSBCOM) D
|
---|
4 | . N LRX
|
---|
5 | . S LRX=0
|
---|
6 | . F S LRX=$O(LRSBCOM(LRX)) Q:LRX="" S ^LAH(LRLL,1,LRSQ,1,LRX)=LRSBCOM(LRX)
|
---|
7 | K %,LRSBCOM
|
---|
8 | D LOOP
|
---|
9 | Q
|
---|
10 | ;
|
---|
11 | ;
|
---|
12 | LOOP ;
|
---|
13 | S LRLCT=0
|
---|
14 | W !!,PNM," SSN: ",SSN," "
|
---|
15 | I LRDPF=2 W " LOC: ",$S(LRWRD'="":LRWRD,1:$S($L($P(^LRO(68,LRAA,1,LRAD,1,LRAN,0),U,7)):$P(^(0),U,7),1:"??"))
|
---|
16 | W !,"Pat Info: ",$P($G(^LR(LRDFN,.091)),U)
|
---|
17 | W ?34," Sex: ",$S(SEX="M":"MALE",SEX="F":"FEMALE",1:SEX)
|
---|
18 | W ?48," Age: ",$$CALCAGE^LRRPU(DOB,LRCDT)," as of ",$$FMTE^XLFDT(LRCDT,"1D")
|
---|
19 | S LRPRAC=$P(^LRO(68,LRAA,1,LRAD,1,LRAN,0),U,8)
|
---|
20 | I LRPRAC>0,LRPRAC=+LRPRAC D GETS^DIQ(200,LRPRAC_",",".01;.132;.137;.138","E","LRPRAC(LRPRAC)","LRERR")
|
---|
21 | W !,"Provider: "
|
---|
22 | S LRLCT=LRLCT+3
|
---|
23 | I LRPRAC'="",'$D(LRPRAC(LRPRAC,200)) W LRPRAC
|
---|
24 | I LRPRAC,$D(LRPRAC(LRPRAC,200)) D
|
---|
25 | . W LRPRAC(LRPRAC,200,LRPRAC_",",.01,"E"),?40," Voice pager: ",LRPRAC(LRPRAC,200,LRPRAC_",",.137,"E")
|
---|
26 | . W !," Phone: ",LRPRAC(LRPRAC,200,LRPRAC_",",.132,"E"),?38," Digital pager: ",LRPRAC(LRPRAC,200,LRPRAC_",",.138,"E")
|
---|
27 | . S LRLCT=LRLCT+1
|
---|
28 | ;
|
---|
29 | N PRAC,PR
|
---|
30 | D PRAC^LR7OMERG(LRAA,LRAD,LRAN,.PRAC)
|
---|
31 | I $O(PRAC(0)) D
|
---|
32 | . S PR=0
|
---|
33 | . F S PR=$O(PRAC(PR)) Q:PR<1 I $D(^VA(200,PR,0)) W !?14,$P(^(0),"^") S LRLCT=LRLCT+1
|
---|
34 | ;
|
---|
35 | W ! S LRNX=0,LRVRM=1,Z=LRCDT,LRLCT=LRLCT+1
|
---|
36 | I $P(Z1,U,7)'="" W !,"VOLUME: ",$P(Z1,U,7) S LRLCT=LRLCT+1
|
---|
37 | S LRACC=$P(Z1,U,6)
|
---|
38 | W !,"ACCESSION:",?30,$P(Z2,U,6),?44," ",LRACC
|
---|
39 | W !,LRPANEL,?30,LRDAT(2),?44," ",LRDAT
|
---|
40 | S LRLCT=LRLCT+2
|
---|
41 | I $D(LRALERT),LRALERT<($P(LRPARAM,U,20)+1) D
|
---|
42 | . W !?15 W:$E(IOST,1,2)="C-" @LRVIDO
|
---|
43 | . W "Test ordered "_$P($G(^LAB(62.05,+LRALERT,0)),U)
|
---|
44 | . W:$E(IOST,1,2)="C-" @LRVIDOF,$C(7)
|
---|
45 | . S LRLCT=LRLCT+1
|
---|
46 | I $D(LRGVP) D V20 Q
|
---|
47 | I ($O(LRSB(0))<1!$D(LRPER))&'$D(LRNUF) D LRSBCOM G EDIT
|
---|
48 | K LRNUF
|
---|
49 | D V20:'$D(LRPER) Q:$O(LRSB(1))<1 G:LREDIT EDIT
|
---|
50 | V36 ;
|
---|
51 | S LRTEC=$S($D(^LRO(68,LRAA,1,LRAD,2)):$P(^(2),U),1:$S($D(LRUSI):LRUSI,1:"")),LREDIT=0
|
---|
52 | ;
|
---|
53 | V3 ;
|
---|
54 | D LRSBCOM,DCOM^LRVERA
|
---|
55 | ;
|
---|
56 | ; If entering reference lab results only allow editing comments/workload
|
---|
57 | K DIR
|
---|
58 | S LRLCT=0
|
---|
59 | I $G(LRDUZ(2)),DUZ(2)'=LRDUZ(2) D
|
---|
60 | . S DIR(0)="SAO^C:Comments;W:Workload"
|
---|
61 | . S DIR("A")="SELECT ('C' for Comments, 'W' Workload): "
|
---|
62 | E D
|
---|
63 | . S DIR(0)="SAO^E:Edit;C:Comments;W:Workload"
|
---|
64 | . S DIR("A")="SELECT ('E' to Edit, 'C' for Comments, 'W' Workload): "
|
---|
65 | D ^DIR
|
---|
66 | I $D(DIRUT) S X="^" G V37
|
---|
67 | S X=Y
|
---|
68 | S:$E(X)="E" LREDIT=1,X=""
|
---|
69 | I X="C" D COM G LOOP
|
---|
70 | ;
|
---|
71 | I $E(X)="W" D G LOOP
|
---|
72 | . I $P(LRPARAM,U,14),$P($G(^LRO(68,LRAA,0)),U,16) D STD^LRCAPV,EN^LRCAPV S LREND=0 Q
|
---|
73 | . W !?10,"Workload is not activated. "
|
---|
74 | ;
|
---|
75 | S X=$S(X="@":"",X="":LRTEC,1:X),LRTEC=X
|
---|
76 | S:'$D(^LRO(68,LRAA,1,LRAD,2)) ^(2)="" S ^(2)=X_U_$P(^(2),U,2,99)
|
---|
77 | G EDIT:LREDIT
|
---|
78 | V37 Q ;LEAVE LRVR4, BACK TO LRVR3
|
---|
79 | ;
|
---|
80 | ;
|
---|
81 | V25 ;
|
---|
82 | I LRVF K LRSB(LRSB),LRM(LRSB) Q
|
---|
83 | I '$D(LRSB(LRSB)) S LRSB(LRSB)=^LR(LRDFN,LRSS,LRIDT,LRSB) Q
|
---|
84 | Q
|
---|
85 | ;
|
---|
86 | ;
|
---|
87 | V20 S LRNX=$O(LRORD(LRNX)) G V35:LRNX<1 D SUBS G V20:'LRTS
|
---|
88 | I $D(^LR(LRDFN,LRSS,LRIDT,LRSB)),^(LRSB)'["pending" D V25 G:LRVF V20
|
---|
89 | I "CH"'=LRSS G V20
|
---|
90 | D V25^LRVR5
|
---|
91 | W !,$P(^LAB(60,+LRTS,0),U)
|
---|
92 | S X1=""
|
---|
93 | I $D(^LR(LRDFN,LRSS,LRLDT,LRSB)) D
|
---|
94 | . S X1=$P(^(LRSB),U),(LRDL,X)=X1
|
---|
95 | . I $$GET1^DID(63.04,LRSB,"","TYPE","","LRERR")="SET" D
|
---|
96 | . . S X=$$EXTERNAL^DILFD(63.04,LRSB,"",X1)
|
---|
97 | . . I X="" S X=X1
|
---|
98 | . W:X'="" ?30,@LRFP
|
---|
99 | S X="",LRFLG=""
|
---|
100 | I $D(LRSB(LRSB)),$P(LRSB(LRSB),U)'="" D
|
---|
101 | . N LRX
|
---|
102 | . K LRNOVER(LRSB)
|
---|
103 | . S (LRDL,LRX,X)=$P(LRSB(LRSB),U)
|
---|
104 | . I $$GET1^DID(63.04,LRSB,"","TYPE","","LRERR")="SET" D
|
---|
105 | . . S X=$$EXTERNAL^DILFD(63.04,LRSB,"",LRX)
|
---|
106 | . . I X="" S X=LRX
|
---|
107 | . W ?44," ",@LRFP," "
|
---|
108 | . S X=LRX,Y=0
|
---|
109 | . K LRQ
|
---|
110 | . I X="" Q
|
---|
111 | . I (X="canc")!(X="comment")!(X="pending") D Q
|
---|
112 | . . W LRFLG,?56," ",$P(LRNG,U,7)
|
---|
113 | . . S LREDIT=0
|
---|
114 | . I LRDEL'="" S LRQ=1,LRVRM=11 X LRDEL S LRVRM=1 K LRQ
|
---|
115 | . D RANGE
|
---|
116 | . W LRFLG,?56," ",$P(LRNG,U,7) S:X'="" LREDIT=0
|
---|
117 | I '$D(LRNUF) S LRLCT=LRLCT+1 S:$X>80 LRLCT=LRLCT+1 D:LRLCT>22 WT G:$G(Y)'="^" V20
|
---|
118 | ;
|
---|
119 | V35 ;
|
---|
120 | D LRCFL:LRCFL]""
|
---|
121 | K LRNUF
|
---|
122 | Q
|
---|
123 | ;
|
---|
124 | ;
|
---|
125 | LRCFL ;
|
---|
126 | S LREXEC=LRCFL D ^LREXEC:LRCFL[""
|
---|
127 | D:LRLCT>22 WT
|
---|
128 | Q
|
---|
129 | ;
|
---|
130 | ;
|
---|
131 | EDIT ;
|
---|
132 | S LROUT=1 D ^LRVR5
|
---|
133 | S LRVRM=1,LREDIT=0
|
---|
134 | G LRCFL:LROUT!$D(LRPER),LOOP
|
---|
135 | ;
|
---|
136 | ;
|
---|
137 | RANGE ;
|
---|
138 | ; If results from another system, use flags returned with results
|
---|
139 | ; and set LRNG,LRNGS with normals from message.
|
---|
140 | ; Check for LRDUZ(2) set for performing lab or performing lab set (piece 9) in LRSB(LRSB) array.
|
---|
141 | I $G(LRDUZ(2)),DUZ(2)'=LRDUZ(2) S Y=X D PLNR,CKPLNR,RQ Q
|
---|
142 | I $P(LRSB(LRSB),"^",9),DUZ(2)'=$P(LRSB(LRSB),"^",9) S Y=X D PLNR,CKPLNR,RQ Q
|
---|
143 | ;
|
---|
144 | D RANGE^LRVER4,RQ
|
---|
145 | Q
|
---|
146 | ;
|
---|
147 | ;
|
---|
148 | RQ S X=Y
|
---|
149 | NR I $D(LRSB(LRSB))#2 D
|
---|
150 | . N I,LRX,LRY
|
---|
151 | . I $P(X,U)="" S LRSB(LRSB)="" Q
|
---|
152 | . S $P(LRSB(LRSB),U)=X
|
---|
153 | . S $P(LRSB(LRSB),U,2)=LRFLG
|
---|
154 | . S $P(LRSB(LRSB),U,4)=$S($G(LRDUZ):LRDUZ,1:$G(DUZ))
|
---|
155 | . I $P(LRSB(LRSB),U,9)="" S $P(LRSB(LRSB),U,9)=$S($G(LRDUZ(2)):LRDUZ(2),$G(DUZ(2)):DUZ(2),1:"")
|
---|
156 | . S LRX=$$TMPSB^LRVER1(LRSB),LRY=$P(LRSB(LRSB),U,3)
|
---|
157 | . F I=1:1:$L(LRX,"!") I $P(LRY,"!",I)="" S $P(LRY,"!",I)=$P(LRX,"!",I)
|
---|
158 | . S $P(LRSB(LRSB),U,3)=LRY
|
---|
159 | . I $P($P(LRSB(LRSB),U,3),"!")="" D RONLT^LRVER3
|
---|
160 | . S LRX=LRNGS,LRY=$P(LRSB(LRSB),U,5)
|
---|
161 | . F I=1:1:$L(LRX,U) I $P(LRY,"!",I)="" S $P(LRY,"!",I)=$P(LRX,U,I)
|
---|
162 | . S $P(LRSB(LRSB),U,5)=LRY
|
---|
163 | Q
|
---|
164 | ;
|
---|
165 | ;
|
---|
166 | PLNR ; Performing lab normal ranges, use instead of current local ranges
|
---|
167 | ; Retrieve from results when "NPC" node = 2 or greater
|
---|
168 | ; and set LRNG and LRNGS with normals from HL7 message/interface.
|
---|
169 | N I,LRY
|
---|
170 | I +$G(^LR(LRDFN,LRSS,LRIDT,"NPC"))<2 Q
|
---|
171 | S LRY=$P($G(LRSB(LRSB)),"^",5)
|
---|
172 | S $P(LRNGS,"^")=$P(LRY,"!")
|
---|
173 | F I=2:1:5,11,12 D
|
---|
174 | . ; enclose in quotes if not numeric
|
---|
175 | . I I<6,$P(LRY,"!",I)'?.N.1".".N S $P(LRY,"!",I)=$C(34)_$P(LRY,"!",I)_$C(34)
|
---|
176 | . S $P(LRNGS,"^",I)=$P(LRY,"!",I),$P(LRNG,"^",I)=$P(LRY,"!",I),@("LRNG"_I)=$P(LRY,"!",I)
|
---|
177 | S $P(LRNG,"^",7)=$P(LRY,"!",7),$P(LRNGS,"^",7)=$P(LRY,"!",7)
|
---|
178 | Q
|
---|
179 | ;
|
---|
180 | ;
|
---|
181 | CKPLNR ; Check performing lab normal ranges and set abnormal flag
|
---|
182 | ; based on HL7 messages/interface.
|
---|
183 | S LRFLG=$P(LRSB(LRSB),"^",2)
|
---|
184 | I '$D(LRQ),$E(LRFLG,2)="*" D DISPFLG^LRVER4
|
---|
185 | Q
|
---|
186 | ;
|
---|
187 | ;
|
---|
188 | SUBS D SUBS^LRVER4
|
---|
189 | Q
|
---|
190 | ;
|
---|
191 | ;
|
---|
192 | WT D WT^LRVER4
|
---|
193 | Q
|
---|
194 | ;
|
---|
195 | ;
|
---|
196 | COM ;from LRVR5
|
---|
197 | Q:$D(LRGVP)!('$D(LRLABKY))
|
---|
198 | D DCOM^LRVERA
|
---|
199 | K DR,DA,DIE
|
---|
200 | S DIE="^LR("_LRDFN_",""CH"",",DA=LRIDT,DA(1)=LRDFN,DR=.99 D ^DIE
|
---|
201 | Q
|
---|
202 | ;
|
---|
203 | ;
|
---|
204 | LRSBCOM ;Display/store comments from the instrument
|
---|
205 | N LRSBCOM,LRI
|
---|
206 | S LRI=0
|
---|
207 | F S LRI=$O(^LAH(LRLL,1,LRSQ,1,LRI)) Q:LRI="" D
|
---|
208 | . S LRSBCOM=^LAH(LRLL,1,LRSQ,1,LRI)
|
---|
209 | . I $P(LRSBCOM,"^",2) Q ; Already been processed
|
---|
210 | . D LRSBCOM1
|
---|
211 | . S $P(^LAH(LRLL,1,LRSQ,1,LRI),U,2)=1 ; Mark as processed
|
---|
212 | I $G(LRQUIET) Q
|
---|
213 | W !
|
---|
214 | S LRLCT=$G(LRLCT)+1 D:LRLCT>22 WT
|
---|
215 | Q
|
---|
216 | ;
|
---|
217 | ;
|
---|
218 | LRSBCOM1 ; Store instrument comments in file #63
|
---|
219 | ; Check for duplicate comments in ^LAH and ^LR globals
|
---|
220 | N LRDUP,LRERR,LRI,LRNOECHO,LRNOEXPD,LRX,LRY
|
---|
221 | ;
|
---|
222 | ; Don't echo comments/don't expand comment using lab description file.
|
---|
223 | ; Used by LRNUM - called from input transform of #.01 field.
|
---|
224 | S LRNOECHO=0,LRNOEXPD=1
|
---|
225 | ;
|
---|
226 | ; Check for duplicates - comment stripped if spaces, force to upper case unless
|
---|
227 | ; flag set to store duplicates (Field #2.2 of PROFILE multiple in file #68.2)
|
---|
228 | S LRDUP=0
|
---|
229 | I '$P($G(^LRO(68.2,LRLL,10,+$G(LRPROF),0)),U,4) D
|
---|
230 | . S LRI=0,LRY=$TR(LRSBCOM," ",""),LRY=$$UP^XLFSTR(LRY)
|
---|
231 | . F S LRI=$O(^LR(LRDFN,"CH",LRIDT,1,LRI)) Q:'LRI D Q:LRDUP
|
---|
232 | . . S LRX=$P($G(^LR(LRDFN,"CH",LRIDT,1,LRI,0)),U)
|
---|
233 | . . S LRX=$TR(LRX," ",""),LRX=$$UP^XLFSTR(LRX)
|
---|
234 | . . I LRX=LRY S LRDUP=1
|
---|
235 | I LRDUP=1 Q ; Duplicate comment
|
---|
236 | D FILECOM(LRDFN,LRIDT,LRSBCOM)
|
---|
237 | I $G(LRQUIET) Q
|
---|
238 | W !,"Inst Comments: "_LRSBCOM
|
---|
239 | S LRLCT=$G(LRLCT)+1 D:LRLCT>10 WT
|
---|
240 | Q
|
---|
241 | ;
|
---|
242 | ;
|
---|
243 | FILECOM(LRDFN,LRIDT,LRCMT) ; File comment in field #99
|
---|
244 | ; Call with LRDFN = ien of patient in file #63
|
---|
245 | ; LRIDT = ien of specimen date/time
|
---|
246 | ; LRCMT = comment to store
|
---|
247 | ;
|
---|
248 | N LRFDA,LRERR
|
---|
249 | S LRFDA(2,63.041,"+2,"_LRIDT_","_LRDFN_",",.01)=LRCMT
|
---|
250 | D UPDATE^DIE("","LRFDA(2)","","LRERR(2)")
|
---|
251 | Q
|
---|