[613] | 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)
|
---|