1 | ORMPS2 ;SLC/MKB - Process Pharmacy ORM msgs cont ; 1/26/07 11:58am
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**94,116,129,134,186,190,195,215,265**;Dec 17, 1997;Build 17
|
---|
3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | FINISHED() ; -- new order [SN^ORMPS] due to finishing?
|
---|
6 | N Y,ORIG,TYPE,ORIG4 S Y=0
|
---|
7 | S ORIG=+$P(ZRX,"|",2),TYPE=$P(ZRX,"|",4),ORIG4=$G(^OR(100,ORIG,4))
|
---|
8 | I ORIG,TYPE="E",ORIG4?1.N1"P"!(ORIG4?1.N1"S") S ORIFN=+ORIG,Y=1
|
---|
9 | Q Y
|
---|
10 | ;
|
---|
11 | WPX() ; -- Compare comments in @ORMSG@(NTE) with order ORIFN
|
---|
12 | ; Returns 1 if different, or 0 if same
|
---|
13 | N NTE,SPINST,Y,I,J,X,X1 S Y=0
|
---|
14 | S NTE=+$$NTE^ORMPS1(21),SPINST=$S(NTE:$P(@ORMSG@(NTE),"|",4),1:"")
|
---|
15 | S I=+$O(^OR(100,+ORIFN,4.5,"ID","COMMENT",0)) I I'>0 S:$L(SPINST) Y=1 G WQ
|
---|
16 | S X=$G(^OR(100,+ORIFN,4.5,I,2,1,0)) ;1st line
|
---|
17 | I '$O(^OR(100,+ORIFN,4.5,I,2,1)) S:X'=SPINST Y=1 G WQ
|
---|
18 | S J=1 F S J=$O(^OR(100,+ORIFN,4.5,I,2,J)) Q:J'>0 S X1=$G(^(J,0)) D Q:$L(X)'<240
|
---|
19 | . I ($L(X)+$L(X1)+1)'>240 S X=X_" "_X1 Q
|
---|
20 | . S X=X_" "_$E(X1,1,239-$L(X))
|
---|
21 | S:X'=SPINST Y=1 ;changed
|
---|
22 | WQ Q Y
|
---|
23 | ;
|
---|
24 | IVX() ; -- Compare ORMSG to Inpt order ORIFN if IV, return 0 if 'diff or 'IV
|
---|
25 | N Y,RXC,DG,OI,PSOI,XC,RATE,ORA,ORB,ORX,I,J,OI0,INST,VOL,STR,UNT
|
---|
26 | S RXC=$$RXC^ORMPS,Y=0 I RXC'>0 Q Y ;not IV of any kind
|
---|
27 | S DG=+$P($G(^OR(100,+ORIFN,0)),U,11),DG=$P($G(^ORD(100.98,DG,0)),U,3)
|
---|
28 | I DG'="IV RX",DG'="TPN" D Q Y ;not fluid
|
---|
29 | . I $P(ZRX,"|",7)'="" S Y=1 Q
|
---|
30 | . I $$NUMADDS^ORMPS1>1 S Y=1 Q
|
---|
31 | . S OI=$$VALUE("ORDERABLE"),PSOI=+$P($G(^ORD(101.43,+OI,0)),U,2)
|
---|
32 | . S XC=@ORMSG@(RXC) I PSOI'=$P(XC,U,4) S Y=1 Q
|
---|
33 | . N X1,X2,X3 S X1=$P(XC,"|",4),X2=$P($P(XC,"|",5),U,5)
|
---|
34 | . S X3=$$VALUE("INSTR") I (X1_X2)'=X3,(X1_" "_X2)'=X3 S Y=1 Q
|
---|
35 | IV1 S RATE=$$FIND^ORM(+RXE,24),UNT=$P($$FIND^ORM(+RXE,25),U,5)
|
---|
36 | S:$L(UNT) RATE=RATE_" "_UNT I RATE'=$$VALUE("RATE") S Y=1 Q Y
|
---|
37 | S ORB=+$$PTR("ORDERABLE ITEM"),ORA=+$$PTR("ADDITIVE"),I=+RXC
|
---|
38 | F S XC=@ORMSG@(I) Q:$E(XC,1,3)'="RXC" D S I=$O(@ORMSG@(I)) Q:I'>0
|
---|
39 | . S ORX($P(XC,"|",2),+$P(XC,U,4))=$P(XC,"|",4)_U_$P($P(XC,"|",5),U,5)
|
---|
40 | . ;ORX("A",PSOI)=str^units or ORX("B",PSOI)=volume^units
|
---|
41 | F I="STRENGTH","UNITS","VOLUME" D ;ORX(I,inst)=value
|
---|
42 | . S J=0 F S J=$O(^OR(100,+ORIFN,4.5,"ID",I,J)) Q:J'>0 D
|
---|
43 | .. S INST=+$P($G(^OR(100,+ORIFN,4.5,J,0)),U,3)
|
---|
44 | .. S:INST ORX(I,INST)=$G(^OR(100,+ORIFN,4.5,J,1))
|
---|
45 | S I=0 F S I=$O(^OR(100,+ORIFN,4.5,"ID","ORDERABLE",I)) Q:I'>0 D Q:Y
|
---|
46 | . S OI0=$G(^OR(100,+ORIFN,4.5,I,0)),OI=+$G(^(1))
|
---|
47 | . S PSOI=+$P($G(^ORD(101.43,OI,0)),U,2)
|
---|
48 | . I $P(OI0,U,2)=ORA,$G(ORX("A",PSOI)) D Q
|
---|
49 | .. S INST=$P(OI0,U,3),STR=+ORX("A",PSOI),UNT=$P(ORX("A",PSOI),U,2)
|
---|
50 | .. I STR'=$G(ORX("STRENGTH",INST)) S Y=1 Q
|
---|
51 | .. I UNT'=$G(ORX("UNITS",INST)) S Y=1 Q
|
---|
52 | .. K ORX("A",PSOI) ;same
|
---|
53 | . I $P(OI0,U,2)=ORB,$G(ORX("B",PSOI)) D Q
|
---|
54 | .. S INST=$P(OI0,U,3),VOL=+$G(ORX("B",PSOI))
|
---|
55 | .. I VOL'=$G(ORX("VOLUME",INST)) S Y=1 Q
|
---|
56 | .. K ORX("B",PSOI) ;same
|
---|
57 | . S Y=1
|
---|
58 | I $O(ORX("A",0))!$O(ORX("B",0)) S Y=1 ;leftover items - changed
|
---|
59 | Q Y
|
---|
60 | ;
|
---|
61 | CHANGED() ; -- Compare ORMSG to order ORIFN, return 1 if different
|
---|
62 | N X,Y,X1,ZSC,NTE,SIG,PI S Y=0
|
---|
63 | I $G(ORCAT)="I" D G CHQ
|
---|
64 | . I $$WPX S Y=1 Q ;Special Instructions
|
---|
65 | . ;S X=$$VALUE("DAYS") ;duration
|
---|
66 | . ;I X S X1=$$DURATION^ORMPS1($P($G(ORQT(1)),U,3)) I X'=X1 S Y=1 Q
|
---|
67 | . I $$IVX S Y=1 Q ;IV fields
|
---|
68 | S X=$P($P(RXE,"|",3),U,4) I X'=$$VALUE("DRUG") S Y=1 G CHQ
|
---|
69 | I $P(RXE,"|",11)'=$$VALUE("QTY") S Y=1 G CHQ
|
---|
70 | I $P(RXE,"|",13)'=$$VALUE("REFILLS") S Y=1 G CHQ
|
---|
71 | S X=$P(RXE,"|",23) S:$E(X)="D" X=+$E(X,2,99) I X'=$$VALUE("SUPPLY") S Y=1 G CHQ
|
---|
72 | I $P(ZRX,"|",5)'=$$VALUE("PICKUP") S Y=1 G CHQ
|
---|
73 | S NTE=$$NTE^ORMPS1(21),SIG=+$O(^OR(100,+ORIFN,4.5,"ID","SIG",0)) ;verb
|
---|
74 | I NTE,SIG,$P($P(@ORMSG@(NTE),"|",4)," ")'=$P($G(^OR(100,+ORIFN,4.5,SIG,2,1,0))," ") S Y=1 G CHQ
|
---|
75 | S NTE=$$NTE^ORMPS1(7),PI=+$O(^OR(100,+ORIFN,4.5,"ID","PI",0))
|
---|
76 | I (NTE&'PI)!('NTE&PI) Q 1 ;added or deleted
|
---|
77 | I NTE,PI,$P(@ORMSG@(NTE),"|",4)'=$G(^OR(100,+ORIFN,4.5,PI,2,1,0)) S Y=1 G CHQ
|
---|
78 | Q:'$P($G(^OR(100,+ORIFN,8,0)),U,3)
|
---|
79 | N LSTACT,PREPRV,CURPRV S LSTACT="?",(PREPRV,CURPRV)=0
|
---|
80 | F S LSTACT=$O(^OR(100,+ORIFN,8,LSTACT),-1) Q:LSTACT
|
---|
81 | S PREPRV=$P($G(^OR(100,+ORIFN,8,LSTACT,0)),U,3)
|
---|
82 | S CURPRV=$P($G(ORC),"|",13)
|
---|
83 | I (PREPRV'=CURPRV) S Y=1 G CHQ
|
---|
84 | CHQ Q Y
|
---|
85 | ;
|
---|
86 | VALUE(ID) ; -- Return value of ID in ^OR(100,+ORIFN,4.5,"ID")
|
---|
87 | N I,Y I '$L($G(ID)) Q ""
|
---|
88 | S I=+$O(^OR(100,+ORIFN,4.5,"ID",ID,0))
|
---|
89 | S Y=$G(^OR(100,+ORIFN,4.5,I,1))
|
---|
90 | Q Y
|
---|
91 | ;
|
---|
92 | PTR(X) ; -- Return ptr to prompt OR GTX X
|
---|
93 | Q +$O(^ORD(101.41,"AB","OR GTX "_X,0))
|
---|
94 | ;
|
---|
95 | RO ; -- Replacement order (finished)
|
---|
96 | ;
|
---|
97 | N RXO,RXC,ORDIALOG,ORDG,ORPKG,ORDA,ORX,ORSIG,ORP,ZSC,NEWSTS
|
---|
98 | K ^TMP("ORWORD",$J)
|
---|
99 | I '$D(^VA(200,ORNP,0)) S ORERR="Missing or invalid ordering provider" Q
|
---|
100 | I 'RXE S ORERR="Missing or invalid RXE segment" Q
|
---|
101 | S RXO=$$RXO^ORMPS,RXC=$$RXC^ORMPS,ORIFN=+$G(ORIFN)
|
---|
102 | I ORIFN'>0 S ORERR="Missing or invalid order number" Q
|
---|
103 | D @($S(RXC:"IV",$G(ORCAT)="I":"UDOSE",1:"OUT")_"^ORMPS1") Q:$D(ORERR)
|
---|
104 | S ORDA=$$ACTION^ORCSAVE("XX",ORIFN,ORNP,"",ORNOW,ORWHO)
|
---|
105 | I ORDA'>0 S ORERR="Cannot create new order action" Q
|
---|
106 | RO1 ; -Update sts of order to active, last action to dc/edit:
|
---|
107 | S ORX=ORDA F S ORX=+$O(^OR(100,ORIFN,8,ORX),-1) Q:ORX'>0 I $D(^(ORX,0)),$P(^(0),U,15)="" Q ;ORX=last released action
|
---|
108 | S:ORX $P(^OR(100,ORIFN,8,ORX,0),U,15)=12 ;dc/edit
|
---|
109 | S $P(^OR(100,ORIFN,3),U,7)=ORDA,NEWSTS=$S('$G(ORSTS):0,ORSTS=$P(^(3),U,3):0,1:1) K ^(6)
|
---|
110 | D STATUS^ORCSAVE2(ORIFN,ORSTS):NEWSTS,SETALL^ORDD100(ORIFN):'NEWSTS
|
---|
111 | D DATES^ORCSAVE2(ORIFN,ORSTRT,ORSTOP)
|
---|
112 | D RELEASE^ORCSAVE2(ORIFN,ORDA,ORNOW,ORWHO,ORNATR)
|
---|
113 | ; -If unsigned edit, leave XX unsigned & mark ORX as Sig Not Req'd
|
---|
114 | S ORSIG=$S($P($G(^OR(100,ORIFN,8,ORX,0)),U,4)'=2:1,1:0)
|
---|
115 | D SIGSTS^ORCSAVE2(ORIFN,ORDA):ORSIG,SIGN^ORCSAVE2(ORIFN,,,5,ORX):'ORSIG
|
---|
116 | RO2 ; -Update responses, get/save new order text:
|
---|
117 | K ^OR(100,ORIFN,4.5) D RESPONSE^ORCSAVE,ORDTEXT^ORCSAVE1(ORIFN_";"_ORDA)
|
---|
118 | S $P(^OR(100,ORIFN,0),U,5)=ORDIALOG_";ORD(101.41,",$P(^(0),U,14)=ORPKG
|
---|
119 | ;I $P(^OR(100,ORIFN,0),U,11)'=ORDG D ;update DG,xrefs
|
---|
120 | ;AGP Changes to handle IMO IV orders CPRS 26v43
|
---|
121 | I $P(^OR(100,ORIFN,0),U,11)'=ORDG,$P(^OR(100,ORIFN,0),U,11)'=$O(^ORD(100.98,"B","CLINIC ORDERS","")) D
|
---|
122 | . N DA,DR,DIE
|
---|
123 | . S DA=ORIFN,DR="23////"_ORDG,DIE="^OR(100," D ^DIE
|
---|
124 | S ^OR(100,ORIFN,4)=PKGIFN,$P(^(8,ORDA,0),U,14)=ORDA
|
---|
125 | S ORIFN=ORIFN_";"_ORDA,ORDCNTRL="SN" ;to send NA msg back
|
---|
126 | I $G(ORL) S ORP(1)=ORIFN_"^1" D PRINTS^ORWD1(.ORP,+ORL)
|
---|
127 | I $G(ORCAT)="O" S ZSC=$$ZSC^ORMPS1 I ZSC,$P(ZSC,"|",2)'?2.3U S ^OR(100,+ORIFN,5)=$TR($P(ZSC,"|",2,7),"|","^") ;1 or 0 instead of [N]SC in #100
|
---|
128 | Q
|
---|
129 | IVLIM(IVDUR) ;
|
---|
130 | I $L(IVDUR) D
|
---|
131 | . N DURU,DURV S DURU="",DURV=0
|
---|
132 | . S DURU=$E(IVDUR,1),DURV=$E(IVDUR,2,$L(IVDUR))
|
---|
133 | . I (DURU="D")!(DURU="d") S IVDUR="for "_+DURV_$S(+DURV=1:" day",+DURV>1:" days",1:" day")
|
---|
134 | . I (DURU="H")!(DURU="h") S IVDUR="for "_+DURV_$S(+DURV=1:" hours",+DURV>1:" hours",1:" hour")
|
---|
135 | . I (DURU="M")!(DURU="m") S IVDUR="with total volume "_+DURV_" ml"
|
---|
136 | . I (DURU="L")!(DURU="l") S IVDUR="with total volume "_+DURV_" L"
|
---|
137 | Q IVDUR
|
---|
138 | PCOMM ; -- Get Provider Comments from previous order, when changed
|
---|
139 | N OLD,I
|
---|
140 | S OLD=+$G(ORIFN) I OLD<1 S OLD=+$P(ZRX,"|",2) Q:OLD<1
|
---|
141 | S I=+$O(^OR(100,OLD,4.5,"ID","COMMENT",0)) Q:I<1
|
---|
142 | Q:'$O(^OR(100,OLD,4.5,I,2,0)) ;none
|
---|
143 | M ^TMP("ORWORD",$J,PC,1)=^OR(100,OLD,4.5,I,2)
|
---|
144 | S ORDIALOG(PC,1)="^TMP(""ORWORD"",$J,"_PC_",1)"
|
---|
145 | S ORDIALOG(PC,"FORMAT")="@" ;text in Sig already
|
---|
146 | Q
|
---|