| 1 | OREVNT ; SLC/MKB - Event delayed orders ;3/31/04  13:42 [4/9/04 10:20am]
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**141,177,195**;Dec 17, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | EN ; -- view/add EVOs
 | 
|---|
| 5 |  N X,ORP,ORQUIT S VALMBCK=""
 | 
|---|
| 6 |  I $G(OREVENT) D  Q:$G(ORQUIT)
 | 
|---|
| 7 |  . S X=$$ACTIVE I X D EX S ORQUIT=1 Q  ;return to Active Orders
 | 
|---|
| 8 |  . I X="^" S ORQUIT=1 Q
 | 
|---|
| 9 |  D FULL^VALM1 S VALMBCK="R"
 | 
|---|
| 10 |  W !!,$$CURRENT
 | 
|---|
| 11 |  S:'$G(ORL) ORL=$$LOCATION^ORCMENU1 Q:ORL="^"
 | 
|---|
| 12 |  S ORP=$$PTEVENT(+ORVP) Q:ORP="^"
 | 
|---|
| 13 |  S $P(^TMP("OR",$J,"ORDERS",0),U,3,4)=";;;;;;;"_+ORP_U,OREVENT=+ORP
 | 
|---|
| 14 |  D TAB^ORCHART(ORTAB,1) ;redisplay new order sheet/view
 | 
|---|
| 15 |  Q
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 | EX ; -- Back to Active Orders
 | 
|---|
| 18 |  I +$G(OREVENT),'$G(^ORE(100.2,OREVENT,1)),$$EMPTY^OREVNTX(OREVENT) D CANCEL^OREVNTX(OREVENT) ;cancel empty events
 | 
|---|
| 19 |  K OREVENT S $P(^TMP("OR",$J,"ORDERS",0),U,3,4)="^1" ;default view
 | 
|---|
| 20 |  D TAB^ORCHART(ORTAB,1)
 | 
|---|
| 21 |  Q
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 | ED ; -- Change delay event
 | 
|---|
| 24 |  N ORI,NMBR,IDX,ORIFN,ORLK,ORDERS,OREVT,ORQUIT,X,EVT
 | 
|---|
| 25 |  I '$G(ORNMBR) S ORNMBR=$$ORDERS^ORCHART("change the delay event") Q:'ORNMBR
 | 
|---|
| 26 |  D FREEZE^ORCMENU S VALMBCK="R" K OREBUILD
 | 
|---|
| 27 |  F ORI=1:1:$L(ORNMBR) S NMBR=$P(ORNMBR,",",ORI) D:NMBR  Q:$D(ORQUIT)
 | 
|---|
| 28 |  . S IDX=$G(^TMP("OR",$J,ORTAB,"IDX",NMBR)),ORIFN=$P(IDX,U)
 | 
|---|
| 29 |  . Q:'ORIFN  S:'$P(ORIFN,";",2) ORIFN=+ORIFN_";1" ;unsign/unrel only
 | 
|---|
| 30 |  . I '$$VALID^ORCACT0(ORIFN,"EV",.ORERR) W !!,$$ORDITEM^ORCACT(ORIFN)_" invalid.",!,"  >> "_ORERR H 1 Q
 | 
|---|
| 31 |  . S ORLK=$$LOCK1^ORX2(+ORIFN) I 'ORLK W !!,$$ORDITEM^ORCACT(ORIFN)_" invalid.",!,"  >> "_$P(ORLK,U,2) H 1 Q
 | 
|---|
| 32 |  . S ORDERS(+ORIFN)=""
 | 
|---|
| 33 | ED1 Q:'$O(ORDERS(0))  I $$DELAYED D  Q:$G(ORQUIT)  G:$G(OREBUILD) ED3
 | 
|---|
| 34 |  . S X=$$NODELAY ;remove event?
 | 
|---|
| 35 |  . I X="^" W !,"Nothing changed!" D UNLOCK S ORQUIT=1 H 1 Q
 | 
