Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: ROR10

ROR10.m

Go to the documentation of this file.
ROR10 ;HCIOFO/SG - NIGHTLY TASK UTILITIES ; 11/29/05 4:21pm
 ;;1.5;CLINICAL CASE REGISTRIES;**18**;Feb 17, 2006;Build 25
 ;
 ;******************************************************************************
 ;PKG/PATCH    DATE        DEVELOPER    MODIFICATION
 ;-----------  ----------  -----------  ----------------------------------------
 ;ROR*1.5*18   APR  2012   C RAY        Replaces list in TASK PARAMETERS with
 ;                                      list of all initialized registries
 ;******************************************************************************
 Q
 ;
 ;***** DISPLAYS THE ALERT ABOUT PROBLEMATIC HL7 MESSAGES
ALERT ;
 Q:$G(XQADATA)=""
 N I,PARAMS,RORINFO,TMP
 ;--- Get and prepare the parameters
 S PARAMS("REGISTRY")=$P(XQADATA,"^")
 S PARAMS("NOR")=$P(XQADATA,"^",2)
 ;--- Load and format the text
 D BLD^DIALOG(7980000.027,.PARAMS,,"RORINFO","S")
 ;--- Display the text
 S I=""  W !!
 F  S I=$O(RORINFO(I))  Q:I=""  W RORINFO(I),!
 Q
 ;
 ;***** CHECKS THE STATUS OF LAST HL7 MESSAGE(S)
 ;
 ; .REGLST       Reference to a local array containing registry
 ;               names as subscripts and (optionally) registry
 ;               IENs as values.
 ;
 ; Return values:
 ;       <0  Error code
 ;        0  Ok
 ;
