1 | DGROHLR ;DJH/AMA - ROM HL7 RECEIVE DRIVERS ; 09 Jul 2003 4:41 PM
|
---|
2 | ;;5.3;Registration;**533,572**;Aug 13, 1993
|
---|
3 | ;
|
---|
4 | RCV ;Receive all message types and route to message specific receiver
|
---|
5 | ;
|
---|
6 | ;This procedure is the main driver entry point for receiving all
|
---|
7 | ;message types (ACK, QRY and ORF) for Register Once Messaging.
|
---|
8 | ;
|
---|
9 | ;All procedures and functions assume that all VistA HL7 environment
|
---|
10 | ;variables are properly initialized and will produce a fatal error if
|
---|
11 | ;they are missing.
|
---|
12 | ;
|
---|
13 | ;The received message is copied to a temporary work global for
|
---|
14 | ;processing. The message type is determined from the MSH segment and
|
---|
15 | ;a receive processing procedure specific to the message type is called.
|
---|
16 | ;(Ex. ORF~R01 message calls procedure: RCVORF). The specific receive
|
---|
17 | ;processing procedure calls a message specific parse procedure to
|
---|
18 | ;validate the message data and return data arrays for storage. If no
|
---|
19 | ;parse errors are reported during validation, then the data arrays are
|
---|
20 | ;stored by the receive processing procedure. Control, along with any
|
---|
21 | ;parse validation errors, is then passed to the message specific send
|
---|
22 | ;processing procedures to build and transmit the acknowledgment and
|
---|
23 | ;query results messages.
|
---|
24 | ;
|
---|
25 | ; The message specific procedures are as follows:
|
---|
26 | ;
|
---|
27 | ; Message Receive Procedure Parse Procedure Send Procedure
|
---|
28 | ; ------- ----------------- ---------------- --------------
|
---|
29 | ; SNDACK^DGROHLS
|
---|
30 | ; ACK~R01 RCVACK^DGROHLR PARSACK^DGROHLU4 N/A
|
---|
31 | ; QRY~R02 RCVQRY^DGROHLR PARSQRY^DGROHLQ3 SNDORF^DGROHLS
|
---|
32 | ; ORF~R01 RCVORF^DGROHLR PARSORF^DGROHLQ3 N/A
|
---|
33 | ;
|
---|
34 | N DGCNT,DGMSGTYP,DGSEG,DGSEGCNT,DGWRK
|
---|
35 | ;
|
---|
36 | S DGWRK=$NA(^TMP("DGROHL7",$J))
|
---|
37 | K @DGWRK
|
---|
38 | ;
|
---|
39 | ;load work global with segments
|
---|
40 | F DGSEGCNT=1:1 X HLNEXT Q:HLQUIT'>0 D
|
---|
41 | . S DGCNT=0
|
---|
42 | . S @DGWRK@(DGSEGCNT,DGCNT)=HLNODE
|
---|
43 | . F S DGCNT=$O(HLNODE(DGCNT)) Q:'DGCNT D
|
---|
44 | . . S @DGWRK@(DGSEGCNT,DGCNT)=HLNODE(DGCNT)
|
---|
45 | ;
|
---|
46 | ;get message type from "MSH"
|
---|
47 | I $$NXTSEG^DGROHLUT(DGWRK,0,HL("FS"),.DGSEG),$G(DGSEG("TYPE"))="MSH" D
|
---|
48 | . S DGMSGTYP=$P(DGSEG(9),$E(HL("ECH"),1),1)
|
---|
49 | . ;HLMTIENS is only required by RCVORU and RCVQRY, thus $GET
|
---|
50 | . I DGMSGTYP="" S (DGMSGTYP,HL("MTN"))="ORF",HLMTIENS=HLMTIEN
|
---|
51 | . I DGMSGTYP=HL("MTN") D @("RCV"_DGMSGTYP_"(DGWRK,$G(HLMTIENS),.HL)")
|
---|
52 | ;
|
---|
53 | ;cleanup
|
---|
54 | K @DGWRK
|
---|
55 | Q
|
---|
56 | ;
|
---|
57 | RCVACK(DGWRK,DGMIEN,DGHL) ;Receive ACK Message Types (ACK~R01)
|
---|
58 | ;
|
---|
59 | ; Input:
|
---|
60 | ; DGWRK - name of work global containing segments
|
---|
61 | ; DGMIEN - IEN of message entry in file #773
|
---|
62 | ; DGHL - HL environment array
|
---|
63 | ;
|
---|
64 | ; Output:
|
---|
65 | ; none
|
---|
66 | ;
|
---|
67 | N DGACK ;ACK data array
|
---|
68 | N DGERR ;error array
|
---|
69 | N DGLIEN ;HL7 transmission log IEN
|
---|
70 | N DGROL ;HL7 transmssion log data array
|
---|
71 | ;
|
---|
72 | S ACKCODE=0
|
---|
73 | D PARSACK^DGROHLU4(DGWRK,.DGHL,.DGACK,.DGERR)
|
---|
74 | I $G(DGACK("ACKCODE"))'="AA" S ACKCODE=1
|
---|
75 | Q
|
---|
76 | ;
|
---|
77 | RCVQRY(DGWRK,DGMIEN,DGHL) ;Receive QRY Message Types (QRY~R02)
|
---|
78 | ;
|
---|
79 | ; Input:
|
---|
80 | ; DGWRK - name of work global containing segments
|
---|
81 | ; DGMIEN - IEN of message entry in file #773
|
---|
82 | ; DGHL - HL environment array
|
---|
83 | ;
|
---|
84 | ; Output:
|
---|
85 | ; none
|
---|
86 | ;
|
---|
87 | N DGDFN,DGQRY,DGQRYERR,DGSEGERR
|
---|
88 | ;
|
---|
89 | D PARSQRY^DGROHLQ3(DGWRK,.DGHL,.DGQRY,.DGSEGERR)
|
---|
90 | S DGDFN=$$GETDFN^DGROUT2(DGQRY("ICN"),DGQRY("DOB"),DGQRY("SSN"))
|
---|
91 | I DGDFN'>0 D
|
---|
92 | . S DGQRYERR="NM"
|
---|
93 | . ;
|
---|
94 | . ;THE ICN FROM THE MPI DOES NOT MATCH A PATIENT, SO NOTIFY THE MPI
|
---|
95 | . D MPIMAIL^DGROMAIL(.DGQRY)
|
---|
96 | . ;
|
---|
97 | D SNDORF^DGROHLS(.DGQRY,DGMIEN,.DGHL,DGDFN,.DGSEGERR,.DGQRYERR)
|
---|
98 | Q
|
---|
99 | ;
|
---|
100 | RCVORF(DGWRK,DGMIEN,DGHL) ;Receive ORF Message Types (ORF~R01)
|
---|
101 | ;
|
---|
102 | ; Input:
|
---|
103 | ; DGWRK - name of work global containing segments, ^TMP("DGROHL7",$J)
|
---|
104 | ; DGMIEN - IEN of message entry in file #773
|
---|
105 | ; DGHL - HL environment array
|
---|
106 | ;
|
---|
107 | ; Output:
|
---|
108 | ; none
|
---|
109 | ;
|
---|
110 | N DGDATA ;patient data array to upload
|
---|
111 | N DGERR ;parse error array
|
---|
112 | N DGORF ;ORF data array
|
---|
113 | ;
|
---|
114 | S DGDATA=$NA(^TMP("DGROFDA",$J)) K @DGDATA
|
---|
115 | D PARSORF^DGROHLQ3(DGWRK,.DGHL,.DGORF,.DGERR,.DGDATA)
|
---|
116 | ;
|
---|
117 | I $D(DGROVRCK) DO
|
---|
118 | . S:('$D(DGORF("PATCH"))) DGROVRCK=0
|
---|
119 | . I ($D(DGORF("PATCH"))),(+DGORF("PATCH")'=572) S DGROVRCK=0
|
---|
120 | ;
|
---|
121 | ;* QUIT conditions
|
---|
122 | Q:'$D(DGORF)
|
---|
123 | Q:(+$G(DGORF("DFN"))'>0)
|
---|
124 | Q:'$D(^DPT(DGORF("DFN"),0))
|
---|
125 | Q:('$D(DGORF("PATCH")))
|
---|
126 | Q:(+DGORF("PATCH")'=572)
|
---|
127 | ;
|
---|
128 | S DFN=DGORF("DFN")
|
---|
129 | ;
|
---|
130 | ;Get DFN at Last Site Treated
|
---|
131 | S LSTDFN=+$O(@DGDATA@(2,""))
|
---|
132 | ;CHECK BUSINESS RULES
|
---|
133 | D POW^DGRODEBR(DGDATA,DFN,LSTDFN) ;POW STATUS
|
---|
134 | D AO^DGRODEBR(DGDATA,DFN,LSTDFN) ;AGENT ORANGE EXPOSURE
|
---|
135 | D IR^DGRODEBR(DGDATA,DFN,LSTDFN) ;RADIATION EXPOSURE
|
---|
136 | D DOD^DGRODEBR(DGDATA,DFN,LSTDFN) ;DATE OF DEATH
|
---|
137 | D TA^DGRODEBR(DGDATA,LSTDFN) ;TEMPORARY ADDRESS
|
---|
138 | D SP^DGRODEBR(DGDATA,DFN,LSTDFN) ;SENSITIVE PATIENT
|
---|
139 | D CA^DGRODEBR(DGDATA,LSTDFN) ;CONFIDENTIAL ADDRESS
|
---|
140 | D PA^DGRODEBR(DGDATA,LSTDFN) ;PERMANENT ADDRESS
|
---|
141 | ;
|
---|
142 | ;File the data
|
---|
143 | D CONVFDA^DGROHLR1(DFN,DGDATA)
|
---|
144 | ;CLEAN UP
|
---|
145 | K @DGDATA
|
---|
146 | Q
|
---|