1 | LRPXAPI2 ; SLC/STAFF Lab Extract API code ;2/26/04 15:15
|
---|
2 | ;;5.2;LAB SERVICE;**295**;Sep 27, 1994
|
---|
3 | ;
|
---|
4 | VERIFIED(LRDFN,LRIDT) ; $$(lrdfn,lridt) -> 1 if verified, else 0
|
---|
5 | ; checks for date report completed
|
---|
6 | I +$P($G(^LR(LRDFN,"CH",LRIDT,0)),U,3) Q 1
|
---|
7 | Q 0
|
---|
8 | ;
|
---|
9 | MIVERIFY(LRDFN,LRIDT,SUB) ; $$(lrdfn,lridt,sub) -> 1 if verified, else 0
|
---|
10 | ; checks for report date approved on subscript
|
---|
11 | S SUB=+$G(SUB)
|
---|
12 | I SUB>0,SUB<17,$G(^LR(LRDFN,"MI",LRIDT,SUB)) Q 1
|
---|
13 | Q 0
|
---|
14 | ;
|
---|
15 | APVERIFY(LRDFN,LRIDT,APSUB) ; $$(lrdfn,lridt,ap subscrpt) -> 1 if verified
|
---|
16 | ; autopsy checks for:
|
---|
17 | ; date of death,
|
---|
18 | ; date autopsy report completed,
|
---|
19 | ; autopsy release date/time
|
---|
20 | ; otherwise, checks for date report completed and report release date
|
---|
21 | N OK
|
---|
22 | S OK=0
|
---|
23 | I APSUB="CY"!(APSUB="EM")!(APSUB="SP") D Q OK
|
---|
24 | . I $P($G(^LR(LRDFN,APSUB,LRIDT,0)),U,3),$P(^(0),U,11) S OK=1
|
---|
25 | I APSUB="AU" D Q OK
|
---|
26 | . I '$$DOD^LRPXAPIU($$DFN^LRPXAPIU(LRDFN)) Q
|
---|
27 | . I '$P($G(^LR(LRDFN,"AU")),U,3) Q
|
---|
28 | . I '$P(^LR(LRDFN,"AU"),U,15) Q
|
---|
29 | . S OK=1
|
---|
30 | Q OK
|
---|
31 | ;
|
---|
32 | VAL(LRDFN,LRIDT,LRDN) ; from LRPXAPI
|
---|
33 | ; $$(lrdfn,lridt,lrdn) -> result node
|
---|
34 | Q $G(^LR(LRDFN,"CH",LRIDT,LRDN))
|
---|
35 | ;
|
---|
36 | REFVAL(REF) ; from LRPXAPI
|
---|
37 | ; $$(reference location in ^LR) -> data node
|
---|
38 | N SUB
|
---|
39 | I REF'[";" Q ""
|
---|
40 | S SUB=$P(REF,";",2)
|
---|
41 | S SUB=""""_SUB_""""
|
---|
42 | S $P(REF,";",2)=SUB
|
---|
43 | S REF=$TR(REF,";",",")
|
---|
44 | S REF="^LR("_REF_")"
|
---|
45 | Q $G(@REF)
|
---|
46 | ;
|
---|
47 | LRPXRM(RESULT,REF,ITEM,TYPES) ; from LRPXAPI
|
---|
48 | ; returns result node from index subscript as RESULT
|
---|
49 | N FILE,IEN,SECTION,TEST,VALUES
|
---|
50 | S RESULT=""
|
---|
51 | S VALUES=$$REFVAL(REF)
|
---|
52 | I '$L(VALUES) Q
|
---|
53 | I ITEM>0 D Q
|
---|
54 | . S $P(VALUES,U)=$$VRESULT^LRPXAPIU(ITEM,$P(VALUES,U))
|
---|
55 | . S RESULT=+ITEM_U_$$TESTNM^LRPXAPIU(+ITEM)_U_VALUES
|
---|
56 | . D SC(.RESULT,REF,TYPES)
|
---|
57 | I '$L(ITEM) D Q
|
---|
58 | . I $P(REF,";",2)'="CH" Q
|
---|
59 | . S TEST=$$TEST^LRPXAPIU(+$P(REF,";",4))
|
---|
60 | . I 'TEST Q
|
---|
61 | . S RESULT=TEST_U_$$TESTNM^LRPXAPIU(TEST)_U_VALUES
|
---|
62 | . D SC(.RESULT,REF,TYPES)
|
---|
63 | S SECTION=$P(ITEM,";") I $L(SECTION)'=1 Q
|
---|
64 | S FILE=$P(ITEM,";",2) I $L(FILE)'=1 Q
|
---|
65 | S IEN=+$P(ITEM,";",3) I 'IEN Q
|
---|
66 | I SECTION="M" D Q
|
---|
67 | . I FILE="S" S RESULT=IEN_U_$$SPECNM^LRPXAPIU(IEN)_U_VALUES Q
|
---|
68 | . I FILE="T" S RESULT=IEN_U_$$TESTNM^LRPXAPIU(IEN)_U_VALUES Q
|
---|
69 | . I FILE="O" S RESULT=IEN_U_$$BUGNM^LRPXAPIU(IEN)_U_VALUES Q
|
---|
70 | . I FILE="A" S RESULT=IEN_U_$$ABNM^LRPXAPIU(IEN)_U_VALUES Q
|
---|
71 | . I FILE="M" S RESULT=IEN_U_$$TBNM^LRPXAPIU(IEN)_U_VALUES Q
|
---|
72 | I SECTION="A" D Q
|
---|
73 | . I FILE="S" S RESULT=U_$$UP^XLFSTR(VALUES)_U_VALUES Q
|
---|
74 | . I FILE="T" S RESULT=IEN_U_$$TESTNM^LRPXAPIU(IEN)_U_VALUES Q
|
---|
75 | . I FILE="O" S RESULT=IEN_U_$$ORGNM^LRPXAPIU(IEN)_U_VALUES Q
|
---|
76 | . I FILE="D" S RESULT=IEN_U_$$DISNM^LRPXAPIU(IEN)_U_VALUES Q
|
---|
77 | . I FILE="M" S RESULT=IEN_U_$$MORPHNM^LRPXAPIU(IEN)_U_VALUES Q
|
---|
78 | . I FILE="E" S RESULT=IEN_U_$$ETINM^LRPXAPIU(IEN)_U_VALUES Q
|
---|
79 | . I FILE="F" S RESULT=IEN_U_$$FUNNM^LRPXAPIU(IEN)_U_VALUES Q
|
---|
80 | . I FILE="P" S RESULT=IEN_U_$$PROCNM^LRPXAPIU(IEN)_U_VALUES Q
|
---|
81 | . I FILE="I" S RESULT=IEN_U_$$ICD9^LRPXAPIU(IEN)_U_VALUES Q
|
---|
82 | Q
|
---|
83 | ;
|
---|
84 | SC(RESULT,REF,TYPES) ;
|
---|
85 | N CNT,LINE,LRDFN,LRIDT,SPEC
|
---|
86 | I TYPES["S" D
|
---|
87 | . S $P(REF,";",4)=0
|
---|
88 | . S SPEC=+$P($$REFVAL(REF),U,5)
|
---|
89 | . S RESULT("SPECIMEN")=SPEC_U_$$SPECNM^LRPXAPIU(SPEC)
|
---|
90 | I TYPES["C" D
|
---|
91 | . S CNT=0,LRDFN=+$P(REF,";"),LRIDT=+$P(REF,";",3)
|
---|
92 | . S LINE=0
|
---|
93 | . F S LINE=$O(^LR(LRDFN,"CH",LRIDT,1,LINE)) Q:LINE<1 D
|
---|
94 | .. S CNT=CNT+1
|
---|
95 | .. S RESULT("COMMENTS",CNT)=$G(^LR(LRDFN,"CH",LRIDT,1,LINE,0))
|
---|
96 | . S RESULT("COMMENTS")=CNT
|
---|
97 | Q
|
---|
98 | ;
|
---|
99 | SPEC(DATA,DFN,DATE,STYPE,ERR) ; from LRPXAPI
|
---|
100 | ; returns specimen node, comment, values in array DATA
|
---|
101 | N LRDFN,LRIDT K DATA
|
---|
102 | S ERR=0
|
---|
103 | S LRDFN=$$LRDFN^LRPXAPIU(DFN)
|
---|
104 | I 'LRDFN S ERR=1 Q
|
---|
105 | I 'DATE S ERR=1 Q
|
---|
106 | S LRIDT=$$LRIDT^LRPXAPIU(DATE)
|
---|
107 | D LRSPEC(.DATA,LRDFN,LRIDT,STYPE,.ERR)
|
---|
108 | Q
|
---|
109 | ;
|
---|
110 | LRSPEC(DATA,LRDFN,LRIDT,STYPE,ERR) ; from LRPXAPI
|
---|
111 | ; returns specimen node, comment, values in array DATA
|
---|
112 | K DATA
|
---|
113 | S ERR=0
|
---|
114 | I '$O(^LR(LRDFN,"CH",LRIDT,0)) S ERR=1 Q
|
---|
115 | I '$L(STYPE) S STYPE="A"
|
---|
116 | I STYPE="S" D SSPEC(.DATA,LRDFN,LRIDT) Q
|
---|
117 | I STYPE="C" D CSPEC(.DATA,LRDFN,LRIDT) Q
|
---|
118 | I STYPE="V" D VSPEC(.DATA,LRDFN,LRIDT) Q
|
---|
119 | I STYPE="A" D
|
---|
120 | . N ALL K ALL
|
---|
121 | . D SSPEC(.DATA,LRDFN,LRIDT) M ALL=DATA
|
---|
122 | . D CSPEC(.DATA,LRDFN,LRIDT) M ALL=DATA
|
---|
123 | . D VSPEC(.DATA,LRDFN,LRIDT) M ALL=DATA
|
---|
124 | . K DATA M DATA=ALL
|
---|
125 | Q
|
---|
126 | ;
|
---|
127 | SSPEC(DATA,LRDFN,LRIDT) ; specimen node values
|
---|
128 | K DATA
|
---|
129 | S DATA("S")=$G(^LR(LRDFN,"CH",LRIDT,0))
|
---|
130 | Q
|
---|
131 | ;
|
---|
132 | CSPEC(DATA,LRDFN,LRIDT) ; specimen comments
|
---|
133 | N CMT,CNT K DATA
|
---|
134 | I '$D(^LR(LRDFN,"CH",LRIDT,1,0)) Q
|
---|
135 | S CNT=0
|
---|
136 | S CMT=0
|
---|
137 | F S CMT=$O(^LR(LRDFN,"CH",LRIDT,1,CMT)) Q:CMT<1 D
|
---|
138 | . I '$D(^LR(LRDFN,"CH",LRIDT,1,CMT,0)) Q
|
---|
139 | . S CNT=CNT+1
|
---|
140 | . S DATA("C",CNT)=^LR(LRDFN,"CH",LRIDT,1,CMT,0)
|
---|
141 | Q
|
---|
142 | ;
|
---|
143 | VSPEC(DATA,LRDFN,LRIDT) ; test nodes for collected specimen
|
---|
144 | N CNT,LRDN,VALUE K DATA
|
---|
145 | S CNT=0
|
---|
146 | S LRDN=1
|
---|
147 | F S LRDN=$O(^LR(LRDFN,"CH",LRIDT,LRDN)) Q:LRDN<2 S VALUE=^(LRDN) D
|
---|
148 | . S CNT=CNT+1
|
---|
149 | . S DATA("V",CNT)=LRDN_U_VALUE
|
---|
150 | Q
|
---|
151 | ;
|
---|
152 | COMMENT(LRDFN,LRIDT) ; $$(lrdfn,lridt) --> 1 if comment exists, else 0
|
---|
153 | I +$O(^LR(LRDFN,"CH",LRIDT,1,0)) Q 1
|
---|
154 | Q 0
|
---|
155 | ;
|
---|
156 | VALUE(RESULT,DFN,DATE,TEST,COND,ERR) ; from LRPXAPI, LRPXAPI1
|
---|
157 | ; returns result node that has met conditions as RESULT
|
---|
158 | N LRDFN,LRIDT,LRDN
|
---|
159 | I $L(COND),'$$CONDOK^LRPXAPIU(COND,"C") S ERR=1 Q
|
---|
160 | I $L(COND) S COND=$$REPLACE("I "_COND)
|
---|
161 | S RESULT=""
|
---|
162 | S ERR=0
|
---|
163 | S LRDFN=$$LRDFN^LRPXAPIU(DFN)
|
---|
164 | I 'LRDFN S ERR=1 Q
|
---|
165 | I 'DATE S ERR=1 Q
|
---|
166 | S LRIDT=$$LRIDT^LRPXAPIU(DATE)
|
---|
167 | S LRDN=$$LRDN^LRPXAPIU(TEST)
|
---|
168 | I 'LRDN S ERR=1 Q
|
---|
169 | D LRVAL(.RESULT,LRDFN,LRIDT,LRDN,COND,.ERR)
|
---|
170 | Q
|
---|
171 | ;
|
---|
172 | LRVALUE(RESULT,LRDFN,LRIDT,LRDN,COND,ERR) ; from LRPXAPI, LRPXAPI1
|
---|
173 | ; returns result node that has met conditions as RESULT
|
---|
174 | I $L(COND),'$$CONDOK^LRPXAPIU(COND,"C") S ERR=1 Q
|
---|
175 | I $L(COND) S COND=$$REPLACE("I "_COND)
|
---|
176 | D LRVAL(.RESULT,LRDFN,LRIDT,LRDN,COND,.ERR)
|
---|
177 | Q
|
---|
178 | ;
|
---|
179 | LRVAL(RESULT,LRDFN,LRIDT,LRDN,COND,ERR) ;
|
---|
180 | N F,S,V,VALUE
|
---|
181 | S RESULT=""
|
---|
182 | S ERR=0
|
---|
183 | S VALUE=$G(^LR(LRDFN,"CH",LRIDT,LRDN))
|
---|
184 | I '$L(VALUE) S ERR=1 Q
|
---|
185 | I $L(COND) D I ERR Q
|
---|
186 | . S V=$P(VALUE,U)
|
---|
187 | . S F=$P(VALUE,U,2)
|
---|
188 | . S S=$P($P(VALUE,U,5),"!")
|
---|
189 | . I 'S S S=$P($G(^LR(LRDFN,"CH",LRIDT,0)),U,5)
|
---|
190 | . X COND I '$T S ERR=1
|
---|
191 | S RESULT=VALUE
|
---|
192 | Q
|
---|
193 | ;
|
---|
194 | CHNODE(ARRAY,NODE) ; from LRPXAPI
|
---|
195 | N NAME,NAME3,NAME5,NODE3,NODE5,PIECE,PIECE3,PIECE5,SUB K ARRAY
|
---|
196 | I '$L(NODE) Q
|
---|
197 | S NAME="RESULT^FLAG^CODES^VERIFIER^NORMALS^DATE-R^DATE-T^^INSTITUTION^LEDI^INSTRUMENT^TYPE"
|
---|
198 | S NAME3="NLT-O!NLT-R!LOINC!METHOD!MAP!TEST"
|
---|
199 | S NAME5="SPEC!LOW!HIGH!LOW-C!HIGH-C!!UNITS!DELTA-T!DELTA-V!DEF!LOW-T!HIGH-T"
|
---|
200 | F PIECE=1:1:12 D
|
---|
201 | . I PIECE=8 Q
|
---|
202 | . S SUB=$P(NAME,U,PIECE)
|
---|
203 | . I PIECE=8 Q
|
---|
204 | . I PIECE=3 D Q
|
---|
205 | .. S NODE3=$P(NODE,U,3)
|
---|
206 | .. F PIECE3=1:1:6 S ARRAY($P(NAME3,"!",PIECE3))=$P(NODE3,"!",PIECE3)
|
---|
207 | . I PIECE=5 D Q
|
---|
208 | .. S NODE5=$P(NODE,U,5)
|
---|
209 | .. F PIECE5=1:1:12 D
|
---|
210 | ... I PIECE5=6 Q
|
---|
211 | ... S ARRAY($P(NAME5,"!",PIECE5))=$P(NODE5,"!",PIECE5)
|
---|
212 | . S ARRAY(SUB)=$P(NODE,U,PIECE)
|
---|
213 | Q
|
---|
214 | ;
|
---|
215 | ACCY(TESTS,ACC,BDN) ; from LRPXAPI
|
---|
216 | ; returns TESTS from yearly accession, ACC, BDN required
|
---|
217 | ; BDN is beginning date number
|
---|
218 | ; TESTS is array of file 60 iens
|
---|
219 | N DIC,LRAA,LRAAB,LRAD,LRAN,TEST,X,Y K DIC,TESTS
|
---|
220 | I '$L($G(ACC)) Q
|
---|
221 | S LRAAB=$P(ACC," ")
|
---|
222 | I LRAAB="" Q
|
---|
223 | S BDN=$E($G(BDN))
|
---|
224 | I BDN'>1 Q
|
---|
225 | S LRAN=+$P(ACC," ",3)
|
---|
226 | I 'LRAN Q
|
---|
227 | S LRAA=+$O(^LRO(68,"B",LRAAB,0))
|
---|
228 | I 'LRAA D
|
---|
229 | . S DIC=68,DIC(0)="M"
|
---|
230 | . S X=LRAAB
|
---|
231 | . D ^DIC K DIC
|
---|
232 | . S LRAA=+Y
|
---|
233 | I LRAA'>0 Q
|
---|
234 | S LRAD=BDN_$P(ACC," ",2)_"0000" ; yearly acc areas are assumed
|
---|
235 | S TEST=0
|
---|
236 | F S TEST=$O(^LRO(68,LRAA,1,LRAD,1,LRAN,4,TEST)) Q:TEST<1 D
|
---|
237 | . S TESTS(TEST)=TEST_U_$$TESTNM^LRPXAPIU(TEST)
|
---|
238 | Q
|
---|
239 | ;
|
---|
240 | CONDOK(CONDO,TYPE) ; $$ from LRPXAPIU
|
---|
241 | N DEL,NUM,OK,OPER,PIECE,PIECES,VALID,VALIDOP,VALUE,VAR K PIECES
|
---|
242 | I '(TYPE="C"!(TYPE="M")!(TYPE="A")) Q 0
|
---|
243 | S COND=CONDO
|
---|
244 | I $E(COND)="|" S COND=$E(COND,2,245)
|
---|
245 | I $E(COND)="~" S COND=$E(COND,2,245)
|
---|
246 | I $L(COND)'>2 Q 0
|
---|
247 | I $E(COND,1,2)'?1U1P Q 0
|
---|
248 | I COND[U Q 0
|
---|
249 | I CONDO[" " Q 0
|
---|
250 | I CONDO["|" S DEL="|"
|
---|
251 | E S DEL="~"
|
---|
252 | I '$$SYNTAX($$REPLACE(COND)) Q 0
|
---|
253 | S PIECE=COND
|
---|
254 | D
|
---|
255 | . I TYPE="C" S VALID="FSV" Q
|
---|
256 | . I TYPE="A" S VALID="CDEFIMOPST" Q
|
---|
257 | . I TYPE="M" S VALID="ACIMORST" Q
|
---|
258 | F NUM=1:1 Q:'$L($P(PIECE,DEL,NUM)) S PIECES(NUM)=$P(PIECE,DEL,NUM)
|
---|
259 | S OK=1
|
---|
260 | S NUM=0
|
---|
261 | F S NUM=$O(PIECES(NUM)) Q:NUM<1 D Q:'OK
|
---|
262 | . S PIECE=PIECES(NUM)
|
---|
263 | . I $L(PIECE)<3 S OK=0 Q
|
---|
264 | . S VAR=$E(PIECE)
|
---|
265 | . I VALID'[VAR S OK=0 Q
|
---|
266 | . D
|
---|
267 | .. I VAR="V" S VALIDOP="=<>[]" Q
|
---|
268 | .. I VAR="F" S VALIDOP="=[]" Q
|
---|
269 | .. I VAR="I" S VALIDOP="=[]" Q
|
---|
270 | .. I VAR="R" S VALIDOP="=[]" Q
|
---|
271 | .. I VAR="S",TYPE="A" S VALIDOP="=[]" Q
|
---|
272 | .. S VALIDOP="="
|
---|
273 | . I $E(PIECE,3)="'" S OK=0 Q
|
---|
274 | . I $E(PIECE,2)="'" S OPER=$E(PIECE,3)
|
---|
275 | . E S OPER=$E(PIECE,2)
|
---|
276 | . I VALIDOP'[OPER S OK=0 Q
|
---|
277 | . S VALUE=$P(PIECE,OPER,2,999)
|
---|
278 | . I $E(VALUE)="""",$E(VALUE,$L(VALUE))'="""" S OK=0 Q
|
---|
279 | . I VAR="C" D Q:'OK
|
---|
280 | .. I VALUE'?1""""1U1"""" S OK=0 Q
|
---|
281 | .. I $$CATSUB^LRPXAPIU($E(VALUE,2),TYPE)=-1 S OK=0 Q
|
---|
282 | . I VALUE,VALUE'=+VALUE S OK=0 Q
|
---|
283 | . I $L($P(VALUE,"""",3)) S OK=0 Q
|
---|
284 | . I '$$SYNTAX(PIECE) S OK=0 Q
|
---|
285 | . I $E(PIECE,2)="=",COND[(VAR_"'=") S OK=0 Q
|
---|
286 | I 'OK Q 0
|
---|
287 | Q 1
|
---|
288 | ;
|
---|
289 | REPLACE(COND) ; $$(condition) -> condition replacing | or ~ with commas
|
---|
290 | Q $TR(COND,"~|",",,")
|
---|
291 | ;
|
---|
292 | SYNTAX(X) ; $$(condition) -> 1 if correct, else 0
|
---|
293 | ; check syntax when condition applies to an if statement
|
---|
294 | S X="I "_X
|
---|
295 | D ^DIM
|
---|
296 | I '$D(X) Q 0
|
---|
297 | Q 1
|
---|
298 | ;
|
---|
299 | NORMALS(LOW,HIGH,TEST,SPEC) ; from LRPXAPIU
|
---|
300 | N NODE
|
---|
301 | S (LOW,HIGH)=""
|
---|
302 | S TEST=+$G(TEST)
|
---|
303 | I 'TEST Q
|
---|
304 | S SPEC=+$G(SPEC)
|
---|
305 | I 'SPEC Q
|
---|
306 | S NODE=$G(^LAB(60,TEST,1,SPEC,0))
|
---|
307 | S LOW=$P(NODE,U,2)
|
---|
308 | S HIGH=$P(NODE,U,3)
|
---|
309 | Q
|
---|
310 | ;
|
---|