- ORMFH ;SLC/MKB - Process Dietetics ORM msgs ;5/5/05 13:18
- ;;3.0;ORDER ENTRY/RESULTS REPORTING;**3,73,92,215,243**;Dec 17, 1997;Build 242
- ;
- EN ; -- entry point for FH messages
- I '$L($T(@ORDCNTRL)) Q ;S ORERR="Invalid order control code" Q
- I ORDCNTRL'="SN",ORDCNTRL'="ZP",'ORIFN!('$D(^OR(100,+ORIFN,0))) S ORERR="Invalid OE/RR order number" Q
- S ORLOG=+$E($$NOW^XLFDT,1,12) S:'$G(ORDUZ) ORDUZ=DUZ S:'$G(ORNP) ORNP=ORDUZ
- S:$G(DGPMT) ORNATR="A",OREASON=$S(DGPMT=1:"Admission",DGPMT=3:"Discharge",1:"Transfer"),ORDUZ=""
- D @ORDCNTRL
- Q
- ;
- ZP ; -- Purged
- Q:'ORIFN Q:'$D(^OR(100,+ORIFN,0))
- K ^OR(100,+ORIFN,4) I "^6^8^"[(U_$P($G(^(3)),U,3)_U) D STATUS^ORCSAVE2(+ORIFN,14) ; Remove pkg reference, sts=lapsed if still active
- Q
- ;
- ZR ; -- Purged as requested [ack]
- D DELETE^ORCSAVE2(+ORIFN)
- Q
- ;
- ZU ; -- Unable to purge [ack]
- S $P(^OR(100,+ORIFN,3),U)=$$NOW^XLFDT ; update Last Activity
- Q
- ;
- OK ; -- Order accepted, FH order # assigned [ack]
- N ORSTS S ^OR(100,+ORIFN,4)=PKGIFN ; FH identifier
- I "DN"'[$E(PKGIFN) S ORSTS=6 ;not Diet or NPO
- E S ORSTS=$S($P($G(^OR(100,+ORIFN,0)),U,8)>ORLOG:8,1:6)
- D STATUS^ORCSAVE2(+ORIFN,ORSTS)
- Q
- ;
- XX ; -- Edited backdoor order (OP recurring meals only)
- D XX^ORMFH1 Q
- ;
- SN ; -- New backdoor order: return NA msg w/ORIFN
- N ODS,ODT,OBR,ORDIALOG,X,I,OI,SEG,ORNEW,ORPARAM,ORTIME,ORSTS,ORDG,ORP,ORTRAIL
- ;I '$D(^VA(200,+ORNP,0)) S ORERR="Missing or invalid ordering provider"Q
- ; Don't require provider until Nature of Order is added
- I '$G(DGPMT),'$D(^VA(200,+ORDUZ,0)) S ORERR="Missing or invalid entering person" Q
- I 'ORSTRT S ORERR="Missing effective date/time" Q
- ;I '$G(ORL) S ORERR="Missing or invalid patient location" Q
- D EN1^FHWOR8(ORL,.ORPARAM)
- S ODS=$O(@ORMSG@(+ORC)) I 'ODS S ORERR="Incomplete message" Q
- S ODS=ODS_U_@ORMSG@(ODS),ORSTS=6 I '$L(ORNATR),ORCAT="I" S ORNATR="S"
- I $E($P(ODS,U,2),1,3)="OBR" S OBR=ODS D IP G SN1
- I $E($P(ODS,U,2),1,3)="ODT" S ODT=ODS D TRAY G SN1
- I $E($P(ODS,U,2),1,3)'="ODS" S ORERR="Missing or invalid ODS segment" Q
- I $P(ODS,"|",2)="ZE" D TF G SN1
- I $P(ODS,"|",4)?1"^^^FH-6".E D ADDL G SN1
- I ORCAT'="I" D OPM^ORMFH1 G SN1
- I $P(ODS,"|",4)?1"^^^FH-5".E D NPO G SN1
- DIET ; Diet order
- S ORDIALOG=$O(^ORD(101.41,"AB","FHW1",0)),ORTRAIL="Diet"
- D GETDLG1^ORCD(ORDIALOG) S:ORSTRT>ORLOG ORSTS=8
- S ORDIALOG($$PTR("START DATE/TIME"),1)=ORSTRT
- S:ORSTOP ORDIALOG($$PTR("STOP DATE/TIME"),1)=ORSTOP
- S X=$P(ODS,"|",2),ORDIALOG($$PTR("DELIVERY"),1)=$S($L(X)=1:X,1:$E(X,2))
- ; Comments ??
- S X=$$ORDITEM^ORM($P(ODS,"|",4))
- I 'X S ORERR="Missing or invalid diet modification" Q
- S I=1,OI=$$PTR("ORDERABLE ITEM"),ORDIALOG(OI,I)=X
- I $O(@ORMSG@(+ODS)) F S ODS=$O(@ORMSG@(+ODS)) Q:ODS'>0 S SEG=$E(@ORMSG@(+ODS),1,3) Q:SEG="ORC" Q:SEG="MSH" I SEG="ODS" D Q:$D(ORERR)
- . S X=$$ORDITEM^ORM($P(@ORMSG@(+ODS),"|",4))
- . I 'X S ORERR="Missing or invalid diet modification" Q
- . S I=I+1,ORDIALOG(OI,I)=X
- SN1 ; continue ... save order, post message
- Q:$D(ORERR)
- D EN^ORCSAVE I '$G(ORIFN) S ORERR="Cannot create new order" Q
- D RELEASE^ORCSAVE2(ORIFN,1,ORLOG,ORDUZ,ORNATR),SIGSTS^ORCSAVE2(ORIFN,1)
- D:'$P($G(^OR(100,ORIFN,0)),U,8) DATES^ORCSAVE2(ORIFN,ORSTRT,ORSTOP)
- D STATUS^ORCSAVE2(ORIFN,ORSTS)
- I $G(ORL) S ORP(1)=ORIFN_";1^1" D PRINTS^ORWD1(.ORP,+ORL) ; chart copy
- S ^OR(100,ORIFN,4)=PKGIFN
- Q
- ;
- TRAY ; Early/Late tray
- I 'ORSTOP S ORERR="Missing stop date" Q
- S ORDIALOG=$O(^ORD(101.41,"AB","FHW2",0)) D GETDLG1^ORCD(ORDIALOG),EN2^ORCDFH
- S ORDIALOG($$PTR("START DATE"),1)=ORSTRT
- S ORDIALOG($$PTR("STOP DATE"),1)=ORSTOP
- N DAYS,SCH S DAYS="",SCH=$P(ORQT,U,2)
- I $L(SCH),SCH'="ONCE" F I=1:1:$L(SCH,"~") S X=+$P($P(SCH,"~",I),"J",2),DAYS=DAYS_$E("MTWRFSX",X)
- S:$L(DAYS) ORDIALOG($$PTR("SCHEDULE"),1)=DAYS
- S OI=+$O(^ORD(101.43,"S.E/L T",$P(ODT,"|",2)_" TRAY",0)),ORDIALOG($$PTR("ORDERABLE ITEM"),1)=OI
- S X=$P($P(ODT,"|",3),U,4),ORDIALOG($$PTR("MEAL"),1)=$E(X)
- S ORDIALOG($$PTR("MEAL TIME"),1)=$P($G(ORTIME(OI,$E(X),+$E(X,3))),U,2)
- S:$L($P(ODT,"|",4)) ORDIALOG($$PTR("YES/NO"),1)=1
- Q
- ;
- IP ; Isolation/Precautions
- N IP S IP=+$P($P(OBR,"|",13),U,4)
- I IP'>0 S ORERR="Missing or invalid isolation type" Q
- S ORDIALOG=$O(^ORD(101.41,"AB","FHW3",0)) D GETDLG1^ORCD(ORDIALOG)
- S ORDIALOG($$PTR("ISOLATION TYPE"),1)=IP
- S ORDIALOG($$PTR("ORDERABLE ITEM"),1)=$O(^ORD(101.43,"S.PREC","ISOLATION PROCEDURES",0))
- Q
- ;
- TF ; Tubefeeding
- N OI,STR,INSTR,CMMT,I,X,X4,XI,ZQT,QT,QTY,DUR
- S ORDIALOG=$O(^ORD(101.41,"AB","FHW8",0)) D GETDLG1^ORCD(ORDIALOG)
- S OI=$$PTR("ORDERABLE ITEM"),STR=$$PTR("STRENGTH FH")
- S INSTR=$$PTR("INSTRUCTIONS"),CMMT=$$PTR("FREE TEXT 1")
- ; Comments ??
- S I=0 F D S ODS=$O(@ORMSG@(+ODS)) Q:ODS'>0 Q:$E(@ORMSG@(ODS),1,3)="ORC" S ODS=ODS_U_@ORMSG@(ODS)
- . Q:$E($P(ODS,U,2),1,3)'="ODS" ; not ODS segment
- . S X=$P(ODS,"|",4),X4=$P(X,U,4) ; OI
- . S:X4["-" $P(X,U,4)=+X4,X4=+$P(X4,"-",2) ; strength
- . S XI=$$ORDITEM^ORM(X) I 'XI S ORERR="Missing or invalid tubefeeding product" Q
- . S ZQT=$O(@ORMSG@(+ODS)) I 'ZQT S ORERR="Missing QT information" Q
- . S QT=$P(@ORMSG@(ZQT),"|",3),DUR=$P(QT,U,3)
- . S QTY=+QT_" "_$$UNITS($P($P(QT,U),"&",2))_"/"_$P(QT,U,2)
- . S:$L(DUR) QTY=QTY_" X "_+$E(DUR,2,99)_$S($E(DUR)="H":"HR",1:"")
- . S I=I+1,ORDIALOG(OI,I)=XI,ORDIALOG(STR,I)=X4,ORDIALOG(INSTR,I)=QTY
- . S:$L($P(ODS,"|",5)) ORDIALOG(CMMT,I)=$P(ODS,"|",5)
- I ORCAT="O",ORQT["~" D DATES
- Q
- ;
- UNITS(X) ; -- Returns name of unit X
- N Y S X=$E(X)
- S Y=$S(X="K":"KCAL",X="C":"CC",X="M":"ML",X="O":"OZ",X="U":"UNITS",X="T":"TBSP",X="G":"GM",1:"")
- Q Y
- ;
- NPO ; NPO <uses FHW1 dialog - FHW4 now a quick order>
- S ORDIALOG=$O(^ORD(101.41,"AB","FHW1",0)) D GETDLG1^ORCD(ORDIALOG)
- S ORDIALOG($$PTR("ORDERABLE ITEM"),1)=$O(^ORD(101.43,"S.DIET","NPO",0))
- S ORDIALOG($$PTR("START DATE/TIME"),1)=ORSTRT S:ORSTRT>ORLOG ORSTS=8
- S:ORSTOP ORDIALOG($$PTR("STOP DATE/TIME"),1)=ORSTOP
- S:$L($P(ODS,"|",5)) ORDIALOG($$PTR("FREE TEXT 1"),1)=$P(ODS,"|",5)
- Q
- ;
- ADDL ; Additional order
- S ORDIALOG=$O(^ORD(101.41,"AB","FHW7",0)) D GETDLG1^ORCD(ORDIALOG)
- S ORDIALOG($$PTR("FREE TEXT 1"),1)=$P(ODS,"|",5)
- I ORCAT="O",ORQT["~" D DATES
- Q
- ;
- DATES ; -- pull dates out of ORQT
- N P,I,X S P=$$PTR("DATE/TIME")
- F I=1:1:$L(ORQT,"~") S X=$P(ORQT,"~",I),ORDIALOG(P,I)=$$HL7TFM^XLFDT($P(X,U,4))
- S ORSTRT=$G(ORDIALOG(P,1)),ORSTOP=$G(ORDIALOG(P,I))
- Q
- ;
- SC ; -- Status Change
- SR ; -- Status Update [ack]
- N ORSTS,OROLD S OROLD=$P($G(^OR(100,+ORIFN,3)),U,3)
- D DATES^ORCSAVE2(+ORIFN,ORSTRT,ORSTOP)
- S ORSTS=$S(ORDSTS="DC":1,ORDSTS="IP":6,ORDSTS="ZE":7,ORDSTS="SC":8,1:"")
- D:ORSTS STATUS^ORCSAVE2(+ORIFN,ORSTS)
- I ORDSTS="DC",'$D(^OR(100,+ORIFN,6)) D ;set 6-node
- . I ORNATR'="A","DN"[$E(PKGIFN) S ORNATR="C" S:'$L(OREASON) OREASON="Replaced with new diet order" S:ORDUZ<1 ORDUZ=""
- . S ^OR(100,+ORIFN,6)=$S($L(ORNATR):+$O(^ORD(100.02,"C",ORNATR,0)),1:"")_U_ORDUZ_U_ORLOG_U_U_OREASON
- I OROLD=1,ORSTS=6 D ; reactivate
- . N X S $P(^OR(100,+ORIFN,3),U,7)=1,X=$P(^(0),U,9) K ^(6)
- . I 'ORSTOP,X S $P(^OR(100,+ORIFN,0),U,9)="" K ^OR(100,"AE",X,+ORIFN)
- . D SETALL^ORDD100(+ORIFN)
- Q
- ;
- OC ; -- Cancelled <E/L Trays only> / [ack]
- G:ORTYPE="ORR" UA ;rejected new order
- I $P($G(^OR(100,+ORIFN,3)),U,3)=6,$P(^(0),U,8)<ORLOG G OD
- S ^OR(100,+ORIFN,6)=$S($L(ORNATR):+$O(^ORD(100.02,"C",ORNATR,0)),1:"")_U_ORDUZ_U_ORLOG_U_U_OREASON
- D UPDATE(13,"DC")
- Q
- ;
- CR ; -- Cancelled as requested [ack]
- D STATUS^ORCSAVE2(+ORIFN,13)
- Q
- ;
- OD ; -- Discontinued <Tubefeedings only>
- S ^OR(100,+ORIFN,6)=$S($L(ORNATR):+$O(^ORD(100.02,"C",ORNATR,0)),1:"")_U_ORDUZ_U_ORLOG_U_U_OREASON
- D UPDATE(1,"DC")
- Q
- ;
- DR ; -- Discontinued as requested [ack]
- D STATUS^ORCSAVE2(+ORIFN,1)
- Q
- ;
- UA ; -- Unable to Accept [ack]
- S:'$L(ORNATR) ORNATR="X" ;Rejected
- S ^OR(100,+ORIFN,6)=+$O(^ORD(100.02,"C",ORNATR,0))_U_U_ORLOG_U_U_OREASON
- D STATUS^ORCSAVE2(+ORIFN,13)
- UC ; -- Unable to Cancel [ack]
- UD ; -- Unable to Discontinue [ack]
- N DA S DA=$P(ORIFN,";",2) I DA D
- . S:$G(OREJECT) $P(^OR(100,+ORIFN,8,DA,0),U,15)=13 ; request rejected
- . S:$L(OREASON) ^OR(100,+ORIFN,8,DA,1)=OREASON
- Q
- ;
- UPDATE(ORSTS,ORACT) ; -- continue processing
- N ORX,DA,ORP D DATES^ORCSAVE2(+ORIFN,ORSTRT,ORSTOP)
- D:$G(ORSTS) STATUS^ORCSAVE2(+ORIFN,ORSTS)
- S ORX=$$CREATE^ORX1(ORNATR) D:ORX
- . S DA=$$ACTION^ORCSAVE(ORACT,+ORIFN,ORNP,OREASON,ORLOG,ORDUZ)
- . I DA'>0 S ORERR="Cannot create new order action" Q
- . D RELEASE^ORCSAVE2(+ORIFN,DA,ORLOG,ORDUZ,ORNATR)
- . D SIGSTS^ORCSAVE2(+ORIFN,DA)
- . I $G(ORL) S ORP(1)=+ORIFN_";"_DA_"^1" D PRINTS^ORWD1(.ORP,+ORL)
- . S $P(^OR(100,+ORIFN,3),U,7)=DA
- I ORACT="DC",'$$ACTV^ORX1(ORNATR) S $P(^OR(100,+ORIFN,3),U,7)=0
- D:ORACT="DC" CANCEL^ORCSEND(+ORIFN)
- Q
- ;
- PTR(NAME) ; -- Returns ien of prompt NAME in Order Dialog file #101.41
- Q $O(^ORD(101.41,"AB",$E("OR GTX "_NAME,1,63),0))
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HORMFH 8841 printed Mar 13, 2025@21:36:52 Page 2
- ORMFH ;SLC/MKB - Process Dietetics ORM msgs ;5/5/05 13:18
- +1 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**3,73,92,215,243**;Dec 17, 1997;Build 242
- +2 ;
- EN ; -- entry point for FH messages
- +1 ;S ORERR="Invalid order control code" Q
- IF '$LENGTH($TEXT(@ORDCNTRL))
- QUIT
- +2 IF ORDCNTRL'="SN"
- IF ORDCNTRL'="ZP"
- IF 'ORIFN!('$DATA(^OR(100,+ORIFN,0)))
- SET ORERR="Invalid OE/RR order number"
- QUIT
- +3 SET ORLOG=+$EXTRACT($$NOW^XLFDT,1,12)
- if '$GET(ORDUZ)
- SET ORDUZ=DUZ
- if '$GET(ORNP)
- SET ORNP=ORDUZ
- +4 if $GET(DGPMT)
- SET ORNATR="A"
- SET OREASON=$SELECT(DGPMT=1:"Admission",DGPMT=3:"Discharge",1:"Transfer")
- SET ORDUZ=""
- +5 DO @ORDCNTRL
- +6 QUIT
- +7 ;
- ZP ; -- Purged
- +1 if 'ORIFN
- QUIT
- if '$DATA(^OR(100,+ORIFN,0))
- QUIT
- +2 ; Remove pkg reference, sts=lapsed if still active
- KILL ^OR(100,+ORIFN,4)
- IF "^6^8^"[(U_$PIECE($GET(^(3)),U,3)_U)
- DO STATUS^ORCSAVE2(+ORIFN,14)
- +3 QUIT
- +4 ;
- ZR ; -- Purged as requested [ack]
- +1 DO DELETE^ORCSAVE2(+ORIFN)
- +2 QUIT
- +3 ;
- ZU ; -- Unable to purge [ack]
- +1 ; update Last Activity
- SET $PIECE(^OR(100,+ORIFN,3),U)=$$NOW^XLFDT
- +2 QUIT
- +3 ;
- OK ; -- Order accepted, FH order # assigned [ack]
- +1 ; FH identifier
- NEW ORSTS
- SET ^OR(100,+ORIFN,4)=PKGIFN
- +2 ;not Diet or NPO
- IF "DN"'[$EXTRACT(PKGIFN)
- SET ORSTS=6
- +3 IF '$TEST
- SET ORSTS=$SELECT($PIECE($GET(^OR(100,+ORIFN,0)),U,8)>ORLOG:8,1:6)
- +4 DO STATUS^ORCSAVE2(+ORIFN,ORSTS)
- +5 QUIT
- +6 ;
- XX ; -- Edited backdoor order (OP recurring meals only)
- +1 DO XX^ORMFH1
- QUIT
- +2 ;
- SN ; -- New backdoor order: return NA msg w/ORIFN
- +1 NEW ODS,ODT,OBR,ORDIALOG,X,I,OI,SEG,ORNEW,ORPARAM,ORTIME,ORSTS,ORDG,ORP,ORTRAIL
- +2 ;I '$D(^VA(200,+ORNP,0)) S ORERR="Missing or invalid ordering provider"Q
- +3 ; Don't require provider until Nature of Order is added
- +4 IF '$GET(DGPMT)
- IF '$DATA(^VA(200,+ORDUZ,0))
- SET ORERR="Missing or invalid entering person"
- QUIT
- +5 IF 'ORSTRT
- SET ORERR="Missing effective date/time"
- QUIT
- +6 ;I '$G(ORL) S ORERR="Missing or invalid patient location" Q
- +7 DO EN1^FHWOR8(ORL,.ORPARAM)
- +8 SET ODS=$ORDER(@ORMSG@(+ORC))
- IF 'ODS
- SET ORERR="Incomplete message"
- QUIT
- +9 SET ODS=ODS_U_@ORMSG@(ODS)
- SET ORSTS=6
- IF '$LENGTH(ORNATR)
- IF ORCAT="I"
- SET ORNATR="S"
- +10 IF $EXTRACT($PIECE(ODS,U,2),1,3)="OBR"
- SET OBR=ODS
- DO IP
- GOTO SN1
- +11 IF $EXTRACT($PIECE(ODS,U,2),1,3)="ODT"
- SET ODT=ODS
- DO TRAY
- GOTO SN1
- +12 IF $EXTRACT($PIECE(ODS,U,2),1,3)'="ODS"
- SET ORERR="Missing or invalid ODS segment"
- QUIT
- +13 IF $PIECE(ODS,"|",2)="ZE"
- DO TF
- GOTO SN1
- +14 IF $PIECE(ODS,"|",4)?1"^^^FH-6".E
- DO ADDL
- GOTO SN1
- +15 IF ORCAT'="I"
- DO OPM^ORMFH1
- GOTO SN1
- +16 IF $PIECE(ODS,"|",4)?1"^^^FH-5".E
- DO NPO
- GOTO SN1
- DIET ; Diet order
- +1 SET ORDIALOG=$ORDER(^ORD(101.41,"AB","FHW1",0))
- SET ORTRAIL="Diet"
- +2 DO GETDLG1^ORCD(ORDIALOG)
- if ORSTRT>ORLOG
- SET ORSTS=8
- +3 SET ORDIALOG($$PTR("START DATE/TIME"),1)=ORSTRT
- +4 if ORSTOP
- SET ORDIALOG($$PTR("STOP DATE/TIME"),1)=ORSTOP
- +5 SET X=$PIECE(ODS,"|",2)
- SET ORDIALOG($$PTR("DELIVERY"),1)=$SELECT($LENGTH(X)=1:X,1:$EXTRACT(X,2))
- +6 ; Comments ??
- +7 SET X=$$ORDITEM^ORM($PIECE(ODS,"|",4))
- +8 IF 'X
- SET ORERR="Missing or invalid diet modification"
- QUIT
- +9 SET I=1
- SET OI=$$PTR("ORDERABLE ITEM")
- SET ORDIALOG(OI,I)=X
- +10 IF $ORDER(@ORMSG@(+ODS))
- FOR
- SET ODS=$ORDER(@ORMSG@(+ODS))
- if ODS'>0
- QUIT
- SET SEG=$EXTRACT(@ORMSG@(+ODS),1,3)
- if SEG="ORC"
- QUIT
- if SEG="MSH"
- QUIT
- IF SEG="ODS"
- Begin DoDot:1
- +11 SET X=$$ORDITEM^ORM($PIECE(@ORMSG@(+ODS),"|",4))
- +12 IF 'X
- SET ORERR="Missing or invalid diet modification"
- QUIT
- +13 SET I=I+1
- SET ORDIALOG(OI,I)=X
- End DoDot:1
- if $DATA(ORERR)
- QUIT
- SN1 ; continue ... save order, post message
- +1 if $DATA(ORERR)
- QUIT
- +2 DO EN^ORCSAVE
- IF '$GET(ORIFN)
- SET ORERR="Cannot create new order"
- QUIT
- +3 DO RELEASE^ORCSAVE2(ORIFN,1,ORLOG,ORDUZ,ORNATR)
- DO SIGSTS^ORCSAVE2(ORIFN,1)
- +4 if '$PIECE($GET(^OR(100,ORIFN,0)),U,8)
- DO DATES^ORCSAVE2(ORIFN,ORSTRT,ORSTOP)
- +5 DO STATUS^ORCSAVE2(ORIFN,ORSTS)
- +6 ; chart copy
- IF $GET(ORL)
- SET ORP(1)=ORIFN_";1^1"
- DO PRINTS^ORWD1(.ORP,+ORL)
- +7 SET ^OR(100,ORIFN,4)=PKGIFN
- +8 QUIT
- +9 ;
- TRAY ; Early/Late tray
- +1 IF 'ORSTOP
- SET ORERR="Missing stop date"
- QUIT
- +2 SET ORDIALOG=$ORDER(^ORD(101.41,"AB","FHW2",0))
- DO GETDLG1^ORCD(ORDIALOG)
- DO EN2^ORCDFH
- +3 SET ORDIALOG($$PTR("START DATE"),1)=ORSTRT
- +4 SET ORDIALOG($$PTR("STOP DATE"),1)=ORSTOP
- +5 NEW DAYS,SCH
- SET DAYS=""
- SET SCH=$PIECE(ORQT,U,2)
- +6 IF $LENGTH(SCH)
- IF SCH'="ONCE"
- FOR I=1:1:$LENGTH(SCH,"~")
- SET X=+$PIECE($PIECE(SCH,"~",I),"J",2)
- SET DAYS=DAYS_$EXTRACT("MTWRFSX",X)
- +7 if $LENGTH(DAYS)
- SET ORDIALOG($$PTR("SCHEDULE"),1)=DAYS
- +8 SET OI=+$ORDER(^ORD(101.43,"S.E/L T",$PIECE(ODT,"|",2)_" TRAY",0))
- SET ORDIALOG($$PTR("ORDERABLE ITEM"),1)=OI
- +9 SET X=$PIECE($PIECE(ODT,"|",3),U,4)
- SET ORDIALOG($$PTR("MEAL"),1)=$EXTRACT(X)
- +10 SET ORDIALOG($$PTR("MEAL TIME"),1)=$PIECE($GET(ORTIME(OI,$EXTRACT(X),+$EXTRACT(X,3))),U,2)
- +11 if $LENGTH($PIECE(ODT,"|",4))
- SET ORDIALOG($$PTR("YES/NO"),1)=1
- +12 QUIT
- +13 ;
- IP ; Isolation/Precautions
- +1 NEW IP
- SET IP=+$PIECE($PIECE(OBR,"|",13),U,4)
- +2 IF IP'>0
- SET ORERR="Missing or invalid isolation type"
- QUIT
- +3 SET ORDIALOG=$ORDER(^ORD(101.41,"AB","FHW3",0))
- DO GETDLG1^ORCD(ORDIALOG)
- +4 SET ORDIALOG($$PTR("ISOLATION TYPE"),1)=IP
- +5 SET ORDIALOG($$PTR("ORDERABLE ITEM"),1)=$ORDER(^ORD(101.43,"S.PREC","ISOLATION PROCEDURES",0))
- +6 QUIT
- +7 ;
- TF ; Tubefeeding
- +1 NEW OI,STR,INSTR,CMMT,I,X,X4,XI,ZQT,QT,QTY,DUR
- +2 SET ORDIALOG=$ORDER(^ORD(101.41,"AB","FHW8",0))
- DO GETDLG1^ORCD(ORDIALOG)
- +3 SET OI=$$PTR("ORDERABLE ITEM")
- SET STR=$$PTR("STRENGTH FH")
- +4 SET INSTR=$$PTR("INSTRUCTIONS")
- SET CMMT=$$PTR("FREE TEXT 1")
- +5 ; Comments ??
- +6 SET I=0
- FOR
- Begin DoDot:1
- +7 ; not ODS segment
- if $EXTRACT($PIECE(ODS,U,2),1,3)'="ODS"
- QUIT
- +8 ; OI
- SET X=$PIECE(ODS,"|",4)
- SET X4=$PIECE(X,U,4)
- +9 ; strength
- if X4["-"
- SET $PIECE(X,U,4)=+X4
- SET X4=+$PIECE(X4,"-",2)
- +10 SET XI=$$ORDITEM^ORM(X)
- IF 'XI
- SET ORERR="Missing or invalid tubefeeding product"
- QUIT
- +11 SET ZQT=$ORDER(@ORMSG@(+ODS))
- IF 'ZQT
- SET ORERR="Missing QT information"
- QUIT
- +12 SET QT=$PIECE(@ORMSG@(ZQT),"|",3)
- SET DUR=$PIECE(QT,U,3)
- +13 SET QTY=+QT_" "_$$UNITS($PIECE($PIECE(QT,U),"&",2))_"/"_$PIECE(QT,U,2)
- +14 if $LENGTH(DUR)
- SET QTY=QTY_" X "_+$EXTRACT(DUR,2,99)_$SELECT($EXTRACT(DUR)="H":"HR",1:"")
- +15 SET I=I+1
- SET ORDIALOG(OI,I)=XI
- SET ORDIALOG(STR,I)=X4
- SET ORDIALOG(INSTR,I)=QTY
- +16 if $LENGTH($PIECE(ODS,"|",5))
- SET ORDIALOG(CMMT,I)=$PIECE(ODS,"|",5)
- End DoDot:1
- SET ODS=$ORDER(@ORMSG@(+ODS))
- if ODS'>0
- QUIT
- if $EXTRACT(@ORMSG@(ODS),1,3)="ORC"
- QUIT
- SET ODS=ODS_U_@ORMSG@(ODS)
- +17 IF ORCAT="O"
- IF ORQT["~"
- DO DATES
- +18 QUIT
- +19 ;
- UNITS(X) ; -- Returns name of unit X
- +1 NEW Y
- SET X=$EXTRACT(X)
- +2 SET Y=$SELECT(X="K":"KCAL",X="C":"CC",X="M":"ML",X="O":"OZ",X="U":"UNITS",X="T":"TBSP",X="G":"GM",1:"")
- +3 QUIT Y
- +4 ;
- NPO ; NPO <uses FHW1 dialog - FHW4 now a quick order>
- +1 SET ORDIALOG=$ORDER(^ORD(101.41,"AB","FHW1",0))
- DO GETDLG1^ORCD(ORDIALOG)
- +2 SET ORDIALOG($$PTR("ORDERABLE ITEM"),1)=$ORDER(^ORD(101.43,"S.DIET","NPO",0))
- +3 SET ORDIALOG($$PTR("START DATE/TIME"),1)=ORSTRT
- if ORSTRT>ORLOG
- SET ORSTS=8
- +4 if ORSTOP
- SET ORDIALOG($$PTR("STOP DATE/TIME"),1)=ORSTOP
- +5 if $LENGTH($PIECE(ODS,"|",5))
- SET ORDIALOG($$PTR("FREE TEXT 1"),1)=$PIECE(ODS,"|",5)
- +6 QUIT
- +7 ;
- ADDL ; Additional order
- +1 SET ORDIALOG=$ORDER(^ORD(101.41,"AB","FHW7",0))
- DO GETDLG1^ORCD(ORDIALOG)
- +2 SET ORDIALOG($$PTR("FREE TEXT 1"),1)=$PIECE(ODS,"|",5)
- +3 IF ORCAT="O"
- IF ORQT["~"
- DO DATES
- +4 QUIT
- +5 ;
- DATES ; -- pull dates out of ORQT
- +1 NEW P,I,X
- SET P=$$PTR("DATE/TIME")
- +2 FOR I=1:1:$LENGTH(ORQT,"~")
- SET X=$PIECE(ORQT,"~",I)
- SET ORDIALOG(P,I)=$$HL7TFM^XLFDT($PIECE(X,U,4))
- +3 SET ORSTRT=$GET(ORDIALOG(P,1))
- SET ORSTOP=$GET(ORDIALOG(P,I))
- +4 QUIT
- +5 ;
- SC ; -- Status Change
- SR ; -- Status Update [ack]
- +1 NEW ORSTS,OROLD
- SET OROLD=$PIECE($GET(^OR(100,+ORIFN,3)),U,3)
- +2 DO DATES^ORCSAVE2(+ORIFN,ORSTRT,ORSTOP)
- +3 SET ORSTS=$SELECT(ORDSTS="DC":1,ORDSTS="IP":6,ORDSTS="ZE":7,ORDSTS="SC":8,1:"")
- +4 if ORSTS
- DO STATUS^ORCSAVE2(+ORIFN,ORSTS)
- +5 ;set 6-node
- IF ORDSTS="DC"
- IF '$DATA(^OR(100,+ORIFN,6))
- Begin DoDot:1
- +6 IF ORNATR'="A"
- IF "DN"[$EXTRACT(PKGIFN)
- SET ORNATR="C"
- if '$LENGTH(OREASON)
- SET OREASON="Replaced with new diet order"
- if ORDUZ<1
- SET ORDUZ=""
- +7 SET ^OR(100,+ORIFN,6)=$SELECT($LENGTH(ORNATR):+$ORDER(^ORD(100.02,"C",ORNATR,0)),1:"")_U_ORDUZ_U_ORLOG_U_U_OREASON
- End DoDot:1
- +8 ; reactivate
- IF OROLD=1
- IF ORSTS=6
- Begin DoDot:1
- +9 NEW X
- SET $PIECE(^OR(100,+ORIFN,3),U,7)=1
- SET X=$PIECE(^(0),U,9)
- KILL ^(6)
- +10 IF 'ORSTOP
- IF X
- SET $PIECE(^OR(100,+ORIFN,0),U,9)=""
- KILL ^OR(100,"AE",X,+ORIFN)
- +11 DO SETALL^ORDD100(+ORIFN)
- End DoDot:1
- +12 QUIT
- +13 ;
- OC ; -- Cancelled <E/L Trays only> / [ack]
- +1 ;rejected new order
- if ORTYPE="ORR"
- GOTO UA
- +2 IF $PIECE($GET(^OR(100,+ORIFN,3)),U,3)=6
- IF $PIECE(^(0),U,8)<ORLOG
- GOTO OD
- +3 SET ^OR(100,+ORIFN,6)=$SELECT($LENGTH(ORNATR):+$ORDER(^ORD(100.02,"C",ORNATR,0)),1:"")_U_ORDUZ_U_ORLOG_U_U_OREASON
- +4 DO UPDATE(13,"DC")
- +5 QUIT
- +6 ;
- CR ; -- Cancelled as requested [ack]
- +1 DO STATUS^ORCSAVE2(+ORIFN,13)
- +2 QUIT
- +3 ;
- OD ; -- Discontinued <Tubefeedings only>
- +1 SET ^OR(100,+ORIFN,6)=$SELECT($LENGTH(ORNATR):+$ORDER(^ORD(100.02,"C",ORNATR,0)),1:"")_U_ORDUZ_U_ORLOG_U_U_OREASON
- +2 DO UPDATE(1,"DC")
- +3 QUIT
- +4 ;
- DR ; -- Discontinued as requested [ack]
- +1 DO STATUS^ORCSAVE2(+ORIFN,1)
- +2 QUIT
- +3 ;
- UA ; -- Unable to Accept [ack]
- +1 ;Rejected
- if '$LENGTH(ORNATR)
- SET ORNATR="X"
- +2 SET ^OR(100,+ORIFN,6)=+$ORDER(^ORD(100.02,"C",ORNATR,0))_U_U_ORLOG_U_U_OREASON
- +3 DO STATUS^ORCSAVE2(+ORIFN,13)
- UC ; -- Unable to Cancel [ack]
- UD ; -- Unable to Discontinue [ack]
- +1 NEW DA
- SET DA=$PIECE(ORIFN,";",2)
- IF DA
- Begin DoDot:1
- +2 ; request rejected
- if $GET(OREJECT)
- SET $PIECE(^OR(100,+ORIFN,8,DA,0),U,15)=13
- +3 if $LENGTH(OREASON)
- SET ^OR(100,+ORIFN,8,DA,1)=OREASON
- End DoDot:1
- +4 QUIT
- +5 ;
- UPDATE(ORSTS,ORACT) ; -- continue processing
- +1 NEW ORX,DA,ORP
- DO DATES^ORCSAVE2(+ORIFN,ORSTRT,ORSTOP)
- +2 if $GET(ORSTS)
- DO STATUS^ORCSAVE2(+ORIFN,ORSTS)
- +3 SET ORX=$$CREATE^ORX1(ORNATR)
- if ORX
- Begin DoDot:1
- +4 SET DA=$$ACTION^ORCSAVE(ORACT,+ORIFN,ORNP,OREASON,ORLOG,ORDUZ)
- +5 IF DA'>0
- SET ORERR="Cannot create new order action"
- QUIT
- +6 DO RELEASE^ORCSAVE2(+ORIFN,DA,ORLOG,ORDUZ,ORNATR)
- +7 DO SIGSTS^ORCSAVE2(+ORIFN,DA)
- +8 IF $GET(ORL)
- SET ORP(1)=+ORIFN_";"_DA_"^1"
- DO PRINTS^ORWD1(.ORP,+ORL)
- +9 SET $PIECE(^OR(100,+ORIFN,3),U,7)=DA
- End DoDot:1
- +10 IF ORACT="DC"
- IF '$$ACTV^ORX1(ORNATR)
- SET $PIECE(^OR(100,+ORIFN,3),U,7)=0
- +11 if ORACT="DC"
- DO CANCEL^ORCSEND(+ORIFN)
- +12 QUIT
- +13 ;
- PTR(NAME) ; -- Returns ien of prompt NAME in Order Dialog file #101.41
- +1 QUIT $ORDER(^ORD(101.41,"AB",$EXTRACT("OR GTX "_NAME,1,63),0))