PRSPEEM ;HISC/MGD - ESR EXCEPTIONS FOR ENTIRE MEMORANDA ;06/15/05
 ;;4.0;PAID;**93**;Sep 21, 1995;Build 7
 ;;Per VHA Directive 2004-038, this routine should not be modified.
 Q
PAY ; Payroll Entry
 S PRSTLV=7,QUITX=0
 D T0
 Q
 ;
SUP ; Supervisor Entry
 ;
 S PRSTLV=3,QUITX=0
T0 K DIR,^TMP($J,"PRSPEEM"),^TMP($J,"PRSPEEM EMP")
 D TOP ; print header
 D OMIT ; Prompt to omit current Pay Period
 I X="^" D EX Q
 D TLCHK ; Check for Supervisor of just 1 or mult T&L
 I MULT>1 D TL
 I MULT=1 D
 . S TL="ATL"_TLE
 . D EMP
 I '$D(^TMP($J,"PRSPEEM")) W !,"No exceptions found for input criteria." Q
 D SCRN1
 D EX
 ;
 Q
OMIT ; Prompt for Omit current pay period
 S DIR(0)="Y"
 S DIR("A")="Would you like to omit the current pay period from this report"
 D ^DIR K DIR
 S OMIT=Y
 Q
 ;
TLCHK ; Check for Supervisor of just 1 or mult T&L
 S MULT=0,I=""
 F  S I=$O(^PRST(455.5,"AS",DUZ,I)) Q:'I  D
 . S MULT=MULT+1,TLI=I,TLE=$P(^PRST(455.5,I,0),U,1)
 Q
 ;
TL ; Loop to enter T&Ls and employees
 N SEL ; local array to hold selected t&ls and employees
 S QUIT1=0
 F  D  Q:QUIT1
 . D ^PRSAUTL
 . I 'TLI S QUIT1=1 Q
 . I $D(SEL(TLI,"A")) D  Q
 ..  W !!,?5,"You have already selected all the employees in T&L unit ",$G(TLE),"."
 ..  W !,?5,"Select another T&L OR enter <return> to begin report."
 . D EMP
 Q
 ;
 ; Loop for individual employees in a T&L
EMP S QUIT2=0
 S DIR(0)="SM^A:All PT Physicians in the T&L;I:Individual PT Physicians"
 S DIR("A")="Enter Choice"
 D ^DIR K DIR
 ; Loop for All employee in a T&L
 I Y="A" D  Q
 . K SEL(TLI) S SEL(TLI,"A")=""
 . K ^TMP($J,"PRSPEEM",TLI)
 . S EMP="",TL="ATL"_TLE
 . F  S EMP=$O(^PRSPC(TL,EMP)) Q:EMP=""  D
 . . S PRSIEN=$O(^PRSPC(TL,EMP,0))
 . . Q:'PRSIEN
 . . D MEM ; Check for memos w/ status = ACTIVE or RECONCILIATION STARTED
 . . S QUIT2=1
 Q:QUIT2
 ;
 S PPI=+$G(^PRST(458,"AD",DT)),PRSDT=DT,PTPF=1
 F  D  Q:QUIT2
 . K DIC
 . S DIC("A")=$S('$D(SEL(TLI)):"Select EMPLOYEE: ",1:"Select Another EMPLOYEE: ")
 . S DIC(0)="AEQM",DIC="^PRSPC(",D="ATL"_TLE
 . S DIC("S")="I $P(^(0),""^"",8)=TLE,$D(^PRST(458.7,""B"",+Y)),'$D(SEL(TLI,+Y))"
 . W !
 . D IX^DIC S PRSIEN=+Y
 . I X=""!(X="^") S QUIT2=1 Q
 . S SEL(TLI,PRSIEN)=""
 . D MEM
 Q
 ;
MEM ; Check for memos w/ status of ACTIVE (2) or RECONCILIATION STARTED (3)
 N PPI
 S MIEN=""
 F  S MIEN=$O(^PRST(458.7,"B",PRSIEN,MIEN)) Q:'MIEN  D
 . S DATA0=$G(^PRST(458.7,MIEN,0))
 . S STATUS=$P(DATA0,U,6)
 . Q:STATUS'=2&(STATUS'=3)
 . S TDAT=$P($G(^PRST(458.7,MIEN,4)),U,1)
 . I TDAT S TDAT=+$G(^PRST(458,"AD",TDAT)) ; IEN of termination PP 
 . ; Loop to check for any incomplete days in any PP of the memo
 . S PP=0
 . F I=1:1:26 S PPE=$P($G(^PRST(458.7,MIEN,9,I,0)),U) Q:PPE=""  D
 . . S PPI=$O(^PRST(458,"B",PPE,0))
 . . Q:'PPI
 . . ; If the memo was terminated, only check ESRs up to and
 . . ; including the Termination Date
 . . Q:TDAT&(PPI>TDAT)  ; Don't look past termination PP
 . . S PP=PP+1
 . . S DATA1=$G(^PRST(458,PPI,1)) ; FileMan Dates
 . . Q:'+$$MIEN^PRSPUT1(PRSIEN,$P(DATA1,U,I))
 . . F DAY=1:1:14 D
 . . . S ESRSTAT=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",DAY,7)),U,1)
 . . . Q:ESRSTAT>3
 . . . S ESRSTATX=$$EXTERNAL^DILFD(458.02,146,"",ESRSTAT)
 . . . I ESRSTATX="" S ESRSTATX="UNKNOWN"
 . . . S Y=$P(DATA1,U,DAY)
 . . . D DD^%DT
 . . . S ^TMP($J,"PRSPEEM",TLI,PRSIEN,MIEN,PP,DAY)=Y_U_ESRSTATX
 . . I $D(^TMP($J,"PRSPEEM",TLI,PRSIEN,MIEN,PP)) D
 . . . S ^TMP($J,"PRSPEEM",TLI,PRSIEN,MIEN,PP)=PPI_U_PPE
 . ; if no exceptions found set up first pay pereiod with no data message
 .   I '$D(^TMP($J,"PRSPEEM",TLI,PRSIEN,MIEN)) D
 ..     S PPE=$P($G(^PRST(458.7,MIEN,9,1,0)),U)
 ..     S PPI=$O(^PRST(458,"B",PPE,0))
 ..     S ^TMP($J,"PRSPEEM",TLI,PRSIEN,MIEN,1)=PPI_U_PPE_U_"*"
 ..     S ^TMP($J,"PRSPEEM",TLI,PRSIEN,MIEN,1,0)="no exceptions found fo r entire memo"
 Q
 ;
