| 1 | LA7POC ;DALOI/JMC - Lab HL7 Point of Care; Jan 12, 2004
 | 
|---|
| 2 |  ;;5.2;AUTOMATED LAB INSTRUMENTS;**67**;Sep 27, 1994
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; Reference to HLL("SET FOR APP ACK") supported by DBIA #TBD
 | 
|---|
| 5 |  Q
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | RTRA ; Setup links and subscriber array for HL7 ADT message generation
 | 
|---|
| 8 |  ; for those LA7POC* entries in file #62.48 which indicate they want to
 | 
|---|
| 9 |  ; subscribe to ADT messages. Interface types POCA in file #62.48
 | 
|---|
| 10 |  ; will be subscribers to VistA HL7 ADT messages.
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  ; Called by subscriber protocol LA7POC ADT RTR which functions as a
 | 
|---|
| 13 |  ; router.
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  N LA76248,LA7Y
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  ; Check entries with root 'LA7POC" as name and interface type POCA (21)
 | 
|---|
| 18 |  ; to subscribe to ADT message feed from VistA.
 | 
|---|
| 19 |  S LA76248=0
 | 
|---|
| 20 |  F  S LA76248=$O(^LAHM(62.48,LA76248)) Q:'LA76248  D
 | 
|---|
| 21 |  . S LA76248(0)=$G(^LAHM(62.48,LA76248,0)),LA7Y=$P(LA76248(0),"^")
 | 
|---|
| 22 |  . I $E(LA7Y,1,6)'="LA7POC" Q
 | 
|---|
| 23 |  . I $P(LA76248(0),"^",3)'=1 Q  ; Inactive status
 | 
|---|
| 24 |  . I $P(LA76248(0),"^",9)'=21 Q
 | 
|---|
| 25 |  . S HLL("LINKS",LA76248)=LA7Y_" ADT SUBS^"_LA7Y_"A"
 | 
|---|
| 26 |  Q
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 | ACK(LA7) ; Returns the application acknowledgement to the sending POC
 | 
|---|
| 30 |  ; application. Indicates any error encountered in processing the POC
 | 
|---|
| 31 |  ; results. Setup link for HL7 ACK message generation for LA7POC* entries
 | 
|---|
| 32 |  ; in file #62.48 when POC ORU message has been processed in VistA.
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 |  ; Called by routine LA7VPOC
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  ; Call with LA7 array passed by reference
 | 
|---|
| 37 |  ;      LA7(62.48)=ien of related configuration in file #62.48  
 | 
|---|
| 38 |  ;      LA7(62.49)=ien of message in file #62.49 being acknowledged
 | 
|---|
| 39 |  ;      LA7("ACK")=acknowledgment status (AA, AE, AR)
 | 
|---|
| 40 |  ;      LA7("MSG")=text of error message to be returned
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  N HL,HLMTIENS,LA6249,LA76248,LA7X,LA7Y
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  ; Check for entry in 62.48
 | 
|---|
| 45 |  S LA76248=+$G(LA7(62.48))
 | 
|---|
| 46 |  I '$G(LA76248)!('$D(^LAHM(62.48,LA76248,0))) Q
 | 
|---|
| 47 |  S LA76248(0)=$G(^LAHM(62.48,LA7(62.48),0)),LA7X=$P(LA76248(0),"^")
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  ; Check for entry in 62.49
 | 
|---|
| 50 |  S LA6249=+$G(LA7(62.49))
 | 
|---|
| 51 |  I '$G(LA6249)!('$D(^LAHM(62.49,LA6249,0))) Q
 | 
|---|
| 52 |  F I=0,700 S LA6249(I)=$G(^LAHM(62.49,LA6249,I))
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  ; Call reprocess message to build and send ACK and clear purge flag
 | 
|---|
| 55 |  S LA7Y=$$REPROC^HLUTIL($P(LA6249(700),";",2),"D BLDACK^LA7POC")
 | 
|---|
| 56 |  I LA7Y=0 S HLMTIENS=$P(LA6249(700),";",2),LA7X=$$TOPURG^HLUTIL()
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 | BLDACK ; Create/initialize HL ACK message
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  N GBL,HLL,HLP,I,X
 | 
