| 1 | PRS8MISC ;HISC/DAD,RM,RS-MISCELLANEOUS ADJUSTMENTS TO TIME CARD ;9/12/2006 | 
|---|
| 2 | ;;4.0;PAID;**56,68,80,111**;Sep 21, 1995;Build 2 | 
|---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | N ABUT,D,DY,M,NOTIME,PEROWK,WEEK | 
|---|
| 5 | S (PEROWK,NOTIME,PEROT,NOOT)=0 F DY=0:1:15 D | 
|---|
| 6 | .S WEEK=$S(DY>7:2,1:1) | 
|---|
| 7 | .S X=$G(^TMP($J,"PRS8",DY,2)),Y=$G(^("W")) | 
|---|
| 8 | .F M=1:1:96 S X=$E(Y,M) Q:'$L(X)  D  ; check for CB/FF OT and sleep time | 
|---|
| 9 | ..I "4EO"'[X!(X="O"&($E($G(^TMP($J,"PRS8",DY,"HOL")),M)=2)) S NOOT=0 ; set up periods of OT for PPD | 
|---|
| 10 | ..E  D | 
|---|
| 11 | ...S:'NOOT PEROT=PEROT+1,PEROT(PEROT)=DY_"^"_M_"^",NOOT=1 | 
|---|
| 12 | ...S PEROT(PEROT)=PEROT(PEROT)_X | 
|---|
| 13 | ...Q | 
|---|
| 14 | ..I (TYP'["Ff"),SST,$E(ENT,27) D  ; set up per. of work for sleep time | 
|---|
| 15 | ...I "123OmosEeBbCct"'[X S NOTIME=0 | 
|---|
| 16 | ...E  D | 
|---|
| 17 | ....S:'NOTIME PEROWK=PEROWK+1,PEROWK(PEROWK)=DY_U_M_U_M_U,NOTIME=1 | 
|---|
| 18 | ....S $P(PEROWK(PEROWK),U,3)=M+(96*(DY-PEROWK(PEROWK))) | 
|---|
| 19 | ....S PEROWK(PEROWK)=PEROWK(PEROWK)_X | 
|---|
| 20 | ....S:$L($P(PEROWK(PEROWK),"^",4))=96 NOTIME=0 | 
|---|
| 21 | ....Q | 
|---|
| 22 | ...Q | 
|---|
| 23 | ..Q | 
|---|
| 24 | .;holiday worked < 2 hrs | 
|---|
| 25 | .I DY<15,$E(ENT,TOUR+21) S HW=$G(^TMP($J,"PRS8",DY,"HW")) I HW]"" D | 
|---|
| 26 | ..S W=$G(^TMP($J,"PRS8",DY,"W")) | 
|---|
| 27 | ..S W1=$G(^TMP($J,"PRS8",DY-1,"W")) | 
|---|
| 28 | ..S W2=$G(^TMP($J,"PRS8",DY+1,"W")) | 
|---|
| 29 | ..F X=1:2 S Y=$P(HW,"^",X,X+1) Q:Y'>0  D | 
|---|
| 30 | ...N X,START,STOP,T,TT,Z,DD | 
|---|
| 31 | ...S START=+Y,STOP=$P(Y,"^",2),T=START,TT=$S(T>96:T-96,1:T) | 
|---|
| 32 | ...; Look back to determine if the segment of time currently being | 
|---|
| 33 | ...; checked abuts another segment of a Tour of Duty.  Ignore meals. | 
|---|
| 34 | ...S (ABUT,Z,X)=0 | 
|---|
| 35 | ...I STOP-START+1<8 D | 
|---|
| 36 | ....F Z=1:1 D  Q:X=0 | 
|---|
| 37 | .....S DD=Z I T>96 S X=0 Q | 
|---|
| 38 | .....I TT-DD>0 S X=$E(W,TT-DD) | 
|---|
| 39 | .....E  S X=$E(W1,96+T-DD) | 
|---|
| 40 | .....I "Cc123"[X,"01"[$E($G(^TMP($J,"PRS8",$S(TT-DD>0:DY,1:DY-1),"HOL")),$S(TT-DD>0:TT-DD,1:96+T-DD)) S X=0 ; Abuts HX | 
|---|
| 41 | .....I X="O",$E($G(^TMP($J,"PRS8",$S(TT-DD>0:DY,1:DY-1),"HOL")),$S(TT-DD>0:TT-DD,1:96+T-DD))=2 S X=0,ABUT=1 ; Abuts another segment of work | 
|---|
| 42 | ....; | 
|---|
| 43 | ....; Look forward to determine if the segment of time currently being | 
|---|
| 44 | ....; checked abuts another segment of a Tour of Duty.  Ignore meals. | 
|---|
| 45 | ....S ZZ=Z S:X=0&Z ZZ=ZZ-1 S X=0,T=STOP,TT=$S(T>96:T-96,1:T) | 
|---|
| 46 | ....F Z=1:1 D  Q:X=0 | 
|---|
| 47 | .....S DD=STOP-START+1+ZZ+Z | 
|---|
| 48 | .....I T+Z'>96 S X=$E(W,T+Z) | 
|---|
| 49 | .....E  S X=$E(W2,T-96+Z) | 
|---|
| 50 | .....I "Cc123"[X,"01"[$E($G(^TMP($J,"PRS8",$S(T+Z'>96:DY,1:DY+1),"HOL")),$S(T+Z'>96:T+Z,1:T-96+Z)) S X=0 ; Abuts HX | 
|---|
| 51 | .....I X="O",$E($G(^TMP($J,"PRS8",$S(T+Z'>96:DY,1:DY-1),"HOL")),$S(T+Z'>96:T+Z,1:T-96+Z))=2 S X=0,ABUT=1 Q  ; Abuts another segment of work | 
|---|
| 52 | ...; | 
|---|
| 53 | ...; Loops to determine how much time we might need to add. | 
|---|
| 54 | ...S START=+Y,STOP=$P(Y,"^",2),T=START,TT=$S(T>96:T-96,1:T) | 
|---|
| 55 | ...S (Z,X)=0 F Z=1:1:8-(STOP-START+1) D  Q:X=0 | 
|---|
| 56 | ....S DD=Z I T>96 S X=0 Q | 
|---|
| 57 | ....I TT-DD>0 S X=$E(W,TT-DD) | 
|---|
| 58 | ....E  S X=$E(W1,96+T-DD) | 
|---|
| 59 | ....I "Cc123m"[X,"01"[$E($G(^TMP($J,"PRS8",$S(TT-DD>0:DY,1:DY-1),"HOL")),$S(TT-DD>0:TT-DD,1:96+T-DD)) S X=0 ; HX becomes time off | 
|---|
| 60 | ....I X="O",$E($G(^TMP($J,"PRS8",$S(TT-DD>0:DY,1:DY-1),"HOL")),$S(TT-DD>0:TT-DD,1:96+T-DD))'=2 Q  ;S X=0,Z=8 ; non-holiday OT stops the check for <2hr HW | 
|---|
| 61 | ....I X="" S X=0 | 
|---|
| 62 | ....Q | 
|---|
| 63 | ...S ZZ=Z S:X=0&Z ZZ=ZZ-1 S X=0,T=STOP,TT=$S(T>96:T-96,1:T) | 
|---|
| 64 | ...F Z=1:1:8-(STOP-START+1+ZZ) D  Q:X=0 | 
|---|
| 65 | ....S DD=STOP-START+1+ZZ+Z | 
|---|
| 66 | ....I T+Z'>96 S X=$E(W,T+Z) | 
|---|
| 67 | ....E  S X=$E(W2,T-96+Z),PLUS=1 | 
|---|
| 68 | ....I "Cc123m"[X,"01"[$E($G(^TMP($J,"PRS8",$S(T+Z'>96:DY,1:DY+1),"HOL")),$S(T+Z'>96:T+Z,1:T-96+Z)) S X=0 ; HX becomes time off | 
|---|
| 69 | ....I X="O",$E($G(^TMP($J,"PRS8",$S(T+Z'>96:DY,1:DY-1),"HOL")),$S(T+Z'>96:T+Z,1:T-96+Z))'=2 Q  ;S X=0,Z=8 ; non-holiday OT stops the check for <2hr HW | 
|---|
| 70 | ....Q | 
|---|
| 71 | ...S Z=ZZ+Z-(X=0&Z) | 
|---|
| 72 | ...I STOP-START+1+Z<8,'ABUT D | 
|---|
| 73 | ....S D=DY,P=TOUR+28,Y=8-(STOP-START+1+Z) | 
|---|
| 74 | ....S TL=$G(^TMP($J,"PRS8",D,0)),TL=4*($P(TL,"^",8)+$P(TL,"^",14)) | 
|---|
| 75 | ....I Y+$P(WK($S(D>7:2,1:1)),"^",P)>TL S Y=TL-$P(WK($S(D>7:2,1:1)),"^",P) | 
|---|
| 76 | ....I $D(PLUS),T>96 S D=D+1 | 
|---|
| 77 | ....D:Y SET | 
|---|
| 78 | ....Q | 
|---|
| 79 | ...Q | 
|---|
| 80 | ..Q | 
|---|
| 81 | .Q | 
|---|
| 82 | K PLUS G ^PRS8MSC0 | 
|---|
| 83 | ; | 
|---|
| 84 | SET ; Set sleep time into WK arrary | 
|---|
| 85 | Q:D<1!(D>14) | 
|---|
| 86 | S WEEK=$S(D>7:2,1:1) | 
|---|
| 87 | S $P(WK(WEEK),"^",P)=$P(WK(WEEK),"^",P)+Y | 
|---|
| 88 | Q | 
|---|