CHECKMSG(REGLST) ;
 N RORLBLST      ; List of latest batch HL7 messages (see ^ROR11)
 ;
 N HDTIEN,IENS,IM,LBCID,MSGDT,MSGSTC,RC,REGIEN,REGNAME,RORBUF,RORFDA,RORMSG,TMP
 S RC=0
 ;
 ;=== Compile the list of latest batch HL7 messages
 S REGNAME=""
 F  S REGNAME=$O(REGLST(REGNAME))  Q:REGNAME=""  D  Q:RC<0
 . ;--- Get the registry IEN
 . S REGIEN=+$G(REGLST(REGNAME))
 . I REGIEN'>0  D  I REGIEN'>0  S RC=+REGIEN  Q
 . . S REGIEN=$$REGIEN^RORUTL02(REGNAME)
 . S $P(REGLST(REGNAME),U)=REGIEN
 . ;--- Get the list of batch HL7 message IDs
 . K RORBUF,RORMSG
 . S IENS=","_REGIEN_","
 . D LIST^DIC(798.122,IENS,"@;.01;.02;.03I",,,,,"B",,,"RORBUF","RORMSG")
 . I $G(DIERR)  S RC=$$DBS^RORERR("RORMSG",-9,,,798.122,IENS)  Q
 . ;--- Update the list of latest HL7 batch messages
 . S IM=""
 . F  S IM=$O(RORBUF("DILIST","ID",IM))  Q:IM=""  D
 . . S LBCID=RORBUF("DILIST","ID",IM,.01)
 . . S IENS=RORBUF("DILIST",2,IM)_","_REGIEN_","
 . . S MSGDT=$G(RORBUF("DILIST","ID",IM,.03))
 . . D ADDMSG^ROR11(LBCID,IENS,$G(RORBUF("DILIST","ID",IM,.02)),MSGDT)
 Q:RC<0 RC
 ;
 ;=== Analyze the list of messages
 S LBCID=0
 F  S LBCID=$O(RORLBLST(LBCID))  Q:LBCID'>0  D  Q:RC<0
 . S MSGSTC=+RORLBLST(LBCID,"MS")
 . S MSGDT=RORLBLST(LBCID,"DT")
 . ;--- If the message does not exist (usually, it should), remove
 . ;    the reference(s) but do not update the patients' extraction
 . ;--- dates. Data will be re-extracted and resent (just in case).
 . I 'MSGSTC  D  Q
 . . D DELMSG^ROR11(LBCID,.RORFDA)
 . . D ERROR^RORERR(-49,,,,LBCID)
 . ;--- Unfortunately, the 'successfully completed' status (3) is
 . ;    returned for cancelled messages as well (and possibly in
 . ;    some other situations). Update the patients' extraction
 . ;    dates only if there is no error message in the status
 . ;--- string. Then remove the message reference(s).
 . I MSGSTC=3  D  Q
 . . S TMP=$P(RORLBLST(LBCID,"MS"),U,3)
 . . S:TMP="" TMP=$$UPDTRR^ROR11($P(RORLBLST(LBCID),U),MSGDT)
 . . D DELMSG^ROR11(LBCID,.RORFDA)
 . ;--- If the message is being processed/transmitted,
 . ;--- then keep the reference(s) in the list.
 . I (MSGSTC=1.5)!(MSGSTC=1.7)  D  Q
 . . D ERROR^RORERR(-73,,,,LBCID)
 . ;--- Otherwise (the message has not been sent), keep the
 . ;--- reference(s) and requeue the message (just in case).
 . S TMP=+$$MSGACT^HLUTIL(LBCID,2)
 . D ERROR^RORERR($S(TMP:-93,1:-92),,,,LBCID)
 Q:RC<0 RC
 ;
 S REGNAME=""
 F  S REGNAME=$O(REGLST(REGNAME))  Q:REGNAME=""  D
 . ;--- Get the registry IEN
 . S REGIEN=+$G(REGLST(REGNAME))  Q:REGIEN'>0
 . S IENS=REGIEN_","
 . ;--- Check if all registry messages have been sent
 . I $D(RORLBLST("RM",REGIEN))<10  D:$D(RORLBLST("RM",REGIEN))  Q
 . . K RORLBLST("RM",REGIEN)
 . . ;--- Clear the HL7 ATTEMPT COUNTER field
 . . S RORFDA(798.1,IENS,19.3)="@"
 . . ;--- Check for an automatic backpull definition
 . . S HDTIEN=$$GET1^DIQ(798.1,IENS,21.01,"I",,"RORMSG")
 . . I $G(DIERR)  D DBS^RORERR("RORMSG",-9,,,798.1,IENS)  Q
 . . D:HDTIEN>0
 . . . ;--- Reset the automatic backpull mode
 . . . S RORFDA(798.1,IENS,21.01)="@"
 . . . ;--- Complete the automatic backpull
 . . . S TMP=$$COMPLETE^RORHDT06(HDTIEN,REGNAME)
 . ;--- Increment the HL7 ATTEMPT COUNTER for registries with unsent
 . ;--- message(s) and exclude those registries from data extraction.
 . S TMP=$$GET1^DIQ(798.1,IENS,19.3,,,"RORMSG")
 . D:$G(DIERR) DBS^RORERR("RORMSG",-9,,,798.1,IENS)
 . S RORFDA(798.1,IENS,19.3)=TMP+1
 . K REGLST(REGNAME)
 ;
 ;=== Update the registry parameters if necessary
 D:$D(RORFDA)>1
 . D FILE^DIE(,"RORFDA","RORMSG")
 . D:$G(DIERR) DBS^RORERR("RORMSG",-9,,,798.1)
 ;
 ;=== Notify the AAC and local coordinators if necessary
 D:$D(RORLBLST("RM"))>1 NOTIFY^ROR11()
 ;
 ;=== Success
 Q 0
 ;
 ;***** PROCESSES THE TASK PARAMETERS
 ;
 ; .REGLST       Reference to a local variable where the list of
 ;               registry names is returned to
 ;
 ; Return values:
 ;       <0  Error code
 ;        0  Ok
 ;
TASKPRMS(REGLST) ;
 N %DT,DTOUT,INFO,REGNAME,TMP,X,Y
 ;--- Log the task parameters
 D TP(.INFO,"RORFLSET")
 D TP(.INFO,"RORFLCLR")
 D TP(.INFO,"RORMNTSK")
 D TP(.INFO,"RORSUSP")
 D LOG^RORLOG(,"Task Parameters",,.INFO)
 ;--- Maximum number of subtasks
 S RORMNTSK=$S(RORMNTSK'="":$TR(RORMNTSK,"-","^"),1:"2^3^AUTO")
 ;--- Suspension parameters
 D:RORSUSP'=""
 . S TMP=RORSUSP,RORSUSP=""
 . F I=1,2  D  S:$G(Y)>0 $P(RORSUSP,"^",I)=Y#1
 . . S X=$P(TMP,"-",I),%DT="R"  D ^%DT
 S RC=$$REGSEL^RORUTL01("I")  ;only initialized registries
 Q:RC<0 RC
 ;--- Flags
 S RORFLCLR=$$UP^XLFSTR(RORFLCLR)
 S RORFLSET=$$UP^XLFSTR(RORFLSET)
 Q 0
 ;
TP(INFO,NAME) ;
 S @NAME=$$TRIM^XLFSTR($G(@NAME))  Q:@NAME=""
 S INFO($O(INFO(""),-1)+1)=$$LJ^XLFSTR(NAME,8)_" = """_@NAME_""""
 Q