TOP W:$E(IOST,1,2)="C-" @IOF
 W !?26,"VA TIME & ATTENDANCE SYSTEM"
 W !?22,"ESR EXCEPTIONS FOR ENTIRE MEMORANDA",!!
 Q
 ;
TOP1 W:$E(IOST,1,2)="C-" @IOF W !?26,"VA TIME & ATTENDANCE SYSTEM"
 S SCRTTLX="ESR EXCEPTIONS FOR ENTIRE MEMORANDA"
 I OMIT S SCRTTLX=SCRTTLX_" - CURRENT PP OMITTED"
 S $E(SCRTTL,$S(OMIT:12,1:22))=""
 S SCRTTL=SCRTTL_SCRTTLX
 W !,SCRTTL
 Q
 ;
SCRN1 ; Loop through employees and display data
 W:$E(IOST,1,2)="C-" @IOF
 S TLI="",QUITX=0
 F  S TLI=$O(^TMP($J,"PRSPEEM",TLI)) Q:'TLI  D  Q:QUITX
 . S PRSIEN="",INDEX=1
 . F  S PRSIEN=$O(^TMP($J,"PRSPEEM",TLI,PRSIEN)) Q:'PRSIEN  D  Q:QUITX
 . . K ^TMP($J,"PRSPEEM EMP") ; Kill temporary employee array
 . . S MIEN="",(EMPQT,LIST)=0
 . . F  S MIEN=$O(^TMP($J,"PRSPEEM",TLI,PRSIEN,MIEN)) Q:'MIEN  D  Q:QUITX
 . . . S PP="",DAYCNT=0
 . . . F  S PP=$O(^TMP($J,"PRSPEEM",TLI,PRSIEN,MIEN,PP)) Q:'PP  D  Q:QUITX
 . . . . S DATA=^TMP($J,"PRSPEEM",TLI,PRSIEN,MIEN,PP),LIST=LIST+1
 . . . . S PPI=$P(DATA,U,1),PPE=$P(DATA,U,2)
 . . . . S ITEM(LIST)=DATA
 . . . . I DAYCNT=0 D  ; Display header prior to 1st PP in a memo
 . . . . . S ARRAY="^TMP($J,""PRSPEEM EMP"","
 . . . . . S SCRTTL="ESR EXCEPTIONS FOR ENTIRE MEMORANDA"
 . . . . . D HDR^PRSPUT1(PRSIEN,SCRTTL,ARRAY,INDEX,PPI)
 . . . . . D MEM^PRSPUT1(PRSIEN,MIEN,ARRAY)
 . . . . . D AL^PRSPUT3(PRSIEN,ARRAY)
 . . . . . S INDEX="",INDEX=$O(^TMP($J,"PRSPEEM EMP",INDEX),-1)
 . . . . . S TEXT="",INDEX=INDEX+1
 . . . . . D A1^PRSPUT1 ; Blank Line
 . . . . . S TEXT=" #  Pay Period  Date          Status"
 . . . . . D A1^PRSPUT1
 . . . . . S TEXT="------------------------------------"
 . . . . . D A1^PRSPUT1
 . . . . I $P(DATA,U,3)="*" S TEXT="No exceptions found for entire memo" D A1^PRSPUT1 Q
 . . . . S TEXT=$J(PP,2),$E(TEXT,5)="",TEXT=TEXT_PPE
 . . . . F DAY=1:1:14 D  Q:QUITX
 . . . . . Q:'$D(^TMP($J,"PRSPEEM",TLI,PRSIEN,MIEN,PP,DAY))
 . . . . . S DATA=^TMP($J,"PRSPEEM",TLI,PRSIEN,MIEN,PP,DAY)
 . . . . . S $E(TEXT,17)="",TEXT=TEXT_$P(DATA,U,1) ; External Date
 . . . . . S $E(TEXT,31)="",TEXT=TEXT_$P(DATA,U,2) ; External Status
 . . . . . S DAYCNT=DAYCNT+1
 . . . . . D A1^PRSPUT1
 . . . . . I $Y>(IOSL-3) D PSE
 . . . Q:QUITX
 . . . S $E(TEXT,31,36)="------",INDEX=INDEX+1
 . . . D A1^PRSPUT1
 . . . S $E(TEXT,20)="",TEXT=TEXT_"Total Days: "_DAYCNT
 . . . D A1^PRSPUT1
 . . . I $P(DATA,U,3)="*" D
 . . . .  S QUITX=$$ASK^PRSLIB00(1)
 . . . E  D
 . . . .  D ACTION
 . . . I $E(IOST,1,2)="C-" W @IOF
 Q
 ;
