1 | MPIFRTC ;ALB/JRP-GET ICN FROM MPI USING REAL TIME CONNECTION ;21-JAN-1997
|
---|
2 | ;;1.0; MASTER PATIENT INDEX VISTA ;**1**;30 Apr 99
|
---|
3 | ;
|
---|
4 | GETICN(DFN) ;Get ICN from MPI using real time connection
|
---|
5 | ;
|
---|
6 | ;Input : DFN - Pointer to entry in PATIENT file (#2)
|
---|
7 | ;Output : ICN = Success
|
---|
8 | ; -1^Reason = Failure
|
---|
9 | ;
|
---|
10 | ;Check input
|
---|
11 | S DFN=+$G(DFN)
|
---|
12 | Q:('$D(^DPT(DFN,0))) "-1^Did not pass valid DFN"
|
---|
13 | ;Declare variables
|
---|
14 | N DPTZERO,CREATED,USER,INFOARR,MSG2MPI,MSG2DHCP,TMP,ICN
|
---|
15 | S MSG2MPI="^TMP(""MPIFRTC"","_$J_",""MSG2MPI"")"
|
---|
16 | S MSG2DHCP="^TMP(""MPIFRTC"","_$J_",""MSG2DHCP"")"
|
---|
17 | S INFOARR="^TMP(""MPIFRTC"","_$J_",""INFOARR"")"
|
---|
18 | K @MSG2MPI,@MSG2DHCP,@INFOARR
|
---|
19 | ;Determine user that created patient and date/time patient was created
|
---|
20 | S DPTZERO=$G(^DPT(DFN,0))
|
---|
21 | S USER=+$P(DPTZERO,"^",15)
|
---|
22 | S:('USER) USER=+$G(DUZ)
|
---|
23 | S CREATED=+$P(DPTZERO,"^",16)
|
---|
24 | S:('CREATED) CREATED=$$NOW^XLFDT()
|
---|
25 | ;Set up extra info array for message builder
|
---|
26 | ; - Event reason code (EVN segment, seq #4)
|
---|
27 | S @INFOARR@("REASON",1)=94
|
---|
28 | ; - Operator (EVN segment, seq #5)
|
---|
29 | S @INFOARR@("USER")=$P($G(^VA(200,USER,0)),"^",1)
|
---|
30 | ;Build MSH segment for ADT-A28 HL7 message
|
---|
31 | D BLDMSH("A28","MPI","200M",MSG2MPI,1)
|
---|
32 | ;Build rest of ADT-A28 HL7 message
|
---|
33 | S TMP=$$BLDMSG^VAFCMSG1(DFN,"A28",CREATED,INFOARR,MSG2MPI,2)
|
---|
34 | ;need to remove local ICN from PID segment
|
---|
35 | S $P(@MSG2MPI@(3),"^",3)="",$P(@MSG2MPI@(3),"^",4)=""
|
---|
36 | ;Send ADT-A28 HL7 message to MPI using real time connection
|
---|
37 | S TMP=$$EN^HLCSAC("MPIVA DIR",MSG2MPI,MSG2DHCP)
|
---|
38 | Q:(TMP<0) TMP
|
---|
39 | ;Process ADT-A31 HL7 message returned by MPI (contains ICN assignment)
|
---|
40 | S ICN=$$PROCESS^MPIFA31I(MSG2DHCP)
|
---|
41 | ;Done - Clean up and return ICN
|
---|
42 | EX K @MSG2MPI,@MSG2DHCP,@INFOARR
|
---|
43 | Q ICN
|
---|
44 | ;
|
---|
45 | BLDMSH(EVNTHL7,RCVAPP,RCVFAC,ARRAY,LINE) ;Build MSH segment for ADT
|
---|
46 | ; HL7 message
|
---|
47 | ;
|
---|
48 | ;Input : EVNTHL7 - HL7 ADT event to build MSH segment for A28
|
---|
49 | ; (Defaults to A28)
|
---|
50 | ; RCVAPP - Text to use as RECEIVING APPLICATION (seq #5)
|
---|
51 | ; RCVFAC - Text to use as RECEIVING FACILITY (seq #6)
|
---|
52 | ; ARRAY - Array to store MSH segment in (full global reference)
|
---|
53 | ; (Defaults to ^TMP("MPIFRTC",$J,"MSH"))
|
---|
54 | ; LINE - Line number in ARRAY to store MSH segment in
|
---|
55 | ; Can not be zero or negative number (defaults to 1)
|
---|
56 | ;Output : None
|
---|
57 | ; ARRAY() will be in the following format
|
---|
58 | ; ARRAY(LINE) = MSH segment
|
---|
59 | ; ARRAY(LINE,1) = First continuation node
|
---|
60 | ; ARRAY(LINE,n) = Nth continuation node
|
---|
61 | ;Notes : ARRAY(LINE) will be initialized (KILLed) on input
|
---|
62 | ; : ARRAY(LINE) will not be defined on bad input
|
---|
63 | ; : SENDING APPLICATION (seq #3) and SENDING FACILITY (seq #4)
|
---|
64 | ; are based on the application attached to the PIMS ADT-xxx
|
---|
65 | ; HL7 Server Protocol
|
---|
66 | ;
|
---|
67 | ;Check input
|
---|
68 | S EVNTHL7=$G(EVNTHL7)
|
---|
69 | S:(EVNTHL7="") EVNTHL7="A28"
|
---|
70 | S RCVAPP=$G(RCVAPP)
|
---|
71 | S RCVFAC=$G(RCVFAC)
|
---|
72 | S ARRAY=$G(ARRAY)
|
---|
73 | S:(ARRAY="") ARRAY="^TMP(""MPIFRTC"","_$J_",""MSH"")"
|
---|
74 | S LINE=+$G(LINE)
|
---|
75 | S:(LINE<1) LINE=1
|
---|
76 | ;Declare variables
|
---|
77 | N HLEID,HL,TMPMSHAR
|
---|
78 | ;Inintialize output array
|
---|
79 | K @ARRAY@(LINE)
|
---|
80 | ;Get pointer to ADT-xxx HL7 Server Protocol
|
---|
81 | S HLEID=$$GETSRVR^VAFCMSG5(EVNTHL7)
|
---|
82 | ;Initialize HL7 variables
|
---|
83 | D INIT^HLFNC2(HLEID,.HL)
|
---|
84 | ;Build MSH segment for ADT-xxx HL7 message
|
---|
85 | D MSH^HLFNC2(.HL,"",.TMPMSHAR)
|
---|
86 | ;Manually set RECEIVING APPLICATION (seq #5)
|
---|
87 | S $P(TMPMSHAR,HL("FS"),5)=RCVAPP
|
---|
88 | ;Manually set RECEIVING FACILITY (seq #6)
|
---|
89 | S $P(TMPMSHAR,HL("FS"),6)=RCVFAC
|
---|
90 | ;Move MSH segment into output array
|
---|
91 | S @ARRAY@(LINE)=TMPMSHAR
|
---|
92 | S HL=0
|
---|
93 | F S HL=+$O(MSH(HL)) Q:('HL) S @ARRAY@(LINE,HL)=TMPMSHAR(HL)
|
---|
94 | ;Done
|
---|
95 | Q
|
---|