[613] | 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
|
---|