1 | ORB3SPEC ; slc/CLA - Support routine for ORB3 ;4/4/02 14:40
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**139,220,215**;Dec 17, 1997
|
---|
3 | SPECIAL(ORN,ORBASPEC,ORBU,ORBUI,ORNUM,ORDFN,ORDATA,ORBSMSG,ORBMSG,ORBSDEV,ORBPRIM,ORBATTD) ;
|
---|
4 | ;process special notifs to get recips (users,teams,devices)
|
---|
5 | ; ORN: notif ien
|
---|
6 | ; ORBASPEC: recip DUZ array
|
---|
7 | ; ORBU: recip debug array
|
---|
8 | ; ORBUI: ORBU cntr
|
---|
9 | ; ORNUM: order no
|
---|
10 | ; ORDFN: pt id
|
---|
11 | ; ORDATA: pkg data
|
---|
12 | ; ORBSMSG: special notif msg rtn by SPECIAL
|
---|
13 | ; ORBMSG: original notif msg
|
---|
14 | ; ORBSDEV: array of recip devices
|
---|
15 | ; ORBPRIM: pt's inpt primary care provider
|
---|
16 | ; ORBATTD: pt's attending physician
|
---|
17 | ;
|
---|
18 | N ORPAR,ORPTLOC
|
---|
19 | S ORPTLOC=$S($L($G(^DPT(ORDFN,.1))):"I",1:"O") ;DBIA #10035
|
---|
20 | ;
|
---|
21 | I ORPTLOC="I" D ;inpt flagged OI notifs
|
---|
22 | .I ORN=32 S ORPAR="ORB OI RESULTS - INPT" D OI
|
---|
23 | .I ORN=41 S ORPAR="ORB OI ORDERED - INPT" D OI
|
---|
24 | .I ORN=64 S ORPAR="ORB OI EXPIRING - INPT" D OI
|
---|
25 | ;
|
---|
26 | I ORPTLOC="O" D ;outpt flagged OI notifs
|
---|
27 | .I ORN=60 S ORPAR="ORB OI RESULTS - OUTPT" D OI
|
---|
28 | .I ORN=61 S ORPAR="ORB OI ORDERED - OUTPT" D OI
|
---|
29 | .I ORN=65 S ORPAR="ORB OI EXPIRING - OUTPT" D OI
|
---|
30 | ;
|
---|
31 | I ORN=3!(ORN=14)!(ORN=44)!(ORN=57) D ;lab results notifs
|
---|
32 | .D LRALRTS(ORN,ORDFN,ORDATA,.ORBSMSG,ORBMSG)
|
---|
33 | ;
|
---|
34 | I ORN=33 D ;requested results notif
|
---|
35 | .I $D(ORBU) D
|
---|
36 | ..S ORBU(ORBUI)=" ",ORBUI=ORBUI+1
|
---|
37 | ..S ORBU(ORBUI)="Potential Orderer-flagged Results recipient: ",ORBUI=ORBUI+1
|
---|
38 | .N RECIP
|
---|
39 | .S RECIP=$$RSLTFLG^ORQOR2(ORNUM)
|
---|
40 | .I +$G(RECIP)>0 D
|
---|
41 | ..S ORBASPEC(+$G(RECIP))=""
|
---|
42 | ..I $D(ORBU) N NODE S NODE=$G(^VA(200,+$G(RECIP),0)) I $L(NODE) D
|
---|
43 | ...S ORBU(ORBUI)=" "_$P(NODE,U)_" is a potential recipient.",ORBUI=ORBUI+1
|
---|
44 | Q
|
---|
45 | OI ;get potential recips for OI-flagged notifs
|
---|
46 | N OROI,ORLST,ORERR,ORBX,ORBZ,ORBE,ORBDUZ,ORBDEV,ORBUF
|
---|
47 | S OROI=+$G(^OR(100,+$G(ORNUM),.1,1,0)) ;get oi
|
---|
48 | Q:+$G(OROI)<0
|
---|
49 | I $D(ORBU) D
|
---|
50 | .S ORBU(ORBUI)=" ",ORBUI=ORBUI+1
|
---|
51 | .S ORBU(ORBUI)="Special potential recipients from parameter: "_ORPAR,ORBUI=ORBUI+1
|
---|
52 | S ORBE=0,ORBX=0
|
---|
53 | ;
|
---|
54 | ;process special recip users, teams and devices:
|
---|
55 | D ENVAL^XPAR(.ORLST,ORPAR,"`"_OROI,.ORERR)
|
---|
56 | I 'ORERR,$G(ORLST)>0 D
|
---|
57 | .F ORBX=1:1:ORLST S ORBE=$O(ORLST(ORBE)),ORBZ=$P(ORBE,";",2),ORBUF=0 D
|
---|
58 | ..;
|
---|
59 | ..; process USERS:
|
---|
60 | ..I ORBZ="VA(200," S ORBDUZ=$P(ORBE,";") I $L(ORBDUZ) D
|
---|
61 | ...I ORLST(ORBE,OROI)=1 S ORBASPEC(ORBDUZ)="",ORBUF=1
|
---|
62 | ...I ORLST(ORBE,OROI)=0,$$PPLINK^ORQPTQ1(ORBDUZ,ORDFN) S ORBASPEC(ORBDUZ)="",ORBUF=1
|
---|
63 | ...I $D(ORBU),ORBUF=1 N NODE S NODE=$G(^VA(200,ORBDUZ,0)) I $L(NODE) D
|
---|
64 | ....S ORBU(ORBUI)=" "_$P(NODE,U)_" is a potential recipient.",ORBUI=ORBUI+1
|
---|
65 | ..;
|
---|
66 | ..; process DEVICES:
|
---|
67 | ..I ORBZ="%ZIS(1," S ORBDEV=$P(ORBE,";") I $L(ORBDEV),$D(^%ZIS(1,ORBDEV))>0 D
|
---|
68 | ...S ORBDEV=$G(^%ZIS(1,ORBDEV,0)) I $D(ORBDEV) D
|
---|
69 | ....I ORLST(ORBE,OROI)=1 S ORBSDEV($P(ORBDEV,U))="",ORBUF=1
|
---|
70 | ....I ORLST(ORBE,OROI)=0,$$PDLINK^ORQPTQ1(ORBDEV,ORDFN) S ORBSDEV($P(ORBDEV,U))="",ORBUF=1
|
---|
71 | ....I $D(ORBU),ORBUF=1 D
|
---|
72 | .....S ORBU(ORBUI)=" "_$P(ORBDEV,U)_" is a device recipient.",ORBUI=ORBUI+1
|
---|
73 | ..;
|
---|
74 | ..; process TEAMS:
|
---|
75 | ..I ORBZ="OR(100.21," D SPECTEAM(ORBE)
|
---|
76 | D TITLE(OROI,ORPAR)
|
---|
77 | Q
|
---|
78 | SPECTEAM(ORBE) ;get special team recips
|
---|
79 | N ORBLST,IJ,ORBTM
|
---|
80 | S ORBTM=$P(ORBE,";")
|
---|
81 | D TEAMPROV^ORQPTQ1(.ORBLST,ORBTM)
|
---|
82 | I $D(ORBU) N TNODE S TNODE=$G(^OR(100.21,ORBTM,0)) I $L(TNODE) D
|
---|
83 | .S ORBU(ORBUI)=" Team potential recipients from team "_$P(TNODE,U)_":",ORBUI=ORBUI+1
|
---|
84 | I +$G(ORBLST(1))>0 S IJ="" F S IJ=$O(ORBLST(IJ)) Q:IJ="" D
|
---|
85 | .S ORBDUZ=$P(ORBLST(IJ),U),ORBUF=0 I $L(ORBDUZ) D
|
---|
86 | ..I ORLST(ORBE,OROI)=1 S ORBASPEC(ORBDUZ_U_ORBTM)="",ORBUF=1
|
---|
87 | ..I ORLST(ORBE,OROI)=0,$D(^OR(100.21,ORBTM,10,"B",ORDFN_";DPT(")) S ORBASPEC(ORBDUZ_U_ORBTM)="",ORBUF=1
|
---|
88 | ..I $D(ORBU),ORBUF=1 N NODE S NODE=$G(^VA(200,ORBDUZ,0)) I $L(NODE) D
|
---|
89 | ...S ORBU(ORBUI)=" "_$P(NODE,U),ORBUI=ORBUI+1
|
---|
90 | ;
|
---|
91 | S ORBTD=$P($$TMDEV^ORB31(ORBTM),U,2) ;tm's device
|
---|
92 | I $L(ORBTD) D
|
---|
93 | .S ORBSDEV(ORBTD)=""
|
---|
94 | .I $D(ORBU) D
|
---|
95 | ..S ORBU(ORBUI)=" Team's Device "_ORBTD_" is a recipient",ORBUI=ORBUI+1
|
---|
96 | Q
|
---|
97 | LRALRTS(ORN,ORDFN,ORDATA,ORBSMSG,ORBMSG) ;find & delete matching alerts and gather recips
|
---|
98 | ; ORN: notif ien
|
---|
99 | ; ORDFN: pt id
|
---|
100 | ; ORDATA: pkg data
|
---|
101 | ; ORBSMSG: special notif msg rtn by LRALRTS
|
---|
102 | ; ORBMSG: original notif msg
|
---|
103 | ;
|
---|
104 | Q:+$G(ORN)<1
|
---|
105 | Q:+$G(ORDFN)<1
|
---|
106 | Q:+$G(ORDATA)<1
|
---|
107 | N LRID,ORY,I,J,XQAID,XQ0,XQ1,ORNE,RECIP,ORDATAE,LRIDE,STDATE
|
---|
108 | N ORTST,ORBMSGE,ORBMSGX,TXQAID,XQF,ORBHX,ORX,ORBI
|
---|
109 | ;
|
---|
110 | S LRID=$P($P(ORDATA,"|",2),"@") ;get lab unique results id (OE IDE)
|
---|
111 | Q:+$G(LRID)<1
|
---|
112 | ;
|
---|
113 | ;get pt's alerts within 24 hours:
|
---|
114 | S STDATE=$$FMADD^XLFDT($$NOW^XLFDT,"","-24","","")
|
---|
115 | D PATIENT^XQALERT("ORY",ORDFN,STDATE,"") ;get pt's alerts
|
---|
116 | ;
|
---|
117 | ;look for pt's alerts with same notif ien and unique lab results id:
|
---|
118 | F I=1:1:ORY D
|
---|
119 | .S XQAID=$P(ORY(I),U,2)
|
---|
120 | .S ORBMSGX=$P(ORY(I),U)
|
---|
121 | .S ORNE=$P($P(XQAID,";"),",",3) ;get notif ien
|
---|
122 | .Q:ORNE'=ORN
|
---|
123 | .;
|
---|
124 | .;find matching alert:
|
---|
125 | .D AHISTORY^XQALBUTL(XQAID,"ORBHX")
|
---|
126 | .S ORDATAE=$G(ORBHX(2))
|
---|
127 | .Q:'$L(ORDATAE)
|
---|
128 | .S LRIDE=$P($P(ORDATAE,"|",2),"@") ;get lab rslts id from existng alert
|
---|
129 | .Q:LRIDE'=LRID
|
---|
130 | .;
|
---|
131 | .S:ORBMSG["[" ORTST=$P($P(ORBMSG,"[",2),"]")
|
---|
132 | .I ORBMSG'["[" D
|
---|
133 | ..S:ORBMSG["labs: " ORTST=$P(ORBMSG,"labs: ",2)
|
---|
134 | ..S:ORBMSG["results: " ORTST=$P(ORBMSG,"results: ",2)
|
---|
135 | .;
|
---|
136 | .S ORBMSGE=$P(ORBMSGX,"): ",2)
|
---|
137 | .;
|
---|
138 | .S ORX=0
|
---|
139 | .;if alert has recips, get recips from existing alert:
|
---|
140 | .S:$L($G(ORBHX(20,0))) ORX=$P(ORBHX(20,0),U,4)
|
---|
141 | .F ORBI=1:1:ORX D
|
---|
142 | ..S RECIP=+ORBHX(20,ORBI,0)
|
---|
143 | ..S ORBASPEC(RECIP)="" ;add recip to new alert recip list
|
---|
144 | .;
|
---|
145 | .;delete existing alert:
|
---|
146 | .S XQAKILL=0 ;delete for all recips
|
---|
147 | .D DELETE^XQALERT
|
---|
148 | .K XQAKILL,XQAID
|
---|
149 | ;
|
---|
150 | ;if NO prev alert msg for this pt, notif, lab unique id:
|
---|
151 | I '$L($G(ORBMSGE)) S ORBSMSG=ORBMSG
|
---|
152 | ;
|
---|
153 | ;if prev alert msg for this pt, notif, lab unique id:
|
---|
154 | I $L($G(ORBMSGE)) D
|
---|
155 | .S:ORBMSGE["[" ORBSMSG=$P(ORBMSGE,"]")_", "_ORTST_"]"
|
---|
156 | .S:ORBMSGE'["[" ORBSMSG=ORBMSGE_", "_ORTST
|
---|
157 | ;
|
---|
158 | Q
|
---|
159 | ;
|
---|
160 | TITLE(OROI,ORPAR) ;get provider recips
|
---|
161 | N ORTIT
|
---|
162 | I $D(ORBU) D
|
---|
163 | .S ORBU(ORBUI)=" ",ORBUI=ORBUI+1
|
---|
164 | .S ORBU(ORBUI)="Special potential recipients from parameter: "_ORPAR_" PR",ORBUI=ORBUI+1
|
---|
165 | ;
|
---|
166 | ;process special recip users, teams and devices for Provider Recipients
|
---|
167 | S ORTIT=$$GET^XPAR("ALL",ORPAR_" PR","`"_OROI,"E")
|
---|
168 | Q:'$L(ORTIT)
|
---|
169 | I ORTIT["P" D PRIMARY
|
---|
170 | I ORTIT["A" D ATTEND
|
---|
171 | I ORTIT["T" D TEAMS
|
---|
172 | I ORTIT["O" D ORDERER
|
---|
173 | I ORTIT["E" D ENTERBY
|
---|
174 | I ORTIT["R" D PCMMPRIM
|
---|
175 | I ORTIT["S" D PCMMASSC
|
---|
176 | I ORTIT["M" D PCMMTEAM
|
---|
177 | Q
|
---|
178 | PRIMARY ;
|
---|
179 | I $D(ORBU),+$G(ORBPRIM)>0 S ORBU(ORBUI)=" Flagged OI Inpt primary provider:",ORBUI=ORBUI+1
|
---|
180 | I $D(ORBU),+$G(ORBPRIM)<1 S ORBU(ORBUI)=" Flagged OI Inpt primary provider: option cannot determine without A/D/T event data.",ORBUI=ORBUI+1
|
---|
181 | I +$G(ORBPRIM)>0 S ORBASPEC(ORBPRIM)=""
|
---|
182 | Q
|
---|
183 | ATTEND ;
|
---|
184 | I $D(ORBU),+$G(ORBATTD)>0 S ORBU(ORBUI)=" Flagged OI Attending physician:",ORBUI=ORBUI+1
|
---|
185 | I $D(ORBU),+$G(ORBATTD)<1 S ORBU(ORBUI)=" Flagged OI Attending physician: option cannot determine without A/D/T event data.",ORBUI=ORBUI+1
|
---|
186 | I +$G(ORBATTD)>0 S ORBASPEC(ORBATTD)=""
|
---|
187 | Q
|
---|
188 | TEAMS ;
|
---|
189 | N ORBLST,ORBI,ORBJ,ORBTM,ORBTNAME,ORBTTYPE,ORBTD
|
---|
190 | I $D(ORBU) S ORBU(ORBUI)=" Flagged OI Teams/Personal Lists related to patient:",ORBUI=ORBUI+1
|
---|
191 | D TMSPT^ORQPTQ1(.ORBLST,ORDFN)
|
---|
192 | Q:+$G(ORBLST(1))<1
|
---|
193 | S ORBI="" F S ORBI=$O(ORBLST(ORBI)) Q:ORBI="" D
|
---|
194 | .S ORBTM=$P(ORBLST(ORBI),U),ORBTNAME=$P(ORBLST(ORBI),U,2)
|
---|
195 | .S ORBTTYPE=$P(ORBLST(ORBI),U,3)
|
---|
196 | .I $D(ORBU) D
|
---|
197 | ..S ORBU(ORBUI)=" Patient list "_ORBTNAME_" ["_ORBTTYPE_"]:",ORBUI=ORBUI+1
|
---|
198 | .N ORBLST2 D TEAMPROV^ORQPTQ1(.ORBLST2,ORBTM)
|
---|
199 | .Q:+$G(ORBLST2(1))<1
|
---|
200 | .S ORBJ="" F S ORBJ=$O(ORBLST2(ORBJ)) Q:ORBJ="" D
|
---|
201 | ..S ORBDUZ=$P(ORBLST2(ORBJ),U)_U_ORBTM I +$G(ORBDUZ)>0 S ORBASPEC(ORBDUZ)=""
|
---|
202 | .S ORBTD=$P($$TMDEV^ORB31(ORBTM),U,2) ;tm's device
|
---|
203 | .I $L(ORBTD) D
|
---|
204 | ..S ORBSDEV(ORBTD)=""
|
---|
205 | ..I $D(ORBU) D
|
---|
206 | ...S ORBU(ORBUI)=" Team's Device "_ORBTD_" is a recipient",ORBUI=ORBUI+1
|
---|
207 | Q
|
---|
208 | ORDERER ;
|
---|
209 | N ORBDUZ
|
---|
210 | I $D(ORBU) S ORBU(ORBUI)=" Flagged OI Ordering provider:",ORBUI=ORBUI+1
|
---|
211 | Q:+$G(ORNUM)<1
|
---|
212 | S ORBDUZ=$$ORDERER^ORQOR2(ORNUM)
|
---|
213 | I +$G(ORBDUZ)>0 D
|
---|
214 | .S ORBASPEC(ORBDUZ)=""
|
---|
215 | Q
|
---|
216 | ENTERBY ;
|
---|
217 | N ORBDUZ
|
---|
218 | I $D(ORBU) S ORBU(ORBUI)=" Flagged OI User entering order's most recent activity:",ORBUI=ORBUI+1
|
---|
219 | Q:+$G(ORNUM)<1
|
---|
220 | I $D(^OR(100,ORNUM,8,0)) D
|
---|
221 | .S ORBDUZ=$P(^OR(100,ORNUM,8,$P(^OR(100,ORNUM,8,0),U,3),0),U,13)
|
---|
222 | I +$G(ORBDUZ)>0 S ORBASPEC(ORBDUZ)=""
|
---|
223 | Q
|
---|
224 | PCMMPRIM ;
|
---|
225 | N ORBDUZ
|
---|
226 | I $D(ORBU) S ORBU(ORBUI)=" Flagged OI PCMM Primary Care Practitioner:",ORBUI=ORBUI+1
|
---|
227 | S ORBDUZ=+$$OUTPTPR^SDUTL3(ORDFN,$$NOW^XLFDT,1) ;DBIA #1252
|
---|
228 | I +$G(ORBDUZ)>0 S ORBASPEC(ORBDUZ)=""
|
---|
229 | Q
|
---|
230 | PCMMASSC ;
|
---|
231 | N ORBDUZ
|
---|
232 | I $D(ORBU) S ORBU(ORBUI)=" Flagged OI PCMM Associate Provider:",ORBUI=ORBUI+1
|
---|
233 | S ORBDUZ=+$$OUTPTAP^SDUTL3(ORDFN,$$NOW^XLFDT) ;DBIA #1252
|
---|
234 | I +$G(ORBDUZ)>0 S ORBASPEC(ORBDUZ)=""
|
---|
235 | Q
|
---|
236 | PCMMTEAM ;
|
---|
237 | N ORPCMM,ORPCMMDZ,ORBDUZ
|
---|
238 | I $D(ORBU) S ORBU(ORBUI)=" Flagged OI PCMM Team Position Assignments:",ORBUI=ORBUI+1
|
---|
239 | S ORPCMM=$$PRPT^SCAPMC(ORDFN,,,,,,"^TMP(""ORPCMM"",$J)",) ;DBIA #1916
|
---|
240 | S ORPCMMDZ=0
|
---|
241 | F S ORPCMMDZ=$O(^TMP("ORPCMM",$J,"SCPR",ORPCMMDZ)) Q:'ORPCMMDZ D
|
---|
242 | .S ORBDUZ=ORPCMMDZ S ORBASPEC(ORBDUZ)=""
|
---|
243 | K ^TMP("ORPCMM",$J)
|
---|
244 | Q
|
---|