| [623] | 1 | PRS8ST ;HISC/MGD-DECOMPOSITION, START-UP ;12/12/05
 | 
|---|
 | 2 |  ;;4.0;PAID;**45,92,102**;Sep 21, 1995
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 |  ;This routine is the one which actually gets everything moving.
 | 
|---|
 | 5 |  ;It moves the information from the ^TMP global into a local array
 | 
|---|
 | 6 |  ;[DAY(DAY)] for the three day period it's working with.  It then
 | 
|---|
 | 7 |  ;processes that information internally and, where necessary, by
 | 
|---|
 | 8 |  ;calling certain external processes.
 | 
|---|
 | 9 |  ;
 | 
|---|
 | 10 |  ;Called by Routines:  PRS8SU
 | 
|---|
 | 11 |  ;
 | 
|---|
 | 12 |  K SBY F DAY=1:1:14 D
 | 
|---|
 | 13 |  .K DAY(DAY-2)
 | 
|---|
 | 14 |  .S LP=$S(DAY=1:"0,1,2",1:(DAY+1)),JURY=0
 | 
|---|
 | 15 |  .F II=1:1 S DY=$P(LP,",",II) Q:DY=""  D
 | 
|---|
 | 16 |  ..F J=0,1,2,4,10,"CP","DH1","DH2","HOL","ML","MT1","MT2","OFF","P","TOUR","TWO","W" D
 | 
|---|
 | 17 |  ...S DAY(DY,J)=$G(^TMP($J,"PRS8",DY,J))
 | 
|---|
 | 18 |  ...;
 | 
|---|
 | 19 |  ...;P 45 INITIALIZE THE "F" NODE HERE BY SIMPLY COPYING THE 
 | 
|---|
 | 20 |  ...;THE "W" NODE FROM TEMP--FOR TESTING PURPOSES.
 | 
|---|
 | 21 |  ...;THE NODE SHOULD BE INITIALIZED BY COPYING THE "F" NODE
 | 
|---|
 | 22 |  ...;FROM THE TEMP GLOBAL.
 | 
|---|
 | 23 |  ...S DAY(DY,"F")=$G(^TMP($J,"PRS8",DY,"W"))
 | 
|---|
 | 24 |  .F II=1:1 S DY=$P(LP,",",II) Q:DY=""  D
 | 
|---|
 | 25 |  ..S WK=$S(DY<8:1,1:2)
 | 
