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

DGPFHLU4.m

Go to the documentation of this file.
DGPFHLU4 ;ALB/RPM - PRF HL7 ACK PROCESSING ; 3/04/03
 ;;5.3;Registration;**425,951**;Aug 13, 1993;Build 135
 ;;Per VA Directive 6402, this routine should not be modified.
 ;
BLDACK(DGACK,DGROOT,DGHL,DGSEGERR,DGSTOERR) ;Build ACK Message/Segments
 ;
 ;  Input:
 ;      DGACK - (required) Acknowledgement code
 ;     DGROOT - (required) Segment array name
 ;       DGHL - (required) HL7 environment array
 ;   DGSEGERR - (optional) defined only if errors during parsing
 ;   DGSTOERR - (optional) defined only if errors during filing
 ;
 ;  Output:
 ;   Function Value - 1 on success, 0 on failure
 ;   ^TMP("HLA",$J) - Array of ACK segments
 ;
 N DGCNT   ;segment counter
 N DGMSA   ;formatted MSA segment
 N DGRSLT  ;function value
 ;
 S DGRSLT=0
 I $G(DGACK)]"",$G(DGROOT)]"" D
 . S DGCNT=0
 . ;
 . ;build MSA segment
 . S DGMSA=$$MSA^DGPFHLU3(DGACK,DGHL("MID"),.DGSTOERR,"1,2",.DGHL)
 . Q:(DGMSA="")
 . S DGCNT=DGCNT+1,@DGROOT@(DGCNT)=DGMSA
 . ;
 . ;build ERR segments
 . Q:($D(DGSEGERR)&('$$BLDERR(DGROOT,.DGSEGERR,.DGHL,.DGCNT)))
 . ;
 . ;success
 . S DGRSLT=1
 Q DGRSLT
 ;
PARSACK(DGWRK,DGHL,DGACK,DGMSG) ;Parse ACK Message/Segments
 ;
 ;  Input:
 ;    DGWRK - Closed root work global reference
 ;     DGHL - HL7 environment array
 ;
 ;  Output:
 ;    DGACK - array of ACK results
 ;    DGMSG - undefined on success, array of MailMan text on failure
 ;
 N DGFS
 N DGCS
 N DGRS
 N DGSS
 N DGCURLIN
 ;
 S DGFS=DGHL("FS")
 S DGCS=$E(DGHL("ECH"),1)
 S DGRS=$E(DGHL("ECH"),2)
 S DGSS=$E(DGHL("ECH"),4)
 S HLECH=DGHL("ECH"),HLFS=DGHL("FS")
 S DGCURLIN=0
 ;
 ;loop through the message segments and retrieve the field data
 F  D  Q:'DGCURLIN
 . N DGSEG
 . S DGCURLIN=$$NXTSEG^DGPFHLUT(DGWRK,DGCURLIN,DGFS,.DGSEG)
 . Q:'DGCURLIN
 . D @(DGSEG("TYPE")_"(.DGSEG,DGCS,DGRS,DGSS,.DGACK,.DGMSG)")
 Q
 ;
MSH(DGSEG,DGCS,DGRS,DGSS,DGACK,DGERR) ;
 ;
 ;  Input:
 ;    DGSEG - MSH segment field array
 ;     DGCS - HL7 component separator
 ;     DGRS - HL7 repetition separator
 ;     DGSS - HL7 sub-component separator
 ;
 ;  Output:
 ;    DGACK - array of ACK results
 ;            "SNDFAC" - sending facility
 ;            "RCVFAC" - receiving facility
 ;            "MSGDTM" - message creation date/time in FileMan format
 ;    DGERR - undefined on success, error array on failure
 ;
 S DGACK("SNDFAC")=$P($G(DGSEG(4)),DGCS,1)
 S DGACK("RCVFAC")=$P($G(DGSEG(6)),DGCS,1)
 S DGACK("MSGDTM")=$$HL7TFM^XLFDT($G(DGSEG(7)))
 Q
 ;
MSA(DGSEG,DGCS,DGRS,DGSS,DGACK,DGERR) ;
 ;
 ;  Input:
 ;    DGSEG - MSH segment field array
 ;     DGCS - HL7 component separator
 ;     DGRS - HL7 repetition separator
 ;     DGSS - HL7 sub-component separator
 ;
 ;  Output:
 ;    DGACK - array of ACK results
 ;            "ACKCODE" - Acknowledgment code
 ;            "MSGID" - Message Control ID of the message being ACK'ed
 ;    DGERR - undefined on success, error array on failure
 ;
 N DGCNT
 ;
 S DGACK("ACKCODE")=$G(DGSEG(1))
 S DGACK("MSGID")=$G(DGSEG(2))
 I DGACK("ACKCODE")'="AA",$G(DGSEG(6))]"" D
 .S DGCNT=$O(DGERR(""),-1),DGCNT=DGCNT+1
 .S DGERR(DGCNT)=$$DECHL7^DGPFHLUT($P(DGSEG(6),DGCS,1))
 .Q
 Q
 ;
ERR(DGSEG,DGCS,DGRS,DGSS,DGACK,DGERR) ;
 ;
 ;  Input:
 ;    DGSEG - MSH segment field array
 ;     DGCS - HL7 component separator
 ;     DGRS - HL7 repetition separator
 ;     DGSS - HL7 sub-component separator
 ;
 ;  Output:
 ;    DGACK - array of ACK results
 ;    DGERR - undefined on success, error array on failure
 ;
 N DGCNT
 N DGCOD
 ;
 I $G(DGSEG(1))]"" D
 . S DGCOD=$P($P(DGSEG(1),DGCS,4),DGSS,1)
 . I DGCOD]"" D
 . . S DGCNT=$O(DGERR(""),-1),DGCNT=DGCNT+1
 . . S DGERR(DGCNT)=DGCOD
 Q
 ;
