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