| 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
 | 
|---|