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