EASMTUTL ; ALB/SCK/BRM/PHH - AUTOMATED MEANS TEST LETTERS UTILITIES ; 7/2/01
 ;;1.0;ENROLLMENT APPLICATION SYSTEM;**3,14,15,29,22,54**;MAR 15,2001
 ;
 ;
PAUSE ;  Screen pause, user must press key to continue
 S DIR(0)="FAO",DIR("A")="Press any key to continue..."
 D ^DIR K DIR
 Q
 ;
CLRFLG(EAX,DA) ; Clears flags in File #713.2, For development
 N DIE,DR
 ;
 Q:EAX=1
 S:EAX=2 DR="9///0"
 S:EAX=3 DR="9///0;12///0"
 S:EAX=4 DR="9///0;12///0"
 S:EAX=0 DR="9///0;12///0;18///0"
 S DIE="^EAS(713.2,"
 D ^DIE K DIE
 Q
 ;
LOCK(ACTION) ; Flag IN USE field in EAS Parameters file, #713
 ; Input
 ;   ACTION - Locking action
 ;            1 = Flag IN USE for Automated Generator is running
 ;            0 = Flag IN USE for Automated Generator is not running
 ; Output
 ;        1 if action was successful
 ;        0 if action was not successful
 N RSLT
 ;
 I ACTION,$D(^EAS(713,"ALOCK",1)) Q $G(RSLT)
 ;
 S DIE="^EAS(713,",DA=1,DR="30////^S X=ACTION"
 D ^DIE K DIE
 S RSLT=1
 Q +$G(RSLT)
 ;
ALERT(ERRMSG) ; Post an alert message to the EAS Letters Mail group
 N XMY,XMTEXT,XMDUZ,XMSUB,MSG
 ;
 S MSG(1)="Notification:"
 S MSG(2)=ERRMSG
 ;
 S XMY("G.EAS MTLETTERS")=""
 S XMTEXT="MSG("
 S XMDUZ="EAS Auto MT Letters"
 S XMSUB="EAS Means Test Letter's Notice"
 D ^XMD
 Q
 ;
ADRERR(EASADD,DFN) ; Error notification for missing or invalid patient address
 N MSG,XMY,XMTEXT,XMDUZ,XMSUB,VAROOT,EASDEM,VA,EASPRF
 ;
 S VAROOT="EASDEM"
 D DEM^VADPT
 D PID^VADPT6
 S EASPRF=$$GET1^DIQ(2,DFN,27.02)
 I EASPRF']"" S EASPRF="No Preferred Facility"
 ;
 S MSG(1)="The following patient does not have a complete permanent mailing"
 S MSG(2)="address.  A means test reminder letter could not be mailed."
 S MSG(3)=" "
 S MSG(4)="       Patient : "_EASDEM(1)
 S MSG(5)="        Last 4 : "_VA("BID")
 S MSG(6)="Address Line 1 : "_EASADD(1)
 S MSG(7)="          City : "_EASADD(4)
 S MSG(8)="         State : "_$P(EASADD(5),U,2)
 S MSG(9)="       Zipcode : "_$P(EASADD(11),U,2)
 S MSG(9.5)="      Bad Addr : "_$P(EASADD("BAI"),U,2)
 S MSG(10)=""
 S MSG(11)="           DFN : "_$G(DFN)
 S MSG(13)=""
 S MSG(14)="This patient's letter entry will stay in 'FLAGGED-TO-PRINT' status until"
 S MSG(15)="the address is corrected."
 ;
 I +EASADD(9)>0!(+EASADD(10)>0) D
 . S MSG(5.5)="** Temporary Address in effect **"
 S XMY("G.EAS MTLETTERS")=""
 S XMTEXT="MSG("
 S XMDUZ="EAS Auto MT Letters"
 S XMSUB="Incomplete/Bad Addr: "_EASPRF
 D ^XMD
 Q
 ;
CLRLCK ;  Clears IN USE field of the EAS MT PARAMETERS if an error occurs and locks the field
 N DIE,DR,DA
 ;
 S DA=1,DIE="^EAS(713,",DR="30///0"
 D ^DIE
 Q
 ;
