| 1 | ORCACT1 ;SLC/MKB-Act on orders cont ;7/29/97 08:26
|
---|
| 2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**7,27,56,48,86,92,116,149,215**;Dec 17, 1997
|
---|
| 3 | ;
|
---|
| 4 | FLAG ; -- flag orders
|
---|
| 5 | D EN("FL") Q
|
---|
| 6 | ;
|
---|
| 7 | UNFLAG ; -- unflag orders
|
---|
| 8 | D EN("UF") Q
|
---|
| 9 | ;
|
---|
| 10 | COMMENT ; -- add ward comments to orders
|
---|
| 11 | D EN("CM") Q
|
---|
| 12 | ;
|
---|
| 13 | ALERT ; -- alert provider when results available
|
---|
| 14 | D EN("AL") Q
|
---|
| 15 | ;
|
---|
| 16 | UNHOLD ; -- release hold on orders - no longer in use
|
---|
| 17 | Q ; see UNHOLD^ORCACT instead
|
---|
| 18 | ;
|
---|
| 19 | EN(ORACT) ; -- Actions that don't create orders
|
---|
| 20 | ; ORNMBR = #,#,...,# of selected orders
|
---|
| 21 | ; ORACT = action to be taken
|
---|
| 22 | ;
|
---|
| 23 | ; OREBUILD defined on return if Orders tab needs to be rebuilt
|
---|
| 24 | ;
|
---|
| 25 | N ORLK,ORI,NMBR,IDX,ORIFN,ORDITM,ORERR,ORQUIT
|
---|
| 26 | I '$G(ORNMBR) S ORNMBR=$$ORDERS^ORCHART("") Q:'ORNMBR
|
---|
| 27 | D FREEZE^ORCMENU S VALMBCK="R" K OREBUILD
|
---|
| 28 | F ORI=1:1:$L(ORNMBR,",") S NMBR=$P(ORNMBR,",",ORI) D:NMBR Q:$D(ORQUIT)
|
---|
| 29 | . S IDX=$G(^TMP("OR",$J,ORTAB,"IDX",NMBR)),ORIFN=$P(IDX,U)
|
---|
| 30 | . Q:'ORIFN S:'$P(ORIFN,";",2) ORIFN=+ORIFN_";1"
|
---|
| 31 | . I '$D(^OR(100,+ORIFN,0)) W !,"This order has been deleted!" H 1 Q
|
---|
| 32 | . S ORDITM=$$ORDITEM^ORCACT(ORIFN) D SUBHDR^ORCACT(ORDITM)
|
---|
| 33 | . I '$$VALID^ORCACT0(ORIFN,ORACT,.ORERR) W !,ORERR H 1 Q
|
---|
| 34 | . S ORLK=$$LOCK1^ORX2(+ORIFN) I 'ORLK W !,$P(ORLK,U,2) H 1 Q
|
---|
| 35 | . D @ORACT,UNLK1^ORX2(+ORIFN)
|
---|
| 36 | ENQ Q
|
---|
| 37 | ;
|
---|
| 38 | FL ; -- Flag order ORIFN
|
---|
| 39 | D EN^ORCFLAG
|
---|
| 40 | Q
|
---|
| 41 | ;
|
---|
| 42 | UF ; -- Unflag order ORIFN
|
---|
| 43 | D UN^ORCFLAG
|
---|
| 44 | Q
|
---|
| 45 | ;
|
---|
| 46 | CM ; -- Ward Comments on order ORIFN
|
---|
| 47 | N DIC,DWPK,DIWEPSE,DIWESUB,DDWRW
|
---|
| 48 | S DIC="^OR(100,"_+ORIFN_",8,"_+$P(ORIFN,";",2)_",5,",(DWPK,DIWEPSE)=1
|
---|
| 49 | S DIWESUB=ORDITM,DDWRW="B" ;go to bottom of text
|
---|
| 50 | D EN^DIWE
|
---|
| 51 | Q
|
---|
| 52 | ;
|
---|
| 53 | AL ; -- Alert when results are available for order ORIFN
|
---|
| 54 | S $P(^OR(100,+ORIFN,3),U,10)=1
|
---|
| 55 | W !?10,"... done." H 1
|
---|
| 56 | Q
|
---|
| 57 | ;
|
---|
| 58 | RL ; -- Release hold on order ORIFN [No longer used]
|
---|
| 59 | D EN^ORCSEND(+ORIFN,ORACT,3,1,,,.ORERR)
|
---|
| 60 | W !,"... order "_$S($G(ORERR):"not ",1:"")_"released from hold."
|
---|
| 61 | W:$L($P($G(ORERR),U,2)) !," >> "_$P(ORERR,U,2) H 1
|
---|
| 62 | S OREBUILD=1 ; print?
|
---|
| 63 | Q
|
---|
| 64 | ;
|
---|
| 65 | VERIFY(ORVER) ; -- Verify orders
|
---|
| 66 | N ORLK,ORI,NMBR,IDX,ORIFN,ORDITM,ORES,ORERR,ORSIG,OROLDSTS,ORNEW,ORWAIT
|
---|
| 67 | I "^"[$G(ORVER) W $C(7),!!,"You must be a nurse or clerk to verify these orders!" S VALMBCK="" H 2 Q
|
---|
| 68 | I '$G(ORNMBR) S ORNMBR=$$ORDERS^ORCHART("") Q:'ORNMBR
|
---|
| 69 | D FREEZE^ORCMENU S VALMBCK="R" K OREBUILD
|
---|
| 70 | F ORI=1:1:$L(ORNMBR,",") S NMBR=$P(ORNMBR,",",ORI) D:NMBR Q:$D(ORQUIT)
|
---|
| 71 | . S IDX=$G(^TMP("OR",$J,ORTAB,"IDX",NMBR)),ORIFN=$P(IDX,U)
|
---|
| 72 | . Q:'ORIFN S:'$P(ORIFN,";",2) ORIFN=+ORIFN_";1" Q:$D(ORES(ORIFN))
|
---|
| 73 | . I '$$VALID^ORCACT0(ORIFN,"VR",.ORERR) W !!,$$ORDITEM^ORCACT(ORIFN)_" invalid.",!," >> "_ORERR H 1 Q
|
---|
| 74 | . S ORLK=$$LOCK1^ORX2(+ORIFN) I 'ORLK W !!,$$ORDITEM^ORCACT(ORIFN)_" invalid.",!," >> "_$P(ORLK,U,2) H 1 Q
|
---|
| 75 | . S ORES(ORIFN)="" D REPLCD
|
---|
| 76 | VR1 Q:'$O(ORES(0)) D COMPLX S ORSIG=$S($$ESIG^ORCSIGN:1,1:0)
|
---|
| 77 | I 'ORSIG W !,"Nothing verified!" D UNLOCK H 1 Q
|
---|
| 78 | W !!,"Verifying orders ..."
|
---|
| 79 | S ORIFN=0 F S ORIFN=$O(ORES(ORIFN)) Q:ORIFN'>0 D
|
---|
| 80 | . S OROLDSTS=+$P($G(^OR(100,+ORIFN,3)),U,3)
|
---|
| 81 | . D EN^ORCSEND(ORIFN,"VR","","",,,.ORERR),UNLK1^ORX2(+ORIFN)
|
---|
| 82 | . I $G(ORERR) D Q
|
---|
| 83 | . . W !,$$ORDITEM^ORCACT(ORIFN)_" not verified."
|
---|
| 84 | . . W:$L($P($G(ORERR),U,2)) !," >> "_$P(ORERR,U,2) H 1
|
---|
| 85 | . S ORNEW=+$P($G(^OR(100,+ORIFN,3)),U,3) I ORNEW'=OROLDSTS W !,$$ORDITEM^ORCACT(ORIFN)_" is now "_$$STS(ORNEW)_"." S ORWAIT=1
|
---|
| 86 | S OREBUILD=1 D:'$D(XQAID) CKALERT I $G(ORWAIT) H 2
|
---|
| 87 | VRQ Q
|
---|
| 88 | ;
|
---|
| 89 | STS(X) ; -- Return name of status X
|
---|
| 90 | N Y S Y=$P($G(^ORD(100.01,+$G(X),0)),U)
|
---|
| 91 | Q Y
|
---|
| 92 | ;
|
---|
| 93 | REPLCD ; -- Ck for unverified replaced orders for ORIFN, add to ORES(order#)
|
---|
| 94 | ; [Expects ORVER; also called from VERIFY^ORWDXA,VERIFY^ORRCOR]
|
---|
| 95 | N OR3,ORIG,ORFLD,ORDA,ORI,ORLK
|
---|
| 96 | S ORFLD=$S($G(ORVER)="N":8,1:10),ORDA=+$P(ORIFN,";",2)
|
---|
| 97 | I ORDA>1 D Q ;ck for prior unverified actions
|
---|
| 98 | . ;Q:$P($G(^OR(100,+ORIFN,8,ORDA,0)),U,2)'="XX"
|
---|
| 99 | . S ORI=0 F S ORI=$O(^OR(100,+ORIFN,8,ORI)) Q:ORI<1 Q:ORI'<ORDA D
|
---|
| 100 | .. Q:$P($G(^OR(100,+ORIFN,8,ORI,0)),U,ORFLD) ;already verified
|
---|
| 101 | .. S ORLK=$$LOCK1^ORX2(+ORIFN) Q:'ORLK
|
---|
| 102 | .. S ORES(+ORIFN_";"_ORI)=""
|
---|
| 103 | S OR3=$G(^OR(100,+ORIFN,3)) Q:$P(OR3,U,11)'=1
|
---|
| 104 | S ORIG=+$P(OR3,U,5) Q:'ORIG Q:$P($G(^OR(100,ORIG,3)),U,3)'=12
|
---|
| 105 | S ORDA=0 F S ORDA=$O(^OR(100,ORIG,8,ORDA)) Q:ORDA'>0 I '$P($G(^(ORDA,0)),U,ORFLD) D
|
---|
| 106 | . S ORLK=$$LOCK1^ORX2(ORIG) Q:'ORLK
|
---|
| 107 | . S ORES(ORIG_";"_ORDA)=""
|
---|
| 108 | Q
|
---|
| 109 | ;
|
---|
| 110 | COMPLX ; -- Ck for other child orders to be verified at same time
|
---|
| 111 | N IFN,DAD,CHLD,ALL,P,X,I
|
---|
| 112 | S P=$S(ORVER="N":9,ORVER="C":11,ORVER="R":19,1:0) Q:P<1
|
---|
| 113 | S IFN=0 F S IFN=$O(ORES(IFN)) Q:IFN<1 D
|
---|
| 114 | . S X=+$P($G(^OR(100,+IFN,0)),U,14) Q:$$NMSP^ORCD(X)'["PS"
|
---|
| 115 | . S X=$P($G(^OR(100,+IFN,8,+$P(IFN,";",2),0)),U,2) Q:X'="NW"&(X'="XX")
|
---|
| 116 | . I $P($G(^OR(100,+IFN,3)),U,9) S DAD(+$P(^(3),U,9))=""
|
---|
| 117 | Q:'$O(DAD(0)) S IFN=0 F S IFN=+$O(DAD(IFN)) Q:IFN<1 D
|
---|
| 118 | . S CHLD=0,ALL=1
|
---|
| 119 | . F S CHLD=+$O(^OR(100,IFN,2,CHLD)) Q:CHLD<1 F X="NW","XX" D
|
---|
| 120 | .. S I=+$O(^OR(100,CHLD,8,"C",X,0)) Q:I<1
|
---|
| 121 | .. Q:$P($G(^OR(100,CHLD,8,I,0)),U,P) Q:$D(ORES(CHLD_";"_I))
|
---|
| 122 | .. S ORES(CHLD_";"_I)="",ALL=0
|
---|
| 123 | . Q:ALL S X=$$ORDITEM^ORCACT(IFN) D SUBHDR^ORCACT(X)
|
---|
| 124 | . W !,"All doses of this complex order must be verified together;"
|
---|
| 125 | . W !,"adding remaining doses to signature list..."
|
---|
| 126 | Q
|
---|
| 127 | ;
|
---|
| 128 | CKALERT ; -- Ck if Unverified Orders alerts can be deleted
|
---|
| 129 | N ORNOW,ORBEG,ORLIST,ORALL,ORMEDS S ORNOW=$$NOW^XLFDT
|
---|
| 130 | S:'$G(ORWARD) ORBEG=$$FMADD^XLFDT(ORNOW,"-30") I $G(ORWARD) D
|
---|
| 131 | . N DFN,VAIN,VAERR S DFN=+ORVP D INP^VADPT
|
---|
| 132 | . S ORBEG=$S($G(VAIN(7)):$P(VAIN(7),U),1:$$FMADD^XLFDT(ORNOW,-30))
|
---|
| 133 | D EN^ORQ1(ORVP,,9,,ORBEG,ORNOW) ;see if any unverified orders remain
|
---|
| 134 | I $G(ORLIST),$G(^TMP("ORR",$J,ORLIST,"TOT")) D ;see if any are meds
|
---|
| 135 | . N ORRX,ORGRP,I,IFN,DG S ORALL=1
|
---|
| 136 | . S ORRX=+$O(^ORD(100.98,"B","RX",0)) D GRP^ORQ1(ORRX)
|
---|
| 137 | . S I=0 F S I=$O(^TMP("ORR",$J,ORLIST,I)) Q:I'>0 S IFN=+^(I),DG=+$P($G(^OR(100,IFN,0)),U,11) I $D(ORGRP(DG)) S ORMEDS=1 Q
|
---|
| 138 | D:'$G(ORALL) DELALRT("UNVERIFIED ORDER")
|
---|
| 139 | D:'$G(ORMEDS) DELALRT("UNVERIFIED MEDICATION ORDER")
|
---|
| 140 | Q
|
---|
| 141 | ;
|
---|
| 142 | DELALRT(X) ; -- delete alert X
|
---|
| 143 | N ORNIFN,XQAKILL,XQAID
|
---|
| 144 | S ORNIFN=+$O(^ORD(100.9,"B",X,0)) Q:ORNIFN'>0
|
---|
| 145 | S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN)
|
---|
| 146 | S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN
|
---|
| 147 | D DELETEA^XQALERT
|
---|
| 148 | Q
|
---|
| 149 | ;
|
---|
| 150 | UNLOCK ; -- Unlock orders in ORES(ORIFN) [from VR1]
|
---|
| 151 | F S ORIFN=$O(ORES(ORIFN)) Q:ORIFN'>0 D UNLK1^ORX2(+ORIFN)
|
---|
| 152 | Q
|
---|
| 153 | ;
|
---|
| 154 | SIGNREQD(IFN) ; -- Returns 2, 1, or 0, if order/actions need ES
|
---|
| 155 | Q +$P($G(^OR(100,IFN,0)),U,16)
|
---|
| 156 | ;
|
---|
| 157 | SIGN ; -- Sign orders [no longer used]
|
---|
| 158 | D EN^ORCSIGN
|
---|
| 159 | Q
|
---|
| 160 | ;
|
---|
| 161 | COMPLETE ; -- complete orders
|
---|
| 162 | N ORLK,ORI,NMBR,IDX,ORIFN,ORDITM,ORES,ORERR,ORSIG,ORSTOP
|
---|
| 163 | I '$G(ORNMBR) S ORNMBR=$$ORDERS^ORCHART("complete") Q:'ORNMBR
|
---|
| 164 | D FREEZE^ORCMENU S VALMBCK="R" K OREBUILD
|
---|
| 165 | F ORI=1:1:$L(ORNMBR) S NMBR=$P(ORNMBR,",",ORI) D:NMBR Q:$D(ORQUIT)
|
---|
| 166 | . S IDX=$G(^TMP("OR",$J,ORTAB,"IDX",NMBR)),ORIFN=$P(IDX,U)
|
---|
| 167 | . Q:'ORIFN S:'$P(ORIFN,";",2) ORIFN=+ORIFN_";1"
|
---|
| 168 | . I '$$VALID^ORCACT0(ORIFN,"CP",.ORERR) W !!,$$ORDITEM^ORCACT(ORIFN)_" invalid.",!," >> "_ORERR H 1 Q
|
---|
| 169 | . S ORLK=$$LOCK1^ORX2(+ORIFN) I 'ORLK W !!,$$ORDITEM^ORCACT(ORIFN)_" invalid.",!," >> "_$P(ORLK,U,2) H 1 Q
|
---|
| 170 | . S ORES(ORIFN)=""
|
---|
| 171 | CP1 Q:'$O(ORES(0)) S ORSIG=$S($$ESIG^ORCSIGN:1,1:0)
|
---|
| 172 | I 'ORSIG W !,"Nothing completed!" D UNLOCK H 1 Q
|
---|
| 173 | W !!,"Completing orders ..." S ORSTOP=+$E($$NOW^XLFDT,1,12),ORIFN=0
|
---|
| 174 | F S ORIFN=$O(ORES(ORIFN)) Q:ORIFN'>0 D COMP^ORCSAVE2(ORIFN,DUZ,ORSTOP),UNLK1^ORX2(+ORIFN)
|
---|
| 175 | S OREBUILD=1
|
---|
| 176 | CPQ Q
|
---|