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

SCMCHL.m

Go to the documentation of this file.
  1. SCMCHL ;BP/DJB - PCMM HL7 Main Calling Point ; 16 Dec 2002 11:14 AM
  1. ;;5.3;Scheduling;**177,204,224,272,367**;AUG 13, 1993
  1. ;
  1. ;Reference routine: SCDXMSG
  1. MAIN(MODE,XMITARRY,VARPTR,WORK) ;Main entry point to generate Primary Care HL7
  1. ;messages to NPCD in Austin. Loop thru PCMM HL7 EVENT file (#404.48)
  1. ;and generate HL7 message for each appropriate event.
  1. ;
  1. ;Input:
  1. ; MODE - Mode of operation.
  1. ; 1: Generate mode - Generate HL7 messages. (Default).
  1. ; 2: Review mode - HL7 segments will be built in array
  1. ; XMITARRY and may be reviewed. HL7
  1. ; messages WILL NOT be generated, and
  1. ; processed events will not be
  1. ; removed from the transmit xref in
  1. ; PCMM HL7 EVENT file.
  1. ; XMITARRY - Array to store HL7 segments (full global ref).
  1. ; Default=^TMP("PCMM","HL7",$J)
  1. ; VARPTR - For testing purposes, you may pass in an EVENT POINTER
  1. ; value. This value will be used rather than $ORDERing
  1. ; thru "AACXMIT" xref in PCMM HL7 EVENT file.
  1. ; Examples:
  1. ; "2290;SCPT(404.43," (Patient Team Position Assign)
  1. ; "725;SCTM(404.52," (Position Assign History)
  1. ; "1;SCTM(404.53," (Preceptor Assign History)
  1. ; Work Optional if present
  1. ;Output: None
  1. ;
  1. ;Prevent multiple runs processing at the same time.
  1. I $G(VARPTR)'="",$D(^XTMP("SCMCHL")) D Q
  1. .W !,"HL7 Transmission in progress, no testing allowed!",!
  1. I $D(^XTMP("SCMCHL")) D Q
  1. .W !,"HL7 Transmission in progress, please try again later.",!
  1. S ^XTMP("SCMCHL",0)=DT_"^"_DT
  1. ;
  1. NEW ERRCNT,IEN,MSG,MSGCNT,RESULT
  1. NEW SCEVIEN,SCFAC
  1. NEW HL,HLECH,HLEID,HLFS,HLQ,HLP,XMITERR
  1. ;
  1. ;Initialize variables - set global locations
  1. S:$G(MODE)'=2 MODE=1 ;Default mode = "Generate"
  1. S:$G(XMITARRY)="" XMITARRY="^TMP(""PCMM"",""HL7"","_$J_")" ;Segments
  1. S XMITERR="^TMP(""PCMM"",""ERR"","_$J_")" ;Errors
  1. S MSGCNT=0
  1. ;
  1. ;Get pointer to sending event
  1. S HLEID=$$HLEID()
  1. I 'HLEID D Q
  1. . S MSG="Unable to initialize HL7 variables - protocol not found"
  1. . D ERRBULL^SCMCHLM(MSG)
  1. ;
  1. ;Initialize HL7 variables
  1. D INIT^HLFNC2(HLEID,.HL)
  1. I $O(HL(""))="" D Q
  1. . D ERRBULL^SCMCHLM($P(HL,"^",2))
  1. ;
  1. ;Get faciltiy number
  1. S SCFAC=+$P($$SITE^VASITE(),"^",3)
  1. ;
  1. ;User passed in an EVENT POINTER value
  1. I $G(VARPTR)]"" D MANUAL Q
  1. ;
  1. LOOP ;Loop thru EVENT POINTER xref and send message for each unique one.
  1. ;alb/rpm Patch 224
  1. ;The SCLIMIT counter allows sites to limit the number of HL7 messages
  1. ;processed at any one time. The next EVENT POINTER in the queue will
  1. ;not be processed if SCLIMIT is exceeded. SCLIMIT is not an absolute
  1. ;limit, since a single EVENT POINTER can generate multiple HL7
  1. ;messages.
  1. ;Sites can modify SCLIMIT by editing the HL7 TRANSMIT LIMIT field of
  1. ;the PCMM PARAMETER file.
  1. ;
  1. NEW SCLIMIT,WORK,VARPTR
  1. S SCLIMIT=$P($G(^SCTM(404.44,1,1)),U,5) ;Limit # of msgs processed
  1. S:'SCLIMIT SCLIMIT=2500 ;Default to 2500 msgs
  1. S VARPTR=""
  1. F S VARPTR=$O(^SCPT(404.48,"AACXMIT",VARPTR)) Q:VARPTR=""!(SCLIMIT<1) D
  1. . KILL @XMITARRY ;Initialize array
  1. . ;
  1. . ;Preserve the Event IEN. Used to process a deletion.
  1. . F SCEVIEN=0:0 S SCEVIEN=$O(^SCPT(404.48,"AACXMIT",VARPTR,SCEVIEN)) Q:'SCEVIEN D
  1. .. ;
  1. .. ;Build segment array
  1. .. K SCFUT
  1. .. S WORK=+$P($G(^SCPT(404.48,SCEVIEN,0)),U,8)
  1. .. I WORK N HLEID S HLEID=$$HLEIDW() S RESULT=$$BUILD^SCMCHLP(VARPTR,.HL,.XMITARRY,SCEVIEN)
  1. .. I 'WORK S RESULT=$$BUILD^SCMCHLB(VARPTR,.HL,.XMITARRY)
  1. .. I +RESULT<0 D Q ;Error occurred when building segment array
  1. .. . S @XMITERR@(VARPTR)=$P(RESULT,"^",2)
  1. .. ;
  1. .. ;If in Review mode, display info and Quit.
  1. .. I MODE=2 D Q ;
  1. .. . W !,VARPTR_" "_$S('$D(@XMITARRY):"No ",1:"")_"Data Found"
  1. .. ;
  1. .. ;If no segments built, turn off transmission flag and Quit.
  1. .. I '$D(@XMITARRY) D:'$G(SCFUT) FLAG(VARPTR,SCEVIEN) Q
  1. .. ;
  1. .. ;Generate message.
  1. .. ;
  1. .. Q:'$$GENERATE^SCMCHLG() ;^SCMCHLG Increments MSGCNT
  1. .. D:'$G(SCFUT) FLAG(VARPTR,SCEVIEN) ;Turn off transmission flag
  1. .. K @XMITARRY ;clean up variables
  1. . ;
  1. . Q
  1. ;
  1. I '$D(ZTQUEUED) W !,MSGCNT," messages sent."
  1. ;
  1. ;Send completion bulletin and clean up arrays.
  1. I MODE=1 D ;Don't do this if in DISPLAY mode.
  1. . S ERRCNT=$$COUNT^SCMCHLS(XMITERR)
  1. . D CMPLBULL^SCMCHLM(MSGCNT,ERRCNT,XMITERR)
  1. . KILL @XMITARRY,@XMITERR
  1. . K ^XTMP("SCMCHL")
  1. ;
  1. Q:SCLIMIT<1
  1. ;
  1. ;alb/rpm;Patch 224;Transmit "M"arked messages from Transmission Log
  1. D EN^SCMCHLRR(.SCLIMIT)
  1. Q:SCLIMIT<1
  1. ;
  1. ;alb/rpm;Patch224;Transmit messages with overdue ACKnowledgment
  1. D AUTO^SCMCHLRR(.SCLIMIT)
  1. Q
  1. ;
  1. MANUAL ;User passed in a specific variable pointer value. This value will
  1. ;be used rather than $ORDERing thru "AACXMIT" xref.
  1. ;
  1. NEW SCMANUAL
  1. S SCMANUAL=1 ;Indicates variable pointer was manually entered.
  1. ; A delete cannot be processed.
  1. ;
  1. ;Initialize array
  1. KILL @XMITARRY
  1. ;
  1. ;Build segment array
  1. I $G(WORK) N HLEID S HLEID=$$HLEIDW() S RESULT=$$BUILD^SCMCHLP(VARPTR,.HL,.XMITARRY)
  1. I '$G(WORK) S RESULT=$$BUILD^SCMCHLB(VARPTR,.HL,.XMITARRY)
  1. I +RESULT<0 D Q ;Error occurred when building segment array
  1. . S @XMITERR@(VARPTR)=$P(RESULT,"^",2)
  1. W !,VARPTR_" "_$S('$D(@XMITARRY):"No ",1:"")_"Data Found",!
  1. ;
  1. ;Generate message - FOR TESTING PURPOSES ONLY!
  1. S RESULT=$$GENERATE^SCMCHLG()
  1. K ^XTMP("SCMCHL")
  1. Q
  1. ;
  1. FLAG(VARPTR,SCEVIEN) ;Turn off transmission flag. This removes event from "AACXMIT"
  1. ;xref in PCMM HL7 EVENT file.
  1. ;Input:
  1. ; VARPTR - Internal value of EVENT POINTER field
  1. ;
  1. Q:$G(VARPTR)']""
  1. I $G(SCEVIEN) D TRANSMIT^SCMCHLE(SCEVIEN,0) Q
  1. NEW IEN
  1. S IEN=0
  1. F S IEN=$O(^SCPT(404.48,"AACXMIT",VARPTR,IEN)) Q:'IEN D ;
  1. . D TRANSMIT^SCMCHLE(IEN,0)
  1. Q
  1. ;
  1. HLEIDW() ;Return workload sending event
  1. Q +$O(^ORD(101,"B","SCMC SEND SERVER WORKLOAD",0))
  1. HLEID() ;Return pointer to sending event
  1. I $G(WORK) Q $$HLEIDW()
  1. Q +$O(^ORD(101,"B","PCMM SEND SERVER FOR ADT-A08",0))
  1. Q