PROHBIT ; Set or delete the Prohibit fields in the Patient Status file, #713.1
 N DIR,DIRUT,EASF,Y,X,EASIEN,DFN,DGFDA,FDAIEN,ERRMSG
 ;
 S DIR(0)="S^S:Set Prohibit Flag;R:Remove Prohibit Flag"
 S DIR("A")="Set or remove the MT Prohibit flag"
 S DIR("?")="Select 'S' to set flag, 'R' to remove the flag"
 D ^DIR K DIR
 Q:$D(DIRUT)
 S EASF=Y
 ;
 I EASF="R"!(EASF="r") D  Q:$D(DIRUT) 
 . S DIR(0)="PAO^713.1:EMZ"
 . S DIR("A")="Select Patient: "
 . D ^DIR K DIR
 . S EASIEN=+Y
 ;
 I EASF="S"!(EASF="s") D  Q:$D(DIRUT)
 . S DIR(0)="PAO^2:EMZ"
 . S DIR("A")="Select Patient: "
 . D ^DIR K DIR
 . Q:$D(DIRUT)
 . S DFN=+Y
 . I '$D(^EAS(713.1,"B",DFN)) D  Q:$D(DIRUT)
 . . S DIR(0)="Y",DIR("B")="YES"
 . . S DIR("A")="Add patient to the Patient Status File"
 . . D ^DIR K DIR
 . . Q:$D(DIRUT)
 . . I 'Y S DIRUT=1 Q
 . . S DGFDA(1,713.1,"+1,",.01)=DFN
 . . D UPDATE^DIE("","DGFDA(1)","FDAIEN","ERRMSG")
 . . S EASIEN=FDAIEN(1)
 . I $D(^EAS(713.1,"B",DFN)) S EASIEN=$O(^EAS(713.1,"B",DFN,0))
 ;
 Q:'$G(EASIEN)
 ;
 N DGFDA,DGIEN,DGEFF,DIR,DIRUT,DGERR,DIE
 ;
 S DGIEN=EASIEN_","
 I EASF="S" D
 . S DIR(0)="DAO^"_$$DT^XLFDT_"::EX"
 . S DIR("A")="Effective Date: "
 . D ^DIR K DIR
 . Q:$G(DIRUT)
 . S DGFDA(1,713.1,DGIEN,3)=Y
 . S DGFDA(1,713.1,DGIEN,2)=1
 . S DGFDA(1,713.1,DGIEN,5)=$$NOW^XLFDT
 . S DGFDA(1,713.1,DGIEN,4)=DUZ
 . D:$D(DGFDA) FILE^DIE("","DGFDA(1)","DGERR")
 . I $D(DGERR) D  Q
 . . D DSPLYER(.DGERR)
 . S DIE="^EAS(713.1,",DA=EASIEN,DR="10"
 . D ^DIE K DIE
 ;
 I EASF="R" D
 . S DGFDA(1,713.1,DGIEN,2)=0
 . S DGFDA(1,713.1,DGIEN,3)="@"
 . S DGFDA(1,713.1,DGIEN,5)="@"
 . S DGFDA(1,713.1,DGIEN,4)="@"
 . S DGFDA(1,713.1,DGIEN,10)="@"
 . D:$D(DGFDA) FILE^DIE("","DGFDA(1)","DGERR")
 . I $D(DGERR) D
 . . D DSPLYER(.DGERR)
 . E  W !!?3,"Prohibit Flag Removed from Patient.",!
 ;
 Q
 ;
DSPLYER(ERRARY) ;
 N DGER
 ;
 W !!?3,"The following error(s) occurred:"
 S DGER=0
 F  S DGER=$O(ERRARY("DIERR",DGER)) Q:'DGER  D
 . W !?3,ERRARY("DIERR",DGER)," - ",ERRARY("DIERR",DGER,"TEXT",1)
 W !?3,"Please check, this record update may not have processed completely."
 Q
 ;
