Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: PRS8HRSV

PRS8HRSV.m

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