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