EDTLTRS ;
 N DIR,EASIEN
 ;
 S DIR(0)="P^713.3:EMZ"
 S DIR("A")="Select Letter"
 D ^DIR K DIR
 Q:$D(DIRUT)
 S EASIEN=+Y
 ;
 S DIE="^EAS(713.3,",DA=EASIEN,DR="4"
 D ^DIE
 Q
 ;
MTRTN ; Update the letter status file, #713.2, with returned Means Test information
 N DIE,DIC,EASIEN,DR,DA,Y
 ;
 S DIC="^EAS(713.2,",DIC(0)="AEQM",DIC("A")="Select the Letter Status entry to update: "
 D ^DIC K DIC
 Q:Y<0
 S EASIEN=+Y
 ;
 S DIE="^EAS(713.2,",DA=EASIEN
 S DR="4;I X=0 S Y=0;5;7;6////^S X=DUZ;9///0;12///0;18///0"
 L +^EAS(713.2,EASIEN):0 I $T D 
 . D ^DIE K DIE
 E  W !,$CHAR(7),"Entry is being edited by another user."
 L -^EAS(713.2,EASIEN)
 ;
 Q
 ;
DECEASED(EASIEN,DFN) ;  Check deceased status for patient
 N RSLT,EADEM,EAS1,VAROOT
 ;
 S EASIEN=$G(EASIEN)
 S DFN=$G(DFN)
 I EASIEN>0 D
 . S EAS1=$$GET1^DIQ(713.2,EASIEN,2,"I")
 . S DFN=$$GET1^DIQ(713.1,EAS1,.01,"I")
 Q:'DFN 0
 S RSLT=0
 ;
 S VAROOT="EADEM"
 D DEM^VADPT
 S:+EADEM(6) RSLT=1
 D KVA^VADPT
 Q RSLT
 ;
CHECKMT(EASPT,EAIEN) ; Check current MT status
 N DFN,RTN,EACHK,DIE,DR,DA
 ;
 S RTN=0
 I '$G(EASPT) S RTN=1 G CHKQ ; Safety check
 S DFN=$$GET1^DIQ(713.1,EASPT,.01,"I") ; Get DFN
 I '$G(DFN) S RTN=1 G CHKQ ; Safety check
 ;
 S EACHK=$$MTCHK^EASMTCHK(DFN,"L") ; Check current MT to see if it's changed
 I 'EACHK D  ; If MT no longer required, update letter status file
 . S DIE="^EAS(713.2,",DA=EAIEN
 . S DR="4///YES;5///TODAY;7///AUTO-GENERATED;9///NO;12///NO;18///NO"
 . D ^DIE K DIE ;; Remove before release
 . S RTN=1
 ;
CHKQ Q RTN
 ;
FUTMT(EASIEN) ; Check for a future MT
 ;  Input
 ;    EASIEN - IEN for record in Letter Status file
 ;
 ;  Output
 ;     1 - Future MT exist's (API call)
 ;     0 - Future MT does not exist
 ;
 N EASPTR,DFN,EASFUT
 ;
 S RTN=0
 S EASPTR=$$GET1^DIQ(713.2,EASIEN,2,"I")
 S DFN=$$GET1^DIQ(713.1,EASPTR,.01,"I")
 ;
 ;; Call API for future MT check
 S EASFUT=$$FUT^DGMTU(DFN)
 ;
 I +$G(EASFUT) D  ; Turn off letters if future MT present
 . Q:'EASIEN
 . S DIE="^EAS(713.2,",DA=EASIEN
 . S DR="4///YES;5///TODAY;7///FUTURE MEANS TEST;9///NO;12///NO;18///NO"
 . D ^DIE K DIE
 . S RTN=1
 Q RTN
 ;
