1 | RORX007 ;HCIOFO/BH,SG - RADIOLOGY UTILIZATION ; 10/14/05 1:37pm
|
---|
2 | ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006
|
---|
3 | ;
|
---|
4 | ; This routine uses the following IAs:
|
---|
5 | ;
|
---|
6 | ; #10061 DEM^VADPT (supported)
|
---|
7 | ;
|
---|
8 | Q
|
---|
9 | ;
|
---|
10 | ;***** COMPILES THE "RADIOLOGY UTILIZATION" REPORT
|
---|
11 | ; REPORT CODE: 007
|
---|
12 | ;
|
---|
13 | ; .RORTSK Task number and task parameters
|
---|
14 | ;
|
---|
15 | ; The ^TMP("RORX007",$J) and ^TMP($J,"RAE1") global nodes are
|
---|
16 | ; used by this function.
|
---|
17 | ;
|
---|
18 | ; ^TMP("RORX007",$J,
|
---|
19 | ;
|
---|
20 | ; "PAT",
|
---|
21 | ; DFN,
|
---|
22 | ; ProcName) Number of procedures
|
---|
23 | ;
|
---|
24 | ; "PATSORT",
|
---|
25 | ; ProcQnty,
|
---|
26 | ; Name,
|
---|
27 | ; Last4) Patient data
|
---|
28 | ; ^01: Number of different procedures
|
---|
29 | ; ^02: Date of death
|
---|
30 | ;
|
---|
31 | ; "PROC",
|
---|
32 | ; ProcName,
|
---|
33 | ; DFN) Number of procedures
|
---|
34 | ;
|
---|
35 | ; "PROCSORT",
|
---|
36 | ; ProcQnty,
|
---|
37 | ; ProcName,
|
---|
38 | ; CPT) Number of individual patients
|
---|
39 | ;
|
---|
40 | ; "TOTAL") Category Totals
|
---|
41 | ; ^01: Total number of procedures
|
---|
42 | ; ^02: Number of different procedures
|
---|
43 | ; ^03: Total number of patients
|
---|
44 | ; ^04: Number of individual patients
|
---|
45 | ;
|
---|
46 | ; Return Values:
|
---|
47 | ; <0 Error code
|
---|
48 | ; 0 Ok
|
---|
49 | ;
|
---|
50 | RADUTL(RORTSK) ;
|
---|
51 | N ROREDT ; End date
|
---|
52 | N RORREG ; Registry IEN
|
---|
53 | N RORSDT ; Start date
|
---|
54 | ;
|
---|
55 | N CNT,ECNT,RC,REPORT,RORPTN,SFLAGS,TMP
|
---|
56 | ;--- Root node of the report
|
---|
57 | S REPORT=$$ADDVAL^RORTSK11(RORTSK,"REPORT")
|
---|
58 | Q:REPORT<0 REPORT
|
---|
59 | ;
|
---|
60 | ;--- Get and prepare the report parameters
|
---|
61 | S RORREG=$$PARAM^RORTSK01("REGIEN")
|
---|
62 | S RC=$$PARAMS^RORX007A(REPORT,.RORSDT,.ROREDT,.SFLAGS)
|
---|
63 | Q:RC<0 RC
|
---|
64 | ;
|
---|
65 | ;--- Initialize constants and variables
|
---|
66 | S RORPTN=$$REGSIZE^RORUTL02(+RORREG) S:RORPTN<0 RORPTN=0
|
---|
67 | S ECNT=0 K ^TMP("RORX007",$J)
|
---|
68 | ;
|
---|
69 | ;--- Report header
|
---|
70 | S RC=$$HEADER^RORX007A(REPORT) Q:RC<0 RC
|
---|
71 | ;
|
---|
72 | D
|
---|
73 | . ;--- Query the registry
|
---|
74 | . D TPPSETUP^RORTSK01(75)
|
---|
75 | . S RC=$$QUERY^RORX007A(SFLAGS)
|
---|
76 | . I RC Q:RC<0 S ECNT=ECNT+RC
|
---|
77 | . ;--- Sort the data
|
---|
78 | . D TPPSETUP^RORTSK01(10)
|
---|
79 | . S RC=$$SORT()
|
---|
80 | . I RC Q:RC<0 S ECNT=ECNT+RC
|
---|
81 | . ;--- Store the results
|
---|
82 | . D TPPSETUP^RORTSK01(15)
|
---|
83 | . S RC=$$STORE(REPORT)
|
---|
84 | . I RC Q:RC<0 S ECNT=ECNT+RC
|
---|
85 | ;
|
---|
86 | ;--- Cleanup
|
---|
87 | K ^TMP("RORX007",$J),^TMP($J,"RAE1")
|
---|
88 | Q $S(RC<0:RC,ECNT>0:-43,1:0)
|
---|
89 | ;
|
---|
90 | ;***** SORTS THE RESULTS AND COMPILES THE TOTALS
|
---|
91 | ;
|
---|
92 | ; SPCNT Number of patients selected for the report
|
---|
93 | ;
|
---|
94 | ; Return Values:
|
---|
95 | ; <0 Error code
|
---|
96 | ; 0 Ok
|
---|
97 | ; >0 Number of non-fatal errors
|
---|
98 | ;
|
---|
99 | SORT(SPCNT) ;
|
---|
100 | N DFN,DOD,DPCNT,ECNT,NAME,NODE,PRCNT,PQ,PRN,RC,TMP,TOTAL,VA,VADM,VAHOW,VAROOT
|
---|
101 | S (ECNT,RC)=0
|
---|
102 | S NODE=$NA(^TMP("RORX007",$J))
|
---|
103 | Q:$D(@NODE)<10 0
|
---|
104 | ;--- Procedures
|
---|
105 | S RC=$$LOOP^RORTSK01(0) Q:RC<0 RC
|
---|
106 | S PRN=""
|
---|
107 | F S PRN=$O(@NODE@("PROC",PRN)) Q:PRN="" D
|
---|
108 | . S (DPCNT,PRCNT)=0
|
---|
109 | . S DFN=""
|
---|
110 | . F S DFN=$O(@NODE@("PROC",PRN,DFN)) Q:DFN="" D
|
---|
111 | . . S PQ=$G(@NODE@("PROC",PRN,DFN))
|
---|
112 | . . S DPCNT=DPCNT+1,PRCNT=PRCNT+PQ
|
---|
113 | . ;---
|
---|
114 | . S @NODE@("PROCSORT",PRCNT,$P(PRN,U),$P(PRN,U,2))=DPCNT
|
---|
115 | . S TOTAL("DPR")=$G(TOTAL("DPR"))+1 ; Different procedures
|
---|
116 | . S TOTAL("TPT")=$G(TOTAL("TPT"))+DPCNT ; Number of patients
|
---|
117 | K @NODE@("PROC")
|
---|
118 | ;--- Patients
|
---|
119 | S RC=$$LOOP^RORTSK01(0.5) Q:RC<0 RC
|
---|
120 | S DFN=""
|
---|
121 | F S DFN=$O(@NODE@("PAT",DFN)) Q:DFN="" D
|
---|
122 | . S (DPCNT,PRCNT)=0
|
---|
123 | . D DEM^VADPT
|
---|
124 | . S NAME=$G(VADM(1)) Q:NAME=""
|
---|
125 | . S LAST4=$G(VA("BID")) S:LAST4="" LAST4=" "
|
---|
126 | . S DOD=$$DATE^RORXU002($P(VADM(6),U)\1)
|
---|
127 | . S PRN=""
|
---|
128 | . F S PRN=$O(@NODE@("PAT",DFN,PRN)) Q:PRN="" D
|
---|
129 | . . S PQ=$G(@NODE@("PAT",DFN,PRN))
|
---|
130 | . . S DPCNT=DPCNT+1,PRCNT=PRCNT+PQ
|
---|
131 | . ;---
|
---|
132 | . S @NODE@("PATSORT",PRCNT,NAME,LAST4)=DPCNT_U_DOD
|
---|
133 | . S TOTAL("TPR")=$G(TOTAL("TPR"))+PRCNT ; Number of procedures
|
---|
134 | . S TOTAL("DPT")=$G(TOTAL("DPT"))+1 ; Different patients
|
---|
135 | K @NODE@("PAT")
|
---|
136 | ;--- Totals
|
---|
137 | S TMP=$G(TOTAL("TPR"))_U_$G(TOTAL("DPR"))
|
---|
138 | S @NODE@("TOTAL")=TMP_U_$G(TOTAL("TPT"))_U_$G(TOTAL("DPT"))
|
---|
139 | ;---
|
---|
140 | Q $S(RC<0:RC,1:ECNT)
|
---|
141 | ;
|
---|
142 | ;***** STORES THE RESULTS
|
---|
143 | ;
|
---|
144 | ; Return Values:
|
---|
145 | ; <0 Error code
|
---|
146 | ; 0 Ok
|
---|
147 | ; >0 Number of non-fatal errors
|
---|
148 | ;
|
---|
149 | STORE(PARTAG) ;
|
---|
150 | N RORSONLY ; Output summary only
|
---|
151 | ;
|
---|
152 | N RC,TMP
|
---|
153 | S RORSONLY=$$SMRYONLY^RORXU006()
|
---|
154 | S RC=0
|
---|
155 | ;--- Tables
|
---|
156 | Q:$D(^TMP("RORX007",$J))<10 0
|
---|
157 | ;--- Procedures
|
---|
158 | S RC=$$LOOP^RORTSK01(0) Q:RC<0 RC
|
---|
159 | S RC=$$TBLPROC(PARTAG) Q:RC<0 RC
|
---|
160 | ;--- Patients
|
---|
161 | S RC=$$LOOP^RORTSK01(0.5) Q:RC<0 RC
|
---|
162 | S RC=$$TBLPAT(PARTAG) Q:RC<0 RC
|
---|
163 | ;--- Totals
|
---|
164 | S TMP=$G(^TMP("RORX007",$J,"TOTAL"))
|
---|
165 | D ADDVAL^RORTSK11(RORTSK,"NPR",$P(TMP,U,1),PARTAG)
|
---|
166 | D ADDVAL^RORTSK11(RORTSK,"NDP",$P(TMP,U,2),PARTAG)
|
---|
167 | D ADDVAL^RORTSK11(RORTSK,"NP",$P(TMP,U,4),PARTAG)
|
---|
168 | ;---
|
---|
169 | Q $S(RC<0:RC,1:0)
|
---|
170 | ;
|
---|
171 | ;***** STORES THE TABLE OF PATIENTS
|
---|
172 | ;
|
---|
173 | ; PRNTELMT IEN of the parent tag
|
---|
174 | ;
|
---|
175 | ; Return Values:
|
---|
176 | ; <0 Error code
|
---|
177 | ; 0 Ok
|
---|
178 | ;
|
---|
179 | TBLPAT(PRNTELMT) ;
|
---|
180 | N BUF,ITEM,LAST4,MAXUTNUM,NAME,NODE,PRCNT,RC,TABLE,TMP,UTNUM
|
---|
181 | S MAXUTNUM=$$PARAM^RORTSK01("MAXUTNUM")
|
---|
182 | Q:MAXUTNUM'>0 0
|
---|
183 | S TABLE=$$ADDVAL^RORTSK11(RORTSK,"PATIENTS",,PRNTELMT)
|
---|
184 | Q:TABLE<0 TABLE
|
---|
185 | D ADDATTR^RORTSK11(RORTSK,TABLE,"TABLE","PATIENTS")
|
---|
186 | S NODE=$NA(^TMP("RORX007",$J,"PATSORT"))
|
---|
187 | ;--- Table
|
---|
188 | S PRCNT="",(RC,UTNUM)=0
|
---|
189 | F S PRCNT=$O(@NODE@(PRCNT),-1) Q:PRCNT="" D Q:RC
|
---|
190 | . S NAME=""
|
---|
191 | . F S NAME=$O(@NODE@(PRCNT,NAME)) Q:NAME="" D Q:RC
|
---|
192 | . . S LAST4=""
|
---|
193 | . . F S LAST4=$O(@NODE@(PRCNT,NAME,LAST4)) Q:LAST4="" D Q:RC
|
---|
194 | . . . S ITEM=$$ADDVAL^RORTSK11(RORTSK,"PATIENT",,TABLE)
|
---|
195 | . . . D ADDVAL^RORTSK11(RORTSK,"NAME",NAME,ITEM,1)
|
---|
196 | . . . D ADDVAL^RORTSK11(RORTSK,"LAST4",LAST4,ITEM,1)
|
---|
197 | . . . S BUF=@NODE@(PRCNT,NAME,LAST4)
|
---|
198 | . . . D ADDVAL^RORTSK11(RORTSK,"DOD",$P(BUF,U,2),ITEM,1)
|
---|
199 | . . . D ADDVAL^RORTSK11(RORTSK,"TOTAL",PRCNT,ITEM,1)
|
---|
200 | . . . D ADDVAL^RORTSK11(RORTSK,"UNIQUE",+BUF,ITEM,1)
|
---|
201 | . . . S UTNUM=UTNUM+1 S:UTNUM'<MAXUTNUM RC=1
|
---|
202 | Q:RC<0 RC
|
---|
203 | ;---
|
---|
204 | Q $S(RC<0:RC,1:0)
|
---|
205 | ;
|
---|
206 | ;***** STORES THE TABLE OF PROCEDURES
|
---|
207 | ;
|
---|
208 | ; PRNTELMT IEN of the parent tag
|
---|
209 | ;
|
---|
210 | ; Return Values:
|
---|
211 | ; <0 Error code
|
---|
212 | ; 0 Ok
|
---|
213 | ;
|
---|
214 | TBLPROC(PRNTELMT) ;
|
---|
215 | N CPT,ITEM,MINRPNUM,NODE,PRCNT,PRN,TABLE,TMP
|
---|
216 | S MINRPNUM=$$PARAM^RORTSK01("MINRPNUM")
|
---|
217 | Q:MINRPNUM'>0 0
|
---|
218 | S TABLE=$$ADDVAL^RORTSK11(RORTSK,"PROCEDURES",,PRNTELMT)
|
---|
219 | Q:TABLE<0 TABLE
|
---|
220 | D ADDATTR^RORTSK11(RORTSK,TABLE,"TABLE","PROCEDURES")
|
---|
221 | S NODE=$NA(^TMP("RORX007",$J,"PROCSORT"))
|
---|
222 | ;--- Table
|
---|
223 | S PRCNT="",RC=0
|
---|
224 | F S PRCNT=$O(@NODE@(PRCNT),-1) Q:PRCNT<MINRPNUM D Q:RC
|
---|
225 | . S PRN=""
|
---|
226 | . F S PRN=$O(@NODE@(PRCNT,PRN)) Q:PRN="" D Q:RC
|
---|
227 | . . S CPT=""
|
---|
228 | . . F S CPT=$O(@NODE@(PRCNT,PRN,CPT)) Q:CPT="" D Q:RC
|
---|
229 | . . . S ITEM=$$ADDVAL^RORTSK11(RORTSK,"PROCEDURE",,TABLE)
|
---|
230 | . . . D ADDVAL^RORTSK11(RORTSK,"NAME",PRN,ITEM,1)
|
---|
231 | . . . D ADDVAL^RORTSK11(RORTSK,"CPT",CPT,ITEM,2)
|
---|
232 | . . . S TMP=+@NODE@(PRCNT,PRN,CPT)
|
---|
233 | . . . D ADDVAL^RORTSK11(RORTSK,"PATIENTS",TMP,ITEM,1)
|
---|
234 | . . . D ADDVAL^RORTSK11(RORTSK,"TOTAL",PRCNT,ITEM,1)
|
---|
235 | Q:RC<0 RC
|
---|
236 | ;---
|
---|
237 | Q $S(RC<0:RC,1:0)
|
---|