1 | SCMSVUT3 ;BP/JRP - HL7 segment & field validation utilities ;8/11/99 9:54am
|
---|
2 | ;;5.3;Scheduling;**142,180,208,239,395**;AUG 13, 1993
|
---|
3 | ;
|
---|
4 | ;Standard input parameters
|
---|
5 | ; DATA - Value to validate
|
---|
6 | ; DFN - Point to PATIENT file (#2)
|
---|
7 | ; ENCDT - Date/time of encounter (FileMan format)
|
---|
8 | ; HLFS - HL7 field seperator
|
---|
9 | ; HLECH - HL7 encoding characters
|
---|
10 | ; HLQ - HL7 null designation
|
---|
11 | ;
|
---|
12 | ;Standard output
|
---|
13 | ; 1 - Valid
|
---|
14 | ; 0 - Invalid
|
---|
15 | ;
|
---|
16 | ;
|
---|
17 | POWLOC(DATA,DFN) ;Prisoner of war location
|
---|
18 | ;Note: Use of DFN is optional. Use of the DFN will validate the POW
|
---|
19 | ; location and also verify that it is consistant with patient's
|
---|
20 | ; POW status (i.e. must also have been a POW). Non-use of DFN
|
---|
21 | ; will only validate the POW location.
|
---|
22 | ;
|
---|
23 | Q:('$D(DATA)) 0
|
---|
24 | N POW,NODE
|
---|
25 | S DFN=+$G(DFN)
|
---|
26 | ;Patient a POW ?
|
---|
27 | S POW=1
|
---|
28 | I (DFN) D
|
---|
29 | .S NODE=$G(^DPT(DFN,.52))
|
---|
30 | .S POW=$TR($P(NODE,"^",5),"YNU","100")
|
---|
31 | ;Invalid location code
|
---|
32 | I (DATA'="")&("456789AB"'[DATA) Q 0
|
---|
33 | ;Location code not consistant with POW status
|
---|
34 | I (DATA) Q:('POW) 0
|
---|
35 | I (DATA="") Q:((DFN)&(POW)) 0
|
---|
36 | ;Valid location code
|
---|
37 | Q 1
|
---|
38 | RADMTHD(DATA,DFN) ;Radiation exposure method
|
---|
39 | ;Note: Use of DFN is optional. Use of the DFN will validate the
|
---|
40 | ; radiation method and also verify that it is consistant with
|
---|
41 | ; patient's radiation exposure (i.e. must also have claimed
|
---|
42 | ; exposure). Non-use of DFN will only validate the radiation
|
---|
43 | ; method.
|
---|
44 | ;
|
---|
45 | Q:('$D(DATA)) 0
|
---|
46 | N RAD,NODE
|
---|
47 | S DFN=+$G(DFN)
|
---|
48 | ;Patient claim exposure ?
|
---|
49 | S RAD=1
|
---|
50 | I (DFN) D
|
---|
51 | .S NODE=$G(^DPT(DFN,.321))
|
---|
52 | .S RAD=$TR($P(NODE,"^",3),"YNU","100")
|
---|
53 | ;Invalid method code
|
---|
54 | I (DATA'="") Q:((DATA'?1N)!(DATA<2)!(DATA>4)) 0
|
---|
55 | ;Method code not consistant with exposure status
|
---|
56 | I (DATA) Q:('RAD) 0
|
---|
57 | I (DATA="") Q:((DFN)&(RAD)) 0
|
---|
58 | ;Valid method code
|
---|
59 | Q 1
|
---|
60 | NUMRANK(DATA,MINVAL,MAXVAL,DECCNT) ;Numeric ranking validation
|
---|
61 | ;Input : MINVAL - Minimum value (defaults to no lower limit)
|
---|
62 | ; MAXVAL - Maximum value (defaults to no upper limit)
|
---|
63 | ; DECCNT - Decimal places allowed (defaults to no limit)
|
---|
64 | ;Note : DATA considered invalid if NULL
|
---|
65 | Q:('$D(DATA)) 0
|
---|
66 | Q:(DATA="") 0
|
---|
67 | Q:(DATA=".") 0
|
---|
68 | N INVALID
|
---|
69 | S INVALID=0
|
---|
70 | ;General numeric check
|
---|
71 | Q:(DATA'?.1"-".N.1".".N) 0
|
---|
72 | ;Min value check
|
---|
73 | I ($G(MINVAL)'="") D
|
---|
74 | .S INVALID=(DATA<MINVAL)
|
---|
75 | Q:(INVALID) 0
|
---|
76 | ;Max value check
|
---|
77 | I ($G(MAXVAL)'="") D
|
---|
78 | .S INVALID=(DATA>MAXVAL)
|
---|
79 | Q:(INVALID) 0
|
---|
80 | ;Decimal check
|
---|
81 | I ($G(DECCNT)'="") D
|
---|
82 | .X "S INVALID=DATA'?.1""-"".N.1"".""."_DECCNT_"N"
|
---|
83 | Q:(INVALID) 0
|
---|
84 | ;Valid
|
---|
85 | Q 1
|
---|
86 | VALFAC(DATA) ;Determine if given facility number is valid
|
---|
87 | Q:('$D(DATA)) 0
|
---|
88 | Q:(DATA="") 0
|
---|
89 | ;Invalid
|
---|
90 | Q:('$D(^DIC(4,"D",DATA))) 0
|
---|
91 | ;Valid
|
---|
92 | Q 1
|
---|
93 | ACTFAC(DATA) ;Determine if given facility number is active
|
---|
94 | Q:('$D(DATA)) 0
|
---|
95 | Q:(DATA="") 0
|
---|
96 | N PTR4,ACTIVE,NODE
|
---|
97 | ;Check all entries in INSTITUTION file (#4) with given facility number
|
---|
98 | ; (quits when first active entry is found)
|
---|
99 | S ACTIVE=0
|
---|
100 | S PTR4=0
|
---|
101 | F S PTR4=+$O(^DIC(4,"D",DATA,PTR4)) Q:('PTR4) D Q:(ACTIVE)
|
---|
102 | .;Get node with inactive flag
|
---|
103 | .S NODE=$G(^DIC(4,PTR4,99))
|
---|
104 | .;Inactive
|
---|
105 | .Q:($P(NODE,"^",4)="y")
|
---|
106 | .;Active
|
---|
107 | .S ACTIVE=1
|
---|
108 | ;Done
|
---|
109 | Q ACTIVE
|
---|
110 | PROVID(DATA,HLECH) ;External Provider ID
|
---|
111 | Q:('$D(DATA)) 0
|
---|
112 | Q:(DATA="") 0
|
---|
113 | N PRVDUZ,PRVFAC,SUBSEP,VALID
|
---|
114 | S SUBSEP=$E(HLECH,4)
|
---|
115 | S PRVDUZ=$P(DATA,SUBSEP,1)
|
---|
116 | S PRVFAC=$P(DATA,SUBSEP,2)
|
---|
117 | S VALID=0
|
---|
118 | I $$NUMRANK(PRVDUZ,1,,0),$$VALFAC(PRVFAC),$$ACTFAC(PRVFAC) S VALID=1
|
---|
119 | Q VALID
|
---|
120 | ROLEID(DATA) ;Role Instance ID
|
---|
121 | Q:('$D(DATA)) 0
|
---|
122 | Q:(DATA="") 0
|
---|
123 | N ROLEID,SEQID,VALID
|
---|
124 | S ROLEID=$P(DATA,"*",1)
|
---|
125 | S SEQID=$P(DATA,"*",2)
|
---|
126 | S VALID=0
|
---|
127 | I ROLEID'="" I $$NUMRANK(SEQID,1,,0) S VALID=1
|
---|
128 | Q VALID
|
---|
129 | VA01(DATA) ;VA Table 1 (Yes/No/Unknown)
|
---|
130 | ;Notes: Table VA01 allows values of Y,N,U,1,0
|
---|
131 | ; : NULL is an accepted value
|
---|
132 | Q:('$D(DATA)) 0
|
---|
133 | Q:(DATA="") 1
|
---|
134 | Q:($L(DATA)'=1) 0
|
---|
135 | N TMP
|
---|
136 | S TMP=$TR(DATA,"YNU0","1111")
|
---|
137 | Q:(TMP'=1) 0
|
---|
138 | Q 1
|
---|
139 | CLAMST(VALUE,DFN) ;
|
---|
140 | ;Error code 9030
|
---|
141 | ;Validating whether or not the visit is related to MST
|
---|
142 | ;
|
---|
143 | ;INPUT
|
---|
144 | ; ENCDT - Date of encounter
|
---|
145 | ; DFN - IEN pointer from the Outpatient Encounter (#409.68) file
|
---|
146 | ; VALUE - Is encounter related (1=Yes,0=No)
|
---|
147 | ;
|
---|
148 | ;OUTPUT
|
---|
149 | ; 1 = Visit is related to MST
|
---|
150 | ; 0 = Visit Not related to MST
|
---|
151 | ;
|
---|
152 | ;
|
---|
153 | N MSTSTAT
|
---|
154 | I '$D(VALUE) Q 0
|
---|
155 | S MSTSTAT=$$GETSTAT^DGMSTAPI(DFN)
|
---|
156 | S MSTSTAT=$P(MSTSTAT,"^",2)
|
---|
157 | S MSTSTAT=$S(MSTSTAT="Y":1,1:0)
|
---|
158 | Q $S(MSTSTAT=0&(VALUE=1):0,1:1)
|
---|
159 | MSTSTAT(DATA) ;
|
---|
160 | ;Error code 7040
|
---|
161 | ;Check for valid MST status codes Y,N,D,U
|
---|
162 | ;
|
---|
163 | ;INPUT
|
---|
164 | ; DATA - the MST Status passed in by routine SCMSVZEL
|
---|
165 | ;
|
---|
166 | ;OUTPUT
|
---|
167 | ; 1 - Valid MST Status
|
---|
168 | ; 0 - Invalid MST Status
|
---|
169 | ;
|
---|
170 | I '$D(DATA) Q 0
|
---|
171 | I ("Y,N,U,D"[DATA)!(DATA="") Q 1
|
---|
172 | Q 0
|
---|
173 | MSTDATE(DATA) ;
|
---|
174 | ;Error code 7060
|
---|
175 | ;Check for valid date and that MST status is either Y,N,D or U
|
---|
176 | ; Variable X must be passed to ^%DT for date verification
|
---|
177 | ; Variable Y is returned from ^%DT
|
---|
178 | ;
|
---|
179 | ;INPUT
|
---|
180 | ; DATA - MST Date Status Changed^MST Status from SCMSVZEL
|
---|
181 | ;
|
---|
182 | ;OUTPUT
|
---|
183 | ; 1 - Valid MST Status and date in a valid format
|
---|
184 | ; 0 - Invalid MST Status or date in an invalid format
|
---|
185 | ;
|
---|
186 | N X,MSTSTAT
|
---|
187 | S X=$P(DATA,"^",2)
|
---|
188 | S MSTSTAT=$P(DATA,"^",1)
|
---|
189 | I X=""&("Y,N,D"'[MSTSTAT!(MSTSTAT="")) Q 1
|
---|
190 | S X=$$FMDATE^HLFNC(X),%DT="T"
|
---|
191 | D ^%DT
|
---|
192 | Q $S(Y>0&("U,Y,N,D"[MSTSTAT):1,1:0)
|
---|
193 | ;
|
---|
194 | AO(DATA,DFN) ;Validate Agent Orange expos. (error 7120)
|
---|
195 | ;INPUT : DATA - Value to validate
|
---|
196 | ; DFN - Pointer to PATIENT file (#2)
|
---|
197 | ;OUTPUT : 1 - Valid claim of exposure to Agent Orange
|
---|
198 | ; 0 - Invalid claim of exposure to Agent Orange
|
---|
199 | I '$D(DATA) Q 0
|
---|
200 | I '$D(DFN) Q 0
|
---|
201 | I DATA=1 Q 1 ;$$CANBEAO(DFN) SD*5.3*395 rem check for period of service
|
---|
202 | I (DATA=0)!(DATA="") Q 1
|
---|
203 | Q 0
|
---|
204 | CANBEAO(DFN) ;Check to determine if patient can claim Agent Orange expos.
|
---|
205 | ;INPUT : DFN - Pointer to PATIENT file (#2)
|
---|
206 | ;OUTPUT : 1 - Valid claim of exposure to Agent Orange
|
---|
207 | ; 0 - Invalid claim of exposure to Agent Orange
|
---|
208 | ;
|
---|
209 | N VAEL
|
---|
210 | I '$G(DFN) Q 0
|
---|
211 | I '$D(^DPT(DFN,0)) Q 0
|
---|
212 | ;Get data needed to perform check
|
---|
213 | D ELIG^VADPT
|
---|
214 | ;Must be a veteran
|
---|
215 | I 'VAEL(4) Q 0
|
---|
216 | ;Must have POS 7
|
---|
217 | I $P($G(^DIC(21,+VAEL(2),0)),"^",3)=7 Q 1
|
---|
218 | ;Can't claim AO
|
---|
219 | Q 0
|
---|
220 | AOLOC(DATA,DFN) ;Validate Agent Orange exposure location (error 7130)
|
---|
221 | ;INPUT : DATA - Value to validate
|
---|
222 | ; DFN - Pointer to PATIENT file (#2)
|
---|
223 | ;OUTPUT : 1 - Valid Agent Orange exposure location
|
---|
224 | ; 0 - Invalid/missing Agent Orange exposure location
|
---|
225 | ;NOTES : Patient's claiming exposure must have an exposure location
|
---|
226 | N VASV
|
---|
227 | I '$G(DFN) Q 0
|
---|
228 | I '$D(^DPT(DFN,0)) Q 0
|
---|
229 | I '$D(DATA) Q 0
|
---|
230 | ;Get data needed to perform check
|
---|
231 | D SVC^VADPT
|
---|
232 | ;No claim - shouldn't have a location
|
---|
233 | I 'VASV(2) Q $S(DATA="":1,1:0)
|
---|
234 | ;Claims exposure - must have a valid location
|
---|
235 | Q $S(DATA="":0,"VK"[DATA:1,1:0)
|
---|