TESTLTR ;
 N EASIEN,EATYP,DIR,DIRUT,ZTSAVE
 ;
 S DIR(0)="SO^1:60-Day;2:30-Day;4:0-Day"
 S DIR("A")="Select letter type to test"
 S DIR("?")="Select the type of letter to print a test output of"
 D ^DIR K DIR
 Q:$D(DIRUT)
 S EATYP=+Y
 S EASIEN=-1
 S ZTSAVE("EASIEN")="",ZTSAVE("EATYP")=""
 D EN^XUTMDEVQ("ZTEST^EASMTUTL","EAS MT TEST LETTER",.ZTSAVE)
 Q
 ;
TESTIT ;
 D LETTER^EASMTL6A(EASIEN,EATYP)
 Q
 ;
ZTEST ;
 D LETTER^EASMTL6A(EASIEN,EATYP)
 Q
ADDLEAP(DATE) ; Adding a year with Leap Year checking
 ; Input:
 ;       DATE   -  Date passed in.
 ;
 ; Output:
 ;       Date passed in plus one year (with leap year ck/adj).
 ;
 N YEAR
 S YEAR=$E($$FMTHL7^XLFDT(DATE),1,4)
 I $E(DATE,4,7)="0229",'$$LEAP^XLFDT3(YEAR+1) D
 .S DATE=$$FMADD^XLFDT(DATE,-1)
 Q $E(DATE,1,3)+1_$E(DATE,4,7)
 ;
SUBLEAP(DATE) ; Subtracting a year with Leap Year checking
 ; Input:
 ;       DATE   -  Date passed in.
 ;
 ; Output:
 ;       Date passed in minus one year (with leap year ck/adj).
 ;
 N YEAR
 S YEAR=$E($$FMTHL7^XLFDT(DATE),1,4)
 I $E(DATE,4,7)="0229",'$$LEAP^XLFDT3(YEAR-1) D
 .S DATE=$$FMADD^XLFDT(DATE,-1)
 Q $E(DATE,1,3)-1_$E(DATE,4,7)
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HEASMTUTL   8153     printed  Sep 23, 2025@19:31:39                                                                                                                                                                                                    Page 2
EASMTUTL  ; ALB/SCK/BRM/PHH - AUTOMATED MEANS TEST LETTERS UTILITIES ; 7/2/01
 +1       ;;1.0;ENROLLMENT APPLICATION SYSTEM;**3,14,15,29,22,54**;MAR 15,2001
 +2       ;
 +3       ;
PAUSE     ;  Screen pause, user must press key to continue
 +1        SET DIR(0)="FAO"
           SET DIR("A")="Press any key to continue..."
 +2        DO ^DIR
           KILL DIR
 +3        QUIT 
 +4       ;
CLRFLG(EAX,DA) ; Clears flags in File #713.2, For development
 +1        NEW DIE,DR
 +2       ;
 +3        if EAX=1
               QUIT 
 +4        if EAX=2
               SET DR="9///0"
 +5        if EAX=3
               SET DR="9///0;12///0"
 +6        if EAX=4
               SET DR="9///0;12///0"
 +7        if EAX=0
               SET DR="9///0;12///0;18///0"
 +8        SET DIE="^EAS(713.2,"
 +9        DO ^DIE
           KILL DIE
 +10       QUIT 
 +11      ;
LOCK(ACTION) ; Flag IN USE field in EAS Parameters file, #713
 +1       ; Input
 +2       ;   ACTION - Locking action
 +3       ;            1 = Flag IN USE for Automated Generator is running
 +4       ;            0 = Flag IN USE for Automated Generator is not running
 +5       ; Output
 +6       ;        1 if action was successful
 +7       ;        0 if action was not successful
 +8        NEW RSLT
 +9       ;
 +10       IF ACTION
               IF $DATA(^EAS(713,"ALOCK",1))
                   QUIT $GET(RSLT)
 +11      ;
 +12       SET DIE="^EAS(713,"
           SET DA=1
           SET DR="30////^S X=ACTION"
 +13       DO ^DIE
           KILL DIE
 +14       SET RSLT=1
 +15       QUIT +$GET(RSLT)
 +16      ;
