PSADRUGP ;BIR/LTL,JMB-Enter/Edit a Drug ;7/23/97
;;3.0; DRUG ACCOUNTABILITY/INVENTORY INTERFACE;**3,21,60,64**; 10/24/97;Build 4
;
;References to ^PSDRUG( are covered by IA #2095
;References to ^PS(52.6, are covered by IA #270
;References to ^DIC(51.5 are covered by IA #1931
;References to ^PS(52.7 are covered by IA #770
LOC G:+$G(PSAOUT)&($G(PSACNT)=1) EXIT
S (PSADD,PSACNT,PSAOUT)=0,PSASLN="",$P(PSASLN,"-",80)=""
D ^PSAUTL3 G:PSAOUT EXIT S PSACHK=$O(PSALOC(""))
I PSACHK="",'PSALOC W !,"There are no active pharmacy locations." G EXIT
I $O(PSALOC(PSACHK))="" W !,PSALOCN
;
GETDRUG S PSAQTY=0
S:'$D(^PSD(58.8,PSALOC,1,0)) ^(0)="^58.8001IP^^"
S DA(1)=PSALOC,DIC="^PSD(58.8,"_PSALOC_",1,",DIC(0)="AEMQL",DIC("W")="I $S($P($G(^(0)),U,14):$P($G(^(0)),U,14)'>DT,1:0) W $C(7),"" *** INACTIVE ***""",DLAYGO=58.8 W ! D ^DIC K DIC,DLAYGO
I Y<0!($G(DTOUT))!($G(DUOUT)) S PSAOUT=1 Q:$G(PSAOPT)="PSALOC" G LOC
S PSADRG=+Y,PSADRGN=$P($G(^PSDRUG(PSADRG,0)),"^")
I $D(^PSD(58.8,PSALOC,1,PSADRG,0)),+$P(^(0),"^",14),$P(^(0),"^",14)'>DT W !,$C(7)," *** INACTIVE ***" G DISP ;PSA*3*21 (Allow re-activation)
S PSA660=$G(^PSDRUG(PSADRG,660))
I '$D(^PSD(58.8,PSALOC,1,PSADRG,0)) G NOINV
I $D(^PSD(58.8,PSALOC,1,PSADRG,0)),$P(^(0),"^",4)="" G DRUG
G DISP
;
NOINV I '$D(^PSD(58.8,PSALOC,1,PSADRG,0)) D
.S:'$D(^PSD(58.8,PSALOC,1,0)) ^(0)="^58.8001IP^^"
.K DA,DD,DO S DIC="^PSD(58.8,"_PSALOC_",1,",DIC(0)="LM",DA(1)=PSALOC,(X,DINUM)=PSADRG,DLAYGO=58.8 D ^DIC K DIC,DINUM,DLAYGO
DRUG S DIE="^PSD(58.8,"_PSALOC_",1,",DA(1)=PSALOC,DA=PSADRG,DR="3Enter total "_$P(PSA660,"^",8)_" currently on hand: "
W @IOF,!,$G(PSALOCN),!,"DRUG: "_PSADRGN
D:+$P(PSA660,"^",2)
.W !!?30,"DRUG FILE info:",!
.W ?20,"Order unit: "_$P(^DIC(51.5,$P(PSA660,"^",2),0),"^",1),!?20,"Dispense units per order unit: "_$P(PSA660,"^",5),!?20,"Dispense unit: "_$P(PSA660,"^",8)
.W !!,"Current Inventory from the DRUG file = "_$P($G(^PSDRUG(PSADRG,660.1)),"^")
I '$P(^PSD(58.8,PSALOC,1,PSADRG,0),"^",4) D
.W !!,"Once an initial quantity is entered, it can only be updated by receiving,",!,"dispensing, adjusting, or transferring."
.W:+$P(PSA660,"^",2) " The Current Inventory from the",!,"DRUG file is only offered as an initial balance and and is NOT updated."
F L +^PSD(58.8,PSALOC,1,PSADRG,0):$S($G(DILOCKTM)>0:DILOCKTM,1:3) I Q
W ! D ^DIE L -^PSD(58.8,PSALOC,1,PSADRG,0) K DA,DIE G:$D(Y) LOC
S PSAQTY=X
I +$P($G(^PSD(58.8,PSALOC,0)),"^",14) D
.S DIE="^PSD(58.8,"_PSALOC_",1,",DA(1)=PSALOC,DA=PSADRG,DR="2Stock Level: ;4Reorder Level: "
.F L +^PSD(58.8,PSALOC,1,PSADRG,0):$S($G(DILOCKTM)>0:DILOCKTM,1:3) I Q
.D ^DIE L -^PSD(58.8,PSALOC,1,PSADRG,0) K DA,DIE
DISP ;
S:'$D(PSA660) PSA660=$G(^PSDRUG(PSADRG,660)) ;*60
W !!,"Current balance: "_+$P($G(^PSD(58.8,PSALOC,1,PSADRG,0)),"^",4)," ",$P(PSA660,"^",8)
;PSA*3*21 (Give option of inactivation - Dave B)
S DIE="^PSD(58.8,"_PSALOC_",1,",DA(1)=PSALOC,DA=PSADRG,DR="13;14" D ^DIE K DIE,DR
S PSAIT=PSADRG,PSAIT(2)=PSADRGN,PSAIT(4)=$G(^PSDRUG(PSAIT,660)) D:$O(^PS(52.6,"AC",PSADRG,0))!($O(^PS(52.7,"AC",PSADRG,0))) ^PSAPSI4
G:'$G(PSAQTY) GETDRUG
D NOW^%DTC S PSADT=+$E(%,1,12)
MON S:'$D(^PSD(58.8,PSALOC,1,PSADRG,5,0)) ^PSD(58.8,PSALOC,1,PSADRG,5,0)="^58.801A^^"
I '$D(^PSD(58.8,PSALOC,1,PSADRG,5,+($E(DT,1,5)*100),0)) S DIC="^PSD(58.8,"_PSALOC_",1,"_PSADRG_",5,",DIC(0)="LM",(X,DINUM)=($E(DT,1,5)*100),DA(2)=PSALOC,DA(1)=PSADRG,DLAYGO=58.8 D ^DIC K DA,DIC,DLAYGO
S DIE="^PSD(58.8,"_PSALOC_",1,"_PSADRG_",5,",DA(2)=PSALOC,DA(1)=PSADRG,DA=($E(DT,1,5)*100),DR="1////^S X=PSAQTY;7////^S X=PSAQTY" D ^DIE K DA,DIE
W !!,"Updating beginning balance and transaction history."
F L +^PSD(58.81,0):$S($G(DILOCKTM)>0:DILOCKTM,1:3) I Q
FIND S PSAT=$P(^PSD(58.81,0),"^",3)+1 I $D(^PSD(58.81,PSAT)) S $P(^PSD(58.81,0),"^",3)=$P(^PSD(58.81,0),"^",3)+1 G FIND
S DIC="^PSD(58.81,",DIC(0)="L",DLAYGO=58.81,(DINUM,X)=PSAT D ^DIC
L -^PSD(58.81,0) K DIC,DLAYGO
S DIE="^PSD(58.81,",DA=PSAT,DR="1////11;2////^S X=PSALOC;3////^S X=PSADT;4////^S X=PSADRG;5////^S X=PSAQTY;6////^S X=DUZ;9////0" D ^DIE K DIE,DA
S:'$D(^PSD(58.8,PSALOC,1,PSADRG,4,0)) ^PSD(58.8,PSALOC,1,PSADRG,4,0)="^58.800119PA^^"
S DIC="^PSD(58.8,"_PSALOC_",1,"_PSADRG_",4,",DIC(0)="LM",(X,DINUM)=PSAT
S DA(2)=PSALOC,DA(1)=PSADRG,DLAYGO=58.8 D ^DIC K DA,DIC,DLAYGO
G GETDRUG
EXIT K %,DA,DIC,DIE,DINUM,DR,DTOUT,DUOUT,PSA660,PSACHK,PSACNT,PSADD,PSADRG,PSADRGN,PSADT,PSALOC,PSALOCA,PSALOCN,PSAOUT,PSAQTY,PSASLN,PSAT,X,Y
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSADRUGP 4486 printed Nov 22, 2024@16:59:25 Page 2
PSADRUGP ;BIR/LTL,JMB-Enter/Edit a Drug ;7/23/97
+1 ;;3.0; DRUG ACCOUNTABILITY/INVENTORY INTERFACE;**3,21,60,64**; 10/24/97;Build 4
+2 ;
+3 ;References to ^PSDRUG( are covered by IA #2095
+4 ;References to ^PS(52.6, are covered by IA #270
+5 ;References to ^DIC(51.5 are covered by IA #1931
+6 ;References to ^PS(52.7 are covered by IA #770
LOC if +$GET(PSAOUT)&($GET(PSACNT)=1)
GOTO EXIT
+1 SET (PSADD,PSACNT,PSAOUT)=0
SET PSASLN=""
SET $PIECE(PSASLN,"-",80)=""
+2 DO ^PSAUTL3
if PSAOUT
GOTO EXIT
SET PSACHK=$ORDER(PSALOC(""))
+3 IF PSACHK=""
IF 'PSALOC
WRITE !,"There are no active pharmacy locations."
GOTO EXIT
+4 IF $ORDER(PSALOC(PSACHK))=""
WRITE !,PSALOCN
+5 ;
GETDRUG SET PSAQTY=0
+1 if '$DATA(^PSD(58.8,PSALOC,1,0))
SET ^(0)="^58.8001IP^^"
+2 SET DA(1)=PSALOC
SET DIC="^PSD(58.8,"_PSALOC_",1,"
SET DIC(0)="AEMQL"
SET DIC("W")="I $S($P($G(^(0)),U,14):$P($G(^(0)),U,14)'>DT,1:0) W $C(7),"" *** INACTIVE ***"""
SET DLAYGO=58.8
WRITE !
DO ^DIC
KILL DIC,DLAYGO
+3 IF Y<0!($GET(DTOUT))!($GET(DUOUT))
SET PSAOUT=1
if $GET(PSAOPT)="PSALOC"
QUIT
GOTO LOC
+4 SET PSADRG=+Y
SET PSADRGN=$PIECE($GET(^PSDRUG(PSADRG,0)),"^")
+5 ;PSA*3*21 (Allow re-activation)
IF $DATA(^PSD(58.8,PSALOC,1,PSADRG,0))
IF +$PIECE(^(0),"^",14)
IF $PIECE(^(0),"^",14)'>DT
WRITE !,$CHAR(7)," *** INACTIVE ***"
GOTO DISP
+6 SET PSA660=$GET(^PSDRUG(PSADRG,660))
+7 IF '$DATA(^PSD(58.8,PSALOC,1,PSADRG,0))
GOTO NOINV
+8 IF $DATA(^PSD(58.8,PSALOC,1,PSADRG,0))
IF $PIECE(^(0),"^",4)=""
GOTO DRUG
+9 GOTO DISP
+10 ;
NOINV IF '$DATA(^PSD(58.8,PSALOC,1,PSADRG,0))
Begin DoDot:1
+1 if '$DATA(^PSD(58.8,PSALOC,1,0))
SET ^(0)="^58.8001IP^^"
+2 KILL DA,DD,DO
SET DIC="^PSD(58.8,"_PSALOC_",1,"
SET DIC(0)="LM"
SET DA(1)=PSALOC
SET (X,DINUM)=PSADRG
SET DLAYGO=58.8
DO ^DIC
KILL DIC,DINUM,DLAYGO
End DoDot:1
DRUG SET DIE="^PSD(58.8,"_PSALOC_",1,"
SET DA(1)=PSALOC
SET DA=PSADRG
SET DR="3Enter total "_$PIECE(PSA660,"^",8)_" currently on hand: "
+1 WRITE @IOF,!,$GET(PSALOCN),!,"DRUG: "_PSADRGN
+2 if +$PIECE(PSA660,"^",2)
Begin DoDot:1
+3 WRITE !!?30,"DRUG FILE info:",!
+4 WRITE ?20,"Order unit: "_$PIECE(^DIC(51.5,$PIECE(PSA660,"^",2),0),"^",1),!?20,"Dispense units per order unit: "_$PIECE(PSA660,"^",5),!?20,"Dispense unit: "_$PIECE(PSA660,"^",8)
+5 WRITE !!,"Current Inventory from the DRUG file = "_$PIECE($GET(^PSDRUG(PSADRG,660.1)),"^")
End DoDot:1
+6 IF '$PIECE(^PSD(58.8,PSALOC,1,PSADRG,0),"^",4)
Begin DoDot:1
+7 WRITE !!,"Once an initial quantity is entered, it can only be updated by receiving,",!,"dispensing, adjusting, or transferring."
+8 if +$PIECE(PSA660,"^",2)
WRITE " The Current Inventory from the",!,"DRUG file is only offered as an initial balance and and is NOT updated."
End DoDot:1
+9 FOR
LOCK +^PSD(58.8,PSALOC,1,PSADRG,0):$SELECT($GET(DILOCKTM)>0:DILOCKTM,1:3)
IF $TEST
QUIT
+10 WRITE !
DO ^DIE
LOCK -^PSD(58.8,PSALOC,1,PSADRG,0)
KILL DA,DIE
if $DATA(Y)
GOTO LOC
+11 SET PSAQTY=X
+12 IF +$PIECE($GET(^PSD(58.8,PSALOC,0)),"^",14)
Begin DoDot:1
+13 SET DIE="^PSD(58.8,"_PSALOC_",1,"
SET DA(1)=PSALOC
SET DA=PSADRG
SET DR="2Stock Level: ;4Reorder Level: "
+14 FOR
LOCK +^PSD(58.8,PSALOC,1,PSADRG,0):$SELECT($GET(DILOCKTM)>0:DILOCKTM,1:3)
IF $TEST
QUIT
+15 DO ^DIE
LOCK -^PSD(58.8,PSALOC,1,PSADRG,0)
KILL DA,DIE
End DoDot:1
DISP ;
+1 ;*60
if '$DATA(PSA660)
SET PSA660=$GET(^PSDRUG(PSADRG,660))
+2 WRITE !!,"Current balance: "_+$PIECE($GET(^PSD(58.8,PSALOC,1,PSADRG,0)),"^",4)," ",$PIECE(PSA660,"^",8)
+3 ;PSA*3*21 (Give option of inactivation - Dave B)
+4 SET DIE="^PSD(58.8,"_PSALOC_",1,"
SET DA(1)=PSALOC
SET DA=PSADRG
SET DR="13;14"
DO ^DIE
KILL DIE,DR
+5 SET PSAIT=PSADRG
SET PSAIT(2)=PSADRGN
SET PSAIT(4)=$GET(^PSDRUG(PSAIT,660))
if $ORDER(^PS(52.6,"AC",PSADRG,0))!($ORDER(^PS(52.7,"AC",PSADRG,0)))
DO ^PSAPSI4
+6 if '$GET(PSAQTY)
GOTO GETDRUG
+7 DO NOW^%DTC
SET PSADT=+$EXTRACT(%,1,12)
MON if '$DATA(^PSD(58.8,PSALOC,1,PSADRG,5,0))
SET ^PSD(58.8,PSALOC,1,PSADRG,5,0)="^58.801A^^"
+1 IF '$DATA(^PSD(58.8,PSALOC,1,PSADRG,5,+($EXTRACT(DT,1,5)*100),0))
SET DIC="^PSD(58.8,"_PSALOC_",1,"_PSADRG_",5,"
SET DIC(0)="LM"
SET (X,DINUM)=($EXTRACT(DT,1,5)*100)
SET DA(2)=PSALOC
SET DA(1)=PSADRG
SET DLAYGO=58.8
DO ^DIC
KILL DA,DIC,DLAYGO
+2 SET DIE="^PSD(58.8,"_PSALOC_",1,"_PSADRG_",5,"
SET DA(2)=PSALOC
SET DA(1)=PSADRG
SET DA=($EXTRACT(DT,1,5)*100)
SET DR="1////^S X=PSAQTY;7////^S X=PSAQTY"
DO ^DIE
KILL DA,DIE
+3 WRITE !!,"Updating beginning balance and transaction history."
+4 FOR
LOCK +^PSD(58.81,0):$SELECT($GET(DILOCKTM)>0:DILOCKTM,1:3)
IF $TEST
QUIT
FIND SET PSAT=$PIECE(^PSD(58.81,0),"^",3)+1
IF $DATA(^PSD(58.81,PSAT))
SET $PIECE(^PSD(58.81,0),"^",3)=$PIECE(^PSD(58.81,0),"^",3)+1
GOTO FIND
+1 SET DIC="^PSD(58.81,"
SET DIC(0)="L"
SET DLAYGO=58.81
SET (DINUM,X)=PSAT
DO ^DIC
+2 LOCK -^PSD(58.81,0)
KILL DIC,DLAYGO
+3 SET DIE="^PSD(58.81,"
SET DA=PSAT
SET DR="1////11;2////^S X=PSALOC;3////^S X=PSADT;4////^S X=PSADRG;5////^S X=PSAQTY;6////^S X=DUZ;9////0"
DO ^DIE
KILL DIE,DA
+4 if '$DATA(^PSD(58.8,PSALOC,1,PSADRG,4,0))
SET ^PSD(58.8,PSALOC,1,PSADRG,4,0)="^58.800119PA^^"
+5 SET DIC="^PSD(58.8,"_PSALOC_",1,"_PSADRG_",4,"
SET DIC(0)="LM"
SET (X,DINUM)=PSAT
+6 SET DA(2)=PSALOC
SET DA(1)=PSADRG
SET DLAYGO=58.8
DO ^DIC
KILL DA,DIC,DLAYGO
+7 GOTO GETDRUG
EXIT KILL %,DA,DIC,DIE,DINUM,DR,DTOUT,DUOUT,PSA660,PSACHK,PSACNT,PSADD,PSADRG,PSADRGN,PSADT,PSALOC,PSALOCA,PSALOCN,PSAOUT,PSAQTY,PSASLN,PSAT,X,Y
+1 QUIT