1 | PSNPPIP ;BIR/DMA-WRT-print a medication instruction sheet ; 02/12/03 16:46
|
---|
2 | ;;4.0; NATIONAL DRUG FILE;**3,7,30,62,84**; 30 Oct 98
|
---|
3 | ;
|
---|
4 | ; Reference to ^PS(59.7 supported by IA #2613
|
---|
5 | ; Reference to ^PSDRUG supported by IA #221
|
---|
6 | ; Reference to ^ps(55 supported by IA #2191
|
---|
7 | ;
|
---|
8 | PICK ;select a drug from file 50
|
---|
9 | D DEFLT
|
---|
10 | I $D(PSNDRUG) Q
|
---|
11 | ;
|
---|
12 | I '$D(^PS(50.621))!'$D(^PS(50.622)) W !,"Patient Medication Instruction Sheets data has not been installed",!! G PAUSE
|
---|
13 | ;
|
---|
14 | K DRG F S DIC=50,DIC(0)="AEQMZ",DIC("S")="I $S('$G(^PSDRUG(+Y,""I"")):1,DT'>^(""I""):1,1:0)" D ^DIC K DIC Q:Y<0 D
|
---|
15 | .I '$G(^PSDRUG(+Y,"ND")) W !,"Drug not matched to NDF" Q
|
---|
16 | .;
|
---|
17 | .S PSNGCN=""
|
---|
18 | .S X=^PSDRUG(+Y,"ND"),X=$P($G(^PSNDF(50.68,+$P(X,"^",3),1)),"^",5) I 'X W !,"Sorry No PMI sheet available" Q
|
---|
19 | .S DRG(+Y)=X
|
---|
20 | I '$O(DRG(0)) G PAUSE
|
---|
21 | EN1 ; entry
|
---|
22 | K DIR S DIR(0)="S^1:English;2:Spanish",DIR("A")="Select Language " S:$D(PSNLANG) DIR("B")=PSNLANG D ^DIR K DIR I $D(DIRUT) G PAUSE
|
---|
23 | ;
|
---|
24 | ;If PSNTYPE=2 then branch to English 50.621 at DOONE
|
---|
25 | ;If PSNTYPE=5 then branch to Spanish 50.622 at DOONE
|
---|
26 | S PSNTYPE=$S(Y=1:2,1:5)
|
---|
27 | ;order in the file is 1=English, 2=Spanish
|
---|
28 | ;
|
---|
29 | S DIR(0)="N^1:100:0",DIR("A")="How many copies? ",DIR("B")=1 D ^DIR K DIR I $D(DIRUT) G PAUSE
|
---|
30 | S NUM=Y
|
---|
31 | K ZTSAVE S (ZTSAVE("PSNTYPE"),ZTSAVE("DRG("),ZTSAVE("NUM"),ZTSAVE("PSNDFN"),ZTSAVE("PSNTRADE"),ZTSAVE("PSRX"))="" S:$D(PSNPRTR) %ZIS("B")=PSNPRTR
|
---|
32 | D EN^XUTMDEVQ("DOMORE^PSNPPIP","Print Medication Information Sheets",.ZTSAVE,.%ZIS) I 'POP G QUIT
|
---|
33 | W !,"No device selected and no PMIS printed",!
|
---|
34 | PAUSE R !,"Press return to continue",X:10
|
---|
35 | QUIT K ^TMP($J,"W"),CNTI,CNTO,DIRUT,DRUG,DRG,IN,J,K,LIN0,LINE,LM,NAM,NUM,PG,POP,PSNGCN,PPIN1,PPIN2,PPIND,RM,QUIT,SPEC,TYP,PSNTYPE,X,Y,ZTDESC,ZTRTN,ZTSAVE,DEFLANG,DEFPRTR,PSNDEV,PSNLANG,PSNPRTR,I,N,L,LENGTH,PROD,P,PSNALPHA
|
---|
36 | K PSNBND,PSNBOLD,PSNEMAP,PSNENG,PSNFLAG,PSNLAST,PSNORM,PSNSP D:'$D(PSODFN) KILL^%ZISS Q
|
---|
37 | Q
|
---|
38 | ;
|
---|
39 | Q
|
---|
40 | ;
|
---|
41 | DOMORE ;multiple
|
---|
42 | S DRG=0 F S DRG=$O(DRG(DRG)) Q:'DRG S PSNGCN=DRG(DRG) D DOONE
|
---|
43 | D ^%ZISC S:$D(ZTQUEUED) ZTREQ="@" Q
|
---|
44 | ;
|
---|
45 | DOONE ;Print one PMI sheet
|
---|
46 | ;needs PSNTYPE=1-6 (English, etc.),NUM=# of copies
|
---|
47 | ;DRG=IFN in file 50
|
---|
48 | ;optional DFN=DFN for a particular patient
|
---|
49 | ;
|
---|
50 | N LINE,LIN0,CNTI,CNTO,X,IN,RM,LM,J,K,DRUG,SPEC,NAM
|
---|
51 | S NUM=$G(NUM,1),PSNTYPE=$G(PSNTYPE,2)
|
---|
52 | ;default is one copy of Standard English
|
---|
53 | K ^TMP($J,"W")
|
---|
54 | I $D(PSNDFN) S DFN=PSNDFN,NAM=$P(^DPT(DFN,0),"^") D DEM^VADPT
|
---|
55 | S LM=3,RM=IOM-5,$P(LIN0," ",LM)="",LINE=LIN0 ;,SPEC("[]")="[] "
|
---|
56 | ;Get drug name -
|
---|
57 | ;1.TRADE NAME from 52 if called from PSO
|
---|
58 | ;2. VA PRINT NAME from 50.68
|
---|
59 | ;3. GENERIC NAME from 50
|
---|
60 | ;
|
---|
61 | K DRUG I $G(PSNTRADE)'="" S DRUG=PSNTRADE
|
---|
62 | I '$D(DRUG) S DRUG=$P(^PSDRUG(DRG,0),"^"),X=$G(^("ND")),J=+X,K=+$P(X,"^",3),X=$P($G(^PSNDF(50.68,K,1)),"^") I X]"" S DRUG=X
|
---|
63 | ;
|
---|
64 | ;NEW CODE Takes GCNSEQNO (PSNGCN) and finds the drug IEN in
|
---|
65 | ;the PMI MAP-English file (50.623) That IEN points to the text
|
---|
66 | ;in the PMIS-English file
|
---|
67 | ;
|
---|
68 | ;Select files based on whether user wants English or Spanish
|
---|
69 | I PSNTYPE=2 S PSNFILE1=50.623 ;PMI-MAP ENGLISH file
|
---|
70 | I PSNTYPE=2 S PSNFILE2=50.621 ;PMI-ENGLISH file
|
---|
71 | I PSNTYPE=5 S PSNFILE1=50.624 ;PMI-MAP SPANISH file
|
---|
72 | I PSNTYPE=5 S PSNFILE2=50.622 ;PMI-SPANISH file
|
---|
73 | ;
|
---|
74 | ; S PSNEMAP=0,PSNENG=""
|
---|
75 | S PSNEMAP="",PSNENG=""
|
---|
76 | ; F S PSNEMAP=$O(^PS(PSNFILE1,PSNEMAP)) Q:PSNEMAP="" D
|
---|
77 | I '$O(^PS(PSNFILE1,"B",PSNGCN,0)) I '$D(PSODFN) W @IOF W !,"Drug is not linked to a valid Medication Information Sheet for language selected" K PSNGCN,PSNDF,PSNPN Q
|
---|
78 | I '$O(^PS(PSNFILE1,"B",PSNGCN,0)) I $D(PSODFN) S PSNPPI("MESSAGE")="Drug is not linked to a valid Medication Information Sheet for language selected",PSNFLAG=0 K PSNGCN,PSNDF,PSNPN W PSNPPI("MESSAGE"),! Q
|
---|
79 | S PSNEMAP=$O(^PS(PSNFILE1,"B",PSNGCN,0)) D
|
---|
80 | .I $P(^PS(PSNFILE1,PSNEMAP,0),U)=PSNGCN D
|
---|
81 | ..S PSNENG=$P(^PS(PSNFILE1,PSNEMAP,0),U,2) ;Drug D0 Eng/Span file
|
---|
82 | I +PSNENG=0 W !,"No PMI sheet available" Q
|
---|
83 | ;
|
---|
84 | S CNTI=0,CNTO=1,PSNSP="" ;NOTE PSNSP is a blank line insert
|
---|
85 | ;
|
---|
86 | IMP ;Important note about the drug of choice
|
---|
87 | ;
|
---|
88 | I $D(IOST(0)) S X="IOINHI;IOINORM;IOINLOW" D ENDR^%ZISS
|
---|
89 | S PSNALPHA=""
|
---|
90 | S PSNALPHA="Z" D TXT1
|
---|
91 | ;
|
---|
92 | TITLE ;Title and phonic pronunciation
|
---|
93 | ;
|
---|
94 | I '$D(^PS(PSNFILE2,+PSNENG,"F")) D
|
---|
95 | .S ^TMP($J,"W",CNTO)=$G(IOINHI)_^PS(PSNFILE2,+PSNENG,CNTI)
|
---|
96 | .S CNTO=CNTO+1
|
---|
97 | ; .S ^TMP($J,"W",CNTO)=PSNSP S CNTO=CNTO+1 ;Insert blank line
|
---|
98 | ;
|
---|
99 | I $D(^PS(PSNFILE2,+PSNENG,"F")) D
|
---|
100 | .S ^TMP($J,"W",CNTO)=$G(IOINHI)_^PS(PSNFILE2,+PSNENG,CNTI)_" "_$G(IOINORM)_^PS(PSNFILE2,+PSNENG,"F",1,0) S CNTO=CNTO+1
|
---|
101 | S ^TMP($J,"W",CNTO)=PSNSP S CNTO=CNTO+1 ;Insert blank line
|
---|
102 | ;
|
---|
103 | ;
|
---|
104 | BRAND ;Common Brand Name
|
---|
105 | ;
|
---|
106 | D ^PSNPPIP1
|
---|
107 | ;
|
---|
108 | F PSNALPHA="W","U","H","S","M","P","I","O","N","D","R" D:$D(^PS(PSNFILE2,+PSNENG,PSNALPHA)) TXT1
|
---|
109 | D PRINT
|
---|
110 | Q
|
---|
111 | ;
|
---|
112 | TXT1 ;Text portion
|
---|
113 | ;
|
---|
114 | S J=0,N=1,LINE(N)="",PSNLAST=999
|
---|
115 | S L=1,LINE(L)="",PSNBOLD="",PSNORM=""
|
---|
116 | ;
|
---|
117 | S PSNLAST=$O(^PS(PSNFILE2,+PSNENG,PSNALPHA,PSNLAST),-1) ;Last subscripT
|
---|
118 | ;
|
---|
119 | F S J=$O(^PS(PSNFILE2,+PSNENG,PSNALPHA,J)) Q:'J D ONELN^PSNPPIP1 D
|
---|
120 | .S LINE=^PS(PSNFILE2,+PSNENG,PSNALPHA,J,0)
|
---|
121 | .I J=PSNLAST D Q
|
---|
122 | ..I (N-1)'=0 S LINE(L)=LINE(N-1)_" "_LINE ;Last lines
|
---|
123 | ..I $L(LINE(L))>IOM D ;S LINE(M)=$E(LINE(L),1,IOM) D
|
---|
124 | ...F I=IOM:-1:1 I $E(LINE(L),I)[" " D Q
|
---|
125 | ....S ^TMP($J,"W",CNTO)=$E(LINE(L),1,I) S CNTO=CNTO+1
|
---|
126 | ....S ^TMP($J,"W",CNTO)=$E(LINE(L),I+1,999)
|
---|
127 | ....S CNTO=CNTO+1
|
---|
128 | ..I $L(LINE(L))'>IOM D
|
---|
129 | ...S ^TMP($J,"W",CNTO)=LINE(L) S CNTO=CNTO+1
|
---|
130 | .I N>1 S LINE(N-1)=LINE(N-1)_" "_$E(LINE,1,A) D ;Middle lines
|
---|
131 | ..I $L(LINE(N-1))<IOM S A=IOM-$L(LINE(N-1)) Q
|
---|
132 | ..D BRK
|
---|
133 | ..S N=N+1,CNTO=CNTO+1
|
---|
134 | .I N=1 S LINE(N)=LINE(N)_" "_LINE,P=LINE(N) D
|
---|
135 | ..F I=1:1:$L(P) I $E(P,I)=":" D
|
---|
136 | ...S PSNBOLD=$G(IOINHI)_$E(P,1,I-1),PSNORM=$G(IOINORM)_$E(P,I,999) ;BOLD Section header
|
---|
137 | ..S LINE(N)=PSNBOLD_PSNORM
|
---|
138 | ..;S LINE(N)=LINE(N)_" "_LINE D ;First line
|
---|
139 | ..I $E(LINE(N),1)[" " S LINE(N)=$E(LINE(N),2,999) ;Remove lead space
|
---|
140 | ..S LENGTH=$L(LINE(N)),A=IOM-LENGTH
|
---|
141 | ..S N=N+1
|
---|
142 | ;
|
---|
143 | S:$D(^PS(PSNFILE2,+PSNENG,PSNALPHA)) ^TMP($J,"W",CNTO)=PSNSP S:$D(^PS(PSNFILE2,+PSNENG,PSNALPHA)) CNTO=CNTO+1 ;Insert blank line
|
---|
144 | Q
|
---|
145 | ;
|
---|
146 | BRK ;Break line between words rather than within a word
|
---|
147 | ;
|
---|
148 | F I=IOM:-1:1 I $E(LINE(N-1),I)[" " D Q
|
---|
149 | .S ^TMP($J,"W",CNTO)=$E(LINE(N-1),1,I)
|
---|
150 | .S LINE(N)=$E(LINE(N-1),I+1,999)_$E(LINE,A+1,999)
|
---|
151 | .I $E(LINE(N),1)[" " S LINE(N)=$E(LINE(N),2,999) ;Remove lead space
|
---|
152 | .S LENGTH=$L(LINE(N)),A=IOM-LENGTH
|
---|
153 | ;
|
---|
154 | Q
|
---|
155 | ;
|
---|
156 | PRINT ;
|
---|
157 | S QUIT=0 F J=1:1:NUM Q:QUIT S PG=1 D HEAD Q:QUIT F K=1:1 Q:'$D(^TMP($J,"W",K)) W ^(K),! I $Y+4>IOSL D HEAD Q:QUIT
|
---|
158 | Q
|
---|
159 | HEAD ;
|
---|
160 | I PG>1,$E(IOST,1,2)="C-" S DIR(0)="E" D ^DIR K DIR I 'Y S QUIT=1 Q
|
---|
161 | ; W:$Y @IOF W !!,LIN0,$S(PSNTYPE<4:"Medication instructions for ",1:"Informaci"_$C(243)_"n sobre su medicina "),DRUG,?70,$S(PSNTYPE<4:"Page ",1:"P"_$C(225)_"gina "),PG S PG=PG+1
|
---|
162 | W:$Y @IOF W !!,?70,$S(PSNTYPE<4:"Page ",1:"P"_$C(225)_"gina "),PG,!,LIN0,$S(PSNTYPE<4:"Medication instructions for ",1:"Informaci"_$C(243)_"n sobre su medicin a "),DRUG S PG=PG+1
|
---|
163 | I $D(NAM) W !!,?2,"Printed for: ",NAM_" ("_VA("BID")_")",?60,$$HTE^XLFDT(+$H),!,?2,"Rx Number: "_$G(PSRX)
|
---|
164 | W !!! Q
|
---|
165 | ;
|
---|
166 | ;
|
---|
167 | DICS ;set DIC("S") to screen out inactives and entries in file 50
|
---|
168 | ;that are not linked through NDF to a PMI sheet
|
---|
169 | N QQQ S QQQ=$G(^PSDRUG(+Y,"ND")),QQQ=$P($G(^PSNDF(50.68,+$P(QQQ,"^",3),1)),"^",5) I QQQ,$D(PSNGCN),$S('$G(^PSDRUG(+Y,"I")):1,DT'>^("I"):1,1:0)
|
---|
170 | S QQQ=$G(^PSDRUG(+Y,0))
|
---|
171 | ;reset naked indicator
|
---|
172 | Q
|
---|
173 | ENOP(PSNDRUG,PSNTRADE,PSRX,PSNDFN) ;
|
---|
174 | ;
|
---|
175 | ; entry point from Outpatient Pharmacy
|
---|
176 | ; PSNDRUG = IFN from the DRUG file (50) ** REQUIRED **
|
---|
177 | ; PSRX = IFN from the PRESCRIPTION file (52) ** OPTIONAL **
|
---|
178 | ; PSNTRADE = Trade Name in printable format ** OPTIONAL **
|
---|
179 | ; PSNDFN = Patient's DFN ** OPTIONAL **
|
---|
180 | ;
|
---|
181 | ; This entry point returns the variable PSNFLAG, it will
|
---|
182 | ; be equal to 1 if the information sheet can be printed or
|
---|
183 | ; it will be equal to 0 if an information sheet cannot be
|
---|
184 | ; printed. If PSNFLAG=0, the variable PSNPPI("MESSAGE") will
|
---|
185 | ; be returned containing a message stating why an information
|
---|
186 | ; sheet could not be printed.
|
---|
187 | ;
|
---|
188 | K DRG,PSNPN
|
---|
189 | S PSNFLAG=1,DRG=PSNDRUG,PSNDF=$G(^PSDRUG(PSNDRUG,"ND"))
|
---|
190 | S PSNPN=$P(PSNDF,"^",3),PSNDF=+PSNDF
|
---|
191 | I 'PSNDF S PSNPPI("MESSAGE")="This drug is not matched to the National Drug File; therefore, a Medication Information Sheet cannot be printed.",PSNFLAG=0 K PSNDF,DRG,PSNPN Q
|
---|
192 | LANGE S DEFLANG=$P($G(^PS(59.7,1,10)),"^",7) I DEFLANG]"" S PSNLANG=$S(DEFLANG=1:"English",1:"Spanish") S:PSNLANG="English" PSNTYPE=2 S:PSNLANG="Spanish" PSNTYPE=5
|
---|
193 | S PSNGCN=$P($G(^PSNDF(50.68,PSNPN,1)),"^",5)
|
---|
194 | ;S PPI=$P($G(^PSNDF(50.68,PSNPN,1)),"^",5)
|
---|
195 | ;
|
---|
196 | I 'PSNGCN S PSNPPI("MESSAGE")="This drug is not linked to a Medication Information Sheet.",PSNFLAG=0 K PSNGCN,DRG,PSNDF,PSNPN Q
|
---|
197 | I PSNFLAG S DRG(DRG)=PSNGCN D EN1
|
---|
198 | K PSNDRUG,PSNTRADE,PSNDF,PSNPN,PSNGCN,DRG
|
---|
199 | ;
|
---|
200 | Q
|
---|
201 | DEFLT S DEFLANG=$P($G(^PS(59.7,1,10)),"^",7) I DEFLANG]"" S PSNLANG=$S(DEFLANG=1:"English",1:"Spanish")
|
---|
202 | N A1 S A1=$$GET1^DIQ(55,$G(PSNDFN)_",",106.1,"I"),DEFLANG=$S(A1=2:"Spanish",A1=1:"English",1:DEFLANG)
|
---|
203 | S DEFPRTR=$P($G(^PS(59.7,1,10)),"^",6) I DEFPRTR]"" S DIC="^%ZIS(1,",DA=DEFPRTR,DR=".01",DIQ="PSNDEV",DIQ(0)="E" D EN^DIQ1 S PSNPRTR=$G(PSNDEV(3.5,DA,.01,DIQ(0)))
|
---|
204 | Q
|
---|