BLDERR(DGROOT,DGSEGERR,DGHL,DGCNT) ;build all ERR segments
 ;This function builds a formatted ERR segment for each entry in the
 ;segment error array (DGSEGERR).
 ;
 ;  Input:
 ;     DGROOT - (required) Closed root array or global name for segment
 ;              storage
 ;   DGSEGERR - (required) Array of segment errors
 ;              Format: DGSEGERR(segment name,sequence,field)=error code
 ;       DGHL - (required) VistA HL7 environment array
 ;      DGCNT - (optional) Previous segment # in DGROOT
 ;
 ;  Output:
 ;   Function Value - 1 on success, 0 on failure
 ;
 N DGCOD   ;error code
 N DGERR   ;formatted ERR segment
 N DGPOS   ;field positions containing error
 N DGSEG   ;segment name containing error
 N DGSEQ   ;sequence of segment containing error
 N DGRSLT  ;function value
 ;
 S DGRSLT=0
 I $G(DGROOT)]"",$D(DGSEGERR) D
 . S DGCNT=$G(DGCNT,0)
 . S DGSEG=""
 . F  S DGSEG=$O(DGSEGERR(DGSEG)) Q:(DGSEG="")  D  Q:(DGERR="")
 . . S DGSEQ=0
 . . F  S DGSEQ=$O(DGSEGERR(DGSEG,DGSEQ)) Q:'DGSEQ  D  Q:(DGERR="")
 . . . S DGPOS=0
 . . . F  S DGPOS=$O(DGSEGERR(DGSEG,DGSEQ,DGPOS)) Q:'DGPOS  D  Q:(DGERR="")
 . . . . S DGCOD=DGSEGERR(DGSEG,DGSEQ,DGPOS)
 . . . . S DGERR=$$ERR^DGPFHLU3(DGSEG,DGSEQ,DGPOS,DGCOD,"1",.DGHL)
 . . . . Q:(DGERR="")
 . . . . S DGCNT=DGCNT+1,@DGROOT@(DGCNT)=DGERR
 . Q:(DGERR="")
 . S DGRSLT=1
 Q DGRSLT