1 | PSBUTL ;BIRMINGHAM/EFC-BCMA UTILITIES ;Mar 2004
|
---|
2 | ;;3.0;BAR CODE MED ADMIN;**3,9,13,38**;Mar 2004;Build 8
|
---|
3 | ;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ; Reference/IA
|
---|
6 | ; $$PATCH & $$VERSION^XPDUTL/10141
|
---|
7 | ; File 50/221
|
---|
8 | ; File 200/10060
|
---|
9 | ;
|
---|
10 | ;
|
---|
11 | DIWP(X,Y,PSB,PSBARGN) ;
|
---|
12 | K ^UTILITY($J,"W")
|
---|
13 | S DIWL=0,DIWR=Y,DIWF="C"_Y D ^DIWP
|
---|
14 | F X=0:0 S X=$O(^UTILITY($J,"W",0,X)) Q:'X D
|
---|
15 | .S Y=$O(@PSB@(""),-1)+1
|
---|
16 | .; Naked Ref ^UTILITY($J,"W",0,X)
|
---|
17 | .S @PSB@(Y)=$J("",+$G(PSBARGN))_^(X,0)
|
---|
18 | S @PSB@(0)=+$O(@PSB@(""),-1)
|
---|
19 | K ^UTILITY($J,"W"),DIWL,DIWR,DIWF
|
---|
20 | Q
|
---|
21 | ;
|
---|
22 | SATURDAY(X,PSBDISP) ;
|
---|
23 | S X=X\1 D H^%DTC ; Convert to $H
|
---|
24 | S %H=%H+(6-%Y) ; Set it forward to Saturday
|
---|
25 | D YMD^%DTC ; Back to FM Format
|
---|
26 | I $G(PSBDISP) S PSBDISP=$E(X,4,5)_"/"_$E(X,6,7)_"/"_(1700+$E(X,1,3)) D EN^DDIOL("Actual date is Saturday "_PSBDISP)
|
---|
27 | Q X
|
---|
28 | ;
|
---|
29 | SUNDAY(X,PSBDISP) ;
|
---|
30 | S X=X\1 D H^%DTC ; Convert to $H
|
---|
31 | S %H=%H-%Y ; Set it back to Sunday
|
---|
32 | D YMD^%DTC ; Back to FM Format
|
---|
33 | I $G(PSBDISP) S PSBDISP=$E(X,4,5)_"/"_$E(X,6,7)_"/"_(1700+$E(X,1,3)) D EN^DDIOL("Actual date is Sunday "_PSBDISP)
|
---|
34 | Q X
|
---|
35 | ;
|
---|
36 | CLOCK(RESULTS,X) ; Verify Client/Server Date/Times are close enough
|
---|
37 | ;
|
---|
38 | ; RPC: PSB SERVER CLOCK VARIANCE
|
---|
39 | ;
|
---|
40 | ; Description:
|
---|
41 | ; Returns variance from server to client in minutes
|
---|
42 | ;
|
---|
43 | N PSBCLNT,PSBSRVR,PSBDIFF
|
---|
44 | S %DT="RS" D ^%DT S PSBCLNT=Y
|
---|
45 | D NOW^%DTC S PSBSRVR=%
|
---|
46 | S PSBDIFF=$$DIFF(PSBSRVR,PSBCLNT)
|
---|
47 | S X=$$GET^XPAR("DIV","PSB SERVER CLOCK VARIANCE")
|
---|
48 | I PSBDIFF>X!(PSBDIFF<(X*-1)) S RESULTS(0)="-1^"_PSBDIFF
|
---|
49 | E S RESULTS(0)="1^"_PSBDIFF
|
---|
50 | Q
|
---|
51 | ;
|
---|
52 | DIFF(X,X1) ; Difference in minutes between 2 FM dates
|
---|
53 | ; Code copied from Fileman Function MINUTES
|
---|
54 | S Y=$E(X1_"000",9,10)-$E(X_"000",9,10)*60+$E(X1_"00000",11,12)-$E(X_"00000",11,12),X2=X,X=$P(X,".",1)'=$P(X1,".",1) D ^%DTC:X S X=X*1440+Y
|
---|
55 | Q X
|
---|
56 | ;
|
---|
57 | DRUGINQ ; Drug File Inquiry
|
---|
58 | N PSBRET,PSBIEN,DIC,DIR,IOINORM,IOINHI
|
---|
59 | S X="IOINHI;IOINORM" D ENDR^%ZISS
|
---|
60 | S X=$TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
---|
61 | S DIC="^PSDRUG(",DIC(0)="AEQMVTN",DIC("T")="",D="B^C^VAPN^VAC^NDC^XATC",DIC("A")="Select DRUG: "
|
---|
62 | ; Display active drugs and those for appl packages IV and Unit Dose
|
---|
63 | S DIC("S")="I '$G(^PSDRUG(+Y,""I""))!($G(^(""I""))>DT),$P($G(^PSDRUG(+Y,2)),U,3)[""I""!($P($G(^PSDRUG(+Y,2)),U,3)[""U"")"
|
---|
64 | F W @IOF,!,"DRUG FILE INQUIRY",! D ^DIC Q:+Y<1 D
|
---|
65 | .K PSBRET
|
---|
66 | .S PSBIEN=+Y_","
|
---|
67 | .D GETS^DIQ(50,PSBIEN,".01;16;25;51;215;213;101;9*","","PSBRET")
|
---|
68 | .W @IOF,!,"DRUG NAME: ",IOINHI,PSBRET(50,PSBIEN,.01)
|
---|
69 | .W " (IEN: ",+PSBIEN,")",IOINORM,!,$TR($J("",IOM)," ","-"),!
|
---|
70 | .F X=16,25,51,215,213,101 D
|
---|
71 | ..D FIELD^DID(50,X,"","LABEL","PSBRET")
|
---|
72 | ..W !,PSBRET("LABEL"),":",?30,IOINHI
|
---|
73 | ..D:$L(PSBRET(50,PSBIEN,X))>49
|
---|
74 | ...F Y=1:1 Q:$L($P(PSBRET(50,PSBIEN,X)," ",1,Y))>49
|
---|
75 | ...W $P(PSBRET(50,PSBIEN,X)," ",1,Y-1),!?30
|
---|
76 | ...S PSBRET(50,PSBIEN,X)=$P(PSBRET(50,PSBIEN,X)," ",Y,250)
|
---|
77 | ..W ?30,PSBRET(50,PSBIEN,X),IOINORM
|
---|
78 | .W !!,"SYNONYMS:",IOINHI,!?15
|
---|
79 | .S X="" F S X=$O(PSBRET(50.1,X)) Q:X="" W:$X>40 !?15 W:$X>15 ?40 W PSBRET(50.1,X,.01)
|
---|
80 | .W IOINORM
|
---|
81 | .F Q:$Y>(IOSL-3) W !
|
---|
82 | .S DIR(0)="E" D ^DIR
|
---|
83 | Q
|
---|
84 | ;
|
---|
85 | DPTSET ; Set Logic for pt-merge x-ref on patient field in file 53.79
|
---|
86 | ;
|
---|
87 | ; Entered Date/Time
|
---|
88 | I $P(^PSB(53.79,DA,0),U,4) S ^PSB(53.79,"AEDT",X,$P(^PSB(53.79,DA,0),U,4),DA)=""
|
---|
89 | ;
|
---|
90 | ; Administration Date/Time
|
---|
91 | D:$P(^PSB(53.79,DA,0),U,6)
|
---|
92 | .S ^PSB(53.79,"AADT",X,$P(^PSB(53.79,DA,0),U,6),DA)=""
|
---|
93 | .;
|
---|
94 | .; Orderable Item + Administration Date/Time
|
---|
95 | .I $P(^PSB(53.79,DA,0),U,8) S ^PSB(53.79,"AOIP",X,$P(^PSB(53.79,DA,0),U,8),$P(^PSB(53.79,DA,0),U,6),DA)=""
|
---|
96 | ;
|
---|
97 | ; PRN's by entered date/time
|
---|
98 | I $P($G(^PSB(53.79,DA,.1)),U,2)="P"&($P(^(0),U,4)) S ^PSB(53.79,"APRN",X,$P(^PSB(53.79,DA,0),U,4),DA)=""
|
---|
99 | ;
|
---|
100 | ; Order+Administration Date and Time
|
---|
101 | I $P($G(^PSB(53.79,DA,.1)),U)]""&($P($G(^PSB(53.79,DA,.1)),U,3)) S ^PSB(53.79,"AORD",X,$P(^PSB(53.79,DA,.1),U),$P(^PSB(53.79,DA,.1),U,3),DA)=""
|
---|
102 | Q
|
---|
103 | ;
|
---|
104 | DPTKILL ; Kill Logic for pt-merge x-ref on patient field in file 53.79
|
---|
105 | ;
|
---|
106 | ; Entered Date/Time
|
---|
107 | I $P(^PSB(53.79,DA,0),U,4) K ^PSB(53.79,"AEDT",X,$P(^PSB(53.79,DA,0),U,4),DA)
|
---|
108 | ;
|
---|
109 | ; Administration Date/Time
|
---|
110 | D:$P(^PSB(53.79,DA,0),U,6)
|
---|
111 | .K ^PSB(53.79,"AADT",X,$P(^PSB(53.79,DA,0),U,6),DA)
|
---|
112 | .;
|
---|
113 | .; Orderable Item + Administration Date/Time
|
---|
114 | .I $P(^PSB(53.79,DA,0),U,8) K ^PSB(53.79,"AOIP",X,$P(^PSB(53.79,DA,0),U,8),$P(^PSB(53.79,DA,0),U,6),DA)
|
---|
115 | ;
|
---|
116 | ; PRN's by entered date/time
|
---|
117 | I $P($G(^PSB(53.79,DA,.1)),U,2)="P"&($P(^(0),U,4)) K ^PSB(53.79,"APRN",X,$P(^PSB(53.79,DA,0),U,4),DA)
|
---|
118 | ;
|
---|
119 | ; Order+Administration Date and Time
|
---|
120 | I $P($G(^PSB(53.79,DA,.1)),U)]""&($P($G(^PSB(53.79,DA,.1)),U,3)) K ^PSB(53.79,"AORD",X,$P(^PSB(53.79,DA,.1),U),$P(^PSB(53.79,DA,.1),U,3),DA)
|
---|
121 | Q
|
---|
122 | ;
|
---|
123 | TIMEIN ;
|
---|
124 | X ^%ZOSF("UPPERCASE") S X=Y
|
---|
125 | I X="NOON" S X=.12 Q
|
---|
126 | I X="MID" S X=.24 Q
|
---|
127 | I (X="NOW")!(X="N") D NOW^%DTC S X=$E($P(%,".",2)_"0000",1,4)
|
---|
128 | S X="T@"_X,%DT="R" D ^%DT
|
---|
129 | I Y<1 K X Q
|
---|
130 | S X=Y-DT
|
---|
131 | Q
|
---|
132 | ;
|
---|
133 | TIMEOUT(X) ;
|
---|
134 | N HOUR,MIN,AMPM
|
---|
135 | S X=$E($P(X,".",2)_"0000",1,4)
|
---|
136 | I X="2400" Q "12:00m"
|
---|
137 | I X="1200" Q "12:00n"
|
---|
138 | S HOUR=+$E(X,1,2),MIN=$E(X,3,4)
|
---|
139 | S AMPM="a"
|
---|
140 | S AMPM=$S(HOUR<12:"a",HOUR>11:"p",1:"**")
|
---|
141 | S:HOUR>12 HOUR=HOUR-12
|
---|
142 | Q HOUR_":"_MIN_AMPM
|
---|
143 | ;
|
---|
144 | HFSOPEN(HANDLE) ;
|
---|
145 | N PSBDIR,PSBFILE
|
---|
146 | S PSBDIR=$$GET^XPAR("DIV","PSB HFS SCRATCH")
|
---|
147 | S PSBFILE="PSB"_DUZ_".DAT"
|
---|
148 | D OPEN^%ZISH(HANDLE,PSBDIR,PSBFILE,"W") Q:POP
|
---|
149 | S IOM=132,IOSL=99999,IOST="P-DUMMY",IOF=""""""
|
---|
150 | Q
|
---|
151 | ;
|
---|
152 | HFSCLOSE(HANDLE) ;
|
---|
153 | N PSBDIR,PSBFILE,PSBDEL
|
---|
154 | D CLOSE^%ZISH(HANDLE)
|
---|
155 | K ^TMP("PSBO",$J)
|
---|
156 | S PSBDIR=$$GET^XPAR("DIV","PSB HFS SCRATCH")
|
---|
157 | S PSBFILE="PSB"_DUZ_".DAT",PSBDEL(PSBFILE)=""
|
---|
158 | S X=$$FTG^%ZISH(PSBDIR,PSBFILE,$NAME(^TMP("PSBO",$J,2)),3)
|
---|
159 | S X=$$DEL^%ZISH(PSBDIR,$NA(PSBDEL))
|
---|
160 | Q
|
---|
161 | ;
|
---|
162 | AUDIT(PSBREC,PSBDD,PSBFLD,PSBDATA,PSBSK) ; Med Log Audit
|
---|
163 | ; used by cross references to 53.79 to track changes to fields in Med Log file
|
---|
164 | ; xref AU05, AU06, AU09, AU16, AU21, AU22 pass the value 53.79 as PSBDD
|
---|
165 | ; xref AU303, AU304 pass the value 53.795 as PSBDD
|
---|
166 | ; xref AU603, AU604 pass the value 53.796 as PSBDD
|
---|
167 | ; xref AU703, AU704 pass the value 53.797 as PSBDD
|
---|
168 | ;
|
---|
169 | N PSBDT,PSBTMP
|
---|
170 | I '$D(PSBOLSTS) S PSBOLSTS=$P(^PSB(53.79,PSBREC,0),U,9)
|
---|
171 | I '$D(PSBOLDUZ) S PSBOLDUZ=$P(^PSB(53.79,PSBREC,0),U,5)
|
---|
172 | Q:$G(PSBDATA)=""!('$G(PSBAUDIT))
|
---|
173 | D NOW^%DTC S PSBDT=%
|
---|
174 | S PSBDATA=$$EXTERNAL^DILFD(PSBDD,PSBFLD,"",PSBDATA) ; PSBDD=53.79, 53.795, 53.796, or 53.797 see comment AUDIT
|
---|
175 | D FIELD^DID(PSBDD,PSBFLD,"","LABEL","PSBTMP") ; PSBDD=53.79, 53.795, 53.796, or 53.797 see comment AUDIT
|
---|
176 | S:'$D(^PSB(53.79,PSBREC,.9,0)) ^(0)="^53.799^^"
|
---|
177 | S Y=$O(^PSB(53.79,PSBREC,.9,""),-1)+1,X=""
|
---|
178 | I PSBTMP("LABEL")["ACTION STATUS" D Q
|
---|
179 | .I PSBSK["K" S XY=Y F S XY=$O(^PSB(53.79,PSBREC,.9,XY),-1) Q:($D(PSBGOON))!(+XY'>0) D
|
---|
180 | ..I ^PSB(53.79,PSBREC,.9,XY,0)["ACTION STATUS Set to '" D Q
|
---|
181 | ...S PSBGOON=1,PSBOLDUZ=$P(^PSB(53.79,PSBREC,.9,XY,0),U,2),X=$P(^PSB(53.79,PSBREC,.9,XY,0),"'",2)
|
---|
182 | .S:$L(X)'>2 X=PSBOLSTS,X=$S(X="G":"GIVEN",X="H":"HELD",X="R":"REFUSED",X="I":"INFUSING",X="C":"COMPLETED",X="S":"STOPPED",X="N":"NOT GIVEN",X="RM":"REMOVED",X="M":"MISSING DOSE",X="":PSBOLSTS)
|
---|
183 | .I PSBSK["K" S ^PSB(53.79,PSBREC,.9,Y,0)=PSBDT_U_DUZ_U_"Field: "_PSBTMP("LABEL")_" '"_PSBDATA_"' by '"_$$GET1^DIQ(200,PSBOLDUZ,"INITIAL")_"' deleted."
|
---|
184 | .E S ^PSB(53.79,PSBREC,.9,Y,0)=PSBDT_U_DUZ_U_"Field: "_PSBTMP("LABEL")_" Set to '"_PSBDATA_"' by '"_$$GET1^DIQ(200,DUZ,"INITIAL")_"'."_U_PSBDATA
|
---|
185 | I PSBSK["K" S ^PSB(53.79,PSBREC,.9,Y,0)=PSBDT_U_DUZ_U_"Field: "_PSBTMP("LABEL")_" '"_PSBDATA_"' deleted."
|
---|
186 | E S ^PSB(53.79,PSBREC,.9,Y,0)=PSBDT_U_DUZ_U_"Field: "_PSBTMP("LABEL")_$S(PSBTMP("LABEL")["DISPENSE DRUG":" Added '",1:" Set to '")_PSBDATA_"'."
|
---|
187 | K XY,PSBGOON
|
---|
188 | Q
|
---|
189 | ;
|
---|
190 | CHECK(RESULTS,PSBWHAT,PSBDATA) ; Checks for KIDS Patch or Build
|
---|
191 | ; Module added in Patch PSB*1.0*3 DP/TOPEKA 22-DEC-1999 11:51:22
|
---|
192 | ; PSBWHAT: B = Returns Build Version for packages by Namespace
|
---|
193 | ; P = Returns if Patch is installed
|
---|
194 | ; PSBDATA: Build/Package namespace (i.e. PSB) or Patch Number
|
---|
195 | ; (i.e. PSB*1.0*1)
|
---|
196 | ;
|
---|
197 | S RESULTS(0)="-1^Unknown Parameter "_$G(PSBWHAT,"<PSBWHAT Undefined>")
|
---|
198 | S PSBWHAT=$G(PSBWHAT),PSBDATA=$G(PSBDATA)
|
---|
199 | D:PSBWHAT="B"
|
---|
200 | .S X=$$VERSION^XPDUTL(PSBDATA)
|
---|
201 | .S RESULTS(0)=$S(X="":"-1^Unknown Package/Build",1:"1^"_X)
|
---|
202 | D:PSBWHAT="P"
|
---|
203 | .S X=$$PATCH^XPDUTL(PSBDATA)
|
---|
204 | .S RESULTS(0)=$S(X:"1^Patch Is Installed",1:"-1^Patch Is Not Installed")
|
---|
205 | Q
|
---|
206 | ;
|
---|
207 | VERSION() ; [Extrinsic]
|
---|
208 | ; Returns V#.# for display purposes
|
---|
209 | Q "V"_$J(2,0,1)
|
---|
210 | ;
|
---|
211 | RESETADM ;
|
---|
212 | ;
|
---|
213 | ; This Subroutine will reset a medication order's resources
|
---|
214 | ; based on Med Log New Entry or Edit Med Log activity.
|
---|
215 | ;
|
---|
216 | ; No input is necessary. Environment should be setup at call.
|
---|
217 | ;
|
---|
218 | I '$G(PSBMMEN) S X=$S($P(PSBIEN,",",2)]"":$P(PSBIEN,",",2),1:+PSBIEN) D CLEAN^PSBVT,PSJ1^PSBVT($P(^PSB(53.79,X,0),U),$P(^PSB(53.79,X,.1),U)) D:($$IVPTAB^PSBVDLU3(PSBOTYP,PSBIVT,PSBISYR,PSBCHEMT,+$G(PSBIVPSH))) D CLEAN^PSBVT
|
---|
219 | .S X=PSBIEN,X2=X_$S(X="+1":",",1:"") Q:'$D(PSBFDA(53.79,X2,.09)) I $F("HR",PSBFDA(53.79,X2,.09))>1 S PSBFDA(53.79,X2,.26)=""
|
---|
220 | I $G(PSBMMEN),PSBIEN="+1",$G(PSBONX)["V" S PSBWSID=PSBFDA(53.79,"+1,",.26) K PSBFDA(53.79,"+1,",.26),PSBFDA(53.79,"+1,",.09)
|
---|
221 | I $G(PSBMMEN) I ($D(PSBWSID))&($G(Y(0))="SAVE") D
|
---|
222 | .S:(PSBREC(3)="G") PSBFDAX(53.79,X,.26)=PSBWSID
|
---|
223 | .S:$F("HR",PSBREC(3))>1 PSBFDAX(53.79,X,.26)=""
|
---|
224 | .S X=$P(PSBIEN,"+1,",2)
|
---|
225 | .D UPDATE^DIE("","PSBFDAX","X","PSBMSG")
|
---|
226 | Q
|
---|
227 | ;
|
---|
228 | SCRNPTCH ;
|
---|
229 | ;
|
---|
230 | ; Maintain the "APATCH" index from SCREENMAN and Manual Med Entry.
|
---|
231 | ;
|
---|
232 | I Y(0)'="GIVEN" S PSBGPTCH=0 Q
|
---|
233 | S PSBX=0 F S PSBX=$O(^PSB(53.79,DA,.5,PSBX)) Q:+PSBX=0 Q:$P(^PSB(53.79,DA,.5,+PSBX,0),U,4)="PATCH"
|
---|
234 | Q:+PSBX=0
|
---|
235 | S PSBGPTCH=1
|
---|
236 | Q
|
---|
237 | ;
|
---|
238 | GIVEPTCH ;
|
---|
239 | I $D(^PSB(53.79,"AORD",DFN,PSBONX)) N PSBX S PSBX="" F S PSBX=$O(^PSB(53.79,"AORD",DFN,PSBONX,PSBX)) Q:+PSBX=0 D:$D(^PSB(53.79,"AORD",DFN,PSBONX,PSBX,DA)) Q:'$D(PSBX)
|
---|
240 | .I $D(^PSB(53.79,"AORD",DFN,PSBONX,PSBX,DA)) D
|
---|
241 | ..S PSBX=$P(^PSB(53.79,DA,0),U,6)
|
---|
242 | ..I PSBGPTCH S ^PSB(53.79,"APATCH",DFN,PSBX,DA)="" K PSBX,PSBGPTCH Q
|
---|
243 | ..I 'PSBGPTCH K ^PSB(53.79,"APATCH",DFN,PSBX,DA),PSBX,PSBGPTCH
|
---|
244 | Q
|
---|