1 | ORWDXR ; SLC/KCM/JDL - Utilites for Order Actions ;5/30/06 14:50
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,125,131,134,141,149,187,190,213,243**;Dec 17, 1997;Build 242
|
---|
3 | ;
|
---|
4 | ACTDCREA(DCIEN) ; Valid DC Reason
|
---|
5 | N X
|
---|
6 | S X=$G(^ORD(100.03,DCIEN,0))
|
---|
7 | I $P(X,U,4) Q 0
|
---|
8 | I $P(X,U,5)'=+$O(^DIC(9.4,"C","OR",0)) Q 0
|
---|
9 | I $P(X,U,7)=+$O(^ORD(100.02,"C","A",0)) Q 0
|
---|
10 | Q 1
|
---|
11 | ;
|
---|
12 | ISREL(VAL,ORIFN) ; Return true if an order has been released
|
---|
13 | N STS S STS=$P(^OR(100,+ORIFN,3),U,3)
|
---|
14 | S VAL=$S(STS=10:0,STS=11:0,1:1) ; false if delayed or unreleased order
|
---|
15 | Q
|
---|
16 | RENEW(REC,ORIFN,ORVP,ORNP,ORL,FLDS,CPLX,ORAPPT) ; Renew an order
|
---|
17 | N ORDG
|
---|
18 | N ORDUZ,ORSTS,OREVENT,ORCAT,ORDA,ORTS,ORNEW,ORCHECK,ORLOG,ORPKG
|
---|
19 | N ORDIALOG,PRMT,X0
|
---|
20 | N FSTDOSE,FST
|
---|
21 | S (FSTDOSE,FST)=0
|
---|
22 | I '$D(CPLX) S CPLX=0
|
---|
23 | I '$G(ORAPPT) S ORAPPT=""
|
---|
24 | S ORVP=ORVP_";DPT(",ORL(2)=ORL_";SC(",ORL=ORL(2)
|
---|
25 | S X0=^OR(100,+ORIFN,0)
|
---|
26 | S ORDG=$P(X0,U,11)
|
---|
27 | S ORPKG=$P(X0,U,14)
|
---|
28 | I $D(FLDS("ORCHECK")) M ORCHECK=FLDS("ORCHECK")
|
---|
29 | I $P(X0,U,5)["101.41," D ; version 3
|
---|
30 | . S ORDIALOG=+$P(X0,U,5),ORCAT=$P(^OR(100,+ORIFN,0),U,12)
|
---|
31 | . D GETDLG^ORCD(ORDIALOG),GETORDER^ORCD(+ORIFN)
|
---|
32 | . I CPLX S FSTDOSE=$P($G(ORDIALOG("B","FIRST DOSE")),U,2) S:'FSTDOSE FSTDOSE=$$PTR^ORCD("OR GTX NOW")
|
---|
33 | . I FSTDOSE,$G(ORDIALOG(FSTDOSE,1)) K ORDIALOG(FSTDOSE,1)
|
---|
34 | E D ; version 2.5 generic
|
---|
35 | . S ORDIALOG=$O(^ORD(101.41,"B","OR GXTEXT WORD PROCESSING ORDE",0))
|
---|
36 | . D GETDLG^ORCD(ORDIALOG)
|
---|
37 | . S PRMT=$O(^ORD(101.41,"B","OR GTX WORD PROCESSING 1",0))
|
---|
38 | . S ORDIALOG(PRMT,1)=$NA(^TMP("ORWORD",$J,PRMT,1))
|
---|
39 | . M ^TMP("ORWORD",$J,PRMT,1)=^OR(100,+ORIFN,1)
|
---|
40 | . S PRMT=$O(^ORD(101.41,"B","OR GTX START DATE/TIME",0))
|
---|
41 | . I $P(X0,U,9) S ORDIALOG(PRMT,1)=$P(X0,U,9)
|
---|
42 | I +FLDS(1)=999 D ; generic order
|
---|
43 | . S ORDIALOG($$PTR^ORCD("OR GTX START DATE/TIME"),1)=$P(FLDS(1),U,2)
|
---|
44 | . S ORDIALOG($$PTR^ORCD("OR GTX STOP DATE/TIME"),1)=$P(FLDS(1),U,3)
|
---|
45 | I ($O(^ORD(101.41,"AB","PS MEDS",0))>0),(+FLDS(1)=130)!(+FLDS(1)=135)!(+FLDS(1)=140),'$L($G(ORDIALOG($$PTR^ORCD("OR GTX SIG"),1))) D
|
---|
46 | . N ORDOSE,ORDRUG,ORCAT,ORWPSOI,PROMPT,DRUG
|
---|
47 | . S ORCAT=$P($G(^OR(100,+ORIFN,0)),U,12)
|
---|
48 | . S PROMPT=$$PTR^ORCD("OR GTX INSTRUCTIONS")
|
---|
49 | . S ORDRUG=$G(ORDIALOG($$PTR^ORCD("OR GTX DISPENSE DRUG"),1))
|
---|
50 | . S ORWPSOI=+$G(ORDIALOG($$PTR^ORCD("OR GTX ORDERABLE ITEM"),1))
|
---|
51 | . I ORWPSOI S ORWPSOI=+$P($G(^ORD(101.43,+ORWPSOI,0)),U,2)
|
---|
52 | . D DOSE^PSSORUTL(.ORDOSE,ORWPSOI,$S(ORCAT="I":"U",1:"O"),ORVP) ; dflt doses
|
---|
53 | . D D1^ORCDPS2 ; set up ORDOSE
|
---|
54 | . S DRUG=$G(ORDOSE("DD",+ORDRUG))
|
---|
55 | . I DRUG,ORCAT="O" D RESETID^ORCDPS
|
---|
56 | . D SIG^ORCDPS2
|
---|
57 | I +FLDS(1)=140 D ; outpatient meds
|
---|
58 | . K ORDIALOG($$PTR^ORCD("OR GTX START DATE"),1) ; remove effective dt
|
---|
59 | . S ORDIALOG($$PTR^ORCD("OR GTX REFILLS"),1)=$P(FLDS(1),U,4)
|
---|
60 | . S ORDIALOG($$PTR^ORCD("OR GTX ROUTING"),1)=$P(FLDS(1),U,5)
|
---|
61 | . S PRMT=$$PTR^ORCD("OR GTX WORD PROCESSING 1")
|
---|
62 | . K ^TMP("ORWORD",$J,PRMT,1)
|
---|
63 | . S I=1 F S I=$O(FLDS(I)) Q:'I S ^TMP("ORWORD",$J,PRMT,1,I-1,0)=FLDS(I)
|
---|
64 | . S ^TMP("ORWORD",$J,PRMT,1,0)=U_U_(I-1)_U_(I-1)_U_DT_U
|
---|
65 | . S ORDIALOG(PRMT,1)=$NA(^TMP("ORWORD",$J,PRMT,1))
|
---|
66 | . N SIG,PI,X S SIG=$$PTR^ORCD("OR GTX SIG")
|
---|
67 | . S PI=$$PTR^ORCD("OR GTX PATIENT INSTRUCTIONS"),X=$$STR(PI)
|
---|
68 | . I $L(X),$$STR(SIG)[X S ORDIALOG(PI,"FORMAT")="@" ;PI in Sig
|
---|
69 | D RN^ORCSAVE
|
---|
70 | S REC="" S ORIFN=+ORIFN_";"_ORDA D GETBYIFN^ORWORR(.REC,ORIFN)
|
---|
71 | Q
|
---|
72 | RNWFLDS(LST,ORIFN) ; Return fields for renew action
|
---|
73 | ; LST(0)=RenewType^Start^Stop^Refills^Pickup LST(n)=Comments
|
---|
74 | N X0,DG,PKG,RNWTYPE,START,STOP,REFILLS,OROI
|
---|
75 | S ORIFN=+ORIFN,X0=^OR(100,ORIFN,0),DG=$P(X0,U,11),PKG=$P(X0,U,14)
|
---|
76 | S PKG=$E($P(^DIC(9.4,PKG,0),U,2),1,2),DG=$P(^ORD(100.98,DG,0),U,3)
|
---|
77 | S LST(0)=$S(PKG="OR":999,PKG="PS"&(DG="O RX"):140,PKG="PS"&(DG="UD RX"):130,PKG="PS"&(DG="NV RX"):145,1:0)
|
---|
78 | I +LST(0)=140 D
|
---|
79 | . S LST(0)=LST(0)_U_U_U_+$$VAL(ORIFN,"REFILLS")_U_$$VAL(ORIFN,"PICKUP")
|
---|
80 | . ;D WPVAL(.LST,ORIFN,"COMMENT")
|
---|
81 | I +LST(0)=999 S LST(0)=LST(0)_U_$$VAL(ORIFN,"START")_U_$$VAL(ORIFN,"STOP")
|
---|
82 | ; make sure start/stop times are relative times, otherwise use NOW, no Stop
|
---|
83 | I +$P(LST(0),U,2) S $P(LST(0),U,2)="NOW"
|
---|
84 | I +$P(LST(0),U,3)!($P(LST(0),U,3)="0") S $P(LST(0),U,3)=""
|
---|
85 | ;NEW STUFF AFTER THIS LINE OR*3*243
|
---|
86 | S $P(LST(0),U,9)=0
|
---|
87 | S OROI=$O(^OR(100,+ORIFN,4.5,"ID","ORDERABLE",0))
|
---|
88 | Q:'OROI
|
---|
89 | S OROI=$G(^OR(100,+ORIFN,4.5,OROI,1))
|
---|
90 | Q:'OROI
|
---|
91 | S $P(LST(0),U,9)=$$ISCLOZ^ORALWORD(OROI)
|
---|
92 | ; add to LST node specifying if patient of ORIFN passes clozapine lab tests
|
---|
93 | I $P(LST(0),U,9) D
|
---|
94 | .N ORY,ORDFN,ORTMP
|
---|
95 | .S ORTMP=LST(0)
|
---|
96 | .K LST
|
---|
97 | .S LST(0)=ORTMP
|
---|
98 | .S ORDFN=$P(^OR(100,ORIFN,0),U,2)
|
---|
99 | .I $P(ORDFN,";",2)'="DPT(" Q
|
---|
100 | .S ORDFN=+ORDFN
|
---|
101 | .D ALLWORD^ORALWORD(.ORY,ORDFN,ORIFN,"E")
|
---|
102 | .M LST(1)=ORY
|
---|
103 | Q
|
---|
104 | VAL(ORIFN,ID) ; Return value for order response
|
---|
105 | N DA S DA=+$O(^OR(100,ORIFN,4.5,"ID",ID,0))
|
---|
106 | Q $G(^OR(100,ORIFN,4.5,DA,1))
|
---|
107 | WPVAL(TXT,ORIFN,ID) ; Return word processing value
|
---|
108 | N DA S DA=+$O(^OR(100,ORIFN,4.5,"ID",ID,0))
|
---|
109 | S I=0 F S I=$O(^OR(100,ORIFN,4.5,DA,2,I)) Q:'I S TXT(I)=^(I,0)
|
---|
110 | Q
|
---|
111 | STR(PTR) ; -- Return word processing text as long string for comparison
|
---|
112 | N X,Y,I,ARRY
|
---|
113 | S ARRY=$G(ORDIALOG(+$G(PTR),1)) Q:'$L(ARRY) ""
|
---|
114 | S I=+$O(@ARRY@(0)),Y=$$UP^XLFSTR($G(@ARRY@(I,0)))
|
---|
115 | F S I=+$O(@ARRY@(I)) Q:'I S X=$G(@ARRY@(I,0)),Y=Y_$$UP^XLFSTR(X)
|
---|
116 | S Y=$TR(Y," ") ;remove all spaces, compare only text
|
---|
117 | Q Y
|
---|
118 | CHKACT(ORDERID,ORWSIG,ORWREL,ORWNATR) ; Return error if can't sign/release order
|
---|
119 | N ORACT,ORWERR
|
---|
120 | ; begin case
|
---|
121 | S ORACT=""
|
---|
122 | I (ORWSIG=1),$D(^XUSEC("ORES",DUZ)) S ORACT="ES" G XC1
|
---|
123 | I (ORWSIG=7),$D(^XUSEC("ORES",DUZ)) S ORACT="DS" G XC1
|
---|
124 | I ORWREL,(ORWNATR="W") S ORACT="OC" G XC1
|
---|
125 | I ORWREL S ORACT="RS" S:$P($G(^OR(100,+ORDERID,0)),U,16)<2 ORACT="ES"
|
---|
126 | XC1 ; end case
|
---|
127 | S ORWERR=""
|
---|
128 | I $L(ORACT),$$VALID^ORCACT0(ORDERID,ORACT,.ORWERR,ORWNATR) S ORWERR=""
|
---|
129 | Q ORWERR
|
---|
130 | GTORITM(Y,ORIFN) ;-- Get back the orderable item IEN
|
---|
131 | S ORIFN=+ORIFN
|
---|
132 | S Y=$$VALUE^ORCSAVE2(ORIFN,"ORDERABLE")
|
---|
133 | Q
|
---|
134 | GETPKG(Y,IFN) ;Get package for an order
|
---|
135 | N ORDERID,PKGID
|
---|
136 | Q:+IFN<1
|
---|
137 | S ORDERID=+IFN,Y=""
|
---|
138 | S PKGID=$P(^OR(100,ORDERID,0),U,14)
|
---|
139 | S:PKGID>0 Y=$P(^DIC(9.4,PKGID,0),U,2)
|
---|
140 | Q
|
---|
141 | ISCPLX(ORY,ORID) ; 1: is complex order 0: is not
|
---|
142 | Q:'$D(^OR(100,+ORID,0))
|
---|
143 | N PKG
|
---|
144 | S PKG=$P($G(^OR(100,+ORID,0)),U,14)
|
---|
145 | S PKG=$$NMSP^ORCD(PKG)
|
---|
146 | I PKG'="PS" Q
|
---|
147 | N NUMCHDS,NOWID,NOWVAL
|
---|
148 | S (NOWVAL,NOWID)=0
|
---|
149 | S NUMCHDS=$P($G(^OR(100,+ORID,2,0)),U,4)
|
---|
150 | I NUMCHDS>2 S ORY=1 Q
|
---|
151 | I NUMCHDS=2 D
|
---|
152 | . S ORY=1
|
---|
153 | . S:$D(^OR(100,+ORID,4.5,"ID","NOW")) NOWID=$O(^("NOW",0))
|
---|
154 | . S:NOWID NOWVAL=$G(^OR(100,+ORID,4.5,NOWID,1))
|
---|
155 | I NOWVAL=1 S ORY=0 Q
|
---|
156 | Q
|
---|
157 | ORCPLX(ORY,ORID,ORACT) ;Return children orders of the complex order
|
---|
158 | Q:'$D(^OR(100,+ORID,0))
|
---|
159 | N PKG,LACT,OELACT,ISNOW
|
---|
160 | S PKG=$P($G(^OR(100,+ORID,0)),U,14)
|
---|
161 | S PKG=$$NMSP^ORCD(PKG)
|
---|
162 | I PKG'="PS" Q
|
---|
163 | N CHLDCNT,IDX,X3
|
---|
164 | S (CHLDCNT,IDX)=0
|
---|
165 | S:$L($G(^OR(100,+ORID,2,0))) CHLDCNT=$P(^(0),U,4)
|
---|
166 | I 'CHLDCNT Q
|
---|
167 | F S IDX=$O(^OR(100,+ORID,2,IDX)) Q:'IDX D
|
---|
168 | . S (LACT,OELACT,ISNOW)=0
|
---|
169 | . D ISNOW(.ISNOW,IDX)
|
---|
170 | . Q:ISNOW
|
---|
171 | . S X3=$G(^OR(100,IDX,3))
|
---|
172 | . S LACT=$P(X3,U,7)
|
---|
173 | . F S OELACT=$O(^OR(100,IDX,8,OELACT),-1) Q:OELACT
|
---|
174 | . S:OELACT>LACT LACT=OELACT
|
---|
175 | . S ORY(IDX)=IDX_";"_LACT
|
---|
176 | Q
|
---|
177 | CANRN(ORY,ORID) ; Check conjunction for renew.
|
---|
178 | ; All conjunctioni = "And" return 1
|
---|
179 | ; Has a "Then" return 0
|
---|
180 | Q:'$G(^OR(100,+ORID,0))
|
---|
181 | N PKG
|
---|
182 | S PKG=$P($G(^OR(100,+ORID,0)),U,14)
|
---|
183 | S PKG=$$NMSP^ORCD(PKG)
|
---|
184 | I PKG'="PS" Q
|
---|
185 | N INDX,INDY,CANRENEW
|
---|
186 | S INDX=0
|
---|
187 | S CANRENEW=1
|
---|
188 | N CHID
|
---|
189 | S CHID=0 F S CHID=$O(^OR(100,+ORID,2,CHID)) Q:'CHID D
|
---|
190 | . N ORSTS,ACTIVE S ORSTS=0
|
---|
191 | . S ORSTS=$P($G(^OR(100,CHID,3)),U,3)
|
---|
192 | . S ACTIVE=$O(^ORD(100.01,"B","ACTIVE",0))
|
---|
193 | . I ACTIVE'=ORSTS S CANRENEW=0
|
---|
194 | I 'CANRENEW S ORY=CANRENEW Q
|
---|
195 | F S INDX=$O(^OR(100,+ORID,4.5,"ID","CONJ",INDX)) Q:'INDX D
|
---|
196 | . S INDY=0 F S INDY=$O(^OR(100,+ORID,4.5,INDX,INDY)) Q:'INDY D
|
---|
197 | . . I $G(^(INDY))="T" S CANRENEW=0 Q
|
---|
198 | . I CANRENEW=0 Q
|
---|
199 | S ORY=CANRENEW
|
---|
200 | Q
|
---|
201 | ISNOW(ORY,ORID) ; Is first time now order?
|
---|
202 | N SCH
|
---|
203 | Q:'$D(^OR(100,+ORID,0))
|
---|
204 | S SCH=""
|
---|
205 | S SCH=$O(^OR(100,+ORID,4.5,"ID","SCHEDULE",0))
|
---|
206 | S:SCH SCH=$G(^OR(100,+ORID,4.5,SCH,1))
|
---|
207 | S:SCH="NOW" ORY=1
|
---|
208 | Q
|
---|