| 1 | EASMTL6 ; ALB/SCK,BRM,LBD,PHH - AUTOMATED MEANS TEST LETTER-INTERACTIVE PRINT ; 5/22/03 9:52am | 
|---|
| 2 | ;;1.0;ENROLLMENT APPLICATION SYSTEM;**3,14,15,29,25,22,54**;MAR 15,2001 | 
|---|
| 3 | ; | 
|---|
| 4 | EN ; Main entry point | 
|---|
| 5 | ; Input, set in option call, if not passed in, or called interactively, user is asked to specify. | 
|---|
| 6 | ;    EATYP - Used for selective printing of letters and forms | 
|---|
| 7 | ;         1 : 60-Day | 
|---|
| 8 | ;         2 : 30-Day | 
|---|
| 9 | ;         4 :  0-Day | 
|---|
| 10 | ; | 
|---|
| 11 | N DIR,DIRUT,POP,EASLOC,Y | 
|---|
| 12 | ; | 
|---|
| 13 | ;; Select type of letter to print | 
|---|
| 14 | I '$G(EATYP) D  Q:$D(DIRUT) | 
|---|
| 15 | . S DIR(0)="SO^1:60-Day;2:30-Day;4:0-Day" | 
|---|
| 16 | . S DIR("?")="Select the type of letter to print" | 
|---|
| 17 | . D ^DIR K DIR | 
|---|
| 18 | . S EATYP=+Y | 
|---|
| 19 | ; | 
|---|
| 20 | ;; Select facility filter if appropriate | 
|---|
| 21 | S EASLOC=-1 | 
|---|
| 22 | I $$GET1^DIQ(713,1,8,"I") D  Q:$D(DIRUT) | 
|---|
| 23 | . S DIR(0)="YAO",DIR("A")="Filter letters by Preferred Facility? " | 
|---|
| 24 | . S DIR("B")="NO" | 
|---|
| 25 | . S DIR("?")="Enter 'YES' to limit letters to a specific Facility or 'NO' to print all letters." | 
|---|
| 26 | . D ^DIR K DIR | 
|---|
| 27 | . Q:$D(DIRUT)!('Y) | 
|---|
| 28 | . S EASLOC=$$FACNUM | 
|---|
| 29 | ; | 
|---|
| 30 | K IOP,IO("Q") | 
|---|
| 31 | ; | 
|---|
| 32 | S %ZIS="QP",%ZIS("B")=$$GET1^DIQ(713,1,5) | 
|---|
| 33 | D ^%ZIS K %ZIS | 
|---|
| 34 | Q:POP | 
|---|
| 35 | I $D(IO("Q")) D QUE Q | 
|---|
| 36 | D LTR | 
|---|
| 37 | D ^%ZISC | 
|---|
| 38 | K EATYP | 
|---|
| 39 | Q | 
|---|
| 40 | ; | 
|---|
| 41 | QUE ; Queue the report | 
|---|
| 42 | N ZTRTN,ZTDESC,ZTSAVE,ZTSK,ZTDTH,ZTQUEUED | 
|---|
| 43 | ; | 
|---|
| 44 | S ZTRTN="LTR^EASMTL6" | 
|---|
| 45 | S ZTDESC="EAS MT LETTERS PRINT JOB" | 
|---|
| 46 | S ZTSAVE("EATYP")="",ZTSAVE("EASLOC")="" | 
|---|
| 47 | S ZTDTH="NOW" | 
|---|
| 48 | ; | 
|---|
| 49 | D ^%ZTLOAD | 
|---|
| 50 | I $D(ZTSK)[0 W !!?5,"Letters canceled!" | 
|---|
| 51 | E  W !!?5,"Letters queued! [ ",ZTSK," ]" | 
|---|
| 52 | D HOME^%ZIS | 
|---|
| 53 | Q | 
|---|
| 54 | ; | 
|---|
| 55 | LTR ; Main entry point | 
|---|
| 56 | N EASTMP,EASKP | 
|---|
| 57 | ; | 
|---|
| 58 | S EASTMP="^TMP(""EASMT"",$J)" | 
|---|
| 59 | K @EASTMP | 
|---|
| 60 | ; | 
|---|
| 61 | I '$D(ZTQUEUED) W !,"...Gathering letters to print...Please wait" | 
|---|
| 62 | D BLD(EATYP,EASLOC,EASTMP,.EASKP) | 
|---|
| 63 | D RESULT(.EASKP,EATYP) | 
|---|
| 64 | I '$D(ZTQUEUED) W !,"...Printing letters..." | 
|---|
| 65 | D PRINT(EASTMP,EATYP) | 
|---|
| 66 | K @EASTMP,EATYP | 
|---|
| 67 | Q | 
|---|
| 68 | ; | 
|---|
| 69 | RESULT(EASKP,EATYP) ; Send results of letter printing to mail group | 
|---|
| 70 | N MSG,XMSUB,XMY,XMTEXT,XMDUZ,TOT,X1 | 
|---|
| 71 | ; | 
|---|
| 72 | S MSG(1)="Letters to print: "_$J($FN(EASKP("CNT"),","),8) | 
|---|
| 73 | S MSG(2)="Letters where the print date has not reached: "_$J($FN(EASKP("T"),","),8) | 
|---|
| 74 | S MSG(2.5)="" | 
|---|
| 75 | S MSG(3)="The following letters were found but not printed for the following reasons:" | 
|---|
| 76 | S MSG(4)="Incomplete/Bad Addr :                 "_$J($FN(EASKP("I"),","),8) | 
|---|
| 77 | S MSG(5)="Deceased :                            "_$J($FN(EASKP("D"),","),8) | 
|---|
| 78 | S MSG(6)="MT Changed:                           "_$J($FN(EASKP("C"),","),8) | 
|---|
| 79 | S MSG(7)="Prohibit flag set:                    "_$J($FN(EASKP("P"),","),8) | 
|---|
| 80 | S MSG(8)="Not a User Enrollee:                  "_$J($FN(EASKP("U"),","),8) | 
|---|
| 81 | S MSG(8.5)="Not a User Enrollee of this facility: "_$J($FN(EASKP("O"),","),8) | 
|---|
| 82 | S MSG(9)="" | 
|---|
| 83 | S TOT=0 F X1="I","D","C","P","O","T","U","CNT" S TOT=TOT+EASKP(X1) | 
|---|
| 84 | S MSG(10)="Total Letters Processed: "_$J($FN(TOT,","),8)_" (MT not returned)" | 
|---|
| 85 | ; | 
|---|
| 86 | S XMSUB=$S(EATYP=1:"60-Day",EATYP=2:"30-Day",1:"0-Day")_" Print Letter Results" | 
|---|
| 87 | S XMTEXT="MSG(" | 
|---|
| 88 | S XMY("G.EAS MTLETTERS")="" | 
|---|
| 89 | S XMDUZ="AUTOMATED MT LETTERS" | 
|---|
| 90 | D ^XMD | 
|---|
| 91 | Q | 
|---|
| 92 | ; | 
|---|
| 93 | BLD(EATYP,EASLOC,EASTMP,EASKP) ; Build TMP array of letters to print | 
|---|
| 94 | N DFN,EASIEN,COUNT,EAX2,EASPTR,EASABRT,EASUE | 
|---|
| 95 | ; | 
|---|
| 96 | F EAX2="P","D","C","F","T","I","O","U","CNT" S EASKP(EAX2)=0 | 
|---|
| 97 | S COUNT=0 | 
|---|
| 98 | ; | 
|---|
| 99 | S EASIEN=0 ; Begin loop through un-returned means tests | 
|---|
| 100 | F  S EASIEN=$O(^EAS(713.2,"AC",0,EASIEN)) Q:'EASIEN  D  Q:$G(EASABRT) | 
|---|
| 101 | . S EASPTR=$$GET1^DIQ(713.2,EASIEN,2,"I") ; Pointer to File 713.1 | 
|---|
| 102 | . ; begin checks | 
|---|
| 103 | . Q:EASPTR<0  ; SAFETY CHECK | 
|---|
| 104 | . Q:$$LTRTYP^EASMTL6B(EASIEN)'=EATYP  ;  Check for appropriate letter type | 
|---|
| 105 | . S DFN=$$GET1^DIQ(713.1,EASPTR,.01,"I") Q:'DFN | 
|---|
| 106 | . ;; Filter by site, quit if filter not met | 
|---|
| 107 | . I +$G(EASLOC)>0 Q:$$GET1^DIQ(2,DFN,27.02,"I")'=+EASLOC | 
|---|
| 108 | . I $D(^EAS(713.1,"AP",1,EASPTR)) D  Q  ; Check Prohibit letter | 
|---|
| 109 | . . D CLRFLG^EASMTUTL(0,EASIEN) | 
|---|
| 110 | . . S EASKP("P")=EASKP("P")+1 | 
|---|
| 111 | . I $$DECEASED^EASMTUTL(EASIEN) D  Q  ; Check Deceased | 
|---|
| 112 | . . D CLRFLG^EASMTUTL(0,EASIEN) | 
|---|
| 113 | . . S EASKP("D")=EASKP("D")+1 | 
|---|
| 114 | . I $$CHECKMT^EASMTUTL(EASPTR,EASIEN) D  Q  ; Check MT changed? | 
|---|
| 115 | . . D CLRFLG^EASMTUTL(0,EASIEN) | 
|---|
| 116 | . . S EASKP("C")=EASKP("C")+1 Q | 
|---|
| 117 | . I $$FUTMT^EASMTUTL(EASIEN) D  Q  ; Check for a Future MT | 
|---|
| 118 | . . D CLRFLG^EASMTUTL(0,EASIEN) | 
|---|
| 119 | . . S EASKP("F")=EASKP("F")+1 | 
|---|
| 120 | . I '$$THRSHLD(EATYP,EASIEN) D  Q  ; Quit if letter threshold not reached | 
|---|
| 121 | . . S EASKP("T")=EASKP("T")+1 | 
|---|
| 122 | . ; Get User Enrollee status (0=not UE; 1=UE; 2=UE, not this site) | 
|---|
| 123 | . S EASUE=$$UESTAT^EASUER(DFN) | 
|---|
| 124 | . I 'EASUE D  Q     ; Quit if not User Enrollee | 
|---|
| 125 | . . D NOPRT(EATYP,EASIEN) | 
|---|
| 126 | . . S EASKP("U")=EASKP("U")+1 | 
|---|
| 127 | . I EASUE'=1 D  Q   ; Quit if User Enrollee site is not this facility | 
|---|
| 128 | . . D NOPRT(EATYP,EASIEN) | 
|---|
| 129 | . . S EASKP("O")=EASKP("O")+1 | 
|---|
| 130 | . I $$CHKADR^EASMTL6A(EASPTR) D  Q  ; Check for valid address | 
|---|
| 131 | . . S EASKP("I")=EASKP("I")+1 | 
|---|
| 132 | . S @EASTMP@(EASIEN)=EATYP ; Build entry | 
|---|
| 133 | . S EASKP("CNT")=EASKP("CNT")+1 | 
|---|
| 134 | . I $D(IO("Q")),$$S^%ZTLOAD("STOPPED BY USER") S EASABRT=1 | 
|---|
| 135 | Q | 
|---|
| 136 | ; | 
|---|
| 137 | OWNED(PTR1,EAIEN) ;  Check - Does this facility "own" this means test | 
|---|
| 138 | ;  Returns '1' if means test 'owned' by facility | 
|---|
| 139 | ;          '0' if not owned | 
|---|
| 140 | ; | 
|---|
| 141 | N MTNODE,MTLST,MTOWN,RSLT | 
|---|
| 142 | ; | 
|---|
| 143 | S RSLT=0 | 
|---|
| 144 | S MTLST=$$LST^DGMTU(PTR1) | 
|---|
| 145 | I $P(MTLST,U,1)>0 D | 
|---|
| 146 | . S MTNODE=$G(^DGMT(408.31,$P(MTLST,U,1),0)) | 
|---|
| 147 | . S MTOWN=$$GET1^DIQ(408.34,$P(MTNODE,U,23),.01) | 
|---|
| 148 | . I MTOWN="VAMC" S RSLT=1 Q | 
|---|
| 149 | . I MTOWN="DCD",$$VERSION^XPDUTL("IVMC") S RSLT=1 | 
|---|
| 150 | ; | 
|---|
| 151 | ;; If another facility 'owns' this MT, update MT Status information | 
|---|
| 152 | I 'RSLT D | 
|---|
| 153 | . Q:'EAIEN | 
|---|
| 154 | . S DIE="^EAS(713.2,",DA=EAIEN | 
|---|
| 155 | . S DR="4///YES;5///TODAY;7///MT 'OWNED' BY ANOTHER FACILITY;9///NO;12///NO;18///NO" | 
|---|
| 156 | . D ^DIE K DIE | 
|---|
| 157 | ; | 
|---|
| 158 | Q RSLT | 
|---|
| 159 | ; | 
|---|
| 160 | PRINT(EASTMP,EATYP) ; Print letters | 
|---|
| 161 | N EASIEN,EASABRT,Y | 
|---|
| 162 | ; | 
|---|
| 163 | U IO | 
|---|
| 164 | S EASIEN=0 | 
|---|
| 165 | F  S EASIEN=$O(@EASTMP@(EASIEN)) Q:'EASIEN  D  Q:$G(EASABRT) | 
|---|
| 166 | . D LETTER^EASMTL6A(EASIEN,EATYP) ; Print letter | 
|---|
| 167 | . D UPDSTAT(EASIEN,EATYP) ; Update Letter status file, #713.2 | 
|---|
| 168 | . I $D(IO("Q")),$$S^%ZTLOAD("STOPPED BY USER") S EASABRT=1 Q | 
|---|
| 169 | . I '$D(IO("Q")),$E(IOST,1,2)="C-" D | 
|---|
| 170 | . . S DIR(0)="E" | 
|---|
| 171 | . . D ^DIR K DIR | 
|---|
| 172 | . . S:'Y EASABRT=1 | 
|---|
| 173 | Q | 
|---|
| 174 | ; | 
|---|
| 175 | THRSHLD(EATYP,EASIEN) ; Check threshold for letter types | 
|---|
| 176 | ; Input | 
|---|
| 177 | ;    EATYP  - Letter type to print | 
|---|
| 178 | ;    EASIEN - IEN for file #713.2 | 
|---|
| 179 | ; | 
|---|
| 180 | ; Output | 
|---|
| 181 | ;    RSLT = 1: Letter is inside threshold to print | 
|---|
| 182 | ;           0: Letter is outside threshold (Don't print) | 
|---|
| 183 | ; | 
|---|
| 184 | N DIFF,THRESH,RSLT,ANVDT,MTDT | 
|---|
| 185 | ; | 
|---|
| 186 | S RSLT=1 | 
|---|
| 187 | Q:'$G(EATYP) | 
|---|
| 188 | S THRESH=$S(EATYP=1:60,EATYP=2:30,1:0) | 
|---|
| 189 | S MTDT=$$GET1^DIQ(713.2,EASIEN,3,"I") | 
|---|
| 190 | S ANVDT=$$ADDLEAP^EASMTUTL(MTDT) | 
|---|
| 191 | S DIFF=$$FMDIFF^XLFDT(ANVDT,$$DT^XLFDT) | 
|---|
| 192 | I DIFF>THRESH S RSLT=0 | 
|---|
| 193 | Q RSLT | 
|---|
| 194 | ; | 
|---|
| 195 | NOPRT(EATYP,EASIEN) ; Letter not printed, update Letter Status file #713.2 | 
|---|
| 196 | ; Input | 
|---|
| 197 | ;    EATYP  - Letter type to print | 
|---|
| 198 | ;    EASIEN - IEN for file #713.2 | 
|---|
| 199 | ; | 
|---|
| 200 | N DIE,DR,DA,LTR | 
|---|
| 201 | Q:'$G(EATYP)  Q:'$G(EASIEN) | 
|---|
| 202 | S DIE="^EAS(713.2,",DA=EASIEN | 
|---|
| 203 | S LTR=$S(EATYP=1:9,EATYP=2:12,EATYP=4:18,1:0) | 
|---|
| 204 | Q:'LTR | 
|---|
| 205 | ; Set current letter print statuses = "N" | 
|---|
| 206 | S DR=LTR_"///0;"_(LTR+1)_"///0" | 
|---|
| 207 | ; If current letter is not 0-day letter, set next letter print = "Y" | 
|---|
| 208 | S:LTR'=18 DR=DR_";"_$S(LTR=9:12,1:18)_"///1" | 
|---|
| 209 | D ^DIE | 
|---|
| 210 | Q | 
|---|
| 211 | ; | 
|---|
| 212 | UPDSTAT(EASN,EAX) ; Update Letter status file, #713.2 | 
|---|
| 213 | N DIE,DR,DA,EAPD,EAFLG,NXTFLG | 
|---|
| 214 | ; | 
|---|
| 215 | S DIE="^EAS(713.2,",DA=EASN | 
|---|
| 216 | S DR=$S(EAX=1:10,EAX=2:13,EAX=4:19,1:0) | 
|---|
| 217 | Q:'DR | 
|---|
| 218 | S EAPD=DR_".5",EAFLG=DR-1 | 
|---|
| 219 | S DR=DR_"///1;"_EAPD_"///^S X=$$DT^XLFDT;"_EAFLG_"///0" | 
|---|
| 220 | S NXTFLG=$S(EAFLG=9:12,EAFLG=12:18,1:0) | 
|---|
| 221 | S:NXTFLG>0 DR=DR_";"_NXTFLG_"///1" | 
|---|
| 222 | D ^DIE K DIE | 
|---|
| 223 | D CLRFLG^EASMTUTL(EAX,EASN) | 
|---|
| 224 | Q | 
|---|
| 225 | ; | 
|---|
| 226 | FACNUM() ;  Get facility number | 
|---|
| 227 | N RSLT,DIR,Y | 
|---|
| 228 | ; | 
|---|
| 229 | S DIR(0)="P^4:EMZ" | 
|---|
| 230 | S DIR("S")="I '$P($G(^DIC(4,Y,99)),U,4)" | 
|---|
| 231 | D ^DIR K DIR | 
|---|
| 232 | I $D(DIRUT) S RSLT=0 | 
|---|
| 233 | E  S RSLT=+Y_"^"_$P($G(^DIC(4,+Y,99)),U,1) | 
|---|
| 234 | ; | 
|---|
| 235 | Q RSLT | 
|---|
| 236 | ; | 
|---|
| 237 | GETFAC(EADFN,EASARY) ;  set facility return address information | 
|---|
| 238 | N EASFAC,EAX,EASF,EAS4 | 
|---|
| 239 | ; | 
|---|
| 240 | I $$GET1^DIQ(713,1,9,"I") D | 
|---|
| 241 | . S EASFAC=$$GET1^DIQ(2,EADFN,27.02,"I") | 
|---|
| 242 | . Q:'EASFAC | 
|---|
| 243 | . ;; Check for inactive flag | 
|---|
| 244 | . Q:$$GET1^DIQ(4,EASFAC,101,"I") | 
|---|
| 245 | . D GETS^DIQ(4,EASFAC,".01;1.01;1.02;1.03;1.04;.02;100","EI","EAS4") | 
|---|
| 246 | . S EASF=EASFAC_"," | 
|---|
| 247 | . ;; Check for valid address information | 
|---|
| 248 | . I EAS4(4,EASF,1.01,"E")]"",EAS4(4,EASF,1.03,"E")]"",EAS4(4,EASF,.02,"E")]"" S EASARY("TYP")="P" | 
|---|
| 249 | ; | 
|---|
| 250 | I $G(EASARY("TYP"))'="P" D | 
|---|
| 251 | . S EASFAC=$$SITE^VASITE | 
|---|
| 252 | . D GETS^DIQ(4,+EASFAC,".01;1.01;1.02;1.03;1.04;.02;100","EI","EAS4") | 
|---|
| 253 | . S EASARY("TYP")="F" | 
|---|
| 254 | ; | 
|---|
| 255 | S EASARY("FACNUM")=+EASFAC | 
|---|
| 256 | S EASARY("FAC")=$$GET1^DIQ(4,+EASFAC,.01,"I") | 
|---|
| 257 | F EAX=1.01,1.02,1.03,1.04,100 D | 
|---|
| 258 | .  S EASARY(EAX)=EAS4(4,+EASFAC_",",EAX,"E") | 
|---|
| 259 | S EASARY(.02)=EAS4(4,+EASFAC_",",.02,"E")_"^"_$$GET1^DIQ(5,EAS4(4,+EASFAC_",",.02,"I"),1) | 
|---|
| 260 | Q | 
|---|