| 1 | RORUTL06 ;HCIOFO/SG - DEVELOPER ENTRY POINTS ; 11/20/05 5:09pm | 
|---|
| 2 | ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006 | 
|---|
| 3 | ; | 
|---|
| 4 | N DA,DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y | 
|---|
| 5 | W !,"CLINICAL CASE REGISTRIES DEVELOPER'S UTILITIES" | 
|---|
| 6 | S X="" | 
|---|
| 7 | S X=X_";M:Metadata definitions" | 
|---|
| 8 | S X=X_";V:Verify registry definition" | 
|---|
| 9 | S X=X_";P:Prepare for KIDS" | 
|---|
| 10 | S DIR(0)="SO^"_$P(X,";",2,999) | 
|---|
| 11 | D ^DIR  W !  Q:$D(DIRUT) | 
|---|
| 12 | G PRTMDE:Y="M",VERIFY:Y="V",DISTPREP:Y="P" | 
|---|
| 13 | Q | 
|---|
| 14 | ; | 
|---|
| 15 | ;***** VERIFIES REGISTRY DEFINITION | 
|---|
| 16 | VERIFY ; | 
|---|
| 17 | N RORERRDL      ; Default error location | 
|---|
| 18 | N RORERROR      ; Error processing data | 
|---|
| 19 | N RORLOG        ; Log parameters | 
|---|
| 20 | N RORPARM       ; Application parameters | 
|---|
| 21 | ; | 
|---|
| 22 | N RC,REGLST,REGNAME,TMP | 
|---|
| 23 | W !,"REGISTRY DEFINITION VERIFIER",! | 
|---|
| 24 | D KILL^XUSCLEAN,INIT^RORUTL01("ROR") | 
|---|
| 25 | S RORPARM("DEBUG")=2 | 
|---|
| 26 | S RORPARM("ERR")=1 | 
|---|
| 27 | S RORPARM("LOG")=1 | 
|---|
| 28 | F TMP=1:1:6  S RORPARM("LOG",TMP)=1 | 
|---|
| 29 | D CLEAR^RORERR("START^RORUTL06") | 
|---|
| 30 | ;--- Select registries | 
|---|
| 31 | Q:$$SELREG^RORUTL07(.REGLST)'>0 | 
|---|
| 32 | ;--- Validate registry update defintion | 
|---|
| 33 | S RC=$$UPDDEF(.REGLST)  G:RC<0 ERROR | 
|---|
| 34 | ;--- Validate data extraction defintion | 
|---|
| 35 | S RC=$$EXTDEF(.REGLST)  G:RC<0 ERROR | 
|---|
| 36 | ;--- Cleanup | 
|---|
| 37 | D INIT^RORUTL01("ROR") | 
|---|
| 38 | Q | 
|---|
| 39 | ; | 
|---|
| 40 | ;***** PREPARES THE REGISTRY FOR KIDS DISTRIBUTION | 
|---|
| 41 | DISTPREP ; | 
|---|
| 42 | N RORERRDL      ; Default error location | 
|---|
| 43 | N RORERROR      ; Error processing data | 
|---|
| 44 | N RORFULL       ; Full installation (backpull, population, etc.) | 
|---|
| 45 | N RORPARM       ; Application parameters | 
|---|
| 46 | ; | 
|---|
| 47 | N IENS,FLD,FULL,RC,REGIEN,REGNAME,RORFDA,RORMSG | 
|---|
| 48 | N DA,DIR,DIRUT,DTOUT,DUOUT,X,Y | 
|---|
| 49 | W !,"REGISTRY PREPARATION FOR KIDS DISTRIBUTION",! | 
|---|
| 50 | D KILL^XUSCLEAN | 
|---|
| 51 | S RORPARM("ERR")=1 | 
|---|
| 52 | D CLEAR^RORERR("DISTPREP^RORUTL06") | 
|---|
| 53 | ;--- Select a registry | 
|---|
| 54 | S RC=$$SELREG^RORUTL18(.REGNAME)  G:RC<0 ERROR | 
|---|
| 55 | Q:RC'>0  S REGIEN=RC | 
|---|
| 56 | ;--- Select the type of distribution | 
|---|
| 57 | K DIR  S DIR(0)="S^I:Installation;U:Update",DIR("B")="Update" | 
|---|
| 58 | S DIR("A")="Slect the type of distribution" | 
|---|
| 59 | D ^DIR  Q:$D(DIRUT)  W ! | 
|---|
| 60 | S RORFULL=(Y="I") | 
|---|
| 61 | ;--- Request a confirmation | 
|---|
| 62 | K DIR  S DIR(0)="Y",DIR("B")="NO" | 
|---|
| 63 | S DIR("A",1)="Some fields of the '"_REGNAME_"' registry parameters" | 
|---|
| 64 | S DIR("A",2)="will be cleared to prepare them for KIDS distribution." | 
|---|
| 65 | S DIR("A")="Do you really want to do this" | 
|---|
| 66 | D ^DIR  Q:'$G(Y)  W ! | 
|---|
| 67 | ;--- Clear Registry parameters (single-valued) | 
|---|
| 68 | S IENS=REGIEN_"," | 
|---|
| 69 | F FLD=1,2,5,13,19.1,19.2,19.3,21.01,21.04,21.05  D | 
|---|
| 70 | . S RORFDA(798.1,IENS,FLD)="@" | 
|---|
| 71 | D FILE^DIE(,"RORFDA","RORMSG") | 
|---|
| 72 | G:$$DBS^RORERR("RORMSG",-9,,,798.1,IENS) ERROR | 
|---|
| 73 | ;--- Clear Registry parameters (multiples) | 
|---|
| 74 | S IENS=","_REGIEN_"," | 
|---|
| 75 | G:$$CLEAR^RORUTL05(798.11,IENS)<0 ERROR  ; LOG EVENT (8.1) | 
|---|
| 76 | G:$$CLEAR^RORUTL05(798.114,IENS)<0 ERROR ; NOTIFICATION (14) | 
|---|
| 77 | G:$$CLEAR^RORUTL05(798.122,IENS)<0 ERROR ; LAST BATCH CONTROL ID (22) | 
|---|
| 78 | G:$$CLEAR^RORUTL05(798.128,IENS)<0 ERROR ; LOCAL LAB TEST (28) | 
|---|
| 79 | G:$$CLEAR^RORUTL05(798.129,IENS)<0 ERROR ; LOCAL DRUG (29) | 
|---|
| 80 | G:$$CLEAR^RORUTL05(798.12,IENS)<0 ERROR  ; REPORT STATS (30) | 
|---|
| 81 | ;--- Registry-specific data | 
|---|
| 82 | I REGNAME="VA HEPC"  G:$$HEPC(REGIEN)<0 ERROR | 
|---|
| 83 | I REGNAME="VA HIV"   G:$$HIV(REGIEN)<0 ERROR | 
|---|
| 84 | ;--- Clean the ROR LOCAL FIELD file (#799.53) | 
|---|
| 85 | G:$$LOCFLDS()<0 ERROR | 
|---|
| 86 | ;--- Success | 
|---|
| 87 | W !,"Registry parameters are ready for distribution." | 
|---|
| 88 | Q | 
|---|
| 89 | ; | 
|---|
| 90 | ;***** DISPLAYS THE ERRORS | 
|---|
| 91 | ERROR ; | 
|---|
| 92 | D DSPSTK^RORERR() | 
|---|
| 93 | Q | 
|---|
| 94 | ; | 
|---|
| 95 | ;***** VALIDATES DATA EXTRACTION DEFINITION | 
|---|
| 96 | ; | 
|---|
| 97 | ; .REGLST       Reference to a local array containing | 
|---|
| 98 | ;               registry names as subscripts | 
|---|
| 99 | ; | 
|---|
| 100 | ; Return Values: | 
|---|
| 101 | ;       <0  Error Code | 
|---|
| 102 | ;        0  Ok | 
|---|
| 103 | ; | 
|---|
| 104 | EXTDEF(REGLST) ; | 
|---|
| 105 | N RORERRDL      ; Default error location | 
|---|
| 106 | N ROREXT        ; Data extraction descriptor | 
|---|
| 107 | N RORHL         ; HL7 variables | 
|---|
| 108 | N RORLRC        ; List of codes of Lab results to be extracted | 
|---|
| 109 | ; | 
|---|
| 110 | N RC | 
|---|
| 111 | W !,"DATA EXTRACTION DEFINITION",! | 
|---|
| 112 | D CLEAR^RORERR("UPDDEF^RORUTL06") | 
|---|
| 113 | S RC=$$PREPARE^ROREXPR(.REGLST) | 
|---|
| 114 | D:RC'<0 DEBUG^ROREXTUT | 
|---|
| 115 | Q RC | 
|---|
| 116 | ; | 
|---|
| 117 | ;***** HEPC-SPECIFIC PREPARATIONS | 
|---|
| 118 | HEPC(REGIEN) ; | 
|---|
| 119 | N IENS,RORFDA,RORMSG | 
|---|
| 120 | S IENS=(+REGIEN)_"," | 
|---|
| 121 | D:$G(RORFULL) | 
|---|
| 122 | . S RORFDA(798.1,IENS,1)=2900101  ; REGISTRY UPDATED UNTIL | 
|---|
| 123 | . S RORFDA(798.1,IENS,2)=2850101  ; DATA EXTRACTED UNTIL | 
|---|
| 124 | S RORFDA(798.1,IENS,25)=1         ; ENABLE PROTOCOLS | 
|---|
| 125 | D FILE^DIE(,"RORFDA","RORMSG") | 
|---|
| 126 | Q $$DBS^RORERR("RORMSG",-9,,,798.1,IENS) | 
|---|
| 127 | ; | 
|---|
| 128 | ;***** HIV-SPECIFIC PREPARATIONS | 
|---|
| 129 | HIV(REGIEN) ; | 
|---|
| 130 | N IENS,RORFDA,RORMSG | 
|---|
| 131 | S IENS=(+REGIEN)_"," | 
|---|
| 132 | D:$G(RORFULL) | 
|---|
| 133 | . S RORFDA(798.1,IENS,1)=2850101  ; REGISTRY UPDATED UNTIL | 
|---|
| 134 | . S RORFDA(798.1,IENS,2)=2850101  ; DATA EXTRACTED UNTIL | 
|---|
| 135 | S RORFDA(798.1,IENS,25)=1         ; ENABLE PROTOCOLS | 
|---|
| 136 | D FILE^DIE(,"RORFDA","RORMSG") | 
|---|
| 137 | Q $$DBS^RORERR("RORMSG",-9,,,798.1,IENS) | 
|---|
| 138 | ; | 
|---|
| 139 | ;***** CLEANS THE 'ROR LOCAL FIELD' FILE (#799.53) | 
|---|
| 140 | LOCFLDS() ; | 
|---|
| 141 | N DA,DIK,ROOT | 
|---|
| 142 | S DIK=$$ROOT^DILFD(799.53),ROOT=$$CREF^DILF(DIK) | 
|---|
| 143 | S DA=0 | 
|---|
| 144 | F  S DA=$O(@ROOT@(DA))  Q:DA'>0  D ^DIK | 
|---|
| 145 | Q 0 | 
|---|
| 146 | ; | 
|---|
| 147 | ;***** PRINTS THE DATA ELEMENT METADATA | 
|---|
| 148 | PRTMDE ; | 
|---|
| 149 | N RORCOLS       ; Lits of column descriptors | 
|---|
| 150 | N RORERRDL      ; Default error location | 
|---|
| 151 | N RORERROR      ; Error processing data | 
|---|
| 152 | N RORLST        ; List of files grouped by parents | 
|---|
| 153 | N RORPAGE       ; Current page number | 
|---|
| 154 | N RORPARM       ; Application parameters | 
|---|
| 155 | N RORTTL        ; Title of the report | 
|---|
| 156 | ; | 
|---|
| 157 | N DIR,DIRUT,DTOUT,DUOUT,MODE,TMP,X,Y | 
|---|
| 158 | D KILL^XUSCLEAN | 
|---|
| 159 | S (DDBDMSG,RORTTL)="METADATA OF THE DATA ELEMENTS" | 
|---|
| 160 | W !,RORTTL,!  S RORPARM("ERR")=1 | 
|---|
| 161 | D CLEAR^RORERR("PRTMDE^RORUTL06") | 
|---|
| 162 | ;---Request report sort mode from user | 
|---|
| 163 | S DIR(0)="S^H:Hierarhical;L:List of codes" | 
|---|
| 164 | S DIR("A")="Sort mode",DIR("B")="List of codes" | 
|---|
| 165 | D ^DIR  Q:$D(DIRUT)  S MODE=Y | 
|---|
| 166 | ;--- Generate and print the report | 
|---|
| 167 | I MODE="H"  S RC=0  D | 
|---|
| 168 | . N %ZIS,I,FILE,PARENT,ROOT,RORMSG | 
|---|
| 169 | . S ROOT=$$ROOT^DILFD(799.2,,1),RORPAGE=0 | 
|---|
| 170 | . ;--- Load column descriptors | 
|---|
| 171 | . F I=1:1  S TMP=$P($T(PRTMDEH+I),";;",2)  Q:TMP=""  D | 
|---|
| 172 | . . S RORCOLS(I)=$TR($P(TMP,U,1,3)," ")_U_$P(TMP,U,4) | 
|---|
| 173 | . ;--- Load file list | 
|---|
| 174 | . S FILE=0,RC=0 | 
|---|
| 175 | . F  S FILE=$O(@ROOT@(FILE))  Q:FILE'>0  D  Q:RC<0 | 
|---|
| 176 | . . S PARENT=+$$GET1^DIQ(799.2,FILE_",",1,"I",,"RORMSG") | 
|---|
| 177 | . . I $G(DIERR)  D  Q | 
|---|
| 178 | . . . S RC=$$DBS^RORERR("RORMSG",-9,,,799.2,FILE_",") | 
|---|
| 179 | . . S RORLST(PARENT,FILE)="" | 
|---|
| 180 | . Q:RC<0 | 
|---|
| 181 | . ;--- Print the report | 
|---|
| 182 | . S %ZIS("B")="" | 
|---|
| 183 | . D ^%ZIS   Q:$G(POP)  U IO | 
|---|
| 184 | . S RC=$$PRTMDEH()  S:RC'<0 RC=$$PRTMDE1(0,1) | 
|---|
| 185 | . D ^%ZISC | 
|---|
| 186 | E  S RC=$$PRTMDE2() | 
|---|
| 187 | G:RC<0 ERROR | 
|---|
| 188 | Q | 
|---|
| 189 | ; | 
|---|
| 190 | ;***** PRINTS A LEVEL OF THE "FILE-PROCESSING TREE" | 
|---|
| 191 | ; | 
|---|
| 192 | ; PARENT        Parent file number | 
|---|
| 193 | ; LEVEL         Number of the current level in the tree | 
|---|
| 194 | ; | 
|---|
| 195 | ; Return Values: | 
|---|
| 196 | ;       <0  Error Code | 
|---|
| 197 | ;        0  Ok | 
|---|
| 198 | ; | 
|---|
| 199 | PRTMDE1(PARENT,LEVEL) ; | 
|---|
| 200 | N FIELDS,FILE,FLD,I,IENS,IR,L,RORBUF,RORMSG | 
|---|
| 201 | S FIELDS="@;.01E;.02I;1I;2E;4I;4.1;4.2;6I" | 
|---|
| 202 | ;--- | 
|---|
| 203 | S FILE="",RC=0 | 
|---|
| 204 | F  S FILE=$O(RORLST(PARENT,FILE))  Q:FILE=""  D  Q:RC<0 | 
|---|
| 205 | . ;--- Load descriptors of the data elements | 
|---|
| 206 | . K RORBUF  S IENS=","_FILE_"," | 
|---|
| 207 | . D LIST^DIC(799.22,IENS,FIELDS,,,,,"B",,,"RORBUF","RORMSG") | 
|---|
| 208 | . ;--- Print header (if necessary) and file number | 
|---|
| 209 | . I ($Y+5)>IOSL  S RC=$$PRTMDEH()  Q:RC<0 | 
|---|
| 210 | . D PRTMDEL(LEVEL-1),PRTMDEL(LEVEL-1,FILE) | 
|---|
| 211 | . ;--- Print data element descriptors | 
|---|
| 212 | . S IR="",RC=0 | 
|---|
| 213 | . F  S IR=$O(RORBUF("DILIST","ID",IR))  Q:IR=""  D  Q:RC<0  W ! | 
|---|
| 214 | . . I ($Y+5)>IOSL  S RC=$$PRTMDEH()  Q:RC<0 | 
|---|
| 215 | . . D:IR>1 PRTMDEL(LEVEL,"") | 
|---|
| 216 | . . S I="" | 
|---|
| 217 | . . F  S I=$O(RORCOLS(I))  Q:I=""  D | 
|---|
| 218 | . . . S FLD=+$P(RORCOLS(I),U,2)  Q:FLD'>0 | 
|---|
| 219 | . . . S L=+$P(RORCOLS(I),U,3)  S:L'>0 L=999 | 
|---|
| 220 | . . . W ?(+RORCOLS(I)),$E($G(RORBUF("DILIST","ID",IR,FLD)),1,L) | 
|---|
| 221 | . Q:RC<0 | 
|---|
| 222 | . S:$D(RORLST(FILE))>1 RC=$$PRTMDE1(FILE,LEVEL+1) | 
|---|
| 223 | Q $S(RC<0:RC,1:0) | 
|---|
| 224 | ; | 
|---|
| 225 | ;***** PRINTS A TABLE OF DATA ELEMENTS | 
|---|
| 226 | PRTMDE2() ; | 
|---|
| 227 | N BY,DHD,FR,L,DIC,FLDS,TO | 
|---|
| 228 | S L=0,DIC=799.2,DHD=RORTTL | 
|---|
| 229 | S BY="[ROR DATA ELEMENTS]",FLDS="[ROR DATA ELEMENTS]" | 
|---|
| 230 | D EN1^DIP | 
|---|
| 231 | Q 0 | 
|---|
| 232 | ; | 
|---|
| 233 | ;***** PRINTS A HEADER OF THE DATA ELEMENT REPORT | 
|---|
| 234 | ;  X  Field Width Title | 
|---|
| 235 | PRTMDEH() ; | 
|---|
| 236 | ;;  0^     ^     ^File | 
|---|
| 237 | ;; 22^  .01^   25^Data Name | 
|---|
| 238 | ;; 49^  .02^     ^Code | 
|---|
| 239 | ;; 55^ 2   ^     ^Req | 
|---|
| 240 | ;; 60^ 1   ^     ^API | 
|---|
| 241 | ;; 65^ 6   ^     ^Field Number | 
|---|
| 242 | ;; 82^ 4   ^     ^VT | 
|---|
| 243 | ;; 86^ 4.1 ^   20^External | 
|---|
| 244 | ;;108^ 4.2 ^   20^Internal | 
|---|
| 245 | ; | 
|---|
| 246 | N DIR,DIRUT,DTOUT,DUOUT,I,X,Y | 
|---|
| 247 | I RORPAGE,$E(IOST,1,2)="C-"  D  Q:'Y $S(Y="":-72,1:-71) | 
|---|
| 248 | . S DIR(0)="E"  D ^DIR | 
|---|
| 249 | W:RORPAGE!($E(IOST,1,2)="C-") @IOF | 
|---|
| 250 | S RORPAGE=RORPAGE+1,I=""  W RORTTL,! | 
|---|
| 251 | F  S I=$O(RORCOLS(I))  Q:I=""  W ?(+RORCOLS(I)),$P(RORCOLS(I),U,4) | 
|---|
| 252 | S X="",$P(X,"-",IOM)="" | 
|---|
| 253 | W !,X,! | 
|---|
| 254 | Q 0 | 
|---|
| 255 | ; | 
|---|
| 256 | ;***** PRINTS THE LEVEL INDICATOR | 
|---|
| 257 | ; | 
|---|
| 258 | ; N             Number of dots in the indicator | 
|---|
| 259 | ; [FILE]        File number | 
|---|
| 260 | ; | 
|---|
| 261 | PRTMDEL(N,FILE) ; | 
|---|
| 262 | N I  W:$X>0 !  F I=1:1:N  W ". " | 
|---|
| 263 | W:$D(FILE) FILE  W:'$D(FILE) ! | 
|---|
| 264 | Q | 
|---|
| 265 | ; | 
|---|
| 266 | ;***** VALIDATES REGISTRY UPDATE DEFINITION | 
|---|
| 267 | ; | 
|---|
| 268 | ; .REGLST       Reference to a local array containing | 
|---|
| 269 | ;               registry names as subscripts | 
|---|
| 270 | ; | 
|---|
| 271 | ; Return Values: | 
|---|
| 272 | ;       <0  Error Code | 
|---|
| 273 | ;        0  Ok | 
|---|
| 274 | ; | 
|---|
| 275 | UPDDEF(REGLST) ; | 
|---|
| 276 | N RORERRDL      ; Default error location | 
|---|
| 277 | N RORLRC        ; List of Lab result codes to check | 
|---|
| 278 | N RORUPD        ; Update descriptor | 
|---|
| 279 | N RORUPDPI      ; Closed root of the temporary storage | 
|---|
| 280 | N RORVALS       ; Calculated values | 
|---|
| 281 | ; | 
|---|
| 282 | N RC | 
|---|
| 283 | W !,"REGISTRY UPDATE DEFINITION",! | 
|---|
| 284 | D CLEAR^RORERR("UPDDEF^RORUTL06") | 
|---|
| 285 | S RORUPDPI=$NA(^TMP("RORUPD",$J)) | 
|---|
| 286 | S RC=$$PREPARE^RORUPR(.REGLST) | 
|---|
| 287 | D:RC'<0 DEBUG^RORUPDUT | 
|---|
| 288 | Q RC | 
|---|