1 | PSBOMT ;BIRMINGHAM/TEJ-BCMA MEDICATION THERAPY REPORT ;Mar 2004
|
---|
2 | ;;3.0;BAR CODE MED ADMIN;**32**;Mar 2004;Build 32
|
---|
3 | ;Per VHA Directive 2004-038 (or future revisions regarding same), this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ; Reference/IA
|
---|
6 | ; File 50.7/2880
|
---|
7 | ; File 52.6/436
|
---|
8 | ; File 52.7/437
|
---|
9 | ; File 200/10060
|
---|
10 | ; EN^PSJBCMA1/2829
|
---|
11 | ; IEN^PSN50P65/4543
|
---|
12 | ; DRGIEN^PSS50P7/4662
|
---|
13 | ; VAC^PSS50/4533
|
---|
14 | ; ^PSDRUG(/221
|
---|
15 | EN ;
|
---|
16 | N PSBHDR,PSBORDS,PSBORD,PSBOIP
|
---|
17 | N TMP
|
---|
18 | K TMP("PSBOIS",$J),TMP("VA CLASS",$J),TMP("PSBADDS",$J),TMP("PSBSOLS",$J),PSBLGD,PSBOIL,PSBDDL,PSBSOLL,PSBADDL
|
---|
19 | S PSBCLSS=0,PSBCFLG=0
|
---|
20 | S PSBXDFN=$P(PSBRPT(.1),U,2)
|
---|
21 | S PSBSTRT=$P(PSBRPT(.1),U,6)+$P(PSBRPT(.1),U,7),PSBSTOP=$P(PSBRPT(.1),U,8)+$P(PSBRPT(.1),U,9)
|
---|
22 | K PSBOCRIT F Y=1:1:4 I $P(PSBRPT(.2),U,Y) S PSBOCRIT=$G(PSBOCRIT,"")_$P("C^P^OC^O",U,Y)_"^"
|
---|
23 | D NOW^%DTC S (Y,PSBNOWX)=% D DD^%DT S PSBDTTM=$E(Y,1,18)
|
---|
24 | S:+PSBSTRT'>0 PSBSTRT=$$FMADD^XLFDT(X,-1)
|
---|
25 | S:+PSBSTOP'>0 PSBSTOP=$P(%,".")
|
---|
26 | I $D(PSBRPT(.2)) I $P(PSBRPT(.2),U,8) S PSBCFLG=1
|
---|
27 | I $D(PSBRPT(2)) F XD=$O(PSBRPT(2,0)):1:$O(PSBRPT(2,"B"),-1) S PSBRPT(2,XD,0)=$TR(PSBRPT(2,XD,0),"~",U) D:$P(PSBRPT(2,XD,0),U)="MT"
|
---|
28 | .I $P(PSBRPT(2,XD,0),U,2)="OIT" D Q
|
---|
29 | ..S PSBSRCHL="ORDERABLE ITEM SEARCH LIST:",PSBOIL(+$P(PSBRPT(2,XD,0),U,3))=""
|
---|
30 | ..S PSB=$P(PSBRPT(2,XD,0),U,3) F X=1:1:$L(PSB,",") Q:$P(PSB,",",X)="" S (TMP("PSBOIS",$J,$P(PSB,",",X)),PSBOIP("OIP",$P(PSB,",",X)))=""
|
---|
31 | .I $P(PSBRPT(2,XD,0),U,2)="ADD" D Q
|
---|
32 | ..S PSBSRCHL="IV MEDICATION SEARCH LIST:"
|
---|
33 | ..I $D(^PSDRUG("A526",$P(PSBRPT(2,XD,0),U,3))) S X2=$O(^PSDRUG("A526",$P(PSBRPT(2,XD,0),U,3),"")) S PSBADDL(X2)="",TMP("PSBOIS",$J,$$OFROMA(X2))=""
|
---|
34 | .I $P(PSBRPT(2,XD,0),U,2)="SOL" D Q
|
---|
35 | ..S PSBSRCHL="IV MEDICATION SEARCH LIST:"
|
---|
36 | ..I $D(^PSDRUG("A527",$P(PSBRPT(2,XD,0),U,3))) S X2=$O(^PSDRUG("A527",$P(PSBRPT(2,XD,0),U,3),"")) S PSBSOLL(X2)="",TMP("PSBOIS",$J,$$OFROMS(X2))=""
|
---|
37 | .I $P(PSBRPT(2,XD,0),U,2)="DD" D K PSBDRGS Q
|
---|
38 | ..S PSBSRCHL="DISPENSED DRUG SEARCH LIST:",PSBDDL($P(PSBRPT(2,XD,0),U,3))=""
|
---|
39 | ..K PSBDRGS S PSBDRGS="" D OILST^PSBRPCMO(.PSBDRGS,$P(PSBRPT(2,XD,0),U,3),"UD")
|
---|
40 | ..F X2=PSBDRGS(0):1:$O(PSBDRGS(""),-1) I +PSBDRGS(1)'<0 S TMP("PSBOIS",$J,$P(PSBDRGS(X2),U,4))=""
|
---|
41 | .I $P(PSBRPT(2,XD,0),U,2)="VAC" D
|
---|
42 | ..S PSBSRCHL="VA DRUG CLASS SEARCH LIST:"
|
---|
43 | ..S PSBCLS=$P(PSBRPT(2,XD,0),U,3) D GETCLSS(PSBCLS) K PSBDDRG("VAC") M TMP("VA CLASS",$J,PSBCLS,"DDRG")=PSBDDRG K PSBDDRG
|
---|
44 | ..S PSBCLSS=1
|
---|
45 | M PSBOIP("OIP")=TMP("PSBOIS",$J)
|
---|
46 | D OUT(PSBXDFN,PSBSTRT,PSBSTOP)
|
---|
47 | Q
|
---|
48 | OUT(PSBXDFN,PSBSTRT,PSBSTOP) ;
|
---|
49 | D:PSBCLSS GETOIS ; POSSBLE CLASS ITEMS VIA AVAIL ORDERS
|
---|
50 | D GETADSO^PSBOMT1 ; ALL ADDS AND SOLS
|
---|
51 | D FINDIENS^PSBOMT1 ; FIND ALL MED LOG ENTRS
|
---|
52 | D PREOUT ; WRIT TO GLOBL
|
---|
53 | D WRITEOT
|
---|
54 | D CLEANSUM^PSBOMT1
|
---|
55 | D CLEANALL^PSBOMT1
|
---|
56 | Q
|
---|
57 | GETOIS ;
|
---|
58 | K ^TMP("PSJ",$J),PSBTMP
|
---|
59 | D EN^PSJBCMA(PSBXDFN,PSBSTRT)
|
---|
60 | Q:^TMP("PSJ",$J,1,0)<0
|
---|
61 | M PSBTMP=^TMP("PSJ",$J) K ^TMP("PSJ",$J)
|
---|
62 | S X=0 F S X=$O(PSBTMP(X)) Q:+X=0 D
|
---|
63 | .Q:$G(PSBOCRIT,"")'[$P(PSBTMP(X,1),U,2)_"^"
|
---|
64 | .S PSBORDN=$P(PSBTMP(X,0),U,3) S PSBORDS(PSBORDN)=""
|
---|
65 | .I $D(PSBTMP(X,700)) D Q
|
---|
66 | ..F XX=1:1:PSBTMP(X,700,0) D
|
---|
67 | ...S PSBCLS="" F S PSBCLS=$O(TMP("VA CLASS",$J,PSBCLS)) Q:+PSBCLS=0 D
|
---|
68 | ....I '$D(TMP("VA CLASS",$J,PSBCLS,"DDRG",$P(PSBTMP(X,700,XX,0),U))) Q
|
---|
69 | ....S PSBORDS(PSBORDN,"DD",$P(PSBTMP(X,700,XX,0),U))=""
|
---|
70 | ....S PSBORDS(PSBORDN,"OIP",$P(PSBTMP(X,3),U))=""
|
---|
71 | ..M PSBOIP("OIP")=PSBORDS(PSBORDN,"OIP")
|
---|
72 | .I $D(PSBTMP(X,850)) M PSBORDS(PSBORDN,"ADD")=PSBTMP(X,850) D
|
---|
73 | ..F XX=1:1:PSBORDS(PSBORDN,"ADD",0) S PSBORDS(PSBORDN,"OIP",$$OFROMA($P(PSBORDS(PSBORDN,"ADD",XX,0),U)))=""
|
---|
74 | ..M PSBOIP("OIP")=PSBORDS(PSBORDN,"OIP")
|
---|
75 | .I $D(PSBTMP(X,950)) M PSBORDS(PSBORDN,"SOL")=PSBTMP(X,950) D
|
---|
76 | ..F XX=1:1:PSBORDS(PSBORDN,"SOL",0) S PSBORDS(PSBORDN,"OIP",$$OFROMS($P(PSBORDS(PSBORDN,"SOL",XX,0),U)))=""
|
---|
77 | ..M PSBOIP("OIP")=PSBORDS(PSBORDN,"OIP")
|
---|
78 | K PSBTMP
|
---|
79 | M TMP("PSBOIS",$J)=PSBOIP("OIP")
|
---|
80 | Q
|
---|
81 | OFROMA(PSBADD) ;OITEM FROM AN ADDITIVE
|
---|
82 | S X1=$$GET1^DIQ(52.6,PSBADD_",",15,"I")
|
---|
83 | I PSBCLSS D
|
---|
84 | .S X2=$$GETDRN(X1)
|
---|
85 | .S PSBCLS="" K X3 F Q:$D(X3) S PSBCLS=$O(TMP("VA CLASS",$J,PSBCLS)) Q:+PSBCLS=0 D
|
---|
86 | ..I $D(TMP("VA CLASS",$J,PSBCLS,"DDRG",X2)) S X3=X1
|
---|
87 | .I '$D(X3) S X3=0
|
---|
88 | Q $G(X3,X1)
|
---|
89 | OFROMS(PSBSOL) ;OITEM FROM A SOLUTION
|
---|
90 | S X1=$$GET1^DIQ(52.7,PSBSOL_",",9,"I")
|
---|
91 | I PSBCLSS D
|
---|
92 | .S X2=$$GETDRN(X1)
|
---|
93 | .S PSBCLS="" K X3 F Q:$D(X3) S PSBCLS=$O(TMP("VA CLASS",$J,PSBCLS)) Q:+PSBCLS=0 D
|
---|
94 | ..I $D(TMP("VA CLASS",$J,PSBCLS,"DDRG",X2)) S X3=X1
|
---|
95 | .I '$D(X3) S X3=0
|
---|
96 | Q $G(X3,X1)
|
---|
97 | PREOUT ;
|
---|
98 | K PSBUNK S XDT="" F S XDT=$O(TMP("PSBIENS",$J,XDT),-1) Q:XDT="" S XIEN="",XIEN=$O(TMP("PSBIENS",$J,XDT,XIEN)) D
|
---|
99 | .Q:$$NONSTS(PSBXDFN,XIEN)
|
---|
100 | .S PSBIEN=XIEN
|
---|
101 | .S PSBIENS=PSBIEN_","
|
---|
102 | .D OUTPUT
|
---|
103 | Q
|
---|
104 | OUTPUT ;
|
---|
105 | S PSBSPC=$J("",80)
|
---|
106 | S W=$E($$GET1^DIQ(53.79,PSBIENS,.02)_PSBSPC,1,20)_" "
|
---|
107 | S W=W_$S($P(^PSB(53.79,PSBIEN,0),U,9)="":"?? ",1:$E($P(^PSB(53.79,PSBIEN,0),U,9)_" ",1,2)_" ")
|
---|
108 | S:$P(^PSB(53.79,PSBIEN,0),U,9)="" PSBUNK=1
|
---|
109 | S W=W_$E($P($G(^PSB(53.79,PSBIEN,.1)),U,2)_PSBSPC,1,2)_" "
|
---|
110 | S W=W_$E($E($$GET1^DIQ(53.79,PSBIENS,.06),1,18)_PSBSPC,1,21)_" "
|
---|
111 | S W=W_$E($$GET1^DIQ(53.79,PSBIENS,"ACTION BY:INITIAL")_PSBSPC,1,10)_" ",PSBLGD("INITIALS",$$GET1^DIQ(53.79,PSBIENS,"ACTION BY","I"))=""
|
---|
112 | S W=W_$$GET1^DIQ(53.79,PSBIENS,.16)
|
---|
113 | D ADD(W)
|
---|
114 | K PSBV
|
---|
115 | F PSBNODE=.5,.6,.7 D
|
---|
116 | .S PSBDD=$S(PSBNODE=.5:53.795,PSBNODE=.6:53.796,1:53.797)
|
---|
117 | .F PSBY=0:0 S PSBY=$O(^PSB(53.79,PSBIEN,PSBNODE,PSBY)) Q:'PSBY D
|
---|
118 | ..I $$GET1^DIQ(53.79,PSBIENS,.11)["V" S PSBV=1
|
---|
119 | ..D WRAPMEDS($$GET1^DIQ(PSBDD,PSBY_","_PSBIENS,.01),$$GET1^DIQ(PSBDD,PSBY_","_PSBIENS,.03),$$GET1^DIQ(PSBDD,PSBY_","_PSBIENS,.02),$$GET1^DIQ(PSBDD,PSBY_","_PSBIENS,.04))
|
---|
120 | I PSBCFLG=1 D COMNTS
|
---|
121 | D ADD("")
|
---|
122 | Q
|
---|
123 | COMNTS ;
|
---|
124 | N Z,CNT
|
---|
125 | S Z="",CNT=0
|
---|
126 | I $D(^PSB(53.79,PSBIEN,.3,0)) D
|
---|
127 | .D ADD("")
|
---|
128 | .D ADD($J("",44)_"Comments: "_$$MAKELINE^PSBOMT1("-",78))
|
---|
129 | .S XT="" F S XT=$O(^PSB(53.79,PSBIEN,.3,XT)) Q:XT="" I XT'=0 D
|
---|
130 | ..D:CNT=1 ADD("")
|
---|
131 | ..S Y=$P(^PSB(53.79,PSBIEN,.3,XT,0),"^",3) D DD^%DT S XBR=Y
|
---|
132 | ..S Z=XBR_" "_$P(^VA(200,$P(^PSB(53.79,PSBIEN,.3,XT,0),"^",2),0),"^",2)
|
---|
133 | ..D WRAP($P(^PSB(53.79,PSBIEN,.3,XT,0),"^",1),Z,PSBIEN)
|
---|
134 | ..S CNT=1
|
---|
135 | .D ADD($J("",54)_$$MAKELINE^PSBOMT1("-",78))
|
---|
136 | Q
|
---|
137 | WRAPMEDS(MED,UG,UO,UOA) ;
|
---|
138 | ;THIS WILL CREATE UPTO 3 LINES
|
---|
139 | S MED=$E(MED_$J("",40),1,40)
|
---|
140 | N UGWRAP,ORWRAP
|
---|
141 | S (CNTX,UOA1,UOA16,UOA31)=""
|
---|
142 | I +$G(UG)?1"."1.N S UG=0_+UG
|
---|
143 | I +$G(UO)?1"."1.N S UO=0_+UO
|
---|
144 | I $G(PSBV,0) S UO="NA"
|
---|
145 | F CNT=1:15:45 D
|
---|
146 | .D PARSE^PSBOMT1(UOA,CNT)
|
---|
147 | .S UGWRAP=$E(UG,CNT,(CNT+7)),UOWRAP=$E(UO,CNT,(CNT+7))
|
---|
148 | .I CNT=1 D ADD($J("",55)_MED_" "_$$PAD^PSBOMT1(UOWRAP,8)_" "_$$PAD^PSBOMT1(UGWRAP,8)_" "_$$PAD^PSBOMT1(UOA1,15))
|
---|
149 | .I (CNT>1),($L(UGWRAP)>0!$L(@("UOA"_CNT))>0) D ADD($J("",94)_$$PAD^PSBOMT1(UOWRAP,8)_" "_$$PAD^PSBOMT1(UGWRAP,8)_" "_$$PAD^PSBOMT1(@("UOA"_CNT),15))
|
---|
150 | Q
|
---|
151 | HEADA ;
|
---|
152 | W !
|
---|
153 | W "Location",?21,"St Sch Administration Date",?50,"By",?61,"Injection Site",?96,"Units",?104,"Units",?113,"Units of"
|
---|
154 | W !,?55,"Medication & Dosage",?96,"Ordered",?104,"Given",?113,"Administration"
|
---|
155 | W !
|
---|
156 | W $$MAKELINE^PSBOMT1("-",132)
|
---|
157 | Q
|
---|
158 | NONSTS(PSBX,PSBY) ;
|
---|
159 | D CLEAN^PSBVT,PSJ1^PSBVT(PSBX,$$GET1^DIQ(53.79,PSBY_",","ORDER REFERENCE NUMBER","I"))
|
---|
160 | Q PSBOCRIT'[PSBSCHT_"^"
|
---|
161 | WRITEOT ;
|
---|
162 | D HDR^PSBOMT1
|
---|
163 | D MEDS
|
---|
164 | D PT^PSBOHDR(PSBXDFN,.PSBHDR),HEADA
|
---|
165 | I '$D(TMP("PSBIENS",$J)) D ADD("<<<< NO HISTORY FOUND FOR THIS TIME FRAME >>>>")
|
---|
166 | S EX="" F S EX=$O(^TMP("PSB",$J,EX)) Q:EX="" D
|
---|
167 | .I $Y>(IOSL-5) D
|
---|
168 | ..W $$PTFTR^PSBOHDR()
|
---|
169 | ..D PT^PSBOHDR(PSBXDFN,.PSBHDR),HEADA
|
---|
170 | .W !,$G(^TMP("PSB",$J,EX))
|
---|
171 | D:$D(TMP("PSBIENS",$J)) LEGEND^PSBOMT1
|
---|
172 | D FTR^PSBOMT1
|
---|
173 | Q
|
---|
174 | MEDS ;
|
---|
175 | N MED,XA,XB
|
---|
176 | S MED="",XB=$O(PSBHDR(""),-1)+1
|
---|
177 | S PSBHDR(XB)=PSBSRCHL
|
---|
178 | I PSBCLSS S XA=0 K PSBGOT F S XA=$O(TMP("VA CLASS",$J,XA)) Q:+XA=0 D
|
---|
179 | .K ^TMP($J,"PSBLIST") D IEN^PSN50P65(XA,"??","PSBLIST")
|
---|
180 | .I ^TMP($J,"PSBLIST",0)>0 S MED=^TMP($J,"PSBLIST",XA,1) Q:$D(PSBGOT(MED)) K ^TMP($J,"PSBLIST")
|
---|
181 | .I $L(PSBHDR(XB)_" "_$G(MED," * NO DATA FOUND * "))+3>IOM D Q
|
---|
182 | ..S XB=XB+1,PSBHDR(XB)=" / "_MED S PSBGOT(MED)=""
|
---|
183 | .S PSBHDR(XB)=PSBHDR(XB)_$S(($L(PSBHDR(XB),":")=2)&($P(PSBHDR(XB),":",2)=""):" ",1:" / ")_MED,PSBGOT(MED)=""
|
---|
184 | I $D(PSBOIL) S XA="" K PSBGOT F S XA=$O(PSBOIL(XA)) Q:XA="" D
|
---|
185 | .S MED=$$GET1^DIQ(50.7,XA,.01) Q:$D(PSBGOT(MED)) S PSBGOT(MED)=""
|
---|
186 | .I $L(PSBHDR(XB)_" / "_MED)+3>IOM D Q
|
---|
187 | ..S XB=XB+1,PSBHDR(XB)=" / "_MED
|
---|
188 | .S PSBHDR(XB)=PSBHDR(XB)_$S(($L(PSBHDR(XB),":")=2)&($P(PSBHDR(XB),":",2)=""):" ",1:" / ")_MED
|
---|
189 | I $D(PSBADDL) S XA="" K PSBGOT F S XA=$O(PSBADDL(XA)) Q:XA="" D
|
---|
190 | .S MED=$$GET1^DIQ(52.6,XA,.01) Q:$D(PSBGOT(MED)) S PSBGOT(MED)=""
|
---|
191 | .I $L(PSBHDR(XB)_" / "_MED)+3>IOM D Q
|
---|
192 | ..S XB=XB+1,PSBHDR(XB)=" / "_MED
|
---|
193 | .S PSBHDR(XB)=PSBHDR(XB)_$S(($L(PSBHDR(XB),":")=2)&($P(PSBHDR(XB),":",2)=""):" ",1:" / ")_MED
|
---|
194 | I $D(PSBSOLL) S XA="" K PSBGOT F S XA=$O(PSBSOLL(XA)) Q:XA="" D
|
---|
195 | .S MED=$$GET1^DIQ(52.7,XA,.01) Q:$D(PSBGOT(MED)) S PSBGOT(MED)=""
|
---|
196 | .I $L(PSBHDR(XB)_" / "_MED)+3>IOM D Q
|
---|
197 | ..S XB=XB+1,PSBHDR(XB)=" / "_MED
|
---|
198 | .S PSBHDR(XB)=PSBHDR(XB)_$S(($L(PSBHDR(XB),":")=2)&($P(PSBHDR(XB),":",2)=""):" ",1:" / ")_MED
|
---|
199 | I $D(PSBDDL) S XA="" F S XA=$O(PSBDDL(XA)) Q:XA="" D
|
---|
200 | .S MED=$$GET1^DIQ(50,XA,.01)
|
---|
201 | .I $L(PSBHDR(XB)_" / "_MED)+3>IOM D Q
|
---|
202 | ..S XB=XB+1,PSBHDR(XB)=" / "_MED
|
---|
203 | .S PSBHDR(XB)=PSBHDR(XB)_$S(($L(PSBHDR(XB),":")=2)&($P(PSBHDR(XB),":",2)=""):" ",1:" / ")_MED
|
---|
204 | Q
|
---|
205 | WRAP(SIZE,ZP,BRIEN) ;
|
---|
206 | D ADD($J("",55)_ZP)
|
---|
207 | D ADD($J("",55)_$E(SIZE,1,75))
|
---|
208 | I $L(SIZE)>75 D ADD($J("",55)_$E(SIZE,76,150))
|
---|
209 | Q
|
---|
210 | ADD(XE) ;
|
---|
211 | S ^TMP("PSB",$J,$O(^TMP("PSB",$J,""),-1)+1)=XE
|
---|
212 | Q
|
---|
213 | GETDRN(IEN1) ;
|
---|
214 | ; Get the Drug IEN (p50) via OI IEN (p50.7)
|
---|
215 | K ^TMP($J,"PSBLIST")
|
---|
216 | D DRGIEN^PSS50P7(IEN1,,"PSBLIST")
|
---|
217 | S DN=$O(^TMP($J,"PSBLIST",0))
|
---|
218 | K ^TMP($J,"PSBLIST")
|
---|
219 | Q DN
|
---|
220 | GETCLSS(IEN1) ;
|
---|
221 | ; Get the Items w/i VA Class
|
---|
222 | K ^TMP($J,"PSBLIST")
|
---|
223 | D VAC^PSS50(IEN1,,,"PSBLIST")
|
---|
224 | M PSBDDRG=^TMP($J,"PSBLIST")
|
---|
225 | K ^TMP($J,"PSBLIST")
|
---|
226 | Q
|
---|