|---|
| 36 |  . Q:'X  W !!,"Removing release event ..."
 | 
|---|
| 37 |  . S ORIFN=0 F  S ORIFN=$O(ORDERS(ORIFN)) Q:ORIFN<1  D
 | 
|---|
| 38 |  .. S EVT=+$P($G(^OR(100,ORIFN,0)),U,17),OREVT(EVT)=""
 | 
|---|
| 39 |  .. D CHGEVT^OREVNTX(ORIFN,""),UNLK1^ORX2(ORIFN) W "."
 | 
|---|
| 40 |  . W " done." S OREBUILD=1
 | 
|---|
| 41 | ED2 W !!,$$CURRENT S ORP=$$PTEVENT(+ORVP,1)
 | 
|---|
| 42 |  I ORP="^" W !,"Nothing changed!" D UNLOCK H 1 Q
 | 
|---|
| 43 |  W !!,"Setting release event to "_$P(ORP,U,2)_" ..."
 | 
|---|
| 44 |  S ORIFN=0 F  S ORIFN=$O(ORDERS(ORIFN)) Q:ORIFN<1  D
 | 
|---|
| 45 |  . S EVT=+$P($G(^OR(100,ORIFN,0)),U,17) Q:EVT=+ORP  S OREVT(EVT)=""
 | 
|---|
| 46 |  . D CHGEVT^OREVNTX(ORIFN,+ORP),UNLK1^ORX2(ORIFN) W "."
 | 
|---|
| 47 |  W " done." S OREBUILD=1
 | 
|---|
| 48 | ED3 S EVT=0 F  S EVT=$O(OREVT(EVT)) Q:EVT<1  D  ;terminate any events?
 | 
|---|
| 49 |  . Q:$G(^ORE(100.2,EVT,1))  Q:'$$EMPTY^OREVNTX(EVT)  ;active,empty
 | 
|---|
| 50 |  . ;W !!,$P($$NAME^OREVNTX(EVT)," ",2,99)_" has no more delayed orders."
 | 
|---|
| 51 |  . ;S DIR(0)="YA",DIR("A")="Do you want to cancel this event? "
 | 
|---|
| 52 |  . ;S DIR("?")="Enter NO if you wish to enter new delayed orders for this event, otherwise enter YES to terminate it."
 | 
|---|
| 53 |  . ;S DIR("B")="YES" D ^DIR I $D(DTOUT)!$D(DUOUT) S ORQUIT=1 Q
 | 
|---|
| 54 |  . D CANCEL^OREVNTX(EVT) S X=$P($$NAME^OREVNTX(EVT)," ",2,99)
 | 
|---|
| 55 |  . W !,"   ... "_X_" event cancelled." H 1
 | 
|---|
| 56 |  . D:$G(OREVENT) EX ;Change view back to Active
 | 
|---|
| 57 |  Q
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 | ACTIVE() ; -- Return to Active orders?
 | 
|---|
| 60 |  N X,Y,DIR S DIR(0)="YA"
 | 
|---|
| 61 |  S DIR("A")="Return to viewing Active Orders? ",DIR("B")="YES"
 | 
|---|
| 62 |  S DIR("?")="Enter NO to select another delayed order sheet to view, or YES to exit delayed mode and return to your default Orders view."
 | 
|---|
| 63 |  D ^DIR S:$D(DTOUT)!$D(DUOUT) Y="^"
 | 
|---|
| 64 |  Q Y
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 | DELAYED() ; -- Return 1 or 0, if current view=EDOs
 | 
|---|
| 67 |  I $G(OREVENT) Q 1
 | 
|---|
| 68 |  N X,Y S X=$P($G(^TMP("OR",$J,ORTAB,0)),U,3),X=$P(X,";",3)
 | 
