| 1 | PRS8MT ;HISC/MRL-DECOMPOSITION, MEALTIME ;11/22/06
 | 
|---|
| 2 |  ;;4.0;PAID;**2,40,69,102,109**;Sep 21, 1995;Build 5
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ;This routine is used to determine placement of mealtime where
 | 
|---|
| 6 |  ;necessary.
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ;Called by Routines:  PRS8ST
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 | MULT ; --- checking 1 node
 | 
|---|
| 11 |  I $$HOLIDAY^PRS8UT(PY,DFN,MDY),$G(^PRST(458,PY,"E",DFN,"D",MDY,2))["MID^MID^ON" Q  ;don't add meal if mid-mid on-call on a holiday, quit routine
 | 
|---|
| 12 |  S TWO=DAY(MDY,"TWO")
 | 
|---|
| 13 |  S S=1 D SET D:'Q  I TWO S S=2 D SET D:'Q
 | 
|---|
| 14 |  .S D1="",$P(D1,"0",193)="",V(1)=97,V(2)=0
 | 
|---|
| 15 |  .F I=1:3:28 S V=$P(N,"^",I,I+2) Q:$P(V,"^",1)=""  D
 | 
|---|
| 16 |  ..S X=$P(V,"^",3) I "^^6^7^3^8^"'[("^"_X_"^") Q  ;quit if not NH
 | 
|---|
| 17 |  ..F M=$P(V,"^"):1:$P(V,"^",2) D  ; build up tour
 | 
|---|
| 18 |  ...S D1=$E(D1,1,M-1)_$S(X=""!(X=3):1,X=6:2,1:3)_$E(D1,M+1,192)
 | 
|---|
| 19 |  ...I V(1)>M S V(1)=M
 | 
|---|
| 20 |  ...I V(2)<M S V(2)=M
 | 
|---|
| 21 |  ..Q
 | 
|---|
| 22 |  .D:V(2) GETY
 | 
|---|
| 23 |  .F I="N","W" F J=MDY,MDY+1 S X=$G(DAY(J,I)) D
 | 
|---|
| 24 |  ..I X'="" S ^TMP($J,"PRS8",J,I)=X
 | 
|---|
| 25 |  ..Q
 | 
|---|
| 26 |  .Q
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 | END ; --- all done here
 | 
|---|
| 29 |  K A,B,C,D,DIF,DIF1,J,L,M,M1,MID,MT,N,PM,T,SPL,SPLX,USE,V(1),V(2),VT,X,X1,X2,Y
 | 
|---|
| 30 |  Q
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 | GETY ; --- this is where Y (placement of mealtime) is defined
 | 
|---|
| 33 |  S X=$E(D,V(1),V(2)),D1=$E(D1,V(1),V(2))
 | 
|---|
| 34 |  I X["5" D
 | 
|---|
| 35 |  . N DAYP
 | 
|---|
| 36 |  . ; loop thru string X and replace 5s by a leave code if one exists
 | 
|---|
| 37 |  . S DAYP=$E(DAY(MDY,"P"),V(1),V(2)) ; leave may be hidden here
 | 
|---|
| 38 |  . F M=1:1:$L(X) D
 | 
|---|
| 39 |  . . I $E(X,M)=5,$E(DAYP,M)'=0 S $E(X,M)=$E(DAYP,M)
 | 
|---|
| 40 |  S MID=V(2)-V(1)+1-MT\2,MID=MID+V(1) ;middle of tour
 | 
|---|
| 41 |  S PM=+$P($G(^PRST(457.1,+$P(DAY(MDY,0),"^",$S(S=1:2,1:13)),0)),"^",7) ;0=non=prem meal/1=prem. meal
 | 
|---|
| 42 |  S X1=$E(X),Q=1
 | 
|---|
| 43 |  F M=1:1:$L(X) D  Q:'Q
 | 
|---|
| 44 |  .S Y=$E(X,M)
 | 
|---|
| 45 |  .I "1235C"[Y,"1235C"[X1 Q  ; scheduled work time
 | 
|---|
| 46 |  .I Y'="O",Y'=X1 S Q=0 Q  ; not same type of time, and non-OT
 | 
|---|
| 47 |  .I Y="O",($E(DAY($S(V(1)+M-1<97:MDY,1:MDY+1),"HOL"),$S(V(1)+M-1<97:V(1)+M-1,1:V(1)+M-1-96))'=2) S Q=0 Q  ; OT indicatin' non-holiday worked gets no meal
 | 
|---|
| 48 |  .I Y="O",($E(DAY($S(V(1)+M-1<97:MDY,1:MDY+1),"HOL"),$S(V(1)+M-1<97:V(1)+M-1,1:V(1)+M-1-96))=2),"123C"[X1 S Q=0 Q  ; OT indicatin holiday worked and Excused.
 | 
|---|
| 49 |  .Q
 | 
|---|
| 50 |  I X["0" D
 | 
|---|
| 51 |  .S SPL=$TR(X,"1235"),SPLX=$TR(X,SPL,$TR($J("",$L(SPL))," "))
 | 
|---|
| 52 |  .I SPLX="" S Q=1
 | 
|---|
| 53 |  ; --- one activity for entire tour
 | 
|---|
| 54 |  K M I Q S Q=0 D  F M=1:1:MT S M(M)=Y+M-1
 | 
|---|
| 55 |  .I V(1)>24,V(2)<73 S Y=MID Q  ;no premium time involved/ meal in middle
 | 
|---|
| 56 |  .S Q=0 D  ;check for all premium
 | 
|---|
| 57 |  ..I V(1)<25,V(2)<25 S Q=1 Q  ;all hours before 6am
 | 
|---|
| 58 |  ..I V(1)>72,V(2)>72,V(2)'>120 S Q=1 Q  ;all hours after 6pm
 | 
|---|
| 59 |  .I Q S Y=MID Q  ; all time premium time/ meal in middle
 | 
|---|
| 60 |  .I PM S Y=0 D
 | 
|---|
| 61 |  ..I V(2)>72 S Y=73-$S(V(2)-73>MT&(V(1)'>73):0,V(1)<25!(V(2)'<121):73,1:MT-(V(2)-73))
 | 
|---|
| 62 |  ..I 'Y,V(1)<25 S Y=$S(25-V(1)>MT:25-MT,1:V(1))
 | 
|---|
| 63 |  ..I 'Y S Y=$S(121-V(1)>MT:121-MT,1:V(1))
 | 
|---|
| 64 |  .E  S Y=0 D
 | 
|---|
| 65 |  ..I V(2)>72 S Y=$S(73-MT>V(1):73-MT,V(1)<25!(V(2)'<121):0,1:V(1))
 | 
|---|
| 66 |  ..I 'Y,V(1)<25 S Y=$S(V(2)-MT>24:25,1:V(2)-MT+1)
 | 
|---|
| 67 |  ..I 'Y S Y=$S(V(2)-MT>120:121,1:V(2)-MT+1)
 | 
|---|
| 68 |  .I 'Y S Y=MID
 | 
|---|
| 69 |  .Q
 | 
|---|
| 70 |  ; --- multiple activities per tour
 | 
|---|
| 71 |  E  D
 | 
|---|
| 72 |  .  S Z=$TR(X,"1235"),X=$TR(X,Z,$TR($J("",$L(Z))," ","0"))
 | 
|---|
| 73 |  .  S ZRIK=$TR(Z,"HC") I MT>0,$L(ZRIK)'<(($P(DAY(DAY,0),"^",8)*4)+MT) S X="",$P(X,"1",$L(ZRIK)+1)="" ;if leave posted > or = to tour length + mt (ie didn't post around lunch) it was resulting in OT (ZRIK strips HOL & OC)
 | 
|---|
| 74 |  .  Q:X?1"0"."0"
 | 
|---|
| 75 |  .  S M=0 F A=1,2 Q:M=MT  F B=MID,MID+1,MID-1:-1:V(1),MID+2:1:V(2) D  Q:M=MT
 | 
|---|
| 76 |  .  .  Q:'$E(X,B-V(1)+1)
 | 
|---|
| 77 |  .  .  I A=1,PM,B<25!(B>72&(B<121)) S M=M+1,M(M)=B
 | 
|---|
| 78 |  .  .  I A=1,'PM,B>24&(B<73)!(B>120) S M=M+1,M(M)=B
 | 
|---|
| 79 |  .  .  I A=2 S M=M+1,M(M)=B
 | 
|---|
| 80 |  .  .  Q
 | 
|---|
| 81 |  .  Q
 | 
|---|
| 82 |  Q:'$O(M(0))
 | 
|---|
| 83 | Y ; --- this is where meals get placed in string
 | 
|---|
| 84 |  F Y=0:0 S Y=$O(M(Y)) Q:Y'>0  D
 | 
|---|
| 85 |  . N ORIGAC ; original activity code
 | 
|---|
| 86 |  .  S M=M(Y),(X,ORIGAC)=$E(D,M),X=$S(X="J":"A",X=5:$E(DAY(MDY,"P"),M),1:X),D=$E(D,0,M-1)_"m"_$E(D,M+1,999)
 | 
|---|
| 87 |  .  S X=$S(X'="M":$F("LSWnAR*U************************V********YXFGD",X)-1,1:5)
 | 
|---|
| 88 |  .  I "Ff"[TYP,NH'=480!(NH(1)'=NH(2)) S X=32
 | 
|---|
| 89 |  .  ;I X'=4,CYA2806>0 S CYA2806=CYA2806-1 ; << ADDED-> DROP LUNCH FROM CY ALSO>>
 | 
|---|
| 90 |  .  Q:X'>0
 | 
|---|
| 91 |  .  Q:MDY=0&(M(Y)<96)!(MDY=14&(M(Y)>97))
 | 
|---|
| 92 |  .  S W=$S(MDY<8:1,1:2) I MDY=7&(M(Y)>96) S W=2
 | 
|---|
| 93 |  .  I $P(WK(W),"^",+X)>0 S $P(WK(W),"^",+X)=$P(WK(W),"^",+X)-1 ;subtract
 | 
|---|
| 94 |  .  ; If Military Leave subtract the mealtime out of the WK(3) array.
 | 
|---|
| 95 |  .  I ORIGAC="M",$P(WK(3),U,11)>0 S $P(WK(3),U,11)=$P(WK(3),U,11)-1
 | 
|---|
| 96 |  .  ;I WPCYA>0 S WPCYA=WPCYA-1 ;lunch from total << AND FROM CA TOTAL >>
 | 
|---|
| 97 |  . ; PRS*4*40 added 8 (U), 44 (F), 45 (G), 46 (D) to following line
 | 
|---|
| 98 |  . ; because PRS8AC also increments LU for those types of time
 | 
|---|
| 99 |  .  I +X,"^1^2^6^8^44^45^46^"[("^"_+X_"^") S LU=LU-1 ;reduce leave used
 | 
|---|
| 100 |  .  I +X,"^3^"[("^"_+X_"^"),"P"[TYP S TH=TH+1,TH(W)=TH(W)+1
 | 
|---|
| 101 |  .   Q
 | 
|---|
| 102 |  S DAY(MDY,"W")=$E(D,1,96)
 | 
|---|
| 103 |  S X=$E(D,97,999) I $L(X) D
 | 
|---|
| 104 |  .I $D(DAY(MDY+1,"W")) S DAY(MDY+1,"W")=X_$E(DAY(MDY+1,"W"),$L(X)+1,999)
 | 
|---|
| 105 |  .S DAY(MDY,"N")=X
 | 
|---|
| 106 |  Q
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 | SET ; --- set up for processing
 | 
|---|
| 109 |  K A,B S (A,B,Q,Y)=0
 | 
|---|
| 110 |  S MT=$G(DAY(MDY,"MT"_S)) I MT'>0 S Q=1 Q  ; mealtime for tour?
 | 
|---|
| 111 |  S D=DAY(MDY,"W")_$G(DAY(MDY,"N")) ; get daily activity
 | 
|---|
| 112 |  S N=DAY(MDY,S*S) ; get tour
 | 
|---|
| 113 |  Q
 | 
|---|