| 1 | IBOBL ;ALB/ARH - LIST ALL BILLS FOR AN EPISODE OF CARE ; 25-MAY-90
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**80,106**;21-MAR-94
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | EN ;get parameters then run the report
 | 
|---|
| 5 |  D HOME^%ZIS N IBASK,IBCANC,IBX W !!,"Episode of Care Bill List:",!,"--------------------------"
 | 
|---|
| 6 |  W !,"Enter a Bill Number to get a list of all bills that match the selected bill's",!,"event date or any of it's outpatient visit dates."
 | 
|---|
| 7 |  W !,"Enter a Patient Name and Episode Date to get a list of all bills for a patient",!,"that have either that date as the event date or as an outpatient visit date."
 | 
|---|
| 8 |  W !,"This report also includes bills related as continuing episodes of care."
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  S IBASK=$$PB^IBJTU2 Q:IBASK'>0  W !
 | 
|---|
| 11 |  I +IBASK=1 S IBX=$$GETDT^IBCRU1("","Episode Date") Q:IBX'?7N  S IBASK=IBASK_U_IBX W !
 | 
|---|
| 12 |  S IBADDCPT=$$CPT Q:IBADDCPT<0
 | 
|---|
| 13 |  S IBCANC=$$CANC Q:IBCANC<0  W !
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 | DEV ;get the device
 | 
|---|
| 16 |  W !,"Report requires 132 columns."
 | 
|---|
| 17 |  S %ZIS="QM",%ZIS("A")="OUTPUT DEVICE: " D ^%ZIS G:POP EXIT
 | 
|---|
| 18 |  I $D(IO("Q")) S ZTRTN="RPT^IBOBL",ZTDESC="Episode of Care Bill List",ZTSAVE("IB*")="" D ^%ZTLOAD K IO("Q") G EXIT
 | 
|---|
| 19 |  U IO
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | RPT ;find, save, and print the data that satisfies the search parameters
 | 
|---|
| 22 |  ;entry point for tasked jobs
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  K ^TMP($J,"IBOBL") I '$G(IBASK) G EXIT
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  D FIND
 | 
|---|
| 27 |  D PRINT
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 | EXIT ;clean up and quit
 | 
|---|
| 30 |  K ^TMP($J,"IBOBL"),IBASK,IBADDCPT,IBCANC,IBX Q:$D(ZTQUEUED)
 | 
|---|
| 31 |  D ^%ZISC
 | 
|---|
| 32 |  Q
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 | FIND ; compile list of all related bills
 | 
|---|
| 35 |  N IBIFN,IB0,DFN,IBEPDT,IBX
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 |  ; compile list of related bills based on event date and opt visit dates of selected bill
 | 
|---|
| 38 |  I +IBASK=2 S IBIFN=+$P(IBASK,U,2),IB0=$G(^DGCR(399,IBIFN,0)) D
 | 
|---|
| 39 |  . S DFN=$P(IB0,U,2),IBEPDT=$P(IB0,U,3) D FIND1(DFN,IBEPDT)
 | 
|---|
| 40 |  . S IBX=0 F  S IBX=$O(^DGCR(399,+IBIFN,"OP",IBX)) Q:'IBX  D
 | 
|---|
| 41 |  .. S IBEPDT=+$G(^DGCR(399,+IBIFN,"OP",IBX,0)) Q:'IBEPDT  D FIND1(DFN,IBEPDT)
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  ; compile list of related bills based on selected patient and episode date
 | 
|---|
| 44 |  I +IBASK=1 S DFN=$P(IBASK,U,2),IBEPDT=$P(IBASK,U,3) D FIND1(DFN,IBEPDT)
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 |  D FIND2 ; compile list of bills based on Primary Bill link with bills already found
 | 
|---|
| 47 |  Q
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 | FIND1(DFN,IBEPDT) ; find all bills for a patient with a specific event date or opt visit date
 | 
|---|
| 50 |  N IBX,IBIFN,IBDT S IBEPDT=IBEPDT\1
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  ; find all bills for patient with episode date as outpatient visit date
 | 
