| 1 | PSSUTLA1 ;BHAM ISC/RTR-PSS utility routine ;08/21/00 | 
|---|
| 2 | ;;1.0;PHARMACY DATA MANAGEMENT;**38,49,53,54,66,69**;9/30/97 | 
|---|
| 3 | ;Reference to EN^DDIOL supported by DBIA 10142 | 
|---|
| 4 | ; | 
|---|
| 5 | EN3(PSSBINTR,PSSBLGTH) ; | 
|---|
| 6 | ;Pass in to EN3 the internal number from 50.7, and the length of the | 
|---|
| 7 | ;array you want. Returns expanded Instructions is PSSBSIG array | 
|---|
| 8 | K PSSBSIG N X,BVAR,BVAR1,III,CNT,NNN,BLIM,Y,PISIG,Z0,Z1,CNTZ,FFF | 
|---|
| 9 | Q:'$G(PSSBINTR)!('$G(PSSBLGTH)) | 
|---|
| 10 | S X=$P($G(^PS(50.7,PSSBINTR,"INS")),"^") Q:X="" | 
|---|
| 11 | S PISIG(1)="",CNTZ=1 Q:$L(X)<1  F Z0=1:1:$L(X," ") G:Z0="" START S Z1=$P(X," ",Z0) D  G:'$D(X) START | 
|---|
| 12 | .D:$D(X)&($G(Z1)]"")  D ADD | 
|---|
| 13 | ..S Y=$O(^PS(51,"B",Z1,0)) Q:'Y!($P($G(^PS(51,+Y,0)),"^",4)>1)  S Z1=$P($G(^PS(51,Y,0)),"^",2) Q:'$D(^(9))  S Y=$P(X," ",Z0-1),Y=$E(Y,$L(Y)) S:Y>1 Z1=^(9) | 
|---|
| 14 | START ; | 
|---|
| 15 | S (BVAR,BVAR1)="",III=1 | 
|---|
| 16 | F FFF=0:0 S FFF=$O(PISIG(FFF)) Q:'FFF  S CNT=0 F NNN=1:1:$L(PISIG(FFF)) I $E(PISIG(FFF),NNN)=" "!($L(PISIG(FFF))=NNN) S CNT=CNT+1 D  I $L(BVAR)>PSSBLGTH S PSSBSIG(III)=BLIM_" ",III=III+1,BVAR=BVAR1 | 
|---|
| 17 | .S BVAR1=$P(PISIG(FFF)," ",(CNT)) | 
|---|
| 18 | .S BLIM=BVAR | 
|---|
| 19 | .S BVAR=$S(BVAR="":BVAR1,1:BVAR_" "_BVAR1) | 
|---|
| 20 | I $G(BVAR)'="" S PSSBSIG(III)=BVAR | 
|---|
| 21 | I $G(PSSBSIG(1))=""!($G(PSSBSIG(1))=" ") S PSSBSIG(1)=$G(PSSBSIG(2)) K PSSBSIG(2) | 
|---|
| 22 | F CNTZ=0:0 S CNTZ=$O(PSSBSIG(CNTZ)) Q:'CNTZ  S PSSX("PI",CNTZ)=$G(PSSBSIG(CNTZ)) | 
|---|
| 23 | K PSSBSIG | 
|---|
| 24 | Q | 
|---|
| 25 | ADD ; | 
|---|
| 26 | I $L(PISIG(CNTZ))+$L(Z1)+1<246 S PISIG(CNTZ)=PISIG(CNTZ)_" "_Z1 Q | 
|---|
| 27 | S CNTZ=CNTZ+1 S PISIG(CNTZ)=Z1 | 
|---|
| 28 | Q | 
|---|
| 29 | ; | 
|---|
| 30 | DEA(PSSDIENM) ;Return DEA Special Handling for CPRS Dose Call | 
|---|
| 31 | ;1 Requires wet sig, DEA contains 1, or a 2 | 
|---|
| 32 | ;2 = Controlled Sub, no wet sig required, DEA contains 3, 4, or 5 | 
|---|
| 33 | ;0 = others | 
|---|
| 34 | Q:'$G(PSSDIENM) | 
|---|
| 35 | N PSSDEAX,PSSDEAXV | 
|---|
| 36 | S PSSDEAX=$P($G(^PSDRUG(PSSDIENM,0)),"^",3) | 
|---|
| 37 | I PSSDEAX[1!(PSSDEAX[2) S PSSDEAXV=1 G DSET | 
|---|
| 38 | I PSSDEAX[3!(PSSDEAX[4)!(PSSDEAX[5) S PSSDEAXV=2 G DSET | 
|---|
| 39 | S PSSDEAXV=0 | 
|---|
| 40 | DSET ; | 
|---|
| 41 | S PSSX("DD",PSSDIENM)=PSSX("DD",PSSDIENM)_"^"_PSSDEAXV_"^"_$S($D(PSSHLF(PSSDIENM)):1,1:0) | 
|---|
| 42 | Q | 
|---|
| 43 | HELP ; | 
|---|
| 44 | Q:$G(X)="" | 
|---|
| 45 | N PSSSIG,PSSYX,PSSZ0,PSSZ1,PSSCTX,PSSLPX,PSSBVAR,PSSBVAR1,PSSIII,PSSFFF,PCT,PNNN,PSSBLIM,PSSIG | 
|---|
| 46 | S PSSIG(1)="",PSSCTX=1 Q:$L(X)<1  F PSSZ0=1:1:$L(X," ") G:PSSZ0="" HELP1 S PSSZ1=$P(X," ",PSSZ0) D  G:'$D(X) HELP1 | 
|---|
| 47 | .D:$D(X)&($G(PSSZ1)]"")  D HELPADD | 
|---|
| 48 | ..S PSSYX=$O(^PS(51,"B",PSSZ1,0)) Q:'PSSYX!($P($G(^PS(51,+PSSYX,0)),"^",4)>1)  S PSSZ1=$P($G(^PS(51,PSSYX,0)),"^",2) Q:'$D(^(9))  S PSSYX=$P(X," ",PSSZ0-1),PSSYX=$E(PSSYX,$L(PSSYX)) S:PSSYX>1 PSSZ1=^(9) | 
|---|
| 49 | HELP1 ; | 
|---|
| 50 | S (PSSBVAR,PSSBVAR1)="",PSSIII=1 | 
|---|
| 51 | F PSSFFF=0:0 S PSSFFF=$O(PSSIG(PSSFFF)) Q:'PSSFFF  S PCT=0 F PNNN=1:1:$L(PSSIG(PSSFFF)) I $E(PSSIG(PSSFFF),PNNN)=" "!($L(PSSIG(PSSFFF))=PNNN) S PCT=PCT+1 D  I $L(PSSBVAR)>70 S PSSSIG(PSSIII)=PSSBLIM_" ",PSSIII=PSSIII+1,PSSBVAR=PSSBVAR1 | 
|---|
| 52 | .S PSSBVAR1=$P(PSSIG(PSSFFF)," ",(PCT)) | 
|---|
| 53 | .S PSSBLIM=PSSBVAR | 
|---|
| 54 | .S PSSBVAR=$S(PSSBVAR="":PSSBVAR1,1:PSSBVAR_" "_PSSBVAR1) | 
|---|
| 55 | I $G(PSSBVAR)'="" S PSSSIG(PSSIII)=PSSBVAR | 
|---|
| 56 | I $G(PSSSIG(1))=""!($G(PSSSIG(1))=" ") S PSSSIG(1)=$G(PSSSIG(2)) K PSSSIG(2) | 
|---|
| 57 | F PSSLPX=0:0 S PSSLPX=$O(PSSSIG(PSSLPX)) Q:'PSSLPX  D:PSSLPX=1 EN^DDIOL(" ") D EN^DDIOL(" "_$G(PSSSIG(PSSLPX))) | 
|---|
| 58 | Q | 
|---|
| 59 | HELPADD ; | 
|---|
| 60 | I $L(PSSIG(PSSCTX))+$L(PSSZ1)+1<246 S PSSIG(PSSCTX)=PSSIG(PSSCTX)_" "_PSSZ1 Q | 
|---|
| 61 | S PSSCTX=PSSCTX+1 S PSSIG(PSSCTX)=PSSZ1 | 
|---|
| 62 | Q | 
|---|
| 63 | PRICE() ;Return price per dose for CPRS Dose call | 
|---|
| 64 | ;DLOOP = Internal entry number from Drug file | 
|---|
| 65 | ;PSSUDOS = Dispense units per Dose | 
|---|
| 66 | N PSSPRICE,PSSPRQ | 
|---|
| 67 | I '$G(DLOOP) Q "" | 
|---|
| 68 | S PSSPRICE=$P($G(^PSDRUG(DLOOP,660)),"^",6) I 'PSSPRICE Q "" | 
|---|
| 69 | I $G(PSSUDOS) S PSSPRQ=PSSUDOS*PSSPRICE G PRICEQ | 
|---|
| 70 | I $G(PSSBCM) S PSSPRQ=PSSBCM*PSSPRICE | 
|---|
| 71 | PRICEQ ; | 
|---|
| 72 | I $E($G(PSSPRQ))="." S PSSPRQ=0_$G(PSSPRQ) | 
|---|
| 73 | Q $G(PSSPRQ) | 
|---|
| 74 | ; | 
|---|
| 75 | Q | 
|---|
| 76 | ; | 
|---|
| 77 | OIDEA(PSSXOI,PSSXOIP) ; | 
|---|
| 78 | ;DEA return based on Orderable Item, Item and Usage passed in | 
|---|
| 79 | ;1 means DEA contains a 1, or a 2 | 
|---|
| 80 | ;2 means DEA contains a 3, or a 4, or a 5 | 
|---|
| 81 | ;0 means all others | 
|---|
| 82 | N PSSXOLP,PSSXOLPD,PSSXOLPX,PSSXNODD,PSSPKLX | 
|---|
| 83 | S (PSSXOLPD,PSSXNODD)=0 I PSSXOIP="X" G OIDQ | 
|---|
| 84 | I '$G(PSSXOI)!($G(PSSXOIP)="") G OIDQ | 
|---|
| 85 | S PSSPKLX=$S(PSSXOIP="I":1,PSSXOIP="U":1,1:0) | 
|---|
| 86 | F PSSXOLP=0:0 S PSSXOLP=$O(^PSDRUG("ASP",PSSXOI,PSSXOLP)) Q:'PSSXOLP!(PSSXOLPD=1)  D | 
|---|
| 87 | .I $P($G(^PSDRUG(PSSXOLP,"I")),"^"),$P($G(^("I")),"^")<DT Q | 
|---|
| 88 | .I 'PSSPKLX,$P($G(^PSDRUG(PSSXOLP,2)),"^",3)'["O" Q | 
|---|
| 89 | .I PSSPKLX I $P($G(^PSDRUG(PSSXOLP,2)),"^",3)'["U",$P($G(^(2)),"^",3)'["I" Q | 
|---|
| 90 | .S PSSXNODD=1 | 
|---|
| 91 | .S PSSXOLPX=$P($G(^PSDRUG(PSSXOLP,0)),"^",3) | 
|---|
| 92 | .I PSSXOLPX[1!(PSSXOLPX[2) S PSSXOLPD=1 Q | 
|---|
| 93 | .I PSSXOLPX[3!(PSSXOLPX[4)!(PSSXOLPX[5) S PSSXOLPD=2 | 
|---|
| 94 | OIDQ ; | 
|---|
| 95 | I PSSXOLPD=0,'PSSXNODD S PSSXOLPD="" | 
|---|
| 96 | Q PSSXOLPD | 
|---|
| 97 | ; | 
|---|
| 98 | Q | 
|---|
| 99 | ; | 
|---|
| 100 | LEAD ;Leading zeros, CPRS Dosage call | 
|---|
| 101 | N PSSBK,PSSBK1,PSSBKD | 
|---|
| 102 | F PSSLD=0:0 S PSSLD=$O(PSSX(PSSLD)) Q:'PSSLD  D | 
|---|
| 103 | .I $E($P(PSSX(PSSLD),"^"),1)="." S $P(PSSX(PSSLD),"^")="0"_$P(PSSX(PSSLD),"^") | 
|---|
| 104 | .I $E($P(PSSX(PSSLD),"^",2),1)="." S $P(PSSX(PSSLD),"^",2)="0"_$P(PSSX(PSSLD),"^",2) | 
|---|
| 105 | .I $P(PSSX(PSSLD),"^",2)["/." S PSSBKD=$P(PSSX(PSSLD),"^",2) D | 
|---|
| 106 | ..S PSSBK=$P(PSSBKD,"/."),PSSBK1=$P(PSSBKD,"/.",2) | 
|---|
| 107 | ..S $P(PSSX(PSSLD),"^",2)=$G(PSSBK)_"/0."_$G(PSSBK1) | 
|---|
| 108 | .I $E($P(PSSX(PSSLD),"^",5),1)="." S $P(PSSX(PSSLD),"^",5)="0"_$P(PSSX(PSSLD),"^",5) | 
|---|
| 109 | .I $P(PSSX(PSSLD),"^",5)["/." S PSSBKD=$P(PSSX(PSSLD),"^",5) D | 
|---|
| 110 | ..S PSSBK=$P(PSSBKD,"/."),PSSBK1=$P(PSSBKD,"/.",2) | 
|---|
| 111 | ..S $P(PSSX(PSSLD),"^",5)=$G(PSSBK)_"/0."_$G(PSSBK1) | 
|---|
| 112 | .I $O(PSSX(PSSLD,0)) D | 
|---|
| 113 | ..F PSSLD1=0:0 S PSSLD1=$O(PSSX(PSSLD,PSSLD1)) Q:'PSSLD1  D | 
|---|
| 114 | ...I $E($P(PSSX(PSSLD,PSSLD1),"^"),1)="." S $P(PSSX(PSSLD,PSSLD1),"^")="0"_$P(PSSX(PSSLD,PSSLD1),"^") | 
|---|
| 115 | ...I $E($P(PSSX(PSSLD,PSSLD1),"^",2),1)="." S $P(PSSX(PSSLD,PSSLD1),"^",2)="0"_$P(PSSX(PSSLD,PSSLD1),"^",2) | 
|---|
| 116 | ...I $P(PSSX(PSSLD,PSSLD1),"^",2)["/." S PSSBKD=$P(PSSX(PSSLD,PSSLD1),"^",2) D | 
|---|
| 117 | ....S PSSBK=$P(PSSBKD,"/."),PSSBK1=$P(PSSBKD,"/.",2) | 
|---|
| 118 | ....S $P(PSSX(PSSLD,PSSLD1),"^",2)=$G(PSSBK)_"/0."_$G(PSSBK1) | 
|---|
| 119 | ...I $E($P(PSSX(PSSLD,PSSLD1),"^",5),1)="." S $P(PSSX(PSSLD,PSSLD1),"^",5)="0"_$P(PSSX(PSSLD,PSSLD1),"^",5) | 
|---|
| 120 | ...I $P(PSSX(PSSLD,PSSLD1),"^",5)["/." S PSSBKD=$P(PSSX(PSSLD,PSSLD1),"^",5) D | 
|---|
| 121 | ....S PSSBK=$P(PSSBKD,"/."),PSSBK1=$P(PSSBKD,"/.",2) | 
|---|
| 122 | ....S $P(PSSX(PSSLD,PSSLD1),"^",5)=$G(PSSBK)_"/0."_$G(PSSBK1) | 
|---|
| 123 | S PSSLD="" F  S PSSLD=$O(PSSX("DD",PSSLD)) Q:PSSLD=""  D | 
|---|
| 124 | .I $E($P(PSSX("DD",PSSLD),"^",5),1)="." S $P(PSSX("DD",PSSLD),"^",5)="0"_$P(PSSX("DD",PSSLD),"^",5) | 
|---|
| 125 | Q | 
|---|
| 126 | LEADP ;Leading zeros pharmacy call | 
|---|
| 127 | N PSSBB,PSSBB1,PSSBBD | 
|---|
| 128 | F PSSMD=0:0 S PSSMD=$O(PSSX(PSSMD)) Q:'PSSMD  D | 
|---|
| 129 | .F PSSMDN=1,3,5,11 I $E($P(PSSX(PSSMD),"^",PSSMDN),1)="." S $P(PSSX(PSSMD),"^",PSSMDN)="0"_$P(PSSX(PSSMD),"^",PSSMDN) | 
|---|
| 130 | .I $P(PSSX(PSSMD),"^",2)["/." S PSSBBD=$P(PSSX(PSSMD),"^",2) D | 
|---|
| 131 | ..S PSSBB=$P(PSSBBD,"/."),PSSBB1=$P(PSSBBD,"/.",2) | 
|---|
| 132 | ..S $P(PSSX(PSSMD),"^",2)=$G(PSSBB)_"/0."_$G(PSSBB1) | 
|---|
| 133 | .I $P(PSSX(PSSMD),"^",11)["/." S PSSBBD=$P(PSSX(PSSMD),"^",11) D | 
|---|
| 134 | ..S PSSBB=$P(PSSBBD,"/."),PSSBB1=$P(PSSBBD,"/.",2) | 
|---|
| 135 | ..S $P(PSSX(PSSMD),"^",11)=$G(PSSBB)_"/0."_$G(PSSBB1) | 
|---|
| 136 | .I $O(PSSX(PSSMD,0)) D | 
|---|
| 137 | ..F PSSMD1=0:0 S PSSMD1=$O(PSSX(PSSMD,PSSMD1)) Q:'PSSMD1  D | 
|---|
| 138 | ...F PSSMDN=1,3,5,11 I $E($P(PSSX(PSSMD,PSSMD1),"^",PSSMDN),1)="." S $P(PSSX(PSSMD,PSSMD1),"^",PSSMDN)="0"_$P(PSSX(PSSMD,PSSMD1),"^",PSSMDN) | 
|---|
| 139 | ...I $P(PSSX(PSSMD,PSSMD1),"^",2)["/." S PSSBBD=$P(PSSX(PSSMD,PSSMD1),"^",2) D | 
|---|
| 140 | ....S PSSBB=$P(PSSBBD,"/."),PSSBB1=$P(PSSBBD,"/.",2) | 
|---|
| 141 | ....S $P(PSSX(PSSMD,PSSMD1),"^",2)=$G(PSSBB)_"/0."_$G(PSSBB1) | 
|---|
| 142 | ...I $P(PSSX(PSSMD,PSSMD1),"^",11)["/." S PSSBBD=$P(PSSX(PSSMD,PSSMD1),"^",11) D | 
|---|
| 143 | ....S PSSBB=$P(PSSBBD,"/."),PSSBB1=$P(PSSBBD,"/.",2) | 
|---|
| 144 | ....S $P(PSSX(PSSMD,PSSMD1),"^",11)=$G(PSSBB)_"/0."_$G(PSSBB1) | 
|---|
| 145 | S PSSMD="" F  S PSSMD=$O(PSSX("DD",PSSMD)) Q:PSSMD=""  D | 
|---|
| 146 | .I $E($P(PSSX("DD",PSSMD),"^",5),1)="." S $P(PSSX("DD",PSSMD),"^",5)="0"_$P(PSSX("DD",PSSMD),"^",5) | 
|---|
| 147 | Q | 
|---|
| 148 | DUP ;delete str/unit if duplicate local doses with strength are found | 
|---|
| 149 | N PSSLXA,PSSLXL,PSSLXFL,PSSLXQ,PSSLXLD,PSSLXMED,PSSLXSTR,PSSLXND,PSSLXX | 
|---|
| 150 | S PSSLXFL=0 | 
|---|
| 151 | S PSSLXL="" F  S PSSLXL=$O(PSSX(PSSLXL)) Q:PSSLXL=""!(PSSLXFL)  D | 
|---|
| 152 | .S PSSLXND=$G(PSSX(PSSLXL)),PSSLXSTR="" | 
|---|
| 153 | .S PSSLXLD=$P(PSSLXND,"^",5),PSSLXMED=$P(PSSLXND,"^",6) I PSSLXMED S PSSLXSTR=$P($G(PSSX("DD",PSSLXMED)),"^",5) | 
|---|
| 154 | .I PSSLXLD'="",PSSLXMED'="",PSSLXSTR'="" D | 
|---|
| 155 | ..S PSSLXA(PSSLXLD,PSSLXSTR,PSSLXMED)="" | 
|---|
| 156 | ..S PSSLXX="" F  S PSSLXX=$O(PSSLXA(PSSLXLD,PSSLXSTR,PSSLXX)) Q:PSSLXX=""!(PSSLXFL)  I PSSLXX'=PSSLXMED S PSSLXFL=1 | 
|---|
| 157 | I PSSLXFL S PSSLXQ="" F  S PSSLXQ=$O(PSSX("DD",PSSLXQ)) Q:PSSLXQ=""  S $P(PSSX("DD",PSSLXQ),"^",5)="",$P(PSSX("DD",PSSLXQ),"^",6)="" | 
|---|
| 158 | Q | 
|---|