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