|---|
| 53 |  S IBDT=IBEPDT-.0001 F  S IBDT=$O(^DGCR(399,"AOPV",DFN,IBDT)) Q:((IBDT\1)'=IBEPDT)  D
 | 
|---|
| 54 |  . S IBIFN=0 F  S IBIFN=$O(^DGCR(399,"AOPV",DFN,IBDT,IBIFN)) Q:'IBIFN  D
 | 
|---|
| 55 |  .. S IBX=$G(^DGCR(399,IBIFN,0)) I IBX="" Q
 | 
|---|
| 56 |  .. S ^TMP($J,"IBOBL","BILL",IBIFN)=""
 | 
|---|
| 57 |  .. I +$P(IBX,U,17) S ^TMP($J,"IBOBL","BILL",+$P(IBX,U,17))=""
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  ; find all bills for patient with episode date as Event Date
 | 
|---|
| 60 |  S IBDT=IBEPDT-.00001 F  S IBDT=$O(^DGCR(399,"D",IBDT)) Q:((IBDT\1)'=IBEPDT)  D
 | 
|---|
| 61 |  . S IBIFN=0 F  S IBIFN=$O(^DGCR(399,"D",IBDT,IBIFN)) Q:'IBIFN  D
 | 
|---|
| 62 |  .. S IBX=$G(^DGCR(399,IBIFN,0)) I $P(IBX,U,2)'=DFN Q
 | 
|---|
| 63 |  .. S ^TMP($J,"IBOBL","BILL",IBIFN)=""
 | 
|---|
| 64 |  .. I +$P(IBX,U,17) S ^TMP($J,"IBOBL","BILL",+$P(IBX,U,17))=""
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  Q
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 | FIND2 ; compile list of related bills based on Primary Bill of bills already found
 | 
|---|
| 69 |  N IBBILL,IBIFN,IBX
 | 
|---|
| 70 |  S IBBILL=0 F  S IBBILL=$O(^TMP($J,"IBOBL","BILL",IBBILL)) Q:'IBBILL  D
 | 
|---|
| 71 |  . S IBIFN=0 F  S IBIFN=$O(^DGCR(399,"AC",IBBILL,IBIFN)) Q:'IBIFN  D
 | 
|---|
| 72 |  .. S IBX=$G(^DGCR(399,IBIFN,0)) I IBX="" Q
 | 
|---|
| 73 |  .. S ^TMP($J,"IBOBL","BILL",IBIFN)=""
 | 
|---|
| 74 |  Q
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 | PRINT ;print the report from the temp sort file to the appropriate device
 | 
|---|
| 77 |  N IBPGN,IBQUIT,IBLN,IBHDR1,IBHDR2,IBIFN
 | 
|---|
| 78 |  S IBPGN=0,IBQUIT=0 D HDRLNS,HDR Q:IBQUIT
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  S IBIFN=0 F  S IBIFN=$O(^TMP($J,"IBOBL","BILL",IBIFN)) Q:'IBIFN  D  Q:$$LNCHK(2)
 | 
|---|
| 81 |  . I '$G(IBCANC),$P($G(^DGCR(399,+IBIFN,0)),U,13)=7 Q
 | 
|---|
| 82 |  . D PRTLN(IBIFN,IBADDCPT)
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 |  I 'IBQUIT D PAUSE
 | 
|---|
| 85 |  Q
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 | PRTLN(IBIFN,IBADDCPT) ; print one bill with all it's CPTs
 | 
|---|
| 88 |  N IB0,IBU,IBM,IBMP,IBX,IBCPT S IBLN=IBLN+1
 | 
|---|
| 89 |  S IB0=$G(^DGCR(399,+$G(IBIFN),0)) Q:IB0=""  S IBU=$G(^DGCR(399,IBIFN,"U"))
 | 
|---|
| 90 |  S IBM=$G(^DGCR(399,IBIFN,"M")),IBMP=$G(^DGCR(399,IBIFN,"MP"))
 | 
|---|
| 91 |  W !,$P(IB0,U,1),?12,$P($G(^DGCR(399.3,+$P(IB0,U,7),0)),U,4) S IBX=$P(IB0,U,5)
 | 
|---|
| 92 |  W ?24,$S(IBX=1:"INPT",IBX=2:"INPT-H",IBX=3:"OPT",IBX=4:"OPT-H",1:"") S IBX=$P(IB0,U,27)
 | 
|---|
| 93 |  W ?32,$S(IBX=1:"INST",IBX=2:"PROF",1:"")
 | 
|---|
| 94 |  W ?39,$$DATE(+$P(IB0,U,3)),?49,$$DATE(+IBU),?59,$$DATE(+$P(IBU,U,2))
 | 
|---|
| 95 |  W ?70,$P($$ARSTATA^IBJTU4(IBIFN),U,2) S IBX=$P(IB0,U,21)
 | 
|---|
| 96 |  W ?75,$S(IBX="P":"PRIM",IBX="S":"SEC",IBX="T":"TER",IBX="A":"PAT",1:"") S IBX=$P(IB0,U,11)
 | 
|---|
| 97 |  W ?82,$E($S(IBX="i":$P($G(^DIC(36,+IBMP,0)),U,1),IBX="o":$P($G(^DIC(4,+$P(IBM,U,11),0)),U,1),IBX="p":$P($G(^DPT(+$P(IB0,U,2),0)),U,1),1:""),1,23)
 | 
|---|
| 98 |  W ?107,$J(+$P($$BILL^RCJIBFN2(IBIFN),U,1),10,2)
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 |  I 'IBADDCPT W ! Q
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 |  S IBX=0 F  S IBX=$O(^DGCR(399,IBIFN,"CP",IBX)) Q:'IBX  D
 | 
|---|
| 103 |  . S IBCPT=$P($G(^DGCR(399,IBIFN,"CP",IBX,0)),U,1) I IBCPT["ICPT" S IBCPT(+IBCPT)=+$G(IBCPT(+IBCPT))+1
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 |  S IBCPT="" F  S IBCPT=$O(IBCPT(IBCPT)) Q:'IBCPT  D  Q:$$LNCHK(1)
 | 
|---|
| 106 |  . S IBX=+IBCPT(IBCPT) W ?120,$P($$CPT^ICPTCOD(+IBCPT),U,2),?127,$S(IBX'=1:"("_IBX_")",1:""),! S IBLN=IBLN+1
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  Q
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 | HDR ;print the report header
 | 
|---|
| 111 |  N IBNOW,IBI
 | 
|---|
| 112 |  S IBQUIT=$$STOP Q:IBQUIT  S IBPGN=IBPGN+1,IBLN=7
 | 
|---|
| 113 |  S IBNOW=$$FMTE^XLFDT($$NOW^XLFDT),IBNOW=$P(IBNOW,"@",1)_"  "_$P($P(IBNOW,"@",2),":",1,2)
 | 
|---|
| 114 |  I IBPGN>1!($E(IOST,1,2)["C-") W @IOF
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  W !,IBHDR1,?(IOM-30),IBNOW,?(IOM-8),"PAGE ",IBPGN,!,IBHDR2
 | 
|---|
| 117 |  W !,"BILL #",?12,"RATE",?24,"CLASSIFICATION",?39,"EVENT",?49,"FROM",?59,"TO",?70,"AR",?75,"COB",?82,"PAYER",?112,"TOTAL",?120,"CPT'S",!
 | 
|---|
| 118 |  S IBI="",$P(IBI,"-",IOM+1)="" W IBI
 | 
|---|
| 119 |  W !
 | 
|---|
| 120 |  Q
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 | HDRLNS ; set up header lines
 | 
|---|
| 123 |  N DFN,IBX S DFN=0
 | 
|---|
| 124 |  S IBHDR1="EPISODE OF CARE BILL LIST FOR "
 | 
|---|
| 125 |  I +IBASK=1 S IBHDR1=IBHDR1_$P($G(^DPT(+$P(IBASK,U,2),0)),U,1)_" ON "_$$DATE(+$P(IBASK,U,3)) S DFN=+$P(IBASK,U,2)
 | 
|---|
| 126 |  I +IBASK=2 S IBX=$G(^DGCR(399,+$P(IBASK,U,2),0)),IBHDR1=IBHDR1_$P(IBX,U,1) S DFN=+$P(IBX,U,2)
 | 
|---|
| 127 |  S IBX=$G(^DPT(DFN,0)) S IBHDR2=$P(IBX,U,1)_$J("",10)_$E(IBX)_$P($$PT^IBEFUNC(DFN),U,3)_$J("",10)_"DOB: "_$$DATE($P(IBX,U,3))
 | 
|---|
| 128 |  Q
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 | DATE(X) ;
 | 
|---|
| 131 |  Q $E(X,4,5)_"/"_$E(X,6,7)_"/"_$E(X,2,3)
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 | LNCHK(LNS) ; check if new page is needed
 | 
|---|
| 134 |  I 'IBQUIT,IBLN>(IOSL-LNS) D PAUSE I 'IBQUIT D HDR
 | 
|---|
| 135 |  Q IBQUIT
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 | PAUSE ;pause at end of screen if beeing displayed on a terminal
 | 
|---|
| 138 |  Q:$E(IOST,1,2)'["C-"  N DIR,DUOUT,DTOUT,DIRUT
 | 
|---|
| 139 |  S DIR(0)="E" D ^DIR K DIR
 | 
|---|
| 140 |  I $D(DUOUT)!($D(DIRUT)) S IBQUIT=1
 | 
|---|
| 141 |  Q
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 | STOP() ;determine if user has requested the queued report to stop
 | 
|---|
| 144 |  I $D(ZTQUEUED),$$S^%ZTLOAD S ZTSTOP=1 K ZTREQ I +$G(IBPGN) W !,"***TASK STOPPED BY USER***"
 | 
|---|
| 145 |  Q +$G(ZTSTOP)
 | 
|---|
| 146 |  ;
 | 
|---|
| 147 | CPT() ; return true if include bills CPT procedures
 | 
|---|
| 148 |  N IBX,DIR,DTOUT,DUOUT,DIRUT,X,Y S IBX=0
 | 
|---|
| 149 |  S DIR("?")="Enter either 'Y' or 'N'.  Enter 'Y' if you want the CPT procedures for each bill included in the report."
 | 
|---|
| 150 |  S DIR("A")="Include CPT Procedures",DIR(0)="Y",DIR("B")="No" D ^DIR K DIR S:Y=1 IBX=1 I $D(DIRUT) S IBX=-1
 | 
|---|
| 151 |  Q IBX
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 | CANC() ; return true if include canceled bills
 | 
|---|
| 154 |  N IBX,DIR,DTOUT,DUOUT,DIRUT,X,Y S IBX=0
 | 
|---|
| 155 |  S DIR("?")="Enter either 'Y' or 'N'.  Enter 'Y' if you want cancelled bills included in the report."
 | 
|---|
| 156 |  S DIR("A")="Include Cancelled Bills",DIR(0)="Y",DIR("B")="No" D ^DIR K DIR S:Y=1 IBX=1 I $D(DIRUT) S IBX=-1
 | 
|---|
| 157 |  Q IBX
 | 
|---|