| 1 | IBAECP1 ;WOIFO/AAT-LTC SINGLE PATIENT PROFILE ; 20-FEB-02
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**176**;21-MAR-94
 | 
|---|
| 3 |  ;; Per VHA Directive 10-93-142, this routine should not be modified
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  Q
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  ; Prints report to the current device
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ; Input:
 | 
|---|
| 10 |  ;   IBDFN - Patient IEN
 | 
|---|
| 11 |  ;   IBCLK - LTC Copay Billing Clock IEN
 | 
|---|
| 12 |  ;   IBDT1 - Beginning date
 | 
|---|
| 13 |  ;   IBDT2 - Ending date
 | 
|---|
| 14 |  ;   IBOFD - Option: print free (exempt) days list
 | 
|---|
| 15 |  ;   IBOEV - Option: print LTC events
 | 
|---|
| 16 |  ; Output:
 | 
|---|
| 17 |  ;   IBQUIT = 1, if user entered "^" (Devices starting with "C-" only)
 | 
|---|
| 18 | REPORT ;
 | 
|---|
| 19 |  N IBDT,IBDTE,IBDTH,IBCR,IBDA,IBX,IBAT,IBTMP,IBZ,IBCL
 | 
|---|
| 20 |  S IBQUIT=0
 | 
|---|
| 21 |  S IBTMP=$NA(^TMP($J,"IBAECP")) ; The node of TMP array
 | 
|---|
| 22 |  K @IBTMP
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  ; Marking beginning and ending of each clock within the range.
 | 
|---|
| 25 |  ; Not including selected LTC BILLING CLOCK
 | 
|---|
| 26 |  S IBDT=0 F  D  Q:'IBDT  Q:IBDT>IBDT2
 | 
|---|
| 27 |  . S IBDT=$O(^IBA(351.81,"AE",IBDFN,IBDT)) Q:'IBDT
 | 
|---|
| 28 |  . S IBCL=0 F  D  Q:'IBCL
 | 
|---|
| 29 |  .. S IBCL=$O(^IBA(351.81,"AE",IBDFN,IBDT,IBCL)) Q:'IBCL
 | 
|---|
| 30 |  .. Q:IBCL=IBCLK  ; Don't include the selected clock to the report
 | 
|---|
| 31 |  .. S IBZ=$G(^IBA(351.81,IBCL,0)) Q:IBZ=""
 | 
|---|
| 32 |  .. I $P(IBZ,U,5)=3 Q  ; Status - FOR CANCELLED
 | 
|---|
| 33 |  .. I IBDT'<IBDT1,IBDT'>IBDT2 S @IBTMP@(IBDT,"C")=IBCL ; Mark the beginning of the clock
 | 
|---|
| 34 |  .. S IBDTE=$P(+$P(IBZ,U,4),".")
 | 
|---|
| 35 |  .. I IBDTE,IBDTE'<IBDT1,IBDTE'>IBDT2 S @IBTMP@(IBDTE,"E")=IBCL ; Mark the ending of the clock
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 |  ; Get the charges from file #350.
 | 
|---|
| 39 |  S IBDT="" F  S IBDT=$O(^IB("AFDT",IBDFN,IBDT)) Q:'IBDT  D:-IBDT'>IBDT2
 | 
|---|
| 40 |  . S IBCR=0 F  S IBCR=$O(^IB("AFDT",IBDFN,IBDT,IBCR)) Q:'IBCR  D
 | 
|---|
| 41 |  .. S IBDA=0 F  S IBDA=$O(^IB("AF",IBCR,IBDA)) Q:'IBDA  D
 | 
|---|
| 42 |  ...  Q:'$D(^IB(IBDA,0))  S IBX=^(0)
 | 
