| 1 | IBCEPTR ;ALB/ESG - Test Claim Messages Report ;28-JAN-2005 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**296,320,348,349**;21-MAR-94;Build 46 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ; eClaims Plus | 
|---|
| 6 | ; Report on Test Claim Transmissions and Status Messages | 
|---|
| 7 | ; | 
|---|
| 8 | EN ; Entry Point | 
|---|
| 9 | NEW STOP,IBRMETH,IBRDATA | 
|---|
| 10 | D SELECT I STOP G EXIT | 
|---|
| 11 | D DEVICE | 
|---|
| 12 | EXIT ; Exit Point | 
|---|
| 13 | Q | 
|---|
| 14 | ; | 
|---|
| 15 | SELECT ; Determine which claim#'s or batch#'s to report on | 
|---|
| 16 | NEW DIC,DIR,X,Y,DIRUT,DTOUT,DUOUT,DIROUT,D | 
|---|
| 17 | S STOP=0 | 
|---|
| 18 | W @IOF | 
|---|
| 19 | W !!?23,"Test Claim EDI Transmission Report" | 
|---|
| 20 | W !!?7,"This report will display EDI transmission data and returned status" | 
|---|
| 21 | W !?7,"message data for selected test claims.  You may select test claims" | 
|---|
| 22 | W !?7,"by claim number or by batch number or you may search for claims that" | 
|---|
| 23 | W !?7,"were transmitted within a date range.",! | 
|---|
| 24 | S DIR(0)="SO^C:Claim;B:Batch;D:Date Range (Date Transmitted)" | 
|---|
| 25 | S DIR("A")="Selection Method",DIR("B")="D" | 
|---|
| 26 | D ^DIR K DIR | 
|---|
| 27 | I $D(DIRUT) S STOP=1 G SELECTX | 
|---|
| 28 | S IBRMETH=Y | 
|---|
| 29 | I IBRMETH'="C",IBRMETH'="B",IBRMETH'="D" S STOP=1 G SELECTX | 
|---|
| 30 | ; | 
|---|
| 31 | K IBRDATA | 
|---|
| 32 | I IBRMETH="C" D | 
|---|
| 33 | . F  D  Q:Y'>0 | 
|---|
| 34 | .. W ! | 
|---|
| 35 | .. S DIC("A")="Test Claim: " | 
|---|
| 36 | .. I $O(IBRDATA("")) S DIC("A")="Another Test Claim: " | 
|---|
| 37 | .. S DIC("W")="D CLMLST^IBCEPTR(Y)" | 
|---|
| 38 | .. S DIC=361.4,DIC(0)="AEMQ",D="B" D MIX^DIC1 | 
|---|
| 39 | .. Q:Y'>0 | 
|---|
| 40 | .. S IBRDATA(+Y)="" | 
|---|
| 41 | .. Q | 
|---|
| 42 | . Q | 
|---|
| 43 | ; | 
|---|
| 44 | I IBRMETH="B" D | 
|---|
| 45 | . F  D  Q:Y'>0 | 
|---|
| 46 | .. W ! | 
|---|
| 47 | .. S DIC("A")="Test Batch: " | 
|---|
| 48 | .. I $O(IBRDATA("")) S DIC("A")="Another Test Batch: " | 
|---|
| 49 | .. S DIC("S")="I $P(^(0),U,14),$O(^IBM(361.4,""C"",+Y,0))" | 
|---|
| 50 | .. S DIC=364.1,DIC(0)="AEMQ",D="B^C" D MIX^DIC1 | 
|---|
| 51 | .. Q:Y'>0 | 
|---|
| 52 | .. S IBRDATA(+Y)="" | 
|---|
| 53 | .. Q | 
|---|
| 54 | . Q | 
|---|
| 55 | ; | 
|---|
| 56 | I IBRMETH="D" D | 
|---|
| 57 | . W ! | 
|---|
| 58 | . S DIR(0)="DAO^:"_DT_":AEX",DIR("A")="  Earliest Date Claims Transmitted: " | 
|---|
| 59 | . D ^DIR K DIR | 
|---|
| 60 | . I $D(DIRUT)!'Y Q | 
|---|
| 61 | . S IBRDATA(1)=Y | 
|---|
| 62 | . W ! | 
|---|
| 63 | . S DIR(0)="DAO^"_Y_":"_DT_":AEX",DIR("A")="    Latest Date Claims Transmitted: ",DIR("B")="Today" | 
|---|
| 64 | . D ^DIR K DIR | 
|---|
| 65 | . I $D(DIRUT)!'Y Q | 
|---|
| 66 | . S IBRDATA(2)=Y | 
|---|
| 67 | . Q | 
|---|
| 68 | ; | 
|---|
| 69 | I '$O(IBRDATA("")) S STOP=1 G SELECTX | 
|---|
| 70 | I IBRMETH="D",'$G(IBRDATA(1)) S STOP=1 G SELECTX | 
|---|
| 71 | I IBRMETH="D",'$G(IBRDATA(2)) S STOP=1 G SELECTX | 
|---|
| 72 | ; | 
|---|
| 73 | SELECTX ; | 
|---|
| 74 | Q | 
|---|
| 75 | ; | 
|---|
| 76 | DEVICE ; standard device selection | 
|---|
| 77 | NEW ZTRTN,ZTDESC,ZTSAVE,POP | 
|---|
| 78 | W !!!,"This report is 80 characters wide.",! | 
|---|
| 79 | S ZTRTN="COMPILE^IBCEPTR" | 
|---|
| 80 | S ZTDESC="Test Claim EDI Transmission Report" | 
|---|
| 81 | S ZTSAVE("IBRMETH")="" | 
|---|
| 82 | S ZTSAVE("IBRDATA")="" | 
|---|
| 83 | D EN^XUTMDEVQ(ZTRTN,ZTDESC,.ZTSAVE,"QM") | 
|---|
| 84 | DEVX ; | 
|---|
| 85 | Q | 
|---|
| 86 | ; | 
|---|
| 87 | COMPILE ; compile the data into a scratch global | 
|---|
| 88 | NEW RTN,EXTBCH,IBIFN,BCHIEN,TXDATM | 
|---|
| 89 | S RTN="IBCEPTR" | 
|---|
| 90 | KILL ^TMP($J,RTN)  ; init scratch global | 
|---|
| 91 | ; | 
|---|
| 92 | I IBRMETH="C" D    ; claim search | 
|---|
| 93 | . S EXTBCH=0 | 
|---|
| 94 | . S IBIFN=0 | 
|---|
| 95 | . F  S IBIFN=$O(IBRDATA(IBIFN)) Q:'IBIFN  D STORE(IBIFN) | 
|---|
| 96 | . Q | 
|---|
| 97 | ; | 
|---|
| 98 | I IBRMETH="B" D    ; batch search | 
|---|
| 99 | . S BCHIEN=0 | 
|---|
| 100 | . F  S BCHIEN=$O(IBRDATA(BCHIEN)) Q:'BCHIEN  D | 
|---|
| 101 | .. S EXTBCH=$P($G(^IBA(364.1,BCHIEN,0)),U,1) | 
|---|
| 102 | .. I EXTBCH="" S EXTBCH="~unknown" | 
|---|
| 103 | .. S IBIFN=0 | 
|---|
| 104 | .. F  S IBIFN=$O(^IBM(361.4,"C",BCHIEN,IBIFN)) Q:'IBIFN  D STORE(IBIFN) | 
|---|
| 105 | .. Q | 
|---|
| 106 | . Q | 
|---|
| 107 | ; | 
|---|
| 108 | I IBRMETH="D" D    ; date range search | 
|---|
| 109 | . S EXTBCH=0 | 
|---|
| 110 | . S TXDATM=$O(^IBM(361.4,"ATD",IBRDATA(1)),-1) | 
|---|
| 111 | . F  S TXDATM=$O(^IBM(361.4,"ATD",TXDATM)) Q:'TXDATM  Q:(TXDATM\1)>IBRDATA(2)  D | 
|---|
| 112 | .. S IBIFN=0 | 
|---|
| 113 | .. F  S IBIFN=$O(^IBM(361.4,"ATD",TXDATM,IBIFN)) Q:'IBIFN  D STORE(IBIFN) | 
|---|
| 114 | .. Q | 
|---|
| 115 | . Q | 
|---|
| 116 | ; | 
|---|
| 117 | D PRINT                           ; print the report | 
|---|
| 118 | D ^%ZISC                          ; close the device | 
|---|
| 119 | KILL ^TMP($J,RTN)                 ; clean up scratch global | 
|---|
| 120 | I $D(ZTQUEUED) S ZTREQ="@"        ; purge the task record | 
|---|
| 121 | COMPX ; | 
|---|
| 122 | Q | 
|---|
| 123 | ; | 
|---|
| 124 | STORE(IBIFN) ; Input = internal bill#; continue compilation | 
|---|
| 125 | NEW IB0,CLAIM,IBRTXD0,TXIEN,SMIEN,DATA,TXDTM | 
|---|
| 126 | S IB0=$G(^DGCR(399,IBIFN,0)) | 
|---|
| 127 | S CLAIM=$P(IB0,U,1)  ; external claim# | 
|---|
| 128 | I CLAIM="" S CLAIM="~unknown" | 
|---|
| 129 | S IBRTXD0=99999999   ; initial value for earliest transmission date | 
|---|
| 130 | ; | 
|---|
| 131 | I IBRMETH="C" D   ; claim search for transmission data (all) | 
|---|
| 132 | . S TXIEN=0 | 
|---|
| 133 | . F  S TXIEN=$O(^IBM(361.4,IBIFN,1,TXIEN)) Q:'TXIEN  D STORETX(IBIFN,TXIEN) | 
|---|
| 134 | . Q | 
|---|
| 135 | ; | 
|---|
| 136 | I IBRMETH="B" D   ; batch search for transmission data ("C" x-ref) | 
|---|
| 137 | . S TXIEN=0 | 
|---|
| 138 | . F  S TXIEN=$O(^IBM(361.4,"C",BCHIEN,IBIFN,TXIEN)) Q:'TXIEN  D STORETX(IBIFN,TXIEN) | 
|---|
| 139 | . Q | 
|---|
| 140 | ; | 
|---|
| 141 | I IBRMETH="D" D   ; date range search for transmission data ("ATD" xref) | 
|---|
| 142 | . S TXIEN=0 | 
|---|
| 143 | . F  S TXIEN=$O(^IBM(361.4,"ATD",TXDATM,IBIFN,TXIEN)) Q:'TXIEN  D STORETX(IBIFN,TXIEN) | 
|---|
| 144 | . Q | 
|---|
| 145 | ; | 
|---|
| 146 | ; loop thru all returned messages for claim | 
|---|
| 147 | S SMIEN=0 | 
|---|
| 148 | F  S SMIEN=$O(^IBM(361.4,IBIFN,2,SMIEN)) Q:'SMIEN  D | 
|---|
| 149 | . S DATA=$G(^IBM(361.4,IBIFN,2,SMIEN,0)) Q:DATA=""   ; received msg data | 
|---|
| 150 | . S TXDTM=$P(DATA,U,1) Q:'TXDTM    ; msg rec'd date/time | 
|---|
| 151 | . ; | 
|---|
| 152 | . ; Batch only: if this status message was received before the | 
|---|
| 153 | . ; earliest transmission for this batch, then don't include it | 
|---|
| 154 | . I IBRMETH="B",TXDTM'>IBRTXD0 Q | 
|---|
| 155 | . ; | 
|---|
| 156 | . ; Date range search only:  make sure the date/time the status message | 
|---|
| 157 | . ; was received is inside the user specified date range for this report | 
|---|
| 158 | . I IBRMETH="D",(TXDTM\1)<IBRDATA(1) Q    ; rec'd too early | 
|---|
| 159 | . I IBRMETH="D",(TXDTM\1)>IBRDATA(2) Q    ; rec'd too late | 
|---|
| 160 | . ; | 
|---|
| 161 | . ; store it | 
|---|
| 162 | . M ^TMP($J,RTN,EXTBCH,CLAIM,TXDTM,2,SMIEN)=^IBM(361.4,IBIFN,2,SMIEN) | 
|---|
| 163 | . Q | 
|---|
| 164 | STOREX ; | 
|---|
| 165 | Q | 
|---|
| 166 | ; | 
|---|
| 167 | STORETX(IBIFN,TXIEN) ; store transmission info | 
|---|
| 168 | NEW DATA,TXDTM | 
|---|
| 169 | S DATA=$G(^IBM(361.4,IBIFN,1,TXIEN,0)) | 
|---|
| 170 | I DATA="" G STTXXX | 
|---|
| 171 | S TXDTM=$P(DATA,U,1)   ; transmit date/time | 
|---|
| 172 | I 'TXDTM G STTXXX | 
|---|
| 173 | I TXDTM<IBRTXD0 S IBRTXD0=TXDTM | 
|---|
| 174 | ; | 
|---|
| 175 | ; store it | 
|---|
| 176 | M ^TMP($J,RTN,EXTBCH,CLAIM,TXDTM,1,TXIEN)=^IBM(361.4,IBIFN,1,TXIEN) | 
|---|
| 177 | STTXXX ; | 
|---|
| 178 | Q | 
|---|
| 179 | ; | 
|---|
| 180 | PRINT ; print the report to the specified device | 
|---|
| 181 | NEW MAXCNT,CRT,PAGECNT,STOP,DIR,X,Y,DIRUT,DUOUT,DTOUT,DIROUT | 
|---|
| 182 | NEW BATCH,CLAIM,IBIFN,CLMD,TXD,TYPE,IEN | 
|---|
| 183 | I IOST["C-" S MAXCNT=IOSL-3,CRT=1 | 
|---|
| 184 | E  S MAXCNT=IOSL-6,CRT=0 | 
|---|
| 185 | S PAGECNT=0,STOP=0 | 
|---|
| 186 | ; | 
|---|
| 187 | I '$D(^TMP($J,RTN)) D HEADER W !!!?5,"No Data Found" | 
|---|
| 188 | ; | 
|---|
| 189 | S BATCH="" | 
|---|
| 190 | F  S BATCH=$O(^TMP($J,RTN,BATCH)) Q:BATCH=""  D  Q:STOP | 
|---|
| 191 | . D HEADER Q:STOP | 
|---|
| 192 | . I BATCH'=0 W !!,"Batch#:  ",BATCH | 
|---|
| 193 | . S CLAIM="" | 
|---|
| 194 | . F  S CLAIM=$O(^TMP($J,RTN,BATCH,CLAIM)) Q:CLAIM=""  D  Q:STOP | 
|---|
| 195 | .. I $Y+2>MAXCNT!'PAGECNT D HEADER Q:STOP | 
|---|
| 196 | .. I BATCH=0 W ! | 
|---|
| 197 | .. W !,"Claim#:  ",CLAIM | 
|---|
| 198 | .. S IBIFN=+$O(^DGCR(399,"B",CLAIM,"")) | 
|---|
| 199 | .. I IBIFN S CLMD=$$BT(IBIFN) W ?18,$E($P(CLMD,U,3),1,20),?40,"(",$P(CLMD,U,1),")" | 
|---|
| 200 | .. W !,$$RJ^XLFSTR("",80,"-") | 
|---|
| 201 | .. ; | 
|---|
| 202 | .. S TXD=0 | 
|---|
| 203 | .. F  S TXD=$O(^TMP($J,RTN,BATCH,CLAIM,TXD)) Q:'TXD!STOP  S TYPE=0 F  S TYPE=$O(^TMP($J,RTN,BATCH,CLAIM,TXD,TYPE)) Q:'TYPE!STOP  S IEN=0 F  S IEN=$O(^TMP($J,RTN,BATCH,CLAIM,TXD,TYPE,IEN)) Q:'IEN!STOP  D  Q:STOP | 
|---|
| 204 | ... I TYPE=1 D TXPRT | 
|---|
| 205 | ... I TYPE=2 D SMPRT | 
|---|
| 206 | ... Q | 
|---|
| 207 | .. Q | 
|---|
| 208 | . Q | 
|---|
| 209 | ; | 
|---|
| 210 | I STOP G PRINTX | 
|---|
| 211 | I $Y+2>MAXCNT!'PAGECNT D HEADER I STOP G PRINTX | 
|---|
| 212 | W !!?5,"*** End of Report ***" | 
|---|
| 213 | I CRT,'$D(ZTQUEUED) S DIR(0)="E" D ^DIR K DIR | 
|---|
| 214 | PRINTX ; | 
|---|
| 215 | Q | 
|---|
| 216 | ; | 
|---|
| 217 | TXPRT ; print transmission information | 
|---|
| 218 | NEW DATA,TXDTM,EXTBCH,TXBY,INSIEN,PAYER,PSEQ,INZ | 
|---|
| 219 | S DATA=$G(^TMP($J,RTN,BATCH,CLAIM,TXD,TYPE,IEN,0)) I DATA="" G TXPRTX | 
|---|
| 220 | S TXDTM=$$FMTE^XLFDT($P(DATA,U,1),"5Z") | 
|---|
| 221 | S EXTBCH=$$EXTERNAL^DILFD(361.41,.02,,$P(DATA,U,2))  ; batch | 
|---|
| 222 | S TXBY=$$EXTERNAL^DILFD(361.41,.03,,$P(DATA,U,3))    ; who tx | 
|---|
| 223 | S INSIEN=+$$FINDINS^IBCEF1(IBIFN,$P(DATA,U,4))       ; insurance | 
|---|
| 224 | S INZ=$$INSADD^IBCNSC02(INSIEN)                      ; ins name/addr | 
|---|
| 225 | S PAYER=$P(INZ,U,1)                                  ; ins name | 
|---|
| 226 | S PSEQ=$TR($P(DATA,U,4),"123","PST")                 ; payer seq | 
|---|
| 227 | ; | 
|---|
| 228 | I $Y+2>MAXCNT!'PAGECNT D HEADER I STOP G TXPRTX | 
|---|
| 229 | W !,"Transmission Information" | 
|---|
| 230 | W !?1,TXDTM,?22,"Bch#",+$E(EXTBCH,4,99),?33,$E(TXBY,1,15),?50,$E(PAYER,1,20),"  (",PSEQ,")" | 
|---|
| 231 | ; display address info if not Medicare | 
|---|
| 232 | I '$$MCRWNR^IBEFUNC(INSIEN) W !?50,$E($P(INZ,U,2),1,15),",",$E($P(INZ,U,3),1,11),",",$E($P(INZ,U,4),1,2) | 
|---|
| 233 | W ! | 
|---|
| 234 | TXPRTX ; | 
|---|
| 235 | Q | 
|---|
| 236 | ; | 
|---|
| 237 | SMPRT ; print returned status message information | 
|---|
| 238 | NEW DATA,TXDTM,SEVERITY,Z | 
|---|
| 239 | S DATA=$G(^TMP($J,RTN,BATCH,CLAIM,TXD,TYPE,IEN,0)) I DATA="" G SMPRTX | 
|---|
| 240 | S TXDTM=$$FMTE^XLFDT($P(DATA,U,1),"5Z") | 
|---|
| 241 | S SEVERITY=$$EXTERNAL^DILFD(361.42,.02,,$P(DATA,U,2))  ; msg severity | 
|---|
| 242 | ; | 
|---|
| 243 | I $Y+2>MAXCNT!'PAGECNT D HEADER I STOP G SMPRTX | 
|---|
| 244 | W !,"Status Message Information" | 
|---|
| 245 | W !?1,TXDTM,?22,SEVERITY,?65,"Msg#",$P(DATA,U,3) | 
|---|
| 246 | S Z=0 | 
|---|
| 247 | F  S Z=$O(^TMP($J,RTN,BATCH,CLAIM,TXD,TYPE,IEN,1,Z)) Q:'Z  D  Q:STOP | 
|---|
| 248 | . I $Y+1>MAXCNT!'PAGECNT D HEADER Q:STOP | 
|---|
| 249 | . W !?2,$G(^TMP($J,RTN,BATCH,CLAIM,TXD,TYPE,IEN,1,Z,0)) | 
|---|
| 250 | . Q | 
|---|
| 251 | W ! | 
|---|
| 252 | SMPRTX ; | 
|---|
| 253 | Q | 
|---|
| 254 | ; | 
|---|
| 255 | HEADER ; page break and header | 
|---|
| 256 | NEW LIN,HDR,TAB | 
|---|
| 257 | S STOP=0 | 
|---|
| 258 | I CRT,PAGECNT>0,'$D(ZTQUEUED) D  I STOP G HEADX | 
|---|
| 259 | . I MAXCNT<51 F LIN=1:1:(MAXCNT-$Y) W ! | 
|---|
| 260 | . S DIR(0)="E" D ^DIR K DIR | 
|---|
| 261 | . I 'Y S STOP=1 Q | 
|---|
| 262 | . Q | 
|---|
| 263 | ; | 
|---|
| 264 | S PAGECNT=PAGECNT+1 | 
|---|
| 265 | W @IOF,! | 
|---|
| 266 | ; | 
|---|
| 267 | W "Test Claim EDI Transmission Report" | 
|---|
| 268 | S HDR="Page: "_PAGECNT,TAB=80-$L(HDR)-1 | 
|---|
| 269 | W ?TAB,HDR | 
|---|
| 270 | W !,"Selected ",$S(IBRMETH="B":"Batches",IBRMETH="C":"Claims",1:"Date Range") | 
|---|
| 271 | S HDR=$$FMTE^XLFDT($$NOW^XLFDT,"1Z"),TAB=80-$L(HDR)-1 | 
|---|
| 272 | W ?TAB,HDR | 
|---|
| 273 | W !,$$RJ^XLFSTR("",80,"=") | 
|---|
| 274 | ; | 
|---|
| 275 | ; check for a stop request | 
|---|
| 276 | I $D(ZTQUEUED),$$S^%ZTLOAD() D  G HEADX | 
|---|
| 277 | . S (ZTSTOP,STOP)=1 | 
|---|
| 278 | . W !!!?5,"*** Report Halted by TaskManager Request ***" | 
|---|
| 279 | . Q | 
|---|
| 280 | ; | 
|---|
| 281 | HEADX ; | 
|---|
| 282 | Q | 
|---|
| 283 | ; | 
|---|
| 284 | BT(IBIFN) ; bill type and info | 
|---|
| 285 | ; [1] TYPE (form type, charge type, inp/outp) | 
|---|
| 286 | ; [2] claim# | 
|---|
| 287 | ; [3] patient name | 
|---|
| 288 | NEW TYPE,IB0,F,C,S S TYPE="" | 
|---|
| 289 | S IB0=$G(^DGCR(399,+$G(IBIFN),0)) I IB0="" Q "" | 
|---|
| 290 | S F=$P(IB0,U,19),F=$S(F=2:"1500",1:"UB04") | 
|---|
| 291 | S C=$P(IB0,U,27),C=$S(C=1:"Inst",1:"Prof") | 
|---|
| 292 | S S=$$INPAT^IBCEF(IBIFN),S=$S(S=1:"Inpat",1:"Outpat") | 
|---|
| 293 | S TYPE=F_", "_C_", "_S | 
|---|
| 294 | Q TYPE_U_$P(IB0,U,1)_U_$P($G(^DPT(+$P(IB0,U,2),0)),U,1) | 
|---|
| 295 | ; | 
|---|
| 296 | CLMLST(IBIFN) ; DIC lister | 
|---|
| 297 | NEW TYPE,LTD,N1,N2 | 
|---|
| 298 | S TYPE=$P($$BT(IBIFN),U,1) | 
|---|
| 299 | S LTD=$$FMTE^XLFDT($P($G(^IBM(361.4,IBIFN,0)),U,2),"2Z") | 
|---|
| 300 | S N1=+$P($G(^IBM(361.4,IBIFN,1,0)),U,4)  ; # transmissions | 
|---|
| 301 | S N2=+$P($G(^IBM(361.4,IBIFN,2,0)),U,4)  ; # return messages | 
|---|
| 302 | W " ",TYPE,?34," ",LTD,?45," ",N1," Transmission",$S(N1'=1:"s",1:"") | 
|---|
| 303 | W ?63," ",N2," Message",$S(N2'=1:"s",1:"") | 
|---|
| 304 | CLMLSTX ; | 
|---|
| 305 | Q | 
|---|
| 306 | ; | 
|---|