1 | LR7OR4 ;slc/dcm - Get Lab TEST Info ;8/11/97
|
---|
2 | ;;5.2;LAB SERVICE;**256,356**;Sep 27, 1994;Build 8
|
---|
3 | ;Entry points: EN
|
---|
4 | GET(TEST) ;Get TEST ifn
|
---|
5 | I '$D(TEST) Q ""
|
---|
6 | I TEST'?1N.N S TEST=$O(^LAB(60,"B",TEST,0)) Q:'TEST ""
|
---|
7 | I TEST?1N.N Q:'$D(^LAB(60,TEST)) ""
|
---|
8 | Q TEST
|
---|
9 | ONE(Y,TEST) ;Gets parameters for one test
|
---|
10 | N CNT
|
---|
11 | Q:'$L($G(TEST))
|
---|
12 | S CNT=0,TEST=+TEST
|
---|
13 | D EN
|
---|
14 | Q
|
---|
15 | ALL(Y,TESTS) ;Gets Lab Test ordering parameters from file 60
|
---|
16 | ;TEST=Lab TEST (can be either name or internal #)
|
---|
17 | N I,CNT
|
---|
18 | Q:'$O(TESTS(0))
|
---|
19 | S (I,CNT)=0
|
---|
20 | F S I=$O(TESTS(I)) Q:'I S TEST=+TESTS(I) D EN S CNT=CNT+1,Y(CNT)="---------------------"
|
---|
21 | Q
|
---|
22 | EN Q:'$D(TEST)
|
---|
23 | N X0
|
---|
24 | S TEST=$$GET(TEST) Q:'TEST
|
---|
25 | S X0=^LAB(60,TEST,0),CNT=CNT+1,Y(CNT)=$P(X0,"^",1)
|
---|
26 | I $L($P(X0,"^",11)) S Y(CNT)=Y(CNT)_" $"_$J($P(X0,"^",11),4,2)
|
---|
27 | D URG
|
---|
28 | D GCOM
|
---|
29 | I $P(X0,"^",8),$O(^LAB(60,TEST,3,0)) S X=$G(^($O(^(0)),0)),CNT=CNT+1,Y(CNT)="Unique collection sample: "_$$SAMP(+X) ;$P($G(^LAB(62,+X,0)),"^")
|
---|
30 | I $P(X0,"^",9) S I=0 F S I=$O(^LAB(60,TEST,3,I)) Q:I<1 S X=+^(I,0) I X=$P(X0,"^",9) S CNT=CNT+1,Y(CNT)="Lab collect sample: "_$$SAMP(X) Q ;$P($G(^LAB(62,X,0)),"^") Q
|
---|
31 | ;I $O(^LAB(60,TEST,3,0)) S X=$G(^($O(^(0)),0)),CNT=CNT+1,Y(CNT)="Default collection sample: "_$P($G(^LAB(62,+X,0)),"^")
|
---|
32 | D COLL,SUB
|
---|
33 | Q
|
---|
34 | COLL ;Get Collection Sample-Specimen data
|
---|
35 | N I,J,X,SAMP,SPEC,CHK
|
---|
36 | S I=0
|
---|
37 | F S I=$O(^LAB(60,TEST,3,I)) Q:I<1 S X=^(I,0) D
|
---|
38 | . S CNT=CNT+1,Y(CNT)="Collection sample: "_$$SAMP(X,$P(X0,"^",19))
|
---|
39 | . I $L($P(X,"^",2)) S CNT=CNT+1,Y(CNT)=" Form name/number: "_$P(X,"^",2)
|
---|
40 | . I $L($P(X,"^",4)) S CNT=CNT+1,Y(CNT)=" Minimum volume (in mls): "_$P(X,"^",4)
|
---|
41 | . I $L($P(X,"^",5)) S CNT=CNT+1,Y(CNT)=" Maximum order frequency: "_$P(X,"^",5)
|
---|
42 | . I $L($P(X,"^",7)) S CNT=CNT+1,Y(CNT)=" Maximum daily order frequency: "_$P(X,"^",7)
|
---|
43 | . I $O(^LAB(60,TEST,3,I,1,0)) S CNT=CNT+1,Y(CNT)=" Collection sample instructions: " D
|
---|
44 | .. S J=0 F S J=$O(^LAB(60,TEST,3,I,1,J)) Q:J<1 S CNT=CNT+1,Y(CNT)=" "_^(J,0)
|
---|
45 | ;. I $O(^LAB(60,TEST,3,I,2,0)) S CNT=CNT+1,Y(CNT)=" Collection sample LAB processing instructions: " D
|
---|
46 | ;.. S J=0 F S J=$O(^LAB(60,TEST,3,I,2,J)) Q:J<1 S CNT=CNT+1,Y(CNT)=" "_^(J,0)
|
---|
47 | S I=0
|
---|
48 | F S I=$O(^LAB(60,TEST,1,I)) Q:I<1 S X=^(I,0) D
|
---|
49 | . S CNT=CNT+1,Y(CNT)="Site/Specimen: "_$P($G(^LAB(61,+X,0)),"^")
|
---|
50 | . I $L($P(X,"^",2,3))>1 D CRRV("Reference range",$P(X,"^",2,3))
|
---|
51 | . I $L($P(X,"^",11,12))>1 D CRRV("Therapeutic range",$P(X,"^",11,12))
|
---|
52 | . I $L($P(X,"^",4,5))>1 D CRRV("Critical",$P(X,"^",4,5))
|
---|
53 | . I $L($P(X,"^",7)) S CNT=CNT+1,Y(CNT)=" Units: "_$P(X,"^",7)
|
---|
54 | . I $O(^LAB(60,TEST,1,I,1,0)) S CNT=CNT+1,Y(CNT)=" Interpretation: "
|
---|
55 | . S J=0 F S J=$O(^LAB(60,TEST,1,I,1,J)) Q:'J S X=^(J,0),CNT=CNT+1,Y(CNT)=" "_X
|
---|
56 | Q
|
---|
57 | URG ;Get Urgency params for TEST
|
---|
58 | N I,X,URG
|
---|
59 | I $P(X0,"^",18) S CNT=CNT+1,Y(CNT)="Default urgency: "_$P($G(^LAB(62.05,+$P(X0,"^",18),0)),"^")
|
---|
60 | I $P(X0,"^",16) S CNT=CNT+1,Y(CNT)="Highest urgency allowed: "_$P($G(^LAB(62.05,+$P(X0,"^",16),0)),"^")
|
---|
61 | Q
|
---|
62 | SAMP(X,REQ) ;Build Collection Sample data
|
---|
63 | ;X=zero node from ^LAB(60,TEST,3,ifn,0) or ptr to 62
|
---|
64 | ;REQ=Required comment from $P(^LAB(60,TEST,0),"^",19)
|
---|
65 | N X0,Y1
|
---|
66 | Q:'$D(^LAB(62,+X,0)) "" S X0=^(0)
|
---|
67 | ;S REQ=$S($P(X,"^",6):$P(X,"^",6),$G(REQ):REQ,1:""),REQ=$S(REQ:$P($G(^LAB(62.07,REQ,0)),"^"),1:"")
|
---|
68 | ;S Y1=+X_"^"_$P(X0,"^")_"^"_$P(X0,"^",2)_"^"_$P(X0,"^",3)_"^"_$P(X,"^",5)_"^"_$P(X,"^",7)_"^"_$P(X0,"^",7)_"^"_REQ
|
---|
69 | S Y1=$P(X0,"^")_" "_$P(X0,"^",3)
|
---|
70 | Q Y1
|
---|
71 | GCOM ;Get General Ward & Lab Instructions
|
---|
72 | ;TEST=ptr to TEST in file 60
|
---|
73 | N I
|
---|
74 | S I=0
|
---|
75 | I $O(^LAB(60,+$G(TEST),6,0)) S CNT=CNT+1,Y(CNT)="General instructions: "
|
---|
76 | F S I=$O(^LAB(60,TEST,6,I)) Q:'I S CNT=CNT+1,Y(CNT)=" "_^(I,0)
|
---|
77 | S I=0
|
---|
78 | ;I $O(^LAB(60,+$G(TEST),7,0)) S CNT=CNT+1,Y(CNT)="General LAB processing instructions: "
|
---|
79 | ;F S I=$O(^LAB(60,TEST,7,I)) Q:'I S CNT=CNT+1,Y(CNT)=" "_^(I,0)
|
---|
80 | Q
|
---|
81 | SUB ;Tests in panel
|
---|
82 | N I
|
---|
83 | S I=0
|
---|
84 | I $O(^LAB(60,+$G(TEST),2,0)) S I=0,CNT=CNT+1,Y(CNT)="Tests included in panel: "
|
---|
85 | F S I=$O(^LAB(60,TEST,2,I)) Q:'I S X=^(I,0),CNT=CNT+1,Y(CNT)=" "_$P($G(^LAB(60,+X,0)),"^")
|
---|
86 | Q
|
---|
87 | ;Added to support LR*5.2*356, PSI-06-025
|
---|
88 | CRRV(RT,RV) ;Convert Referance Range Values - convert embedded M code into a more readable format
|
---|
89 | ;Variables passed in:
|
---|
90 | ;RT - Refereance range Text
|
---|
91 | ;RV - Refereance range Value
|
---|
92 | ; 1st piece holds low value
|
---|
93 | ; 2nd piece holds high value
|
---|
94 | ;Routine variables
|
---|
95 | ;Y() - The return array with the lab test information
|
---|
96 | ;CNT - The counter variable used to create nodes in the Y array variable
|
---|
97 | ;Local variables
|
---|
98 | ;SP5 - 5 embedded spaces for output alinement
|
---|
99 | ;SP10 - 10 embedded spaces for output alinement
|
---|
100 | ;X - Work variable
|
---|
101 | N SP5,SP10,X
|
---|
102 | S SP5=" ",SP10=SP5_SP5,X=""
|
---|
103 | I RV'["$S(" D Q
|
---|
104 | . I $L($P(RV,"^")),'$L($P(RV,"^",2)),$P(RV,"^")?.ANP S CNT=CNT+1,Y(CNT)=SP5_RT_$S($P(RV,"^")?.N:" low : "_$TR($P(RV,"^"),""""),1:" : "_$TR($P(RV,"^"),"""")) Q
|
---|
105 | . I '$L($P(RV,"^")),$L($P(RV,"^",2)),$P(RV,"^",2)?.ANP S CNT=CNT+1,Y(CNT)=SP5_RT_$S($P(RV,"^",2)?.N:" high : "_$TR($P(RV,"^",2),""""),1:" : "_$TR($P(RV,"^",2),"""")) Q
|
---|
106 | . I $L($P(RV,"^")) S CNT=CNT+1,Y(CNT)=SP5_RT_" low : "_$TR($P(RV,"^"),"""")
|
---|
107 | . I $L($P(RV,"^",2)) S CNT=CNT+1,Y(CNT)=SP5_RT_" high : "_$TR($P(RV,"^",2),"""")
|
---|
108 | . ;I $L($P(RV,"^")) S CNT=CNT+1,Y(CNT)=SP5_RT_$S($P(RV,"^")?.AP:" : "_$TR($P(RV,"^"),""""),1:" low : "_$TR($P(RV,"^"),""""))
|
---|
109 | . ;I $L($P(RV,"^",2)) S CNT=CNT+1,Y(CNT)=SP5_RT_$S($P(RV,"^",2)?.AP:" : "_$TR($P(RV,"^",2),""""),1:" high : "_$TR($P(RV,"^",2),""""))
|
---|
110 | I RV["SEX" D Q
|
---|
111 | . I RV["AGE" S CNT=CNT+1,Y(CNT)=SP5_RT_" - Age and sex dependent range values, please contact lab for specifics." Q
|
---|
112 | . S CNT=CNT+1,Y(CNT)=SP5_RT
|
---|
113 | . I $L($$GSV($P(RV,"^"),"M")) S CNT=CNT+1,Y(CNT)=SP10_"Male "_$S($$GSV($P(RV,"^"),"M")?.AP:": "_$TR($$GSV($P(RV,"^"),"M"),""""),1:"low : "_$TR($$GSV($P(RV,"^"),"M"),""""))
|
---|
114 | . I $L($$GSV($P(RV,"^",2),"M")) S CNT=CNT+1,Y(CNT)=SP10_"Male "_$S($$GSV($P(RV,"^",2),"M")?.AP:$TR($$GSV($P(RV,"^",2),"M"),""""),1:"high : "_$TR($$GSV($P(RV,"^",2),"M"),""""))
|
---|
115 | . I $L($$GSV($P(RV,"^"),"F")) S CNT=CNT+1,Y(CNT)=SP10_"Female "_$S($$GSV($P(RV,"^"),"F")?.AP:": "_$TR($$GSV($P(RV,"^"),"F"),""""),1:"low : "_$TR($$GSV($P(RV,"^"),"F"),""""))
|
---|
116 | . I $L($$GSV($P(RV,"^",2),"F")) S CNT=CNT+1,Y(CNT)=SP10_"Female "_$S($$GSV($P(RV,"^",2),"F")?.AP:$TR($$GSV($P(RV,"^",2),"F"),""""),1:"high : "_$TR($$GSV($P(RV,"^",2),"F"),""""))
|
---|
117 | I RV["AGE" D Q
|
---|
118 | . S CNT=CNT+1,Y(CNT)=SP5_RT
|
---|
119 | . I $L($P(RV,"^")) D FAVO($P(RV,"^"),"low")
|
---|
120 | . I $L($P(RV,"^",2)) D FAVO($P(RV,"^",2),"high")
|
---|
121 | GSV(X,SEX) ;Get Sex Value
|
---|
122 | ;Variables passed in:
|
---|
123 | ;X - Work variable low/high range value
|
---|
124 | ;SEX - Patient's sex
|
---|
125 | ;Subroutine variables:
|
---|
126 | ;X1 - Return value variable with the resolved low/high value
|
---|
127 | N X1
|
---|
128 | S @("X1="_$S($L(X):X,1:""""""))
|
---|
129 | Q X1
|
---|
130 | FAVO(X,HL) ;Format Age Value Output
|
---|
131 | ;Variables passed in:
|
---|
132 | ;X - Work variable with low/high range value
|
---|
133 | ;HL - This will be for either a low or high reference range
|
---|
134 | ;Subroutine variables:
|
---|
135 | ;AT0 - Common text for output
|
---|
136 | ;AT1 - Embedded M code tested for
|
---|
137 | ;AT2 - Text description for embedded M code for output
|
---|
138 | ;IO - Counter to piece the low/high range value
|
---|
139 | ;I1 - Counter to reformat the embedded M code
|
---|
140 | ;SP10 - 10 embedded spaces for output alinement
|
---|
141 | ;X0,X1,X2 - Work variables used in converting the low/high range value
|
---|
142 | N AT0,AT1,AT2,I0,I1,SP10,X0,X1,X2
|
---|
143 | S AT0="If Age is "
|
---|
144 | S AT1="",AT1(1)="AGE<",AT1(2)="AGE>",AT1(3)="AGE'<",AT1(4)="AGE'>",AT1(5)="AGE="
|
---|
145 | S AT2="",AT2(1)="less than ",AT2(2)="greater than "
|
---|
146 | S AT2(3)="not less than ",AT2(4)="not greater than ",AT2(5)="equal to "
|
---|
147 | S SP10=" "
|
---|
148 | S X0=$E(X,4,$L(X)-1),(X1,X2)=""
|
---|
149 | F I0=1:1 S X1=$P(X0,",",I0) Q:X1="" D
|
---|
150 | . I $P(X1,":")=1 S X2=SP10_"Default "_HL_": "_$P(X1,":",2),CNT=CNT+1,Y(CNT)=$TR(X2,"""")
|
---|
151 | . E D
|
---|
152 | . . F I1=1:1:5 I $P(X1,":")[AT1(I1) S X2=SP10_AT0_AT2(I1)_$E($P(X1,":"),$L(AT1(I1))+1,$L($P(X1,":")))_" the "_HL_" is "_$P(X1,":",2),CNT=CNT+1,Y(CNT)=$TR(X2,"""")
|
---|
153 | Q
|
---|