| [613] | 1 | PRSPTM ;WOIFO/MGD - PTP TERMINATE MEMORANDUM ;06/15/05
 | 
|---|
 | 2 |  ;;4.0;PAID;**93**;Sep 21, 1995;Build 7
 | 
|---|
 | 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 |  ; The following routine will allow HR to terminate a Part Time
 | 
|---|
 | 6 |  ; Physician's Memorandum of Service Level Expectations.  Once
 | 
|---|
 | 7 |  ; terminated the memorandum will need to be reconciled.
 | 
|---|
 | 8 |  ; For a memorandum to be eligible for termination it must have already
 | 
|---|
 | 9 |  ; had had at least one Pay Period processed and it must be prior to
 | 
|---|
 | 10 |  ; the processing of the last Pay Period covered by the memorandum.
 | 
|---|
 | 11 |  ;
 | 
|---|
 | 12 |  Q
 | 
|---|
 | 13 | MAIN ; Main Driver
 | 
|---|
 | 14 |  N STDAT,ENDAT,AHRS,ICOM,ESOK
 | 
|---|
 | 15 |  ; Prompt for Part Time Physician
 | 
|---|
 | 16 |  D PTP
 | 
|---|
 | 17 |  I Y'>0 D KILL Q
 | 
|---|
 | 18 |  S PRSIEN=+Y
 | 
|---|
 | 19 |  ; Find any memorandums that meet the termination qualifications
 | 
|---|
 | 20 |  D MEM
 | 
|---|
 | 21 |  Q:'$G(MIEN)
 | 
|---|
 | 22 |  ; Display employee and memorandum information
 | 
|---|
 | 23 |  D DISPLAY
 | 
|---|
 | 24 |  Q:$D(DIRUT)
 | 
|---|
 | 25 | TERM ; Issue Terminate Memorandum prompt
 | 
|---|
 | 26 |  W !
 | 
|---|
 | 27 |  S DIR(0)="YO",DIR("A")="Terminate Memoranda Y/N: "
 | 
|---|
 | 28 |  D ^DIR K DIR
 | 
|---|
 | 29 |  Q:Y'=1
 | 
|---|
 | 30 |  ; Prompt for Termination Date
 | 
|---|
 | 31 |  D TDATE
 | 
|---|
 | 32 |  Q:X=""!(X="^")
 | 
|---|
 | 33 |  ; Prompt for Termination Comments
 | 
|---|
 | 34 |  D TCOM
 | 
|---|
 | 35 |  Q:TCOM="^"
 | 
|---|
 | 36 |  ; Prompt for E-sig and update file
 | 
|---|
 | 37 |  D ESIG
 | 
|---|
 | 38 |  Q
 | 
|---|
 | 39 |  ;
 | 
|---|
 | 40 | PTP ; Prompt for Part Time Physician
 | 
|---|
 | 41 |  W !
 | 
|---|
 | 42 |  S DIC="^PRSPC(",DIC(0)="AEMQZ",DIC("A")="Select EMPLOYEE: "
 | 
|---|
 | 43 |  D ^DIC K DIC
 | 
|---|
 | 44 |  S PRSIEN=+Y
 | 
|---|
 | 45 |  Q
 | 
|---|
 | 46 |  ;
 | 
|---|
 | 47 | MEM ; Find any memorandums that meet the termination qualifications
 | 
|---|
 | 48 |  N MEM,INDX
 | 
|---|
 | 49 |  S MEM=0,INDX=1
 | 
|---|
 | 50 |  F  S MEM=$O(^PRST(458.7,"B",PRSIEN,MEM)) Q:'MEM  D
 | 
|---|
 | 51 |  . S DATA=$G(^PRST(458.7,MEM,0))
 | 
|---|
 | 52 |  . Q:DATA=""
 | 
|---|
 | 53 |  . S STATUS=$P(DATA,U,6)
 | 
|---|
 | 54 |  . Q:STATUS>2  ; Memorandum = 3:RECONCILIATION STARTED or 4:RECONCILED
 | 