|---|
 | 26 |  ..S TOUR=$S(TYP'["W":1,+DAY(DY,"TOUR"):+DAY(DY,"TOUR"),1:+TOUR(WK))
 | 
|---|
 | 27 |  ..D MOVE^PRS8AC S N=DAY(DY,2),WK=$S(DY<8:1,1:2) ;exception node/week
 | 
|---|
 | 28 |  ..I N["UN" S X1="UN" D 2 ;unavailable
 | 
|---|
 | 29 |  ..I N["HX" S X1="HX" D 2 ;holiday excused
 | 
|---|
 | 30 |  ..I N["ON" S X1="ON" D 2 ;on-call
 | 
|---|
 | 31 |  ..I N["SB" S X1="SB" D 2 ;standby
 | 
|---|
 | 32 |  ..S N=DAY(DY,1),DH=DAY(DY,"DH1"),NN=1 D  I DAY(DY,"TWO") S N=DAY(DY,4),DH=DAY(DY,"DH2"),NN=4 D
 | 
|---|
 | 33 |  ...S QT=0 F PRS8=1:3 S V=$P(N,"^",PRS8,PRS8+2) Q:QT  D
 | 
|---|
 | 34 |  ....N PRS8AFFH S PRS8AFFH=0 ;fire fighter additional hours flag
 | 
|---|
 | 35 |  ....S X=$P(DAY(DY,NN),"^",PRS8,999)
 | 
|---|
 | 36 |  ....I X="" S QT=1 Q  ;nothing left to check
 | 
|---|
 | 37 |  ....I X?1"^"."^" S QT=1 Q  ;only ^ left
 | 
|---|
 | 38 |  ....;
 | 
|---|
 | 39 |  ....; X = 9 is special tour CODE FOR FF ADDTL HRS.
 | 
|---|
 | 40 |  ....; It gets converted to 'f'
 | 
|---|
 | 41 |  ....S X=$P(V,"^",3),VAR=1 I X S VAR=$E("se1BC235f",+X) I '+VAR D ENT Q:Q
 | 
|---|
 | 42 |  ....;if this segment is addt ff hrs then save a variable to signify
 | 
|---|
 | 43 |  ....;that, but convert the time back to a 1 to use in the W node.
 | 
|---|
 | 44 |  ....I "Ff"[TYP,VAR="f" S (PRS8AFFH,VAR)=1
 | 
|---|
 | 45 |  ....;
 | 
|---|
 | 46 |  ....I VAR,TYP'["W" S VAR=$S(VAR=5:5,1:1) ;only wg need shifts
 | 
|---|
 | 47 |  ....S JURY=$G(^TMP($J,"PRS8",DY,2)) I JURY'="" D
 | 
|---|
 | 48 |  .....F J=4,8,12,16,20,24,28 S:$P(JURY,"^",J)=6 JURY=1 Q
 | 
|---|
 | 49 |  ....D ^PRS8AC ;build "W" node
 | 
|---|
 | 50 |  ..S N=DAY(DY,2),WK=$S(DY<8:1,1:2) ;exception node/week
 | 
|---|
 | 51 |  ..S QT=0 F PRS8=1:4:25 S V=$P(N,"^",PRS8,PRS8+3) Q:QT  D
 | 
|---|
 | 52 |  ...I TYP["D",$P(V,"^",3)="" S QT=1 Q  ;doctor
 | 
|---|
 | 53 |  ...I TYP'["D",'+V,$P(V,"^",3)="" S QT=1 Q  ;all others
 | 
|---|
 | 54 |  ...S X=$P(V,"^",3) I "^UN^ON^SB^HX^"'[("^"_X_"^") D ^PRS8EX
 | 
|---|
 | 55 |  ..S ^TMP($J,"PRS8",DY,"W")=DAY(DY,"W") ;save in ^TMP
 | 
|---|
 | 56 |  ..S ^TMP($J,"PRS8",DY,"P")=DAY(DY,"P") ;save non-prem ot in ^TMP
 | 
|---|
 | 57 |  ..S ^TMP($J,"PRS8",DY,"HOL")=DAY(DY,"HOL") ;holiday
 | 
|---|
 | 58 |  .S WK=$S(DAY<8:1,1:2),OFF=+DAY(DAY,"OFF") ;week/day off
 | 
|---|
 | 59 |  .S TOUR=$S(TYP'["W":1,+DAY(DAY,"TOUR"):+DAY(DAY,"TOUR"),1:+TOUR(WK))
 | 
|---|
 | 60 |  .I TYP["I",DAY>0,DAY<15,$G(DAY(DAY,"DWK")) D  ;days worked
 | 
|---|
 | 61 |  ..S DWK=DWK+1 ;count days worked
 | 
|---|
 | 62 |  ..I CYA,DAY'<CYA S CAMISC=CAMISC+1 ;calendar year adjustment (CA)
 | 
|---|
 | 63 |  .S MDY=+DAY D ^PRS8MT I +DAY=1 S MDY=0 D ^PRS8MT
 | 
|---|
 | 64 |  .Q
 | 
|---|
 | 65 |  ;
 | 
|---|
 | 66 |  F DAY=1:1:14 D
 | 
|---|
 | 67 |  .;make DAY array available for prior, current, and next day
 | 
|---|
 | 68 |  .K DAY(DAY-2)
 | 
|---|
 | 69 |  .S LP=$S(DAY=1:"0,1,2",1:(DAY+1))
 | 
|---|
 | 70 |  .F II=1:1 S DY=$P(LP,",",II) Q:DY=""  D
 | 
|---|
 | 71 |  ..F J=0,1,2,4,10,"CP","DH1","DH2","HOL","ML","MT1","MT2","OFF","P","TOUR","TWO","W","F" S DAY(DY,J)=$G(^TMP($J,"PRS8",DY,J))
 | 
|---|
 | 72 |  .;
 | 
|---|
 | 73 |  .S WK=$S(DAY<8:1,1:2),OFF=+DAY(DAY,"OFF") ;week/day off
 | 
|---|
 | 74 |  .S TOUR=$S(TYP'["W":1,+DAY(DAY,"TOUR"):+DAY(DAY,"TOUR"),1:+TOUR(WK))
 | 
|---|
 | 75 |  .;
 | 
|---|
 | 76 |  .I ((TYP["I")!(TYP["P")),DAY>0,DAY<15 D  ;FOR CY
 | 
|---|
 | 77 |  ..I $S('CYA:1,DAY<CYA:1,1:0) Q  ;quit if no calander year adjustment
 | 
|---|
 | 78 |  ..S IIX=0 I $E(ENT,2)'="D" F II=1:1:$L(DAY(DAY,"W")) D
 | 
|---|
 | 79 |  ...I "4E"[$E(DAY(DAY,"W"),II) S IIX=IIX+1
 | 
|---|
 | 80 |  ...S CYA2806=CYA2806+("ALSUMRVW1235OscXYFGD"[$E(DAY(DAY,"W"),II)) S:(IIX<33)&(FLX'="C"&(TH(WK)+IIX<163))!(FLX="C"&(TH+IIX<323)) CYA2806=CYA2806+("4E"[$E(DAY(DAY,"W"),II))
 | 
|---|
 | 81 |  ...;SF2806 adjustment (CY) (163 & 323 because mt subtracted)
 | 
|---|
 | 82 |  .;
 | 
|---|
 | 83 |  .I CYA,DAY'<CYA,DAY(DAY,"W")["W" D  ;count wop in hours for CA
 | 
|---|
 | 84 |  ..F II=1:1:$L(DAY(DAY,"W")) S WPCYA=WPCYA+("W"=$E(DAY(DAY,"W"),II))
 | 
|---|
 | 85 |  .;
 | 
|---|
 | 86 |  .I TYP'["D",DAY(DAY,"W")'?1"0"."0" D ^PRS8PP ;nightdiff/shift premiums
 | 
|---|
 | 87 |  .;
 | 
|---|
 | 88 |  .F T=1:1:96 S VAR1=$E(DAY(DAY,"W"),T) S OK=0 D
 | 
|---|
 | 89 |  ..I "BbCct"[VAR1 D  ; process on-call/standby
 | 
|---|
 | 90 |  ...I T=96!("BbCct"'[$E(DAY(DAY,"W"),T+1)) S OK=T
 | 
|---|
 | 91 |  ...I DOUB D ^PRS8OC,^PRS8SB Q  ;Prem. Pay of "W" or "V"
 | 
|---|
 | 92 |  ...I VAR1'=""&("Cct"[VAR1) D ^PRS8OC Q  ;compte on-call/2hr minimum
 | 
|---|
 | 93 |  ...I "Bb"[VAR1 D ^PRS8SB ;standby
 | 
|---|
 | 94 |  .I $G(SBY) D UP^PRS8SB
 | 
|---|
 | 95 |  .;
 | 
|---|
 | 96 |  .Q
 | 
|---|
 | 97 |  ;
 | 
|---|
 | 98 |  ;P 45 CODE O firefighters use PRS8MISC to calculated overtime
 | 
|---|
 | 99 |  ;but code R and C firefighters use routine PRS8OTFF.
 | 
|---|
 | 100 |  ;
 | 
|---|
 | 101 |  I "Ff"[TYP&("RC"[PMP) D
 | 
|---|
 | 102 |  .  D ^PRS8OTFF
 | 
|---|
 | 103 |  E  D
 | 
|---|
 | 104 |  .  D ^PRS8MISC
 | 
|---|
 | 105 |  K DH,DY,I,J,JURY,K,K1,LP,N,NN,OFF,PRS8L,TOUR,V,VAR,WG,X,Y,Y1
 | 
|---|
 | 106 |  D ^PRS8WE ;Weekend premiums
 | 
|---|
 | 107 |  D ^PRS8UP ;finish up Misc and non-time related activities
 | 
|---|
 | 108 |  Q
 | 
|---|
 | 109 |  ;
 | 
|---|
 | 110 | ENT ; --- check entitlement to activity for 1 node non-norm hrs
 | 
|---|
 | 111 |  S Q=0
 | 
|---|
 | 112 |  I '$E(ENT,$P("12^28^^29^26^^^29","^",+X)) S Q=1 ;entitlement string
 | 
|---|
 | 113 |  ;PATCH 45: ADD CHECK FOR FIRE FIGHTER ADDITIONAL HOURS
 | 
|---|
 | 114 |  ;SINCE THIS TYPE OF TIME IS NOT IN THE ENTITLMENT TABLE
 | 
|---|
 | 115 |  ;IT IS SET UP WITH TOUR IND. WITH CODE 9
 | 
|---|
 | 116 |  I "Ff"[TYP,X=9 S Q=0
 | 
|---|
 | 117 |  Q:X'=12  I TYP["W",TOUR>1,$E(ENT,11+TOUR) S Q=0
 | 
|---|
 | 118 |  Q
 | 
|---|
 | 119 |  ;
 | 
|---|
 | 120 | 2 ; --- get 2 node unavailable/oncall and standby
 | 
|---|
 | 121 |  F PRS8=1:4:25 S V=$P(N,"^",PRS8,PRS8+2) Q:$P(V,"^",1)=""  D
 | 
|---|
 | 122 |  .S X=$P(V,"^",3) I X=X1 D ^PRS8EX
 | 
|---|
 | 123 |  K PRS8,X,V Q
 | 
|---|