1 | ORMPS1 ;SLC/MKB - Process Pharmacy ORM msgs cont ; 3/27/08 7:38am
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**86,92,94,116,134,152,158,149,190,195,215,265,275,243**;Dec 17, 1997;Build 242
|
---|
3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | UDOSE ; -- new Unit Dose order
|
---|
5 | N ADMIN,QT,DRUG,INSTR,DOSE,RTE,SCH,OI,URG,WP,DUR,STR,DRGNM,X,PSOI,PSDD,S0,ID,LDOSE,XC,NTE,S0,RXR
|
---|
6 | S ORDIALOG=+$O(^ORD(101.41,"AB","PSJ OR PAT OE",0))
|
---|
7 | I $G(ORAPPT)>0 S ORDG=+$O(^ORD(100.98,"B","CLINIC ORDERS",0))
|
---|
8 | E S ORDG=+$O(^ORD(100.98,"B","UNIT DOSE MEDICATIONS",0))
|
---|
9 | S ORPKG=+$$PKG("PSJ")
|
---|
10 | D GETDLG1^ORCD(ORDIALOG) S QT=$G(ORQT(1))
|
---|
11 | S DRUG=$$PTR("DISPENSE DRUG"),INSTR=$$PTR("INSTRUCTIONS")
|
---|
12 | S DOSE=$$PTR("DOSE"),RTE=$$PTR("ROUTE")
|
---|
13 | S SCH=$$PTR("SCHEDULE"),ADMIN=$$PTR("ADMIN TIMES")
|
---|
14 | S OI=$$PTR("ORDERABLE ITEM"),URG=$$PTR("URGENCY")
|
---|
15 | S WP=$$PTR("WORD PROCESSING 1"),DUR=$$PTR("DURATION")
|
---|
16 | S STR=$$PTR("STRENGTH"),DRGNM=$$PTR("DRUG NAME")
|
---|
17 | UD1 S:RXO X=$P(RXO,"|",2),ORDIALOG(OI,1)=$$ORDITEM^ORM(X),PSOI=$P(X,U,4,5)
|
---|
18 | I '$G(ORDIALOG(OI,1)) S ORERR="Missing or invalid orderable item" Q
|
---|
19 | S PSDD=$P($$FIND^ORM(+RXE,3),U,4,5),ORDIALOG(DRUG,1)=+PSDD
|
---|
20 | S S0=$$FIND^ORM(+RXE,26)_"&"_$P($$FIND^ORM(+RXE,27),U,5)
|
---|
21 | S ID=$P(QT,U),LDOSE=$P(QT,U,8) I 'ID,S0 D
|
---|
22 | . N UNT,PTRN S UNT=$P(S0,"&",2),PTRN="1.N1"""_UNT_""""
|
---|
23 | . I LDOSE?@PTRN S $P(ID,"&",1,2)=+LDOSE_"&"_UNT Q ;pre-POE orders
|
---|
24 | . S:$P(PSOI,U,2)'[S0 ORDIALOG(STR,1)=$TR(S0,"&")
|
---|
25 | I 'ID,'S0 S ORDIALOG(DRGNM,1)=$$UNESC^ORMPS2($P(PSDD,U,2))
|
---|
26 | S:$L(ID) ORDIALOG(DOSE,1)=$$UNESC^ORMPS2($P(ID,"&",1,4)_"&"_LDOSE_"&"_+PSDD_"&"_S0)
|
---|
27 | I LDOSE="" D I LDOSE="" S ORERR="Unable to determine instructions" Q
|
---|
28 | . I $G(RXC)'>0 D Q ;look for units/dose
|
---|
29 | .. S LDOSE=$P(ID,"&",3),X=$P(ID,"&",4) I 'LDOSE S LDOSE="" Q
|
---|
30 | .. S:'$L(X) X=$$UNESC^ORMPS2($P($$FIND^ORM(+RXE,7),U,5)) S:$L(X) LDOSE=LDOSE_" "_X
|
---|
31 | .. S ORDIALOG(DRGNM,1)=$$UNESC^ORMPS2($P(PSDD,U,2)) ;force use of DD
|
---|
32 | . F D Q:LDOSE'="" S RXC=$O(@ORMSG@(RXC)) Q:'RXC Q:$E(@ORMSG@(RXC),1,3)'="RXC"
|
---|
33 | .. S XC=@ORMSG@(RXC) Q:+$P($P(XC,"|",3),U,4)'=+PSOI
|
---|
34 | .. S LDOSE=$P(XC,"|",4)_$P($P(XC,"|",5),U,5) ;strength_units
|
---|
35 | S ORDIALOG(INSTR,1)=$$UNESC^ORMPS2(LDOSE)
|
---|
36 | UD2 S NTE=$$NTE^ORMPS3(21) I NTE D
|
---|
37 | . N CNT,I S CNT=1,^TMP("ORWORD",$J,WP,1,CNT,0)=$$UNESC^ORMPS2($P(@ORMSG@(NTE),"|",4))
|
---|
38 | . I $O(@ORMSG@(NTE,0)) S I=0 F S I=$O(@ORMSG@(NTE,I)) Q:I'>0 S CNT=CNT+1,^TMP("ORWORD",$J,WP,1,CNT,0)=$$UNESC^ORMPS2(@ORMSG@(NTE,I))
|
---|
39 | . S ^TMP("ORWORD",$J,WP,1,0)="^^"_CNT_U_CNT_U_DT_U
|
---|
40 | . S ORDIALOG(WP,1)="^TMP(""ORWORD"",$J,"_WP_",1)"
|
---|
41 | S RXR=$$RXR^ORMPS I 'RXR S ORERR="Missing or invalid RXR segment" Q
|
---|
42 | S ORDIALOG(RTE,1)=$P($P(RXR,"|",2),U,4),ORDIALOG(URG,1)=ORURG
|
---|
43 | S X=$P(QT,U,2)
|
---|
44 | S ORDIALOG(SCH,1)=$$UNESC^ORMPS2($P(X,"&"))
|
---|
45 | S:$L($P(X,"&",2)) ORDIALOG(ADMIN,1)=$P(X,"&",2)
|
---|
46 | S X=$P(QT,U,3) I $L(X) D ;set only if previous order had duration
|
---|
47 | . N IFN S IFN=$S($G(ORIFN):+ORIFN,$P(ZRX,"|",2):+$P(ZRX,"|",2),1:0)
|
---|
48 | . S:$O(^OR(100,+IFN,4.5,"ID","DAYS",0)) ORDIALOG(DUR,1)=$$DURATION^ORMPS3(X)
|
---|
49 | D DOSETEXT^ORCDPS2 ;reset Instructions text, SIG
|
---|
50 | D UNESCARR^ORMPS2("ORDIALOG")
|
---|
51 | Q
|
---|
52 | OUT ; -- new Outpt order
|
---|
53 | N OI,SIG,INSTR,DOSE,RTE,SCH,DUR,SC,STR,DRUG,PI,CONJ,PSOI,PSDD,S0,X,I,RXR,J,NTE,ZSC,CNT,PC
|
---|
54 | S ORDIALOG=+$O(^ORD(101.41,"AB","PSO OERR",0))
|
---|
55 | S ORDG=+$O(^ORD(100.98,"B","OUTPATIENT MEDICATIONS",0))
|
---|
56 | S ORPKG=+$$PKG("PSO") D GETDLG1^ORCD(ORDIALOG)
|
---|
57 | S OI=$$PTR("ORDERABLE ITEM"),SIG=$$PTR("SIG")
|
---|
58 | S INSTR=$$PTR("INSTRUCTIONS"),DOSE=$$PTR("DOSE")
|
---|
59 | S SCH=$$PTR("SCHEDULE"),DUR=$$PTR("DURATION")
|
---|
60 | S RTE=$$PTR("ROUTE"),SC=$$PTR("SERVICE CONNECTED")
|
---|
61 | S STR=$$PTR("STRENGTH"),DRUG=$$PTR("DISPENSE DRUG")
|
---|
62 | S PI=$$PTR("PATIENT INSTRUCTIONS"),CONJ=$$PTR("AND/THEN")
|
---|
63 | S PC=$$PTR("WORD PROCESSING 1")
|
---|
64 | S:RXO X=$P(RXO,"|",2),ORDIALOG(OI,1)=$$ORDITEM^ORM(X),PSOI=$P(X,U,4,5)
|
---|
65 | I '$G(ORDIALOG(OI,1)) S ORERR="Missing or invalid orderable item" Q
|
---|
66 | S PSDD=$P($$FIND^ORM(+RXE,3),U,4,5),ORDIALOG(DRUG,1)=+PSDD
|
---|
67 | S S0=$$FIND^ORM(+RXE,26)_"&"_$P($$FIND^ORM(+RXE,27),U,5)
|
---|
68 | I S0,$P(PSOI,U,2)'[S0 S ORDIALOG(STR,1)=$TR(S0,"&")
|
---|
69 | I 'S0,'$G(ORQT(1)) S ORDIALOG($$PTR("DRUG NAME"),1)=$$UNESC^ORMPS2($P(PSDD,U,2))
|
---|
70 | OUT1 S ORDIALOG($$PTR("QUANTITY"),1)=$$FIND^ORM(+RXE,11)
|
---|
71 | S ORDIALOG($$PTR("REFILLS"),1)=$$FIND^ORM(+RXE,13)
|
---|
72 | S X=$$FIND^ORM(+RXE,23) S:$E(X)="D" X=+$E(X,2,99)
|
---|
73 | S:X ORDIALOG($$PTR("DAYS SUPPLY"),1)=X
|
---|
74 | I ZRX S X=$P(ZRX,"|",5) S:$L(X) ORDIALOG($$PTR("ROUTING"),1)=X
|
---|
75 | S:ORURG ORDIALOG($$PTR("URGENCY"),1)=ORURG F I=1:1:ORQT D
|
---|
76 | . S ORDIALOG(INSTR,I)=$$UNESC^ORMPS2($P(ORQT(I),U,8)),X=$P(ORQT(I),U)
|
---|
77 | . S:$L(X) ORDIALOG(DOSE,I)=$$UNESC^ORMPS2($P(X,"&",1,4)_"&"_$P(ORQT(I),U,8)_"&"_+PSDD_"&"_S0)
|
---|
78 | . S X=$P(ORQT(I),U,2) S:$L(X) ORDIALOG(SCH,I)=$$UNESC^ORMPS2(X)
|
---|
79 | . S X=$P(ORQT(I),U,3) S:$L(X) ORDIALOG(DUR,I)=$$DURATION^ORMPS3(X)
|
---|
80 | . S X=$P(ORQT(I),U,9) S:$L(X) ORDIALOG(CONJ,I)=$S(X="S":"T",1:X)
|
---|
81 | S RXR=$$RXR^ORMPS I RXR S ORDIALOG(RTE,1)=$P($P(RXR,"|",2),U,4) D
|
---|
82 | . S I=1,J=+RXR ;look for multiple RXR's
|
---|
83 | . F S J=$O(@ORMSG@(J)) Q:J'>0 S RXR=@ORMSG@(J) Q:$E(RXR,1,3)'="RXR" S I=I+1,ORDIALOG(RTE,I)=$P($P(RXR,"|",2),U,4)
|
---|
84 | OUT2 S NTE=$$NTE^ORMPS3(6) I NTE D ;Prov Comm ;D:'NTE PCOMM^ORMPS2
|
---|
85 | . S CNT=1,^TMP("ORWORD",$J,PC,1,CNT,0)=$$UNESC^ORMPS2($P(@ORMSG@(NTE),"|",4))
|
---|
86 | . I $O(@ORMSG@(NTE,0)) S I=0 F S I=$O(@ORMSG@(NTE,I)) Q:I'>0 S CNT=CNT+1,^TMP("ORWORD",$J,PC,1,CNT,0)=$$UNESC^ORMPS2(@ORMSG@(NTE,I))
|
---|
87 | . S ^TMP("ORWORD",$J,PC,1,0)="^^"_CNT_U_CNT_U_DT_U
|
---|
88 | . S ORDIALOG(PC,1)="^TMP(""ORWORD"",$J,"_PC_",1)",ORDIALOG(PC,"FORMAT")="@" ;keep, don't show
|
---|
89 | . N XCNT,XCOMM,XCOMMENT,XORCOMM,XXCNT,XORIFN
|
---|
90 | . S XORIFN=$G(ORIFN) S:XORIFN="" XORIFN=$P(RXR,"|",2) Q:XORIFN=""
|
---|
91 | . S XCOMM=$O(^OR(100,+XORIFN,4.5,"ID","COMMENT",0)) Q:XCOMM=""
|
---|
92 | . S XCNT=0 F S XCNT=$O(^TMP("ORWORD",$J,PC,1,XCNT)) Q:XCNT="" S XCOMMENT=^TMP("ORWORD",$J,PC,1,XCNT,0) D
|
---|
93 | .. S XORCOMM=$G(^OR(100,+XORIFN,4.5,XCOMM,2,XCNT,0)),XXCNT=0
|
---|
94 | .. I XORCOMM="" F S XXCNT=$O(^OR(100,+XORIFN,4.5,XCOMM,2,XXCNT)) Q:XXCNT="" S XORCOMM=$G(^(XXCNT,0)) Q:XORCOMM'=""
|
---|
95 | .. I $G(XCOMMENT)=$G(XORCOMM) S ORDIALOG(PC,"FORMAT")="@"
|
---|
96 | S NTE=$$NTE^ORMPS3(7) I NTE D ;Pat Instr
|
---|
97 | . S CNT=1,^TMP("ORWORD",$J,PI,1,CNT,0)=$$UNESC^ORMPS2($P(@ORMSG@(NTE),"|",4))
|
---|
98 | . I $O(@ORMSG@(NTE,0)) S I=0 F S I=$O(@ORMSG@(NTE,I)) Q:I'>0 S CNT=CNT+1,^TMP("ORWORD",$J,PI,1,CNT,0)=$$UNESC^ORMPS2(@ORMSG@(NTE,I))
|
---|
99 | . S ^TMP("ORWORD",$J,PI,1,0)="^^"_CNT_U_CNT_U_DT_U
|
---|
100 | . S ORDIALOG(PI,1)="^TMP(""ORWORD"",$J,"_PI_",1)"
|
---|
101 | S NTE=$$NTE^ORMPS3(21) I NTE D ;Sig
|
---|
102 | . S CNT=1,^TMP("ORWORD",$J,SIG,1,CNT,0)=$$UNESC^ORMPS2($P(@ORMSG@(NTE),"|",4))
|
---|
103 | . I $O(@ORMSG@(NTE,0)) S I=0 F S I=$O(@ORMSG@(NTE,I)) Q:I'>0 S CNT=CNT+1,^TMP("ORWORD",$J,SIG,1,CNT,0)=$$UNESC^ORMPS2(@ORMSG@(NTE,I))
|
---|
104 | . S ^TMP("ORWORD",$J,SIG,1,0)="^^"_CNT_U_CNT_U_DT_U
|
---|
105 | . S ORDIALOG(SIG,1)="^TMP(""ORWORD"",$J,"_SIG_",1)"
|
---|
106 | . S ORDIALOG(PI,"FORMAT")="@" ;PI already included in Sig
|
---|
107 | OUT3 I '$G(ORQT(1))!('NTE) D DOSETEXT^ORCDPS2 ;reset Instructions text, Sig
|
---|
108 | S ZSC=$$ZSC^ORMPS3,X=$P(ZSC,"|",2) I X?2.3U S ORDIALOG(SC,1)=$S(X="SC":1,1:0)
|
---|
109 | Q
|
---|
110 | IV ; -- new IV order
|
---|
111 | N IVTYP,IVTYPE S IVTYP=$P(ZRX,"|",7) I IVTYP="",$$NUMADDS^ORMPS3'>1 G UDOSE
|
---|
112 | N SOLN,VOL,ADDS,STR,UNITS,RATE,URG,X,X1,X2,I,J,TYPE,OI,WP,NTE,SCH,DAYS,ROUTE,ADMIN
|
---|
113 | N RXR
|
---|
114 | S ORDIALOG=+$O(^ORD(101.41,"AB","PSJI OR PAT FLUID OE",0))
|
---|
115 | I +$G(ORAPPT)>0 S ORDG=+$O(^ORD(100.98,"B","CLINIC ORDERS",0))
|
---|
116 | E S ORDG=+$O(^ORD(100.98,"B",$S($P(ZRX,"|",7)="TPN":"TPN",1:"IV RX"),0))
|
---|
117 | S ORPKG=+$$PKG("PSJ") D GETDLG1^ORCD(ORDIALOG)
|
---|
118 | S SOLN=$$PTR("ORDERABLE ITEM"),VOL=$$PTR("VOLUME"),SCH=$$PTR("SCHEDULE")
|
---|
119 | S RATE=$$PTR("INFUSION RATE") S:ORURG ORDIALOG($$PTR("URGENCY"),1)=ORURG
|
---|
120 | S WP=$$PTR("WORD PROCESSING 1"),ADDS=$$PTR("ADDITIVE")
|
---|
121 | S STR=$$PTR("STRENGTH PSIV"),UNITS=$$PTR("UNITS")
|
---|
122 | S DAYS=$$PTR("DURATION"),IVTYPE=$$PTR("IV TYPE"),ADMIN=$$PTR("ADMIN TIMES")
|
---|
123 | IV1 S NTE=$$NTE^ORMPS3(21) I NTE D
|
---|
124 | . N CNT,I S CNT=1,^TMP("ORWORD",$J,WP,1,CNT,0)=$$UNESC^ORMPS2($P(@ORMSG@(NTE),"|",4))
|
---|
125 | . I $O(@ORMSG@(NTE,0)) S I=0 F S I=$O(@ORMSG@(NTE,I)) Q:I'>0 S CNT=CNT+1,^TMP("ORWORD",$J,WP,1,CNT,0)=$$UNESC^ORMPS2(@ORMSG@(NTE,I))
|
---|
126 | . S ^TMP("ORWORD",$J,WP,1,0)="^^"_CNT_U_CNT_U_DT_U
|
---|
127 | . S ORDIALOG(WP,1)="^TMP(""ORWORD"",$J,"_WP_",1)"
|
---|
128 | N ORDAYS S ORDAYS=""
|
---|
129 | S:$D(RXO) ORDAYS=$P($P(RXO,"|",2),"^",3)
|
---|
130 | S:$L(ORDAYS) ORDAYS=$$IVLIM^ORMPS2(ORDAYS)
|
---|
131 | S:$L(ORDAYS) ORDIALOG(DAYS,1)=ORDAYS
|
---|
132 | S ORDIALOG(IVTYPE,1)=IVTYP
|
---|
133 | S X=$P($$FIND^ORM(+RXE,25),U,5)
|
---|
134 | S ORDIALOG(RATE,1)=$$FIND^ORM(+RXE,24)_$S($L(X):" "_X,1:""),(I,J)=0
|
---|
135 | F D S RXC=$O(@ORMSG@(RXC)) Q:'RXC Q:$E(@ORMSG@(RXC),1,3)'="RXC"
|
---|
136 | . S X=@ORMSG@(RXC),TYPE=$P(X,"|",2),OI=$$ORDITEM^ORM($P(X,"|",3)) Q:'OI
|
---|
137 | . S X1=$P(X,"|",4),X2=$P($P(X,"|",5),U,5)
|
---|
138 | . I $E(TYPE)="B" S J=J+1,ORDIALOG(SOLN,J)=OI,ORDIALOG(VOL,J)=X1 Q
|
---|
139 | . S I=I+1,ORDIALOG(ADDS,I)=OI,ORDIALOG(STR,I)=X1,ORDIALOG(UNITS,I)=X2
|
---|
140 | IV2 ;
|
---|
141 | S RXR=$$RXR^ORMPS
|
---|
142 | S ROUTE=$P(RXR,"|",2)
|
---|
143 | S ORDIALOG($$PTR("ROUTE"),1)=$P(ROUTE,U,4)
|
---|
144 | I IVTYP="I" S X=$P($G(ORQT(1)),U,2) D
|
---|
145 | .S:$L($P(X,"&")) ORDIALOG(SCH,1)=$P(X,"&")
|
---|
146 | .S:$L($P(X,"&",2)) ORDIALOG(ADMIN,1)=$P(X,"&",2)
|
---|
147 | D UNESCARR^ORMPS2("ORDIALOG")
|
---|
148 | Q
|
---|
149 | PKG(NMSP) ; -- Return Package file ptr for NMSP
|
---|
150 | N I S I=0
|
---|
151 | F S I=+$O(^DIC(9.4,"C",NMSP,I)) Q:I<1 Q:'$O(^(I,0)) ;no Addl Prefs
|
---|
152 | Q I
|
---|
153 | PTR(NAME) ; -- Returns ien of prompt NAME in Order Dialog file #101.41
|
---|
154 | Q +$O(^ORD(101.41,"AB",$E("OR GTX "_NAME,1,63),0))
|
---|
155 | QT ; -- Unpiece the Q/T field from RXE
|
---|
156 | I 'RXE S ORQT(1)=ORQT,ORQT=1 Q ; nothing to reset
|
---|
157 | N X,Y,I,J,P,SEG,DONE K ORQT
|
---|
158 | S SEG=$G(@ORMSG@(+RXE)),X=$P(SEG,"|",2),(I,J,P,DONE)=0
|
---|
159 | F D Q:DONE
|
---|
160 | . S P=P+1,Y=$P(X,"~",P) I Y="" S DONE=1 Q
|
---|
161 | . I P<$L(X,"~") S I=I+1,ORQT(I)=Y Q
|
---|
162 | . I $L(SEG,"|")>2 S I=I+1,ORQT(I)=Y,DONE=1 Q
|
---|
163 | . S J=+$O(@ORMSG@(+RXE,J)) I J'>0 S I=I+1,ORQT(I)=Y,DONE=1 Q
|
---|
164 | . S SEG=$G(@ORMSG@(+RXE,J)),X=$P(SEG,"|"),P=1,I=I+1,ORQT(I)=Y_$P(X,"~")
|
---|
165 | S ORQT=I Q:'ORQT ; else reset ORSTRT, ORSTOP, ORURG
|
---|
166 | S ORSTRT=$P(ORQT(1),U,4),ORSTOP=$P(ORQT(ORQT),U,5),ORURG=$P(ORQT(1),U,6)
|
---|
167 | S:ORSTRT ORSTRT=$$FMDATE^ORM(ORSTRT) S:ORSTOP ORSTOP=$$FMDATE^ORM(ORSTOP) S:$L(ORURG) ORURG=$$URGENCY^ORM(ORURG)
|
---|
168 | Q
|
---|