ALERT(ERRMSG) ; Post an alert message to the EAS Letters Mail group
 +1        NEW XMY,XMTEXT,XMDUZ,XMSUB,MSG
 +2       ;
 +3        SET MSG(1)="Notification:"
 +4        SET MSG(2)=ERRMSG
 +5       ;
 +6        SET XMY("G.EAS MTLETTERS")=""
 +7        SET XMTEXT="MSG("
 +8        SET XMDUZ="EAS Auto MT Letters"
 +9        SET XMSUB="EAS Means Test Letter's Notice"
 +10       DO ^XMD
 +11       QUIT 
 +12      ;
ADRERR(EASADD,DFN) ; Error notification for missing or invalid patient address
 +1        NEW MSG,XMY,XMTEXT,XMDUZ,XMSUB,VAROOT,EASDEM,VA,EASPRF
 +2       ;
 +3        SET VAROOT="EASDEM"
 +4        DO DEM^VADPT
 +5        DO PID^VADPT6
 +6        SET EASPRF=$$GET1^DIQ(2,DFN,27.02)
 +7        IF EASPRF']""
               SET EASPRF="No Preferred Facility"
 +8       ;
 +9        SET MSG(1)="The following patient does not have a complete permanent mailing"
 +10       SET MSG(2)="address.  A means test reminder letter could not be mailed."
 +11       SET MSG(3)=" "
 +12       SET MSG(4)="       Patient : "_EASDEM(1)
 +13       SET MSG(5)="        Last 4 : "_VA("BID")
 +14       SET MSG(6)="Address Line 1 : "_EASADD(1)
 +15       SET MSG(7)="          City : "_EASADD(4)
 +16       SET MSG(8)="         State : "_$PIECE(EASADD(5),U,2)
 +17       SET MSG(9)="       Zipcode : "_$PIECE(EASADD(11),U,2)
 +18       SET MSG(9.5)="      Bad Addr : "_$PIECE(EASADD("BAI"),U,2)
 +19       SET MSG(10)=""
 +20       SET MSG(11)="           DFN : "_$GET(DFN)
 +21       SET MSG(13)=""
 +22       SET MSG(14)="This patient's letter entry will stay in 'FLAGGED-TO-PRINT' status until"
 +23       SET MSG(15)="the address is corrected."
 +24      ;
 +25       IF +EASADD(9)>0!(+EASADD(10)>0)
               Begin DoDot:1
 +26               SET MSG(5.5)="** Temporary Address in effect **"
               End DoDot:1
 +27       SET XMY("G.EAS MTLETTERS")=""
 +28       SET XMTEXT="MSG("
 +29       SET XMDUZ="EAS Auto MT Letters"
 +30       SET XMSUB="Incomplete/Bad Addr: "_EASPRF
 +31       DO ^XMD
 +32       QUIT 
 +33      ;
CLRLCK    ;  Clears IN USE field of the EAS MT PARAMETERS if an error occurs and locks the field
 +1        NEW DIE,DR,DA
 +2       ;
 +3        SET DA=1
           SET DIE="^EAS(713,"
           SET DR="30///0"
 +4        DO ^DIE
 +5        QUIT 
 +6       ;
