1 | DGQEHL73 ;ALB/JFP - VIC HL7 Message Builder (A08); 09/01/96
|
---|
2 | ;;5.3;REGISTRATION;**73,120,148**;DEC 11,1996
|
---|
3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | BLDA08(XMITPTR,HL,MID,XMITARRY,INSRTPNT) ;
|
---|
6 | ; -- Build either a batch or single HL7 A08 message for VIC
|
---|
7 | ;
|
---|
8 | ;Input : XMITPTR - Pointer to entry in PATIENT file (#2)
|
---|
9 | ; HL - Array containing HL7 variables - pass by reference
|
---|
10 | ; (This is the output of the call to INIT^HLFNC2())
|
---|
11 | ; MID - Message Control ID to use in batch MSH segment
|
---|
12 | ; XMITARRY - Array to store HL7 message in (full global ref)
|
---|
13 | ; (Defaults to ^TMP("HLS",$J))
|
---|
14 | ; INSRTPNT - Line to begin inserting message text at
|
---|
15 | ; (Defaults to 1)
|
---|
16 | ;Output : LINES - Number of lines in message (success)
|
---|
17 | ; XMITARRY(N) = Line N of HL7 message
|
---|
18 | ; XMITARRY(N,M) = Continuation number M of line N
|
---|
19 | ; -1^Error - Unable to build message / bad input
|
---|
20 | ;
|
---|
21 | ;Notes 1. It is the responsibility of the calling program to
|
---|
22 | ; initialize (i.e. KILL) XMITARRY
|
---|
23 | ; 2. If MID is defined in the parameter list, a batch MSH segment
|
---|
24 | ; will be built. Otherwise a HL7 v1.6 will build the MSH
|
---|
25 | ; segment.
|
---|
26 | ;
|
---|
27 | ; -- Check input
|
---|
28 | S XMITPTR=+$G(XMITPTR)
|
---|
29 | Q:('$D(^DPT(XMITPTR,0))) "-1^Did not pass valid pointer to PATIENT file"
|
---|
30 | Q:($O(HL(""))="") "-1^Did not pass variables required to interact with the HL7 package"
|
---|
31 | S MID=$G(MID)
|
---|
32 | S XMITARRY=$G(XMITARRY)
|
---|
33 | S:(XMITARRY="") XMITARRY="^TMP(""HLS"","_$J_")"
|
---|
34 | S INSRTPNT=$G(INSRTPNT)
|
---|
35 | S:(INSRTPNT="") INSRTPNT=1
|
---|
36 | ; -- Declare variables
|
---|
37 | N LINESADD,CURLINE,RESULT,ERROR,VAFSTR
|
---|
38 | N VAFEVN,VAFPID,VAFPV1,VAFZEL,VAFZSP,VAFZPD
|
---|
39 | ;
|
---|
40 | S LINESADD=0
|
---|
41 | S CURLINE=INSRTPNT
|
---|
42 | S ERROR=0
|
---|
43 | ; -- Build MSH segment for BATCH transmission, otherwise skip
|
---|
44 | I (MID'="") D
|
---|
45 | .; -- Build MSH segment
|
---|
46 | .K RESULT D MSH^HLFNC2(.HL,MID,.RESULT)
|
---|
47 | .; -- Check for results of call
|
---|
48 | .I (RESULT="") S ERROR="-1^Unable to create MSH segment for a batch transmission" Q
|
---|
49 | .; -- Copy MSH segment into HL7 message
|
---|
50 | .S @XMITARRY@(CURLINE)=RESULT
|
---|
51 | .; -- Increment number of lines added
|
---|
52 | .S LINESADD=LINESADD+1
|
---|
53 | ; -- Error building MSH segment - done
|
---|
54 | Q:(ERROR) ERROR
|
---|
55 | ; -- Build Segments associated with an A08 Message
|
---|
56 | ;
|
---|
57 | ; -- -- Build EVN
|
---|
58 | S VAFEVN=$$EVN^VAFHLEVN("A08","")
|
---|
59 | S CURLINE=CURLINE+1
|
---|
60 | S LINESADD=LINESADD+1
|
---|
61 | S @HL7XMIT@(CURLINE)=VAFEVN
|
---|
62 | ; -- -- Build PID
|
---|
63 | S VAFSTR="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19"
|
---|
64 | S VAFPID=$$EN^VAFHLPID(XMITPTR,VAFSTR)
|
---|
65 | S CURLINE=CURLINE+1
|
---|
66 | S LINESADD=LINESADD+1
|
---|
67 | S @HL7XMIT@(CURLINE)=VAFPID
|
---|
68 | ; -- -- Build PV1 (note: this is a null segment)
|
---|
69 | S VAFPV1="PV1^1"
|
---|
70 | S CURLINE=CURLINE+1
|
---|
71 | S LINESADD=LINESADD+1
|
---|
72 | S @HL7XMIT@(CURLINE)=VAFPV1
|
---|
73 | ; -- -- Build ZEL
|
---|
74 | S VAFSTR="1,2,3,4,5,6,7,8,9,10,11,12,13"
|
---|
75 | S VAFZEL=$$EN^VAFHLZEL(XMITPTR,VAFSTR,1)
|
---|
76 | S CURLINE=CURLINE+1
|
---|
77 | S LINESADD=LINESADD+1
|
---|
78 | ; -- The Datacards side of interface is hard coded, to the number of
|
---|
79 | ; fields specified in the original interface specification. If
|
---|
80 | ; fields are added to the segment definition, it causes the VIC
|
---|
81 | ; machine error. This code corrects the problem by truncating the
|
---|
82 | ; results of the national call after the 14th piece.
|
---|
83 | S VAFZEL=$P(VAFZEL,HLFS,1,14)
|
---|
84 | S @HL7XMIT@(CURLINE)=VAFZEL
|
---|
85 | ; -- -- Build ZSP
|
---|
86 | S VAFZSP=$$EN^VAFHLZSP(XMITPTR)
|
---|
87 | S LINESADD=LINESADD+1
|
---|
88 | S CURLINE=CURLINE+1
|
---|
89 | ; -- The Datacards side of interface is hard coded, to the number of
|
---|
90 | ; fields specified in the original interface specification. If
|
---|
91 | ; fields are added to the segment definition, it causes the VIC
|
---|
92 | ; machine error. This code corrects the problem by truncating the
|
---|
93 | ; results of the national call after the 5th piece.
|
---|
94 | S VAFZSP=$P(VAFZSP,HLFS,1,5)
|
---|
95 | S @HL7XMIT@(CURLINE)=VAFZSP
|
---|
96 | ;
|
---|
97 | ; -- -- Build ZPD
|
---|
98 | S VAFSTR="1,17"
|
---|
99 | S VAFZPD=$$EN^VAFHLZPD(XMITPTR,VAFSTR)
|
---|
100 | S LINESADD=LINESADD+1
|
---|
101 | S CURLINE=CURLINE+1
|
---|
102 | ; -- Change POW indicator in piece 17 from Y/N to 1/0
|
---|
103 | ; to work with the DataCard interface.
|
---|
104 | S $P(VAFZPD,"^",18)=$S($P(VAFZPD,"^",18)="Y":1,1:0)
|
---|
105 | ; -- The Datacards side of interface is hard coded, to the number of
|
---|
106 | ; fields specified in the original interface specification. If
|
---|
107 | ; fields are added to the segment definition, it causes the VIC
|
---|
108 | ; machine error. This code corrects the problem by truncating the
|
---|
109 | ; results of the national call after the 18th piece.
|
---|
110 | S VAFZPD=$P(VAFZPD,HLFS,1,18)
|
---|
111 | S @HL7XMIT@(CURLINE)=VAFZPD
|
---|
112 | ;
|
---|
113 | Q LINESADD
|
---|
114 | END ; -- End of code
|
---|
115 | ;
|
---|