| 1 | RORXU002 ;HCIOFO/SG - REPORT BUILDER UTILITIES ; 5/18/06 11:13am | 
|---|
| 2 | ;;1.5;CLINICAL CASE REGISTRIES;**1**;Feb 17, 2006;Build 24 | 
|---|
| 3 | ; | 
|---|
| 4 | Q | 
|---|
| 5 | ; | 
|---|
| 6 | ;***** SCANS THE TABLE DEFINITION (RORSRC) FOR COLUMN NAMES | 
|---|
| 7 | ; | 
|---|
| 8 | ; .TERM         Reference to a local variable where | 
|---|
| 9 | ;               is terminator is returned | 
|---|
| 10 | ; | 
|---|
| 11 | ; Return Values: | 
|---|
| 12 | ;       ""  End of definition | 
|---|
| 13 | ;      ...  Name of the column | 
|---|
| 14 | ; | 
|---|
| 15 | COLSCAN(TERM) ; | 
|---|
| 16 | N CH,I,TOKEN | 
|---|
| 17 | F I=1:1  S TERM=$E(RORSRC,I)  Q:"(,)"[TERM | 
|---|
| 18 | S TOKEN=$E(RORSRC,1,I-1) | 
|---|
| 19 | F I=I+1:1  S CH=$E(RORSRC,I)  Q:(CH="")!("(,)"'[CH) | 
|---|
| 20 | S $E(RORSRC,1,I-1)="" | 
|---|
| 21 | Q TOKEN | 
|---|
| 22 | ; | 
|---|
| 23 | ;***** CHECKS THE FILEMAN DATE/TIME VALUE | 
|---|
| 24 | DATE(DT) ; | 
|---|
| 25 | Q $S(DT>0:+DT,1:"") | 
|---|
| 26 | ; | 
|---|
| 27 | ;***** OUTPUTS THE BASIC HEADER TO THE REPORT | 
|---|
| 28 | ; | 
|---|
| 29 | ; .RORTSK       Task number and task parameters | 
|---|
| 30 | ; | 
|---|
| 31 | ; PARTAG        Reference (IEN) to the parent tag | 
|---|
| 32 | ; | 
|---|
| 33 | ; Return Values: | 
|---|
| 34 | ;       <0  Error code | 
|---|
| 35 | ;       >0  IEN of the HEADER element | 
|---|
| 36 | ; | 
|---|
| 37 | HEADER(RORTSK,PARTAG) ; | 
|---|
| 38 | N HEADER,IENS,REGIEN,RORBUF,RORMSG,TMP | 
|---|
| 39 | S HEADER=$$ADDVAL^RORTSK11(RORTSK,"HEADER",,PARTAG) | 
|---|
| 40 | Q:HEADER<0 HEADER | 
|---|
| 41 | D ADDVAL^RORTSK11(RORTSK,"DATE",$$DATE($$NOW^XLFDT),HEADER) | 
|---|
| 42 | D ADDVAL^RORTSK11(RORTSK,"TASK_NUMBER",RORTSK,HEADER) | 
|---|
| 43 | S REGIEN=+$$PARAM^RORTSK01("REGIEN") | 
|---|
| 44 | ;--- | 
|---|
| 45 | S IENS=REGIEN_"," | 
|---|
| 46 | D GETS^DIQ(798.1,IENS,"1;2","I","RORBUF","RORMSG") | 
|---|
| 47 | Q:$G(DIERR) $$DBS^RORERR("RORMSG",-9,,,798.1,IENS) | 
|---|
| 48 | S TMP=$G(RORBUF(798.1,IENS,1,"I")) | 
|---|
| 49 | D ADDVAL^RORTSK11(RORTSK,"UPDATED_UNTIL",$$DATE(TMP),HEADER) | 
|---|
| 50 | S TMP=$G(RORBUF(798.1,IENS,2,"I")) | 
|---|
| 51 | D ADDVAL^RORTSK11(RORTSK,"EXTRACTED_UNTIL",$$DATE(TMP),HEADER) | 
|---|
| 52 | Q HEADER | 
|---|
| 53 | ; | 
|---|
| 54 | ;***** PARSES THE COMMA-SEPARATED LIST | 
|---|
| 55 | ; | 
|---|
| 56 | ; .LIST         Reference to a local variable that contains a list. | 
|---|
| 57 | ;               Items of the list are returned as the subscripts of | 
|---|
| 58 | ;               this variable. | 
|---|
| 59 | ; | 
|---|
| 60 | LIST(LIST) ; | 
|---|
| 61 | N I,TMP,VAL | 
|---|
| 62 | F I=1:1  S VAL=$P(LIST,",",I)  Q:VAL=""  D | 
|---|
| 63 | . S TMP=$$TRIM^XLFSTR(VAL) | 
|---|
| 64 | . S:TMP'="" LIST(TMP)="" | 
|---|
| 65 | Q | 
|---|
| 66 | ; | 
|---|
| 67 | ;***** COMPILES A TEXT DESCRIPTION FOR THE REPORT OPTIONS | 
|---|
| 68 | ; | 
|---|
| 69 | ; .OPTIONS      Reference to a local variable containing | 
|---|
| 70 | ;               the options as subscripts | 
|---|
| 71 | ; | 
|---|
| 72 | ; [DLGNUM]      Number of the dialog that contains the template | 
|---|
| 73 | ;               (7980000.018, by default). | 
|---|
| 74 | ; | 
|---|
| 75 | ; Return Values: | 
|---|
| 76 | ;      ...  Text description of the options | 
|---|
| 77 | ; | 
|---|
| 78 | OPTXT(OPTIONS,DLGNUM) ; | 
|---|
| 79 | N I,J,NS,RORBUF,TEXT,TMP | 
|---|
| 80 | S:$G(DLGNUM)'>0 DLGNUM=7980000.018 | 
|---|
| 81 | D BLD^DIALOG(DLGNUM,,,"RORBUF") | 
|---|
| 82 | S TEXT="",I=0 | 
|---|
| 83 | F  S I=$O(RORBUF(I))  Q:I=""  D:$E(RORBUF(I),1)'=" " | 
|---|
| 84 | . S NS=0 | 
|---|
| 85 | . F J=1:1  S TMP=$TR($P(RORBUF(I),",",J)," ")  Q:TMP=""  D | 
|---|
| 86 | . . S:$D(OPTIONS(TMP)) NS=2**(J-1)+NS | 
|---|
| 87 | . Q:'NS | 
|---|
| 88 | . S TMP=$$TRIM^XLFSTR($G(RORBUF(I+NS))) | 
|---|
| 89 | . S:TMP'="" TEXT=TEXT_", "_TMP | 
|---|
| 90 | Q $P(TEXT,", ",2,999) | 
|---|
| 91 | ; | 
|---|
| 92 | ;***** OUTPUTS THE PARAMETERS TO THE REPORT | 
|---|
| 93 | ; | 
|---|
| 94 | ; .RORTSK       Task number and task parameters | 
|---|
| 95 | ; | 
|---|
| 96 | ; PARTAG        Reference (IEN) to the parent tag | 
|---|
| 97 | ; | 
|---|
| 98 | ; .STDT         Start and end dates of the report | 
|---|
| 99 | ; .ENDT         are returned via these parameters | 
|---|
| 100 | ; | 
|---|
| 101 | ; [.FLAGS]      Flags for the $$SKIP^RORXU005 are returned via this | 
|---|
| 102 | ;               parameter. The "D" (skip deceased patients) and "G" | 
|---|
| 103 | ;               (skip pending patients) flags are always added. | 
|---|
| 104 | ; | 
|---|
| 105 | ; Return Values: | 
|---|
| 106 | ;       <0  Error code | 
|---|
| 107 | ;       >0  IEN of the PARAMETERS element | 
|---|
| 108 | ; | 
|---|
| 109 | PARAMS(RORTSK,PARTAG,STDT,ENDT,FLAGS) ; | 
|---|
| 110 | N BUF,ELEMENT,I,LTAG,MODE,NAME,PARAMS,RC,REGIEN,RORMSG,TMP | 
|---|
| 111 | S PARAMS=$$ADDVAL^RORTSK11(RORTSK,"PARAMETERS",,PARTAG) | 
|---|
| 112 | S RC=0,(ENDT,STDT)="",FLAGS="" | 
|---|
| 113 | ; | 
|---|
| 114 | ;=== Registry name | 
|---|
| 115 | S REGIEN=+$$PARAM^RORTSK01("REGIEN") | 
|---|
| 116 | I REGIEN>0  D  Q:RC<0 RC | 
|---|
| 117 | . S TMP=$P($$REGNAME^RORUTL01(REGIEN),U) | 
|---|
| 118 | . I TMP=""  S RC=-1  Q | 
|---|
| 119 | . S RC=$$ADDVAL^RORTSK11(RORTSK,"REGNAME",TMP,PARAMS) | 
|---|
| 120 | ; | 
|---|
| 121 | ;=== Alternate date ranges | 
|---|
| 122 | F I=2:1:3  D  Q:RC<0 | 
|---|
| 123 | . S STDT=$$PARAM^RORTSK01("DATE_RANGE_"_I,"START")\1  Q:STDT'>0 | 
|---|
| 124 | . S ENDT=$$PARAM^RORTSK01("DATE_RANGE_"_I,"END")\1    Q:ENDT'>0 | 
|---|
| 125 | . S ELEMENT=$$ADDVAL^RORTSK11(RORTSK,"DATE_RANGE_"_I,,PARAMS) | 
|---|
| 126 | . I ELEMENT<0  S RC=+ELEMENT  Q | 
|---|
| 127 | . S RC=$$ADDATTR^RORTSK11(RORTSK,ELEMENT,"START",STDT)  Q:RC<0 | 
|---|
| 128 | . S RC=$$ADDATTR^RORTSK11(RORTSK,ELEMENT,"END",ENDT) | 
|---|
| 129 | Q:RC<0 RC | 
|---|
| 130 | ; | 
|---|
| 131 | ;=== Main date range | 
|---|
| 132 | S STDT=$$PARAM^RORTSK01("DATE_RANGE","START")\1 | 
|---|
| 133 | S ENDT=$$PARAM^RORTSK01("DATE_RANGE","END")\1 | 
|---|
| 134 | I STDT>0,ENDT>0  D  Q:RC<0 RC | 
|---|
| 135 | . S ELEMENT=$$ADDVAL^RORTSK11(RORTSK,"DATE_RANGE",,PARAMS) | 
|---|
| 136 | . I ELEMENT<0  S RC=+ELEMENT  Q | 
|---|
| 137 | . S RC=$$ADDATTR^RORTSK11(RORTSK,ELEMENT,"START",STDT)  Q:RC<0 | 
|---|
| 138 | . S RC=$$ADDATTR^RORTSK11(RORTSK,ELEMENT,"END",ENDT) | 
|---|
| 139 | E  S (ENDT,STDT)="" | 
|---|
| 140 | ; | 
|---|
| 141 | ;=== Task comment | 
|---|
| 142 | S TMP=$$PARAM^RORTSK01("TASK_COMMENT") | 
|---|
| 143 | D:TMP'="" ADDVAL^RORTSK11(RORTSK,"TASK_COMMENT",TMP,PARAMS) | 
|---|
| 144 | ; | 
|---|
| 145 | ;=== Patient selection and Options | 
|---|
| 146 | F NAME="PATIENTS","OPTIONS"  D  Q:RC<0 | 
|---|
| 147 | . K BUF  M BUF=RORTSK("PARAMS",NAME,"A")  Q:$D(BUF)<10 | 
|---|
| 148 | . ;--- Generate the XML tags | 
|---|
| 149 | . S ELEMENT=$$ADDVAL^RORTSK11(RORTSK,NAME,$$OPTXT(.BUF),PARAMS) | 
|---|
| 150 | . I ELEMENT'>0  S RC=ELEMENT  Q | 
|---|
| 151 | . S TMP="" | 
|---|
| 152 | . F  S TMP=$O(BUF(TMP))  Q:TMP=""  D  Q:RC<0 | 
|---|
| 153 | . . S RC=$$ADDATTR^RORTSK11(RORTSK,ELEMENT,TMP,"1") | 
|---|
| 154 | . ;--- Compile the flags | 
|---|
| 155 | . D:NAME="PATIENTS" | 
|---|
| 156 | . . S:'$D(BUF("DE_BEFORE")) FLAGS=FLAGS_"P" | 
|---|
| 157 | . . S:'$D(BUF("DE_DURING")) FLAGS=FLAGS_"N" | 
|---|
| 158 | . . S:'$D(BUF("DE_AFTER")) FLAGS=FLAGS_"F" | 
|---|
| 159 | Q:RC<0 RC | 
|---|
| 160 | ; | 
|---|
| 161 | ;=== Other Registries | 
|---|
| 162 | I $D(RORTSK("PARAMS","OTHER_REGISTRIES","C"))>1  D  Q:RC<0 RC | 
|---|
| 163 | . N NODE,REGIEN | 
|---|
| 164 | . S LTAG=$$ADDVAL^RORTSK11(RORTSK,"OTHER_REGISTRIES",,PARAMS) | 
|---|
| 165 | . I LTAG<0  S RC=+LTAG  Q | 
|---|
| 166 | . S NODE=$NA(RORTSK("PARAMS","OTHER_REGISTRIES","C")) | 
|---|
| 167 | . S REGIEN=0 | 
|---|
| 168 | . F  S REGIEN=$O(@NODE@(REGIEN))  Q:REGIEN'>0  D  Q:RC<0 | 
|---|
| 169 | . . S TMP=$P($$REGNAME^RORUTL01(REGIEN),U,2) | 
|---|
| 170 | . . S MODE=+$G(@NODE@(REGIEN)) | 
|---|
| 171 | . . I 'MODE!(TMP="")  K @NODE@(REGIEN)  Q | 
|---|
| 172 | . . S TMP=TMP_" ("_$S(MODE<0:"Exclude",1:"Include")_")" | 
|---|
| 173 | . . S RC=$$ADDVAL^RORTSK11(RORTSK,"REGNAME",TMP,LTAG) | 
|---|
| 174 | . S FLAGS=FLAGS_"R" | 
|---|
| 175 | ; | 
|---|
| 176 | ;=== Local Fields | 
|---|
| 177 | I $D(RORTSK("PARAMS","LOCAL_FIELDS","C"))>1  D  Q:RC<0 RC | 
|---|
| 178 | . N NODE,IEN,IENS | 
|---|
| 179 | . S LTAG=$$ADDVAL^RORTSK11(RORTSK,"LOCAL_FIELDS",,PARAMS) | 
|---|
| 180 | . I LTAG<0  S RC=+LTAG  Q | 
|---|
| 181 | . S NODE=$NA(RORTSK("PARAMS","LOCAL_FIELDS","C")) | 
|---|
| 182 | . S IEN=0 | 
|---|
| 183 | . F  S IEN=$O(@NODE@(IEN))  Q:IEN'>0  D  Q:RC<0 | 
|---|
| 184 | . . S TMP=$$GET1^DIQ(799.53,IEN_",",.01,,,"RORMSG") | 
|---|
| 185 | . . D:$G(DIERR) DBS^RORERR("RORMSG",-9,,,799.53,IEN_",") | 
|---|
| 186 | . . S MODE=+$G(@NODE@(IEN)) | 
|---|
| 187 | . . I 'MODE!(TMP="")  K @NODE@(IEN)  Q | 
|---|
| 188 | . . S TMP=TMP_" ("_$S(MODE<0:"Exclude",1:"Include")_")" | 
|---|
| 189 | . . S RC=$$ADDVAL^RORTSK11(RORTSK,"FIELD",TMP,LTAG) | 
|---|
| 190 | . S FLAGS=FLAGS_"O" | 
|---|
| 191 | ; | 
|---|
| 192 | ;=== Lab test ranges | 
|---|
| 193 | I $D(RORTSK("PARAMS","LRGRANGES","C"))>1  D  Q:RC<0 RC | 
|---|
| 194 | . N GRC,NODE | 
|---|
| 195 | . S NODE=$NA(RORTSK("PARAMS","LRGRANGES","C")) | 
|---|
| 196 | . S GRC=0 | 
|---|
| 197 | . F  S GRC=$O(@NODE@(GRC))  Q:GRC'>0  D  Q:RC<0 | 
|---|
| 198 | . . S RC=$$ITEMIEN^RORUTL09(3,REGIEN,GRC,.TMP) | 
|---|
| 199 | . . S:RC'<0 @NODE@(GRC)=TMP | 
|---|
| 200 | ; | 
|---|
| 201 | ;=== Defaults | 
|---|
| 202 | S TMP=$TR(FLAGS,"FNP")  S:$L(FLAGS)-$L(TMP)=3 FLAGS=TMP | 
|---|
| 203 | S FLAGS=FLAGS_"DG" | 
|---|
| 204 | ; | 
|---|
| 205 | ;=== Success | 
|---|
| 206 | Q PARAMS | 
|---|
| 207 | ; | 
|---|
| 208 | ;***** GENERATES TABLE DEFINITION | 
|---|
| 209 | ; | 
|---|
| 210 | ; TBLREF        Reference to the definition table in the source | 
|---|
| 211 | ;               code (TAG^ROUTINE). See the HEADER^RORX013 for | 
|---|
| 212 | ;               examples of table definitions. | 
|---|
| 213 | ; | 
|---|
| 214 | ; HEADER        IEN of the HEADER element | 
|---|
| 215 | ; | 
|---|
| 216 | ; Return Values: | 
|---|
| 217 | ;       <0  Error code | 
|---|
| 218 | ;        0  Ok | 
|---|
| 219 | ; | 
|---|
| 220 | TBLDEF(TBLREF,HEADER) ; | 
|---|
| 221 | N COND,IT,NAME,RC,RORSRC,TBLDEF,TERM,TGET | 
|---|
| 222 | S TGET="S RORSRC=$T("_$P(TBLREF,"^")_"+IT^"_$P(TBLREF,"^",2)_")" | 
|---|
| 223 | S RC=0 | 
|---|
| 224 | F IT=1:1  X TGET  S RORSRC=$P(RORSRC,";;",2)  Q:RORSRC=""  D  Q:RC<0 | 
|---|
| 225 | . S COND=$$TRIM^XLFSTR($P(RORSRC,U,2,999)) | 
|---|
| 226 | . I COND'=""  X COND  E  Q | 
|---|
| 227 | . S RORSRC=$$TRIM^XLFSTR($P(RORSRC,U)) | 
|---|
| 228 | . S NAME=$$COLSCAN(.TERM)  Q:(NAME="")!(TERM'="(") | 
|---|
| 229 | . S TBLDEF=$$ADDVAL^RORTSK11(RORTSK,"TBLDEF",,HEADER) | 
|---|
| 230 | . I TBLDEF<0  S RC=TBLDEF  Q | 
|---|
| 231 | . D ADDATTR^RORTSK11(RORTSK,TBLDEF,"NAME",NAME) | 
|---|
| 232 | . D ADDATTR^RORTSK11(RORTSK,TBLDEF,"HEADER","1") | 
|---|
| 233 | . D ADDATTR^RORTSK11(RORTSK,TBLDEF,"FOOTER","1") | 
|---|
| 234 | . D TBLDEF1(TBLDEF) | 
|---|
| 235 | Q $S(RC<0:RC,1:0) | 
|---|
| 236 | ; | 
|---|
| 237 | ;***** GENERATES <COLUMN> ELEMENTS FROM TABLE DEFINITION (RORSRC) | 
|---|
| 238 | ; | 
|---|
| 239 | ; PTAG          IEN of the parent element | 
|---|
| 240 | ; | 
|---|
| 241 | TBLDEF1(PTAG) ; | 
|---|
| 242 | N COLUMN,NAME,TERM | 
|---|
| 243 | F  S NAME=$$COLSCAN(.TERM)  Q:NAME=""  D  Q:")"[TERM | 
|---|
| 244 | . S COLUMN=$$ADDVAL^RORTSK11(RORTSK,"COLUMN",,PTAG) | 
|---|
| 245 | . D ADDATTR^RORTSK11(RORTSK,COLUMN,"NAME",NAME) | 
|---|
| 246 | . D:TERM="(" TBLDEF1(COLUMN) | 
|---|
| 247 | Q | 
|---|