|---|
 | 55 |  . S START=$P(DATA,U,2),END=$P(DATA,U,3) ; Start Date, End Date
 | 
|---|
 | 56 |  . ; Don't include future memoradums.  The Delete Future Memorandum
 | 
|---|
 | 57 |  . ; option must be used to to remove future memorandums.
 | 
|---|
 | 58 |  . Q:START>DT
 | 
|---|
 | 59 |  . ; Check for a memorandum that has already been terminated but the
 | 
|---|
 | 60 |  . ; Begin Reconciliation Process option has not been run yet.
 | 
|---|
 | 61 |  . Q:+$G(^PRST(458.7,MEM,4))
 | 
|---|
 | 62 |  . S PPI=$P($G(^PRST(458,"AD",END)),U,1)
 | 
|---|
 | 63 |  . ; The End Date for future memorandums may not be in #458 yet
 | 
|---|
 | 64 |  . I PPI="" D  Q
 | 
|---|
 | 65 |  . . S MEM(INDX)=MEM_"^"_START_"^"_END_"^ACTIVE",INDX=INDX+1
 | 
|---|
 | 66 |  . ; If the End Date is in #458 check the timecard status for that PP
 | 
|---|
 | 67 |  . ; Quit if Timecard status for the last PP of the mem is not (T)imekeeper
 | 
|---|
 | 68 |  . Q:$P($G(^PRST(458,PPI,"E",PRSIEN,0)),U,2)'="T"
 | 
|---|
 | 69 |  . S MEM(INDX)=MEM_"^"_START_"^"_END_"^ACTIVE",INDX=INDX+1
 | 
|---|
 | 70 |  ; If no memos meet the termination qualifications
 | 
|---|
 | 71 |  I '$D(MEM(1)) D  Q
 | 
|---|
 | 72 |  . W !!,"No memorandums meet the termination qualifications for the "
 | 
|---|
 | 73 |  . W "selected employee."
 | 
|---|
 | 74 |  . S MIEN=0
 | 
|---|
 | 75 |  ; If only one memo
 | 
|---|
 | 76 |  I '$D(MEM(2)) S MIEN=$P($G(MEM(1)),U,1) Q
 | 
|---|
 | 77 |  ; Display list if more than one
 | 
|---|
 | 78 |  I $D(MEM(2)) D
 | 
|---|
 | 79 |  . W !!," # ",?5,"STARTS          ENDS"
 | 
|---|
 | 80 |  . F MEM=1:1 Q:'$D(MEM(MEM))  D
 | 
|---|
 | 81 |  . . S DATA=MEM(MEM)
 | 
|---|
 | 82 |  . . S START=$$FMTE^XLFDT($P(DATA,U,2))
 | 
|---|
 | 83 |  . . S END=$$FMTE^XLFDT($P(DATA,U,3))
 | 
|---|
 | 84 |  . . W !!,MEM,?5,START," TO ",END
 | 
|---|
 | 85 |  . ;
 | 
|---|
 | 86 | ASK . ; Ask user to select which memorandum they want
 | 
|---|
 | 87 |  . S END="",END=$O(MEM(END),-1)
 | 
|---|
 | 88 |  . W !!,"Enter a number between 1 and ",END,": "
 | 
|---|
 | 89 |  . R ASK:DTIME
 | 
|---|
 | 90 |  . S ASK=$$UPPER^PRSRUTL(ASK)
 | 
|---|
 | 91 |  . I ASK=""!(ASK="^") S MIEN=0 Q
 | 
|---|
 | 92 |  . I '$D(MEM(ASK)) D  G ASK
 | 
|---|
 | 93 |  . . W !!,"Enter a number between 1 and ",END," or ^ to exit"
 | 
|---|
 | 94 |  . S MIEN=$P(MEM(ASK),U,1)
 | 
|---|
 | 95 |  Q
 | 
|---|
 | 96 |  ;
 | 
