PSOB ;BHAM ISC/CCG - black line resolver ; 07/18/96 8:49 am
;;7.0;OUTPATIENT PHARMACY;**10,60,193**;DEC 1997
I '$D(PSOPAR) D ^PSOLSET Q:'$G(PSOPAR)
S (CC,PSOCLC,PDUZ)=DUZ,PSOBOUT=0
N PSODISP
I '$O(^PS(52.9,0)) W !!,"THE LABEL/PROFILE MONITOR LIST IS EMPTY.",!! Q
I $P(PSOPAR,"^",30),$$GET1^DIQ(59,PSOSITE_",",105,"I")=2.4 D
.K DIR,DIRUT S DIR("A")="Do you want to resend to Dispensing System Device",DIR(0)="Y",DIR("B")="No"
.D ^DIR K DIR I $D(DIRUT) K DIRUT Q
.S PSODISP=Y
PT S DIC="^PS(52.9,",DIC("A")="ENTER FAILED OUTPUT DEVICE NUMBER OR NAME: ",DIC(0)="QEAZM" D ^DIC K DIC G END:Y=-1 S PSOBIO=+Y,PSOBPT=Y(0)
RX1 S DIC("A")="ENTER LAST USABLE LABEL/PROFILE : ",DIC="^PS(52.9,PSOBIO,1,",DIC(0)="EQAMZ" D ^DIC G:"^"[X END G:Y=-1 RX1 S PSOBY=Y,PSODPT=Y(0,0),PSODPT(0)=Y(0) K DIC
I 'X S DA(1)=+Y,DIC("A")="ENTER LAST USABLE Rx: ",DIC="^PS(52.9,PSOBIO,1,DA(1),2,",DIC(0)="EQAMZ" D ^DIC G:"^"[X END G:Y=-1 RX1 D G:$G(PSOBOUT) END
.S PSOBR=+PSOBPT,Y(0)=PSODPT(0),Y(0,0)=PSODPT,Y=+PSOBY_"^"_$P(Y,"^",2) D RX08 S PSOBR1=PSOBR K DIC
S PSOBR=+Y D RX08 G:$G(PSOBOUT) END S PSOBR1=PSOBR
RX2 S DIC="^PS(52.9,PSOBIO,1,",DIC(0)="EQAMZ",DIC("A")="ENTER NEXT USABLE LABEL/PROFILE ('RETURN' FOR REMAINDER OF THE QUEUE):",DIC("S")="I +PSOBR1'>Y" D ^DIC K DIC("S") G:X="^" END
I X="" S PSOBR2=$P(^PS(52.9,PSOBIO,1,0),"^",3) S:$D(^PS(52.9,PSOBIO,1,PSOBR2,2)) PSOBR2=PSOBR2_"^"_($P(^PS(52.9,PSOBIO,1,PSOBR2,2,0),"^",3)+1) G SET
G:Y=-1 RX2 S PSOBR=$P(Y,"^") D RX08 S PSOBR2=PSOBR I +PSOBR1=+PSOBR2,$P(PSOBR1,"^",2)>$P(PSOBR2,"^",2) W !!,"THE ENDING RX# DOES NOT FOLLOW THE BEGINNING RX#. PLEASE TRY AGAIN.",!!! G RX1
SET N PSOBAR1,PSOBAR0,PSOBARS,IOS
K ZTSK,%ZIS S DIC="^%ZIS(1,",(PSOIOS,DA)=PSOBPT,DR=".01;3",DIQ="DPTR",DIQ(0)="I" D EN^DIQ1
S DPTRS=$G(DPTR(3.5,DA,3,DIQ(0))),PSOIS=PSOIOS,%ZIS("A")="PRINT ON DEVICE: ",%ZIS("B")=$S($G(DPTR(3.5,DA,.01,DIQ(0)))'="":$G(DPTR(3.5,DA,.01,DIQ(0))),1:""),%ZIS="QMN" D ^%ZIS
K %ZIS G:POP END
I $E(IOST,1,2)="C-" W $C(7),!,"Output MUST be sent to a printer !!",! G SET
S ZTIO=ION,PSOIOS=IOS,DA=IOST(0)
S DIC="^%ZIS(2,",DR="61;60",DIQ="DPTRS1",DIQ(0)="I" D EN^DIQ1
S PSOBAR0="" I $G(DPTRS1(3.2,DA,61,DIQ(0)))'="" S PSOBAR0=$G(DPTRS1(3.2,DA,61,DIQ(0)))
S PSOBAR1="" I $G(DPTRS1(3.2,DA,60,DIQ(0)))'="" S PSOBAR1=$G(DPTRS1(3.2,DA,60,DIQ(0)))
S PSOBARS=PSOBAR1]""&(PSOBAR0]"")&$P(PSOPAR,"^",19) S PSOBFLAG=1 D LASK^PSOLSET K PSOBFLAG
S ZTRTN="PSOBMST",ZTDTH=$H,ZTDESC="BLACK LINE RESOLVER",(ZTSAVE("PSOBR1"),ZTSAVE("PSOBR2"),ZTSAVE("PSOBIO"),ZTSAVE("CC"),ZTSAVE("PDUZ"),ZTSAVE("PSOPAR"),ZTSAVE("PSOSITE"),ZTSAVE("PSODIV"))=""
S (ZTSAVE("PSOIOS"),ZTSAVE("PSOBAR0"),ZTSAVE("PSOBAR1"),ZTSAVE("PSOBARS"),ZTSAVE("PSOSYS"))="",ZTSAVE("PSODISP")=""
D ^%ZTLOAD I $G(ZTSK) W !,"Task Queued #"_ZTSK_" !!",!
END D ^%ZISC K PSOIS,ZTSK,%ZIS,CC,DIC,IOP,I,POP,PSOB,PSOBIO,PSOBPT,PSOBR,PSOBR1,PSOBR2,PSOBRX,PSODPT,X,Y,PSOBOUT,DPTR,DPTRS,DPTRS1,DIQ,DIQ(0),DA,DR Q
RX08 I $P(Y(0),"^",2)="L" S:(X'=$P(Y,"^",2))&($O(^PSRX("B",X,0))) Y=+Y_"^"_$O(^PSRX("B",X,0)) S PSOBR=PSOBR_"^"_$O(^PS(52.9,PSOBIO,1,"C",$P(Y,"^",2),PSOBR,0)),PSOBRX=$P(Y,"^",2)
E S PSOBR=PSOBR_"^",PSOBRX="" S:$D(^PS(52.9,PSOBIO,1,PSOBR,2,0)) PSOBR=PSOBR_$P(^(0),"^",3),PSOBRX=^($P(PSOBR2,"^",2),0)
Q:($P(PSOBR,"^",2))!('$D(^PS(52.9,PSOBIO,1,+PSOBR,2,0)))
S PSOB="^" F I=0:0 S I=$O(^PS(52.9,PSOBIO,1,+PSOBR,2,I)) Q:'I S PSOB=PSOB_$P(^PSRX($P(^(I,0),"^"),0),"^")_"^"
I $P(PSOB,"^",3)="" S PSOBR=+PSOBR_"^"_$P(^PS(52.9,PSOBIO,1,+PSOBR,2,0),"^",3) Q
I $P(Y(0),"^",2)="P" S PSOBR=+PSOBR_"^" Q
RX05 W !,"ENTER RX# OF LAST USABLE SCRIPT FOR "_$P(^DPT(+Y(0),0),"^")_": " R X:DTIME I '$T!(X["^") S PSOBOUT=1 Q
D:X="?" LIST G:"^"[X RX05 I PSOB'[(U_X_"^") W !!,"???" G RX05
S PSOBR=+PSOBR_"^"_($O(^PS(52.9,PSOBIO,1,"C",$O(^PSRX("B",X,0)),+PSOBR,0))) Q
LIST W !! F I=2:1 Q:$P(PSOB,"^",I)="" W !,?5,I-1," ",$P(PSOB,"^",I)
RL W !,"CHOOSE 1-",I-2," : " R X:DTIME G:(X<1)!(X>(I-2)) RL S X=$P(PSOB,"^",X+1) Q
PSOB ;BHAM ISC/CCG - black line resolver ; 07/18/96 8:49 am
+1 ;;7.0;OUTPATIENT PHARMACY;**10,60,193**;DEC 1997
+2 IF '$DATA(PSOPAR)
DO ^PSOLSET
IF '$GET(PSOPAR)
QUIT
+3 SET (CC,PSOCLC,PDUZ)=DUZ
SET PSOBOUT=0
+4 NEW PSODISP
+5 IF '$ORDER(^PS(52.9,0))
WRITE !!,"THE LABEL/PROFILE MONITOR LIST IS EMPTY.",!!
QUIT
+6 IF $PIECE(PSOPAR,"^",30)
IF $$GET1^DIQ(59,PSOSITE_",",105,"I")=2.4
Begin DoDot:1
+7 KILL DIR,DIRUT
SET DIR("A")="Do you want to resend to Dispensing System Device"
SET DIR(0)="Y"
SET DIR("B")="No"
+8 DO ^DIR
KILL DIR
IF $DATA(DIRUT)
KILL DIRUT
QUIT
+9 SET PSODISP=Y
End DoDot:1
PT SET DIC="^PS(52.9,"
SET DIC("A")="ENTER FAILED OUTPUT DEVICE NUMBER OR NAME: "
SET DIC(0)="QEAZM"
DO ^DIC
KILL DIC
IF Y=-1
GOTO END
SET PSOBIO=+Y
SET PSOBPT=Y(0)
RX1 SET DIC("A")="ENTER LAST USABLE LABEL/PROFILE : "
SET DIC="^PS(52.9,PSOBIO,1,"
SET DIC(0)="EQAMZ"
DO ^DIC
IF "^"[X
GOTO END
IF Y=-1
GOTO RX1
SET PSOBY=Y
SET PSODPT=Y(0,0)
SET PSODPT(0)=Y(0)
KILL DIC
+1 IF 'X
SET DA(1)=+Y
SET DIC("A")="ENTER LAST USABLE Rx: "
SET DIC="^PS(52.9,PSOBIO,1,DA(1),2,"
SET DIC(0)="EQAMZ"
DO ^DIC
IF "^"[X
GOTO END
IF Y=-1
GOTO RX1
Begin DoDot:1
+2 SET PSOBR=+PSOBPT
SET Y(0)=PSODPT(0)
SET Y(0,0)=PSODPT
SET Y=+PSOBY_"^"_$PIECE(Y,"^",2)
DO RX08
SET PSOBR1=PSOBR
KILL DIC
End DoDot:1
IF $GET(PSOBOUT)
GOTO END
+3 SET PSOBR=+Y
DO RX08
IF $GET(PSOBOUT)
GOTO END
SET PSOBR1=PSOBR
RX2 SET DIC="^PS(52.9,PSOBIO,1,"
SET DIC(0)="EQAMZ"
SET DIC("A")="ENTER NEXT USABLE LABEL/PROFILE ('RETURN' FOR REMAINDER OF THE QUEUE):"
SET DIC("S")="I +PSOBR1'>Y"
DO ^DIC
KILL DIC("S")
IF X="^"
GOTO END
+1 IF X=""
SET PSOBR2=$PIECE(^PS(52.9,PSOBIO,1,0),"^",3)
IF $DATA(^PS(52.9,PSOBIO,1,PSOBR2,2))
SET PSOBR2=PSOBR2_"^"_($PIECE(^PS(52.9,PSOBIO,1,PSOBR2,2,0),"^",3)+1)
GOTO SET
+2 IF Y=-1
GOTO RX2
SET PSOBR=$PIECE(Y,"^")
DO RX08
SET PSOBR2=PSOBR
IF +PSOBR1=+PSOBR2
IF $PIECE(PSOBR1,"^",2)>$PIECE(PSOBR2,"^",2)
WRITE !!,"THE ENDING RX# DOES NOT FOLLOW THE BEGINNING RX#. PLEASE TRY AGAIN.",!!!
GOTO RX1
SET NEW PSOBAR1,PSOBAR0,PSOBARS,IOS
+1 KILL ZTSK,%ZIS
SET DIC="^%ZIS(1,"
SET (PSOIOS,DA)=PSOBPT
SET DR=".01;3"
SET DIQ="DPTR"
SET DIQ(0)="I"
DO EN^DIQ1
+2 SET DPTRS=$GET(DPTR(3.5,DA,3,DIQ(0)))
SET PSOIS=PSOIOS
SET %ZIS("A")="PRINT ON DEVICE: "
SET %ZIS("B")=$SELECT($GET(DPTR(3.5,DA,.01,DIQ(0)))'="":$GET(DPTR(3.5,DA,.01,DIQ(0))),1:"")
SET %ZIS="QMN"
DO ^%ZIS
+3 KILL %ZIS
IF POP
GOTO END
+4 IF $EXTRACT(IOST,1,2)="C-"
WRITE $CHAR(7),!,"Output MUST be sent to a printer !!",!
GOTO SET
+5 SET ZTIO=ION
SET PSOIOS=IOS
SET DA=IOST(0)
+6 SET DIC="^%ZIS(2,"
SET DR="61;60"
SET DIQ="DPTRS1"
SET DIQ(0)="I"
DO EN^DIQ1
+7 SET PSOBAR0=""
IF $GET(DPTRS1(3.2,DA,61,DIQ(0)))'=""
SET PSOBAR0=$GET(DPTRS1(3.2,DA,61,DIQ(0)))
+8 SET PSOBAR1=""
IF $GET(DPTRS1(3.2,DA,60,DIQ(0)))'=""
SET PSOBAR1=$GET(DPTRS1(3.2,DA,60,DIQ(0)))
+9 SET PSOBARS=PSOBAR1]""&(PSOBAR0]"")&$PIECE(PSOPAR,"^",19)
SET PSOBFLAG=1
DO LASK^PSOLSET
KILL PSOBFLAG
+10 SET ZTRTN="PSOBMST"
SET ZTDTH=$HOROLOG
SET ZTDESC="BLACK LINE RESOLVER"
SET (ZTSAVE("PSOBR1"),ZTSAVE("PSOBR2"),ZTSAVE("PSOBIO"),ZTSAVE("CC"),ZTSAVE("PDUZ"),ZTSAVE("PSOPAR"),ZTSAVE("PSOSITE"),ZTSAVE("PSODIV"))=""
+11 SET (ZTSAVE("PSOIOS"),ZTSAVE("PSOBAR0"),ZTSAVE("PSOBAR1"),ZTSAVE("PSOBARS"),ZTSAVE("PSOSYS"))=""
SET ZTSAVE("PSODISP")=""
+12 DO ^%ZTLOAD
IF $GET(ZTSK)
WRITE !,"Task Queued #"_ZTSK_" !!",!
END DO ^%ZISC
KILL PSOIS,ZTSK,%ZIS,CC,DIC,IOP,I,POP,PSOB,PSOBIO,PSOBPT,PSOBR,PSOBR1,PSOBR2,PSOBRX,PSODPT,X,Y,PSOBOUT,DPTR,DPTRS,DPTRS1,DIQ,DIQ(0),DA,DR
QUIT
RX08 IF $PIECE(Y(0),"^",2)="L"
IF (X'=$PIECE(Y,"^",2))&($ORDER(^PSRX("B",X,0)))
SET Y=+Y_"^"_$ORDER(^PSRX("B",X,0))
SET PSOBR=PSOBR_"^"_$ORDER(^PS(52.9,PSOBIO,1,"C",$PIECE(Y,"^",2),PSOBR,0))
SET PSOBRX=$PIECE(Y,"^",2)
+1 IF '$TEST
SET PSOBR=PSOBR_"^"
SET PSOBRX=""
IF $DATA(^PS(52.9,PSOBIO,1,PSOBR,2,0))
SET PSOBR=PSOBR_$PIECE(^(0),"^",3)
SET PSOBRX=^($PIECE(PSOBR2,"^",2),0)
+2 IF ($PIECE(PSOBR,"^",2))!('$DATA(^PS(52.9,PSOBIO,1,+PSOBR,2,0)))
QUIT
+3 SET PSOB="^"
FOR I=0:0
SET I=$ORDER(^PS(52.9,PSOBIO,1,+PSOBR,2,I))
IF 'I
QUIT
SET PSOB=PSOB_$PIECE(^PSRX($PIECE(^(I,0),"^"),0),"^")_"^"
+4 IF $PIECE(PSOB,"^",3)=""
SET PSOBR=+PSOBR_"^"_$PIECE(^PS(52.9,PSOBIO,1,+PSOBR,2,0),"^",3)
QUIT
+5 IF $PIECE(Y(0),"^",2)="P"
SET PSOBR=+PSOBR_"^"
QUIT
RX05 WRITE !,"ENTER RX# OF LAST USABLE SCRIPT FOR "_$PIECE(^DPT(+Y(0),0),"^")_": "
READ X:DTIME
IF '$TEST!(X["^")
SET PSOBOUT=1
QUIT
+1 IF X="?"
DO LIST
IF "^"[X
GOTO RX05
IF PSOB'[(U_X_"^")
WRITE !!,"???"
GOTO RX05
+2 SET PSOBR=+PSOBR_"^"_($ORDER(^PS(52.9,PSOBIO,1,"C",$ORDER(^PSRX("B",X,0)),+PSOBR,0)))
QUIT
LIST WRITE !!
FOR I=2:1
IF $PIECE(PSOB,"^",I)=""
QUIT
WRITE !,?5,I-1," ",$PIECE(PSOB,"^",I)
RL WRITE !,"CHOOSE 1-",I-2," : "
READ X:DTIME
IF (X<1)!(X>(I-2))
GOTO RL
SET X=$PIECE(PSOB,"^",X+1)
QUIT