FHPRF1 ; HISC/REL/RVD - Calculate Total Forecast ;1/23/98 16:10
;;5.5;DIETETICS;**5**;Jan 28, 2005;Build 53
;
;patch #5 - added screen for cancelled quest meals.
;
S %DT="X",X="T" D ^%DT S DT=+Y
D DIV^FHOMUTL G:'$D(FHSITE) KIL
D1 R !!,"Forecast Date: ",X:DTIME G:'$T!("^"[X) KIL S %DT="EX" D ^%DT G KIL:"^"[X,D1:Y<1 S D1=+Y
S FHP=$O(^FH(119.71,0)) I FHP'<1,$O(^FH(119.71,FHP))<1 G R1
R0 R !!,"Select PRODUCTION FACILITY: ",X:DTIME G:'$T!("^"[X) KIL
K DIC S DIC="^FH(119.71,",DIC(0)="EMQ" D ^DIC G:Y<1 R0 S FHP=+Y
R1 W ! K IOP,%ZIS S %ZIS("A")="Select LIST Printer: ",%ZIS="MQ" D ^%ZIS K %ZIS,IOP G:POP KIL
I $D(IO("Q")) S FHPGM="Q1^FHPRF1",FHLST="D1^FHP^FHSITE^FHSITENM" D EN2^FH G KIL
U IO D Q1 D ^%ZISC K %ZIS,IOP G KIL
Q1 ; Process Census Forecast
D Q2,Q3
;get outpatient data
S FHD1SAV=D1
S:'$G(FHSITE) FHSITE=""
S:'$D(FHSITENM) FHSITENM="CONSOLIDATED"
D GETSM^FHOMRBLD(D1,FHSITE,"","")
D GETGM^FHOMRBL1(D1,FHSITE,"","")
S D1=D1-.000001
D GETRM^FHOMRBLD(D1,FHSITE,"","")
D PROSG ;process recurring, special and guest meal from "OP" node
S D1=FHD1SAV
G ^FHPRF1A
Q2 ; Calculate Service Point census forecast
S X="T",%DT="X" D ^%DT S DT=+Y
K ^TMP($J) S X=D1 D DOW^%DTC S DOW=Y+1 D BLD,DAT
F W1=0:0 S W1=$O(^TMP($J,"W",W1)) Q:W1<1 D WRD S ^TMP($J,"W",W1)=S1
K D,DC S X1=DT,X2=-1 D C^%DTC S D2=X
F P0=0:0 S P0=$O(^TMP($J,"S",P0)) Q:P0<1 D ADD S ^TMP($J,P0)=S1
Q
Q3 F P0=0:0 S P0=$O(^TMP($J,P0)) Q:P0<1 S S1=^(P0) D PER S ^TMP($J,P0)=S0
F K=0:0 S K=$O(D(K)) Q:K<1 S ^TMP($J,0,K)=D(K)
K D,^TMP($J,"W"),^TMP($J,"S") Q
WRD S (A,B,CT,S1,S2,S3,S4)=0 F K=1:1:9 S Y=$P($G(^DG(41.9,W1,"C",D(K),0)),"^",2) I Y S CT=CT+1,S0=10-K,S1=S1+S0,S2=S0*S0+S2,S3=S3+Y,S4=S0*Y+S4
G:'CT W1 I CT=1 S S1=S3 G W1
S S0=S1*S1/CT-S2,A=S1*S3/CT-S4/S0,B=S3/CT-(A*S1/CT)
S A=$J(A,0,3),B=$J(B,0,2),S1=10*A+B
W1 S (N1,C2,C3)=0 F K=1:1:7 S Y0=$P($G(^DG(41.9,W1,"C",DC(K),0)),"^",2) I Y0 S N1=N1+1,C2=Y0-S1*(4-N1)+C2,C3=4-N1+C3 Q:N1=3
I N1 S C2=C2/C3,S1=S1+C2
S S1=$J(S1,0,0) Q
ADD S (S1,CT)=0 F W1=0:0 S W1=$O(^TMP($J,"S",P0,W1)) Q:W1<1 S Z=^(W1),T0=$G(^TMP($J,"W",W1)),CT=CT+T0,S1=Z*T0/100+S1
S S1=$J(S1,0,0)
I '$D(^FH(119.72,P0,"C",D1,0)) S ^(0)=D1 I '$D(^FH(119.72,P0,"C",0)) S ^(0)="^119.722DA^^"
I D1'
0)!(FHK>FHDT) D
..S (FHPDIET,FHLOC,FHSER,FHDIET)="***"
..S FHIJKDAT=@FHTMPS@(FHN,FHI,FHJ,FHK)
..Q:$P(FHIJKDAT,U,19)="C" ;quit if status is cancelled.
..S FHDIET=$P(FHIJKDAT,U,3),FHDIET=$O(^FH(111,"B",FHDIET,0))
..I $G(FHDIET),$D(^FH(111,FHDIET,0)) S FHPDIET=$P(^FH(111,FHDIET,0),U,5)
..S:$D(^FH(119.6,"B",FHI)) FHLOC=$O(^FH(119.6,"B",FHI,0))
..S:$G(FHLOC) FHSER=$P($G(^FH(119.6,FHLOC,0)),U,5)
..S:'$G(FHSER) FHSER=$P($G(^FH(119.6,FHLOC,0)),U,6)
..S:'$G(FHSER) FHSER=$O(^FH(119.72,0))
..I $D(^FH(119.72,FHSER,0)),$P(^FH(119.72,FHSER,0),U,3)'=FHP Q
..S:$D(^TMP($J,FHSER)) ^TMP($J,FHSER)=^TMP($J,FHSER)+1
..S:'$D(^TMP($J,FHSER)) ^TMP($J,FHSER)=1
..I $D(^TMP($J,FHSER,FHPDIET)) D
...S ^TMP($J,FHSER,FHPDIET)=^TMP($J,FHSER,FHPDIET)+1
..I '$D(^TMP($J,FHSER,FHPDIET)) D
...S ^TMP($J,FHSER,FHPDIET)=1
..I $D(^TMP($J,0,FHPDIET)) S ^TMP($J,0,FHPDIET)=^TMP($J,0,FHPDIET)+1
..I '$D(^TMP($J,0,FHPDIET)) S ^TMP($J,0,FHPDIET)=1
;
SPEC ;special meals
S FHTMPS="^TMP($J,""OP"",""S"")"
S FHN="" F S FHN=$O(@FHTMPS@(FHN)) Q:FHN="" S FHI="" F S FHI=$O(@FHTMPS@(FHN,FHI)) Q:FHI="" S FHJ="" F S FHJ=$O(@FHTMPS@(FHN,FHI,FHJ)) Q:FHJ="" D
.I (FHPLNM'=""),(FHN'=FHPLNM) Q
.F FHK=0:0 S FHK=$O(@FHTMPS@(FHN,FHI,FHJ,FHK)) Q:(FHK'>0)!(FHK>FHDT) D
..S (FHPDIET,FHLOC,FHSER,FHDIET)="***"
..S FHIJKDAT=@FHTMPS@(FHN,FHI,FHJ,FHK)
..S FHDIET=$P(FHIJKDAT,U,4),FHDIET=$O(^FH(111,"B",FHDIET,0))
..S:$D(^FH(111,FHDIET,0)) FHPDIET=$P(^FH(111,FHDIET,0),U,5)
..S:$D(^FH(119.6,"B",FHI)) FHLOC=$O(^FH(119.6,"B",FHI,0))
..S:$G(FHLOC) FHSER=$P($G(^FH(119.6,FHLOC,0)),U,5)
..S:'$G(FHSER) FHSER=$P($G(^FH(119.6,FHLOC,0)),U,6)
..S:'$G(FHSER) FHSER=$O(^FH(119.72,0))
..I $D(^FH(119.72,FHSER,0)),$P(^FH(119.72,FHSER,0),U,3)'=FHP Q
..S:$D(^TMP($J,FHSER)) ^TMP($J,FHSER)=^TMP($J,FHSER)+1
..S:'$D(^TMP($J,FHSER)) ^TMP($J,FHSER)=1
..I $D(^TMP($J,FHSER,FHPDIET)) D
...S ^TMP($J,FHSER,FHPDIET)=^TMP($J,FHSER,FHPDIET)+1
..I '$D(^TMP($J,FHSER,FHPDIET)) D
...S ^TMP($J,FHSER,FHPDIET)=1
..I $D(^TMP($J,0,FHPDIET)) S ^TMP($J,0,FHPDIET)=^TMP($J,0,FHPDIET)+1
..I '$D(^TMP($J,0,FHPDIET)) S ^TMP($J,0,FHPDIET)=1
;
GUEST ;guest meals
S FHTMPS="^TMP($J,""OP"",""G"")"
S FHN="" F S FHN=$O(@FHTMPS@(FHN)) Q:FHN="" S FHI="" F S FHI=$O(@FHTMPS@(FHN,FHI)) Q:FHI="" S FHJ="" F S FHJ=$O(@FHTMPS@(FHN,FHI,FHJ)) Q:FHJ="" D
.I (FHPLNM'=""),(FHN'=FHPLNM) Q
.F FHK=0:0 S FHK=$O(@FHTMPS@(FHN,FHI,FHJ,FHK)) Q:(FHK'>0)!(FHK>FHDT) D
..S (FHPDIET,FHLOC,FHSER,FHDIET)="***"
..S FHIJKDAT=@FHTMPS@(FHN,FHI,FHJ,FHK)
..Q:$P(FHIJKDAT,U,7)="C"
..S FHDIET=$P($G(^FH(119.9,1,0)),U,2) ;default diet from 119.9
..S FHDIETN=$P(FHIJKDAT,U,6) ;diet from guest meal
..S:$D(^FH(119.6,"B",FHI)) FHLOC=$O(^FH(119.6,"B",FHI,0))
..S:$G(FHLOC) FHSER=$P($G(^FH(119.6,FHLOC,0)),U,5)
..S:'$G(FHSER) FHSER=$P($G(^FH(119.6,FHLOC,0)),U,6)
..S:'$G(FHSER) FHSER=$O(^FH(119.72,0))
..I $D(^FH(119.72,FHSER,0)),$P(^FH(119.72,FHSER,0),U,3)'=FHP Q
..S:$D(^TMP($J,FHSER)) ^TMP($J,FHSER)=^TMP($J,FHSER)+1
..S:'$D(^TMP($J,FHSER)) ^TMP($J,FHSER)=1
..I $G(FHDIETN),($D(^FH(111,FHDIETN,0))) D
...S FHPDIET=$P(^FH(111,FHDIETN,0),U,5)
..I $D(^TMP($J,FHSER,FHPDIET)) D
...S ^TMP($J,FHSER,FHPDIET)=^TMP($J,FHSER,FHPDIET)+1
..I '$D(^TMP($J,FHSER,FHPDIET)) D
...S ^TMP($J,FHSER,FHPDIET)=1
..I $D(^TMP($J,0,FHPDIET)) S ^TMP($J,0,FHPDIET)=^TMP($J,0,FHPDIET)+1
..I '$D(^TMP($J,0,FHPDIET)) S ^TMP($J,0,FHPDIET)=1
Q
;
KIL K ^TMP($J) G KILL^XUSCLEAN