PRS8HRSV ;WCIOFO/JAH-HOLIDAY FLAG, TIME CHECKER, WK() SET; 05/02/06 ;;4.0;PAID;**29,52,102,108**;Sep 21, 1995 ; Set up variable for holiday worked or holiday exused ; Holiday worked coded 2 in DAY array ; Holiday exused coded 1 in DAY array ; A NON holiday is coded as all zero's in day array. ; ; HOLIDAY WORKED S HOLWKD=$E(DAY(DAY,"HOL"),M)=2 ; ; HOLIDAY EXCUSED S HOLEX=$E(DAY(DAY,"HOL"),M)=1 ; ; HOLIDAY EXCUSED OR HOLIDAY WORKED S HOLWKEX=$E(DAY(DAY,"HOL"),M) Q ; ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; CHK ; --- Check ENT for acceptable X value ; Pieces of Y have values in locations corresponding to premium ; times in value of X. Values in Y string are locations ; in entitlement string where associated time in X is ; located. ; -------------------------------------------------- ; | Fixed | Premium ; Piece | Position in| Type Of Time ; Of Y-String | Entitlement| ; & **WK() | String | ; ----------- | -----------| -------------------- ; 7 | 28 | comp earned ; 9 | 2 | unscheduled regular ; 16 | 19 | hrs excess 8-d ; 17 | 20 | hrs excess 8-d2 ; 18 | 21 | hrs excess 8 d3 ; 20 | 12 | OT total hrs d ; 21 | 13 | OT total hrs d2 ; 22 | 14 | OT total hrs d3 ; --------------------------------------------------- ; N ZZ S Y="^^^^^^28^^2^^^^^^^19^20^21^^12^13^14^^^^3^4^^^^" ; ; Set Y to a premium time in Y string, based on X ; OR set Y to zero if X is a non premium time or parttime hours. ; I X'=32 S Y=+$P(Y,"^",X) ; ; IF Y is premium time & not Unscheduled regular but employee not ; ENTITLED to that type of time THEN set X to zero. ; I +Y,Y'=2,'$E(ENT,+Y) S X=0 ; ; Overtime & Not entitled set X & Y to unscheduled regular ; I "^12^13^14^"[("^"_Y_"^"),'X S X=9,Y=2 ; ; IF regular unscheduled (Y=2) & not hourly for regular unscheduled ; THEN set X=0, unless Baylor then X gets regular unscheduled. ; I X,Y=2,$E(ENT,+Y)'="H" S X=$S(TYP'["B":0,1:9) ; ; If X is hours in excess of 8/day & > 40/week & type of time ; is compensatory time X = 0 ; I "^16^17^18^"[("^"_X_"^"),TH(WK)>160,"Ee"[VAL S X=0 ; ; ** Significance of checking "X" now as opposed to Y. ; K Y Q:'X ; ; (Hours excess 8/day, OT hours, Reg hours @ OT rate, Holiday hours, ; part time hours) OR unscheduled regular & Nurse or Nurse Hybrid. ; ### DO WE NEED TO ADD !HYBRID TO THIS CHECK ??? I "^16^17^18^20^21^22^29^30^31^32^"[("^"_X_"^")!(X=9&(TYP["N"!(TYP["H"))) D .; .; If today holiday or holiday benefit day for employee .; .I $$HOLIDAY^PRS8UT(PY,DFN,DAY) D Q:'X ..; ..; If part time hours & entitled to (Holiday [Shift day, 2 or 3]) ..; ..I X=32,$E(ENT,TOUR+21),HOLWKD S ZZ=X,X=$S($G(DAY(DAY,"OFF"))'=1:TOUR+28,1:9) D SET S X=$S(TYP'["I":ZZ,1:9) Q ..; ..; IF not part time hours & intermittent employee & employee ..; entitled to holiday overtime & holiday worked THEN set TIME ..; to OT on Holiday and credit that TIME in SET. ..; ..I X'=32,TYP["I",$E(ENT,25),HOLWKD S ZZ=X,X=24 D SET S X=0 ..; ..; IF conditions same as above except employee is NOT entitled ..; to Holiday OT THEN use X as coded to credit TIME. ..; ..I X'=32,TYP["I",'$E(ENT,25),HOLWKD S ZZ=0 D SET S X=9 ..; ..; IF not part time hours & emp. is entitled to Holiday OT But ..; they did not work the holiday THEN if emp. is part time or ..; intermittent set type of time to Regular hrs @ OT rate 3 ..; otherwise OT @ Holiday rate & IF the original coded TIME ..; NOT = reg hrs @ OT rate(shift D,2,3) THEN credit TIME at ..; OT on holiday or Reg hours @ OT rate. THEN also credit time ..; as unscheduled regular. ** why code time twice? ..; ..I X'=32,$E(ENT,25),'HOLWKD D ...S ZZ=X ...S X=$S(TYP["P"!(TYP["I"):TOUR+28,1:24) D SET ...I TYP["P"!(TYP["I") S X=9 D SET ...S X=0 .; .; IF type of time is part time hours for intermittent employee .; THEN set TIME = unscheduled regular. .; .I X=32,TYP["I" S X=9 .; .; Part time hours or unscheduled regular. .; .Q:X=32!(X=9) .; .; IF employee worked holiday THEN set TIME to zero & if original .; coded type of time is NOT regular hours @ OT rate DO .; .I HOLWKD S ZZ=X,X=0 D ..; ..; IF entitled to Holiday pay for this shift THEN set TIME ..; to Holiday HRS (shift d, 2 or 3) ..; ..I $E(ENT,TOUR+21) S X=TOUR+28 ; ; IF employee is part time & either a nurse or nurse hybrid ; & they worked the holiday ; ### SHOULD HYBRID BE ADDED TO THIS CHECK HOW SHOULD THESE HYBRIDS ; ### TREATED ON A HOLIDAY I TYP["P",TYP["N"!(TYP["H"),HOLWKD,X=32 D .; .; J gets start & stop times for employee's holiday tour. .; Start/stop times are represented w/ natural numbers .; from 0-96. Each 15 minute segment of the 24 hour period .; beginning & ending at midnight can be represented w/ .; a positive integer. I.e. 1 = mid-12:15am, .; 2 = 12:15-12:30a ... 96 = 11:45pm-mid. .; .; Loop thru each set of start & stop times. IF the single .; 1/4 hr segment we're working w/ falls w/in any of the nurses .; start & stop times THEN set TIME to Holiday Hours Day. .; .N I,J S J=$G(^TMP($J,"PRS8",DAY,"HWK")),ZZ=X .; .F I=1:2 Q:$P(J,U,I)="" I M'<$P(J,U,I),M'>$P(J,U,I+1) S X=29 .; .; Holiday hrs-Day. reset X if 2 day tour. Otherwise X = 0. .; .I X=29 D SET S X=$S($P(^PRST(457.1,$P(DAY(DAY-1,0),U,2),0),U,5)="Y":ZZ,1:0) ; ; SET ; --- Set value into WK array ; ; Full time employee & part time hours & normal hours WK1 + WK2 ; = biweekly normal hours. ; I $P(C0,"^",10)=1,X=32,NH(1)+NH(2)=NH Q ; ; For all types of TIME, increment the WK array. ; I +X D Q . S $P(WK(W),"^",+X)=$P(WK(W),"^",+X)+1 ; ; When X is zero, reset to originally coded time. ; I 'X S X=ZZ Q Q ; ; TH ; --- increment total hours & compensatory time hours. ; Posted RG/OT/CT that is >8/day but < 40/week and < 80/pp will not be ; counted in TH or TH(W) ; ; I $S(VAL=4:1,"osEe"[VAL!(VAL="O"&('HOLWKD)):1,1:0) S TH=TH+1,TH(W)=TH(W)+1 ; I $S(VAL=4:1,"osEe"[VAL!(VAL="O"&('HOLWKD)):1,1:0) D . Q:(HT>32)&(TH(W)<160)&(NH<320)&($E(ENT,19)=1) . S TH=TH+1,TH(W)=TH(W)+1 Q ; ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; G8 ; --- Check for greater than 8 hours in day ; Q:HTP'>32!(VAL="E") ; ; Checks for Hours Excess 8/day (DA/DE) S X=TOUR+15 D CHK^PRS8HRSV I X,NH<320,CYA2806>0 S CYA2806=CYA2806-1 Q:X ; ; Checks for OT Total Hours (OA/OE) I TYP["I"!(TYP["P"),TYP'["B",TH(W)>160 S X=TOUR+19 D CHK^PRS8HRSV Q ; ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%