1 | ORWRP ; ALB/MJK,dcm Report Calls ; 12/05/02 11:03
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**1,10,85,109,132,160,194,227,215,262**;Dec 17, 1997;Build 3
|
---|
3 | ;
|
---|
4 | LABLIST(LST) ; -- report list for labs tab
|
---|
5 | ; RPC: ORWRP LAB REPORT LIST
|
---|
6 | N I,J,X,X0,X2,CNT,EOF,IFN,ROOT,RPC,ORLIST,HEAD
|
---|
7 | S EOF="$$END",ROOT=$NA(LST),(CNT,I)=0
|
---|
8 | D SETITEM(ROOT,"[LAB REPORT LIST]")
|
---|
9 | D GETLST^XPAR(.ORLIST,"ALL","ORWRP REPORT LAB LIST")
|
---|
10 | F S I=$O(ORLIST(I)) Q:'I Q:'$D(^ORD(101.24,$P(ORLIST(I),"^",2),0)) S X0=^(0),X2=$G(^(2)) D
|
---|
11 | . Q:$P(X0,"^",12)="L"
|
---|
12 | . S RPC=$$GET1^DIQ(8994,+$P(X0,"^",13),.01),IFN=ORLIST(I),HEAD=$P(X0,"^")
|
---|
13 | . I $L($P(X2,"^",3)) S HEAD=$P(X2,"^",3)
|
---|
14 | . S X=$P(X0,"^",2)_"^"_HEAD_"^"_$P(X0,"^",3)_"^"_$P(X0,"^",12)_"^"_$P(X0,"^",7)_"^"_RPC_"^"_IFN
|
---|
15 | . D SETITEM(.ROOT,X)
|
---|
16 | D SETITEM(.ROOT,"$$END")
|
---|
17 | Q
|
---|
18 | LIST(LST) ; -- report lists for reports tab
|
---|
19 | ; RPC: ORWRP REPORT LIST
|
---|
20 | N EOF,ROOT
|
---|
21 | S EOF="$$END",ROOT=$NA(LST)
|
---|
22 | K @ROOT
|
---|
23 | D GETRPTS(.ROOT,.EOF) ; -report list
|
---|
24 | D GETHS(.ROOT,.EOF) ; -health summary types
|
---|
25 | D GETDT(.ROOT,.EOF) ; -date ranges
|
---|
26 | Q
|
---|
27 | GETCOL(ROOT,IFN) ; -- get Column headers for ListView
|
---|
28 | N I,J,X,VAL
|
---|
29 | Q:'$G(IFN)
|
---|
30 | S I=0,ROOT=$NA(ROOT)
|
---|
31 | F S I=$O(^ORD(101.24,IFN,3,"C",I)) Q:'I D
|
---|
32 | . S VAL=$$GET^XPAR(DUZ_";VA(200,","ORWCH COLUMNS REPORTS",IFN,"I"),J=0
|
---|
33 | . F S J=$O(^ORD(101.24,IFN,3,"C",I,J)) Q:'J I $D(^ORD(101.24,IFN,3,J)) S X=^(J,0) D
|
---|
34 | .. I $L(VAL),$P(VAL,",",I) S $P(X,"^",10)=$P(VAL,",",I)
|
---|
35 | .. D SETITEM(.ROOT,X)
|
---|
36 | Q
|
---|
37 | GETRPTS(ROOT,EOF) ; -- get report list
|
---|
38 | N I,J,X,X0,X2,CNT,IFN,ORLIST,HEAD
|
---|
39 | D SETITEM(.ROOT,"[REPORT LIST]"),GETLST^XPAR(.ORLIST,"ALL","ORWRP REPORT LIST")
|
---|
40 | S (CNT,I)=0
|
---|
41 | F S I=$O(ORLIST(I)) Q:'I Q:'$D(^ORD(101.24,$P(ORLIST(I),"^",2),0)) S X0=^(0),X2=$G(^(2)) D
|
---|
42 | . Q:$P(X0,"^",12)="L"
|
---|
43 | . S RPC=$$GET1^DIQ(8994,+$P(X0,"^",13),.01),IFN=ORLIST(I),HEAD=$P(X0,"^")
|
---|
44 | . I $L($P(X2,"^",3)) S HEAD=$P(X2,"^",3)
|
---|
45 | . S X=$P(X0,"^",2)_"^"_HEAD_"^"_$P(X0,"^",4)_"^"_$P(X0,"^",19)_";"_$P(X0,"^",20)_"^"_$P(X0,"^",6)_"^"_$P(X0,"^",5)_"^"_$P(X0,"^",3)_"^"_$P(X0,"^",12)_"^"_$P(X0,"^",7)_"^"_RPC_"^"_IFN
|
---|
46 | . D SETITEM(.ROOT,X)
|
---|
47 | D SETITEM(.ROOT,"$$END")
|
---|
48 | Q
|
---|
49 | GETHS(ROOT,EOF) ; --get health summary types
|
---|
50 | N C,I,IFN,ORHSPARM,ORERR,X,T
|
---|
51 | K ^TMP("ORHSPARM",$J)
|
---|
52 | S ORHSROOT="^TMP(""ORHSPARM"",$J)"
|
---|
53 | I $$GET^XPAR("ALL","ORWRP HEALTH SUMMARY LIST ALL",1) S I="",C=0 D
|
---|
54 | . F S I=$O(^GMT(142,"B",I)) Q:I="" S IFN=$O(^(I,0)) Q:'IFN D
|
---|
55 | .. S X=$G(^GMT(142,IFN,0)) Q:'$L(X)
|
---|
56 | .. S T=$G(^GMT(142,IFN,"T")),C=C+1,@ORHSROOT@(C)=IFN_"^"_$S($L(T):T,1:$P(X,"^"))_"^^^^^1"
|
---|
57 | .. I I="GMTS HS ADHOC OPTION" S @ORHSROOT@(C)="0^GMTS Adhoc Report"
|
---|
58 | I '$$GET^XPAR("ALL","ORWRP HEALTH SUMMARY LIST ALL",1) D
|
---|
59 | . D:$L($T(GETLIST^GMTSXAL)) GETLIST^GMTSXAL($NA(@ORHSROOT),$G(DUZ),1,.ORERR)
|
---|
60 | . Q:$G(ORERR)
|
---|
61 | . S I=0 F S I=$O(@ORHSROOT@(I)) Q:'I S @ORHSROOT@(I)=@ORHSROOT@(I)_"^^^^^1" I $P(@ORHSROOT@(I),"^",2)="GMTS HS ADHOC OPTION" S @ORHSROOT@(I)="0^Adhoc Report"
|
---|
62 | D SETITEM(.ROOT,"[HEALTH SUMMARY TYPES]")
|
---|
63 | S I=0 F S I=$O(@ORHSROOT@(I)) Q:'I D SETITEM(.ROOT,"h"_@ORHSROOT@(I))
|
---|
64 | D SETITEM(.ROOT,EOF)
|
---|
65 | Q
|
---|
66 | GETDT(ROOT,EOF) ; -- get date range choices
|
---|
67 | N I,X
|
---|
68 | D SETITEM(.ROOT,"[DATE RANGES]")
|
---|
69 | F I=2:1 S X=$P($T(DTLIST+I),";",3) Q:X=EOF D SETITEM(.ROOT,"d"_X)
|
---|
70 | Q
|
---|
71 | DTLIST ; -- list of date ranges
|
---|
72 | ;<number of days>^ <display text>
|
---|
73 | ;;S^Date Range...
|
---|
74 | ;;0^Today
|
---|
75 | ;;7^One Week Back
|
---|
76 | ;;14^Two Weeks Back
|
---|
77 | ;;30^One Month Back
|
---|
78 | ;;180^Six Months Back
|
---|
79 | ;;365^One Year Back
|
---|
80 | ;;$$END
|
---|
81 | ;
|
---|
82 | SETITEM(ROOT,X) ; -- set item in list
|
---|
83 | S @ROOT@($O(@ROOT@(9999),-1)+1)=X
|
---|
84 | Q
|
---|
85 | RPT(ROOT,DFN,RPTID,HSTYPE,DTRANGE,EXAMID,ALPHA,OMEGA) ; -- return report text
|
---|
86 | ;ROOT=Output in ^TMP("ORDATA",$J)
|
---|
87 | ;DFN=Patient DFN ; ICN for foriegn sites
|
---|
88 | ;RPTID=Unique id for the report_";"_Remote Id_"~"_HSComponent for listview (ent;rtn;0;MaxOcc) or text (ent;rtn;#component;MaxOcc)
|
---|
89 | ;HSTYPE=Health Sum Type
|
---|
90 | ;DTRANGE=# days back from today
|
---|
91 | ;EXAMID=Rad exam ID
|
---|
92 | ;ALPHA=Start date (lieu of DTRANGE)
|
---|
93 | ;OMEGA=End date (lieu of DTRANGE)
|
---|
94 | ; RPC: ORWRP REPORT TEXT
|
---|
95 | ;
|
---|
96 | N X,X0,X2,X4,I,J,ENT,RTN,ID,REMOTE,GO,OUT,MAX,SITE,ORFHIE,%ZIS,HSTAG,DIRECT
|
---|
97 | K ^TMP("ORDATA",$J)
|
---|
98 | S HSTAG=$P($G(RPTID),"~",2),RPTID=$P($G(RPTID),"~"),ROOT=$NA(^TMP("ORDATA",$J,1)),REMOTE=+$P(RPTID,";",2),RPTID=$P($P(RPTID,";"),":")
|
---|
99 | I 'REMOTE S DFN=+DFN ;DFN = DFN;ICN for remote calls
|
---|
100 | S I=0,X0="",X2="",X4="",SITE=$$SITE^VASITE,SITE=$P(SITE,"^",2)_";"_$P(SITE,"^",3)
|
---|
101 | F S I=$O(^ORD(101.24,"AC",I)) Q:I="" S J=0 F S J=$O(^ORD(101.24,"AC",I,J)) Q:'J D
|
---|
102 | . I $P($G(^ORD(101.24,J,0)),"^",2)=RPTID,$P(^(0),"^",8)="R" S X0=^(0),X2=$G(^(2)),ORFHIE=$G(^(4)),DIRECT=$P(ORFHIE,"^",4),X4=$P(ORFHIE,"^",2),ORFHIE=$P(ORFHIE,"^",3)
|
---|
103 | I '$L(X0) D NOTYET(.ROOT) Q
|
---|
104 | S RTN=$P(X0,"^",5),ENT=$P(X0,"^",6)
|
---|
105 | I '$L(RTN)!'$L(ENT) D NOTYET(.ROOT) Q
|
---|
106 | I '$L($T(@(ENT_"^"_RTN))) D NOTYET(.ROOT) Q
|
---|
107 | I $G(ALPHA) S X=ALPHA-$G(OMEGA) D
|
---|
108 | . I X<0 S X=X*(-1)
|
---|
109 | . I X4,X>X4 S:ALPHA>OMEGA OMEGA=$$FMADD^XLFDT(ALPHA,-X4) S:ALPHA'>OMEGA ALPHA=$$FMADD^XLFDT(OMEGA,-X4) S DTRANGE=""
|
---|
110 | I X4,$G(DTRANGE)>X4 S DTRANGE=X4,ALPHA=""
|
---|
111 | I $L($G(DTRANGE)),'$G(ALPHA) S ALPHA=$$FMADD^XLFDT(DT,-DTRANGE),OMEGA=DT_".235959"
|
---|
112 | I $G(OMEGA),$E(OMEGA,8)'="." S OMEGA=OMEGA_".235959"
|
---|
113 | ;S ID=$G(HSTAG),$P(ID,";",5,8)=SITE_";"_$P(X2,"^",8)_";"_$P(X2,"^",9)
|
---|
114 | S ID=$G(HSTAG),$P(ID,";",5,10)=SITE_";"_$P(X2,"^",8)_";"_$P(X2,"^",9)_";"_RPTID_";"_$G(DIRECT) ;HDRHX CHANGE
|
---|
115 | I $L($P($G(HSTAG),";",4)) S MAX=$P(HSTAG,";",4)
|
---|
116 | I $L($G(HSTYPE)) M ID=HSTYPE
|
---|
117 | I $L($G(EXAMID)) M ID=EXAMID
|
---|
118 | S OUT=ENT_"^"_RTN_"(.ROOT,DFN,.ID,.ALPHA,.OMEGA,.DTRANGE,.REMOTE,.MAX,.ORFHIE)"
|
---|
119 | I REMOTE S GO=0 D Q:'GO
|
---|
120 | . I '$L($T(GETDFN^MPIF001)) D SETITEM(.ROOT,"MPI routines missing on remote system ("_SITE_")") S GO=0 Q
|
---|
121 | . S ICN=+$P(DFN,";",2),DFN=+$$GETDFN^MPIF001(ICN)
|
---|
122 | . I DFN<0 D SETITEM(.ROOT,"Patient not found on remote system ("_SITE_")") S GO=0 Q
|
---|
123 | . S GO=+$P(X0,"^",3)
|
---|
124 | . I 'GO D SETITEM(.ROOT,"Remote access not available for this report ("_SITE_")")
|
---|
125 | S %ZIS="0N"
|
---|
126 | D @OUT
|
---|
127 | Q
|
---|
128 | NOTYET(ROOT) ; -- not available
|
---|
129 | D SETITEM(.ROOT,"Report not available at this time.")
|
---|
130 | Q
|
---|
131 | START(RM,GOTO,ORIOSL) ;
|
---|
132 | ;RM=Right margin
|
---|
133 | N ZTQUEUED,ORHFS,ORSUB,ORIO,ORHANDLE,IOM,IOSL,IOST,IOF,IOT,IOS
|
---|
134 | S ORHFS=$$HFS(),ORSUB="ORDATA",ORHANDLE="ORWRP"
|
---|
135 | D HFSOPEN(ORHANDLE,ORHFS,"W")
|
---|
136 | I POP D Q
|
---|
137 | . I $D(ROOT) D SETITEM(.ROOT,"ERROR: Unable to open HFS file")
|
---|
138 | D IOVAR(.ORIO,.RM,.ORIOSL)
|
---|
139 | N $ETRAP,$ESTACK
|
---|
140 | S $ETRAP="D ERR^ORWRP Q"
|
---|
141 | U IO
|
---|
142 | D @GOTO
|
---|
143 | D HFSCLOSE(ORHANDLE,ORHFS)
|
---|
144 | Q
|
---|
145 | ERR ;Error trap
|
---|
146 | S $ETRAP="D UNWIND^ORWRP Q"
|
---|
147 | N %ZIS
|
---|
148 | S %ZIS="0N"
|
---|
149 | D @^%ZOSF("ERRTN") ;file error
|
---|
150 | I $D(ORHANDLE) D CLOSE^%ZISH(ORHANDLE)
|
---|
151 | I $D(ORHFS) D
|
---|
152 | . N ORARR,OROK
|
---|
153 | . S ORARR(ORHFS)="",OROK=$$DEL^%ZISH("",$NA(ORARR)) ;delete HFS file
|
---|
154 | S $ECODE=",UOR69 error during CPRS report build,"
|
---|
155 | Q
|
---|
156 | UNWIND ;Unwind Error stack
|
---|
157 | Q:$ESTACK>1 ;pop stack
|
---|
158 | ;
|
---|
159 | Q
|
---|
160 | HFS() ; -- get hfs file name
|
---|
161 | N H
|
---|
162 | S H=$H
|
---|
163 | Q "ORU_"_$J_"_"_$P(H,",")_"_"_$P(H,",",2)_".DAT"
|
---|
164 | HFSOPEN(HANDLE,ORHFS,ORMODE) ;
|
---|
165 | D OPEN^%ZISH(HANDLE,,ORHFS,$G(ORMODE,"W")) Q:POP
|
---|
166 | Q
|
---|
167 | IOVAR(ORIO,ORRM,ORIOSL,ORIOST,ORIOF,ORIOT) ;Setup IO variables based on IO Device
|
---|
168 | N IFN,IFN1
|
---|
169 | S ORIO=$G(ORIO,"OR WORKSTATION"),ION=ORIO,IOM=$G(ORRM,80),IOSL=$G(ORIOSL,62),IOST=$G(ORIOST,"P-OTHER"),IOF=$G(ORIOF,""""""),IOT=$G(ORIOT,"HFS")
|
---|
170 | I $O(^%ZIS(1,"B",ORIO,0)) S IFN=$O(^(0)),IOS=IFN
|
---|
171 | I $D(^%ZIS(1,IFN,0)) S IOST(0)=+$G(^("SUBTYPE")),IOT=$G(ORIOT,^("TYPE")),IOST=$G(ORIOST,$P($G(^%ZIS(2,IOST(0),0),IOST),"^"))
|
---|
172 | I $O(^%ZIS(2,"B",IOST,0)) S IFN=$O(^(0)) I IFN S IOST(0)=IFN,IFN1=$G(^%ZIS(2,IFN,1)),IOM=$G(ORRM,$P(IFN1,"^")),IOF=$G(ORIOF,$P(IFN1,"^",2)),IOSL=$G(ORIOSL,$P(IFN1,"^",3))
|
---|
173 | Q
|
---|
174 | HFSCLOSE(HANDLE,ORHFS) ;Close HFS and unload data
|
---|
175 | N ORDEL,X,%ZIS
|
---|
176 | S %ZIS="0N"
|
---|
177 | I IO[ORHFS D CLOSE^%ZISH(HANDLE)
|
---|
178 | S ROOT=$NA(^TMP(ORSUB,$J,1)),ORDEL(ORHFS)=""
|
---|
179 | K @ROOT
|
---|
180 | S X=$$FTG^%ZISH(,ORHFS,$NA(@ROOT@(1)),4)
|
---|
181 | D STRIP
|
---|
182 | S X=$$DEL^%ZISH(,$NA(ORDEL))
|
---|
183 | Q
|
---|
184 | USEHFS ; -- use host file to build global array
|
---|
185 | N OROK,SECTION
|
---|
186 | S SECTION=0
|
---|
187 | D INIT
|
---|
188 | S OROK=$$FTG^%ZISH(,ORHFS,$NA(@ROOT@(1)),4) I 'OROK Q
|
---|
189 | D STRIP
|
---|
190 | N ORARR S ORARR(ORHFS)=""
|
---|
191 | S OROK=$$DEL^%ZISH("",$NA(ORARR))
|
---|
192 | Q
|
---|
193 | INIT ; -- initialize counts and global section
|
---|
194 | S (INC,CNT)=0,SECTION=SECTION+1,ROOT=$NA(^TMP(ORSUB,$J,SECTION))
|
---|
195 | K @ROOT
|
---|
196 | Q
|
---|
197 | FINAL ; -- set 'x of y' for each section CALLED FROM ^ORWLR
|
---|
198 | N I
|
---|
199 | F I=1:1:SECTION S ^TMP(ORSUB,$J,I,.1)=I_U_SECTION
|
---|
200 | Q
|
---|
201 | STRIP ; -- strip off control chars
|
---|
202 | N I,X
|
---|
203 | S I=0 F S I=$O(@ROOT@(I)) Q:'I S X=^(I) D
|
---|
204 | . I X[$C(8) D ;BS
|
---|
205 | .. I $L(X,$C(8))=$L(X,$C(95)) S (X,@ROOT@(I))=$TR(X,$C(8,95),"") Q ;BS & _
|
---|
206 | .. S (X,@ROOT@(I))=$TR(X,$C(8),"")
|
---|
207 | . I X[$C(7)!(X[$C(12)) S @ROOT@(I)=$TR(X,$C(7,12),"") ;BEL or FF
|
---|
208 | Q
|
---|
209 | WINDFLT(ORY) ;Windows printer as default?
|
---|
210 | S ORY=+$$GET^XPAR("ALL","ORWDP WINPRINT DEFAULT")
|
---|
211 | Q
|
---|
212 | GETDFPRT(Y,ORUSER,ORLOC) ; Returns default printer for user
|
---|
213 | N IEN,X0,ENT
|
---|
214 | S ENT="ALL"
|
---|
215 | I $G(ORLOC) S ORLOC=+ORLOC_";SC(",ENT=ENT_"^"_ORLOC
|
---|
216 | I +$$GET^XPAR(ENT,"ORWDP WINPRINT DEFAULT") S Y="WIN;Windows Printer" Q
|
---|
217 | S IEN=$$GET^XPAR(ENT,"ORWDP DEFAULT PRINTER",1) Q:+IEN=0
|
---|
218 | Q:'$D(^%ZIS(1,IEN,0)) S X0=^(0)
|
---|
219 | S Y=IEN_";"_$P(X0,U)
|
---|
220 | Q
|
---|
221 | SAVDFPRT(Y,ORDEV) ; Save new default printer for user
|
---|
222 | N ORPAR,ORERR,ORWINDEF
|
---|
223 | Q:$L(ORDEV)=0
|
---|
224 | ; Reset Windows printer default to True/False
|
---|
225 | S ORPAR="ORWDP WINPRINT DEFAULT"
|
---|
226 | I ORDEV="WIN" S ORWINDEF="Y"
|
---|
227 | E S ORWINDEF="N"
|
---|
228 | I $$GET^XPAR(DUZ_";VA(200,",ORPAR,1)'="" D CHG^XPAR(DUZ_";VA(200,",ORPAR,1,ORWINDEF,.ORERR)
|
---|
229 | E D ADD^XPAR(DUZ_";VA(200,",ORPAR,1,ORWINDEF,.ORERR)
|
---|
230 | Q:ORDEV="WIN"
|
---|
231 | ; If not Windows printer selected, save VistA default printer
|
---|
232 | S ORPAR="ORWDP DEFAULT PRINTER",ORDEV="`"_ORDEV
|
---|
233 | I $$GET^XPAR(DUZ_";VA(200,",ORPAR,1)'="" D CHG^XPAR(DUZ_";VA(200,",ORPAR,1,ORDEV,.ORERR)
|
---|
234 | E D ADD^XPAR(DUZ_";VA(200,",ORPAR,1,ORDEV,.ORERR)
|
---|
235 | Q
|
---|