[613] | 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)
|
---|