1 | ORRCXQ ;SLC/MKB - Alert utilities for CM ; 25 Jul 2003 9:31 AM
|
---|
2 | ;;1.0;CARE MANAGEMENT;;Jul 15, 2003
|
---|
3 | ;
|
---|
4 | USER(ORY,ORDUZ) ; -- Return user's current alerts in @ORY@(PKGID,AID)=DATA
|
---|
5 | ;
|
---|
6 | N ORXQ,X,I,PKGID,AID,TM,DATA
|
---|
7 | S ORDUZ=$G(ORDUZ,DUZ),ORY=$NA(^TMP($J,"ORY")) K @ORY
|
---|
8 | S ORXQ="^TMP($J,""ORXQ"")" D USER^XQALERT(ORXQ,ORDUZ)
|
---|
9 | S I=0 F S I=$O(@ORXQ@(I)) Q:I<1 D
|
---|
10 | . S X=$P(@ORXQ@(I),U,2),PKGID=$P(X,";"),AID=$P(X,";",2,3),TM=$P(X,";",3)
|
---|
11 | . S DATA=$G(^XTV(8992,ORDUZ,"XQA",TM,1)) ;IA#2689
|
---|
12 | . S @ORY@(PKGID,AID)=DATA
|
---|
13 | K @ORXQ
|
---|
14 | Q
|
---|
15 | ;
|
---|
16 | PAT(ORY,ORPAT,ORUSR) ; -- Return non-ADT alerts for ORPAT to ORUSR
|
---|
17 | ; in @ORY@(#) = Item=ID^Text^Date in HL7 format
|
---|
18 | ; where ID is "NOT:<XQAID>"
|
---|
19 | ; RPC = ORRC ALERTS BY PATIENT
|
---|
20 | N ORXQ,ORN,I,TEXT,XQAID,DATE,NOT,ACTDT
|
---|
21 | S ORUSR=+$G(ORUSR),ACTDT=$$PARAM^ORRCACK(ORUSR)
|
---|
22 | S ORXQ="^TMP($J,""ORXQ"")" D USER^XQALERT(ORXQ,ORUSR)
|
---|
23 | S ORY=$NA(^TMP($J,"ORRCNOT")),ORN=0 K @ORY
|
---|
24 | S I=0 F S I=$O(@ORXQ@(I)) Q:I<1 D
|
---|
25 | . S TEXT=$P(@ORXQ@(I),U),XQAID=$P(@ORXQ@(I),U,2),DATE=$P(XQAID,";",3)
|
---|
26 | . Q:XQAID'?1"OR,".E I $G(ORPAT) Q:+$P(XQAID,",",2)'=ORPAT
|
---|
27 | . S NOT=+$P(XQAID,",",3) Q:"^18^19^20^35^36^"[(U_NOT_U) ;skip ADT ones
|
---|
28 | . I ACTDT,ACTDT'>DT,$$INCLD(NOT) Q ;skip results ones already included
|
---|
29 | . S ORN=ORN+1,@ORY@(ORN)="Item=NOT:"_XQAID_U_$E(TEXT,23,99)_U_$$FMTHL7^XLFDT(DATE)
|
---|
30 | K @ORXQ
|
---|
31 | Q
|
---|
32 | ;
|
---|
33 | INCLD(NIEN) ; -- Order already in Results column?
|
---|
34 | ; [from PAT - uses ORUSR]
|
---|
35 | N X,Y,DATA,NMSP,PKG S X=U_NIEN_U,Y=0
|
---|
36 | S NMSP=$S("^3^14^24^57^58^"[X:"LR","^21^22^25^53^"[X:"RA","^23^"[X:"GMRC","^32^33^44^60^"[X:"X",1:"") I NMSP="" Q 0
|
---|
37 | S DATA=$G(^XTV(8992,ORUSR,"XQA",DATE,1)),PKG=$P($P(DATA,"|",2),"@",2)
|
---|
38 | S ORIFN=0 F S ORIFN=$O(^ORA(102.4,"ACK",ORUSR,ORIFN)) Q:ORIFN<1 D Q:Y
|
---|
39 | . S OR0=$G(^OR(100,+ORIFN,0)),PKGIFN=+$G(^(4))
|
---|
40 | . S ORVP=$P(OR0,U,2) Q:+ORVP'=ORPAT
|
---|
41 | . S ORPKG=$$NMSP^ORCD($P(OR0,U,14)) I ORPKG'=NMSP,'(NMSP="X"&(PKG[ORPKG)) Q
|
---|
42 | . S:$$MATCH Y=1
|
---|
43 | Q Y
|
---|
44 | ;
|
---|
45 | RSLT(ORDER,ORUSR) ; -- clear alerts for ORDERs results
|
---|
46 | N ORY,ORN,ORIFN,OR0,ORVP,ORPKG,PKGIFN,NIEN,PKGID,AID,DATA
|
---|
47 | D USER(.ORY,ORUSR),ORN ;notifs by pkg
|
---|
48 | S ORIFN=0 F S ORIFN=$O(ORDER(ORIFN)) Q:ORIFN<1 D
|
---|
49 | . S OR0=$G(^OR(100,+ORIFN,0)),PKGIFN=+$G(^(4))
|
---|
50 | . S ORPKG=$$NMSP^ORCD($P(OR0,U,14)) Q:"^LR^RA^GMRC^"'[(U_ORPKG_U)
|
---|
51 | . S ORVP=$P(OR0,U,2),PKGID="OR,"_+ORVP
|
---|
52 | . F S PKGID=$O(@ORY@(PKGID)) Q:$P(PKGID,",",1,2)'=("OR,"_+ORVP) D
|
---|
53 | .. S NIEN=$P(PKGID,",",3) Q:'$D(ORN(ORPKG,NIEN)) ;alert not for ORPKG
|
---|
54 | .. S AID="" F S AID=$O(@ORY@(PKGID,AID)) Q:AID="" D
|
---|
55 | ... S DATA=@ORY@(PKGID,AID) Q:'$$MATCH
|
---|
56 | ... D DELETE(PKGID_";"_AID)
|
---|
57 | K @ORY
|
---|
58 | Q
|
---|
59 | ;
|
---|
60 | ORN ; -- List result notifications by pkg in ORN(NMSP,IEN)
|
---|
61 | N X,Y,I,N K ORN
|
---|
62 | F X="LR","RA","GMRC" D
|
---|
63 | . S Y=$S(X="LR":"3^14^24^57^58",X="RA":"21^22^25^53",X="GMRC":"23",1:"")
|
---|
64 | . F I=1:1:$L(Y,U) S N=$P(Y,U,I),ORN(X,N)=""
|
---|
65 | . F I=32,33,44,60 S ORN(X,I)="" ;flagged or stat results, for any pkg
|
---|
66 | Q
|
---|
67 | ;
|
---|
68 | MATCH() ; -- Return 1 or 0, if alert matches current order
|
---|
69 | ; Called from RSLT & $$INCLD, so expects those var's to be defined
|
---|
70 | N Y,APKG,ADATA S Y=0
|
---|
71 | S ADATA=$P(DATA,"|"),APKG=$P($P(DATA,"|",2),"@",2)
|
---|
72 | I ORPKG="LR",APKG["LR",+DATA=+ORIFN S Y=1 G MQ
|
---|
73 | I "^32^33^44^60^"[(U_NIEN_U) D G MQ
|
---|
74 | . I ORPKG="RA",APKG["RA",$D(^RADPT("AO",PKGIFN,+ORVP,+$P(ADATA,"~",2),+$P(ADATA,"~",3))) S Y=1 ;IA#2588
|
---|
75 | . I ORPKG="GMRC",APKG["GMRC",PKGIFN=+ADATA S Y=1
|
---|
76 | I ORPKG="RA",$D(^RADPT("AO",PKGIFN,+ORVP,+ADATA,+$P(ADATA,"~",2))) S Y=1 ;IA#2588
|
---|
77 | I ORPKG="GMRC",PKGIFN=+ADATA S Y=1
|
---|
78 | MQ Q Y
|
---|
79 | ;
|
---|
80 | SIGN(ID) ; -- clear alerts for signatures
|
---|
81 | N ORY,ORNKILL,ORVP,PKGID,AID
|
---|
82 | D USER(.ORY,DUZ) I ID["OR" D G SIGQ
|
---|
83 | . S ORVP=$P($G(^OR(100,+ID,0)),U,2) Q:$O(^OR(100,"AS",ORVP,0))
|
---|
84 | . S PKGID="OR,"_+ORVP_",12",AID=""
|
---|
85 | . F S AID=$O(@ORY@(PKGID,AID)) Q:AID="" S ORNKILL(PKGID_";"_AID)=""
|
---|
86 | I ID["TIU" D G SIGQ
|
---|
87 | . S PKGID="TIU"_+ID,AID=""
|
---|
88 | . F S AID=$O(@ORY@(PKGID,AID)) Q:AID="" S ORNKILL(PKGID_";"_AID)=""
|
---|
89 | . ;ck w/Joel: possible alerts + formats, kill conditions
|
---|
90 | SIGQ I $D(ORNKILL) D DELETE
|
---|
91 | K @ORY
|
---|
92 | Q
|
---|
93 | ;
|
---|
94 | DELETE(XQAID) ; -- Delete alert XQAID
|
---|
95 | Q:'$L($G(XQAID)) N XQAKILL,ORN
|
---|
96 | S ORN=+$P($P(XQAID,";"),",",3),XQAKILL=$S(ORN:$$XQAKILL^ORB3F1(ORN),1:0)
|
---|
97 | D DELETE^XQALERT ;for DUZ
|
---|
98 | Q
|
---|
99 | ;
|
---|
100 | MSGTXT(ID) ; -- Return message text of alert ID
|
---|
101 | N IDX,D0,D1,Y
|
---|
102 | S IDX="^XTV(8992,""AXQA"","""_ID_""")",IDX=$Q(@IDX)
|
---|
103 | S D0=+$P(IDX,",",6),D1=+$P(IDX,",",7)
|
---|
104 | S Y=$P($G(^XTV(8992,D0,"XQA",D1,0)),U,3),Y=$E(Y,20,999)
|
---|
105 | Q Y
|
---|
106 | ;
|
---|
107 | MSGDT(ADT,ATXT) ; -- Return event date from alert date and text
|
---|
108 | N I,X,Y,%DT
|
---|
109 | I ATXT?1"Transfer".E S Y=ADT G MDQ ;no date in text
|
---|
110 | S I=$F(ATXT," on "),X="" S:I X=$E(ATXT,I,999)
|
---|
111 | I ATXT?1"Admit".E S I=$F(X," "),X=$E(X,1,I-3) ;strip off ward,rm-bed
|
---|
112 | S:X?2N1"/"2N1" "2N1":"2N X=$TR(X," ","@")
|
---|
113 | S %DT="TS" D ^%DT I Y<0 S Y=ADT
|
---|
114 | MDQ Q Y
|
---|