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