| [613] | 1 | IBCICMEP ;DSI/JSR - ClaimsManager ERROR REPORT ;6-APR-2001 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**161**;21-MAR-94 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ;; ** Program Description ** | 
|---|
|  | 5 | ;     This routine has only 1 entry point EN. | 
|---|
|  | 6 | ;     This routine is invoked when ^IBCICME is run from the menu option. | 
|---|
|  | 7 | ;     ^IBCICME is and extraction routine which collects claims which | 
|---|
|  | 8 | ;     the user defined report extracted for reporting purposes. | 
|---|
|  | 9 | ;     This routine ^IBCICMEP is the print routine which permits the | 
|---|
|  | 10 | ;     user to print the report to the screen or to queue as a background | 
|---|
|  | 11 | ;     job which can be stopped at any time using TaskManager. | 
|---|
|  | 12 | ;  Variables | 
|---|
|  | 13 | ;     IBCIPXT = (0 or 1) halts job if report is stopped. | 
|---|
|  | 14 | ;     SORT1  = will always be a 1 (reserved for future use) | 
|---|
|  | 15 | ;     SORT2  = space concatenated with the Error Code Mnemonic or a 1 | 
|---|
|  | 16 | ;              this is a flag type indicator.  1 indicates that the | 
|---|
|  | 17 | ;              report will print all errors for a bill | 
|---|
|  | 18 | ;              Sort2'=1 indicates that the report will print all Bills | 
|---|
|  | 19 | ;              for a ClaimsManager Error Code (JSR 6/12/01) | 
|---|
|  | 20 | ;     SORT3  = "1" or the  Assigned to person name | 
|---|
|  | 21 | ;     SORT4  = a space concatenated with whatever data the user is | 
|---|
|  | 22 | ;              sorting by (terminal digit, Insurance company name, | 
|---|
|  | 23 | ;              patient last name, negative charge amount or bill #. | 
|---|
|  | 24 | ;     SORT5  = Sort5 will always be a 1 (reserved for future use | 
|---|
|  | 25 | ;              possible insurance group ID). | 
|---|
|  | 26 | ;     MAXCNT = Kernel determines the Max Lines per Page for each device | 
|---|
|  | 27 | ;     CRT    = Determines if output is sent to screen. | 
|---|
|  | 28 | ;     RPTTYP = Identifies type of report being compiled. | 
|---|
|  | 29 | EN ; this is the only entry point | 
|---|
|  | 30 | N ASSIGN,AUDIT,COMMEN,CRT,DATE,EFLAG,ERRSEQ,GROUPBY,I,IBCI1,IBCI10 | 
|---|
|  | 31 | N IBCI11,IBCI12,IBCI2,IBCI3,IBCI4,IBCI5,IBCI6,IBCI7,IBCI8,IBCI9,IBCIARR | 
|---|
|  | 32 | N IBCIBEG,IBCID2,IBCIDATA,IBCIDT,IBCIEND,IBCIPGCT,IBCIARR,IBCIEMN | 
|---|
|  | 33 | N IBCIQT,IBCIRUN,IBCISEQ,IBCITOT,IBCITXT,IBCIX,IBIFN,MAXCNT,PREV | 
|---|
|  | 34 | N IBCIPXT,RPTTYP,SORT1,SORT2,SORT3,SORT4,SORT5,IBCIX,Y,Z,X,STOP,NAME | 
|---|
|  | 35 | S ASSIGN=RPTSPECS("ASNSORT") ; PRIMARY SORT BY ASSIGN TO PERSON 1 YES 0 NO | 
|---|
|  | 36 | S COMMEN=RPTSPECS("IBCICOMM") ; FLAG PRINT COMMENT 1 YES 0 NO | 
|---|
|  | 37 | S GROUPBY=RPTSPECS("SORTBY")   ;TYPE 2=INS LOGIC DIFF SORT4 | 
|---|
|  | 38 | S IBCIBEG=RPTSPECS("BEGDATE") | 
|---|
|  | 39 | S DATE=RPTSPECS("DATYP") | 
|---|
|  | 40 | S IBCIEND=RPTSPECS("ENDDATE") | 
|---|
|  | 41 | S EFLAG=RPTSPECS("DISPLAY ERROR TEXT")  ; 1 print error txt 0 don't | 
|---|
|  | 42 | S (IBCIPXT,IBCIPGCT)=0  ; flags quit and header | 
|---|
|  | 43 | S Z=($P($G(^IBA(351.91,0)),U,4)) | 
|---|
|  | 44 | F I=1:1:Z S (IBCIARR(I))=$P($G(^IBA(351.91,I,0)),U,2)  ; CM status | 
|---|
|  | 45 | S RPTTYP(1)="Terminal Digit" | 
|---|
|  | 46 | S RPTTYP(2)="Insurance Company" | 
|---|
|  | 47 | S RPTTYP(3)="Patient Last Name" | 
|---|
|  | 48 | S RPTTYP(4)="Dollar Impact" | 
|---|
|  | 49 | S RPTTYP(5)="Bill Number"  ;JSR 6/12/2001 | 
|---|
|  | 50 | ; | 
|---|
|  | 51 | I IOST["C" S MAXCNT=IOSL-4,CRT=1 | 
|---|
|  | 52 | E  S MAXCNT=IOSL-6,CRT=0 | 
|---|
|  | 53 | I RPTSPECS("TYPE")="D" D PRINT  ; Detailed Report ;DSI/DJW 3/21/02 | 
|---|
|  | 54 | I IBCIPXT=0 D PRINT2 | 
|---|
|  | 55 | I CRT,IBCIPGCT>0,'$D(ZTQUEUED),IBCIPXT=0 S DIR(0)="E" D ^DIR K DIR I $D(DTOUT)!($D(DUOUT)) S IBCIPXT=1 Q | 
|---|
|  | 56 | G XIT | 
|---|
|  | 57 | Q | 
|---|
|  | 58 | PRINT ; prints data extracted | 
|---|
|  | 59 | I '$D(^TMP($J,IBCIRTN)) D HEADER W ?35,"N O   D A T A   F O U N D",!! | 
|---|
|  | 60 | S SORT1="" F  S SORT1=$O(^TMP($J,IBCIRTN,SORT1)) Q:SORT1=""!(IBCIPXT=1)!($G(ZTSTOP))   D | 
|---|
|  | 61 | . S SORT2="" F  S SORT2=$O(^TMP($J,IBCIRTN,SORT1,SORT2)) Q:SORT2=""!(IBCIPXT=1)!($G(ZTSTOP))   D | 
|---|
|  | 62 | . . S SORT3="" F  S SORT3=$O(^TMP($J,IBCIRTN,SORT1,SORT2,SORT3)) Q:SORT3=""!(IBCIPXT=1)!($G(ZTSTOP))   D | 
|---|
|  | 63 | . . . I ASSIGN D HEADER | 
|---|
|  | 64 | . . . S SORT4="" F  S SORT4=$O(^TMP($J,IBCIRTN,SORT1,SORT2,SORT3,SORT4)) Q:SORT4=""!(IBCIPXT=1)!($G(ZTSTOP))   D | 
|---|
|  | 65 | . . . . S PREV=SORT4 | 
|---|
|  | 66 | . . . . I GROUPBY=2,IBCIPXT=0,IBCIPGCT>0 D HEAD2 | 
|---|
|  | 67 | . . . . S SORT5="" F  S SORT5=$O(^TMP($J,IBCIRTN,SORT1,SORT2,SORT3,SORT4,SORT5)) Q:SORT5=""!(IBCIPXT=1)!($G(ZTSTOP))   D | 
|---|
|  | 68 | . . . . . S NAME="" F  S NAME=$O(^TMP($J,IBCIRTN,SORT1,SORT2,SORT3,SORT4,SORT5,NAME)) Q:NAME=""!(IBCIPXT=1)!($G(ZTSTOP))   D | 
|---|
|  | 69 | . . . . . . S IBIFN="" F  S IBIFN=$O(^TMP($J,IBCIRTN,SORT1,SORT2,SORT3,SORT4,SORT5,NAME,IBIFN)) Q:IBIFN=""!(IBCIPXT=1)!($G(ZTSTOP))   D | 
|---|
|  | 70 | . . . . . . . S IBCIEMN="" F  S IBCIEMN=$O(^TMP($J,IBCIRTN,SORT1,SORT2,SORT3,SORT4,SORT5,NAME,IBIFN,IBCIEMN)) Q:IBCIEMN=""!(IBCIPXT=1)!($G(ZTSTOP))  D | 
|---|
|  | 71 | . . . . . . . . D DATA | 
|---|
|  | 72 | . . . . . . . . D LINE | 
|---|
|  | 73 | . . . . . . . . I EFLAG D ERROR | 
|---|
|  | 74 | . . . . . . . I COMMEN D COMM | 
|---|
|  | 75 | Q | 
|---|
|  | 76 | PRINT2 ; print audit report | 
|---|
|  | 77 | I RPTSPECS("TYPE")="D",('$D(^TMP($J,IBCIRTN))) Q | 
|---|
|  | 78 | D HEADA | 
|---|
|  | 79 | I IBCIPXT=1 Q | 
|---|
|  | 80 | ; JSR 6/12/01 change to accommodate new request PRINT2+2 thru PRINT2+9 | 
|---|
|  | 81 | I '$D(^TMP($J,IBCIRTN)) W ?35,"N O   D A T A   F O U N D",! Q | 
|---|
|  | 82 | S SORT1="" F  S SORT1=$O(^TMP($J,IBCIRTN_"-TOTALS",SORT1)) Q:SORT1=""!(IBCIPXT=1)!($G(ZTSTOP))   D | 
|---|
|  | 83 | . I $Y+1>MAXCNT D HEADER | 
|---|
|  | 84 | . S AUDIT=^TMP($J,IBCIRTN_"-TOTALS",SORT1) | 
|---|
|  | 85 | . W ?20,SORT1,?40,$J($FN(AUDIT,","),9),! | 
|---|
|  | 86 | W ! | 
|---|
|  | 87 | S IBCITOT=$G(^TMP($J,IBCIRTN_"-TOTALS")) | 
|---|
|  | 88 | ; JSR === | 
|---|
|  | 89 | W ?20,"Total # Claims",?40,$J($FN($P($G(IBCITOT),U,1),","),9),! | 
|---|
|  | 90 | W ?20,"Total # Errors",?40,$J($FN($P($G(IBCITOT),U,2),","),9),! | 
|---|
|  | 91 | Q | 
|---|
|  | 92 | HEADER ; header for main report | 
|---|
|  | 93 | I CRT,IBCIPGCT>0,'$D(ZTQUEUED),IBCIPXT=0 S DIR(0)="E" D ^DIR K DIR I $D(DTOUT)!($D(DUOUT)) S IBCIPXT=1 Q | 
|---|
|  | 94 | I $D(ZTQUEUED),$$S^%ZTLOAD() S ZTSTOP=1 Q | 
|---|
|  | 95 | S IBCIPGCT=IBCIPGCT+1 | 
|---|
|  | 96 | W @IOF,!,"ClaimsManager Detailed Error Report sort by "_RPTTYP(GROUPBY)_" for " | 
|---|
|  | 97 | W $E(IBCIBEG,4,5)_"/"_$E(IBCIBEG,6,7)_"/"_$E(IBCIBEG,2,3)_" thru "_$E(IBCIEND,4,5)_"/"_$E(IBCIEND,6,7)_"/"_$E(IBCIEND,2,3) | 
|---|
|  | 98 | W ?100,"Page :"_IBCIPGCT,! | 
|---|
|  | 99 | S Y=$$NOW^XLFDT X ^DD("DD") S IBCIRUN=Y | 
|---|
|  | 100 | W "Detailed Report",?100,"Run Date: "_IBCIRUN,!! | 
|---|
|  | 101 | I DATE=1 W ?1,"ERROR",?8,"BILL NO.",?18,"PATIENT NAME",?44,"PID",?50," EVENT",?60,"BILLER",?68,"CODER",?76,"ASSIGN",?84,"ERROR CODES",?102,"TYPE",?108,"CHARGES",?116,"CM STATUS" | 
|---|
|  | 102 | E  W ?1,"ERROR",?8,"BILL NO.",?18,"PATIENT NAME",?44,"PID",?50," ENTER",?60,"BILLER",?68,"CODER",?76,"ASSIGN",?84,"ERROR CODES",?102,"TYPE",?108,"CHARGES",?116,"CM STATUS" | 
|---|
|  | 103 | N X S $P(X,"=",130)="" W !,X,! | 
|---|
|  | 104 | Q | 
|---|
|  | 105 | HEAD2 ; only printed when insurance is a selected sort | 
|---|
|  | 106 | Q:GROUPBY'=2 | 
|---|
|  | 107 | Q:IBCIPXT=1 | 
|---|
|  | 108 | I $Y+4>MAXCNT,IBCIPXT=0 D HEADER | 
|---|
|  | 109 | I $Y=6,IBCIPXT=0 W ?2,"INSURANCE: "_SORT4,! | 
|---|
|  | 110 | E  W:IBCIPXT=0 !,?2,"INSURANCE: "_SORT4,! | 
|---|
|  | 111 | Q | 
|---|
|  | 112 | HEADA ; only for audit header | 
|---|
|  | 113 | I CRT,IBCIPGCT>0,'$D(ZTQUEUED),IBCIPXT=0 S DIR(0)="E" D ^DIR K DIR I $D(DTOUT)!($D(DUOUT)) S IBCIPXT=1 Q | 
|---|
|  | 114 | I $D(ZTQUEUED),$$S^%ZTLOAD() S ZTSTOP=1 Q | 
|---|
|  | 115 | S IBCIPGCT=IBCIPGCT+1 | 
|---|
|  | 116 | W @IOF,!,"ClaimsManager Audit Error Report for " | 
|---|
|  | 117 | W $E(IBCIBEG,4,5)_"/"_$E(IBCIBEG,6,7)_"/"_$E(IBCIBEG,2,3)_" thru "_$E(IBCIEND,4,5)_"/"_$E(IBCIEND,6,7)_"/"_$E(IBCIEND,2,3) | 
|---|
|  | 118 | W ?100,"Page :"_IBCIPGCT,! | 
|---|
|  | 119 | I RPTSPECS("TYPE")="S" W "Summary Report" | 
|---|
|  | 120 | E  W "Detailed Report" | 
|---|
|  | 121 | S Y=$$NOW^XLFDT X ^DD("DD") S IBCIRUN=Y | 
|---|
|  | 122 | W ?100,"Run Date: "_IBCIRUN,!! | 
|---|
|  | 123 | Q | 
|---|
|  | 124 | DATA ; formats line item data - note claims with same edit error mnemonic | 
|---|
|  | 125 | ; may print mulitple times if the HFCA line item is an unique line | 
|---|
|  | 126 | ; with the same error type. The report prints the error mnemonic and | 
|---|
|  | 127 | ; the HCFA line # as it relates to IB. | 
|---|
|  | 128 | S IBCIDATA=^TMP($J,IBCIRTN,SORT1,SORT2,SORT3,SORT4,SORT5,NAME,IBIFN) | 
|---|
|  | 129 | S IBCI1=$P(IBCIDATA,U,1)  ; [1] External Bill# | 
|---|
|  | 130 | S IBCI2=$P(IBCIDATA,U,2)  ; [2] Patient SSN | 
|---|
|  | 131 | S IBCI3=$P(IBCIDATA,U,3)  ; ck logic [3] EventDate or Bill | 
|---|
|  | 132 | S IBCIDT=$E(IBCI3,4,5)_"/"_$E(IBCI3,6,7)_"/"_$E(IBCI3,2,3) | 
|---|
|  | 133 | S IBCI4=$P(IBCIDATA,U,4)  ; [4] Biller name | 
|---|
|  | 134 | S IBCI5=$P(IBCIDATA,U,5)  ; [5] Coder name | 
|---|
|  | 135 | S IBCI6=$P(IBCIDATA,U,6)  ; [6] Assigned to person name | 
|---|
|  | 136 | S IBCI7=$P(IBCIDATA,U,7)  ;[7] inpatient/outpatient flag | 
|---|
|  | 137 | S IBCI8=$P(IBCIDATA,U,8)  ;[8] Charges | 
|---|
|  | 138 | S IBCI9=$P(IBCIDATA,U,9)  ;[9] ien of current ClaimsManager | 
|---|
|  | 139 | S IBCI10=$P(IBCIDATA,U,10)  ;[10] String of error code mne | 
|---|
|  | 140 | S IBCID2=^TMP($J,IBCIRTN,SORT1,SORT2,SORT3,SORT4,SORT5,NAME,IBIFN,IBCIEMN) | 
|---|
|  | 141 | S IBCI11=$P(IBCID2,U,1) | 
|---|
|  | 142 | S IBCI12=$P(IBCID2,U,2)  ; jsr 6/12/01 | 
|---|
|  | 143 | S IBCIX=(IBCIARR(IBCI9)) | 
|---|
|  | 144 | Q | 
|---|
|  | 145 | ERROR ; this is a unique error which CM reports | 
|---|
|  | 146 | S ERRSEQ=0 F  S ERRSEQ=$O(^IBA(351.9,IBIFN,1,IBCIEMN,1,ERRSEQ)) Q:'ERRSEQ!(IBCIPXT=1)  D | 
|---|
|  | 147 | . I $Y+2>MAXCNT D HEADER | 
|---|
|  | 148 | . Q:IBCIPXT=1 | 
|---|
|  | 149 | . S IBCITXT=$G(^IBA(351.9,IBIFN,1,IBCIEMN,1,ERRSEQ,0)) | 
|---|
|  | 150 | . I ERRSEQ=1 W ?10,"CM Error Message: " | 
|---|
|  | 151 | . I $Y+1>MAXCNT,IBCIPXT=0 D HEADER | 
|---|
|  | 152 | . W ?28,IBCITXT,! | 
|---|
|  | 153 | W ! | 
|---|
|  | 154 | Q | 
|---|
|  | 155 | COMM ; print CM user comments these comments are keyed by the user | 
|---|
|  | 156 | Q:'$D(^IBA(351.9,IBIFN,2,0)) | 
|---|
|  | 157 | I $Y+2>MAXCNT,IBCIPXT=0 D HEADER | 
|---|
|  | 158 | Q:IBCIPXT=1 | 
|---|
|  | 159 | W ?10,$$CMTINFO^IBCIUT5(IBIFN),! | 
|---|
|  | 160 | S IBCISEQ=0 F  S IBCISEQ=$O(^IBA(351.9,IBIFN,2,IBCISEQ)) Q:'IBCISEQ!(IBCIPXT=1)  D | 
|---|
|  | 161 | . S IBCITXT=$G(^IBA(351.9,IBIFN,2,IBCISEQ,0)) | 
|---|
|  | 162 | . I $Y+1>MAXCNT,IBCIPXT=0 D HEADER | 
|---|
|  | 163 | . Q:IBCIPXT=1 | 
|---|
|  | 164 | . W ?28,IBCITXT,! | 
|---|
|  | 165 | W ! | 
|---|
|  | 166 | Q | 
|---|
|  | 167 | LINE ; print report detail line | 
|---|
|  | 168 | Q:IBCIPXT=1 | 
|---|
|  | 169 | I $Y+1>MAXCNT,IBCIPXT=0 D HEADER | 
|---|
|  | 170 | I IBCIPGCT=0,IBCIPXT=0 D HEADER D HEAD2 | 
|---|
|  | 171 | Q:IBCIPXT=1 | 
|---|
|  | 172 | W ?1,IBCI12_"*"_IBCI11,?8,IBCI1,?19,$E(NAME,1,23),?44,$E(IBCI2,6,9) | 
|---|
|  | 173 | W ?50,IBCIDT,?60,$E(IBCI4,1,6),?68,$E(IBCI5,1,6),?76,$E(IBCI6,1,6) | 
|---|
|  | 174 | W ?84,IBCI10,?102,IBCI7,?108,$J($FN(IBCI8,",",0),6),?116,IBCIX,! | 
|---|
|  | 175 | Q | 
|---|
|  | 176 | XIT ; one exit point | 
|---|
|  | 177 | Q | 
|---|