1 | PSAREORD ;BIR/JMB-Nightly Background Job - CONT'D ;7/23/97
|
---|
2 | ;;3.0; DRUG ACCOUNTABILITY/INVENTORY INTERFACE;**3,21**; 10/24/97
|
---|
3 | ;References to ^PSDRUG( are covered by IA #2095
|
---|
4 | ;References to ^DIC(51.5 are covered by IA #1931
|
---|
5 | ;This routine checks each pharmacy location for current balances less
|
---|
6 | ;than or equal to the reorder level. A list is sent to the holders of
|
---|
7 | ;the PSA ORDERS key. If the location is a master vault, the message
|
---|
8 | ;will include those CS drugs only if the user has the PSJ RPHARM key.
|
---|
9 | ;
|
---|
10 | PHARM ;Looks for drugs that are >= reorder level in pharmacy locations.
|
---|
11 | K ^TMP("PSAMSGO",$J),^TMP("PSAREORD",$J) S (PSACNT,PSALOC)=0
|
---|
12 | F S PSALOC=$O(^PSD(58.8,"ADISP","P",PSALOC)) Q:'PSALOC D
|
---|
13 | .Q:'$P($G(^PSD(58.8,PSALOC,0)),"^",14)!('$D(^PSD(58.8,PSALOC,0)))
|
---|
14 | .I +$G(^PSD(58.8,PSALOC,"I")),+^PSD(58.8,PSALOC,"I")'>DT Q
|
---|
15 | .S PSAFIRST=1,PSADRG=0
|
---|
16 | .F S PSADRG=+$O(^PSD(58.8,PSALOC,1,PSADRG)) Q:'PSADRG D
|
---|
17 | ..S PSANODE=$G(^PSD(58.8,PSALOC,1,PSADRG,0)) Q:PSANODE=""
|
---|
18 | ..Q:+$P(PSANODE,"^",4)>+$P(PSANODE,"^",5)
|
---|
19 | ..Q:'+$P(PSANODE,"^",4)&('+$P(PSANODE,"^",5))
|
---|
20 | ..S PSANDC=$P($G(^PSDRUG(PSADRG,2)),"^",4) K PSALVSN D:PSANDC'="" NDC
|
---|
21 | ..S ^TMP("PSAORD",$J,PSALOC,$S($P($G(^PSDRUG(PSADRG,0)),"^")'="":$P(^PSDRUG(PSADRG,0),"^"),1:"UNKNOWN ("_PSADRG_")"))=+$P(PSANODE,"^",3)_"^"_+$P(PSANODE,"^",4)_"^"_$G(PSALVSN)
|
---|
22 | K PSALVSN
|
---|
23 | ;
|
---|
24 | VAULT ;Looks for drugs that are >= reorder level in master vaults.
|
---|
25 | S PSALOC=0 F S PSALOC=$O(^PSD(58.8,"ADISP","M",PSALOC)) Q:'PSALOC D
|
---|
26 | .Q:'$P($G(^PSD(58.8,PSALOC,0)),"^",14)!('$D(^PSD(58.8,PSALOC,0)))
|
---|
27 | .I +$G(^PSD(58.8,PSALOC,"I")),+^PSD(58.8,PSALOC,"I")'>DT Q
|
---|
28 | .S PSAFIRST=1,PSADRG=0
|
---|
29 | .F S PSADRG=$O(^PSD(58.8,PSALOC,1,PSADRG)) Q:'PSADRG D
|
---|
30 | ..S PSANODE=$G(^PSD(58.8,PSALOC,1,PSADRG,0))
|
---|
31 | ..Q:PSANODE=""!(+$P(PSANODE,"^",4)>+$P(PSANODE,"^",5))
|
---|
32 | ..Q:'+$P(PSANODE,"^",4)&('+$P(PSANODE,"^",5))
|
---|
33 | ..S PSANDC=$P($G(^PSDRUG(PSADRG,2)),"^",4) K PSALVSN D:PSANDC'="" NDC
|
---|
34 | ..S ^TMP("PSAORDCS",$J,PSALOC,$S($P($G(^PSDRUG(PSADRG,0)),"^")'="":$P(^PSDRUG(PSADRG,0),"^"),1:"UNKNOWN ("_PSADRG_")"))=+$P(PSANODE,"^",3)_"^"_+$P(PSANODE,"^",4)_"^"_$G(PSALVSN)
|
---|
35 | K PSALVSN I '$O(^TMP("PSAORD",$J,0)),'$O(^TMP("PSAORDCS",$J,0)) G EXIT
|
---|
36 | ;
|
---|
37 | NONCS ;Loops through the non-controlled subs to create mail message text.
|
---|
38 | G:'$O(^TMP("PSAORD",$J,0)) CS K PSA S (PSACNT,PSALOC)=0
|
---|
39 | F S PSALOC=$O(^TMP("PSAORD",$J,PSALOC)) Q:'PSALOC D
|
---|
40 | .S PSAFIRST=1,PSADRG=""
|
---|
41 | .F S PSADRG=$O(^TMP("PSAORD",$J,PSALOC,PSADRG)) Q:PSADRG="" D
|
---|
42 | ..S PSASTOCK=$P(^TMP("PSAORD",$J,PSALOC,PSADRG),"^"),PSABAL=$P(^(PSADRG),"^",2),PSAVSN=$P(^(PSADRG),"^",3) D SETMSG
|
---|
43 | G:'$D(^XUSEC("PSJ RPHARM",DUZ))!('$O(^TMP("PSAORDCS",$J,0))) SEND
|
---|
44 | ;
|
---|
45 | CS ;Loops through the controlled subs to create mail message text.
|
---|
46 | S PSALOC=0 F S PSALOC=$O(^TMP("PSAORDCS",$J,PSALOC)) Q:'PSALOC D
|
---|
47 | .S PSAFIRST=1,PSADRG=""
|
---|
48 | .F S PSADRG=$O(^TMP("PSAORDCS",$J,PSALOC,PSADRG)) Q:PSADRG="" D
|
---|
49 | ..S PSASTOCK=$P(^TMP("PSAORDCS",$J,PSALOC,PSADRG),"^"),PSABAL=$P(^(PSADRG),"^",2),PSAVSN=$P(^(PSADRG),"^",3) D SETMSG
|
---|
50 | ;
|
---|
51 | SEND ;Send the mail message to the holders of the PSA ORDERS key.
|
---|
52 | S XMTEXT="^TMP(""PSAMSGO"",$J,",XMDUZ="Drug Accountability System",XMSUB="Drug Balances Below Reorder Level"
|
---|
53 | ;PSA*3*21 ( change recipients to PSA REORDER LEVEL mail group
|
---|
54 | S XMY("G.PSA REORDER LEVEL")=""
|
---|
55 | G:'$D(XMY) QUIT D ^XMD
|
---|
56 | QUIT K XMY,^TMP("PSAMSGO",$J)
|
---|
57 | Q
|
---|
58 | ;
|
---|
59 | NDC ;Gets VSN dispense units,dispense units/order unit, order unit for
|
---|
60 | ;^TMP global
|
---|
61 | K PSASYN,PSAVSN,PSAOU,PSADUOU,PSADU,PSALVSN
|
---|
62 | S PSANDC=$E("000000",1,(6-$L($P(PSANDC,"-"))))_$P(PSANDC,"-")_$E("0000",1,(4-$L($P(PSANDC,"-",2))))_$P(PSANDC,"-",2)_$E("00",1,(2-$L($P(PSANDC,"-",3))))_$P(PSANDC,"-",3)
|
---|
63 | S PSASYN=+$O(^PSDRUG("C",PSANDC,PSADRG,0)) Q:'PSASYN!('$D(^PSDRUG(PSADRG,1,PSASYN,0)))
|
---|
64 | S PSAVSN=$P(^PSDRUG(PSADRG,1,PSASYN,0),"^",4),PSAOU=$S(+$P(^(0),"^",5):$P($G(^DIC(51.5,+$P(^(0),"^",5),0)),"^"),1:"")
|
---|
65 | S PSADUOU=$S(+$P(^PSDRUG(PSADRG,1,PSASYN,0),"^",7):+$P(^(0),"^",7),1:""),PSADU=$P($G(^PSDRUG(PSADRG,660)),"^",8)
|
---|
66 | Q:PSAVSN=""
|
---|
67 | S PSALVSN="VSN: "_PSAVSN I PSAOU'="",+PSADUOU,PSADU'="" S PSALVSN=PSALVSN_" "_PSADUOU_" "_PSADU_"/"_PSAOU
|
---|
68 | K PSASYN,PSAVSN,PSAOU,PSADUOU,PSADU
|
---|
69 | Q
|
---|
70 | SETMSG ;Creates the body of the mail message.
|
---|
71 | I PSAFIRST D
|
---|
72 | .I PSACNT'=0 S PSACNT=PSACNT+1,^TMP("PSAMSGO",$J,PSACNT)="=============================================================================",PSACNT=PSACNT+1,^TMP("PSAMSGO",$J,PSACNT)=" "
|
---|
73 | .K PSALOCA D SITES^PSAUTL1 S PSALOCA($P(^PSD(58.8,PSALOC,0),"^")_PSACOMB,PSALOC)=PSAISIT_"^"_PSAOSIT,PSALOCN=$O(PSALOCA("")),PSAFIRST=0
|
---|
74 | .S PSACNT=PSACNT+1,PSACNT(PSACNT)=$S($P(^PSD(58.8,PSALOC,0),"^",2)="P":"PHARMACY LOCATION",1:"MASTER VAULT")
|
---|
75 | .I $L(PSALOCN)>76 S PSACNT=PSACNT+1,^TMP("PSAMSGO",$J,PSACNT)=$P(PSALOCN,"(IP)",1)_"(IP)" S PSACNT=PSACNT+1,^TMP("PSAMSGO",$J,PSACNT)=" "_$P(PSALOCN,"(IP)",2)
|
---|
76 | .I $L(PSALOCN)<77 S PSACNT=PSACNT+1,^TMP("PSAMSGO",$J,PSACNT)=PSALOCN
|
---|
77 | .S PSACNT=PSACNT+1,^TMP("PSAMSGO",$J,PSACNT)=" Stock Current Amount to"
|
---|
78 | .S PSACNT=PSACNT+1,^TMP("PSAMSGO",$J,PSACNT)="Drug Name: Level Balance Order"
|
---|
79 | .S PSACNT=PSACNT+1,^TMP("PSAMSGO",$J,PSACNT)="-----------------------------------------------------------------------------"
|
---|
80 | S PSALEN=$L(PSADRG),PSASPACE=$E(" ",1,(42-PSALEN))
|
---|
81 | S PSACNT=PSACNT+1,^TMP("PSAMSGO",$J,PSACNT)=PSADRG_PSASPACE_$J(PSASTOCK,6,0)_" "_$J(PSABAL,6,0)_" "_$S((PSASTOCK-PSABAL)>.001:$J((PSASTOCK-PSABAL),6,0),1:" N/A")
|
---|
82 | S PSACNT=PSACNT+1 S:$G(PSAVSN)'="" ^TMP("PSAMSGO",$J,PSACNT)=" "_PSAVSN
|
---|
83 | Q
|
---|
84 | ;
|
---|
85 | EXIT ;Kills the variables & TMP globals.
|
---|
86 | K ^TMP("PSAMSGO",$J),^TMP("PSAORD",$J),^TMP("PSAORDCS",$J)
|
---|
87 | K PSA,PSABAL,PSACNT,PSACOMB,PSADRG,PSAFIRST,PSAISIT,PSALEN,PSALOC,PSALOCA,PSALOCN,PSANODE,PSAOSIT,PSAISITN,PSAOSITN,PSASPACE,PSASTOCK,XMDUZ,XMSUB,XMTEXT,XMY
|
---|
88 | Q
|
---|