| [613] | 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 | 
|---|