| 1 | EASMTL2 ;MIN/TCM ALB/SCK/AEG - AUTOMATED MEANS TEST LETTER - SEARCH ; 7/3/01
 | 
|---|
| 2 |  ;;1.0;ENROLLMENT APPLICATION SYSTEM;**3,12,14,20,22,55**;MAR 15,2001
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | EN60 ; Entry point for inital 60-day letter search for candidates 
 | 
|---|
| 5 |  N EASIEN,DFN,VADM,CNT,ANNVDT,EASLAST
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  K ^TMP("EASERR",$J)
 | 
|---|
| 8 |  S CNT=0 ; Initialize counter
 | 
|---|
| 9 |  S ANNVDT=EASDT("ANV")
 | 
|---|
| 10 |  ; Check for means test data to process, quit if none found
 | 
|---|
| 11 |  Q:'$D(^DGMT(408.31,"B",ANNVDT))
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  ; Retieve data for each Means Test entry being processed
 | 
|---|
| 14 |  S EASIEN=0
 | 
|---|
| 15 |  F  S EASIEN=$O(^DGMT(408.31,"B",ANNVDT,EASIEN)) Q:EASIEN'>0  D
 | 
|---|
| 16 |  . ; Quit further processing if means test is not MEANS TEST type
 | 
|---|
| 17 |  . Q:'$$GET1^DIQ(408.31,EASIEN,.019,"I")=1
 | 
|---|
| 18 |  . S DFN=$$GET1^DIQ(408.31,EASIEN,.02,"I") ; get patient's DFN
 | 
|---|
| 19 |  . ; Check conditions; if all passed, add new entry to worklist file, #713.2
 | 
|---|
| 20 |  . Q:'DFN                         ; Safety check for DFN
 | 
|---|
| 21 |  . Q:'$$CHKDFN(DFN,EASIEN)          ; Check for valid PATIENT File entry, **55**
 | 
|---|
| 22 |  . Q:$$TEST(DFN)                  ; Quit if test patient
 | 
|---|
| 23 |  . S EASLAST=$$LST^DGMTU(DFN)     ; Get last MT on file
 | 
|---|
| 24 |  . Q:'(+EASLAST=EASIEN)  ; Not the latest MT record for patient
 | 
