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