1 | PSOTPCLP ;BIRM/PDW-PRINT PATIENT LETTERS ;AUG 5,2003
|
---|
2 | ;;7.0;OUTPATIENT PHARMACY;**145,227,233**;DEC 1997;Build 8
|
---|
3 | Q
|
---|
4 | PRINT ; select options
|
---|
5 | Q ;placed out of order by patch PSO*7*227
|
---|
6 | K ^TMP($J,"TPBLET"),TMP($J,"TPCLW")
|
---|
7 | D EXIT ;INITIALIZE
|
---|
8 | ;build INST to show incompleted Institutions
|
---|
9 | K INST S DIVDA=0 F S DIVDA=$O(^PS(52.92,DIVDA)) Q:DIVDA'>0 D
|
---|
10 | . S INST(DIVDA)=$$GET1^DIQ(52.92,DIVDA,.01)
|
---|
11 | S XX=$$INSTCHK^PSOTPCL I $G(PSOSTOP) Q
|
---|
12 | K INST S DIVDA=0 F S DIVDA=$O(^PS(52.92,DIVDA)) Q:DIVDA'>0 D
|
---|
13 | . Q:$$CHKINST^PSOTPCL(DIVDA)
|
---|
14 | . S INST(DIVDA)=$$GET1^DIQ(52.92,DIVDA,.01)
|
---|
15 | K PARAM,PATLST
|
---|
16 | K DIR S DIR(0)="SO^A:Print all letters that have not printed;P:Print letter by a patient or multiple patients;I:Print by institution (all, one, or a selection)" D ^DIR
|
---|
17 | I Y="A" S PARAM("SORT")="I",PATLST="",PARAM("LP")="N" G DEVICE
|
---|
18 | I Y="P" G PATIENT
|
---|
19 | I Y="I" G DIVISION
|
---|
20 | W !,"None Selected - Quitting",! H 3
|
---|
21 | G EXIT
|
---|
22 | PATIENT ; print by patients
|
---|
23 | S PARAM("SORT")="P",PARAM("LP")="B"
|
---|
24 | D PATSEL ; build PATLST("patient name")=DFN
|
---|
25 | G:($D(PATLST)<10) EXIT
|
---|
26 | G DEVICE
|
---|
27 | DIVISION ;print by division
|
---|
28 | K DIR S DIR(0)="SO^N:Letters NOT Printed;P:Letters Printed;B:Both"
|
---|
29 | D ^DIR Q:"NPB"'[Y
|
---|
30 | S PARAM("LP")=Y
|
---|
31 | S PARAM("SORT")="I"
|
---|
32 | K INST D SEL^PSOTPCL
|
---|
33 | I ($D(INST)<10) W !,"No Selection Made - Quitting",! H 3 G EXIT
|
---|
34 | G DEVICE
|
---|
35 | PATSEL ; Select one or more patients
|
---|
36 | K PATLST
|
---|
37 | S DIC="^PS(52.91,",DIC(0)="AEQM",DIC("W")="D DSPPAT^PSOTPCLP(+Y)"
|
---|
38 | F S DIC("W")="D DSPPAT^PSOTPCLP(+Y)" D ^DIC Q:Y'>0 S DFN=+Y,PTNM=$$GET1^DIQ(52.91,DFN,.01),PATLST(PTNM,DFN)="" D
|
---|
39 | . ;test death date
|
---|
40 | . S XX=$$GET1^DIQ(2,DFN,.351) I XX'="" D Q
|
---|
41 | .. W !!,"Sorry, ",PTNM," died ",XX,!
|
---|
42 | .. K PATLST(PTNM,DFN) H 3
|
---|
43 | . ;test expired date
|
---|
44 | . S EXPDTI=$$GET1^DIQ(52.91,DFN,2,"I")
|
---|
45 | . I EXPDTI,DT>EXPDTI D
|
---|
46 | .. S EXPDT=$$GET1^DIQ(52.91,+DFN,2)
|
---|
47 | .. W !,"Sorry, ",PTNM,"'s eligibility expired ",EXPDT,! K PATLST(PTNM,DFN)
|
---|
48 | . ;check divisions required data
|
---|
49 | . S DIVDA=$$GET1^DIQ(52.91,DFN,7,"I")
|
---|
50 | . S XX=$$CHKINST^PSOTPCL(DIVDA) I XX D
|
---|
51 | .. W !!,"Sorry, ",$$GET1^DIQ(52.91,DFN,7)," is missing required fields.",!!
|
---|
52 | .. K PATLST(PTNM,DFN)
|
---|
53 | ;
|
---|
54 | LST I ($D(PATLST)<10) W !,"No Patients Selected - Quitting",! H 3 S PATLST="" Q
|
---|
55 | W !!,"You have selected:",!
|
---|
56 | S PATNM="" F I=1:1 S PATNM=$O(PATLST(PATNM)) Q:'$L(PATNM) S DFN=0 F S DFN=$O(PATLST(PATNM,DFN)) Q:DFN'>0 W !,PATNM D DSPPAT(DFN) I '(I#20) D D ^DIR I X["^" Q
|
---|
57 | .K DIR S DIR(0)="E",DIR("A")="<cr> - Continue ""^"" - Stop Display"
|
---|
58 | ;
|
---|
59 | W ! K DIR S DIR(0)="Y",DIR("A")="Is the above correct ",DIR("B")="YES" D ^DIR
|
---|
60 | I 'Y G PATSEL
|
---|
61 | Q
|
---|
62 | DSPPAT(DFN) ; Display Division and expire date
|
---|
63 | N DIVNM,EXPDT,PRTDT
|
---|
64 | S DIVNM=$$GET1^DIQ(52.91,DFN,7) W ?32,$E(DIVNM,1,15)
|
---|
65 | S EXPDT=$$GET1^DIQ(52.91,DFN,2,"I")
|
---|
66 | I EXPDT S EXPDT=$$FMTE^XLFDT(EXPDT,"2D") W ?50,"Inact ",EXPDT
|
---|
67 | S PRTDT=$$GET1^DIQ(52.91,DFN,11,"I")
|
---|
68 | I PRTDT S PRTDT=$$FMTE^XLFDT(PRTDT,"2D") W ?66,"Prt ",PRTDT
|
---|
69 | Q
|
---|
70 | DEVICE ;
|
---|
71 | W !,"Queueing is recommended",!
|
---|
72 | S %ZIS="Q" D ^%ZIS
|
---|
73 | Q:POP
|
---|
74 | I $D(IO("Q")) D K ZTSK G EXIT
|
---|
75 | . S (PATLST,INST,PARAM)=""
|
---|
76 | . S ZTRTN="DEQUE^PSOTPCLP",ZTDESC="TPB PRINT PATIENT LETTERS"
|
---|
77 | . F XX="PATLST*","INST*","PARAM*" S ZTSAVE(XX)=""
|
---|
78 | . ;W ! ZW ZTRTN,ZTDESC,PATLST,INST,PARAM,ZTSAVE
|
---|
79 | . D ^%ZTLOAD
|
---|
80 | . I $G(ZTSK) W !!,"Tasked with "_ZTSK
|
---|
81 | ; (code falls through if not queued)
|
---|
82 | DEQUE ; DEQUE/PRINT LETTERS
|
---|
83 | K ^TMP($J,"TPBLET")
|
---|
84 | I PARAM("SORT")="P" G SORTPAT
|
---|
85 | S DIVDA=0 F S DIVDA=$O(INST(DIVDA)) Q:DIVDA'>0 D
|
---|
86 | . S DFN=0 F S DFN=$O(^PS(52.91,"AC",DIVDA,DFN)) Q:DFN'>0 D
|
---|
87 | .. S PTNM=$$GET1^DIQ(52.91,DFN,.01)
|
---|
88 | .. S EXPDTI=$P(^PS(52.91,DFN,0),"^",3),LTPDTI=$P(^(0),"^",12)
|
---|
89 | .. Q:EXPDTI
|
---|
90 | .. Q:$L($$GET1^DIQ(2,DFN,.351))
|
---|
91 | .. I PARAM("LP")="N",LTPDTI Q
|
---|
92 | .. I PARAM("LP")="P",'LTPDTI Q
|
---|
93 | .. S ^TMP($J,"TPBLET",DIVDA,PTNM,DFN)=""
|
---|
94 | G PRTLET
|
---|
95 | SORTPAT ; sort by patient
|
---|
96 | K ^TMP($J,"TPBLET")
|
---|
97 | S PTNM="" F S PTNM=$O(PATLST(PTNM)) Q:PTNM="" D
|
---|
98 | . S DFN=0 F S DFN=$O(PATLST(PTNM,DFN)) Q:DFN'>0 D
|
---|
99 | .. S DA0=^PS(52.91,DFN,0),EXPDTI=$P(DA0,"^",3),LTPDTI=$P(DA0,"^",12),DIVDA=$P(DA0,"^",8)
|
---|
100 | .. Q:EXPDTI
|
---|
101 | .. I PARAM("LP")="N",LTPDTI Q
|
---|
102 | .. I PARAM("LP")="P",'LTPDTI Q
|
---|
103 | .. S ^TMP($J,"TPBLET",DIVDA,PTNM,DFN)=""
|
---|
104 | G PRTLET
|
---|
105 | Q
|
---|
106 | PRTLET ; pull DIVDAs and DFNs from ^TMP($J,"TPBLET",
|
---|
107 | D LOADTMP^PSOTPCLW ; load letter body into TMP
|
---|
108 | K DIVCNT
|
---|
109 | S DIVDA=0 F S DIVDA=$O(^TMP($J,"TPBLET",DIVDA)) Q:DIVDA'>0 D
|
---|
110 | . S XX=$$CHKINST^PSOTPCL(DIVDA) I XX S DIVCNT(DIVDA)=0 Q
|
---|
111 | . D DIV ;GETDIV(DIVDA) ;load institution/parent data for print
|
---|
112 | . S PTNM="" F S PTNM=$O(^TMP($J,"TPBLET",DIVDA,PTNM)) Q:PTNM="" D
|
---|
113 | .. S DFN=0
|
---|
114 | .. F S DFN=$O(^TMP($J,"TPBLET",DIVDA,PTNM,DFN)) Q:DFN'>0 D
|
---|
115 | ... S DIVCNT(DIVDA)=$G(DIVCNT(DIVDA))+1
|
---|
116 | ... D LETTER(DFN)
|
---|
117 | ... S $P(^PS(52.91,DFN,0),U,12)=DT ;set print date
|
---|
118 | ; summary of printing
|
---|
119 | S Y=DT D D^DIQ S SRDT=Y
|
---|
120 | W @IOF,!!,?10,"SUMMARY of TPB LETTER PRINTING ",SRDT
|
---|
121 | W !!
|
---|
122 | I '$D(DIVCNT) W !!,"NO DATA TO PRINT",!! G EXIT
|
---|
123 | S DIVDA=0 F S DIVDA=$O(DIVCNT(DIVDA)) Q:DIVDA'>0 D
|
---|
124 | . W !,?5,$$GET1^DIQ(52.92,DIVDA,.01),?40,DIVCNT(DIVDA)
|
---|
125 | W !
|
---|
126 | G EXIT
|
---|
127 | ;
|
---|
128 | LETTER(DFN) ; print letter , division variables information must be present
|
---|
129 | U IO
|
---|
130 | D GETPAT(DFN)
|
---|
131 | I EXPDT,EXPDT'>DT Q ; patient inactive on printing date
|
---|
132 | D HEADER
|
---|
133 | F LN=1:1 Q:'$D(^TMP($J,"TPCLW","P1",LN)) W !,^(LN)
|
---|
134 | W ?30,"PHARMACY SERVICE",!,?30,DIVNM
|
---|
135 | I $L(MADD1) D I 1
|
---|
136 | . W !,?30,MADD1
|
---|
137 | . W:$L(MADD2) !,?30,MADD2
|
---|
138 | . W !,?30,MCITY,", ",MSTATE," ",MZIP
|
---|
139 | E W !,?30,ADD1 D
|
---|
140 | . W:$L(ADD2) !,?30,ADD2
|
---|
141 | . W !,?30,CITY,", ",STATE," ",ZIP
|
---|
142 | F LN=1:1 Q:'$D(^TMP($J,"TPCLW","P2",LN)) W !,^(LN)
|
---|
143 | W " ",PHN1 W:$L(PHN2) ", or ",PHN2 W ".",!
|
---|
144 | F LN=1:1 Q:'$D(^TMP($J,"TPCLW","P3",LN)) W:LN>1 ! W ^(LN)
|
---|
145 | W !!!!,?4,SIG1 W:$L(SIG2) !,?4,SIG2 W:$L(SIG3) !,?4,SIG3
|
---|
146 | W !
|
---|
147 | Q
|
---|
148 | GETPAT(DFN) ;GET PATIENT DATA
|
---|
149 | K PTNM,EXPDT,SRANAME,TITLE,SRNM,PTSTATE,VADM,VAPA
|
---|
150 | S PTNM=$$GET1^DIQ(52.91,DFN,.01),EXPDT=$$GET1^DIQ(52.91,DFN,2,"I")
|
---|
151 | ;I EXPDT,DT'>EXPDT Q
|
---|
152 | D DEM^VADPT,ADD^VADPT
|
---|
153 | S PTLNM=$P(PTNM,","),PTXNM=$P(PTNM,",")
|
---|
154 | S SRANAME=$P(VADM(1),"^"),X=$P(SRANAME,","),Y=$E(X)_$TR($E(X,2,$L(X)),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
|
---|
155 | S TITLE=$S($P(VADM(5),"^")="F":"Ms. ",1:"Mr. "),SRANAME=TITLE_Y
|
---|
156 | S Y=DT D D^DIQ S SRDT=Y
|
---|
157 | S SEX=$P(VADM(5),"^")
|
---|
158 | S SRNM=$P(VADM(1),",",2)_" "_$P(VADM(1),",")
|
---|
159 | S PADD1=$G(VAPA(1)),PADD2=$G(VAPA(2)),PADD3=$G(VAPA(3))
|
---|
160 | S PCITY=$G(VAPA(4)),PTSTATE=$P($G(VAPA(5)),U,2),PZIP=$G(VAPA(6))
|
---|
161 | N PSOBADR,PSOTEMP
|
---|
162 | S PSOBADR=$$BADADR^DGUTL3(DFN) I PSOBADR S PSOTEMP=$$CHKTEMP^PSOBAI(DFN) D
|
---|
163 | .I 'PSOTEMP S PADD1="** BAD ADDRESS INDICATED **",PADD2="",PADD3="",PCITY="",PSTATE="",PZIP=""
|
---|
164 | CCADD ; Get Confidential Correspondence Address if one is active
|
---|
165 | ; and has the category "all other".
|
---|
166 | ;
|
---|
167 | ; See if CC address exists
|
---|
168 | I '$G(VAPA(12)) Q
|
---|
169 | ; code to check the CC category in the variable array VAPA(22)
|
---|
170 | ; check catagories
|
---|
171 | S XX=0 F CC=1,2,5 I $P($G(VAPA(22,CC)),U,3)="Y" S XX=1
|
---|
172 | Q:'XX
|
---|
173 | S SRCCADD=1
|
---|
174 | S:$G(VAPA(17)) PTSTATE=$P(^DIC(5,$P(VAPA(17),"^"),0),"^",2)
|
---|
175 | S PADD1=$G(VAPA(13)),PADD2=$G(VAPA(14)),PADD3=$G(VAPA(15))
|
---|
176 | S PCITY=$G(VAPA(16)),PTSTAT=$P(VAPA(17),U,2),PZIP=$P(VAPA(18),U,2)
|
---|
177 | Q
|
---|
178 | HEADER ; print letter header
|
---|
179 | U IO
|
---|
180 | W @IOF
|
---|
181 | W !!,?(80-$L(DIVNM))\2,DIVNM
|
---|
182 | W !,?(80-$L(ADD1))\2,ADD1
|
---|
183 | W:$L(ADD2) !,?(80-$L(ADD2))\2,ADD2
|
---|
184 | S XX=CITY_", "_STATE_" "_ZIP
|
---|
185 | W !,?(80-$L(XX))\2,XX
|
---|
186 | F Y=$Y:1:10 W !
|
---|
187 | W !,?4,SRNM,?65,SRDT,!,?4,PADD1 I PADD2'="" W !,?4,PADD2 I PADD3'="" W !,?4,VAPA(3)
|
---|
188 | W:PCITY'="" !,?4,PCITY_", "_PTSTATE_" "_PZIP W !!!
|
---|
189 | Q
|
---|
190 | DIV D GETDIV(DIVDA)
|
---|
191 | I $L(PARDIV) S DIVDA2=$$GET1^DIQ(52.92,DIVDA,.02,"I") D GETDIV(DIVDA2)
|
---|
192 | Q
|
---|
193 | GETDIV(DIVDA) ; GET DIVISIONAL DATA
|
---|
194 | K DIVNM,PARDIV,PHN1,PHN2,ADD1,ADD2,CITY,ZIP,STATE,MADD1,MADD2,MCITY,MZIP,SIG1,SIG2,SIG3
|
---|
195 | ;
|
---|
196 | F FLDX="DIVNM^.01","PARDIV^.02","PHN1^.03","PHN2^.04","ADD1^.05","ADD2^.06","CITY^.07","ZIP^.08","STATE^.09" D GET1(52.92,DIVDA,FLDX)
|
---|
197 | ;
|
---|
198 | F FLDX="MADD1^1.01","MADD2^1.02","MCITY^1.03","MSTATE^1.04","MZIP^1.05","SIG1^2.01","SIG2^2.02","SIG3^2.03" D GET1(52.92,DIVDA,FLDX)
|
---|
199 | ;
|
---|
200 | Q
|
---|
201 | GET1(FILE,FLIEN,FLDX) ; "Variable^FLD" load variable = FILE,FLD
|
---|
202 | N VAR S VAR=$P(FLDX,"^"),FLD=$P(FLDX,"^",2),@VAR=$$GET1^DIQ(FILE,FLIEN,FLD)
|
---|
203 | Q
|
---|
204 | EXIT ;
|
---|
205 | D ^%ZISC
|
---|
206 | I $G(ZTSK) D KILL^%ZTLOAD
|
---|
207 | K ADD1,ADD2,CHK,CITY,DIV,DIVCNT,DIVDA,DIVDA2,DIVNM,DIVX
|
---|
208 | K EXPDT,EXPDTI,FAC,FDA,FLD,FLDX,FILE,FLD,FLDX,FLIEN
|
---|
209 | K I,INST,LN,LOCDA,LTPDTI,MADD1,MADD2,MCITY,MZIP,PAR,PARAM
|
---|
210 | K PARDIV,PATLST,PATNM,PHN1,PHN2,POP,PRTDT,PSOSTOP,PTLNM,PTNM
|
---|
211 | K PTSTATE,PTXNM,SEX,SIG1,SIG2,SIG3,SRNAME,SRDT,STATE,TITLE
|
---|
212 | K VADM,VAPA,VAR,XFLD,XX,YFLD,YY,ZIP,ZTDESC
|
---|
213 | K ^TMP($J,"TPBLET"),^TMP($J,"TPCLW")
|
---|
214 | Q
|
---|
215 | LOAD K PATLST S DFN=0 F S DFN=$O(^PS(52.91,DFN)) Q:DFN'>0 S PATLST($$GET1^DIQ(52.91,DFN,.01))=DFN
|
---|
216 | Q
|
---|