1 | LRVER1 ;DALOI/FHS/JAH - LAB ROUTINE DATA VERIFICATION ;8/10/04
|
---|
2 | ;;5.2;LAB SERVICE;**42,153,201,215,239,240,263,232,286,291**;Sep 27, 1994
|
---|
3 | ;
|
---|
4 | VER ; from LRGVP
|
---|
5 | N LRBEY
|
---|
6 | S LRLLOC=0,LRCW=8,LROUTINE=$P(^LAB(69.9,1,3),U,2) I $D(^LRO(69,LRODT,1,LRSN,0)) S LRLLOC=$P(^(0),U,7) S:'$L(LRLLOC) LRLLOC=0 W !,$P(^LRO(69,LRODT,1,LRSN,1),U,6)
|
---|
7 | S LRCDT=$S($D(^LRO(68,LRAA,1,LRAD,1,LRAN,3)):$P(^(3),U,1,2),1:$P(^(0),U,3)_U),LREAL=$P(LRCDT,U,2)
|
---|
8 | S LRCDT=+LRCDT,LRSAMP=$S($D(^LRO(69,LRODT,1,LRSN,0)):$P(^(0),U,3),1:"")
|
---|
9 | S LRIDT=$S($P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,5):$P(^(3),U,5),1:"")
|
---|
10 | S:'LRIDT LRIDT=9999999-LRCDT
|
---|
11 | D EXP
|
---|
12 | LD S LRSS="CH" ;ONLY WORKS FOR 'CH'
|
---|
13 | S LRMETH=LRSS IF $D(^LR(LRDFN,LRSS,LRIDT,0)) S LRMETH=$P($P(^(0),U,8),";",1)
|
---|
14 | W:$D(^LAB(62,+LRSAMP,0)) !,"Sample: ",$P(^(0),U)
|
---|
15 | K ^TMP("LR",$J,"TMP"),LRORD,LRM
|
---|
16 | D ^LRVER2
|
---|
17 | K LRDL
|
---|
18 | Q
|
---|
19 | ;
|
---|
20 | ;
|
---|
21 | EXP ; Get the list of tests for this ACC. from LRGVG1
|
---|
22 | ; Do not process tests which have been "NP" (not performed).
|
---|
23 | N I,N,IX,LRNLT,T1,X
|
---|
24 | K LRTEST,LRNAME,LRSM60
|
---|
25 | S LRALERT=LROUTINE,N=0,I=0,IX=+$G(^LRO(68,LRAA,1,LRAD,1,LRAN,5,1,0))
|
---|
26 | F S I=$O(^LRO(68,LRAA,1,LRAD,1,LRAN,4,I)) Q:I<.5 D
|
---|
27 | . S X=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,4,I,0))
|
---|
28 | . I 'X Q
|
---|
29 | . I $P(X,"^",6)="*Not Performed" Q
|
---|
30 | . S N=N+1,LRTEST(N)=I,LRNLT=$S($P(X,"^",2)>50:$P(X,U,9),1:$P(X,"^"))
|
---|
31 | . S LRTEST(N,"P")=LRNLT_U_$$NLT(LRNLT)
|
---|
32 | . S LRAL=$P(X,U,2)#50
|
---|
33 | . I LRAL S LRALERT=$S(LRAL<LRALERT:LRAL,1:LRALERT)
|
---|
34 | ;
|
---|
35 | S LRNTN=N
|
---|
36 | F T1=1:1:N I $D(^LAB(60,+LRTEST(T1),0)) D
|
---|
37 | . S LRTEST(T1)=LRTEST(T1)_U_^(0)
|
---|
38 | . S LRNAME(T1)=$P(LRTEST(T1),U,2),LRNAME(T1,+LRTEST(T1))=""
|
---|
39 | . S:$G(^(1,IX,3)) LRSM60(+$P(LRTEST(T1),";",2))=^(3)
|
---|
40 | . D EX1
|
---|
41 | K IX
|
---|
42 | N X1,X
|
---|
43 | S X=$P($H,","),X(1)=$P($H,",",2),I=0
|
---|
44 | F S I=$O(LRSM60(I)) Q:'I S X1=X-LRSM60(I)_","_X(1),LRSM60(I)=9999999-$$HTFM^XLFDT(X1)
|
---|
45 | Q
|
---|
46 | ;
|
---|
47 | ;
|
---|
48 | EX1 ; Expand the list of tests to edit.
|
---|
49 | Q:'$D(LRTEST(T1))
|
---|
50 | S X=LRTEST(T1),^TMP("LR",$J,"VTO",+X)=$P($P(X,U,6),";",2)
|
---|
51 | S ^TMP("LR",$J,"VTO",+X,"P")=LRTEST(T1,"P"),S1=0,J=0
|
---|
52 | D EX2
|
---|
53 | K S1,J
|
---|
54 | Q
|
---|
55 | ;
|
---|
56 | EX2 ;
|
---|
57 | S:'$D(LRCFL) LRCFL=""
|
---|
58 | S LRSUB=$P(X,U,6)
|
---|
59 | I $D(^LAB(60,+X,4)),$P(^(4),"^",2) S LRCFL=LRCFL_$P(^(4),"^",2)_U
|
---|
60 | ;
|
---|
61 | ; If atomic test then setup and quit
|
---|
62 | I LRSUB'="" D Q
|
---|
63 | . S S2=$P(LRSUB,";",2)
|
---|
64 | . D:'$D(^TMP("LR",$J,"TMP",S2)) ORD
|
---|
65 | ;
|
---|
66 | ; Explode panel tests
|
---|
67 | ; Do not process tests which have been "NP" (not performed).
|
---|
68 | S S1=S1+1,S1(S1)=X,S1(S1,1)=J
|
---|
69 | S J=0
|
---|
70 | F S J=$O(^LAB(60,+S1(S1),2,J)) Q:J<1 D
|
---|
71 | . S Y=+^(J,0),X=Y_U_^LAB(60,Y,0)
|
---|
72 | . I $P($G(^LRO(68,+$G(LRAA),1,+$G(LRAD),1,+$G(LRAN),4,Y,0)),"^",6)="*Not Performed" Q
|
---|
73 | . D EX2
|
---|
74 | S X=S1(S1),J=S1(S1,1),S1=S1-1
|
---|
75 | Q
|
---|
76 | ;
|
---|
77 | ;
|
---|
78 | ORD ;
|
---|
79 | ; LRNX is set by caller
|
---|
80 | S LRNX=+$G(LRNX)+1,LRORD(LRNX)=S2
|
---|
81 | S LRBEY($P(LRTEST(T1),U,1),S2)="" ; CIDC
|
---|
82 | S ^TMP("LR",$J,"TMP",S2)=+X
|
---|
83 | ; If panel being exploded then set parent("P" node)
|
---|
84 | ; to file #60 test being exploded
|
---|
85 | I $G(LRTEST(T1,"P")) D
|
---|
86 | . I +LRTEST(T1)=+LRTEST(T1,"P") S ^TMP("LR",$J,"TMP",S2,"P")=LRTEST(T1,"P")_"!"_$$RNLT(+X)
|
---|
87 | . E S ^TMP("LR",$J,"TMP",S2,"P")=+LRTEST(T1)_U_$$NLT(+LRTEST(T1))_"!"_$$RNLT(+X)
|
---|
88 | ;
|
---|
89 | I $P(X,U,18) D
|
---|
90 | . S LRM(S2)=+X
|
---|
91 | . S LRM(S2,"P")=$G(^TMP("LR",$J,"TMP",S2,"P"))
|
---|
92 | . S LRMX(+X)=""
|
---|
93 | Q
|
---|
94 | ;
|
---|
95 | ;
|
---|
96 | NLT(X) ;
|
---|
97 | N Y
|
---|
98 | S Y=$S($P($G(^LAM(+$G(^LAB(60,+X,64)),0)),U,2):$P(^(0),U,2),1:"")
|
---|
99 | Q Y
|
---|
100 | ;
|
---|
101 | ;
|
---|
102 | RNLT(X) ;
|
---|
103 | I 'X Q ""
|
---|
104 | N Y
|
---|
105 | S Y(1)=+$P($G(^LAB(60,X,64)),U,2)
|
---|
106 | S Y=$S($P($G(^LAM(Y(1),0)),U,2):$P(^(0),U,2),1:"")
|
---|
107 | I Y S $P(Y,"!",2)=$$LNC(Y,$G(LRCDEF),$G(LRSPEC))
|
---|
108 | S $P(Y,"!",3)=$G(LRCDEF),$P(Y,"!",6)=X
|
---|
109 | Q Y
|
---|
110 | ;
|
---|
111 | ;
|
---|
112 | LNC(LRNLT,LRCDEF,LRSPEC) ;reture the LOINC code for WKLD Code/Specimen
|
---|
113 | ; Call with (nlt code,method suffix,test specimen)
|
---|
114 | ; TA = Time Aspect
|
---|
115 | N X,N,Y,LRSPECN,VAL,ERR,TA S X=""
|
---|
116 | Q:'LRNLT X
|
---|
117 | K LRMSGM
|
---|
118 | S:$G(LRCDEF)="" LRCDEF="0000"
|
---|
119 | I $P(LRCDEF,".",2) S LRCDEF=$P(LRCDEF,".",2)
|
---|
120 | S LRCDEF=$S($P(LRNLT,".",2):$P(LRNLT,".",2),1:LRCDEF)
|
---|
121 | I $L(LRCDEF)'=4 S LRCDEF=LRCDEF_$E("0000",$L(LRCDEF),($L(LRCDEF-4)))
|
---|
122 | S LRCDEF=LRCDEF_" "
|
---|
123 | S LRSPEC=+LRSPEC
|
---|
124 | ;Get time aspect from 61
|
---|
125 | S TA=$$GET1^DIQ(61,LRSPEC_",",.0961,"I")
|
---|
126 | S LRSPECN=$S($D(^LAB(61,LRSPEC,0))#2:$$GET1^DIQ(61,LRSPEC_",",.01),1:"Unknown")
|
---|
127 | S LRNLT=$P(LRNLT,".")_"."
|
---|
128 | ;Check for WKLD CODE_LOAD/WORK LIST method suffix
|
---|
129 | S VAL(1)=LRNLT_LRCDEF
|
---|
130 | S N=$$FIND1^DIC(64,"","X",.VAL,"C","","ERR")
|
---|
131 | ;Looking for specimen specific LOINC
|
---|
132 | I N,LRSPEC D I X D MSG(1) Q X
|
---|
133 | . I TA S X=$$GET1^DIQ(64.02,TA_","_LRSPEC_","_N_",",4,"I") Q:X
|
---|
134 | . S TA=$O(^LAM(N,5,LRSPEC,1,0)) ; get time aspect
|
---|
135 | . I TA S X=$$GET1^DIQ(64.02,TA_","_LRSPEC_","_N_",",4,"I") Q:X
|
---|
136 | ;Looking LOINC default
|
---|
137 | I N S X=$$LDEF(N) I X D MSG(2) Q X
|
---|
138 | I LRCDEF="0000 " Q ""
|
---|
139 | ;Looking for WKLD CODE_GENERIC suffix
|
---|
140 | K VAL
|
---|
141 | S VAL(1)=LRNLT_"0000 "
|
---|
142 | S N=$$FIND1^DIC(64,"","X",.VAL,"C","","ERR")
|
---|
143 | I 'N Q ""
|
---|
144 | ;Looking for WKLD CODE_GENERIC specimen specific LOINC
|
---|
145 | I LRSPEC D I X D MSG(3) Q X
|
---|
146 | . I TA S X=$$GET1^DIQ(64.02,TA_","_LRSPEC_","_N_",",4,"I") Q:X
|
---|
147 | . S TA=$O(^LAM(N,5,LRSPEC,1,0)) ; get time aspect
|
---|
148 | . I TA S X=$$GET1^DIQ(64.02,TA_","_LRSPEC_","_N_",",4,"I") Q:X
|
---|
149 | ;Looking for WKLD CODE_GENERIC default LOINC
|
---|
150 | I 'X,N S X=$$LDEF(N) I X D MSG(4)
|
---|
151 | I 'X S X=""
|
---|
152 | Q X
|
---|
153 | ;
|
---|
154 | ;
|
---|
155 | LDEF(Y) ;Find the default LOINC code for WKLD CODE
|
---|
156 | I 'Y Q ""
|
---|
157 | S X=$$GET1^DIQ(64,Y_",",25,"I")
|
---|
158 | I 'X S X=""
|
---|
159 | Q X
|
---|
160 | ;
|
---|
161 | ;
|
---|
162 | TMPSB(LRSB) ; Get LOINC code from ^TMP("LR",$J,"TMP",LRSB,"P")
|
---|
163 | S NODE=$G(^TMP("LR",$J,"TMP",LRSB,"P"))
|
---|
164 | I 'NODE Q ""
|
---|
165 | S $P(NODE,"!",3)=$$LNC($P(NODE,"!",2),$G(LRCDEF),$G(LRSPEC))
|
---|
166 | S $P(NODE,"!",4)=$G(LRCDEF)
|
---|
167 | Q $P(NODE,U,2)
|
---|
168 | ;
|
---|
169 | ;
|
---|
170 | MSG(VAL) ;Set output message
|
---|
171 | Q:'$G(LRMSG)
|
---|
172 | S LRMSGM="0-No LOINC Code Defined for "_LRNLT_LRCDEF
|
---|
173 | N TANAME
|
---|
174 | I $G(TA) S TANAME=$$GET1^DIQ(64.061,TA_",",.01,"E") ;TA Name
|
---|
175 | I VAL=1 S LRMSGM="1-"_LRNLT_$E(LRCDEF,1,4)_" - "_LRSPECN
|
---|
176 | I VAL=2 S LRMSGM="2-"_LRNLT_$E(LRCDEF,1,4)_" - Default LOINC"
|
---|
177 | I VAL=3 S LRMSGM="3-"_LRNLT_"0000 - "_LRSPECN
|
---|
178 | I VAL=4 S LRMSGM="4-"_LRNLT_"0000 - Default LOINC"
|
---|
179 | I $G(TA) S LRMSGM=LRMSGM_" Time Aspect "_TANAME
|
---|
180 | W:$G(LRDBUG) !,LRMSGM,!
|
---|
181 | Q
|
---|