source: WorldVistAEHR/trunk/r/ORDER_ENTRY_RESULTS_REPORTING-OR-OCX--ORRC--ORRJ/ORB31.m@ 1361

Last change on this file since 1361 was 613, checked in by George Lilly, 15 years ago

initial load of WorldVistAEHR

File size: 5.9 KB
Line 
1ORB31 ; 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
3QUEUE(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
34DUP(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
51REGDEV(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
60PRINTD ;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
68FWD(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
74RENEW(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
80TERMLKUP(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
97DUPCLN(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
105TMDEV(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
117ENTITY(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 ;
126ADT(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 ;
140DEFDIV(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 ;
156ORDIV(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
Note: See TracBrowser for help on using the repository browser.