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