| 1 | ECV4RPC ;ALB/ACS;Event Capture Spreadsheet Data Validation ;Oct 13, 2000
 | 
|---|
| 2 |  ;;2.0; EVENT CAPTURE ;**25,33,49**;8 May 96
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;-----------------------------------------------------------------------
 | 
|---|
| 5 |  ;  Validates the following Event Capture Spreadsheet Upload fields:
 | 
|---|
| 6 |  ;    1. VOLUME
 | 
|---|
| 7 |  ;    2. ENCOUNTER DATE/TIME
 | 
|---|
| 8 |  ;    3. PROVIDER NAME
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ;  Determines the following:
 | 
|---|
| 11 |  ;    1. PATIENT STATUS
 | 
|---|
| 12 |  ;-----------------------------------------------------------------------
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  ;--Volume must be 1 thru 99--
 | 
|---|
| 15 |  N ECVOLVN,ECPDT
 | 
|---|
| 16 |  S ECVOLVN=ECVOLV
 | 
|---|
| 17 |  I (+ECVOLVN'=ECVOLVN)!(ECVOLVN<1)!(ECVOLVN>99)!(ECVOLVN?.E1"."1N.N) D
 | 
|---|
| 18 |  . S ECERRMSG=$P($T(VOL1^ECV4RPC),";;",2)
 | 
|---|
| 19 |  . S ECCOLERR=ECVOLPC
 | 
|---|
| 20 |  . D ERROR
 | 
|---|
| 21 |  . Q
 | 
|---|
| 22 |  I $L(ECVOLVN)'=$L(ECVOLV) D
 | 
|---|
| 23 |  . ; Volume must be numeric
 | 
|---|
| 24 |  . S ECERRMSG=$P($T(VOL2^ECV4RPC),";;",2)
 | 
|---|
| 25 |  . S ECCOLERR=ECVOLPC
 | 
|---|
| 26 |  . D ERROR
 | 
|---|
| 27 |  . Q
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  ;--Encounter Date/Time--
 | 
|---|
| 30 |  S ECERRFLG=0
 | 
|---|
| 31 |  N ECRETVAL
 | 
|---|
| 32 |  S %DT(0)="-NOW",ECENCV=$TR(ECENCV," ","")
 | 
|---|
| 33 |  D CHK^DIE(721,2,"E",ECENCV,.ECRETVAL)
 | 
|---|
| 34 |  I $G(ECRETVAL)="^" D
 | 
|---|
| 35 |  . ; Invalid encounter date/time
 | 
|---|
| 36 |  . S ECERRMSG=$P($T(ENC1^ECV4RPC),";;",2)
 | 
|---|
| 37 |  . S ECCOLERR=ECENCPC
 | 
|---|
| 38 |  . D ERROR
 | 
|---|
| 39 |  . Q
 | 
|---|
| 40 |  I $G(ECRETVAL)'="^" D
 | 
|---|
| 41 |  . S %DT="XST",X=ECENCV
 | 
|---|
| 42 |  . D ^%DT
 | 
|---|
| 43 |  . S ECENCV=+Y
 | 
|---|
| 44 |  . Q
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 |  ;--Provider Name or IEN must be on the New Person file--
 | 
|---|
| 47 |  ;--and provider must have active person class  --
 | 
|---|
| 48 |  N ECPROV1
 | 
|---|
| 49 |  S ECERRFLG=0,ECPRVIEN=0
 | 
|---|
| 50 |  ; Remove punctuation if necessary
 | 
|---|
| 51 |  I ECPROVV?.E1P S ECPROVV=$E(ECPROVV,1,$L(ECPROVV)-1)
 | 
|---|
| 52 |  ; If provider ien passed in, find on file
 | 
|---|
| 53 |  S ECPROV1=ECPROVV
 | 
|---|
| 54 |  I +ECPROVV>0 D
 | 
|---|
| 55 |  . I '$D(^VA(200,ECPROVV)) D
 | 
|---|
| 56 |  . . ; Provider ien not found on New Person file
 | 
|---|
| 57 |  . . S ECERRMSG=$P($T(PROV4^ECV4RPC),";;",2)
 | 
|---|
| 58 |  . . S ECCOLERR=ECPRVLPC
 | 
|---|
| 59 |  . . D ERROR
 | 
|---|
| 60 |  . E  S ECPRVIEN=ECPROVV
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 |  ; If provider name passed in, find on B x-ref and
 | 
|---|
| 63 |  ; make sure there isn't more than 1 with same name
 | 
|---|
| 64 |  N ECPRVNXT,ECPRVMOR,ECPRVMNT
 | 
|---|
| 65 |  S (ECPRVMOR,ECPRVMNT)=0,ECCOLERR=ECPRVLPC
 | 
|---|
| 66 |  I +ECPROVV'>0,$D(^VA(200,"B",ECPROVV)) D
 | 
|---|
| 67 |  . S ECPRVIE2=$O(^VA(200,"B",ECPROVV,""))
 | 
|---|
| 68 |  . S ECPRVNXT=$O(^VA(200,"B",ECPROVV,ECPRVIE2))
 | 
|---|
| 69 |  . I ECPRVNXT'="" D
 | 
|---|
| 70 |  . . S ECERRMSG=$P($T(PROV5^ECV4RPC),";;",2)
 | 
|---|
| 71 |  . . S ECCOLERR=ECPRVLPC
 | 
|---|
| 72 |  . . D ERROR
 | 
|---|
| 73 |  . . S ECPRVMOR=1
 | 
|---|
| 74 |  . E  S ECPRVIEN=ECPRVIE2
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  I +ECPROVV'>0,'$D(^VA(200,"B",ECPROVV)) D
 | 
|---|
| 77 |  . ; Exact match not found on New Person file
 | 
|---|
| 78 |  . ; Generate standard error message
 | 
|---|
| 79 |  . S ECERRMSG=$P($T(PROV1^ECV4RPC),";;",2)
 | 
|---|
| 80 |  . S ECCOLERR=ECPRVLPC
 | 
|---|
| 81 |  . D ERROR
 | 
|---|
| 82 |  . S ECPRVMNT=1
 | 
|---|
| 83 |  ; If exact match not found, get provider info
 | 
|---|
| 84 |  I ECPRVMNT D
 | 
|---|
| 85 |  . ; look at next provider on file for 'close' match
 | 
|---|
| 86 |  . N ECINFO,ECLENPRV,NOMATCH,ECSPEC,ECSUBSP
 | 
|---|
| 87 |  . N ECCOUNT,ECFIRST,ECLAST,ECPRVNXT,ECPRVIE2,ECPRVIE3
 | 
|---|
| 88 |  . S ECLENPRV=$L(ECPROVV),(ECPRVIE2,ECPRVIE3)="",(ECCOUNT,NOMATCH)=0
 | 
|---|
| 89 |  . S ECPRVNXT=ECPROVV
 | 
|---|
| 90 |  . F  S ECPRVNXT=$O(^VA(200,"B",ECPRVNXT)) Q:NOMATCH=1  D
 | 
|---|
| 91 |  . . F  S ECPRVIE3=$O(^VA(200,"B",ECPRVNXT,ECPRVIE3)) Q:ECPRVIE3=""  D
 | 
|---|
| 92 |  . . . I ECPROVV'=$E(ECPRVNXT,1,ECLENPRV) S NOMATCH=1
 | 
|---|
| 93 |  . . . E  D
 | 
|---|
| 94 |  . . . . ;get provider info and add to end of error string
 | 
|---|
| 95 |  . . . . S ECINFO=$$GET^XUA4A72(ECPRVIE3,ECENCV)
 | 
|---|
| 96 |  . . . . I +ECINFO'>0 D
 | 
|---|
| 97 |  . . . . . S ECERRMSG=ECPRVNXT_"-"_ECPRVIE3_"-Inactive Provider for this encounter date"
 | 
|---|
| 98 |  . . . . . D ERROR
 | 
|---|
| 99 |  . . . . . ;S ECCOUNT=ECCOUNT+1
 | 
|---|
| 100 |  . . . . I +ECINFO>0 D
 | 
|---|
| 101 |  . . . . . S ECCOUNT=ECCOUNT+1
 | 
|---|
| 102 |  . . . . . S ECSPEC=$P(ECINFO,U,3)
 | 
|---|
| 103 |  . . . . . I ECSPEC=" " S ECSPEC=""
 | 
|---|
| 104 |  . . . . . S ECSUBSP=$P(ECINFO,U,4)
 | 
|---|
| 105 |  . . . . . I ECSUBSP=" " S ECSUBSP=""
 | 
|---|
| 106 |  . . . . . S ECPCLASS=$P(^VA(200,ECPRVIE3,"USC1",0),U,3)
 | 
|---|
| 107 |  . . . . . I ECPCLASS="" S ECPCLASS="PERSON CLASS NOT FOUND"
 | 
|---|
| 108 |  . . . . . S ECERRMSG=ECPRVNXT_"-"_ECPRVIE3_"-"_ECSPEC_"-"_ECSUBSP_"-"_ECPCLASS
 | 
|---|
| 109 |  . . . . . D ERROR
 | 
|---|
| 110 |  ; If more than one provider with that name, get info
 | 
|---|
| 111 |  I ECPRVMOR D
 | 
|---|
| 112 |  . N ECINFO,ECSPEC,ECSUBSP,ECPCLASS,ECCOUNT,ECFIRST,ECLAST,ECPRVIE2
 | 
|---|
| 113 |  . S ECCOUNT=0,ECPRVIE2=0
 | 
|---|
| 114 |  . ;look at each provider for exact match
 | 
|---|
| 115 |  . F  S ECPRVIE2=$O(^VA(200,"B",ECPROVV,ECPRVIE2)) Q:ECPRVIE2=""  D
 | 
|---|
| 116 |  . . S ECINFO=$$GET^XUA4A72(ECPRVIE2,ECENCV)
 | 
|---|
| 117 |  . . I +ECINFO'>0 D
 | 
|---|
| 118 |  . . . S ECERRMSG=ECPROVV_"-"_ECPRVIE2_"-Inactive Provider for this encounter date"
 | 
|---|
| 119 |  . . . D ERROR
 | 
|---|
| 120 |  . . I +ECINFO>0 D
 | 
|---|
| 121 |  . . . S ECCOUNT=ECCOUNT+1
 | 
|---|
| 122 |  . . . S ECSPEC=$P(ECINFO,U,3)
 | 
|---|
| 123 |  . . . I ECSPEC=" " S ECSPEC=""
 | 
|---|
| 124 |  . . . S ECSUBSP=$P(ECINFO,U,4)
 | 
|---|
| 125 |  . . . I ECSUBSP=" " S ECSUBSP=""
 | 
|---|
| 126 |  . . . S ECPCLASS=$P(^VA(200,ECPRVIE2,"USC1",0),U,3)
 | 
|---|
| 127 |  . . . I ECPCLASS="" S ECPCLASS="PERSON CLASS NOT FOUND"
 | 
|---|
| 128 |  . . . S ECERRMSG=ECPROVV_"-"_ECPRVIE2_"-"_ECSPEC_"-"_ECSUBSP_"-"_ECPCLASS
 | 
|---|
| 129 |  . . . D ERROR
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 |  ; Check person class of valid provider
 | 
|---|
| 132 |  S ECPROVV=ECPROV1
 | 
|---|
| 133 |  S %DT="XST",X=ECENCV D ^%DT S ECPDT=$S(+Y>0:+Y,1:DT)
 | 
|---|
| 134 |  I 'ECERRFLG D
 | 
|---|
| 135 |  . I ECPRVIEN=0 S ECPRVIEN=$O(^VA(200,"B",ECPROVV,0))
 | 
|---|
| 136 |  . I '$D(^VA(200,ECPRVIEN,"USC1",0)) D 
 | 
|---|
| 137 |  . . ; Person class xref doesn't exist
 | 
|---|
| 138 |  . . S ECERRMSG=$P($T(PROV2^ECV4RPC),";;",2)
 | 
|---|
| 139 |  . . S ECCOLERR=ECPRVLPC
 | 
|---|
| 140 |  . . D ERROR
 | 
|---|
| 141 |  . . Q
 | 
|---|
| 142 |  . Q
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 |  I 'ECERRFLG D
 | 
|---|
| 145 |  . S ECPCLASS=$P(^VA(200,ECPRVIEN,"USC1",0),U,3)
 | 
|---|
| 146 |  . I ECPCLASS="" D
 | 
|---|
| 147 |  . . ; Person class field empty
 | 
|---|
| 148 |  . . S ECERRMSG=$P($T(PROV2^ECV4RPC),";;",2)
 | 
|---|
| 149 |  . . S ECCOLERR=ECPRVLPC
 | 
|---|
| 150 |  . . D ERROR
 | 
|---|
| 151 |  . . Q
 | 
|---|
| 152 |  . Q
 | 
|---|
| 153 |  ;
 | 
|---|
| 154 |  I 'ECERRFLG,'$D(^VA(200,ECPRVIEN,"USC1",ECPCLASS,0)) D
 | 
|---|
| 155 |  . ; Person class information missing
 | 
|---|
| 156 |  . S ECERRMSG=$P($T(PROV2^ECV4RPC),";;",2)
 | 
|---|
| 157 |  . S ECCOLERR=ECPRVLPC
 | 
|---|
| 158 |  . D ERROR
 | 
|---|
| 159 |  . Q
 | 
|---|
| 160 |  ;
 | 
|---|
| 161 |  ; Check for person class expiration date
 | 
|---|
| 162 |  I 'ECERRFLG,$$GET^XUA4A72(ECPRVIEN,ECPDT)<1 D
 | 
|---|
| 163 |  . ; Person class contains an expiration date
 | 
|---|
| 164 |  . S ECERRMSG=$P($T(PROV3^ECV4RPC),";;",2)
 | 
|---|
| 165 |  . S ECCOLERR=ECPRVLPC
 | 
|---|
| 166 |  . D ERROR
 | 
|---|
| 167 |  . Q
 | 
|---|
| 168 |  ;
 | 
|---|
| 169 |  I 'ECERRFLG D
 | 
|---|
| 170 |  . S ECPRVTYP=$P(^VA(200,ECPRVIEN,"USC1",ECPCLASS,0),U,1)
 | 
|---|
| 171 |  . I $P(^USC(8932.1,ECPRVTYP,0),U,4)'="a" D
 | 
|---|
| 172 |  . . ; Person class is not active
 | 
|---|
| 173 |  . . S ECERRMSG=$P($T(PROV3^ECV4RPC),";;",2)
 | 
|---|
| 174 |  . . S ECCOLERR=ECPRVLPC
 | 
|---|
| 175 |  . . D ERROR
 | 
|---|
| 176 |  . . Q
 | 
|---|
| 177 |  . Q
 | 
|---|
| 178 |  ;
 | 
|---|
| 179 |  ;--Determine Patient Status--
 | 
|---|
| 180 |  S ECPSTAT=""
 | 
|---|
| 181 |  I ECSSNIEN D
 | 
|---|
| 182 |  . S ECERRFLG=0
 | 
|---|
| 183 |  . S ECPSTAT=$$INOUTPT^ECUTL0(ECSSNIEN,+ECENCV)
 | 
|---|
| 184 |  . I ECPSTAT="" D
 | 
|---|
| 185 |  . . ; Unable to determine patient status
 | 
|---|
| 186 |  . . S ECERRMSG=$P($T(STAT1^ECV4RPC),";;",2)
 | 
|---|
| 187 |  . . S ECCOLERR=ECENCPC
 | 
|---|
| 188 |  . . D ERROR
 | 
|---|
| 189 |  . . Q
 | 
|---|
| 190 |  . I ECPSTAT="I",'ECPSTATV,'ECERRFLG D
 | 
|---|
| 191 |  . . ; Patient status is Inpatient and override flag is false
 | 
|---|
| 192 |  . . S ECERRMSG=$P($T(STAT2^ECV4RPC),";;",2)
 | 
|---|
| 193 |  . . S ECCOLERR=ECENCPC
 | 
|---|
| 194 |  . . D ERROR
 | 
|---|
| 195 |  . . Q
 | 
|---|
| 196 |  ;
 | 
|---|
| 197 |  ;--Check to see if the DSS Unit is 'send to PCE'--
 | 
|---|
| 198 |  S ECDXIEN="",ECCLNIEN=""
 | 
|---|
| 199 |  I ECPSTAT'="",ECDSSIEN'="" D
 | 
|---|
| 200 |  . N ECDSSDAT,ECDSSPCE
 | 
|---|
| 201 |  . S ECDSSDAT=$G(^ECD(ECDSSIEN,0))
 | 
|---|
| 202 |  . S ECDSSPCE=$P(ECDSSDAT,U,14)
 | 
|---|
| 203 |  . ; If Outpatient and send=O, or send=A
 | 
|---|
| 204 |  . I ((ECPSTAT="O")&(ECDSSPCE["O"))!(ECDSSPCE["A") D
 | 
|---|
| 205 |  . . ;Validate Diagnosis code and Associated Clinic
 | 
|---|
| 206 |  . . D VALDIAG^ECV5RPC
 | 
|---|
| 207 |  . . D VALCLIN^ECV5RPC
 | 
|---|
| 208 |  . Q
 | 
|---|
| 209 |  ;
 | 
|---|
| 210 |  ;--Check to see if DUZ is defined
 | 
|---|
| 211 |  S ECDUZ=$S($D(DUZ):DUZ,1:"")
 | 
|---|
| 212 |  I ECDUZ="" D
 | 
|---|
| 213 |  . ; Invalid DUZ
 | 
|---|
| 214 |  . S ECERRMSG=$P($T(DUZ^ECV4RPC),";;",2),ECCOLERR=0
 | 
|---|
| 215 |  . D ERROR
 | 
|---|
| 216 |  Q
 | 
|---|
| 217 |  ;;
 | 
|---|
| 218 | ERROR ;--Set up array entry to contain the following:
 | 
|---|
| 219 |  ;1. record number
 | 
|---|
| 220 |  ;2. column number on spreadsheet containing the record number
 | 
|---|
| 221 |  ;3. column number on spreadsheet containing the data in error
 | 
|---|
| 222 |  ;4. error message
 | 
|---|
| 223 |  ;
 | 
|---|
| 224 |  S ECINDEX=ECINDEX+1
 | 
|---|
| 225 |  S RESULTS(ECINDEX)=ECRECV_"^"_ECRECPC_"^"_ECCOLERR_"^"_ECERRMSG_"^"
 | 
|---|
| 226 |  S ECERRFLG=1
 | 
|---|
| 227 |  Q
 | 
|---|
| 228 |  ;
 | 
|---|
| 229 |  ;Error messages:
 | 
|---|
| 230 |  ;
 | 
|---|
| 231 | VOL1 ;;Volume must be a whole number from 1 to 99
 | 
|---|
| 232 | VOL2 ;;Volume must contain numeric characters only
 | 
|---|
| 233 | PROV1 ;;Provider has no B x-ref on New Person file(#200)
 | 
|---|
| 234 | PROV2 ;;Unable to determine person class
 | 
|---|
| 235 | PROV3 ;;Provider does not have an active person class
 | 
|---|
| 236 | PROV4 ;;Provider IEN not found on New Person file(#200)
 | 
|---|
| 237 | PROV5 ;;More than one provider  with this name - use IEN
 | 
|---|
| 238 | ENC1 ;;Invalid encounter date/time.  Date cannot be in the future.
 | 
|---|
| 239 | STAT1 ;;Unable to determine patient status
 | 
|---|
| 240 | STAT2 ;;The patient status is Inpatient
 | 
|---|
| 241 | DUZ ;;User DUZ not defined
 | 
|---|