- FHWOR3 ; HISC/NCA - HL7 Early/Late Tray ;10/10/00 14:56
- ;;5.5;DIETETICS;;Jan 28, 2005
- S DATA=X
- N BAG,CODE,DATE,DAY,DTE,DP,EL,K,L1,LP,LSTWD,MEAL,PER,PIECE,SERV,SP,W1,WKD,WKDAYS,Y
- S:ITVL="" ITVL="ONCE"
- I 'SDT S TXT="No Start Date." D ERR^FHWOR Q
- S DATE=SDT D CVT^FHWOR S SDT=DATE\1
- I EDT S DATE=EDT D CVT^FHWOR S EDT=DATE\1
- I 'EDT S:ITVL="ONCE" EDT=SDT I 'EDT S TXT="No Stop Date." D ERR^FHWOR Q
- S SERV=$P(DATA,"|",2)
- I $P("EARLY",SERV,1)'="",$P("LATE",SERV,1)'="" S TXT="Wrong Type of Tray." D ERR^FHWOR Q
- S PER=$P(DATA,"|",3),PER=$E(PER,4,$L(PER)),MEAL=$E(PER,1) I "BNE"'[MEAL S TXT="Wrong Service Period." D ERR^FHWOR Q
- I $E(PER,2)'=$E(SERV,1) S TXT="Wrong Service Period." D ERR^FHWOR Q
- S PIECE=$E(PER,3) I 'PIECE S TXT="No Time Specified." D ERR^FHWOR Q
- S K=$S(MEAL="B":0,MEAL="N":6,1:12)+($E(PER,2)="L"*3)
- S W1=$P($G(^FHPT(FHDFN,"A",ADM,0)),"^",8),DP=$P($G(^FH(119.6,+W1,0)),"^",8)
- K TM F L1=1:1:3 S TM(L1)=$P($G(^FH(119.73,+DP,1)),"^",K+L1)
- S TIM=TM(PIECE) I TIM="" F L1=1:1:3 S:TM(L1)'="" TIM=TM(L1)
- I TIM="" S TXT="No Early/Late Time on file." D ERR^FHWOR Q
- S BAG="N" I $P(X,"|",4)="bagged" S BAG="Y"
- S X=SDT_"@"_TIM,%DT="XT" D ^%DT S (SDT,FHDTIM)=Y,EDT=EDT+(SDT#1)
- S (FHV1,FHV2)="" D CUR^FHWOR31(FHDFN,ADM,FHDTIM,.FHV1,.FHV2)
- S (WKDAYS,WKD)=""
- I SDT=EDT D G:SP ERR G PROC
- .S SP="" F K=SDT\1:0 S K=$O(^FHPT(FHDFN,"A",ADM,"EL",K)) Q:K<1!(K\1'=(SDT\1)) I $P(^(K,0),"^",2)=MEAL S SP=K Q
- .I SP S TXT="Early/Late Meal Already Ordered for this Date." Q
- .Q
- F LP=1:1 S CODE=$P(ITVL,"~",LP) Q:CODE="" D Q:TXT'=""
- .I CODE="ONCE" S TXT="ONCE is for one Day Only." Q
- .I $E(CODE,1)'="Q" S TXT="Wrong Interval specification. Use Only ONCE, QJ#, or Q1J#." Q
- .I +$E(CODE,2)>1 S TXT="Wrong interval specification. Use Only ONCE, QJ#, or Q1J#." Q
- .S LSTWD=$E(CODE,$L(CODE))
- .I LSTWD="J" S DAY=1 S WKD=WKD_$E("MTWRFSX",DAY) Q
- .I LSTWD?1N,$E(CODE,$L(CODE)-1)="J" D Q
- ..S DAY=LSTWD I DAY<1!(DAY>7) S TXT="Wrong Day Specification." Q
- ..S WKD=WKD_$E("MTWRFSX",DAY),WKDAYS=WKDAYS_DAY Q
- .S TXT="Wrong interval specification. Use Only ONCE, QJ#, or Q1J#."
- .Q
- I TXT'="" D ERR^FHWOR Q
- PROC ; Process Add E/L Trays
- D PROC^FHWOR31
- EXIT ; Exit Process Kill.
- K %,%H,%I,%DT,BAG,CODE,DATE,DAY,DTE,DP,EL,FHDAY,FHDTIM,FHV1,FHV2,K,L1,LP,LSTWD,MEAL,PER,PIECE,SERV,SP,W1,WKD,WKDAYS,X,Y Q
- ERR ; Send Error Message
- D ERR^FHWOR Q
- CAN ; Process Cancel/Discontinue from OE/RR
- D NOW^%DTC S NOW=%,CT=0
- D GADM^FHWORR
- F EL=%:0 S EL=$O(^FHPT(FHDFN,"A",+ADM,"EL",EL)) Q:EL<1!(EL>$P(FILL,";",5)) S X=$G(^(EL,0)) I $P(X,"^",7)=+FHORN K ^FHPT(FHDFN,"A",ADM,"EL",EL),^FHPT("ADLT",EL,FHDFN) S CT=CT+1
- S %=$S($D(^FHPT(FHDFN,"A",ADM,"EL",0)):$P(^(0),"^",4),1:0)-CT S:%'<0 $P(^(0),"^",4)=%
- K %,%H,%I,CT,EL D CSEND^FHWOR Q
- EL ; Code Early Late Tray
- K MSG S WKDAYS=""
- I SDT=EDT S ITVL="ONCE" G EL1
- S ITVL="" F K=1:1 S Z=$E(WKD,K) Q:Z="" S DAY=$F("MTWRFSX",Z),DAY=DAY-1 S:ITVL'="" ITVL=ITVL_"~" S ITVL=ITVL_"QJ"_DAY,WKDAYS=WKDAYS_DAY
- EL1 S FILL="E"_";"_ADM_";;"_SDT_";"_EDT_";"_WKD_";"_MEAL_";"_TIM_";"_BAG
- D SET
- ; Code MSH, PID, and PV1
- D MSH^FHWOR
- ; code ORC
- S MSG(4)="ORC|SN||"_FILL_"^FH||||^"_ITVL_"^^"_SDT_"^"_EDT_"|||"_DUZ_"||"_DUZ_"|||"_NOW
- ; code ODT
- S MSG(5)="ODT|"_$S(SERV="E":"EARLY",1:"LATE")_"|^^^"_MEAL_SERV_NUM_"^^99FHS|"_$S(BAG="Y":"bagged",1:"")
- K FHWARD,FILL,HOSP,ITVL,FHORN,RM,SITE,WARD,WKDAYS,Z Q
- CODE ; Code Cancel/Discontinue Early Late Tray
- K MSG S ACT="OC",WKD="",CTR=0 D SITE^FH
- S EDT="" F SK=0:0 S SK=$O(NN(FHORN,SK)) Q:SK<1 S CTR=CTR+1 S:CTR=1 SDT=SK S EDT=SK D WKD
- S STR=$G(^FHPT(FHDFN,"A",ADM,"EL",EDT,0))
- S FILL="E"_";"_ADM_";;"_SDT_";"_EDT_";"_WKD_";"_$P(STR,"^",2)_";"_$P(STR,"^",3)_";"_$P(STR,"^",4)
- ; code MSH
- S MSG(1)="MSH|^~\&|DIETETICS|"_SITE(1)_"|||||ORM"
- ; code PID
- S MSG(2)="PID|||"_DFN_"||"_$P($G(^DPT(DFN,0)),"^",1)
- ; code ORC
- S DATE=$$FMTHL7^XLFDT(NOW)
- S MSG(3)="ORC|"_ACT_"|"_FHORN_"^OR|"_FILL_"^FH|||||||||"_FHPV_"|||"_DATE_"|Dietetics Canceled Early/Late Tray order."
- K %,%Y,ACT,DATE,EDT,FILL,FHORN,SDT,SK,SITE,STR,WKD Q
- WKD ; Get week days
- D WKD^FHWOR31
- Q
- SET ; Set Date/Time in HL7 format
- D SET^FHWOR31
- Q
- NA ; OE/RR Number Assign
- S SDT=$P(FILL,";",4),EDT=$P(FILL,";",5),WKD=$P(FILL,";",6),MEAL=$P(FILL,";",7),TIM=$P(FILL,";",8),DTE=SDT
- G:'+FHORN KIL
- G:'$D(^FHPT(FHDFN,"A",ADM,"EL",SDT,0)) KIL
- I WKD="" S $P(^FHPT(FHDFN,"A",ADM,"EL",SDT,0),"^",7)=+FHORN G KIL
- F EL=SDT\1:0 S EL=$O(^FHPT(FHDFN,"A",ADM,"EL",EL)) Q:EL<1!(EL>EDT) D
- .Q:$P(^FHPT(FHDFN,"A",ADM,"EL",EL,0),"^",7)
- .Q:$P(^FHPT(FHDFN,"A",ADM,"EL",EL,0),"^",2)'=MEAL
- .Q:$P(^FHPT(FHDFN,"A",ADM,"EL",EL,0),"^",3)'=TIM
- .S X=EL D H^%DTC S:%Y=0 %Y=7 Q:%Y<0
- .S WKDAYS=$E("MTWRFSX",%Y) Q:WKDAYS=""
- .S:"MTWRFSX"[WKDAYS $P(^FHPT(FHDFN,"A",ADM,"EL",EL,0),"^",7)=+FHORN
- .Q
- KIL K %Y,DTE,EDT,EL,NUM,MEAL,MSG,FHORN,SDT,TIM,WKDAYS,WKD Q
- FHWOR3 ; HISC/NCA - HL7 Early/Late Tray ;10/10/00 14:56
- +1 ;;5.5;DIETETICS;;Jan 28, 2005
- +2 SET DATA=X
- +3 NEW BAG,CODE,DATE,DAY,DTE,DP,EL,K,L1,LP,LSTWD,MEAL,PER,PIECE,SERV,SP,W1,WKD,WKDAYS,Y
- +4 IF ITVL=""
- SET ITVL="ONCE"
- +5 IF 'SDT
- SET TXT="No Start Date."
- DO ERR^FHWOR
- QUIT
- +6 SET DATE=SDT
- DO CVT^FHWOR
- SET SDT=DATE\1
- +7 IF EDT
- SET DATE=EDT
- DO CVT^FHWOR
- SET EDT=DATE\1
- +8 IF 'EDT
- IF ITVL="ONCE"
- SET EDT=SDT
- IF 'EDT
- SET TXT="No Stop Date."
- DO ERR^FHWOR
- QUIT
- +9 SET SERV=$PIECE(DATA,"|",2)
- +10 IF $PIECE("EARLY",SERV,1)'=""
- IF $PIECE("LATE",SERV,1)'=""
- SET TXT="Wrong Type of Tray."
- DO ERR^FHWOR
- QUIT
- +11 SET PER=$PIECE(DATA,"|",3)
- SET PER=$EXTRACT(PER,4,$LENGTH(PER))
- SET MEAL=$EXTRACT(PER,1)
- IF "BNE"'[MEAL
- SET TXT="Wrong Service Period."
- DO ERR^FHWOR
- QUIT
- +12 IF $EXTRACT(PER,2)'=$EXTRACT(SERV,1)
- SET TXT="Wrong Service Period."
- DO ERR^FHWOR
- QUIT
- +13 SET PIECE=$EXTRACT(PER,3)
- IF 'PIECE
- SET TXT="No Time Specified."
- DO ERR^FHWOR
- QUIT
- +14 SET K=$SELECT(MEAL="B":0,MEAL="N":6,1:12)+($EXTRACT(PER,2)="L"*3)
- +15 SET W1=$PIECE($GET(^FHPT(FHDFN,"A",ADM,0)),"^",8)
- SET DP=$PIECE($GET(^FH(119.6,+W1,0)),"^",8)
- +16 KILL TM
- FOR L1=1:1:3
- SET TM(L1)=$PIECE($GET(^FH(119.73,+DP,1)),"^",K+L1)
- +17 SET TIM=TM(PIECE)
- IF TIM=""
- FOR L1=1:1:3
- IF TM(L1)'=""
- SET TIM=TM(L1)
- +18 IF TIM=""
- SET TXT="No Early/Late Time on file."
- DO ERR^FHWOR
- QUIT
- +19 SET BAG="N"
- IF $PIECE(X,"|",4)="bagged"
- SET BAG="Y"
- +20 SET X=SDT_"@"_TIM
- SET %DT="XT"
- DO ^%DT
- SET (SDT,FHDTIM)=Y
- SET EDT=EDT+(SDT#1)
- +21 SET (FHV1,FHV2)=""
- DO CUR^FHWOR31(FHDFN,ADM,FHDTIM,.FHV1,.FHV2)
- +22 SET (WKDAYS,WKD)=""
- +23 IF SDT=EDT
- Begin DoDot:1
- +24 SET SP=""
- FOR K=SDT\1:0
- SET K=$ORDER(^FHPT(FHDFN,"A",ADM,"EL",K))
- IF K<1!(K\1'=(SDT\1))
- QUIT
- IF $PIECE(^(K,0),"^",2)=MEAL
- SET SP=K
- QUIT
- +25 IF SP
- SET TXT="Early/Late Meal Already Ordered for this Date."
- QUIT
- +26 QUIT
- End DoDot:1
- IF SP
- GOTO ERR
- GOTO PROC
- +27 FOR LP=1:1
- SET CODE=$PIECE(ITVL,"~",LP)
- IF CODE=""
- QUIT
- Begin DoDot:1
- +28 IF CODE="ONCE"
- SET TXT="ONCE is for one Day Only."
- QUIT
- +29 IF $EXTRACT(CODE,1)'="Q"
- SET TXT="Wrong Interval specification. Use Only ONCE, QJ#, or Q1J#."
- QUIT
- +30 IF +$EXTRACT(CODE,2)>1
- SET TXT="Wrong interval specification. Use Only ONCE, QJ#, or Q1J#."
- QUIT
- +31 SET LSTWD=$EXTRACT(CODE,$LENGTH(CODE))
- +32 IF LSTWD="J"
- SET DAY=1
- SET WKD=WKD_$EXTRACT("MTWRFSX",DAY)
- QUIT
- +33 IF LSTWD?1N
- IF $EXTRACT(CODE,$LENGTH(CODE)-1)="J"
- Begin DoDot:2
- +34 SET DAY=LSTWD
- IF DAY<1!(DAY>7)
- SET TXT="Wrong Day Specification."
- QUIT
- +35 SET WKD=WKD_$EXTRACT("MTWRFSX",DAY)
- SET WKDAYS=WKDAYS_DAY
- QUIT
- End DoDot:2
- QUIT
- +36 SET TXT="Wrong interval specification. Use Only ONCE, QJ#, or Q1J#."
- +37 QUIT
- End DoDot:1
- IF TXT'=""
- QUIT
- +38 IF TXT'=""
- DO ERR^FHWOR
- QUIT
- PROC ; Process Add E/L Trays
- +1 DO PROC^FHWOR31
- EXIT ; Exit Process Kill.
- +1 KILL %,%H,%I,%DT,BAG,CODE,DATE,DAY,DTE,DP,EL,FHDAY,FHDTIM,FHV1,FHV2,K,L1,LP,LSTWD,MEAL,PER,PIECE,SERV,SP,W1,WKD,WKDAYS,X,Y
- QUIT
- ERR ; Send Error Message
- +1 DO ERR^FHWOR
- QUIT
- CAN ; Process Cancel/Discontinue from OE/RR
- +1 DO NOW^%DTC
- SET NOW=%
- SET CT=0
- +2 DO GADM^FHWORR
- +3 FOR EL=%:0
- SET EL=$ORDER(^FHPT(FHDFN,"A",+ADM,"EL",EL))
- IF EL<1!(EL>$PIECE(FILL,";",5))
- QUIT
- SET X=$GET(^(EL,0))
- IF $PIECE(X,"^",7)=+FHORN
- KILL ^FHPT(FHDFN,"A",ADM,"EL",EL),^FHPT("ADLT",EL,FHDFN)
- SET CT=CT+1
- +4 SET %=$SELECT($DATA(^FHPT(FHDFN,"A",ADM,"EL",0)):$PIECE(^(0),"^",4),1:0)-CT
- IF %'<0
- SET $PIECE(^(0),"^",4)=%
- +5 KILL %,%H,%I,CT,EL
- DO CSEND^FHWOR
- QUIT
- EL ; Code Early Late Tray
- +1 KILL MSG
- SET WKDAYS=""
- +2 IF SDT=EDT
- SET ITVL="ONCE"
- GOTO EL1
- +3 SET ITVL=""
- FOR K=1:1
- SET Z=$EXTRACT(WKD,K)
- IF Z=""
- QUIT
- SET DAY=$FIND("MTWRFSX",Z)
- SET DAY=DAY-1
- IF ITVL'=""
- SET ITVL=ITVL_"~"
- SET ITVL=ITVL_"QJ"_DAY
- SET WKDAYS=WKDAYS_DAY
- EL1 SET FILL="E"_";"_ADM_";;"_SDT_";"_EDT_";"_WKD_";"_MEAL_";"_TIM_";"_BAG
- +1 DO SET
- +2 ; Code MSH, PID, and PV1
- +3 DO MSH^FHWOR
- +4 ; code ORC
- +5 SET MSG(4)="ORC|SN||"_FILL_"^FH||||^"_ITVL_"^^"_SDT_"^"_EDT_"|||"_DUZ_"||"_DUZ_"|||"_NOW
- +6 ; code ODT
- +7 SET MSG(5)="ODT|"_$SELECT(SERV="E":"EARLY",1:"LATE")_"|^^^"_MEAL_SERV_NUM_"^^99FHS|"_$SELECT(BAG="Y":"bagged",1:"")
- +8 KILL FHWARD,FILL,HOSP,ITVL,FHORN,RM,SITE,WARD,WKDAYS,Z
- QUIT
- CODE ; Code Cancel/Discontinue Early Late Tray
- +1 KILL MSG
- SET ACT="OC"
- SET WKD=""
- SET CTR=0
- DO SITE^FH
- +2 SET EDT=""
- FOR SK=0:0
- SET SK=$ORDER(NN(FHORN,SK))
- IF SK<1
- QUIT
- SET CTR=CTR+1
- IF CTR=1
- SET SDT=SK
- SET EDT=SK
- DO WKD
- +3 SET STR=$GET(^FHPT(FHDFN,"A",ADM,"EL",EDT,0))
- +4 SET FILL="E"_";"_ADM_";;"_SDT_";"_EDT_";"_WKD_";"_$PIECE(STR,"^",2)_";"_$PIECE(STR,"^",3)_";"_$PIECE(STR,"^",4)
- +5 ; code MSH
- +6 SET MSG(1)="MSH|^~\&|DIETETICS|"_SITE(1)_"|||||ORM"
- +7 ; code PID
- +8 SET MSG(2)="PID|||"_DFN_"||"_$PIECE($GET(^DPT(DFN,0)),"^",1)
- +9 ; code ORC
- +10 SET DATE=$$FMTHL7^XLFDT(NOW)
- +11 SET MSG(3)="ORC|"_ACT_"|"_FHORN_"^OR|"_FILL_"^FH|||||||||"_FHPV_"|||"_DATE_"|Dietetics Canceled Early/Late Tray order."
- +12 KILL %,%Y,ACT,DATE,EDT,FILL,FHORN,SDT,SK,SITE,STR,WKD
- QUIT
- WKD ; Get week days
- +1 DO WKD^FHWOR31
- +2 QUIT
- SET ; Set Date/Time in HL7 format
- +1 DO SET^FHWOR31
- +2 QUIT
- NA ; OE/RR Number Assign
- +1 SET SDT=$PIECE(FILL,";",4)
- SET EDT=$PIECE(FILL,";",5)
- SET WKD=$PIECE(FILL,";",6)
- SET MEAL=$PIECE(FILL,";",7)
- SET TIM=$PIECE(FILL,";",8)
- SET DTE=SDT
- +2 IF '+FHORN
- GOTO KIL
- +3 IF '$DATA(^FHPT(FHDFN,"A",ADM,"EL",SDT,0))
- GOTO KIL
- +4 IF WKD=""
- SET $PIECE(^FHPT(FHDFN,"A",ADM,"EL",SDT,0),"^",7)=+FHORN
- GOTO KIL
- +5 FOR EL=SDT\1:0
- SET EL=$ORDER(^FHPT(FHDFN,"A",ADM,"EL",EL))
- IF EL<1!(EL>EDT)
- QUIT
- Begin DoDot:1
- +6 IF $PIECE(^FHPT(FHDFN,"A",ADM,"EL",EL,0),"^",7)
- QUIT
- +7 IF $PIECE(^FHPT(FHDFN,"A",ADM,"EL",EL,0),"^",2)'=MEAL
- QUIT
- +8 IF $PIECE(^FHPT(FHDFN,"A",ADM,"EL",EL,0),"^",3)'=TIM
- QUIT
- +9 SET X=EL
- DO H^%DTC
- IF %Y=0
- SET %Y=7
- IF %Y<0
- QUIT
- +10 SET WKDAYS=$EXTRACT("MTWRFSX",%Y)
- IF WKDAYS=""
- QUIT
- +11 IF "MTWRFSX"[WKDAYS
- SET $PIECE(^FHPT(FHDFN,"A",ADM,"EL",EL,0),"^",7)=+FHORN
- +12 QUIT
- End DoDot:1
- KIL KILL %Y,DTE,EDT,EL,NUM,MEAL,MSG,FHORN,SDT,TIM,WKDAYS,WKD
- QUIT