ACTION ; Prompt for action
 S EMPQT=0
 F  D  Q:QUITX!(EMPQT)
 . S TEXT="(P)rint list, (S)elect Item or press Enter to "
 . S TEXT=TEXT_"continue to next employee"
 . W !!,TEXT
 . W !!,"Enter Choice: "
 . R CHOICE:DT
 . S CHOICE=$$UPPER^PRSRUTL(CHOICE)
 . I CHOICE="" S EMPQT=1 Q   ; Go to next employee
 . I CHOICE="^" S QUITX=1 Q  ; Terminate report
 . I CHOICE'="P"&(CHOICE'="S") D  Q
 . . W !!,"Enter P, S or ^ to Quit or press Enter to continue to next employee."
 . I CHOICE="P" D  Q:EMPQT
 . . D DVC1
 . . I POP S EMPQT=1
 . I CHOICE="S" D
 . . F  D  Q:EMPQT!(QUITX)
 . . . I $E(IOST,1,2)="C-" W @IOF
 . . . F I=1:1 Q:'$D(ITEM(I))  W !,I,?5,$P(ITEM(I),U,2)
 . . . W !!,"Select a number between 1 and ",LIST_" : "
 . . . R ITEM:DT
 . . . S ITEM=$$UPPER^PRSRUTL(ITEM)
 . . . I ITEM="" S EMPQT=1 Q   ; Go to next employee
 . . . I ITEM="^" S QUITX=1 Q  ; Terminate report
 . . . Q:'$D(ITEM(ITEM))
 . . . S PPI=+ITEM(ITEM)
 . . . D DVC2
 ;
 Q
 ;
LOOP1 ; Loop to display Summary Screen with list of outstanding ESRs
 I '$D(^TMP($J,"PRSPEEM EMP")) W !,"No part-time physician ESR Exceptions found for selected criteria." Q
 S INDX=""
 F  S INDX=$O(^TMP($J,"PRSPEEM EMP",INDX)) Q:'INDX  D
 . S TEXT=^TMP($J,"PRSPEEM EMP",INDX)
 . W !,TEXT
 Q
 ;
DVC1 ; Display Summary Screen with list of outstanding ESRs
 W !
 K IOP,%ZIS
 S %ZIS("A")="Select Device: ",%ZIS="MQ"
 D ^%ZIS K %ZIS,IOP
 Q:POP
 I $D(IO("Q")) D  Q
 .  S ZTRTN="LOOP1^PRSPEEM"
 .  S ZTSAVE("^TMP($J,""PRSPEEM EMP"",")=""
 .  S ZTDESC="PRS PTP EXCEPTS"
 .  D ^%ZTLOAD W !,$S($D(ZTSK):"Request Queued!",1:"Request Canceled!")
 .  K ZTSK,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE
 .  D HOME^%ZIS
 U IO D LOOP1
 D ^%ZISC K %ZIS,IOP
 D H1 ; pause screen
 Q
 ;
