PRS8ST ;HISC/MGD-DECOMPOSITION, START-UP ;12/12/05 ;;4.0;PAID;**45,92,102**;Sep 21, 1995 ; ;This routine is the one which actually gets everything moving. ;It moves the information from the ^TMP global into a local array ;[DAY(DAY)] for the three day period it's working with. It then ;processes that information internally and, where necessary, by ;calling certain external processes. ; ;Called by Routines: PRS8SU ; K SBY F DAY=1:1:14 D .K DAY(DAY-2) .S LP=$S(DAY=1:"0,1,2",1:(DAY+1)),JURY=0 .F II=1:1 S DY=$P(LP,",",II) Q:DY="" D ..F J=0,1,2,4,10,"CP","DH1","DH2","HOL","ML","MT1","MT2","OFF","P","TOUR","TWO","W" D ...S DAY(DY,J)=$G(^TMP($J,"PRS8",DY,J)) ...; ...;P 45 INITIALIZE THE "F" NODE HERE BY SIMPLY COPYING THE ...;THE "W" NODE FROM TEMP--FOR TESTING PURPOSES. ...;THE NODE SHOULD BE INITIALIZED BY COPYING THE "F" NODE ...;FROM THE TEMP GLOBAL. ...S DAY(DY,"F")=$G(^TMP($J,"PRS8",DY,"W")) .F II=1:1 S DY=$P(LP,",",II) Q:DY="" D ..S WK=$S(DY<8:1,1:2) ..S TOUR=$S(TYP'["W":1,+DAY(DY,"TOUR"):+DAY(DY,"TOUR"),1:+TOUR(WK)) ..D MOVE^PRS8AC S N=DAY(DY,2),WK=$S(DY<8:1,1:2) ;exception node/week ..I N["UN" S X1="UN" D 2 ;unavailable ..I N["HX" S X1="HX" D 2 ;holiday excused ..I N["ON" S X1="ON" D 2 ;on-call ..I N["SB" S X1="SB" D 2 ;standby ..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 ...S QT=0 F PRS8=1:3 S V=$P(N,"^",PRS8,PRS8+2) Q:QT D ....N PRS8AFFH S PRS8AFFH=0 ;fire fighter additional hours flag ....S X=$P(DAY(DY,NN),"^",PRS8,999) ....I X="" S QT=1 Q ;nothing left to check ....I X?1"^"."^" S QT=1 Q ;only ^ left ....; ....; X = 9 is special tour CODE FOR FF ADDTL HRS. ....; It gets converted to 'f' ....S X=$P(V,"^",3),VAR=1 I X S VAR=$E("se1BC235f",+X) I '+VAR D ENT Q:Q ....;if this segment is addt ff hrs then save a variable to signify ....;that, but convert the time back to a 1 to use in the W node. ....I "Ff"[TYP,VAR="f" S (PRS8AFFH,VAR)=1 ....; ....I VAR,TYP'["W" S VAR=$S(VAR=5:5,1:1) ;only wg need shifts ....S JURY=$G(^TMP($J,"PRS8",DY,2)) I JURY'="" D .....F J=4,8,12,16,20,24,28 S:$P(JURY,"^",J)=6 JURY=1 Q ....D ^PRS8AC ;build "W" node ..S N=DAY(DY,2),WK=$S(DY<8:1,1:2) ;exception node/week ..S QT=0 F PRS8=1:4:25 S V=$P(N,"^",PRS8,PRS8+3) Q:QT D ...I TYP["D",$P(V,"^",3)="" S QT=1 Q ;doctor ...I TYP'["D",'+V,$P(V,"^",3)="" S QT=1 Q ;all others ...S X=$P(V,"^",3) I "^UN^ON^SB^HX^"'[("^"_X_"^") D ^PRS8EX ..S ^TMP($J,"PRS8",DY,"W")=DAY(DY,"W") ;save in ^TMP ..S ^TMP($J,"PRS8",DY,"P")=DAY(DY,"P") ;save non-prem ot in ^TMP ..S ^TMP($J,"PRS8",DY,"HOL")=DAY(DY,"HOL") ;holiday .S WK=$S(DAY<8:1,1:2),OFF=+DAY(DAY,"OFF") ;week/day off .S TOUR=$S(TYP'["W":1,+DAY(DAY,"TOUR"):+DAY(DAY,"TOUR"),1:+TOUR(WK)) .I TYP["I",DAY>0,DAY<15,$G(DAY(DAY,"DWK")) D ;days worked ..S DWK=DWK+1 ;count days worked ..I CYA,DAY'0,DAY<15 D ;FOR CY ..I $S('CYA:1,DAY1,$E(ENT,11+TOUR) S Q=0 Q ; 2 ; --- get 2 node unavailable/oncall and standby F PRS8=1:4:25 S V=$P(N,"^",PRS8,PRS8+2) Q:$P(V,"^",1)="" D .S X=$P(V,"^",3) I X=X1 D ^PRS8EX K PRS8,X,V Q