|---|
 | 97 | DISPLAY ; Display memorandum info to validate the correct employee was chosen
 | 
|---|
 | 98 |  S SCRTTL="Terminate PT Physician Memoranda"
 | 
|---|
 | 99 |  D HDR^PRSPUT1(PRSIEN,SCRTTL)
 | 
|---|
 | 100 |  D MEM^PRSPUT1(PRSIEN,MIEN)
 | 
|---|
 | 101 |  D AL^PRSPUT3(PRSIEN,)
 | 
|---|
 | 102 |  D PPSUM^PRSPUT2(PRSIEN,MIEN)
 | 
|---|
 | 103 |  S DIR(0)="E",DIR("A")="Press RETURN to continue" D ^DIR
 | 
|---|
 | 104 |  Q
 | 
|---|
 | 105 |  ;
 | 
|---|
 | 106 | TDATE ; Prompt for Termination Date
 | 
|---|
 | 107 |  S DATA0=$G(^PRST(458.7,MIEN,0))
 | 
|---|
 | 108 |  S (STDAT,STDATI)=$P(DATA0,U,2),(ENDAT,ENDATI)=$P(DATA0,U,3)
 | 
|---|
 | 109 |  S Y=STDAT
 | 
|---|
 | 110 |  D DD^%DT
 | 
|---|
 | 111 |  S STDAT=Y
 | 
|---|
 | 112 |  S Y=ENDAT
 | 
|---|
 | 113 |  D DD^%DT
 | 
|---|
 | 114 |  S ENDAT=Y
 | 
|---|
 | 115 |  S TDAT=0
 | 
|---|
 | 116 |  W !!,"Termination date must be the last day of a pay period."
 | 
|---|
 | 117 |  W !,"Start Date: ",STDAT,"     End Date: ",ENDAT,!
 | 
|---|
 | 118 |  S %DT="AEX",%DT("A")="Termination Date: ",QUIT=0
 | 
|---|
 | 119 |  F  D  Q:QUIT
 | 
|---|
 | 120 |  . N DAY14,TPPI
 | 
|---|
 | 121 |  . D ^%DT
 | 
|---|
 | 122 |  . I X=""!(X="^") S QUIT=1 Q
 | 
|---|
 | 123 |  . ; Validate that the Termination Date is the last day of a Pay Period.
 | 
|---|
 | 124 |  . S TDATE=+Y
 | 
|---|
 | 125 |  . Q:TDATE="^"
 | 
|---|
 | 126 |  . S D1=TDATE
 | 
|---|
 | 127 |  . D PP^PRSAPPU ; PPI and Day are set here
 | 
|---|
 | 128 |  . S TPPI=$G(PPI) ; termination pay period IEN (if open)
 | 
|---|
 | 129 |  . I DAY'=14 D  Q
 | 
|---|
 | 130 |  . . W !!,"The Termination Date must be the last day of a Pay Period."
 | 
|---|
 | 131 |  . . W !,"Please re-enter.",!
 | 
|---|
 | 132 |  . I TDATE<STDATI D  Q
 | 
|---|
 | 133 |  . . W !!,"The Termination Date can not be prior to the Start Date: ",STDAT
 | 
|---|
 | 134 |  . . W !,"Please re-enter.",!
 | 
|---|
 | 135 |  . I TDATE'<ENDATI D  Q
 | 
|---|
 | 136 |  . . W !!,"The Termination Date must be prior to the End Date: ",ENDAT
 | 
|---|
 | 137 |  . . W !,"Please re-enter.",!
 | 
|---|
 | 138 |  . ;
 | 
|---|
 | 139 |  . ; Check to make sure that no Timecards for PPs after the termination
 | 
|---|
 | 140 |  . ; date have a status of Payroll or Transmitted.
 | 
|---|
 | 141 |  . I 'TPPI S QUIT=1 Q  ; PP containing termination date is not open
 | 
|---|
 | 142 |  . ; loop thru PPs after the PP of terminatio and check their status
 | 
