1 | PSJDOSE ;BIR/MV-POSSIBLE DOSES UTILITY ;16 Jan 2001 1:53 PM
|
---|
2 | ;;5.0; INPATIENT MEDICATIONS ;**50,65,106,111**;16 DEC 97
|
---|
3 | ;
|
---|
4 | ; Reference to ^PSSORPH is supported by DBIA #3234.
|
---|
5 | ;
|
---|
6 | ;PSJDSFLG: Set to 1 if Dose and DD are not compatible
|
---|
7 | ;PSJDSSEL: The selected dose in format:
|
---|
8 | ; Dosage Order^DD IEN^DUPD/BCMA DUPD^1(if BCMA DUPD exist
|
---|
9 | ;PSJDSUPD: Set to 1 if need to prompt for the Units Per Dose
|
---|
10 | ;
|
---|
11 | EDITDOSE ;Editing Dosage Ordered for active order
|
---|
12 | ;*Need to set PSJDSFLG to null when call EDITDOSE.
|
---|
13 | NEW PSGOER1,PSJDD,PSJDSUPD,PSJDSSEL,PSJX,Y
|
---|
14 | ;Offer the possible doses from the only one or 1st DD
|
---|
15 | S PSJX=$O(^PS(53.45,PSJSYSP,2,0)) S PSJDD=+$G(^(+PSJX,0))
|
---|
16 | D DOSE(PSJDD)
|
---|
17 | D DOSECHK
|
---|
18 | I +PSJDSFLG D
|
---|
19 | . W !!,PSJDOSE("WARN"),!,PSJDOSE("WARN1"),!
|
---|
20 | . D PAUSE^VALM1
|
---|
21 | S PSGOEE=2
|
---|
22 | Q
|
---|
23 | GETDOSE(PSJDD) ;Dosage Order
|
---|
24 | NEW PSJDSSEL,PSJDSUPD
|
---|
25 | D DOSE(PSJDD)
|
---|
26 | Q:'$D(PSJDSSEL)
|
---|
27 | D:+$G(PSJDSUPD) DUPD
|
---|
28 | D:'+$G(PSJDSUPD) SETDUPD($P(PSJDSSEL,U,3))
|
---|
29 | D DOSECHK
|
---|
30 | I +$G(PSJDSFLG) D
|
---|
31 | . W !!,PSJDOSE("WARN"),!,PSJDOSE("WARN1"),!
|
---|
32 | Q
|
---|
33 | ;
|
---|
34 | SETVAR ;
|
---|
35 | S PSJDOSE("WARN")="WARNING: Dosage Ordered and Dispense Units do not match."
|
---|
36 | S PSJDOSE("WARN1")=" Please verify Dosage."
|
---|
37 | Q
|
---|
38 | ;
|
---|
39 | DOSE(PSJDD) ;Prompt for Dosage Ordered
|
---|
40 | ;PSJDD: Dispense drug IEN
|
---|
41 | ;
|
---|
42 | NEW DA,DR,DIR,DTOUT,DUOUT,DIRUT,PSJDL,PSJX,PSJPIECE,PSJCONT
|
---|
43 | D SETVAR
|
---|
44 | D DOSE^PSSORPH(.PSJDOX,+PSJDD,"U")
|
---|
45 | I '$D(PSJDOX) S PSJDOX(1)=-1
|
---|
46 | S PSJPIECE=$S($P(PSJDOX(1),U,11)]"":11,1:3)
|
---|
47 | I PSJPIECE=3 S:$S($P(PSJDOX(1),U,3)="":1,1:$P(PSJDOX(1),U)=-1) $P(PSJDOX(1),U)=-1
|
---|
48 | AGAIN ;Prompt for dosage order again
|
---|
49 | S PSJX=0
|
---|
50 | NEW DIR
|
---|
51 | W:($P(PSJDOX(1),U)'=-1) !!,"Available Dosage(s)"
|
---|
52 | F PSJDL=0:0 S PSJDL=$O(PSJDOX(PSJDL)) Q:$S('PSJDL:1,$G(DUOUT):1,1:+PSJDOX(PSJDL)=-1) D
|
---|
53 | . S PSJX=PSJX+1
|
---|
54 | . W !?4,$J(PSJX,3),". ",$P(PSJDOX(PSJDL),U,PSJPIECE)
|
---|
55 | . I '(PSJX#16) S DIR(0)="E" D ^DIR
|
---|
56 | W !
|
---|
57 | K DIR S DIR(0)="FO^1:60"
|
---|
58 | S DIR("A")=$S(+PSJX:"Select from list of Available Dosages or Enter Free Text Dose",1:"DOSAGE ORDERED")
|
---|
59 | S:$G(PSGDO)]"" DIR("B")=PSGDO
|
---|
60 | S DIR("?")="^D ENHLP^PSGOEM(53.1,109)" D ^DIR
|
---|
61 | S PSJY=Y
|
---|
62 | ;
|
---|
63 | ;* Dosage Ordered entered is null
|
---|
64 | I PSJY="" S PSJDSUPD=1,PSGDO="",PSJDSSEL=U_+PSJDD_U_1 Q
|
---|
65 | I $S($D(DTOUT):1,$D(DUOUT):1,$D(DIRUT):1,1:0) S PSGOROE1=1 Q
|
---|
66 | ;
|
---|
67 | ;* If select for the presented list (possible and local doses)
|
---|
68 | I $D(PSJDOX(PSJY)) D G:'PSJCONT AGAIN Q
|
---|
69 | . NEW X S X=$P(PSJDOX(PSJY),U,PSJPIECE)
|
---|
70 | . W " ",X
|
---|
71 | . S PSJCONT=$$CONT(X)
|
---|
72 | . Q:'PSJCONT
|
---|
73 | . D SELDOSE(PSJY,PSJDD)
|
---|
74 | ;
|
---|
75 | ;* Entered a numeric and choices are not local pos dose
|
---|
76 | I PSJY?.N!(PSJY?.N1".".N),(PSJPIECE'=3) D G:'PSJCONT AGAIN Q
|
---|
77 | . Q:$L(PSJY)>15
|
---|
78 | . D DOSE^PSSORPH(.PSJDOX,+PSJDD,"U",,PSJY/+$P(PSJDOX(1),U,5))
|
---|
79 | . S PSJCONT=$$CONT($P(PSJDOX(1),U,11))
|
---|
80 | . I 'PSJCONT D DOSE^PSSORPH(.PSJDOX,+PSJDD,"U") Q
|
---|
81 | . D SELDOSE(1,PSJDD)
|
---|
82 | ;
|
---|
83 | ;* Can't accept just a numeric value
|
---|
84 | I PSJY?.N!(PSJY?.N1".".N) D ENHLP^PSGOEM(53.1,109) G AGAIN
|
---|
85 | ;
|
---|
86 | ;* Free text
|
---|
87 | G:'$$CONT(PSJY) AGAIN
|
---|
88 | K PSJDSSEL
|
---|
89 | F X=0:0 S X=$O(PSJDOX(X)) Q:'X S PSJXDOSE=$P(PSJDOX(X),U,PSJPIECE) I PSJY=PSJXDOSE D SELDOSE(X,PSJDD) Q
|
---|
90 | I '$D(PSJDSSEL),($G(PSJY)]"") S PSJDSSEL=PSJY_U_+PSJDD_U_1,PSGDO=PSJY,PSJDSUPD=1
|
---|
91 | Q
|
---|
92 | ;
|
---|
93 | SELDOSE(X,PSJDD) ;
|
---|
94 | S X=PSJDOX(X)
|
---|
95 | S PSGDO=$P(X,U,PSJPIECE)
|
---|
96 | S:$P(X,U)'=-1 PSJDOSE("DO")=$P(X,U,1,2)
|
---|
97 | S PSJDSSEL=$P(X,U,PSJPIECE)_U_PSJDD
|
---|
98 | I +$P(X,U,12) S $P(PSJDSSEL,U,3)=$P(X,U,12)_U_1 Q
|
---|
99 | S $P(PSJDSSEL,U,3)=$S(PSJPIECE=11:$P(X,U,3),1:1)
|
---|
100 | Q
|
---|
101 | CONT(X) ;Ask if user accepting the dose
|
---|
102 | NEW DIR,DIRUT,Y
|
---|
103 | W ! K DIR,DIRUT,DUOUT
|
---|
104 | S DIR(0)="Y",DIR("A")="You entered "_X_" is this correct",DIR("B")="Yes"
|
---|
105 | D ^DIR
|
---|
106 | K DUOUT
|
---|
107 | Q +Y
|
---|
108 | ;
|
---|
109 | DUPD ;
|
---|
110 | NEW PSJX,X
|
---|
111 | S PSGUD=1
|
---|
112 | W !,"UNITS PER DOSE: "_PSGUD_"// " R X:DTIME W " ",X I X="^"!'$T S PSGOROE1=1 Q
|
---|
113 | S:X="" X=1
|
---|
114 | I X="@",'PSGUD W $C(7)," ??" S X="?" D ENHLP^PSGOEM(53.11,.02) G DUPD
|
---|
115 | I X?1."?" D ENHLP^PSGOEM(53.11,.02) G DUPD
|
---|
116 | I X?1.2N1"/"1.2N S X=+$J(+X/$P(X,"/",2),0,2) W " ("_$E("0",X<1)_X_")"
|
---|
117 | I $S($L(X)>12:1,X'=+X:1,X>50:1,X<0:1,1:X?.N1"."5.N) W $C(7)," ??" S X="?" D ENHLP^PSGOEM(53.11,.02) G DUPD
|
---|
118 | S $P(PSJDSSEL,U,3)=X
|
---|
119 | D SETDUPD(X)
|
---|
120 | Q
|
---|
121 | SETDUPD(X) ;
|
---|
122 | S PSGUD=X,X=$S(PSJDSSEL]"":$P(PSJDSSEL,U,2),1:0)
|
---|
123 | S PSJX=$O(^PS(53.45,PSJSYSP,2,"B",X,0))
|
---|
124 | S PSGUD=+$FN(PSGUD,"",4) S:$E(PSGUD)="." PSGUD="0"_PSGUD
|
---|
125 | S $P(^PS(53.45,PSJSYSP,2,+PSJX,0),U,2)=PSGUD
|
---|
126 | Q
|
---|
127 | EDITDD ;Editing DDs
|
---|
128 | NEW DA,DR,DIE
|
---|
129 | S DIE="^PS(53.45,",DA=PSJSYSP,DR=2,DR(2,53.4502)=".02//1" D ^DIE
|
---|
130 | I '$O(^PS(53.45,PSJSYSP,2,0)) W $C(7),!!,"WARNING: This order must have at least one dispense drug before pharmacy can",!?9,"verify it!"
|
---|
131 | Q
|
---|
132 | DOSECHK ;
|
---|
133 | K PSJDSFLG S PSJDSFLG=0
|
---|
134 | Q:'$P(PSJSYSU,";",4)
|
---|
135 | Q:$G(PSGDO)=""
|
---|
136 | NEW PSJX,PSJXDD,PSJCNT S PSJCNT=0
|
---|
137 | F PSJX=0:0 S PSJX=$O(^PS(53.45,PSJSYSP,2,PSJX)) Q:'PSJX D
|
---|
138 | . S PSJXDD=$G(^PS(53.45,PSJSYSP,2,PSJX,0)) Q:PSJXDD=""
|
---|
139 | . S:$P(PSJXDD,U,2)="" $P(^PS(53.45,PSJSYSP,2,PSJX,0),U,2)=1
|
---|
140 | . S PSJCNT=PSJCNT+1
|
---|
141 | D DOSECHK1
|
---|
142 | Q
|
---|
143 | DOSECHK1 ;
|
---|
144 | NEW PSJX,PSJXDD,PSJXUNIT,PSJUNIT,PSJXFLG,PSJTOT
|
---|
145 | S PSJUNIT=$P(PSGDO,+PSGDO,2,$L(PSGDO,+PSGDO))
|
---|
146 | S (PSJDSFLG,PSJXFLG,PSJTOT)=0
|
---|
147 | S PSJX=0 F S PSJX=$O(^PS(53.45,PSJSYSP,2,PSJX)) Q:'PSJX!PSJDSFLG!PSJXFLG D
|
---|
148 | . S PSJXDD=$G(^PS(53.45,PSJSYSP,2,PSJX,0))
|
---|
149 | . S PSJXDUP=$S(+$P(PSJXDD,U,2):$P(PSJXDD,U,2),1:1)
|
---|
150 | . D DOSE^PSSORPH(.PSJXDOX,+PSJXDD,"U")
|
---|
151 | . I $S('$D(PSJXDOX):1,$P(PSJXDOX(1),U)="":1,1:+PSJXDOX(1)=-1) S PSJXFLG=1 Q
|
---|
152 | . S PSJXUNIT=""
|
---|
153 | . S:PSJUNIT["/" PSJXUNIT=PSJUNIT
|
---|
154 | . I PSJUNIT'["/" F X=1:1:$L(PSJUNIT) I $E(PSJUNIT,X)'?.N&($E(PSJUNIT,X)'?1" ") S PSJXUNIT=PSJXUNIT_$E(PSJUNIT,X)
|
---|
155 | . I PSJCNT=1 D ONEDD Q:'PSJDSFLG
|
---|
156 | . D BCMAUPD(PSJXDD),DOSE^PSSORPH(.PSJXDOX,+PSJXDD,"U",,PSJXDUP)
|
---|
157 | . I PSJCNT=1 D ONEDD Q
|
---|
158 | . S PSJTOT=+PSJXDOX(1)+$G(PSJTOT)
|
---|
159 | I PSJCNT>1,(PSJTOT'=+PSGDO) S PSJDSFLG=1
|
---|
160 | Q
|
---|
161 | ONEDD ;
|
---|
162 | NEW X S PSJDSFLG=1
|
---|
163 | F X=0:0 S X=$O(PSJXDOX(X)) Q:'X!'PSJDSFLG D
|
---|
164 | . I +PSJXDOX(X)'=+PSGDO,(PSJXUNIT=$P(PSJXDOX(X),U,2)),$S(PSJXDUP=$P(PSJXDOX(X),U,3):1,1:PSJXDUP=$P(PSJXDOX(X),U,12)) D Q:PSJDSFLG
|
---|
165 | .. N CHK S CHK=+PSGDO/$P(PSJXDOX(X),U,5) S CHK=+$FN(CHK,"",4) S:$E(CHK)="." CHK="0"_CHK I CHK=PSJXDUP S PSJDSFLG=0
|
---|
166 | . I +PSJXDOX(X)=+PSGDO,$TR($P(PSJXDOX(X),U,11)," ")=$TR(PSGDO," "),$S(PSJXDUP=$P(PSJXDOX(X),U,3):1,1:PSJXDUP=$P(PSJXDOX(X),U,12)) S PSJDSFLG=0
|
---|
167 | Q
|
---|
168 | BCMAUPD(PSJDD) ;
|
---|
169 | NEW PSJCNT
|
---|
170 | K PSJBCMA
|
---|
171 | F X=0:0 S X=$O(PSJXDOX(X)) Q:'X D
|
---|
172 | . Q:'+$P(PSJXDOX(X),U,12)
|
---|
173 | . S PSJCNT=+$G(PSJCNT)+1
|
---|
174 | . S PSJBCMA(+PSJDD,$P(PSJXDOX(X),U,12),PSJCNT)=$P(PSJXDOX(X),U,1,2)
|
---|
175 | Q
|
---|
176 | DSPWARN ;
|
---|
177 | NEW PSJDOSE
|
---|
178 | D SETVAR
|
---|
179 | W !!,PSJDOSE("WARN"),!,PSJDOSE("WARN1"),!
|
---|
180 | D PAUSE^VALM1
|
---|
181 | Q
|
---|