1 | ORRCEVT ; SLC/MKB,JFR - Event utilities ; 7/5/05 11:15
|
---|
2 | ;;1.0;CARE MANAGEMENT;**2**;Jul 15, 2003
|
---|
3 | ;
|
---|
4 | ; ID = "VST:"_alertID (="OR,<dfn>,<nien>;<user>;<date.time>")
|
---|
5 | ; or _apptID (="A;<date.time>;<hospital location>;<dfn>")
|
---|
6 | ; or _visitID (="V;<date.time>;<hospital location>;<dfn>")
|
---|
7 | ; or _procID (=order#)
|
---|
8 | ;
|
---|
9 | PATS(ORY,ORUSR) ; -- Return list of patients for whom ORUSR has ADT alerts
|
---|
10 | ; in @ORY@(PAT) = #event alerts
|
---|
11 | ; @ORY@(PAT,ID) = "" per alert
|
---|
12 | ; [from ORRCDPT]
|
---|
13 | N ORXQ,ORI,XQAID,PAT,NOT,X,ACTDT
|
---|
14 | S ORY=$NA(^TMP($J,"ORRCEVT")) K @ORY
|
---|
15 | S ORXQ=$NA(^TMP($J,"ORXQ")) K @ORXQ
|
---|
16 | S ORUSR=+$G(ORUSR),ACTDT=$$PARAM^ORRCACK(ORUSR)
|
---|
17 | D USER^XQALERT(ORXQ,ORUSR) Q:+$G(@ORXQ)<1
|
---|
18 | S ORI=0 F S ORI=$O(@ORXQ@(ORI)) Q:ORI<1 S XQAID=$P(@ORXQ@(ORI),U,2) D
|
---|
19 | . Q:XQAID'?1"OR,".E S PAT=+$P(XQAID,",",2),NOT=+$P(XQAID,",",3)
|
---|
20 | . I $D(^TMP($J,"ORRCLST")),'$D(^TMP($J,"ORRCY",PAT)) Q
|
---|
21 | . I $D(^TMP($J,"ORRCLST")) D
|
---|
22 | .. I "^18^19^20^35^36^"'[(U_NOT_U) D:'$$INCLD Q ;non-ADT alerts
|
---|
23 | ... S ^TMP($J,"ORRCNOTF",PAT)=1
|
---|
24 | .. S X=+$G(@ORY@(PAT)),@ORY@(PAT)=X+1,@ORY@(PAT,"VST:"_XQAID)=""
|
---|
25 | . I '$D(^TMP($J,"ORRCLST")) D ; add pts to dynamic if other notifs
|
---|
26 | .. I "^18^19^20^35^36^"'[(U_NOT_U) D:'$$INCLD Q ;non-ADT alerts
|
---|
27 | ... S ^TMP($J,"ORRCNOTF",PAT)=1
|
---|
28 | ... I '$D(^TMP($J,"ORRCY",PAT)) S ^TMP($J,"ORRCY",PAT)="" ; add patient
|
---|
29 | .. S X=+$G(@ORY@(PAT)),@ORY@(PAT)=X+1,@ORY@(PAT,"VST:"_XQAID)=""
|
---|
30 | K @ORXQ,^TMP($J,"ORSLT")
|
---|
31 | Q
|
---|
32 | ;
|
---|
33 | INCLD() ; -- Order already in Results column?
|
---|
34 | I "^3^14^21^22^23^24^25^53^57^58^"'[(U_NOT_U) Q 0
|
---|
35 | I (ACTDT<1)!(ACTDT>DT) Q 0
|
---|
36 | N X,DATE,DATA
|
---|
37 | S DATE=$P(XQAID,";",3),DATA=$G(^XTV(8992,ORUSR,"XQA",DATE,1))
|
---|
38 | S X=$P(DATA,"|") S:$L(X,"~")>2 X=$P(X,"~",2,3) I X="" Q 0
|
---|
39 | I '$G(^TMP($J,"ORSLT",PAT,X)) Q 0
|
---|
40 | Q 1
|
---|
41 | ;
|
---|
42 | IDS(ORY,ORPAT,ORBEG,OREND) ; -- Return appointments for ORPAT
|
---|
43 | ; in @ORY@(ORPAT) = #appts
|
---|
44 | ; @ORY@(ORPAT,ID) = "" per appt
|
---|
45 | ; [from ORRCDPT1]
|
---|
46 | N ORRCVST,ORVST,ORI,CNT,ID,ORDG,ORLIST,ORIFN,STS,STRT,ORDT
|
---|
47 | S ORY=$NA(^TMP($J,"ORRCEVT")) K @ORY
|
---|
48 | S ORPAT=+$G(ORPAT),ORBEG=$G(ORBEG),OREND=$G(OREND)
|
---|
49 | D VST^ORWCV(.ORRCVST,ORPAT,ORBEG,OREND,1) ;=ID^FMdate^ClinicName^StatusName
|
---|
50 | M ORVST=ORRCVST
|
---|
51 | S (CNT,ORI)=0 F S ORI=$O(ORVST(ORI)) Q:ORI<1 D
|
---|
52 | . S ID="VST:"_$P(ORVST(ORI),U)_";"_ORPAT
|
---|
53 | . S CNT=CNT+1,@ORY@(ORPAT,ID)=""
|
---|
54 | ;+scheduled Radiology procedures
|
---|
55 | S ORDG=+$O(^ORD(100.98,"B","XRAY",0)),ORPAT=+ORPAT_";DPT("
|
---|
56 | D EN^ORQ1(ORPAT,ORDG,2) S ORDT=$S($G(DT):DT,1:$P($$NOW^XLFDT,"."))
|
---|
57 | S ORI=0 F S ORI=$O(^TMP("ORR",$J,ORLIST,ORI)) Q:ORI<1 S ORIFN=^(ORI) D
|
---|
58 | . S STS=$P($G(^OR(100,+ORIFN,3)),U,3),STRT=$P($G(^(0)),U,8)
|
---|
59 | . Q:"^1^2^7^12^13^14^"[(U_STS_U) I STRT,STRT<ORDT Q ;done
|
---|
60 | . S CNT=CNT+1,@ORY@(ORPAT,"VST:"_+ORIFN)=""
|
---|
61 | S:CNT @ORY@(ORPAT)=CNT K ^TMP("ORR",$J,ORLIST)
|
---|
62 | Q
|
---|
63 | ;
|
---|
64 | LIST(ORY,ORPAT,ORUSR,ORDET) ; -- Return alerted events to ORUSR for ORPAT
|
---|
65 | ; in @ORY@(#) = Item=ID^Text^Date in HL7 format, and also if ORDET
|
---|
66 | ; = Text=line of associated document text
|
---|
67 | ; RPC = ORRC EVENTS BY PATIENT
|
---|
68 | N ORXQ,ORN,I,XQAID,NOT,TEXT,DATE
|
---|
69 | S ORXQ=$NA(^TMP($J,"ORXQ")) K @ORXQ D USER^XQALERT(ORXQ,+$G(ORUSR))
|
---|
70 | S ORY=$NA(^TMP($J,"ORRCEVT")),ORN=0 K @ORY
|
---|
71 | S I=0 F S I=$O(@ORXQ@(I)) Q:I<1 D
|
---|
72 | . S TEXT=$P(@ORXQ@(I),U),XQAID=$P(@ORXQ@(I),U,2),DATE=$P(XQAID,";",3)
|
---|
73 | . Q:XQAID'?1"OR,".E Q:+$P(XQAID,",",2)'=ORPAT
|
---|
74 | . S NOT=+$P(XQAID,",",3) Q:"^18^19^20^35^36^"'[(U_NOT_U)
|
---|
75 | . S ORN=ORN+1,@ORY@(ORN)="Item=VST:"_XQAID_U_$E(TEXT,23,99)_U_$$FMTHL7^XLFDT(DATE)
|
---|
76 | . I $G(ORDET) D NOTE
|
---|
77 | K @ORXQ
|
---|
78 | Q
|
---|
79 | ;
|
---|
80 | APPT(ORY,ORPAT,ORBEG,OREND,ORDET) ; -- Return past/future appointments
|
---|
81 | ; in @ORY@(#) = Item=ID^Text^Date in HL7 format^Status, and also if ORDET
|
---|
82 | ; = Text=line of associated document text
|
---|
83 | ; RPC = ORRC APPTS BY PATIENT
|
---|
84 | N ORN,ORVST,ORI,X,ID,LOC,DATE,VISIT,ORNOTE,ORJ,ORDG,ORLIST,ORIFN,ORNOW
|
---|
85 | N STS,STRT,NOW,ORRCVST,ORRCNOTE
|
---|
86 | S ORPAT=+$G(ORPAT),ORBEG=$$HL7TFM^XLFDT($G(ORBEG)),OREND=$$HL7TFM^XLFDT($G(OREND)),NOW=$$NOW^XLFDT
|
---|
87 | D VST^ORWCV(.ORRCVST,ORPAT,ORBEG,OREND,1) ;=ID^FMdate^ClinicName^StatusName
|
---|
88 | M ORVST=ORRCVST
|
---|
89 | S ORY=$NA(^TMP($J,"ORRCAPPT")),ORN=0 K @ORY
|
---|
90 | S ORI=0 F S ORI=$O(ORVST(ORI)) Q:ORI<1 D
|
---|
91 | . S X=ORVST(ORI),DATE=$P(X,U,2)
|
---|
92 | . S ID="VST:"_$P(X,U)_";"_ORPAT,LOC=+$P(ID,";",3)
|
---|
93 | . S ORN=ORN+1,@ORY@(ORN)="Item="_ID_U_$P(X,U,3)_U_$$FMTHL7^XLFDT(DATE)_U_$P(X,U,4)
|
---|
94 | . I $G(ORDET) D
|
---|
95 | .. I DATE>NOW S ORN=ORN+1,@ORY@(ORN)="Text=Scheduled Appointment" Q
|
---|
96 | .. I $G(^SC(LOC,"OOS")) S ORN=ORN+1,@ORY@(ORN)="Text=No note available" Q
|
---|
97 | .. S VISIT=+$$GETENC^PXAPI(ORPAT,DATE,LOC) K ORNOTE
|
---|
98 | .. D DETNOTE^ORQQVS(.ORRCNOTE,ORPAT,VISIT)
|
---|
99 | .. M ORNOTE=ORRCNOTE
|
---|
100 | .. S ORJ=0 F S ORJ=$O(ORNOTE(ORJ)) Q:ORJ<1 S ORN=ORN+1,@ORY@(ORN)="Text="_ORNOTE(ORJ)
|
---|
101 | ;+future Radiology procedures in #100
|
---|
102 | S ORDG=+$O(^ORD(100.98,"B","XRAY",0)),ORPAT=+ORPAT_";DPT("
|
---|
103 | D EN^ORQ1(ORPAT,ORDG,2) S ORNOW=$$NOW^XLFDT
|
---|
104 | S ORI=0 F S ORI=$O(^TMP("ORR",$J,ORLIST,ORI)) Q:ORI<1 S ORIFN=^(ORI) D
|
---|
105 | . S STS=$P($G(^OR(100,+ORIFN,3)),U,3),STRT=$P($G(^(0)),U,8)
|
---|
106 | . Q:"^1^2^7^12^13^14^"[(U_STS_U) I STRT,STRT<ORNOW Q ;done
|
---|
107 | . S ORN=ORN+1,@ORY@(ORN)="Item=VST:"_+ORIFN_U_$$TXT^ORRCOR(+ORIFN)_U_$$FMTHL7^XLFDT(STRT)_U_$$STS^ORRCOR(+ORIFN)
|
---|
108 | . I $G(ORDET) D ORD^ORRCOR
|
---|
109 | K ^TMP("ORR",$J,ORLIST)
|
---|
110 | Q
|
---|
111 | ;
|
---|
112 | TEXT(ORY,VISIT) ; -- Return associated document text of VISITs
|
---|
113 | ; where VISIT(#) = ID
|
---|
114 | ; in @ORY@(#) = Item=ID^Text^Date in HL7 format
|
---|
115 | ; = Text=line of document text
|
---|
116 | ; RPC = ORRC EVENTS BY ID
|
---|
117 | N ORN,ORI,ID,XQAID,LOC,TEXT,DATE,VST,ORIFN,DFN,ORNOTE,ORRCNOTE,NOW
|
---|
118 | S NOW=$$NOW^XLFDT,ORN=0,ORY=$NA(^TMP($J,"ORRCEVT")) K @ORY
|
---|
119 | S ORI="" F S ORI=$O(VISIT(ORI)) Q:ORI="" S ID=$P(VISIT(ORI),":",2) D
|
---|
120 | . I ID D Q ;order
|
---|
121 | .. S DATE=$P($G(^OR(100,+ID,0)),U,8)
|
---|
122 | .. S ORN=ORN+1,@ORY@(ORN)="Item=VST:"_ID_U_$$TXT^ORRCOR(+ID)_U_$$FMTHL7^XLFDT(DATE)
|
---|
123 | .. S ORIFN=ID D ORD^ORRCOR
|
---|
124 | . I ID?1"OR,".E D Q ;alert
|
---|
125 | .. S TEXT=$$MSGTXT^ORRCXQ(ID),DATE=+$P(ID,";",3)
|
---|
126 | .. S ORN=ORN+1,@ORY@(ORN)="Item=VST:"_ID_U_TEXT_U_$$FMTHL7^XLFDT(DATE)
|
---|
127 | .. S XQAID=ID D NOTE
|
---|
128 | . S DATE=$P(ID,";",2),LOC=+$P(ID,";",3),DFN=+$P(ID,";",4)
|
---|
129 | . S ORN=ORN+1,@ORY@(ORN)="Item=VST:"_ID_U_$P($G(^SC(LOC,0)),U)_U_DATE
|
---|
130 | . I DATE>NOW S ORN=ORN+1,@ORY@(ORN)="Text=Scheduled Appointment" Q
|
---|
131 | . S VST=+$$GETENC^PXAPI(DFN,DATE,LOC) K ORNOTE,ORRCNOTE
|
---|
132 | . D DETNOTE^ORQQVS(.ORRCNOTE,DFN,VST)
|
---|
133 | . M ORNOTE=ORRCNOTE
|
---|
134 | . S ORJ=0 F S ORJ=$O(ORNOTE(ORJ)) Q:ORJ<1 S ORN=ORN+1,@ORY@(ORN)="Text="_ORNOTE(ORJ)
|
---|
135 | Q
|
---|
136 | ;
|
---|
137 | NOTE ; -- Add note text associated with event in alert XQAID to @ORY@(ORN)
|
---|
138 | ; Expects TEXT,DATE from alert
|
---|
139 | N DFN,NOT,VDT,VAIP,VAERR,LOC,VISIT,ORZ,ORI,ENC,X0,ORRCZ
|
---|
140 | S DFN=+$P(XQAID,",",2),NOT=+$P(XQAID,",",3),VDT=$$MSGDT^ORRCXQ(DATE,TEXT)
|
---|
141 | I NOT=20,TEXT?1"Died on ".E S ORN=ORN+1,@ORY@(ORN)="Text=No details available." Q
|
---|
142 | I NOT=19 D ;Unsched visit
|
---|
143 | . S LOC=0,VISIT=0 ;IA #2065
|
---|
144 | . S ENC=0 F S ENC=$O(^SCE("ADFN",DFN,VDT,ENC)) Q:ENC<1 D Q:LOC
|
---|
145 | .. S X0=$G(^SCE(ENC,0)) Q:$P(X0,U,6) Q:$P(X0,U,8)=1 ;not parent, appt
|
---|
146 | .. Q:$G(^SC(+$P(X0,U,4),"OOS")) ;not OOS loc
|
---|
147 | .. S LOC=+$P(X0,U,4),VISIT=+$P(X0,U,5)
|
---|
148 | . S:VISIT<1 VISIT=+$$GETENC^PXAPI(DFN,VDT,LOC)
|
---|
149 | . K ORZ D DETNOTE^ORQQVS(.ORRCZ,DFN,VISIT)
|
---|
150 | . M ORZ=ORRCZ
|
---|
151 | I NOT'=19 D ;inpt mvt
|
---|
152 | . S VAIP("D")=$S(NOT=18!(NOT=36):DATE,1:VDT) D IN5^VADPT
|
---|
153 | . S VDT=+VAIP(13,1),LOC=+$G(^DIC(42,+VAIP(13,4),44))
|
---|
154 | . S VISIT=+$$GETENC^PXAPI(DFN,VDT,LOC)
|
---|
155 | . K ORZ D DETSUM^ORQQVS(.ORRCZ,DFN,VISIT)
|
---|
156 | . M ORZ=ORRCZ
|
---|
157 | . K ^TMP("PXKENC",$J)
|
---|
158 | S ORI=0 F S ORI=$O(ORZ(ORI)) Q:ORI<1 S ORN=ORN+1,@ORY@(ORN)="Text="_ORZ(ORI)
|
---|
159 | Q
|
---|
160 | ;
|
---|
161 | CLEAR(ORY,ORUSR,VISIT) ; -- Clear VISIT alerts for ORUSR
|
---|
162 | ; where VISIT(#) = ID
|
---|
163 | ; returns ORY(#) = ID ^ 1 or 0, if successful
|
---|
164 | ; RPC = ORRC EVENTS ACKNOWLEDGE
|
---|
165 | Q:'$G(ORUSR) N ORN,ORI,XQAID S ORN=0 K ORY
|
---|
166 | S ORI="" F S ORI=$O(VISIT(ORI)) Q:ORI="" D
|
---|
167 | . S XQAID=$P(VISIT(ORI),":",2)
|
---|
168 | . D DELETE^ORRCXQ(XQAID)
|
---|
169 | . S ORN=ORN+1,ORY(ORN)="VST:"_XQAID_"^1"
|
---|
170 | Q
|
---|
171 | ;
|
---|
172 | TEST19(USR) ; -- Trigger Unsched Visit alert to test
|
---|
173 | N XQA,XQAID,XQAMSG
|
---|
174 | S XQA(USR)="",XQAID="OR,54,19",XQAMSG="CPRS,JOH (C1239): Unscheduled visit on OCT 14,1999@17:16:21"
|
---|
175 | D SETUP^XQALERT
|
---|
176 | Q
|
---|
177 | ;
|
---|
178 | TEST35(USR) ; -- Trigger Discharge alert to test
|
---|
179 | N XQA,XQAID,XQAMSG
|
---|
180 | S XQA(USR)="",XQAID="OR,?,35",XQAMSG="Discharged on ?"
|
---|
181 | D SETUP^XQALERT
|
---|
182 | Q
|
---|
183 | ;
|
---|
184 | TEST20(USR) ; -- Trigger Deceased alert to test
|
---|
185 | N XQA,XQAID,XQAMSG
|
---|
186 | S XQA(USR)="",XQAID="OR,91265,20",XQAMSG="CPRS,K (C8838): Died on AUG 31,1999"
|
---|
187 | D SETUP^XQALERT
|
---|
188 | Q
|
---|