| 1 | PRS8WE ;HISC/MRL,WCIOFO/MGD-DECOMPOSITION, WEEKEND PREMIUM ;09/23/04
 | 
|---|
| 2 |  ;;4.0;PAID;**42,65,74,75,90,92,96**;Sep 21, 1995
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;This routine is used to determine the payment of Saturday and
 | 
|---|
| 5 |  ;Sunday Premium pays to entitled employees.
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  ;Called by Routine PRS8ST
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  N DAY,HYBRID,SAT2DT,SATNOSUN
 | 
|---|
| 10 |  S HYBRID=$S(+DFN'="":$$HYBRID^PRSAENT1(DFN),1:0)
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  ; The variable SATNOSUN has been added for employees who are now
 | 
|---|
| 13 |  ; eligible to receive Saturday Premium but not Sunday Premium under
 | 
|---|
| 14 |  ; Public Law 108-170.
 | 
|---|
| 15 |  S SATNOSUN=$S($E(ENT,8,9)="10":1,1:0)
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  ; Compute Sunday Premium Pay.  Check SATNOSUN employees
 | 
|---|
| 18 |  I $E(ENT,9)!(TYP["B")!(HYBRID)!(SATNOSUN) F DAY=1,8,15 D WPD
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  ; Compute Saturday Premium Pay
 | 
|---|
| 21 |  I $E(ENT,8)!(TYP["B")!(HYBRID) F DAY=7,14 D WPD
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  Q
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 | WPD ; Weekend Premium for Day
 | 
|---|
| 26 |  ; input
 | 
|---|
| 27 |  ;   DAY - day in pay period (1,7,8,14, or 15)
 | 
|---|
| 28 |  ;   SAT2DT(day) - if defined for day, it equals the time segment (1-96)
 | 
|---|
| 29 |  ;                 just before the start of a 2-day tour that begins on
 | 
|---|
| 30 |  ;                 a Saturday and has already received Sunday premium.
 | 
|---|
| 31 |  ;                 Defined during computation of Sunday premiums and
 | 
|---|
| 32 |  ;                 used during computation of Saturday premiums to
 | 
|---|
| 33 |  ;                 prevent payment of both premiums for same period.
 | 
|---|
| 34 |  ;   TYP, ENT, etc...
 | 
|---|
| 35 |  ; output
 | 
|---|
| 36 |  ;   WK()
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 |  N AV,D,END,H,M,P,TP,TV
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 |  ; determine type of weekend premium.
 | 
|---|
| 41 |  S TP=$S("^7^14^"[(U_DAY_U):"SAT","^1^8^15^"[(U_DAY_U):"SUN",1:"")
 | 
|---|
| 42 |  Q:TP=""  ; invalid day (must be Sat. or Sun.)
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  ; determine types of time in a 'tour'
 | 
|---|
| 45 |  S TV=$$TV
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  ; determine types of time that might be eligible for premium
 | 
|---|
| 48 |  S AV=$$AV
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  ; load info for day
 | 
|---|
| 51 |  S D(DAY)=$G(^TMP($J,"PRS8",DAY,"W"))
 | 
|---|
| 52 |  Q:D(DAY)?1"0"."0"  ; no activity on day
 | 
|---|
| 53 |  S P(DAY)=$G(^TMP($J,"PRS8",DAY,"P"))
 | 
|---|
| 54 |  S H(DAY)=$G(^TMP($J,"PRS8",DAY,"HOL"))
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 |  ; loop thru activity string to find start of 'tour'
 | 
|---|
| 57 |  S M=1
 | 
|---|
| 58 |  S END=$S($G(SAT2DT(DAY))>0:SAT2DT(DAY),1:96)
 | 
|---|
| 59 |  F  D  Q:M=END  S M=M+1
 | 
|---|
| 60 |  . I TV'[$E(D(DAY),M),$E(H(DAY),M)'=2 Q
 | 
|---|
| 61 |  . ; found start of a 'tour'
 | 
|---|
| 62 |  . ; loop thru 'tour' activity and count the premium
 | 
|---|
| 63 |  . N CNT
 | 
|---|
| 64 |  . ;
 | 
|---|
| 65 |  . ; if the 'tour' starts at beginning of day then check if it is part
 | 
|---|
| 66 |  . ; of a 2-day 'tour' that actually started on the previous day
 | 
|---|
| 67 |  . I DAY>1,M=1 D
 | 
|---|
| 68 |  . . N CLASS,DYP,Z
 | 
|---|
| 69 |  . . S CLASS=$$CTS($E(D(DAY),M),$E(H(DAY),M))
 | 
|---|
| 70 |  . . S DYP=DAY-1
 | 
|---|
| 71 |  . . S D(DYP)=$G(^TMP($J,"PRS8",DYP,"W"))
 | 
|---|
| 72 |  . . S P(DYP)=$G(^TMP($J,"PRS8",DYP,"P"))
 | 
|---|
| 73 |  . . S H(DYP)=$G(^TMP($J,"PRS8",DYP,"HOL"))
 | 
|---|
| 74 |  . . Q:$$CTS($E(D(DYP),96),$E(H(DYP),96))'=CLASS  ; not same 'tour'
 | 
|---|
| 75 |  . . ; Hybrids defined by Public Law P.L. 107-135 only get Saturday
 | 
|---|
| 76 |  . . ; or Sunday premium for CT/OT/UN worked on Saturday or Sunday
 | 
|---|
| 77 |  . . Q:HYBRID&(TP="SAT")&($$CTS($E(D(DYP),96),$E(H(DYP),96))="X")
 | 
|---|
| 78 |  . . I CLASS="R",'$$TDT(DYP) Q  ; can't be same scheduled tour
 | 
|---|
| 79 |  . . ; If SATNOSUN and the day is a Sunday quit
 | 
|---|
| 80 |  . . Q:SATNOSUN&("^1^8^15^"[(U_DAY_U))
 | 
|---|
| 81 |  . . ; loop backward from midnight thru previous day's portion of tour
 | 
|---|
| 82 |  . . S Z=96
 | 
|---|
| 83 |  . . F  D  Q:Z=1  S Z=Z-1 Q:$$CTS($E(D(DYP),Z),$E(H(DYP),Z))'=CLASS
 | 
|---|
| 84 |  . . . I AV[$E(D(DYP),Z)!($E(D(DYP),Z)="O"&($E(H(DYP),Z)=2)) D COUNT^PRS8WE2(DYP,Z)
 | 
|---|
| 85 |  . . ; if Sun. premium then save Z to avoid recount of these Sat. hours
 | 
|---|
| 86 |  . . ;   when/if Sat. premium is calculated
 | 
|---|
| 87 |  . . ;
 | 
|---|
| 88 |  . . I TP="SUN" S SAT2DT(DYP)=Z
 | 
|---|
| 89 |  . ;
 | 
|---|
| 90 |  . ; If SATNOSUN and tour crossed mid onto Sunday set TP=SAT
 | 
|---|
| 91 |  . I M=1&("^1^8^"[(U_DAY_U)),SATNOSUN D
 | 
|---|
| 92 |  . . I AV[$E($G(^TMP($J,"PRS8",DAY-1,"W")),96) S TP="SAT"
 | 
|---|
| 93 |  . ;
 | 
|---|
| 94 |  . ; loop forward thru current day's portion of tour
 | 
|---|
| 95 |  . I DAY<15 F  D  Q:M=END  S M=M+1 Q:TV'[$E(D(DAY),M)&($E(H(DAY),M)'=2)
 | 
|---|
| 96 |  . . I AV[$E(D(DAY),M)!($E(D(DAY),M)="O"&($E(H(DAY),M)=2)) D COUNT^PRS8WE2(DAY,M)
 | 
|---|
| 97 |  . . ;
 | 
|---|
| 98 |  . . ; If checking for SATNOSUN quit when tour crossing midnight ends
 | 
|---|
| 99 |  . . I SATNOSUN&(TP="SAT")&("^1^8^15^"[(U_DAY_U))&(AV'[$E(D(DAY),M+1)) D SAVE^PRS8WE2 S M=END Q
 | 
|---|
| 100 |  . ;
 | 
|---|
| 101 |  . ; If counting Sat Prem for SATNOSUN and Day is a Sunday there is no
 | 
|---|
| 102 |  . ; need to check for the tour crossing midnight onto Monday
 | 
|---|
| 103 |  . Q:SATNOSUN&(TP="SAT")&("^1^8^15^"[(U_DAY_U))
 | 
|---|
| 104 |  . ;
 | 
|---|
| 105 |  . ; If SATNOSUN and DAY=14 and M<96 check remainder of tour for work
 | 
|---|
| 106 |  . I SATNOSUN&(DAY=14)&(M<96) D
 | 
|---|
| 107 |  . . F M=M:1:96 D
 | 
|---|
| 108 |  . . . I AV[$E(D(DAY),M)!($E(D(DAY),M)="O"&($E(H(DAY),M)=2)) D COUNT^PRS8WE2(DAY,M)
 | 
|---|
| 109 |  . ;
 | 
|---|
| 110 |  . ; If tour lasted until end of day then check if it is part of
 | 
|---|
| 111 |  . ; a 2-day tour that extends into next day
 | 
|---|
| 112 |  . I DAY<15,M=96,'SATNOSUN,(TV[$E(D(DAY),M))!($E(H(DAY),M)=2) D
 | 
|---|
| 113 |  . . N CLASS,DYN,Z
 | 
|---|
| 114 |  . . S CLASS=$$CTS($E(D(DAY),96),$E(H(DAY),96))
 | 
|---|
| 115 |  . . S DYN=DAY+1
 | 
|---|
| 116 |  . . S D(DYN)=$G(^TMP($J,"PRS8",DYN,"W"))
 | 
|---|
| 117 |  . . S P(DYN)=$G(^TMP($J,"PRS8",DYN,"P"))
 | 
|---|
| 118 |  . . S H(DYN)=$G(^TMP($J,"PRS8",DYN,"HOL"))
 | 
|---|
| 119 |  . . Q:$$CTS($E(D(DYN),1),$E(H(DYN),1))'=CLASS  ; not same 'tour'
 | 
|---|
| 120 |  . . ; Hybrids defined by Public Law P.L. 107-135 only get Saturday
 | 
|---|
| 121 |  . . ; or Sunday premium for CT/OT/UN worked on Saturday or Sunday
 | 
|---|
| 122 |  . . Q:HYBRID&(TP="SUN")&($$CTS($E(D(DYN),1),$E(H(DYN),1))="X")
 | 
|---|
| 123 |  . . I CLASS="R",'$$TDT(DAY) Q  ; can't be same scheduled tour
 | 
|---|
| 124 |  . . ; loop forward from midnight thru next day's portion of tour
 | 
|---|
| 125 |  . . S Z=1
 | 
|---|
| 126 |  . . F  D  Q:Z=96  S Z=Z+1 Q:$$CTS($E(D(DYN),Z),$E(H(DYN),Z))'=CLASS
 | 
|---|
| 127 |  . . . I AV[$E(D(DYN),Z)!($E(D(DYN),Z)="O"&($E(H(DYN),Z)=2)) D COUNT^PRS8WE2(DYN,Z)
 | 
|---|
| 128 |  . ;
 | 
|---|
| 129 |  . ; post premium time for tour to WK()
 | 
|---|
| 130 |  . D SAVE^PRS8WE2
 | 
|---|
| 131 |  Q
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 | TV() ; List types of time in a 'tour'
 | 
|---|
| 134 |  N PRSX
 | 
|---|
| 135 |  ; for regular time
 | 
|---|
| 136 |  S PRSX="LRSFGDUAJMWNnVH1234XYm"
 | 
|---|
| 137 |  ; for OT/CT
 | 
|---|
| 138 |  S PRSX=PRSX_$S(TYP["B":"EeOs",TYP["N"!(TYP["H"):"EetOoscbT",1:"")
 | 
|---|
| 139 |  I HYBRID S PRSX=PRSX_"EetOoscbT"
 | 
|---|
| 140 |  ; for employees covered by PL 108-170
 | 
|---|
| 141 |  I PMP'=""&("^S^T^U^V^"[(U_PMP_U)) D
 | 
|---|
| 142 |  . I $E(ENT,28),PRSX'["Eet" S PRSX=PRSX_"Eet"
 | 
|---|
| 143 |  . I $E(ENT,12),PRSX'["Oos" S PRSX=PRSX_"Oos"
 | 
|---|
| 144 |  . I $E(ENT,17),PRSX'["c" S PRSX=PRSX_"c"
 | 
|---|
| 145 |  . I $E(ENT,29),PRSX'["b" S PRSX=PRSX_"b"
 | 
|---|
| 146 |  . I $E(ENT,18),PRSX'["T" S PRSX=PRSX_"T"
 | 
|---|
| 147 |  Q PRSX
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 | AV() ; List types of time that might be eligible for premium pay
 | 
|---|
| 150 |  N PRSX
 | 
|---|
| 151 |  ; for regular time
 | 
|---|
| 152 |  S PRSX=$S(TYP["B":"",1:"1234XY")
 | 
|---|
| 153 |  ; for OT/CT
 | 
|---|
| 154 |  S PRSX=PRSX_$S(TYP["B":"EeOos",TYP["N"!(TYP["H"):"EeOosc",1:"")
 | 
|---|
| 155 |  I HYBRID S PRSX=PRSX_"EeOosc"
 | 
|---|
| 156 |  ; for employees covered by PL 108-170
 | 
|---|
| 157 |  I PMP'=""&("^S^T^U^V^"[(U_PMP_U)) D
 | 
|---|
| 158 |  . I $E(ENT,28),PRSX'["Ee" S PRSX=PRSX_"Ee"
 | 
|---|
| 159 |  . I $E(ENT,12),PRSX'["Oos" S PRSX=PRSX_"Oos"
 | 
|---|
| 160 |  . I $E(ENT,17),PRSX'["c" S PRSX=PRSX_"c"
 | 
|---|
| 161 |  Q PRSX
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 | CTS(XW,XH) ; Return class of a time segment
 | 
|---|
| 164 |  ; input XW = type of time in activity ("W") string
 | 
|---|
| 165 |  ;       XH = value in holiday ("H")  string
 | 
|---|
| 166 |  ; returns class
 | 
|---|
| 167 |  ;    "R"  regular scheduled
 | 
|---|
| 168 |  ;    "X"  extra (ot/ct) or unscheduled reg.
 | 
|---|
| 169 |  ;    "N"  not worked (includes on-call, standby when not called back)
 | 
|---|
| 170 |  Q $S(("LRSFGDUAJMWNnVH123XYm"[XW)!((XW="O")&(XH=2)):"R",("EetscbT4"[XW)!((XW="O")&(XH'=2)):"X",1:"N")
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 | TDT(DAYN) ; Two-Day Tour extrinsic variable
 | 
|---|
| 173 |  ; input
 | 
|---|
| 174 |  ;   DAYN = day # (0-15) being checked for at least one sch. 2-day tour
 | 
|---|
| 175 |  ; returns 0 (false) or 1 (true)
 | 
|---|
| 176 |  N RET
 | 
|---|
| 177 |  S RET=0 ; assume no scheduled 2-day tour of duty
 | 
|---|
| 178 |  S X=$G(^TMP($J,"PRS8",DAYN,0))
 | 
|---|
| 179 |  F I=2,13 I $P(X,U,I),$P($G(^PRST(457.1,$P(X,U,I),0)),U,5)="Y" S RET=1
 | 
|---|
| 180 |  Q RET
 | 
|---|
| 181 |  ;
 | 
|---|
| 182 |  ;PRS8WE
 | 
|---|