1 | PSSORUTL ;BIR/RSB/RTR-CPRS Dosage call ;03/24/00
|
---|
2 | ;;1.0;PHARMACY DATA MANAGEMENT;**34,38,49,53,69,83**;9/30/97
|
---|
3 | ;Reference ^PS(50.607 - DBIA 2221
|
---|
4 | ;Reference ^YSCL(603.01 - DBIA 2697
|
---|
5 | ;Reference to ^PSNAPIS - DBIA 2531
|
---|
6 | ;
|
---|
7 | DOSE(PSSX,PD,TYPE,PSSDFN) ;
|
---|
8 | K PSSX
|
---|
9 | ; PSSX - Target array
|
---|
10 | ; PD - Orderable Item
|
---|
11 | ; TYPE - O:Outpt,U:Unit Dose,I:IV,X:Non-VA Med
|
---|
12 | ; PSSDFN - Patient
|
---|
13 | ;
|
---|
14 | N DLOOP,DCNT1,DLOOP1,LOW,FORM,PSSOIU,PSSLOW,PSSLOW1,PSSLOW2,PSOLC,PL,PSSHOLD,PSSA,PSSZ,PSSC,PSIEN,PSSTRN,PSSDSE,PSSVERB,PSSPREP,PSSCLO,PSSDEA,PSSMAX,PSSDLP,PSNN,PSNNN,PSSREQS,PSSLOW4,PL2,PSSA1,PL3,PSSUNITX,PSSLD,PSSLD1
|
---|
15 | N PSSDOSE,PSSUNTS,PSSUDOS,PSSQT,PSSBCM,PSSHLF
|
---|
16 | S PSSOIU=$S(TYPE="I":1,TYPE="U":1,1:0)
|
---|
17 | F DLOOP=0:0 S DLOOP=$O(^PSDRUG("ASP",PD,DLOOP)) Q:'DLOOP D
|
---|
18 | .Q:'$O(^PSDRUG(DLOOP,"DOS1",0))
|
---|
19 | .S PSSTRN=$P($G(^PSDRUG(DLOOP,"DOS")),"^"),PSSUNITX=$P($G(^("DOS")),"^",2) Q:PSSTRN=""
|
---|
20 | .S PSSUNITX=$S($P($G(^PS(50.607,+$G(PSSUNITX),0)),"^")'=""&($P($G(^(0)),"^")'["/"):$P($G(^(0)),"^"),1:"")
|
---|
21 | .I $P($G(^PSDRUG(DLOOP,"I")),"^"),+$P($G(^("I")),"^")<DT Q
|
---|
22 | .D APP Q:PSSQT
|
---|
23 | .S PSSDSE=+$P($G(^PS(50.7,PD,0)),"^",2),PSSVERB=$P($G(^PS(50.606,PSSDSE,"MISC")),"^"),PSSPREP=$P($G(^("MISC")),"^",3)
|
---|
24 | .K PSNNN F PSNN=0:0 S PSNN=$O(^PS(50.606,PSSDSE,"NOUN",PSNN)) Q:'PSNN!($D(PSNNN)) S:$P($G(^(PSNN,0)),"^")'="" PSNNN=$P($G(^(0)),"^")
|
---|
25 | .; possible doses
|
---|
26 | .F DLOOP1=0:0 S DLOOP1=$O(^PSDRUG(DLOOP,"DOS1",DLOOP1)) Q:'DLOOP1 D
|
---|
27 | ..Q:'$D(^PSDRUG(DLOOP,"DOS1",DLOOP1,0))
|
---|
28 | ..I PSSOIU,$P($G(^PSDRUG(DLOOP,"DOS1",DLOOP1,0)),"^",3)'["I" Q
|
---|
29 | ..I 'PSSOIU,$P($G(^PSDRUG(DLOOP,"DOS1",DLOOP1,0)),"^",3)'["O" Q
|
---|
30 | ..S (PSSDOSE,PSSUNTS,PSSUDOS)=""
|
---|
31 | ..S PSSDOSE=$P($G(^PSDRUG(DLOOP,"DOS1",DLOOP1,0)),"^",2)
|
---|
32 | ..S PSSUNTS=$P($G(^PS(50.607,+$P($G(^PSDRUG(DLOOP,"DOS")),"^",2),0)),"^")
|
---|
33 | ..S PSSUDOS=$P($G(^PSDRUG(DLOOP,"DOS1",DLOOP1,0)),"^"),PSSBCM=$P($G(^(0)),"^",4) I PSSUDOS["." S PSSHLF(DLOOP)=""
|
---|
34 | ..I PSSDOSE]""&(PSSUDOS]"") D
|
---|
35 | ...S DCNT1=$S('$D(DCNT1):1,1:DCNT1+1)
|
---|
36 | ...S LOW(PSSDOSE,PSSUDOS,DCNT1)=""
|
---|
37 | ...S FORM(PSSDOSE,$S($P($G(^PSDRUG(DLOOP,0)),"^",9)=1:1,1:0),DCNT1)=PSSUDOS
|
---|
38 | ...D PARN
|
---|
39 | ...S PSSX(DCNT1)=PSSDOSE_"^"_PSSUNTS_"^"_$S($E($G(PSSUDOS),1)=".":"0",1:"")_PSSUDOS_"^"_$S($G(PSSNP)'="":$G(PSSNP),1:$G(PSNNN))_"^^"_DLOOP_"^"_$$PRICE^PSSUTLA1 K PSSNP
|
---|
40 | I '$O(PSSX(0)) G DOSE2
|
---|
41 | ; delete n/f duplicate doses
|
---|
42 | S PSSLOW="" F S PSSLOW=$O(FORM(PSSLOW)) Q:PSSLOW="" D
|
---|
43 | .I $O(FORM(PSSLOW,0,0)) S PSSLOW2="" F S PSSLOW2=$O(FORM(PSSLOW,1,PSSLOW2)) Q:PSSLOW2="" K PSSX(PSSLOW2),LOW(PSSLOW,+$G(FORM(PSSLOW,1,PSSLOW2)),PSSLOW2)
|
---|
44 | ;Lowest UPD
|
---|
45 | S PSSLOW="" F S PSSLOW=$O(LOW(PSSLOW)) Q:PSSLOW="" D
|
---|
46 | .S PSOLC=0 S PSSLOW1="" F S PSSLOW1=$O(LOW(PSSLOW,PSSLOW1)) Q:PSSLOW1="" D
|
---|
47 | ..S PSOLC=PSOLC+1 S:PSOLC=1 PSSLOW4=$O(LOW(PSSLOW,PSSLOW1,0))
|
---|
48 | ..S PSSLOW2="" F S PSSLOW2=$O(LOW(PSSLOW,PSSLOW1,PSSLOW2)) Q:PSSLOW2="" D
|
---|
49 | ...I PSOLC>1 S PSSX(PSSLOW4,(PSOLC-1))=PSSX(PSSLOW2) K PSSX(PSSLOW2)
|
---|
50 | K PSSHOLD S PL="" F S PL=$O(PSSX(PL)) Q:PL="" S PSSHOLD($P(PSSX(PL),"^"),PL)=PSSX(PL) I $O(PSSX(PL,0)) D
|
---|
51 | .S PL2="" F S PL2=$O(PSSX(PL,PL2)) Q:PL2="" S PSSHOLD($P(PSSX(PL,PL2),"^"),PL,PL2)=PSSX(PL,PL2)
|
---|
52 | K PSSX S PSSA=1,PSSZ="" F S PSSZ=$O(PSSHOLD(PSSZ)) Q:PSSZ="" F PSSC=0:0 S PSSC=$O(PSSHOLD(PSSZ,PSSC)) Q:'PSSC S PSSX(PSSA)=PSSHOLD(PSSZ,PSSC) D SLS D:'$D(PSSX("DD",+$P(PSSX(PSSA),"^",6))) D:$O(PSSHOLD(PSSZ,PSSC,0)) MULTI S PSSA=PSSA+1
|
---|
53 | .S (PSIEN,DLOOP)=+$P(PSSX(PSSA),"^",6) K PSSMAX D:$G(TYPE)["O" MAX
|
---|
54 | .D SETU^PSSORUTE
|
---|
55 | .S PSSX("DD",PSIEN)=$P($G(^PSDRUG(PSIEN,0)),"^")_"^"_$P($G(^(660)),"^",6)_"^"_$P($G(^(0)),"^",9)_"^"_$P($G(^(660)),"^",8)_"^"_$P($G(^("DOS")),"^")
|
---|
56 | .S PSSX("DD",PSIEN)=PSSX("DD",PSIEN)_"^"_$G(PSSUNITX)_"^"_$P($G(^PS(50.606,+$G(PSSDSE),0)),"^")_"^"_$G(PSSMAX)
|
---|
57 | .D REQS S PSSX("DD",PSIEN)=PSSX("DD",PSIEN)_"^"_$G(PSSREQS) D DEA^PSSUTLA1(PSIEN)
|
---|
58 | .S PSSX("MISC")=$G(PSSVERB)_"^"_$G(PSSPREP)_"^"_$P($G(^PS(50.606,+$G(PSSDSE),"MISC")),"^",4)
|
---|
59 | K PSSHOLD,PSSDZUNT
|
---|
60 | D LEAD^PSSUTLA1 D:$G(TYPE)["O" EN3^PSSUTLA1(PD,245)
|
---|
61 | S PSSX("DEA")=$$OIDEA^PSSUTLA1(PD,TYPE)
|
---|
62 | Q
|
---|
63 | DOSE2 ;Local doses
|
---|
64 | N PSOCT,PSONDS,PSOND,PSOND1,PSONDX,PSONDU,PSODOS,PSLOC,PSLOCV,PSODUPD,PSOXDOSE
|
---|
65 | S PSOCT=1
|
---|
66 | S PSOXDOSE=+$P($G(^PS(50.7,PD,0)),"^",2) K PSNNN
|
---|
67 | F DLOOP=0:0 S DLOOP=$O(^PSDRUG("ASP",PD,DLOOP)) Q:'DLOOP D
|
---|
68 | .I $P($G(^PSDRUG(DLOOP,"I")),"^"),+$P($G(^("I")),"^")<DT Q
|
---|
69 | .D APP Q:PSSQT
|
---|
70 | .Q:'$O(^PSDRUG(DLOOP,"DOS2",0))
|
---|
71 | .S PSONDS=$P($G(^PSDRUG(DLOOP,"DOS")),"^"),PSONDU=$P($G(^("DOS")),"^",2),PSOND=$P($G(^("ND")),"^",3),PSOND1=$P($G(^("ND")),"^")
|
---|
72 | .I PSOND,PSOND1 I PSONDS=""!('PSONDU) S PSONDX=$$DFSU^PSNAPIS(PSOND1,PSOND)
|
---|
73 | .I PSONDS="",PSOND,PSOND1 S PSONDS=$P($G(PSONDX),"^",4) D NS
|
---|
74 | .I 'PSONDU,PSOND,PSOND1 S PSONDU=$P($G(PSONDX),"^",5)
|
---|
75 | .D NU
|
---|
76 | .S PSODOS=+$P($G(^PS(50.7,PD,0)),"^",2)
|
---|
77 | .F PSLOC=0:0 S PSLOC=$O(^PSDRUG(DLOOP,"DOS2",PSLOC)) Q:'PSLOC D
|
---|
78 | ..S PSLOCV=$P($G(^PSDRUG(DLOOP,"DOS2",PSLOC,0)),"^"),PSSBCM=$P($G(^(0)),"^",3) Q:PSLOCV=""
|
---|
79 | ..I PSSOIU,$P($G(^PSDRUG(DLOOP,"DOS2",PSLOC,0)),"^",2)'["I" Q
|
---|
80 | ..I 'PSSOIU,$P($G(^PSDRUG(DLOOP,"DOS2",PSLOC,0)),"^",2)'["O" Q
|
---|
81 | ..D SET2
|
---|
82 | ;no doses
|
---|
83 | K PSSBCM
|
---|
84 | I '$O(PSSX(0)) K PSLOCV S PSOCT=1 D
|
---|
85 | .F DLOOP=0:0 S DLOOP=$O(^PSDRUG("ASP",PD,DLOOP)) Q:'DLOOP D
|
---|
86 | ..I $P($G(^PSDRUG(DLOOP,"I")),"^"),+$P($G(^("I")),"^")<DT Q
|
---|
87 | ..D APP Q:PSSQT
|
---|
88 | ..S PSONDS=$P($G(^PSDRUG(DLOOP,"DOS")),"^"),PSONDU=$P($G(^("DOS")),"^",2),PSOND=$P($G(^("ND")),"^",3),PSOND1=$P($G(^("ND")),"^")
|
---|
89 | ..K PSONDX I PSOND,PSOND1 I PSONDS=""!('PSONDU) S PSONDX=$$DFSU^PSNAPIS(PSOND1,PSOND)
|
---|
90 | ..I PSONDS="",PSOND,PSOND1 S PSONDS=$P($G(PSONDX),"^",4) D NS
|
---|
91 | ..I 'PSONDU,PSOND,PSOND1 S PSONDU=$P($G(PSONDX),"^",5)
|
---|
92 | ..D NU
|
---|
93 | ..S PSODOS=+$P($G(^PS(50.7,PD,0)),"^",2)
|
---|
94 | ..D SET3
|
---|
95 | D LEAD^PSSUTLA1 D:$G(TYPE)["O" EN3^PSSUTLA1(PD,245)
|
---|
96 | S PSSX("DEA")=$$OIDEA^PSSUTLA1(PD,TYPE)
|
---|
97 | D DUP^PSSUTLA1
|
---|
98 | Q
|
---|
99 | SET2 I $G(PSLOCV)'="",$G(PSLOCV)["&" D AMP^PSSORPH1
|
---|
100 | K PSSUDOS S PSSX(PSOCT)="^"_$G(PSONDU)_"^^"_$G(PSNNN)_"^"_$G(PSLOCV)_"^"_DLOOP_"^"_$$PRICE^PSSUTLA1
|
---|
101 | SET3 ;
|
---|
102 | I '$D(PSSX("DD",DLOOP)) D
|
---|
103 | .D REQS
|
---|
104 | .K PSSMAX I $G(TYPE)["O" D MAX
|
---|
105 | .S PSSX("DD",DLOOP)=$P($G(^PSDRUG(DLOOP,0)),"^")_"^"_$P($G(^(660)),"^",6)_"^"_$P($G(^(0)),"^",9)_"^"_$P($G(^(660)),"^",8)_"^"_$G(PSONDS)_"^"_$G(PSONDU)
|
---|
106 | .S PSSX("DD",DLOOP)=PSSX("DD",DLOOP)_"^"_$P($G(^PS(50.606,+$G(PSODOS),0)),"^")_"^"_$G(PSSMAX)_"^"_$G(PSSREQS) D DEA^PSSUTLA1(DLOOP)
|
---|
107 | .S PSSX("MISC")=$P($G(^PS(50.606,+$G(PSODOS),"MISC")),"^")_"^"_$P($G(^("MISC")),"^",3)_"^"_$P($G(^("MISC")),"^",4)
|
---|
108 | S PSOCT=PSOCT+1
|
---|
109 | Q
|
---|
110 | MAX ;
|
---|
111 | K PSSMAX S PSSDEA=$P($G(^PSDRUG(DLOOP,0)),"^",3)
|
---|
112 | I PSSDEA["1"!(PSSDEA["2") S PSSMAX=0 Q
|
---|
113 | I PSSDEA["A",PSSDEA'["B" S PSSMAX=0 Q
|
---|
114 | I $P($G(^PSDRUG(DLOOP,"CLOZ1")),"^")="PSOCLO1",$G(PSSDFN) D Q
|
---|
115 | .S PSSCLO=$O(^YSCL(603.01,"C",PSSDFN,0)) I PSSCLO,$P($G(^YSCL(603.01,+PSSCLO,0)),"^",3)="B" S PSSMAX=1 Q
|
---|
116 | .S PSSMAX=0
|
---|
117 | I PSSDEA["3"!(PSSDEA["4")!(PSSDEA["5") S PSSMAX=5 Q
|
---|
118 | S PSSMAX=11
|
---|
119 | Q
|
---|
120 | SLS ;Dosage with /
|
---|
121 | K PSSDZUNT
|
---|
122 | I $P($G(PSSX(PSSA)),"^",2)'["/" S $P(PSSX(PSSA),"^",5)=$P($G(PSSX(PSSA)),"^")_$P($G(PSSX(PSSA)),"^",2) Q
|
---|
123 | N PSSF,PSSF1,PSSF2,PSSG,PSSFA,PSSFA1,PSSFB,PSSFB1,PSSDZI,PSSDZSL,PSSDZND,PSSDZSL1,PSSDZSL2,PSSDZSL3,PSSDZSL4,PSSDZSL5,PSSDZ50
|
---|
124 | S PSSF=$P($G(PSSX(PSSA)),"^"),PSSG=$P($G(PSSX(PSSA)),"^",2)
|
---|
125 | S PSSDZSL=0,PSSDZI=+$P($G(PSSX(PSSA)),"^",6),PSSDZ50=$P($G(^PSDRUG(PSSDZI,"DOS")),"^")
|
---|
126 | S PSSDZND=$$PSJST^PSNAPIS(+$P($G(^PSDRUG(PSSDZI,"ND")),"^"),+$P($G(^PSDRUG(PSSDZI,"ND")),"^",3)) S PSSDZND=+$P($G(PSSDZND),"^",2) ;I $G(PSSDZND),$G(PSSDZ50),+$G(PSSDZND)'=+$G(PSSDZ50) S PSSDZSL=1
|
---|
127 | S PSSFA=$P(PSSG,"/"),PSSFB=$P(PSSG,"/",2),PSSFA1=+$G(PSSFA),PSSFB1=+$G(PSSFB)
|
---|
128 | I '$G(PSSDZND) S $P(PSSX(PSSA),"^",5)=$P(PSSX(PSSA),"^") G SLSQ
|
---|
129 | S PSSDZSL2=PSSDZ50/PSSDZND,PSSDZSL3=PSSDZSL2*+$P($G(PSSX(PSSA)),"^",3) S PSSDZSL4=PSSDZSL3*$S($G(PSSFB1):PSSFB1,1:1) S PSSDZSL5=$S('$G(PSSFB1):PSSDZSL4_$G(PSSFB),1:PSSDZSL4_$P(PSSFB,PSSFB1,2))
|
---|
130 | S PSSF2=$S('$G(PSSFA1):PSSF,1:($G(PSSFA1)*PSSF))_$S($G(PSSFA1):$P(PSSFA,PSSFA1,2),1:PSSFA)_"/"_$G(PSSDZSL5)
|
---|
131 | S PSSDZUNT=$P(PSSG,"/")_"/"_$G(PSSDZSL4)_$S('$G(PSSFB1):$G(PSSFB),1:$P(PSSFB,PSSFB1,2)) S $P(PSSX(PSSA),"^",2)=PSSDZUNT
|
---|
132 | S $P(PSSX(PSSA),"^",5)=PSSF2
|
---|
133 | SLSQ Q
|
---|
134 | REQS S PSSREQS=1
|
---|
135 | Q
|
---|
136 | MULTI S PL3="" F S PL3=$O(PSSHOLD(PSSZ,PSSC,PL3)) Q:PL3="" S PSSX(PSSA,PL3)=PSSHOLD(PSSZ,PSSC,PL3) D SLS^PSSUTLPR D:'$D(PSSX("DD",+$P(PSSX(PSSA,PL3),"^",4)))
|
---|
137 | .S (PSIEN,DLOOP)=+$P(PSSX(PSSA,PL3),"^",6) K PSSMAX D:$G(TYPE)["O" MAX
|
---|
138 | .D SETU^PSSORUTE
|
---|
139 | .S PSSX("DD",PSIEN)=$P($G(^PSDRUG(PSIEN,0)),"^")_"^"_$P($G(^(660)),"^",6)_"^"_$P($G(^(0)),"^",9)_"^"_$P($G(^(660)),"^",8)_"^"_$P($G(^("DOS")),"^")
|
---|
140 | .S PSSX("DD",PSIEN)=PSSX("DD",PSIEN)_"^"_$G(PSSUNITX)_"^"_$P($G(^PS(50.606,+$G(PSSDSE),0)),"^")_"^"_$G(PSSMAX)
|
---|
141 | .D REQS S PSSX("DD",PSIEN)=PSSX("DD",PSIEN)_"^"_$G(PSSREQS) D DEA^PSSUTLA1(PSIEN)
|
---|
142 | .S PSSX("MISC")=$G(PSSVERB)_"^"_$G(PSSPREP)_"^"_$P($G(^PS(50.606,+$G(PSSDSE),"MISC")),"^",4)
|
---|
143 | K PSSJZUNT
|
---|
144 | Q
|
---|
145 | PARN N PSSNPL K PSSNP
|
---|
146 | Q:$G(PSNNN)=""
|
---|
147 | Q:$L(PSNNN)'>3
|
---|
148 | S PSSNPL=$E(PSNNN,($L(PSNNN)-2),$L(PSNNN))
|
---|
149 | I $G(PSSNPL)="(S)"!($G(PSSNPL)="(s)") D
|
---|
150 | .I $G(PSSUDOS)'>1 S PSSNP=$E(PSNNN,1,($L(PSNNN)-3))
|
---|
151 | .I $G(PSSUDOS)>1 S PSSNP=$E(PSNNN,1,($L(PSNNN)-3))_$E(PSSNPL,2)
|
---|
152 | Q
|
---|
153 | LEAD F PSSLD=0:0 S PSSLD=$O(PSSX(PSSLD)) Q:'PSSLD D
|
---|
154 | .I $E($P(PSSX(PSSLD),"^"),1)="." S $P(PSSX(PSSLD),"^")="0"_$P(PSSX(PSSLD),"^")
|
---|
155 | .I $E($P(PSSX(PSSLD),"^",5),1)="." S $P(PSSX(PSSLD),"^",5)="0"_$P(PSSX(PSSLD),"^",5)
|
---|
156 | .I $O(PSSX(PSSLD,0)) D
|
---|
157 | ..F PSSLD1=0:0 S PSSLD1=$O(PSSX(PSSLD,PSSLD1)) Q:'PSSLD1 D
|
---|
158 | ...I $E($P(PSSX(PSSLD,PSSLD1),"^"),1)="." S $P(PSSX(PSSLD,PSSLD1),"^")="0"_$P(PSSX(PSSLD,PSSLD1),"^")
|
---|
159 | ...I $E($P(PSSX(PSSLD,PSSLD1),"^",5),1)="." S $P(PSSX(PSSLD,PSSLD1),"^",5)="0"_$P(PSSX(PSSLD,PSSLD1),"^",5)
|
---|
160 | S PSSLD="" F S PSSLD=$O(PSSX("DD",PSSLD)) Q:PSSLD="" D
|
---|
161 | .I $E($P(PSSX("DD",PSSLD),"^",5),1)="." S $P(PSSX("DD",PSSLD),"^",5)="0"_$P(PSSX("DD",PSSLD),"^",5)
|
---|
162 | Q
|
---|
163 | ;
|
---|
164 | APP N APPUSE S PSSQT=0,APPUSE=$P($G(^PSDRUG(DLOOP,2)),"^",3)
|
---|
165 | I $G(TYPE)="O" S:APPUSE'["O" PSSQT=1 Q
|
---|
166 | I $G(TYPE)="X" S:APPUSE'["X" PSSQT=1 Q
|
---|
167 | I APPUSE'["U",APPUSE'["I" S PSSQT=1
|
---|
168 | Q
|
---|
169 | NS I PSONDS'?.N&(PSONDS'?.N1".".N) K PSONDS
|
---|
170 | Q
|
---|
171 | NU D NU^PSSORUTE
|
---|
172 | Q
|
---|