|---|
 | 143 |  . S FPPESR=0 ; init # of PPs that have status which prevents termination
 | 
|---|
 | 144 |  . S PPI=TPPI F  S PPI=$O(^PRST(458,PPI)) Q:'PPI  D  Q:DAY14>ENDATI
 | 
|---|
 | 145 |  . . S DAY14=$P($G(^PRST(458,PPI,1)),U,14) ; last day of PPI
 | 
|---|
 | 146 |  . . Q:DAY14>ENDATI  ; pay period is after end of memo
 | 
|---|
 | 147 |  . . S STATUS=$P($G(^PRST(458,PPI,"E",PRSIEN,0)),U,2)
 | 
|---|
 | 148 |  . . Q:"^P^X^"'[(U_STATUS_U)  ; quit if status not P or X
 | 
|---|
 | 149 |  . . ; timecard has a status that prevents termination
 | 
|---|
 | 150 |  . . S FPPESR=FPPESR+1
 | 
|---|
 | 151 |  . . S STATEX=$$EXTERNAL^DILFD(458.01,1,"",STATUS)
 | 
|---|
 | 152 |  . . W !,$P($G(^PRST(458,PPI,0)),U),?10,STATEX
 | 
|---|
 | 153 |  . ;
 | 
|---|
 | 154 |  . I FPPESR=0 S QUIT=1 Q  ; All tests passed. Termination date is OK
 | 
|---|
 | 155 |  . ;
 | 
|---|
 | 156 |  . W !!,"You cannot select this Pay Period because there "
 | 
|---|
 | 157 |  . W $S(FPPESR=1:"is ",1:"are "),FPPESR," Pay Period"
 | 
|---|
 | 158 |  . W $S(FPPESR>1:"s ",1:" "),"after this"
 | 
|---|
 | 159 |  . W !,"Pay Period where the timecard",$S(FPPESR=1:" has ",1:"s have ")
 | 
|---|
 | 160 |  . W "a status other than Timekeeper.",!!
 | 
|---|
 | 161 |  Q
 | 
|---|
 | 162 |  ;
 | 
|---|
 | 163 | TCOM ; Termination Comments
 | 
|---|
 | 164 |  W !
 | 
|---|
 | 165 |  S DIR(0)="FO^1:240^^O",DIR("A")="Termination Comments" D ^DIR
 | 
|---|
 | 166 |  S TCOM=Y
 | 
|---|
 | 167 |  Q
 | 
|---|
 | 168 |  ;
 | 
|---|
 | 169 | ESIG ; Prompt for Electronic Signature and store fields in #458.7
 | 
|---|
 | 170 |  ;
 | 
|---|
 | 171 |  N ESOK,PPE,PPNUM,RCALFLG
 | 
|---|
 | 172 |  D ^PRSAES
 | 
|---|
 | 173 |  I ESOK D
 | 
|---|
 | 174 |  . ; Update #458.7
 | 
|---|
 | 175 |  . S MIEN=MIEN_","
 | 
|---|
 | 176 |  . S PRSFDA(458.7,MIEN,22)=TDATE ; TERMINATION DATE
 | 
|---|
 | 177 |  . S PRSFDA(458.7,MIEN,23)=DUZ   ; TERMINATED BY
 | 
|---|
 | 178 |  . D NOW^%DTC
 | 
|---|
 | 179 |  . S PRSFDA(458.7,MIEN,24)=%     ; TERMINATED DATE/TIME
 | 
|---|
 | 180 |  . S PRSFDA(458.7,MIEN,25)=TCOM  ; TERMINATION COMMENTS
 | 
|---|
 | 181 |  . D UPDATE^DIE("","PRSFDA","MIEN"),MSG^DIALOG()
 | 
|---|
 | 182 |  . S MIEN=+MIEN ; Remove comma from end
 | 
|---|
 | 183 |  . ;
 | 
|---|
 | 184 |  . ; Check for PP that need to have their ESR's deleted
 | 
