| 1 | RCDPEAC ;ALB/TMK - ACTIVE BILLS WITH EEOB ON FILE ;27-JAN-2004
 | 
|---|
| 2 |  ;;4.5;Accounts Receivable;**208**;Mar 20, 1995
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | EN ; Entrypoint for producing the report
 | 
|---|
| 5 |  N RCSORT,RCINS,ZTRTN,ZTDESC,ZTSAVE,ZTSK,%ZIS,POP
 | 
|---|
| 6 |  Q:'$$SELECT(.RCINS,.RCSORT)
 | 
|---|
| 7 |  W !
 | 
|---|
| 8 |  S %ZIS="QM" D ^%ZIS Q:POP
 | 
|---|
| 9 |  I $D(IO("Q")) D  Q
 | 
|---|
| 10 |  . S ZTRTN="ENQ^RCDPEAC",ZTDESC="AR - ACTIVE BILLS WITH EEOB REPORT",ZTSAVE("RCINS")="",ZTSAVE("RCSORT")="",ZTSAVE("RCINS(")=""
 | 
|---|
| 11 |  . D ^%ZTLOAD
 | 
|---|
| 12 |  . W !!,$S($D(ZTSK):"Your task number"_ZTSK_" has been queued.",1:"Unable to queue this job.")
 | 
|---|
| 13 |  . K ZTSK,IO("Q") D HOME^%ZIS
 | 
|---|
| 14 |  U IO
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 | ENQ ; Queued entrypoint for the report
 | 
|---|
| 17 |  ; RCSORT and array RCINS must exist
 | 
|---|
| 18 |  ; RCINS = "A" for all ins co, "R" for range, "S" for selected individual
 | 
|---|
| 19 |  ;         for RCINS="R"  ("FR")=from payer name and ("TR")=to payer name
 | 
|---|
| 20 |  ;         for RCINS="S"  ("S",INS CO IEN IN FILE 36)=""
 | 
|---|
| 21 |  ; RCSORT = "PN" for sort by patient name followed by ;- if reverse order
 | 
|---|
| 22 |  ;          "L4" for sort by patient SSN followed by ;- if reverse order
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  N Z,Z0,RCACT,RCBILL,RCEOB,RCTOT,RCSTOP,RCNEW,RCZ,RCZ0
 | 
|---|
| 25 |  K ^TMP($J,"RCSORT")
 | 
|---|
| 26 |  S RCACT=+$O(^PRCA(430.3,"AC",102,0)) ; Get active status ien
 | 
|---|
| 27 |  G:'RCACT ENOUT
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  S RCBILL=0
 | 
|---|
| 30 |  F  S RCBILL=$O(^PRCA(430,"AC",RCACT,RCBILL)) Q:RCBILL=""  I +$G(^PRCA(430,RCBILL,7))>0,$$INCLUDE(.RCINS,RCBILL),$$EEOB(RCBILL,.RCEOB) D
 | 
|---|
| 31 |  . S (RCTOT,RCEOB)=0 F  S RCEOB=$O(RCEOB(RCEOB)) Q:'RCEOB  S RCTOT=RCTOT+$G(^IBM(361.1,RCEOB,1)),^TMP($J,"RCSORT",$$INSNM(RCBILL),$$SL1(RCSORT,RCBILL),RCBILL,+RCEOB(RCEOB),RCEOB)=""
 | 
|---|
| 32 |  . I $O(RCEOB(0)) S ^TMP($J,"RCSORT",$$INSNM(RCBILL),$$SL1(RCSORT,RCBILL),RCBILL)=RCTOT
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 |  S RCZ="",(RCPG,RCSTOP,RCNEW)=0
 | 
|---|
| 35 |  F  S RCZ=$O(^TMP($J,"RCSORT",RCZ)) Q:RCZ=""!RCSTOP  S RCZ0="" S:$G(RCINS)="R"!($G(RCINS)="S") RCNEW=1 D
 | 
|---|
| 36 |  . I RCSORT'["-" D
 | 
|---|
| 37 |  .. S RCZ0="" F  S RCZ0=$O(^TMP($J,"RCSORT",RCZ,RCZ0)) Q:RCZ0=""!RCSTOP  D OUTPUT(RCZ,RCZ0,RCSORT,.RCSTOP,.RCINS,.RCPG,RCNEW) S RCNEW=0
 | 
