source: FOIAVistA/trunk/r/PAID-PRS/PRS8HR.m@ 1397

Last change on this file since 1397 was 628, checked in by George Lilly, 15 years ago

initial load of FOIAVistA 6/30/08 version

File size: 6.3 KB
Line 
1PRS8HR ;HISC/MRL,WCIOFO/JAH-DECOMPOSITION, HOURS ;06/25/07
2 ;;4.0;PAID;**2,22,29,42,52,102,108,112**;Sep 21, 1995;Build 54
3 ;;Per VHA Directive 2004-038, this routine should not be modified.
4 ;
5 ;This routine is called by ^PRS8PP (premium pay calculator)
6 ;=====================================================================
7 ; ** indicates incompleted comments
8 ;
9 ;VARIABLE DEFINITION
10 ;
11 ; TYP = contains codes representing type of employee.
12 ; It's a composite code string w/ characters that
13 ; represent pay plan, duty basis, & normal hours.
14 ; CODE REPRESENTS CODE REPRESENTS
15 ; D daily f firefighter
16 ; W wagegrade P part-time
17 ; N nurse d doctor
18 ; B baylor plan dR doctor/resident or intern
19 ; H Nurse Hybrid "" *
20 ; I intermittent
21 ; VAL = Single char code represents employee's work status for
22 ; current 15 min increment.
23 ; FLX = Flex tour indicator.
24 ; TH(W) = Tour Hours for week 1, TH(1) & week 2, TH(2)
25 ; TH = Tour Hours
26 ; HTP = PAYABLE hours worked today.
27 ; HT = Hours worked today.
28 ; AV = String w/ most normal types of time (see bottom of PRS8EX)
29 ; does NOT contain premium times or unscheduled time (OoEes4)
30 ;====================================================================
31 ;
32 S AV="1235nHMLSWNARUXYVJFGD"
33 ;
34 ; Loop thru each quarter hour segment of day.
35 ; Check for times in AV array.
36 ; Proceed w/ calculation if Overtime worked on Holiday.
37 ;
38 F M=1:1:96 D
39 . S VAL=$E(D,M)
40 .;
41 .; If non premium type of time or (overtime on holiday)
42 .;
43 . I AV[VAL!(VAL="O"&($E(DAY(DAY,"HOL"),M)=2)) D CALC
44 Q
45 ;
46 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47 ;
48CALC ; --- Entry point for calculating placement of time
49 ;
50 ; Set up variables for calculations and comparisons in this routine
51 ;
52 N HOLWKD,HOLEX,HOLWKEX
53 D ^PRS8HRSV
54 ;
55 ; IF intermittent employee on continuation of pay OR overtime on
56 ; holiday THEN increment Pay Period tour hours and current weeks
57 ; tour hours.
58 ;
59 I TYP["I",VAL["V"!(VAL="O"&(HOLWKD)) S TH=TH+1,TH(W)=TH(W)+1
60 ;
61 ; IF part time doctor & total hours = 80 & type of
62 ; time is unscheduled, overtime, comptime THEN quit
63 ;
64 I TYP["d",TYP["P",TH=320,"4OosEe"[VAL Q
65 ;
66 ; IF INT doctor & total hours = 80 THEN quit
67 ;
68 I TYP["I",$E(AC,1)="L",TH=320,"4OosEe"[VAL Q
69 ;
70 ; IF type of time is anything but Leave Without Pay "W" or Non-Pay "n"
71 ; THEN increment total hrs HT & increment HTP. Also update
72 ; ^TMP global for reference during the processing of On-Call (PRS8OC).
73 ;
74 I "Wn"'[VAL S HT=HT+1,HTP=HTP+1,^TMP($J,"PRS8",DAY,"HT")=HT
75 ;
76 ;---------------------------------------------------------
77 ; IF entitled to VCS commission sales & normal time(1) ??(2,3)
78 ; & holiday excused set X to type of time=Piece Worker Hol excused.
79 ; Then IF part time set X to part time hours code.
80 ;
81 I $E(ENT,38),"123"[VAL,HOLEX S X=36 D CHK^PRS8HRSV D Q:X
82 . I TYP["P" S X=32 D CHK^PRS8HRSV
83 ;
84 ;---------------------------------------------------------------
85 ;
86 ; Don't mess w/ fire fighters
87 ;
88 Q:"Ff"[TYP
89 ;
90 S GO=0
91 ; IF compressed tour & parttime & tour hours are over 80
92 ; OR tour hours = 80 & it's overtime, comptime, or unscheduled reg.
93 ;
94 ; Check for FT Compressed
95 I $E(AC,2)=1,NH>319,FLX="C",("OoseE4"[VAL) S GO=1
96 ;
97 ; Check for week
98 I (TH(W)>160&("OoseE4"[VAL))!(TH(W)=160&("OosEe4"[VAL)) S GO=1
99 ;
100 ; Check for day
101 I HT>32,"OoseE4"[VAL S GO=1
102 ;
103 ; Following segment is concerned w/ variations of part time
104 ; employees (TYP["P"), & 1 baylor (TYP["B").
105 ;-------------------------------------------------------------------
106 ;
107 ; Doctor over 8 hours
108 ;
109 I TYP["Pd",HT>32 S GO=0 ; part-time doctors PT + PH must = NH
110 ;
111 I TYP["P",HOLWKD S GO=0
112 ;
113 ; Baylor plan & ct/ot/s
114 ;
115 I TYP["B","EeOos"[VAL S GO=1
116 ;
117 ;-------------------------------------------------------------------
118 ; GO set in cases where employee maybe eligible for OT
119 ; due to over > 8/day OR > 40/week.
120 ;
121 S X=0 I GO D TH^PRS8HRSV D OVER840^PRS8HROT Q
122 ;
123 ;-------------------------------------------------------------------
124 ;-------------------------------------------------------------------
125 ; GO not set for compressed schedule of at least 80 hrs.
126 ; GO not set for non compressed schedule of over 40 hrs.
127 ; IF GO is set and we are evaluating normal hours or
128 ; HOLIDAY OVERTIME use NORMHRS to increment TIME
129 ; in week array. THEN QUIT.
130 ;
131 S GO=1
132 I FLX="C",NH>319 S GO=0
133 I FLX'="C",NH(WK)>160,TYP'["Pd" S GO=0 ;IF pt-doctor don't set GO=0
134 I GO,"1235nHMLSWNARUXYVJFGD"[VAL!(VAL="O"&(HOLWKD)) D NORMHRS^PRS8HROT Q
135 ;
136 ;--------------------------------------------------------------------
137 ; Check employees with Normal hours less than 80. (Baylor NH=320)
138 ;
139 I NH'>319!(($E(AC,2)=2)&(NH=320)) D TH^PRS8HRSV D Q
140 .I FLX="C" D Q:X
141 ..;
142 ..; For PT employees review hours worked to determine X
143 ..I "OosEe4"'[VAL S X=32 ; All tour time = PT/PH
144 ..;
145 ..; Checks for CT
146 ..I "Ee"[VAL D
147 ...; <8/DAY & <40/WK = UN/US
148 ...I HT'>32,TH(W)'>160 S X=9 Q
149 ...S X=7 ; CE/CT
150 ..;
151 ..; Checks for all other types of time
152 ..I "Oos4"[VAL D
153 ...I HT>32 S X=TOUR+15 Q ; DA/DE
154 ...I TH(W)>160 S X=TOUR+19 Q ; OA/OE
155 ...S X=9 ; UN/US
156 ..D CHK^PRS8HRSV
157 .;
158 .; Under 8/day, 40/week, and not coded as overtime or comptime
159 .; or overtime on holiday.
160 .;
161 .; Checks for non-compressed employees
162 .I HT'>32,TH(W)'>160,"OoseE"'[VAL!(VAL="O"&(HOLWKD)) S X=0 D Q:X
163 ..;
164 ..; Not intermittent, normal hours and not unscheduled reg.
165 ..; TIME gets parttime hours.
166 ..;
167 ..I TYP'["I",AV[VAL,VAL'=4 S X=32 D CHK^PRS8HRSV Q
168 ..;
169 ..; All else fails - TIME gets unscheduled regular.
170 ..;
171 ..S X=9 D CHK^PRS8HRSV Q
172 .;
173 .; Part time doctor w/ unscheduled reg. TIME gets unscheduled reg.
174 .;
175 .I TYP["P",TYP["d",VAL=4 S X=9 D CHK^PRS8HRSV Q
176 .;
177 .; Over 8/day
178 .;
179 .I HT>32 D G8^PRS8HRSV Q:X
180 .;
181 .; For all time left except comptime set TIME to appropriate OT
182 .; unless comptime has been worked earlier in the week making
183 .; the total hours less than 40, then TIME gets unscheduled reg.
184 .; COMPTIME OVER 8/DAY WILL BE CREDITED HERE
185 .;
186 .S X=$S("Ee"'[VAL:TOUR+19,(TH(W)'>160)&(HT'>32):9,1:7)
187 .I TYP["P",VAL[4,TH(W)'>160,HT'>32 S X=9
188 .I TYP["P",VAL="O",TH(W)'>160,HT'>32 S X=9
189 .D CHK^PRS8HRSV
190 Q
Note: See TracBrowser for help on using the repository browser.