1 | PSBVDLU3 ;BIRMINGHAM/TEJ-BCMA VDL UTILITIES 3 ;Mar 2004
|
---|
2 | ;;3.0;BAR CODE MED ADMIN;**13,38**;Mar 2004;Build 8
|
---|
3 | ;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ;This routine file has been created to serve as a container
|
---|
6 | ;for Extrinsic Variables/Functions
|
---|
7 | ;
|
---|
8 | ; Reference/IA
|
---|
9 | ; EN^PSJBCMA/2828
|
---|
10 | ;
|
---|
11 | IVPTAB(PSBORTYP,PSBIVTYP,PSBINTSY,PSBCHMTY,PSBPUSH) ;
|
---|
12 | ;
|
---|
13 | ; This function will return
|
---|
14 | ; the value 1 (one) if the
|
---|
15 | ; specified order input will cause
|
---|
16 | ; the order to display on the "IVP/IVPB"
|
---|
17 | ; tab of the VDL BCMA Virtual Due List (VDL)
|
---|
18 | ; else return the value 0 (zero).
|
---|
19 | ;
|
---|
20 | ; Input Parameters:
|
---|
21 | ;
|
---|
22 | ; PSBORTYP - Order type (e.g. "U","V")
|
---|
23 | ; PSBIVTYP - IV Type (e.g. "P","S","C")
|
---|
24 | ; PSBINTSY - Intermittent Syringe value
|
---|
25 | ; PSBCHMTY - Chemo type (e.g. "P","S")
|
---|
26 | ; PSBPUSH - IV PUSH Flag (e.g. 0 or 1, 1=IV PUSH)
|
---|
27 | ;
|
---|
28 | ; Output:
|
---|
29 | ; 1 - order will display on the "IVP/IVPB" Tab of BCMA VDL
|
---|
30 | ; 0 - order will NOT display on the "IVP/IVPB" Tab of BCMA VDL
|
---|
31 | ; -1 - error processed
|
---|
32 | ;
|
---|
33 | Q:'$D(PSBORTYP) "-1^Missing Parameter"
|
---|
34 | I PSBORTYP="U"&(PSBPUSH) Q 1
|
---|
35 | I '(PSBORTYP="V") Q 0
|
---|
36 | I $G(PSBIVTYP)="P" Q 1
|
---|
37 | I $G(PSBIVTYP)="S",$G(PSBINTSY)=1 Q 1
|
---|
38 | I $G(PSBIVTYP)="C",$G(PSBCHMTY)="P" Q 1
|
---|
39 | I $G(PSBIVTYP)="C",$G(PSBCHMTY)="S",$G(PSBINTSY)=1 Q 1
|
---|
40 | Q 0
|
---|
41 | ;
|
---|
42 | SHOVDL(DFN,BDATE,OTDATE,PSBTAB) ;
|
---|
43 | ;
|
---|
44 | ; This function will find orders such as discontinued or expired infusing IV bags
|
---|
45 | ; or discontinued or expired "given" patches. Recognizing these types of orders
|
---|
46 | ; will allow these orders to be displayed on the VDL and permits the user to take
|
---|
47 | ; action on them. This routine determines if such orders exist for patient,
|
---|
48 | ; time, and "BCMA VDL tab." This routine is an "extention" to the API EN^PSJBCMA.
|
---|
49 | ;
|
---|
50 | ; INPUT Parameters:
|
---|
51 | ; DFN (req) Patient Internal File Number.
|
---|
52 | ; BDATE (opt) Start searching for "order stop" after this date.
|
---|
53 | ; OTDATE (opt) Include One-Time orders from this date.
|
---|
54 | ; PSBTAB (opt) "UDTAB" or "IVTAB" - expedites process if specific tab
|
---|
55 | ; is given.
|
---|
56 | ;
|
---|
57 | ; OUTPUT Values
|
---|
58 | ; 0 absolutely no orders to display on VDL
|
---|
59 | ; 1 displayable orders have been located.
|
---|
60 | ;
|
---|
61 | ;
|
---|
62 | D EN^PSJBCMA(DFN,$G(BDATE),$G(OTDATE))
|
---|
63 | ; any active Patch orders to show on VDL?
|
---|
64 | S PSBFLG=0
|
---|
65 | I $G(^TMP("PSJ",$J,1,0))=-1 D
|
---|
66 | .;
|
---|
67 | .; Check the indexice for given patches or infusing IVs
|
---|
68 | .;
|
---|
69 | .; Check APATCH
|
---|
70 | .D:($G(PSBTAB)="UDTAB")!($G(PSBTAB)="") Q:PSBFLG
|
---|
71 | ..S PSBGNODE="^PSB(53.79,"_"""APATCH"""_","_DFN_")" Q:'$D(PSBGNODE)
|
---|
72 | ..F S PSBGNODE=$Q(@PSBGNODE) Q:PSBGNODE="" Q:$QS(PSBGNODE,3)'=DFN Q:PSBFLG S PSBIEN=$QS(PSBGNODE,5),PSBFLG=$S($P(^PSB(53.79,PSBIEN,0),U,9)="G":1,1:0)
|
---|
73 | .;
|
---|
74 | .; Check AUID
|
---|
75 | .;
|
---|
76 | .D:(($G(PSBTAB)="IVTAB")!($G(PSBTAB)=""))&('PSBFLG) Q:PSBFLG
|
---|
77 | ..S PSBGNODE="^PSB(53.79,"_"""AUID"""_","_DFN_")" Q:'$D(PSBGNODE)
|
---|
78 | ..F S PSBGNODE=$Q(@PSBGNODE) Q:PSBGNODE="" Q:$QS(PSBGNODE,3)'=DFN Q:PSBFLG S PSBIEN=$QS(PSBGNODE,6),PSBFLG=$S($P(^PSB(53.79,PSBIEN,0),U,9)="I":1,1:0)
|
---|
79 | .;
|
---|
80 | .; NOTE: Infusing bags will not display if DCed more than 3 days ago!
|
---|
81 | .;
|
---|
82 | S:$G(^TMP("PSJ",$J,1,0))'=-1 PSBFLG=1
|
---|
83 | ;
|
---|
84 | Q PSBFLG
|
---|
85 | ;
|
---|
86 | FNDACTV(RESULTS,PARAMS) ; Utility to check and order for the latest " ? (parameter #3) " order activities per patient (parameter #1)
|
---|
87 | ; #parameter= # "^"piece
|
---|
88 | ; #1 DFN - Patient's IEN e.g. 1234 (required)
|
---|
89 | ; #2 Order Number_Order Type e.g. "1V" "" = all orders
|
---|
90 | ; #3 Search for Activity e.g. "H" "" = *unknown* activity
|
---|
91 | ; #4 Search "back"time(hours) e.g. 12 "" = search back 3 admins
|
---|
92 | ; NOTE: ="FREQ" This Function will use order's frequency.
|
---|
93 | ; 1. If the order is a PRN, On Call or One-Time
|
---|
94 | ; the look back a default of 72 hours.
|
---|
95 | ; 2. if the order is a Continuous order key off
|
---|
96 | ; of the frequency as follows.
|
---|
97 | ; a.) if the frequency is <24 hours use the
|
---|
98 | ; default of 72 hours.
|
---|
99 | ; b.) if the frequency is >= 24 hour, look back
|
---|
100 | ; 3.5 times the frequency
|
---|
101 | ; NOTE: ["X#" This Function will search back # of admins.
|
---|
102 | ;
|
---|
103 | ; Example call: D FNDACTV^PSBVDLU3(.results,"1234^1U^H^12")
|
---|
104 | ;
|
---|
105 | ;
|
---|
106 | N PSBNOW,PSBDFN,PSBON,PSBCNT,PSBACT,PSBTMFRM,PSBX,PSBSET,PSBFRQ
|
---|
107 | K RESULTS
|
---|
108 | S PSBDFN=$P(PARAMS,U),PSBON=$P(PARAMS,U,2),PSBACT=$P(PARAMS,U,3),PSBTMFRM=$P(PARAMS,U,4)
|
---|
109 | S RESULTS(0)=1
|
---|
110 | I $G(PSBDFN)']"" S RESULTS(0)=1,RESULTS(1)="-1^ERROR - MISSING PARAMETER (DFN REQ.)" Q
|
---|
111 | I $G(PSBTMFRM)="" S PSBX=3
|
---|
112 | I $G(PSBTMFRM)["X" S PSBX=+($P(PSBTMFRM,"X",2)),PSBTMFRM=""
|
---|
113 | I $G(PSBTMFRM)]"",$G(PSBTMFRM)'["FREQ" D NOW^%DTC S PSBNOW=% S PSBTMFRM=$$FMADD^XLFDT(PSBNOW,"",-1*PSBTMFRM),PSBSET=1 S RESULTS(1)="0^ None found after "_PSBTMFRM
|
---|
114 | I $G(PSBX)="" S PSBX=9999999
|
---|
115 | D:$G(PSBON)'=""
|
---|
116 | .K ^TMP("PSJ",$J) D EN^PSJBCMA1(PSBDFN,PSBON)
|
---|
117 | .;Maintain Time Frame and other order information
|
---|
118 | .I $G(PSBTMFRM)["FREQ" D
|
---|
119 | ..S PSBFRQ=+$P(^TMP("PSJ",$J,4),"^",11) I PSBFRQ=0 S PSBFRQ=1440
|
---|
120 | ..I "P^OC^O^"[($P(^TMP("PSJ",$J,4),"^")_"^") S PSBTMFRM=72 Q
|
---|
121 | ..I (PSBFRQ/60)<24 S PSBTMFRM=72 Q
|
---|
122 | ..I (PSBFRQ/60)'<24 S PSBTMFRM=(PSBFRQ/60)*3.5
|
---|
123 | .I '$G(PSBSET) D NOW^%DTC S PSBNOW=% S PSBTMFRM=$$FMADD^XLFDT(PSBNOW,"",-1*PSBTMFRM) S RESULTS(1)="0^ None found after "_PSBTMFRM
|
---|
124 | .S I="",X=0 F S I=$O(^PSB(53.79,"AORDX",PSBDFN,PSBON,I),-1) Q:(I="")!(I<$S(PSBTMFRM]"":PSBTMFRM,1:-1)) D Q:X
|
---|
125 | ..S Z=0,J="",PSBCNT=0 F S J=$O(^PSB(53.79,"AORDX",PSBDFN,PSBON,I,J),-1) Q:(J="") S Z=Z+1 Q:Z>PSBX D Q:X
|
---|
126 | ...L +^PSB(53.79,J):1
|
---|
127 | ...I L -^PSB(53.79,J)
|
---|
128 | ...E Q
|
---|
129 | ...I ($P(^PSB(53.79,J,0),U,9)=PSBACT) S X=1 D
|
---|
130 | ....S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)=$$GET1^DIQ(53.79,J_",",.02)
|
---|
131 | ....S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)=$P(^TMP("PSJ",$J,2),U,2)_"^"_($$GET1^DIQ(53.79,J_",",.11))
|
---|
132 | ....S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)=$$GET1^DIQ(53.79,J_",",.06,"I")
|
---|
133 | ....S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)=$$GET1^DIQ(53.79,J_",",.13,"I")
|
---|
134 | D:$G(PSBON)=""
|
---|
135 | .S Z="",X=0 F S Z=$O(^PSB(53.79,"AORDX",PSBDFN,Z),-1) Q:(Z="") S PSBON=Z D Q:X
|
---|
136 | ..;Maintain Time Frame and other order information
|
---|
137 | ..K ^TMP("PSJ",$J) D EN^PSJBCMA1(PSBDFN,PSBON)
|
---|
138 | ..I $G(PSBTMFRM)["FREQ" D
|
---|
139 | ...S PSBFRQ=+$P(^TMP("PSJ",$J,4),"^",11) I PSBFRQ=0 S PSBFRQ=1440
|
---|
140 | ...I "P^OC^O^"[($P(^TMP("PSJ",$J,4),"^")_"^") S PSBTMFRM=72 Q
|
---|
141 | ...I (PSBFRQ/60)<24 S PSBTMFRM=72 Q
|
---|
142 | ...I (PSBFRQ/60)'<24 S PSBTMFRM=(PSBFRQ/60)*3.5
|
---|
143 | ..I '$G(PSBSET) D NOW^%DTC S PSBNOW=% S PSBTMFRM=$$FMADD^XLFDT(PSBNOW,"",-1*PSBTMFRM) S RESULTS(1)="0^ None found after "_PSBTMFRM
|
---|
144 | ..S I="" F S I=$O(^PSB(53.79,"AORDX",PSBDFN,PSBON,I),-1) Q:(I="")!(I<$S(PSBTMFRM]"":PSBTMFRM,1:-1)) D Q:X
|
---|
145 | ...S ZZ=0,J="",PSBCNT=0 F S J=$O(^PSB(53.79,"AORDX",PSBDFN,PSBON,I,J),-1) Q:(J="") S ZZ=ZZ+1 Q:ZZ>PSBX D Q:X
|
---|
146 | ....L +^PSB(53.79,J):1
|
---|
147 | ....I L -^PSB(53.79,J)
|
---|
148 | ....E Q
|
---|
149 | ....I ($P(^PSB(53.79,J,0),U,9)=PSBACT) S X=1 D
|
---|
150 | .....S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)=$$GET1^DIQ(53.79,J_",",.02)
|
---|
151 | .....S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)=$P(^TMP("PSJ",$J,2),U,2)_"^"_($$GET1^DIQ(53.79,J_",",.11))
|
---|
152 | .....S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)=$$GET1^DIQ(53.79,J_",",.06,"I")
|
---|
153 | .....S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)=$$GET1^DIQ(53.79,J_",",.13,"I")
|
---|
154 | I $G(PSBCNT)>0 S RESULTS(0)=PSBCNT
|
---|
155 | K ^TMP("PSJ",$J)
|
---|
156 | Q
|
---|
157 | ;
|
---|