|---|
| 43 |  ...  ;;; Q:$P(IBX,U,8)["ADMISSION" ; Not sure it is needed
 | 
|---|
| 44 |  ...  I $P(IBX,U,15)<IBDT1 Q
 | 
|---|
| 45 |  ...  I $P(IBX,U,14)>IBDT2 Q
 | 
|---|
| 46 |  ...  S IBAT=$P(IBX,U,3) Q:'IBAT  ; Action type is really required
 | 
|---|
| 47 |  ...  I $$ACTNM^IBOUTL(IBAT)'["LTC " Q  ; Not an LTC action type
 | 
|---|
| 48 |  ...  S @IBTMP@(+$P(IBX,U,14),"I"_IBDA)=""
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  D PRINT
 | 
|---|
| 51 |  K @IBTMP ; Kill the global node
 | 
|---|
| 52 |  K ^TMP($J,"180DAYS")
 | 
|---|
| 53 |  K ^TMP($J,"IBMJINP")
 | 
|---|
| 54 |  K ^TMP($J,"IBMJOUT")
 | 
|---|
| 55 |  S:$D(ZTQUEUED) ZTREQ="@" ; for Taskman
 | 
|---|
| 56 |  Q
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 | PRINT ; Print report from the temp. global
 | 
|---|
| 59 |  N IBLINE,IBPAG,IBTOT,IBTOTM,IBTOTP,IBPT,IBH,IBD,IBTY,IBDA,IBDZ,IBCHG,IBSEQ,X,X2,X3,Y,%,IBCURM,IBCURY,IBCIS
 | 
|---|
| 60 |  D NOW^%DTC S IBDTH=$$FMTE^XLFDT($E(%,1,12))
 | 
|---|
| 61 |  S IBLINE="",$P(IBLINE,"=",IOM+1)="",(IBPAG,IBTOT,IBTOTM,IBQUIT,IBCHG,IBTOTP)=0
 | 
|---|
| 62 |  S IBPT=$$PT^IBEFUNC(IBDFN)
 | 
|---|
| 63 |  S IBCIS=0
 | 
|---|
| 64 |  S IBH="LTC Billing Profile for "_$P(IBPT,U)_"  "_$P(IBPT,U,2) D HDR
 | 
|---|
| 65 |  ;;; D CLKINFO ; Print brief clock info
 | 
|---|
| 66 |  I '$D(@IBTMP) W !!,"The patient has no LTC bills within the specified period" D PAUSE(1) Q
 | 
|---|
| 67 |  S (IBCURM,IBCURY)=0 ; Current month and year
 | 
|---|
| 68 |  ; - first, print detail lines
 | 
|---|
| 69 |  S IBD="" F  S IBD=$O(@IBTMP@(IBD)) Q:'IBD  D  Q:IBQUIT
 | 
|---|
| 70 |  . S IBTY="" F  S IBTY=$O(@IBTMP@(IBD,IBTY)) Q:IBTY=""  D  Q:IBQUIT
 | 
|---|
| 71 |  ..  D CHKSTOP Q:IBQUIT
 | 
|---|
| 72 |  ..  I (+$E(IBD,4,5)'=IBCURM)!(+$E(IBD,1,3)'=IBCURY) D MONTOTAL
 | 
|---|
| 73 |  ..  I IBTY="C" W !,$$DAT(IBD),?18,"Start another LTC Copay Clock" Q
 | 
|---|
| 74 |  ..  I IBTY="E" W !,$$DAT(IBD),?18,"Expire another LTC Copay Clock" Q
 | 
|---|
| 75 |  ..  ; If the month has been changed
 | 
|---|
| 76 |  ..  I +$E(IBD,4,5)'=IBCURM D PRMON(IBD) S IBTOTM=0 ; Monthly total
 | 
|---|
| 77 |  ..  W !,$$DAT(IBD)
 | 
|---|
| 78 |  ..  S IBDA=+$E(IBTY,2,99),IBDZ=$G(^IB(IBDA,0)),IBSEQ=0
 | 
|---|
| 79 |  ..  I $P(IBDZ,U,14)'=$P(IBDZ,U,15) W ?12,$$DAT($P(IBDZ,U,15))
 | 
|---|
| 80 |  ..  S IBSEQ=$P($G(^IBE(350.1,+$P(IBDZ,U,3),0)),U,5)
 | 
|---|
| 81 |  ..  W ?24,$$ACTNM^IBOUTL(+$P(IBDZ,U,3))
 | 
|---|
| 82 |  ..  W ?54,$$STAT()
 | 
|---|
| 83 |  ..  S IBCHG=+$P(IBDZ,U,7)
 | 
|---|
| 84 |  ..  I IBSEQ=2 S IBCHG=-IBCHG
 | 
|---|
| 85 |  ..  I $P(IBDZ,U,11)="",$P($G(^IBE(350.21,+$P(IBDZ,U,5),0)),U,5) S IBCHG=0
 | 
|---|
| 86 |  ..  S X=IBCHG,X2="2$",X3=10 D COMMA^%DTC W ?65,X
 | 
|---|
| 87 |  ..  S IBTOT=IBTOT+IBCHG ; Total
 | 
|---|
| 88 |  ..  S IBTOTM=IBTOTM+IBCHG ; Monthly total
 | 
|---|
| 89 |  ..  I IBSEQ=2!($P(IBDZ,U,11)=""&($P($G(^IBE(350.21,+$P(IBDZ,U,5),0)),U,5))) W !?5,"Charge Removal Reason: ",$S($D(^IBE(350.3,+$P(IBDZ,U,10),0)):$P(^(0),U),1:"UNKNOWN")
 | 
|---|
| 90 |  ..  S IBTOTP=1
 | 
|---|
| 91 |  Q:IBQUIT
 | 
|---|
| 92 |  D MONTOTAL
 | 
|---|
| 93 |  D PAUSE(1)
 | 
|---|
| 94 |  Q
 | 
|---|
| 95 | CHKSTOP I $Y>(IOSL-5) D PAUSE(0) Q:IBQUIT  D HDR
 | 
|---|
| 96 |  Q
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  ; Print month header
 | 
|---|
| 100 | PRMON(IBDT) ;
 | 
|---|
| 101 |  S IBCURM=+$E(IBDT,4,5)
 | 
|---|
| 102 |  S IBCURY=+$E(IBDT,1,3)
 | 
|---|
| 103 |  W !,"LTC CHARGES FOR ",$$MONNAM(IBCURM)," ",IBCURY+1700
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 |  Q
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 | MONNAM(IBM) ;Name of the month by number
 | 
|---|
| 108 |  Q $P("JANUARY;FEBRUARY;MARCH;APRIL;MAY;JUNE;JULY;AUGUST;SEPTEMBER;OCTOBER;NOVEMBER;DECEMBER",";",IBM)
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 |  ; Totals for the month (and monthly cap)
 | 
|---|
| 111 | MONTOTAL N X,X2,X3,IBDTM1,IBDTM2,IBCAP
 | 
|---|
| 112 |  Q:'IBTOTP
 | 
|---|
| 113 |  D CHKSTOP Q:IBQUIT
 | 
|---|
| 114 |  W !?65,"---------"
 | 
|---|
| 115 |  D CHKSTOP Q:IBQUIT
 | 
|---|
| 116 |  K ^TMP($J,"180DAYS")
 | 
|---|
| 117 |  K ^TMP($J,"IBMJINP")
 | 
|---|
| 118 |  K ^TMP($J,"IBMJOUT")
 | 
|---|
| 119 |  S IBDTM1=IBCURY_$S(IBCURM>10:IBCURM,1:"0"_IBCURM)_"01" ; First day of month
 | 
|---|
| 120 |  S IBDTM2=$$LASTDT^IBAECU(IBDTM1) ; Last day of month
 | 
|---|
| 121 |  I $$INPINFO^IBAECU2(IBDTM1,IBDTM2,IBDFN,"IBMJINP",1) ;"no inpatient stay"
 | 
|---|
| 122 |  I $$OUTPINFO^IBAECU3(IBDTM1,IBDTM2,IBDFN,"IBMJOUT") ;"no outpatient visits"
 | 
|---|
| 123 |  S IBCAP=$$CLCK180^IBAECM2(IBDFN,IBDTM1,IBDTM2,"IBMJINP")
 | 
|---|
| 124 |  ;
 | 
|---|
| 125 |  W !?5,"Monthly LTC Copay Cap: " S X=+IBCAP,X2="2$",X3=12 D COMMA^%DTC W ?25,X
 | 
|---|
| 126 |  ; Indicate 1-180 of 180+ flag
 | 
|---|
| 127 |  W " (",$S('$P(IBCAP,U,2):"1-180 days",1:"181+ days"),") "
 | 
|---|
| 128 |  S X=IBTOTM,X2="2$",X3=12 D COMMA^%DTC W ?63,X
 | 
|---|
| 129 |  I IBOEV D EVENTS
 | 
|---|
| 130 |  S IBCURM=0 ; Set current month to unknown
 | 
|---|
| 131 |  S IBTOTP=0
 | 
|---|
| 132 |  W !
 | 
|---|
| 133 |  Q
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 | HDR ; Print header.
 | 
|---|
| 136 |  N IBI
 | 
|---|
| 137 |  I $E(IOST,1,2)["C-"!(IBPAG) W @IOF,*13
 | 
|---|
| 138 |  S IBPAG=IBPAG+1 W ?(80-$L(IBH)\2),IBH
 | 
|---|
| 139 |  W !,"From ",$$DAT(IBDT1)," through ",$$DAT(IBDT2)
 | 
|---|
| 140 |  W ?IOM-36,IBDTH,?IOM-9,"Page: ",IBPAG
 | 
|---|
| 141 |  I 'IBCIS S IBCIS=1 D CLKINFO ; Print brief clock info
 | 
|---|
| 142 |  W !,"BILL DATE   BILL TO     BILL TYPE",?55,"BILL #    TOT CHARGE"
 | 
|---|
| 143 |  W ! F IBI=1:1:80 W "-"
 | 
|---|
| 144 |  Q
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 | STAT() ; Display bill number or status
 | 
|---|
| 147 |  N IBSTAT S IBSTAT=$G(^IBE(350.21,+$P(IBDZ,U,5),0))
 | 
|---|
| 148 |  Q $S($P(IBSTAT,U,6):$$HLD(+$P(IBDZ,U,5)),$P(IBDZ,U,5)=99:"Converted",$P(IBDZ,U,11)]"":$P($P(IBDZ,U,11),"-",2),$P(IBSTAT,U,5):"Cancelled",1:"Pending")
 | 
|---|
| 149 |  ;
 | 
|---|
| 150 | HLD(STAT) ; Return an 'on hold' status string
 | 
|---|
| 151 |  Q "Hold "_$S(STAT=20:"Rate",STAT=21:"Rev",1:"Ins")
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 | PAUSE(IBEND) ;
 | 
|---|
| 154 |  Q:$E(IOST,1,2)'["C-"
 | 
|---|
| 155 |  N IBJ,DIR,DIRUT,DTOUT,DUOUT,DIROUT,Y
 | 
|---|
| 156 |  W !! ;F IBJ=$Y:1:(IOSL-4) W !
 | 
|---|
| 157 |  S DIR(0)="E"
 | 
|---|
| 158 |  I $G(IBEND) S DIR("A")="End of the report. Enter RETURN to continue or '^' to exit"
 | 
|---|
| 159 |  D ^DIR K DIR I $G(DUOUT) S IBQUIT=1 W @IOF Q
 | 
|---|
| 160 |  I $G(IBEND) W @IOF
 | 
|---|
| 161 |  Q
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 | DAT(IBDT) ; Convert FM date to (mm/dd/yy) format.
 | 
|---|
| 164 |  Q $$FMTE^XLFDT(IBDT,"2MZ")
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 |  ;For debugging only - find LTC-related records of the file #350
 | 
|---|
| 167 | FNDLTC N IEN,IBX,IBN
 | 
|---|
| 168 |  S IEN=0 F  S IEN=$O(^IB(IEN)) Q:'IEN  D
 | 
|---|
| 169 |  .  Q:'$D(^IB(IEN,0))  S IBX=^(0)
 | 
|---|
| 170 |  .  ;;; Q:$P(IBX,U,8)["ADMISSION" ; Not sure it is needed
 | 
|---|
| 171 |  .  S IBN=$$ACTNM^IBOUTL(+$P(IBX,U,3))
 | 
|---|
| 172 |  .  I IBN["LTC " W !,IEN,?10,IBN ; Not an LTC action type
 | 
|---|
| 173 |  W !,"Ready"
 | 
|---|
| 174 |  Q
 | 
|---|
| 175 |  ;
 | 
|---|
| 176 | CLKINFO ; Output short information about the clock
 | 
|---|
| 177 |  N IBZ,IBDT1,IBDT2,IBV,IBC,IBI,IBA,IBN
 | 
|---|
| 178 |  S IBZ=$G(^IBA(351.81,IBCLK,0)) I IBZ="" W !,"Corrupted record of LTC clock ",IBCLK Q 
 | 
|---|
| 179 |  S IBDT1=$P(IBZ,U,3)
 | 
|---|
| 180 |  S IBDT2=$P(IBZ,U,4)
 | 
|---|
| 181 |  S IBC=0 ; Counter of free days
 | 
|---|
| 182 |  ; Collect an array of free days:
 | 
|---|
| 183 |  S IBI=0 F  S IBI=$O(^IBA(351.81,IBCLK,1,IBI)) Q:'IBI  I $P(^(IBI,0),U,2) S IBC=IBC+1,IBA(IBC)=$P(^(0),U,2)
 | 
|---|
| 184 |  W !,IBLINE
 | 
|---|
| 185 |  W !?2,"LTC Copay Clock Start Date: ",$$DAT(IBDT1)
 | 
|---|
| 186 |  W ?50,"Clock Status: ",$$EXTERNAL^DILFD(351.81,.05,"",$P(IBZ,U,5))
 | 
|---|
| 187 |  I IBDT2 W !?2,"LTC Copay Clock End Date: ",$S(IBDT2:$$DAT(IBDT2),1:"none")
 | 
|---|
| 188 |  D:IBOFD
 | 
|---|
| 189 |  . W !?2,"Days Not Subject To LTC Copay:" I 'IBC W " none" Q
 | 
|---|
| 190 |  . S IBV=IBC\3 I IBC#3 S IBV=IBV+1
 | 
|---|
| 191 |  . F IBI=1:1:IBV D
 | 
|---|
| 192 |  ..  S IBN=IBI W !?5,$J(IBN,2),?10,$$FMTE^XLFDT(IBA(IBN))
 | 
|---|
| 193 |  ..  S IBN=IBI+IBV I $G(IBA(IBN)) W ?30,$J(IBN,2),?35,$$FMTE^XLFDT(IBA(IBN))
 | 
|---|
| 194 |  ..  S IBN=IBI+(2*IBV) I $G(IBA(IBN)) W ?55,$J(IBN,2),?60,$$FMTE^XLFDT(IBA(IBN))
 | 
|---|
| 195 |  W !!
 | 
|---|
| 196 |  Q
 | 
|---|
| 197 |  ;
 | 
|---|
| 198 |  ; Print LTC Events
 | 
|---|
| 199 |  ; Input:
 | 
|---|
| 200 |  ;  IBDFN - Patient DFN
 | 
|---|
| 201 |  ;  IBDTM1,IBDTM2 - First/Last days of the month, FM format
 | 
|---|
| 202 |  ;  ^TMP($J,"IBMJINP"),^TMP($J,"IBMJOUT") with prepared data
 | 
|---|
| 203 |  ; Output:
 | 
|---|
| 204 |  ;   Prints LTC Events report section 
 | 
|---|
| 205 | EVENTS N IBA,IBMOV,IBNDX,IBDAY,IBSL,IBCR,IBZ,IBZCR,IBENC,IBCNT
 | 
|---|
| 206 |  ; Collect data from ^TMP($J) array
 | 
|---|
| 207 |  S IBNDX="IBMJINP" ; Inpatient part
 | 
|---|
| 208 |  S IBMOV=0 F  S IBMOV=$O(^TMP($J,IBNDX,IBDFN,IBMOV)) Q:'IBMOV  D
 | 
|---|
| 209 |  . F IBSL="SD","LD" D
 | 
|---|
| 210 |  .. S IBCR=0 ; Current event begining day
 | 
|---|
| 211 |  .. S IBDAY=0 F  S IBDAY=$O(^TMP($J,IBNDX,IBDFN,IBMOV,IBSL,IBDAY)) Q:'IBDAY  S IBZ=^(IBDAY) D:$P(IBZ,U)'="M"  ; No means-test events
 | 
|---|
| 212 |  ... I 'IBCR S IBCR=IBDAY,IBA(IBCR)=$E(IBDAY,6,7)_U_$E(IBSL)_U_IBZ
 | 
|---|
| 213 |  ... ; I IBZCR'="",IBZCR'=IBZ S
 | 
|---|
| 214 |  ... Q:($O(^TMP($J,IBNDX,IBDFN,IBMOV,IBSL,IBDAY))-1)=IBDAY
 | 
|---|
| 215 |  ... S $P(IBA(IBCR),U)=$E(IBDAY,6,7) ; Days only
 | 
|---|
| 216 |  ... S IBCR=0,IBZCR=""
 | 
|---|
| 217 |  ;
 | 
|---|
| 218 |  S IBNDX="IBMJOUT" ; Outpatient part
 | 
|---|
| 219 |  S IBDAY=0 F  S IBDAY=$O(^TMP($J,IBNDX,IBDFN,IBDAY)) Q:'IBDAY  D
 | 
|---|
| 220 |  . S IBCNT=0
 | 
|---|
| 221 |  . S IBENC=0 F IBENC=$O(^TMP($J,IBNDX,IBDFN,IBDAY,IBENC)) Q:'IBENC  S IBZ=^(IBENC) D:$P(IBZ,U)'="M"  ; No means-test events
 | 
|---|
| 222 |  .. S IBA(IBDAY)="O"
 | 
|---|
| 223 |  .. S IBCNT=IBCNT+1
 | 
|---|
| 224 |  .. S IBA(IBDAY,IBCNT)=IBZ
 | 
|---|
| 225 |  ;
 | 
|---|
| 226 |  W !?5,"Monthly LTC Events:"
 | 
|---|
| 227 |  S IBDAY=0 F  S IBDAY=$O(IBA(IBDAY)) Q:'IBDAY  D  Q:IBQUIT
 | 
|---|
| 228 |  . I IBA(IBDAY)="O" D  Q  ; Outpatient events
 | 
|---|
| 229 |  .. S IBCNT=0 F  S IBCNT=$O(IBA(IBDAY,IBCNT)) Q:'IBCNT  D  Q:IBQUIT
 | 
|---|
| 230 |  ... D CHKSTOP Q:IBQUIT
 | 
|---|
| 231 |  ... W !?7,$$DAT(IBDAY),?30,$$ACTNM^IBOUTL($P(IBA(IBDAY,IBCNT),U,4))
 | 
|---|
| 232 |  . ; Inpatient events
 | 
|---|
| 233 |  . S IBZ=IBA(IBDAY)
 | 
|---|
| 234 |  . D CHKSTOP Q:IBQUIT
 | 
|---|
| 235 |  . W !?7,$$DAT(IBDAY) I $P(IBZ,U)'=$E(IBDAY,6,7) W " - ",?18,$$DAT($E(IBDAY,1,5)_$P(IBZ,U))
 | 
|---|
| 236 |  . I $P(IBZ,U,2)="L" W ?30,"ABSENT DAYS" Q
 | 
|---|
| 237 |  . W ?30,$$ACTNM^IBOUTL(+$P(IBZ,U,6))
 | 
|---|
| 238 |  Q
 | 
|---|