|---|
| 69 |  S Y=$S("^15^16^17^24^25^"[(U_X_U):1,1:0)
 | 
|---|
| 70 |  Q Y
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 | NODELAY() ; -- Return 1 or 0, if event should be removed
 | 
|---|
| 73 |  N X,Y,DIR S DIR(0)="YA"
 | 
|---|
| 74 |  S DIR("A")="Remove the release event from these orders? ",DIR("B")="NO"
 | 
|---|
| 75 |  S DIR("?")="Enter YES to allow these orders to be released immediately upon signature, or NO to continue and keep this event or select another."
 | 
|---|
| 76 |  D ^DIR S:$D(DTOUT)!$D(DUOUT) Y="^"
 | 
|---|
| 77 |  Q Y
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 | UNLOCK ; -- Unlock orders after ^
 | 
|---|
| 80 |  F  S ORIFN=$O(ORDERS(ORIFN)) Q:ORIFN'>0  D UNLK1^ORX2(+ORIFN)
 | 
|---|
| 81 |  Q
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 | CURRENT() ; -- Display current patient data
 | 
|---|
| 84 |  N Y S Y=ORPNM_" is currently"_$S('$G(ORWARD):" not",1:"")_" admitted"_$S($G(ORWARD)&$G(ORTS):" to "_$P($G(^DIC(45.7,+ORTS,0)),U),1:"")_"."
 | 
|---|
| 85 |  Q Y
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 | PTEVENT(DFN,DLGONLY) ; -- Select Patient Event [or create new one]
 | 
|---|
| 88 |  ;    Pass in DLGONLY=1 to skip new event's Order Set (from Copy, Xfer)
 | 
|---|
| 89 |  ;    Returns Pt Evt ien ^ Event name
 | 
|---|
| 90 |  I '$G(DFN)!'$D(^DPT(+$G(DFN),0)) Q "^" ;invalid patient
 | 
|---|
| 91 |  N ORPTEVT,OREVT,X,Y,DIR,DTOUT,DUOUT,ORDIV,DOMAIN,OREV0,ORDAD,ORDIALOG,ORDSET,ORIFN,ORPTLK,OREBUILD,OREVENT
 | 
|---|
| 92 |  I $D(^ORE(100.2,"AE",DFN)) D  ;pending events
 | 
|---|
| 93 |  . N CNT,EVT S (CNT,EVT)=0,DOMAIN=100.2 K ORPTEVT,DIR
 | 
|---|
| 94 |  . F  S EVT=+$O(^ORE(100.2,"AE",DFN,EVT)) Q:EVT'>0  S Y=+$O(^(EVT,0)) D
 | 
|---|
| 95 |  .. Q:$G(^ORE(100.2,Y,1))  Q:$$LAPSED^OREVNTX(Y)  Q:$D(^ORE(100.2,"DAD",Y))
 | 
|---|
| 96 |  .. S X=$P($G(^ORD(100.5,EVT,0)),U,8),CNT=CNT+1,ORPTEVT(CNT)=Y_U_X
 | 
|---|
| 97 |  .. S X=$$UP^XLFSTR(X),ORPTEVT("B",X)=Y
 | 
|---|
| 98 |  . Q:CNT'>0  S DIR("A",1)="Delayed orders exist for "_ORPNM_" for the following events:"
 | 
|---|
| 99 |  . F I=1:1:CNT S DIR("A",I+1)=$J(I,5)_"  "_$P(ORPTEVT(I),U,2)
 | 
|---|
| 100 |  . S DIR("A",CNT+2)="To review or add delayed orders, select from (1-"_CNT_") or enter a new event."
 | 
|---|
| 101 |  S X=+$$GET^XPAR("ALL","OREVNT DEFAULT")
 | 
|---|
| 102 |  I X S Y=$P($G(^ORD(100.5,X,0)),U,8),DIR("B")=$$UP^XLFSTR(Y)
 | 
|---|
| 103 | PT1 S I=0 F  S I=+$O(DIR("A",I)) Q:I<1  W !,DIR("A",I)
 | 
|---|
| 104 |  W !,"Select RELEASE EVENT: "_$S($L($G(DIR("B"))):DIR("B")_"//",1:"")
 | 
|---|
| 105 |  R X:DTIME I '$T!(X["^")!(X=""&'$D(DIR("B"))) Q "^"
 | 
|---|
| 106 |  S:X="" X=$G(DIR("B")) I X["?" D HELP^OREVNT(X) G PT1
 | 
|---|
| 107 |  I $O(DIR("A",0)) S ORPTEVT=$$FIND^ORCDLG2("ORPTEVT",X) G:$L(ORPTEVT) PTQ
 | 
|---|
| 108 |  S OREVT="" D  I OREVT<1 G PT1 ;reask
 | 
|---|
| 109 |  . N DIC,DIR,D S DIC="^ORD(100.5,",DIC(0)="EQZS",D="C",DIC("W")=""
 | 
|---|
| 110 |  . S DIC("S")="I '$D(^ORD(100.5,""DAD"",Y))"
 | 
|---|
| 111 |  . ;S:'$G(ORWARD) DIC("S")="I $P(^(0),U,2)=""A"""
 | 
|---|
| 112 |  . D IX^DIC S:Y>0 OREVT=+Y_U_$P(Y(0),U,8)
 | 
|---|
| 113 |  I $$MATCH(DFN,+OREVT),'$$CONT G PT1 ;reask
 | 
|---|
| 114 |  S OREV0=$G(^ORD(100.5,+OREVT,0)),ORDAD=+$P(OREV0,U,12)
 | 
|---|
| 115 |  S ORDIALOG=+$P(OREV0,U,4),ORDSET=+$P(OREV0,U,5)
 | 
|---|
| 116 |  I 'ORDIALOG,'ORDSET!$G(DLGONLY),'ORDAD S ORPTEVT=$$NEW(DFN,+OREVT) S:ORPTEVT<1 ORPTEVT="^" G PTQ
 | 
|---|
| 117 | PT2 S ORPTLK=$$LOCK^ORX2(DFN) I 'ORPTLK W !!,$C(7),$P(ORPTLK,U,2) H 2 Q "^"
 | 
|---|
| 118 |  S ORNP=$$PROVIDER^ORCMENU1 I ORNP="^" Q "^"
 | 
|---|
| 119 |  I ORDAD D  I $G(ORIFN)="^" Q "^"  ;parent
 | 
|---|
| 120 |  . N OREVT S OREVT=ORDAD,ORDIALOG=+$P($G(^ORD(100.5,ORDAD,0)),U,4)
 | 
|---|
| 121 |  . I ORDIALOG S ORIFN=+$$ORDER^ORCDLG(ORDIALOG) I ORIFN<1 S ORIFN="^" Q
 | 
|---|
| 122 |  . S ORPTEVT=$$NEW(DFN,ORDAD,$G(ORIFN)),ORDIALOG="" K ORIFN
 | 
|---|
| 123 |  I ORDIALOG S ORIFN=+$$ORDER^ORCDLG(ORDIALOG) I ORIFN<1 Q "^"
 | 
|---|
| 124 |  S ORPTEVT=$$NEW(DFN,+OREVT,$G(ORIFN)) I ORPTEVT<1 Q "^"
 | 
|---|
| 125 |  I ORDSET,'$G(DLGONLY) S OREVENT=+ORPTEVT D EN^ORCDLG(ORDSET) K ^TMP("ORECALL",$J)
 | 
|---|
| 126 |  D:'$D(^TMP("ORNEW",$J)) UNLOCK^ORX2(DFN) ;unlock if no new orders
 | 
|---|
| 127 | PTQ Q ORPTEVT
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | HELP(RSP) ; -- ?help for DIR Event lookup
 | 
|---|
| 130 |  N X,Y,Z,CNT,DONE
 | 
|---|
| 131 |  W !,"Select the release event for which you wish to delay orders."
 | 
|---|
| 132 |  W !,"Choose from:" S CNT=1
 | 
|---|
| 133 |  S X="" F  S X=$O(^ORD(100.5,"C",X)) Q:X=""  D  Q:$G(DONE)
 | 
|---|
| 134 |  . S Y=0 F  S Y=$O(^ORD(100.5,"C",X,Y)) Q:Y<1  D  Q:$G(DONE)
 | 
|---|
| 135 |  .. Q:$O(^ORD(100.5,"DAD",Y,0))  ;Parent event
 | 
|---|
| 136 |  .. S TYPE=$P($G(^ORD(100.5,Y,0)),U,2)
 | 
|---|
| 137 |  .. I RSP="?" Q:TYPE="A"&$G(ORWARD)  Q:TYPE'="A"&'$G(ORWARD)
 | 
|---|
| 138 |  .. W !,"   "_X S CNT=CNT+1 Q:CNT'>(IOSL-3)  S CNT=0
 | 
|---|
| 139 |  .. W !,"   '^' TO STOP: " R Z:DTIME S:'$T!(Z["^") DONE=1
 | 
|---|
| 140 |  Q
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 | NEW(DFN,EVT,IFN) ; -- Create new Patient Event in #100.2
 | 
|---|
| 143 |  I '$G(DFN) Q "^"
 | 
|---|
| 144 |  N I,HDR,LAST,TOTAL,DA,ADM,DAD,X0
 | 
|---|
| 145 |  F I=1:1:10 L +^ORE(100.2,0):1 Q:$T  H 2
 | 
|---|
| 146 |  I '$T Q "^"
 | 
|---|
| 147 |  S HDR=$G(^ORE(100.2,0)),TOTAL=+$P(HDR,U,4),LAST=$O(^ORE(100.2,"?"),-1)
 | 
|---|
| 148 |  S I=LAST F I=(I+1):1 Q:'$D(^ORE(100.2,I,0))
 | 
|---|
| 149 |  S DA=I,$P(HDR,U,3,4)=DA_U_(TOTAL+1),DFN=+DFN
 | 
|---|
| 150 |  S ^ORE(100.2,0)=HDR ;195 Moved unlock to later in code
 | 
|---|
| 151 |  S X0=$G(^ORD(100.5,+$G(EVT),0)) I $P(X0,U,12) D  ;link to parent event
 | 
|---|
| 152 |  . S DAD=+$P(X0,U,12),$P(X0,U,2)=$P($G(^ORD(100.5,DAD,0)),U,2)
 | 
|---|
| 153 |  . S DAD=+$O(^ORE(100.2,"AE",DFN,DAD,0)) Q:DAD<1
 | 
|---|
| 154 |  . S $P(^ORE(100.2,DA,1),U,5)=DAD,^ORE(100.2,"DAD",DAD,DA)=""
 | 
|---|
| 155 |  S ADM=$S('$G(EVT):$G(VAIP(13)),$P(X0,U,2)="A":"",$P(X0,U,2)="T"&$$NHCU(EVT):"",1:+$G(^DPT(DFN,.105)))
 | 
|---|
| 156 |  S ^ORE(100.2,"B",DFN,DA)="" S:$G(IFN) IFN=+IFN
 | 
|---|
| 157 |  S ^ORE(100.2,DA,0)=DFN_U_$G(EVT)_U_ADM_U_$G(IFN)_U_+$E($$NOW^XLFDT,1,12)_U_$G(DUZ)
 | 
|---|
| 158 |  S:$G(EVT) ^ORE(100.2,"E",EVT,DA)="",^ORE(100.2,"AE",DFN,EVT,DA)=""
 | 
|---|
| 159 |  I $G(IFN) S ^ORE(100.2,"AO",IFN,DA)="",$P(^OR(100,IFN,0),U,17)=DA,^OR(100,"AEVNT",DFN_";DPT(",DA,IFN)=""
 | 
|---|
| 160 |  L -^ORE(100.2,0) ;195 Unlock after global is set
 | 
|---|
| 161 |  Q DA
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 | NHCU(OREVT) ; -- Returns 1 or 0, if EVT is to NHCU
 | 
|---|
| 164 |  N ORI,ORX,ORY S (ORI,ORY)=0
 | 
|---|
| 165 |  F  S ORI=$O(^ORD(100.5,+$G(OREVT),"TS",ORI)) Q:ORI<1  S ORX=+$G(^(ORI,0)) I $$GET1^DIQ(45.7,ORX_",","SPECIALTY:SERVICE")="NHCU" S ORY=1 Q  ;DBIA #1154
 | 
|---|
| 166 |  Q ORY
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 | DELETE(DA) ; -- Delete Patient Event
 | 
|---|
| 169 |  N DIK S DIK="^ORE(100.2," D:$G(DA) ^DIK
 | 
|---|
| 170 |  Q
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 | MATCH(DFN,EVT) ; -- Does Pt's current data match selected Event?
 | 
|---|
| 173 |  N X0,Y,LOC,WD,TS,PEVT ;177 This section updated to account for child events
 | 
|---|
| 174 |  S PEVT=$P($G(^ORD(100.5,EVT,0)),U,12) ;177 Is this a child event?
 | 
|---|
| 175 |  S X0=$G(^ORD(100.5,$S($G(PEVT):PEVT,1:EVT),0)),Y=1 ;177
 | 
|---|
| 176 |  I "^D^O^M^"[(U_$P(X0,U,2)_U) S Y=0 G MQ
 | 
|---|
| 177 |  S LOC=$S($G(ORL):+ORL,1:+$$CURRLOC(DFN)),WD=+$G(^SC(LOC,42))
 | 
|---|
| 178 |  I $$DIV^ORMEVNT(LOC)'=$P(X0,U,3) S Y=0 G MQ
 | 
|---|
| 179 |  S TS=$S($G(ORTS):+ORTS,1:+$G(^DPT(DFN,.103)))
 | 
|---|
| 180 |  I $O(^ORD(100.5,$S($G(PEVT):PEVT,1:EVT),"TS",0)),'$D(^("B",TS)) S Y=0 G MQ ;177
 | 
|---|
| 181 |  I $O(^ORD(100.5,$S($G(PEVT):PEVT,1:EVT),"LOC",0)),'$D(^("B",WD)) S Y=0 G MQ ;177
 | 
|---|
| 182 | MQ Q Y
 | 
|---|
| 183 |  ;
 | 
|---|
| 184 | CURRLOC(DFN) ; -- Return current Hospital Location (ptr to #44) of patient DFN
 | 
|---|
| 185 |  N X,Y S X=$P($G(^DPT(DFN,.1)),U),Y=""
 | 
|---|
| 186 |  I $L(X) S X=+$O(^DIC(42,"B",X,0)),Y=+$G(^DIC(42,X,44))
 | 
|---|
| 187 |  Q Y
 | 
|---|
| 188 |  ;
 | 
|---|
| 189 | CONT() ; -- ok to continue?
 | 
|---|
| 190 |  N X,Y,DIR
 | 
|---|
| 191 |  S DIR("A",1)=ORPNM_" is already assigned to "_$P($G(^DIC(45.7,+$G(ORTS),0)),U)_" on "_$P($G(^SC(+$G(ORL),0)),U)_"!"
 | 
|---|
| 192 |  S DIR(0)="YA",DIR("A")="Do you still want to add future orders? "
 | 
|---|
| 193 |  S DIR("?")="Enter YES to add orders that will be delayed until this event occurs in the future, or NO to quit."
 | 
|---|
| 194 |  S DIR("B")="NO" W ! D ^DIR S:$D(DTOUT)!$D(DUOUT) Y="^"
 | 
|---|
| 195 |  Q Y
 | 
|---|