DVC2 ; Display PP ESR
 W !
 K IOP,%ZIS
 S %ZIS("A")="Select Device: ",%ZIS="MQ"
 D ^%ZIS K %ZIS,IOP
 Q:POP
 I $D(IO("Q")) D  Q
 .  S ZTRTN="DIS^PRSPDESR"
 .  S ZTSAVE("PRSIEN")="",ZTSAVE("PPI")="",ZTSAVE("PPE")=""
 .  S ZTDESC="PRS PTP DISPLAY ESR"
 .  D ^%ZTLOAD W !,$S($D(ZTSK):"Request Queued!",1:"Request Canceled!")
 .  K ZTSK,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE
 .  D HOME^%ZIS
 .  N HOLD S HOLD=$$ASK^PRSLIB00(1)
 U IO D DIS^PRSPDESR
 D ^%ZISC K %ZIS,IOP
 D H1 ; pause screen
 Q
 ;
 ;====================================================================
 ;
PSE ; Pause for screen breaks
 W !
 S DIR(0)="E",DIR("A")="Press RETURN to continue"
 D ^DIR
 I X="^" S QUITX=1 Q
 W @IOF
 Q
 ; 
H1 I $E(IOST,1,2)="C-" R !!,"Press RETURN to Continue.",X:DTIME S:'$T!(X["^") QT=1
 Q
EX ; Clean up variables
 K ARRAY,CHOICE,D,DASH,DATA,DATA0,DATA1,DAY,DAYCNT,DFN
 K EMP,EMPQT,ESRSTAT,ESRSTATX,I,IDAYS,INDEX,INDX,ITEM,LIST,MIEN
 K MULT,OMIT,POP,PP,PPE,PPI,PRSAPGM,PRSDT,PRSIEN,PRSTLV,PTPF
 K QT,QUIT1,QUIT2,QUITX,SCRTTL,SCRTTLX,STATUS,TDAT,TEXT,TL,TLE,TLI,X,Y
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPRSPEEM   9213     printed  Sep 23, 2025@20:04:25                                                                                                                                                                                                     Page 2
PRSPEEM   ;HISC/MGD - ESR EXCEPTIONS FOR ENTIRE MEMORANDA ;06/15/05
 +1       ;;4.0;PAID;**93**;Sep 21, 1995;Build 7
 +2       ;;Per VHA Directive 2004-038, this routine should not be modified.
 +3        QUIT 
PAY       ; Payroll Entry
 +1        SET PRSTLV=7
           SET QUITX=0
 +2        DO T0
 +3        QUIT 
 +4       ;
SUP       ; Supervisor Entry
 +1       ;
 +2        SET PRSTLV=3
           SET QUITX=0
T0         KILL DIR,^TMP($JOB,"PRSPEEM"),^TMP($JOB,"PRSPEEM EMP")
 +1       ; print header
           DO TOP
 +2       ; Prompt to omit current Pay Period
           DO OMIT
 +3        IF X="^"
               DO EX
               QUIT 
 +4       ; Check for Supervisor of just 1 or mult T&L
           DO TLCHK
 +5        IF MULT>1
               DO TL
 +6        IF MULT=1
               Begin DoDot:1
 +7                SET TL="ATL"_TLE
 +8                DO EMP
               End DoDot:1
 +9        IF '$DATA(^TMP($JOB,"PRSPEEM"))
               WRITE !,"No exceptions found for input criteria."
               QUIT 
 +10       DO SCRN1
 +11       DO EX
 +12      ;
 +13       QUIT 
OMIT      ; Prompt for Omit current pay period
 +1        SET DIR(0)="Y"
 +2        SET DIR("A")="Would you like to omit the current pay period from this report"
 +3        DO ^DIR
           KILL DIR
 +4        SET OMIT=Y
 +5        QUIT 
 +6       ;
TLCHK     ; Check for Supervisor of just 1 or mult T&L
 +1        SET MULT=0
           SET I=""
 +2        FOR 
               SET I=$ORDER(^PRST(455.5,"AS",DUZ,I))
               if 'I
                   QUIT 
               Begin DoDot:1
 +3                SET MULT=MULT+1
                   SET TLI=I
                   SET TLE=$PIECE(^PRST(455.5,I,0),U,1)
               End DoDot:1
 +4        QUIT 
 +5       ;
TL        ; Loop to enter T&Ls and employees
 +1       ; local array to hold selected t&ls and employees
           NEW SEL
 +2        SET QUIT1=0
 +3        FOR 
               Begin DoDot:1
 +4                DO ^PRSAUTL
 +5                IF 'TLI
                       SET QUIT1=1
                       QUIT 
 +6                IF $DATA(SEL(TLI,"A"))
                       Begin DoDot:2
 +7                        WRITE !!,?5,"You have already selected all the employees in T&L unit ",$GET(TLE),"."
 +8                        WRITE !,?5,"Select another T&L OR enter <return> to begin report."
                       End DoDot:2
                       QUIT 
 +9                DO EMP
               End DoDot:1
               if QUIT1
                   QUIT 
 +10       QUIT 
 +11      ;
 +12      ; Loop for individual employees in a T&L
