1 | ORRCOR ;SLC/MKB - OR data for CM ; 25 Jul 2003 9:31 AM
|
---|
2 | ;;1.0;CARE MANAGEMENT;**3**;Jul 15, 2003
|
---|
3 | ;
|
---|
4 | PTUNS(ORY,ORUSR) ; -- Return list of patients with unsigned orders by ORUSR
|
---|
5 | ; in @ORY@(PAT) = #unsigned orders
|
---|
6 | ; @ORY@(PAT,"ORU:ien;act")=""
|
---|
7 | ; [from ORRCDPT]
|
---|
8 | N IDX,PAT,IFN,ACT,NUM,X
|
---|
9 | S ORY=$NA(^TMP($J,"ORRCORU")),IDX="^OR(100,""AS"")" K @ORY
|
---|
10 | F S IDX=$Q(@IDX) Q:IDX'?1"^OR(100,""AS"",".E D
|
---|
11 | . S PAT=+$P($P(IDX,",",3),"""",2),IFN=+$P(IDX,",",5),ACT=+$P(IDX,",",6)
|
---|
12 | . Q:+$P($G(^OR(100,IFN,8,ACT,0)),U,3)'=ORUSR
|
---|
13 | . S X=+$G(ORY(PAT)),ORY(PAT)=X+1,ORY(PAT,"ORU:"_IFN_";"_ACT)=""
|
---|
14 | Q
|
---|
15 | ;
|
---|
16 | IDS(ORY,ORPAT,ORTYPE,ORBEG,OREND) ; -- Return order IDs for ORPAT where
|
---|
17 | ; ORTYPE = ORN: Active Nursing Orders (2)
|
---|
18 | ; ORV: Orders Unverified by Nursing (9)
|
---|
19 | ; in @ORY@(PAT) = #orders
|
---|
20 | ; @ORY@(PAT,ID)= ! if completed (for ORN), else null
|
---|
21 | ; [from ORRCDPT1]
|
---|
22 | N ORN,ORWARD,ORFLG,ORID,ORDG,ORPKG,ORLIST,ORI,ORIFN,STS,PKG,X
|
---|
23 | S ORY=$NA(^TMP($J,"ORRCORU")) K @ORY
|
---|
24 | S ORPAT=+$G(ORPAT)_";DPT(",ORTYPE=$G(ORTYPE,"ORD")
|
---|
25 | S ORWARD=$G(^DPT(+ORPAT,.1)) S:$L(ORWARD) ORWARD=+$O(^DIC(42,"B",ORWARD,0))
|
---|
26 | S ORFLG=$S(ORTYPE="ORU":11,ORTYPE="ORV":9,1:2),ORID=ORTYPE_":"
|
---|
27 | S ORDG=$S(ORTYPE="ORN":"NURS",1:"ALL"),ORDG=+$O(^ORD(100.98,"B",ORDG,0))
|
---|
28 | S ORPKG=+$O(^DIC(9.4,"C","OR",0))
|
---|
29 | ;S (ORBEG,OREND)="" I ORFLG=9 S OREND=$$NOW^XLFDT,ORBEG=OREND-1
|
---|
30 | D EN^ORQ1(ORPAT,ORDG,ORFLG,,$G(ORBEG),$G(OREND)) S (ORI,CNT)=0
|
---|
31 | F S ORI=+$O(^TMP("ORR",$J,ORLIST,ORI)) Q:ORI<1 S ORIFN=^(ORI) D
|
---|
32 | . S STS=$P($G(^OR(100,+ORIFN,3)),U,3),PKG=+$P($G(^(0)),U,14),X=""
|
---|
33 | . ;I ORTYPE="ORV",STS=1,+$G(^(6))=10 Q ;changed ??
|
---|
34 | . I ORTYPE="ORN","^1^2^7^11^12^13^14^"[(U_STS_U)!(PKG'=ORPKG) S X="!" ;can't complete
|
---|
35 | . S CNT=CNT+1,@ORY@(+ORPAT,ORID_ORIFN)=X
|
---|
36 | S:CNT @ORY@(+ORPAT)=CNT K ^TMP("ORR",$J,ORLIST)
|
---|
37 | ;if ORTYPE=ORN also get all other GEN TEXT ORDERS not in NURSING display group
|
---|
38 | Q:ORTYPE'="ORN"
|
---|
39 | S ORDG="CLINIC ORDERS",ORDG=+$O(^ORD(100.98,"B",ORDG,0))
|
---|
40 | D EN^ORQ1(ORPAT,ORDG,ORFLG,,$G(ORBEG),$G(OREND))
|
---|
41 | S ORI=0 F S ORI=+$O(^TMP("ORR",$J,ORLIST,ORI)) Q:ORI<1 D
|
---|
42 | . S ORIFN=$G(^TMP("ORR",$J,ORLIST,ORI))
|
---|
43 | . S STS=$P($G(^OR(100,+ORIFN,3)),U,3),PKG=+$P($G(^(0)),U,14),X=""
|
---|
44 | . I ORTYPE="ORN","^1^2^7^11^12^13^14^"[(U_STS_U)!(PKG'=ORPKG) S X="!" ;can't complete
|
---|
45 | . Q:(PKG'=ORPKG)
|
---|
46 | . S CNT=CNT+1,@ORY@(+ORPAT,ORID_ORIFN)=X
|
---|
47 | S:CNT @ORY@(+ORPAT)=CNT K ^TMP("ORR",$J,ORLIST)
|
---|
48 | Q
|
---|
49 | ;
|
---|
50 | LISTUNS(ORY,ORUSR,ORPAT,ORDET) ; -- Return unsigned orders by ORUSR for ORPAT
|
---|
51 | ; in @ORY@(#) = Item=ID^Text^OrderDate in HL7 format
|
---|
52 | ; = Order=line of order text, and also if ORDET
|
---|
53 | ; = Text=line of report text
|
---|
54 | ; [from LIST^ORRCSIG]
|
---|
55 | N ORN,ORDT,ORIFN,ORACT,ORID,ORRCTX,I
|
---|
56 | S ORY=$NA(^TMP($J,"ORRCORD")) K @ORY
|
---|
57 | S ORUSR=+$G(ORUSR),ORPAT=+$G(ORPAT)_";DPT(",ORN=0
|
---|
58 | S ORDT=0 F S ORDT=+$O(^OR(100,"AS",ORPAT,ORDT)) Q:ORDT<1 D
|
---|
59 | . S ORIFN=0 F S ORIFN=+$O(^OR(100,"AS",ORPAT,ORDT,ORIFN)) Q:ORIFN<1 D
|
---|
60 | .. S ORACT=0 F S ORACT=+$O(^OR(100,"AS",ORPAT,ORDT,ORIFN,ORACT)) Q:ORACT<1 D
|
---|
61 | ... Q:+$P($G(^OR(100,ORIFN,8,ORACT,0)),U,3)'=ORUSR S ORID=ORIFN_";"_ORACT
|
---|
62 | ... D TEXT^ORQ12(.ORRCTX,ORID,200)
|
---|
63 | ... S ORN=ORN+1,@ORY@(ORN)="Item=ORU:"_ORID_U_$$TXT1_U_$$FMTHL7^XLFDT(ORDT)_U_$$STS(ORIFN)
|
---|
64 | ... S I=0 F S I=$O(ORRCTX(I)) Q:I<1 S ORN=ORN+1,@ORY@(ORN)="Order="_ORRCTX(I)
|
---|
65 | ... I $G(ORDET) D ORD ;add Detailed Display to @ORY@(#)
|
---|
66 | ;S ORY(0)=CNT
|
---|
67 | Q
|
---|
68 | ;
|
---|
69 | LIST(ORY,ORPAT,ORTYPE,ORUSR,ORDET,ORBEG,OREND) ; -- Return orders for ORPAT where
|
---|
70 | ; ORTYPE = ORN: Active Nursing Orders (2)
|
---|
71 | ; ORV: Orders Unverified by Nursing (9)
|
---|
72 | ; ORU: Unsigned Orders by ORUSR (11)
|
---|
73 | ; in @ORY@(#) = Item=ID^Text^OrderDate in HL7 format^Status
|
---|
74 | ; = Order=line of order text, & if ORDET
|
---|
75 | ; = Text=line of report text
|
---|
76 | ; where ID = ORTYPE_":"_order#;action#
|
---|
77 | ; RPC = ORRC ORDERS BY PATIENT
|
---|
78 | N ORN,ORWARD,ORIGVIEW,ORFLG,ORID,ORDG,ORLIST,ORI,ORIFN,ORACT,OR0,ORA0,ORDT,ORRCTX,I
|
---|
79 | S ORY=$NA(^TMP($J,"ORRCORD")) K @ORY
|
---|
80 | S ORUSR=+$G(ORUSR),ORPAT=+$G(ORPAT)_";DPT(",ORTYPE=$G(ORTYPE,"ORD")
|
---|
81 | S ORWARD=$G(^DPT(+ORPAT,.1)),ORIGVIEW=1
|
---|
82 | S:$L(ORWARD) ORWARD=+$O(^DIC(42,"B",ORWARD,0))
|
---|
83 | S ORFLG=$S(ORTYPE="ORU":11,ORTYPE="ORV":9,1:2),ORID=ORTYPE_":"
|
---|
84 | S ORDG=$S(ORTYPE="ORN":"NURS",1:"ALL"),ORDG=+$O(^ORD(100.98,"B",ORDG,0))
|
---|
85 | S:$G(ORBEG) ORBEG=$$HL7TFM^XLFDT(ORBEG) S:$G(OREND) OREND=$$HL7TFM^XLFDT(OREND)
|
---|
86 | D EN^ORQ1(ORPAT,ORDG,ORFLG,,$G(ORBEG),$G(OREND)) S (ORI,ORN)=0
|
---|
87 | F S ORI=+$O(^TMP("ORR",$J,ORLIST,ORI)) Q:ORI<1 S ORIFN=^(ORI) D
|
---|
88 | . S ORACT=+$P(ORIFN,";",2) S:ORACT<1 ORACT=+$P($G(^OR(100,+ORIFN,3)),U,7)
|
---|
89 | . S OR0=$G(^OR(100,+ORIFN,0)),ORA0=$G(^(8,ORACT,0))
|
---|
90 | . I ORFLG=11,+$P(ORA0,U,3)'=ORUSR Q
|
---|
91 | . S ORDT=$S('$P(OR0,U,8):$P(ORA0,U),"^DC^HD^"[(U_$P(ORA0,U,2)_U):$P(ORA0,U),1:$P(OR0,U,8))
|
---|
92 | . D TEXT^ORQ12(.ORRCTX,ORIFN,200)
|
---|
93 | . S ORN=ORN+1,@ORY@(ORN)="Item="_ORID_ORIFN_U_$$TXT1_U_$$FMTHL7^XLFDT(ORDT)_U_$$STS(ORIFN)
|
---|
94 | . S I=0 F S I=$O(ORRCTX(I)) Q:I<1 S ORN=ORN+1,@ORY@(ORN)="Order="_ORRCTX(I)
|
---|
95 | . I $G(ORDET) D ORD ;add Detailed Display to @ORY@(#)
|
---|
96 | Q
|
---|
97 | ;
|
---|
98 | DETAIL(ORY,ORDER) ; -- Return details of ORDERs
|
---|
99 | ; where ORDER(#) = ID
|
---|
100 | ; in @ORY@(#) = Item=ID^Text^OrderDate in HL7 format^Status
|
---|
101 | ; = Order=line of order text
|
---|
102 | ; = Text=line of report text
|
---|
103 | ; RPC = ORRC ORDERS BY ID [and from DETAIL^ORRCSIG]
|
---|
104 | N ORN,ORI,ORID,ORIFN,ORACT,ORDT,ORRCTX,I
|
---|
105 | S ORN=0,ORY=$NA(^TMP($J,"ORRCORD")) K @ORY
|
---|
106 | S ORI="" F S ORI=$O(ORDER(ORI)) Q:ORI="" S ORID=ORDER(ORI) D
|
---|
107 | . S ORIFN=$P(ORID,":",2),ORACT=+$P(ORIFN,";",2)
|
---|
108 | . S:ORACT<1 ORACT=+$P($G(^OR(100,+ORIFN,3)),U,7) S:ORACT<1 ORACT=1
|
---|
109 | . S ORDT=+$G(^OR(100,+ORIFN,8,ORACT,0))
|
---|
110 | . D TEXT^ORQ12(.ORRCTX,ORIFN,200)
|
---|
111 | . S ORN=ORN+1,@ORY@(ORN)="Item="_ORID_U_$$TXT1_U_$P($$FMTHL7^XLFDT(ORDT),"-")_U_$$STS(ORIFN)
|
---|
112 | . S I=0 F S I=$O(ORRCTX(I)) Q:I<1 S ORN=ORN+1,@ORY@(ORN)="Order="_ORRCTX(I)
|
---|
113 | . D ORD
|
---|
114 | Q
|
---|
115 | ;
|
---|
116 | TXT(IFN) ; -- Return [first line of] order IFN's text
|
---|
117 | N ORRCTX,Y D TEXT^ORQ12(.ORRCTX,$G(IFN),200)
|
---|
118 | S Y=$G(ORRCTX(1))_$S($O(ORRCTX(1)):"...",1:"")
|
---|
119 | Q Y
|
---|
120 | ;
|
---|
121 | TXT1() ; -- Return [first line of] order text from ORRCTX()
|
---|
122 | N Y
|
---|
123 | S Y=$G(ORRCTX(1))_$S($O(ORRCTX(1)):"...",1:"")
|
---|
124 | Q Y
|
---|
125 | ;
|
---|
126 | STS(IFN) ; --Return name of order IFN's status
|
---|
127 | N STS,X,Y
|
---|
128 | S STS=+$P($G(^OR(100,+$G(IFN),3)),U,3)
|
---|
129 | S X=$P($G(^ORD(100.01,STS,0)),U),Y=$$LOW^XLFSTR(X)
|
---|
130 | Q Y
|
---|
131 | ;
|
---|
132 | ORD ; -- Add details of ORIFN to @ORY@(ORN)
|
---|
133 | Q:'+$G(ORIFN) N ORRCZ,ORI,ORVP
|
---|
134 | S ORVP=$P($G(^OR(100,+ORIFN,0)),U,2)
|
---|
135 | S ORRCZ="^TMP($J,""ORRCTXT"")" D DETAIL^ORQ2(.ORRCZ,ORIFN)
|
---|
136 | S ORI=0 F S ORI=$O(@ORRCZ@(ORI)) Q:ORI<1 S ORN=ORN+1,@ORY@(ORN)="Text="_@ORRCZ@(ORI)
|
---|
137 | K @ORRCZ
|
---|
138 | Q
|
---|
139 | ;
|
---|
140 | VERIFY(ORY,ORUSR,ORDER) ; -- Mark ORDERs as verified by ORUSR
|
---|
141 | ;where ORDER(#) = ID = ORV:order#;action#
|
---|
142 | ;returns ORY(#) = ID^1 if successful, else ID^0^error
|
---|
143 | ;RPC = ORRC ORDERS VERIFY
|
---|
144 | Q:'$G(ORUSR) N ORVER,ORI,ORID,ORIFN,ORACT,ORA0,ORLK,ORES,ORERR,ORVP,ORWARD
|
---|
145 | K ORY S ORVER="N"
|
---|
146 | S ORI="" F S ORI=$O(ORDER(ORI)) Q:ORI="" D
|
---|
147 | . S ORID=ORDER(ORI),ORIFN=$P(ORID,":",2),ORACT=+$P(ORIFN,";",2)
|
---|
148 | . I ORACT<1 S ORACT=+$P($G(^OR(100,+ORIFN,3)),U,7),ORIFN=+ORIFN_";"_ORACT
|
---|
149 | . S ORA0=$G(^OR(100,+ORIFN,8,ORACT,0)) I $P(ORA0,U,9) D Q ;verified
|
---|
150 | .. N WHO,WHEN,X S WHO=$P(ORA0,U,8),WHEN=$P(ORA0,U,9),X=""
|
---|
151 | .. S:WHO X=X_" by "_$$UP^XLFSTR($$NAME^XUSER(WHO,"F"))
|
---|
152 | .. S:WHEN X=X_" on "_$$FMTE^XLFDT(WHEN,"2P")
|
---|
153 | .. S ORY(ORI)=ORID_"^0^This order has been verified"_X_"!" Q
|
---|
154 | . S ORLK=$$LOCK1^ORX2(+ORIFN) I 'ORLK S ORY(ORI)=ORID_U_ORLK Q
|
---|
155 | . S ORES(ORIFN)=ORID,ORES("B",ORIFN)=ORI
|
---|
156 | . D REPLCD^ORCACT1 ;incl unverified replaced orders
|
---|
157 | Q:'$O(ORES(0)) S ORIFN=0 F S ORIFN=$O(ORES(ORIFN)) Q:ORIFN<1 D
|
---|
158 | . S ORVP=$P($G(^OR(100,+ORIFN,0)),U,2),ORVP(ORVP)=""
|
---|
159 | . D EN^ORCSEND(ORIFN,"VR","","",,,.ORERR),UNLK1^ORX2(+ORIFN)
|
---|
160 | . S ORID=$G(ORES(ORIFN)),ORI=+$G(ORES("B",ORIFN))
|
---|
161 | . I ORI S ORY(ORI)=ORID_U_$S($G(ORERR):"0^"_$P(ORERR,U,2),1:1)
|
---|
162 | S ORVP="" F S ORVP=$O(ORVP(ORVP)) Q:ORVP="" D
|
---|
163 | . S ORWARD=$S($G(^DPT(+ORVP,.105)):1,1:0) ;inpt
|
---|
164 | . D CKALERT^ORCACT1 ;delete unver orders alerts
|
---|
165 | Q
|
---|
166 | ;
|
---|
167 | COMP(ORY,ORUSR,ORDER) ; -- Mark ORDERs as completed by ORUSR
|
---|
168 | ;where ORDER(#) = ID = ORN:order#;action#
|
---|
169 | ;returns ORY(#) = ID^1 if successful, else ID^0^error
|
---|
170 | ;RPC = ORRC ORDERS COMPLETE
|
---|
171 | Q:'$G(ORUSR) N ORNOW,ORI,ORID,ORIFN,ORLK
|
---|
172 | K ORY S ORNOW=+$E($$NOW^XLFDT,1,12)
|
---|
173 | S ORI="" F S ORI=$O(ORDER(ORI)) Q:ORI="" D
|
---|
174 | . S ORID=ORDER(ORI),ORIFN=+$P(ORID,":",2)
|
---|
175 | . S ORLK=$$LOCK1^ORX2(ORIFN) I 'ORLK S ORY(ORI)=ORID_U_ORLK Q
|
---|
176 | . D COMP^ORCSAVE2(ORIFN,ORUSR,ORNOW),UNLK1^ORX2(ORIFN)
|
---|
177 | . S ORY(ORI)=ORID_U_$S($P($G(^OR(100,ORIFN,6)),U,6):1,1:0)
|
---|
178 | Q
|
---|