PSOBUILD ;IHS/DSD/JCM - BUILD ARRAY OF PATIENTS CURRENT MEDS [ 07/15/96 5:25 PM ] ;6/21/07 8:20am
;;7.0;OUTPATIENT PHARMACY;**23,82,119,132,235,206,251,441**;DEC 1997;Build 208
;External reference ^PS(50.606 supported by DBIA 2174
;External reference ^PS(50.7 supported by DBIA 2223
;External reference ^PS(55 supported by DBIA 2228
;External reference ^PSDRUG( supported by DBIA 221
; Input variables: PSODFN,DT,PSODTCUT
;
;Add Complex Orders to NVA Meds
;
START N ORD K PSOSD I '$D(PSODFN)!('$D(DT)) G END
D EOJ,INIT G:PSOQFLG END D BUILD
S STA="ACTIVE^NON-VERIFIED^REFILL^HOLD^NON-VERIFIED^ACTIVE^^^^^^ACTIVE^DISCONTINUED^^DISCONTINUED^DISCONTINUED^HOLD"
S DRG="" F I=0:0 S DRG=$O(PSOSD(DRG)) Q:DRG="" I $G(PSOSD(DRG))]"" S PSOSD($P(STA,"^",$P(PSOSD(DRG),"^",2)+1),DRG)=PSOSD(DRG) D K PSOSD(DRG)
.S $P(PSOSD($P(STA,"^",$P(PSOSD(DRG),"^",2)+1),DRG),"^",9)=$G(^TMP("PS",$J,$P(STA,"^",$P(PSOSD(DRG),"^",2)+1),DRG))
F PEN=0:0 S PEN=$O(^PS(52.41,"P",PSODFN,PEN)) Q:'PEN S ORD=^PS(52.41,PEN,0),PSOOI=$P(ORD,"^",8),PSODD=+$P(ORD,"^",9) D:$P(ORD,"^",3)'="DC"&($P(ORD,"^",3)'="DE")&($P(ORD,"^",3)'="HD")
.I 'PSODD N ZPSI,ZPSDC S (ZPSDC,ZPSI)=0 I $G(PSOOI) D
..F S ZPSI=$O(^PSDRUG("ASP",PSOOI,ZPSI)) Q:'ZPSI I $S('$D(^PSDRUG(ZPSI,"I")):1,'^("I"):1,DT'>^("I"):1,1:0),$S($P($G(^PSDRUG(ZPSI,2)),"^",3)'["O":0,1:1) S ZPSDC=ZPSDC+1,ZPSDC(ZPSDC)=ZPSI
..I ZPSDC=1 S PSODD=ZPSDC(1),$P(^PS(52.41,PEN,0),"^",9)=ZPSDC(1)
.K ZPSI,ZPSDC
.S DRG=$S(PSODD:$P($G(^PSDRUG(PSODD,0)),"^"),+PSOOI&('PSODD):$P(^PS(50.7,+PSOOI,0),"^")_" "_$P(^PS(50.606,$P(^PS(50.7,+PSOOI,0),"^",2),0),"^"),1:"") Q:DRG']""
.I $D(PSOSD("PENDING",DRG)) S DRG=DRG_"^"_PEN
.S PSOSD("PENDING",DRG)="*****^17^Z^Z^"_$S(PSODD:$P(^PSDRUG(PSODD,0),"^",2),1:"")_"^"_$P(^PS(52.41,PEN,0),"^",11)_"^"_$S($G(^PSDRUG(PSODD,"ND"))]"":+^("ND")_"A"_$P(^("ND"),"^",3),1:"")
.S PSOSD("PENDING",DRG)=PSOSD("PENDING",DRG)_"^"_$P(ORD,"^",10)_"^"_$P(ORD,"^",6)_"^"_PEN_"^"_$S($G(PSODD):$G(PSODD),1:""),PSOSD=+$G(PSOSD)+1 K PSOOI,PSODD
;*** Complex NVA Order Modifications ***
N DD,DDX,DOSE,SCHD,MEDR,DURA,CONJ,COMPLEX
F NVA=0:0 S NVA=$O(^PS(55,PSODFN,"NVA",NVA)) Q:'NVA S NON=^PS(55,PSODFN,"NVA",NVA,0) D:'$P(^PS(55,PSODFN,"NVA",NVA,0),"^",7) ;DO if not DC'd date
.I $O(^PS(55,PSODFN,"NVA",NVA,3,0)) D NVANEW Q
.D NVAOLD
END D EOJ
Q
;
NVANEW ;New Complex NVA order multiple file format logic
;loop thru DD multiple and create separate array entries for each item (in case contain a complex order)
F DD=0:0 S DD=$O(^PS(55,PSODFN,"NVA",NVA,3,DD)) Q:'DD D
.S DDX=DD_","_NVA_","_PSODFN
.S DOSE=$$GET1^DIQ(55.516,DDX,"DOSAGE","I")
.S SCHD=$$GET1^DIQ(55.516,DDX,"SCHEDULE","I")
.S MEDR=$$GET1^DIQ(55.516,DDX,"MEDICATION ROUTE","I")
.S DURA=$$GET1^DIQ(55.516,DDX,"DURATION","I")
.S CONJ=$$GET1^DIQ(55.516,DDX,"CONJUNCTION")
.S PSODD=$P(NON,"^",2),PSOOI=$P(NON,"^")
.S DRG=$S(PSODD:$P($G(^PSDRUG(PSODD,0)),"^"),+PSOOI&('PSODD):$P(^PS(50.7,+PSOOI,0),"^")_" "_$P(^PS(50.606,$P(^PS(50.7,+PSOOI,0),"^",2),0),"^"),1:"")
.I $D(PSOSD("ZNONVA",DRG)) S DRG=DRG_"^"_NVA_"^"_DD
.S PSOSD("ZNONVA",DRG)="****^9^Z^Z^"_$S(PSODD:$P(^PSDRUG(PSODD,0),"^",2),1:"")_"^"_DOSE_"^^"_SCHD_"^"_$P(NON,"^",10)_"^"_NVA_"^"_PSODD_"^"_DURA_"^"_CONJ ;append new pieces 12 & 13
.I PSODD S $P(PSOSD("ZNONVA",DRG),"^",7)=$S($G(^PSDRUG(PSODD,"ND"))]"":+^("ND")_"A"_$P(^("ND"),"^",3),1:"")
.S PSOSD=+$G(PSOSD)+1
Q
;
NVAOLD ;NVA Backwards compatible for old NON-VA file DD, pre-complex order SIG multiple file setup
; (after 441. By attrition, all records will eventually have the new complex order mult. file format)
S PSODD=$P(NON,"^",2),PSOOI=$P(NON,"^")
S DRG=$S(PSODD:$P($G(^PSDRUG(PSODD,0)),"^"),+PSOOI&('PSODD):$P(^PS(50.7,+PSOOI,0),"^")_" "_$P(^PS(50.606,$P(^PS(50.7,+PSOOI,0),"^",2),0),"^"),1:"")
I $D(PSOSD("ZNONVA",DRG)) S DRG=DRG_U_NVA ;build unique nva drug name subscript when same drug
S PSOSD("ZNONVA",DRG)="****^9^Z^Z^"_$S($P(NON,"^",2):$P(^PSDRUG($P(NON,"^",2),0),"^",2),1:"")_"^"_$P(NON,"^",3)_"^^"_$P(NON,"^",5)_"^"_$P(NON,"^",10)_"^"_NVA_"^"_$P(NON,"^",2)
I $P(NON,"^",2) S $P(PSOSD("ZNONVA",DRG),"^",7)=$S($G(^PSDRUG(PSODD,"ND"))]"":+^("ND")_"A"_$P(^("ND"),"^",3),1:"")
S PSOSD=+$G(PSOSD)+1
Q
;
INIT ;
K PSOSD,PSOMED S PSOQFLG=0,U="^",PSOBUILD("COUNT")=0 G:$D(PSODTCUT) INITX
I '$D(^PS(53,"B","OUTPATIENT")) S PSOQFLG=1 G INITX
S PSOX=$O(^PS(53,"B","OUTPATIENT","")) I 'PSOX S PSOQFLG=1 G INITX
;S DAYS=$S($D(DAYS360):360,1:45),X2=-$S($P($G(^PS(53,PSOX,0)),"^",3)+15>DAYS:$P($G(^(0)),"^",3)+15,1:DAYS),X1=DT D C^%DTC S PSODTCUT=X
S X2=-120,X1=DT D C^%DTC S PSODTCUT=X
INITX K X,X1,X2,PSOX
Q
;
BUILD ;build profiles
F PSOEXPDT=(PSODTCUT-1):0 S PSOEXPDT=$O(^PS(55,PSODFN,"P","A",PSOEXPDT)) Q:'PSOEXPDT F PSOBUILD("RX")=0:0 S PSOBUILD("RX")=$O(^PS(55,PSODFN,"P","A",PSOEXPDT,PSOBUILD("RX"))) Q:'PSOBUILD("RX") I $D(^PSRX(PSOBUILD("RX"),0)) D GET
BUILDX I PSOBUILD("COUNT")>0 S PSOSD=PSOBUILD("COUNT")
Q
GET ;data for profiles
Q:'$P(^PSRX(PSOBUILD("RX"),0),"^",2)
S (PSOSTF,PSOSTN)="",PSORX0=^PSRX(PSOBUILD("RX"),0),PSOST0=+^PSRX(PSOBUILD("RX"),"STA"),$P(PSORX0,"^",15)=PSOST0
G:PSOST0=13 GETX S PSORX2=$G(^PSRX(PSOBUILD("RX"),2))
S PSORX3=$G(^PSRX(PSOBUILD("RX"),3)) S:PSORX3="" PSORX3=$P(PSORX2,"^",2)
S PSODRG=+$P(PSORX0,"^",6) G:'$D(^PSDRUG(PSODRG,0)) GETX S PSODRUG0=^PSDRUG(PSODRG,0),PSOVACL=$P(PSODRUG0,"^",2),PSODYS=$P(PSORX0,"^",8)
;
I PSOST0<12!(PSOST0=16),PSOEXPDT<DT D:$P(PSORX0,"^",15)'=11
.S PSOST0=11,$P(PSORX0,"^",15)=11 N DIE,DIC,DR,DA,PSOBEXDA S DIE=52,(DA,PSOBEXDA)=PSOBUILD("RX"),DR="100////11" D ^DIE K DIE,DIC,DR
.D ECAN^PSOUTL(DA) K DA
.S STAT="SC",PHARMST="ZE",COMM="Medication Expired on "_$E(PSOEXPDT,4,5)_"/"_$E(PSOEXPDT,6,7)_"/"_$E(PSOEXPDT,2,3) D EN^PSOHLSN1(PSOBEXDA,STAT,PHARMST,COMM) K COMM,STAT,PHARMST,PSOBEXDA
I PSOST0=12,PSOEXPDT<DT S PSOST0=12
I PSOST0=5 D G GT1
.I $O(^PS(52.5,"B",PSOBUILD("RX"),0)),'$D(^PS(52.5,+$O(^(0)),0)) D Q
..S PSOST0=0 D FSTA
..K ^PS(52.5,"B",PSOBUILD("RX"),$O(^PS(52.5,"B",PSOBUILD("RX"),0)))
.I '$O(^PS(52.5,"B",PSOBUILD("RX"),0)) S PSOST0=0 D FSTA
I 'PSOST0 D STAT
GT1 G GETX:$D(NOEXP)&(PSOST0=11)
I $D(^PSDRUG(PSODRG,"I")),^("I")]"",DT>^("I") S PSOSTN=PSOSTN_"A" I $P($G(PSOPAR),"^",11)']"" S PSOSTF=PSOSTF_"A"
S PSONDF=$S($G(^PSDRUG(PSODRG,"ND"))]"":+^("ND")_"A"_$P(^("ND"),"^",3),1:0)
I $P($G(^PSDRUG(PSODRG,2)),"^",3)'["O" S PSOSTN=PSOSTN_"M"
S CLOZPT=$S($P($G(^PSDRUG(PSODRG,"CLOZ1")),"^")="PSOCLO1":1,1:0)
I 'CLOZPT,($P(PSODRUG0,"^",3)["A")&($P(PSODRUG0,"^",3)'["B") S PSOSTN=PSOSTN_"B",PSOSTF=PSOSTF_"B"
K CLOZPT I ($P(PSODRUG0,"^",3)["W")!($P(PSODRUG0,"^",3)[1)!($P(PSODRUG0,"^",3)[2) S PSOSTN=PSOSTN_"C"
I $D(^PS(53,+$P(PSORX0,"^",3),0)),'$P(^(0),"^",5) S PSOSTN=PSOSTN_"D"
I PSOST0=1 S PSOSTN=PSOSTN_"E"
S PSOLC=$P(PSORX0,"^"),PSOLC=$E(PSOLC,$L(PSOLC)) I $A(PSOLC)>90 S PSOSTN=PSOSTN_"F"
I PSOST0,PSOST0'=2,PSOST0'=6 S PSOSTF=PSOSTF_"Z"
I $G(PSORX("BAR CODE")),PSOST0,PSOST0'=2,PSOST0'=5,PSOST0'=6,PSOST0'=11,PSOST0'=12 S PSOSTN=PSOSTN_"Z" G BARC
I PSOST0,PSOST0'=2,PSOST0'=5,PSOST0'=6,PSOST0'=11,PSOST0'=12,PSOST0'=14 S PSOSTN=PSOSTN_"Z"
BARC S PSORFRM=$P(PSORX0,"^",9) F PSOJ=0:0 S PSOJ=$O(^PSRX(PSOBUILD("RX"),1,PSOJ)) Q:'PSOJ S PSORFRM=PSORFRM-1
S:PSORFRM<0 PSORFRM=0 S:PSORFRM=0 PSOSTF=PSOSTF_"G"
S PSODRUGN=$P(PSODRUG0,"^") I $D(PSOSD(PSODRUGN)),PSOST0>10 Q:$P(PSOSD(PSODRUGN),"^",2)<11 Q:$P(PSOSD(PSODRUGN),"^",2)>10&($P(PSORX0,"^",13)<$P(^PSRX(+$P(PSOSD(PSODRUGN),"^"),0),"^",13))
S:'$D(PSOSD(PSODRUGN)) PSOBUILD("COUNT")=PSOBUILD("COUNT")+1
I $D(PSOSD(PSODRUGN)),$P(PSOSD(PSODRUGN),"^",2)<10,PSOST0<10 S PSOSD(PSODRUGN_"^"_PSOBUILD("RX"))=PSOBUILD("RX")_"^"_PSOST0_"^"_PSOSTN_"^"_PSOSTF_"^"_PSOVACL_"^"_PSORFRM_"^"_PSONDF_"^"_PSODYS,PSOBUILD("COUNT")=PSOBUILD("COUNT")+1
E S PSOSD(PSODRUGN)=PSOBUILD("RX")_"^"_PSOST0_"^"_PSOSTN_"^"_PSOSTF_"^"_PSOVACL_"^"_PSORFRM_"^"_PSONDF_"^"_PSODYS
GETX Q
STAT N X S X=+$O(^PS(52.5,"B",PSOBUILD("RX"),0))
I X,$D(^PS(52.5,X,0)),$P($G(^PS(52.5,X,0)),"^",7)'="X",'$G(^PS(52.5,X,"P")) S PSOST0=5
I PSOST0 D FSTA
Q
FSTA S $P(PSORX0,"^",15)=PSOST0
N DIE,DR,DA S DIE=52,DA=PSOBUILD("RX"),DR="100////"_PSOST0 D ^DIE K DIE,DR,DA
Q
;
EOJ K ORD,PSOX,PSOEXPDT,PSODRG,PSODRUG0,PSOLC,PSONDF,PSOQFLG,PSORFRM,PSORX0,PSORX2,PSORX3,PSOST0,PSOSTF,PSOSTN,PSOJ,PSODRUGN,PSOVACL,PSOBUILD,PSODYS,PEN,DRG,NON,NVA
Q
INPAT(PSODFN) ;entry point for inpat meds to view patient's outpat. meds
D FULL^VALM1
S INPAT=1,X2=-120,X1=DT D C^%DTC S PSODTCUT=X D START,^PSODSPL
K PSOSD,DDH,PSCNT,PSOCT,PSODD,PSOOI,PSOPAR,PSOSTA,STP,STR,PSODTCUT,PSODFN,INPAT,DRG
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSOBUILD 8614 printed Dec 13, 2024@02:25:10 Page 2
PSOBUILD ;IHS/DSD/JCM - BUILD ARRAY OF PATIENTS CURRENT MEDS [ 07/15/96 5:25 PM ] ;6/21/07 8:20am
+1 ;;7.0;OUTPATIENT PHARMACY;**23,82,119,132,235,206,251,441**;DEC 1997;Build 208
+2 ;External reference ^PS(50.606 supported by DBIA 2174
+3 ;External reference ^PS(50.7 supported by DBIA 2223
+4 ;External reference ^PS(55 supported by DBIA 2228
+5 ;External reference ^PSDRUG( supported by DBIA 221
+6 ; Input variables: PSODFN,DT,PSODTCUT
+7 ;
+8 ;Add Complex Orders to NVA Meds
+9 ;
START NEW ORD
KILL PSOSD
IF '$DATA(PSODFN)!('$DATA(DT))
GOTO END
+1 DO EOJ
DO INIT
if PSOQFLG
GOTO END
DO BUILD
+2 SET STA="ACTIVE^NON-VERIFIED^REFILL^HOLD^NON-VERIFIED^ACTIVE^^^^^^ACTIVE^DISCONTINUED^^DISCONTINUED^DISCONTINUED^HOLD"
+3 SET DRG=""
FOR I=0:0
SET DRG=$ORDER(PSOSD(DRG))
if DRG=""
QUIT
IF $GET(PSOSD(DRG))]""
SET PSOSD($PIECE(STA,"^",$PIECE(PSOSD(DRG),"^",2)+1),DRG)=PSOSD(DRG)
Begin DoDot:1
+4 SET $PIECE(PSOSD($PIECE(STA,"^",$PIECE(PSOSD(DRG),"^",2)+1),DRG),"^",9)=$GET(^TMP("PS",$JOB,$PIECE(STA,"^",$PIECE(PSOSD(DRG),"^",2)+1),DRG))
End DoDot:1
KILL PSOSD(DRG)
+5 FOR PEN=0:0
SET PEN=$ORDER(^PS(52.41,"P",PSODFN,PEN))
if 'PEN
QUIT
SET ORD=^PS(52.41,PEN,0)
SET PSOOI=$PIECE(ORD,"^",8)
SET PSODD=+$PIECE(ORD,"^",9)
if $PIECE(ORD,"^",3)'="DC"&($PIECE(ORD,"^",3)'="DE")&($PIECE(ORD,"^",3)'="HD")
Begin DoDot:1
+6 IF 'PSODD
NEW ZPSI,ZPSDC
SET (ZPSDC,ZPSI)=0
IF $GET(PSOOI)
Begin DoDot:2
+7 FOR
SET ZPSI=$ORDER(^PSDRUG("ASP",PSOOI,ZPSI))
if 'ZPSI
QUIT
IF $SELECT('$DATA(^PSDRUG(ZPSI,"I")):1,'^("I"):1,DT'>^("I"):1,1:0)
IF $SELECT($PIECE($GET(^PSDRUG(ZPSI,2)),"^",3)'["O":0,1:1)
SET ZPSDC=ZPSDC+1
SET ZPSDC(ZPSDC)=ZPSI
+8 IF ZPSDC=1
SET PSODD=ZPSDC(1)
SET $PIECE(^PS(52.41,PEN,0),"^",9)=ZPSDC(1)
End DoDot:2
+9 KILL ZPSI,ZPSDC
+10 SET DRG=$SELECT(PSODD:$PIECE($GET(^PSDRUG(PSODD,0)),"^"),+PSOOI&('PSODD):$PIECE(^PS(50.7,+PSOOI,0),"^")_" "_$PIECE(^PS(50.606,$PIECE(^PS(50.7,+PSOOI,0),"^",2),0),"^"),1:"")
if DRG']""
QUIT
+11 IF $DATA(PSOSD("PENDING",DRG))
SET DRG=DRG_"^"_PEN
+12 SET PSOSD("PENDING",DRG)="*****^17^Z^Z^"_$SELECT(PSODD:$PIECE(^PSDRUG(PSODD,0),"^",2),1:"")_"^"_$PIECE(^PS(52.41,PEN,0),"^",11)_"^"_$SELECT($GET(^PSDRUG(PSODD,"ND"))]"":+^("ND")_"A"_$PIECE(^("ND"),"^",3),1:"")
+13 SET PSOSD("PENDING",DRG)=PSOSD("PENDING",DRG)_"^"_$PIECE(ORD,"^",10)_"^"_$PIECE(ORD,"^",6)_"^"_PEN_"^"_$SELECT($GET(PSODD):$GET(PSODD),1:"")
SET PSOSD=+$GET(PSOSD)+1
KILL PSOOI,PSODD
End DoDot:1
+14 ;*** Complex NVA Order Modifications ***
+15 NEW DD,DDX,DOSE,SCHD,MEDR,DURA,CONJ,COMPLEX
+16 ;DO if not DC'd date
FOR NVA=0:0
SET NVA=$ORDER(^PS(55,PSODFN,"NVA",NVA))
if 'NVA
QUIT
SET NON=^PS(55,PSODFN,"NVA",NVA,0)
if '$PIECE(^PS(55,PSODFN,"NVA",NVA,0),"^",7)
Begin DoDot:1
+17 IF $ORDER(^PS(55,PSODFN,"NVA",NVA,3,0))
DO NVANEW
QUIT
+18 DO NVAOLD
End DoDot:1
END DO EOJ
+1 QUIT
+2 ;
NVANEW ;New Complex NVA order multiple file format logic
+1 ;loop thru DD multiple and create separate array entries for each item (in case contain a complex order)
+2 FOR DD=0:0
SET DD=$ORDER(^PS(55,PSODFN,"NVA",NVA,3,DD))
if 'DD
QUIT
Begin DoDot:1
+3 SET DDX=DD_","_NVA_","_PSODFN
+4 SET DOSE=$$GET1^DIQ(55.516,DDX,"DOSAGE","I")
+5 SET SCHD=$$GET1^DIQ(55.516,DDX,"SCHEDULE","I")
+6 SET MEDR=$$GET1^DIQ(55.516,DDX,"MEDICATION ROUTE","I")
+7 SET DURA=$$GET1^DIQ(55.516,DDX,"DURATION","I")
+8 SET CONJ=$$GET1^DIQ(55.516,DDX,"CONJUNCTION")
+9 SET PSODD=$PIECE(NON,"^",2)
SET PSOOI=$PIECE(NON,"^")
+10 SET DRG=$SELECT(PSODD:$PIECE($GET(^PSDRUG(PSODD,0)),"^"),+PSOOI&('PSODD):$PIECE(^PS(50.7,+PSOOI,0),"^")_" "_$PIECE(^PS(50.606,$PIECE(^PS(50.7,+PSOOI,0),"^",2),0),"^"),1:"")
+11 IF $DATA(PSOSD("ZNONVA",DRG))
SET DRG=DRG_"^"_NVA_"^"_DD
+12 ;append new pieces 12 & 13
SET PSOSD("ZNONVA",DRG)="****^9^Z^Z^"_$SELECT(PSODD:$PIECE(^PSDRUG(PSODD,0),"^",2),1:"")_"^"_DOSE_"^^"_SCHD_"^"_$PIECE(NON,"^",10)_"^"_NVA_"^"_PSODD_"^"_DURA_"^"_CONJ
+13 IF PSODD
SET $PIECE(PSOSD("ZNONVA",DRG),"^",7)=$SELECT($GET(^PSDRUG(PSODD,"ND"))]"":+^("ND")_"A"_$PIECE(^("ND"),"^",3),1:"")
+14 SET PSOSD=+$GET(PSOSD)+1
End DoDot:1
+15 QUIT
+16 ;
NVAOLD ;NVA Backwards compatible for old NON-VA file DD, pre-complex order SIG multiple file setup
+1 ; (after 441. By attrition, all records will eventually have the new complex order mult. file format)
+2 SET PSODD=$PIECE(NON,"^",2)
SET PSOOI=$PIECE(NON,"^")
+3 SET DRG=$SELECT(PSODD:$PIECE($GET(^PSDRUG(PSODD,0)),"^"),+PSOOI&('PSODD):$PIECE(^PS(50.7,+PSOOI,0),"^")_" "_$PIECE(^PS(50.606,$PIECE(^PS(50.7,+PSOOI,0),"^",2),0),"^"),1:"")
+4 ;build unique nva drug name subscript when same drug
IF $DATA(PSOSD("ZNONVA",DRG))
SET DRG=DRG_U_NVA
+5 SET PSOSD("ZNONVA",DRG)="****^9^Z^Z^"_$SELECT($PIECE(NON,"^",2):$PIECE(^PSDRUG($PIECE(NON,"^",2),0),"^",2),1:"")_"^"_$PIECE(NON,"^",3)_"^^"_$PIECE(NON,"^",5)_"^"_$PIECE(NON,"^",10)_"^"_NVA_"^"_$PIECE(NON,"^",2)
+6 IF $PIECE(NON,"^",2)
SET $PIECE(PSOSD("ZNONVA",DRG),"^",7)=$SELECT($GET(^PSDRUG(PSODD,"ND"))]"":+^("ND")_"A"_$PIECE(^("ND"),"^",3),1:"")
+7 SET PSOSD=+$GET(PSOSD)+1
+8 QUIT
+9 ;
INIT ;
+1 KILL PSOSD,PSOMED
SET PSOQFLG=0
SET U="^"
SET PSOBUILD("COUNT")=0
if $DATA(PSODTCUT)
GOTO INITX
+2 IF '$DATA(^PS(53,"B","OUTPATIENT"))
SET PSOQFLG=1
GOTO INITX
+3 SET PSOX=$ORDER(^PS(53,"B","OUTPATIENT",""))
IF 'PSOX
SET PSOQFLG=1
GOTO INITX
+4 ;S DAYS=$S($D(DAYS360):360,1:45),X2=-$S($P($G(^PS(53,PSOX,0)),"^",3)+15>DAYS:$P($G(^(0)),"^",3)+15,1:DAYS),X1=DT D C^%DTC S PSODTCUT=X
+5 SET X2=-120
SET X1=DT
DO C^%DTC
SET PSODTCUT=X
INITX KILL X,X1,X2,PSOX
+1 QUIT
+2 ;
BUILD ;build profiles
+1 FOR PSOEXPDT=(PSODTCUT-1):0
SET PSOEXPDT=$ORDER(^PS(55,PSODFN,"P","A",PSOEXPDT))
if 'PSOEXPDT
QUIT
FOR PSOBUILD("RX")=0:0
SET PSOBUILD("RX")=$ORDER(^PS(55,PSODFN,"P","A",PSOEXPDT,PSOBUILD("RX")))
if 'PSOBUILD("RX")
QUIT
IF $DATA(^PSRX(PSOBUILD("RX"),0))
DO GET
BUILDX IF PSOBUILD("COUNT")>0
SET PSOSD=PSOBUILD("COUNT")
+1 QUIT
GET ;data for profiles
+1 if '$PIECE(^PSRX(PSOBUILD("RX"),0),"^",2)
QUIT
+2 SET (PSOSTF,PSOSTN)=""
SET PSORX0=^PSRX(PSOBUILD("RX"),0)
SET PSOST0=+^PSRX(PSOBUILD("RX"),"STA")
SET $PIECE(PSORX0,"^",15)=PSOST0
+3 if PSOST0=13
GOTO GETX
SET PSORX2=$GET(^PSRX(PSOBUILD("RX"),2))
+4 SET PSORX3=$GET(^PSRX(PSOBUILD("RX"),3))
if PSORX3=""
SET PSORX3=$PIECE(PSORX2,"^",2)
+5 SET PSODRG=+$PIECE(PSORX0,"^",6)
if '$DATA(^PSDRUG(PSODRG,0))
GOTO GETX
SET PSODRUG0=^PSDRUG(PSODRG,0)
SET PSOVACL=$PIECE(PSODRUG0,"^",2)
SET PSODYS=$PIECE(PSORX0,"^",8)
+6 ;
+7 IF PSOST0<12!(PSOST0=16)
IF PSOEXPDT<DT
if $PIECE(PSORX0,"^",15)'=11
Begin DoDot:1
+8 SET PSOST0=11
SET $PIECE(PSORX0,"^",15)=11
NEW DIE,DIC,DR,DA,PSOBEXDA
SET DIE=52
SET (DA,PSOBEXDA)=PSOBUILD("RX")
SET DR="100////11"
DO ^DIE
KILL DIE,DIC,DR
+9 DO ECAN^PSOUTL(DA)
KILL DA
+10 SET STAT="SC"
SET PHARMST="ZE"
SET COMM="Medication Expired on "_$EXTRACT(PSOEXPDT,4,5)_"/"_$EXTRACT(PSOEXPDT,6,7)_"/"_$EXTRACT(PSOEXPDT,2,3)
DO EN^PSOHLSN1(PSOBEXDA,STAT,PHARMST,COMM)
KILL COMM,STAT,PHARMST,PSOBEXDA
End DoDot:1
+11 IF PSOST0=12
IF PSOEXPDT<DT
SET PSOST0=12
+12 IF PSOST0=5
Begin DoDot:1
+13 IF $ORDER(^PS(52.5,"B",PSOBUILD("RX"),0))
IF '$DATA(^PS(52.5,+$ORDER(^(0)),0))
Begin DoDot:2
+14 SET PSOST0=0
DO FSTA
+15 KILL ^PS(52.5,"B",PSOBUILD("RX"),$ORDER(^PS(52.5,"B",PSOBUILD("RX"),0)))
End DoDot:2
QUIT
+16 IF '$ORDER(^PS(52.5,"B",PSOBUILD("RX"),0))
SET PSOST0=0
DO FSTA
End DoDot:1
GOTO GT1
+17 IF 'PSOST0
DO STAT
GT1 if $DATA(NOEXP)&(PSOST0=11)
GOTO GETX
+1 IF $DATA(^PSDRUG(PSODRG,"I"))
IF ^("I")]""
IF DT>^("I")
SET PSOSTN=PSOSTN_"A"
IF $PIECE($GET(PSOPAR),"^",11)']""
SET PSOSTF=PSOSTF_"A"
+2 SET PSONDF=$SELECT($GET(^PSDRUG(PSODRG,"ND"))]"":+^("ND")_"A"_$PIECE(^("ND"),"^",3),1:0)
+3 IF $PIECE($GET(^PSDRUG(PSODRG,2)),"^",3)'["O"
SET PSOSTN=PSOSTN_"M"
+4 SET CLOZPT=$SELECT($PIECE($GET(^PSDRUG(PSODRG,"CLOZ1")),"^")="PSOCLO1":1,1:0)
+5 IF 'CLOZPT
IF ($PIECE(PSODRUG0,"^",3)["A")&($PIECE(PSODRUG0,"^",3)'["B")
SET PSOSTN=PSOSTN_"B"
SET PSOSTF=PSOSTF_"B"
+6 KILL CLOZPT
IF ($PIECE(PSODRUG0,"^",3)["W")!($PIECE(PSODRUG0,"^",3)[1)!($PIECE(PSODRUG0,"^",3)[2)
SET PSOSTN=PSOSTN_"C"
+7 IF $DATA(^PS(53,+$PIECE(PSORX0,"^",3),0))
IF '$PIECE(^(0),"^",5)
SET PSOSTN=PSOSTN_"D"
+8 IF PSOST0=1
SET PSOSTN=PSOSTN_"E"
+9 SET PSOLC=$PIECE(PSORX0,"^")
SET PSOLC=$EXTRACT(PSOLC,$LENGTH(PSOLC))
IF $ASCII(PSOLC)>90
SET PSOSTN=PSOSTN_"F"
+10 IF PSOST0
IF PSOST0'=2
IF PSOST0'=6
SET PSOSTF=PSOSTF_"Z"
+11 IF $GET(PSORX("BAR CODE"))
IF PSOST0
IF PSOST0'=2
IF PSOST0'=5
IF PSOST0'=6
IF PSOST0'=11
IF PSOST0'=12
SET PSOSTN=PSOSTN_"Z"
GOTO BARC
+12 IF PSOST0
IF PSOST0'=2
IF PSOST0'=5
IF PSOST0'=6
IF PSOST0'=11
IF PSOST0'=12
IF PSOST0'=14
SET PSOSTN=PSOSTN_"Z"
BARC SET PSORFRM=$PIECE(PSORX0,"^",9)
FOR PSOJ=0:0
SET PSOJ=$ORDER(^PSRX(PSOBUILD("RX"),1,PSOJ))
if 'PSOJ
QUIT
SET PSORFRM=PSORFRM-1
+1 if PSORFRM<0
SET PSORFRM=0
if PSORFRM=0
SET PSOSTF=PSOSTF_"G"
+2 SET PSODRUGN=$PIECE(PSODRUG0,"^")
IF $DATA(PSOSD(PSODRUGN))
IF PSOST0>10
if $PIECE(PSOSD(PSODRUGN),"^",2)<11
QUIT
if $PIECE(PSOSD(PSODRUGN),"^",2)>10&($PIECE(PSORX0,"^",13)<$PIECE(^PSRX(+$PIECE(PSOSD(PSODRUGN),"^"),0),"^",13))
QUIT
+3 if '$DATA(PSOSD(PSODRUGN))
SET PSOBUILD("COUNT")=PSOBUILD("COUNT")+1
+4 IF $DATA(PSOSD(PSODRUGN))
IF $PIECE(PSOSD(PSODRUGN),"^",2)<10
IF PSOST0<10
SET PSOSD(PSODRUGN_"^"_PSOBUILD("RX"))=PSOBUILD("RX")_"^"_PSOST0_"^"_PSOSTN_"^"_PSOSTF_"^"_PSOVACL_"^"_PSORFRM_"^"_PSONDF_"^"_PSODYS
SET PSOBUILD("COUNT")=PSOBUILD("COUNT")+1
+5 IF '$TEST
SET PSOSD(PSODRUGN)=PSOBUILD("RX")_"^"_PSOST0_"^"_PSOSTN_"^"_PSOSTF_"^"_PSOVACL_"^"_PSORFRM_"^"_PSONDF_"^"_PSODYS
GETX QUIT
STAT NEW X
SET X=+$ORDER(^PS(52.5,"B",PSOBUILD("RX"),0))
+1 IF X
IF $DATA(^PS(52.5,X,0))
IF $PIECE($GET(^PS(52.5,X,0)),"^",7)'="X"
IF '$GET(^PS(52.5,X,"P"))
SET PSOST0=5
+2 IF PSOST0
DO FSTA
+3 QUIT
FSTA SET $PIECE(PSORX0,"^",15)=PSOST0
+1 NEW DIE,DR,DA
SET DIE=52
SET DA=PSOBUILD("RX")
SET DR="100////"_PSOST0
DO ^DIE
KILL DIE,DR,DA
+2 QUIT
+3 ;
EOJ KILL ORD,PSOX,PSOEXPDT,PSODRG,PSODRUG0,PSOLC,PSONDF,PSOQFLG,PSORFRM,PSORX0,PSORX2,PSORX3,PSOST0,PSOSTF,PSOSTN,PSOJ,PSODRUGN,PSOVACL,PSOBUILD,PSODYS,PEN,DRG,NON,NVA
+1 QUIT
INPAT(PSODFN) ;entry point for inpat meds to view patient's outpat. meds
+1 DO FULL^VALM1
+2 SET INPAT=1
SET X2=-120
SET X1=DT
DO C^%DTC
SET PSODTCUT=X
DO START
DO ^PSODSPL
+3 KILL PSOSD,DDH,PSCNT,PSOCT,PSODD,PSOOI,PSOPAR,PSOSTA,STP,STR,PSODTCUT,PSODFN,INPAT,DRG
+4 QUIT