| 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 | ;
|
---|