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