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/PRS8AC.m

    r613 r623  
    1 PRS8AC  ;HISC/MRL-DECOMPOSITION, ACTIVITY STRING ;05/18/07
    2         ;;4.0;PAID;**40,45,54,52,69,75,90,96,112**;Sep 21, 1995;Build 54
    3         ;;Per VHA Directive 2004-038, this routine should not be modified.
    4         ;
    5         ;The primary purpose of this routine is to create the activity
    6         ;string [the "W" node] for each day of activity.  While creating
    7         ;this string certain counts will also be tallied.  These include
    8         ;Standby, On-Call and the various absence categories.  Actual
    9         ;Call Back hrs are also counted in this routine for the purpose
    10         ;of reducing the OC later on in the process.
    11         ;
    12         ;Called by Routines:  PRS8EX, PRS8ST.
    13         ;
    14         Q:VAR=""
    15         I $S($P(V,"^",1)="":1,$P(V,"^",2)="":1,1:0) Q  ;no times
    16         S Q=0
    17         I DY>0,DY<15 D  G END:Q
    18         .I DAY(DY,"OFF"),"LSWARUHFGDr"[VAR S Q=1 ;exc invalid day off VAR
    19         K OC,FLAG
    20         ;
    21         S DAYZ=DAY(DY,"W")_$G(DAY(DY,"N")),MTM=0
    22         S DAYH=$G(DAY(DY,"HOL"))_$G(DAY(DY+1,"HOL")) ;holiday node
    23         N DAYR
    24         S DAYR=DAY(DY,"r")_$G(DAY(DY,"rN")) ; Recess
    25         ;
    26         ;P 45 FIREFIGHTERS F NODE TO TRACK ADDITIONAL FF HRS
    27         S DAYF=$G(DAY(DY,"F"))
    28         ;
    29         F T=+V:1:+$P(V,"^",2) D
    30         .I +VAR,$E(DAYH,T),$E(DAYZ,T)?1A Q  ;no override holiday
    31         .; Don't override Recess but allow Unscheduled Regular (VAR=4)
    32         .I +VAR,VAR'=4,$E(DAYR,T)="r" Q  ; don't override Recess
    33         .I VAR="A"&(JURY=1) S VAR="J"
    34         .S VAR1=VAR Q:VAR1=""  S DAYZ(1)=$E(DAYZ,T)
    35         .I "HhJLSARWMNUnVXYTFGD"[VAR1,$E(DAYZ,T)="m" Q
    36         .I T=+V,"12345E"[VAR1 S DAY(DY,"DWK")=1 ;count days worked
    37         .I T=+V,"Vh"[VAR1,TYP["I" S DAY(DY,"DWK")=1 ;count days worked for cop
    38         .I "JLSWNnARUXYFGD"[VAR1,T'>96,'$E(DAYZ,T) Q  ;invalid outside tour
    39         .; Regular employees can't earn ct/use ot during work
    40         .I +NAWS'=9,"EOPQT4"[VAR1,T'>96,$E(DAYZ,T) Q
    41         .; 9mo AWS checks
    42         .I +NAWS=9,"PQT"[VAR1,T'>96,$E(DAYZ,T) Q  ;can't earn ct/use ot during work
    43         .; Allow CT/OT/UN/ON if posted over Recess otherwise don't allow
    44         .I +NAWS=9,"4OEC"[VAR1,T'>96,$E(DAYZ,T),$E(DAYR,T)'="r" S $E(DAYR,T)=VAR1 Q
    45         .I "OE"[VAR1,"BC"[DAYZ(1),$L(DAYZ(1)) D  ; Change OT or CT to CB/SB OT
    46         ..S VAR1=$C($A($E(DAYZ,T))+32)
    47         ..I $E(DAYZ,T)="C",VAR="E" S VAR1="t" ; Comp time on on-call = "t"
    48         .I "BC"[VAR1,DAYZ(1)="O",$L(DAYZ(1)) D  ; Change CB/SB to CB/SB OT
    49         ..S VAR1=$C($A($E(VAR1))+32)
    50         .I "Hh"[VAR1 D  Q:VAR1="H"
    51         ..S DAYH=$E(DAYH,0,T-1)_$S(VAR1="H":1,$E(DAYZ,T)&($E(DAYZ,T)'=4)!(TYP["I")!(TYP["P"&(TYP["N"!(TYP["H")))!(VAR1="h"):2,1:0)_$E(DAYH,T+1,999) ;holiday node
    52         ..I VAR1="h" S VAR1="O" ;convert HW to OT
    53         ..I VAR="h",$E(DAYZ,T)=5 S FLAG=5
    54         .I $E(DAYZ,T)=5,"ALSRUFGD"[VAR1 S VAR1=$E(DAYZ,T)
    55         .I $E(DAYZ,T)="-","BbCctes"[VAR1 Q  ;unavail for oc/sb or sch ot/ct
    56         .;
    57         .I VAR'="r" D
    58         ..S DAYZ=$E(DAYZ,0,T-1)_VAR1_$E(DAYZ,T+1,999)
    59         ..I $E($G(DAY(DY-1,"N")),T)'="",VAR1'=$E($G(DAY(DY-1,"N")),T) D
    60         ...S DAY(DY-1,"N")=$E(DAY(DY-1,"N"),0,T-1)_VAR1_$E(DAY(DY-1,"N"),T+1,999) ;save VAR
    61         ..; When processing tour time also copy tour into DAYR
    62         ..I "1235"[VAR1 D
    63         ...S DAYR=$E(DAYZ,0,T-1)_VAR1_$E(DAYZ,T+1,999)
    64         ...I $E($G(DAY(DY-1,"N")),T)'="",VAR1'=$E($G(DAY(DY-1,"N")),T) D
    65         ....S DAY(DY-1,"rN")=$E(DAY(DY-1,"rN"),0,T-1)_VAR1_$E(DAY(DY-1,"rN"),T+1,999)
    66         .;
    67         .; The following check will record Recess and will then update VAR1 to 0 which
    68         .; will result in the normally scheduled tour being marked as being no tour.
    69         .; This will allow Unscheduled Regular, OT and CT to be posted over the tour.
    70         .I VAR="r" D
    71         ..S DAYR=$E(DAYR,0,T-1)_VAR1_$E(DAYR,T+1,999)
    72         ..S DAYZ=$E(DAYZ,0,T-1)_0_$E(DAYZ,T+1,999) ; Overwrite tour
    73         ..I $E($G(DAY(DY-1,"rN")),T)'="",VAR1'=$E($G(DAY(DY-1,"rN")),T) D
    74         ...S DAY(DY-1,"rN")=$E(DAY(DY-1,"rN"),0,T-1)_VAR1_$E(DAY(DY-1,"rN"),T+1,999)
    75         ...S DAY(DY-1,"N")=$E(DAY(DY-1,"N"),0,T-1)_0_$E(DAY(DY-1,"N"),T+1,999)
    76         ..S Y=48 D SET ; Count Recess
    77         .;
    78         .I VAR1="J" S Y=5 D SET ;set authorized absence for jury duty
    79         .I VAR1="M" S Y=5 D SET ; authorized absence for ML
    80         .;ot on non-premium T&L
    81         .I ("Eocb"[VAR1!(VAR1="O"&'$E(DAYH,T)))&("^^10^11^12^13^15^16^17^"[("^"_$P(V,"^",4)_"^"))!(VAR1=5&("ALSRUFGD"[VAR))!(VAR1=4&(TYP["P"!(TYP["I"&(TYP["N"!(TYP["H"!($$HYBRID^PRSAENT1($G(DFN)))))))&("^7^9^11^12^14^17^"[("^"_$P(V,"^",4)_"^"))) D
    82         ..Q:$E(DAY(DY,"P"),T)=5&("ALSRUFGD"'[VAR)
    83         ..I $D(FLAG) S FLAG=VAR1,VAR1=5
    84         ..N CODE D
    85         ...I "^7^8^12^"[("^"_$P(V,"^",4)_"^")&(TYP["N"!(TYP["H")!($$HYBRID^PRSAENT1($G(DFN)))) S CODE="N" Q
    86         ...I "^7^8^12^"[("^"_$P(V,"^",4)_"^")&(PMP'="")&("^S^T^U^V^"[(U_PMP_U)) S CODE="N" Q
    87         ...I $P(V,"^",4)=11,($$HYBRID^PRSAENT1($G(DFN))) S CODE="N" Q
    88         ...I $P(V,"^",4)=11&(PMP'="")&("^S^T^U^V^"[(U_PMP_U)) S CODE="N" Q
    89         ...I "^7^8^9^11^"[("^"_$P(V,"^",4)_"^")&(TYP'["N")&(TYP'["H")&('$$HYBRID^PRSAENT1($G(DFN))) S CODE="n" Q
    90         ...I "^7^8^9^11^"[("^"_$P(V,"^",4)_"^")&("^S^T^U^V^"'[(U_PMP_U)) S CODE="n" Q
    91         ...I $P(V,"^",4)=17 S CODE="N" Q  ; Code 17 - OT/CT with premiums
    92         ...I VAR1=5 S CODE=VAR Q
    93         ...S CODE=1
    94         ..S DAY(DY,"P")=$E(DAY(DY,"P"),0,T-1)_CODE_$E(DAY(DY,"P"),T+1,999)
    95         .I "ALSRUFGD"[VAR,VAR1=5 S VAR1=VAR
    96         .I $D(FLAG) S VAR1=FLAG K FLAG
    97         .;
    98 FOPTHR  .; part time hrs (PT/PH 8b codes) for CODE O firefighters
    99         .I +VAR1,"Ff"[TYP,PMP="O",(NH=448!(NH>320&(NH(1)'=NH(2)))) S Y=32 D SET
    100         .;
    101 FRCPTHR .; part time hrs (PT/PH 8b codes) for code R & C firefighters
    102         .; don't include UNSCHEDULED REGULAR (var1=4)
    103         .I +VAR1,VAR1'=4,"Ff"[TYP,"RC"[PMP S Y=32 D SET
    104         .;
    105         .;patch 45 & 54
    106         .; Set non pay hrs in the basic tour for firefighters with premium
    107         .;pay indicator of C.
    108         .I "nW"[VAR1,"Ff"[TYP,"C"=PMP D
    109         ..;
    110         ..;  Y designates location in WK array where NT/NH will be stored.
    111         ..;  F node was set to 1 for periods of addtl ff hrs during 1st pass
    112         ..;  thru scheduled ToD.  Count NT/NH if this is not addtl ff hrs.
    113         ..;
    114         ..I '$E(DAY(DY,"F"),T) S Y=47 D SET
    115         .S S="LSWnAREUP HYXOVQTFGD" I S[VAR1&(DY>0&(DY<15)!(DY=0&(T>96))) D  ;save in WK array
    116         ..S S(1)=$F(S,VAR1)-1
    117         ..S S=$P("1^2^3^4^5^6^0^8^0^9^24^42^43^0^33^0^19^44^45^46","^",S(1)) ;WK location
    118         ..Q:S=0
    119         ..; Patch *40 removed A (authorized absence) from leave counted in LU.
    120         ..; LU is only used to determine if night differential granted for
    121         ..; leave should be backed out.
    122         ..I TYP'["D","LSRUFGD"[VAR1 S LU=LU+1 ;increment leave counter
    123         ..I TYP'["D","LSRUFGD"[VAR1,(DY=0!(DY=14)&(T>96)),LU>0 S LU=LU-1
    124         ..S Y=S D SET S:TYP["D" Q=1
    125         ..K S,VAR1
    126         ;
    127         S DAY(DY,"W")=$E(DAYZ,1,96) ;todays activity
    128         S DAY(DY,"N")=$E(DAYZ,97,999) ;tomorrows activity from today/if any
    129         S DAY(DY,"r")=$E(DAYR,1,96) ; Today's Recess
    130         S DAY(DY,"rN")=$E(DAYR,97,999) ; Tomorrow's Recess/if any
    131         S:$E(DAY(DY,"P"),97,999)'="" DAY(DY,"P1")=$E(DAY(DY,"P"),97,999) ;non-prem ot for next day
    132         S DAY(DY,"P")=$E(DAY(DY,"P"),1,96) ;non-prem ot for today
    133         I DAY(DY,"N")?1"0"."0",DAY(DY,"rN")'["r" S DAY(DY,"N")=""
    134         S DAY(DY,"HOL")=$E(DAYH,1,96)
    135         ;
    136         ;P 45 FIREFIGHTER ADDITIONAL FIREFIGHTER HRS NODE FOR THIS DAY
    137         I $G(PRS8AFFH) D
    138         .  N PRSFFHR,PRSF1,PRSF2,PRSF3,SEG1,SEG2
    139         .;
    140         .;GET THE POSITIONAL START AND STOPS FOR THIS SEGMENT
    141         .  S SEG1=$P(V,U,1),SEG2=$P(V,U,2)
    142         .;EXISTING PORTION OF F NODE UP TO CURRENT SEGMENT
    143         .  S PRSF1=$E(DAYF,1,SEG1-1)
    144         .;CURRENT SEGMENT UP TO END OF DAY
    145         .  S PRSF2=$E(DAYZ,SEG1,SEG2)
    146         .;CURRENT F NODE PAST CURRENT SEGMENT TO END OF THE TOUR WHICH
    147         .;MAY FALL IN TODAY OR NEXT DAY.
    148         .S PRSF3=$E(DAYF,SEG2+1,999)
    149         .;
    150         .;UPDATE THE DAY ARRAY AND THE TMP GLOBAL WITH WORK STRING.
    151         .;EACH CHAR THAT IS SET TO 1 REPRESENTS A 15 MIN SEGMENT THAT
    152         .;THE FIREFIGHTER WAS SCHEDULED FOR ADDITIONAL FF HRS.
    153         .;FOR TOURS CROSSING MIDNIGHT THIS STRING WILL BE LONGER THAN 96
    154         .;CHARACTERS. CHARACTERS IN POSITIONS PAST 96 REPRESENT TIMES PAST
    155         .;MIDNIGHT OF THE CURRENT DAY (TOMORROW).
    156         .S PRSFFHR=PRSF1_PRSF2_PRSF3
    157         .S DAY(DY,"F")=PRSFFHR
    158         .S ^TMP($J,"PRS8",DY,"F")=PRSFFHR
    159         ;
    160         I DY<15 S X=$E(DAYH,97,999) I X'?."0" S ^TMP($J,"PRS8",DY+1,"HOL")=X_$E($G(^TMP($J,"PRS8",DY+1,"HOL")),$L(X)+1,999),DAY(DY+1,"HOL")=X
    161         ;
    162 MOVE    ; --- entry point for just moving previous days hrs to today
    163         I $D(DAY(DY-1,"N")),$L(DAY(DY-1,"N")) D
    164         .S X=DAY(DY-1,"N")_$E(DAY(DY,"W"),$L(DAY(DY-1,"N"))+1,96)
    165         .S DAY(DY,"W")=X
    166         I $D(DAY(DY-1,"P1")),$L(DAY(DY-1,"P1")) D
    167         .S X=DAY(DY-1,"P1")_$E(DAY(DY,"P"),$L(DAY(DY-1,"P1"))+1,96)
    168         .S DAY(DY,"P")=X
    169         I $D(DAY(DY-1,"rN")),$L(DAY(DY-1,"rN")) D
    170         .S X=DAY(DY-1,"rN")_$E(DAY(DY,"r"),$L(DAY(DY-1,"rN"))+1,96)
    171         .S DAY(DY,"r")=X
    172         ;
    173 END     ; --- all done here
    174         K CNT,OC,Q,S,SB,SL,SLP,T,VAR1,X,Y Q
    175         ;
    176 SET     ; --- set WK variable
    177         I (DY=0&(T<97))!(DY=14&(T>96))!(DY>14) Q
    178         S ZZ=WK,WK=$S(DY>7:2,1:1)
    179         I TYP'["D",DY=7,T>96 S WK=2
    180         S $P(WK(WK),"^",Y)=$P(WK(WK),"^",Y)+1
    181         ;
    182         ; The passing of Public Law 106-554 allows taking ML in hours.
    183         ; ML will now be recorded in 15 minute segments in the WK(3) array
    184         ; for employees entitled to take ML in hours.  PRS*4.0*69
    185         ;
    186         I VAR1="M",$$MLINHRS^PRSAENT(DFN) D
    187         . S WK=3,Y=11
    188         . S $P(WK(WK),"^",Y)=$P(WK(WK),"^",Y)+1
    189         ;
    190         ; IF a part-time employee and they have either LWOP or Non-Pay
    191         ; THEN decrement total hours for the week and the pay period.
    192         ; PRS*4.0*52.
    193         ;
    194         I "Wn"[VAR1,TYP["P" S TH=TH-1,TH(WK)=TH(WK)-1
    195         S WK=ZZ Q
     1PRS8AC ;HISC/MRL-DECOMPOSITION, ACTIVITY STRING ;01/22/04
     2 ;;4.0;PAID;**40,45,54,52,69,75,90,96**;Sep 21, 1995
     3 ;
     4 ;The primary purpose of this routine is to create the activity
     5 ;string [the "W" node] for each day of activity.  While creating
     6 ;this string certain counts will also be tallied.  These include
     7 ;Standby, On-Call and the various absence categories.  Actual
     8 ;Call Back hrs are also counted in this routine for the purpose
     9 ;of reducing the OC later on in the process.
     10 ;
     11 ;Called by Routines:  PRS8EX, PRS8ST.
     12 ;
     13 Q:VAR=""
     14 I $S($P(V,"^",1)="":1,$P(V,"^",2)="":1,1:0) Q  ;no times
     15 S Q=0
     16 I DY>0,DY<15 D  G END:Q
     17 .I DAY(DY,"OFF"),"LSWARUHFGD"[VAR S Q=1 ;exc invalid day off VAR
     18 K OC,FLAG
     19 ;
     20 S DAYZ=DAY(DY,"W")_$G(DAY(DY,"N")),MTM=0
     21 S DAYH=$G(DAY(DY,"HOL"))_$G(DAY(DY+1,"HOL")) ;holiday node
     22 ;
     23 ;P 45 FIREFIGHTERS F NODE TO TRACK ADDITIONAL FF HRS
     24 S DAYF=$G(DAY(DY,"F"))
     25 ;
     26 F T=+V:1:+$P(V,"^",2) D
     27 .I +VAR,$E(DAYH,T),$E(DAYZ,T)?1A Q  ;no override holiday
     28 .I VAR="A"&(JURY=1) S VAR="J"
     29 .S VAR1=VAR Q:VAR1=""  S DAYZ(1)=$E(DAYZ,T)
     30 .I "HhJLSARWMNUnVXYTFGD"[VAR1,$E(DAYZ,T)="m" Q
     31 .I T=+V,"12345E"[VAR1 S DAY(DY,"DWK")=1 ;count days worked
     32 .I T=+V,"Vh"[VAR1,TYP["I" S DAY(DY,"DWK")=1 ;count days worked for cop
     33 .I "JLSWNnARUXYFGD"[VAR1,T'>96,'$E(DAYZ,T) Q  ;invalid outside tour
     34 .I "EOPQT4"[VAR1,T'>96,$E(DAYZ,T) Q  ;can't earn ct/use ot during work
     35 .I "OE"[VAR1,"BC"[DAYZ(1),$L(DAYZ(1)) D  ; Change OT or CT to CB/SB OT
     36 ..S VAR1=$C($A($E(DAYZ,T))+32)
     37 ..I $E(DAYZ,T)="C",VAR="E" S VAR1="t" ; Comp time on on-call = "t"
     38 .I "BC"[VAR1,DAYZ(1)="O",$L(DAYZ(1)) D  ; Change CB/SB to CB/SB OT
     39 ..S VAR1=$C($A($E(VAR1))+32)
     40 .I "Hh"[VAR1 D  Q:VAR1="H"
     41 ..S DAYH=$E(DAYH,0,T-1)_$S(VAR1="H":1,$E(DAYZ,T)&($E(DAYZ,T)'=4)!(TYP["I")!(TYP["P"&(TYP["N"!(TYP["H")))!(VAR1="h"):2,1:0)_$E(DAYH,T+1,999) ;holiday node
     42 ..I VAR1="h" S VAR1="O" ;convert HW to OT
     43 ..I VAR="h",$E(DAYZ,T)=5 S FLAG=5
     44 .I $E(DAYZ,T)=5,"ALSRUFGD"[VAR1 S VAR1=$E(DAYZ,T)
     45 .I $E(DAYZ,T)="-","BbCctes"[VAR1 Q  ;unavail for oc/sb or sch ot/ct
     46 .S DAYZ=$E(DAYZ,0,T-1)_VAR1_$E(DAYZ,T+1,999) I $E($G(DAY(DY-1,"N")),T)'="",VAR1'=$E($G(DAY(DY-1,"N")),T) S DAY(DY-1,"N")=$E(DAY(DY-1,"N"),0,T-1)_VAR1_$E(DAY(DY-1,"N"),T+1,999) ;save VAR
     47 .I VAR1="J" S Y=5 D SET ;set authorized absence for jury duty
     48 .I VAR1="M" S Y=5 D SET ; authorized absence for ML
     49 .;ot on non-premium T&L
     50 .I ("Eocb"[VAR1!(VAR1="O"&'$E(DAYH,T)))&("^^10^11^12^13^15^16^"[("^"_$P(V,"^",4)_"^"))!(VAR1=5&("ALSRUFGD"[VAR))!(VAR1=4&(TYP["P"!(TYP["I"&(TYP["N"!(TYP["H"!($$HYBRID^PRSAENT1($G(DFN)))))))&("^7^9^11^12^14^"[("^"_$P(V,"^",4)_"^"))) D
     51 ..Q:$E(DAY(DY,"P"),T)=5&("ALSRUFGD"'[VAR)
     52 ..I $D(FLAG) S FLAG=VAR1,VAR1=5
     53 ..N CODE D
     54 ...I "^7^8^12^"[("^"_$P(V,"^",4)_"^")&(TYP["N"!(TYP["H")!($$HYBRID^PRSAENT1($G(DFN)))) S CODE="N" Q
     55 ...I "^7^8^12^"[("^"_$P(V,"^",4)_"^")&(PMP'="")&("^S^T^U^V^"[(U_PMP_U)) S CODE="N" Q
     56 ...I $P(V,"^",4)=11,($$HYBRID^PRSAENT1($G(DFN))) S CODE="N" Q
     57 ...I $P(V,"^",4)=11&(PMP'="")&("^S^T^U^V^"[(U_PMP_U)) S CODE="N" Q
     58 ...I "^7^8^9^11^"[("^"_$P(V,"^",4)_"^")&(TYP'["N")&(TYP'["H")&('$$HYBRID^PRSAENT1($G(DFN))) S CODE="n" Q
     59 ...I "^7^8^9^11^"[("^"_$P(V,"^",4)_"^")&("^S^T^U^V^"'[(U_PMP_U)) S CODE="n" Q
     60 ...I VAR1=5 S CODE=VAR Q
     61 ...S CODE=1
     62 ..S DAY(DY,"P")=$E(DAY(DY,"P"),0,T-1)_CODE_$E(DAY(DY,"P"),T+1,999)
     63 .I "ALSRUFGD"[VAR,VAR1=5 S VAR1=VAR
     64 .I $D(FLAG) S VAR1=FLAG K FLAG
     65 .;
     66FOPTHR .; part time hrs (PT/PH 8b codes) for CODE O firefighters
     67 .I +VAR1,"Ff"[TYP,PMP="O",(NH=448!(NH>320&(NH(1)'=NH(2)))) S Y=32 D SET
     68 .;
     69FRCPTHR .; part time hrs (PT/PH 8b codes) for code R & C firefighters
     70 .; don't include UNSCHEDULED REGULAR (var1=4)
     71 .I +VAR1,VAR1'=4,"Ff"[TYP,"RC"[PMP S Y=32 D SET
     72 .;
     73 .;patch 45 & 54
     74 .; Set non pay hrs in the basic tour for firefighters with premium
     75 .;pay indicator of C.
     76 .I "nW"[VAR1,"Ff"[TYP,"C"=PMP D
     77 ..;
     78 ..;  Y designates location in WK array where NT/NH will be stored.
     79 ..;  F node was set to 1 for periods of addtl ff hrs during 1st pass
     80 ..;  thru scheduled ToD.  Count NT/NH if this is not addtl ff hrs.
     81 ..;
     82 ..I '$E(DAY(DY,"F"),T) S Y=47 D SET
     83 .S S="LSWnAREUP HYXOVQTFGD" I S[VAR1&(DY>0&(DY<15)!(DY=0&(T>96))) D  ;save in WK array
     84 ..S S(1)=$F(S,VAR1)-1
     85 ..S S=$P("1^2^3^4^5^6^0^8^0^9^24^42^43^0^33^0^19^44^45^46","^",S(1)) ;WK location
     86 ..Q:S=0
     87 ..; Patch *40 removed A (authorized absence) from leave counted in LU.
     88 ..; LU is only used to determine if night differential granted for
     89 ..; leave should be backed out.
     90 ..I TYP'["D","LSRUFGD"[VAR1 S LU=LU+1 ;increment leave counter
     91 ..I TYP'["D","LSRUFGD"[VAR1,(DY=0!(DY=14)&(T>96)),LU>0 S LU=LU-1
     92 ..S Y=S D SET S:TYP["D" Q=1
     93 ..K S,VAR1
     94 ;
     95 ;
     96 S DAY(DY,"W")=$E(DAYZ,1,96) ;todays activity
     97 S DAY(DY,"N")=$E(DAYZ,97,999) ;tomorrows activity from today/if any
     98 S:$E(DAY(DY,"P"),97,999)'="" DAY(DY,"P1")=$E(DAY(DY,"P"),97,999) ;non-prem ot for next day
     99 S DAY(DY,"P")=$E(DAY(DY,"P"),1,96) ;non-prem ot for today
     100 I DAY(DY,"N")?1"0"."0" S DAY(DY,"N")=""
     101 S DAY(DY,"HOL")=$E(DAYH,1,96)
     102 ;
     103 ;P 45 FIREFIGHTER ADDITIONAL FIREFIGHTER HRS NODE FOR THIS DAY
     104 I $G(PRS8AFFH) D
     105 .  N PRSFFHR,PRSF1,PRSF2,PRSF3,SEG1,SEG2
     106 .;
     107 .;GET THE POSITIONAL START AND STOPS FOR THIS SEGMENT
     108 .  S SEG1=$P(V,U,1),SEG2=$P(V,U,2)
     109 .;EXISTING PORTION OF F NODE UP TO CURRENT SEGMENT
     110 .  S PRSF1=$E(DAYF,1,SEG1-1)
     111 .;CURRENT SEGMENT UP TO END OF DAY
     112 .  S PRSF2=$E(DAYZ,SEG1,SEG2)
     113 .;CURRENT F NODE PAST CURRENT SEGMENT TO END OF THE TOUR WHICH
     114 .;MAY FALL IN TODAY OR NEXT DAY.
     115 .S PRSF3=$E(DAYF,SEG2+1,999)
     116 .;
     117 .;UPDATE THE DAY ARRAY AND THE TMP GLOBAL WITH WORK STRING.
     118 .;EACH CHAR THAT IS SET TO 1 REPRESENTS A 15 MIN SEGMENT THAT
     119 .;THE FIREFIGHTER WAS SCHEDULED FOR ADDITIONAL FF HRS.
     120 .;FOR TOURS CROSSING MIDNIGHT THIS STRING WILL BE LONGER THAN 96
     121 .;CHARACTERS. CHARACTERS IN POSITIONS PAST 96 REPRESENT TIMES PAST
     122 .;MIDNIGHT OF THE CURRENT DAY (TOMORROW).
     123 .S PRSFFHR=PRSF1_PRSF2_PRSF3
     124 .S DAY(DY,"F")=PRSFFHR
     125 .S ^TMP($J,"PRS8",DY,"F")=PRSFFHR
     126 ;
     127 I DY<15 S X=$E(DAYH,97,999) I X'?."0" S ^TMP($J,"PRS8",DY+1,"HOL")=X_$E($G(^TMP($J,"PRS8",DY+1,"HOL")),$L(X)+1,999),DAY(DY+1,"HOL")=X
     128 ;
     129MOVE ; --- entry point for just moving previous days hrs to today
     130 I $D(DAY(DY-1,"N")),$L(DAY(DY-1,"N")) D
     131 .S X=DAY(DY-1,"N")_$E(DAY(DY,"W"),$L(DAY(DY-1,"N"))+1,96)
     132 .S DAY(DY,"W")=X
     133 I $D(DAY(DY-1,"P1")),$L(DAY(DY-1,"P1")) D
     134 .S X=DAY(DY-1,"P1")_$E(DAY(DY,"P"),$L(DAY(DY-1,"P1"))+1,96)
     135 .S DAY(DY,"P")=X
     136 ;
     137END ; --- all done here
     138 K CNT,OC,Q,S,SB,SL,SLP,T,VAR1,X,Y Q
     139 ;
     140SET ; --- set WK variable
     141 I (DY=0&(T<97))!(DY=14&(T>96))!(DY>14) Q
     142 S ZZ=WK,WK=$S(DY>7:2,1:1)
     143 I TYP'["D",DY=7,T>96 S WK=2
     144 S $P(WK(WK),"^",Y)=$P(WK(WK),"^",Y)+1
     145 ;
     146 ; The passing of Public Law 106-554 allows taking ML in hours.
     147 ; ML will now be recorded in 15 minute segments in the WK(3) array
     148 ; for employees entitled to take ML in hours.  PRS*4.0*69
     149 ;
     150 I VAR1="M",$$MLINHRS^PRSAENT(DFN) D
     151 . S WK=3,Y=11
     152 . S $P(WK(WK),"^",Y)=$P(WK(WK),"^",Y)+1
     153 ;
     154 ; IF a part-time employee and they have either LWOP or Non-Pay
     155 ; THEN decrement total hours for the week and the pay period.
     156 ; PRS*4.0*52.
     157 ;
     158 I "Wn"[VAR1,TYP["P" S TH=TH-1,TH(WK)=TH(WK)-1
     159 S WK=ZZ Q
Note: See TracChangeset for help on using the changeset viewer.