Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WorldVistAEHR/trunk/r/PAID-PRS/PRS8PP.m

    r613 r623  
    1 PRS8PP  ;HISC/MRL,WIRMFO/MGD-DECOMP, PREMIUM PAYS ;05/10/07
    2         ;;4.0;PAID;**22,40,75,92,96,112**;Sep 21, 1995;Build 54
    3         ;;Per VHA Directive 2004-038, this routine should not be modified.
    4         ;
    5         ;This routine is the entry point for determining certain premium
    6         ;pays for an employee.  Included are overtime (OT),
    7         ;night differential (ND), unscheduled hours (UH), etc.
    8         ;
    9         ;Called by Routines:  PRS8ST
    10         ;
    11         S D=DAY(DAY,"W") ;                Daily activity string.
    12         S W=$S(DAY<8:1,1:2) ;             Week.
    13         I D?1"0"."0" Q  ;                 No activity this date.
    14         S NDC=1,(HT,HTP,HTFFOT)=0 ;       Counter for hrs worked this
    15         ;                                 day (HT=Hours total).
    16         N HYBRID ;                        HYBRID under P.L 107-135
    17         S HYBRID=$$HYBRID^PRSAENT1($G(DFN))
    18         D ^PRS8HR ;                       calculate Norm hrs first
    19         F M=1:1:96 S VAL=$E(D,M) I VAL'=0 D  ;loop thru minutes of day
    20         .S DH=DAY(DAY,"DH1")
    21         .I TWO,M'<+$P(DAY(DAY,"TWO"),"^",2) S DH=DAY(DAY,"DH2") ;    Daily hrs.
    22         .I NDC,"CWB"'[VAL D ND ;                                        Get ND.
    23         .I TYP["B",+VAL Q  ;                  Baylor get no premium during tod.
    24         .I "1234OosEe"'[VAL Q  ;                 Don't chk for non-work status.
    25         .S X=$E(D,M,96) ;                                     Remainder of day.
    26         .I X?1N.N,X'[4 Q  ;                      No hrs left other than normal.
    27         .I "J123MLSWNARXYOFGD"'[VAL!(VAL="O"&($E(DAY(DAY,"HOL"),M)'=2)) S AV="OosEe" D CALC^PRS8HR
    28         K AV,D,GO,M,NDC,X,X1,J1,J2 Q
    29         ;
    30 ND      ; --- compute ND
    31         ; Process wagegrade
    32         I TYP["W" D  Q
    33         . ; process WG scheduled time
    34         . I "J23LSARMXYUVFGD"[VAL!(VAL="O"&($E(DAY(DAY,"HOL"),M)=2)) D
    35         . . N DAT,DAYN,FND,M1,NODE,SC,TS
    36         . . ; find tour segment that contains the time and get it's special code
    37         . . S FND=0,SC="" ; FND true if found in schedule, SC = special code
    38         . . ; look in schedule of current day for M and previous day for M+96
    39         . . ; (in 2day tour, previous day's schedules >96 are Today's activity)
    40         . . F DAYN=DAY,DAY-1 D  Q:FND
    41         . . . S M1=$S(DAYN=DAY:M,1:M+96)
    42         . . . ; loop thru both tours in day
    43         . . . F NODE=1,4 S DAT=$G(^TMP($J,"PRS8",DAYN,NODE)) Q:DAT=""  D  Q:FND
    44         . . . . ; loop thru tour segments in tour
    45         . . . . F TS=1:1:7 Q:$P(DAT,U,(TS-1)*3+1)=""  D  Q:FND
    46         . . . . . ; check if time contained in tour segment
    47         . . . . . I M1'<$P(DAT,U,(TS-1)*3+1),M1'>$P(DAT,U,(TS-1)*3+2) S FND=1,SC=$P(DAT,U,(TS-1)*3+3)
    48         . . ;
    49         . . ; if time not found in any schedule, base SC on value of variable
    50         . . ;   TOUR for Today (or previous day when no scheduled tour Today).
    51         . . I 'FND S SC=$S($G(^TMP($J,"PRS8",DAY,1))=""&(DAY(DAY-1,"TOUR")>1):DAY(DAY-1,"TOUR")+4,1:TOUR+4)
    52         . . Q:"^6^7^"'[(U_SC_U)  ; tour segment not coded for shift 2 or 3
    53         . . S X=(SC-4)+8 ; determine where to store in WK array
    54         . . I $E(ENT,X-4) D SET ; if employee entitled then store result
    55         . ;
    56         . ; process WG unscheduled time
    57         . I VAL=4!(VAL="O") D
    58         . . N T,SD
    59         . . ; unscheduled regular tours for 'shift coverage' that are eligible
    60         . . ;   for shift 2 or 3 differential were saved in "SD" by PRS8EX.
    61         . . S SD=$G(^TMP($J,"PRS8",DAY,"SD"))
    62         . . Q:SD=""
    63         . . ; see if time belongs to a tour saved in "SD" and if so use the
    64         . . ;   associated shift (2 or 3)
    65         . . S SD(1)=0 ; init shift
    66         . . F T=1:3 S SD(0)=$P(SD,U,T,T+2) Q:SD(0)=""!(SD(0)?1."^")  D  Q:SD(1)
    67         . . . I M'<+SD(0),M'>$P(SD(0),"^",2) S SD(1)=$P(SD(0),"^",3)
    68         . . I SD(1) S X=SD(1)+8 I $E(ENT,X-4) D SET
    69         ;
    70         ; Process Other Employees (non-Wage Grade)
    71         ;
    72         ; Not entitled to ND
    73         I '$E(ENT,6) Q
    74         ;
    75         ; not entitled to ND if No Premium Pay tour
    76         I $P(DAY(DAY,1),"^",3)=8 Q
    77         ;
    78         ; check if time segment could be eligible for ND
    79         I $$NOTND(TYP,DAY,M) Q
    80         ;
    81         S AV="J1234ALSRMUEOosecbVXYFGD"
    82         ;
    83         ; Grant ND for time before 6a/after 6p or anytime when nurse/hybrid
    84         ; works tour coverage
    85         I M<25!(M>72)!($E(DAY(DAY,"P"),M)="N"&(TYP["N"!(TYP["H")!(HYBRID))),AV[VAL D
    86         . ; The Hybrids defined in Public Law 107-135 will only receive Night
    87         . ; Differential time for OT and CT worked between 6 p.m. and 6 a.m.
    88         . Q:HYBRID!(PMP'=""&("^S^T^U^V^"[(U_PMP_U)))&(M'<25&(M'>72))
    89         . ; Tour time between 6 p.m. and 6 a.m. counts toward ND
    90         . N DAT,DAYN,FND,M1,NODE,SC,TS,TOT
    91         . ; find tour segment that contains the time and get it's special code
    92         . S FND=0,SC="" ; FND true if found in schedule, SC = special code
    93         . S TOT="" ; Type Of Time
    94         . ; look in schedule of current day for M and previous day for M+96
    95         . ; (in 2day tour, previous day's schedules >96 are Today's activity)
    96         . F DAYN=DAY,DAY-1 D  Q:FND
    97         . . S M1=$S(DAYN=DAY:M,1:M+96)
    98         . . S DAT=$G(^TMP($J,"PRS8",DAYN,2)) D  Q:FND
    99         . . . ; loop thru tour segments in exceptions
    100         . . . F TS=1:1:7 Q:$P(DAT,U,(TS-1)*4+1)=""  D  Q:FND
    101         . . . . ; check if time contained in exception segment
    102         . . . . I M1'<$P(DAT,U,(TS-1)*4+1),M1'>$P(DAT,U,(TS-1)*4+2) D
    103         . . . . . S TOT=$P(DAT,U,(TS-1)*4+3)
    104         . . . . . ; On-Call and Recess are the only types of exceptions
    105         . . . . . ; where OT, CT and RG can be posted for the same 15 minute
    106         . . . . . ; segment of time, so don't stop searching if you find these.
    107         . . . . . I TOT="ON"!(TOT="RS") S TOT="" Q
    108         . . . . . S FND=1,SC=$P(DAT,U,(TS-1)*4+4)
    109         . . . . . Q
    110         . Q:TOT="OT"&("^11^12^17^"'[(U_SC_U))  ; Pre-Scheduled & Tour Coverage & OT/CT With Premiums
    111         . Q:TOT="CT"&("^12^17^"'[(U_SC_U))     ; Tour Coverage & OT/CT With Premiums
    112         . ; Code 17 - OT/CT with premiums only get ND for 6p-6a
    113         . Q:TOT="OT"!(TOT="CT")!(TOT="RG")&(SC=17)&((M'<25)&(M'>72))
    114         . Q:TOT="RG"&(SC'=7)&(SC'=17)          ; Shift Coverage & OT/CT With Premiums
    115         . S X=10
    116         . ; for 36/40 AWS, premium time resulting from their tour
    117         . ; will be mapped to Night Differential-AWS (ND/NU) and
    118         . ; Paid at the AAC with the 1872 divisor for the hourly rate (36*52)
    119         . I +NAWS=36,("OEc"'[VAL!(TOT="HW")) S X=51
    120         . D SET
    121         . ; keep leave count since it may need to be backed out by PRS8MSC0
    122         . I "LSRUFGD"[VAL S WKL(WK)=WKL(WK)+1
    123         ;
    124         ; Nurse can get ND for 6a-6p time when part of tour with 4+ hrs in 6p-6a
    125         ; check is made when M=24 (just before 6am) or M=73 (just after 6pm).
    126         ; if tour eligible (4+ hours in 'night' time) then ND is granted for
    127         ; the portion of the tour that falls within the 'day' time.
    128         I TYP["N"!(TYP["H"),M=73!(M=24),AV_"m"[VAL D
    129         . N C,J,Q,X,X1,X2,XD
    130         . ;
    131         . ; quit if 'day' time is for tour coverage since already counted
    132         . I $E(DAY(DAY,"P"),$S(M=73:72,1:25))="N" Q
    133         . ;
    134         . ; first check if tour has at least 4 hours of 'night' (6pm-6am) time
    135         . S XD=$S(M=24:-1,1:1) ; loop direction, [6am back, 6pm forward]
    136         . S X1=M,X2=X1+(XD*15) ; start and stop of 4 hour range
    137         . ; loop thru tour 'night' time - stop if tour ends or after 4 hours
    138         . S C=1 ; init flag, false when tour has less than 4 hours of 'night'
    139         . F J=X1:XD:X2 D  Q:'C
    140         . . I AV_"m"'[$E(D,J) S C=0 Q  ; inappropriate type of time
    141         . . I $$NOTND(TYP,DAY,J) S C=0 Q
    142         . . ; scheduled TOD considered as separate from covered TOD
    143         . . I $E(DAY(DAY,"P"),M)'=$E(DAY(DAY,"P"),J) S C=0 Q
    144         . ;
    145         . Q:'C  ; tour not eligible (less than 4 hours of 'night')
    146         . ;
    147         . ; loop thru day time (6am-6pm) portion of tour and grant ND
    148         . ; don't pay ND for meal-time (m) but continue loop
    149         . S XD=$S(M=24:1,1:-1) ; loop direction [6am forward, 6pm back]
    150         . S X1=M+XD,X2=X1+(47*XD) ; start and stop for day time (12 hours)
    151         . S Q=0 ; init flag, true when end of tour reached
    152         . F J=X1:XD:X2 D  Q:Q
    153         . . I AV_"m"'[$E(D,J) S Q=1 Q  ;    inappropriate time
    154         . . I $$NOTND(TYP,DAY,J) S Q=1 Q
    155         . . ; scheduled TOD considered as separate from covered TOD
    156         . . I $E(DAY(DAY,"P"),M)'=$E(DAY(DAY,"P"),J) S Q=1 Q
    157         . . ; grant ND (unless meal-time, etc.), keep count of leave since it
    158         . . ;   may need to be backed out by PRS8MSC0
    159         . . I AV[$E(D,J) D
    160         . . . S X=10
    161         . . . ; For 36/46 AWS nurses ND for Holiday Worked (HA/HL) and normal
    162         . . . ; tour time will be reported as Night Differential-AWS (ND/NU)
    163         . . . I +NAWS=36 D
    164         . . . . I $E(DAY(DAY,"HOL"),J)=2 S X=51 Q  ; Holiday Worked
    165         . . . . I "OEc"'[VAL S X=51 ; Tour time
    166         . . . D SET
    167         . . . S:"LSRUFGD"[$E(D,J) WKL(WK)=WKL(WK)+1
    168         ;
    169         Q
    170         ;
    171 SETJ    ; --- set week node (J variable defined)
    172         Q:$E(D,J)="m"
    173         ;
    174 SET     ; --- actually set the piece
    175         S $P(WK(WK),"^",X)=$P(WK(WK),"^",X)+1
    176         Q
    177         ;
    178 NOTND(PRSTY,PRSDY,PRSTM)        ; Not Eligible Night Differential
    179         ; in PRSTY  type of employee
    180         ;    PRSDY  day (1-14)
    181         ;    PRSTM  time segment (1-96)
    182         ; returns 0 or 1 (True when not eligible for ND)
    183         ;
    184         N VAL
    185         S VAL=$E(DAY(PRSDY,"W"),PRSTM)
    186         ;
    187         ; not entitled to ND
    188         I ($E(DAY(PRSDY,"P"),PRSTM)=5) Q 1
    189         ;
    190         ; OT on non-premium T&L
    191         I "EOosecb"[VAL,$E(DAY(PRSDY,"P"),PRSTM),VAL'="O"!(VAL="O"&($E(DAY(PRSDY,"HOL"),PRSTM)'=2)) Q 1
    192         ;
    193         ; Nurses do not get ND for OT that is not for ND Tour Coverage
    194         I "Ecb"[VAL!(VAL="O"&'$E(DAY(PRSDY,"HOL"),PRSTM)),PRSTY["N"!(PRSTY["H")!(HYBRID)!("^S^T^U^V^"[(U_PMP_U)),$E(DAY(PRSDY,"P"),PRSTM)'="N" Q 1
    195         ;
    196         ; Baylor gets no ND for work time on regularly scheduled day
    197         I TYP["B","^1^7^8^14^"[("^"_DAY_"^"),"1234ALSRMUNVXYFGD"[VAL Q 1
    198         ;
    199         ; GS Employees do not get ND for OT that is not Pre-Scheduled
    200         I "Ecb"[VAL!(VAL="O"&'$E(DAY(PRSDY,"HOL"),PRSTM)),PRSTY'["N",PRSTY'["H",'HYBRID,("^S^T^U^V^"'[(U_PMP_U)),$E(DAY(PRSDY,"P"),PRSTM)'="n" Q 1
    201         ;
    202         ; Unsch Reg time needs to be Pre-scheduled to get ND
    203         I VAL=4,PRSTY["P"!(PRSTY["I"&(PRSTY["N"!(PRSTY["H"))),"Nn"'[$E(DAY(PRSDY,"P"),PRSTM) Q 1
    204         Q 0 ; did not fail any of the checks
     1PRS8PP ;HISC/MRL,WIRMFO/MGD-DECOMP, PREMIUM PAYS ;02/27/04
     2 ;;4.0;PAID;**22,40,75,92,96**;Sep 21, 1995
     3 ;
     4 ;This routine is the entry point for determining certain premium
     5 ;pays for an employee.  Included are overtime (OT),
     6 ;night differential (ND), unscheduled hours (UH), etc.
     7 ;
     8 ;Called by Routines:  PRS8ST
     9 ;
     10 S D=DAY(DAY,"W") ;                Daily activity string.
     11 S W=$S(DAY<8:1,1:2) ;             Week.
     12 I D?1"0"."0" Q  ;                 No activity this date.
     13 S NDC=1,(HT,HTP,HTFFOT)=0 ;       Counter for hrs worked this
     14 ;                                 day (HT=Hours total).
     15 N HYBRID ;                        HYBRID under P.L 107-135
     16 S HYBRID=$$HYBRID^PRSAENT1($G(DFN))
     17 D ^PRS8HR ;                       calculate Norm hrs first
     18 F M=1:1:96 S VAL=$E(D,M) I VAL'=0 D  ;loop thru minutes of day
     19 .S DH=DAY(DAY,"DH1")
     20 .I TWO,M'<+$P(DAY(DAY,"TWO"),"^",2) S DH=DAY(DAY,"DH2") ;    Daily hrs.
     21 .I NDC,"CWB"'[VAL D ND ;                                        Get ND.
     22 .I TYP["B",+VAL Q  ;                  Baylor get no premium during tod.
     23 .I "1234OosEe"'[VAL Q  ;                 Don't chk for non-work status.
     24 .S X=$E(D,M,96) ;                                     Remainder of day.
     25 .I X?1N.N,X'[4 Q  ;                      No hrs left other than normal.
     26 .I "J123MLSWNARXYOFGD"'[VAL!(VAL="O"&($E(DAY(DAY,"HOL"),M)'=2)) S AV="OosEe" D CALC^PRS8HR
     27 K AV,D,GO,M,NDC,X,X1,J1,J2 Q
     28 ;
     29ND ; --- compute ND
     30 ; Process wagegrade
     31 I TYP["W" D  Q
     32 . ; process WG scheduled time
     33 . I "J23LSARMXYUVFGD"[VAL!(VAL="O"&($E(DAY(DAY,"HOL"),M)=2)) D
     34 . . N DAT,DAYN,FND,M1,NODE,SC,TS
     35 . . ; find tour segment that contains the time and get it's special code
     36 . . S FND=0,SC="" ; FND true if found in schedule, SC = special code
     37 . . ; look in schedule of current day for M and previous day for M+96
     38 . . ; (in 2day tour, previous day's schedules >96 are Today's activity)
     39 . . F DAYN=DAY,DAY-1 D  Q:FND
     40 . . . S M1=$S(DAYN=DAY:M,1:M+96)
     41 . . . ; loop thru both tours in day
     42 . . . F NODE=1,4 S DAT=$G(^TMP($J,"PRS8",DAYN,NODE)) Q:DAT=""  D  Q:FND
     43 . . . . ; loop thru tour segments in tour
     44 . . . . F TS=1:1:7 Q:$P(DAT,U,(TS-1)*3+1)=""  D  Q:FND
     45 . . . . . ; check if time contained in tour segment
     46 . . . . . I M1'<$P(DAT,U,(TS-1)*3+1),M1'>$P(DAT,U,(TS-1)*3+2) S FND=1,SC=$P(DAT,U,(TS-1)*3+3)
     47 . . ;
     48 . . ; if time not found in any schedule, base SC on value of variable
     49 . . ;   TOUR for Today (or previous day when no scheduled tour Today).
     50 . . I 'FND S SC=$S($G(^TMP($J,"PRS8",DAY,1))=""&(DAY(DAY-1,"TOUR")>1):DAY(DAY-1,"TOUR")+4,1:TOUR+4)
     51 . . Q:"^6^7^"'[(U_SC_U)  ; tour segment not coded for shift 2 or 3
     52 . . S X=(SC-4)+8 ; determine where to store in WK array
     53 . . I $E(ENT,X-4) D SET ; if employee entitled then store result
     54 . ;
     55 . ; process WG unscheduled time
     56 . I VAL=4!(VAL="O") D
     57 . . N T,SD
     58 . . ; unscheduled regular tours for 'shift coverage' that are eligible
     59 . . ;   for shift 2 or 3 differential were saved in "SD" by PRS8EX.
     60 . . S SD=$G(^TMP($J,"PRS8",DAY,"SD"))
     61 . . Q:SD=""
     62 . . ; see if time belongs to a tour saved in "SD" and if so use the
     63 . . ;   associated shift (2 or 3)
     64 . . S SD(1)=0 ; init shift
     65 . . F T=1:3 S SD(0)=$P(SD,U,T,T+2) Q:SD(0)=""!(SD(0)?1."^")  D  Q:SD(1)
     66 . . . I M'<+SD(0),M'>$P(SD(0),"^",2) S SD(1)=$P(SD(0),"^",3)
     67 . . I SD(1) S X=SD(1)+8 I $E(ENT,X-4) D SET
     68 ;
     69 ; Process Other Employees (non-Wage Grade)
     70 ;
     71 ; Not entitled to ND
     72 I '$E(ENT,6) Q
     73 ;
     74 ; not entitled to ND if No Premium Pay tour
     75 I $P(DAY(DAY,1),"^",3)=8 Q
     76 ;
     77 ; check if time segment could be eligible for ND
     78 I $$NOTND(TYP,DAY,M) Q
     79 ;
     80 S AV="J1234ALSRMUEOosecbVXYFGD"
     81 ;
     82 ; Grant ND for time before 6a/after 6p or anytime when nurse/hybrid
     83 ; works tour coverage
     84 I M<25!(M>72)!($E(DAY(DAY,"P"),M)="N"&(TYP["N"!(TYP["H")!(HYBRID))),AV[VAL D
     85 . ; The Hybrids defined in Public Law 107-135 will only receive Night
     86 . ; Differential time for OT and CT worked between 6 p.m. and 6 a.m.
     87 . Q:HYBRID!(PMP'=""&("^S^T^U^V^"[(U_PMP_U)))&(M'<25&(M'>72))
     88 . ; Tour time between 6 p.m. and 6 a.m. counts toward ND
     89 . N DAT,DAYN,FND,M1,NODE,SC,TS,TOT
     90 . ; find tour segment that contains the time and get it's special code
     91 . S FND=0,SC="" ; FND true if found in schedule, SC = special code
     92 . S TOT="" ; Type Of Time
     93 . ; look in schedule of current day for M and previous day for M+96
     94 . ; (in 2day tour, previous day's schedules >96 are Today's activity)
     95 . F DAYN=DAY,DAY-1 D  Q:FND
     96 . . S M1=$S(DAYN=DAY:M,1:M+96)
     97 . . S DAT=$G(^TMP($J,"PRS8",DAYN,2)) D  Q:FND
     98 . . . ; loop thru tour segments in exceptions
     99 . . . F TS=1:1:7 Q:$P(DAT,U,(TS-1)*3+1)=""  D  Q:FND
     100 . . . . ; check if time contained in exception segment
     101 . . . . I M1'<$P(DAT,U,(TS-1)*3+1),M1'>$P(DAT,U,(TS-1)*3+2) D
     102 . . . . . S FND=1,TOT=$P(DAT,U,(TS-1)*3+3),SC=$P(DAT,U,(TS-1)*3+4)
     103 . Q:TOT="OT"&("^11^12^"'[(U_SC_U))  ; Pre-Scheduled & Tour Coverage
     104 . Q:TOT="CT"&(SC'=12)               ; Tour Coverage
     105 . Q:TOT="RG"&(SC'=7)                ; Shift Coverage
     106 . S X=10 D SET
     107 . ; keep leave count since it may need to be backed out by PRS8MSC0
     108 . I "LSRUFGD"[VAL S WKL(WK)=WKL(WK)+1
     109 ;
     110 ; Nurse can get ND for 6a-6p time when part of tour with 4+ hrs in 6p-6a
     111 ; check is made when M=24 (just before 6am) or M=73 (just after 6pm).
     112 ; if tour eligible (4+ hours in 'night' time) then ND is granted for
     113 ; the portion of the tour that falls within the 'day' time.
     114 I TYP["N"!(TYP["H"),M=73!(M=24),AV_"m"[VAL D
     115 . N C,J,Q,X,X1,X2,XD
     116 . ;
     117 . ; quit if 'day' time is for tour coverage since already counted
     118 . I $E(DAY(DAY,"P"),$S(M=73:72,1:25))="N" Q
     119 . ;
     120 . ; first check if tour has at least 4 hours of 'night' (6pm-6am) time
     121 . S XD=$S(M=24:-1,1:1) ; loop direction, [6am back, 6pm forward]
     122 . S X1=M,X2=X1+(XD*15) ; start and stop of 4 hour range
     123 . ; loop thru tour 'night' time - stop if tour ends or after 4 hours
     124 . S C=1 ; init flag, false when tour has less than 4 hours of 'night'
     125 . F J=X1:XD:X2 D  Q:'C
     126 . . I AV_"m"'[$E(D,J) S C=0 Q  ; inappropriate type of time
     127 . . I $$NOTND(TYP,DAY,J) S C=0 Q
     128 . . ; scheduled TOD considered as separate from covered TOD
     129 . . I $E(DAY(DAY,"P"),M)'=$E(DAY(DAY,"P"),J) S C=0 Q
     130 . ;
     131 . Q:'C  ; tour not eligible (less than 4 hours of 'night')
     132 . ;
     133 . ; loop thru day time (6am-6pm) portion of tour and grant ND
     134 . ; don't pay ND for meal-time (m) but continue loop
     135 . S XD=$S(M=24:1,1:-1) ; loop direction [6am forward, 6pm back]
     136 . S X1=M+XD,X2=X1+(47*XD) ; start and stop for day time (12 hours)
     137 . S Q=0 ; init flag, true when end of tour reached
     138 . F J=X1:XD:X2 D  Q:Q
     139 . . I AV_"m"'[$E(D,J) S Q=1 Q  ;    inappropriate time
     140 . . I $$NOTND(TYP,DAY,J) S Q=1 Q
     141 . . ; scheduled TOD considered as separate from covered TOD
     142 . . I $E(DAY(DAY,"P"),M)'=$E(DAY(DAY,"P"),J) S Q=1 Q
     143 . . ; grant ND (unless meal-time, etc.), keep count of leave since it
     144 . . ;   may need to be backed out by PRS8MSC0
     145 . . I AV[$E(D,J) S X=10 D SET S:"LSRUFGD"[$E(D,J) WKL(WK)=WKL(WK)+1
     146 ;
     147 Q
     148 ;
     149SETJ ; --- set week node (J variable defined)
     150 Q:$E(D,J)="m"
     151 ;
     152SET ; --- actually set the piece
     153 S $P(WK(WK),"^",X)=$P(WK(WK),"^",X)+1
     154 Q
     155 ;
     156NOTND(PRSTY,PRSDY,PRSTM) ; Not Eligible Night Differential
     157 ; in PRSTY  type of employee
     158 ;    PRSDY  day (1-14)
     159 ;    PRSTM  time segment (1-96)
     160 ; returns 0 or 1 (True when not eligible for ND)
     161 ;
     162 N VAL
     163 S VAL=$E(DAY(PRSDY,"W"),PRSTM)
     164 ;
     165 ; not entitled to ND
     166 I ($E(DAY(PRSDY,"P"),PRSTM)=5) Q 1
     167 ;
     168 ; OT on non-premium T&L
     169 I "EOosecb"[VAL,$E(DAY(PRSDY,"P"),PRSTM),VAL'="O"!(VAL="O"&($E(DAY(PRSDY,"HOL"),PRSTM)'=2)) Q 1
     170 ;
     171 ; Nurses do not get ND for OT that is not for ND Tour Coverage
     172 I "Ecb"[VAL!(VAL="O"&'$E(DAY(PRSDY,"HOL"),PRSTM)),PRSTY["N"!(PRSTY["H")!(HYBRID)!("^S^T^U^V^"[(U_PMP_U)),$E(DAY(PRSDY,"P"),PRSTM)'="N" Q 1
     173 ;
     174 ; Baylor gets no ND for work time on regularly scheduled day
     175 I TYP["B","^1^7^8^14^"[("^"_DAY_"^"),"1234ALSRMUNVXYFGD"[VAL Q 1
     176 ;
     177 ; GS Employees do not get ND for OT that is not Pre-Scheduled
     178 I "Ecb"[VAL!(VAL="O"&'$E(DAY(PRSDY,"HOL"),PRSTM)),PRSTY'["N",PRSTY'["H",'HYBRID,("^S^T^U^V^"'[(U_PMP_U)),$E(DAY(PRSDY,"P"),PRSTM)'="n" Q 1
     179 ;
     180 ; Unsch Reg time needs to be Pre-scheduled to get ND
     181 I VAL=4,PRSTY["P"!(PRSTY["I"&(PRSTY["N"!(PRSTY["H"))),"Nn"'[$E(DAY(PRSDY,"P"),PRSTM) Q 1
     182 Q 0 ; did not fail any of the checks
Note: See TracChangeset for help on using the changeset viewer.