PRS8MSC0 ;HISC/DAD,WCIOFO/JAH,SAB - MISC TIME CARD ADJUST(contd) ;4/04/2007
;;4.0;PAID;**22,35,40,56,111,112**;Sep 21, 1995;Build 54
;;Per VHA Directive 2004-038, this routine should not be modified.
;
; for employee on daily tour check if no duty performed during week
I TYP["D" D NODUTY^PRS8MSC1
;
S B="",Z0="" S $P(B,"B",97)="",$P(Z0,"0",97)="",FLAG=0
F X=1:1:PEROWK S Y=$P(PEROWK(X),"^",4),DAT=$P(PEROWK(X),"^",1,3),DY=$P(DAT,"^",1),BEG=$P(DAT,"^",2),END=$P(DAT,"^",3) D
.I $L(Y)'<96,TYP'["Ff",$E(ENT,27) D ; slp for 24hr cvg
..S SLMAX=32,(SLW,SLY,SLST,SLSTR,SLST1,SLY1,SL1,SL2,SL3)=""
..I END=96 D
...S SLST=$P($G(PEROWK(X)),"^",4),SL2=$E(SLST,SST,$L(SLST)),SL1=$E(SLST,1,SLMAX-$L(SL2)),SL3=$L(SL2)
...S SLSTR=SL1_SL2
...I DOUB S SLSTR=$TR(SLSTR,"Cct","Bbb") ; if PPC = W then OC = SB
...S SLSTR=$TR(SLSTR,$TR(SLSTR,"Bb"),Z0)
...S SLY=$L($TR(SLSTR,"b0")),SLW=$L($TR(SLSTR,"B0"))
...I SLW>12 Q
...I DY=0 S FLAG=SL3
...S Y=$L(SLSTR)-SLW
...I FLAG>0&(DY=1) S Y=Y-FLAG,FLAG=0
...S D=DY,P=25 D SET Q
..E D
...S SLST=$G(^TMP($J,"PRS8",DY,"W"))_$G(^TMP($J,"PRS8",DY+1,"W"))
...S SLSTR=$E(SLST,1,SST+(SLMAX-1))
...I DOUB S SLSTR=$TR(SLSTR,"Cct","Bbb") ; if PPC = W then OC = SB
...S SLSTR=$TR(SLSTR,$TR(SLSTR,"Bb"),Z0)
...S SLY=$E(SLSTR,SST,96),SLY1=$E(SLSTR,97,$L(SLSTR))
...S SLSTR=SLY_SLY1,SLW=$L($TR(SLSTR,"B0"))
...I SLW>12 Q
...S D=DY,Y=$L($TR(SLY,"b0")),P=25 D SET
...Q:DY=0 S D=DY+1,Y=$L($TR(SLY1,"b0")) D SET
...Q
..K BEG,DAT,END,NL,SLW,SLY,SLST,SLSTR,SLST1,SLY1,SL1,SL2,SL3 Q
.Q
S D="",(H,ROSS)=1 K OT,UN,DA,CT
F H=H:ROSS:PEROT D ; calculate CB OT and FF OT/sleep time
.S Y=PEROT(H),Z=$P(Y,"^",3)
.I "Ff"[TYP D ;K OT,UN,DA D ; FF sleep time
..F M=1:1:$L(Z) D ; following FF OT per Mary Baker 4/1/93
...I D'=+Y+(($P(Y,"^",2)+M-2)\96) D
....S D=+Y+(($P(Y,"^",2)+M-2)\96),HT=0
....Q
...S HT=HT+1
...I $E(Z,H)="E" S CT(D)=$G(CT(D))+1 Q
...I M'>32 S:HT'>32 OT(D)=$G(OT(D))+1 S:HT>32 DA(D)=$G(DA(D))+1 ; FF OT
...I M>32,$L(Z)'<96&(M'>64)!($L(Z)<96) S DA(D)=$G(DA(D))+1 ; FF hrs>8
...I $L(Z)'<96,M>64 D ; FF 2/3 rule
....I M'>96 S UN(D)=$G(UN(D))+1 ; first 8 sleep time
....E S DA(D)=$G(DA(D))+1 ; rest hrs >8
....Q
...Q
..Q
.I $L(Z)<8 D ; call back OT at least 2 hrs
..S YY=Y,ZZ=Z N X,Y,START,STOP,T,TT,Z,DD,TL S Y=YY,Z=ZZ
..S CB=$G(^TMP($J,"PRS8",+Y,"CB"))
..;no call back OT today or send bulletin
..Q:(CB="")!($$OTNXTPP(+Y,CB,$P(C0,"^",1),PY,$P(C0,"^",8)))
..S Q=0 F ZZ=1:2 Q:'$P(CB,"^",ZZ) I $P(Y,"^",2)=$P(CB,"^",ZZ) S Q=1
..Q:'Q ; this OT episode not call back
..S OT=Y,START=$P(OT,"^",2),STOP=$P(OT,"^",2)+$L(Z)-1,T=START,TT=$S(T>96:T-96,1:T)
..S W=$G(^TMP($J,"PRS8",+OT,"W")),WEEK=$S(+OT>7:2,1:1)
..S W1=$G(^TMP($J,"PRS8",OT-1,"W"))
..S W2=$G(^TMP($J,"PRS8",OT+1,"W"))
..S (Z,X)=0 F Z=1:1:8-(STOP-START+1) D Q:X=0
...S DD=Z
...I TT-DD>0 S X=$E(W,TT-DD)
...E S X=$E(W1,96+T-DD)
...I "123m"[X,$E($G(^TMP($J,"PRS8",$S(TT-DD>0:+OT,1:OT-1),"HOL")),$S(TT-DD>0:TT-DD,1:96+T-DD))=1 S X=0 ; HX becomes time off
...Q
..S ZZ=Z S:X=0&Z ZZ=ZZ-1 S X=0,T=STOP,TT=$S(T>96:T-96,1:T)
..F Z=1:1:8-(STOP-START+1+ZZ) D Q:X=0
...S DD=STOP-START+1+ZZ+Z
...I T+Z'>96 S X=$E(W,T+Z)
...E S X=$E(W2,T-96+Z)
...I "123m"[X,$E($G(^TMP($J,"PRS8",$S(T+Z'>96:+OT,1:OT+1),"HOL")),$S(T+Z'>96:T+Z,1:T-96+Z))=1 S X=0 ; HX becomes time off
...Q
..S Z=ZZ+Z-(X=0&Z)
..I STOP-START+1+Z<8 D
...I TYP["W",$E($P(PEROT(H),"^",3))'="E"&($G(^TMP($J,"PRS8",$P(PEROT(H),"^",1),"OFF"))=0) S TOUR=$G(^TMP($J,"PRS8",$P(PEROT(H),"^",1),"TOUR"))
...S D=+OT,P=$S($E($P(PEROT(H),"^",3))'="E":TOUR+19,1:7),Y=8-(STOP-START+1+Z)
...;
...I TYP["P",TYP'["B",P'=7,'+NAWS D
....I $P($G(^TMP($J,"PRS8",$P(PEROT(H),"^",1),"OFF")),"^",1)=1&(TH(WEEK)'>160) S Y=0 Q
....I $P(C0,"^",12)="E" S P=$S($L($TR(W,"0O"))>31&(TH(WEEK)'>160):TOUR+25,1:P) D:Y SET S Y=$S(TH(WEEK)'>160:Y,1:0) S P=9 D:Y SET S Y=0
...I $P(C0,"^",12)="N",P'=7 S P=$S($L($TR(W,"0O"))>31:TOUR+15,1:P) D:Y SET S Y=0
...D:Y&('+NAWS) SET
...;
...I +NAWS D Q ; Checks for just the AWS nurses
....N CNT,HT,I
....S CNT=Y,Y=1,HT=$G(^TMP($J,"PRS8",D,"HT"))
....F I=1:1:CNT D
.....I HT'<32 S P=$S(P'=7:TOUR+15,1:P) D SET1 Q ; DA/DE or CE/CT
.....I TH($S(+OT>7:2,1:1))'<160 S P=$S(P'=7:TOUR+19,1:P) D SET1 Q ; OA/OE or CE/CT
.....I HT<32,TH($S(+OT>7:2,1:1))<160 S P=9 D SET1 Q ; UN/US
..Q
.Q
F X="OT","DA","UN","CT" D ; store FF OT into WK array
.N Y S P=$S(X="OT":TOUR+19,X="DA"&$E(ENT,TOUR+18):TOUR+15,X="DA":TOUR+19,X="CT":TOUR+6,1:9)
.F D=0:0 S D=$O(@(X_"("_D_")")) Q:D'>0 S Y=@(X_"("_D_")") D SET
.Q
;
; check/adjust night differential granted for leave
D LVND
Q
SET ; Set sleep time into WK array
Q:D<1!(D>14)
S WEEK=$S(D>7:2,1:1)
S $P(WK(WEEK),"^",P)=$P(WK(WEEK),"^",P)+Y
Q
;
SET1 ; Set sleep time into WK array
Q:D<1!(D>14)
S WEEK=$S(D>7:2,1:1)
S $P(WK(WEEK),"^",P)=$P(WK(WEEK),"^",P)+Y
Q:(HT>32)&(TH(WEEK)<160)&(NH<320)&($E(ENT,19)=1)
Q:(HT>32)&(TH(WEEK)<160)&(NH=320)&($E(ENT,19)=1)&($E(AC,2)=2) ; 9month AWS
S HT=HT+1,TH(WEEK)=TH(WEEK)+1
S ^TMP($J,"PRS8",D,"HT")=^TMP($J,"PRS8",D,"HT")+1
Q
;
OTNXTPP(DAY,CALLBK,EMPNM,PPIEN,TLU) ;
;OT or CT connects to a tour of duty in the next pay period.
;JAH-patch PRS*4*22
;If OT or CT are worked in last 2 hours of pay period & 1st day
;of next pay period is missing a tour beginning at midnight, send
;a bulletin warning that call back will be paid unless corrective
;action is taken.
;(i.e a nurse comes in before midnight on last saturday of
;pay period & works for a period less than 2 hrs. before her tour
;that begins at midnight on Sunday, first day of the next pp)
;
; CALLBK = start and stop position in 96 char BCD string.
; RECORD = pointer from employee's tour info to a record
; in tour of duty file.
; DAY = day of the pay period
; D1NXTPP = BOOLEAN; set to true if tour on day 1 of next pay period
; begins at midnight, otherwise false
; NEXTP = next pay period in 97-05 format.
; CURP = current pay period in 99-02 format.
; TLU = 3 digit time & leave unit of employee.
N D1NXTPP,RECORD,CURP,NEXTP,XMDUZ,XMB,XMY,XMDUZ
S (RTN,D1NXTPP)=0
S RECORD=$P($G(^TMP($J,"PRS8",15,0)),"^",2)
I RECORD'="" S D1NXTPP=($P($G(^PRST(457.1,RECORD,1)),"^")="MID")
I (DAY=14)&($P(CALLBK,"^",2)=96) D
. I (D1NXTPP) S RTN=1
. E D
.. S CURP=$P($G(^PRST(458,PPIEN,0)),"^",1)
.. S NXTP=$E($$NXTPP^PRSAPPU(CURP),3,7)
..; Send bulletin to G.PAD
.. S XMY("G.PAD@"_^XMB("NETNAME"))=""
.. S XMDUZ="DHCP PAID package"
.. S XMB="PRS LAST SAT OT/CT"
..;
..; employee name, pay period number, next pay period
.. S XMB(1)=EMPNM,XMB(2)=CURP,XMB(3)=NXTP,XMB(4)=TLU
.. D ^XMB
Q RTN
;
LVND ; Leave Night Differential
; back out ND granted for leave if employee took 8 or more hrs of leave
; a non-wage grade employee can receive night differential when
; on leave as long as the employee has taken less than 8 hours of
; leave during the pay period.
; input (note: units are count of 15min time segments):
; LU - leave taken during pay period (set in PRS8AC, PRS8MT)
; WK(#) - piece 10 contains total shift-2 ND for week #
; WKL(#) - ND granted for leave during week # (set in PRS8PP)
; output:
; WK(#) - piece 10 may be modified
; WKL(#) - may be modified
N W
Q:TYP["W" ; Doesn't apply to Wage Grade
Q:LU'>31 ; Didn't take 8hrs of leave
F W=1,2 D ; For each week subtract leave ND from total ND
. Q:'WKL(W) ; No leave ND to subtract
. I +NAWS'=36 S $P(WK(W),"^",10)=$P(WK(W),"^",10)-WKL(W) ; Subtract
. ; For 36/40 AWS subtract time from Night Differential-AWS (piece 51)
. I +NAWS=36 S $P(WK(W),"^",51)=$P(WK(W),"^",51)-WKL(W)
. S WKL(W)=0 ; Reset leave ND amount
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPRS8MSC0 7994 printed Dec 13, 2024@02:22:52 Page 2
PRS8MSC0 ;HISC/DAD,WCIOFO/JAH,SAB - MISC TIME CARD ADJUST(contd) ;4/04/2007
+1 ;;4.0;PAID;**22,35,40,56,111,112**;Sep 21, 1995;Build 54
+2 ;;Per VHA Directive 2004-038, this routine should not be modified.
+3 ;
+4 ; for employee on daily tour check if no duty performed during week
+5 IF TYP["D"
DO NODUTY^PRS8MSC1
+6 ;
+7 SET B=""
SET Z0=""
SET $PIECE(B,"B",97)=""
SET $PIECE(Z0,"0",97)=""
SET FLAG=0
+8 FOR X=1:1:PEROWK
SET Y=$PIECE(PEROWK(X),"^",4)
SET DAT=$PIECE(PEROWK(X),"^",1,3)
SET DY=$PIECE(DAT,"^",1)
SET BEG=$PIECE(DAT,"^",2)
SET END=$PIECE(DAT,"^",3)
Begin DoDot:1
+9 ; slp for 24hr cvg
IF $LENGTH(Y)'<96
IF TYP'["Ff"
IF $EXTRACT(ENT,27)
Begin DoDot:2
+10 SET SLMAX=32
SET (SLW,SLY,SLST,SLSTR,SLST1,SLY1,SL1,SL2,SL3)=""
+11 IF END=96
Begin DoDot:3
+12 SET SLST=$PIECE($GET(PEROWK(X)),"^",4)
SET SL2=$EXTRACT(SLST,SST,$LENGTH(SLST))
SET SL1=$EXTRACT(SLST,1,SLMAX-$LENGTH(SL2))
SET SL3=$LENGTH(SL2)
+13 SET SLSTR=SL1_SL2
+14 ; if PPC = W then OC = SB
IF DOUB
SET SLSTR=$TRANSLATE(SLSTR,"Cct","Bbb")
+15 SET SLSTR=$TRANSLATE(SLSTR,$TRANSLATE(SLSTR,"Bb"),Z0)
+16 SET SLY=$LENGTH($TRANSLATE(SLSTR,"b0"))
SET SLW=$LENGTH($TRANSLATE(SLSTR,"B0"))
+17 IF SLW>12
QUIT
+18 IF DY=0
SET FLAG=SL3
+19 SET Y=$LENGTH(SLSTR)-SLW
+20 IF FLAG>0&(DY=1)
SET Y=Y-FLAG
SET FLAG=0
+21 SET D=DY
SET P=25
DO SET
QUIT
End DoDot:3
+22 IF '$TEST
Begin DoDot:3
+23 SET SLST=$GET(^TMP($JOB,"PRS8",DY,"W"))_$GET(^TMP($JOB,"PRS8",DY+1,"W"))
+24 SET SLSTR=$EXTRACT(SLST,1,SST+(SLMAX-1))
+25 ; if PPC = W then OC = SB
IF DOUB
SET SLSTR=$TRANSLATE(SLSTR,"Cct","Bbb")
+26 SET SLSTR=$TRANSLATE(SLSTR,$TRANSLATE(SLSTR,"Bb"),Z0)
+27 SET SLY=$EXTRACT(SLSTR,SST,96)
SET SLY1=$EXTRACT(SLSTR,97,$LENGTH(SLSTR))
+28 SET SLSTR=SLY_SLY1
SET SLW=$LENGTH($TRANSLATE(SLSTR,"B0"))
+29 IF SLW>12
QUIT
+30 SET D=DY
SET Y=$LENGTH($TRANSLATE(SLY,"b0"))
SET P=25
DO SET
+31 if DY=0
QUIT
SET D=DY+1
SET Y=$LENGTH($TRANSLATE(SLY1,"b0"))
DO SET
+32 QUIT
End DoDot:3
+33 KILL BEG,DAT,END,NL,SLW,SLY,SLST,SLSTR,SLST1,SLY1,SL1,SL2,SL3
QUIT
End DoDot:2
+34 QUIT
End DoDot:1
+35 SET D=""
SET (H,ROSS)=1
KILL OT,UN,DA,CT
+36 ; calculate CB OT and FF OT/sleep time
FOR H=H:ROSS:PEROT
Begin DoDot:1
+37 SET Y=PEROT(H)
SET Z=$PIECE(Y,"^",3)
+38 ;K OT,UN,DA D ; FF sleep time
IF "Ff"[TYP
Begin DoDot:2
+39 ; following FF OT per Mary Baker 4/1/93
FOR M=1:1:$LENGTH(Z)
Begin DoDot:3
+40 IF D'=+Y+(($PIECE(Y,"^",2)+M-2)\96)
Begin DoDot:4
+41 SET D=+Y+(($PIECE(Y,"^",2)+M-2)\96)
SET HT=0
+42 QUIT
End DoDot:4
+43 SET HT=HT+1
+44 IF $EXTRACT(Z,H)="E"
SET CT(D)=$GET(CT(D))+1
QUIT
+45 ; FF OT
IF M'>32
if HT'>32
SET OT(D)=$GET(OT(D))+1
if HT>32
SET DA(D)=$GET(DA(D))+1
+46 ; FF hrs>8
IF M>32
IF $LENGTH(Z)'<96&(M'>64)!($LENGTH(Z)<96)
SET DA(D)=$GET(DA(D))+1
+47 ; FF 2/3 rule
IF $LENGTH(Z)'<96
IF M>64
Begin DoDot:4
+48 ; first 8 sleep time
IF M'>96
SET UN(D)=$GET(UN(D))+1
+49 ; rest hrs >8
IF '$TEST
SET DA(D)=$GET(DA(D))+1
+50 QUIT
End DoDot:4
+51 QUIT
End DoDot:3
+52 QUIT
End DoDot:2
+53 ; call back OT at least 2 hrs
IF $LENGTH(Z)<8
Begin DoDot:2
+54 SET YY=Y
SET ZZ=Z
NEW X,Y,START,STOP,T,TT,Z,DD,TL
SET Y=YY
SET Z=ZZ
+55 SET CB=$GET(^TMP($JOB,"PRS8",+Y,"CB"))
+56 ;no call back OT today or send bulletin
+57 if (CB="")!($$OTNXTPP(+Y,CB,$PIECE(C0,"^",1),PY,$PIECE(C0,"^",8)))
QUIT
+58 SET Q=0
FOR ZZ=1:2
if '$PIECE(CB,"^",ZZ)
QUIT
IF $PIECE(Y,"^",2)=$PIECE(CB,"^",ZZ)
SET Q=1
+59 ; this OT episode not call back
if 'Q
QUIT
+60 SET OT=Y
SET START=$PIECE(OT,"^",2)
SET STOP=$PIECE(OT,"^",2)+$LENGTH(Z)-1
SET T=START
SET TT=$SELECT(T>96:T-96,1:T)
+61 SET W=$GET(^TMP($JOB,"PRS8",+OT,"W"))
SET WEEK=$SELECT(+OT>7:2,1:1)
+62 SET W1=$GET(^TMP($JOB,"PRS8",OT-1,"W"))
+63 SET W2=$GET(^TMP($JOB,"PRS8",OT+1,"W"))
+64 SET (Z,X)=0
FOR Z=1:1:8-(STOP-START+1)
Begin DoDot:3
+65 SET DD=Z
+66 IF TT-DD>0
SET X=$EXTRACT(W,TT-DD)
+67 IF '$TEST
SET X=$EXTRACT(W1,96+T-DD)
+68 ; HX becomes time off
IF "123m"[X
IF $EXTRACT($GET(^TMP($JOB,"PRS8",$SELECT(TT-DD>0:+OT,1:OT-1),"HOL")),$SELECT(TT-DD>0:TT-DD,1:96+T-DD))=1
SET X=0
+69 QUIT
End DoDot:3
if X=0
QUIT
+70 SET ZZ=Z
if X=0&Z
SET ZZ=ZZ-1
SET X=0
SET T=STOP
SET TT=$SELECT(T>96:T-96,1:T)
+71 FOR Z=1:1:8-(STOP-START+1+ZZ)
Begin DoDot:3
+72 SET DD=STOP-START+1+ZZ+Z
+73 IF T+Z'>96
SET X=$EXTRACT(W,T+Z)
+74 IF '$TEST
SET X=$EXTRACT(W2,T-96+Z)
+75 ; HX becomes time off
IF "123m"[X
IF $EXTRACT($GET(^TMP($JOB,"PRS8",$SELECT(T+Z'>96:+OT,1:OT+1),"HOL")),$SELECT(T+Z'>96:T+Z,1:T-96+Z))=1
SET X=0
+76 QUIT
End DoDot:3
if X=0
QUIT
+77 SET Z=ZZ+Z-(X=0&Z)
+78 IF STOP-START+1+Z<8
Begin DoDot:3
+79 IF TYP["W"
IF $EXTRACT($PIECE(PEROT(H),"^",3))'="E"&($GET(^TMP($JOB,"PRS8",$PIECE(PEROT(H),"^",1),"OFF"))=0)
SET TOUR=$GET(^TMP($JOB,"PRS8",$PIECE(PEROT(H),"^",1),"TOUR"))
+80 SET D=+OT
SET P=$SELECT($EXTRACT($PIECE(PEROT(H),"^",3))'="E":TOUR+19,1:7)
SET Y=8-(STOP-START+1+Z)
+81 ;
+82 IF TYP["P"
IF TYP'["B"
IF P'=7
IF '+NAWS
Begin DoDot:4
+83 IF $PIECE($GET(^TMP($JOB,"PRS8",$PIECE(PEROT(H),"^",1),"OFF")),"^",1)=1&(TH(WEEK)'>160)
SET Y=0
QUIT
+84 IF $PIECE(C0,"^",12)="E"
SET P=$SELECT($LENGTH($TRANSLATE(W,"0O"))>31&(TH(WEEK)'>160):TOUR+25,1:P)
if Y
DO SET
SET Y=$SELECT(TH(WEEK)'>160:Y,1:0)
SET P=9
if Y
DO SET
SET Y=0
End DoDot:4
+85 IF $PIECE(C0,"^",12)="N"
IF P'=7
SET P=$SELECT($LENGTH($TRANSLATE(W,"0O"))>31:TOUR+15,1:P)
if Y
DO SET
SET Y=0
+86 if Y&('+NAWS)
DO SET
+87 ;
+88 ; Checks for just the AWS nurses
IF +NAWS
Begin DoDot:4
+89 NEW CNT,HT,I
+90 SET CNT=Y
SET Y=1
SET HT=$GET(^TMP($JOB,"PRS8",D,"HT"))
+91 FOR I=1:1:CNT
Begin DoDot:5
+92 ; DA/DE or CE/CT
IF HT'<32
SET P=$SELECT(P'=7:TOUR+15,1:P)
DO SET1
QUIT
+93 ; OA/OE or CE/CT
IF TH($SELECT(+OT>7:2,1:1))'<160
SET P=$SELECT(P'=7:TOUR+19,1:P)
DO SET1
QUIT
+94 ; UN/US
IF HT<32
IF TH($SELECT(+OT>7:2,1:1))<160
SET P=9
DO SET1
QUIT
End DoDot:5
End DoDot:4
QUIT
End DoDot:3
+95 QUIT
End DoDot:2
+96 QUIT
End DoDot:1
+97 ; store FF OT into WK array
FOR X="OT","DA","UN","CT"
Begin DoDot:1
+98 NEW Y
SET P=$SELECT(X="OT":TOUR+19,X="DA"&$EXTRACT(ENT,TOUR+18):TOUR+15,X="DA":TOUR+19,X="CT":TOUR+6,1:9)
+99 FOR D=0:0
SET D=$ORDER(@(X_"("_D_")"))
if D'>0
QUIT
SET Y=@(X_"("_D_")")
DO SET
+100 QUIT
End DoDot:1
+101 ;
+102 ; check/adjust night differential granted for leave
+103 DO LVND
+104 QUIT
SET ; Set sleep time into WK array
+1 if D<1!(D>14)
QUIT
+2 SET WEEK=$SELECT(D>7:2,1:1)
+3 SET $PIECE(WK(WEEK),"^",P)=$PIECE(WK(WEEK),"^",P)+Y
+4 QUIT
+5 ;
SET1 ; Set sleep time into WK array
+1 if D<1!(D>14)
QUIT
+2 SET WEEK=$SELECT(D>7:2,1:1)
+3 SET $PIECE(WK(WEEK),"^",P)=$PIECE(WK(WEEK),"^",P)+Y
+4 if (HT>32)&(TH(WEEK)<160)&(NH<320)&($EXTRACT(ENT,19)=1)
QUIT
+5 ; 9month AWS
if (HT>32)&(TH(WEEK)<160)&(NH=320)&($EXTRACT(ENT,19)=1)&($EXTRACT(AC,2)=2)
QUIT
+6 SET HT=HT+1
SET TH(WEEK)=TH(WEEK)+1
+7 SET ^TMP($JOB,"PRS8",D,"HT")=^TMP($JOB,"PRS8",D,"HT")+1
+8 QUIT
+9 ;
OTNXTPP(DAY,CALLBK,EMPNM,PPIEN,TLU) ;
+1 ;OT or CT connects to a tour of duty in the next pay period.
+2 ;JAH-patch PRS*4*22
+3 ;If OT or CT are worked in last 2 hours of pay period & 1st day
+4 ;of next pay period is missing a tour beginning at midnight, send
+5 ;a bulletin warning that call back will be paid unless corrective
+6 ;action is taken.
+7 ;(i.e a nurse comes in before midnight on last saturday of
+8 ;pay period & works for a period less than 2 hrs. before her tour
+9 ;that begins at midnight on Sunday, first day of the next pp)
+10 ;
+11 ; CALLBK = start and stop position in 96 char BCD string.
+12 ; RECORD = pointer from employee's tour info to a record
+13 ; in tour of duty file.
+14 ; DAY = day of the pay period
+15 ; D1NXTPP = BOOLEAN; set to true if tour on day 1 of next pay period
+16 ; begins at midnight, otherwise false
+17 ; NEXTP = next pay period in 97-05 format.
+18 ; CURP = current pay period in 99-02 format.
+19 ; TLU = 3 digit time & leave unit of employee.
+20 NEW D1NXTPP,RECORD,CURP,NEXTP,XMDUZ,XMB,XMY,XMDUZ
+21 SET (RTN,D1NXTPP)=0
+22 SET RECORD=$PIECE($GET(^TMP($JOB,"PRS8",15,0)),"^",2)
+23 IF RECORD'=""
SET D1NXTPP=($PIECE($GET(^PRST(457.1,RECORD,1)),"^")="MID")
+24 IF (DAY=14)&($PIECE(CALLBK,"^",2)=96)
Begin DoDot:1
+25 IF (D1NXTPP)
SET RTN=1
+26 IF '$TEST
Begin DoDot:2
+27 SET CURP=$PIECE($GET(^PRST(458,PPIEN,0)),"^",1)
+28 SET NXTP=$EXTRACT($$NXTPP^PRSAPPU(CURP),3,7)
+29 ; Send bulletin to G.PAD
+30 SET XMY("G.PAD@"_^XMB("NETNAME"))=""
+31 SET XMDUZ="DHCP PAID package"
+32 SET XMB="PRS LAST SAT OT/CT"
+33 ;
+34 ; employee name, pay period number, next pay period
+35 SET XMB(1)=EMPNM
SET XMB(2)=CURP
SET XMB(3)=NXTP
SET XMB(4)=TLU
+36 DO ^XMB
End DoDot:2
End DoDot:1
+37 QUIT RTN
+38 ;
LVND ; Leave Night Differential
+1 ; back out ND granted for leave if employee took 8 or more hrs of leave
+2 ; a non-wage grade employee can receive night differential when
+3 ; on leave as long as the employee has taken less than 8 hours of
+4 ; leave during the pay period.
+5 ; input (note: units are count of 15min time segments):
+6 ; LU - leave taken during pay period (set in PRS8AC, PRS8MT)
+7 ; WK(#) - piece 10 contains total shift-2 ND for week #
+8 ; WKL(#) - ND granted for leave during week # (set in PRS8PP)
+9 ; output:
+10 ; WK(#) - piece 10 may be modified
+11 ; WKL(#) - may be modified
+12 NEW W
+13 ; Doesn't apply to Wage Grade
if TYP["W"
QUIT
+14 ; Didn't take 8hrs of leave
if LU'>31
QUIT
+15 ; For each week subtract leave ND from total ND
FOR W=1,2
Begin DoDot:1
+16 ; No leave ND to subtract
if 'WKL(W)
QUIT
+17 ; Subtract
IF +NAWS'=36
SET $PIECE(WK(W),"^",10)=$PIECE(WK(W),"^",10)-WKL(W)
+18 ; For 36/40 AWS subtract time from Night Differential-AWS (piece 51)
+19 IF +NAWS=36
SET $PIECE(WK(W),"^",51)=$PIECE(WK(W),"^",51)-WKL(W)
+20 ; Reset leave ND amount
SET WKL(W)=0
End DoDot:1
+21 QUIT