|---|
| 25 |  . Q:"L,N"[$P(EASLAST,U,4)        ; Quit, patient no longer requires means test (No Longer Applicable or No Longer Required)
 | 
|---|
| 26 |  . Q:$$DECEASED^EASMTUTL("",DFN)  ; Quit if patient deceased
 | 
|---|
| 27 |  . ;  If passed through all condition checks, update files
 | 
|---|
| 28 |  . Q:$$CHKSTAT(EASIEN,DFN)         ; Check current MT status
 | 
|---|
| 29 |  . Q:$$FUTURE(DFN)  ; Quit if a future means test is on file
 | 
|---|
| 30 |  . D NEWSTAT(DFN,.EASPT)
 | 
|---|
| 31 |  . Q:EASPT'>0  ; Safety check
 | 
|---|
| 32 |  . Q:'$$NEWLTR(EASPT,.EASDT)  ; Quit if letter status was not updated
 | 
|---|
| 33 |  . ; Finally, Update the counters
 | 
|---|
| 34 |  . S CNT=CNT+1
 | 
|---|
| 35 |  S EAS6CNT(EASPRCDT)=CNT,EAS6CNT=EAS6CNT+CNT
 | 
|---|
| 36 |  D ERRMSG
 | 
|---|
| 37 |  K ^TMP("EASERR",$J),^TMP("EASBDPTR",$J)
 | 
|---|
| 38 |  Q
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 | NEWLTR(EASPT,EASDT) ; Add new entry to the work list file #713.2.
 | 
|---|
| 41 |  ; Input
 | 
|---|
| 42 |  ;   EASPT  - Ptr to 713.1 file
 | 
|---|
| 43 |  ;   EASDT  - Worklist date array
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ; Output
 | 
|---|
| 46 |  ;   RSLT   - 1 if new letter status entry added
 | 
|---|
| 47 |  ;            0 if new letter status was not added
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  N ANNVDT,FDA,RSLT
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  S ANNVDT=EASDT("ANV")
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  ; Check for an existing entry for patient and anniversary date
 | 
|---|
| 54 |  I $D(^EAS(713.2,"AN",EASPT,ANNVDT)) Q 0 ; Quit if duplicate entry
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 |  ; Add new entry to the letter status file, #713.2
 | 
|---|
| 57 |  S FDA(1,713.2,"+1,",.01)=EADT
 | 
|---|
| 58 |  S FDA(1,713.2,"+1,",2)=EASPT
 | 
|---|
| 59 |  S FDA(1,713.2,"+1,",3)=ANNVDT
 | 
|---|
| 60 |  S FDA(1,713.2,"+1,",4)=0
 | 
|---|
| 61 |  S FDA(1,713.2,"+1,",8)=EASDT("60")
 | 
|---|
| 62 |  S FDA(1,713.2,"+1,",11)=EASDT("30")
 | 
|---|
| 63 |  S FDA(1,713.2,"+1,",17)=EASDT("0")
 | 
|---|
| 64 |  S FDA(1,713.2,"+1,",9)=1
 | 
|---|
| 65 |  ; Modification for DCD sites which are required to print only the 0-day letters
 | 
|---|
| 66 |  ;; EAS*1*12
 | 
|---|
| 67 |  I $$VERSION^XPDUTL("IVMC"),$G(DT)'>3021014 D
 | 
|---|
| 68 |  . K FDA(1,713.2,"+1,",9)
 | 
|---|
| 69 |  . S FDA(1,713.2,"+1,",18)=1
 | 
|---|
| 70 |  ; ***
 | 
|---|
| 71 |  D UPDATE^DIE("","FDA(1)","","ERRMSG")
 | 
|---|
| 72 |  Q 1
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 | UPDLTR(EAS1,TYPE) ; Update Flagged to print field for letter type
 | 
|---|
| 75 |  ; Input
 | 
|---|
| 76 |  ;   EAS1  - Ptr to file 713.2
 | 
|---|
| 77 |  ;   TYPE  - Letter type (1:60d, 2:30d, 4:0d)
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 |  N DGFDA,ERRMSG
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  S DGFDA(1,713.2,EAS1_",",$S(TYPE=2:12,1:18))=1
 | 
|---|
| 82 |  D UPDATE^DIE("","DGFDA(1)","","ERRMSG")
 | 
|---|
| 83 |  Q
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 | NEWSTAT(DFN,EASPT) ; Update the Patient status file, #713.1
 | 
|---|
| 86 |  ; Input
 | 
|---|
| 87 |  ;   DFN   - Patient's DFN
 | 
|---|
| 88 |  ;   EASPT - Return Var, New IEN to 713.1 file
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  N EASIEN,DGFDA,FDAIEN,ERROUT
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  ; Create new entry in the patient status file
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  I '$D(^EAS(713.1,"B",DFN)) D  Q
 | 
|---|
| 95 |  . S DGFDA(1,713.1,"+1,",.01)=DFN
 | 
|---|
| 96 |  . S DGFDA(1,713.1,"+1,",2)=0
 | 
|---|
| 97 |  . D UPDATE^DIE("","DGFDA(1)","FDAIEN","ERROUT(1)")
 | 
|---|
| 98 |  . I $D(ERROUT) D
 | 
|---|
| 99 |  . . S ^TMP("EASERR",$J,DFN)=ERROUT(1,"DIERR",1)_" - "_ERROUT(1,"DIERR",1,"TEXT",1)
 | 
|---|
| 100 |  . . S:+$G(FDAIEN(1))'>0 ^TMP("EASERR",$J,DFN)="Unable to generate entry in EAS MT PATIENT STATUS File, #713.1"
 | 
|---|
| 101 |  . S EASPT=+$G(FDAIEN(1))
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 |  I $D(^EAS(713.1,"B",DFN)) D
 | 
|---|
| 104 |  . Q:'DFN
 | 
|---|
| 105 |  . S EASPT=$O(^EAS(713.1,"B",DFN,0))
 | 
|---|
| 106 |  Q
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 | PRNTDT(EARY,ETYPE) ; Retrieve Print date and flagged to print status for letter type
 | 
|---|
| 109 |  ; Input
 | 
|---|
| 110 |  ;    EARY  - Data array from Patient Status file, #713.1, MT Anniversary date field, #11
 | 
|---|
| 111 |  ;    ETYPE - Search type, 30 or 0 day
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 |  ; Output
 | 
|---|
| 114 |  ;    RSLT = Print date ^ Flagged to print status
 | 
|---|
| 115 |  ;           will be 0^0 if nothing found to return
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  N RSLT
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 |  S RSLT=$S(ETYPE=2:EARY(11,"I"),ETYPE=4:EARY(17,"I"),1:0)
 | 
|---|
| 120 |  S RSLT=RSLT_"^"_+$S(ETYPE=2:EARY(12,"I"),ETYPE=4:EARY(18,"I"),1:0)
 | 
|---|
| 121 |  Q RSLT
 | 
|---|
| 122 |  ;
 | 
|---|
| 123 | CHKSTAT(EASIEN,DFN) ; Check for means test status, still required or not
 | 
|---|
| 124 |  ; Input
 | 
|---|
| 125 |  ;    EASIEN  - Internal Entry Number to the ANNUAL MEANS TEST File, #408.31
 | 
|---|
| 126 |  ;
 | 
|---|
| 127 |  ; Output
 | 
|---|
| 128 |  ;    1 - if means test is no longer required or applicable
 | 
|---|
| 129 |  ;    0 - if means test is still required
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 |  N RSLT,EASTAT
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 |  ; If status = "NO LONGER REQUIRED" or "NO LONGER APPLICABLE" then set result to 1
 | 
|---|
| 134 |  ; The .03 field is a pointer to the MEANS TEST STATUS File, #408.32, checks
 | 
|---|
| 135 |  ; IEN=3 and IEN=10, NO LONGER REQUIRED and NO LONGER APPLICABLE entries respectively 
 | 
|---|
| 136 |  ; If the 408.32 file is changed, this code will need to be reviewed and updated if necessary.
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 |  S RSLT=0,DFN=$G(DFN)
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 |  S EASTAT=$$GET1^DIQ(408.31,EASIEN,.03,"I")
 | 
|---|
| 141 |  I (EASTAT=3)!(EASTAT=10) S RSLT=1
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 |  ;; Check current MT Status from API (Looking for Cat-C, Agree to Pay Dedct, MT later than 10-5-99
 | 
|---|
| 144 |  I 'RSLT D
 | 
|---|
| 145 |  . S:'$$MTCHK^EASMTCHK(DFN,"L") RSLT=1
 | 
|---|
| 146 |  ;
 | 
|---|
| 147 |  Q $G(RSLT)
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 | FUTURE(DFN) ; Future Means Test available?
 | 
|---|
| 150 |  N RSLT
 | 
|---|
| 151 |  ;
 | 
|---|
| 152 |  S RSLT=$$FUT^DGMTU(DFN)
 | 
|---|
| 153 |  Q $G(RSLT)
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 | TEST(DFN) ; Test Patient?
 | 
|---|
| 156 |  N VAROOT,ZSSN,EASDEM
 | 
|---|
| 157 |  ;
 | 
|---|
| 158 |  S VAROOT="EASDEM"
 | 
|---|
| 159 |  D DEM^VADPT
 | 
|---|
| 160 |  S ZSSN=$P(EASDEM(2),U,1)
 | 
|---|
| 161 |  I $E(ZSSN,1,5)["00000" Q 1
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 |  Q 0
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 | CHKDFN(DFN,MTIEN) ; Checks for a valid zero node in the patient file entry.  
 | 
|---|
| 166 |  ; If no valid zero node, sets bad ptr entry
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 |  N RSLT
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 |  S DFN=$G(DFN),MTIEN=$G(MTIEN)
 | 
|---|
| 171 |  S RSLT=$D(^DPT(DFN,0))
 | 
|---|
| 172 |  I 'RSLT D
 | 
|---|
| 173 |  . S ^TMP("EASBDPTR",$J,DFN)=MTIEN
 | 
|---|
| 174 |  ;
 | 
|---|
| 175 |  Q $G(RSLT)
 | 
|---|
| 176 |  ;
 | 
|---|
| 177 | ERRMSG ; Send mail message if any errors were generated during processing
 | 
|---|
| 178 |  I $D(^TMP("EASERR",$J)) D ERRORS
 | 
|---|
| 179 |  I $D(^TMP("EASBDPTR",$J)) D BADPTR
 | 
|---|
| 180 |  Q
 | 
|---|
| 181 |  ;
 | 
|---|
| 182 | ERRORS ;
 | 
|---|
| 183 |  N EASDFN,EASERR,MSG,DFN,VA
 | 
|---|
| 184 |  ;
 | 
|---|
| 185 |  S MSG(.1)="The following issues were reported by the Means Test Letter Search Process:"
 | 
|---|
| 186 |  S MSG(.9)=""
 | 
|---|
| 187 |  ;
 | 
|---|
| 188 |  S EASDFN=0
 | 
|---|
| 189 |  F  S EASDFN=$O(^TMP("EASERR",$J,EASDFN)) Q:'EASDFN  D
 | 
|---|
| 190 |  . S DFN=EASDFN D PID^VADPT
 | 
|---|
| 191 |  . S MSG(EASDFN)=$$GET1^DIQ(2,EASDFN,.01)_" ("_VA("BID")_") "_$G(^TMP("EASERR",$J,EASDFN))
 | 
|---|
| 192 |  . K VA
 | 
|---|
| 193 |  ;
 | 
|---|
| 194 |  D SEND(.MSG)
 | 
|---|
| 195 |  Q
 | 
|---|
| 196 |  ;
 | 
|---|
| 197 | BADPTR ;
 | 
|---|
| 198 |  N EASDFN,EASERR,MSG,X
 | 
|---|
| 199 |  ;
 | 
|---|
| 200 |  S MSG(.1)="During the MT Letter Search, the following Annual Means Test "
 | 
|---|
| 201 |  S MSG(.2)="File entries (#408.31) were found which may point to a non-existent"
 | 
|---|
| 202 |  S MSG(.3)="Patient entry in the PATIENT File (#2):"
 | 
|---|
| 203 |  S MSG(.4)=""
 | 
|---|
| 204 |  S X=$$SETSTR^VALM1("PATIENT FILE (#2)","",5,20)
 | 
|---|
| 205 |  S X=$$SETSTR^VALM1("MT FILE (#408.31)",X,35,20)
 | 
|---|
| 206 |  S MSG(.5)=X
 | 
|---|
| 207 |  S X=$$SETSTR^VALM1("=================","",5,20)
 | 
|---|
| 208 |  S X=$$SETSTR^VALM1("=================",X,35,20)
 | 
|---|
| 209 |  S MSG(.6)=X
 | 
|---|
| 210 |  ;
 | 
|---|
| 211 |  S EASDFN=0
 | 
|---|
| 212 |  F  S EASDFN=$O(^TMP("EASBDPTR",$J,EASDFN)) Q:'EASDFN  D
 | 
|---|
| 213 |  . S X=$$SETSTR^VALM1(EASDFN,"",5,20)
 | 
|---|
| 214 |  . S X=$$SETSTR^VALM1($G(^TMP("EASBDPTR",$J,EASDFN)),X,35,20)
 | 
|---|
| 215 |  . S MSG(EASDFN)=X
 | 
|---|
| 216 |  ;
 | 
|---|
| 217 |  D SEND(.MSG)
 | 
|---|
| 218 |  Q
 | 
|---|
| 219 |  ;
 | 
|---|
| 220 | SEND(MSG) ;
 | 
|---|
| 221 |  S XMSUB="MT LETTERS SEARCH ISSUES - "_$$FMTE^XLFDT($$NOW^XLFDT,"D")
 | 
|---|
| 222 |  S XMTEXT="MSG("
 | 
|---|
| 223 |  S XMY("G.EAS MTLETTERS")=""
 | 
|---|
| 224 |  S XMDUZ="AUTOMATED MT LETTERS"
 | 
|---|
| 225 |  D ^XMD
 | 
|---|
| 226 |  Q
 | 
|---|