| 1 | IBJDI21 ;ALB/CPM - VETERANS WITH UNVERIFIED ELIGIBILITY (CONT'D) ;16-DEC-96 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**118,249**;21-MAR-94 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ; - Find inpatients treated within the user-specified date range. | 
|---|
| 6 | S IBD=IBBDT-.01 F  S IBD=$O(^DGPM("ATT3",IBD)) Q:'IBD!(IBD\1>IBEDT)  D  Q:IBQ | 
|---|
| 7 | .S IBPM=0 F  S IBPM=$O(^DGPM("ATT3",IBD,IBPM)) Q:'IBPM  D  Q:IBQ | 
|---|
| 8 | ..I IBPM#100=0 Q:$$STOP(.IBQ,"Unverified Eligibility Report") | 
|---|
| 9 | ..S IBPMD=$G(^DGPM(IBPM,0)) Q:'IBPMD | 
|---|
| 10 | ..I IBSORT S IBDIV=$$DIV(1,+$P(IBPMD,U,6)) Q:'$D(IB(IBDIV)) | 
|---|
| 11 | ..S DFN=+$P(IBPMD,U,3) Q:'DFN | 
|---|
| 12 | ..; | 
|---|
| 13 | ..; - Process patient. | 
|---|
| 14 | ..I '$D(^TMP("IBJDI21",$J,DFN)) D PROC(DFN,"*",.IBQUERY) | 
|---|
| 15 | ; | 
|---|
| 16 | D CLOSE^IBSDU(.IBQUERY) | 
|---|
| 17 | I IBQ G ENQ | 
|---|
| 18 | ; | 
|---|
| 19 | ; - Find outpatients treated within the user-specified date range. | 
|---|
| 20 | D OUTPT("",IBBDT,IBEDT,"S:IBQ SDSTOP=1 I 'IBQ,$$ENCHK^IBJDI5(Y0) D ENC^IBJDI21(Y0,.IBQUERY1)","Unverified Eligibility Report",.IBQ,"IBJDI21",.IBQUERY) | 
|---|
| 21 | D CLOSE^IBSDU(.IBQUERY),CLOSE^IBSDU(.IBQUERY1) | 
|---|
| 22 | ; | 
|---|
| 23 | I IBQ G ENQ | 
|---|
| 24 | ; | 
|---|
| 25 | ; - Extract summary data. | 
|---|
| 26 | I $G(IBXTRACT) D  G ENQ | 
|---|
| 27 | .F X="DEC","NOT","PEN","TOT","VER","VERO" S IB(X)=$G(IB("ALL",X)) | 
|---|
| 28 | .D E^IBJDE(2,0) | 
|---|
| 29 | ; | 
|---|
| 30 | ; - If detail, look up next appt | 
|---|
| 31 | I IBRPT="D" S IBARRAY("SORT")="P",IBARRAY("FLDS")=1,IBARRAY(1)=$$NOW^XLFDT_";9999999",IBARRAY(4)="^TMP(""IBDFN"",$J,",IBCOUNT=$$SDAPI^SDAMA301(.IBARRAY) | 
|---|
| 32 | ; | 
|---|
| 33 | ; - Print the reports. | 
|---|
| 34 | S IBQ=0 D NOW^%DTC S IBRUN=$$DAT2^IBOUTL(%) | 
|---|
| 35 | S IBDIV="" F  S IBDIV=$O(IB(IBDIV)) Q:IBDIV=""  D  Q:IBQ | 
|---|
| 36 | .S IBPAG=0 D:IBRPT="D" DET I 'IBQ D SUM,PAUSE | 
|---|
| 37 | ; | 
|---|
| 38 | ENQ Q | 
|---|
| 39 | ; | 
|---|
| 40 | OUTPT(DFN,IBBDT,IBEDT,IBCBK,IBMSG,IBQ,IBSUBSCR,IBQUERY,IBDIR) ; | 
|---|
| 41 | ; Input:   DFN = IEN of patient if using PATIENT/DATE index, otherwise, | 
|---|
| 42 | ;                if null or 0, DATE/TIME index will be used | 
|---|
| 43 | ;        IBCBK = The MUMPS code to execute when valid enctr found | 
|---|
| 44 | ;        IBBDT/IBEDT = The start/end dates | 
|---|
| 45 | ;        IBMSG = The text to send to STOP PROCESSING CALL (if null, no | 
|---|
| 46 | ;                call made) | 
|---|
| 47 | ;          IBQ = Flag that says whether or not the process was stopped | 
|---|
| 48 | ;                by user | 
|---|
| 49 | ;      IBQUERY = The # of the QUERY OBJECT to be used to extract outpt | 
|---|
| 50 | ;                visits | 
|---|
| 51 | ;        IBDIR = Null to look forward, 'B' to look backward thru file | 
|---|
| 52 | ; | 
|---|
| 53 | N IBVAL,IBFILTER | 
|---|
| 54 | S IBVAL("BDT")=IBBDT,IBVAL("EDT")=IBEDT_".99" S:$G(DFN) IBVAL("DFN")=DFN | 
|---|
| 55 | ; | 
|---|
| 56 | ; - Look at parent encounters, completely checked out, check user | 
|---|
| 57 | ;   requested to quit, process each pt only once if IBSUBSCR'=null | 
|---|
| 58 | S IBFILTER="" | 
|---|
| 59 | S IBCBK="I "_$S($G(IBSUBSCR)'="":"'$D(^TMP(IBSUBSCR,$J,+$P(Y0,U,2))),",1:"")_"'$P(Y0,U,6),$P(Y0,U,7),$S((Y#100)'=0:1,$G(IBMSG)="""":1,1:'$$STOP^IBJDI21(.IBQ,IBMSG))"_" "_IBCBK | 
|---|
| 60 | S IBDIR=$S($G(IBDIR)="":"",1:"BACKWARD") | 
|---|
| 61 | D SCAN^IBSDU($S($G(DFN):"PATIENT/DATE",1:"DATE/TIME"),.IBVAL,IBFILTER,IBCBK,0,.IBQUERY,IBDIR) K ^TMP("DIERR",$J) | 
|---|
| 62 | Q | 
|---|
| 63 | ; | 
|---|
| 64 | STOP(IBQ,MSG) ; - Check if user wants to stop. | 
|---|
| 65 | N Y,Y0 S IBQ=$$STOP^IBOUTL(MSG) | 
|---|
| 66 | Q IBQ | 
|---|
| 67 | ; | 
|---|
| 68 | ENC(IBOED,IBQUERY1) ; - Encounter extract for all patients loop. | 
|---|
| 69 | ; IBQUERY1 = the # of the QUERY to use to do the extract. | 
|---|
| 70 | ; Pre-set variables IB array, IBSORT are required. | 
|---|
| 71 | ; | 
|---|
| 72 | I IBSORT S IBDIV=$$DIV(0,+$P(IBOED,U,11)) Q:'$D(IB(IBDIV)) | 
|---|
| 73 | D PROC(+$P(IBOED,U,2),"",.IBQUERY1) ; Process patient. | 
|---|
| 74 | Q | 
|---|
| 75 | ; | 
|---|
| 76 | PROC(DFN,IBIPC,IBQUERY) ; - Process each specific patient. | 
|---|
| 77 | ; Input:     DFN = Pointer to the patient in file #2 | 
|---|
| 78 | ;          IBIPC = Inpatient treatment marker | 
|---|
| 79 | ;                  ("*"=Had inpat. treatment, null=No inpat. treatment) | 
|---|
| 80 | ;        IBQUERY = The # of the QUERY OBJECT to be used to extract | 
|---|
| 81 | ;                  outpatient visits | 
|---|
| 82 | ; | 
|---|
| 83 | ; Pre-set variables IB array, IBDIV are required. | 
|---|
| 84 | ; | 
|---|
| 85 | I $$TESTP^IBJDI1(DFN) Q  ;      Test patient. | 
|---|
| 86 | D ELIG^VADPT I 'VAEL(4) G PRCQ ; Patient is not a vet. | 
|---|
| 87 | ; | 
|---|
| 88 | ; - Set patient index and 'total' accumulator. | 
|---|
| 89 | S ^TMP("IBJDI21",$J,DFN)="",IB(IBDIV,"TOT")=IB(IBDIV,"TOT")+1 | 
|---|
| 90 | ; | 
|---|
| 91 | I $G(^DPT(DFN,.35)) S IB(IBDIV,"DEC")=IB(IBDIV,"DEC")+1 ; Deceased. | 
|---|
| 92 | ; | 
|---|
| 93 | ; - Elig. status is Verified, Pending, Re-pending, or null. | 
|---|
| 94 | S IBES=$P(VAEL(8),U) | 
|---|
| 95 | I IBES="V" D  G PRCS:X'<730,PRCQ | 
|---|
| 96 | .S IB(IBDIV,"VER")=IB(IBDIV,"VER")+1 | 
|---|
| 97 | .S IBESD=+$P($G(^DPT(DFN,.361)),U,2),X1=DT,X2=IBESD D ^%DTC | 
|---|
| 98 | .S:X'<730 IB(IBDIV,"VERO")=IB(IBDIV,"VERO")+1,^TMP("IBJDI23",$J,DFN)=" (on "_$$DAT1^IBOUTL(IBESD)_")" | 
|---|
| 99 | I IBES="P"!(IBES="R") S IB(IBDIV,"PEN")=IB(IBDIV,"PEN")+1 G PRCS | 
|---|
| 100 | S IB(IBDIV,"NOT")=IB(IBDIV,"NOT")+1 | 
|---|
| 101 | ; | 
|---|
| 102 | PRCS I IBRPT="D" D SET(.IBQUERY) | 
|---|
| 103 | ; | 
|---|
| 104 | PRCQ K VA,VAERR,VAEL | 
|---|
| 105 | Q | 
|---|
| 106 | ; | 
|---|
| 107 | SET(IBQUERY) ; - Set up detailed information to appear on the report. | 
|---|
| 108 | ; Working variable definitions: | 
|---|
| 109 | ;    IBLT = Last treatment date | 
|---|
| 110 | ;    IBDN = Zero node of Patient file entry | 
|---|
| 111 | ;   IBDOD = Patient's date of death (if any) | 
|---|
| 112 | ;  IBNUMO = No. outpatient visits in date range | 
|---|
| 113 | ;  IBNUMD = No. discharges in date range | 
|---|
| 114 | ;  IBNEXT = Next scheduled treatment date | 
|---|
| 115 | ; IBQUERY = The # of the QUERY OBJECT to be used to extract outpatient | 
|---|
| 116 | ;           visits | 
|---|
| 117 | ; | 
|---|
| 118 | S (IBNUMD,IBNUMO,IBLT)=0 | 
|---|
| 119 | ; | 
|---|
| 120 | ; - Get # of discharges; look for LTD. | 
|---|
| 121 | S IBDT=0 F  S IBDT=$O(^DGPM("ATID3",DFN,IBDT)) Q:'IBDT  D | 
|---|
| 122 | .S IBDTF=9999999.9999999-IBDT\1 | 
|---|
| 123 | .S:IBDTF>IBLT IBLT=IBDTF I IBDTF<IBBDT!(IBDTF>IBEDT) Q | 
|---|
| 124 | .S IBNUMD=IBNUMD+1 | 
|---|
| 125 | ; | 
|---|
| 126 | ; - Get # of outpatient visits; look for LTD. | 
|---|
| 127 | D OUTPT(DFN,IBBDT,9991231,"S IBDTF=Y0\1 S:IBDTF>IBLT IBLT=IBDTF I IBDTF'<IBBDT,IBDTF'>IBEDT S IBNUMO=IBNUMO+1","","","",.IBQUERY) | 
|---|
| 128 | ; | 
|---|
| 129 | ; - If current inpatient, set LTD to today. | 
|---|
| 130 | I $G(^DPT(DFN,.105)) S IBLT=DT | 
|---|
| 131 | ; | 
|---|
| 132 | ; - Find next scheduled treatment date. | 
|---|
| 133 | S IBNEXT="" | 
|---|
| 134 | I $$GETICN^MPIF001(DFN) S ^TMP("IBDFN",$J,DFN)="" ;set tmp sched appt. | 
|---|
| 135 | S X=0 F  S X=$O(^DGS(41.1,"B",DFN,X)) Q:'X  D  ;   Scheduled adm. | 
|---|
| 136 | .S X1=$G(^DGS(41.1,X,0)) | 
|---|
| 137 | .S X2=$P(X1,U,2)\1 | 
|---|
| 138 | .I X2<DT Q  ;       Must be old scheduled admission. | 
|---|
| 139 | .I $P(X1,U,13) Q  ; Sched adm is cancelled. | 
|---|
| 140 | .I $P(X1,U,17) Q  ; Patient already admitted. | 
|---|
| 141 | .I X2>IBNEXT S IBNEXT=X2 | 
|---|
| 142 | ; | 
|---|
| 143 | S IBDN=$G(^DPT(DFN,0)) | 
|---|
| 144 | S IBDOD=$S(+$G(^DPT(DFN,.35)):$$DAT1^IBOUTL(+$G(^(.35))\1),1:"") | 
|---|
| 145 | ; | 
|---|
| 146 | S ^TMP("IBJDI22",$J,IBDIV,$E($P(IBDN,U),1,25)_IBIPC_"@@"_DFN)=$P(IBDN,U,9)_U_$E($P(VAEL(1),U,2),1,23)_U_IBES_U_IBNUMO_U_IBNUMD_U_IBLT_U_IBNEXT_U_IBDOD | 
|---|
| 147 | Q | 
|---|
| 148 | ; | 
|---|
| 149 | DIV(X,Y) ; - Return division name. | 
|---|
| 150 | ;  Input: X=1-Inpatient, 0-Outpatient | 
|---|
| 151 | ;         Y=IEN of file #42 (If X=1) or IEN of file #40.8 (If X=0) | 
|---|
| 152 | I X S Y=+$P($G(^DIC(42,Y,0)),U,11) | 
|---|
| 153 | S Z=$P($G(^DG(40.8,Y,0)),U) I Z="" S Z=$P($$SITE^VASITE,U,2) | 
|---|
| 154 | Q Z | 
|---|
| 155 | ; | 
|---|
| 156 | DET ; - Print the detailed report. | 
|---|
| 157 | D HDET Q:IBQ | 
|---|
| 158 | I '$D(^TMP("IBJDI22",$J,IBDIV)) W !!,"There were no patients treated in this date range with unverified eligibility." G DETQ | 
|---|
| 159 | ; | 
|---|
| 160 | S IBXX="" F  S IBXX=$O(^TMP("IBJDI22",$J,IBDIV,IBXX)) Q:IBXX=""  S IBX=^(IBXX) D  Q:IBQ | 
|---|
| 161 | .I $Y>(IOSL-2) D PAUSE Q:IBQ  D HDET Q:IBQ | 
|---|
| 162 | .W !,$P(IBXX,"@@"),?28,$$SSN($P(IBX,U)),?42,$P(IBX,U,2) | 
|---|
| 163 | .W ?67,$$ESTAT($P(IBX,U,3)),$G(^TMP("IBJDI23",$J,IBDIV,+$P(IBXX,"@@",2))) | 
|---|
| 164 | .W ?93,$J($P(IBX,U,4),3),?98,$J($P(IBX,U,5),3) | 
|---|
| 165 | .W ?104,$$DAT1^IBOUTL($P(IBX,U,6)) | 
|---|
| 166 | .S IBCOUNT=$O(^TMP($J,"SDAMA301",+$P(IBXX,"@@",2),0)) | 
|---|
| 167 | .S:IBCOUNT $P(IBX,"^",7)=$S('$P(IBX,"^",7):IBCOUNT,IBCOUNT<$P(IBX,"^",7):IBCOUNT,1:$P(IBX,"^",7)) | 
|---|
| 168 | .W ?114,$$DAT1^IBOUTL($P(IBX,U,7)) | 
|---|
| 169 | .W ?124,$P(IBX,U,8) | 
|---|
| 170 | ; | 
|---|
| 171 | DETQ I 'IBQ D PAUSE | 
|---|
| 172 | Q | 
|---|
| 173 | ; | 
|---|
| 174 | HDET ; - Write the detail report header. | 
|---|
| 175 | I $E(IOST,1,2)="C-"!(IBPAG) W @IOF,*13 | 
|---|
| 176 | S IBPAG=IBPAG+1 | 
|---|
| 177 | W !,"Veterans with Unverified Eligibilities",$S(IBDIV'="ALL":" for "_IBDIV,1:""),?80,"Run Date: ",IBRUN,?123,"Page: ",IBPAG | 
|---|
| 178 | W !,"Patients who were treated in the period ",$$DAT1^IBOUTL(IBBDT)," to ",$$DAT1^IBOUTL(IBEDT) | 
|---|
| 179 | W !?91,"# Opt   #      Last   Nxt Sched  Date of" | 
|---|
| 180 | W !,"Patient (*=Had inpt. care)",?28,"SSN",?42,"Primary Eligibility" | 
|---|
| 181 | W ?67,"Eligibility Status",?91,"Visits Disc    Seen   Visit/Adm   Death" | 
|---|
| 182 | W !,$$DASH(IOM),! | 
|---|
| 183 | S IBQ=$$STOP(0,"Unverified Eligibility Report") | 
|---|
| 184 | Q | 
|---|
| 185 | ; | 
|---|
| 186 | SUM ; - Print the summary report. | 
|---|
| 187 | I $E(IOST,1,2)="C-"!(IBPAG) W @IOF,*13 | 
|---|
| 188 | S IBPAG=IBPAG+1 | 
|---|
| 189 | W !!?21,"VETERANS WITH UNVERIFIED ELIGIBILITY",! | 
|---|
| 190 | I IBDIV'="ALL" W ?(61-$L(IBDIV))\2,"SUMMARY REPORT for ",IBDIV | 
|---|
| 191 | E  W ?33,"SUMMARY REPORT" | 
|---|
| 192 | W !!?19,"Patients treated from ",$$DAT1^IBOUTL(IBBDT)," - ",$$DAT1^IBOUTL(IBEDT) | 
|---|
| 193 | W !!?24,"Run Date: ",IBRUN,!?13,$$DASH(53),!! | 
|---|
| 194 | ; | 
|---|
| 195 | S IBPERV=$J($S('IB(IBDIV,"TOT"):0,1:IB(IBDIV,"VER")/IB(IBDIV,"TOT")*100),0,2) | 
|---|
| 196 | S IBPERP=$J($S('IB(IBDIV,"TOT"):0,1:IB(IBDIV,"PEN")/IB(IBDIV,"TOT")*100),0,2) | 
|---|
| 197 | S IBPERD=$J($S('IB(IBDIV,"TOT"):0,1:IB(IBDIV,"DEC")/IB(IBDIV,"TOT")*100),0,2) | 
|---|
| 198 | S IBPERO=$J($S('IB(IBDIV,"VER"):0,1:IB(IBDIV,"VERO")/IB(IBDIV,"VER")*100),0,2) | 
|---|
| 199 | W ?29,"Number of Patients Treated:",?58,$J(IB(IBDIV,"TOT"),5) | 
|---|
| 200 | W !?28,"Number of Deceased Patients:",?58,$J(IB(IBDIV,"DEC"),5),?67,"(",IBPERD,"%)" | 
|---|
| 201 | W !?11,"Number of Patients with Verified Eligibility:",?58,$J(IB(IBDIV,"VER"),5),?67,"(",IBPERV,"%)" | 
|---|
| 202 | W !?5,"Number of Patients Whose Verified Eligibility Date" | 
|---|
| 203 | W !?13,"is At Least 2 Years Old (from above total):",?58,$J(IB(IBDIV,"VERO"),5),?67,"(",IBPERO,"%)" | 
|---|
| 204 | W !?10,"Number of Patients with a Pending Eligibility:",?58,$J(IB(IBDIV,"PEN"),5),?67,"(",IBPERP,"%)" | 
|---|
| 205 | W !?24,"Number of Patients Not Verified:",?58,$J(IB(IBDIV,"NOT"),5),?67,"(",$J($S('IB(IBDIV,"TOT"):0,1:100-IBPERV-IBPERP),0,2),"%)" | 
|---|
| 206 | Q | 
|---|
| 207 | ; | 
|---|
| 208 | DASH(X) ; - Return a dashed line. | 
|---|
| 209 | Q $TR($J("",X)," ","=") | 
|---|
| 210 | ; | 
|---|
| 211 | PAUSE ; - Page break. | 
|---|
| 212 | I $E(IOST,1,2)'="C-" Q | 
|---|
| 213 | N IBX,DIR,DIRUT,DUOUT,DTOUT,DIROUT,X,Y | 
|---|
| 214 | F IBX=$Y:1:(IOSL-3) W ! | 
|---|
| 215 | S DIR(0)="E" D ^DIR I $D(DIRUT)!($D(DUOUT)) S IBQ=1 | 
|---|
| 216 | Q | 
|---|
| 217 | ; | 
|---|
| 218 | SSN(X) ; - Format the SSN. | 
|---|
| 219 | Q $S(X]"":$E(X,1,3)_"-"_$E(X,4,5)_"-"_$E(X,6,10),1:"") | 
|---|
| 220 | ; | 
|---|
| 221 | ESTAT(X) ; - Decode the eligibility status. | 
|---|
| 222 | Q $S(X="V":"VERIFIED",X="P":"PENDING VERIFICATION",X="R":"PENDING RE-VERIFICATION",1:"NOT VERIFIED") | 
|---|