1 | LRPXAPI4 ;SLC/STAFF Lab Extract API code - Exact Match ;9/29/03 21:17
|
---|
2 | ;;5.2;LAB SERVICE;**295**;Sep 27, 1994
|
---|
3 | ;
|
---|
4 | EXACT(DFN,DATE,CONDS) ; from LRPXAPI5
|
---|
5 | ; check if conditions are met for date/time
|
---|
6 | N FETCH,ITEM,NODE,OK,RESULTS,SEPARATE,XDATE K FETCH,RESULTS,SEPARATE
|
---|
7 | S OK=1
|
---|
8 | I '$L($O(CONDS(""))) Q 1
|
---|
9 | M FETCH=^PXRMINDX(63,"PDI",DFN,DATE)
|
---|
10 | S ITEM=""
|
---|
11 | F S ITEM=$O(FETCH(ITEM)) Q:ITEM="" D
|
---|
12 | . S NODE=""
|
---|
13 | . F S NODE=$O(FETCH(ITEM,NODE)) Q:NODE="" D
|
---|
14 | .. S SEPARATE($P(NODE,";",1,3),ITEM,NODE)=""
|
---|
15 | S XDATE=""
|
---|
16 | F S XDATE=$O(SEPARATE(XDATE)) Q:XDATE="" D Q:OK
|
---|
17 | . K RESULTS
|
---|
18 | . M RESULTS=SEPARATE(XDATE)
|
---|
19 | . I '$L($O(RESULTS(""))) S OK=0 Q
|
---|
20 | . I $D(CONDS("MIR")) D MIR(.CONDS,.RESULTS,.OK) I 'OK Q
|
---|
21 | . I $D(CONDS("AS")) D AS(.CONDS,.RESULTS,.OK) I 'OK Q
|
---|
22 | . I $D(CONDS("MC")) D MC(.CONDS,.RESULTS,.OK) I 'OK Q
|
---|
23 | . I $D(CONDS("AC")) D AC(.CONDS,.RESULTS,.OK) I 'OK Q
|
---|
24 | . I $D(CONDS(1)) D EQUAL(.CONDS,.RESULTS,.OK) I 'OK Q
|
---|
25 | . I $D(CONDS(0)) D NOTEQUAL(.CONDS,.RESULTS,.OK) I 'OK Q
|
---|
26 | . I '$L($O(RESULTS(""))) S OK=0 Q 0
|
---|
27 | . D SCRAPS(.CONDS,.RESULTS,.OK) I 'OK Q
|
---|
28 | . D THREAD(.CONDS,.RESULTS,.OK) I 'OK Q
|
---|
29 | Q OK
|
---|
30 | ;
|
---|
31 | THREAD(CONDS,RESULTS,OK) ;
|
---|
32 | ; uses TCHK within this scope
|
---|
33 | N CHK,FILE,IEN,ITEM,ITEMC,NEXT,NODE,NODEC,NUM,PAR,PARSTOP,START,STOP
|
---|
34 | S OK=1
|
---|
35 | ; check Micro - only O <-> A match
|
---|
36 | I $D(CONDS("X","M;O")),($D(CONDS("X","M;A"))!$D(CONDS("X","M;M"))) D Q:'OK
|
---|
37 | . I '($D(CONDS("X","M;A"))!$D(CONDS("X","M;M"))!$D(CONDS("X","M;MIR"))) Q
|
---|
38 | . S ITEM="M;O;"
|
---|
39 | . F S ITEM=$O(RESULTS(ITEM)) Q:ITEM="" Q:ITEM]"M;O;Z" D Q:'OK
|
---|
40 | .. S NODE=""
|
---|
41 | .. F S NODE=$O(RESULTS(ITEM,NODE)) Q:NODE="" D Q:'OK
|
---|
42 | ... S IEN=$P(NODE,";",5)
|
---|
43 | ... S OK=0
|
---|
44 | ... S ITEMC="M;A;"
|
---|
45 | ... F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]"M;A;Z" D Q:OK
|
---|
46 | .... S NODEC=""
|
---|
47 | .... F S NODEC=$O(RESULTS(ITEMC,NODEC)) Q:NODEC="" D Q:OK
|
---|
48 | ..... I IEN=$P(NODEC,";",5) S OK=1 Q
|
---|
49 | ... S ITEMC="M;M;"
|
---|
50 | ... F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]"M;M;Z" D Q:OK
|
---|
51 | .... S NODEC=""
|
---|
52 | .... F S NODEC=$O(RESULTS(ITEMC,NODEC)) Q:NODEC="" D Q:OK
|
---|
53 | ..... I IEN=$P(NODEC,";",5) S OK=1 Q
|
---|
54 | I $D(CONDS("X","M")) Q
|
---|
55 | ; check AP - M <-> E , S <-> T and O <-> [D M F P] match
|
---|
56 | S PAR="A;M",START="A;E"
|
---|
57 | I $D(CONDS("X",PAR)),$D(CONDS("X",START)) D TCHK(PAR,7,START) Q:'OK
|
---|
58 | S PAR="A;S",START="A;T"
|
---|
59 | I $D(CONDS("X",PAR)),$D(CONDS("X",START)) D TCHK(PAR,5,START) Q:'OK
|
---|
60 | S PAR="A;O"
|
---|
61 | I $D(CONDS("X",PAR)) D Q:'OK
|
---|
62 | . F FILE="D","M","F","P" D Q:'OK
|
---|
63 | .. S START="A;"_FILE
|
---|
64 | .. I $D(CONDS("X",START)) D TCHK(PAR,5,START)
|
---|
65 | Q
|
---|
66 | TCHK(PAR,NUM,START) ; within scope of THREAD
|
---|
67 | S ITEM=PAR,PARSTOP=PAR_";Z",STOP=START_";Z"
|
---|
68 | F S ITEM=$O(RESULTS(ITEM)) Q:ITEM="" Q:ITEM]PARSTOP D Q:'OK
|
---|
69 | . S NODE=""
|
---|
70 | . F S NODE=$O(RESULTS(ITEM,NODE)) Q:NODE="" D Q:'OK
|
---|
71 | .. S IEN=$P(NODE,";",1,NUM)
|
---|
72 | .. S CHK=0
|
---|
73 | .. S ITEMC=START
|
---|
74 | .. F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]STOP D Q:CHK
|
---|
75 | ... S NODEC=""
|
---|
76 | ... F S NODEC=$O(RESULTS(ITEMC,NODEC)) Q:NODEC="" D Q:CHK
|
---|
77 | .... I IEN=$P(NODEC,";",1,NUM) S CHK=1 Q
|
---|
78 | .... I $L(NODEC,";")=4 S CHK=1 Q ; at collection date
|
---|
79 | .. I 'CHK K RESULTS(ITEM)
|
---|
80 | S NEXT=$O(RESULTS(PAR))
|
---|
81 | I NEXT="" S OK=0 Q
|
---|
82 | I NEXT]PARSTOP S OK=0 Q
|
---|
83 | Q
|
---|
84 | ;
|
---|
85 | SCRAPS(CONDS,RESULTS,OK) ;
|
---|
86 | N ITEM,ITEMC
|
---|
87 | S OK=1
|
---|
88 | S ITEM=""
|
---|
89 | F S ITEM=$O(RESULTS(ITEM)) Q:ITEM="" D
|
---|
90 | . S ITEMC=$P(ITEM,";",1,2)
|
---|
91 | . I ITEMC="M;A",$D(CONDS("MIR")) Q
|
---|
92 | . I ITEMC="M;M",$D(CONDS("MIR")) Q
|
---|
93 | . I '$D(CONDS("X",ITEMC)) K RESULTS(ITEM)
|
---|
94 | I '$L($O(RESULTS(""))) S OK=0 Q
|
---|
95 | Q
|
---|
96 | ;
|
---|
97 | NOTEQUAL(CONDS,RESULTS,OK) ;
|
---|
98 | ; check not equal condition for pointer values
|
---|
99 | N FILE,ITEM,START,STOP,TYPE
|
---|
100 | S OK=1
|
---|
101 | S ITEM=""
|
---|
102 | F S ITEM=$O(CONDS(0,ITEM)) Q:ITEM="" D Q:'OK
|
---|
103 | . S TYPE=$E(ITEM),FILE=$E(ITEM,3),START=TYPE_";"_FILE,STOP=TYPE_";"_FILE_";Z"
|
---|
104 | . K RESULTS(ITEM)
|
---|
105 | . S NEXT=$O(RESULTS(START))
|
---|
106 | . I NEXT="" S OK=0 Q
|
---|
107 | . I NEXT]STOP S OK=0 Q
|
---|
108 | Q
|
---|
109 | ;
|
---|
110 | EQUAL(CONDS,RESULTS,OK) ;
|
---|
111 | ; check equal condition for pointer values
|
---|
112 | N FILE,ITEM,ITEMC,NEXT,START,STOP,TYPE
|
---|
113 | S OK=1
|
---|
114 | S ITEM=""
|
---|
115 | F S ITEM=$O(CONDS(1,ITEM)) Q:ITEM="" D
|
---|
116 | . S TYPE=$E(ITEM),FILE=$E(ITEM,3),START=TYPE_";"_FILE,STOP=TYPE_";"_FILE_";Z"
|
---|
117 | . S ITEMC=START
|
---|
118 | . F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]STOP D
|
---|
119 | .. I ITEMC=ITEM Q
|
---|
120 | .. K RESULTS(ITEMC)
|
---|
121 | S NEXT=$O(RESULTS(START))
|
---|
122 | I NEXT="" S OK=0 Q
|
---|
123 | I NEXT]STOP S OK=0 Q
|
---|
124 | Q
|
---|
125 | ;
|
---|
126 | AC(CONDS,RESULTS,OK) ;
|
---|
127 | ; check conditions for AP categories
|
---|
128 | N CAT,CATEGORY,ITEM,ITEMC,NODE,NOTEQUAL,SUB
|
---|
129 | S OK=1
|
---|
130 | S ITEM=""
|
---|
131 | F S ITEM=$O(CONDS("AC",ITEM)) Q:ITEM="" D
|
---|
132 | . S CATEGORY=$P(ITEM,"=",2)
|
---|
133 | . I '$L(CATEGORY) Q
|
---|
134 | . S CATEGORY=$E(CATEGORY,2)
|
---|
135 | . S NOTEQUAL=0
|
---|
136 | . I $L($P(ITEM,"'=",2)) S NOTEQUAL=1
|
---|
137 | . S ITEMC="A"
|
---|
138 | . F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]"A;Z" D
|
---|
139 | .. I ITEMC["A;T;" Q
|
---|
140 | .. S NODE=""
|
---|
141 | .. F S NODE=$O(RESULTS(ITEMC,NODE)) Q:NODE="" D
|
---|
142 | ... S SUB=$P(NODE,";",2)
|
---|
143 | ... I SUB=33!(SUB=80) S CAT="A"
|
---|
144 | ... E S CAT=$E(SUB)
|
---|
145 | ... I NOTEQUAL,CAT=CATEGORY K RESULTS(ITEMC,NODE) Q
|
---|
146 | ... I 'NOTEQUAL,CAT'=CATEGORY K RESULTS(ITEMC,NODE) Q
|
---|
147 | I '$L($O(RESULTS(""))) S OK=0 Q
|
---|
148 | Q
|
---|
149 | ;
|
---|
150 | MC(CONDS,RESULTS,OK) ;
|
---|
151 | ; check conditions for Micro categories
|
---|
152 | N CATEGORY,CATSUB,ITEM,ITEMC,NEXT,NODE,NOTEQUAL,SUB
|
---|
153 | S OK=1
|
---|
154 | S ITEM=""
|
---|
155 | F S ITEM=$O(CONDS("MC",ITEM)) Q:ITEM="" D
|
---|
156 | . S CATEGORY=$P(ITEM,"=",2)
|
---|
157 | . I '$L(CATEGORY) Q
|
---|
158 | . S CATEGORY=$E(CATEGORY,2)
|
---|
159 | . S CATSUB=$$CATSUB^LRPXAPIU(CATEGORY,"M")
|
---|
160 | . S NOTEQUAL=0
|
---|
161 | . I $L($P(ITEM,"'=",2)) S NOTEQUAL=1
|
---|
162 | . S ITEMC="M"
|
---|
163 | . F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]"M;Z" D
|
---|
164 | .. I ITEMC["M;T;" Q
|
---|
165 | .. I ITEMC["M;S;" Q
|
---|
166 | .. S NODE=""
|
---|
167 | .. F S NODE=$O(RESULTS(ITEMC,NODE)) Q:NODE="" D
|
---|
168 | ... S SUB=$P(NODE,";",4)
|
---|
169 | ... I NOTEQUAL,SUB=CATSUB K RESULTS(ITEMC,NODE) Q
|
---|
170 | ... I 'NOTEQUAL,SUB'=CATSUB K RESULTS(ITEMC,NODE) Q
|
---|
171 | S NEXT=$O(RESULTS("M"))
|
---|
172 | I NEXT="" S OK=0 Q
|
---|
173 | I NEXT]"M;S" S OK=0 Q
|
---|
174 | Q
|
---|
175 | ;
|
---|
176 | AS(CONDS,RESULTS,OK) ;
|
---|
177 | ; check conditions for AP specimen
|
---|
178 | N CHECK,ITEM,ITEMC,NEXT,S
|
---|
179 | S OK=1
|
---|
180 | S ITEM=""
|
---|
181 | F S ITEM=$O(CONDS("AS",ITEM)) Q:ITEM="" D
|
---|
182 | . I $E(ITEM,2)="'" D Q
|
---|
183 | .. ; good if the specimen text is not present for this collection
|
---|
184 | .. S ITEMC="A;S;1"
|
---|
185 | .. F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]"A;S;Z" D
|
---|
186 | ... S S=$P(ITEMC,"1.",2)
|
---|
187 | ... S CHECK="I "_ITEM
|
---|
188 | ... X CHECK I '$T K RESULTS(ITEMC)
|
---|
189 | . ; good if any of the specimen text for this collection have a matching text
|
---|
190 | . I $O(RESULTS("A;S;1"))="" Q
|
---|
191 | . I $O(RESULTS("A;S;1"))]"A;S;Z" Q
|
---|
192 | . S OK=0
|
---|
193 | . S ITEMC="A;S;1"
|
---|
194 | . F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]"A;S;Z" D
|
---|
195 | .. S S=$P(ITEMC,"1.",2)
|
---|
196 | .. S CHECK="I "_ITEM
|
---|
197 | .. X CHECK I '$T K RESULTS(ITEMC)
|
---|
198 | S NEXT=$O(RESULTS("A;S;"))
|
---|
199 | I NEXT="" S OK=0 Q
|
---|
200 | I NEXT]"A;S;Z" S OK=0 Q
|
---|
201 | S OK=1
|
---|
202 | Q
|
---|
203 | ;
|
---|
204 | MIR(CONDS,RESULTS,OK) ;
|
---|
205 | ; check conditions for antimicrobial results and interpretations
|
---|
206 | ; uses MCHK within this scope
|
---|
207 | N ABNODE,ABTYPE,CHECK,I,ITEM,ITEMC,NEXTA,NEXTM,NODE,R,START,STOP
|
---|
208 | S OK=0
|
---|
209 | F ABTYPE="A","M" D MCHK(ABTYPE)
|
---|
210 | S NEXTA=$O(RESULTS("M;A"))
|
---|
211 | S NEXTM=$O(RESULTS("M;M"))
|
---|
212 | I NEXTA="",NEXTM="" Q
|
---|
213 | I NEXTA="",NEXTM]"M;M;Z" Q
|
---|
214 | I NEXTA]"M;A;Z",NEXTM="" Q
|
---|
215 | I NEXTA]"M;A;Z",NEXTM]"M;M;Z" Q
|
---|
216 | S OK=1
|
---|
217 | Q
|
---|
218 | MCHK(ABTYPE) ; within scope of MIR
|
---|
219 | S START="M;"_ABTYPE
|
---|
220 | S STOP=START_";Z"
|
---|
221 | S ITEM=""
|
---|
222 | F S ITEM=$O(CONDS("MIR",ITEM)) Q:ITEM="" D
|
---|
223 | . I $E(ITEM,2)="'" D Q
|
---|
224 | .. ; good if the interpretation/result is not present for this collection
|
---|
225 | .. S ITEMC=START
|
---|
226 | .. F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]STOP D
|
---|
227 | ... S NODE=""
|
---|
228 | ... F S NODE=$O(RESULTS(ITEMC,NODE)) Q:NODE="" D
|
---|
229 | .... S ABNODE=$$REFVAL^LRPXAPI(NODE)
|
---|
230 | .... I ABTYPE="A" D
|
---|
231 | ..... S I=$P(ABNODE,U,2)
|
---|
232 | ..... S R=$P(ABNODE,U)
|
---|
233 | .... E D
|
---|
234 | ..... S R=$P(ABNODE,U)
|
---|
235 | ..... S I=R
|
---|
236 | .... S CHECK="I "_ITEM
|
---|
237 | .... X CHECK I $T Q
|
---|
238 | .... K RESULTS(ITEMC,NODE)
|
---|
239 | . ; good if any of the interpretations/results have matching conditions
|
---|
240 | . I $O(RESULTS(START))="" Q
|
---|
241 | . I $O(RESULTS(START))]STOP Q
|
---|
242 | . S ITEMC=START
|
---|
243 | . F S ITEMC=$O(RESULTS(ITEMC)) Q:ITEMC="" Q:ITEMC]STOP D
|
---|
244 | .. S NODE=""
|
---|
245 | .. F S NODE=$O(RESULTS(ITEMC,NODE)) Q:NODE="" D
|
---|
246 | ... S ABNODE=$$REFVAL^LRPXAPI(NODE)
|
---|
247 | ... S I=$P(ABNODE,U,2)
|
---|
248 | ... S R=$P(ABNODE,U)
|
---|
249 | ... S CHECK="I "_ITEM
|
---|
250 | ... X CHECK I '$T K RESULTS(ITEMC,NODE)
|
---|
251 | Q
|
---|
252 | ;
|
---|