1 | ORWU ; SLC/KCM - General Utilites for Windows Calls; 2/28/01 [1/15/04 11:43am]
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,132,148,149,187,195,215**;Dec 17, 1997
|
---|
3 | ;
|
---|
4 | DT(Y,X,%DT) ; Internal Fileman Date/Time
|
---|
5 | ; change the '00:00' that could be passed so Fileman doesn't reject
|
---|
6 | I $L($P(X,"@",2)),("00000000"[$TR($P(X,"@",2),":","")) S $P(X,"@",2)="00:00:01"
|
---|
7 | S %DT=$G(%DT,"TS") D ^%DT K %DT
|
---|
8 | Q
|
---|
9 | VALDT(Y,X,%DT) ; Validate date/time
|
---|
10 | S:'$D(%DT) %DT="TX" D ^%DT
|
---|
11 | Q
|
---|
12 | USERINFO(REC) ; Relevant info for current user
|
---|
13 | ; return DUZ^NAME^USRCLS^CANSIGN^ISPROVIDER^ORDERROLE^NOORDER^DTIME^
|
---|
14 | ; COUNTDOWN^ENABLEVERIFY^NOTIFYAPPS^MSGHANG^DOMAIN^SERVICE^
|
---|
15 | ; AUTOSAVE^INITTAB^LASTTAB^WEBACCESS^ALLOWHOLD^ISRPL^RPLLIST^
|
---|
16 | ; CORTABS^RPTTAB^STANUM^GECSTATUS^PRODACCT
|
---|
17 | N X,ORRPL,ORRPL1,ORRPL2,ORTAB,CORTABS,RPTTAB,ORDT,OREFF,OREXP,ORDATEOK
|
---|
18 | S REC=DUZ_U_$P(^VA(200,DUZ,0),U)
|
---|
19 | S $P(REC,U,3)=$S($D(^XUSEC("ORES",DUZ)):3,$D(^XUSEC("ORELSE",DUZ)):2,$D(^XUSEC("OREMAS",DUZ)):1,1:0)
|
---|
20 | S $P(REC,U,4)=$D(^XUSEC("ORES",DUZ))&$D(^XUSEC("PROVIDER",DUZ))
|
---|
21 | S $P(REC,U,5)=$D(^XUSEC("PROVIDER",DUZ))
|
---|
22 | S $P(REC,U,6)=$$ORDROLE
|
---|
23 | S $P(REC,U,7)=$$GET^XPAR("USR^SYS^PKG","ORWOR DISABLE ORDERING",1,"I")
|
---|
24 | S $P(REC,U,8)=$$GET^XPAR("USR^SYS","ORWOR TIMEOUT CHART",1,"I")
|
---|
25 | I '$P(REC,U,8),$G(DTIME) S $P(REC,U,8)=DTIME
|
---|
26 | S $P(REC,U,9)=$$GET^XPAR("USR^SYS^PKG","ORWOR TIMEOUT COUNTDOWN",1,"I")
|
---|
27 | S X=$$GET^XPAR("USR^SYS^PKG","ORWOR ENABLE VERIFY",1,"I")
|
---|
28 | S $P(REC,U,10)=$S(X=1:1,X=2:0,1:'$P(REC,U,7))
|
---|
29 | S $P(REC,U,11)=$$GET^XPAR("USR^SYS^PKG","ORWOR BROADCAST MESSAGES",1,"I")
|
---|
30 | S $P(REC,U,12)=$$GET^XPAR("USR^SYS^PKG","ORWOR AUTO CLOSE PT MSG",1,"I")
|
---|
31 | S $P(REC,U,13)=$$KSP^XUPARAM("WHERE") ; domain
|
---|
32 | S $P(REC,U,14)=+$G(^VA(200,DUZ,5)) ; service/section
|
---|
33 | S $P(REC,U,15)=$$GET^XPAR("USR^SYS^PKG","ORWOR AUTOSAVE NOTE",1,"I")
|
---|
34 | S $P(REC,U,16)=$$GET^XPAR("USR^DIV^SYS^PKG","ORCH INITIAL TAB",1,"I")
|
---|
35 | S $P(REC,U,17)=$$GET^XPAR("USR^DIV^SYS^PKG","ORCH USE LAST TAB",1,"I")
|
---|
36 | S $P(REC,U,18)=$$GET^XPAR("USR^DIV^SYS^PKG","ORWOR DISABLE WEB ACCESS",1,"I")
|
---|
37 | S $P(REC,U,19)=$$GET^XPAR("SYS^PKG","ORWOR DISABLE HOLD ORDERS",1,"I")
|
---|
38 | ; 2 pieces added by PKS on 11/5/2001 for "Reports Only:"
|
---|
39 | ; IA# 10060 allows read access to ^VA(200 file.
|
---|
40 | S ORRPL=$G(^VA(200,DUZ,101)) ; RPL node.
|
---|
41 | S ORRPL1=$P(ORRPL,U)
|
---|
42 | S $P(REC,U,20)=ORRPL1 ; ISRPL piece.
|
---|
43 | S ORRPL2=$P(ORRPL,U,2)
|
---|
44 | S $P(REC,U,21)=ORRPL2 ; RPLLIST piece.
|
---|
45 | ;
|
---|
46 | ; Additional pieces for CPRS tabs access:
|
---|
47 | ; IA# 10060 allows read access to ^VA(200.01013 multiple.
|
---|
48 | S ORDT=DT ; Today.
|
---|
49 | S (CORTABS,RPTTAB)=0
|
---|
50 | S ORRPL=0
|
---|
51 | F S ORRPL=$O(^VA(200,DUZ,"ORD",ORRPL)) Q:ORRPL<1 D
|
---|
52 | .S ORTAB=$G(^VA(200,DUZ,"ORD",ORRPL,0))
|
---|
53 | .I ORTAB="" Q
|
---|
54 | .S OREFF=$P(ORTAB,U,2)
|
---|
55 | .S OREXP=$P(ORTAB,U,3)
|
---|
56 | .S ORTAB=$P(ORTAB,U)
|
---|
57 | .I ORTAB="" Q
|
---|
58 | .S ORTAB=$G(^ORD(101.13,ORTAB,0))
|
---|
59 | .I ORTAB="" Q
|
---|
60 | .S ORTAB=$P(ORTAB,U)
|
---|
61 | .I ORTAB="" Q
|
---|
62 | .S ORTAB=$$UP^XLFSTR(ORTAB)
|
---|
63 | .S ORDATEOK=1 ; Default.
|
---|
64 | .I ((OREFF="")!(OREFF>ORDT)) S ORDATEOK=0 ; Eff. date NG.
|
---|
65 | .I ORDATEOK D
|
---|
66 | ..I OREXP="" Q ; No exp. date.
|
---|
67 | ..I (OREXP<ORDT) S ORDATEOK=0 ; Exp. date NG.
|
---|
68 | ..I (OREXP=ORDT) S ORDATEOK=0 ; Exp. date NG.
|
---|
69 | .;
|
---|
70 | .; Set TRUE if OK:
|
---|
71 | .I ((ORTAB="COR")&(ORDATEOK)) S CORTABS=1
|
---|
72 | .I ((ORTAB="RPT")&(ORDATEOK)) S RPTTAB=1
|
---|
73 | ;
|
---|
74 | ; When done, set all valid tabs for access:
|
---|
75 | S $P(REC,U,22)=CORTABS ; "Core" tabs.
|
---|
76 | S $P(REC,U,23)=RPTTAB ; "Reports" tab.
|
---|
77 | ;
|
---|
78 | S $P(REC,U,24)=$P($$SITE^VASITE,U,3)
|
---|
79 | S $P(REC,U,25)=$$GET^XPAR("USR^TEA","PXRM GEC STATUS CHECK",1,"I")
|
---|
80 | S $P(REC,U,26)=$$PROD^XUPROD
|
---|
81 | Q
|
---|
82 | ;
|
---|
83 | HASKEY(VAL,KEY) ; returns TRUE if the user possesses the security key
|
---|
84 | S VAL=''$D(^XUSEC(KEY,DUZ))
|
---|
85 | Q
|
---|
86 | HASOPTN(VAL,OPTION) ; returns TRUE if the user has access to a menu option
|
---|
87 | S VAL=+$$ACCESS^XQCHK(DUZ,OPTION)
|
---|
88 | I VAL'>0 S VAL=0
|
---|
89 | E S VAL=1
|
---|
90 | Q
|
---|
91 | NPHASKEY(VAL,NP,KEY) ; returns TRUE if the person has the security key
|
---|
92 | S VAL=''$D(^XUSEC(KEY,NP))
|
---|
93 | Q
|
---|
94 | ORDROLE() ; returns the role a person takes in ordering
|
---|
95 | ; VAL: 0=nokey, 1=clerk, 2=nurse, 3=physician, 4=student, 5=bad keys
|
---|
96 | ;I '$G(ORWCLVER) Q 0 ; version of client is to old for ordering
|
---|
97 | I ($D(^XUSEC("OREMAS",DUZ))+$D(^XUSEC("ORELSE",DUZ))+$D(^XUSEC("ORES",DUZ)))>1 Q 5
|
---|
98 | I $D(^XUSEC("OREMAS",DUZ)) Q 1 ; clerk
|
---|
99 | I $D(^XUSEC("ORELSE",DUZ)) Q 2 ; nurse
|
---|
100 | I $D(^XUSEC("ORES",DUZ)),$D(^XUSEC("PROVIDER",DUZ)) Q 3 ; doctor
|
---|
101 | I $D(^XUSEC("PROVIDER",DUZ)) Q 4 ; student
|
---|
102 | Q 0
|
---|
103 | VALIDSIG(ESOK,X) ; returns TRUE if valid electronic signature
|
---|
104 | S X=$$DECRYP^XUSRB1(X),ESOK=0 ; network encrypted
|
---|
105 | D HASH^XUSHSHP
|
---|
106 | I X=$P($G(^VA(200,+DUZ,20)),U,4) S ESOK=1
|
---|
107 | Q
|
---|
108 | TOOLMENU(ORLST) ; returns a list of items for the Tools menu
|
---|
109 | N ANENT
|
---|
110 | S ANENT="ALL^"_$S($G(^VA(200,DUZ,5)):"^SRV.`"_+$G(^(5)),1:"")
|
---|
111 | D GETLST^XPAR(.ORLST,ANENT,"ORWT TOOLS MENU","N")
|
---|
112 | Q
|
---|
113 | ACTLOC(LOC) ; Function: returns TRUE if active hospital location
|
---|
114 | ; IA# 10040.
|
---|
115 | N D0,X I +$G(^SC(LOC,"OOS")) Q 0 ; screen out OOS entry
|
---|
116 | S D0=+$G(^SC(LOC,42)) I D0 D WIN^DGPMDDCF Q 'X ; chk out of svc wards
|
---|
117 | S X=$G(^SC(LOC,"I")) I +X=0 Q 1 ; no inactivate date
|
---|
118 | I DT>$P(X,U)&($P(X,U,2)=""!(DT<$P(X,U,2))) Q 0 ; chk reactivate date
|
---|
119 | Q 1 ; must still be active
|
---|
120 | ;
|
---|
121 | CLINLOC(Y,FROM,DIR) ; Return a set of clinics from HOSPITAL LOCATION
|
---|
122 | ; .Y=returned list, FROM=text to $O from, DIR=$O direction,
|
---|
123 | N I,IEN,CNT S I=0,CNT=44
|
---|
124 | F Q:I'<CNT S FROM=$O(^SC("B",FROM),DIR) Q:FROM="" D ; IA# 10040.
|
---|
125 | . S IEN="" F S IEN=$O(^SC("B",FROM,IEN),DIR) Q:'IEN D
|
---|
126 | . . I ($P($G(^SC(IEN,0)),U,3)'="C")!('$$ACTLOC(IEN)) Q
|
---|
127 | . . S I=I+1,Y(I)=IEN_"^"_FROM
|
---|
128 | Q
|
---|
129 | INPLOC(Y,FROM,DIR) ;Return a set of wards from HOSPITAL LOCATION
|
---|
130 | ; .Y=returned list, FROM=text to $O from, DIR=$O direction,
|
---|
131 | N I,IEN,CNT S I=0,CNT=44
|
---|
132 | F Q:I'<CNT S FROM=$O(^SC("B",FROM),DIR) Q:FROM="" D ; IA# 10040.
|
---|
133 | . S IEN="" F S IEN=$O(^SC("B",FROM,IEN),DIR) Q:'IEN D
|
---|
134 | . . I ($P($G(^SC(IEN,0)),U,3)'="W") Q
|
---|
135 | . . I '$$ACTLOC(IEN) Q
|
---|
136 | . . S I=I+1,Y(I)=IEN_"^"_FROM
|
---|
137 | Q
|
---|
138 | HOSPLOC(Y,FROM,DIR) ; Return a set of locations from HOSPITAL LOCATION
|
---|
139 | ; .Y=returned list, FROM=text to $O from, DIR=$O direction,
|
---|
140 | N I,IEN,CNT S I=0,CNT=44
|
---|
141 | F Q:I'<CNT S FROM=$O(^SC("B",FROM),DIR) Q:FROM="" D ; IA# 10040.
|
---|
142 | . S IEN="" F S IEN=$O(^SC("B",FROM,IEN),DIR) Q:'IEN D
|
---|
143 | . . Q:("CW"'[$P($G(^SC(IEN,0)),U,3)!('$$ACTLOC(IEN)))
|
---|
144 | . . S I=I+1,Y(I)=IEN_"^"_FROM
|
---|
145 | Q
|
---|
146 | NEWPERS(ORY,ORFROM,ORDIR,ORKEY,ORDATE,ORVIZ,ORALL) ; Return a set of names from the NEW PERSON file.
|
---|
147 | ; SLC/PKS: Code moved to ORWU1 on 12/3/2002.
|
---|
148 | D NP1^ORWU1
|
---|
149 | Q
|
---|
150 | GBLREF(VAL,FN) ; return global reference for file number
|
---|
151 | S VAL="" Q:'FN
|
---|
152 | S VAL=$$ROOT^DILFD(+FN)
|
---|
153 | ; I $E($RE(VAL))="," S VAL=$E(VAL,1,$L(VAL)-1)_")"
|
---|
154 | ; I $E($RE(VAL))="(" S VAL=$P(VAL,"(",1)
|
---|
155 | Q
|
---|
156 | GENERIC(Y,FROM,DIR,REF) ; Return a set of entries from xref in REF
|
---|
157 | ; .Y=returned list, FROM=text to $O from, DIR=$O direction,
|
---|
158 | N I,IEN,CNT S I=0,CNT=44
|
---|
159 | F Q:I'<CNT S FROM=$O(@REF@(FROM),DIR) Q:FROM="" D
|
---|
160 | . S IEN="" F S IEN=$O(@REF@(FROM,IEN),DIR) Q:'IEN D
|
---|
161 | . . S I=I+1,Y(I)=IEN_"^"_FROM
|
---|
162 | Q
|
---|
163 | EXTNAME(VAL,IEN,FN) ; return external form of pointer
|
---|
164 | ; IEN=internal number, FN=file number
|
---|
165 | N REF S REF=$G(^DIC(FN,0,"GL")),VAL=""
|
---|
166 | I $L(REF),+IEN S VAL=$P($G(@(REF_IEN_",0)")),U)
|
---|
167 | Q
|
---|
168 | PARAM(VAL,APARAM) ; return a parameter value for a user
|
---|
169 | ; call assumes current user, default entities, single instance
|
---|
170 | S VAL=$$GET^XPAR("ALL",APARAM,1,"I")
|
---|
171 | Q
|
---|
172 | DEVICE(Y,FROM,DIR) ; Return a subset of entries from the Device file
|
---|
173 | ; .LST(n)=IEN;Name^DisplayName^Location^RMar^PLen
|
---|
174 | ; FROM=text to $O from, DIR=$O direction
|
---|
175 | N I,IEN,CNT,SHOW,X S I=0,CNT=20
|
---|
176 | I FROM["<" S FROM=$RE($P($RE(FROM),"< ",2))
|
---|
177 | F Q:I'<CNT S FROM=$O(^%ZIS(1,"B",FROM),DIR) Q:FROM="" D
|
---|
178 | . S IEN=0 F S IEN=$O(^%ZIS(1,"B",FROM,IEN)) Q:'IEN D
|
---|
179 | .. N X0,X1,X90,X91,X95,XTYPE,XSTYPE,XTIME,ORA,ORPX,POP
|
---|
180 | .. Q:'$D(^%ZIS(1,IEN,0)) S X0=^(0),X1=$G(^(1)),X90=$G(^(90)),X91=$G(^(91)),X95=$G(^(95)),XSTYPE=$G(^("SUBTYPE")),XTIME=$G(^("TIME")),XTYPE=$G(^("TYPE"))
|
---|
181 | .. I $E($G(^%ZIS(2,+XSTYPE,0)))'="P" Q ;Printers only
|
---|
182 | .. S X=$P(XTYPE,"^") I X'="TRM",X'="HG",X'="HFS",X'="CHAN" Q ;Device Types
|
---|
183 | .. S X=X0 I ($P(X,U,2)="0")!($P(X,U,12)=2) Q ;Queuing allowed
|
---|
184 | .. S X=+X90 I X,(X'>DT) Q ;Out of Service
|
---|
185 | .. I XTIME]"" S ORA=$P(XTIME,"^"),ORPX=$P($H,",",2),ORPCNT=ORPX\60#60+(ORPX\3600*100),ORPX=$P(ORA,"-",2) I ORPX'<ORA&(ORPCNT'>ORPX&(ORPCNT'<ORA))!(ORPX<ORA&(ORPCNT'<ORA!(ORPCNT'>ORPX))) Q ;Prohibited Times
|
---|
186 | .. S POP=0
|
---|
187 | .. I X95]"" S ORPX=$G(DUZ(0)) I ORPX'="@" S POP=1 F ORA=1:1:$L(ORPX) I X95[$E(ORPX,ORA) S POP=0 Q
|
---|
188 | .. Q:POP ;Security check
|
---|
189 | .. S SHOW=$P(X0,U) I SHOW'=FROM S SHOW=FROM_" <"_SHOW_">"
|
---|
190 | .. S I=I+1,Y(I)=IEN_";"_$P(X0,U)_U_SHOW_U_$P(X1,U)_U_$P(X91,U)_U_$P(X91,U,3)
|
---|
191 | Q
|
---|
192 | URGENCY(Y) ; -- retrieve set values from dd for discharge summary urgency
|
---|
193 | N ORDD,I,X
|
---|
194 | D FIELD^DID(8925,.09,"","POINTER","ORDD")
|
---|
195 | F I=1:1 S X=$P(ORDD("POINTER"),";",I) Q:X="" S Y(I)=$TR(X,":","^")
|
---|
196 | Q
|
---|
197 | PATCH(VAL,X) ; Return 1 if patch X is installed
|
---|
198 | S VAL=$$PATCH^XPDUTL(X)
|
---|
199 | Q
|
---|
200 | VERSION(VAL,X) ;Return version of package or namespace
|
---|
201 | S VAL=$$VERSION^XPDUTL(X)
|
---|
202 | Q
|
---|
203 | VERSRV(VAL,X,CLVER) ; Return server version of option name
|
---|
204 | S ORWCLVER=$G(CLVER) ; leave in partition for session
|
---|
205 | N BADVAL,ORLST
|
---|
206 | D FIND^DIC(19,"",1,"X",X,1,,,,"ORLST")
|
---|
207 | I 'ORLST("DILIST",0) S VAL="0.0.0.0" Q
|
---|
208 | S VAL=ORLST("DILIST","ID",1,1)
|
---|
209 | S VAL=$P(VAL,"version ",2)
|
---|
210 | S BADVAL=0
|
---|
211 | I $P(VAL,".",1)="" S BADVAL=1
|
---|
212 | I $P(VAL,".",2)="" S BADVAL=1
|
---|
213 | I $P(VAL,".",3)="" S BADVAL=1
|
---|
214 | I $P(VAL,".",4)="" S BADVAL=1
|
---|
215 | I ((BADVAL)!('VAL)!(VAL="")) S VAL="0.0.0.0"
|
---|
216 | Q
|
---|