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