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

HLOAPI7.m

Go to the documentation of this file.
  1. HLOAPI7 ;IRMFO-ALB/PIJ -API for retrieving HLO or HL7 information about a message;03/24/2004 14:43 ;06/04/2009
  1. ;;1.6;HEALTH LEVEL SEVEN;**146**;Oct 13, 1995;Build 16
  1. ;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. Q
  1. ;
  1. GETMSG(IEN,MSG,FLAG) ; Description: This function allows the user to toggle
  1. ;between HL7 and HLO messages and to return message information in a local array or a global.
  1. ;I '$G(FLAG) then MSG, IEN and file 778 are used for HLO messages.
  1. ;I $G(FLAG) then MSG, IEN and file 773 are used for HL7 messages.
  1. ;Input:
  1. ; IEN - The internal entry number of the message.
  1. ; MSG - The array name used to return the message information. Can be a local array or global.
  1. ; FLAG - I '$G(FLAG) use variables for HLO messages.
  1. ; FLAG - I $G(FLAG) use variables for HL7 messages.
  1. ;Output:
  1. ; Function returns 1 on success, 0 on failure. Failure would indicate that the
  1. ; message was not found or variable IEN or MSG was not passed
  1. ; MSG(0)= IEN (HL7 or HLO)
  1. ; HLO...
  1. ; MSG(1)= ^HLB(IEN,0)
  1. ; MSG(2)= ^HLB(IEN,1)
  1. ; MSG(3)= ^HLB(IEN,2)
  1. ; MSG(4)= ^HLB(IEN,3)
  1. ; MSG(5)= ^HLB(IEN,4)
  1. ; MSG(6)=""
  1. ; MSG(7)="^HLA(IEN,...
  1. ;
  1. ; HL7...
  1. ; Multiple MSG(1) = ^HLMA(IEN,"MSH",I,0)
  1. ; Multiple MSG(i)= ^HL(772,R772,"IN",I,0)
  1. ;
  1. K DATA,@MSG
  1. N CTR,DATA,I,N1,N2,N3,R772,R777,STAT
  1. Q:'$G(IEN) 0
  1. Q:'$D(MSG) 0
  1. Q:MSG="FLAG" 0 ; may not need...
  1. S (CTR,STAT)=1
  1. I '$G(FLAG) Q:'$D(^HLB(IEN)) 0 D Q STAT
  1. . ;HLO
  1. . S N1=""
  1. . F S N1=$O(^HLB(IEN,N1)) Q:N1="" D
  1. . . I $D(^HLB(IEN,N1))=1 D
  1. . . . S DATA=^HLB(IEN,N1)
  1. . . . S:N1=0 R777=$P(DATA,U,2)
  1. . . . S @MSG@(CTR)=DATA
  1. . . . S CTR=CTR+1
  1. . . I $D(^HLB(IEN,N1))=10 D ; this part is for Batch messages ^HLB(D0,3)
  1. . . . S N2=""
  1. . . . F S N2=$O(^HLB(IEN,N1,N2)) Q:N2="" D
  1. . . . . F I=0:1:2 I $D(^HLB(IEN,N1,N2,I))=1 S @MSG@(CTR)=^HLB(IEN,N1,N2,I),CTR=CTR+1
  1. . ; get Segments for HLO
  1. . I 'R777 S STAT=0 Q
  1. . S @MSG@(CTR)="",CTR=CTR+1 ; add blank line between message header and message body
  1. . S (N1,N2,N3)=""
  1. . F S N1=$O(^HLA(R777,N1)) Q:N1="" D
  1. . . I $D(^HLA(R777,N1))=1 D
  1. . . . S @MSG@(CTR)=^HLA(R777,N1)
  1. . . . S CTR=CTR+1
  1. . . I $D(^HLA(R777,N1))=10 D
  1. . . . S N2=""
  1. . . . F S N2=$O(^HLA(R777,N1,N2)) Q:N2="" D
  1. . . . . I $D(^HLA(R777,N1,N2))=1 D
  1. . . . . . S DATA=^HLA(R777,N1,N2)
  1. . . . . . S @MSG@(CTR)=^HLA(R777,N1,N2),CTR=CTR+1
  1. . . . . I $D(^HLA(R777,N1,N2,0))=1 D
  1. . . . . . S DATA=^HLA(R777,N1,N2,0)
  1. . . . . . S @MSG@(CTR)=^HLA(R777,N1,N2,0),CTR=CTR+1
  1. . . . . S N3=""
  1. . . . . F S N3=$O(^HLA(R777,N1,N2,1,N3)) Q:N3="" D
  1. . . . . . I $D(^HLA(R777,N1,N2,1,N3,0))=1 D
  1. . . . . . . S DATA=^HLA(R777,N1,N2,1,N3,0)
  1. . . . . . . S @MSG@(CTR)=^HLA(R777,N1,N2,1,N3,0),CTR=CTR+1
  1. ;
  1. ;HL7
  1. Q:'$D(^HLMA(IEN,0)) 0
  1. S DATA=^HLMA(IEN,0) Q:'DATA 0 D
  1. . S R772=$P(DATA,U,1)
  1. . I 'R772 S STAT=0 Q
  1. . ; get HL7 Message Header
  1. . S N1=""
  1. . F S N1=$O(^HLMA(IEN,N1)) Q:N1="" D
  1. . . I $D(^HLMA(IEN,N1))=1 D
  1. . . . S DATA=^HLMA(IEN,N1)
  1. . . . S @MSG@(CTR)=DATA
  1. . . . S CTR=CTR+1
  1. . . S N2=""
  1. . . F S N2=$O(^HLMA(IEN,N1,N2)) Q:N2="" D
  1. . . . I $D(^HLMA(IEN,N1,N2))=1 D
  1. . . . . S DATA=^HLMA(IEN,N1,N2)
  1. . . . . S @MSG@(CTR)=DATA
  1. . . . . S CTR=CTR+1
  1. . . . S N3=""
  1. . . . F S N3=$O(^HLMA(IEN,N1,N2,N3)) Q:N3="" D
  1. . . . . I $D(^HLMA(IEN,N1,N2,N3))=1 D
  1. . . . . . S DATA=^HLMA(IEN,N1,N2,N3)
  1. . . . . . S @MSG@(CTR)=DATA
  1. . . . . . S CTR=CTR+1
  1. . ; get HL7 Message Body
  1. . S @MSG@(CTR)="",CTR=CTR+1 ; add blank line between message header and message body
  1. . S N1=""
  1. . F S N1=$O(^HL(772,R772,N1)) Q:N1="" D
  1. . . I $D(^HL(772,R772,N1))=1 D
  1. . . . S DATA=^HL(772,R772,N1)
  1. . . . S @MSG@(CTR)=DATA
  1. . . . S CTR=CTR+1
  1. . . S N2=""
  1. . . F S N2=$O(^HL(772,R772,N1,N2)) Q:N2="" D
  1. . . . I $D(^HL(772,R772,N1,N2))=1 D
  1. . . . . S DATA=^HL(772,R772,N1,N2)
  1. . . . . S @MSG@(CTR)=DATA
  1. . . . . S CTR=CTR+1
  1. . . . S N3=""
  1. . . . F S N3=$O(^HL(772,R772,N1,N2,N3)) Q:N3="" D
  1. . . . . I $D(^HL(772,R772,N1,N2,N3))=1 D
  1. . . . . . S DATA=^HL(772,R772,N1,N2,N3)
  1. . . . . . S @MSG@(CTR)=DATA
  1. . . . . . S CTR=CTR+1
  1. Q STAT