| [613] | 1 | RORX010 ;HCIOFO/SG - LAB TESTS BY RANGE REPORT ; 12/8/05 10:39am | 
|---|
|  | 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 | ;***** OUTPUTS THE REPORT HEADER | 
|---|
|  | 11 | ; | 
|---|
|  | 12 | ; PARTAG        Reference (IEN) to the parent tag | 
|---|
|  | 13 | ; | 
|---|
|  | 14 | ; Return Values: | 
|---|
|  | 15 | ;       <0  Error code | 
|---|
|  | 16 | ;        0  Ok | 
|---|
|  | 17 | ; | 
|---|
|  | 18 | HEADER(PARTAG) ; | 
|---|
|  | 19 | ;;PATIENTS(#,NAME,LAST4,DOD,PTLRL(GROUP,DATE,NAME,RESULT)) | 
|---|
|  | 20 | ; | 
|---|
|  | 21 | N COLUMNS,HEADER,LT,NAME,TMP | 
|---|
|  | 22 | S HEADER=$$HEADER^RORXU002(.RORTSK,PARTAG) | 
|---|
|  | 23 | Q:HEADER<0 HEADER | 
|---|
|  | 24 | S RC=$$TBLDEF^RORXU002("HEADER^RORX010",HEADER) | 
|---|
|  | 25 | Q $S(RC<0:RC,1:HEADER) | 
|---|
|  | 26 | ; | 
|---|
|  | 27 | ;***** COMPILES THE LAB TESTS BY RANGE REPORT | 
|---|
|  | 28 | ; REPORT CODE: 010 | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | ; .RORTSK       Task number and task parameters | 
|---|
|  | 31 | ; | 
|---|
|  | 32 | ; The ^TMP("RORX010",$J) global node is used by this function. | 
|---|
|  | 33 | ; | 
|---|
|  | 34 | ; Return Values: | 
|---|
|  | 35 | ;       <0  Error code | 
|---|
|  | 36 | ;        0  Ok | 
|---|
|  | 37 | ; | 
|---|
|  | 38 | LRGRANGE(RORTSK) ; | 
|---|
|  | 39 | N RORDST        ; Callback descriptor | 
|---|
|  | 40 | N ROREDT        ; End date | 
|---|
|  | 41 | N ROREDT1       ; End date + 1 day | 
|---|
|  | 42 | N RORLTL        ; Closed root of the list of lab tests to search for | 
|---|
|  | 43 | N RORREG        ; Registry IEN | 
|---|
|  | 44 | N RORSDT        ; Start date | 
|---|
|  | 45 | ; | 
|---|
|  | 46 | N BODY,CNT,ECNT,IEN,IENS,LRGLST,RC,REPORT,RORPTN,SFLAGS,TMP | 
|---|
|  | 47 | ;--- Root node of the report | 
|---|
|  | 48 | S REPORT=$$ADDVAL^RORTSK11(RORTSK,"REPORT") | 
|---|
|  | 49 | Q:REPORT<0 REPORT | 
|---|
|  | 50 | ; | 
|---|
|  | 51 | ;--- Get and prepare the report parameters | 
|---|
|  | 52 | S RORREG=+$$PARAM^RORTSK01("REGIEN") | 
|---|
|  | 53 | S RC=$$PARAMS(REPORT,.SFLAGS,.LRGLST)  Q:RC<0 RC | 
|---|
|  | 54 | ; | 
|---|
|  | 55 | ;--- Initialize constants and variables | 
|---|
|  | 56 | S RORPTN=$$REGSIZE^RORUTL02(+RORREG)  S:RORPTN<0 RORPTN=0 | 
|---|
|  | 57 | S ROREDT1=$$FMADD^XLFDT(ROREDT\1,1),ECNT=0 | 
|---|
|  | 58 | K ^TMP("RORX010",$J) | 
|---|
|  | 59 | S RORLTL=$$ALLOC^RORTMP() | 
|---|
|  | 60 | ; | 
|---|
|  | 61 | ;--- Prepare the search parameters | 
|---|
|  | 62 | S RORDST=$NA(^TMP("RORX010",$J)) | 
|---|
|  | 63 | S RORDST("RORCB")="$$LTCB^RORX010" | 
|---|
|  | 64 | S RC=$$LOADTSTS^RORUTL10(RORLTL,+RORREG,LRGLST) | 
|---|
|  | 65 | ; | 
|---|
|  | 66 | ;--- Report header and list of patients | 
|---|
|  | 67 | S RC=$$HEADER(REPORT)  G:RC<0 ERROR | 
|---|
|  | 68 | S BODY=$$ADDVAL^RORTSK11(RORTSK,"PATIENTS",,REPORT) | 
|---|
|  | 69 | I BODY<0  S RC=+BODY  G ERROR | 
|---|
|  | 70 | D ADDATTR^RORTSK11(RORTSK,BODY,"TABLE","PATIENTS") | 
|---|
|  | 71 | ; | 
|---|
|  | 72 | ;--- Browse through the registry records | 
|---|
|  | 73 | S (CNT,IEN,RC)=0 | 
|---|
|  | 74 | F  S IEN=$O(^RORDATA(798,"AC",RORREG,IEN))  Q:IEN'>0  D  Q:RC<0 | 
|---|
|  | 75 | . S TMP=$S(RORPTN>0:CNT/RORPTN,1:"") | 
|---|
|  | 76 | . S RC=$$LOOP^RORTSK01(TMP)  Q:RC<0 | 
|---|
|  | 77 | . S IENS=IEN_",",CNT=CNT+1 | 
|---|
|  | 78 | . ;--- Check if the patient should be skipped | 
|---|
|  | 79 | . Q:$$SKIP^RORXU005(IEN,SFLAGS,RORSDT,ROREDT) | 
|---|
|  | 80 | . ;--- Process the registry record | 
|---|
|  | 81 | . I $$PATIENT(IENS,BODY)<0  S ECNT=ECNT+1  Q | 
|---|
|  | 82 | ; | 
|---|
|  | 83 | ERROR ;--- Cleanup | 
|---|
|  | 84 | D FREE^RORTMP(RORLTL) | 
|---|
|  | 85 | K ^TMP("RORX010",$J) | 
|---|
|  | 86 | Q $S(RC<0:RC,ECNT>0:-43,1:0) | 
|---|
|  | 87 | ; | 
|---|
|  | 88 | ;***** CALLBACK FUNCTION FOR LAB DATA SEARCH | 
|---|
|  | 89 | LTCB(RORDST,INVDT,RESULT) ; | 
|---|
|  | 90 | N GRP,NODE,RC,VAL | 
|---|
|  | 91 | S NODE=$NA(RORTSK("PARAMS","LRGRANGES","C")) | 
|---|
|  | 92 | S GRP=+$P($G(RESULT(2)),U,3) | 
|---|
|  | 93 | ;--- Check the result range if necessary | 
|---|
|  | 94 | I $D(@NODE@(GRP))>1  S RC=1  D  Q:RC RC | 
|---|
|  | 95 | . S VAL=$$CLRNMVAL^RORUTL18($P($G(RESULT(1)),U,3)) | 
|---|
|  | 96 | . ;--- Skip a non-numeric result | 
|---|
|  | 97 | . Q:'$$NUMERIC^RORUTL05(VAL) | 
|---|
|  | 98 | . ;--- Check the range | 
|---|
|  | 99 | . I $G(@NODE@(GRP,"L"))'=""  Q:VAL<@NODE@(GRP,"L") | 
|---|
|  | 100 | . I $G(@NODE@(GRP,"H"))'=""  Q:VAL>@NODE@(GRP,"H") | 
|---|
|  | 101 | . S RC=0 | 
|---|
|  | 102 | ;--- Store the result | 
|---|
|  | 103 | K RORDST("GRP",GRP) | 
|---|
|  | 104 | S RORDST("RORPTR")=$G(RORDST("RORPTR"))+1 | 
|---|
|  | 105 | M @RORDST@(RORDST("RORPTR"))=RESULT | 
|---|
|  | 106 | Q 0 | 
|---|
|  | 107 | ; | 
|---|
|  | 108 | ;***** OUTPUTS THE REPORT PARAMETERS | 
|---|
|  | 109 | ; | 
|---|
|  | 110 | ; PARTAG        Reference (IEN) to the parent tag | 
|---|
|  | 111 | ; | 
|---|
|  | 112 | ; .FLAGS        Flags for the $$SKIP^RORXU005 are | 
|---|
|  | 113 | ;               returned via this parameter | 
|---|
|  | 114 | ; | 
|---|
|  | 115 | ; .LRGLST       List of lab group codes for the $$LOADTSTS^RORUTL10 | 
|---|
|  | 116 | ; | 
|---|
|  | 117 | ; Return Values: | 
|---|
|  | 118 | ;       <0  Error code | 
|---|
|  | 119 | ;        0  Ok | 
|---|
|  | 120 | ; | 
|---|
|  | 121 | PARAMS(PARTAG,FLAGS,LRGLST) ; | 
|---|
|  | 122 | N PARAMS,TMP | 
|---|
|  | 123 | S (FLAGS,LRGLST)="" | 
|---|
|  | 124 | S PARAMS=$$PARAMS^RORXU002(.RORTSK,PARTAG,.RORSDT,.ROREDT,.FLAGS) | 
|---|
|  | 125 | Q:PARAMS<0 PARAMS | 
|---|
|  | 126 | ;--- Lab test ranges | 
|---|
|  | 127 | I $D(RORTSK("PARAMS","LRGRANGES","C"))>1  D  Q:RC<0 RC | 
|---|
|  | 128 | . N GRC,ELEMENT,NODE,LRGELMTS,RANGE | 
|---|
|  | 129 | . S NODE=$NA(RORTSK("PARAMS","LRGRANGES","C")) | 
|---|
|  | 130 | . S LRGELMTS=$$ADDVAL^RORTSK11(RORTSK,"LRGRANGES",,PARAMS) | 
|---|
|  | 131 | . S (GRC,RC)=0 | 
|---|
|  | 132 | . F  S GRC=$O(@NODE@(GRC))  Q:GRC'>0  D  Q:RC<0 | 
|---|
|  | 133 | . . S RANGE=0,TMP=$$RANGE(GRC) | 
|---|
|  | 134 | . . S ELEMENT=$$ADDVAL^RORTSK11(RORTSK,"LRGRANGE",TMP,LRGELMTS) | 
|---|
|  | 135 | . . I ELEMENT<0  S RC=ELEMENT  Q | 
|---|
|  | 136 | . . D ADDATTR^RORTSK11(RORTSK,ELEMENT,"ID",GRC) | 
|---|
|  | 137 | . . S LRGLST=LRGLST_$S(LRGLST'="":","_GRC,1:GRC) | 
|---|
|  | 138 | . . ;--- Process the range values | 
|---|
|  | 139 | . . S TMP=$G(@NODE@(GRC,"L")) | 
|---|
|  | 140 | . . I TMP'=""  D  S RANGE=1 | 
|---|
|  | 141 | . . . D ADDATTR^RORTSK11(RORTSK,ELEMENT,"LOW",TMP) | 
|---|
|  | 142 | . . S TMP=$G(@NODE@(GRC,"H")) | 
|---|
|  | 143 | . . I TMP'=""  D  S RANGE=1 | 
|---|
|  | 144 | . . . D ADDATTR^RORTSK11(RORTSK,ELEMENT,"HIGH",TMP) | 
|---|
|  | 145 | . . D:RANGE ADDATTR^RORTSK11(RORTSK,ELEMENT,"RANGE",1) | 
|---|
|  | 146 | ;--- Success | 
|---|
|  | 147 | Q PARAMS | 
|---|
|  | 148 | ; | 
|---|
|  | 149 | ;***** ADDS THE PATIENT DATA TO THE REPORT | 
|---|
|  | 150 | ; | 
|---|
|  | 151 | ; IENS          IENS of the patient's record in the registry | 
|---|
|  | 152 | ; PARTAG        Reference (IEN) to the parent tag | 
|---|
|  | 153 | ; | 
|---|
|  | 154 | ; Return Values: | 
|---|
|  | 155 | ;       <0  Error code | 
|---|
|  | 156 | ;        0  Ok | 
|---|
|  | 157 | ; | 
|---|
|  | 158 | PATIENT(IENS,PARTAG) ; | 
|---|
|  | 159 | N DFN,I,LABTESTS,LT,NAME,RC,RORBUF,RORMSG,TMP,VA,VADM | 
|---|
|  | 160 | ;--- Get the data from the ROR REGISTRY RECORD file | 
|---|
|  | 161 | D GETS^DIQ(798,IENS,".01","I","RORBUF","RORMSG") | 
|---|
|  | 162 | Q:$G(DIERR) $$DBS^RORERR("RORMSG",-9,,,798,IENS) | 
|---|
|  | 163 | S DFN=$G(RORBUF(798,IENS,.01,"I")) | 
|---|
|  | 164 | ;--- Search for the lab results | 
|---|
|  | 165 | K @RORDST,RORDST("RORPTR") | 
|---|
|  | 166 | M RORDST("GRP")=RORTSK("PARAMS","LRGRANGES","C") | 
|---|
|  | 167 | S RC=$$LTSEARCH^RORUTL10(DFN,RORLTL,.RORDST,,RORSDT,ROREDT1) | 
|---|
|  | 168 | Q:RC'>0 RC | 
|---|
|  | 169 | ;--- Results from all groups should be present | 
|---|
|  | 170 | Q:$D(RORDST("GRP"))>1 0 | 
|---|
|  | 171 | ;--- Load the demographic data | 
|---|
|  | 172 | D VADEM^RORUTL05(DFN,1) | 
|---|
|  | 173 | ;--- The <PATIENT> tag | 
|---|
|  | 174 | S PTAG=$$ADDVAL^RORTSK11(RORTSK,"PATIENT",,PARTAG,,DFN) | 
|---|
|  | 175 | Q:PTAG<0 PTAG | 
|---|
|  | 176 | ;--- Patient Name | 
|---|
|  | 177 | D ADDVAL^RORTSK11(RORTSK,"NAME",VADM(1),PTAG,1) | 
|---|
|  | 178 | ;--- Last 4 digits of the SSN | 
|---|
|  | 179 | D ADDVAL^RORTSK11(RORTSK,"LAST4",VA("BID"),PTAG,2) | 
|---|
|  | 180 | ;--- Date of death | 
|---|
|  | 181 | S TMP=$$DATE^RORXU002($P(VADM(6),U)\1) | 
|---|
|  | 182 | D ADDVAL^RORTSK11(RORTSK,"DOD",TMP,PTAG,1) | 
|---|
|  | 183 | ;--- Lab results | 
|---|
|  | 184 | S LABTESTS=$$ADDVAL^RORTSK11(RORTSK,"PTLRL",,PTAG) | 
|---|
|  | 185 | S I="" | 
|---|
|  | 186 | F  S I=$O(@RORDST@(I))  Q:I=""  D | 
|---|
|  | 187 | . S LT=$$ADDVAL^RORTSK11(RORTSK,"LT",,LABTESTS) | 
|---|
|  | 188 | . D ADDVAL^RORTSK11(RORTSK,"GROUP",$P(@RORDST@(I,2),U,4),LT,1) | 
|---|
|  | 189 | . D ADDVAL^RORTSK11(RORTSK,"DATE",$P(@RORDST@(I,1),U,2),LT,1) | 
|---|
|  | 190 | . D ADDVAL^RORTSK11(RORTSK,"NAME",$P(@RORDST@(I,2),U,2),LT,1) | 
|---|
|  | 191 | . D ADDVAL^RORTSK11(RORTSK,"RESULT",$P(@RORDST@(I,1),U,3),LT,3) | 
|---|
|  | 192 | ;--- | 
|---|
|  | 193 | Q $S(RC<0:RC,1:0) | 
|---|
|  | 194 | ; | 
|---|
|  | 195 | ;***** PROCESSES THE RESULT RANGE OPTIONS | 
|---|
|  | 196 | ; | 
|---|
|  | 197 | ; GRC           Code of a Lab Group | 
|---|
|  | 198 | ; | 
|---|
|  | 199 | ; Return Values: | 
|---|
|  | 200 | ;       Description of the Lab results to be included in the report. | 
|---|
|  | 201 | ; | 
|---|
|  | 202 | RANGE(GRC) ; | 
|---|
|  | 203 | N RANGE,TMP | 
|---|
|  | 204 | S RANGE="" | 
|---|
|  | 205 | ;--- Range | 
|---|
|  | 206 | D:$D(RORTSK("PARAMS","LRGRANGES","C",GRC))>1 | 
|---|
|  | 207 | . ;--- Low | 
|---|
|  | 208 | . S TMP=$G(RORTSK("PARAMS","LRGRANGES","C",GRC,"L")) | 
|---|
|  | 209 | . S:TMP'="" RANGE=RANGE_" not less than "_TMP | 
|---|
|  | 210 | . ;--- High | 
|---|
|  | 211 | . S TMP=$G(RORTSK("PARAMS","LRGRANGES","C",GRC,"H")) | 
|---|
|  | 212 | . I TMP'=""  D:RANGE'=""  S RANGE=RANGE_" not greater than "_TMP | 
|---|
|  | 213 | . . S RANGE=RANGE_" and" | 
|---|
|  | 214 | ;--- Description | 
|---|
|  | 215 | S TMP=$G(RORTSK("PARAMS","LRGRANGES","C",GRC)) | 
|---|
|  | 216 | S:TMP="" TMP="Unknown ("_GRC_")" | 
|---|
|  | 217 | Q TMP_" - "_$S(RANGE'="":"numeric results"_RANGE,1:"all results") | 
|---|