PSOHLSG3 ;BHAM ISC/SAB/LC - BUILD PROFILE ; 03/20/96 19:38
;;7.0;OUTPATIENT PHARMACY;;DEC 1997
START ;build profile for the NTE4 segment
Q:'$D(DFN)
N II K ^TMP($J,"PRF")
S PSODFN=DFN I '$D(PSODTCUT) D CUTDATE^PSOFUNC
S:'$D(Z) Z=1 S:'$D(NEW1) (NEW1,NEW11)="^" S %DT="",X="T" D ^%DT S DT=Y S X1=DT,X2=-365 D C^%DTC S EXPS=X S X1=DT,X2=-182 D C^%DTC S EXP=X
F RXX=0:0 S RXX=$O(^PS(55,DFN,"P",RXX)) Q:'RXX S RXNN=+^(RXX,0) I $D(^PSRX(RXNN,0)),$P($G(^("STA")),"^")'=13 S RXPX=^PSRX(RXNN,0),$P(RXPX,"^",15)=$P($G(^("STA")),"^"),RXPX2=^(2) D CHK
I '$D(^TMP($J,"PRF")) G PPP
;
SD S CNT=1 F SD="A","C","S" I $D(^TMP($J,"PRF",SD)) S DRNME="" D DRNME
PPP D PEND
K ^TMP($J,"PRF")
K A,B,DRNME,DRP,EXP,EXPS,I,II,ISSD,J,LINE,LN,MESS,MJK,NEW1,NEW11,PHYS,POP,QTY,TTTT,RFL,RFS,RXF,RXNN,RXPX,RXPX2,RXPNO,RXX
K SD,SIG,STA,X,X1,X2,Y,Z,CNT,PEND,PSODTCUT,PSOPRPAS,PZZODRUG,RFDATE,RS
Q
DRNME S DRNME=$O(^TMP($J,"PRF",SD,DRNME)) Q:DRNME="" D ISSD G DRNME
;
ISSD F ISSD=0:0 S ISSD=$O(^TMP($J,"PRF",SD,DRNME,ISSD)) Q:'ISSD S RXPNO="" D RXPNO
Q
RXPNO S RXPNO=$O(^TMP($J,"PRF",SD,DRNME,ISSD,RXPNO)) Q:RXPNO="" S RXNN=^(RXPNO) I $D(^PSRX(RXNN,0)) S RXPX=^(0),RXPX2=^(2) D PRT G RXPNO
;
CHK Q:PSODTCUT>$P(RXPX2,"^",6)
I $P(^PSRX(RXNN,"STA"),"^")=12 S II=RXNN D LAST^PSORFL Q:PSODTCUT>RFDATE
I $P(RXPX,"^",3)=7!($P(RXPX,"^",3)=8)&('PSOPRPAS) Q
S J="^"_RXNN_"^" Q:(NEW1[J)!(NEW11[J) Q:$P(RXPX,"^",13)<EXPS S RXPNO=$P(RXPX,"^"),ISSD=$P(RXPX,"^",13)
Q:'$D(^PSDRUG($P(RXPX,"^",6),0)) S DRP=^(0),SD=$S($P(DRP,"^",3)["S":"S",$P(RXPX,"^",15)=12:"C",1:"A"),DRNME=$P(DRP,"^"),^TMP($J,"PRF",SD,DRNME,ISSD,RXPNO)=RXNN
Q
PRT S RFS=$P(RXPX,"^",9),QTY=$P(RXPX,"^",7)
S PHYS=$S($D(^VA(200,$P(RXPX,"^",4),0)):$P(^(0),"^"),1:"UNKNOWN"),II=RXNN D LAST^PSORFL S RXF=0 F MJK=0:0 S MJK=$O(^PSRX(RXNN,1,MJK)) Q:'MJK S RXF=RXF+1
S STA=$S($P(^PSRX(RXNN,"STA"),"^")=14:"DC",$P(^PSRX(RXNN,"STA"),"^")=15:"DE",$P(^PSRX(RXNN,"STA"),"^")=16:"PH",1:$E("ANRHPS ECD",(1+$P(^PSRX(RXNN,"STA"),"^")))),STA=$S(DT>$P(RXPX2,"^",6):"E",1:STA)
D SIG F TTTT=0:0 S TTTT=$O(FSIG(TTTT)) Q:'TTTT S FSIG=FSIG(TTTT)
S ^TMP("PSO",$J,PSI)="NTE"_FS_4_FS_FS,NTE4=1
S ^TMP("PSO",$J,PSI,CNT)=SD_CS_RXPNO_CS_DRNME_CS_$E(ISSD,4,5)_"/"_$E(ISSD,6,7)
S ^TMP("PSO",$J,PSI,CNT)=^TMP("PSO",$J,PSI,CNT)_CS_$E(RFL,1,5)_CS_RFS_CS_RXF_CS_QTY_CS_STA_CS_$E(PHYS,1,20)_CS_$S($G(FSIG)'="":FSIG,1:"""""")
S CNT=CNT+1
Q
SIG ;Format Sig
S PSPROSIG=$P($G(^PSRX(RXNN,"SIG")),"^",2) K FSIG,BSIG D
.I PSPROSIG D FSIG^PSOUTLA("R",RXNN,80) Q
.D EN2^PSOUTLA1(RXNN,80) F GGGGG=0:0 S GGGGG=$O(BSIG(GGGGG)) Q:'GGGGG S FSIG(GGGGG)=BSIG(GGGGG)
K PSPROSIG,GGGGG,BSIG Q
PEND ;include pending orders in profile
N PSPCOUNT,PSPPEND,ZXXX,PSPSTAT,FSIGZZ,PZZDRUG,PSSODRUG,PZXZERO,PPPPP,GGGGG
S PSPCOUNT=1,PSPPEND="" F PPPPP=0:0 S PPPPP=$O(^PS(52.41,"P",DFN,PPPPP)) Q:'PPPPP S PSPSTAT=$P($G(^PS(52.41,PPPPP,0)),"^",3) I PSPSTAT="NW"!(PSPSTAT="HD")!(PSPSTAT="RNW") S PSPPEND(PSPCOUNT)=PPPPP,PSPCOUNT=PSPCOUNT+1
Q:'$O(PSPPEND(0))
F ZXXX=0:0 S ZXXX=$O(PSPPEND(ZXXX)) Q:'ZXXX S PZXZERO=$G(^PS(52.41,PSPPEND(ZXXX),0)) D:$P(PZXZERO,"^")
.S PZZDRUG=$P(PZXZERO,"^",9),PZZODRUG=$P(PZXZERO,"^",8) Q:'PZZDRUG Q:'PZZODRUG
.S PEND="P"_CS_$S(PZZDRUG:$P($G(^PSDRUG(+PZZDRUG,0)),"^"),1:$P($G(^PS(50.7,+PZZODRUG,0)),"^")_" "_$P($G(^PS(50.606,+$P($G(^(0)),"^",2),0)),"^"))
.S PEND=PEND_CS_$E($P(PZXZERO,"^",6),4,5)_"/"_$E($P(PZXZERO,"^",6),6,7)_"/"_$E($P(PZXZERO,"^",6),2,3)
.S PEND=PEND_CS_$P(PZXZERO,"^",10)_CS_$P(PZXZERO,"^",11)_CS_$P($G(^VA(200,+$P(PZXZERO,"^",5),0)),"^")
.D FSIG^PSOUTLA("P",PSPPEND(ZXXX),100) S PEND=PEND_CS_$G(FSIG(1)) F FSIGZZ=1:0 S FSIGZZ=$O(FSIG(FSIGZZ)) Q:'FSIGZZ S PEND=PEND_CS_$G(FSIG(FSIGZZ))
S:$D(PEND) ^TMP("PSO",$J,PSI,CNT)=PEND
S CNT=CNT+1
;
START2 ;build NTE for drug interactions
K PSOSERV
S RX=IRXN,RXY=^PSRX(RX,0)
S NTE5="NTE"_FS_5_FS_FS
I $D(^PS(52.4,RX,0)) S SCRIPT=$P(^PS(52.4,RX,0),"^",10),SEV=$P(^PS(52.4,RX,0),"^",9) F X=1:1 S RXX(X)=$P(SCRIPT,",",X),SEV(X)=$P(SEV,",",X) Q:RXX(X)="" D
.S SER=$P(^PS(56,SEV(X),0),"^",4) S:$G(SER)=1 PSOSERV=1
.S DIRX=$P($G(^PSRX(RXX(X),0)),"^"),TYP=$S(SER=1:"CRITICAL",SER=2:"SIGNIFICANT",1:"UNKNOWN")
.S DRG=$P(^PSDRUG($P(^PSRX(RXX(X),0),"^",6),0),"^")
.S:X=1 NTE5=NTE5_DIRX_CS_TYP_CS_DRG
.S:X>1 NTE5=NTE5_RS_DIRX_CS_TYP_CS_DRG
I '$D(^PS(52.4,RX,0)),$D(^PSRX(RX,"DRI")) S SCRIPT=$P(^PSRX(RX,"DRI"),"^",2),SEV=$P(^PSRX(RX,"DRI"),"^") F X=1:1 S RXX(X)=$P(SCRIPT,",",X),SEV(X)=$P(SEV,",",X) Q:RXX(X)="" D
.S SER=$P(^PS(56,SEV(X),0),"^",4)
.S DIRX=$P($G(^PSRX(RXX(X),0)),"^"),TYP=$S(SER=1:"CRITICAL",SER=2:"SIGNIFICANT",1:"UNKNOWN")
.S DRG=$P(^PSDRUG($P(^PSRX(RXX(X),0),"^",6),0),"^")
.S:X=1 NTE5=NTE5_DIRX_CS_TYP_CS_DRG
.S:X>1 NTE5=NTE5_RS_DIRX_CS_TYP_CS_DRG
S NTE5=NTE5_CS_$S('$G(PSOSERV):"MAY REQUIRE",1:"REQUIRES")_$S('$G(PSOSERV):" REVIEWING BY A PHARMACIST",1:" INTERVENTION BY A PHARMACIST")
K SER,SCRIPT,DIRX,TYP,DRG,SEV,RXX,RX,RXY
Q
START3 ;build NTE for drug allergy warning label
S NTE6="NTE"_FS_6_FS_FS
I $G(DAW)&('$G(DIN)) S DARX=$P(^PSRX(IRXN,0),"^"),DRG=$P(^PSDRUG(IDGN,0),"^"),NTE6=NTE6_DARX_CS_DRG
I $G(DAW)&($G(DIN)) S DARX=$P(^PSRX(IRXN,0),"^"),DRG=$P(^PSDRUG(IDGN,0),"^") D
.S NTE6=NTE6_DARX_CS_DRG F XY=1:1 S INGRE=ING(XY) S:XY=1 NTE6=NTE6_CS_INGRE S:XY>1 NTE6=NTE6_RS_INGRE Q:'INGRE
K DARX,DRG,XY,INGRE
Q
PSOHLSG3 ;BHAM ISC/SAB/LC - BUILD PROFILE ; 03/20/96 19:38
+1 ;;7.0;OUTPATIENT PHARMACY;;DEC 1997
START ;build profile for the NTE4 segment
+1 IF '$DATA(DFN)
QUIT
+2 NEW II
KILL ^TMP($JOB,"PRF")
+3 SET PSODFN=DFN
IF '$DATA(PSODTCUT)
DO CUTDATE^PSOFUNC
+4 IF '$DATA(Z)
SET Z=1
IF '$DATA(NEW1)
SET (NEW1,NEW11)="^"
SET %DT=""
SET X="T"
DO ^%DT
SET DT=Y
SET X1=DT
SET X2=-365
DO C^%DTC
SET EXPS=X
SET X1=DT
SET X2=-182
DO C^%DTC
SET EXP=X
+5 FOR RXX=0:0
SET RXX=$ORDER(^PS(55,DFN,"P",RXX))
IF 'RXX
QUIT
SET RXNN=+^(RXX,0)
IF $DATA(^PSRX(RXNN,0))
IF $PIECE($GET(^("STA")),"^")'=13
SET RXPX=^PSRX(RXNN,0)
SET $PIECE(RXPX,"^",15)=$PIECE($GET(^("STA")),"^")
SET RXPX2=^(2)
DO CHK
+6 IF '$DATA(^TMP($JOB,"PRF"))
GOTO PPP
+7 ;
SD SET CNT=1
FOR SD="A","C","S"
IF $DATA(^TMP($JOB,"PRF",SD))
SET DRNME=""
DO DRNME
PPP DO PEND
+1 KILL ^TMP($JOB,"PRF")
+2 KILL A,B,DRNME,DRP,EXP,EXPS,I,II,ISSD,J,LINE,LN,MESS,MJK,NEW1,NEW11,PHYS,POP,QTY,TTTT,RFL,RFS,RXF,RXNN,RXPX,RXPX2,RXPNO,RXX
+3 KILL SD,SIG,STA,X,X1,X2,Y,Z,CNT,PEND,PSODTCUT,PSOPRPAS,PZZODRUG,RFDATE,RS
+4 QUIT
DRNME SET DRNME=$ORDER(^TMP($JOB,"PRF",SD,DRNME))
IF DRNME=""
QUIT
DO ISSD
GOTO DRNME
+1 ;
ISSD FOR ISSD=0:0
SET ISSD=$ORDER(^TMP($JOB,"PRF",SD,DRNME,ISSD))
IF 'ISSD
QUIT
SET RXPNO=""
DO RXPNO
+1 QUIT
RXPNO SET RXPNO=$ORDER(^TMP($JOB,"PRF",SD,DRNME,ISSD,RXPNO))
IF RXPNO=""
QUIT
SET RXNN=^(RXPNO)
IF $DATA(^PSRX(RXNN,0))
SET RXPX=^(0)
SET RXPX2=^(2)
DO PRT
GOTO RXPNO
+1 ;
CHK IF PSODTCUT>$PIECE(RXPX2,"^",6)
QUIT
+1 IF $PIECE(^PSRX(RXNN,"STA"),"^")=12
SET II=RXNN
DO LAST^PSORFL
IF PSODTCUT>RFDATE
QUIT
+2 IF $PIECE(RXPX,"^",3)=7!($PIECE(RXPX,"^",3)=8)&('PSOPRPAS)
QUIT
+3 SET J="^"_RXNN_"^"
IF (NEW1[J)!(NEW11[J)
QUIT
IF $PIECE(RXPX,"^",13)<EXPS
QUIT
SET RXPNO=$PIECE(RXPX,"^")
SET ISSD=$PIECE(RXPX,"^",13)
+4 IF '$DATA(^PSDRUG($PIECE(RXPX,"^",6),0))
QUIT
SET DRP=^(0)
SET SD=$SELECT($PIECE(DRP,"^",3)["S":"S",$PIECE(RXPX,"^",15)=12:"C",1:"A")
SET DRNME=$PIECE(DRP,"^")
SET ^TMP($JOB,"PRF",SD,DRNME,ISSD,RXPNO)=RXNN
+5 QUIT
PRT SET RFS=$PIECE(RXPX,"^",9)
SET QTY=$PIECE(RXPX,"^",7)
+1 SET PHYS=$SELECT($DATA(^VA(200,$PIECE(RXPX,"^",4),0)):$PIECE(^(0),"^"),1:"UNKNOWN")
SET II=RXNN
DO LAST^PSORFL
SET RXF=0
FOR MJK=0:0
SET MJK=$ORDER(^PSRX(RXNN,1,MJK))
IF 'MJK
QUIT
SET RXF=RXF+1
+2 SET STA=$SELECT($PIECE(^PSRX(RXNN,"STA"),"^")=14:"DC",$PIECE(^PSRX(RXNN,"STA"),"^")=15:"DE",$PIECE(^PSRX(RXNN,"STA"),"^")=16:"PH",1:$EXTRACT("ANRHPS ECD",(1+$PIECE(^PSRX(RXNN,"STA"),"^"))))
SET STA=$SELECT(DT>$PIECE(RXPX2,"^",6):"E",1:STA)
+3 DO SIG
FOR TTTT=0:0
SET TTTT=$ORDER(FSIG(TTTT))
IF 'TTTT
QUIT
SET FSIG=FSIG(TTTT)
+4 SET ^TMP("PSO",$JOB,PSI)="NTE"_FS_4_FS_FS
SET NTE4=1
+5 SET ^TMP("PSO",$JOB,PSI,CNT)=SD_CS_RXPNO_CS_DRNME_CS_$EXTRACT(ISSD,4,5)_"/"_$EXTRACT(ISSD,6,7)
+6 SET ^TMP("PSO",$JOB,PSI,CNT)=^TMP("PSO",$JOB,PSI,CNT)_CS_$EXTRACT(RFL,1,5)_CS_RFS_CS_RXF_CS_QTY_CS_STA_CS_$EXTRACT(PHYS,1,20)_CS_$SELECT($GET(FSIG)'="":FSIG,1:"""""")
+7 SET CNT=CNT+1
+8 QUIT
SIG ;Format Sig
+1 SET PSPROSIG=$PIECE($GET(^PSRX(RXNN,"SIG")),"^",2)
KILL FSIG,BSIG
Begin DoDot:1
+2 IF PSPROSIG
DO FSIG^PSOUTLA("R",RXNN,80)
QUIT
+3 DO EN2^PSOUTLA1(RXNN,80)
FOR GGGGG=0:0
SET GGGGG=$ORDER(BSIG(GGGGG))
IF 'GGGGG
QUIT
SET FSIG(GGGGG)=BSIG(GGGGG)
End DoDot:1
+4 KILL PSPROSIG,GGGGG,BSIG
QUIT
PEND ;include pending orders in profile
+1 NEW PSPCOUNT,PSPPEND,ZXXX,PSPSTAT,FSIGZZ,PZZDRUG,PSSODRUG,PZXZERO,PPPPP,GGGGG
+2 SET PSPCOUNT=1
SET PSPPEND=""
FOR PPPPP=0:0
SET PPPPP=$ORDER(^PS(52.41,"P",DFN,PPPPP))
IF 'PPPPP
QUIT
SET PSPSTAT=$PIECE($GET(^PS(52.41,PPPPP,0)),"^",3)
IF PSPSTAT="NW"!(PSPSTAT="HD")!(PSPSTAT="RNW")
SET PSPPEND(PSPCOUNT)=PPPPP
SET PSPCOUNT=PSPCOUNT+1
+3 IF '$ORDER(PSPPEND(0))
QUIT
+4 FOR ZXXX=0:0
SET ZXXX=$ORDER(PSPPEND(ZXXX))
IF 'ZXXX
QUIT
SET PZXZERO=$GET(^PS(52.41,PSPPEND(ZXXX),0))
IF $PIECE(PZXZERO,"^")
Begin DoDot:1
+5 SET PZZDRUG=$PIECE(PZXZERO,"^",9)
SET PZZODRUG=$PIECE(PZXZERO,"^",8)
IF 'PZZDRUG
QUIT
IF 'PZZODRUG
QUIT
+6 SET PEND="P"_CS_$SELECT(PZZDRUG:$PIECE($GET(^PSDRUG(+PZZDRUG,0)),"^"),1:$PIECE($GET(^PS(50.7,+PZZODRUG,0)),"^")_" "_$PIECE($GET(^PS(50.606,+$PIECE($GET(^(0)),"^",2),0)),"^"))
+7 SET PEND=PEND_CS_$EXTRACT($PIECE(PZXZERO,"^",6),4,5)_"/"_$EXTRACT($PIECE(PZXZERO,"^",6),6,7)_"/"_$EXTRACT($PIECE(PZXZERO,"^",6),2,3)
+8 SET PEND=PEND_CS_$PIECE(PZXZERO,"^",10)_CS_$PIECE(PZXZERO,"^",11)_CS_$PIECE($GET(^VA(200,+$PIECE(PZXZERO,"^",5),0)),"^")
+9 DO FSIG^PSOUTLA("P",PSPPEND(ZXXX),100)
SET PEND=PEND_CS_$GET(FSIG(1))
FOR FSIGZZ=1:0
SET FSIGZZ=$ORDER(FSIG(FSIGZZ))
IF 'FSIGZZ
QUIT
SET PEND=PEND_CS_$GET(FSIG(FSIGZZ))
End DoDot:1
+10 IF $DATA(PEND)
SET ^TMP("PSO",$JOB,PSI,CNT)=PEND
+11 SET CNT=CNT+1
+12 ;
START2 ;build NTE for drug interactions
+1 KILL PSOSERV
+2 SET RX=IRXN
SET RXY=^PSRX(RX,0)
+3 SET NTE5="NTE"_FS_5_FS_FS
+4 IF $DATA(^PS(52.4,RX,0))
SET SCRIPT=$PIECE(^PS(52.4,RX,0),"^",10)
SET SEV=$PIECE(^PS(52.4,RX,0),"^",9)
FOR X=1:1
SET RXX(X)=$PIECE(SCRIPT,",",X)
SET SEV(X)=$PIECE(SEV,",",X)
IF RXX(X)=""
QUIT
Begin DoDot:1
+5 SET SER=$PIECE(^PS(56,SEV(X),0),"^",4)
IF $GET(SER)=1
SET PSOSERV=1
+6 SET DIRX=$PIECE($GET(^PSRX(RXX(X),0)),"^")
SET TYP=$SELECT(SER=1:"CRITICAL",SER=2:"SIGNIFICANT",1:"UNKNOWN")
+7 SET DRG=$PIECE(^PSDRUG($PIECE(^PSRX(RXX(X),0),"^",6),0),"^")
+8 IF X=1
SET NTE5=NTE5_DIRX_CS_TYP_CS_DRG
+9 IF X>1
SET NTE5=NTE5_RS_DIRX_CS_TYP_CS_DRG
End DoDot:1
+10 IF '$DATA(^PS(52.4,RX,0))
IF $DATA(^PSRX(RX,"DRI"))
SET SCRIPT=$PIECE(^PSRX(RX,"DRI"),"^",2)
SET SEV=$PIECE(^PSRX(RX,"DRI"),"^")
FOR X=1:1
SET RXX(X)=$PIECE(SCRIPT,",",X)
SET SEV(X)=$PIECE(SEV,",",X)
IF RXX(X)=""
QUIT
Begin DoDot:1
+11 SET SER=$PIECE(^PS(56,SEV(X),0),"^",4)
+12 SET DIRX=$PIECE($GET(^PSRX(RXX(X),0)),"^")
SET TYP=$SELECT(SER=1:"CRITICAL",SER=2:"SIGNIFICANT",1:"UNKNOWN")
+13 SET DRG=$PIECE(^PSDRUG($PIECE(^PSRX(RXX(X),0),"^",6),0),"^")
+14 IF X=1
SET NTE5=NTE5_DIRX_CS_TYP_CS_DRG
+15 IF X>1
SET NTE5=NTE5_RS_DIRX_CS_TYP_CS_DRG
End DoDot:1
+16 SET NTE5=NTE5_CS_$SELECT('$GET(PSOSERV):"MAY REQUIRE",1:"REQUIRES")_$SELECT('$GET(PSOSERV):" REVIEWING BY A PHARMACIST",1:" INTERVENTION BY A PHARMACIST")
+17 KILL SER,SCRIPT,DIRX,TYP,DRG,SEV,RXX,RX,RXY
+18 QUIT
START3 ;build NTE for drug allergy warning label
+1 SET NTE6="NTE"_FS_6_FS_FS
+2 IF $GET(DAW)&('$GET(DIN))
SET DARX=$PIECE(^PSRX(IRXN,0),"^")
SET DRG=$PIECE(^PSDRUG(IDGN,0),"^")
SET NTE6=NTE6_DARX_CS_DRG
+3 IF $GET(DAW)&($GET(DIN))
SET DARX=$PIECE(^PSRX(IRXN,0),"^")
SET DRG=$PIECE(^PSDRUG(IDGN,0),"^")
Begin DoDot:1
+4 SET NTE6=NTE6_DARX_CS_DRG
FOR XY=1:1
SET INGRE=ING(XY)
IF XY=1
SET NTE6=NTE6_CS_INGRE
IF XY>1
SET NTE6=NTE6_RS_INGRE
IF 'INGRE
QUIT
End DoDot:1
+5 KILL DARX,DRG,XY,INGRE
+6 QUIT