|---|
| 38 |  . I RCSORT["-" D
 | 
|---|
| 39 |  .. S RCZ0="" F  S RCZ0=$O(^TMP($J,"RCSORT",RCZ,RCZ0),-1) Q:RCZ0=""!RCSTOP  D OUTPUT(RCZ,RCZ0,RCSORT,.RCSTOP,.RCINS,.RCPG,.RCNEW) S RCNEW=0
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  I 'RCSTOP,RCPG D ASK(.RCSTOP)
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 | ENOUT I $D(ZTQUEUED) S ZTREQ="@"
 | 
|---|
| 44 |  I '$D(ZTQUEUED) D ^%ZISC
 | 
|---|
| 45 |  K ^TMP($J,"RCSORT")
 | 
|---|
| 46 |  Q
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 | OUTPUT(RCZ,RCZ0,RCSORT,RCSTOP,RCINS,RCPG,RCNEW) ; Output the data
 | 
|---|
| 49 |  ; RCZ, RCZ0 are the first 2 sort levels for the array
 | 
|---|
| 50 |  ; RCINS = insurance co info array
 | 
|---|
| 51 |  ; RCSTOP passed by ref - returned if user chooses to stop
 | 
|---|
| 52 |  ; RCNEW = 1 if the header should be forced to print
 | 
|---|
| 53 |  N RCZ1,RCBILL,RC399,RCPT,RC430,RC0,RCEOB,X,Y
 | 
|---|
| 54 |  S RCBILL=0 F  S RCBILL=$O(^TMP($J,"RCSORT",RCZ,RCZ0,RCBILL)) Q:'RCBILL!RCSTOP  S RCZ1="" F  S RCZ1=$O(^TMP($J,"RCSORT",RCZ,RCZ0,RCBILL,RCZ1)) Q:RCZ1=""!RCSTOP  D
 | 
|---|
| 55 |  . I $D(ZTQUEUED),$$S^%ZTLOAD S (RCSTOP,ZTSTOP)=1 K ZTREQ I +$G(RCPG) W !!,"***TASK STOPPED BY USER***" Q
 | 
|---|
| 56 |  . S RCSTOP=$$NEWPG(.RCPG,.RCINS,RCNEW) S RCNEW=0
 | 
|---|
| 57 |  . Q:RCSTOP
 | 
|---|
| 58 |  . S RC399=$G(^DGCR(399,RCBILL,0)),RCPT=+$P(RC399,U,2),RC430=$G(^PRCA(430,RCBILL,0))
 | 
|---|
| 59 |  . S RCSTOP=$$NEWPG(.RCPG,.RCINS,RCNEW) Q:RCSTOP
 | 
|---|
| 60 |  . S X=$$GET1^DIQ(430,RCBILL_",",11)
 | 
|---|
| 61 |  . W !,$E($P(RC399,U)_$J("",8),1,8)_"  "_$E($P($G(^DPT(RCPT,0)),U)_$J("",25),1,25)_"  "_$E($P($G(^DPT(RCPT,0)),U,9)_$J("",10),1,10)_"  ",$E($$INSNM(RCBILL)_$J("",30),1,30)
 | 
|---|
| 62 |  . W !,$J("",8)_$E($J(+$P(RC430,U,3),"",2)_$J("",13),1,13)_"  "_$E($J(+$G(^TMP($J,"RCSORT",RCZ,RCZ0,RCBILL)),"",2)_$J("",13),1,13)_"  "_$E($J(+X,"",2)_$J("",12),1,12)
 | 
|---|
| 63 |  . I $P($G(^PRCA(430,RCBILL,6)),U,4) W "  "_$$FMTE^XLFDT($P(^PRCA(430,RCBILL,6),U,4),2)
 | 
|---|
| 64 |  . S RCEOB=0 F  S RCEOB=$O(^TMP($J,"RCSORT",RCZ,RCZ0,RCBILL,RCZ1,RCEOB)) Q:'RCEOB!RCSTOP  D
 | 
|---|
| 65 |  .. S RCSTOP=$$NEWPG(.RCPG,.RCINS,RCNEW)
 | 
|---|
| 66 |  .. Q:RCSTOP
 | 
|---|
| 67 |  .. S RC0=$G(^IBM(361.1,RCEOB,0))
 | 
|---|
| 68 |  .. S RCSTOP=$$NEWPG(.RCPG,.RCINS,RCNEW) Q:RCSTOP
 | 
|---|
| 69 |  .. W !,?10,$E($P(RC0,U,7)_$J("",27),1,27)_"  "_$E($$FMTE^XLFDT($P(RC0,U,5),"2D")_$J("",8),1,8)_" "_$E($$FMTE^XLFDT($P(RC0,U,6),"2D")_$J("",8),1,8)_" "_$E($S(RCZ1:$$FMTE^XLFDT(RCZ1,"2D"),1:"")_$J("",8),1,8)
 | 
|---|
| 70 |  .. W " "_$J(+$G(^IBM(361.1,RCEOB,1)),"",2)
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  Q
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 | INCLUDE(RCINS,RCZ) ; Function returns 1 if record should be included based
 | 
|---|
| 75 |  ; on ins co
 | 
|---|
| 76 |  ; RCINS = array containing insurance co information
 | 
|---|
| 77 |  ; RCZ = ien of the entry in file 430
 | 
|---|
| 78 |  N OK,RCI,RCINM
 | 
|---|
| 79 |  S OK=0
 | 
|---|
| 80 |  S RCI=+$$INS(RCZ)
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  I 'RCI G INCQ ; Not a third party bill
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 |  I RCINS="A" S OK=1
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  I RCINS="S"!(RCINS="R") D
 | 
|---|
| 87 |  . I RCINS="S" S:$D(RCINS("S",RCI)) OK=1 Q
 | 
|---|
| 88 |  . S RCINM=$$INSNM(RCZ) ; INS CO NAME
 | 
|---|
| 89 |  . I $S(RCINM=RCINS("FR")!(RCINM]RCINS("FR")):RCINM']RCINS("TO"),1:0) S OK=1
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 | INCQ Q OK
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 | INSNM(RCZ) ; Returns the name of the insurance co for bill ien RCZ file 430
 | 
|---|
| 94 |  N NM
 | 
|---|
| 95 |  S NM=$P($G(^DIC(36,+$$INS(RCZ),0)),U)
 | 
|---|
| 96 |  Q NM
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 | INS(RCZ) ; Returns ien of insurance co for bill ien RCZ from file 430
 | 
|---|
| 99 |  N RC
 | 
|---|
| 100 |  S RC=$P($G(^PRCA(430,RCZ,0)),U,9) ;DEBTOR
 | 
|---|
| 101 |  Q $S($P($G(^RCD(340,+RC,0)),U)'["DIC(36":"",1:+^(0))
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 | NEWPG(RCPG,RCINS,RCNEW) ; Check for new page needed, output header
 | 
|---|
| 104 |  ; RCINS = ins co selection criteria
 | 
|---|
| 105 |  ; RCNEW = 1 to force new page
 | 
|---|
| 106 |  ; Function returns 1 if user chooses to stop output
 | 
|---|
| 107 |  I RCNEW!'RCPG!(($Y+5)>IOSL) D
 | 
|---|
| 108 |  . D:RCPG ASK(.RCSTOP) I RCSTOP Q
 | 
|---|
| 109 |  . D HDR(.RCPG,.RCINS)
 | 
|---|
| 110 |  Q RCSTOP
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 | EEOB(RCZ,RCEOB) ; Find all non-MRA  EEOBs for bill ien RCZ
 | 
|---|
| 113 |  ; Function returns 1 if any valid EEOBs found, 0 if none
 | 
|---|
| 114 |  ; RCEOB(eob ien)=date posted returned for valid EEOBs found -
 | 
|---|
| 115 |  ;                pass by reference
 | 
|---|
| 116 |  N OK,Z
 | 
|---|
| 117 |  K RCEOB
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 |  S OK=0
 | 
|---|
| 120 |  S Z=0 F  S Z=$O(^IBM(361.1,"B",RCZ,Z)) Q:'Z  I $P($G(^IBM(361.1,Z,0)),U,4)'=1 D
 | 
|---|
| 121 |  . N Z0,Z1,Z00
 | 
|---|
| 122 |  . S Z0=+$O(^RCY(344.4,"ADET",Z,0)) ; ERA entry received in
 | 
|---|
| 123 |  . S Z1=+$P($G(^RCY(344.4,Z0,0)),U,8) ; Receipt
 | 
|---|
| 124 |  . S Z00=$P($G(^RCY(344.4,Z0,0)),U,14)
 | 
|---|
| 125 |  . I Z1,$S(Z00=1!(Z00=2):1,1:0) S RCEOB(Z)=+$P($G(^RCY(344,Z1,0)),U,8),OK=1
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 |  Q OK
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | SL1(RCSORT,RCZ) ; Function returns 1st sort level data from ien RCZ in file 430
 | 
|---|
| 130 |  ; RCSORT = "PN" for patient name sort = "L4" for SSN last 4 sort
 | 
|---|
| 131 |  N DAT
 | 
|---|
| 132 |  I RCSORT="PN" S DAT=$P($G(^DPT(+$P($G(^PRCA(430,RCZ,0)),U,7),0)),U)
 | 
|---|
| 133 |  I RCSORT="L4" S DAT=$P($G(^DPT(+$P($G(^PRCA(430,RCZ,0)),U,7),0)),U,9),DAT=$E(DAT,$L(DAT)-3,$L(DAT))
 | 
|---|
| 134 |  Q $S($G(DAT)'="":DAT,1:" ")
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 | SELECT(RCINS,RCSORT) ; Select insurance co and sort criteria
 | 
|---|
| 137 |  ; Function returns values selected for RCSORT and RCINS - passed by ref
 | 
|---|
| 138 |  N RCQUIT,DONE,DIR,X,Y
 | 
|---|
| 139 |  S (RCQUIT,DONE)=0
 | 
|---|
| 140 |  S DIR(0)="SA^A:ALL;S:SPECIFIC;R:RANGE",DIR("A")="RUN REPORT FOR (A)LL, (S)PECIFIC, OR (R)ANGE OF INSURANCE COMPANIES?: ",DIR("B")="ALL" W ! D ^DIR K DIR
 | 
|---|
| 141 |  I $D(DTOUT)!$D(DUOUT) G SELQ
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 |  S RCINS=Y
 | 
|---|
| 144 |  I RCINS="S" D  G:RCQUIT SELQ
 | 
|---|
| 145 |  . W !
 | 
|---|
| 146 |  . F  D LIST(.DIR,.RCINS) S DIR("A")="SELECT "_$S($O(RCINS("S",0)):"ANOTHER ",1:"")_"INSURANCE COMPANY"_$S($O(RCINS("S",0)):" (PRESS RETURN WHEN DONE)",1:"")_": ",DIR(0)="PAO^DIC(36,:AEMQ" D ^DIR K DIR D  Q:Y'>0
 | 
|---|
| 147 |  .. I $D(DTOUT)!$D(DUOUT) S RCQUIT=1 Q
 | 
|---|
| 148 |  .. I Y>0 S RCINS("S",+Y)=""
 | 
|---|
| 149 |  . I '$O(RCINS("S",0)) S RCQUIT=1 W !!,"NO INSURANCE COMPANIES SELECTED - NO REPORT GENERATED" S DIR(0)="E" D ^DIR K DIR
 | 
|---|
| 150 |  ;
 | 
|---|
| 151 |  I RCINS="R" D  I RCQUIT W !!,"NO INSURANCE COMPANY NAME RANGE SELECTED - NO REPORT GENERATED" S DIR(0)="E" D ^DIR K DIR G SELQ
 | 
|---|
| 152 |  . W !
 | 
|---|
| 153 |  . S DIR("?")="ENTER 1-30 UPPERCASE CHARACTERS OF THE FIRST NAME TO INCLUDE"
 | 
|---|
| 154 |  . S DIR(0)="FA^1:30^K:X'?.U X",DIR("A")="START WITH INSURANCE COMPANY NAME: " D ^DIR K DIR
 | 
|---|
| 155 |  . I $D(DTOUT)!$D(DUOUT) S RCQUIT=1 Q
 | 
|---|
| 156 |  . S RCINS("FR")=Y
 | 
|---|
| 157 |  . S DIR("?")="ENTER 1-30 UPPERCASE CHARACTERS OF THE LAST NAME TO INCLUDE"
 | 
|---|
| 158 |  . S DIR(0)="FA^1:30^K:X'?.U X",DIR("A")="GO TO INSURANCE COMPANY NAME: ",DIR("B")=$E(RCINS("FR"),1,27)_"ZZZ"
 | 
|---|
| 159 |  . F  W ! D ^DIR Q:$S($D(DTOUT)!$D(DUOUT):1,1:RCINS("FR")']Y)  W !,"'GO TO' NAME MUST COME AFTER 'START WITH' NAME"
 | 
|---|
| 160 |  . K DIR
 | 
|---|
| 161 |  . I $D(DTOUT)!$D(DUOUT) S RCQUIT=1 Q
 | 
|---|
| 162 |  . S RCINS("TO")=Y
 | 
|---|
| 163 |  S DIR(0)="SA^P:PATIENT NAME;L:LAST 4 OF PATIENT SSN",DIR("A")="WITHIN INS CO, SORT BY (P)ATIENT NAME OR (L)AST 4 OF SSN?: ",DIR("B")="PATIENT NAME" W ! D ^DIR K DIR
 | 
|---|
| 164 |  I $D(DTOUT)!$D(DUOUT) G SELQ
 | 
|---|
| 165 |  S RCSORT=$S(Y="P":"PN",1:"L4")
 | 
|---|
| 166 |  S DIR(0)="SA^F:FIRST TO LAST;L:LAST TO FIRST",DIR("A")="SORT "_$S(RCSORT="PN":"PATIENT NAME",1:"LAST 4")_" (F)IRST TO LAST OR (L)AST TO FIRST?: ",DIR("B")="FIRST TO LAST" D ^DIR K DIR
 | 
|---|
| 167 |  I $D(DTOUT)!$D(DUOUT) G SELQ
 | 
|---|
| 168 |  I Y="L" S RCSORT=RCSORT_";-"
 | 
|---|
| 169 |  S DONE=1
 | 
|---|
| 170 |  ;
 | 
|---|
| 171 | SELQ Q DONE
 | 
|---|
| 172 |  ;
 | 
|---|
| 173 | LIST(DIR,RCINS) ; Sets up help array for ins co selected in DIR("?")
 | 
|---|
| 174 |  N CT,Z
 | 
|---|
| 175 |  S CT=1
 | 
|---|
| 176 |  I '$O(RCINS("S",0)) S DIR("?")="NO INSURANCE COMPANIES SELECTED" Q
 | 
|---|
| 177 |  S DIR("?",1)="INSURANCE COMPANIES ALREADY SELECTED:"
 | 
|---|
| 178 |  S Z=0 F  S Z=$O(RCINS("S",Z)) Q:'Z  S CT=CT+1,DIR("?",CT)="   "_$P($G(^DIC(36,Z,0)),U)
 | 
|---|
| 179 |  S DIR("?")=" "
 | 
|---|
| 180 |  Q
 | 
|---|
| 181 |  ;
 | 
|---|
| 182 | HDR(RCPG,RCINS) ;Print report hdr
 | 
|---|
| 183 |  ; RCPG = last page #
 | 
|---|
| 184 |  N Z,Z0,X
 | 
|---|
| 185 |  I RCPG!($E(IOST,1,2)="C-") W @IOF,*13
 | 
|---|
| 186 |  S RCPG=$G(RCPG)+1
 | 
|---|
| 187 |  W !,?5,"EDI LOCKBOX ACTIVE BILLS W/EEOB REPORT",?55,$$FMTE^XLFDT(DT,2),?70,"Page: ",RCPG
 | 
|---|
| 188 |  W !!,"INSURANCE SELECTED: "_$S(RCINS="A":"ALL",RCINS="R":"RANGE FROM "_RCINS("FR")_"-"_RCINS("TO"),1:"")
 | 
|---|
| 189 |  S Z0=""
 | 
|---|
| 190 |  I RCINS="S" S Z=0,Z0="" F  S Z=$O(RCINS("S",Z)) Q:'Z  S X=$P($G(^DIC(36,Z,0)),U) D
 | 
|---|
| 191 |  . I $L(Z0)+$L(X)>79 W Z0 S Z0="" W !
 | 
|---|
| 192 |  . S Z0=Z0_$S(Z0'="":",",1:"")_X
 | 
|---|
| 193 |  I Z0'="" W Z0
 | 
|---|
| 194 |  W !!,"BILL #    PATIENT NAME              SSN         INS CO NAME"
 | 
|---|
| 195 |  W !,"        AMOUNT BILLED  AMOUNT PAID    BALANCE       DT REFERRED REG COUNSEL"
 | 
|---|
| 196 |  W !!,?10,"TRACE #"_$J("",22)_"DT REC'D DT PAID  DT POST  AMOUNT PAID"
 | 
|---|
| 197 |  W !,$TR($J("",IOM)," ","=")
 | 
|---|
| 198 |  Q
 | 
|---|
| 199 |  ;
 | 
|---|
| 200 | ASK(RCSTOP) ;
 | 
|---|
| 201 |  I $E(IOST,1,2)'["C-" Q
 | 
|---|
| 202 |  N DIR,DIROUT,DIRUT,DTOUT,DUOUT
 | 
|---|
| 203 |  S DIR(0)="E" W ! D ^DIR
 | 
|---|
| 204 |  I ($D(DIRUT))!($D(DUOUT)) S RCSTOP=1 Q
 | 
|---|
| 205 |  Q
 | 
|---|
| 206 |  ;
 | 
|---|