1 | HLCSHDR3 ;SFIRMFO/LJA - Reset MSH Segment Fields ;03/24/04 11:19
|
---|
2 | ;;1.6;HEALTH LEVEL SEVEN;**93,108**;Oct 13, 1995
|
---|
3 | ;
|
---|
4 | ; Reset RECEIVING APPLICATION and RECEIVING SITE of MSH segment - HL*1.6*93
|
---|
5 | ;
|
---|
6 | RESET ; Called from HEADER^HLCSHDR1 & BHSHDR^HLCSHDR1, which is called by
|
---|
7 | ; GENERATE^HLMA & GENACK^HLMA1.
|
---|
8 | N MTIEN
|
---|
9 | ;
|
---|
10 | ; Even if set already, set 772 IEN again...
|
---|
11 | S MTIEN=+$G(^HLMA(+$G(IEN),0)) QUIT:$G(^HL(772,+MTIEN,0))']"" ;->
|
---|
12 | ;
|
---|
13 | ; Different variables used for Event Protocol
|
---|
14 | D MSHCHG($G(HLEID),$S($G(EIDS)>0:+EIDS,1:+$G(HLEIDS)),$G(MTIEN),$G(IEN),.SERAPP,.SERFAC,.CLNTAPP,.CLNTFAC,.HLP)
|
---|
15 | ;
|
---|
16 | QUIT
|
---|
17 | ;
|
---|
18 | MSHCHG(HLEID,EIDS,MTIEN,IEN,SERAPP,SERFAC,CLNTAPP,CLNTFAC,HLPARR) ; The parameters
|
---|
19 | ; are the required input variables. Call here "by reference".
|
---|
20 | ;
|
---|
21 | ; HLEID=Event driver protocol IEN
|
---|
22 | ; EIDS=Subscriber protocol IEN
|
---|
23 | ; MTIEN=772 IEN
|
---|
24 | ; IEN=773 IEN
|
---|
25 | ; SERAPP=Sending App text
|
---|
26 | ; SERFAC=Sending Fac text
|
---|
27 | ;CLNTAPP=Rec (client) app text
|
---|
28 | ;CLNTFAC=Rec (client) fac text
|
---|
29 | ; HLP()=HLP("SUBSCRIBER") array
|
---|
30 | ;
|
---|
31 | ; The MSH segment is built (usually) in HLCSHDR1. Immediately before
|
---|
32 | ; using the existing local variables to concatenate them together into
|
---|
33 | ; the MSH segment, HLCSHDR1 calls here to see if some of the local
|
---|
34 | ; variables should be reset.
|
---|
35 | ;
|
---|
36 | ; Resetting the local variables used in creating the MSH segment
|
---|
37 | ; gives those creating HL7 messages control over the local variables
|
---|
38 | ; that can be changed below.
|
---|
39 | ;
|
---|
40 | ; There are rules that govern what the creator of the MSH segment
|
---|
41 | ; can change:
|
---|
42 | ;
|
---|
43 | ; Rule #1: The SENDING APPLICATION can be changed. Var=HLMSHSAN
|
---|
44 | ; Rule #2: The SENDING FACILITY can be changed. Var=HLMSHSFN
|
---|
45 | ; Rule #3: The RECEIVING APPLICATION can be changed. Var=HLMSHRAN
|
---|
46 | ; Rule #4: The RECEIVING FACILITY can be changed. Var=HLMSHRFN
|
---|
47 | ; Rule #5: No other fields in the MSH segment can be changed.
|
---|
48 | ;
|
---|
49 | ; If the passed in HLP() array entry used to reset the above four
|
---|
50 | ; fields holds the text used, the variables above will be reset.
|
---|
51 | ; If M code is used, the M code itself is responsible for setting
|
---|
52 | ; these specific local variables.
|
---|
53 | ;
|
---|
54 | ; The following local variables are created and made available for
|
---|
55 | ; use by M code:
|
---|
56 | ;
|
---|
57 | ; Protocol, Event: HLMSHPRE (IEN^NAME)
|
---|
58 | ; Protocol, Subscriber: HLMSHPRS (IEN^NAME)
|
---|
59 | ;
|
---|
60 | ; HL Message Text file (#772) IEN: HLMSH772 (IEN)
|
---|
61 | ; HL Message Admin file (#773) IEN: HLMSH773 (IEN)
|
---|
62 | ;
|
---|
63 | ; Sending Application, Original: HLMSHSAO (SERAPP)
|
---|
64 | ; Sending Application, New: HLMSHSAN
|
---|
65 | ; Sending Facility, Original: HLMSHSFO (SERFAC)
|
---|
66 | ; Sending Facility, New: HLMSHSFN
|
---|
67 | ; Receiving Application, Original: HLMSHRAO (CLNTAPP)
|
---|
68 | ; Receiving Application, New: HLMSHRAN
|
---|
69 | ; Receiving Facility, Original: HLMSHRFO (CLNTFAC)
|
---|
70 | ; Receiving Facility, New: HLMSHRFN
|
---|
71 | ;
|
---|
72 | ; M Code SUBROUTINE: HLMSHTAG
|
---|
73 | ; M Code ROUTINE: HLMSHRTN
|
---|
74 | ;
|
---|
75 | ; See the documentation in patch HL*1.6*93 in the Forum patch module
|
---|
76 | ; for additional information.
|
---|
77 | ;
|
---|
78 | ; CLIENT -- req
|
---|
79 | ;
|
---|
80 | ; HLMSH-namespaced variables created below
|
---|
81 | N HLDEBUG,HLMSH101,HLMSH31,HLMSH31C,HLMSH32,HLMSH32C
|
---|
82 | N HLMSH33,HLMSH33C,HLMSH34,HLMSH34C,HLMSH772,HLMSH773,HLMSH91
|
---|
83 | N HLMSHAN,HLMSHFN,HLMSHPRE,HLMSHPRS
|
---|
84 | N HLMSHRTN,HLMSHRAN,HLMSHRAO,HLMSHRFN
|
---|
85 | N HLMSHRFO,HLMSHSAN,HLMSHSAO,HLMSHSFN,HLMSHSFO
|
---|
86 | N HLMSHPRO,HLMSHREF,HLMSHSUB,HLMSHTAG
|
---|
87 | ;
|
---|
88 | ; Non-HLMSH-namespaced variables created below
|
---|
89 | N HLPWAY,HLRAN,HLRFN,HLSAN,HLSFN,HLTYPE
|
---|
90 | ;
|
---|
91 | ;
|
---|
92 | ; Set up variables pass #1...
|
---|
93 | S (HLMSH31,HLMSH32,HLMSH33,HLMSH34)=""
|
---|
94 | S (HLMSH31C,HLMSH32C,HLMSH33C,HLMSH34C)=""
|
---|
95 | S HLMSHPRE=$G(HLEID)_U_$P($G(^ORD(101,+$G(HLEID),0)),U) ; Event 101
|
---|
96 | S HLMSHPRS=$G(EIDS)_U_$P($G(^ORD(101,+$G(EIDS),0)),U) ; Sub 101
|
---|
97 | S HLMSH772=$G(MTIEN)
|
---|
98 | S HLMSH773=$G(IEN) QUIT:'$D(^HLMA(+HLMSH773,0)) ;->
|
---|
99 | ;
|
---|
100 | ; Get passed-in-by-reference HLP("SUBSCRIBER") data into variable...
|
---|
101 | S HLMSHPRO=$$HLMSHPRO QUIT:HLMSHPRO']"" ;->
|
---|
102 | ;
|
---|
103 | ; Should DEBUG data be stored? (This can be overwritten in $$HLMSHPRO)
|
---|
104 | I $G(HLDEBUG)']"" S HLDEBUG=$P($P(HLMSHPRO,"~",2),U,8)
|
---|
105 | ; HLDEBUG might be already set in $$HLMSHPRO
|
---|
106 | S HLDEBUG=$TR(HLDEBUG,"- /",U) ; Change delimiters to ^
|
---|
107 | ;
|
---|
108 | ; HLDEBUG (#1-#2-#3) Explanation...
|
---|
109 | ; -- #1 can be 0 (NO) or 1 (YES) for whether ^HLMA(#,90) data stored
|
---|
110 | ; -- #2 can be 0 or 1 for whether ^HLMA(#,91) data should be stored
|
---|
111 | ; -- #3 can be 0 or 1 or 2 for what type of ^XTMP data should be stored
|
---|
112 | ; -- Data is stored in ^XTMP("HLCSHDR3 "_IEN773)
|
---|
113 | ; -- 0 = No XTMP data should be stored
|
---|
114 | ; -- 1 = Store only SOME of the data
|
---|
115 | ; -- 2 = Store ALL variable data
|
---|
116 | ;
|
---|
117 | ; Store HLP("SUBSCRIBER"[,#]) in ^HLMA(#,90)
|
---|
118 | I $P(HLDEBUG,U)=1 D
|
---|
119 | . S X=$P(HLMSHPRO,"~",2) I X]"" S ^HLMA(+HLMSH773,90)=X
|
---|
120 | ;
|
---|
121 | ; Found by general HLP("SUBSCRIBER") or specific HLP("SUBSCRIBER",#) entry?
|
---|
122 | ; patch HL*1.6*108 start
|
---|
123 | S HLPWAY=$P(HLMSHPRO,"~"),X=$L(HLMSHPRO,"~"),HLMSHREF=$P(HLMSHPRO,"~",+X),HLMSHPRO=$P(HLMSHPRO,"~",+2,+X-1)
|
---|
124 | ; Above line modified by LJA - 3/18/04 Original line shown below.
|
---|
125 | ; S HLPWAY=$P(HLMSHPRO,"~"),HLMSHREF=$P(HLMSHPRO,"~",3),HLMSHPRO=$P(HLMSHPRO,"~",2)
|
---|
126 | ; patch HL*1.6*108 end
|
---|
127 | ;
|
---|
128 | ; Set up variables pass #2...
|
---|
129 | S HLMSHSAO=$G(SERAPP),(HLSAN,HLMSHSAN)=$P(HLMSHPRO,U,2) ; Send App
|
---|
130 | S HLMSHSFO=$G(SERFAC),(HLSFN,HLMSHSFN)=$P(HLMSHPRO,U,3) ; Send Fac
|
---|
131 | S HLMSHRAO=$G(CLNTAPP),(HLRAN,HLMSHRAN)=$P(HLMSHPRO,U,4) ; Rec App
|
---|
132 | S HLMSHRFO=$G(CLNTFAC),(HLRFN,HLMSHRFN)=$P(HLMSHPRO,U,5) ; Rec Fac
|
---|
133 | ;
|
---|
134 | ; If there's an Xecution routine, do now...
|
---|
135 | S HLMSHTAG=$P(HLMSHPRO,U,6),HLMSHRTN=$P(HLMSHPRO,U,7)
|
---|
136 | I HLMSHTAG]"",HLMSHRTN]"" D @HLMSHTAG^@HLMSHRTN
|
---|
137 | I HLMSHTAG']"",HLMSHRTN]"" D ^@HLMSHRTN
|
---|
138 | ;
|
---|
139 | ; Start work for ^HLMA(#,91) node...
|
---|
140 | S HLMSH91="" ; HLMSH91 is the data that will be stored in ^(91)
|
---|
141 | I SERAPP'=HLMSHSAN D SET91M(1,SERAPP,HLSAN,HLMSHSAN) ; Reset by M code?
|
---|
142 | I SERFAC'=HLMSHSFN D SET91M(3,SERFAC,HLSFN,HLMSHSFN)
|
---|
143 | I CLNTAPP'=HLMSHRAN D SET91M(5,CLNTAPP,HLRAN,HLMSHRAN)
|
---|
144 | I CLNTFAC'=HLMSHRFN D SET91M(7,CLNTFAC,HLRFN,HLMSHRFN)
|
---|
145 | ;
|
---|
146 | ; The real resetting of MSH segment variables work is done here...
|
---|
147 | D SET^HLCSHDR4(HLMSHSAN,"SERAPP",1) ; Update SERAPP if different, and DATA too...
|
---|
148 | D SET^HLCSHDR4(HLMSHSFN,"SERFAC",3) ; Etc
|
---|
149 | D SET^HLCSHDR4(HLMSHRAN,"CLNTAPP",5) ; Etc
|
---|
150 | D SET^HLCSHDR4(HLMSHRFN,"CLNTFAC",7) ; Etc
|
---|
151 | ;
|
---|
152 | ; Set ^HLMA(#,91) node if overwrites occurred...
|
---|
153 | I HLMSH91]"" S ^HLMA(+HLMSH773,91)=HLMSH91
|
---|
154 | ;
|
---|
155 | ; If debugging, record pre variable view...
|
---|
156 | D DEBUG^HLCSHDR4($P(HLDEBUG,U,3))
|
---|
157 | ;
|
---|
158 | QUIT
|
---|
159 | ;
|
---|
160 | SET91M(PCE,MSH,PREM,POSTM) ; If M code re/set the MSH field, record...
|
---|
161 | QUIT:PREM=POSTM ;-> M code did not change anything...
|
---|
162 | S $P(HLMSH91,U,PCE)=MSH ; original (pre-overwrite) value
|
---|
163 | S $P(HLMSH91,U,PCE+1)="M" ; Overwrite source (A/M)
|
---|
164 | QUIT
|
---|
165 | ;
|
---|
166 | HLMSHPRO() ; Determines whether to use the generic HLP("SUBSCRIBER") data,
|
---|
167 | ; or instead - if existent - the HLP("SUBSCRIBER",#)=SUB PROTOCOL^... data
|
---|
168 | ;CLIENT -- req
|
---|
169 | N HLD,HLFIND,HLI,HLMSHREF,HLMSHSUB,HLX
|
---|
170 | ;
|
---|
171 | ; Get the default information...
|
---|
172 | S HLMSHSUB=$G(HLP("SUBSCRIBER")),HLMSHREF=999
|
---|
173 | ;
|
---|
174 | ; Overwrite HLMSHSUB if found...
|
---|
175 | S HLI=0,HLFIND=""
|
---|
176 | F S HLI=$O(HLP("SUBSCRIBER",HLI)) Q:HLI'>0!(HLFIND]"") D
|
---|
177 | . S HLD=$G(HLP("SUBSCRIBER",+HLI)) QUIT:HLD']"" ;->
|
---|
178 | . S HLD=$P(HLD,U) QUIT:HLD']"" ;->
|
---|
179 | . ; If passed name..
|
---|
180 | . I HLD'=+HLD S HLD=$$FIND101(HLD)
|
---|
181 | . ; Must have IEN by now...
|
---|
182 | . QUIT:+HLD'=+HLMSHPRS ;-> Not for right subscriber protocol
|
---|
183 | . S HLFIND=HLP("SUBSCRIBER",+HLI),HLMSHREF=+HLI
|
---|
184 | ;
|
---|
185 | ; Backdoor overwrite of HLDEBUG value...
|
---|
186 | ; - This is a very important back door!! Even if applications
|
---|
187 | ; - aren't logging debug data, it can be turned on by setting
|
---|
188 | ; - ^XTMP("HLCSHDR3 DEBUG","DEBUG") or ^XTMP("HLCSHDR3 DEBUG","DEBUG",SUB-101)
|
---|
189 | ; If the GENERAL entry exists, set HLDEBUG. Might be written next line though
|
---|
190 | S HLX=$G(^XTMP("HLCSHDR3 DEBUG","DEBUG")) I HLX]"" S HLDEBUG=HLX
|
---|
191 | ; If a SPECIFIC entry found, reset HLDEBUG to it...
|
---|
192 | S HLX=$G(^XTMP("HLCSHDR3 DEBUG","DEBUG",+HLFIND)) I HLX]"" S HLDEBUG=HLX
|
---|
193 | ;
|
---|
194 | QUIT $S(HLFIND]"":"S~"_HLFIND_"~"_HLMSHREF,HLMSHSUB]"":"G~"_HLMSHSUB_"~"_HLMSHREF,1:"")
|
---|
195 | ;
|
---|
196 | FIND101(PROTNM) ; Find 101 entry...
|
---|
197 | N D,DIC,X,Y
|
---|
198 | S DIC="^ORD(101,",DIC(0)="MQ",D="B",X=PROTNM
|
---|
199 | D MIX^DIC1
|
---|
200 | QUIT $S(Y>0:+Y,1:"")
|
---|
201 | ;
|
---|
202 | SHOW773(IEN773) ; Show reset info from 773 entry...
|
---|
203 | QUIT
|
---|
204 | ;
|
---|
205 | EOR ;HLCSHDR3 - Reset MSH Segment Fields ;9/12/02 11:50
|
---|