FHSEL1 ; HISC/REL/NCA/JH/RTK/FAI - Patient Preferences ;10/20/04 10:19
;;5.5;DIETETICS;**8,24,29,36**;Jan 28, 2005;Build 3
EN1 ; Enter/Edit Preference File entries
I $G(FHALGMZ)=1 QUIT
W ! S (DIC,DIE)="^FH(115.2,",DIC(0)="AEQLM",DIC("DR")=".01;1",DLAYGO=115.2 W ! D ^DIC K DIC,DLAYGO G KIL:U[X!$D(DTOUT),EN1:Y<1
S (FHDA,DA)=+Y,DR=".01;26;1;S:X=""D"" Y=0;3;20;S:'X Y=99;21;27;99" D ^DIE
I $E($P($G(^FH(115.2,DA,0)),"^"),1,10)="ALLERGY - " S DR="25" D ^DIE
K DA,DIE,DR
I $P($G(^FH(115.2,FHDA,0)),"^",2)'="D"!($D(Y)) G EN1
TRAN R !!,"Do you want to import Recipes from another Food Preference? N // ",X:DTIME
G:'$T!(X["^") EN1
S:X="" X="N" D TR^FH I $P("YES",X,1)'="",$P("NO",X,1)'="" W *7,!," Answer YES or NO" G TRAN
S ANS=X?1"Y".E G:'ANS DIS
T1 W ! K DIC S DIC="^FH(115.2,",DIC(0)="AEMQ",DIC("S")="I $P(^(0),U,2)=""D""" D ^DIC K DIC
G KIL:"^"[X!($D(DTOUT)),T1:Y<1 S FHD=+Y
S:'$D(^FH(115.2,FHDA,"X",0)) ^(0)="^115.21P^^"
F DIS=0:0 S DIS=$O(^FH(115.2,FHD,"X",DIS)) Q:DIS<1 S L1=$G(^(DIS,0)) D ADD
DIS S DA=FHDA,DIE="^FH(115.2,",DR="10;27;99" D ^DIE K DA,DIE,DR G EN1
ADD ; Add dislikes recipes from another food preference
I $D(^FH(115.2,FHDA,"X","B",+L1)) Q
A L +^FH(115.2,FHDA,"X",0):$S($G(DILOCKTM)>0:DILOCKTM,1:3)
S FHX1=$G(^FH(115.2,FHDA,"X",0)),FHX2=$P(FHX1,"^",3)+1
S $P(^FH(115.2,FHDA,"X",0),"^",3)=FHX2
L -^FH(115.2,FHDA,"X",0) I $D(^FH(115.2,FHDA,"X",FHX2,0)) G A
S $P(^FH(115.2,FHDA,"X",0),"^",4)=($P(FHX1,"^",4)+1)
S ^FH(115.2,FHDA,"X",FHX2,0)=+L1
S ^FH(115.2,FHDA,"X","B",+L1,FHX2)=""
Q
EN2 ; List Preference File
W ! K DIR S DIR("A")="Do you want to print recipes?: "
S DIR(0)="YA",DIR("B")="Y" D ^DIR
I $D(DIRUT) K %ZIS S IOP="" D ^%ZIS G KIL
S FHALRC=Y I FHALRC=1 D EN2OLD Q
I FHALRC=0 D EN2NEW Q
Q
EN2OLD W ! S L=0,DIC="^FH(115.2,",FLDS="[FHSELIST]",BY="LIKE OR DISLIKE,NAME"
S FR="@",TO="",DHD="PATIENT PREFERENCES" D EN1^DIP
K %ZIS S IOP="" D ^%ZIS G KIL
EN2NEW W ! S L=0,DIC="^FH(115.2,",FLDS="[FHSELST2]",BY="LIKE OR DISLIKE,NAME"
S FR="@",TO="",DHD="PATIENT PREFERENCES" D EN1^DIP
K %ZIS S IOP="" D ^%ZIS G KIL
EN3 ; Enter/Edit Patient Preferences
S FHALL=1 D ^FHOMDPA G:'FHDFN KIL D DISP S DA=FHDFN W !
K PP F K=0:0 S K=$O(^FHPT(FHDFN,"P",K)) Q:K<1 S X=^(K,0),PP(+X)=$P(X,"^",2,3)
S DIE="^FHPT(",DR="[FHSEL]",DIE("NO^")="" D ^DIE K DIE S FLG=0
S:$D(Y) FLG=1
S STR="" F K=0:0 S K=$O(^FHPT(FHDFN,"P",K)) Q:K<1 S X=^(K,0) S:$P(X,"^",2)="" STR=STR_K_"," S:$P(X,"^",2)'="" $P(PP(+X),"^",3,4)=$P(X,"^",2)_"^"_$P(X,"^",3)
D N31 K PP
I FLG,STR'="" D
.S DA(1)=FHDFN F K=1:1 Q:'$P(STR,",",K) S DA=$P(STR,",",K) D
..S DIK="^FHPT("_DA(1)_",""P""," D ^DIK
..Q
.W *7,!,"<Preference deleted>" K DIK,DA Q
G EN3
N31 F K=0:0 S K=$O(PP(K)) Q:K<1 D N33
S KK=0,COM=""
N32 S KK=$O(PP(KK)) I KK<1 Q:COM="" S EVT="P^O^^"_$E(COM,2,999) D ^FHORX Q
I $L(COM)+$L(PP(KK))>120 S EVT="P^O^^"_$E(COM,2,999) D ^FHORX S COM=""
S COM=COM_" "_PP(KK) G N32
N33 S X1=$P(PP(K),"^",1,2),X2=$P(PP(K),"^",3,4) I X1=X2 K PP(K) Q
S X1=$S(X1="^":"Add",X2="":"Del",1:"Mod"),Q=$P(X2,"^",2)
I X1["Mod" D
.S NOD=$O(^FHPT(FHDFN,"P","B",K,0)) Q:NOD<1
.S:$P($G(^FHPT(FHDFN,"P",NOD,0)),"^",4)="Y" $P(^FHPT(FHDFN,"P",NOD,0),"^",4)=""
.Q
S PP(K)=X1_" "_$S(X2="":"",Q:Q_" ",1:"1 ")_$P(^FH(115.2,K,0),"^",1) S:X2'="" PP(K)=PP(K)_" ("_$P(X2,"^",1)_")" Q
EN4 ; Display Patient Preferences
S FHALL=1 D ^FHOMDPA G:'DFN KIL G:'FHDFN KIL D E41 G EN4
E41 ; Display Patient Header and Food Preferences
D NOW^%DTC S NOW=%,DT=NOW\1
S Y(0)=^DPT(DFN,0),SEX=$P(Y(0),"^",2),DOB=$P(Y(0),"^",3) D PID^FHDPA
S AGE=$E(NOW,1,3)-$E(DOB,1,3)-($E(NOW,4,7)<$E(DOB,4,7))
W @IOF,!,PID,?17,$P(Y(0),"^",1),?49,$S(SEX="M":"Male",SEX="F":"Female",1:""),?55,"Age ",AGE
DISP ; Display Food Preferences
W !!?21,"Likes",?54,"DisLikes",!
K P S P1=1 F K=0:0 S K=$O(^FHPT(FHDFN,"P",K)) Q:K<1 S X=^(K,0) D SP
W ! S (M,MM)="" F S M=$O(P(M)) Q:M="" I $D(P(M)) W $P(M,"~",2) D S MM=M
. S (P1,P2)=0 F S:P1'="" P1=$O(P(M,"L",P1)) S X1=$S(P1>0:P(M,"L",P1),1:"") S:P2'="" P2=$O(P(M,"D",P2)) S X2=$S(P2>0:P(M,"D",P2),1:"") Q:P1=""&(P2="") D P0 W:MM'=M !
. Q
I $O(P(""))="" W !,"No Food Preferences on file",!
Q
P0 I X1'="" W ?12 S X=X1 D P1 S X1=X
I X2'="" W ?46 S X=X2 D P1 S X2=X
Q:X1=""&(X2="") W ! G P0
P1 I $L(X)<34 W X S X="" Q
F KK=35:-1:1 Q:$E(X,KK-1,KK)=", "
W $E(X,1,KK-2) S X=$E(X,KK+1,999) Q
SP ;Build food prefences print array
Q:+X<1
S M1=$S($P(X,U,2)="":"BNE",$P(X,U,2)="A":"BNE",1:$P(X,U,2))
S Z=$G(^FH(115.2,+X,0)) Q:$P(Z,U)=""!$P(Z,U,2)=""
S L1=$P(Z,"^",1),KK=$P(Z,"^",2),M="",DAS=$P(X,"^",4)
I $P(X,U,2)="" S L1=L1_" *Need Meal*"
I KK="L" S Q=$P(X,"^",3),L1=$S(Q:Q,1:1)_" "_L1
I $P(X,U,2)="" S M="0~No Meal" G SP1
I M1="BNE" S M="1~All Meals" G SP1
S Z1=$E(M1,1) I Z1'="" S M=$S(Z1="B":"2~Break",Z1="N":"3~Noon",1:"4~Even")
S Z1=$E(M1,2) I Z1'="" S M=M_","_$S(Z1="B":"Break",Z1="N":"Noon",1:"Even")
SP1 S:'$D(P(M,KK,P1)) P(M,KK,P1)="" I $L(P(M,KK,P1))+$L(L1)<255 S P(M,KK,P1)=P(M,KK,P1)_$S(P(M,KK,P1)="":"",1:", ")_L1_$S(DAS="Y":" (D)",1:"")
E S:'$D(P(M,KK,K)) P(M,KK,K)="" S P(M,KK,K)=L1_$S(DAS="Y":" (D)",1:"") S P1=K
Q
KIL I $G(FHALGMZ) Q
G KILL^XUSCLEAN
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HFHSEL1 5199 printed Oct 16, 2024@17:55:49 Page 2
FHSEL1 ; HISC/REL/NCA/JH/RTK/FAI - Patient Preferences ;10/20/04 10:19
+1 ;;5.5;DIETETICS;**8,24,29,36**;Jan 28, 2005;Build 3
EN1 ; Enter/Edit Preference File entries
+1 IF $GET(FHALGMZ)=1
QUIT
+2 WRITE !
SET (DIC,DIE)="^FH(115.2,"
SET DIC(0)="AEQLM"
SET DIC("DR")=".01;1"
SET DLAYGO=115.2
WRITE !
DO ^DIC
KILL DIC,DLAYGO
if U[X!$DATA(DTOUT)
GOTO KIL
if Y<1
GOTO EN1
+3 SET (FHDA,DA)=+Y
SET DR=".01;26;1;S:X=""D"" Y=0;3;20;S:'X Y=99;21;27;99"
DO ^DIE
+4 IF $EXTRACT($PIECE($GET(^FH(115.2,DA,0)),"^"),1,10)="ALLERGY - "
SET DR="25"
DO ^DIE
+5 KILL DA,DIE,DR
+6 IF $PIECE($GET(^FH(115.2,FHDA,0)),"^",2)'="D"!($DATA(Y))
GOTO EN1
TRAN READ !!,"Do you want to import Recipes from another Food Preference? N // ",X:DTIME
+1 if '$TEST!(X["^")
GOTO EN1
+2 if X=""
SET X="N"
DO TR^FH
IF $PIECE("YES",X,1)'=""
IF $PIECE("NO",X,1)'=""
WRITE *7,!," Answer YES or NO"
GOTO TRAN
+3 SET ANS=X?1"Y".E
if 'ANS
GOTO DIS
T1 WRITE !
KILL DIC
SET DIC="^FH(115.2,"
SET DIC(0)="AEMQ"
SET DIC("S")="I $P(^(0),U,2)=""D"""
DO ^DIC
KILL DIC
+1 if "^"[X!($DATA(DTOUT))
GOTO KIL
if Y<1
GOTO T1
SET FHD=+Y
+2 if '$DATA(^FH(115.2,FHDA,"X",0))
SET ^(0)="^115.21P^^"
+3 FOR DIS=0:0
SET DIS=$ORDER(^FH(115.2,FHD,"X",DIS))
if DIS<1
QUIT
SET L1=$GET(^(DIS,0))
DO ADD
DIS SET DA=FHDA
SET DIE="^FH(115.2,"
SET DR="10;27;99"
DO ^DIE
KILL DA,DIE,DR
GOTO EN1
ADD ; Add dislikes recipes from another food preference
+1 IF $DATA(^FH(115.2,FHDA,"X","B",+L1))
QUIT
A LOCK +^FH(115.2,FHDA,"X",0):$SELECT($GET(DILOCKTM)>0:DILOCKTM,1:3)
+1 SET FHX1=$GET(^FH(115.2,FHDA,"X",0))
SET FHX2=$PIECE(FHX1,"^",3)+1
+2 SET $PIECE(^FH(115.2,FHDA,"X",0),"^",3)=FHX2
+3 LOCK -^FH(115.2,FHDA,"X",0)
IF $DATA(^FH(115.2,FHDA,"X",FHX2,0))
GOTO A
+4 SET $PIECE(^FH(115.2,FHDA,"X",0),"^",4)=($PIECE(FHX1,"^",4)+1)
+5 SET ^FH(115.2,FHDA,"X",FHX2,0)=+L1
+6 SET ^FH(115.2,FHDA,"X","B",+L1,FHX2)=""
+7 QUIT
EN2 ; List Preference File
+1 WRITE !
KILL DIR
SET DIR("A")="Do you want to print recipes?: "
+2 SET DIR(0)="YA"
SET DIR("B")="Y"
DO ^DIR
+3 IF $DATA(DIRUT)
KILL %ZIS
SET IOP=""
DO ^%ZIS
GOTO KIL
+4 SET FHALRC=Y
IF FHALRC=1
DO EN2OLD
QUIT
+5 IF FHALRC=0
DO EN2NEW
QUIT
+6 QUIT
EN2OLD WRITE !
SET L=0
SET DIC="^FH(115.2,"
SET FLDS="[FHSELIST]"
SET BY="LIKE OR DISLIKE,NAME"
+1 SET FR="@"
SET TO=""
SET DHD="PATIENT PREFERENCES"
DO EN1^DIP
+2 KILL %ZIS
SET IOP=""
DO ^%ZIS
GOTO KIL
EN2NEW WRITE !
SET L=0
SET DIC="^FH(115.2,"
SET FLDS="[FHSELST2]"
SET BY="LIKE OR DISLIKE,NAME"
+1 SET FR="@"
SET TO=""
SET DHD="PATIENT PREFERENCES"
DO EN1^DIP
+2 KILL %ZIS
SET IOP=""
DO ^%ZIS
GOTO KIL
EN3 ; Enter/Edit Patient Preferences
+1 SET FHALL=1
DO ^FHOMDPA
if 'FHDFN
GOTO KIL
DO DISP
SET DA=FHDFN
WRITE !
+2 KILL PP
FOR K=0:0
SET K=$ORDER(^FHPT(FHDFN,"P",K))
if K<1
QUIT
SET X=^(K,0)
SET PP(+X)=$PIECE(X,"^",2,3)
+3 SET DIE="^FHPT("
SET DR="[FHSEL]"
SET DIE("NO^")=""
DO ^DIE
KILL DIE
SET FLG=0
+4 if $DATA(Y)
SET FLG=1
+5 SET STR=""
FOR K=0:0
SET K=$ORDER(^FHPT(FHDFN,"P",K))
if K<1
QUIT
SET X=^(K,0)
if $PIECE(X,"^",2)=""
SET STR=STR_K_","
if $PIECE(X,"^",2)'=""
SET $PIECE(PP(+X),"^",3,4)=$PIECE(X,"^",2)_"^"_$PIECE(X,"^",3)
+6 DO N31
KILL PP
+7 IF FLG
IF STR'=""
Begin DoDot:1
+8 SET DA(1)=FHDFN
FOR K=1:1
if '$PIECE(STR,",",K)
QUIT
SET DA=$PIECE(STR,",",K)
Begin DoDot:2
+9 SET DIK="^FHPT("_DA(1)_",""P"","
DO ^DIK
+10 QUIT
End DoDot:2
+11 WRITE *7,!,"<Preference deleted>"
KILL DIK,DA
QUIT
End DoDot:1
+12 GOTO EN3
N31 FOR K=0:0
SET K=$ORDER(PP(K))
if K<1
QUIT
DO N33
+1 SET KK=0
SET COM=""
N32 SET KK=$ORDER(PP(KK))
IF KK<1
if COM=""
QUIT
SET EVT="P^O^^"_$EXTRACT(COM,2,999)
DO ^FHORX
QUIT
+1 IF $LENGTH(COM)+$LENGTH(PP(KK))>120
SET EVT="P^O^^"_$EXTRACT(COM,2,999)
DO ^FHORX
SET COM=""
+2 SET COM=COM_" "_PP(KK)
GOTO N32
N33 SET X1=$PIECE(PP(K),"^",1,2)
SET X2=$PIECE(PP(K),"^",3,4)
IF X1=X2
KILL PP(K)
QUIT
+1 SET X1=$SELECT(X1="^":"Add",X2="":"Del",1:"Mod")
SET Q=$PIECE(X2,"^",2)
+2 IF X1["Mod"
Begin DoDot:1
+3 SET NOD=$ORDER(^FHPT(FHDFN,"P","B",K,0))
if NOD<1
QUIT
+4 if $PIECE($GET(^FHPT(FHDFN,"P",NOD,0)),"^",4)="Y"
SET $PIECE(^FHPT(FHDFN,"P",NOD,0),"^",4)=""
+5 QUIT
End DoDot:1
+6 SET PP(K)=X1_" "_$SELECT(X2="":"",Q:Q_" ",1:"1 ")_$PIECE(^FH(115.2,K,0),"^",1)
if X2'=""
SET PP(K)=PP(K)_" ("_$PIECE(X2,"^",1)_")"
QUIT
EN4 ; Display Patient Preferences
+1 SET FHALL=1
DO ^FHOMDPA
if 'DFN
GOTO KIL
if 'FHDFN
GOTO KIL
DO E41
GOTO EN4
E41 ; Display Patient Header and Food Preferences
+1 DO NOW^%DTC
SET NOW=%
SET DT=NOW\1
+2 SET Y(0)=^DPT(DFN,0)
SET SEX=$PIECE(Y(0),"^",2)
SET DOB=$PIECE(Y(0),"^",3)
DO PID^FHDPA
+3 SET AGE=$EXTRACT(NOW,1,3)-$EXTRACT(DOB,1,3)-($EXTRACT(NOW,4,7)<$EXTRACT(DOB,4,7))
+4 WRITE @IOF,!,PID,?17,$PIECE(Y(0),"^",1),?49,$SELECT(SEX="M":"Male",SEX="F":"Female",1:""),?55,"Age ",AGE
DISP ; Display Food Preferences
+1 WRITE !!?21,"Likes",?54,"DisLikes",!
+2 KILL P
SET P1=1
FOR K=0:0
SET K=$ORDER(^FHPT(FHDFN,"P",K))
if K<1
QUIT
SET X=^(K,0)
DO SP
+3 WRITE !
SET (M,MM)=""
FOR
SET M=$ORDER(P(M))
if M=""
QUIT
IF $DATA(P(M))
WRITE $PIECE(M,"~",2)
Begin DoDot:1
+4 SET (P1,P2)=0
FOR
if P1'=""
SET P1=$ORDER(P(M,"L",P1))
SET X1=$SELECT(P1>0:P(M,"L",P1),1:"")
if P2'=""
SET P2=$ORDER(P(M,"D",P2))
SET X2=$SELECT(P2>0:P(M,"D",P2),1:"")
if P1=""&(P2="")
QUIT
DO P0
if MM'=M
WRITE !
+5 QUIT
End DoDot:1
SET MM=M
+6 IF $ORDER(P(""))=""
WRITE !,"No Food Preferences on file",!
+7 QUIT
P0 IF X1'=""
WRITE ?12
SET X=X1
DO P1
SET X1=X
+1 IF X2'=""
WRITE ?46
SET X=X2
DO P1
SET X2=X
+2 if X1=""&(X2="")
QUIT
WRITE !
GOTO P0
P1 IF $LENGTH(X)<34
WRITE X
SET X=""
QUIT
+1 FOR KK=35:-1:1
if $EXTRACT(X,KK-1,KK)=", "
QUIT
+2 WRITE $EXTRACT(X,1,KK-2)
SET X=$EXTRACT(X,KK+1,999)
QUIT
SP ;Build food prefences print array
+1 if +X<1
QUIT
+2 SET M1=$SELECT($PIECE(X,U,2)="":"BNE",$PIECE(X,U,2)="A":"BNE",1:$PIECE(X,U,2))
+3 SET Z=$GET(^FH(115.2,+X,0))
if $PIECE(Z,U)=""!$PIECE(Z,U,2)=""
QUIT
+4 SET L1=$PIECE(Z,"^",1)
SET KK=$PIECE(Z,"^",2)
SET M=""
SET DAS=$PIECE(X,"^",4)
+5 IF $PIECE(X,U,2)=""
SET L1=L1_" *Need Meal*"
+6 IF KK="L"
SET Q=$PIECE(X,"^",3)
SET L1=$SELECT(Q:Q,1:1)_" "_L1
+7 IF $PIECE(X,U,2)=""
SET M="0~No Meal"
GOTO SP1
+8 IF M1="BNE"
SET M="1~All Meals"
GOTO SP1
+9 SET Z1=$EXTRACT(M1,1)
IF Z1'=""
SET M=$SELECT(Z1="B":"2~Break",Z1="N":"3~Noon",1:"4~Even")
+10 SET Z1=$EXTRACT(M1,2)
IF Z1'=""
SET M=M_","_$SELECT(Z1="B":"Break",Z1="N":"Noon",1:"Even")
SP1 if '$DATA(P(M,KK,P1))
SET P(M,KK,P1)=""
IF $LENGTH(P(M,KK,P1))+$LENGTH(L1)<255
SET P(M,KK,P1)=P(M,KK,P1)_$SELECT(P(M,KK,P1)="":"",1:", ")_L1_$SELECT(DAS="Y":" (D)",1:"")
+1 IF '$TEST
if '$DATA(P(M,KK,K))
SET P(M,KK,K)=""
SET P(M,KK,K)=L1_$SELECT(DAS="Y":" (D)",1:"")
SET P1=K
+2 QUIT
KIL IF $GET(FHALGMZ)
QUIT
+1 GOTO KILL^XUSCLEAN