1 | PRCVRCG ;ISC-SF/GJW; Receive messages ; 5/24/05 10:56am
|
---|
2 | ;;5.1;IFCAP;**81**;Oct. 20, 2000
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | SUB(PRCVACT) ;
|
---|
6 | N PRCVFS,PRCVCS,PRCVRS,PRCVES,PRCVSS,HLQUIT,HLNODE
|
---|
7 | N PRCVMSG,PRCVMID,PRCVSEG,X,PRCVEVN,PRCVEVT,PRCVSTAT,PRCVCP
|
---|
8 | N HLQUIT,HLNODE,X1,MYERR,MYSEQ
|
---|
9 | S PRCVFS=$G(HL("FS"))
|
---|
10 | S PRCVCS=$E($G(HL("ECH")),1)
|
---|
11 | S PRCVRS=$E($G(HL("ECH")),2)
|
---|
12 | S PRCVES=$E($G(HL("ECH")),3)
|
---|
13 | S PRCVSS=$E($G(HL("ECH")),4)
|
---|
14 | S (HLQUIT,HLNODE)=0
|
---|
15 | ;Note: the following variable is KILLed to avoid certain
|
---|
16 | ;problems with $$REPROC^HLUTIL
|
---|
17 | K HLDONE1
|
---|
18 | S PRCVMSG=$G(HL("MTN"))
|
---|
19 | S PRCVMID=$G(HL("MID"))
|
---|
20 | I ((PRCVACT=1)&(PRCVMSG'="QSB"))!((PRCVACT=2)&(PRCVMSG'="QCN")) D Q
|
---|
21 | .;Error: wrong message type
|
---|
22 | .S MYERR("HL_CODE")="HL200"
|
---|
23 | .S MYERR("HL_TEXT")="Unsupported Message Type"
|
---|
24 | .S MYSEQ("FIELD_POS")=9 ;message type
|
---|
25 | .S MYSEQ("SEG_POS")=1
|
---|
26 | .D ACK("AR",PRCVMID,"MSH",.MYSEQ,.MYERR)
|
---|
27 | X HLNEXT I HLQUIT'>0 D Q
|
---|
28 | .;Error: MSH segment not found
|
---|
29 | .S MYERR("HL_CODE")="HL100"
|
---|
30 | .S MYERR("HL_TEXT")="Segment Sequence Error"
|
---|
31 | .S MYSEQ("SEG_POS")=1
|
---|
32 | .D ACK("AE",$G(PRCVMID),"MSH",1,.MYERR)
|
---|
33 | X HLNEXT I HLQUIT'>0 D Q
|
---|
34 | .;Error: no segments after MSH
|
---|
35 | S PRCVSEG=$$FLD^HLCSUTL(.HLNODE,1)
|
---|
36 | I ((PRCVACT=1)&(PRCVSEG'="QPD")) D Q
|
---|
37 | .;Error: QPD segment expected
|
---|
38 | .S MYERR("HL_CODE")="HL100"
|
---|
39 | .S MYERR("HL_TEXT")="Segment Sequence Error"
|
---|
40 | .S MYSEQ("SEG_POS")=2
|
---|
41 | .D ACK("AE",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
|
---|
42 | I ((PRCVACT=2)&(PRCVSEG'="QID")) D Q
|
---|
43 | .;Error: QID segment expected
|
---|
44 | .S MYERR("HL_CODE")="HL100"
|
---|
45 | .S MYERR("HL_TEXT")="Segment Sequence Error"
|
---|
46 | .S MYSEQ("SEG_POS")=2
|
---|
47 | .D ACK("AE",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
|
---|
48 | S X=$$FLD^HLCSUTL(.HLNODE,$S(PRCVACT=1:2,PRCVACT=2:3,1:999))
|
---|
49 | I (X="") D Q
|
---|
50 | .S MYERR("HL_CODE")="HL101"
|
---|
51 | .S MYERR("HL_TEXT")="Required field missing"
|
---|
52 | .S MYSEQ("SEG_POS")=2
|
---|
53 | .S MYSEQ("FIELD_POS")=$S(PRCVSEG="QPD":1,PRCVSEG="QID":2,1:"")
|
---|
54 | .D ACK("AE",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
|
---|
55 | S PRCVEVN=$P(X,PRCVCS,1)
|
---|
56 | S PRCVEVT=$P(X,PRCVCS,2)
|
---|
57 | I PRCVEVN'="Q16" D Q
|
---|
58 | .;Error: wrong event code
|
---|
59 | .S MYERR("HL_CODE")="HL207"
|
---|
60 | .S MYERR("HL_TEXT")="Application internal error"
|
---|
61 | .S MYSEQ("SEG_POS")=1
|
---|
62 | .S MYSEQ("FIELD_POS")=$S(PRCVACT=1:2,PRCVACT=1:2)
|
---|
63 | .S MYSEQ("CMP_POS")=1
|
---|
64 | .D ACK("AR",PRCVMID,$S(PRCVACT=1:"QPD",1:"QID"),.MYSEQ,.MYERR)
|
---|
65 | I PRCVEVT'="Fund_Subscription" D Q
|
---|
66 | .;Error: wrong event
|
---|
67 | .S MYERR("HL_CODE")="HL207"
|
---|
68 | .S MYERR("HL_TEXT")="Application internal error"
|
---|
69 | .S MYSEQ("SEG_POS")=2
|
---|
70 | .S MYSEQ("FIELD_POS")=$S(PRCVACT=1:2,PRCVACT=1:2)
|
---|
71 | .S MYSEQ("CMP_POS")=2
|
---|
72 | .D ACK("AR",PRCVMID,$S(PRCVACT=1:"QPD",1:"QID"),.MYSEQ,.MYERR)
|
---|
73 | I ((PRCVACT=2)&(PRCVEVT'="Fund_Subscription")) D Q
|
---|
74 | .;Error: wrong event
|
---|
75 | .S MYERR("HL_CODE")="HL207"
|
---|
76 | .S MYERR("HL_TEXT")="Application internal error"
|
---|
77 | .S MYSEQ("SEG_POS")=2
|
---|
78 | .S MYSEQ("FIELD_POS")=2
|
---|
79 | .S MYSEQ("CMP_POS")=2
|
---|
80 | .D ACK("AR",PRCVMID,"QID",.MYSEQ,.MYERR)
|
---|
81 | S X=$$FLD^HLCSUTL(.HLNODE,$S(PRCVACT=1:3,PRCVACT=2:2,1:999))
|
---|
82 | I (X="") D Q
|
---|
83 | .S MYERR("HL_CODE")="HL101"
|
---|
84 | .S MYERR("HL_TEXT")="Required field missing"
|
---|
85 | .S MYSEQ("SEG_POS")=2
|
---|
86 | .S MYSEQ("FIELD_POS")=$S(PRCVSEG="QPD":3,PRCVSEG="QID":2,1:"")
|
---|
87 | .D ACK("AE",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
|
---|
88 | S PRCVSTAT=$P(X,"-",1)
|
---|
89 | S PRCVCP=+$P(X,"-",2)
|
---|
90 | I '$D(^PRC(420,PRCVSTAT,0)) D Q
|
---|
91 | .;invalid station number
|
---|
92 | .S MYERR("HL_CODE")="HL204"
|
---|
93 | .S MYERR("HL_TEXT")="Unknown key identfier"
|
---|
94 | .S MYSEQ("SEG_POS")=2
|
---|
95 | .S MYSEQ("FIELD_POS")=$S(PRCVSEG="QPD":2,PRCVSEG="QID":1,1:"")
|
---|
96 | .D ACK("AR",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
|
---|
97 | I '$D(^PRC(420,PRCVSTAT,1,PRCVCP,0)) D Q
|
---|
98 | .;invalid station/FCP pair
|
---|
99 | .S MYERR("HL_CODE")="HL204"
|
---|
100 | .S MYERR("HL_TEXT")="Unknown key identfier"
|
---|
101 | .S MYSEQ("SEG_POS")=2
|
---|
102 | .S MYSEQ("FIELD_POS")=$S(PRCVSEG="QPD":2,PRCVSEG="QID":1,1:"")
|
---|
103 | .D ACK("AR",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
|
---|
104 | G:PRCVACT=2 DEL
|
---|
105 | S X1=$$ADDSUB^PRCVSUB(PRCVSTAT,PRCVCP,1)
|
---|
106 | I $P(X1,"^",1)["?" D Q
|
---|
107 | .;Duplicate
|
---|
108 | .;S MYERR("SEVERITY")="W"
|
---|
109 | .D ACK("AA",PRCVMID)
|
---|
110 | I $P(X1,"^",1)="E" D Q
|
---|
111 | .;Fileman generated error
|
---|
112 | .S MYERR("HL_CODE")="HL207"
|
---|
113 | .S MYERR("HL_TEXT")="Application internal error"
|
---|
114 | .S MYSEQ("SEG_POS")=2
|
---|
115 | .D ACK("AR",PRCVSEG,.MYSEQ,.MYERR)
|
---|
116 | G:PRCVACT=2 DONE ;end of message
|
---|
117 | X HLNEXT I HLQUIT'>0 D Q
|
---|
118 | .;Error: RCP segment expected
|
---|
119 | .S MYERR("HL_CODE")="HL100"
|
---|
120 | .S MYERR("HL_TEXT")="Segment sequence error"
|
---|
121 | .S MYSEQ("SEG_POS")=3
|
---|
122 | .D ACK("AE",PRCVMID,PRCVSEG,.MYSEQ,.MYERR)
|
---|
123 | G DONE
|
---|
124 | DEL ;
|
---|
125 | S X1=$$DELSUB^PRCVSUB(PRCVSTAT,+PRCVCP,1)
|
---|
126 | I X1["E" D Q
|
---|
127 | .;Error during Fileman call
|
---|
128 | .S MYERR("HL_CODE")="HL207"
|
---|
129 | .S MYERR("HL_TEXT")="Application internal error"
|
---|
130 | .S MYSEQ("SEG_POS")=1
|
---|
131 | .S MYSEQ("FIELD_POS")=1
|
---|
132 | .D ACK("AE",PRCVMID,"QID",.MYSEQ,.MYERR)
|
---|
133 | I X1'["@" D Q
|
---|
134 | .;Deletion error
|
---|
135 | .S MYERR("HL_CODE")="HL207"
|
---|
136 | .S MYERR("HL_TEXT")="Application internal error"
|
---|
137 | .S MYSEQ("SEG_POS")=1
|
---|
138 | .S MYSEQ("FIELD_POS")=1
|
---|
139 | .D ACK("AE",PRCVMID,"QID",.MYSEQ,.MYERR)
|
---|
140 | DONE ;
|
---|
141 | ;Success!
|
---|
142 | D ACK("AA",PRCVMID)
|
---|
143 | Q
|
---|
144 | ;
|
---|
145 | ACK(PRCVSTAT,PRCVOMID,PRCVSID,PRCVSEQ,PRCVERR) ;
|
---|
146 | N HLA,ERR,I,SEV,PRCVEID,PRCVAPP,PRCVEIDS,PRCVRES
|
---|
147 | ;Make sure the parameters are defined
|
---|
148 | S PRCVSTAT=$G(PRCVSTAT),PRCVOMID=$G(PRCVOMID),PRCVSID=$G(PRCVSID)
|
---|
149 | S HLA("HLA",1)="MSA"_PRCVFS_$G(PRCVSTAT)_PRCVFS_$G(PRCVOMID)
|
---|
150 | S SEV=$S($D(PRCVERR("SEVERITY")):$G(PRCVERR("SEVERITY")),1:"E")
|
---|
151 | ;set some variables
|
---|
152 | S PRCVEID=$G(HL("EID"))
|
---|
153 | S PRCVEIDS=$G(HL("EIDS"))
|
---|
154 | ;S PRCVAPP=$$FIND1^DIC(771,,"MX","PRCV_DYNAMED")
|
---|
155 | Q:(($L(PRCVEID)=0)!($L($G(HLMTIENS))=0)!($L(PRCVEIDS)=0))
|
---|
156 | S PRCVRES=""
|
---|
157 | S:PRCVSTAT="AA" HLA("HLA",1)=HLA("HLA",1)_PRCVFS_"OK"
|
---|
158 | D:$L(PRCVSID)>0
|
---|
159 | .S ERR="ERR"_PRCVFS_PRCVFS_PRCVSID_PRCVCS_$G(PRCVSEQ("SEG_POS"))
|
---|
160 | .S ERR=ERR_PRCVCS_$G(PRCVSEQ("FIELD_POS"))_PRCVFS
|
---|
161 | .;S ERR=ERR_PRCVCS_$G(PRCVSEQ("FIELD_POS"))_PRCVCS
|
---|
162 | .;S ERR=ERR_$G(PRCVSEQ("FIELD_REP"))_PRCVCS_$G(PRCVSEQ("CMP_POS"))
|
---|
163 | .;S ERR=ERR_PRCVCS_$G(PRCVSEQ("SUBCMP_POS"))_PRCVFS
|
---|
164 | .;S ERR=ERR_$G(PRCVSEQ("FIELD_REP"))_PRCVFS
|
---|
165 | .S ERR=ERR_$G(PRCVERR("HL_CODE"))_PRCVCS_$G(PRCVERR("HL_TEXT"))
|
---|
166 | .S ERR=ERR_PRCVCS_"0357"_PRCVFS_SEV_PRCVFS
|
---|
167 | .I $D(PRCVERR("APP",1)) D
|
---|
168 | ..;application error(s)
|
---|
169 | ..S ERR=ERR_$G(PRCVERR("APP",1,"CODE"))_PRCVCS_$G(PRCVERR("APP",1,"TEXT"))
|
---|
170 | ..S I=1
|
---|
171 | ..F S I=$O(PRCVERR("APP",I)) Q:((I="")!(I>10)) D
|
---|
172 | ...S ERR=ERR_PRCVRS
|
---|
173 | ...S ERR=ERR_$G(PRCVERR("APP",I,"CODE"))_PRCVCS
|
---|
174 | ...S ERR=ERR_$G(PRCVERR("APP",I,"TEXT"))
|
---|
175 | .S HLA("HLA",2)=ERR
|
---|
176 | D GENACK^HLMA1(PRCVEID,$G(HLMTIENS),PRCVEIDS,"LM",1,.PRCVRES)
|
---|
177 | Q
|
---|
178 | ;
|
---|
179 | PUBACK ;
|
---|
180 | N PRCVFS,PRCVCS,PRCVRS,PRCVES,PRCVSS,HLQUIT,HLNODE,X
|
---|
181 | N ATYPE,OMID,SEQ,ERR,I,X1,ECNT,RFAC
|
---|
182 | S PRCVFS=$G(HL("FS"))
|
---|
183 | S PRCVCS=$E($G(HL("ECH")),1)
|
---|
184 | S PRCVRS=$E($G(HL("ECH")),2)
|
---|
185 | S PRCVES=$E($G(HL("ECH")),3)
|
---|
186 | S PRCVSS=$E($G(HL("ECH")),4)
|
---|
187 | S (HLQUIT,HLNODE)=0
|
---|
188 | ;Note: the following variable is KILLed to avoid certain
|
---|
189 | ;problems with $$REPROC^HLUTIL
|
---|
190 | K HLDONE1
|
---|
191 | S PRCVMSG=$G(HL("MTN"))
|
---|
192 | S PRCVMID=$G(HL("MID"))
|
---|
193 | Q:HL("MTN")'="MFK"
|
---|
194 | X HLNEXT ;read MSH
|
---|
195 | I HLQUIT'>0 Q
|
---|
196 | S X=$$FLD^HLCSUTL(.HLNODE,1)
|
---|
197 | Q:X'="MSH"
|
---|
198 | S RFAC=$P($$FLD^HLCSUTL(.HLNODE,6),PRCVCS,1)
|
---|
199 | X HLNEXT ;read MSA
|
---|
200 | I HLQUIT'>0 Q
|
---|
201 | S X=$$FLD^HLCSUTL(.HLNODE,1)
|
---|
202 | Q:X'="MSA"
|
---|
203 | S ATYPE=$$FLD^HLCSUTL(.HLNODE,2)
|
---|
204 | ;No need to go further
|
---|
205 | Q
|
---|