|---|
 | 185 |  . S X1=TDATE,X2=1
 | 
|---|
 | 186 |  . D C^%DTC
 | 
|---|
 | 187 |  . S PPI=+$G(^PRST(458,"AD",X))
 | 
|---|
 | 188 |  . Q:'PPI  ; There aren't any pay periods opened after the termination date
 | 
|---|
 | 189 |  . ;
 | 
|---|
 | 190 |  . S PPI=PPI-.01 ; init PPI to include 1st PP in loop
 | 
|---|
 | 191 |  . F  S PPI=$O(^PRST(458,PPI)) Q:'PPI  D
 | 
|---|
 | 192 |  . . Q:'$D(^PRST(458,PPI,"E",PRSIEN,0))  ; skip PP if no timecard/ESR
 | 
|---|
 | 193 |  . . ;
 | 
|---|
 | 194 |  . . ; Check for previously saved hours for this PP
 | 
|---|
 | 195 |  . . S RCALFLG=0
 | 
|---|
 | 196 |  . . S PPE=$P($G(^PRST(458,PPI,0)),U,1)
 | 
|---|
 | 197 |  . . S PPNUM=$O(^PRST(458.7,MIEN,9,"B",PPE,0))
 | 
|---|
 | 198 |  . . Q:PPNUM'>0
 | 
|---|
 | 199 |  . . S RCALFLG=$S($P($G(^PRST(458.7,MIEN,9,PPNUM,0)),U,1)'="":1,1:0)
 | 
|---|
 | 200 |  . . ;
 | 
|---|
 | 201 |  . . F DAY=1:1:14 D
 | 
|---|
 | 202 |  . . . S ESRSTAT=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",DAY,7)),U,1)
 | 
|---|
 | 203 |  . . . I ESRSTAT=5 D  ; Clear Time Card posting information
 | 
|---|
 | 204 |  . . . . K ^PRST(458,PPI,"E",PRSIEN,"D",DAY,2),^(3),^(10)
 | 
|---|
 | 205 |  . . . ;
 | 
|---|
 | 206 |  . . . ; delete any ESR data
 | 
|---|
 | 207 |  . . . ; use fileman to delete ESR DAILY STATUS so x-ref will get updated
 | 
|---|
 | 208 |  . . . S PRSFDA(458.02,DAY_","_PRSIEN_","_PPI_",",146)="@"
 | 
|---|
 | 209 |  . . . D FILE^DIE("","PRSFDA"),MSG^DIALOG()
 | 
|---|
 | 210 |  . . . ; delete ESR related fields
 | 
|---|
 | 211 |  . . . K ^PRST(458,PPI,"E",PRSIEN,"D",DAY,5),^(6),^(7)
 | 
|---|
 | 212 |  . . ;
 | 
|---|
 | 213 |  . . ; If the PP had been certified before, re-calculate totals
 | 
|---|
 | 214 |  . . I RCALFLG D PTP^PRSASR1(PRSIEN,PPI)
 | 
|---|
 | 215 |  Q
 | 
|---|
 | 216 |  ;
 | 
|---|
 | 217 | KILL ; Clean up variables
 | 
|---|
 | 218 |  ;
 | 
|---|
 | 219 |  K ASK,D1,DA,DATA,DATA0,DAY,DIR,DIRUT,END,ENDAT,ENDATI,ESRSTAT
 | 
|---|
 | 220 |  K FPPESR,I,INDX,MEM,MIEN,PPE,PPI,PRSIEN,PRSFDA,QUIT,QUIT1
 | 
|---|
 | 221 |  K SCRTTL,START,STATEX,STATUS,STDAT,STDATI,TCOM
 | 
|---|
 | 222 |  K TDAT,TDATE,TDATI,X,X1,X2,Y,%,%DT
 | 
|---|
 | 223 |  K ^TMP($J,"PRSPTM")
 | 
|---|
 | 224 |  Q
 | 
|---|