| 1 | RORUPD ;HCIOFO/SG - REGISTRY UPDATE ; 7/21/05 10:28am | 
|---|
| 2 | ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006 | 
|---|
| 3 | ; | 
|---|
| 4 | ; RORLRC -------------- LIST OF LAB RESULT CODES TO CHECK | 
|---|
| 5 | ; | 
|---|
| 6 | ; RORLRC(Seq#)          Lab result code (see the LA7SC parameter of | 
|---|
| 7 | ;                       the GCPR^LA7QRY entry point) | 
|---|
| 8 | ;                         ^1: Result code | 
|---|
| 9 | ;                         ^2: Coding system ("LN" or "NLT") | 
|---|
| 10 | ; | 
|---|
| 11 | ; RORUPD -------------- REGISTRY UPDATE DESCRIPTOR | 
|---|
| 12 | ; | 
|---|
| 13 | ; RORUPD("DT")          Date/time when update process started | 
|---|
| 14 | ; | 
|---|
| 15 | ; RORUPD("DSBEG")       Start date of the data scan | 
|---|
| 16 | ; RORUPD("DSEND")       End date of the data scan | 
|---|
| 17 | ;                       (these nodes are set by $$PREPARE1^RORUPR) | 
|---|
| 18 | ; | 
|---|
| 19 | ; RORUPD("EETS")        Timestamp of the earliest event reference | 
|---|
| 20 | ; | 
|---|
| 21 | ; RORUPD("ERRCNT")      Counter of errors during processing of the | 
|---|
| 22 | ;                       current patient | 
|---|
| 23 | ; | 
|---|
| 24 | ; RORUPD("FLAGS")       Flags to control processing (see the | 
|---|
| 25 | ;                       TASK^ROR for possible values). | 
|---|
| 26 | ; | 
|---|
| 27 | ; RORUPD("JOB")         Job number of the main task. This node is | 
|---|
| 28 | ;                       defined only if the registry update is | 
|---|
| 29 | ;                       running in the multitask mode. | 
|---|
| 30 | ; | 
|---|
| 31 | ; RORUPD("LD",          Instead of checking data in the interval | 
|---|
| 32 | ;                       from start date till end date, update process | 
|---|
| 33 | ;                       starts checks from the start date minus | 
|---|
| 34 | ;                       appropriate number of lag days. Thus, data | 
|---|
| 35 | ;                       entered retrospectively will not be missed. | 
|---|
| 36 | ;   1)                  Lag days for data examination | 
|---|
| 37 | ; | 
|---|
| 38 | ; RORUPD("LM",          Loop control mode. It defines when to stop | 
|---|
| 39 | ;                       looping through records of the patient: | 
|---|
| 40 | ;                         0  always loop through all records | 
|---|
| 41 | ;                         1  all top level rules have been triggered | 
|---|
| 42 | ;                            for the patient (default) | 
|---|
| 43 | ;                         2  patient has been marked for addition to | 
|---|
| 44 | ;                            all registries being processed | 
|---|
| 45 | ;   1,Rule Name)        Current list of names of top level rules | 
|---|
| 46 | ;   2,Registry#)        Current list of registry IENs | 
|---|
| 47 | ; | 
|---|
| 48 | ; RORUPD("LM1",         STATIC LIST OF TOP LEVEL RULES | 
|---|
| 49 | ;   Rule Name) | 
|---|
| 50 | ; | 
|---|
| 51 | ; RORUPD("LM2",         STATIC LIST OF REGISTRIES | 
|---|
| 52 | ;   Registry#)            ^1: 1 - if the current patient can be added | 
|---|
| 53 | ;                             to the registry; 0 - if the patient is | 
|---|
| 54 | ;                             already in the registry or he/she is | 
|---|
| 55 | ;                             an employee and should be skipped. | 
|---|
| 56 | ;                         ^2: 1 if the employees must not be added | 
|---|
| 57 | ;                             to the registry. | 
|---|
| 58 | ; | 
|---|
| 59 | ; RORUPD("MAXPPCNT")    When counters in the ROR PATIENT EVENTS | 
|---|
| 60 | ;                       file reach a value stored in this node, the | 
|---|
| 61 | ;                       corresponding patient will be skipped until | 
|---|
| 62 | ;                       someone fixes the error(s) and resets the | 
|---|
| 63 | ;                       counters to 1. | 
|---|
| 64 | ; | 
|---|
| 65 | ; RORUPD("ROOT",File#)  Closed root of the file | 
|---|
| 66 | ; | 
|---|
| 67 | ; RORUPD("SR",          PREPARED SELECTION RULES | 
|---|
| 68 | ;   File#,              This node is defined if the file should be | 
|---|
| 69 | ;                       processed | 
|---|
| 70 | ; | 
|---|
| 71 | ;     "A",              List of rules that should be applied after | 
|---|
| 72 | ;                       processing sub-files and linked files. | 
|---|
| 73 | ;     "B",              List of rules that should be applied before | 
|---|
| 74 | ;                       processing sub-files and linked files. | 
|---|
| 75 | ;       Seq#,             ^1: Selection Rule Name | 
|---|
| 76 | ;                         ^2: Rule# (Selection Rule IEN) | 
|---|
| 77 | ;                         ^3: 1 if registry should be updated if | 
|---|
| 78 | ;                             the expression evaluated as True | 
|---|
| 79 | ;                             (top-level seelction rule) | 
|---|
| 80 | ;         1)            MUMPS expression that implements the rule | 
|---|
| 81 | ;         2,Registry#)  List of IENs of affected registries | 
|---|
| 82 | ; | 
|---|
| 83 | ;     "F",              A list of data elements that should be loaded | 
|---|
| 84 | ;                       before applying selection rules is created | 
|---|
| 85 | ;                       under this node. The elements are grouped by | 
|---|
| 86 | ;                       the APIs used to load the values. | 
|---|
| 87 | ;       API#,           For API #1 (FileMan GETS^DIQ) this node | 
|---|
| 88 | ;                       contains a list of fields separated by ';'. | 
|---|
| 89 | ;         DataCode,     For data elements associated with the API #1 | 
|---|
| 90 | ;                       this node stores the field number. | 
|---|
| 91 | ;           "E")        If an external value of the field should be | 
|---|
| 92 | ;                       loaded, a value of the field 4.1 of the | 
|---|
| 93 | ;                       subfile #799.22 is assigned to this node. | 
|---|
| 94 | ;           "I")        If an internal value of the field should be | 
|---|
| 95 | ;                       loaded, a value of the field 4.2 of the | 
|---|
| 96 | ;                       subfile #799.22 is assigned to this node. | 
|---|
| 97 | ; | 
|---|
| 98 | ; RORUPD("SUSPEND")     SUBTASKS SUSPENSION PARAMETERS | 
|---|
| 99 | ;                         ^1: Suspension start time (FileMan) | 
|---|
| 100 | ;                         ^2: Suspension end time (FileMan) | 
|---|
| 101 | ; | 
|---|
| 102 | ;                       For example, to suspend subtasks from | 
|---|
| 103 | ;                       7:00 until 18:00 this node should have | 
|---|
| 104 | ;                       the following value: ".07^.18". | 
|---|
| 105 | ; | 
|---|
| 106 | ; RORUPD("UPD",         CALL-BACK ENTRY POINTS | 
|---|
| 107 | ;   Registry#,1)        Entry point of a MUMPS external function | 
|---|
| 108 | ;                       that assign values of additional fields to | 
|---|
| 109 | ;                       the registry FDA before registry update | 
|---|
| 110 | ;                       (opt'l). | 
|---|
| 111 | ;   Registry#,2)        Entry point of a MUMPS external function | 
|---|
| 112 | ;                       that is called right after registry update | 
|---|
| 113 | ;                       (opt'l). | 
|---|
| 114 | ; | 
|---|
| 115 | ; RORUPDPI ------------ CLOSED ROOT OF THE TEMPORARY STORAGE | 
|---|
| 116 | ;                       (the ^TMP("RORUPD",$J), ^XTMP("RORUPDJ"_$J) | 
|---|
| 117 | ;                       or ^XTMP("RORUPDR"_Registry#) node) | 
|---|
| 118 | ; | 
|---|
| 119 | ; See also a description of ^XTMP("RORUPD"_) in the ^ROR01 routine. | 
|---|
| 120 | ; | 
|---|
| 121 | Q | 
|---|
| 122 | ; | 
|---|
| 123 | ;***** UPDATES THE REGISTRIES | 
|---|
| 124 | ; | 
|---|
| 125 | ; .REGLST       Reference to a local array containing registry | 
|---|
| 126 | ;               names as subscripts and registry IENs as values | 
|---|
| 127 | ; | 
|---|
| 128 | ; [MAXNTSK]     Maximum number of the data processing subtasks. | 
|---|
| 129 | ;               See description of the $$PROCESS^RORUPD05 function | 
|---|
| 130 | ;               for details. | 
|---|
| 131 | ; | 
|---|
| 132 | ; [SUSPEND]     Subtask suspension parameters: | 
|---|
| 133 | ;               See description of the RORUPD("SUSPEND") node | 
|---|
| 134 | ;               for details. | 
|---|
| 135 | ; | 
|---|
| 136 | ; [FLAGS]       Flags to control processing. | 
|---|
| 137 | ;               See description of the TASK^ROR for | 
|---|
| 138 | ;               possible values of the flags). | 
|---|
| 139 | ; | 
|---|
| 140 | ; Return Values: | 
|---|
| 141 | ;       <0  Error code (see MSGLIST^RORERR20) | 
|---|
| 142 | ;        0  Ok | 
|---|
| 143 | ; | 
|---|
| 144 | UPDATE(REGLST,MAXNTSK,SUSPEND,FLAGS) ; | 
|---|
| 145 | N RORERRDL      ; Default error location | 
|---|
| 146 | N RORLOG        ; Log subsystem constants & variables | 
|---|
| 147 | N RORLRC        ; List of Lab result codes to check | 
|---|
| 148 | N RORUPD        ; Update descriptor | 
|---|
| 149 | N RORUPDPI      ; Closed root of the temporary storage | 
|---|
| 150 | N RORVALS       ; Calculated values | 
|---|
| 151 | ; | 
|---|
| 152 | N COUNTERS,RC,TMP | 
|---|
| 153 | D INIT^RORUTL01("RORUPD") | 
|---|
| 154 | S RORUPD("FLAGS")=$$UP^XLFSTR($G(FLAGS)) | 
|---|
| 155 | D CLEAR^RORERR("UPDATE^RORUPD") | 
|---|
| 156 | ;--- Value of the RORUPDPI variable is modified by the | 
|---|
| 157 | ;    $$PROCESS^RORUPD05 function if the registry update | 
|---|
| 158 | ;--- process runs in the multi-task mode. | 
|---|
| 159 | S RORUPDPI=$NA(^TMP("RORUPD",$J)) | 
|---|
| 160 | ;--- Open a new log | 
|---|
| 161 | S TMP=$$SETUP^RORLOG(.REGLST) | 
|---|
| 162 | S TMP=$$OPEN^RORLOG(.REGLST,1,"REGISTRY UPDATE STARTED") | 
|---|
| 163 | D | 
|---|
| 164 | . ;--- Check a list of registries | 
|---|
| 165 | . I $D(REGLST)<10  D  Q | 
|---|
| 166 | . . S RC=$$ERROR^RORERR(-28,,,,"update") | 
|---|
| 167 | . ;--- Lock parameters of the registries being processed | 
|---|
| 168 | . S RC=$$LOCKREG^RORUTL02(.REGLST,1,,"REGISTRY UPDATE")  Q:RC<0 | 
|---|
| 169 | . I 'RC  D  K REGLST  Q | 
|---|
| 170 | . . S RC=$$ERROR^RORERR(-11,,,,"registries being processed") | 
|---|
| 171 | . ;--- Prepare selection rules | 
|---|
| 172 | . S:$G(SUSPEND)>0 RORUPD("SUSPEND")=SUSPEND | 
|---|
| 173 | . S RC=$$PREPARE^RORUPR(.REGLST) | 
|---|
| 174 | . I RC<0  S RC=$$ERROR^RORERR(-14)  Q | 
|---|
| 175 | . ;--- Display the debug information | 
|---|
| 176 | . D:$G(RORPARM("DEBUG"))>1 DEBUG^RORUPDUT | 
|---|
| 177 | . ;--- Look for new patients and update the registries | 
|---|
| 178 | . S RC=$$PROCESS^RORUPD05($G(MAXNTSK))  Q:RC<0 | 
|---|
| 179 | . S COUNTERS=RC | 
|---|
| 180 | . ;--- Update registry parameters | 
|---|
| 181 | . S TMP=$$TMSTMP^RORUPD01(.REGLST) | 
|---|
| 182 | . ;--- Update demographic data | 
|---|
| 183 | . D LOG^RORLOG(,"Demographic Update") | 
|---|
| 184 | . S RC=$$UPDDEM^RORUPD51(.REGLST) | 
|---|
| 185 | ; | 
|---|
| 186 | ;--- Unlock parameters of processed registries | 
|---|
| 187 | S TMP=$$LOCKREG^RORUTL02(.REGLST,0) | 
|---|
| 188 | ;--- Statistics & Cleanup | 
|---|
| 189 | S TMP="REGISTRY UPDATE "_$S(RC<0:"ABORTED",1:"COMPLETED") | 
|---|
| 190 | D CLOSE^RORLOG(TMP,$G(COUNTERS)) | 
|---|
| 191 | D:'$G(RORPARM("DEBUG")) | 
|---|
| 192 | . D INIT^RORUTL01("RORUPD") | 
|---|
| 193 | . ;--- Do not kill the list of processed patients ("U" subnode) | 
|---|
| 194 | . ;    in case of an error or crash during the initial registry | 
|---|
| 195 | . ;--- population (registry setup). | 
|---|
| 196 | . K:'$G(RORPARM("SETUP"))!(RC'<0) @RORUPDPI | 
|---|
| 197 | Q $S(RC<0:RC,1:0) | 
|---|