| 1 | PRS8EX0 ;HISC/MRL,WOIFO/JAH,SAB-DECOMP,EXCEPTIONS (cont'd) ;1/30/2007
 | 
|---|
| 2 |  ;;4.0;PAID;**2,22,56,111**;Sep 21, 1995;Build 2
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | ENCAP ;
 | 
|---|
| 6 |  ; This routine checks if the current day encapsulates other days that
 | 
|---|
| 7 |  ; should be automatically charged to WP or NP by the software. If so,
 | 
|---|
| 8 |  ; appropriate encapsulated days are charged.  This routine is only
 | 
|---|
| 9 |  ; called when the employee has a daily tour.
 | 
|---|
| 10 |  ; inputs
 | 
|---|
| 11 |  ;   PY - current pay period IEN
 | 
|---|
| 12 |  ;   DY - current day number
 | 
|---|
| 13 |  ;   TT - type of time posted on current day
 | 
|---|
| 14 |  ;   TT(1) - data from ACT^PRS8EX for the type of time in TT
 | 
|---|
| 15 |  ;   DFN - employee IEN
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  ; day must be in pay period and posted with WP or NP
 | 
|---|
| 18 |  Q:(DY<1)!(DY>14)
 | 
|---|
| 19 |  Q:"^NP^WP^"'[(U_TT_U)
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  N SCHDY,SCHEX,SCHPY,CHGDAY
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  ; find prior scheduled work day that is not holiday excused
 | 
|---|
| 24 |  D WORKDAY(DFN,PY,DY,-1,.SCHPY,.SCHDY,.SCHEX,.CHGDAY)
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  ; If prior work day is in a previous pay period and has same exception
 | 
|---|
| 27 |  ; as the current day then charge the encapsulated days found between.
 | 
|---|
| 28 |  ; Note: If prior work day is in current pay period then no action
 | 
|---|
| 29 |  ; needed since the look forward from that prior day would have
 | 
|---|
| 30 |  ; already taken care of encapsulated days.
 | 
|---|
| 31 |  I SCHEX=TT,$D(CHGDAY),SCHPY'=PY D SET(DFN,PY,TT,$P(TT(1),U,4),.CHGDAY)
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 |  ; find next scheduled work day that is not holiday excused
 | 
|---|
| 34 |  D WORKDAY(DFN,PY,DY,1,.SCHPY,.SCHDY,.SCHEX,.CHGDAY)
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  ; If next work day has same exception as current day then charge
 | 
|---|
| 37 |  ; encapsulated days found between.
 | 
|---|
| 38 |  I SCHEX=TT,$D(CHGDAY) D SET(DFN,PY,TT,$P(TT(1),U,4),.CHGDAY)
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 |  Q
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 | WORKDAY(DFN,PY,DY,PRSDIR,SCHPY,SCHDY,SCHEX,CHGDAY) ; find work day
 | 
|---|
| 43 |  ; inputs
 | 
|---|
| 44 |  ;   DFN - employee IEN
 | 
|---|
| 45 |  ;   PY  - current pay period IEN
 | 
|---|
| 46 |  ;   DY  - current day number
 | 
|---|
| 47 |  ;   PRSDIR - direction (-1 to look back or +1 to look forward)
 | 
|---|
| 48 |  ; outputs
 | 
|---|
| 49 |  ;   SCHPY - passed by reference, work day pay period or null
 | 
|---|
| 50 |  ;   SCHDY - passed by reference, work day day number or null
 | 
|---|
| 51 |  ;   SCHEX - passed by reference, work day exception or null
 | 
|---|
| 52 |  ;   CHGDAY() - passed by reference, array of days in current pay period
 | 
|---|
| 53 |  ;              that could be charged due to encapsulation and were
 | 
|---|
| 54 |  ;              encounted during the search for the work day
 | 
|---|
| 55 |  ;              format ENCDAY(day number)=null value
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  N DONE,EXC,LOOPPY,LOOPDY,PPCNT,TOD
 | 
|---|
| 58 |  ; init outputs
 | 
|---|
| 59 |  S (SCHPY,SCHDY,SCHEX)=""
 | 
|---|
| 60 |  K CHGDAY
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 |  ; loop thru days to find the first scheduled work day that is
 | 
|---|
| 63 |  ; not holiday excused
 | 
|---|
| 64 |  S DONE=0,LOOPPY=PY,LOOPDY=DY,PPCNT=1
 | 
|---|
| 65 |  F  D  I DONE Q
 | 
|---|
| 66 |  . ; move one day in appropriate direction
 | 
|---|
| 67 |  . S LOOPDY=LOOPDY+PRSDIR
 | 
|---|
| 68 |  . ;
 | 
|---|
| 69 |  . ; check if loop day moved into a different pay period
 | 
|---|
| 70 |  . I LOOPDY<1 S LOOPPY=$O(^PRST(458,LOOPPY),-1),LOOPDY=14,PPCNT=PPCNT+1
 | 
|---|
| 71 |  . I LOOPDY>14 S LOOPPY=$O(^PRST(458,LOOPPY),1),LOOPDY=1,PPCNT=PPCNT+1
 | 
|---|
| 72 |  . ;
 | 
|---|
| 73 |  . ; check for loop ending conditions (related to pay period/time card)
 | 
|---|
| 74 |  . I PPCNT>2 S DONE=1 Q  ; only check current and one other pay period
 | 
|---|
| 75 |  . I LOOPPY'>0 S DONE=1 Q  ; ran out of pay periods
 | 
|---|
| 76 |  . I '$D(^PRST(458,LOOPPY,"E",DFN,0)) S DONE=1 Q  ; no empl. time card
 | 
|---|
| 77 |  . ;
 | 
|---|
| 78 |  . ; determine tour and exception for loop day
 | 
|---|
| 79 |  . S TOD=$P($G(^PRST(458,LOOPPY,"E",DFN,"D",LOOPDY,0)),U,2)
 | 
|---|
| 80 |  . S EXC=$P($G(^PRST(458,LOOPPY,"E",DFN,"D",LOOPDY,2)),U,3)
 | 
|---|
| 81 |  . ;
 | 
|---|
| 82 |  . ; check if work day found
 | 
|---|
| 83 |  . I TOD'=1,EXC'="HX" S SCHPY=LOOPPY,SCHDY=LOOPDY,SCHEX=EXC,DONE=1 Q
 | 
|---|
| 84 |  . ;
 | 
|---|
| 85 |  . ; work day was not found yet
 | 
|---|
| 86 |  . ; add this day to list if it could potentially be charged
 | 
|---|
| 87 |  . Q:LOOPPY'=PY  ; not in current pay period
 | 
|---|
| 88 |  . Q:$D(^TMP($J,"PRS8",LOOPDY,2,0))  ; day already charged
 | 
|---|
| 89 |  . I TOD=1,"^CP^NP^"'[(U_EXC_U) S CHGDAY(LOOPDY)="" ; add day off to list
 | 
|---|
| 90 |  . I TOD>1,EXC="HX" S CHGDAY(LOOPDY)="" ; add holiday to list
 | 
|---|
| 91 |  Q
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 | SET(DFN,PY,TT,PC,CHGDAY) ; automatically charge days
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  ; inputs
 | 
|---|
| 96 |  ;   DFN - employee IEN
 | 
|---|
| 97 |  ;   PY - pay period IEN
 | 
|---|
| 98 |  ;   TT - type of time to charge
 | 
|---|
| 99 |  ;   PC - 4th piece of data from ACT^PRS8EX for TT
 | 
|---|
| 100 |  ;   CHGDAY - array of days passed by reference, CHGDAY(day number)=""
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 |  N LOOPDY,PC3,WEEK
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  ; loop thru days in list
 | 
|---|
| 105 |  S LOOPDY=0 F  S LOOPDY=$O(CHGDAY(LOOPDY)) Q:'LOOPDY  D
 | 
|---|
| 106 |  . ;
 | 
|---|
| 107 |  . ; increment WK() count
 | 
|---|
| 108 |  . I +PC S WEEK=$S(LOOPDY>7:2,1:1),$P(WK(WEEK),"^",+PC)=$P(WK(WEEK),"^",+PC)+1
 | 
|---|
| 109 |  . E  S PC3=$A(PC)-64,$P(WK(3),"^",+PC3)=$P(WK(3),"^",+PC3)+1
 | 
|---|
| 110 |  . ;
 | 
|---|
| 111 |  . ; track days have been automatically charged in ^TMP
 | 
|---|
| 112 |  . S ^TMP($J,"PRS8",LOOPDY,2,0)=TT
 | 
|---|
| 113 |  . ;
 | 
|---|
| 114 |  . ; update time card if decomp called from pay period certification
 | 
|---|
| 115 |  . I $G(APDT) D
 | 
|---|
| 116 |  . . S $P(^PRST(458,PY,"E",DFN,"D",LOOPDY,2),"^",3)=TT
 | 
|---|
| 117 |  . . S ^PRST(458,PY,"E",DFN,"D",LOOPDY,3)="Leave posted automatically"
 | 
|---|
| 118 |  . . S $P(^PRST(458,PY,"E",DFN,"D",LOOPDY,10),"^",1,4)="T^.5^"_APDT_"^2"
 | 
|---|
| 119 |  Q
 | 
|---|