EMP        SET QUIT2=0
 +1        SET DIR(0)="SM^A:All PT Physicians in the T&L;I:Individual PT Physicians"
 +2        SET DIR("A")="Enter Choice"
 +3        DO ^DIR
           KILL DIR
 +4       ; Loop for All employee in a T&L
 +5        IF Y="A"
               Begin DoDot:1
 +6                KILL SEL(TLI)
                   SET SEL(TLI,"A")=""
 +7                KILL ^TMP($JOB,"PRSPEEM",TLI)
 +8                SET EMP=""
                   SET TL="ATL"_TLE
 +9                FOR 
                       SET EMP=$ORDER(^PRSPC(TL,EMP))
                       if EMP=""
                           QUIT 
                       Begin DoDot:2
 +10                       SET PRSIEN=$ORDER(^PRSPC(TL,EMP,0))
 +11                       if 'PRSIEN
                               QUIT 
 +12      ; Check for memos w/ status = ACTIVE or RECONCILIATION STARTED
                           DO MEM
 +13                       SET QUIT2=1
                       End DoDot:2
               End DoDot:1
               QUIT 
 +14       if QUIT2
               QUIT 
 +15      ;
 +16       SET PPI=+$GET(^PRST(458,"AD",DT))
           SET PRSDT=DT
           SET PTPF=1
 +17       FOR 
               Begin DoDot:1
 +18               KILL DIC
 +19               SET DIC("A")=$SELECT('$DATA(SEL(TLI)):"Select EMPLOYEE: ",1:"Select Another EMPLOYEE: ")
 +20               SET DIC(0)="AEQM"
                   SET DIC="^PRSPC("
                   SET D="ATL"_TLE
 +21               SET DIC("S")="I $P(^(0),""^"",8)=TLE,$D(^PRST(458.7,""B"",+Y)),'$D(SEL(TLI,+Y))"
 +22               WRITE !
 +23               DO IX^DIC
                   SET PRSIEN=+Y
 +24               IF X=""!(X="^")
                       SET QUIT2=1
                       QUIT 
 +25               SET SEL(TLI,PRSIEN)=""
 +26               DO MEM
               End DoDot:1
               if QUIT2
                   QUIT 
 +27       QUIT 
 +28      ;
MEM       ; Check for memos w/ status of ACTIVE (2) or RECONCILIATION STARTED (3)
 +1        NEW PPI
 +2        SET MIEN=""
 +3        FOR 
               SET MIEN=$ORDER(^PRST(458.7,"B",PRSIEN,MIEN))
               if 'MIEN
                   QUIT 
               Begin DoDot:1
 +4                SET DATA0=$GET(^PRST(458.7,MIEN,0))
 +5                SET STATUS=$PIECE(DATA0,U,6)
 +6                if STATUS'=2&(STATUS'=3)
                       QUIT 
 +7                SET TDAT=$PIECE($GET(^PRST(458.7,MIEN,4)),U,1)
 +8       ; IEN of termination PP 
                   IF TDAT
                       SET TDAT=+$GET(^PRST(458,"AD",TDAT))
 +9       ; Loop to check for any incomplete days in any PP of the memo
 +10               SET PP=0
 +11               FOR I=1:1:26
                       SET PPE=$PIECE($GET(^PRST(458.7,MIEN,9,I,0)),U)
                       if PPE=""
                           QUIT 
                       Begin DoDot:2
 +12                       SET PPI=$ORDER(^PRST(458,"B",PPE,0))
 +13                       if 'PPI
                               QUIT 
 +14      ; If the memo was terminated, only check ESRs up to and
 +15      ; including the Termination Date
 +16      ; Don't look past termination PP
                           if TDAT&(PPI>TDAT)
                               QUIT 
 +17                       SET PP=PP+1
 +18      ; FileMan Dates
                           SET DATA1=$GET(^PRST(458,PPI,1))
 +19                       if '+$$MIEN^PRSPUT1(PRSIEN,$PIECE(DATA1,U,I))
                               QUIT 
 +20                       FOR DAY=1:1:14
                               Begin DoDot:3
 +21                               SET ESRSTAT=$PIECE($GET(^PRST(458,PPI,"E",PRSIEN,"D",DAY,7)),U,1)
 +22                               if ESRSTAT>3
                                       QUIT 
 +23                               SET ESRSTATX=$$EXTERNAL^DILFD(458.02,146,"",ESRSTAT)
 +24                               IF ESRSTATX=""
                                       SET ESRSTATX="UNKNOWN"
 +25                               SET Y=$PIECE(DATA1,U,DAY)
 +26                               DO DD^%DT
 +27                               SET ^TMP($JOB,"PRSPEEM",TLI,PRSIEN,MIEN,PP,DAY)=Y_U_ESRSTATX
                               End DoDot:3
 +28                       IF $DATA(^TMP($JOB,"PRSPEEM",TLI,PRSIEN,MIEN,PP))
                               Begin DoDot:3
 +29                               SET ^TMP($JOB,"PRSPEEM",TLI,PRSIEN,MIEN,PP)=PPI_U_PPE
                               End DoDot:3
                       End DoDot:2
 +30      ; if no exceptions found set up first pay pereiod with no data message
 +31               IF '$DATA(^TMP($JOB,"PRSPEEM",TLI,PRSIEN,MIEN))
                       Begin DoDot:2
 +32                       SET PPE=$PIECE($GET(^PRST(458.7,MIEN,9,1,0)),U)
 +33                       SET PPI=$ORDER(^PRST(458,"B",PPE,0))
 +34                       SET ^TMP($JOB,"PRSPEEM",TLI,PRSIEN,MIEN,1)=PPI_U_PPE_U_"*"
 +35                       SET ^TMP($JOB,"PRSPEEM",TLI,PRSIEN,MIEN,1,0)="no exceptions found fo r entire memo"
                       End DoDot:2
               End DoDot:1
 +36       QUIT 
 +37      ;
