1 | PSJOE ;BIR/MLM-INPATIENT ORDER ENTRY ;23 Jun 98 / 1:46 PM
|
---|
2 | ;;5.0; INPATIENT MEDICATIONS ;**7,26,29,33,42,50,56,72,58,85,95,80,110,111,133,140,151,149**;16 DEC 97
|
---|
3 | ;
|
---|
4 | ; Reference to ^PS(55 is supported by DBIA #2191.
|
---|
5 | ; Reference to EN^VALM is supported by DBIA #10118.
|
---|
6 | ; Reference to FULL^VALM1 and PAUSE^VALM1 is supported by DBIA #10116.
|
---|
7 | ; Reference to ^PSSLOCK is supported by DBIA #2789
|
---|
8 | ; Reference to ^DPT is supported by DBIA #10035.
|
---|
9 | ; Reference to ^ORCFLAG is supported by DBIA #3620.
|
---|
10 | ; Reference to ^SDAMA203 is supported by DBIA #4133.
|
---|
11 | ;
|
---|
12 | EN ; Start Inpatient LM OE
|
---|
13 | N PSJLK,PSJNEWOE,PSJLMCON,PSJPROT,XQORS,VALMEVL D ENCV^PSGSETU,^PSIVXU
|
---|
14 | I $D(XQUIT) K XQUIT G DONE
|
---|
15 | K PSGVBY,PSJPR S (PSJOL,PSJACOK,PSGOP,PSGNEF,PSGOEAV,PSGPXN)="" L +^PS(53.45,PSJSYSP):1 E D LOCKERR^PSJOE G DONE^PSJOE
|
---|
16 | F S (PSJLMCON,PSGPTMP)=0 D ^PSJP,HK Q:PSGP'>0 S PSJPROT=3,DFN=PSGP D ^PSJAC D I PSJLK D UL^PSSLOCK(PSGP)
|
---|
17 | .K ^TMP("PSJ",$J)
|
---|
18 | .S PSJLK=$$L^PSSLOCK(PSGP,1) I 'PSJLK W !,$C(7),$P(PSJLK,U,2) Q
|
---|
19 | .K PSJLMPRO D EN^VALM("PSJ LM BRIEF PATIENT INFO")
|
---|
20 | .N NXTPT S NXTPT=0 F Q:$G(NXTPT) D
|
---|
21 | ..K PSGRDTX
|
---|
22 | ..I $G(PSJLMCON)!$G(PSJNEWOE) D
|
---|
23 | ...S PSJOL=$S(",S,L,"[(","_$G(PSJOL)_","):PSJOL,1:"S")
|
---|
24 | ...S PSJLMPRO=1,PSJLMCON=1,PSJNEWOE=0 D EN^VALM("PSJ LM OE")
|
---|
25 | ..I $G(PSJNEWOE)!($G(VALMBCK)="Q") S PSJNEWOE=0 Q
|
---|
26 | ..I $G(PSJLMCON)&$G(PSJLMPRO)&'$D(^TMP("PSJ",$J)) D Q
|
---|
27 | ...S PSJLMCON=0,PSJLMPRO=0 D EN^VALM("PSJ LM BRIEF PATIENT INFO")
|
---|
28 | ...I $G(PSJNEWOE) S NXTPT=0 Q
|
---|
29 | ...S NXTPT=1
|
---|
30 | ..S NXTPT=1,PSJNEWOE=0
|
---|
31 | .S PSJOL="S"
|
---|
32 | .I $G(PSGPXN) I $P(PSJSYSW0,U,29)]""!($G(PSJCOM)) S PSGPXPT=PSGP D K PSGPXPT S PSGPXN=0
|
---|
33 | ..N DFN,PSGP,PSJPXDP
|
---|
34 | ..I $P(PSJSYSW0,U,29)="" S PSJPDXP=1 D
|
---|
35 | ...N IO,ION,IOS D HOME^%ZIS S $P(PSJSYSW0,U,29)=+$G(IOS)
|
---|
36 | ..S (PSGP,DFN)=PSGPXPT D ^PSGPER S:$G(PSJPDXP) $P(PSJSYSW0,U,29)="" K PSJPDXP
|
---|
37 | .D ENCV^PSGSETU,^PSIVXU
|
---|
38 | K PSJLMPRO,^TMP("PSJPRO",$J),^TMP("PSJ",$J),^TMP("PSJON",$J)
|
---|
39 | ;
|
---|
40 | DONE ;
|
---|
41 | K AC,ACTION,D1,D2,MI,N,ON,P3,PNOW,PSIVAT,PSIVLN,PSIVSTR L -^PS(53.45,PSJSYSP)
|
---|
42 | K DA,DRG,NE,PSGCF,PSGCANFL,PSGNEDFD,PSGNEF,PSGNEFD,PSGNEPR,PSGNESD,PSJACOK,PSJOE,PSJOECNT,PSJOEPF,PSJORD,PSGOEA,PSGOEAV,PSGOL,PSGOS,PSGON,PSGOP,PSGORD,PSGS0XT,PSGS0Y,RCT,ST,WD,XREF,Z,PSJIVORF,PSJIVPCL
|
---|
43 | K PSGOEORF,PSIVREA,PSJOPC,PSJORL,PSJORPCL,PSJORTOI,RF,WSCHADM,PSJLM,PSJCT
|
---|
44 | K DIU,DRGI,FLAG,FQC,ND2,PRI,PSGOE,PSGPRI,PSGSDN,PSGOEDMR,PSGOEPR,PSGPTS,PSGTOL,PSGTOO,PSGUOW,PSJIVOF,PSJOCNT,PSJON,PSJORQF,PSJORTOU,PSJORVP
|
---|
45 | G:$G(PSGPXN) ^PSGPER1 D ENIVKV^PSGSETU
|
---|
46 | Q
|
---|
47 | ;
|
---|
48 | HK ; Housekeeping (a nice COBOL term)
|
---|
49 | I PSGOP,PSGOP'=PSGP D
|
---|
50 | .N PSJACPF,PSJACNWP,PSJPWD,PSJSYSL,PSJSYSW,PSJSYSW0,DFN,VAIN,VAERR S DFN=PSGOP
|
---|
51 | .D INP^VADPT S PSJPWD=+VAIN(4) I PSJPWD S PSJACPF=10 D WP^PSJAC D:$P(PSJSYSL,"^",2)]"" ENQL^PSGLW
|
---|
52 | Q:PSGP<0
|
---|
53 | S (DFN,PSGOP)=PSGP,X=""
|
---|
54 | Q
|
---|
55 | ;
|
---|
56 | SELECT ; Select order from list
|
---|
57 | N PSGLMT,PSGODDD,PSJLMQT,PSJLMFIN,PSJUDPRF,PSGRDTX K ^TMP("PSJCOM",$J),^TMP("PSJCOM2",$J)
|
---|
58 | S PSGONC=1,PSGLMT=^TMP("PSJPRO",$J,0) D ENASR^PSGON
|
---|
59 | I "^"[X S VALMQUIT=1 Q
|
---|
60 | S PSJLM=1,PSJSEL=0 F S PSJSEL=$O(PSGODDD(PSJSEL)) Q:'PSJSEL!($G(Y)<0) F PSJSEL1=1:1:$L(PSGODDD(PSJSEL),",")-1 D
|
---|
61 | .S PSJORD=$G(^TMP("PSJON",$J,+$P(PSGODDD(PSJSEL),",",PSJSEL1))) D:PSJORD=+PSJORD SELECT^PSJOEA Q:PSJORD=""!($G(Y)<0) Q:PSJORD=+PSJORD D
|
---|
62 | ..Q:('$$LS^PSSLOCK(PSGP,PSJORD))
|
---|
63 | ..Q:PSJORD=+PSJORD
|
---|
64 | ..S PSGORD=""
|
---|
65 | ..D DISACTIO(PSGP,PSJORD,"") S:PSJORD["V" PSJORD=ON
|
---|
66 | ..D UNL^PSSLOCK(PSGP,PSJORD) Q:$G(Y)<0
|
---|
67 | S VALMBCK="Q"
|
---|
68 | K PSJLM
|
---|
69 | Q
|
---|
70 | ;
|
---|
71 | DISACTIO(DFN,PSJORD,PSJPNV) ; Display UD order and allow actions.
|
---|
72 | ; DFN - Patient IEN
|
---|
73 | ; PSJORD - Order #_location Code (P:53.1,V:55.01,U:55.06)
|
---|
74 | ; PSJPNV - Invoked from Pending/NV option; (gets different hidden menu)
|
---|
75 | N PSGP,PSJIVFLG,PSGSDX,PSGFDX,PSJXX1,ON55
|
---|
76 | D OLDCOM^PSJOE0(DFN,PSJORD)
|
---|
77 | S PSGP=DFN D ENIV^PSJAC I PSJORD["V" D EN^PSJLIORD(DFN,PSJORD) Q
|
---|
78 | D GETUD^PSJLMGUD(DFN,PSJORD)
|
---|
79 | S PSGOEAV=$P(PSJSYSP0,"^",9)&PSJSYSU
|
---|
80 | S:$G(PSJTUD) PSGPD=$G(PSJCOI),PSGPDN=$$OINAME^PSJLMUTL(+PSGPD)
|
---|
81 | K PSGOENG I '$D(PSGPRF) D Q:$G(PSGOENG)
|
---|
82 | . I PSJORD["U" L +^PS(55,PSGP,5,+PSJORD):1 E S PSGOENG=1
|
---|
83 | . I PSJORD["P" L +^PS(53.1,+PSJORD):1 E S PSGOENG=1
|
---|
84 | . I $G(PSGOENG) W !,"This order is being edited by another terminal.",! S PSGOENG=1 K DIR S DIR(0)="E" D ^DIR K DIR Q
|
---|
85 | S PSGACT=$$ENACTION^PSGOE1(PSGP,PSJORD)
|
---|
86 | I PSJORD["P" S PSJXX1=$G(^PS(53.1,+PSJORD,0)) I PSGP'=$P(PSJXX1,U,15)!(DFN'=$P(PSJXX1,U,15)) L -^PS(53.1,+PSJORD) Q
|
---|
87 | I PSJORD["P" D S PSJXX1=$P($G(^PS(53.1,+PSJORD,0)),U,9) I $S($G(PSJIVFLG):1,$G(Y)<0:1,"PADE"[PSJXX1:1,1:0) L -^PS(53.1,+PSJORD) Q
|
---|
88 | .I $P(PSJXX1,U,9)="N",($P(PSJXX1,U,4)'="U") D Q
|
---|
89 | .. S P("PON")=PSJORD,PSIVFLG=1
|
---|
90 | .. N ON S ON=PSJORD D VF^PSIVORC2
|
---|
91 | .I $P(PSJXX1,U,9)="P" D Q
|
---|
92 | ..S:$G(PSJTUD) $P(PSJXX1,U,4)="U"
|
---|
93 | ..I $P(PSJXX1,U,4)="U" D Q:$G(PSJIVFLG)
|
---|
94 | ... N VAIP S CLINIC=$G(^PS(53.1,+PSJORD,"DSS")),APPT=$P(CLINIC,"^",2),CLINIC=$P(CLINIC,"^") I $$PATCH^XPDUTL("SD*5.3*285"),$$SDIMO^SDAMA203(CLINIC,DFN)>-1 Q
|
---|
95 | ... Q:'PSJPDD W !!,"Cannot process an Out-patient Unit Dose order for ",$P($G(^DPT(+PSGP,0)),U) D PAUSE^VALM1 S PSJIVFLG=1
|
---|
96 | ..NEW PSGRSD,PSGRSDN,PSGRFD,PSGRFDN
|
---|
97 | ..D REQDT^PSJLIVMD(PSJORD)
|
---|
98 | ..I $P(PSJXX1,U,4)="U",($G(PSGSCH)="") W !!,"Invalid schedule, can't finish this order" D PAUSE^VALM1 Q
|
---|
99 | ..I $P(PSJXX1,U,4)="U" N PSJLM S PSJLM=1,PSGORD=PSJORD D START^PSGOEF,ENSFE^PSGOEE0(PSGP,PSGORD),@$S($G(PSJTUD):"FINISH^PSGOEF",1:"EN^VALM(""PSJ LM PENDING EDIT"")") Q
|
---|
100 | ..I $P(PSJXX1,U,4)'="U",PSGP=$P(PSJXX1,U,15),DFN=$P(PSJXX1,U,15) S PSJLYN=PSJORD D EN^PSJLIFN S PSJIVFLG=1 K PSJLYN,PSJMAI
|
---|
101 | I $G(PSIVFLG) K PSIVFLG Q
|
---|
102 | S PSGACT=$$ENACTION^PSGOE1(PSGP,PSJORD),PSGOEEF=0 D GETUD^PSJLMGUD(PSGP,PSJORD),ENSFE^PSGOEE0(PSGP,PSJORD),EN^VALM("PSJ LM UD ACTION")
|
---|
103 | I PSJORD["P" L -^PS(53.1,+PSJORD)
|
---|
104 | I PSJORD["U" L -^PS(55,PSGP,5,+PSJORD)
|
---|
105 | ;Send SN to CPRS if auto-verify OFF and Order Set Entry and no 21st piece
|
---|
106 | S PSGOEAV=$P(PSJSYSP0,"^",9)&PSJSYSU
|
---|
107 | I $D(PSGOES),'PSGOEAV,$D(PSGORD),PSGORD["P",$P($G(^PS(53.1,+PSGORD,0)),"^",21)']"" D ORSET^PSGOETO1
|
---|
108 | D UNL^PSSLOCK(PSGP,PSJORD)
|
---|
109 | Q
|
---|
110 | EDIT(PSGP,PSGORD,PROMPT) ;
|
---|
111 | I "DE"[$$GTSTATUS(PSGP,PSGORD) W !,"This order may not be edited." D PAUSE^VALM1 Q
|
---|
112 | I PSGACT'["E" W !,"This order may not be edited." D PAUSE^VALM1 Q
|
---|
113 | S PSGNEDFD="" D HOLDHDR,@$S('PROMPT:"ENEFA2^PSGON",1:"ENEFA^PSGON") I 'Y D ABORT^PSGOEE Q
|
---|
114 | I PSGORD["P" D ENF^PSGOEE Q
|
---|
115 | D ACT^PSGOEE
|
---|
116 | Q
|
---|
117 | RENEW(PSGP,PSGORD) ;
|
---|
118 | D HOLDHDR
|
---|
119 | I 'PSJSYSU,$P($G(^PS(55,PSGP,5,+PSGORD,4)),U,15),$P($G(^(4)),U,16) W !!,"This order is already marked for renewal!" D PAUSE^VALM1 S VALMBCK="R" Q
|
---|
120 | I 'PSGRRF D ^PSGOER Q
|
---|
121 | D ^PSGOERI
|
---|
122 | Q
|
---|
123 | ;
|
---|
124 | GTSTATUS(DFN,ON) ;
|
---|
125 | I ON["P" Q $P($G(^PS(53.1,+ON,0)),U,9)
|
---|
126 | I ON["U" Q $P($G(^PS(55,DFN,5,+ON,0)),U,9)
|
---|
127 | Q $P($G(^PS(55,DFN,"IV",+ON,0)),U,17)
|
---|
128 | ;
|
---|
129 | DC(DFN,PSJORD) ; DC IV, UD, or pending orders.
|
---|
130 | D HOLDHDR
|
---|
131 | S X=$$GTSTATUS(DFN,PSJORD) I X="D"!(X="DE")!(X="R") W !,$S(X="R":"This order has a pending renewal and cannot be DISCONTINUED.",1:"This order has already been DISCONTINUED.") D PAUSE^VALM1 Q
|
---|
132 | D ENO^PSGOEC(DFN,PSJORD) ;,GETUD^PSJLMGUD(DFN,PSJORD),INIT^PSJLMUDE(DFN,PSJORD) S VALMBCK="Q"
|
---|
133 | S VALMBCK="Q"
|
---|
134 | Q
|
---|
135 | HOLD(DFN,PSJORD) ; Change order's status from ACTIVE<->HOLD
|
---|
136 | D HOLDHDR
|
---|
137 | I PSJORD["V" D H^PSIVOPT(DFN,PSJORD,P(17),P(3))
|
---|
138 | I PSJORD'["V" D H^PSGOE1(DFN,PSJORD)
|
---|
139 | D GETUD^PSJLMGUD(DFN,PSJORD),INIT^PSJLMUDE(DFN,PSJORD) S PSGACT=$$ENACTION^PSGOE1(DFN,PSJORD),VALMBCK="R"
|
---|
140 | Q
|
---|
141 | ;
|
---|
142 | COPY(PSGP,PSGORD) ; Copy an order (does not discontinue original order)
|
---|
143 | I $D(PSGCOPY) W !!,"You cannot copy the order at this time" D PAUSE^VALM1 Q
|
---|
144 | I PSGORD["P" W !!,"You cannot copy this "_$S($G(PSGSTAT)]"":PSGSTAT,1:"PENDING IV")_" order." D PAUSE^VALM1 Q
|
---|
145 | I PSGORD["V" D Q
|
---|
146 | .I $G(PSIVCOPY) W !!,"You cannot copy the order at this time" D PAUSE^VALM1 Q
|
---|
147 | .D COPY^PSIVOD(PSGP,PSGORD) Q
|
---|
148 | Q:'$$HIDDEN^PSJLMUTL("COPY")
|
---|
149 | D ^PSJHVARS
|
---|
150 | I $P($G(^PS(55,PSGP,5,+PSGORD,.2)),U,4)="D",'$P($G(^(4)),"^",3) W !!,"Nurse verified orders with a priority of DONE may not be Copied." D PAUSE^VALM1 Q
|
---|
151 | S PSGOEAV=$P(PSJSYSP0,U,9)&PSJSYSU
|
---|
152 | S PSGCOPY=1
|
---|
153 | D FULL^VALM1,^PSGOD
|
---|
154 | S VALMBCK="R"
|
---|
155 | K PSGCOPY
|
---|
156 | S PSGACT=$$ENACTION^PSGOE1(PSGP,PSGORD) ; resets PSGACT after copy
|
---|
157 | I $G(PSGPXN) N PSGTMPXN S PSGTMPXN=PSGPXN
|
---|
158 | D RESTORE^PSJHVARS I $G(PSGTMPXN) S PSGPXN=PSGTMPXN
|
---|
159 | Q
|
---|
160 | ;
|
---|
161 | UPDATE ; Refresh array, actions, & display.
|
---|
162 | D GETUD^PSJLMGUD(DFN,ON),INIT^PSJLMUDE(DFN,ON) S VALMBCK="R"
|
---|
163 | Q
|
---|
164 | FINISH ;
|
---|
165 | D FINISH^PSGOEF,PAUSE^VALM1
|
---|
166 | Q
|
---|
167 | ;
|
---|
168 | LOG(DFN,PSGORD) ;
|
---|
169 | D FULL^VALM1,ENLM^PSGOEL(DFN,PSGORD),PAUSE^VALM1 S VALMBCK="R"
|
---|
170 | Q
|
---|
171 | NEWSEL ;
|
---|
172 | N PSGLMT,PSGODDD,PSJLMQT,PSJLMFIN,PSJUDPRF,PSGRDTX K ^TMP("PSJCOM",$J),^TMP("PSJCOM2",$J)
|
---|
173 | S X=$P(XQORNOD(0),"=",2)
|
---|
174 | S PSGONC=1,PSGLMT=^TMP("PSJPRO",$J,0)
|
---|
175 | D ENCHK^PSGON I '$O(PSGODDD(0)) S VALMQUIT=1 Q
|
---|
176 | S PSJLM=1,PSJSEL=0 F S PSJSEL=$O(PSGODDD(PSJSEL)) Q:'PSJSEL F PSJSEL1=1:1:$L(PSGODDD(PSJSEL),",")-1 D
|
---|
177 | .S PSJORD=$G(^TMP("PSJON",$J,+$P(PSGODDD(PSJSEL),",",PSJSEL1))) D:PSJORD=+PSJORD SELECT^PSJOEA
|
---|
178 | .Q:PSJORD=+PSJORD
|
---|
179 | .Q:PSJORD=""!($G(Y)<0) Q:('$$LS^PSSLOCK(PSGP,PSJORD)) D
|
---|
180 | ..S PSGORD=""
|
---|
181 | ..S ON=PSJORD
|
---|
182 | ..D DISACTIO(PSGP,PSJORD,$G(PSJPNV)) S:PSJORD["V" PSJORD=ON
|
---|
183 | ..D UNL^PSSLOCK(PSGP,PSJORD)
|
---|
184 | ..I $G(PSJNOL) K PSJNOL I $D(ON),ON'=PSJORD D UNL^PSSLOCK(PSGP,ON)
|
---|
185 | ..Q:$G(Y)<0
|
---|
186 | S VALMBCK="Q"
|
---|
187 | K PSJLM
|
---|
188 | Q
|
---|
189 | HOLDHDR ; Freeze header text while processing order actions
|
---|
190 | I $D(VALM("TM")) S IOTM=VALM("TM"),IOBM=IOSL W IOSC W @IOSTBM W IORC
|
---|
191 | Q
|
---|
192 | LOCKERR ;
|
---|
193 | W !!,$C(7),"You are entering or editing an Inpatient Medication order in another session.",!,"Only one order entry/edit session is allowed for a user at a time.",!! N DIR S DIR(0)="E" D ^DIR
|
---|
194 | Q
|
---|
195 | FLAG(DFN,PSJORD) ;Flag order through CPRS entry point.
|
---|
196 | N ORIFN,NODE0
|
---|
197 | S NODE0=$S(PSJORD["V":$G(^PS(55,DFN,"IV",+PSJORD,0)),PSJORD["U":$G(^PS(55,DFN,5,+PSJORD,0)),1:^PS(53.1,+PSJORD,0))
|
---|
198 | S ORIFN=$P(NODE0,"^",21)
|
---|
199 | D EN1^ORCFLAG(ORIFN)
|
---|
200 | D PAUSE^VALM1
|
---|
201 | Q
|
---|
202 | ;
|
---|
203 | COMPLEX(DFN,ON) ;
|
---|
204 | N NDP2,COM
|
---|
205 | S NDP2=$S(ON["P":$G(^PS(53.1,+ON,.2)),ON["U":$G(^PS(55,DFN,5,+ON,.2)),ON["V":$G(^PS(55,DFN,"IV",+ON,.2)),1:"")
|
---|
206 | S COM=$P(NDP2,"^",8) I COM Q 1
|
---|
207 | Q 0
|
---|