| [613] | 1 | IBCNERP8 ;DAOU/BHS - IBCNE IIV STATISTICAL REPORT COMPILE ;11-JUN-2002 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**184,271,345**;21-MAR-94;Build 28 | 
|---|
|  | 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ; IIV - Insurance Identification and Verification Interface | 
|---|
|  | 6 | ; | 
|---|
|  | 7 | ;Input vars from IBCNERP7: | 
|---|
|  | 8 | ; IBCNERTN = "IBCNERP7" | 
|---|
|  | 9 | ; **IBCNESPC array ONLY passed by reference ** | 
|---|
|  | 10 | ; IBCNESPC("BEGDTM") = Start Dt/Tm for rpt range | 
|---|
|  | 11 | ; IBCNESPC("ENDDTM") = End Dt/Tm for rpt range | 
|---|
|  | 12 | ; IBCNESPC("SECTS")  = 1 - All sections OR ',' sep'd list of 1 or more | 
|---|
|  | 13 | ;  of the following (not all) | 
|---|
|  | 14 | ;  2 - Outgoing data, inq trans stats | 
|---|
|  | 15 | ;  3 - Incoming data, resps rec'd stats | 
|---|
|  | 16 | ;  4 - Current status, pending resps, queued inqs, deferred inqs, payer | 
|---|
|  | 17 | ;      stats, ins buf stats | 
|---|
|  | 18 | ; IBCNESPC("MM") = "" - do not generate MailMan message OR MAILGROUP to | 
|---|
|  | 19 | ;  send report to Mail Group as defined in the IB site parameters | 
|---|
|  | 20 | ;Output vars: | 
|---|
|  | 21 | ; Based on IBCNESPC("SECTS") parameter the following scratch globals | 
|---|
|  | 22 | ; may be built | 
|---|
|  | 23 | ; 1 OR contains 2 --> | 
|---|
|  | 24 | ; ^TMP($J,RTN,"OUT")=TotInq^InsBufExtSubtotal^PreRegExtSubtotal^... | 
|---|
|  | 25 | ;  NonVerifInsExtSubtotal^NoActInsExtSubtotal | 
|---|
|  | 26 | ; 1 OR contains 3 --> | 
|---|
|  | 27 | ; ^TMP($J,RTN,"IN")=TotResp^InsBufExtSubtotal^PreRegExtSubtotal^... | 
|---|
|  | 28 | ;  NonVerifInsExtSubtotal^NoActInsExtSubtotal | 
|---|
|  | 29 | ; 1 OR contains 4 --> | 
|---|
|  | 30 | ; ^TMP($J,RTN,"CUR")=TotPendingResponses^TotQueuedInquiries^... | 
|---|
|  | 31 | ;  TotDeferredInquiries(Hold)^TotInsCosw/oNationalID^... | 
|---|
|  | 32 | ;  ToteIIVPyrsDisabldLocally^TotInsBufVerified^TotalManVerified... | 
|---|
|  | 33 | ;  TotalIIVVerified^TotInsBufUnverified^! InsBufSubtotal^... | 
|---|
|  | 34 | ;  ? InsBufSubtotal^- InsBufSubtotal^Other InsBufSubtotal | 
|---|
|  | 35 | ; 1 OR contains 4 --> | 
|---|
|  | 36 | ; ^TMP($J,RTN,"PYR",PAYER,IEN)=""  (list of new payers) | 
|---|
|  | 37 | ; | 
|---|
|  | 38 | ; Must call at EN | 
|---|
|  | 39 | Q | 
|---|
|  | 40 | ; | 
|---|
|  | 41 | EN(IBCNERTN,IBCNESPC) ; Entry pt | 
|---|
|  | 42 | ; Init vars | 
|---|
|  | 43 | N IBBDT,IBEDT,IBSCT,IBTOT,PIECES,VALUE,CT | 
|---|
|  | 44 | ; | 
|---|
|  | 45 | I '$D(ZTQUEUED),$G(IOST)["C-" W !!,"Compiling report data ..." | 
|---|
|  | 46 | ; | 
|---|
|  | 47 | S IBTOT=0 | 
|---|
|  | 48 | ; | 
|---|
|  | 49 | ; Kill scratch global | 
|---|
|  | 50 | K ^TMP($J,IBCNERTN) | 
|---|
|  | 51 | ; | 
|---|
|  | 52 | ; Init looping vars | 
|---|
|  | 53 | S IBBDT=$G(IBCNESPC("BEGDTM")),IBEDT=$G(IBCNESPC("ENDDTM")) | 
|---|
|  | 54 | S IBSCT=$G(IBCNESPC("SECTS")) | 
|---|
|  | 55 | ; | 
|---|
|  | 56 | I IBSCT=1!$F(IBSCT,",2,") D OUT(IBCNERTN,IBBDT,IBEDT,.IBTOT) | 
|---|
|  | 57 | I $G(ZTSTOP) G EXIT | 
|---|
|  | 58 | I IBSCT=1!$F(IBSCT,",3,") D IN(IBCNERTN,IBBDT,IBEDT,.IBTOT) | 
|---|
|  | 59 | I $G(ZTSTOP) G EXIT | 
|---|
|  | 60 | I IBSCT=1!$F(IBSCT,",4,") D CUR(IBCNERTN,.IBTOT),PYR^IBCNERP0(IBCNERTN,IBBDT,IBEDT,.IBTOT) | 
|---|
|  | 61 | ; | 
|---|
|  | 62 | EXIT ; EN Exit pt | 
|---|
|  | 63 | Q | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | IN(RTN,BDT,EDT,TOT) ; Determine Incoming Data | 
|---|
|  | 66 | ; Input params: RTN-routine name for ^TMP($J), BDT-start dt/time, | 
|---|
|  | 67 | ;  EDT-end dt/time, **TOT-total records searched - used only for status | 
|---|
|  | 68 | ;  checks when the process is queued (passed by reference) | 
|---|
|  | 69 | ; Output vars: Set pcs of ^TMP($J,RTN,"IN") as follows: | 
|---|
|  | 70 | ;  1=total Resps rec'd for date/time range | 
|---|
|  | 71 | ;  2=Ins Buf extract subtotal | 
|---|
|  | 72 | ;  3=Pre-Reg extract subtotal | 
|---|
|  | 73 | ;  4=Non-ver extract subtotal | 
|---|
|  | 74 | ;  5=No Act Ins subtotal | 
|---|
|  | 75 | ; | 
|---|
|  | 76 | ; Init vars | 
|---|
|  | 77 | N IBDT,PYRIEN,PATIEN,IBPTR,IBTYP,RPTDATA,TRANSIEN | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | ; Loop thru the IIV Resp File (#365) x-ref on Date/Time Resp Rec'd | 
|---|
|  | 80 | S IBDT=$O(^IBCN(365,"AD",BDT),-1) | 
|---|
|  | 81 | F  S IBDT=$O(^IBCN(365,"AD",IBDT)) Q:IBDT=""!(IBDT>EDT)  D  Q:$G(ZTSTOP) | 
|---|
|  | 82 | . S PYRIEN=0 | 
|---|
|  | 83 | . F  S PYRIEN=$O(^IBCN(365,"AD",IBDT,PYRIEN)) Q:'PYRIEN  D  Q:$G(ZTSTOP) | 
|---|
|  | 84 | . . S PATIEN=0 | 
|---|
|  | 85 | . . F  S PATIEN=$O(^IBCN(365,"AD",IBDT,PYRIEN,PATIEN)) Q:'PATIEN  D  Q:$G(ZTSTOP) | 
|---|
|  | 86 | . . . S IBPTR=0 | 
|---|
|  | 87 | . . . F  S IBPTR=$O(^IBCN(365,"AD",IBDT,PYRIEN,PATIEN,IBPTR)) Q:'IBPTR  D  Q:$G(ZTSTOP) | 
|---|
|  | 88 | . . . . S TOT=TOT+1 | 
|---|
|  | 89 | . . . . I $D(ZTQUEUED),TOT#100=0,$$S^%ZTLOAD() S ZTSTOP=1 Q | 
|---|
|  | 90 | . . . . ; Update total | 
|---|
|  | 91 | . . . . S $P(RPTDATA,U,1)=$P($G(RPTDATA),U,1)+1 | 
|---|
|  | 92 | . . . . ; Update extract type total | 
|---|
|  | 93 | . . . . ; Get the data for the report - build RPTDATA | 
|---|
|  | 94 | . . . . S IBTYP=5,TRANSIEN=$P($G(^IBCN(365,IBPTR,0)),U,5) | 
|---|
|  | 95 | . . . . I TRANSIEN'="" S IBTYP=$P($G(^IBCN(365.1,TRANSIEN,0)),U,10) | 
|---|
|  | 96 | . . . . S $P(RPTDATA,U,IBTYP+1)=$P($G(RPTDATA),U,IBTYP+1)+1 | 
|---|
|  | 97 | ; | 
|---|
|  | 98 | I $G(ZTSTOP) G INX | 
|---|
|  | 99 | ; | 
|---|
|  | 100 | ; Save data to global | 
|---|
|  | 101 | S ^TMP($J,RTN,"IN")=$G(RPTDATA) | 
|---|
|  | 102 | ; | 
|---|
|  | 103 | INX ; IN exit pt | 
|---|
|  | 104 | Q | 
|---|
|  | 105 | ; | 
|---|
|  | 106 | OUT(RTN,BDT,EDT,TOT) ; Outgoing Data | 
|---|
|  | 107 | ;Input params:  RTN-routine name used as subscript in ^TMP($J), | 
|---|
|  | 108 | ; BDT-start date/time, EDT-end date/time, **TOT-total recs searched-used | 
|---|
|  | 109 | ; only for status checks when process is queued (passed by reference) | 
|---|
|  | 110 | ;Output vars: Set pcs of ^TMP($J,RTN,"OUT") as follows: | 
|---|
|  | 111 | ; 1=total Inqs transmitted for timeframe | 
|---|
|  | 112 | ; 2=Ins Buffer extract subtotal | 
|---|
|  | 113 | ; 3=Pre-Reg extract subtotal | 
|---|
|  | 114 | ; 4=Non-Ver extract subtotal | 
|---|
|  | 115 | ; 5=No Act Ins subtotal | 
|---|
|  | 116 | ; | 
|---|
|  | 117 | ; Init vars | 
|---|
|  | 118 | N IBDT,IBPTR,IBTYP,RPTDATA,TQIEN | 
|---|
|  | 119 | ; | 
|---|
|  | 120 | ; Loop thru the IIV Resp File (#365) by x-ref on Date/Time Resp Created | 
|---|
|  | 121 | ;  Only count responses for unique HL7 message IDs - filter out | 
|---|
|  | 122 | ;  unsolicited responses as they artificially inflate the Outgoing Count | 
|---|
|  | 123 | S IBDT=$O(^IBCN(365,"AE",BDT),-1) | 
|---|
|  | 124 | F  S IBDT=$O(^IBCN(365,"AE",IBDT)) Q:IBDT=""!(IBDT>EDT)  D  Q:$G(ZTSTOP) | 
|---|
|  | 125 | . S IBPTR=0 | 
|---|
|  | 126 | . F  S IBPTR=$O(^IBCN(365,"AE",IBDT,IBPTR)) Q:'IBPTR  D  Q:$G(ZTSTOP) | 
|---|
|  | 127 | . . S TOT=TOT+1 | 
|---|
|  | 128 | . . I $D(ZTQUEUED),TOT#100=0,$$S^%ZTLOAD() S ZTSTOP=1 Q | 
|---|
|  | 129 | . . ; Quit, if response was not O - original | 
|---|
|  | 130 | . . I $P($G(^IBCN(365,IBPTR,0)),U,10)'="O" Q | 
|---|
|  | 131 | . . ; Update total | 
|---|
|  | 132 | . . S $P(RPTDATA,U,1)=$P($G(RPTDATA),U,1)+1 | 
|---|
|  | 133 | . . ; Update extract type total (1,2,3,4) | 
|---|
|  | 134 | . . S IBTYP=5 | 
|---|
|  | 135 | . . S TQIEN=$P($G(^IBCN(365,IBPTR,0)),U,5) | 
|---|
|  | 136 | . . I TQIEN="" Q | 
|---|
|  | 137 | . . S IBTYP=$P($G(^IBCN(365.1,TQIEN,0)),U,10) | 
|---|
|  | 138 | . . S $P(RPTDATA,U,IBTYP+1)=$P($G(RPTDATA),U,IBTYP+1)+1 | 
|---|
|  | 139 | ; | 
|---|
|  | 140 | I $G(ZTSTOP) G OUTX | 
|---|
|  | 141 | ; | 
|---|
|  | 142 | ; Save data to global array | 
|---|
|  | 143 | S ^TMP($J,RTN,"OUT")=$G(RPTDATA) | 
|---|
|  | 144 | ; | 
|---|
|  | 145 | OUTX ; OUT exit pt | 
|---|
|  | 146 | Q | 
|---|
|  | 147 | ; | 
|---|
|  | 148 | CUR(RTN,TOT) ; Current Status - stats - timeframe independent | 
|---|
|  | 149 | ; Input params: RTN-routine name as subs in ^TMP($J), **TOT-total recs | 
|---|
|  | 150 | ;  searched - used only for status checks when the process is queued | 
|---|
|  | 151 | ;  passed by reference | 
|---|
|  | 152 | ; Output vars: Set pcs of ^TMP($J,RTN,"CUR") as follows: | 
|---|
|  | 153 | ;  1=total Pending Resps (Transmitted-2) | 
|---|
|  | 154 | ;  2=total Queued Inqs (Ready to Transmit-1/Retry-6) | 
|---|
|  | 155 | ;  3=total Deferred Inqs (Hold-4) | 
|---|
|  | 156 | ;  4=Ins Cos w/o National ID | 
|---|
|  | 157 | ;  5=Payers w/IIV disabled locally | 
|---|
|  | 158 | ;  6=total user action required (symbol'='*' or '#' or '!' or '?' or '-') | 
|---|
|  | 159 | ;  7=total Man. Ver'd Ins Buf entries (symbol='*') | 
|---|
|  | 160 | ;  8=total IIV Processed Ver. (symbol='+') | 
|---|
|  | 161 | ;  9=total awaiting processing (symbol='?' or BLANK) | 
|---|
|  | 162 | ;  10=total Ins Buf entries w/symbol='#' | 
|---|
|  | 163 | ;  11=total Ins Buf entries w/symbol='!' | 
|---|
|  | 164 | ;  12=total Ins Buf entries w/symbol='?' | 
|---|
|  | 165 | ;  13=total Ins Buf entries w/symbol='-' | 
|---|
|  | 166 | ;  14=total Ins Buffer entries w/symbol not in ('*','#','!','?','-') | 
|---|
|  | 167 | ; | 
|---|
|  | 168 | ; Init vars | 
|---|
|  | 169 | N RIEN,TQIEN,ICIEN,IBIEN,RPTDATA,IEN,IBSYMBOL,PIECE,IBSTS,APPIEN | 
|---|
|  | 170 | N PIEN,TMP,APPDATA,XDT | 
|---|
|  | 171 | ; | 
|---|
|  | 172 | S RPTDATA="" | 
|---|
|  | 173 | ; | 
|---|
|  | 174 | ; Responses pending (Transmitted - 2) | 
|---|
|  | 175 | S RIEN=0 | 
|---|
|  | 176 | F  S RIEN=$O(^IBCN(365,"AC",2,RIEN)) Q:'RIEN  D  Q:$G(ZTSTOP) | 
|---|
|  | 177 | .  S TOT=TOT+1 | 
|---|
|  | 178 | .  I $D(ZTQUEUED),TOT#100=0,$$S^%ZTLOAD() S ZTSTOP=1 Q | 
|---|
|  | 179 | .  S $P(RPTDATA,U,1)=$P(RPTDATA,U,1)+1 | 
|---|
|  | 180 | ; | 
|---|
|  | 181 | I $G(ZTSTOP) G CURX | 
|---|
|  | 182 | ; | 
|---|
|  | 183 | ; Queued inquiries (Ready to Transmit - 1/Retry - 6) and | 
|---|
|  | 184 | ; Deferred inquiries (Hold - 4) | 
|---|
|  | 185 | F IBSTS=1,6,4 D  Q:$G(ZTSTOP) | 
|---|
|  | 186 | . S TQIEN=0 | 
|---|
|  | 187 | . F  S TQIEN=$O(^IBCN(365.1,"AC",IBSTS,TQIEN)) Q:'TQIEN  D  Q:$G(ZTSTOP) | 
|---|
|  | 188 | . .  S TOT=TOT+1 | 
|---|
|  | 189 | . .  I $D(ZTQUEUED),TOT#100=0,$$S^%ZTLOAD() S ZTSTOP=1 QUIT | 
|---|
|  | 190 | . .  I IBSTS'=4 S $P(RPTDATA,U,2)=$P(RPTDATA,U,2)+1 Q | 
|---|
|  | 191 | . .  S $P(RPTDATA,U,3)=$P(RPTDATA,U,3)+1 | 
|---|
|  | 192 | ; | 
|---|
|  | 193 | I $G(ZTSTOP) G CURX | 
|---|
|  | 194 | ; | 
|---|
|  | 195 | ; Payer stats | 
|---|
|  | 196 | ; Ins cos w/o National ID | 
|---|
|  | 197 | S ICIEN=0 | 
|---|
|  | 198 | F  S ICIEN=$O(^DIC(36,ICIEN)) Q:'ICIEN  D  Q:$G(ZTSTOP) | 
|---|
|  | 199 | .  S TOT=TOT+1 | 
|---|
|  | 200 | .  I $D(ZTQUEUED),TOT#100=0,$$S^%ZTLOAD() S ZTSTOP=1 QUIT | 
|---|
|  | 201 | .  ; Exclude inactive | 
|---|
|  | 202 | .  S TMP=$$ACTIVE^IBCNEUT4(ICIEN) I 'TMP Q | 
|---|
|  | 203 | .  ; Exclude Medicare/Medicaid, etc. | 
|---|
|  | 204 | .  I $$EXCLUDE^IBCNEUT4($P(TMP,U,2)) Q | 
|---|
|  | 205 | .  ; Determine assoc Payer | 
|---|
|  | 206 | .  S PIEN=$P($G(^DIC(36,ICIEN,3)),U,10) | 
|---|
|  | 207 | .  ; Missing payer link | 
|---|
|  | 208 | .  I 'PIEN S $P(RPTDATA,U,4)=$P(RPTDATA,U,4)+1 Q | 
|---|
|  | 209 | .  ; Does a VA NATIONAL ID exist? | 
|---|
|  | 210 | .  I $P($G(^IBE(365.12,PIEN,0)),U,2)'="" Q | 
|---|
|  | 211 | .  S $P(RPTDATA,U,4)=$P(RPTDATA,U,4)+1 | 
|---|
|  | 212 | ; | 
|---|
|  | 213 | I $G(ZTSTOP) G CURX | 
|---|
|  | 214 | ; | 
|---|
|  | 215 | ; IIV Payers disabled locally | 
|---|
|  | 216 | S PIEN=0 | 
|---|
|  | 217 | F  S PIEN=$O(^IBE(365.12,PIEN)) Q:'PIEN  D  Q:$G(ZTSTOP) | 
|---|
|  | 218 | .  S TOT=TOT+1 | 
|---|
|  | 219 | .  I $D(ZTQUEUED),TOT#100=0,$$S^%ZTLOAD() S ZTSTOP=1 Q | 
|---|
|  | 220 | .  ; Must have National ID | 
|---|
|  | 221 | .  I $P($G(^IBE(365.12,PIEN,0)),U,2)'="" Q | 
|---|
|  | 222 | .  ; Get Payer app multiple IEN | 
|---|
|  | 223 | .  S APPIEN=$$PYRAPP^IBCNEUT5("IIV",PIEN) | 
|---|
|  | 224 | .  ; Must have eIIV application | 
|---|
|  | 225 | .  I 'APPIEN Q | 
|---|
|  | 226 | .  S APPDATA=$G(^IBE(365.12,PIEN,1,APPIEN,0)) | 
|---|
|  | 227 | .  ; Must be Nationally Active | 
|---|
|  | 228 | .  I '$P(APPDATA,U,2) Q | 
|---|
|  | 229 | .  ; Must not be Locally Active | 
|---|
|  | 230 | .  I $P(APPDATA,U,3) Q | 
|---|
|  | 231 | .  S $P(RPTDATA,U,5)=$P(RPTDATA,U,5)+1 | 
|---|
|  | 232 | ; | 
|---|
|  | 233 | I $G(ZTSTOP) G CURX | 
|---|
|  | 234 | ; | 
|---|
|  | 235 | ; Buffer stats | 
|---|
|  | 236 | ; Loop thru the Ins Buffer File (#355.33) | 
|---|
|  | 237 | S IBIEN=0,XDT=0 | 
|---|
|  | 238 | F  S XDT=$O(^IBA(355.33,"AEST","E",XDT)) Q:XDT=""  D  Q:$G(ZTSTOP) | 
|---|
|  | 239 | . F  S IBIEN=$O(^IBA(355.33,"AEST","E",XDT,IBIEN)) Q:IBIEN=""  D  Q:$G(ZTSTOP) | 
|---|
|  | 240 | . . S TOT=TOT+1 | 
|---|
|  | 241 | . . I $D(ZTQUEUED),TOT#100=0,$$S^%ZTLOAD() S ZTSTOP=1 Q | 
|---|
|  | 242 | . . S IBSYMBOL=$$SYMBOL^IBCNBLL(IBIEN) | 
|---|
|  | 243 | . . ; Determine piece to update based on symbol | 
|---|
|  | 244 | . . ; ('*') = Man. Verified,  ('#','!','-','?',blank/null) = IIV Processing | 
|---|
|  | 245 | . . ; ('+') = IIV Processed | 
|---|
|  | 246 | . . S PIECE=$S(IBSYMBOL="*":7,IBSYMBOL="+":8,IBSYMBOL="#":10,IBSYMBOL="!":11,IBSYMBOL="-":13,IBSYMBOL="?":12,1:14) | 
|---|
|  | 247 | . . I PIECE=12!(PIECE=14) S $P(RPTDATA,U,9)=$P($G(RPTDATA),U,9)+1 | 
|---|
|  | 248 | . . E  S $P(RPTDATA,U,6)=$P($G(RPTDATA),U,6)+1 | 
|---|
|  | 249 | . . S $P(RPTDATA,U,PIECE)=$P($G(RPTDATA),U,PIECE)+1 | 
|---|
|  | 250 | ; | 
|---|
|  | 251 | I $G(ZTSTOP) G CURX | 
|---|
|  | 252 | ; | 
|---|
|  | 253 | ; Save data to global | 
|---|
|  | 254 | S ^TMP($J,RTN,"CUR")=$G(RPTDATA) | 
|---|
|  | 255 | ; | 
|---|
|  | 256 | CURX ; CUR exit point | 
|---|
|  | 257 | Q | 
|---|
|  | 258 | ; | 
|---|
|  | 259 | ; | 
|---|