PROHBIT   ; Set or delete the Prohibit fields in the Patient Status file, #713.1
 +1        NEW DIR,DIRUT,EASF,Y,X,EASIEN,DFN,DGFDA,FDAIEN,ERRMSG
 +2       ;
 +3        SET DIR(0)="S^S:Set Prohibit Flag;R:Remove Prohibit Flag"
 +4        SET DIR("A")="Set or remove the MT Prohibit flag"
 +5        SET DIR("?")="Select 'S' to set flag, 'R' to remove the flag"
 +6        DO ^DIR
           KILL DIR
 +7        if $DATA(DIRUT)
               QUIT 
 +8        SET EASF=Y
 +9       ;
 +10       IF EASF="R"!(EASF="r")
               Begin DoDot:1
 +11               SET DIR(0)="PAO^713.1:EMZ"
 +12               SET DIR("A")="Select Patient: "
 +13               DO ^DIR
                   KILL DIR
 +14               SET EASIEN=+Y
               End DoDot:1
               if $DATA(DIRUT)
                   QUIT 
 +15      ;
 +16       IF EASF="S"!(EASF="s")
               Begin DoDot:1
 +17               SET DIR(0)="PAO^2:EMZ"
 +18               SET DIR("A")="Select Patient: "
 +19               DO ^DIR
                   KILL DIR
 +20               if $DATA(DIRUT)
                       QUIT 
 +21               SET DFN=+Y
 +22               IF '$DATA(^EAS(713.1,"B",DFN))
                       Begin DoDot:2
 +23                       SET DIR(0)="Y"
                           SET DIR("B")="YES"
 +24                       SET DIR("A")="Add patient to the Patient Status File"
 +25                       DO ^DIR
                           KILL DIR
 +26                       if $DATA(DIRUT)
                               QUIT 
 +27                       IF 'Y
                               SET DIRUT=1
                               QUIT 
 +28                       SET DGFDA(1,713.1,"+1,",.01)=DFN
 +29                       DO UPDATE^DIE("","DGFDA(1)","FDAIEN","ERRMSG")
 +30                       SET EASIEN=FDAIEN(1)
                       End DoDot:2
                       if $DATA(DIRUT)
                           QUIT 
 +31               IF $DATA(^EAS(713.1,"B",DFN))
                       SET EASIEN=$ORDER(^EAS(713.1,"B",DFN,0))
               End DoDot:1
               if $DATA(DIRUT)
                   QUIT 
 +32      ;
 +33       if '$GET(EASIEN)
               QUIT 
 +34      ;
 +35       NEW DGFDA,DGIEN,DGEFF,DIR,DIRUT,DGERR,DIE
 +36      ;
 +37       SET DGIEN=EASIEN_","
 +38       IF EASF="S"
               Begin DoDot:1
 +39               SET DIR(0)="DAO^"_$$DT^XLFDT_"::EX"
 +40               SET DIR("A")="Effective Date: "
 +41               DO ^DIR
                   KILL DIR
 +42               if $GET(DIRUT)
                       QUIT 
 +43               SET DGFDA(1,713.1,DGIEN,3)=Y
 +44               SET DGFDA(1,713.1,DGIEN,2)=1
 +45               SET DGFDA(1,713.1,DGIEN,5)=$$NOW^XLFDT
 +46               SET DGFDA(1,713.1,DGIEN,4)=DUZ
 +47               if $DATA(DGFDA)
                       DO FILE^DIE("","DGFDA(1)","DGERR")
 +48               IF $DATA(DGERR)
                       Begin DoDot:2
 +49                       DO DSPLYER(.DGERR)
                       End DoDot:2
                       QUIT 
 +50               SET DIE="^EAS(713.1,"
                   SET DA=EASIEN
                   SET DR="10"
 +51               DO ^DIE
                   KILL DIE
               End DoDot:1
 +52      ;
 +53       IF EASF="R"
               Begin DoDot:1
 +54               SET DGFDA(1,713.1,DGIEN,2)=0
 +55               SET DGFDA(1,713.1,DGIEN,3)="@"
 +56               SET DGFDA(1,713.1,DGIEN,5)="@"
 +57               SET DGFDA(1,713.1,DGIEN,4)="@"
 +58               SET DGFDA(1,713.1,DGIEN,10)="@"
 +59               if $DATA(DGFDA)
                       DO FILE^DIE("","DGFDA(1)","DGERR")
 +60               IF $DATA(DGERR)
                       Begin DoDot:2
 +61                       DO DSPLYER(.DGERR)
                       End DoDot:2
 +62              IF '$TEST
                       WRITE !!?3,"Prohibit Flag Removed from Patient.",!
               End DoDot:1
 +63      ;
 +64       QUIT 
 +65      ;
