| [613] | 1 | RORHDT02 ;HCIOFO/SG - CREATE EXTRACTION TASK RECORDS ; 1/25/06 8:56am | 
|---|
|  | 2 | ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | Q | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | ;***** (RE)CREATES THE TASK TABLE | 
|---|
|  | 7 | ; | 
|---|
|  | 8 | ; HDEIEN        Data Extract IEN | 
|---|
|  | 9 | ; [NTSK]        Number of tasks to create | 
|---|
|  | 10 | ; | 
|---|
|  | 11 | ; Return Values: | 
|---|
|  | 12 | ;       <0  Error code | 
|---|
|  | 13 | ;        0  Ok | 
|---|
|  | 14 | ;        1  Timeout or "^" | 
|---|
|  | 15 | ; | 
|---|
|  | 16 | CREATE(HDEIEN,NTSK) ; | 
|---|
|  | 17 | N BUF,FNAME,I,IENS,REGLST,SILENT,TSKTBL,TMP | 
|---|
|  | 18 | S SILENT=($G(NTSK)>0) | 
|---|
|  | 19 | ;--- Load the data extract parameters | 
|---|
|  | 20 | S IENS=(+HDEIEN)_"," | 
|---|
|  | 21 | D GETS^DIQ(799.6,IENS,".05;.08;3*",,"RORBUF","RORMSG") | 
|---|
|  | 22 | Q:$G(DIERR) $$DBS^RORERR("RORMSG",-9,,,799.6,IENS) | 
|---|
|  | 23 | ;--- Construct the base file name | 
|---|
|  | 24 | S FNAME=$G(RORBUF(799.6,IENS,.08)) | 
|---|
|  | 25 | S FNAME=$TR(FNAME," !@#$%^&*-+=[]{}|\;:'"",.<>/?`~") | 
|---|
|  | 26 | S FNAME=FNAME_"-"_$E($P($$SITE^VASITE(),U,3),1,3)_"-" | 
|---|
|  | 27 | ;--- Compile the list of registries | 
|---|
|  | 28 | S I="" | 
|---|
|  | 29 | F  S I=$O(RORBUF(799.63,I))  Q:I=""  D | 
|---|
|  | 30 | . S TMP=$G(RORBUF(799.63,I,.01))  S:TMP'="" REGLST(TMP)="" | 
|---|
|  | 31 | ;--- | 
|---|
|  | 32 | S TMP=+$G(RORBUF(799.6,IENS,.05)) | 
|---|
|  | 33 | S NTSK=$$TASKTBL(.REGLST,TMP,.TSKTBL,$G(NTSK)) | 
|---|
|  | 34 | ;--- Ask for the final confirmation | 
|---|
|  | 35 | I 'SILENT  D  Q:TMP 1 | 
|---|
|  | 36 | . N DA,DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y | 
|---|
|  | 37 | . S DIR(0)="Y" | 
|---|
|  | 38 | . S DIR("A")="Create the new task table" | 
|---|
|  | 39 | . S DIR("B")="NO" | 
|---|
|  | 40 | . W !  D ^DIR | 
|---|
|  | 41 | . S TMP=$D(DIRUT)!'$G(Y) | 
|---|
|  | 42 | ;--- Create the new task table | 
|---|
|  | 43 | Q $$UPDTBL(HDEIEN,.TSKTBL,FNAME) | 
|---|
|  | 44 | ; | 
|---|
|  | 45 | ;***** DISTRIBUTES PATIENTS AMONG THE DATA EXTRACTION TASKS | 
|---|
|  | 46 | ; | 
|---|
|  | 47 | ; .REGLST       Reference to a local array containing registry | 
|---|
|  | 48 | ;               names as the subscripts and optional registry IENs | 
|---|
|  | 49 | ;               as the values. | 
|---|
|  | 50 | ; | 
|---|
|  | 51 | ; MNPTPB        Maximum number of patients per batch | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | ; .TSKTBL       Reference to a local array where task | 
|---|
|  | 54 | ;               desciptors will be stored | 
|---|
|  | 55 | ; | 
|---|
|  | 56 | ; [NTSK]        If this parameters is defined and greater than 0, | 
|---|
|  | 57 | ;               then this number of task is enforced. Moreover, | 
|---|
|  | 58 | ;               in this case the function work in silent mode and | 
|---|
|  | 59 | ;               do not displays any messages. | 
|---|
|  | 60 | ; | 
|---|
|  | 61 | ; Return Values: | 
|---|
|  | 62 | ;       <0  Error code | 
|---|
|  | 63 | ;       >0  Number of tasks | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | TASKTBL(REGLST,MNPTPB,TSKTBL,NTSK) ; | 
|---|
|  | 66 | N I,IEN,INC,NPT,NR,PTLST,SILENT | 
|---|
|  | 67 | S SILENT=($G(NTSK)>0),PTLST=$$ALLOC^RORTMP() | 
|---|
|  | 68 | S:MNPTPB'>0 MNPTPB=1000  K TSKTBL | 
|---|
|  | 69 | ;--- Count the registry patients | 
|---|
|  | 70 | W:'SILENT !!,"Counting registry patients..." | 
|---|
|  | 71 | S NPT=$$REGPTCNT^RORUTL18(.REGLST,"AS",PTLST) | 
|---|
|  | 72 | W:'SILENT *13,"Number of unique patients:            ",NPT | 
|---|
|  | 73 | ;--- Calculate number of tasks | 
|---|
|  | 74 | W:'SILENT !,"Maximum number of patients per batch: ",MNPTPB | 
|---|
|  | 75 | I $G(NTSK)'>0  D | 
|---|
|  | 76 | . S NTSK=NPT\MNPTPB  S:NPT#MNPTPB NTSK=NTSK+1 | 
|---|
|  | 77 | E  S:NTSK>NPT NTSK=NPT | 
|---|
|  | 78 | ;--- Distribute patients between the tasks | 
|---|
|  | 79 | D:NTSK>1 | 
|---|
|  | 80 | . ;--- Generate IEN intervals (no more than 1000) | 
|---|
|  | 81 | . S INC=NPT\1000,NR=0  S:INC<1 INC=1 | 
|---|
|  | 82 | . F IEN=0:INC  S IEN=$O(@PTLST@(IEN))  Q:IEN'>0  D | 
|---|
|  | 83 | . . S NR=NR+1,@PTLST@("I",NR)=IEN | 
|---|
|  | 84 | . ;--- Generate the task table | 
|---|
|  | 85 | . S IEN=1,INC=NR/NTSK | 
|---|
|  | 86 | . F TSKTBL=1:1  D  Q:(TSKTBL'<NTSK)!(IEN'>0) | 
|---|
|  | 87 | . . S TSKTBL(TSKTBL)=IEN | 
|---|
|  | 88 | . . S I=TSKTBL*INC\1,IEN=$G(@PTLST@("I",I)) | 
|---|
|  | 89 | . . S $P(TSKTBL(TSKTBL),U,2)=IEN | 
|---|
|  | 90 | ;--- Analize the result | 
|---|
|  | 91 | I $G(TSKTBL)<2  K TSKTBL  S TSKTBL=1,TSKTBL(1)=1 | 
|---|
|  | 92 | S $P(TSKTBL(TSKTBL),U,2)=+$O(@PTLST@(" "),-1) | 
|---|
|  | 93 | S NTSK=+TSKTBL | 
|---|
|  | 94 | ;--- Cleanup | 
|---|
|  | 95 | D FREE^RORTMP(PTLST) | 
|---|
|  | 96 | W:'SILENT !,"Number of data extraction tasks:      ",NTSK | 
|---|
|  | 97 | Q NTSK | 
|---|
|  | 98 | ; | 
|---|
|  | 99 | ;***** UPDATES THE TASK TABLE | 
|---|
|  | 100 | ; | 
|---|
|  | 101 | ; HDEIEN        Data Extract IEN | 
|---|
|  | 102 | ; | 
|---|
|  | 103 | ; [.TSKTBL]     Reference to a local variable containing a task | 
|---|
|  | 104 | ;               table generated by the TASKTBL function. | 
|---|
|  | 105 | ; | 
|---|
|  | 106 | ; [FNAME]       Base file name | 
|---|
|  | 107 | ; | 
|---|
|  | 108 | ; Return Values: | 
|---|
|  | 109 | ;       <0  Error code | 
|---|
|  | 110 | ;        0  Ok | 
|---|
|  | 111 | ; | 
|---|
|  | 112 | UPDTBL(HDEIEN,TSKTBL,FNAME) ; | 
|---|
|  | 113 | N I,IENS,RC,RORFDA,RORMSG | 
|---|
|  | 114 | S RC=0 | 
|---|
|  | 115 | ;--- Clear the old table | 
|---|
|  | 116 | S RC=$$CLEAR^RORUTL05(799.64,","_(+HDEIEN)_",")  Q:RC<0 RC | 
|---|
|  | 117 | ;--- Prepare records in the FDA. | 
|---|
|  | 118 | F I=1:1:+TSKTBL  D | 
|---|
|  | 119 | . S IENS="+"_I_","_(+HDEIEN)_"," | 
|---|
|  | 120 | . S RORFDA(799.64,IENS,.01)=+TSKTBL(I) | 
|---|
|  | 121 | . S RORFDA(799.64,IENS,.05)=FNAME_$TR($J(I,2)," ","0")_".HDT" | 
|---|
|  | 122 | ;--- Update the table | 
|---|
|  | 123 | D UPDATE^DIE(,"RORFDA",,"RORMSG") | 
|---|
|  | 124 | S:$G(DIERR) RC=$$DBS^RORERR("RORMSG",-9,,,799.64) | 
|---|
|  | 125 | Q $S(RC<0:RC,1:0) | 
|---|