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

    r613 r623  
    1 PRS8MT  ;HISC/MRL-DECOMPOSITION, MEALTIME ;02/21/08
    2         ;;4.0;PAID;**2,40,69,102,109,112,116**;Sep 21, 1995;Build 23
    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         N ORIGX,RECESS
    35         S ORIGX=X ; Original copy of codes in X and
    36         S RECESS=DAY(MDY,"r")_$G(DAY(MDY,"rN"))
    37         S RECESS=$E(RECESS,V(1),V(2)) ; load any Recess
    38         I X["5" D
    39         . N DAYP
    40         . ; loop thru string X and replace 5s by a leave code if one exists
    41         . S DAYP=$E(DAY(MDY,"P"),V(1),V(2)) ; leave may be hidden here
    42         . F M=1:1:$L(X) D
    43         . . I $E(X,M)=5,$E(DAYP,M)'=0 S $E(X,M)=$E(DAYP,M)
    44         S MID=V(2)-V(1)+1-MT\2,MID=MID+V(1) ;middle of tour
    45         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
    46         S X1=$E(X),Q=1
    47         F M=1:1:$L(X) D  Q:'Q
    48         .S Y=$E(X,M)
    49         .I "1235C"[Y,"1235C"[X1 Q  ; scheduled work time
    50         .I "4OC"[Y,$E(RECESS,M)="r" S Q=0 Q  ; Work performed while on Recess (9mo AWS)
    51         .I Y'="O",Y'=X1 S Q=0 Q  ; not same type of time, and non-OT
    52         .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 indicating non-holiday worked gets no meal
    53         .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 indicating holiday worked and Excused.
    54         .Q
    55         I X["0" D
    56         .I RECESS'["r" S SPL=$TR(X,"1235"),SPLX=$TR(X,SPL,$TR($J("",$L(SPL))," "))
    57         .I RECESS["r" S SPL=$TR(X,"01235"),SPLX=$TR(X,SPL,$TR($J("",$L(SPL))," "))
    58         .I SPLX="" S Q=1
    59         ;
    60         K M
    61         ;--- one activity for entire tour
    62         I Q S Q=0 D  F M=1:1:MT S M(M)=Y+M-1
    63         .I V(1)>24,V(2)<73 S Y=MID Q  ;no premium time involved/ meal in middle
    64         .S Q=0 D  ;check for all premium
    65         ..I V(1)<25,V(2)<25 S Q=1 Q  ;all hours before 6am
    66         ..I V(1)>72,V(2)>72,V(2)'>120 S Q=1 Q  ;all hours after 6pm
    67         .I Q S Y=MID Q  ; all time premium time/ meal in middle
    68         .I PM S Y=0 D
    69         ..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))
    70         ..I 'Y,V(1)<25 S Y=$S(25-V(1)>MT:25-MT,1:V(1))
    71         ..I 'Y S Y=$S(121-V(1)>MT:121-MT,1:V(1))
    72         .E  S Y=0 D
    73         ..I V(2)>72 S Y=$S(73-MT>V(1):73-MT,V(1)<25!(V(2)'<121):0,1:V(1))
    74         ..I 'Y,V(1)<25 S Y=$S(V(2)-MT>24:25,1:V(2)-MT+1)
    75         ..I 'Y S Y=$S(V(2)-MT>120:121,1:V(2)-MT+1)
    76         .I 'Y S Y=MID
    77         .Q
    78         ; --- multiple activities per tour
    79         E  D
    80         .S Z=$TR(X,"1235"),X=$TR(X,Z,$TR($J("",$L(Z))," ","0"))
    81         .;
    82         .; if leave posted > or = to tour length + mt (ie didn't post around
    83         .; lunch) it was resulting in OT (ZRIK strips HOL, OC, & no tour time)
    84         .;
    85         .S ZRIK=$TR(Z,"HC0")
    86         .I MT>0,$L(ZRIK)'<(($P(DAY(DAY,0),"^",8)*4)+MT) S X="",$P(X,"1",$L(ZRIK)+1)=""
    87         .Q:X?1"0"."0"&(RECESS'["r")
    88         .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
    89         ..Q:'$E(X,B-V(1)+1)
    90         ..I A=1,PM,B<25!(B>72&(B<121)) S M=M+1,M(M)=B
    91         ..I A=1,'PM,B>24&(B<73)!(B>120) S M=M+1,M(M)=B
    92         ..I A=2 S M=M+1,M(M)=B
    93         ..Q
    94         .Q
    95         Q:'$O(M(0))
    96 Y       ; --- this is where meals get placed in string
    97         F Y=0:0 S Y=$O(M(Y)) Q:Y'>0  D
    98         . N ORIGAC ; original activity code
    99         . S M=M(Y),(X,ORIGAC)=$E(D,M),X=$S(X="J":"A",X=5:$E(DAY(MDY,"P"),M),1:X)
    100         . ; If a 9mo AWS works during Recess don't place meal over that type of time
    101         . I +NAWS=9 D  ; 9mo AWS nurses
    102         . . ; If extra work (UN,OT,CT) was posted over the entire tour including the meal time
    103         . . ; don't include meal time in the W node or you will reduce the extra work count.
    104         . . ; Set X=0 to reduce the Recess count below.
    105         . . I "4OEC"[ORIGAC&($L(ORIGX)=$L($TR(ORIGX,"1235"))) S X=0 Q
    106         . . ;
    107         . . ; If extra work posted over tour time that wasn't covered by Recess it will
    108         . . ; be stored in the r node.  If this time exists, add that time back into the
    109         . . ; W node instead of the meal time.
    110         . . I "1235"[ORIGAC,"4OEC"[$E(RECESS,M-V(1)+1) D  Q
    111         . . . S D=$E(D,0,M-1)_$E(RECESS,M-V(1)+1)_$E(D,M+1,999)
    112         . . . S ORIGX=$E(ORIGX,1,M-V(1)-1)_$E(RECESS,M-V(1)+1)_$E(ORIGX,M-V(1)+2,999)
    113         . . ;
    114         . . ; For everything else, update D and ORIGX
    115         . . S D=$E(D,0,M-1)_"m"_$E(D,M+1,999)
    116         . . S ORIGX=$E(ORIGX,M-V(1)-1)_"m"_$E(ORIGX,M-V(1)+2,999)
    117         . ;
    118         . ; All employees other than 9mo AWS
    119         . I +NAWS'=9 S D=$E(D,0,M-1)_"m"_$E(D,M+1,999)
    120         . ;
    121         . ; The following line has been updated to include a check for Recess as the 48th piece.
    122         . ; Recess will be designated as a zero (0).
    123         . S X=$S(X'="M":$F("LSWnAR*U************************V********YXFGD*0",X)-1,1:5)
    124         . ;
    125         . ; Firefighter checks
    126         . I "Ff"[TYP,NH'=480!(NH(1)'=NH(2)) S X=32
    127         . ;I X'=4,CYA2806>0 S CYA2806=CYA2806-1 ; << ADDED-> DROP LUNCH FROM CY ALSO>>
    128         . Q:X'>0
    129         . Q:MDY=0&(M(Y)<96)!(MDY=14&(M(Y)>97))
    130         . S W=$S(MDY<8:1,1:2) I MDY=7&(M(Y)>96) S W=2
    131         . I $P(WK(W),"^",+X)>0 S $P(WK(W),"^",+X)=$P(WK(W),"^",+X)-1 ;subtract
    132         . ;
    133         . ; If Military Leave subtract the mealtime out of the WK(3) array.
    134         . I ORIGAC="M",$P(WK(3),U,11)>0 S $P(WK(3),U,11)=$P(WK(3),U,11)-1
    135         . ;I WPCYA>0 S WPCYA=WPCYA-1 ;lunch from total << AND FROM CA TOTAL >>
    136         . ; PRS*4*40 added 8 (U), 44 (F), 45 (G), 46 (D) to following line
    137         . ; because PRS8AC also increments LU for those types of time
    138         . I +X,"^1^2^6^8^44^45^46^"[("^"_+X_"^") S LU=LU-1 ;reduce leave used
    139         . I +X,"^3^"[("^"_+X_"^"),"P"[TYP S TH=TH+1,TH(W)=TH(W)+1
    140         . Q
    141         S DAY(MDY,"W")=$E(D,1,96)
    142         S X=$E(D,97,999) I $L(X) D
    143         .I $D(DAY(MDY+1,"W")) S DAY(MDY+1,"W")=X_$E(DAY(MDY+1,"W"),$L(X)+1,999)
    144         .S DAY(MDY,"N")=X
    145         Q
    146         ;
    147 SET     ; --- set up for processing
    148         K A,B S (A,B,Q,Y)=0
    149         S MT=$G(DAY(MDY,"MT"_S)) I MT'>0 S Q=1 Q  ; mealtime for tour?
    150         S D=DAY(MDY,"W")_$G(DAY(MDY,"N")) ; get daily activity
    151         S N=DAY(MDY,S*S) ; get tour
    152         Q
     1PRS8MT ;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 ;
     10MULT ; --- 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 ;
     28END ; --- 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 ;
     32GETY ; --- 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))
     83Y ; --- 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 ;
     108SET ; --- 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
Note: See TracChangeset for help on using the changeset viewer.