| [613] | 1 | IBCNERP5 ;DAOU/BHS - IBCNE IIV PAYER REPORT COMPILE ;03-JUN-2002 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**184,271,300**;21-MAR-94 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ; IIV - Insurance Identification and Verification Interface | 
|---|
|  | 6 | ; | 
|---|
|  | 7 | ; Input variables from IBCNERP4: | 
|---|
|  | 8 | ;   IBCNERTN = "IBCNERP4" | 
|---|
|  | 9 | ;   IBCNESPC("BEGDT") = Start Date for date range | 
|---|
|  | 10 | ;   IBCNESPC("ENDDT") = End Date for date range | 
|---|
|  | 11 | ;   IBCNESPC("PYR") = Payer IEN for report, if = "", then include all | 
|---|
|  | 12 | ;   IBCNESPC("SORT") = 1 - Payer OR 2 - Total Inquiries | 
|---|
|  | 13 | ;   IBCNESPC("DTL") = 1 - YES OR 0 - NO - include Rejection Detail? | 
|---|
|  | 14 | ; Output variables passed to IBCNERP6: | 
|---|
|  | 15 | ;   ^TMP($J,IBCNERTN,SORT1,SORT2,SORT3)=InqCreatedCount^InqCancelledCt^ | 
|---|
|  | 16 | ;                                       InqQueuedCt^1stTransCount^ | 
|---|
|  | 17 | ;                                       RetryTransCt^Non-ErrorRespCt^ | 
|---|
|  | 18 | ;                                       ErrorRespCount^TotRespTime-days^ | 
|---|
|  | 19 | ;                                       CommFailRespCount^PendRespCount^ | 
|---|
|  | 20 | ;                                       eIIVDeactivatedDt | 
|---|
|  | 21 | ;        IBCNERTN = "IBCNERP4" | 
|---|
|  | 22 | ;        SORT1 = PayerName (SORT=1) or -InquiryCount(SORT=2) | 
|---|
|  | 23 | ;        SORT2 = PayerIEN (SORT=1) or PayerName (SORT=2) | 
|---|
|  | 24 | ;        SORT3 = "*" (SORT=1) or PayerIEN (SORT=2) | 
|---|
|  | 25 | ;   ^TMP($J,IBCNERTN,SORT1,SORT2,SORT3,ERRCD)=RespCount | 
|---|
|  | 26 | ;        (see above) | 
|---|
|  | 27 | ;        ERRCD = Error Condition code (ptr to 365.018) or Error Text | 
|---|
|  | 28 | ;                from the Eligibility Communicator (4.01) | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | ; Must call at EN tag | 
|---|
|  | 31 | Q | 
|---|
|  | 32 | ; | 
|---|
|  | 33 | EN(IBCNERTN,IBCNESPC) ; Entry point | 
|---|
|  | 34 | ; | 
|---|
|  | 35 | ; Initialize variables | 
|---|
|  | 36 | NEW IBCNEDT,IBCNEDT1,IBCNEDT2,IBCNEPY,IBCNEPYR,IBCNEPTR | 
|---|
|  | 37 | NEW IBCNETOT,IBCNESRT,IBCNEDTL,RPTDATA,PYRIEN,INQS,IEN | 
|---|
|  | 38 | NEW IBPNM,IBPIEN,ERR,PC,PYR | 
|---|
|  | 39 | ; | 
|---|
|  | 40 | I '$D(ZTQUEUED),$G(IOST)["C-" W !!,"Compiling report data ..." | 
|---|
|  | 41 | ; | 
|---|
|  | 42 | ; Total responses selected | 
|---|
|  | 43 | S IBCNETOT=0 | 
|---|
|  | 44 | ; | 
|---|
|  | 45 | ; Kill scratch globals | 
|---|
|  | 46 | KILL ^TMP($J,IBCNERTN),^TMP($J,IBCNERTN_"X") | 
|---|
|  | 47 | ; | 
|---|
|  | 48 | ; Initialize looping variables | 
|---|
|  | 49 | S IBCNEDT2=$G(IBCNESPC("ENDDT")) | 
|---|
|  | 50 | S IBCNEDT1=$G(IBCNESPC("BEGDT")) | 
|---|
|  | 51 | S IBCNEPY=$G(IBCNESPC("PYR")) | 
|---|
|  | 52 | S IBCNESRT=$G(IBCNESPC("SORT")) | 
|---|
|  | 53 | S IBCNEDTL=$G(IBCNESPC("DTL")) | 
|---|
|  | 54 | ; | 
|---|
|  | 55 | ; Loop through the IIV Transmission Queue File (#365.1) | 
|---|
|  | 56 | ;  by Date/Time Created Cross-Reference | 
|---|
|  | 57 | S IBCNEDT=$O(^IBCN(365.1,"AE",IBCNEDT1),-1) | 
|---|
|  | 58 | F  S IBCNEDT=$O(^IBCN(365.1,"AE",IBCNEDT)) Q:IBCNEDT=""!($P(IBCNEDT,".",1)>IBCNEDT2)  D  Q:$G(ZTSTOP) | 
|---|
|  | 59 | . S IBCNEPTR=0 | 
|---|
|  | 60 | . F  S IBCNEPTR=$O(^IBCN(365.1,"AE",IBCNEDT,IBCNEPTR)) Q:'IBCNEPTR  D  Q:$G(ZTSTOP) | 
|---|
|  | 61 | . . ; Update selected count | 
|---|
|  | 62 | . . S IBCNETOT=IBCNETOT+1 | 
|---|
|  | 63 | . . I $D(ZTQUEUED),IBCNETOT#100=0,$$S^%ZTLOAD() S ZTSTOP=1 QUIT | 
|---|
|  | 64 | . . ; Determine Payer name from Payer File (#365.12) | 
|---|
|  | 65 | . . S PYRIEN=$P($G(^IBCN(365.1,IBCNEPTR,0)),U,3) | 
|---|
|  | 66 | . . I 'PYRIEN Q | 
|---|
|  | 67 | . . ; Check payer filter | 
|---|
|  | 68 | . . I IBCNEPY'="",PYRIEN'=IBCNEPY Q | 
|---|
|  | 69 | . . S IBCNEPYR=$P($G(^IBE(365.12,PYRIEN,0)),U) | 
|---|
|  | 70 | . . I IBCNEPYR="" Q | 
|---|
|  | 71 | . . ; Now get the data for the report - build RPTDATA | 
|---|
|  | 72 | . . KILL RPTDATA | 
|---|
|  | 73 | . . D GETDATA(IBCNEPTR,.RPTDATA,IBCNEDTL,IBCNEPYR,PYRIEN,IBCNEPY) | 
|---|
|  | 74 | . . ; Loop through results by Payer Name, Payer IEN | 
|---|
|  | 75 | . . S IBPNM="" | 
|---|
|  | 76 | . . F  S IBPNM=$O(RPTDATA(IBPNM)) Q:IBPNM=""  D | 
|---|
|  | 77 | . . . S IBPIEN=0 | 
|---|
|  | 78 | . . . F  S IBPIEN=$O(RPTDATA(IBPNM,IBPIEN)) Q:'IBPIEN  D | 
|---|
|  | 79 | . . . . ; Store totals in global | 
|---|
|  | 80 | . . . . F PC=1:1:10 S $P(^TMP($J,IBCNERTN,IBPNM,IBPIEN,"*"),U,PC)=$P($G(^TMP($J,IBCNERTN,IBPNM,IBPIEN,"*")),U,PC)+$P(RPTDATA(IBPNM,IBPIEN),U,PC) | 
|---|
|  | 81 | . . . . ; Store deactivation date/time | 
|---|
|  | 82 | . . . . S $P(^TMP($J,IBCNERTN,IBPNM,IBPIEN,"*"),U,11)=$P(RPTDATA(IBPNM,IBPIEN),U,11) | 
|---|
|  | 83 | . . . . I 'IBCNEDTL Q | 
|---|
|  | 84 | . . . . ; Store rejection detail | 
|---|
|  | 85 | . . . . S ERR="" | 
|---|
|  | 86 | . . . . F  S ERR=$O(RPTDATA(IBPNM,IBPIEN,ERR)) Q:ERR=""  D | 
|---|
|  | 87 | . . . . .  S ^TMP($J,IBCNERTN,IBPNM,IBPIEN,"*",ERR)=$G(^TMP($J,IBCNERTN,IBPNM,IBPIEN,"*",ERR))+$G(RPTDATA(IBPNM,IBPIEN,ERR)) | 
|---|
|  | 88 | . . Q | 
|---|
|  | 89 | . Q | 
|---|
|  | 90 | ; | 
|---|
|  | 91 | ; Call tag to find good/bad/rejection detail data from response file | 
|---|
|  | 92 | D DATA^IBCNERP4 | 
|---|
|  | 93 | ; | 
|---|
|  | 94 | I $G(ZTSTOP)!(IBCNESRT=1) G EXIT | 
|---|
|  | 95 | ; | 
|---|
|  | 96 | ; Resort if sorted by Total Inquiries | 
|---|
|  | 97 | ; M ^TMP($J,IBCNERTN_"X")=^TMP($J,IBCNERTN) | 
|---|
|  | 98 | N %X,%Y,SUB2 | 
|---|
|  | 99 | S SUB2=IBCNERTN_"X" | 
|---|
|  | 100 | S %X="^TMP($J,IBCNERTN," | 
|---|
|  | 101 | S %Y="^TMP($J,SUB2," | 
|---|
|  | 102 | I $D(^TMP($J,IBCNERTN))#10=1 S ^TMP($J,SUB2)=^TMP($J,IBCNERTN) | 
|---|
|  | 103 | D %XY^%RCR K %X,%Y,SUB2 | 
|---|
|  | 104 | KILL ^TMP($J,IBCNERTN) | 
|---|
|  | 105 | S PYR="" | 
|---|
|  | 106 | F  S PYR=$O(^TMP($J,IBCNERTN_"X",PYR)) Q:PYR=""  D | 
|---|
|  | 107 | .  S IEN=0 | 
|---|
|  | 108 | .  F  S IEN=$O(^TMP($J,IBCNERTN_"X",PYR,IEN)) Q:'IEN  D | 
|---|
|  | 109 | .  .  S INQS=-$G(^TMP($J,IBCNERTN_"X",PYR,IEN,"*")) | 
|---|
|  | 110 | .  .  ;M ^TMP($J,IBCNERTN,INQS,PYR,IEN)=^TMP($J,IBCNERTN_"X",PYR,IEN,"*") | 
|---|
|  | 111 | .  .  N %X,%Y,SUB2 | 
|---|
|  | 112 | .  .  S SUB2=IBCNERTN_"X" | 
|---|
|  | 113 | .  .  S %X="^TMP($J,SUB2,PYR,IEN,""*""," | 
|---|
|  | 114 | .  .  S %Y="^TMP($J,IBCNERTN,INQS,PYR,IEN," | 
|---|
|  | 115 | .  .  I $D(^TMP($J,SUB2,PYR,IEN,"*"))#10=1 S ^TMP($J,IBCNERTN,INQS,PYR,IEN)=^TMP($J,SUB2,PYR,IEN,"*") | 
|---|
|  | 116 | .  .  D %XY^%RCR K %X,%Y,SUB2 | 
|---|
|  | 117 | .  .  QUIT | 
|---|
|  | 118 | .  QUIT | 
|---|
|  | 119 | ; KILL temporary report global - used to resort | 
|---|
|  | 120 | KILL ^TMP($J,IBCNERTN_"X") | 
|---|
|  | 121 | ; | 
|---|
|  | 122 | EXIT ; EN Exit point | 
|---|
|  | 123 | Q | 
|---|
|  | 124 | ; | 
|---|
|  | 125 | ; | 
|---|
|  | 126 | GETDATA(IEN,RPTDATA,DTL,PYNM,PYIEN,PYR) ; Retrieve data for this inquiry and response(s) | 
|---|
|  | 127 | ; Output: | 
|---|
|  | 128 | ;  RPTDATA(PayerName,PayerIEN) = Created(1)^Cancelled(0/1)^Queued(0/1)^ | 
|---|
|  | 129 | ;   #1stTrans^#Retries^#Non-ErrorResponses^#ErrorResponses^ | 
|---|
|  | 130 | ;   #ofDaysforResponses^#Timeouts^#Pending^DeactivationDTM | 
|---|
|  | 131 | ;  RPTDATA(PayerName,PayerIEN,ErrCond OR ErrText) = #ErrorResps subtotal | 
|---|
|  | 132 | ; Initialize variables | 
|---|
|  | 133 | NEW HLIEN,HLID,RIEN,RDATA0,RPYIEN,RPYNM,RDATA1,ERRTXT,X1,X2,FIRST,APIEN | 
|---|
|  | 134 | ; | 
|---|
|  | 135 | S RPTDATA(PYNM,PYIEN)=1 | 
|---|
|  | 136 | ; Determine Deactivation DTM for eIIV application | 
|---|
|  | 137 | S APIEN=$$PYRAPP^IBCNEUT5("IIV",PYIEN) | 
|---|
|  | 138 | I APIEN,$P($G(^IBE(365.12,PYIEN,1,APIEN,0)),U,11) S $P(RPTDATA(PYNM,PYIEN),U,11)=$P($G(^IBE(365.12,PYIEN,1,APIEN,0)),U,12) | 
|---|
|  | 139 | ; Logic by Transmission Status | 
|---|
|  | 140 | ;  Cancelled (7) - Payer deactivated | 
|---|
|  | 141 | I $P($G(^IBCN(365.1,IEN,0)),U,4)=7 S $P(RPTDATA(PYNM,PYIEN),U,2)=1 Q | 
|---|
|  | 142 | ;  Queued - no HL7 messages (# Transmissions = 0) - no multiples exist | 
|---|
|  | 143 | I '$P($G(^IBCN(365.1,IEN,2,0)),U,3) S $P(RPTDATA(PYNM,PYIEN),U,3)=1 Q | 
|---|
|  | 144 | ;  Sent processing - HL7 messages associated (# Transmissions > 0) | 
|---|
|  | 145 | S HLIEN=0,FIRST=1 | 
|---|
|  | 146 | F  S HLIEN=$O(^IBCN(365.1,IEN,2,HLIEN)) Q:'HLIEN  D | 
|---|
|  | 147 | .  I 'FIRST S $P(RPTDATA(PYNM,PYIEN),U,5)=$P(RPTDATA(PYNM,PYIEN),U,5)+1 | 
|---|
|  | 148 | .  I FIRST S $P(RPTDATA(PYNM,PYIEN),U,4)=$P(RPTDATA(PYNM,PYIEN),U,4)+1,FIRST=0 | 
|---|
|  | 149 | .  ; Process response based on HL7 Message ID | 
|---|
|  | 150 | .  S HLID=$P($G(^IBCN(365.1,IEN,2,HLIEN,0)),U,2) I HLID="" Q | 
|---|
|  | 151 | .  ; Lookup responses by HL7 Message ID | 
|---|
|  | 152 | .  S RIEN=0 | 
|---|
|  | 153 | .  F  S RIEN=$O(^IBCN(365,"B",HLID,RIEN)) Q:'RIEN  D | 
|---|
|  | 154 | .  .  S RDATA0=$G(^IBCN(365,RIEN,0)) | 
|---|
|  | 155 | .  .  S RPYIEN=$P(RDATA0,U,3) I RPYIEN="" Q | 
|---|
|  | 156 | .  .  S RPYNM=$P($G(^IBE(365.12,RPYIEN,0)),U,1) I RPYNM="" Q | 
|---|
|  | 157 | .  .  ; Apply payer filter here, too! | 
|---|
|  | 158 | .  .  ; If there is a Payer filter, check against the IEN | 
|---|
|  | 159 | .  .  I PYR'="",RPYIEN'=PYR Q | 
|---|
|  | 160 | .  .  ; Determine Deactivation DTM for eIIV application | 
|---|
|  | 161 | .  .  S APIEN=$$PYRAPP^IBCNEUT5("IIV",RPYIEN) | 
|---|
|  | 162 | .  .  I APIEN,$P($G(^IBE(365.12,RPYIEN,1,APIEN,0)),U,11) S $P(RPTDATA(RPYNM,RPYIEN),U,11)=$P($G(^IBE(365.12,RPYIEN,1,APIEN,0)),U,12) | 
|---|
|  | 163 | .  .  S RDATA1=$G(^IBCN(365,RIEN,1)) | 
|---|
|  | 164 | .  .  S ERRTXT=$G(^IBCN(365,RIEN,4)) | 
|---|
|  | 165 | .  .  ; Transmitted (Pending) | 
|---|
|  | 166 | .  .  I $P(RDATA0,U,6)=2 D  Q | 
|---|
|  | 167 | .  .  . ; Increment for response pending | 
|---|
|  | 168 | .  .  . S $P(RPTDATA(RPYNM,RPYIEN),U,10)=$P($G(RPTDATA(RPYNM,RPYIEN)),U,10)+1 | 
|---|
|  | 169 | .  .  ; Timeout (Communication Failure) | 
|---|
|  | 170 | .  .  I $P(RDATA0,U,6)=5 D  Q | 
|---|
|  | 171 | .  .  . ; Increment for response timeout | 
|---|
|  | 172 | .  .  . S $P(RPTDATA(RPYNM,RPYIEN),U,9)=$P($G(RPTDATA(RPYNM,RPYIEN)),U,9)+1 | 
|---|
|  | 173 | .  .  ; Response Received - gather additional information | 
|---|
|  | 174 | .  .  I $P(RDATA0,U,6)=3 D  Q | 
|---|
|  | 175 | .  .  . ; Determine response time (in days) as difference between | 
|---|
|  | 176 | .  .  . ;  IIV Response File - Date/Time Response Received and | 
|---|
|  | 177 | .  .  . ;                      Date/Time Response Created (based on HL7) | 
|---|
|  | 178 | .  .  . S X1=$P(RDATA0,U,8) | 
|---|
|  | 179 | .  .  . S X2=$P(RDATA0,U,7) | 
|---|
|  | 180 | .  .  . ; Determine date difference in days | 
|---|
|  | 181 | .  .  . S $P(RPTDATA(RPYNM,RPYIEN),U,8)=$P($G(RPTDATA(RPYNM,RPYIEN)),U,8)+$$FMDIFF^XLFDT(X2,X1,1) | 
|---|
|  | 182 | ; | 
|---|
|  | 183 | GETDATX ; GETDATA exit point | 
|---|
|  | 184 | Q | 
|---|
|  | 185 | ; | 
|---|
|  | 186 | ; | 
|---|