TOP        if $EXTRACT(IOST,1,2)="C-"
               WRITE @IOF
 +1        WRITE !?26,"VA TIME & ATTENDANCE SYSTEM"
 +2        WRITE !?22,"ESR EXCEPTIONS FOR ENTIRE MEMORANDA",!!
 +3        QUIT 
 +4       ;
TOP1       if $EXTRACT(IOST,1,2)="C-"
               WRITE @IOF
           WRITE !?26,"VA TIME & ATTENDANCE SYSTEM"
 +1        SET SCRTTLX="ESR EXCEPTIONS FOR ENTIRE MEMORANDA"
 +2        IF OMIT
               SET SCRTTLX=SCRTTLX_" - CURRENT PP OMITTED"
 +3        SET $EXTRACT(SCRTTL,$SELECT(OMIT:12,1:22))=""
 +4        SET SCRTTL=SCRTTL_SCRTTLX
 +5        WRITE !,SCRTTL
 +6        QUIT 
 +7       ;
SCRN1     ; Loop through employees and display data
 +1        if $EXTRACT(IOST,1,2)="C-"
               WRITE @IOF
 +2        SET TLI=""
           SET QUITX=0
 +3        FOR 
               SET TLI=$ORDER(^TMP($JOB,"PRSPEEM",TLI))
               if 'TLI
                   QUIT 
               Begin DoDot:1
 +4                SET PRSIEN=""
                   SET INDEX=1
 +5                FOR 
                       SET PRSIEN=$ORDER(^TMP($JOB,"PRSPEEM",TLI,PRSIEN))
                       if 'PRSIEN
                           QUIT 
                       Begin DoDot:2
 +6       ; Kill temporary employee array
                           KILL ^TMP($JOB,"PRSPEEM EMP")
 +7                        SET MIEN=""
                           SET (EMPQT,LIST)=0
 +8                        FOR 
                               SET MIEN=$ORDER(^TMP($JOB,"PRSPEEM",TLI,PRSIEN,MIEN))
                               if 'MIEN
                                   QUIT 
                               Begin DoDot:3
 +9                                SET PP=""
                                   SET DAYCNT=0
 +10                               FOR 
                                       SET PP=$ORDER(^TMP($JOB,"PRSPEEM",TLI,PRSIEN,MIEN,PP))
                                       if 'PP
                                           QUIT 
                                       Begin DoDot:4
 +11                                       SET DATA=^TMP($JOB,"PRSPEEM",TLI,PRSIEN,MIEN,PP)
                                           SET LIST=LIST+1
 +12                                       SET PPI=$PIECE(DATA,U,1)
                                           SET PPE=$PIECE(DATA,U,2)
 +13                                       SET ITEM(LIST)=DATA
 +14      ; Display header prior to 1st PP in a memo
                                           IF DAYCNT=0
                                               Begin DoDot:5
 +15                                               SET ARRAY="^TMP($J,""PRSPEEM EMP"","
 +16                                               SET SCRTTL="ESR EXCEPTIONS FOR ENTIRE MEMORANDA"
 +17                                               DO HDR^PRSPUT1(PRSIEN,SCRTTL,ARRAY,INDEX,PPI)
 +18                                               DO MEM^PRSPUT1(PRSIEN,MIEN,ARRAY)
 +19                                               DO AL^PRSPUT3(PRSIEN,ARRAY)
 +20                                               SET INDEX=""
                                                   SET INDEX=$ORDER(^TMP($JOB,"PRSPEEM EMP",INDEX),-1)
 +21                                               SET TEXT=""
                                                   SET INDEX=INDEX+1
 +22      ; Blank Line
                                                   DO A1^PRSPUT1
 +23                                               SET TEXT=" #  Pay Period  Date          Status"
 +24                                               DO A1^PRSPUT1
 +25                                               SET TEXT="------------------------------------"
 +26                                               DO A1^PRSPUT1
                                               End DoDot:5
 +27                                       IF $PIECE(DATA,U,3)="*"
                                               SET TEXT="No exceptions found for entire memo"
                                               DO A1^PRSPUT1
                                               QUIT 
 +28                                       SET TEXT=$JUSTIFY(PP,2)
                                           SET $EXTRACT(TEXT,5)=""
                                           SET TEXT=TEXT_PPE
 +29                                       FOR DAY=1:1:14
                                               Begin DoDot:5
 +30                                               if '$DATA(^TMP($JOB,"PRSPEEM",TLI,PRSIEN,MIEN,PP,DAY))
                                                       QUIT 
 +31                                               SET DATA=^TMP($JOB,"PRSPEEM",TLI,PRSIEN,MIEN,PP,DAY)
 +32      ; External Date
                                                   SET $EXTRACT(TEXT,17)=""
                                                   SET TEXT=TEXT_$PIECE(DATA,U,1)
 +33      ; External Status
                                                   SET $EXTRACT(TEXT,31)=""
                                                   SET TEXT=TEXT_$PIECE(DATA,U,2)
 +34                                               SET DAYCNT=DAYCNT+1
 +35                                               DO A1^PRSPUT1
 +36                                               IF $Y>(IOSL-3)
                                                       DO PSE
                                               End DoDot:5
                                               if QUITX
                                                   QUIT 
                                       End DoDot:4
                                       if QUITX
                                           QUIT 
 +37                               if QUITX
                                       QUIT 
 +38                               SET $EXTRACT(TEXT,31,36)="------"
                                   SET INDEX=INDEX+1
 +39                               DO A1^PRSPUT1
 +40                               SET $EXTRACT(TEXT,20)=""
                                   SET TEXT=TEXT_"Total Days: "_DAYCNT
 +41                               DO A1^PRSPUT1
 +42                               IF $PIECE(DATA,U,3)="*"
                                       Begin DoDot:4
 +43                                       SET QUITX=$$ASK^PRSLIB00(1)
                                       End DoDot:4
 +44                              IF '$TEST
                                       Begin DoDot:4
 +45                                       DO ACTION
                                       End DoDot:4
 +46                               IF $EXTRACT(IOST,1,2)="C-"
                                       WRITE @IOF
                               End DoDot:3
                               if QUITX
                                   QUIT 
                       End DoDot:2
                       if QUITX
                           QUIT 
               End DoDot:1
               if QUITX
                   QUIT 
 +47       QUIT 
 +48      ;
