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