| 1 | PRS8HRSV ;WCIOFO/JAH-HOLIDAY FLAG, TIME CHECKER, WK() SET; 04/05/07 | 
|---|
| 2 | ;;4.0;PAID;**29,52,102,108,112**;Sep 21, 1995;Build 54 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ;  Set up variable for holiday worked or holiday excused | 
|---|
| 5 | ;  Holiday worked coded 2 in DAY array | 
|---|
| 6 | ;  Holiday excused coded 1 in DAY array | 
|---|
| 7 | ;  A NON holiday is coded as all zero's in day array. | 
|---|
| 8 | ; | 
|---|
| 9 | ;  HOLIDAY WORKED | 
|---|
| 10 | S HOLWKD=$E(DAY(DAY,"HOL"),M)=2 | 
|---|
| 11 | ; | 
|---|
| 12 | ;  HOLIDAY EXCUSED | 
|---|
| 13 | S HOLEX=$E(DAY(DAY,"HOL"),M)=1 | 
|---|
| 14 | ; | 
|---|
| 15 | ;  HOLIDAY EXCUSED OR HOLIDAY WORKED | 
|---|
| 16 | S HOLWKEX=$E(DAY(DAY,"HOL"),M) | 
|---|
| 17 | Q | 
|---|
| 18 | ; | 
|---|
| 19 | ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | 
|---|
| 20 | ; | 
|---|
| 21 | CHK ; --- Check ENT for acceptable X value | 
|---|
| 22 | ;    Pieces of Y have values in locations corresponding to premium | 
|---|
| 23 | ;    times in value of X.  Values in Y string are locations | 
|---|
| 24 | ;    in entitlement string where associated time in X is | 
|---|
| 25 | ;    located. | 
|---|
| 26 | ;   -------------------------------------------------- | 
|---|
| 27 | ;                 | Fixed      |  Premium | 
|---|
| 28 | ;     Piece       | Position in|  Type Of Time | 
|---|
| 29 | ;    Of Y-String  | Entitlement| | 
|---|
| 30 | ;    & **WK()     | String     | | 
|---|
| 31 | ;    -----------  | -----------|  -------------------- | 
|---|
| 32 | ;        7        |    28      |  comp earned | 
|---|
| 33 | ;        9        |     2      |  unscheduled regular | 
|---|
| 34 | ;       16        |    19      |  hrs excess 8-d | 
|---|
| 35 | ;       17        |    20      |  hrs excess 8-d2 | 
|---|
| 36 | ;       18        |    21      |  hrs excess 8 d3 | 
|---|
| 37 | ;       20        |    12      |  OT total hrs d | 
|---|
| 38 | ;       21        |    13      |  OT total hrs d2 | 
|---|
| 39 | ;       22        |    14      |  OT total hrs d3 | 
|---|
| 40 | ;   --------------------------------------------------- | 
|---|
| 41 | ; | 
|---|
| 42 | N ZZ S Y="^^^^^^28^^2^^^^^^^19^20^21^^12^13^14^^^^3^4^^^^" | 
|---|
| 43 | ; | 
|---|
| 44 | ;   Set Y to a premium time in Y string, based on X | 
|---|
| 45 | ;   OR set Y to zero if X is a non premium time or parttime hours. | 
|---|
| 46 | ; | 
|---|
| 47 | I X'=32 S Y=+$P(Y,"^",X) | 
|---|
| 48 | ; | 
|---|
| 49 | ;   IF Y is premium time & not Unscheduled regular but employee not | 
|---|
| 50 | ;   ENTITLED to that type of time THEN set X to zero. | 
|---|
| 51 | ; | 
|---|
| 52 | I +Y,Y'=2,'$E(ENT,+Y) S X=0 | 
|---|
| 53 | ; | 
|---|
| 54 | ;   Overtime & Not entitled set X & Y to unscheduled regular | 
|---|
| 55 | ; | 
|---|
| 56 | I "^12^13^14^"[("^"_Y_"^"),'X S X=9,Y=2 | 
|---|
| 57 | ; | 
|---|
| 58 | ;   IF regular unscheduled (Y=2) & not hourly for regular unscheduled | 
|---|
| 59 | ;   THEN set X=0, unless Baylor then X gets regular unscheduled. | 
|---|
| 60 | ; | 
|---|
| 61 | I X,Y=2,$E(ENT,+Y)'="H" S X=$S(TYP'["B":0,1:9) | 
|---|
| 62 | ; | 
|---|
| 63 | ;   IF 36/40 AWS with WP determine eligibility for OT/CT | 
|---|
| 64 | ;   Skip this check if time is HW (X=29) or OT on Hol (X=24) | 
|---|
| 65 | ; | 
|---|
| 66 | I "KM"[$E(AC,1),$E(AC,2)=1,$P(C0,U,16)=72,X'=32,X'=29,X'=24 D | 
|---|
| 67 | . I HT>32 S X=$S(VAL="O":TOUR+15,VAL="e":7,1:X)  Q | 
|---|
| 68 | . I TH(W)>160 S X=$S(VAL="O":TOUR+19,VAL="e":7,1:X)  Q | 
|---|
| 69 | . I HT'>32,TH(W)'>160 S X=9 | 
|---|
| 70 | ; | 
|---|
| 71 | ;   If X is hours in excess of 8/day & > 40/week & type of time | 
|---|
| 72 | ;   is compensatory time X = 0 | 
|---|
| 73 | ; | 
|---|
| 74 | I "^16^17^18^"[("^"_X_"^"),TH(WK)>160,"Ee"[VAL S X=0 | 
|---|
| 75 | ; | 
|---|
| 76 | ;   ** Significance of checking "X" now as opposed to Y. | 
|---|
| 77 | ; | 
|---|
| 78 | K Y Q:'X | 
|---|
| 79 | ; | 
|---|
| 80 | ;   (Hours excess 8/day, OT hours, Reg hours @ OT rate, Holiday hours, | 
|---|
| 81 | ;   part time hours) OR unscheduled regular & Nurse or Nurse Hybrid. | 
|---|
| 82 | ; ### DO WE NEED TO ADD !HYBRID TO THIS CHECK ??? | 
|---|
| 83 | I "^16^17^18^20^21^22^29^30^31^32^"[("^"_X_"^")!(X=9&(TYP["N"!(TYP["H"))) D | 
|---|
| 84 | .; | 
|---|
| 85 | .;     If today holiday or holiday benefit day for employee | 
|---|
| 86 | .; | 
|---|
| 87 | .I $$HOLIDAY^PRS8UT(PY,DFN,DAY) D  Q:'X | 
|---|
| 88 | ..; | 
|---|
| 89 | ..;     If part time hours & entitled to (Holiday [Shift day, 2 or 3]) | 
|---|
| 90 | ..; | 
|---|
| 91 | ..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 | 
|---|
| 92 | ..; | 
|---|
| 93 | ..;     IF not part time hours & intermittent employee & employee | 
|---|
| 94 | ..;     entitled to holiday overtime & holiday worked THEN set TIME | 
|---|
| 95 | ..;     to OT on Holiday and credit that TIME in SET. | 
|---|
| 96 | ..; | 
|---|
| 97 | ..I X'=32,TYP["I",$E(ENT,25),HOLWKD S ZZ=X,X=24 D SET S X=0 | 
|---|
| 98 | ..; | 
|---|
| 99 | ..;     IF conditions same as above except employee is NOT entitled | 
|---|
| 100 | ..;     to Holiday OT THEN use X as coded to credit TIME. | 
|---|
| 101 | ..; | 
|---|
| 102 | ..I X'=32,TYP["I",'$E(ENT,25),HOLWKD S ZZ=0 D SET S X=9 | 
|---|
| 103 | ..; | 
|---|
| 104 | ..;     IF not part time hours & emp. is entitled to Holiday OT But | 
|---|
| 105 | ..;     they did not work the holiday THEN if emp. is part time or | 
|---|
| 106 | ..;     intermittent set type of time to Regular hrs @ OT rate 3 | 
|---|
| 107 | ..;     otherwise OT @ Holiday rate & IF the original coded TIME | 
|---|
| 108 | ..;     NOT = reg hrs @ OT rate(shift D,2,3) THEN credit TIME at | 
|---|
| 109 | ..;     OT on holiday or Reg hours @ OT rate.  THEN also credit time | 
|---|
| 110 | ..;     as unscheduled regular.  ** why code time twice? | 
|---|
| 111 | ..; | 
|---|
| 112 | ..I X'=32,$E(ENT,25),'HOLWKD D | 
|---|
| 113 | ...S ZZ=X | 
|---|
| 114 | ...; for 36/40 AWS w/ WP or NP report OT on Holiday as (OK/OS) | 
|---|
| 115 | ...; For 9mo AWS w/ Recess report OT on Holiday as (OK/OS) | 
|---|
| 116 | ...I +NAWS,VAL["O",$E(DAY(DAY,"HOL"),M)=0 S X=24 D SET S X=0 Q | 
|---|
| 117 | ...; | 
|---|
| 118 | ...S X=$S(TYP["P"!(TYP["I"):TOUR+28,1:24) D SET | 
|---|
| 119 | ...I TYP["P"!(TYP["I") S X=9 D SET | 
|---|
| 120 | ...S X=0 | 
|---|
| 121 | .; | 
|---|
| 122 | .;     IF type of time is part time hours for intermittent employee | 
|---|
| 123 | .;     THEN set TIME = unscheduled regular. | 
|---|
| 124 | .; | 
|---|
| 125 | .I X=32,TYP["I" S X=9 | 
|---|
| 126 | .; | 
|---|
| 127 | .;    Part time hours or unscheduled regular. | 
|---|
| 128 | .; | 
|---|
| 129 | .Q:X=32!(X=9) | 
|---|
| 130 | .; | 
|---|
| 131 | .;     IF employee worked holiday THEN set TIME to zero & if original | 
|---|
| 132 | .;     coded type of time is NOT regular hours @ OT rate DO | 
|---|
| 133 | .; | 
|---|
| 134 | .I HOLWKD S ZZ=X,X=0 D | 
|---|
| 135 | ..; | 
|---|
| 136 | ..;     IF entitled to Holiday pay for this shift THEN set TIME | 
|---|
| 137 | ..;     to Holiday HRS (shift d, 2 or 3) | 
|---|
| 138 | ..; | 
|---|
| 139 | ..I $E(ENT,TOUR+21) S X=TOUR+28 | 
|---|
| 140 | ; | 
|---|
| 141 | ;     IF employee is part time & either a nurse or nurse hybrid | 
|---|
| 142 | ;     & they worked the holiday | 
|---|
| 143 | ; ### SHOULD HYBRID BE ADDED TO THIS CHECK  HOW SHOULD THESE HYBRIDS | 
|---|
| 144 | ; ### TREATED ON A HOLIDAY | 
|---|
| 145 | I TYP["P",TYP["N"!(TYP["H"),HOLWKD,X=32 D | 
|---|
| 146 | .; | 
|---|
| 147 | .;     J gets start & stop times for employee's holiday tour. | 
|---|
| 148 | .;     Start/stop times are represented w/ natural numbers | 
|---|
| 149 | .;     from 0-96.  Each 15 minute segment of the 24 hour period | 
|---|
| 150 | .;     beginning & ending at midnight can be represented w/ | 
|---|
| 151 | .;     a positive integer.  I.e.  1 = mid-12:15am, | 
|---|
| 152 | .;     2 = 12:15-12:30a ... 96 = 11:45pm-mid. | 
|---|
| 153 | .; | 
|---|
| 154 | .;     Loop thru each set of start & stop times.  IF the single | 
|---|
| 155 | .;     1/4 hr segment we're working w/ falls w/in any of the nurses | 
|---|
| 156 | .;     start & stop times THEN set TIME to Holiday Hours Day. | 
|---|
| 157 | .; | 
|---|
| 158 | .N I,J S J=$G(^TMP($J,"PRS8",DAY,"HWK")),ZZ=X | 
|---|
| 159 | .; | 
|---|
| 160 | .F I=1:2 Q:$P(J,U,I)=""  I M'<$P(J,U,I),M'>$P(J,U,I+1) S X=29 | 
|---|
| 161 | .; | 
|---|
| 162 | .;     Holiday hrs-Day. reset X if 2 day tour.  Otherwise X = 0. | 
|---|
| 163 | .; | 
|---|
| 164 | .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) | 
|---|
| 165 | ; | 
|---|
| 166 | ; | 
|---|
| 167 | SET ; --- Set value into WK array | 
|---|
| 168 | ; | 
|---|
| 169 | ; Nurses on the 36/40 AWS are FT with Normal Hours of 72.  Nurses on the 9 month | 
|---|
| 170 | ; AWS are PT with Normal Hours of 80.  Neither will not have Part Time Hours | 
|---|
| 171 | ; counted in their 8B string. | 
|---|
| 172 | ; | 
|---|
| 173 | Q:$E(AC,2)=1&($P(C0,U,16)=72)&(X=32)  ; 36/40 AWS | 
|---|
| 174 | Q:$E(AC,2)=2&(NH=320)&(X=32)  ; 9month AWS before any Recess processed | 
|---|
| 175 | ; | 
|---|
| 176 | ;     Full time employee & part time hours & normal hours WK1 + WK2 | 
|---|
| 177 | ;     = biweekly normal hours. | 
|---|
| 178 | ; | 
|---|
| 179 | I $P(C0,"^",10)=1,X=32,NH(1)+NH(2)=NH Q | 
|---|
| 180 | ; | 
|---|
| 181 | ;     For all types of TIME, increment the WK array. | 
|---|
| 182 | ; | 
|---|
| 183 | I +X D  Q | 
|---|
| 184 | . S $P(WK(W),"^",+X)=$P(WK(W),"^",+X)+1 | 
|---|
| 185 | ; | 
|---|
| 186 | ;     When X is zero, reset to originally coded time. | 
|---|
| 187 | ; | 
|---|
| 188 | I 'X S X=ZZ Q | 
|---|
| 189 | Q | 
|---|
| 190 | ; | 
|---|
| 191 | ; | 
|---|
| 192 | TH ; --- increment total hours & compensatory time hours. | 
|---|
| 193 | ; Posted RG/OT/CT that is >8/day but < 40/week and < 80/pp will not be | 
|---|
| 194 | ; counted in TH or TH(W) | 
|---|
| 195 | ; | 
|---|
| 196 | ; I $S(VAL=4:1,"osEe"[VAL!(VAL="O"&('HOLWKD)):1,1:0) S TH=TH+1,TH(W)=TH(W)+1 | 
|---|
| 197 | ; | 
|---|
| 198 | I $S(VAL=4:1,"osEe"[VAL!(VAL="O"&('HOLWKD)):1,1:0) D | 
|---|
| 199 | . Q:(HT>32)&(TH(W)<160)&(NH<320)&($E(ENT,19)=1) | 
|---|
| 200 | . Q:(HT>32)&(TH(W)<160)&(NH=320)&($E(ENT,19)=1)&($E(AC,2)=2)  ; 9month AWS | 
|---|
| 201 | . S TH=TH+1,TH(W)=TH(W)+1 | 
|---|
| 202 | Q | 
|---|
| 203 | ; | 
|---|
| 204 | ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | 
|---|
| 205 | ; | 
|---|
| 206 | G8 ; --- Check for greater than 8 hours in day | 
|---|
| 207 | ; | 
|---|
| 208 | Q:HTP'>32!(VAL="E") | 
|---|
| 209 | ; | 
|---|
| 210 | ; Checks for Hours Excess 8/day (DA/DE) | 
|---|
| 211 | S X=TOUR+15 D CHK^PRS8HRSV | 
|---|
| 212 | I X,NH<320,CYA2806>0 S CYA2806=CYA2806-1 | 
|---|
| 213 | Q:X | 
|---|
| 214 | ; | 
|---|
| 215 | ; Checks for OT Total Hours (OA/OE) | 
|---|
| 216 | I TYP["I"!(TYP["P"),TYP'["B",TH(W)>160 S X=TOUR+19 D CHK^PRS8HRSV | 
|---|
| 217 | Q | 
|---|
| 218 | ; | 
|---|
| 219 | ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | 
|---|