Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: PSSUTLA1

PSSUTLA1.m

Go to the documentation of this file.
  1. PSSUTLA1 ;BHAM ISC/RTR-PSS utility routine ;08/21/00
  1. ;;1.0;PHARMACY DATA MANAGEMENT;**38,49,53,54,66,69,238**;9/30/97;Build 3
  1. ;Reference to EN^DDIOL supported by DBIA 10142
  1. ;Reference to ^PS(53.1 supported by DBIA 2140
  1. ;Reference to ^PS(52.41 supported by DBIA 2844
  1. ;Reference to ^PSRX supported by DBIA 2845
  1. ;Reference to ^DG(40.8 supported by DBIA 728
  1. ;
  1. EN3(PSSBINTR,PSSBLGTH) ;
  1. ;Pass in to EN3 the internal number from 50.7, and the length of the
  1. ;array you want. Returns expanded Instructions is PSSBSIG array
  1. K PSSBSIG N X,BVAR,BVAR1,III,CNT,NNN,BLIM,Y,PISIG,Z0,Z1,CNTZ,FFF
  1. Q:'$G(PSSBINTR)!('$G(PSSBLGTH))
  1. S X=$P($G(^PS(50.7,PSSBINTR,"INS")),"^") Q:X=""
  1. 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
  1. .D:$D(X)&($G(Z1)]"") D ADD
  1. ..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)
  1. START ;
  1. S (BVAR,BVAR1)="",III=1
  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
  1. .S BVAR1=$P(PISIG(FFF)," ",(CNT))
  1. .S BLIM=BVAR
  1. .S BVAR=$S(BVAR="":BVAR1,1:BVAR_" "_BVAR1)
  1. I $G(BVAR)'="" S PSSBSIG(III)=BVAR
  1. I $G(PSSBSIG(1))=""!($G(PSSBSIG(1))=" ") S PSSBSIG(1)=$G(PSSBSIG(2)) K PSSBSIG(2)
  1. F CNTZ=0:0 S CNTZ=$O(PSSBSIG(CNTZ)) Q:'CNTZ S PSSX("PI",CNTZ)=$G(PSSBSIG(CNTZ))
  1. K PSSBSIG
  1. Q
  1. ADD ;
  1. I $L(PISIG(CNTZ))+$L(Z1)+1<246 S PISIG(CNTZ)=PISIG(CNTZ)_" "_Z1 Q
  1. S CNTZ=CNTZ+1 S PISIG(CNTZ)=Z1
  1. Q
  1. ;
  1. DEA(PSSDIENM) ;Return DEA Special Handling for CPRS Dose Call
  1. ;1 Requires wet sig, DEA contains 1, or a 2
  1. ;2 = Controlled Sub, no wet sig required, DEA contains 3, 4, or 5
  1. ;0 = others
  1. Q:'$G(PSSDIENM)
  1. N PSSDEAX,PSSDEAXV
  1. S PSSDEAX=$P($G(^PSDRUG(PSSDIENM,0)),"^",3)
  1. I PSSDEAX[1!(PSSDEAX[2) S PSSDEAXV=1 G DSET
  1. I PSSDEAX[3!(PSSDEAX[4)!(PSSDEAX[5) S PSSDEAXV=2 G DSET
  1. S PSSDEAXV=0
  1. DSET ;
  1. S PSSX("DD",PSSDIENM)=PSSX("DD",PSSDIENM)_"^"_PSSDEAXV_"^"_$S($D(PSSHLF(PSSDIENM)):1,1:0)
  1. Q
  1. HELP ;
  1. Q:$G(X)=""
  1. N PSSSIG,PSSYX,PSSZ0,PSSZ1,PSSCTX,PSSLPX,PSSBVAR,PSSBVAR1,PSSIII,PSSFFF,PCT,PNNN,PSSBLIM,PSSIG
  1. 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
  1. .D:$D(X)&($G(PSSZ1)]"") D HELPADD
  1. ..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)
  1. HELP1 ;
  1. S (PSSBVAR,PSSBVAR1)="",PSSIII=1
  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
  1. .S PSSBVAR1=$P(PSSIG(PSSFFF)," ",(PCT))
  1. .S PSSBLIM=PSSBVAR
  1. .S PSSBVAR=$S(PSSBVAR="":PSSBVAR1,1:PSSBVAR_" "_PSSBVAR1)
  1. I $G(PSSBVAR)'="" S PSSSIG(PSSIII)=PSSBVAR
  1. I $G(PSSSIG(1))=""!($G(PSSSIG(1))=" ") S PSSSIG(1)=$G(PSSSIG(2)) K PSSSIG(2)
  1. F PSSLPX=0:0 S PSSLPX=$O(PSSSIG(PSSLPX)) Q:'PSSLPX D:PSSLPX=1 EN^DDIOL(" ") D EN^DDIOL(" "_$G(PSSSIG(PSSLPX)))
  1. Q
  1. HELPADD ;
  1. I $L(PSSIG(PSSCTX))+$L(PSSZ1)+1<246 S PSSIG(PSSCTX)=PSSIG(PSSCTX)_" "_PSSZ1 Q
  1. S PSSCTX=PSSCTX+1 S PSSIG(PSSCTX)=PSSZ1
  1. Q
  1. PRICE() ;Return price per dose for CPRS Dose call
  1. ;DLOOP = Internal entry number from Drug file
  1. ;PSSUDOS = Dispense units per Dose
  1. N PSSPRICE,PSSPRQ
  1. I '$G(DLOOP) Q ""
  1. S PSSPRICE=$P($G(^PSDRUG(DLOOP,660)),"^",6) I 'PSSPRICE Q ""
  1. I $G(PSSUDOS) S PSSPRQ=PSSUDOS*PSSPRICE G PRICEQ
  1. I $G(PSSBCM) S PSSPRQ=PSSBCM*PSSPRICE
  1. PRICEQ ;
  1. I $E($G(PSSPRQ))="." S PSSPRQ=0_$G(PSSPRQ)
  1. Q $G(PSSPRQ)
  1. ;
  1. Q
  1. ;
  1. OIDEA(PSSXOI,PSSXOIP) ;
  1. ;DEA return based on Orderable Item, Item and Usage passed in
  1. ;1 means DEA contains a 1, or a 2
  1. ;2 means DEA contains a 3, or a 4, or a 5
  1. ;0 means all others
  1. N PSSXOLP,PSSXOLPD,PSSXOLPX,PSSXNODD,PSSPKLX
  1. S (PSSXOLPD,PSSXNODD)=0 I PSSXOIP="X" G OIDQ
  1. I '$G(PSSXOI)!($G(PSSXOIP)="") G OIDQ
  1. S PSSPKLX=$S(PSSXOIP="I":1,PSSXOIP="U":1,1:0)
  1. F PSSXOLP=0:0 S PSSXOLP=$O(^PSDRUG("ASP",PSSXOI,PSSXOLP)) Q:'PSSXOLP!(PSSXOLPD=1) D
  1. .I $P($G(^PSDRUG(PSSXOLP,"I")),"^"),$P($G(^("I")),"^")<DT Q
  1. .I 'PSSPKLX,$P($G(^PSDRUG(PSSXOLP,2)),"^",3)'["O" Q
  1. .I PSSPKLX I $P($G(^PSDRUG(PSSXOLP,2)),"^",3)'["U",$P($G(^(2)),"^",3)'["I" Q
  1. .S PSSXNODD=1
  1. .S PSSXOLPX=$P($G(^PSDRUG(PSSXOLP,0)),"^",3)
  1. .I PSSXOLPX[1!(PSSXOLPX[2) S PSSXOLPD=1 Q
  1. .I PSSXOLPX[3!(PSSXOLPX[4)!(PSSXOLPX[5) S PSSXOLPD=2
  1. OIDQ ;
  1. I PSSXOLPD=0,'PSSXNODD S PSSXOLPD=""
  1. Q PSSXOLPD
  1. ;
  1. Q
  1. ;
  1. LEAD ;Leading zeros, CPRS Dosage call
  1. N PSSBK,PSSBK1,PSSBKD
  1. F PSSLD=0:0 S PSSLD=$O(PSSX(PSSLD)) Q:'PSSLD D
  1. .I $E($P(PSSX(PSSLD),"^"),1)="." S $P(PSSX(PSSLD),"^")="0"_$P(PSSX(PSSLD),"^")
  1. .I $E($P(PSSX(PSSLD),"^",2),1)="." S $P(PSSX(PSSLD),"^",2)="0"_$P(PSSX(PSSLD),"^",2)
  1. .I $P(PSSX(PSSLD),"^",2)["/." S PSSBKD=$P(PSSX(PSSLD),"^",2) D
  1. ..S PSSBK=$P(PSSBKD,"/."),PSSBK1=$P(PSSBKD,"/.",2)
  1. ..S $P(PSSX(PSSLD),"^",2)=$G(PSSBK)_"/0."_$G(PSSBK1)
  1. .I $E($P(PSSX(PSSLD),"^",5),1)="." S $P(PSSX(PSSLD),"^",5)="0"_$P(PSSX(PSSLD),"^",5)
  1. .I $P(PSSX(PSSLD),"^",5)["/." S PSSBKD=$P(PSSX(PSSLD),"^",5) D
  1. ..S PSSBK=$P(PSSBKD,"/."),PSSBK1=$P(PSSBKD,"/.",2)
  1. ..S $P(PSSX(PSSLD),"^",5)=$G(PSSBK)_"/0."_$G(PSSBK1)
  1. .I $O(PSSX(PSSLD,0)) D
  1. ..F PSSLD1=0:0 S PSSLD1=$O(PSSX(PSSLD,PSSLD1)) Q:'PSSLD1 D
  1. ...I $E($P(PSSX(PSSLD,PSSLD1),"^"),1)="." S $P(PSSX(PSSLD,PSSLD1),"^")="0"_$P(PSSX(PSSLD,PSSLD1),"^")
  1. ...I $E($P(PSSX(PSSLD,PSSLD1),"^",2),1)="." S $P(PSSX(PSSLD,PSSLD1),"^",2)="0"_$P(PSSX(PSSLD,PSSLD1),"^",2)
  1. ...I $P(PSSX(PSSLD,PSSLD1),"^",2)["/." S PSSBKD=$P(PSSX(PSSLD,PSSLD1),"^",2) D
  1. ....S PSSBK=$P(PSSBKD,"/."),PSSBK1=$P(PSSBKD,"/.",2)
  1. ....S $P(PSSX(PSSLD,PSSLD1),"^",2)=$G(PSSBK)_"/0."_$G(PSSBK1)
  1. ...I $E($P(PSSX(PSSLD,PSSLD1),"^",5),1)="." S $P(PSSX(PSSLD,PSSLD1),"^",5)="0"_$P(PSSX(PSSLD,PSSLD1),"^",5)
  1. ...I $P(PSSX(PSSLD,PSSLD1),"^",5)["/." S PSSBKD=$P(PSSX(PSSLD,PSSLD1),"^",5) D
  1. ....S PSSBK=$P(PSSBKD,"/."),PSSBK1=$P(PSSBKD,"/.",2)
  1. ....S $P(PSSX(PSSLD,PSSLD1),"^",5)=$G(PSSBK)_"/0."_$G(PSSBK1)
  1. S PSSLD="" F S PSSLD=$O(PSSX("DD",PSSLD)) Q:PSSLD="" D
  1. .I $E($P(PSSX("DD",PSSLD),"^",5),1)="." S $P(PSSX("DD",PSSLD),"^",5)="0"_$P(PSSX("DD",PSSLD),"^",5)
  1. Q
  1. LEADP ;Leading zeros pharmacy call
  1. N PSSBB,PSSBB1,PSSBBD
  1. F PSSMD=0:0 S PSSMD=$O(PSSX(PSSMD)) Q:'PSSMD D
  1. .F PSSMDN=1,3,5,11 I $E($P(PSSX(PSSMD),"^",PSSMDN),1)="." S $P(PSSX(PSSMD),"^",PSSMDN)="0"_$P(PSSX(PSSMD),"^",PSSMDN)
  1. .I $P(PSSX(PSSMD),"^",2)["/." S PSSBBD=$P(PSSX(PSSMD),"^",2) D
  1. ..S PSSBB=$P(PSSBBD,"/."),PSSBB1=$P(PSSBBD,"/.",2)
  1. ..S $P(PSSX(PSSMD),"^",2)=$G(PSSBB)_"/0."_$G(PSSBB1)
  1. .I $P(PSSX(PSSMD),"^",11)["/." S PSSBBD=$P(PSSX(PSSMD),"^",11) D
  1. ..S PSSBB=$P(PSSBBD,"/."),PSSBB1=$P(PSSBBD,"/.",2)
  1. ..S $P(PSSX(PSSMD),"^",11)=$G(PSSBB)_"/0."_$G(PSSBB1)
  1. .I $O(PSSX(PSSMD,0)) D
  1. ..F PSSMD1=0:0 S PSSMD1=$O(PSSX(PSSMD,PSSMD1)) Q:'PSSMD1 D
  1. ...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)
  1. ...I $P(PSSX(PSSMD,PSSMD1),"^",2)["/." S PSSBBD=$P(PSSX(PSSMD,PSSMD1),"^",2) D
  1. ....S PSSBB=$P(PSSBBD,"/."),PSSBB1=$P(PSSBBD,"/.",2)
  1. ....S $P(PSSX(PSSMD,PSSMD1),"^",2)=$G(PSSBB)_"/0."_$G(PSSBB1)
  1. ...I $P(PSSX(PSSMD,PSSMD1),"^",11)["/." S PSSBBD=$P(PSSX(PSSMD,PSSMD1),"^",11) D
  1. ....S PSSBB=$P(PSSBBD,"/."),PSSBB1=$P(PSSBBD,"/.",2)
  1. ....S $P(PSSX(PSSMD,PSSMD1),"^",11)=$G(PSSBB)_"/0."_$G(PSSBB1)
  1. S PSSMD="" F S PSSMD=$O(PSSX("DD",PSSMD)) Q:PSSMD="" D
  1. .I $E($P(PSSX("DD",PSSMD),"^",5),1)="." S $P(PSSX("DD",PSSMD),"^",5)="0"_$P(PSSX("DD",PSSMD),"^",5)
  1. Q
  1. DUP ;delete str/unit if duplicate local doses with strength are found
  1. N PSSLXA,PSSLXL,PSSLXFL,PSSLXQ,PSSLXLD,PSSLXMED,PSSLXSTR,PSSLXND,PSSLXX
  1. S PSSLXFL=0
  1. S PSSLXL="" F S PSSLXL=$O(PSSX(PSSLXL)) Q:PSSLXL=""!(PSSLXFL) D
  1. .S PSSLXND=$G(PSSX(PSSLXL)),PSSLXSTR=""
  1. .S PSSLXLD=$P(PSSLXND,"^",5),PSSLXMED=$P(PSSLXND,"^",6) I PSSLXMED S PSSLXSTR=$P($G(PSSX("DD",PSSLXMED)),"^",5)
  1. .I PSSLXLD'="",PSSLXMED'="",PSSLXSTR'="" D
  1. ..S PSSLXA(PSSLXLD,PSSLXSTR,PSSLXMED)=""
  1. ..S PSSLXX="" F S PSSLXX=$O(PSSLXA(PSSLXLD,PSSLXSTR,PSSLXX)) Q:PSSLXX=""!(PSSLXFL) I PSSLXX'=PSSLXMED S PSSLXFL=1
  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)=""
  1. Q
  1. ;
  1. PLACER(PSSPDFN,PSSPIEN) ;Return CPRS order number from Pharmacy order
  1. ;PSSPDFN = Patient internal number
  1. ;PSSPIEN = Pharmacy number - U-Unit Dose, V-IV, P-Inpatient Pending, S-Outpatient Pending, R-Prescription, N-Non-VA
  1. I '$G(PSSPDFN) Q ""
  1. I PSSPIEN'?1.N1U Q ""
  1. N PSSPAK,PSSLOC S PSSPAK=$E(PSSPIEN,$L(PSSPIEN))
  1. S PSSLOC=$S(PSSPAK="U":5,PSSPAK="V":"IV","PSRN"[PSSPAK:1,1:"")
  1. I PSSLOC="" Q ""
  1. I "UV"[PSSPAK Q $P($G(^PS(55,PSSPDFN,PSSLOC,+PSSPIEN,0)),"^",21)
  1. I PSSPAK="R" Q $P($G(^PSRX(+PSSPIEN,"OR1")),"^",2)
  1. I PSSPAK="P" Q $P($G(^PS(53.1,+PSSPIEN,0)),"^",21)
  1. I PSSPAK="S" Q $P($G(^PS(52.41,+PSSPIEN,0)),"^")
  1. Q $P($G(^PS(55,PSSPDFN,"NVA",+PSSPIEN,0)),"^",8)
  1. ;
  1. LOC(PSSPDFN,PSSPIEN) ;Return Location from Pharmacy order
  1. ;PSSPDFN = Patient internal number
  1. ;PSSPIEN = Pharmacy number - U-Unit Dose, V-IV, P-Inpatient Pending, S-Outpatient Pending, R-Prescription, N-Non-VA
  1. I '$G(PSSPDFN)!($G(PSSPIEN)'?1.N1U) Q $$LOCIN
  1. N PSSPAK,PSSHLOC,PSSWRD,PSSWRDN,PSSRSLT,PSSROOM,PSSRLIN,PSSRLINN,PSSERR
  1. S PSSPAK=$E(PSSPIEN,$L(PSSPIEN)),PSSRSLT=""
  1. I "UVP"[PSSPAK D Q PSSRSLT
  1. .I PSSPAK="V" S PSSHLOC=$P($G(^PS(55,PSSPDFN,"IV",+PSSPIEN,"DSS")),"^")
  1. .I PSSPAK="P" S PSSHLOC=$P($G(^PS(53.1,+PSSPIEN,"DSS")),"^")
  1. .I PSSPAK="U" S PSSHLOC=$P($G(^PS(55,PSSPDFN,5,+PSSPIEN,8)),"^")
  1. .I PSSHLOC S PSSRSLT=$$LOCHL(PSSHLOC) I PSSRSLT Q
  1. .S PSSWRD=$$LOCWA
  1. .I PSSWRD S PSSHLOC=$P($G(^DIC(42,+PSSPIEN,44)),"^") I PSSHLOC S PSSRSLT=$$LOCHL(PSSHLOC) I PSSRSLT Q
  1. .I PSSWRD S PSSWRDN=$P($G(^DIC(42,PSSWRD,0)),"^") I PSSWRDN'="" S PSSRSLT=PSSWRD_"^"_PSSWRDN_"^"_42 Q
  1. .S PSSROOM="" I PSSPAK="V" S PSSROOM=$P($G(^PS(55,PSSPDFN,"IV",+PSSPIEN,2)),"^",2)
  1. .I PSSPAK="P" S PSSROOM=$P($G(^PS(53.1,+PSSPIEN,8)),"^",8)
  1. .I PSSROOM S PSSRSLT=$$LOCDI(PSSROOM) I PSSRSLT Q
  1. .S PSSRSLT=$$LOCIN
  1. I "SRN"[PSSPAK D Q PSSRSLT
  1. .I PSSPAK="N" S PSSHLOC=$P($G(^PS(55,PSSPDFN,"NVA",+PSSPIEN,0)),"^",12)
  1. .I PSSPAK="R" S PSSHLOC=$P($G(^PSRX(+PSSPIEN,0)),"^",5)
  1. .I PSSPAK="S" S PSSHLOC=$P($G(^PS(52.41,+PSSPIEN,0)),"^",13)
  1. .I PSSHLOC S PSSRSLT=$$LOCHL(PSSHLOC) I PSSRSLT Q
  1. .I PSSPAK="S" S PSSRLIN=$P($G(^PS(52.41,+PSSPIEN,"INI")),"^") I PSSRLIN S PSSRLINN=$$GET1^DIQ(52.41,+PSSPIEN_",",100,,,"PSSERR") I PSSRLINN'="" S PSSRSLT=PSSRLIN_"^"_PSSRLINN_"^"_4 Q
  1. .S PSSRSLT=$$LOCIN
  1. Q $$LOCIN
  1. ;
  1. LOCWA() ;Return ward
  1. N VAHOW,VAROOT,VAINDT,VAIN,VAERR
  1. D INP^VADPT
  1. Q +$G(VAIN(4))
  1. ;
  1. LOCHL(PSSCLN) ;Return hospital location file #44
  1. N PSSCLNN S PSSCLNN=$P($G(^SC(PSSCLN,0)),"^")
  1. Q $S(PSSCLNN'="":PSSCLN_"^"_PSSCLNN_"^"_44,1:"")
  1. ;
  1. LOCDI(PSSDIV) ;Return division file #40.8
  1. N PSSDIVN S PSSDIVN=$P($G(^DG(40.8,PSSDIV,0)),"^")
  1. Q $S(PSSDIVN'="":PSSDIV_"^"_PSSDIVN_"^"_40.8,1:"")
  1. ;
  1. LOCIN() ;Return institution file #4
  1. Q $P($$SITE^VASITE,"^",1,2)_"^"_4