| 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
 | 
|---|