| [613] | 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 | 
|---|