1 | PSOQMCAL ; SEA/HAM3 PMI - PHARMACY MEDICATION INSTRUCTION ; 30 Nov 2007 7:55 AM
|
---|
2 | ;;7.0;OUTPATIENT PHARMACY;**294**;DEC 1997;Build 13
|
---|
3 | ;
|
---|
4 | ;Reference to CKP^GMTSUP supported by DBIA 4231
|
---|
5 | ;Reference to COVER^ORWPS supported by DBIA 4954
|
---|
6 | ;Credit to Herb Morriss and Al Hernandez for the original design
|
---|
7 | ;Puget Sound Health Care System, Seattle WA
|
---|
8 | EN N PSOQPEND,DAYSEP,DRUGHDR1,DRUGHDR2,DRUGSEP,INSTSEP1,INSTSEP2,INSTSEP3
|
---|
9 | N EMPTYLN,PRETYPE,SUPTYPE,ADDR,AL,ALFLAG,ARLDASH
|
---|
10 | N ARLDATE,ARLDFN,ARLDOB,ARLNAME,ARLSITE,ARLSN
|
---|
11 | N BLANKLN,BLNKLN,DRUG1,FOOD,GMRAL,IDRUG,ISIG,ITYPE
|
---|
12 | N NVA,NONE,PAGE,PGWIDTH,PGLENGTH,PHONE
|
---|
13 | N RXIEN,SIGCNT,SIGPOS,XPOS1,XPOS2,XPOS3,XPOS4
|
---|
14 | N FN,HP,IA,RPTDATE,TYPE,WP,ST,SUPCNT,SUPDRUG,X,X1,X2,ADDRFL
|
---|
15 | N DIWF,DIWL,DIWR,INSTSEP1,INSTSEP2,INSTSEP3,DRUGHDR1,DRUGHDR2,DRUGSEP
|
---|
16 | S PGWIDTH=IOM-5,PGLENGTH=IOSL-9
|
---|
17 | Q:PGWIDTH<48 ;ensure that the IOM variable is wide enough
|
---|
18 | S RPTDATE=$$FMTE^XLFDT($$NOW^XLFDT,"1D")
|
---|
19 | S XPOS1=(PGWIDTH-26)\2 ;title
|
---|
20 | S XPOS2=PGWIDTH-6 ;page number
|
---|
21 | S XPOS3=(PGWIDTH-29)\2 ;site
|
---|
22 | S XPOS4=(PGWIDTH-53)\2 ;refill info
|
---|
23 | S BLANKLN="",$P(BLNKLN," ",PGWIDTH)=" "
|
---|
24 | S EMPTYLN="!,""|"_$E(BLNKLN,1,PGWIDTH-2)_"|"""
|
---|
25 | S DAYSEP="| | | | |"
|
---|
26 | S DRUGHDR1="| |MORNING| NOON |EVENING|BEDTIME| COMMENTS"
|
---|
27 | S DRUGHDR1=DRUGHDR1_$E(BLNKLN,$L(DRUGHDR1),PGWIDTH-2)_"|"
|
---|
28 | S DRUGHDR2="| "_DAYSEP
|
---|
29 | S DRUGHDR2=DRUGHDR2_$E(BLNKLN,$L(DRUGHDR2),PGWIDTH-2)_"|"
|
---|
30 | S $P(DRUGSEP,"~",PGWIDTH-2)="~"
|
---|
31 | S DRUGSEP="|"_DRUGSEP_"|"
|
---|
32 | S $P(INSTSEP1,"-",PGWIDTH-2)="-"
|
---|
33 | S INSTSEP1="|"_INSTSEP1_"|"
|
---|
34 | S INSTSEP2="| UNITS PER DOSE: "_DAYSEP
|
---|
35 | S INSTSEP2=INSTSEP2_$E(BLNKLN,$L(INSTSEP2),PGWIDTH-2)_"|"
|
---|
36 | S INSTSEP3="| "_DAYSEP
|
---|
37 | S INSTSEP3=INSTSEP3_$E(BLNKLN,$L(INSTSEP3),PGWIDTH-2)_"|"
|
---|
38 | S X1=DT,X2=-45 D C^%DTC S ARLDATE=X
|
---|
39 | 1 ;Patient
|
---|
40 | S ARLDFN=""
|
---|
41 | F IA=1:1 S ARLDFN=$P(ARLPAT,";",IA) Q:ARLDFN="" D
|
---|
42 | . S PAGE=1
|
---|
43 | . D HD,SHOW(ARLDFN)
|
---|
44 | Q
|
---|
45 | SHOW(PTIEN) ;
|
---|
46 | N LIST,NVA
|
---|
47 | D COVER^ORWPS(.LIST,PTIEN)
|
---|
48 | D GETOPORD(.LIST)
|
---|
49 | D GETRXDAT(.LIST)
|
---|
50 | S SUPTYPE=0,PRETYPE="D"
|
---|
51 | S ITYPE="@"
|
---|
52 | F S ITYPE=$O(LIST(ITYPE)) Q:ITYPE]"ZZZ" Q:ITYPE="" D
|
---|
53 | . I PRETYPE'=ITYPE D
|
---|
54 | . . W !,DRUGSEP
|
---|
55 | . . W @EMPTYLN
|
---|
56 | . . W !,"|","SUPPLY ITEMS:"_$E(BLNKLN,14,PGWIDTH-2)_"|"
|
---|
57 | . . S PRETYPE=ITYPE
|
---|
58 | . . I (ITYPE="S")&(SUPTYPE=0) D
|
---|
59 | . . . S SUPTYPE=1,SUPCNT=0,SUPDRUG=""
|
---|
60 | . . . F S SUPDRUG=$O(LIST(ITYPE,SUPDRUG)) Q:SUPDRUG="" D
|
---|
61 | . . . . S SUPCNT=SUPCNT+1
|
---|
62 | . . . I $Y>(PGLENGTH-SUPCNT) W !,DRUGSEP,@IOF D HD3
|
---|
63 | . S IDRUG=""
|
---|
64 | . F S IDRUG=$O(LIST(ITYPE,IDRUG)) Q:IDRUG="" D
|
---|
65 | . . I 'SUPTYPE D
|
---|
66 | . . S SIGCNT=0,SIGPOS=""
|
---|
67 | . . F S SIGPOS=$O(LIST(ITYPE,IDRUG,SIGPOS)) Q:SIGPOS="" D
|
---|
68 | . . . S SIGCNT=SIGCNT+1
|
---|
69 | . . I $Y>(PGLENGTH-SIGCNT) W !,DRUGSEP,@IOF D HD3
|
---|
70 | . . W:'SUPTYPE !,DRUGSEP,@EMPTYLN
|
---|
71 | . . W !,"|",IDRUG_$E(BLNKLN,$L(IDRUG),PGWIDTH-3)_"|"
|
---|
72 | . . Q:SUPTYPE
|
---|
73 | . . S ISIG=0
|
---|
74 | . . F S ISIG=$O(LIST(ITYPE,IDRUG,ISIG)) Q:ISIG<1 D
|
---|
75 | . . . W !,"| ",LIST(ITYPE,IDRUG,ISIG),$E(BLNKLN,$L(LIST(ITYPE,IDRUG,ISIG)),PGWIDTH-8),"|"
|
---|
76 | . . W !,INSTSEP1,!,INSTSEP2 W:'$G(PSOQHS) !,INSTSEP3
|
---|
77 | NVA ;NVA MEDS ADDED 5/6/05
|
---|
78 | I $D(NVA) D
|
---|
79 | . N NVACNT,NVADRUG
|
---|
80 | . W !,DRUGSEP
|
---|
81 | . W @EMPTYLN
|
---|
82 | . W !,"|","NON-VA Medications:"_$E(BLNKLN,20,PGWIDTH-2)_"|"
|
---|
83 | . W @EMPTYLN
|
---|
84 | . S NVACNT=0
|
---|
85 | . S NVADRUG=""
|
---|
86 | . F S NVADRUG=$O(NVA(NVADRUG)) Q:NVADRUG="" D
|
---|
87 | . . S NVACNT=NVACNT+1
|
---|
88 | . . I $Y>(PGLENGTH-NVACNT) W !,DRUGSEP,@IOF D HD3
|
---|
89 | . . W !,"|",NVADRUG_$E(BLNKLN,$L(NVADRUG),PGWIDTH-3)_"|"
|
---|
90 | K NVACNT,NVADRUG
|
---|
91 | W !,INSTSEP1
|
---|
92 | D
|
---|
93 | . Q:'$G(PSOQPEND)
|
---|
94 | . W !!,"Any medication items listed as ""pending"" are those that have just been" D PGE Q:$D(GMTSQIT)
|
---|
95 | . W !,"written by your provider(s). These medication orders will be reviewed" D PGE Q:$D(GMTSQIT)
|
---|
96 | . W !,"by your pharmacist, prior to the prescription(s) being dispensed. When" D PGE Q:$D(GMTSQIT)
|
---|
97 | . W !,"you receive your new prescription(s), by mail or from the pharmacy window," D PGE Q:$D(GMTSQIT)
|
---|
98 | . W !,"be sure to follow the instructions on the prescription label. If you" D PGE Q:$D(GMTSQIT)
|
---|
99 | . W !,"have any question about your medication, please call your provider or " D PGE Q:$D(GMTSQIT)
|
---|
100 | . W !,"your pharmacist." D PGE Q:$D(GMTSQIT)
|
---|
101 | Q
|
---|
102 | PGE D:$G(PSOQHS) CKP^GMTSUP
|
---|
103 | Q
|
---|
104 | GETOPORD(ORDLIST) ;
|
---|
105 | N LISTIEN,KILLORD
|
---|
106 | S LISTIEN=0
|
---|
107 | F S LISTIEN=$O(ORDLIST(LISTIEN)) Q:LISTIEN<1 D
|
---|
108 | . S KILLORD=$$IPORD(ORDLIST(LISTIEN))
|
---|
109 | . I 'KILLORD S KILLORD=$$CKSTATUS(ORDLIST(LISTIEN)) D
|
---|
110 | . K:KILLORD ORDLIST(LISTIEN)
|
---|
111 | Q
|
---|
112 | IPORD(LISTNODE) ;
|
---|
113 | N RETURN,PKG
|
---|
114 | S RETURN=0
|
---|
115 | S PKG=$P($P(LISTNODE,"^",1),";",2)
|
---|
116 | I "UI"[PKG S RETURN=1
|
---|
117 | I $P(LISTNODE,"^",1)["N;" D
|
---|
118 | . S:$P(LISTNODE,"^",4)="ACTIVE" NVA($P(LISTNODE,"^",2),+LISTNODE)=LISTNODE
|
---|
119 | . S RETURN=1
|
---|
120 | Q RETURN
|
---|
121 | CKSTATUS(LISTNODE) ;
|
---|
122 | N RETURN,RXIEN
|
---|
123 | S RETURN=0 ; ASSUME ACTIVE AND NOT PASS MED
|
---|
124 | S:$P(LISTNODE,"^",4)["DISCONTINUED" RETURN=1
|
---|
125 | S:$P(LISTNODE,"^",4)["EXPIRED" RETURN=1
|
---|
126 | Q RETURN
|
---|
127 | GETRXDAT(RXS) ;
|
---|
128 | N RXSIEN,DRUGNAME,FSIG,RXTYPE
|
---|
129 | S RXSIEN=0
|
---|
130 | F S RXSIEN=$O(RXS(RXSIEN)) Q:RXSIEN<1 D
|
---|
131 | . I $P(RXS(RXSIEN),";")["P" D GETPEND(RXSIEN) S PSOQPEND=1 Q ;->
|
---|
132 | . S RXIEN=+RXS(RXSIEN)
|
---|
133 | . S DRUGNAME=$$ZZ^PSOSUTL(RXIEN)
|
---|
134 | . D FSIG^PSOUTLA("R",RXIEN,PGWIDTH-8)
|
---|
135 | . S RXTYPE=$$GETTYPE(RXIEN)
|
---|
136 | . M RXS(RXTYPE,DRUGNAME)=FSIG
|
---|
137 | . N PSOQSUB
|
---|
138 | . S PSOQSUB=$O(RXS(RXTYPE,DRUGNAME,":"),-1)+1
|
---|
139 | . S RXS(RXTYPE,DRUGNAME,PSOQSUB)=$$REFILLS^PSOQ0076(RXIEN)_" refill(s) remaining prior to "_$$FMTE^XLFDT($$EXPDATE^PSOQ0076(RXIEN))
|
---|
140 | Q
|
---|
141 | GETPEND(RXSIEN) ;RMS/HINES 8-16-07 ADD PENDING RX'S
|
---|
142 | N PSOQPDN,PSOQDIND,PSOQOIND,PSOQ100,PSOQSIND,PSOQSCT,PSOQRAW,SUB
|
---|
143 | S PSOQ100=$P(RXS(RXSIEN),U,3) Q:'+PSOQ100
|
---|
144 | S PSOQOIND=$O(^OR(100,PSOQ100,4.5,"ID","ORDERABLE",0)) Q:'+PSOQOIND
|
---|
145 | S PSOQPDN=$P($G(^ORD(101.43,+$G(^OR(100,PSOQ100,4.5,PSOQOIND,1)),0)),U)
|
---|
146 | S PSOQDIND=$O(^OR(100,PSOQ100,4.5,"ID","DRUG",0)) D
|
---|
147 | . Q:'+PSOQDIND
|
---|
148 | . S PSOQPDN=$P($G(^PSDRUG(+$G(^OR(100,PSOQ100,4.5,PSOQDIND,1)),0)),U)
|
---|
149 | S PSOQSIND=$O(^OR(100,PSOQ100,8,":"),-1) Q:'+PSOQSIND
|
---|
150 | F PSOQSCT=2:1:$O(^OR(100,PSOQ100,8,PSOQSIND,.1,":"),-1) D
|
---|
151 | . S PSOQRAW=$G(^OR(100,PSOQ100,8,PSOQSIND,.1,PSOQSCT,0))
|
---|
152 | . N WORDS,COUNT,LINE,NEXTWORD
|
---|
153 | . S WORDS=$L(PSOQRAW," "),SUB=$G(SUB,0)+1
|
---|
154 | . F COUNT=1:1:WORDS D
|
---|
155 | .. S NEXTWORD=$P(PSOQRAW," ",COUNT)
|
---|
156 | .. Q:NEXTWORD=""
|
---|
157 | .. S LINE=$G(LINE)_NEXTWORD_" "
|
---|
158 | .. I $L($G(LINE))>65&(COUNT'=WORDS) K LINE S SUB=SUB+1
|
---|
159 | .. S RXS("D","**PENDING**"_PSOQPDN,SUB)=$G(RXS("D","**PENDING**"_PSOQPDN,SUB))_NEXTWORD_" "
|
---|
160 | Q
|
---|
161 | GETTYPE(IEN52) ;
|
---|
162 | N RETURN,CLASS
|
---|
163 | S RETURN="D"
|
---|
164 | S CLASS=$$GETCLASS(IEN52)
|
---|
165 | S:$E(CLASS,1,1)="X" RETURN="S"
|
---|
166 | S:$E(CLASS,1,2)="DX" RETURN="S"
|
---|
167 | Q RETURN
|
---|
168 | GETCLASS(IENRX) ;
|
---|
169 | N RETURN,NODE0RX,IENDRUG,NODE0DRG,NODEND50,IENCLASS,NODE0CLS,VACLASS
|
---|
170 | S RETURN=""
|
---|
171 | S NODE0RX=$G(^PSRX(IENRX,0))
|
---|
172 | S IENDRUG=$P(NODE0RX,"^",6)
|
---|
173 | Q:+IENDRUG=0 RETURN
|
---|
174 | S NODE0DRG=$G(^PSDRUG(IENDRUG,0))
|
---|
175 | S NODEND50=$G(^PSDRUG(IENDRUG,"ND"))
|
---|
176 | S IENCLASS=$P(NODEND50,"^",6)
|
---|
177 | Q:+IENCLASS=0 RETURN
|
---|
178 | S NODE0CLS=$G(^PS(50.605,IENCLASS,0))
|
---|
179 | S VACLASS=$P(NODE0CLS,"^",1)
|
---|
180 | S RETURN=VACLASS
|
---|
181 | Q RETURN
|
---|
182 | HD ;
|
---|
183 | S FN=ARLDFN
|
---|
184 | S ARLNAME=$E($P(^DPT(ARLDFN,0),"^",1),1,28)
|
---|
185 | S ARLSN=$P(^(0),"^",9),ARLDOB=$P(^(0),"^",3)
|
---|
186 | S PHONE=$S($D(^DPT(ARLDFN,.13)):^(.13),1:"")
|
---|
187 | S HP=$P(PHONE,"^",1),WP=$P(PHONE,"^",2)
|
---|
188 | S ADDR=$S($D(^DPT(ARLDFN,.11)):^(.11),1:"")
|
---|
189 | I $D(^DPT(ARLDFN,.121)),$P(^(.121),"^",9)="Y" D
|
---|
190 | . S X=$S($P(^(.121),"^",8):$P(^(.121),"^",8),1:9999999)
|
---|
191 | . I DT'<$P(^(.121),"^",7),DT'>X D
|
---|
192 | . . S ADDR=^(.121)
|
---|
193 | . . S ADDRFL="(temporary)"
|
---|
194 | . . S HP=$P(ADDR,"^",10)
|
---|
195 | S ST=$S($D(^DIC(5,+$P(ADDR,"^",5),0)):$P(^(0),"^",2),1:"UNKNOWN")
|
---|
196 | S ADDR(4)=$P(ADDR,"^",4)_", "_ST_" "_$P(ADDR,"^",6)
|
---|
197 | S ADDR(3)=$P(ADDR,"^",3),ADDR(2)=$P(ADDR,"^",2),ADDR(1)=$P(ADDR,"^",1)
|
---|
198 | I ADDR(2)']"" D
|
---|
199 | . S ADDR(2)=ADDR(3)
|
---|
200 | . S ADDR(3)=""
|
---|
201 | HD1 ; Header for 1st page
|
---|
202 | S ARLSITE=^PS(59,PSOSITE,0)
|
---|
203 | D PGE Q:$D(GMTSQIT)
|
---|
204 | W !,"Date: ",RPTDATE,?XPOS1,"PATIENT MEDICATION INFORMATION"
|
---|
205 | I $D(PAGE) D
|
---|
206 | . W ?XPOS2,"Page: ",PAGE
|
---|
207 | . S PAGE=PAGE+1
|
---|
208 | W !,?XPOS4,"PRINTED BY THE VA MEDICAL CENTER AT: "_$P($G(^DIC(4,+$G(^PS(59,PSOSITE,"INI")),0)),U,1)
|
---|
209 | W !,?XPOS4,"FOR PRESCRIPTION REFILLS CALL ("_$P(ARLSITE,U,3)_") "_$P(ARLSITE,U,4)
|
---|
210 | HD2 W !!,"Name: ",$E(ARLNAME,1,40)," - ",$E(ARLSN,6,9)
|
---|
211 | W ?30," PHARMACY - ",$P(ARLSITE,"^",7)," DIVISION (",$P(ARLSITE,"^",3),"-",$P(ARLSITE,"^",4),")",!
|
---|
212 | W !,INSTSEP1,!,DRUGHDR1 ;!,DRUGHDR2
|
---|
213 | Q
|
---|
214 | HD3 ;Header for subsequent pages
|
---|
215 | W !,"Date: ",RPTDATE,?XPOS1,"PATIENT MEDICATION INFORMATION"
|
---|
216 | I $D(PAGE) W ?XPOS2,"Page: ",PAGE S PAGE=PAGE+1
|
---|
217 | W !,?XPOS4,"PRINTED BY THE VA MEDICAL CENTER AT: "_$P($G(^DIC(4,+$G(^PS(59,PSOSITE,"INI")),0)),U,1)
|
---|
218 | W !,?XPOS4,"FOR PRESCRIPTION REFILLS CALL ("_$P(ARLSITE,U,3)_") "_$P(ARLSITE,U,4),!
|
---|
219 | W !?1,"Name: ",$E(ARLNAME,1,40)," - ",$E(ARLSN,6,9)
|
---|
220 | W ?30," PHARMACY - ",$P(ARLSITE,"^",7)," DIVISION (",$P(ARLSITE,"^",3),"-",$P(ARLSITE,"^",4),")",!
|
---|
221 | W !,INSTSEP1
|
---|
222 | W:$G(SUPCNT)&'$G(NVACNT) !,"|","SUPPLY ITEMS:"_$E(BLNKLN,14,PGWIDTH-2)_"|",@EMPTYLN
|
---|
223 | W:$G(NVACNT) @EMPTYLN,!,"|","NON-VA Medications:"_$E(BLNKLN,20,PGWIDTH-2)_"|",@EMPTYLN
|
---|
224 | W:'$G(NVACNT)&'$G(SUPCNT) !,DRUGHDR1
|
---|
225 | Q
|
---|
226 | RE ;Allergies
|
---|
227 | S ARLDASH="",$P(ARLDASH,"=",$E(BLNKLN,1,PGWIDTH-10))=ARLDASH W !,ARLDASH,!!
|
---|
228 | S NONE="NO INFORMATION (COMPLETE SECTION BELOW)",ALFLAG=0 D ALL
|
---|
229 | W "REACTIONS/ALLERGIES currently on file : ",$S($D(GMRAL):"",1:NONE) Q:'$D(GMRAL)
|
---|
230 | S X=DRUG1_FOOD,DIWL=5,DIWR=PGWIDTH-5,DIWF="W" D ^DIWP,^DIWW
|
---|
231 | Q
|
---|
232 | ALL ;Gets allergy info
|
---|
233 | K GMRA,GMRAL
|
---|
234 | N IFN,DATA,VER,ARLEND
|
---|
235 | S ARLEND=0,DFN=ARLDFN,GMRA="0^0^011" D ^GMRADPT S (DRUG1,FOOD)=""
|
---|
236 | I $D(GMRAL),GMRAL=0 S DRUG1="NO KNOWN ALLERGIES"
|
---|
237 | I $D(GMRAL),GMRAL=1 S IFN="" F S IFN=$O(GMRAL(IFN)) Q:IFN=""!(ARLEND) S DATA=GMRAL(IFN),AL=$P(DATA,U,2),TYPE=$P(DATA,U,3),VER=$S($P(DATA,U,4)=1:"V",1:"NV") D
|
---|
238 | .I $L(DRUG1)>300 S DRUG1="TOO MANY TO LIST",ARLEND=1
|
---|
239 | .S:TYPE="D" DRUG1=AL_" ("_VER_"),"_DRUG1
|
---|
240 | .S:TYPE="F" FOOD="Food Allergies on File"
|
---|
241 | Q
|
---|