PSSUTLA1 ;BHAM ISC/RTR-PSS utility routine ;08/21/00
;;1.0;PHARMACY DATA MANAGEMENT;**38,49,53,54,66,69**;9/30/97
;Reference to EN^DDIOL supported by DBIA 10142
;
EN3(PSSBINTR,PSSBLGTH) ;
;Pass in to EN3 the internal number from 50.7, and the length of the
;array you want. Returns expanded Instructions is PSSBSIG array
K PSSBSIG N X,BVAR,BVAR1,III,CNT,NNN,BLIM,Y,PISIG,Z0,Z1,CNTZ,FFF
Q:'$G(PSSBINTR)!('$G(PSSBLGTH))
S X=$P($G(^PS(50.7,PSSBINTR,"INS")),"^") Q:X=""
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
.D:$D(X)&($G(Z1)]"") D ADD
..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)
START ;
S (BVAR,BVAR1)="",III=1
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
.S BVAR1=$P(PISIG(FFF)," ",(CNT))
.S BLIM=BVAR
.S BVAR=$S(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
I $G(BVAR)'="" S PSSBSIG(III)=BVAR
I $G(PSSBSIG(1))=""!($G(PSSBSIG(1))=" ") S PSSBSIG(1)=$G(PSSBSIG(2)) K PSSBSIG(2)
F CNTZ=0:0 S CNTZ=$O(PSSBSIG(CNTZ)) Q:'CNTZ S PSSX("PI",CNTZ)=$G(PSSBSIG(CNTZ))
K PSSBSIG
Q
ADD ;
I $L(PISIG(CNTZ))+$L(Z1)+1<246 S PISIG(CNTZ)=PISIG(CNTZ)_" "_Z1 Q
S CNTZ=CNTZ+1 S PISIG(CNTZ)=Z1
Q
;
DEA(PSSDIENM) ;Return DEA Special Handling for CPRS Dose Call
;1 Requires wet sig, DEA contains 1, or a 2
;2 = Controlled Sub, no wet sig required, DEA contains 3, 4, or 5
;0 = others
Q:'$G(PSSDIENM)
N PSSDEAX,PSSDEAXV
S PSSDEAX=$P($G(^PSDRUG(PSSDIENM,0)),"^",3)
I PSSDEAX[1!(PSSDEAX[2) S PSSDEAXV=1 G DSET
I PSSDEAX[3!(PSSDEAX[4)!(PSSDEAX[5) S PSSDEAXV=2 G DSET
S PSSDEAXV=0
DSET ;
S PSSX("DD",PSSDIENM)=PSSX("DD",PSSDIENM)_"^"_PSSDEAXV_"^"_$S($D(PSSHLF(PSSDIENM)):1,1:0)
Q
HELP ;
Q:$G(X)=""
N PSSSIG,PSSYX,PSSZ0,PSSZ1,PSSCTX,PSSLPX,PSSBVAR,PSSBVAR1,PSSIII,PSSFFF,PCT,PNNN,PSSBLIM,PSSIG
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
.D:$D(X)&($G(PSSZ1)]"") D HELPADD
..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)
HELP1 ;
S (PSSBVAR,PSSBVAR1)="",PSSIII=1
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
.S PSSBVAR1=$P(PSSIG(PSSFFF)," ",(PCT))
.S PSSBLIM=PSSBVAR
.S PSSBVAR=$S(PSSBVAR="":PSSBVAR1,1:PSSBVAR_" "_PSSBVAR1)
I $G(PSSBVAR)'="" S PSSSIG(PSSIII)=PSSBVAR
I $G(PSSSIG(1))=""!($G(PSSSIG(1))=" ") S PSSSIG(1)=$G(PSSSIG(2)) K PSSSIG(2)
F PSSLPX=0:0 S PSSLPX=$O(PSSSIG(PSSLPX)) Q:'PSSLPX D:PSSLPX=1 EN^DDIOL(" ") D EN^DDIOL(" "_$G(PSSSIG(PSSLPX)))
Q
HELPADD ;
I $L(PSSIG(PSSCTX))+$L(PSSZ1)+1<246 S PSSIG(PSSCTX)=PSSIG(PSSCTX)_" "_PSSZ1 Q
S PSSCTX=PSSCTX+1 S PSSIG(PSSCTX)=PSSZ1
Q
PRICE() ;Return price per dose for CPRS Dose call
;DLOOP = Internal entry number from Drug file
;PSSUDOS = Dispense units per Dose
N PSSPRICE,PSSPRQ
I '$G(DLOOP) Q ""
S PSSPRICE=$P($G(^PSDRUG(DLOOP,660)),"^",6) I 'PSSPRICE Q ""
I $G(PSSUDOS) S PSSPRQ=PSSUDOS*PSSPRICE G PRICEQ
I $G(PSSBCM) S PSSPRQ=PSSBCM*PSSPRICE
PRICEQ ;
I $E($G(PSSPRQ))="." S PSSPRQ=0_$G(PSSPRQ)
Q $G(PSSPRQ)
;
Q
;
OIDEA(PSSXOI,PSSXOIP) ;
;DEA return based on Orderable Item, Item and Usage passed in
;1 means DEA contains a 1, or a 2
;2 means DEA contains a 3, or a 4, or a 5
;0 means all others
N PSSXOLP,PSSXOLPD,PSSXOLPX,PSSXNODD,PSSPKLX
S (PSSXOLPD,PSSXNODD)=0 I PSSXOIP="X" G OIDQ
I '$G(PSSXOI)!($G(PSSXOIP)="") G OIDQ
S PSSPKLX=$S(PSSXOIP="I":1,PSSXOIP="U":1,1:0)
F PSSXOLP=0:0 S PSSXOLP=$O(^PSDRUG("ASP",PSSXOI,PSSXOLP)) Q:'PSSXOLP!(PSSXOLPD=1) D
.I $P($G(^PSDRUG(PSSXOLP,"I")),"^"),$P($G(^("I")),"^")<DT Q
.I 'PSSPKLX,$P($G(^PSDRUG(PSSXOLP,2)),"^",3)'["O" Q
.I PSSPKLX I $P($G(^PSDRUG(PSSXOLP,2)),"^",3)'["U",$P($G(^(2)),"^",3)'["I" Q
.S PSSXNODD=1
.S PSSXOLPX=$P($G(^PSDRUG(PSSXOLP,0)),"^",3)
.I PSSXOLPX[1!(PSSXOLPX[2) S PSSXOLPD=1 Q
.I PSSXOLPX[3!(PSSXOLPX[4)!(PSSXOLPX[5) S PSSXOLPD=2
OIDQ ;
I PSSXOLPD=0,'PSSXNODD S PSSXOLPD=""
Q PSSXOLPD
;
Q
;
LEAD ;Leading zeros, CPRS Dosage call
N PSSBK,PSSBK1,PSSBKD
F PSSLD=0:0 S PSSLD=$O(PSSX(PSSLD)) Q:'PSSLD D
.I $E($P(PSSX(PSSLD),"^"),1)="." S $P(PSSX(PSSLD),"^")="0"_$P(PSSX(PSSLD),"^")
.I $E($P(PSSX(PSSLD),"^",2),1)="." S $P(PSSX(PSSLD),"^",2)="0"_$P(PSSX(PSSLD),"^",2)
.I $P(PSSX(PSSLD),"^",2)["/." S PSSBKD=$P(PSSX(PSSLD),"^",2) D
..S PSSBK=$P(PSSBKD,"/."),PSSBK1=$P(PSSBKD,"/.",2)
..S $P(PSSX(PSSLD),"^",2)=$G(PSSBK)_"/0."_$G(PSSBK1)
.I $E($P(PSSX(PSSLD),"^",5),1)="." S $P(PSSX(PSSLD),"^",5)="0"_$P(PSSX(PSSLD),"^",5)
.I $P(PSSX(PSSLD),"^",5)["/." S PSSBKD=$P(PSSX(PSSLD),"^",5) D
..S PSSBK=$P(PSSBKD,"/."),PSSBK1=$P(PSSBKD,"/.",2)
..S $P(PSSX(PSSLD),"^",5)=$G(PSSBK)_"/0."_$G(PSSBK1)
.I $O(PSSX(PSSLD,0)) D
..F PSSLD1=0:0 S PSSLD1=$O(PSSX(PSSLD,PSSLD1)) Q:'PSSLD1 D
...I $E($P(PSSX(PSSLD,PSSLD1),"^"),1)="." S $P(PSSX(PSSLD,PSSLD1),"^")="0"_$P(PSSX(PSSLD,PSSLD1),"^")
...I $E($P(PSSX(PSSLD,PSSLD1),"^",2),1)="." S $P(PSSX(PSSLD,PSSLD1),"^",2)="0"_$P(PSSX(PSSLD,PSSLD1),"^",2)
...I $P(PSSX(PSSLD,PSSLD1),"^",2)["/." S PSSBKD=$P(PSSX(PSSLD,PSSLD1),"^",2) D
....S PSSBK=$P(PSSBKD,"/."),PSSBK1=$P(PSSBKD,"/.",2)
....S $P(PSSX(PSSLD,PSSLD1),"^",2)=$G(PSSBK)_"/0."_$G(PSSBK1)
...I $E($P(PSSX(PSSLD,PSSLD1),"^",5),1)="." S $P(PSSX(PSSLD,PSSLD1),"^",5)="0"_$P(PSSX(PSSLD,PSSLD1),"^",5)
...I $P(PSSX(PSSLD,PSSLD1),"^",5)["/." S PSSBKD=$P(PSSX(PSSLD,PSSLD1),"^",5) D
....S PSSBK=$P(PSSBKD,"/."),PSSBK1=$P(PSSBKD,"/.",2)
....S $P(PSSX(PSSLD,PSSLD1),"^",5)=$G(PSSBK)_"/0."_$G(PSSBK1)
S PSSLD="" F S PSSLD=$O(PSSX("DD",PSSLD)) Q:PSSLD="" D
.I $E($P(PSSX("DD",PSSLD),"^",5),1)="." S $P(PSSX("DD",PSSLD),"^",5)="0"_$P(PSSX("DD",PSSLD),"^",5)
Q
LEADP ;Leading zeros pharmacy call
N PSSBB,PSSBB1,PSSBBD
F PSSMD=0:0 S PSSMD=$O(PSSX(PSSMD)) Q:'PSSMD D
.F PSSMDN=1,3,5,11 I $E($P(PSSX(PSSMD),"^",PSSMDN),1)="." S $P(PSSX(PSSMD),"^",PSSMDN)="0"_$P(PSSX(PSSMD),"^",PSSMDN)
.I $P(PSSX(PSSMD),"^",2)["/." S PSSBBD=$P(PSSX(PSSMD),"^",2) D
..S PSSBB=$P(PSSBBD,"/."),PSSBB1=$P(PSSBBD,"/.",2)
..S $P(PSSX(PSSMD),"^",2)=$G(PSSBB)_"/0."_$G(PSSBB1)
.I $P(PSSX(PSSMD),"^",11)["/." S PSSBBD=$P(PSSX(PSSMD),"^",11) D
..S PSSBB=$P(PSSBBD,"/."),PSSBB1=$P(PSSBBD,"/.",2)
..S $P(PSSX(PSSMD),"^",11)=$G(PSSBB)_"/0."_$G(PSSBB1)
.I $O(PSSX(PSSMD,0)) D
..F PSSMD1=0:0 S PSSMD1=$O(PSSX(PSSMD,PSSMD1)) Q:'PSSMD1 D
...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)
...I $P(PSSX(PSSMD,PSSMD1),"^",2)["/." S PSSBBD=$P(PSSX(PSSMD,PSSMD1),"^",2) D
....S PSSBB=$P(PSSBBD,"/."),PSSBB1=$P(PSSBBD,"/.",2)
....S $P(PSSX(PSSMD,PSSMD1),"^",2)=$G(PSSBB)_"/0."_$G(PSSBB1)
...I $P(PSSX(PSSMD,PSSMD1),"^",11)["/." S PSSBBD=$P(PSSX(PSSMD,PSSMD1),"^",11) D
....S PSSBB=$P(PSSBBD,"/."),PSSBB1=$P(PSSBBD,"/.",2)
....S $P(PSSX(PSSMD,PSSMD1),"^",11)=$G(PSSBB)_"/0."_$G(PSSBB1)
S PSSMD="" F S PSSMD=$O(PSSX("DD",PSSMD)) Q:PSSMD="" D
.I $E($P(PSSX("DD",PSSMD),"^",5),1)="." S $P(PSSX("DD",PSSMD),"^",5)="0"_$P(PSSX("DD",PSSMD),"^",5)
Q
DUP ;delete str/unit if duplicate local doses with strength are found
N PSSLXA,PSSLXL,PSSLXFL,PSSLXQ,PSSLXLD,PSSLXMED,PSSLXSTR,PSSLXND,PSSLXX
S PSSLXFL=0
S PSSLXL="" F S PSSLXL=$O(PSSX(PSSLXL)) Q:PSSLXL=""!(PSSLXFL) D
.S PSSLXND=$G(PSSX(PSSLXL)),PSSLXSTR=""
.S PSSLXLD=$P(PSSLXND,"^",5),PSSLXMED=$P(PSSLXND,"^",6) I PSSLXMED S PSSLXSTR=$P($G(PSSX("DD",PSSLXMED)),"^",5)
.I PSSLXLD'="",PSSLXMED'="",PSSLXSTR'="" D
..S PSSLXA(PSSLXLD,PSSLXSTR,PSSLXMED)=""
..S PSSLXX="" F S PSSLXX=$O(PSSLXA(PSSLXLD,PSSLXSTR,PSSLXX)) Q:PSSLXX=""!(PSSLXFL) I PSSLXX'=PSSLXMED S PSSLXFL=1
I PSSLXFL S PSSLXQ="" F S PSSLXQ=$O(PSSX("DD",PSSLXQ)) Q:PSSLXQ="" S $P(PSSX("DD",PSSLXQ),"^",5)="",$P(PSSX("DD",PSSLXQ),"^",6)=""
Q
PSSUTLA1 ;BHAM ISC/RTR-PSS utility routine ;08/21/00
+1 ;;1.0;PHARMACY DATA MANAGEMENT;**38,49,53,54,66,69**;9/30/97
+2 ;Reference to EN^DDIOL supported by DBIA 10142
+3 ;
EN3(PSSBINTR,PSSBLGTH) ;
+1 ;Pass in to EN3 the internal number from 50.7, and the length of the
+2 ;array you want. Returns expanded Instructions is PSSBSIG array
+3 KILL PSSBSIG
NEW X,BVAR,BVAR1,III,CNT,NNN,BLIM,Y,PISIG,Z0,Z1,CNTZ,FFF
+4 IF '$GET(PSSBINTR)!('$GET(PSSBLGTH))
QUIT
+5 SET X=$PIECE($GET(^PS(50.7,PSSBINTR,"INS")),"^")
IF X=""
QUIT
+6 SET PISIG(1)=""
SET CNTZ=1
IF $LENGTH(X)<1
QUIT
FOR Z0=1:1:$LENGTH(X," ")
IF Z0=""
GOTO START
SET Z1=$PIECE(X," ",Z0)
Begin DoDot:1
+7 IF $DATA(X)&($GET(Z1)]"")
Begin DoDot:2
+8 SET Y=$ORDER(^PS(51,"B",Z1,0))
IF 'Y!($PIECE($GET(^PS(51,+Y,0)),"^",4)>1)
QUIT
SET Z1=$PIECE($GET(^PS(51,Y,0)),"^",2)
IF '$DATA(^(9))
QUIT
SET Y=$PIECE(X," ",Z0-1)
SET Y=$EXTRACT(Y,$LENGTH(Y))
IF Y>1
SET Z1=^(9)
End DoDot:2
DO ADD
End DoDot:1
IF '$DATA(X)
GOTO START
START ;
+1 SET (BVAR,BVAR1)=""
SET III=1
+2 FOR FFF=0:0
SET FFF=$ORDER(PISIG(FFF))
IF 'FFF
QUIT
SET CNT=0
FOR NNN=1:1:$LENGTH(PISIG(FFF))
IF $EXTRACT(PISIG(FFF),NNN)=" "!($LENGTH(PISIG(FFF))=NNN)
SET CNT=CNT+1
Begin DoDot:1
+3 SET BVAR1=$PIECE(PISIG(FFF)," ",(CNT))
+4 SET BLIM=BVAR
+5 SET BVAR=$SELECT(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
End DoDot:1
IF $LENGTH(BVAR)>PSSBLGTH
SET PSSBSIG(III)=BLIM_" "
SET III=III+1
SET BVAR=BVAR1
+6 IF $GET(BVAR)'=""
SET PSSBSIG(III)=BVAR
+7 IF $GET(PSSBSIG(1))=""!($GET(PSSBSIG(1))=" ")
SET PSSBSIG(1)=$GET(PSSBSIG(2))
KILL PSSBSIG(2)
+8 FOR CNTZ=0:0
SET CNTZ=$ORDER(PSSBSIG(CNTZ))
IF 'CNTZ
QUIT
SET PSSX("PI",CNTZ)=$GET(PSSBSIG(CNTZ))
+9 KILL PSSBSIG
+10 QUIT
ADD ;
+1 IF $LENGTH(PISIG(CNTZ))+$LENGTH(Z1)+1<246
SET PISIG(CNTZ)=PISIG(CNTZ)_" "_Z1
QUIT
+2 SET CNTZ=CNTZ+1
SET PISIG(CNTZ)=Z1
+3 QUIT
+4 ;
DEA(PSSDIENM) ;Return DEA Special Handling for CPRS Dose Call
+1 ;1 Requires wet sig, DEA contains 1, or a 2
+2 ;2 = Controlled Sub, no wet sig required, DEA contains 3, 4, or 5
+3 ;0 = others
+4 IF '$GET(PSSDIENM)
QUIT
+5 NEW PSSDEAX,PSSDEAXV
+6 SET PSSDEAX=$PIECE($GET(^PSDRUG(PSSDIENM,0)),"^",3)
+7 IF PSSDEAX[1!(PSSDEAX[2)
SET PSSDEAXV=1
GOTO DSET
+8 IF PSSDEAX[3!(PSSDEAX[4)!(PSSDEAX[5)
SET PSSDEAXV=2
GOTO DSET
+9 SET PSSDEAXV=0
DSET ;
+1 SET PSSX("DD",PSSDIENM)=PSSX("DD",PSSDIENM)_"^"_PSSDEAXV_"^"_$SELECT($DATA(PSSHLF(PSSDIENM)):1,1:0)
+2 QUIT
HELP ;
+1 IF $GET(X)=""
QUIT
+2 NEW PSSSIG,PSSYX,PSSZ0,PSSZ1,PSSCTX,PSSLPX,PSSBVAR,PSSBVAR1,PSSIII,PSSFFF,PCT,PNNN,PSSBLIM,PSSIG
+3 SET PSSIG(1)=""
SET PSSCTX=1
IF $LENGTH(X)<1
QUIT
FOR PSSZ0=1:1:$LENGTH(X," ")
IF PSSZ0=""
GOTO HELP1
SET PSSZ1=$PIECE(X," ",PSSZ0)
Begin DoDot:1
+4 IF $DATA(X)&($GET(PSSZ1)]"")
Begin DoDot:2
+5 SET PSSYX=$ORDER(^PS(51,"B",PSSZ1,0))
IF 'PSSYX!($PIECE($GET(^PS(51,+PSSYX,0)),"^",4)>1)
QUIT
SET PSSZ1=$PIECE($GET(^PS(51,PSSYX,0)),"^",2)
IF '$DATA(^(9))
QUIT
SET PSSYX=$PIECE(X," ",PSSZ0-1)
SET PSSYX=$EXTRACT(PSSYX,$LENGTH(PSSYX))
IF PSSYX>1
SET PSSZ1=^(9)
End DoDot:2
DO HELPADD
End DoDot:1
IF '$DATA(X)
GOTO HELP1
HELP1 ;
+1 SET (PSSBVAR,PSSBVAR1)=""
SET PSSIII=1
+2 FOR PSSFFF=0:0
SET PSSFFF=$ORDER(PSSIG(PSSFFF))
IF 'PSSFFF
QUIT
SET PCT=0
FOR PNNN=1:1:$LENGTH(PSSIG(PSSFFF))
IF $EXTRACT(PSSIG(PSSFFF),PNNN)=" "!($LENGTH(PSSIG(PSSFFF))=PNNN)
SET PCT=PCT+1
Begin DoDot:1
+3 SET PSSBVAR1=$PIECE(PSSIG(PSSFFF)," ",(PCT))
+4 SET PSSBLIM=PSSBVAR
+5 SET PSSBVAR=$SELECT(PSSBVAR="":PSSBVAR1,1:PSSBVAR_" "_PSSBVAR1)
End DoDot:1
IF $LENGTH(PSSBVAR)>70
SET PSSSIG(PSSIII)=PSSBLIM_" "
SET PSSIII=PSSIII+1
SET PSSBVAR=PSSBVAR1
+6 IF $GET(PSSBVAR)'=""
SET PSSSIG(PSSIII)=PSSBVAR
+7 IF $GET(PSSSIG(1))=""!($GET(PSSSIG(1))=" ")
SET PSSSIG(1)=$GET(PSSSIG(2))
KILL PSSSIG(2)
+8 FOR PSSLPX=0:0
SET PSSLPX=$ORDER(PSSSIG(PSSLPX))
IF 'PSSLPX
QUIT
IF PSSLPX=1
DO EN^DDIOL(" ")
DO EN^DDIOL(" "_$GET(PSSSIG(PSSLPX)))
+9 QUIT
HELPADD ;
+1 IF $LENGTH(PSSIG(PSSCTX))+$LENGTH(PSSZ1)+1<246
SET PSSIG(PSSCTX)=PSSIG(PSSCTX)_" "_PSSZ1
QUIT
+2 SET PSSCTX=PSSCTX+1
SET PSSIG(PSSCTX)=PSSZ1
+3 QUIT
PRICE() ;Return price per dose for CPRS Dose call
+1 ;DLOOP = Internal entry number from Drug file
+2 ;PSSUDOS = Dispense units per Dose
+3 NEW PSSPRICE,PSSPRQ
+4 IF '$GET(DLOOP)
QUIT ""
+5 SET PSSPRICE=$PIECE($GET(^PSDRUG(DLOOP,660)),"^",6)
IF 'PSSPRICE
QUIT ""
+6 IF $GET(PSSUDOS)
SET PSSPRQ=PSSUDOS*PSSPRICE
GOTO PRICEQ
+7 IF $GET(PSSBCM)
SET PSSPRQ=PSSBCM*PSSPRICE
PRICEQ ;
+1 IF $EXTRACT($GET(PSSPRQ))="."
SET PSSPRQ=0_$GET(PSSPRQ)
+2 QUIT $GET(PSSPRQ)
+3 ;
+4 QUIT
+5 ;
OIDEA(PSSXOI,PSSXOIP) ;
+1 ;DEA return based on Orderable Item, Item and Usage passed in
+2 ;1 means DEA contains a 1, or a 2
+3 ;2 means DEA contains a 3, or a 4, or a 5
+4 ;0 means all others
+5 NEW PSSXOLP,PSSXOLPD,PSSXOLPX,PSSXNODD,PSSPKLX
+6 SET (PSSXOLPD,PSSXNODD)=0
IF PSSXOIP="X"
GOTO OIDQ
+7 IF '$GET(PSSXOI)!($GET(PSSXOIP)="")
GOTO OIDQ
+8 SET PSSPKLX=$SELECT(PSSXOIP="I":1,PSSXOIP="U":1,1:0)
+9 FOR PSSXOLP=0:0
SET PSSXOLP=$ORDER(^PSDRUG("ASP",PSSXOI,PSSXOLP))
IF 'PSSXOLP!(PSSXOLPD=1)
QUIT
Begin DoDot:1
+10 IF $PIECE($GET(^PSDRUG(PSSXOLP,"I")),"^")
IF $PIECE($GET(^("I")),"^")<DT
QUIT
+11 IF 'PSSPKLX
IF $PIECE($GET(^PSDRUG(PSSXOLP,2)),"^",3)'["O"
QUIT
+12 IF PSSPKLX
IF $PIECE($GET(^PSDRUG(PSSXOLP,2)),"^",3)'["U"
IF $PIECE($GET(^(2)),"^",3)'["I"
QUIT
+13 SET PSSXNODD=1
+14 SET PSSXOLPX=$PIECE($GET(^PSDRUG(PSSXOLP,0)),"^",3)
+15 IF PSSXOLPX[1!(PSSXOLPX[2)
SET PSSXOLPD=1
QUIT
+16 IF PSSXOLPX[3!(PSSXOLPX[4)!(PSSXOLPX[5)
SET PSSXOLPD=2
End DoDot:1
OIDQ ;
+1 IF PSSXOLPD=0
IF 'PSSXNODD
SET PSSXOLPD=""
+2 QUIT PSSXOLPD
+3 ;
+4 QUIT
+5 ;
LEAD ;Leading zeros, CPRS Dosage call
+1 NEW PSSBK,PSSBK1,PSSBKD
+2 FOR PSSLD=0:0
SET PSSLD=$ORDER(PSSX(PSSLD))
IF 'PSSLD
QUIT
Begin DoDot:1
+3 IF $EXTRACT($PIECE(PSSX(PSSLD),"^"),1)="."
SET $PIECE(PSSX(PSSLD),"^")="0"_$PIECE(PSSX(PSSLD),"^")
+4 IF $EXTRACT($PIECE(PSSX(PSSLD),"^",2),1)="."
SET $PIECE(PSSX(PSSLD),"^",2)="0"_$PIECE(PSSX(PSSLD),"^",2)
+5 IF $PIECE(PSSX(PSSLD),"^",2)["/."
SET PSSBKD=$PIECE(PSSX(PSSLD),"^",2)
Begin DoDot:2
+6 SET PSSBK=$PIECE(PSSBKD,"/.")
SET PSSBK1=$PIECE(PSSBKD,"/.",2)
+7 SET $PIECE(PSSX(PSSLD),"^",2)=$GET(PSSBK)_"/0."_$GET(PSSBK1)
End DoDot:2
+8 IF $EXTRACT($PIECE(PSSX(PSSLD),"^",5),1)="."
SET $PIECE(PSSX(PSSLD),"^",5)="0"_$PIECE(PSSX(PSSLD),"^",5)
+9 IF $PIECE(PSSX(PSSLD),"^",5)["/."
SET PSSBKD=$PIECE(PSSX(PSSLD),"^",5)
Begin DoDot:2
+10 SET PSSBK=$PIECE(PSSBKD,"/.")
SET PSSBK1=$PIECE(PSSBKD,"/.",2)
+11 SET $PIECE(PSSX(PSSLD),"^",5)=$GET(PSSBK)_"/0."_$GET(PSSBK1)
End DoDot:2
+12 IF $ORDER(PSSX(PSSLD,0))
Begin DoDot:2
+13 FOR PSSLD1=0:0
SET PSSLD1=$ORDER(PSSX(PSSLD,PSSLD1))
IF 'PSSLD1
QUIT
Begin DoDot:3
+14 IF $EXTRACT($PIECE(PSSX(PSSLD,PSSLD1),"^"),1)="."
SET $PIECE(PSSX(PSSLD,PSSLD1),"^")="0"_$PIECE(PSSX(PSSLD,PSSLD1),"^")
+15 IF $EXTRACT($PIECE(PSSX(PSSLD,PSSLD1),"^",2),1)="."
SET $PIECE(PSSX(PSSLD,PSSLD1),"^",2)="0"_$PIECE(PSSX(PSSLD,PSSLD1),"^",2)
+16 IF $PIECE(PSSX(PSSLD,PSSLD1),"^",2)["/."
SET PSSBKD=$PIECE(PSSX(PSSLD,PSSLD1),"^",2)
Begin DoDot:4
+17 SET PSSBK=$PIECE(PSSBKD,"/.")
SET PSSBK1=$PIECE(PSSBKD,"/.",2)
+18 SET $PIECE(PSSX(PSSLD,PSSLD1),"^",2)=$GET(PSSBK)_"/0."_$GET(PSSBK1)
End DoDot:4
+19 IF $EXTRACT($PIECE(PSSX(PSSLD,PSSLD1),"^",5),1)="."
SET $PIECE(PSSX(PSSLD,PSSLD1),"^",5)="0"_$PIECE(PSSX(PSSLD,PSSLD1),"^",5)
+20 IF $PIECE(PSSX(PSSLD,PSSLD1),"^",5)["/."
SET PSSBKD=$PIECE(PSSX(PSSLD,PSSLD1),"^",5)
Begin DoDot:4
+21 SET PSSBK=$PIECE(PSSBKD,"/.")
SET PSSBK1=$PIECE(PSSBKD,"/.",2)
+22 SET $PIECE(PSSX(PSSLD,PSSLD1),"^",5)=$GET(PSSBK)_"/0."_$GET(PSSBK1)
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+23 SET PSSLD=""
FOR
SET PSSLD=$ORDER(PSSX("DD",PSSLD))
IF PSSLD=""
QUIT
Begin DoDot:1
+24 IF $EXTRACT($PIECE(PSSX("DD",PSSLD),"^",5),1)="."
SET $PIECE(PSSX("DD",PSSLD),"^",5)="0"_$PIECE(PSSX("DD",PSSLD),"^",5)
End DoDot:1
+25 QUIT
LEADP ;Leading zeros pharmacy call
+1 NEW PSSBB,PSSBB1,PSSBBD
+2 FOR PSSMD=0:0
SET PSSMD=$ORDER(PSSX(PSSMD))
IF 'PSSMD
QUIT
Begin DoDot:1
+3 FOR PSSMDN=1,3,5,11
IF $EXTRACT($PIECE(PSSX(PSSMD),"^",PSSMDN),1)="."
SET $PIECE(PSSX(PSSMD),"^",PSSMDN)="0"_$PIECE(PSSX(PSSMD),"^",PSSMDN)
+4 IF $PIECE(PSSX(PSSMD),"^",2)["/."
SET PSSBBD=$PIECE(PSSX(PSSMD),"^",2)
Begin DoDot:2
+5 SET PSSBB=$PIECE(PSSBBD,"/.")
SET PSSBB1=$PIECE(PSSBBD,"/.",2)
+6 SET $PIECE(PSSX(PSSMD),"^",2)=$GET(PSSBB)_"/0."_$GET(PSSBB1)
End DoDot:2
+7 IF $PIECE(PSSX(PSSMD),"^",11)["/."
SET PSSBBD=$PIECE(PSSX(PSSMD),"^",11)
Begin DoDot:2
+8 SET PSSBB=$PIECE(PSSBBD,"/.")
SET PSSBB1=$PIECE(PSSBBD,"/.",2)
+9 SET $PIECE(PSSX(PSSMD),"^",11)=$GET(PSSBB)_"/0."_$GET(PSSBB1)
End DoDot:2
+10 IF $ORDER(PSSX(PSSMD,0))
Begin DoDot:2
+11 FOR PSSMD1=0:0
SET PSSMD1=$ORDER(PSSX(PSSMD,PSSMD1))
IF 'PSSMD1
QUIT
Begin DoDot:3
+12 FOR PSSMDN=1,3,5,11
IF $EXTRACT($PIECE(PSSX(PSSMD,PSSMD1),"^",PSSMDN),1)="."
SET $PIECE(PSSX(PSSMD,PSSMD1),"^",PSSMDN)="0"_$PIECE(PSSX(PSSMD,PSSMD1),"^",PSSMDN)
+13 IF $PIECE(PSSX(PSSMD,PSSMD1),"^",2)["/."
SET PSSBBD=$PIECE(PSSX(PSSMD,PSSMD1),"^",2)
Begin DoDot:4
+14 SET PSSBB=$PIECE(PSSBBD,"/.")
SET PSSBB1=$PIECE(PSSBBD,"/.",2)
+15 SET $PIECE(PSSX(PSSMD,PSSMD1),"^",2)=$GET(PSSBB)_"/0."_$GET(PSSBB1)
End DoDot:4
+16 IF $PIECE(PSSX(PSSMD,PSSMD1),"^",11)["/."
SET PSSBBD=$PIECE(PSSX(PSSMD,PSSMD1),"^",11)
Begin DoDot:4
+17 SET PSSBB=$PIECE(PSSBBD,"/.")
SET PSSBB1=$PIECE(PSSBBD,"/.",2)
+18 SET $PIECE(PSSX(PSSMD,PSSMD1),"^",11)=$GET(PSSBB)_"/0."_$GET(PSSBB1)
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+19 SET PSSMD=""
FOR
SET PSSMD=$ORDER(PSSX("DD",PSSMD))
IF PSSMD=""
QUIT
Begin DoDot:1
+20 IF $EXTRACT($PIECE(PSSX("DD",PSSMD),"^",5),1)="."
SET $PIECE(PSSX("DD",PSSMD),"^",5)="0"_$PIECE(PSSX("DD",PSSMD),"^",5)
End DoDot:1
+21 QUIT
DUP ;delete str/unit if duplicate local doses with strength are found
+1 NEW PSSLXA,PSSLXL,PSSLXFL,PSSLXQ,PSSLXLD,PSSLXMED,PSSLXSTR,PSSLXND,PSSLXX
+2 SET PSSLXFL=0
+3 SET PSSLXL=""
FOR
SET PSSLXL=$ORDER(PSSX(PSSLXL))
IF PSSLXL=""!(PSSLXFL)
QUIT
Begin DoDot:1
+4 SET PSSLXND=$GET(PSSX(PSSLXL))
SET PSSLXSTR=""
+5 SET PSSLXLD=$PIECE(PSSLXND,"^",5)
SET PSSLXMED=$PIECE(PSSLXND,"^",6)
IF PSSLXMED
SET PSSLXSTR=$PIECE($GET(PSSX("DD",PSSLXMED)),"^",5)
+6 IF PSSLXLD'=""
IF PSSLXMED'=""
IF PSSLXSTR'=""
Begin DoDot:2
+7 SET PSSLXA(PSSLXLD,PSSLXSTR,PSSLXMED)=""
+8 SET PSSLXX=""
FOR
SET PSSLXX=$ORDER(PSSLXA(PSSLXLD,PSSLXSTR,PSSLXX))
IF PSSLXX=""!(PSSLXFL)
QUIT
IF PSSLXX'=PSSLXMED
SET PSSLXFL=1
End DoDot:2
End DoDot:1
+9 IF PSSLXFL
SET PSSLXQ=""
FOR
SET PSSLXQ=$ORDER(PSSX("DD",PSSLXQ))
IF PSSLXQ=""
QUIT
SET $PIECE(PSSX("DD",PSSLXQ),"^",5)=""
SET $PIECE(PSSX("DD",PSSLXQ),"^",6)=""
+10 QUIT