DSPLYER(ERRARY) ;
 +1        NEW DGER
 +2       ;
 +3        WRITE !!?3,"The following error(s) occurred:"
 +4        SET DGER=0
 +5        FOR 
               SET DGER=$ORDER(ERRARY("DIERR",DGER))
               if 'DGER
                   QUIT 
               Begin DoDot:1
 +6                WRITE !?3,ERRARY("DIERR",DGER)," - ",ERRARY("DIERR",DGER,"TEXT",1)
               End DoDot:1
 +7        WRITE !?3,"Please check, this record update may not have processed completely."
 +8        QUIT 
 +9       ;
EDTLTRS   ;
 +1        NEW DIR,EASIEN
 +2       ;
 +3        SET DIR(0)="P^713.3:EMZ"
 +4        SET DIR("A")="Select Letter"
 +5        DO ^DIR
           KILL DIR
 +6        if $DATA(DIRUT)
               QUIT 
 +7        SET EASIEN=+Y
 +8       ;
 +9        SET DIE="^EAS(713.3,"
           SET DA=EASIEN
           SET DR="4"
 +10       DO ^DIE
 +11       QUIT 
 +12      ;
MTRTN     ; Update the letter status file, #713.2, with returned Means Test information
 +1        NEW DIE,DIC,EASIEN,DR,DA,Y
 +2       ;
 +3        SET DIC="^EAS(713.2,"
           SET DIC(0)="AEQM"
           SET DIC("A")="Select the Letter Status entry to update: "
 +4        DO ^DIC
           KILL DIC
 +5        if Y<0
               QUIT 
 +6        SET EASIEN=+Y
 +7       ;
 +8        SET DIE="^EAS(713.2,"
           SET DA=EASIEN
 +9        SET DR="4;I X=0 S Y=0;5;7;6////^S X=DUZ;9///0;12///0;18///0"
 +10       LOCK +^EAS(713.2,EASIEN):0
           IF $TEST
               Begin DoDot:1
 +11               DO ^DIE
                   KILL DIE
               End DoDot:1
 +12      IF '$TEST
               WRITE !,$CHAR(7),"Entry is being edited by another user."
 +13       LOCK -^EAS(713.2,EASIEN)
 +14      ;
 +15       QUIT 
 +16      ;
DECEASED(EASIEN,DFN) ;  Check deceased status for patient
 +1        NEW RSLT,EADEM,EAS1,VAROOT
 +2       ;
 +3        SET EASIEN=$GET(EASIEN)
 +4        SET DFN=$GET(DFN)
 +5        IF EASIEN>0
               Begin DoDot:1
 +6                SET EAS1=$$GET1^DIQ(713.2,EASIEN,2,"I")
 +7                SET DFN=$$GET1^DIQ(713.1,EAS1,.01,"I")
               End DoDot:1
 +8        if 'DFN
               QUIT 0
 +9        SET RSLT=0
 +10      ;
 +11       SET VAROOT="EADEM"
 +12       DO DEM^VADPT
 +13       if +EADEM(6)
               SET RSLT=1
 +14       DO KVA^VADPT
 +15       QUIT RSLT
 +16      ;
CHECKMT(EASPT,EAIEN) ; Check current MT status
 +1        NEW DFN,RTN,EACHK,DIE,DR,DA
 +2       ;
 +3        SET RTN=0
 +4       ; Safety check
           IF '$GET(EASPT)
               SET RTN=1
               GOTO CHKQ
 +5       ; Get DFN
           SET DFN=$$GET1^DIQ(713.1,EASPT,.01,"I")
 +6       ; Safety check
           IF '$GET(DFN)
               SET RTN=1
               GOTO CHKQ
 +7       ;
 +8       ; Check current MT to see if it's changed
           SET EACHK=$$MTCHK^EASMTCHK(DFN,"L")
 +9       ; If MT no longer required, update letter status file
           IF 'EACHK
               Begin DoDot:1
 +10               SET DIE="^EAS(713.2,"
                   SET DA=EAIEN
 +11               SET DR="4///YES;5///TODAY;7///AUTO-GENERATED;9///NO;12///NO;18///NO"
 +12      ;; Remove before release
                   DO ^DIE
                   KILL DIE
 +13               SET RTN=1
               End DoDot:1
 +14      ;
CHKQ       QUIT RTN
 +1       ;
