1 | ORB31 ; slc/CLA - Routine to support OE/RR 3 notifications ;6/28/00 12:00 [ 04/02/97 11:12 AM ]
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**6,31,88,105,139,173,220,215**;Dec 17, 1997
|
---|
3 | QUEUE(ORN,ORBDFN,ORNUM,ORBADUZ,ORBPMSG,ORBPDATA,ORBH,ORBD,ORDGPMA) ;
|
---|
4 | ;queue up notif for Taskman processing
|
---|
5 | ;ORN notification ien from file 100.9
|
---|
6 | ;ORBDFN patient dfn from file 2
|
---|
7 | ;ORNUM order number from file 100
|
---|
8 | ;ORBADUZ array of potential user recipients (iens from file 100)
|
---|
9 | ;ORBPMSG alert message from triggering process
|
---|
10 | ;ORBPDATA data potentially used in alert follow-up action
|
---|
11 | ;ORBH $H formatted time to begin Taskman process
|
---|
12 | ;ORBD process description for Taskman
|
---|
13 | ;ORDGPMA DGPMA if alert triggered by A/D/T event
|
---|
14 | ;
|
---|
15 | N ZTCPU,ZTDESC,ZTDTH,ZTIO,ZTPAR,ZTPRE,ZTPRI,ZTREQ,ZTRTN,ZTSAVE,ZTSK,ZTUCI,X,Y,DIC
|
---|
16 | ;
|
---|
17 | S DIC="3.5",X="ORB NOTIFICATION RESOURCE",DIC(0)="X" D ^DIC
|
---|
18 | I (Y) S ZTIO=$P(Y,U,2)
|
---|
19 | E S ZTIO=""
|
---|
20 | S ZTDTH=ORBH,ZTRTN="ZTSK^ORB3"
|
---|
21 | S ZTDESC=ORBD
|
---|
22 | S ZTDESC=ZTDESC_"for ("_ORBDFN_") "_$P($G(^DPT(+ORBDFN,0)),U,1)
|
---|
23 | K ZTSAVE,ZTCPU,ZTUCI,ZTPRI,ZTPAR,ZTPRE,DIC,Y,DTOUT,DUOUT
|
---|
24 | ;
|
---|
25 | S ZTSAVE("ORN")=""
|
---|
26 | S ZTSAVE("ORBDFN")=""
|
---|
27 | S ZTSAVE("ORNUM")=""
|
---|
28 | S ZTSAVE("ORBADUZ(")=""
|
---|
29 | S ZTSAVE("ORBPMSG")=""
|
---|
30 | S ZTSAVE("ORBPDATA")=""
|
---|
31 | S ZTSAVE("ORDGPMA")=""
|
---|
32 | D ^%ZTLOAD
|
---|
33 | Q
|
---|
34 | DUP(ORN,ORBDFN,ORBPMSG,ORNUM) ;ext funct return "1" if a duplicate notif w/in 1 min.
|
---|
35 | N ORBDUP,ORBNOW,ORBLAST,ORLNUM,ORSAMEP
|
---|
36 | S ORBDUP=0
|
---|
37 | S ORSAMEP=0
|
---|
38 | S ORBNOW=$$NOW^XLFDT
|
---|
39 | S ^XTMP("ORBDUP",0)=$$FMADD^XLFDT(ORBNOW,1,"","","")_"^"_ORBNOW
|
---|
40 | I '$L($G(^XTMP("ORBDUP",ORBDFN_";"_ORN_";"_ORBPMSG))) S ^XTMP("ORBDUP",ORBDFN_";"_ORN_";"_ORBPMSG)=ORBNOW_"^"_$G(ORNUM)
|
---|
41 | E D
|
---|
42 | .S ORBLAST=$G(^XTMP("ORBDUP",ORBDFN_";"_ORN_";"_ORBPMSG))
|
---|
43 | .S ORLNUM=$P(ORBLAST,"^",2)
|
---|
44 | .S ORBLAST=$P(ORBLAST,"^")
|
---|
45 | .I $L($G(ORNUM)),$L($G(ORLNUM)),($$ORDERER^ORQOR2(ORNUM)=$$ORDERER^ORQOR2(ORLNUM)) S ORSAMEP=1 ;same provider as last order that triggered this notif
|
---|
46 | .;if last occurrence of this "NOT" notif was w/in past 1 min, its a dup
|
---|
47 | .I ORBNOW<$$FMADD^XLFDT(ORBLAST,"","",1,""),ORSAMEP=1 S ORBDUP=1 ;dup
|
---|
48 | .E S ^XTMP("ORBDUP",ORBDFN_";"_ORN_";"_ORBPMSG)=ORBNOW_"^"_ORNUM ;refresh last pt/noti occ.
|
---|
49 | D DUPCLN(ORBNOW) ;clean up old ^XTMP("ORBUP") entries
|
---|
50 | Q ORBDUP
|
---|
51 | REGDEV(ORBDA) ;send to regular recipient devices
|
---|
52 | N ORBDT,ORBD
|
---|
53 | S ORBD=""
|
---|
54 | S ORBDT=$$NOW^XLFDT
|
---|
55 | F S ORBD=$O(ORBDA(ORBD)) Q:ORBD="" D
|
---|
56 | .S ZTRTN="PRINTD^ORB31",ZTDESC="Print Notification to Device",ZTDTH=$H
|
---|
57 | .S ZTIO=ORBD,ZTSAVE("XQAMSG")="",ZTSAVE("ORBDT")=""
|
---|
58 | .D ^%ZTLOAD
|
---|
59 | Q
|
---|
60 | PRINTD ;print queued notification to device - setup via REGDEV^ORB3
|
---|
61 | I $G(ZTSK) D KILL^%ZTLOAD
|
---|
62 | I IOT="HFS" W XQAMSG Q ;write msg to a file then quit
|
---|
63 | W !!!," ***** NOTIFICATION PROCESSED *****",!!
|
---|
64 | W $$FMTE^XLFDT(ORBDT)," "
|
---|
65 | W XQAMSG
|
---|
66 | I $E(IOST,1,2)'="C-" W @IOF
|
---|
67 | Q
|
---|
68 | FWD(ORY,ORBLST,ORBRECIP,ORBTYPE,ORBCOMNT) ; forward a notification
|
---|
69 | I ORBLST="" S ORY=0 Q
|
---|
70 | S ORBLST(1)=ORBLST
|
---|
71 | D FORWARD^XQALFWD(.ORBLST,.ORBRECIP,ORBTYPE,ORBCOMNT)
|
---|
72 | S ORY=1
|
---|
73 | Q
|
---|
74 | RENEW(ORY,XQAID) ; renew/restore an alert/notification
|
---|
75 | Q:$L($G(XQAID))<1
|
---|
76 | K XQAKILL
|
---|
77 | I '$D(^XTV(8992,"AXQA",XQAID,DUZ)) D RESTORE^XQALERT1 ;DBIA #4100
|
---|
78 | S ORY=1
|
---|
79 | Q
|
---|
80 | TERMLKUP(OCXARR,OCXTERM) ; extrinsic function returns the local terms
|
---|
81 | ; linked to the nat'l OCX term in an array and the file where those
|
---|
82 | ; array terms can be found. The value of the extrinsic function is the
|
---|
83 | ; file pointed to for the local terms.
|
---|
84 | ;
|
---|
85 | ; OCXARR - Array of local terms
|
---|
86 | ; OCXTERM - OCX nat'l term from file ^OCXS(860.9
|
---|
87 | ;
|
---|
88 | N OCXI,OCXJ,FILE,I
|
---|
89 | S OCXI="",OCXJ=0,FILE="",I=1
|
---|
90 | S OCXI=$O(^OCXS(860.9,"B",OCXTERM,OCXI))
|
---|
91 | I +$G(OCXI)>0 D
|
---|
92 | .S FILE=$P(^OCXS(860.9,OCXI,0),U,2)
|
---|
93 | .F S OCXJ=$O(^OCXS(860.9,OCXI,1,OCXJ)) Q:+OCXJ<1 D
|
---|
94 | ..S OCXARR(I)=$P(^OCXS(860.9,OCXI,1,OCXJ,0),U,2)_U_$P(^(0),U)
|
---|
95 | ..S OCXARR=I,I=I+1
|
---|
96 | Q FILE
|
---|
97 | DUPCLN(ORBNOW) ;clean up old entires in ^XTMP("ORBDUP")
|
---|
98 | N ORBX,ORBDT,ORNDT
|
---|
99 | S ORNDT=$$FMADD^XLFDT(ORBNOW,"","",-5,"") ;entries older than 5 minutes
|
---|
100 | S ORBX=0
|
---|
101 | F S ORBX=$O(^XTMP("ORBDUP",ORBX)) Q:ORBX="" D
|
---|
102 | .S ORBDT=+$G(^XTMP("ORBDUP",ORBX))
|
---|
103 | .I $L(ORBDT),(ORBDT<ORNDT) K ^XTMP("ORBDUP",ORBX)
|
---|
104 | Q
|
---|
105 | TMDEV(ORBTM) ;returns Device for a team in format device ien^device name
|
---|
106 | N ORBTDEV,ORBTDEVN
|
---|
107 | S ORBTDEVN=""
|
---|
108 | Q:'$L($G(ORBTM)) ""
|
---|
109 | Q:'$D(^OR(100.21,ORBTM,0)) ""
|
---|
110 | S ORBTDEV=$P(^OR(100.21,ORBTM,0),U,4) ;get Team's device
|
---|
111 | Q:+$G(ORBTDEV)<1 ""
|
---|
112 | S X="`"_ORBTDEV,DIC=3.5,DIC(0)="" D ^DIC ;DBIA #10114
|
---|
113 | Q:+Y<1 ""
|
---|
114 | S ORBTDEVN=$P(Y,U,2)
|
---|
115 | K DIC,Y,X
|
---|
116 | Q ORBTDEV_U_ORBTDEVN
|
---|
117 | ENTITY(ORNUM) ;ext funct. rtns entity for parameter use
|
---|
118 | N ORBENT
|
---|
119 | S ORBENT="DIV^SYS^PKG"
|
---|
120 | I $L($G(ORNUM)) D ;if order number use pt's location division
|
---|
121 | .N ORDIV
|
---|
122 | .S ORDIV=0,ORDIV=$$ORDIV(ORNUM)
|
---|
123 | .I +$G(ORDIV)>0 S ORBENT=ORDIV_";DIC(4,^SYS^PKG"
|
---|
124 | Q ORBENT
|
---|
125 | ;
|
---|
126 | ADT(ORN,ORBDFN,ORBPRIM,ORBATTD,ORDGPMA) ;get inpt primary and attending for ADT notifs
|
---|
127 | N ORBADTDT,VAINDT
|
---|
128 | ;if notif is deceased or discharge use prev visit d/t:
|
---|
129 | I (ORN=20)!(ORN=35) D
|
---|
130 | .S ORBADTDT=$S($D(ORDGPMA):$P(ORDGPMA,U),1:$P($G(^DPT(ORBDFN,.35)),U))
|
---|
131 | .I $L(ORBADTDT) S VAINDT=$$FMADD^XLFDT(ORBADTDT,"","","","-1")
|
---|
132 | ;
|
---|
133 | I ORN=18 S VAINDT=$P($G(ORDGPMA),U) ;if admission use this visit d/t
|
---|
134 | ;
|
---|
135 | I $L($G(VAINDT)) D
|
---|
136 | .D INP^VADPT ;get new VAIN array for appropriate visit
|
---|
137 | .S ORBPRIM=+$P(VAIN(2),U),ORBATTD=+$P(VAIN(11),U)
|
---|
138 | Q
|
---|
139 | ;
|
---|
140 | DEFDIV(ORDUZ) ; Return user's default division, if specified.
|
---|
141 | ;
|
---|
142 | N ORDD,ORDIV,ORGOOD,ORZ,ORZERR
|
---|
143 | ;
|
---|
144 | S ORDIV=""
|
---|
145 | S Y=0,(ORDD,ORGOOD)=0 ; Initialize variables.
|
---|
146 | ;
|
---|
147 | ; Get list of divisions from NEW PERSON file multiple:
|
---|
148 | D LIST^DIC(200.02,","_ORDUZ_",","@;.01;1","QP","","","","","","","ORZ","ORZERR")
|
---|
149 | I $P(ORZ("DILIST",0),U)=0 Q ; No Divisions listed.
|
---|
150 | ;
|
---|
151 | F S ORDD=$O(ORZ("DILIST",ORDD)) Q:+ORDD=0!'($L(ORDD)) D Q:ORGOOD
|
---|
152 | .; See if current entry being processed is "Default" (done if so):
|
---|
153 | .I $P(ORZ("DILIST",ORDD,0),U,3)["Y" S ORDIV=$P(ORZ("DILIST",ORDD,0),U,1,2),ORGOOD=1
|
---|
154 | Q ORDIV
|
---|
155 | ;
|
---|
156 | ORDIV(ORNUM) ; Return order's division based upon patient's location when order was placed
|
---|
157 | ;
|
---|
158 | Q:+$G(ORNUM)<1 ""
|
---|
159 | Q:'$D(^OR(100,ORNUM,0)) ""
|
---|
160 | N ORDIV,PTLOC
|
---|
161 | S ORDIV=""
|
---|
162 | S PTLOC=+$P(^OR(100,ORNUM,0),U,10)
|
---|
163 | Q:$G(PTLOC)<1 ""
|
---|
164 | S ORDIV=$P(^SC(PTLOC,0),U,4) ;DBIA #10040
|
---|
165 | Q ORDIV
|
---|