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

SCMCHLRR.m

Go to the documentation of this file.
  1. SCMCHLRR ;BP/DJB - PCMM HL7 Rejects - Resubmit ; 3/6/00 12:14pm
  1. ;;5.3;Scheduling;**210,224,272**;AUG 13, 1993
  1. ;
  1. EN(SCLIM) ;Entry point for retransmitting "M"arked messages
  1. ;
  1. ;Input:
  1. ; SCLIM - maximum messages allowed per batch passed by reference
  1. ;
  1. ;Output: none
  1. ;
  1. Q:'$D(SCLIM)
  1. ;
  1. NEW DFN,SCDELETE,VARPTR
  1. NEW MSGCNT,SCFAC,SCSEQ
  1. ;
  1. ;Send notification msg if new HL7 reject transmissions received
  1. D NOTIFY^SCMCHLM
  1. ;
  1. ;Initialize variables needed by GENERATE^SCMCHLG
  1. S SCFAC=+$P($$SITE^VASITE(),"^",3) ;..Facility number
  1. S MSGCNT=0 ;..........................Message count
  1. ;
  1. ;Loop thru PCMM HL7 TRANSMISSION LOG and resubmit items
  1. D LOOP
  1. ;
  1. EXIT ;
  1. Q
  1. ;
  1. ;
  1. LOOP ;Loop thru PCMM HL7 TRANSMISSION LOG file and find every entry
  1. ;with STATUS="M", and re-transmit.
  1. ;
  1. NEW TRANI
  1. S TRANI=0
  1. F S TRANI=$O(^SCPT(404.471,"ASTAT","M",TRANI)) Q:'TRANI!(SCLIM<1) D
  1. . N WORK S (WORK,VARPTR)=$P($G(^SCPT(404.471,+TRANI,0)),U,7)
  1. . I '$G(WORK) D GETDATA(TRANI) ;..Get DFN,VARPTR,SCDELETE
  1. . ;alb/rpm - Missing ZPC segment messages will not retransmit.
  1. . ; Clear the entry by setting status to "RT".
  1. . I VARPTR="" D STATUS(TRANI,"RT") Q
  1. . D RETRAN ;.......................Re-transmit message
  1. Q
  1. GETDATA(TRANI) ;Get DFN & VARPTR from PCMM HL7 TRANSMISSION LOG file
  1. ; Input:
  1. ; TRANI - IEN to file PCMM HL7 TRANSMISSION LOG file (#404.471)
  1. ;Output:
  1. ; DFN - Patient IEN
  1. ; VARPTR - Variable pointer to 404.43 (ex: "2404;SCPT(404.43,")
  1. ; SCDELETE - Flag to process a delete
  1. ;
  1. NEW IDI,IDLONG,ND,PTPI
  1. ;
  1. ;Initialize return variables
  1. S (DFN,VARPTR)=""
  1. S SCDELETE=0
  1. ;
  1. S IDI=$O(^SCPT(404.471,TRANI,"ZPC","C",0)) Q:'IDI
  1. S ND=$G(^SCPT(404.49,IDI,0)) ;............PCMM HL7 ID zero node
  1. S IDLONG=$P(ND,U,1) ;.....................Get long form of ID
  1. ;alb/rpm;Patch 224;Fix DFN retrieval to prevent missing PID/EVN segments
  1. S DFN=$P($G(^SCPT(404.471,TRANI,0)),U,2) Q:'DFN
  1. S PTPI=$P(IDLONG,"-",1) ;.................File 404.43 IEN
  1. Q:'PTPI
  1. I '$D(^SCPT(404.43,PTPI)) S SCDELETE=1 ;..Flag to process a delete
  1. S VARPTR=PTPI_";SCPT(404.43," ;...........Create event pointer
  1. Q
  1. ;
  1. RETRAN ;Re-transmit messages.
  1. ;
  1. NEW PT,PTPI,RESULT,XMITARRY
  1. NEW HL,HLECH,HLEID,HLFS,HLQ
  1. ;
  1. ;Initialize array
  1. S XMITARRY="^TMP(""PCMM"",""HL7"","_$J_")" ;..Segments
  1. KILL @XMITARRY
  1. ;
  1. ;Get pointer to sending event
  1. S HLEID=$$HLEID^SCMCHL()
  1. I 'HLEID D Q
  1. . Q:$D(ZTQUEUED)
  1. . W "Unable to initialize HL7 variables - protocol not found"
  1. ;
  1. ;Initialize HL7 variables
  1. D INIT^HLFNC2(HLEID,.HL)
  1. I $G(WORK) S RESULT=$$BUILD^SCMCHLP(VARPTR,.HL,.XMITARRY,$G(TRANI)) D GEN Q
  1. I $O(HL(""))="" W:'$D(ZTQUEUED) $P(HL,"^",2) Q
  1. ;
  1. ;Build segment array
  1. I $G(SCDELETE) D I 1 ;....................Process a deletion
  1. . S PTPI=$P(VARPTR,";",1)
  1. . D PTPD^SCMCHLB2(PTPI)
  1. E D I +RESULT<0 W $P(RESULT,"^",2) Q ;..Process a normal entry
  1. . S RESULT=$$BUILD^SCMCHLB(VARPTR,.HL,.XMITARRY)
  1. . I +RESULT<0,'$D(ZTQUEUED) W $P(RESULT,"^",2)
  1. ;
  1. ;Generate message
  1. GEN S RESULT=$$GENERATE^SCMCHLG()
  1. ;
  1. KILL @XMITARRY
  1. Q:'$G(RESULT) ;No messages generated
  1. D STATUS(TRANI,"RT") ;..Change STATUS to RT
  1. W:'$D(ZTQUEUED) !,"Message re-transmitted..."
  1. Q
  1. ;
  1. STATUS(TRANI,STATUS) ;Update STATUS field in PCMM HL7 TRANSMISSION LOG file.
  1. ; Input: TRANI - IEN of PCM HL7 TRANSMISSION LOG file
  1. ; STATUS - A=Accepted, M=Marked for re-transmit, RJ=Rejected
  1. ;
  1. NEW SCERR,SCFDA,SCIENS
  1. Q:'$G(TRANI)
  1. Q:($G(STATUS)']"")
  1. S SCIENS=TRANI_","
  1. S SCFDA(404.471,SCIENS,.04)=STATUS ;..Status
  1. D FILE^DIE("I","SCFDA","SCERR")
  1. Q
  1. ;
  1. AUTO(SCLIM) ;Auto retransmit messages that have not received an ACK.
  1. ;Check all messages with a STATUS of "Transmitted" and see if
  1. ;they've received an ACK. Then compare their transmit date to the
  1. ;date in PCMM PARAMETER file HL7 TRANSMIT PERIOD field.
  1. ;
  1. ;Input:
  1. ; SCLIM - maximum messages allowed to transmit passed by reference
  1. ;
  1. ;Output: none
  1. ;
  1. Q:'$D(SCLIM)
  1. ;
  1. NEW DAYSMAX,DAYSDIFF,ND,TODAY,TRANDT,TRANI
  1. NEW DFN,SCDELETE,VARPTR
  1. NEW MSGCNT,SCFAC,SCSEQ
  1. ;
  1. ;Initialize variables needed by GENERATE^SCMCHLG
  1. S SCFAC=+$P($$SITE^VASITE(),"^",3) ;..Facility number
  1. S MSGCNT=0 ;..........................Message count
  1. ;
  1. S TODAY=$$DT^XLFDT()
  1. ;Get max days from HL7 PARAMETER file
  1. S DAYSMAX=$P($G(^SCTM(404.44,1,1)),U,6)
  1. I DAYSMAX="" S DAYSMAX=7 ;Default of 7 days
  1. ;
  1. S TRANI=0
  1. F S TRANI=$O(^SCPT(404.471,"ASTAT","T",TRANI)) Q:'TRANI!(SCLIM<1) D
  1. . S ND=$G(^SCPT(404.471,TRANI,0))
  1. . Q:$P(ND,U,5) ;........ACK already received
  1. . S TRANDT=$P(ND,U,3) ;..Date Transmitted
  1. . ;
  1. . ;Get number of days between Today and Transmit Date.
  1. . S DAYSDIFF=$$FMDIFF^XLFDT(TODAY,TRANDT,1)
  1. . ;
  1. . ;Quit if required number of days hasn't passed
  1. . Q:(DAYSDIFF<DAYSMAX)
  1. . ;
  1. . D GETDATA(TRANI) Q:VARPTR="" ;..Get DFN,VARPTR,SCDELETE
  1. . N WORK S WORK=$P($G(^SCPT(404.471,+TRANI,0)),U,7)
  1. . D RETRAN ;.......................Re-transmit message
  1. Q