FUTMT(EASIEN) ; Check for a future MT
 +1       ;  Input
 +2       ;    EASIEN - IEN for record in Letter Status file
 +3       ;
 +4       ;  Output
 +5       ;     1 - Future MT exist's (API call)
 +6       ;     0 - Future MT does not exist
 +7       ;
 +8        NEW EASPTR,DFN,EASFUT
 +9       ;
 +10       SET RTN=0
 +11       SET EASPTR=$$GET1^DIQ(713.2,EASIEN,2,"I")
 +12       SET DFN=$$GET1^DIQ(713.1,EASPTR,.01,"I")
 +13      ;
 +14      ;; Call API for future MT check
 +15       SET EASFUT=$$FUT^DGMTU(DFN)
 +16      ;
 +17      ; Turn off letters if future MT present
           IF +$GET(EASFUT)
               Begin DoDot:1
 +18               if 'EASIEN
                       QUIT 
 +19               SET DIE="^EAS(713.2,"
                   SET DA=EASIEN
 +20               SET DR="4///YES;5///TODAY;7///FUTURE MEANS TEST;9///NO;12///NO;18///NO"
 +21               DO ^DIE
                   KILL DIE
 +22               SET RTN=1
               End DoDot:1
 +23       QUIT RTN
 +24      ;
TESTLTR   ;
 +1        NEW EASIEN,EATYP,DIR,DIRUT,ZTSAVE
 +2       ;
 +3        SET DIR(0)="SO^1:60-Day;2:30-Day;4:0-Day"
 +4        SET DIR("A")="Select letter type to test"
 +5        SET DIR("?")="Select the type of letter to print a test output of"
 +6        DO ^DIR
           KILL DIR
 +7        if $DATA(DIRUT)
               QUIT 
 +8        SET EATYP=+Y
 +9        SET EASIEN=-1
 +10       SET ZTSAVE("EASIEN")=""
           SET ZTSAVE("EATYP")=""
 +11       DO EN^XUTMDEVQ("ZTEST^EASMTUTL","EAS MT TEST LETTER",.ZTSAVE)
 +12       QUIT 
 +13      ;
TESTIT    ;
 +1        DO LETTER^EASMTL6A(EASIEN,EATYP)
 +2        QUIT 
 +3       ;
ZTEST     ;
 +1        DO LETTER^EASMTL6A(EASIEN,EATYP)
 +2        QUIT 
ADDLEAP(DATE) ; Adding a year with Leap Year checking
 +1       ; Input:
 +2       ;       DATE   -  Date passed in.
 +3       ;
 +4       ; Output:
 +5       ;       Date passed in plus one year (with leap year ck/adj).
 +6       ;
 +7        NEW YEAR
 +8        SET YEAR=$EXTRACT($$FMTHL7^XLFDT(DATE),1,4)
 +9        IF $EXTRACT(DATE,4,7)="0229"
               IF '$$LEAP^XLFDT3(YEAR+1)
                   Begin DoDot:1
 +10                   SET DATE=$$FMADD^XLFDT(DATE,-1)
                   End DoDot:1
 +11       QUIT $EXTRACT(DATE,1,3)+1_$EXTRACT(DATE,4,7)
 +12      ;
SUBLEAP(DATE) ; Subtracting a year with Leap Year checking
 +1       ; Input:
 +2       ;       DATE   -  Date passed in.
 +3       ;
 +4       ; Output:
 +5       ;       Date passed in minus one year (with leap year ck/adj).
 +6       ;
 +7        NEW YEAR
 +8        SET YEAR=$EXTRACT($$FMTHL7^XLFDT(DATE),1,4)
 +9        IF $EXTRACT(DATE,4,7)="0229"
               IF '$$LEAP^XLFDT3(YEAR-1)
                   Begin DoDot:1
 +10                   SET DATE=$$FMADD^XLFDT(DATE,-1)
                   End DoDot:1
 +11       QUIT $EXTRACT(DATE,1,3)-1_$EXTRACT(DATE,4,7)