1 | SCMSVUT1 ;ALB/JLU;validation utility routine;06/19/99 ; 4/30/03 11:58am
|
---|
2 | ;;5.3;Scheduling;**66,143,180,239,247,258,296,295,321,341,387,459,394,442**;AUG 13,1993
|
---|
3 | ;06/19/99 ACS - Added CPT Modifier API calls to PROCCOD(DATA)
|
---|
4 | ;
|
---|
5 | SEGERR(DATA,HLFS) ;
|
---|
6 | ;INPUT DATA - This is a check for the segment errors of null
|
---|
7 | ; HLFS - The string separator character
|
---|
8 | I '$D(DATA) Q 0
|
---|
9 | I DATA="" Q 0
|
---|
10 | I $L(DATA,HLFS)'>2 Q 0
|
---|
11 | Q 1
|
---|
12 | ;
|
---|
13 | DODA(DATA) ;
|
---|
14 | ;INPUT DATA - The FM date of death.
|
---|
15 | ;
|
---|
16 | I '$D(DATA) Q 0
|
---|
17 | I DATA="" Q 1
|
---|
18 | N %DT,X,Y
|
---|
19 | S %DT="T",%DT(0)="-NOW",X=DATA
|
---|
20 | D ^%DT
|
---|
21 | Q $S(Y=-1:0,1:1)
|
---|
22 | ;
|
---|
23 | DODB(DATA,ENCDT) ;
|
---|
24 | ;INPUT DATA - The FM date of death
|
---|
25 | ; ENCDT - The FM date of encounter
|
---|
26 | I '$D(DATA) Q 0
|
---|
27 | I DATA="" Q 1
|
---|
28 | N %DT,X,Y
|
---|
29 | S %DT="T",%DT(0)=ENCDT,X=DATA
|
---|
30 | D ^%DT
|
---|
31 | Q $S(Y=-1:0,1:1)
|
---|
32 | ;
|
---|
33 | DODL(DATA,ENCDT) ;
|
---|
34 | ;INPUT DATA - The FM date of death
|
---|
35 | ; ENCDT - The FM date of the encounter
|
---|
36 | I '$D(DATA) Q 0
|
---|
37 | I '$D(ENCDT) Q 0
|
---|
38 | I DATA="" Q 1
|
---|
39 | I ENCDT<DATA Q 1
|
---|
40 | I ENCDT=DATA Q 1
|
---|
41 | N X1,X2,X
|
---|
42 | S X1=ENCDT,X2=DATA
|
---|
43 | D ^%DTC
|
---|
44 | I X>14 Q 0
|
---|
45 | Q 1
|
---|
46 | ;
|
---|
47 | HOME(DATA) ;
|
---|
48 | ;INPUT DATA - THe homeless indicator to be validated.
|
---|
49 | ;
|
---|
50 | I '$D(DATA) Q 0
|
---|
51 | I DATA'=1,DATA'=0 Q 0
|
---|
52 | Q 1
|
---|
53 | ;
|
---|
54 | POW(DATA) ;
|
---|
55 | ;INPUT DATA - The POW indicatort to be validated.
|
---|
56 | ;
|
---|
57 | I '$D(DATA) Q 0
|
---|
58 | I DATA="" Q 1
|
---|
59 | I DATA'="N",DATA'="U",DATA'="Y" Q 0
|
---|
60 | Q 1
|
---|
61 | ;
|
---|
62 | TYPINS(DATA) ;
|
---|
63 | ;INPUT DATA - Type if insurance indicator to be validated.
|
---|
64 | ;
|
---|
65 | I '$D(DATA) Q 0
|
---|
66 | I DATA="" Q 1
|
---|
67 | I DATA?.A Q 0
|
---|
68 | I DATA>-1,(DATA<13) Q 1
|
---|
69 | Q 0
|
---|
70 | ;
|
---|
71 | PATCLSS(DATA) ;
|
---|
72 | ;INPUT DATA - the patient's class
|
---|
73 | ;
|
---|
74 | I '$D(DATA) Q 0
|
---|
75 | I ("^O^I^")'[("^"_DATA_"^") Q 0
|
---|
76 | Q 1
|
---|
77 | ;
|
---|
78 | POV(DATA) ;
|
---|
79 | ;
|
---|
80 | ;INPUT DATA - the purpose of visit.
|
---|
81 | ;SD*5.3*394 - Correction for addition POV.
|
---|
82 | ;
|
---|
83 | N VAR
|
---|
84 | I '$D(DATA) Q 0
|
---|
85 | I $L(DATA)'=4 Q 0
|
---|
86 | I DATA?.A Q 0
|
---|
87 | S VAR=$E(DATA,1,2)
|
---|
88 | I VAR<1!(VAR>4) Q 0
|
---|
89 | S VAR=$E(DATA,3,4)
|
---|
90 | I VAR<1!(VAR=10) Q 0
|
---|
91 | Q 1
|
---|
92 | ;
|
---|
93 | COMPGEN(DATA) ;
|
---|
94 | ;INPUT DATA - checking computer generated.
|
---|
95 | ;
|
---|
96 | N VAR
|
---|
97 | S VAR=$E(DATA,3,4)
|
---|
98 | I VAR=10 Q 0
|
---|
99 | Q 1
|
---|
100 | ;
|
---|
101 | LOCVIS(DATA) ;
|
---|
102 | ;INPUT DATA - Location of visit
|
---|
103 | ;
|
---|
104 | I DATA'=1,DATA'=6 Q 0
|
---|
105 | Q 1
|
---|
106 | ;
|
---|
107 | FACNMBR(DATA) ;
|
---|
108 | ;INPUT DATA - The facility number
|
---|
109 | ;
|
---|
110 | I '$D(DATA) Q 0
|
---|
111 | I DATA'?3N.AN Q 0
|
---|
112 | I '$D(^DIC(4,"D",DATA)) Q 0
|
---|
113 | Q 1
|
---|
114 | ;
|
---|
115 | FACACT(DATA,ENCDT,DIV) ;
|
---|
116 | ;INPUT DATA - The active flag of the facility number.
|
---|
117 | ;
|
---|
118 | I '$D(DATA) Q 0
|
---|
119 | I '$D(ENCDT) Q 0
|
---|
120 | I '$D(DIV) Q 0
|
---|
121 | I DATA="" Q 0
|
---|
122 | N SITE
|
---|
123 | I DIV]"" S SITE=$$SITE^VASITE(ENCDT,DIV)
|
---|
124 | I DIV']"" S SITE=$$SITE^VASITE(ENCDT)
|
---|
125 | I DATA'=$P(SITE,U,3) Q 0
|
---|
126 | Q 1
|
---|
127 | ;
|
---|
128 | ENCDT(DATA,XMTFLG) ;
|
---|
129 | ;INPUT DATA - The date/time of the encounter
|
---|
130 | ; XMTFLG - Flag to check $$OKTOXMIT^SCDXFU04(DATA)
|
---|
131 | ;
|
---|
132 | I '$D(DATA) Q 0
|
---|
133 | S XMTFLG=$G(XMTFLG,0)
|
---|
134 | N %DT,X,Y
|
---|
135 | S %DT="T"
|
---|
136 | S X=DATA
|
---|
137 | D ^%DT
|
---|
138 | I Y=-1 Q 0
|
---|
139 | I XMTFLG Q 1
|
---|
140 | N VAR
|
---|
141 | S VAR=$$OKTOXMIT^SCDXFU04(DATA)
|
---|
142 | I +VAR<4&(VAR'<0) Q 1 ;SD*5.3*247
|
---|
143 | Q 0
|
---|
144 | ;
|
---|
145 | UNIQNMBR(DATA) ;
|
---|
146 | ;INPUT DATA - The unique number from PCE for the encounter
|
---|
147 | ;
|
---|
148 | I '$D(DATA) Q 0
|
---|
149 | I DATA="" Q 0
|
---|
150 | I DATA=-1 Q 0
|
---|
151 | I DATA=0 Q 0
|
---|
152 | Q 1
|
---|
153 | ;
|
---|
154 | SEGCHK(DATA,HLFS) ;
|
---|
155 | ;INPUT DATA - The segment to be checked.
|
---|
156 | ; HLFS - The HL7 field separator
|
---|
157 | ;
|
---|
158 | I '$D(DATA) Q 0
|
---|
159 | I DATA="" Q 0
|
---|
160 | I $L(DATA,HLFS)'>2 Q 0
|
---|
161 | Q 1
|
---|
162 | ;
|
---|
163 | SEQNBR(DATA,SEQNBR) ;
|
---|
164 | ;INPUT DATA - The sequence number to be checked.
|
---|
165 | ; SEQNBR - This is the previous seq number to compare to
|
---|
166 | ;
|
---|
167 | I '$D(DATA) Q 0
|
---|
168 | I DATA="" Q 0
|
---|
169 | I +DATA'=+SEQNBR Q 0
|
---|
170 | S SEQNBR=SEQNBR+1
|
---|
171 | Q 1
|
---|
172 | ;
|
---|
173 | DCODMTHD(DATA) ;
|
---|
174 | ;INPUT DATA - This is the coding method to be checked.
|
---|
175 | ;
|
---|
176 | I '$D(DATA) Q 0
|
---|
177 | I DATA'="I9" Q 0
|
---|
178 | Q 1
|
---|
179 | ;
|
---|
180 | DIAGCOD(DATA,ENCDT) ;
|
---|
181 | ;INPUT DATA - This is the diagnosis code
|
---|
182 | ; ENCDT - This is the encounter date
|
---|
183 | ;
|
---|
184 | N VAR
|
---|
185 | I '$D(DATA) Q 0
|
---|
186 | I DATA="" Q 0
|
---|
187 | ;
|
---|
188 | Q $P($$ICDDX^ICDCODE(DATA,ENCDT),"^",10)
|
---|
189 | ;
|
---|
190 | PRIOR(DATA) ;
|
---|
191 | ;INPUT DATA - The priority of the diagnosis found
|
---|
192 | ;
|
---|
193 | I '$D(DATA) Q 0
|
---|
194 | I DATA="" Q 1
|
---|
195 | I DATA=1 Q 1
|
---|
196 | Q 0
|
---|
197 | ;
|
---|
198 | ELIGCODM(DATA) ;
|
---|
199 | ;INPUT DATA - The eligibility code
|
---|
200 | ;A CHECK FOR MISSING
|
---|
201 | I '$D(DATA) Q 0
|
---|
202 | I DATA="" Q 0
|
---|
203 | I '$D(^DIC(8.1,DATA,0)) Q 0
|
---|
204 | Q 1
|
---|
205 | ;
|
---|
206 | ELIGINCV(DATA) ;
|
---|
207 | ;INPUT DATA - Contains the eligibility code in the first piece and
|
---|
208 | ;the veteran status in the second.
|
---|
209 | ;
|
---|
210 | ;the following quit is to stop this edit check.
|
---|
211 | ;Per Austin 9/97 this is not needed.
|
---|
212 | Q 1
|
---|
213 | N VET,ELIG
|
---|
214 | S VET=$P(DATA,U,2)
|
---|
215 | S ELIG=$P(DATA,U,1)
|
---|
216 | I VET=1&((ELIG<1)!(ELIG>18)) Q 0
|
---|
217 | I VET=1,ELIG>5,ELIG<15 Q 0
|
---|
218 | I VET=0,ELIG<6 Q 0
|
---|
219 | I VET=0,ELIG=11 Q 0
|
---|
220 | I VET=0,ELIG>14,ELIG'=19 Q 0
|
---|
221 | Q 1
|
---|
222 | ;
|
---|
223 | ELIGINCS(DATA) ;
|
---|
224 | ;INPUT DATA - Eligibility code
|
---|
225 | ;
|
---|
226 | I '$D(DATA) Q 0
|
---|
227 | I DATA="" Q 0
|
---|
228 | I '$D(^DIC(8.1,DATA,0)) Q 0
|
---|
229 | I +$P(^DIC(8.1,DATA,0),U,7) Q 0
|
---|
230 | Q 1
|
---|
231 | ;
|
---|
232 | VETSTAT(DATA) ;
|
---|
233 | ;INPUT DATA - The veteran status indicator
|
---|
234 | ;
|
---|
235 | I '$D(DATA) Q 0
|
---|
236 | I DATA'=0,DATA'=1 Q 0
|
---|
237 | Q 1
|
---|
238 | ;
|
---|
239 | VETPOW(DATA,DFN) ;
|
---|
240 | ;INPUT DATA - veteran status to check with POW status.
|
---|
241 | ; DFN - The DFN of the patient.
|
---|
242 | ;
|
---|
243 | N VAR,POW
|
---|
244 | I DATA=0 Q 1
|
---|
245 | S VAR=$G(^DPT(DFN,.52))
|
---|
246 | S POW=$S(VAR]"":$P(VAR,U,5),1:VAR)
|
---|
247 | I POW="" Q 1
|
---|
248 | I POW="Y"!(POW="N")!(POW="U") Q 1
|
---|
249 | Q 0
|
---|
250 | ;
|
---|
251 | NMBRDEP(DATA) ;
|
---|
252 | ;INPUT DATA - the number of dependents
|
---|
253 | ;
|
---|
254 | I '$D(DATA) Q 0
|
---|
255 | I DATA="" Q 0
|
---|
256 | I DATA="XX" Q 1
|
---|
257 | I DATA'?1.2N Q 0
|
---|
258 | I +DATA>99!(+DATA<0) Q 0
|
---|
259 | Q 1
|
---|
260 | ;
|
---|
261 | PATINC(DATA) ;
|
---|
262 | ;INPUT DATA - The patient's income
|
---|
263 | ;
|
---|
264 | I '$D(DATA) Q 0
|
---|
265 | I DATA="" Q 0
|
---|
266 | I DATA<0 Q 0
|
---|
267 | I DATA'?.N.1".".N Q 0
|
---|
268 | Q 1
|
---|
269 | ;
|
---|
270 | MEANSTST(DATA) ;
|
---|
271 | ;INPUT DATA - The means test indicator
|
---|
272 | ;
|
---|
273 | I '$D(DATA) Q 0
|
---|
274 | S DATA=","_DATA_","
|
---|
275 | ; ** SD*296, added 'U' means test indicator to allowed list.
|
---|
276 | I ",AS,AN,N,X,C,G,U,"'[DATA Q 0
|
---|
277 | Q 1
|
---|
278 | ;
|
---|
279 | DEPMEANS(DATA) ;
|
---|
280 | ;INPUT DATA - This variable contains the number of dependents in the
|
---|
281 | ; first peice and the means test indicator in the second.
|
---|
282 | ;
|
---|
283 | N MT,DEP
|
---|
284 | I '$D(DATA) Q 0
|
---|
285 | S DEP=$P(DATA,U,1)
|
---|
286 | S MT=","_$P(DATA,U,2)_","
|
---|
287 | I DEP="XX",(",AS,N,X,U,"'[MT) Q 0
|
---|
288 | Q 1
|
---|
289 | ;
|
---|
290 | CLASSQUE(DATA) ;
|
---|
291 | ;INPUT DATA - Classification question value.
|
---|
292 | ;
|
---|
293 | I '$D(DATA) Q 0
|
---|
294 | I DATA'=1,DATA'=0,DATA'="" Q 0
|
---|
295 | Q 1
|
---|
296 | ;
|
---|
297 | CLAQUETY(DATA) ;
|
---|
298 | ;INPUT DATA - Outpatient classification type to be checked.
|
---|
299 | ;
|
---|
300 | I '$D(DATA) Q 0
|
---|
301 | I DATA="" Q 0
|
---|
302 | I '$D(^SD(409.41,DATA,0)) Q 0
|
---|
303 | Q 1
|
---|
304 | ;
|
---|
305 | CLAVET(DATA,DFN,TYPE,ENCPTR) ; SD*5.3*341 added parameter ENCPTR
|
---|
306 | ;INPUT DATA - Classification question information to compare to VET
|
---|
307 | ; status
|
---|
308 | ; DFN - The patient to compare this info to.
|
---|
309 | ; TYPE - The classification type.
|
---|
310 | ; ENCPTR - Pointer to Outpatient Encounter
|
---|
311 | ;
|
---|
312 | I '$D(DATA) Q 0
|
---|
313 | I '$D(DFN) Q 0
|
---|
314 | I '$D(TYPE) Q 0 ; SD*5.3*341
|
---|
315 | N VET,SDELG0,SDDT ; SD*5.3*341
|
---|
316 | S ENCPTR=$G(ENCPTR) ; SD*5.3*341 added this plus next 3 lines
|
---|
317 | S SDDT=+$G(^SCE(ENCPTR,0)) S:'SDDT SDDT=$$DT^XLFDT()
|
---|
318 | S SDELG0=$$EL^SDCO22(DFN,ENCPTR)
|
---|
319 | S VET=$P(SDELG0,U,5)
|
---|
320 | I VET="Y",DATA'=1,DATA'=0,DATA'="" Q 0
|
---|
321 | ;This edit check is per a mail message from austin
|
---|
322 | I TYPE=4,VET'="Y",DATA'="","^A^B^C^D^"'[("^"_($P($G(^DIC(21,+$P($G(^DPT(DFN,.32)),"^",3),0)),"^",3))_"^") Q 0
|
---|
323 | I VET'="Y",DATA'="" Q $$SCR^SDCO21(TYPE,DFN,SDDT,ENCPTR) ; SD*5.3*341
|
---|
324 | Q 1
|
---|
325 | ;
|
---|
326 | STPCOD(DATA) ;
|
---|
327 | ;INPUT DATA - stop code data to be checked
|
---|
328 | ;
|
---|
329 | I '$D(DATA) Q 0
|
---|
330 | I DATA="" Q 0
|
---|
331 | I '$D(^DIC(40.7,"C",DATA)) Q 0
|
---|
332 | Q 1
|
---|
333 | ;
|
---|
334 | ACTSTP(DATA,ENCDT) ;
|
---|
335 | ;INPUT DATA - IEN of the stop code to be checked.
|
---|
336 | ; ENCDT - the encounter date in question
|
---|
337 | ;
|
---|
338 | N STPCOD,%DT,X,Y
|
---|
339 | I '$D(DATA) Q 0
|
---|
340 | I DATA="" Q 0
|
---|
341 | S STPCOD=$G(^DIC(40.7,DATA,0))
|
---|
342 | I STPCOD="" Q 0
|
---|
343 | I '$P(STPCOD,U,3) Q 1
|
---|
344 | S %DT(0)="-"_$P(STPCOD,U,3),%DT="T",X=ENCDT
|
---|
345 | D ^%DT
|
---|
346 | Q $S(Y=-1:0,1:1)
|
---|
347 | ;
|
---|
348 | SERCON(DATA) ;
|
---|
349 | ;INPUT DATA - Service connection to be checked, missing or invalid
|
---|
350 | ;
|
---|
351 | I '$D(DATA) Q 0
|
---|
352 | I DATA="" Q 0
|
---|
353 | I DATA'=1,DATA'=0 Q 0
|
---|
354 | Q 1
|
---|
355 | ;
|
---|
356 | SCPER(DATA) ;
|
---|
357 | ;INPUT DATA - Service connected % to be tested
|
---|
358 | ;
|
---|
359 | I '$D(DATA) Q 0
|
---|
360 | I DATA="" Q 1
|
---|
361 | I DATA'?.N.1".".N Q 0
|
---|
362 | Q 1
|
---|
363 | ;
|
---|
364 | PRDSER(DATA) ;
|
---|
365 | ;INPUT DATA - period of service to be tested.
|
---|
366 | ;
|
---|
367 | I '$D(DATA) Q 0
|
---|
368 | I DATA="" Q 0
|
---|
369 | I '$D(^DIC(21,"D",DATA)) Q 0
|
---|
370 | Q 1
|
---|
371 | ;
|
---|
372 | VIETSER1(DATA) ;
|
---|
373 | ;INPUT DATA - Vietnam service to be checked
|
---|
374 | ;
|
---|
375 | I '$D(DATA) Q 0
|
---|
376 | I DATA="" Q 1
|
---|
377 | I DATA'="Y",DATA'="N",DATA'="U" Q 0
|
---|
378 | Q 1
|
---|
379 | ;
|
---|
380 | VIETSER2(DATA,DFN) ;
|
---|
381 | ;INPUT DATA - Vietnam service to be checked against vet status
|
---|
382 | ;
|
---|
383 | I '$D(DATA) Q 0
|
---|
384 | N VAR
|
---|
385 | S VAR=$G(^DPT(DFN,"VET"))
|
---|
386 | I DATA="",VAR'="Y" Q 1
|
---|
387 | I (DATA="Y"!(DATA="N")!(DATA="U")),VAR="Y" Q 1
|
---|
388 | Q 0
|
---|
389 | ;
|
---|
390 | ACTPRD(DATA) ;
|
---|
391 | ;INPUT DATA - period of serivce indicator to be check to ensure active
|
---|
392 | ;
|
---|
393 | N VAR
|
---|
394 | I '$D(DATA) Q 0
|
---|
395 | I DATA="" Q 0
|
---|
396 | S VAR=+$O(^DIC(21,"D",DATA,0))
|
---|
397 | S VAR=$P($G(^DIC(21,VAR,0)),U,8)
|
---|
398 | I VAR Q 0
|
---|
399 | Q 1
|
---|
400 | ;
|
---|
401 | PCODMTHD(DATA) ;
|
---|
402 | ;INPUT DATA - The coding method to be checked.
|
---|
403 | ;
|
---|
404 | I '$D(DATA) Q 0
|
---|
405 | I DATA'="C4" Q 0
|
---|
406 | Q 1
|
---|
407 | ;
|
---|
408 | PROCCOD(DATA,ENCDT) ;
|
---|
409 | ;INPUT DATA - The procedure code to be checked.
|
---|
410 | ;This call makes the assumption that leading zeros are intact in the
|
---|
411 | ;input.
|
---|
412 | ;
|
---|
413 | N VAR
|
---|
414 | I '$D(DATA) Q 0
|
---|
415 | I DATA="" Q 0
|
---|
416 | I $$CPT^ICPTCOD(DATA,ENCDT,1)'>0 Q 0
|
---|
417 | Q 1
|
---|
418 | ;
|
---|
419 | PROVCLS(DATA) ;
|
---|
420 | ;INPUT DATA - The practitioner class to be checked.
|
---|
421 | ;
|
---|
422 | N INACT S INACT=""
|
---|
423 | I '$D(DATA) Q 0
|
---|
424 | I DATA="" Q 0
|
---|
425 | I $$CODE2TXT^XUA4A72(DATA)']"" Q 0
|
---|
426 | S INACT=$P($$IEN2DATA^XUA4A72($$VCLK^XUA4A72(DATA)),U,5) ;SD*5.3*442
|
---|
427 | I INACT'="" I ENCDT>INACT Q 0 ;SD*5.3*442
|
---|
428 | Q 1
|
---|
429 | ;
|
---|
430 | ERI(DATA) ;
|
---|
431 | ;INPUT DATA - The Emergency Response indicator to be validated.
|
---|
432 | ;
|
---|
433 | I '$D(DATA) Q 0
|
---|
434 | I DATA="" Q 1
|
---|
435 | I DATA'="K" Q 0
|
---|
436 | Q 1
|
---|
437 | ;
|
---|