1 | ORWORB ; slc/dee/REV/CLA - RPC functions which return user alert ;10:12 am JAN 31, 2001
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,116,148,173,190,215**;Dec 17, 1997
|
---|
3 | ;
|
---|
4 | URGENLST(ORY) ;return array of the urgency for the notification
|
---|
5 | N ORSRV,ORERROR
|
---|
6 | S ORSRV=$G(^VA(200,DUZ,5)) I +ORSRV>0 S ORSRV=$P(ORSRV,U)
|
---|
7 | D GETLST^XPAR(.ORY,"USR^SRV.`"_$G(ORSRV)_"^DIV^SYS^PKG","ORB URGENCY","I",.ORERROR)
|
---|
8 | Q
|
---|
9 | ;
|
---|
10 | FASTUSER(ORY) ;return current user's notifications across all patients
|
---|
11 | N STRTDATE,STOPDATE,ORTOT,I,ORURG,URG,ORN,SORT,ORN0,URGLIST,REMLIST,REM,NONORLST,NONOR
|
---|
12 | N ALRT,ALRTDT,ALRTPT,ALRTMSG,ALRTI,ALRTLOC,ALRTXQA,J,FWDBY,PRE,ALRTDFN
|
---|
13 | K ^TMP("ORBG",$J)
|
---|
14 | S STRTDATE="",STOPDATE="",FWDBY="Forwarded by: "
|
---|
15 | D GETUSER1^XQALDATA("^TMP(""ORB"",$J)",DUZ,STRTDATE,STOPDATE)
|
---|
16 | S ORTOT=^TMP("ORB",$J)
|
---|
17 | D URGLIST^ORQORB(.URGLIST)
|
---|
18 | D REMLIST^ORQORB(.REMLIST)
|
---|
19 | D REMNONOR^ORQORB(.NONORLST)
|
---|
20 | S J=0
|
---|
21 | F I=1:1:ORTOT D
|
---|
22 | .S ALRTDFN=""
|
---|
23 | .S ALRT=^TMP("ORB",$J,I)
|
---|
24 | .S PRE=$E(ALRT,1,1)
|
---|
25 | .S ALRTXQA=$P(ALRT,U,2) ;XQAID
|
---|
26 | .S NONOR="" F S NONOR=$O(NONORLST(NONOR)) Q:NONOR="" D
|
---|
27 | ..I ALRTXQA[NONOR S REM=1 ;allow this type of alert to be Removed
|
---|
28 | .S ALRTMSG=$P($P(ALRT,U),PRE_" ",2)
|
---|
29 | .I $E(ALRT,4,8)'="-----" D ;not forwarded alert info/comment
|
---|
30 | ..S ORURG="n/a"
|
---|
31 | ..S ALRTI=$P(ALRT," ")
|
---|
32 | ..S ALRTPT=""
|
---|
33 | ..S ALRTLOC=""
|
---|
34 | ..I $E($P(ALRTXQA,";"),1,3)="TIU" S ORURG="Moderate"
|
---|
35 | ..I $P(ALRTXQA,",")="OR" D
|
---|
36 | ...S ORN=$P($P(ALRTXQA,";"),",",3)
|
---|
37 | ...S URG=$G(URGLIST(ORN))
|
---|
38 | ...S ORURG=$S(URG=1:"HIGH",URG=2:"Moderate",1:"low")
|
---|
39 | ...S REM=$G(REMLIST(ORN))
|
---|
40 | ...S ORN0=^ORD(100.9,ORN,0)
|
---|
41 | ...S ALRTI=$S($P(ORN0,U,6)="INFODEL":"I",1:"")
|
---|
42 | ...S ALRTDFN=$P(ALRTXQA,",",2)
|
---|
43 | ...S ALRTLOC=$G(^DPT(+$G(ALRTDFN),.1))
|
---|
44 | ..S ALRTI=$S(ALRTI="I":"I",1:"")
|
---|
45 | ..I ALRT["): " D
|
---|
46 | ...S ALRTPT=$P(ALRT,": ")
|
---|
47 | ...S ALRTPT=$E(ALRTPT,4,$L(ALRTPT))
|
---|
48 | ...S ALRTMSG=$P($P(ALRT,U),"): ",2)
|
---|
49 | ...I $E(ALRTMSG,1,1)="[" D
|
---|
50 | ....S:'$L(ALRTLOC) ALRTLOC=$P($P(ALRTMSG,"]"),"[",2)
|
---|
51 | ....S ALRTMSG=$P(ALRTMSG,"] ",2)
|
---|
52 | ..I '$L($G(ALRTPT)) S ALRTPT="no patient"
|
---|
53 | ..S ALRTDT=$P(ALRTXQA,";",3)
|
---|
54 | ..S ALRTDT=$P(ALRTDT,".")_"."_$E($P(ALRTDT,".",2)_"0000",1,4)
|
---|
55 | ..S ALRTDT=$E(ALRTDT,4,5)_"/"_$E(ALRTDT,6,7)_"/"_($E(ALRTDT,1,3)+1700)_"@"_$E($P(ALRTDT,".",2),1,2)_":"_$E($P(ALRTDT,".",2),3,4)
|
---|
56 | ..;S ALRTDT=($E(ALRTDT,1,3)+1700)_"/"_$E(ALRTDT,4,5)_"/"_$E(ALRTDT,6,7)_"@"_$E($P(ALRTDT,".",2),1,2)_":"_$E($P(ALRTDT,".",2),3,4)
|
---|
57 | ..S J=J+1,^TMP("ORBG",$J,J)=ALRTI_U_ALRTPT_U_ALRTLOC_U_ORURG_U_ALRTDT_U
|
---|
58 | ..S ^TMP("ORBG",$J,J)=^TMP("ORBG",$J,J)_ALRTMSG_U_U_ALRTXQA_U_$G(REM)_U
|
---|
59 | .;
|
---|
60 | .;if alert forward info/comment:
|
---|
61 | .I $E(ALRTMSG,1,5)="-----" D
|
---|
62 | ..S ALRTMSG=$P(ALRTMSG,"-----",2)
|
---|
63 | ..I $E(ALRTMSG,1,14)=FWDBY D
|
---|
64 | ...S J=J+1,^TMP("ORBG",$J,J)=FWDBY_U_$P($P(ALRTMSG,FWDBY,2),"Generated: ")_$P($P(ALRTMSG,FWDBY,2),"Generated: ",2)
|
---|
65 | ..E S ^TMP("ORBG",$J,J)=^TMP("ORBG",$J,J)_U_""""_ALRTMSG_""""
|
---|
66 | S ^TMP("ORBG",$J)=""
|
---|
67 | S ORY=$NA(^TMP("ORBG",$J))
|
---|
68 | Q
|
---|
69 | ;
|
---|
70 | GETDATA(ORY,XQAID) ; return XQADATA for an alert
|
---|
71 | N SHOWADD
|
---|
72 | S ORY=""
|
---|
73 | Q:$G(XQAID)=""!('$D(^XTV(8992,"AXQA",XQAID)))
|
---|
74 | D GETACT^XQALERT(XQAID)
|
---|
75 | S ORY=XQADATA
|
---|
76 | I ($E(XQAID,1,3)="TIU"),(+ORY>0) D
|
---|
77 | . S SHOWADD=1
|
---|
78 | . S ORY=ORY_$$RESOLVE^TIUSRVLO(+ORY)
|
---|
79 | K XQAID,XQADATA,XQAOPT,XQAROU
|
---|
80 | Q
|
---|
81 | ;
|
---|
82 | KILUNSNO(Y,ORVP) ; Delete unsigned order alerts if no unsigned orders remaining
|
---|
83 | S ORVP=ORVP_";DPT("
|
---|
84 | D UNOTIF^ORCSIGN
|
---|
85 | Q
|
---|
86 | ;
|
---|
87 | UNFLORD(Y,DFN,XQAID) ; -- auto-unflag orders?/delete alert
|
---|
88 | Q:'$L(DFN)!('$L(XQAID))
|
---|
89 | N ORI,ORIFN,ORA,XQAKILL,ORN,ORBY,ORAUTO,ORUNF
|
---|
90 | S ORN=+$O(^ORD(100.9,"B","FLAGGED ORDERS",0))
|
---|
91 | S XQAKILL=$$XQAKILL^ORB3F1(ORN)
|
---|
92 | D LIST^ORQOR1(.ORBY,DFN,"ALL",12,"","")
|
---|
93 | S ORAUTO=+$$GET^XPAR("ALL","ORPF AUTO UNFLAG")
|
---|
94 | S ORI=0 F S ORI=$O(ORBY(ORI)) Q:ORI'>0 D
|
---|
95 | . I ORAUTO D ; unflag
|
---|
96 | . . S ORUNF=+$E($$NOW^XLFDT,1,12)_U_DUZ_"^Auto-Unflagged"
|
---|
97 | . . S ORIFN=$P(ORBY(ORI),U),ORA=+$P(ORIFN,";",2)
|
---|
98 | . . I ORIFN,$D(^OR(100,+ORIFN,0)) S $P(^(8,ORA,3),U)=0,$P(^(3),U,6,8)=ORUNF ; unflag
|
---|
99 | I ORAUTO!(+$G(ORBY(1))=0) D DELETE^XQALERT
|
---|
100 | Q
|
---|
101 | KILEXMED(Y,ORDFN) ; -- Delete expiring meds notification if no expiring meds remaining
|
---|
102 | N ORDG,ORLST S ORDG=$$DG^ORQOR1("RX")
|
---|
103 | D AGET^ORWORR(.ORLST,ORDFN,5,ORDG)
|
---|
104 | Q:+(@ORLST@(.1)) ;more left
|
---|
105 | N XQAKILL,ORNIFN,ORVP,ORIO S OROI=""
|
---|
106 | F OROI="INPT","OUTPT" D
|
---|
107 | .S ORNIFN=$O(^ORD(100.9,"B","MEDICATIONS EXPIRING - "_OROI,0)),ORVP=ORDFN_";DPT("
|
---|
108 | .Q:'$L($G(ORNIFN))
|
---|
109 | .S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN) ; expiring meds notif
|
---|
110 | .I $D(XQAID) D DELETE^XQALERT
|
---|
111 | .I '$D(XQAID) S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN D DELETEA^XQALERT K XQAID
|
---|
112 | Q
|
---|
113 | KILEXOI(Y,ORDFN,ORNIFN) ; -- Delete expiring flagged OI notification if no flagged expiring OI remaining
|
---|
114 | N ORDG,ORLST S ORDG=$$DG^ORQOR1("ALL")
|
---|
115 | D AGET^ORWORR(.ORLST,ORDFN,5,ORDG)
|
---|
116 | Q:+(@ORLST@(.1)) ;more left
|
---|
117 | N XQAKILL,ORVP
|
---|
118 | S ORVP=ORDFN_";DPT("
|
---|
119 | S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN) ; flagged expiring OI notifications
|
---|
120 | I $D(XQAID) D DELETE^XQALERT
|
---|
121 | I '$D(XQAID) S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN D DELETEA^XQALERT K XQAID
|
---|
122 | Q
|
---|
123 | KILUNVOR(Y,ORDFN) ; -- Delete UNVERIFIED ORDER notification if none remaining within current admission/30 days
|
---|
124 | N DFN,ORDG,ORLST,ORBDT,OREDT,ORDDT S ORDG=$$DG^ORQOR1("ALL")
|
---|
125 | S OREDT=$$NOW^XLFDT
|
---|
126 | S ORDDT=$$FMADD^XLFDT(OREDT,"-90")
|
---|
127 | ;get current admission date/time:
|
---|
128 | S DFN=ORDFN,VA200="" D INP^VADPT
|
---|
129 | S ORBDT=$P($G(VAIN(7)),U)
|
---|
130 | S ORBDT=$S('$L($G(ORBDT)):$$FMADD^XLFDT(OREDT,"-30"),1:ORBDT) ;<= if no admission use past 30 days
|
---|
131 | S ORBDT=$S(ORDDT>ORBDT:ORDDT,1:ORBDT) ;max past days to use is 90 days
|
---|
132 | D AGET^ORWORR(.ORLST,ORDFN,9,ORDG,ORBDT,OREDT)
|
---|
133 | Q:+(@ORLST@(.1)) ;more left
|
---|
134 | N XQAKILL,ORVP,ORNIFN
|
---|
135 | S ORNIFN=$O(^ORD(100.9,"B","UNVERIFIED ORDER",0)),ORVP=ORDFN_";DPT("
|
---|
136 | S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN)
|
---|
137 | I $D(XQAID) D DELETE^XQALERT
|
---|
138 | I '$D(XQAID) S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN D DELETEA^XQALERT K XQAID
|
---|
139 | Q
|
---|
140 | KILUNVMD(Y,ORDFN) ; -- Delete UNVERIFIED MEDS notification if none remaining within current admission/30 days
|
---|
141 | N DFN,ORDG,ORLST,ORBDT,OREDT,ORDDT S ORDG=$$DG^ORQOR1("RX")
|
---|
142 | S OREDT=$$NOW^XLFDT
|
---|
143 | S ORDDT=$$FMADD^XLFDT(OREDT,"-90")
|
---|
144 | ;get current admission date/time:
|
---|
145 | S DFN=ORDFN,VA200="" D INP^VADPT
|
---|
146 | S ORBDT=$P($G(VAIN(7)),U)
|
---|
147 | S ORBDT=$S('$L($G(ORBDT)):$$FMADD^XLFDT(OREDT,"-30"),1:ORBDT) ;<= if no admission use past 30 days
|
---|
148 | S ORBDT=$S(ORDDT>ORBDT:ORDDT,1:ORBDT) ;max past days to use is 90 days
|
---|
149 | D AGET^ORWORR(.ORLST,ORDFN,9,ORDG,ORBDT,OREDT)
|
---|
150 | Q:+(@ORLST@(.1)) ;more left
|
---|
151 | N XQAKILL,ORVP,ORNIFN
|
---|
152 | S ORNIFN=$O(^ORD(100.9,"B","UNVERIFIED MEDICATION ORDER",0)),ORVP=ORDFN_";DPT("
|
---|
153 | S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN)
|
---|
154 | I $D(XQAID) D DELETE^XQALERT
|
---|
155 | I '$D(XQAID) S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN D DELETEA^XQALERT K XQAID
|
---|
156 | Q
|
---|
157 | ESORD(ORY,XQAID) ;order(s) requiring electronic signature follow-up
|
---|
158 | K XQAKILL
|
---|
159 | N ORPT,ORDG,ORBXQAID,ORY,ORX,ORZ,ORDERS,ORDNUM,ORQUIT,ORBLMDEL
|
---|
160 | S ORBXQAID=XQAID,ORDERS=0,ORQUIT=0
|
---|
161 | S ORPT=$P($P(XQAID,";"),",",2) ;get pt dfn from xqaid
|
---|
162 | S ORDG=$$DG^ORQOR1("ALL")
|
---|
163 | ;the FLG code for UNSIGNED orders in ORQ1 is '11'
|
---|
164 | ;get unsigned orders - if none exist, delete alert then quit:
|
---|
165 | D EN^ORQ1(ORPT_";DPT(",ORDG,11,"","","",0,0)
|
---|
166 | S ORX="",ORX=$O(^TMP("ORR",$J,ORX)) Q:ORX="" I +$G(^TMP("ORR",$J,ORX,"TOT"))<1 D DEL^ORB3FUP1(.ORY,ORBXQAID) K ^TMP("ORR",$J) Q
|
---|
167 | ;
|
---|
168 | ;user does not have ORES key, delete user's alert:
|
---|
169 | I '$D(^XUSEC("ORES",DUZ)) S XQAKILL=1 D DEL^ORB3FUP1(.ORY,ORBXQAID) K ^TMP("ORR",$J) Q
|
---|
170 | ;
|
---|
171 | ;if prov is NOT linked to pt via attending, primary or teams:
|
---|
172 | I $$PPLINK^ORQPTQ1(DUZ,ORPT)=0 D
|
---|
173 | .S ORX="" F S ORX=$O(^TMP("ORR",$J,ORX)) Q:ORX=""!(ORDERS=1) D
|
---|
174 | ..S ORZ="" F S ORZ=$O(^TMP("ORR",$J,ORX,ORZ)) Q:+ORZ=0!(ORDERS=1) D
|
---|
175 | ...S ORDNUM=^TMP("ORR",$J,ORX,ORZ)
|
---|
176 | ...;quit if this unsigned order's last action was made by the user
|
---|
177 | ...I DUZ=+$$UNSIGNOR^ORQOR2(ORDNUM) S ORDERS=1
|
---|
178 | .I ORDERS'=1 D ;provider has no outstanding unsigned orders for pt
|
---|
179 | ..S XQAKILL=1 D DEL^ORB3FUP1(.ORY,ORBXQAID) ;delete alert for this user
|
---|
180 | K ^TMP("ORR",$J)
|
---|
181 | Q
|
---|
182 | ;
|
---|
183 | TXTFUP(ROOT,DFN,NOTIF,XQADATA) ; Follow-up for text messages
|
---|
184 | ;
|
---|
185 | I NOTIF=67 D CHGRAD
|
---|
186 | Q
|
---|
187 | ;
|
---|
188 | CHGRAD ;GUI follow-up for Imaging Request Changed (#67)
|
---|
189 | S ROOT=$NA(^TMP($J,"RAE4"))
|
---|
190 | K @ROOT
|
---|
191 | D SET1^RAO7PC4 ;DBIA #3563
|
---|
192 | Q
|
---|
193 | ;
|
---|
194 | GETSORT(ORY) ;return notification sort method^direction for user/division/system/pkg
|
---|
195 | S ORY=$$GET^XPAR("ALL","ORB SORT METHOD",1,"I")_U_$$GET^XPAR("ALL","ORB SORT DIRECTION",1,"I")
|
---|
196 | Q
|
---|
197 | ;
|
---|
198 | SETSORT(ORERR,SORT,DIR) ;set notification sort method^direction for user
|
---|
199 | D EN^XPAR(DUZ_";VA(200,","ORB SORT METHOD",1,SORT,.ORERR)
|
---|
200 | I $L($G(DIR)) D EN^XPAR(DUZ_";VA(200,","ORB SORT DIRECTION",1,DIR,.ORERR)
|
---|
201 | Q
|
---|