1 | PRCVIBH ;WOIFO/DST - Issue Book Processing, from DynaMed to IFCAP ;7/26/05 17:10
|
---|
2 | ;;5.1;IFCAP;**81,86**;Oct 20, 2000
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ; IV - Internal Voucher, SV - Standard Voucher
|
---|
6 | Q
|
---|
7 | CRT ; Process Issue Book transactions sent from DynaMed to IFCAP
|
---|
8 | K HLERR
|
---|
9 | N %,PRCVDT,PRCVI,PRCVJ,PRCVK,PRCVIBF,PRCVSUB,PRCVSITE
|
---|
10 | D:'$D(U) DT^DICRW
|
---|
11 | D NOW^%DTC S PRCVDT=%
|
---|
12 | S PRCVSUB="PRCVFMS2;"_HL("MID")
|
---|
13 | K ^TMP(PRCVSUB),^TMP($J,"PRCVIB")
|
---|
14 | F PRCVI=1:1 X HLNEXT Q:HLQUIT'>0 D
|
---|
15 | . S ^TMP($J,"PRCVIB",PRCVI)=HLNODE,PRCVJ=0
|
---|
16 | . F S PRCVJ=$O(HLNODE(PRCVJ)) Q:'PRCVJ S ^TMP($J,"PRCVIB",PRCVI,PRCVJ)=HLNODE(PRCVJ)
|
---|
17 | . Q
|
---|
18 | ;
|
---|
19 | MAIN ; Main routine
|
---|
20 | ; Check HL7 message type and message event
|
---|
21 | ; PRCVEA - Error message array
|
---|
22 | ; PRCVTDT - Transaction Date
|
---|
23 | ; PRCVDAC - Document Action
|
---|
24 | N PRCVFS,PRCVRS,PRCVCS,PRCVES,PRCVSS,PRCVCC,PRCVSCC
|
---|
25 | N PRCVEA,PRCVTDT,PRCVBID,PRCVLID,PRCVND,PRCVSEG,PRCVY,X,X1,X2
|
---|
26 | ;
|
---|
27 | S PRCVK=0
|
---|
28 | S PRCVFS=$G(HL("FS")),PRCVCS=$E($G(HL("ECH"))),PRCVRS=$E($G(HL("ECH")),2),PRCVES=$E($G(HL("ECH")),U,3),PRCVSS=$E($G(HL("ECH")),U,4)
|
---|
29 | ;
|
---|
30 | HEADER I HL("MTN")'="DFT"!(HL("ETN")'="P03") D Q
|
---|
31 | . D ADDERR("PRCV1"_U_"Wrong Message or Event Type: "_HL("MTN")_U_HL("ETN"))
|
---|
32 | . D GENACK("AR",HL("MID"),PRCVDT,.PRCVEA)
|
---|
33 | . Q
|
---|
34 | ;
|
---|
35 | S X1=$P(PRCVDT,"."),X2=14 D C^%DTC
|
---|
36 | S ^TMP(PRCVSUB,$J,0)=X_U_$P(PRCVDT,".")_"^IB Sent from DynaMed to IFCAP"
|
---|
37 | ;
|
---|
38 | ; Check each segments - EVN,PID,FT1
|
---|
39 | ; PRCVTCD - Transaction Code - "IV" or "SV"
|
---|
40 | ; PRCVSTN - Station Number
|
---|
41 | ;
|
---|
42 | START N PREVSEG,PRCVSTN,PRCVDAC,PRCVTDT,PRCVTCD
|
---|
43 | S PRCVSITE=$$GET1^DIQ(4,$$KSP^XUPARAM("INST")_",",99)
|
---|
44 | S PREVSEG=""
|
---|
45 | S PRCVI=0
|
---|
46 | D NOW^%DTC S PRCVDT=%
|
---|
47 | F S PRCVI=$O(^TMP($J,"PRCVIB",PRCVI)) Q:'PRCVI D
|
---|
48 | . S PRCVND=$G(^TMP($J,"PRCVIB",PRCVI))
|
---|
49 | . S PRCVSEG=$P(PRCVND,PRCVFS)
|
---|
50 | . Q:PRCVSEG="MSH"!(PRCVSEG="")
|
---|
51 | . I $$CHKSEQ(PRCVSEG) K ^TMP($J,"PRCVIB") S PRCVI="" Q
|
---|
52 | . S PREVSEG=PRCVSEG
|
---|
53 | . D @PRCVSEG
|
---|
54 | . Q
|
---|
55 | I PRCVSEG'="FT1" D ADDERR("PRCV1"_U_"No Item line for this transaction.")
|
---|
56 | ;
|
---|
57 | ; If errored, send AE ACK, clean up and QUIT
|
---|
58 | ERR I $D(PRCVEA)!(PRCVTCD']"") D XTMP("AE"),FIN Q
|
---|
59 | OK ; Calling IFCAP and FMS routines for Issue Book and FMS update
|
---|
60 | ;
|
---|
61 | I PRCVTCD="SV" D
|
---|
62 | . I '$$ENT^PRCVFMS2(PRCVSUB) D
|
---|
63 | .. D ADDERR("PRCV3"_U_"Error in generating FMS Code Sheet.")
|
---|
64 | .. D XTMP("AE")
|
---|
65 | .. Q
|
---|
66 | . Q
|
---|
67 | I PRCVTCD="IV" D
|
---|
68 | . S PRCVIBF=$$INIT^PRCVIBF(PRCVSUB)
|
---|
69 | . ; PRCVIBF - return "IEN of 410^Error Code^Error Description"
|
---|
70 | . ; If errored, move ^TMP to ^XTMP and quit
|
---|
71 | . I '+PRCVIBF D Q
|
---|
72 | .. D ADDERR("PRCV3"_U_$P(PRCVIBF,U,2)_"-"_$P(PRCVIBF,U,3))
|
---|
73 | .. D XTMP("AE")
|
---|
74 | .. Q
|
---|
75 | . I '$$ENT^PRCVFMS1(PRCVSUB,+PRCVIBF) D
|
---|
76 | .. D ADDERR("PRCV3"_U_"Error in generating FMS Code Sheet.")
|
---|
77 | .. D XTMP("AE")
|
---|
78 | .. Q
|
---|
79 | . Q
|
---|
80 | ;
|
---|
81 | I '$D(PRCVEA) D GENACK("AA",HL("MID"),PRCVDT)
|
---|
82 | D FIN
|
---|
83 | Q
|
---|
84 | ;
|
---|
85 | CHKSEQ(SEG) ; SEG - Segment name
|
---|
86 | N SEGERR,PREV1,PREV2,PRCVER1
|
---|
87 | S SEGERR=0
|
---|
88 | S PREV1=$P($P($T(@(SEG_1)),";;",2),U)
|
---|
89 | S PREV2=$P($P($T(@(SEG_1)),";;",2),U,2)
|
---|
90 | I PREVSEG=PREV1!(PREVSEG=PREV2) Q SEGERR
|
---|
91 | S SEGERR=1
|
---|
92 | S PRCVER1=$P($P($T(@(SEG_1)),";;",2),U,4)_SEG
|
---|
93 | D ADDERR("PRCV1"_U_PRCVER1)
|
---|
94 | Q SEGERR
|
---|
95 | ;
|
---|
96 | EVN ; Process EVN segment
|
---|
97 | ;
|
---|
98 | S PRCVSTN=$P(PRCVND,PRCVFS,8)
|
---|
99 | I PRCVSTN']"" D ADDERR("PRCV2"_U_"Station Number is missing.",8)
|
---|
100 | I PRCVSTN'=PRCVSITE D ADDERR("PRCV2"_U_"Invalid Station Number: "_PRCVSTN,8)
|
---|
101 | S PRCVDAC=$P(PRCVND,PRCVFS,5)
|
---|
102 | I "EMX"'[PRCVDAC!(PRCVDAC']"") D ADDERR("PRCV2"_U_"Invalid Document Action: "_PRCVDAC,5)
|
---|
103 | S PRCVTDT=$P(PRCVND,PRCVFS,3)
|
---|
104 | I PRCVTDT']"" D ADDERR("PRCV2"_U_"Transaction Date is missing.",3) Q
|
---|
105 | S PRCVTDT=$$HL7TFM^XLFDT(PRCVTDT,"L",0)
|
---|
106 | I $P(PRCVTDT,".")>PRCVDT D ADDERR("PRCV2"_U_"Invalid Transaction Date: "_PRCVTDT,3)
|
---|
107 | Q
|
---|
108 | ;
|
---|
109 | PID ; Process PID segment
|
---|
110 | ;
|
---|
111 | N PRCVDUZ,PRCVFCP1,PRCVFCP2,PRCVBOC,PRCVTERM
|
---|
112 | ;
|
---|
113 | S PRCVBID=$P(PRCVND,PRCVFS,4)
|
---|
114 | I PRCVBID']"" D ADDERR("PRCV2"_U_"Batch ID is missing.",4)
|
---|
115 | S PRCVTCD=$P(PRCVND,PRCVFS,5)
|
---|
116 | I PRCVTCD']"" D ADDERR("PRCV2"_U_"Transaction Code is missing.",5)
|
---|
117 | I PRCVTCD'="IV",(PRCVTCD'="SV") D ADDERR("PRCV2"_U_"Invalid Transaction Code: "_PRCVTCD,5)
|
---|
118 | ; Check User ID, Termination Date and is authorized FCP user
|
---|
119 | S PRCVDUZ=$P(PRCVND,PRCVFS,3)
|
---|
120 | I PRCVDUZ']"" D ADDERR("PRCV2"_U_"User ID is missing.",3)
|
---|
121 | I PRCVDUZ]"" D
|
---|
122 | . I '$$FIND1^DIC(200,"","","`"_PRCVDUZ,"","","PRCVERR") D ADDERR("PRCV2"_U_"Invalid User ID: "_PRCVDUZ,3)
|
---|
123 | . E D
|
---|
124 | .. S PRCVTERM=$$GET1^DIQ(200,PRCVDUZ_",",9.2,"I")
|
---|
125 | .. I +PRCVTERM>0,(PRCVTERM<DT) D ADDERR("PRCV2"_U_"Invalid User ID: "_PRCVDUZ,3)
|
---|
126 | .. Q
|
---|
127 | .Q
|
---|
128 | S PRCVFCP1=$P(PRCVND,PRCVFS,22)
|
---|
129 | I PRCVFCP1']"" D ADDERR("PRCV2"_U_$S(PRCVTCD="IV":"Seller's",1:"Warehouse's")_" Fund Control Point is missing.",22)
|
---|
130 | I '$D(^PRC(420,PRCVSITE,1,+PRCVFCP1)) D ADDERR("PRCV2"_U_"Invalid "_$S(PRCVTCD="IV":"Seller's",1:"Warehouse's")_" Fund Control Point.",22)
|
---|
131 | I $D(^PRC(420,PRCVSITE,1,+PRCVFCP1)),$P(^PRC(420,PRCVSITE,1,+PRCVFCP1,0),U,19) D ADDERR("PRCV2"_U_"Inactivated "_$S(PRCVTCD="IV":"Seller's",1:"Warehouse's")_" Fund Control Point.",22)
|
---|
132 | I PRCVTCD="IV" D
|
---|
133 | . S PRCVFCP2=$P(PRCVND,PRCVFS,24)
|
---|
134 | . I PRCVFCP2']"" D ADDERR("PRCV2"_U_"Buyer's Fund Control Point is missing.",24)
|
---|
135 | . E D
|
---|
136 | .. I '$D(^PRC(420,PRCVSITE,1,+PRCVFCP2)) D ADDERR("PRCV2"_U_"Invalid Buyer's Fund Control Point.",24)
|
---|
137 | .. I $D(^PRC(420,PRCVSITE,1,+PRCVFCP2)),$P(^PRC(420,PRCVSITE,1,+PRCVFCP2,0),U,19) D ADDERR("PRCV2"_U_"Inactivated Buyer's Fund Control Point.",24)
|
---|
138 | .. Q
|
---|
139 | . S PRCVCC=$P(PRCVND,PRCVFS,19)
|
---|
140 | . I PRCVCC']"" D ADDERR("PRCV2"_U_"Buyer's Cost Center is missing.",19)
|
---|
141 | . S PRCVSCC=$P(PRCVND,PRCVFS,20)
|
---|
142 | . I PRCVSCC']"" D ADDERR("PRCV2"_U_"Buyer's Sub-cost Center is missing.",20)
|
---|
143 | . I PRCVCC,(PRCVSCC'="") D
|
---|
144 | .. I '$D(^PRCD(420.1,PRCVCC_PRCVSCC)) D ADDERR("PRCV2"_U_"Invalid Buyer's Cost Center. Cost Center not defined in Cost Center file 420.1",19) Q
|
---|
145 | .. I '$D(^PRC(420,PRCVSTN,1,+PRCVFCP2,2,PRCVCC_PRCVSCC)) D ADDERR("PRCV2"_U_"Invalid Buyer's Cost Center. Cost Center not used for this Fund Control Point.",19)
|
---|
146 | .. Q
|
---|
147 | . Q
|
---|
148 | I PRCVDUZ]"",('$D(^PRC(420,PRCVSTN,1,$S(PRCVTCD="IV":+PRCVFCP2,1:+PRCVFCP1),1,PRCVDUZ))) D ADDERR("PRCV2"_U_"Unauthorized User for this FCP.",3)
|
---|
149 | S ^TMP(PRCVSUB,$J,1)=PRCVSTN_U_PRCVBID_U_PRCVTCD_U_PRCVDAC_U_PRCVTDT_U_PRCVDUZ
|
---|
150 | S ^TMP(PRCVSUB,$J,2)=PRCVFCP1_U_$G(PRCVFCP2)_U_$G(PRCVCC)_U_$G(PRCVSCC)
|
---|
151 | Q
|
---|
152 | ;
|
---|
153 | FT1 ; Process FT1 segment
|
---|
154 | N PRCVACC,PRCVBOC,PRCVINV,PRCVSAL,PRCVRCD
|
---|
155 | ;
|
---|
156 | S PRCVLID=$P(PRCVND,PRCVFS,3)
|
---|
157 | I 'PRCVLID D ADDERR("PRCV2"_U_"Line ID is missing.",3)
|
---|
158 | S PRCVACC=$P(PRCVND,PRCVFS,9)
|
---|
159 | I 'PRCVACC D ADDERR("PRCV2"_U_"Account Code is missing.",9)
|
---|
160 | I PRCVACC,((PRCVACC'?1N)!("12368"'[PRCVACC)) D ADDERR("PRCV2"_U_"Invalid Account Code: "_PRCVACC,9)
|
---|
161 | I PRCVTCD="IV" D
|
---|
162 | . S PRCVBOC=$P(PRCVND,PRCVFS,10)
|
---|
163 | . I PRCVBOC=2696 D ADDERR("PRCV2"_U_"Invalid Buyer's Budget Object Code: "_PRCVBOC,10)
|
---|
164 | . I 'PRCVBOC D ADDERR("PRCV2"_U_"Budget Object Code is missing.",10)
|
---|
165 | . I '$D(^PRCD(420.1,PRCVCC_PRCVSCC,1,PRCVBOC)) D ADDERR("PRCV2"_U_"Invalid Budget Object Code for this Cost Center: "_PRCVBOC,10)
|
---|
166 | . I $P($G(^PRCD(420.2,PRCVBOC,0)),"^",2)=1 D ADDERR("PRCV2"_U_"Inactivated Budget Object Code: "_PRCVBOC,10)
|
---|
167 | . S PRCVSAL=$P(PRCVND,PRCVFS,13)
|
---|
168 | . I 'PRCVSAL D ADDERR("PRCV2"_U_"Sale Value is missing.",13)
|
---|
169 | . Q
|
---|
170 | S PRCVINV=$P(PRCVND,PRCVFS,12)
|
---|
171 | I 'PRCVINV D ADDERR("PRCV2"_U_"Inventory Value is missing.",12)
|
---|
172 | I PRCVTCD="SV" D
|
---|
173 | . S PRCVRCD=$P(PRCVND,PRCVFS,8)
|
---|
174 | . I PRCVRCD']"" D ADDERR("PRCV2"_U_"Reason Code is missing.",8)
|
---|
175 | . I PRCVRCD'?1N!(PRCVRCD<1)!(PRCVRCD>7) D ADDERR("PRCV2"_U_"Invalid Reason Code: "_PRCVRCD,8)
|
---|
176 | . Q
|
---|
177 | S ^TMP(PRCVSUB,$J,3,0)=PRCVLID
|
---|
178 | S ^TMP(PRCVSUB,$J,3,PRCVLID,0)=PRCVLID_U_PRCVACC_U_$G(PRCVBOC)_U_PRCVINV_U_$G(PRCVSAL)_U_$G(PRCVRCD)
|
---|
179 | Q
|
---|
180 | ;
|
---|
181 | GENACK(PRCVAC,PRCVMCID,PRCVDT,PRCVOCCR) ;
|
---|
182 | ;
|
---|
183 | ;PRCVAC - Acknowledgment Code
|
---|
184 | ;PRCVMCID - Message Control ID which you're acknowledging
|
---|
185 | ;PRCVDT - Date/Time of Transaction
|
---|
186 | ;PRCVOCCR - Error message array
|
---|
187 | ;
|
---|
188 | N PRCVFS,PRCVCNT,PRCVCS,PRCVI,PRCVJ,PRCVND,PRCVRES
|
---|
189 | ;
|
---|
190 | S PRCVFS=$G(HL("FS")),PRCVCS=$E($G(HL("ECH"))),PRCVRS=$E($G(HL("ECH")),2),PRCVES=$E($G(HL("ECH")),U,3),PRCVSS=$E($G(HL("ECH")),U,4)
|
---|
191 | S PRCVRES="",PRCVJ=0,PRCVI=1
|
---|
192 | ;
|
---|
193 | ; MSA Segment
|
---|
194 | S HLA("HLA",1)="MSA"_PRCVFS_PRCVAC_PRCVFS_PRCVMCID_PRCVFS_$G(PRCVBID)
|
---|
195 | ;
|
---|
196 | ; ERR Segment
|
---|
197 | I $G(PRCVOCCR)'="" D
|
---|
198 | . F S PRCVJ=$O(PRCVOCCR(PRCVJ)) Q:'PRCVJ D
|
---|
199 | .. S PRCVI=PRCVI+1
|
---|
200 | .. S HLA("HLA",PRCVI)="ERR"_PRCVFS_PRCVOCCR(PRCVJ)
|
---|
201 | .. Q
|
---|
202 | . Q
|
---|
203 | ;
|
---|
204 | D GENACK^HLMA1(HL("EID"),$G(HLMTIENS),HL("EIDS"),"LM",1,PRCVRES)
|
---|
205 | I $P($G(PRCVRES),U,2) D
|
---|
206 | . K XMB,XMZ
|
---|
207 | . S XMB="PRCV HL7 ERROR"
|
---|
208 | . S XMB(1)="PRCVIB"
|
---|
209 | . S XMB(2)="Application Acknowledgement"
|
---|
210 | . S XMB(3)="PRCV_IFCAP_06_SU_IB_PROC"
|
---|
211 | . S XMB(4)=PRCVRES
|
---|
212 | . S XMDUZ="PRCV HL7 Generator"
|
---|
213 | . D ^XMB
|
---|
214 | . K XMB,XMDUZ,XMZ
|
---|
215 | . Q
|
---|
216 | ;
|
---|
217 | K HLA("HLA"),^TMP("HLA",$J)
|
---|
218 | K PRCVAC,X
|
---|
219 | Q
|
---|
220 | ;
|
---|
221 | ADDERR(PRCVER,PRCVFD) ;
|
---|
222 | ; PRCVER - Error message
|
---|
223 | ; PRCVFD - Field number, if any
|
---|
224 | ;
|
---|
225 | S PRCVK=PRCVK+1
|
---|
226 | S PRCVEA=PRCVK
|
---|
227 | S:'$G(PRCVLID) PRCVLID=1
|
---|
228 | S:'$G(PRCVFD) PRCVLID="",PRCVFD=""
|
---|
229 | S PRCVEA(PRCVK)=PRCVFS_$G(PRCVSEG)_U_PRCVLID_U_PRCVFD_PRCVFS_"207^Application Internal Error^HL70357"_PRCVFS_"E"_PRCVFS_PRCVER_PRCVFS_PRCVLID
|
---|
230 | Q
|
---|
231 | ;
|
---|
232 | XTMP(AC) ; Move ^TMP(PRCVSUB,$j) to ^XTMP
|
---|
233 | ;
|
---|
234 | ; AC - Acknowledgement
|
---|
235 | ;
|
---|
236 | S ^XTMP(PRCVSUB,0)=$$FMADD^XLFDT(PRCVDT,14)_U_PRCVDT_U_"IB Data from DynaMed with error"
|
---|
237 | F PRCVI=1,2 S ^XTMP(PRCVSUB,PRCVI)=^TMP(PRCVSUB,$J,PRCVI)
|
---|
238 | I $D(^TMP(PRCVSUB,$J,3,0)) D
|
---|
239 | . S ^XTMP(PRCVSUB,3,0)=^TMP(PRCVSUB,$J,3,0)
|
---|
240 | . S PRCVI=0
|
---|
241 | . F S PRCVI=$O(^TMP(PRCVSUB,$J,3,PRCVI)) Q:'PRCVI D
|
---|
242 | .. S ^XTMP(PRCVSUB,3,PRCVI)=^TMP(PRCVSUB,$J,3,PRCVI,0)
|
---|
243 | .. Q
|
---|
244 | D GENACK(AC,HL("MID"),PRCVDT,.PRCVEA)
|
---|
245 | S ^XTMP(PRCVSUB,4,0)=PRCVEA
|
---|
246 | S PRCVI=0
|
---|
247 | F S PRCVI=$O(PRCVEA(PRCVI)) Q:'PRCVI D
|
---|
248 | . S ^XTMP(PRCVSUB,4,PRCVI)=PRCVEA(PRCVI)
|
---|
249 | . Q
|
---|
250 | Q
|
---|
251 | ;
|
---|
252 | FIN ; Clean up
|
---|
253 | ;
|
---|
254 | ; K ^TMP($J,"PRCVIB")
|
---|
255 | ; K ^TMP(PRCVSUB,$J)
|
---|
256 | K PRCVEA
|
---|
257 | Q
|
---|
258 | ;
|
---|
259 | TXT ;
|
---|
260 | EVN1 ;;^EVN^^Missing segment ^100^Missing line item info.
|
---|
261 | PID1 ;;EVN^^^Missing segment ^100^Missing line item info.
|
---|
262 | FT11 ;;PID^FT1^^Missing segment ^100^Missing line item info.
|
---|