[623] | 1 | PRS8WE2 ;WCIOFO/MGD-DECOMPOSITION, WEEKEND PREMIUM PART 2 ;10/22/04
|
---|
| 2 | ;;4.0;PAID;**90,92,96**;Sep 21, 1995
|
---|
| 3 | ;
|
---|
| 4 | COUNT(DAYN,SEG) ; Increase count of premium for tour
|
---|
| 5 | ; input
|
---|
| 6 | ; DAYN = day # (0-15) being counted
|
---|
| 7 | ; SEG = segment # (1-96) in DAYN being counted
|
---|
| 8 | ; D(DAYN)
|
---|
| 9 | ; P(DAYN)
|
---|
| 10 | ; H(DAYN)
|
---|
| 11 | ; CNT(DAYN,shift) - optional
|
---|
| 12 | ; output
|
---|
| 13 | ; CNT(DAYN,shift) = current count for tour being processed
|
---|
| 14 | ;
|
---|
| 15 | N DAT,FND,M1,NODE,NOTELG,POST,PREVDAY,RC,SC,SHIFT,TDAY,TOUR,TOURS,TS
|
---|
| 16 | ; perform final checks
|
---|
| 17 | I ("EetOscbT"[$E(D(DAYN),SEG)),$E(H(DAYN),SEG)'=2,$E(P(DAYN),SEG) Q
|
---|
| 18 | I TYP["P","4"[$E(D(DAYN),SEG),$E(H(DAYN),SEG)'=2,$E(P(DAYN),SEG)=0 Q
|
---|
| 19 | ;
|
---|
| 20 | ; If Hybrid employee as defined by Public Law P.L. 107-135, check
|
---|
| 21 | ; to see if the time was on a tour of duty or an exception. Tours
|
---|
| 22 | ; worked on Sat or Sun qualify for Premium time. If the time was
|
---|
| 23 | ; an exception, check the Remarks Code to see if the segment can be
|
---|
| 24 | ; counted as Premium time.
|
---|
| 25 | ;
|
---|
| 26 | S (FND,NOTELG)=0
|
---|
| 27 | ; Quit if Sunday and employee is not entitled to Sun Prem Pay
|
---|
| 28 | Q:SATNOSUN&("^1^8^15^"[(U_DAY_U))&(TP="SUN")
|
---|
| 29 | I HYBRID!(PMP'=""&("^S^T^U^V^"[(U_PMP_U))) D Q:NOTELG
|
---|
| 30 | . ; Check to see if the time was on a tour or an exception
|
---|
| 31 | . N INC,END
|
---|
| 32 | . F TOURS=1,4,2 D Q:NOTELG!(FND)
|
---|
| 33 | . . S TOUR=$G(^TMP($J,"PRS8",DAYN,TOURS))
|
---|
| 34 | . . Q:TOUR=""
|
---|
| 35 | . . S INC=$S(TOURS=2:4,1:3)
|
---|
| 36 | . . S END=$S(TOURS=2:25,1:19)
|
---|
| 37 | . . F POST=1:INC:END I $P(TOUR,"^",POST)'="" D Q:NOTELG!(FND)
|
---|
| 38 | . . . ; Quit if SEG is not within the start/stop time
|
---|
| 39 | . . . Q:SEG<$P(TOUR,"^",POST)!(SEG>$P(TOUR,"^",POST+1))
|
---|
| 40 | . . . S FND=1
|
---|
| 41 | . . . Q:TOURS=1!(TOURS=4) ; If on a Tour it counts as Premium
|
---|
| 42 | . . . S RC=$P(TOUR,"^",POST+3)
|
---|
| 43 | . . . ; Remarks Code must be OT/CT on Premium (#9), Tour Coverage (#12)
|
---|
| 44 | . . . ; or CB - Premium T&L (#14) to qualify for Premium pay.
|
---|
| 45 | . . . I "^9^12^14^"'[("^"_RC_"^") S NOTELG=1
|
---|
| 46 | . Q:FND
|
---|
| 47 | . ;
|
---|
| 48 | . ; If we didn't find SEG in either of the two tours or the
|
---|
| 49 | . ; exceptions then check to see if it crossed over into this day.
|
---|
| 50 | . S PREVDAY=DAYN-1
|
---|
| 51 | . N INC,END
|
---|
| 52 | . F TOURS=1,4,2 D Q:NOTELG
|
---|
| 53 | . . S TOUR=$G(^TMP($J,"PRS8",PREVDAY,TOURS))
|
---|
| 54 | . . Q:TOUR=""
|
---|
| 55 | . . S INC=$S(TOURS=2:4,1:3)
|
---|
| 56 | . . S END=$S(TOURS=2:25,1:19)
|
---|
| 57 | . . F POST=1:4:25 I $P(TOUR,"^",POST)'="" D Q:NOTELG!(FND)
|
---|
| 58 | . . . ; Quit if SEG is not within the start/stop time
|
---|
| 59 | . . . Q:(SEG+96)<$P(TOUR,"^",POST)!((SEG+96)>$P(TOUR,"^",POST+1))
|
---|
| 60 | . . . S FND=1
|
---|
| 61 | . . . Q:TOURS=1!(TOURS=4) ; If on a Tour it counts as Premium
|
---|
| 62 | . . . S RC=$P(TOUR,"^",POST+3)
|
---|
| 63 | . . . ; Remarks Code must be OT/CT on Premium (#9), Tour Coverage (#12)
|
---|
| 64 | . . . ; or CB - Premium T&L (#14) to qualify for premium pay.
|
---|
| 65 | . . . I "^9^12^14^"'[("^"_RC_"^") S NOTELG=1
|
---|
| 66 | ;
|
---|
| 67 | I $E(H(DAYN),SEG)=1!($E(P(DAYN),SEG)=5) Q
|
---|
| 68 | ; determine special code
|
---|
| 69 | S SHIFT=1
|
---|
| 70 | I TP="SUN",TYP["W" D
|
---|
| 71 | . ; Check to see if shift 2 or 3 is recorded for the segment worked
|
---|
| 72 | . I "^2^3^"[(U_$E(D(DAYN),SEG)_U) S SHIFT=$E(D(DAYN),SEG) Q
|
---|
| 73 | . S FND=0,SC=""
|
---|
| 74 | . ; Check for Holiday Worked on a Holiday
|
---|
| 75 | . I $E(D(DAYN),SEG)="O",$E(H(DAYN),SEG)=2 D
|
---|
| 76 | . . F TDAY=DAYN,DAYN-1 D Q:FND
|
---|
| 77 | . . . S M1=$S(TDAY=DAYN:SEG,1:SEG+96)
|
---|
| 78 | . . . ; loop through both tours in day
|
---|
| 79 | . . . F NODE=1,4 S DAT=$G(^TMP($J,"PRS8",TDAY,NODE)) Q:DAT="" D Q:FND
|
---|
| 80 | . . . . ; loop through tour segments in tour
|
---|
| 81 | . . . . F TS=1:1:7 Q:$P(DAT,U,(TS-1)*3+1)="" D Q:FND
|
---|
| 82 | . . . . . ; check if time is contained in tour segment
|
---|
| 83 | . . . . . I M1'<$P(DAT,U,(TS-1)*3+1),M1'>$P(DAT,U,(TS-1)*3+2) D
|
---|
| 84 | . . . . . . S SC=$P(DAT,U,(TS-1)*3+3),SHIFT=$S(SC=6:2,SC=7:3,1:1)
|
---|
| 85 | . . . . . . I "^2^3^"[(U_SHIFT_U) S FND=1
|
---|
| 86 | ;
|
---|
| 87 | ; add to count
|
---|
| 88 | S CNT(DAYN,SHIFT)=$G(CNT(DAYN,SHIFT))+1
|
---|
| 89 | Q
|
---|
| 90 | ;
|
---|
| 91 | SAVE ; Update WK array with final count for tour
|
---|
| 92 | ; input
|
---|
| 93 | ; TP - type of premium (SAT or SUN)
|
---|
| 94 | ; CNT(day,shift)=amount
|
---|
| 95 | ;
|
---|
| 96 | N AMT,DAYN,PC,SHIFT,WEEK
|
---|
| 97 | S DAYN=0 F S DAYN=$O(CNT(DAYN)) Q:DAYN="" D
|
---|
| 98 | . Q:DAYN<1!(DAYN>14)
|
---|
| 99 | . S WEEK=$S(DAYN<8:1,1:2)
|
---|
| 100 | . S SHIFT="" F S SHIFT=$O(CNT(DAYN,SHIFT)) Q:SHIFT="" D
|
---|
| 101 | . . S AMT=CNT(DAYN,SHIFT)
|
---|
| 102 | . . S PC=$S(TP="SAT":0,1:SHIFT)+12
|
---|
| 103 | . . S $P(WK(WEEK),U,PC)=$P(WK(WEEK),U,PC)+AMT
|
---|
| 104 | Q
|
---|
| 105 | ;
|
---|
| 106 | ;PRS8WE
|
---|