|---|
| 64 |  N LA76249,LA7AERR,LA7DATA,LA7ECH,LA7FS,LA7ID,LA7MID,LA7MSA,LA7MSH,LA7X,LA7Y
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  ; No application acknowledgement
 | 
|---|
| 67 |  I HL("APAT")="NE" Q
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  ; Other system only wants ACK on successful completion condition and we found an error.
 | 
|---|
| 70 |  I LA7("ACK")'="AA",HL("APAT")="SU" Q
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  ; Other system only wants ACK on error/reject condition
 | 
|---|
| 73 |  I LA7("ACK")="AA",HL("APAT")="ER" Q
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 |  S GBL="^TMP(""HLA"","_$J_")"
 | 
|---|
| 76 |  K @GBL
 | 
|---|
| 77 |  S LA76249=$$INIT6249^LA7VHLU
 | 
|---|
| 78 |  D RSPINIT^HLFNC2(HL("EIDS"),.HL)
 | 
|---|
| 79 |  S LA7FS=HL("RFS"),LA7ECH=HL("RECH")
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  ; Build pseudo MSH for file #62.49 entry
 | 
|---|
| 82 |  S LA7MSH(0)="MSH",LA7MSH(1)=LA7ECH,LA7MSH(2)=HL("RAN"),LA7MSH(3)=HL("RAF"),LA7MSH(4)=HL("SAN"),LA7MSH(5)=HL("SAF")
 | 
|---|
| 83 |  S LA7MSH(9)=HL("RMTN")_$E(LA7ECH,1)_HL("RETN"),LA7MSH(11)=HL("PID"),LA7MSH(12)=HL("VER")
 | 
|---|
| 84 |  S LA7MSH(15)="AL",LA7MSH(16)="NE"
 | 
|---|
| 85 |  D BUILDSEG^LA7VHLU(.LA7MSH,.LA7DATA,LA7FS)
 | 
|---|
| 86 |  D FILE6249^LA7VHLU(LA76249,.LA7DATA)
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  ; Build and file MSA segment
 | 
|---|
| 89 |  K LA7DATA
 | 
|---|
| 90 |  S LA7MSA(0)="MSA",LA7MSA(1)=LA7("ACK"),LA7MSA(2)=HL("MID")
 | 
|---|
| 91 |  I $G(LA7("MSG"))'="" D
 | 
|---|
| 92 |  . S LA7MSA(3)=$$CHKDATA^LA7VHLU3($P(LA7("MSG"),"^"),LA7FS_LA7ECH)
 | 
|---|
| 93 |  . I $P(LA7("MSG"),"^",2)="" Q
 | 
|---|
| 94 |  . S $P(LA7MSA(3),$E(LA7ECH),2)=$$CHKDATA^LA7VHLU3($P(LA7("MSG"),"^",2),LA7FS_LA7ECH)
 | 
|---|
| 95 |  S LA7ID=$P(LA76248(0),"^",1)_"-O-ACK-"_LA7MSA(2)
 | 
|---|
| 96 |  D BUILDSEG^LA7VHLU(.LA7MSA,.LA7DATA,LA7FS)
 | 
|---|
| 97 |  D FILESEG^LA7VHLU(GBL,.LA7DATA)
 | 
|---|
| 98 |  D FILE6249^LA7VHLU(LA76249,.LA7DATA)
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 |  ; Send the HL7 message.
 | 
|---|
| 101 |  S HLL("SET FOR APP ACK")=1
 | 
|---|
| 102 |  S HLL("LINKS",1)=HL("EIDS")_"^"_$P(LA76248(0),"^")
 | 
|---|
| 103 |  S HLP("NAMESPACE")="LA"
 | 
|---|
| 104 |  D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"GM",1,.LA7MID,"",.HLP)
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  S HL("MTN")=HL("RMTN"),HL("SAN")=HL("RAN"),HL("SAF")=HL("RAF"),HL("APAT")=""
 | 
|---|
| 107 |  D UPDT6249^LA7VORM1
 | 
|---|
| 108 |  L -^LAHM(62.49,LA76249)
 | 
|---|
| 109 |  Q
 | 
|---|