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