ACTION    ; Prompt for action
 +1        SET EMPQT=0
 +2        FOR 
               Begin DoDot:1
 +3                SET TEXT="(P)rint list, (S)elect Item or press Enter to "
 +4                SET TEXT=TEXT_"continue to next employee"
 +5                WRITE !!,TEXT
 +6                WRITE !!,"Enter Choice: "
 +7                READ CHOICE:DT
 +8                SET CHOICE=$$UPPER^PRSRUTL(CHOICE)
 +9       ; Go to next employee
                   IF CHOICE=""
                       SET EMPQT=1
                       QUIT 
 +10      ; Terminate report
                   IF CHOICE="^"
                       SET QUITX=1
                       QUIT 
 +11               IF CHOICE'="P"&(CHOICE'="S")
                       Begin DoDot:2
 +12                       WRITE !!,"Enter P, S or ^ to Quit or press Enter to continue to next employee."
                       End DoDot:2
                       QUIT 
 +13               IF CHOICE="P"
                       Begin DoDot:2
 +14                       DO DVC1
 +15                       IF POP
                               SET EMPQT=1
                       End DoDot:2
                       if EMPQT
                           QUIT 
 +16               IF CHOICE="S"
                       Begin DoDot:2
 +17                       FOR 
                               Begin DoDot:3
 +18                               IF $EXTRACT(IOST,1,2)="C-"
                                       WRITE @IOF
 +19                               FOR I=1:1
                                       if '$DATA(ITEM(I))
                                           QUIT 
                                       WRITE !,I,?5,$PIECE(ITEM(I),U,2)
 +20                               WRITE !!,"Select a number between 1 and ",LIST_" : "
 +21                               READ ITEM:DT
 +22                               SET ITEM=$$UPPER^PRSRUTL(ITEM)
 +23      ; Go to next employee
                                   IF ITEM=""
                                       SET EMPQT=1
                                       QUIT 
 +24      ; Terminate report
                                   IF ITEM="^"
                                       SET QUITX=1
                                       QUIT 
 +25                               if '$DATA(ITEM(ITEM))
                                       QUIT 
 +26                               SET PPI=+ITEM(ITEM)
 +27                               DO DVC2
                               End DoDot:3
                               if EMPQT!(QUITX)
                                   QUIT 
                       End DoDot:2
               End DoDot:1
               if QUITX!(EMPQT)
                   QUIT 
 +28      ;
 +29       QUIT 
 +30      ;
