| 1 | EASECEXP ;ALB/LBD - Report of Expiring or Expired LTC Copay Tests; 10-SEP-2003 | 
|---|
| 2 | ;;1.0;ENROLLMENT APPLICATION SYSTEM;**40**;Mar 15, 2001 | 
|---|
| 3 | ; | 
|---|
| 4 | ; This routine is called from menu option EASEC LTC COPAY TEST EXPIRE | 
|---|
| 5 | ; and will print a report of LTC Copay Tests that have expired or are | 
|---|
| 6 | ; about to expire. | 
|---|
| 7 | ; | 
|---|
| 8 | EN ; Entry point | 
|---|
| 9 | N EASRPT,EASUDT,EASSRT | 
|---|
| 10 | ; Select which report to print (1=Pending Expiration; 2=Expired) | 
|---|
| 11 | S EASRPT=$$RPT Q:'EASRPT | 
|---|
| 12 | ; Select number of days (report 1) or start date (report 2) | 
|---|
| 13 | I EASRPT=1 S EASUDT=$$DATE1 | 
|---|
| 14 | E  S EASUDT=$$DATE2 | 
|---|
| 15 | Q:'EASUDT | 
|---|
| 16 | ; Sort by name or date | 
|---|
| 17 | S EASSRT=$$SRT Q:EASSRT="" | 
|---|
| 18 | ; Run the report | 
|---|
| 19 | D QUE | 
|---|
| 20 | D ^%ZISC,HOME^%ZIS | 
|---|
| 21 | Q | 
|---|
| 22 | ; | 
|---|
| 23 | RPT() ; Select which report to print | 
|---|
| 24 | ; Input:   None | 
|---|
| 25 | ; Output:  Y - Report Type (1=Pending Expiration; 2=Expired; 0=Quit) | 
|---|
| 26 | N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT | 
|---|
| 27 | W !!,"Report of LTC Copayment Tests" | 
|---|
| 28 | S DIR(0)="S^1:Pending Expiration;2:Expired" | 
|---|
| 29 | S DIR("A")="Enter 1 or 2" | 
|---|
| 30 | S DIR("?",1)="Indicate whether the report should include:" | 
|---|
| 31 | S DIR("?",2)="(1) a list of veterans whose LTC Copayment Test is pending expiration (i.e.," | 
|---|
| 32 | S DIR("?",3)="the anniversary date of the test is approaching) within a user-specified" | 
|---|
| 33 | S DIR("?",4)="number of days, or" | 
|---|
| 34 | S DIR("?",5)="(2) a list of veterans whose LTC Copayment Test has already expired (i.e.," | 
|---|
| 35 | S DIR("?")="the anniversary date of the test has passed) since a user-specified date." | 
|---|
| 36 | D ^DIR I 'Y!($D(DTOUT))!($D(DUOUT)) Q 0 | 
|---|
| 37 | Q Y | 
|---|
| 38 | DATE1() ; Select number of days for report 1 | 
|---|
| 39 | ; Input:   None | 
|---|
| 40 | ; Output:  Y - Number of days to report (1-60) | 
|---|
| 41 | N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT | 
|---|
| 42 | S DIR(0)="N^1:60",DIR("A")="Enter number of days to report" | 
|---|
| 43 | D ^DIR I 'Y!($D(DTOUT))!($D(DUOUT)) Q 0 | 
|---|
| 44 | Q Y | 
|---|
| 45 | DATE2() ; Select start date for report 2 | 
|---|
| 46 | ; Input:   None | 
|---|
| 47 | ; Output:  Y - Report start date | 
|---|
| 48 | N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,SDT,EDT | 
|---|
| 49 | S SDT=$$FMADD^XLFDT(DT,-365),EDT=$$FMADD^XLFDT(DT,-1) | 
|---|
| 50 | S DIR(0)="D^"_SDT_":"_EDT_":EX",DIR("A")="Enter a start date" | 
|---|
| 51 | D ^DIR I 'Y!($D(DTOUT))!($D(DUOUT)) Q 0 | 
|---|
| 52 | Q Y | 
|---|
| 53 | SRT() ; Select sort | 
|---|
| 54 | ; Input:   None | 
|---|
| 55 | ; Output:  Y - Sort (N=Name; D=Date) | 
|---|
| 56 | N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT | 
|---|
| 57 | S DIR(0)="SB^N:Name;D:Date",DIR("A")="Sort report by Name or Date" | 
|---|
| 58 | S DIR("?",1)="Indicate whether the report should be sorted by the" | 
|---|
| 59 | S DIR("?")="Veteran's Name or the LTC Copay Test Anniversary Date" | 
|---|
| 60 | D ^DIR I $D(DTOUT)!($D(DUOUT)) Q "" | 
|---|
| 61 | Q Y | 
|---|
| 62 | ; | 
|---|
| 63 | QUE ; Get the report device, queue if requested | 
|---|
| 64 | N ZTDESC,ZTIO,ZTRTN,ZTSAVE,ZTSK,POP | 
|---|
| 65 | K IOP,%ZIS | 
|---|
| 66 | S %ZIS="Q" D ^%ZIS I POP W !!,"Report Cancelled!" Q | 
|---|
| 67 | I $D(IO("Q")) D  Q | 
|---|
| 68 | .S ZTRTN="START^EASECEXP" | 
|---|
| 69 | .S ZTDESC="PRINT"_$S(EASRPT=1:"EXPIRING",1:"EXPIRED")_"LTC COPAY TESTS" | 
|---|
| 70 | .S (ZTSAVE("EASRPT"),ZTSAVE("EASUDT"),ZTSAVE("EASSRT"))="" | 
|---|
| 71 | .D ^%ZTLOAD | 
|---|
| 72 | .W !,"Report ",$S($D(ZTSK):"Queued!",1:"Cancelled!") | 
|---|
| 73 | D START | 
|---|
| 74 | Q | 
|---|
| 75 | ; | 
|---|
| 76 | START ; Generate report | 
|---|
| 77 | ; Input:  EASRPT - Report Type (1=Pending Expiration; 2=Expired) | 
|---|
| 78 | ;         EASUDT - Number of Days or Start Date | 
|---|
| 79 | ;         EASSRT - Sort (N=Name; D=Date) | 
|---|
| 80 | N PG,RPTDT,HDR1,HDR2,HDR3,HDRLN,CRT,LINE,OUT,MXLNE,TMP | 
|---|
| 81 | K ^TMP("EASECEXP",$J) S:$G(ZTSK) ZTREQ="@" | 
|---|
| 82 | D GETREC | 
|---|
| 83 | D PRTVAR | 
|---|
| 84 | U IO D HDR | 
|---|
| 85 | I '$D(^TMP("EASECEXP",$J)) W !!,?10,"*** No records to print ***" Q | 
|---|
| 86 | D PRINT I CRT S OUT=$$PAUSE | 
|---|
| 87 | K ^TMP("EASECEXP",$J) | 
|---|
| 88 | Q | 
|---|
| 89 | GETREC ; Loop through Annual Means Test File #408.31 to find LTC Copay Tests | 
|---|
| 90 | ; within the date range | 
|---|
| 91 | N EASSDT,EASEDT,EDT,ST,DFN,EASIEN | 
|---|
| 92 | ; Get start and end dates | 
|---|
| 93 | I EASRPT=1 D | 
|---|
| 94 | .S EASSDT=$$FMADD^XLFDT(DT,-365) | 
|---|
| 95 | .S EASEDT=$$FMADD^XLFDT(EASSDT,EASUDT) | 
|---|
| 96 | E  D | 
|---|
| 97 | .S EASSDT=$$FMADD^XLFDT(EASUDT,-365) | 
|---|
| 98 | .S EASEDT=$$FMADD^XLFDT(DT,-365) | 
|---|
| 99 | ; Find records using "AS" x-ref | 
|---|
| 100 | S ST="" | 
|---|
| 101 | F  S ST=$O(^DGMT(408.31,"AS",3,ST)) Q:ST=""  S EDT=-EASEDT-1 F  S EDT=$O(^DGMT(408.31,"AS",3,ST,EDT)) Q:'EDT!(EDT>-EASSDT)  S DFN=0 F  S DFN=$O(^DGMT(408.31,"AS",3,ST,EDT,DFN)) Q:'DFN  D | 
|---|
| 102 | .S EASIEN=$O(^DGMT(408.31,"AS",3,ST,EDT,DFN,0)) Q:'EASIEN | 
|---|
| 103 | .Q:'$D(^DGMT(408.31,EASIEN,0)) | 
|---|
| 104 | .;If record meets criteria, save in ^TMP global | 
|---|
| 105 | .I $$CHK(DFN,EASIEN) D SET(DFN,EASIEN,EASSRT) | 
|---|
| 106 | Q | 
|---|
| 107 | ; | 
|---|
| 108 | SET(DFN,IEN,SRT) ;Store data to be printed in the ^TMP global | 
|---|
| 109 | ; Input:    DFN - Patient IEN | 
|---|
| 110 | ;           IEN - LTC Copay Test IEN | 
|---|
| 111 | Q:'$G(DFN)  Q:'$G(IEN) | 
|---|
| 112 | I $G(SRT)="" S SRT="D" | 
|---|
| 113 | N NAME,SSN,STAT,REAS,ANNDT | 
|---|
| 114 | S NAME=$$GET1^DIQ(2,DFN_",",.01),SSN=$$GET1^DIQ(2,DFN_",",.09) | 
|---|
| 115 | S ANNDT=$$FMADD^XLFDT(+$G(^DGMT(408.31,IEN,0)),365) | 
|---|
| 116 | S STAT=$$GET1^DIQ(408.31,IEN_",",.03) S:STAT="" STAT="INCOMPLETE" | 
|---|
| 117 | S REAS=$E($$GET1^DIQ(408.31,IEN_",",2.07),1,41) | 
|---|
| 118 | I SRT="D" S ^TMP("EASECEXP",$J,ANNDT,NAME,SSN)=STAT_U_REAS | 
|---|
| 119 | E  S ^TMP("EASECEXP",$J,NAME,ANNDT,SSN)=STAT_U_REAS | 
|---|
| 120 | Q | 
|---|
| 121 | ; | 
|---|
| 122 | CHK(DFN,EASIEN) ;Check if LTC Copay Test meets criteria for the report | 
|---|
| 123 | ; Input:    DFN - Patient IEN | 
|---|
| 124 | ;           EASIEN - LTC Copay Test IEN | 
|---|
| 125 | ; Output:   1 = meets criteria for report | 
|---|
| 126 | ;           0 = doesn't meet criteria for report | 
|---|
| 127 | I '$G(DFN)!('$G(EASIEN)) Q 0 | 
|---|
| 128 | N LTC,LTCDT,LTCST,CHKDT | 
|---|
| 129 | S CHKDT=+^DGMT(408.31,EASIEN,0) | 
|---|
| 130 | ; Don't report if veteran has had another LTC copay test within the year | 
|---|
| 131 | S LTC=$$LST^EASECU(DFN),LTCDT=$P(LTC,U,2),LTCST=$P(LTC,U,3) | 
|---|
| 132 | I LTCDT,LTCDT>CHKDT,$$FMDIFF^XLFDT(DT,LTCDT)<365,LTCST'="" Q 0 | 
|---|
| 133 | ; Don't report if veteran is deceased | 
|---|
| 134 | I $P($G(^DPT(DFN,.35)),U) Q 0 | 
|---|
| 135 | ; Don't report if veteran is exempt due to compensable SC disability or | 
|---|
| 136 | ; LTC before 11/30/99 | 
|---|
| 137 | I "^1^4^"[(U_$P($G(^DGMT(408.31,EASIEN,2)),U,7)_U) Q 0 | 
|---|
| 138 | Q 1 | 
|---|
| 139 | ; | 
|---|
| 140 | PRTVAR ; Set up variables needed to print report | 
|---|
| 141 | S CRT=$S($E(IOST,1,2)="C-":1,1:0) | 
|---|
| 142 | S TMP="^TMP(""EASECEXP"",$J)" | 
|---|
| 143 | S (PG,OUT)=0,RPTDT=$$FMTE^XLFDT(DT),MXLNE=$S(CRT:13,1:55) | 
|---|
| 144 | S HDR1=$$CJ^XLFSTR("VETERANS WITH LONG TERM CARE COPAYMENT TESTS THAT",80) | 
|---|
| 145 | I EASRPT=1 S HDR2=$$CJ^XLFSTR("ARE PENDING EXPIRATION IN "_EASUDT_" DAYS",80) | 
|---|
| 146 | E  S HDR2=$$CJ^XLFSTR("HAVE EXPIRED SINCE "_$$FMTE^XLFDT(EASUDT,2),80) | 
|---|
| 147 | S HDR3="SORTED BY "_$S(EASSRT="D":"DATE",1:"NAME") | 
|---|
| 148 | S HDRLN="",$P(HDRLN,"=",80)="" | 
|---|
| 149 | Q | 
|---|
| 150 | HDR ; Print report header | 
|---|
| 151 | S PG=PG+1,LINE=0 | 
|---|
| 152 | W @IOF | 
|---|
| 153 | W ?0,"REPORT DATE: ",RPTDT,?73,"PAGE: ",$$RJ^XLFSTR(PG,3) | 
|---|
| 154 | W !!,HDR1,!,HDR2,!,HDR3 | 
|---|
| 155 | W !?50,"LTC Test",?66,"LTC Test" | 
|---|
| 156 | W !,"SSN",?14,"Veteran's Name",?46,"Anniversary Date",?67,"Status" | 
|---|
| 157 | W !,HDRLN | 
|---|
| 158 | Q | 
|---|
| 159 | PRINT ; Print report data | 
|---|
| 160 | N EASI,EASJ,SSN,REC,NAME,ANNDT,STAT,REAS | 
|---|
| 161 | S EASI="" | 
|---|
| 162 | F  S EASI=$O(@TMP@(EASI)) Q:EASI=""!OUT  S EASJ="" F  S EASJ=$O(@TMP@(EASI,EASJ)) Q:EASJ=""  S SSN="" F  S SSN=$O(@TMP@(EASI,EASJ,SSN)) Q:SSN=""  D | 
|---|
| 163 | .S REC=@TMP@(EASI,EASJ,SSN) | 
|---|
| 164 | .S NAME=$S(EASSRT="D":EASJ,1:EASI),NAME=$E(NAME,1,30) | 
|---|
| 165 | .S ANNDT=$S(EASSRT="D":EASI,1:EASJ),ANNDT=$$FMTDT(ANNDT) | 
|---|
| 166 | .S STAT=$P(REC,U,1) | 
|---|
| 167 | .S REAS=$P(REC,U,2) | 
|---|
| 168 | .I LINE>MXLNE S OUT=$$PAUSE Q:OUT   D HDR | 
|---|
| 169 | .W !,$$SSN(SSN),?14,NAME,?50,ANNDT,?66,STAT | 
|---|
| 170 | .S LINE=LINE+1 | 
|---|
| 171 | .I STAT="EXEMPT" W !,?30,"Reason: ",REAS S LINE=LINE+1 | 
|---|
| 172 | Q | 
|---|
| 173 | ; | 
|---|
| 174 | FMTDT(X) ;Format date to print on report | 
|---|
| 175 | Q $E(X,4,5)_"/"_$E(X,6,7)_"/"_$E(X,2,3) | 
|---|
| 176 | SSN(X) ; Format SSN to print on report | 
|---|
| 177 | Q $E(X,1,3)_"-"_$E(X,4,5)_"-"_$E(X,6,9) | 
|---|
| 178 | ; | 
|---|
| 179 | PAUSE() ; Prompt for next page or quit, if report is sent to screen | 
|---|
| 180 | N DIR,DIRUT,DUOUT,DTOUT,X,Y | 
|---|
| 181 | I 'CRT Q 0 | 
|---|
| 182 | S DIR(0)="E" | 
|---|
| 183 | D ^DIR I 'Y Q 1 | 
|---|
| 184 | Q 0 | 
|---|