LOOP1     ; Loop to display Summary Screen with list of outstanding ESRs
 +1        IF '$DATA(^TMP($JOB,"PRSPEEM EMP"))
               WRITE !,"No part-time physician ESR Exceptions found for selected criteria."
               QUIT 
 +2        SET INDX=""
 +3        FOR 
               SET INDX=$ORDER(^TMP($JOB,"PRSPEEM EMP",INDX))
               if 'INDX
                   QUIT 
               Begin DoDot:1
 +4                SET TEXT=^TMP($JOB,"PRSPEEM EMP",INDX)
 +5                WRITE !,TEXT
               End DoDot:1
 +6        QUIT 
 +7       ;
DVC1      ; Display Summary Screen with list of outstanding ESRs
 +1        WRITE !
 +2        KILL IOP,%ZIS
 +3        SET %ZIS("A")="Select Device: "
           SET %ZIS="MQ"
 +4        DO ^%ZIS
           KILL %ZIS,IOP
 +5        if POP
               QUIT 
 +6        IF $DATA(IO("Q"))
               Begin DoDot:1
 +7                SET ZTRTN="LOOP1^PRSPEEM"
 +8                SET ZTSAVE("^TMP($J,""PRSPEEM EMP"",")=""
 +9                SET ZTDESC="PRS PTP EXCEPTS"
 +10               DO ^%ZTLOAD
                   WRITE !,$SELECT($DATA(ZTSK):"Request Queued!",1:"Request Canceled!")
 +11               KILL ZTSK,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE
 +12               DO HOME^%ZIS
               End DoDot:1
               QUIT 
 +13       USE IO
           DO LOOP1
 +14       DO ^%ZISC
           KILL %ZIS,IOP
 +15      ; pause screen
           DO H1
 +16       QUIT 
 +17      ;
DVC2      ; Display PP ESR
 +1        WRITE !
 +2        KILL IOP,%ZIS
 +3        SET %ZIS("A")="Select Device: "
           SET %ZIS="MQ"
 +4        DO ^%ZIS
           KILL %ZIS,IOP
 +5        if POP
               QUIT 
 +6        IF $DATA(IO("Q"))
               Begin DoDot:1
 +7                SET ZTRTN="DIS^PRSPDESR"
 +8                SET ZTSAVE("PRSIEN")=""
                   SET ZTSAVE("PPI")=""
                   SET ZTSAVE("PPE")=""
 +9                SET ZTDESC="PRS PTP DISPLAY ESR"
 +10               DO ^%ZTLOAD
                   WRITE !,$SELECT($DATA(ZTSK):"Request Queued!",1:"Request Canceled!")
 +11               KILL ZTSK,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE
 +12               DO HOME^%ZIS
 +13               NEW HOLD
                   SET HOLD=$$ASK^PRSLIB00(1)
               End DoDot:1
               QUIT 
 +14       USE IO
           DO DIS^PRSPDESR
 +15       DO ^%ZISC
           KILL %ZIS,IOP
 +16      ; pause screen
           DO H1
 +17       QUIT 
 +18      ;
 +19      ;====================================================================
 +20      ;
PSE       ; Pause for screen breaks
 +1        WRITE !
 +2        SET DIR(0)="E"
           SET DIR("A")="Press RETURN to continue"
 +3        DO ^DIR
 +4        IF X="^"
               SET QUITX=1
               QUIT 
 +5        WRITE @IOF
 +6        QUIT 
 +7       ; 
H1         IF $EXTRACT(IOST,1,2)="C-"
               READ !!,"Press RETURN to Continue.",X:DTIME
               if '$TEST!(X["^")
                   SET QT=1
 +1        QUIT 
EX        ; Clean up variables
 +1        KILL ARRAY,CHOICE,D,DASH,DATA,DATA0,DATA1,DAY,DAYCNT,DFN
 +2        KILL EMP,EMPQT,ESRSTAT,ESRSTATX,I,IDAYS,INDEX,INDX,ITEM,LIST,MIEN
 +3        KILL MULT,OMIT,POP,PP,PPE,PPI,PRSAPGM,PRSDT,PRSIEN,PRSTLV,PTPF
 +4        KILL QT,QUIT1,QUIT2,QUITX,SCRTTL,SCRTTLX,STATUS,TDAT,TEXT,TL,TLE,TLI,X,Y
 +5        QUIT