1 | PRCVRC1 ;WOIFO/BMM - silently build RIL for DynaMed ; 3/24/05 2:43pm
|
---|
2 | V ;;5.1;IFCAP;**81**;Oct 20, 2000
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ;^XTMP format for incoming DM data is set:
|
---|
6 | ;^XTMP("PRCVRE*ID",0)=termination date^entry date^ Transmit message
|
---|
7 | ;to DynaMed for updates^date/time of this XTMP node built (debugging)
|
---|
8 | ;^XTMP("PRCVRE*ID",0,"ERR")=Error message flag
|
---|
9 | ;^XTMP("PRCVRE*ID",1)=Item counter/last item entered^FCP^CC^
|
---|
10 | ;Order Control Code^Site Number^Date/Time message created^DUZ^
|
---|
11 | ;Entered By Last Name^Entered by First Name
|
---|
12 | ;^XTMP("PRCVRE*ID",1,n)=item #^quantity^vendor #^cost^Date Needed^
|
---|
13 | ;DynaMed Document Number^NIF #^BOC
|
---|
14 | ;^XTMP("PRCVRE*ID",1,n,"ERR")=error message
|
---|
15 | ;
|
---|
16 | ;need to validate the NIF# and BOC but not save to a file in IFCAP.
|
---|
17 | ;send a message back to DM if validation fails
|
---|
18 | ;
|
---|
19 | ;pseudocode
|
---|
20 | ;calling routine sends PRCVRE_message ID as parameter
|
---|
21 | ;get information from ^XTMP
|
---|
22 | ; validate NIF# and BOC, send back alerts if necessary
|
---|
23 | ;look up the information on Item and Vendor that we need
|
---|
24 | ;silently create the RIL in 410.3
|
---|
25 | ; first create 410.3 record using Entry Number (site-FY-qtr-
|
---|
26 | ; fcp-cc-txn#),
|
---|
27 | ;if error - make ERR node for item in ^XTMP, he needs error code,
|
---|
28 | ; severity, fields involved. if error is IFCAP (FileMan API) and
|
---|
29 | ; not DM, send Vic an err at top level (1-node in XTMP) and he'll
|
---|
30 | ; reject entire msg. else if FileMan API error is item-level then
|
---|
31 | ; add to item-level ERR node
|
---|
32 | ;
|
---|
33 | ;summary info
|
---|
34 | ;PRCVEF - error flag, set if any errors found with detail line
|
---|
35 | ;PRCVLN1 - summary info line for record
|
---|
36 | ;PRCVCTR - #detail line records
|
---|
37 | ;PRCVDUZ - user DUZ
|
---|
38 | ;PRCVIEN - new ien for RIL being created
|
---|
39 | ;PRCVGL - global (first) subscript for ^XTMP
|
---|
40 | ;PRCVMID - message id from PRCVGL (ID from comments above)
|
---|
41 | ;PRCVFN, PRCVLN - user first and last name
|
---|
42 | ;PRCVFCP - FCP
|
---|
43 | ;PRCVHF - flag to prevent adding the header to the RIL if errors
|
---|
44 | ;PRCVCC - CC
|
---|
45 | ;PRCVOCC - Order Control Code
|
---|
46 | ;PRCVST - site
|
---|
47 | ;PRCVDT - date/time message created
|
---|
48 | ;PRCVQTR - fiscal quarter
|
---|
49 | ;PRCVFY - fiscal year
|
---|
50 | ;PRCVSTR - becomes the RIL#, ST-FY-QTR-FCP-CC-TN
|
---|
51 | ;PRCVTN - transaction#
|
---|
52 | ;PRCVAS - data for Audit File #414.02,
|
---|
53 | ; PRCVAS=DN-ITM-VN-DUZ-STR-DT-$$NOW^XLFDT
|
---|
54 | ;PRCVAH - header data for Audit File, DUZ-LN-FN-STR-DT-$$NOW
|
---|
55 | ;
|
---|
56 | ;detail info
|
---|
57 | ;PRCVMC - count of detail messages that get posted to 410.3. used
|
---|
58 | ; to determine if any detail records were posted at all (if not
|
---|
59 | ; then header is deleted and no RIL is created)
|
---|
60 | ;PRCVA - array of values to add a detail record to 410.3
|
---|
61 | ;PRCVDTL - each detail info line w/data below
|
---|
62 | ;PRCVEL - counter for going through the detail records
|
---|
63 | ;PRCVNIF - NIF #
|
---|
64 | ;PRCVBOC - budget object code
|
---|
65 | ;PRCVLF - flag to prevent adding a line item to the RIL if errors
|
---|
66 | ;PRCVVN - vendor name
|
---|
67 | ;PRCVCST - item unit cost
|
---|
68 | ;PRCVQTY - quantity
|
---|
69 | ;PRCVITM - item #
|
---|
70 | ;PRCVDN - DynaMed document number
|
---|
71 | ;PRCVDTN - date needed
|
---|
72 | ;PRCVDR - date/time RIL is created
|
---|
73 | ;
|
---|
74 | Q
|
---|
75 | ;
|
---|
76 | EN(PRCVGL) ;entry point
|
---|
77 | Q:$$GET^XPAR("SYS","PRCV COTS INVENTORY",1,"Q")'=1
|
---|
78 | N PRCVA,PRCVAH,PRCVAS,PRCVBOC,PRCVCC,PRCVCST,PRCVCTR,PRCVDR
|
---|
79 | N PRCVDT,PRCVDTL,PRCVDN,PRCVDTN,PRCVDUZ,PRCVEF,PRCVEL,PRCVFCP
|
---|
80 | N PRCVFN,PRCVFY,PRCVHF,PRCVITM,PRCVIEN,PRCVLN,PRCVLN1,PRCVMID
|
---|
81 | N PRCVMC,PRCVNIF,PRCVOCC,PRCVQTR,PRCVQTY,PRCVST,PRCVSTR,PRCVVN
|
---|
82 | N PRCVVNM,PRCVTC,PRCVTN
|
---|
83 | S (PRCVAH,PRCVAS,PRCVVNM,PRCVBOC,PRCVCC,PRCVFN,PRCVDR)=""
|
---|
84 | S (PRCVCST,PRCVTC,PRCVDUZ,PRCVDT)=0,(PRCVDTL,PRCVDTN,PRCVA)=""
|
---|
85 | S (PRCVEL,PRCVITM,PRCVLN,PRCVLN1)="",(PRCVFCP,PRCVFY,PRCVST)=0
|
---|
86 | S (PRCVOCC,PRCVSTR,PRCVIEN)="",(PRCVNIF,PRCVQTR,PRCVQTY)=0
|
---|
87 | S (PRCVCTR,PRCVMC,PRCVVN,PRCVTC,PRCVTN,PRCVIEN,PRCVHF)=0
|
---|
88 | D:'$D(U) DT^DICRW
|
---|
89 | ;check for existence of ^XTMP global, else quit
|
---|
90 | I '$D(^XTMP(PRCVGL,0)) G EXIT
|
---|
91 | ;get header and summary data on records, quit if undef
|
---|
92 | S PRCVLN1=$G(^XTMP(PRCVGL,1))
|
---|
93 | I PRCVLN1="" D G EXIT
|
---|
94 | . D SENDMSG^PRCVRC2(2,PRCVGL,"",1)
|
---|
95 | ;get message id - not needed for now
|
---|
96 | ;S PRCVMID=$P(PRCVGL,"*",2)
|
---|
97 | ;get data for other fields from ^XTMP
|
---|
98 | S PRCVCTR=$P(PRCVLN1,U)+1
|
---|
99 | I +PRCVCTR=1!(PRCVCTR'=+PRCVCTR) D S PRCVHF=1
|
---|
100 | . D SENDMSG^PRCVRC2(1,PRCVGL,"",1)
|
---|
101 | S PRCVDUZ=$P(PRCVLN1,U,7)
|
---|
102 | S PRCVST=$P(PRCVLN1,U,5)
|
---|
103 | S PRCVFCP=$P(PRCVLN1,U,2)
|
---|
104 | I '$$CHKFCP^PRCVRC2(PRCVFCP,PRCVST) D S PRCVHF=1
|
---|
105 | . D SENDMSG^PRCVRC2(25,PRCVGL,"",2)
|
---|
106 | S PRCVCC=$P(PRCVLN1,U,3)
|
---|
107 | ;check FCP and CC
|
---|
108 | I '$$VALIDCC^PRCSECP(PRCVST,PRCVFCP,PRCVCC) D S PRCVHF=1
|
---|
109 | . D SENDMSG^PRCVRC2(3,PRCVGL,"",3)
|
---|
110 | ;S PRCVOCC=$O(PRCVLN1,U,4) not needed
|
---|
111 | ;Date/time message created
|
---|
112 | S PRCVDT=$P(PRCVLN1,U,6)
|
---|
113 | ;check that PRCVDT is not in future
|
---|
114 | I '$$CHKDT^PRCVRC2(PRCVDT) D S PRCVHF=1
|
---|
115 | . D SENDMSG^PRCVRC2(4,PRCVGL,"",6)
|
---|
116 | ;get date/time RIL created (now)
|
---|
117 | S PRCVDR=$$NOW^XLFDT
|
---|
118 | K PRCVA S PRCVA(410.3,"+1,",8)=PRCVDT
|
---|
119 | S PRCVA(410.3,"+1,",4)=PRCVDR
|
---|
120 | ;make Entry Number - in 410.3 not 410.31 multiple
|
---|
121 | S PRCVQTR=$$GETQTR^PRCVRC2(PRCVDT)
|
---|
122 | I 'PRCVQTR D SENDMSG^PRCVRC2(5,PRCVGL,"",6) S PRCVHF=1
|
---|
123 | S PRCVFY=$$GETFY^PRCVRC2(PRCVDT)
|
---|
124 | I 'PRCVFY D SENDMSG^PRCVRC2(6,PRCVGL,"",6) S PRCVHF=1
|
---|
125 | S PRCVSTR=PRCVST_"-"_PRCVFY_"-"_PRCVQTR_"-"_PRCVFCP_"-"_PRCVCC
|
---|
126 | S PRCVTN=$$GETTXN^PRCVRC2(PRCVSTR)
|
---|
127 | I PRCVTN=0 D SENDMSG^PRCVRC2(7,PRCVGL,"",1) S PRCVHF=1
|
---|
128 | S PRCVSTR=PRCVSTR_"-"_PRCVTN
|
---|
129 | S PRCVA(410.3,"+1,",.01)=PRCVSTR
|
---|
130 | ;validate DUZ
|
---|
131 | S PRCVDUZ=$P(PRCVLN1,U,7)
|
---|
132 | I '$$CHKDUZ^PRCVRC2(PRCVDUZ) D S PRCVHF=1
|
---|
133 | . D SENDMSG^PRCVRC2(8,PRCVGL,"",7)
|
---|
134 | ;create new RIL entry, new IEN in PRCVIEN(1)
|
---|
135 | I 'PRCVHF D
|
---|
136 | . D UPDATE^DIE("","PRCVA","PRCVIEN")
|
---|
137 | . S PRCVIEN=$G(PRCVIEN(1))
|
---|
138 | I PRCVHF K PRCVA
|
---|
139 | ;user info- convert last name, first name to uppercase
|
---|
140 | S PRCVLN=$$MAKECAP^PRCVRC2($P(PRCVLN1,U,8))
|
---|
141 | S PRCVFN=$$MAKECAP^PRCVRC2($P(PRCVLN1,U,9))
|
---|
142 | ;create header values string for Audit file
|
---|
143 | S PRCVAH=PRCVDUZ_"^"_$E(PRCVLN_","_PRCVFN,1,35)_"^"_PRCVSTR
|
---|
144 | S PRCVAH=PRCVAH_"^"_PRCVDR_"^"_PRCVDT
|
---|
145 | ;
|
---|
146 | ;get detail records. this is done inside loop to get all XTMP
|
---|
147 | ;nodes for this FCP/CC
|
---|
148 | S PRCVEL=1
|
---|
149 | D1 S PRCVEL=PRCVEL+1,PRCVEF=0,PRCVAS=""
|
---|
150 | G:PRCVEL>PRCVCTR EXIT
|
---|
151 | S (PRCVDTL,PRCVVN)="" K PRCVA
|
---|
152 | ;if no detail node then skip
|
---|
153 | G:'$D(^XTMP(PRCVGL,2,PRCVEL-1)) D1
|
---|
154 | ;detail info string
|
---|
155 | S PRCVDTL=$G(^XTMP(PRCVGL,2,PRCVEL-1))
|
---|
156 | ;get DynaMed doc id
|
---|
157 | S PRCVDN=$P(PRCVDTL,U,6)
|
---|
158 | I PRCVDN="" D S PRCVEF=1
|
---|
159 | . D SENDMSG^PRCVRC2(24,PRCVGL,PRCVEL-1,1)
|
---|
160 | I $D(^PRCV(414.02,"B",PRCVDN)) D S PRCVEF=1
|
---|
161 | . D SENDMSG^PRCVRC2(22,PRCVGL,PRCVEL-1,6)
|
---|
162 | S PRCVA(410.31,"+1,"_PRCVIEN_",",6)=PRCVDN
|
---|
163 | ;Item
|
---|
164 | S PRCVITM=$P(PRCVDTL,U)
|
---|
165 | I '$$CHKITM^PRCVRC2(PRCVITM) D S PRCVEF=1
|
---|
166 | . D SENDMSG^PRCVRC2(9,PRCVGL,PRCVEL-1,1)
|
---|
167 | S PRCVA(410.31,"+1,"_PRCVIEN_",",.01)=PRCVITM
|
---|
168 | ;Quantity
|
---|
169 | S PRCVQTY=$P(PRCVDTL,U,2)
|
---|
170 | I PRCVQTY'=+PRCVQTY D S PRCVEF=1
|
---|
171 | . D SENDMSG^PRCVRC2(10,PRCVGL,PRCVEL-1,2)
|
---|
172 | S PRCVA(410.31,"+1,"_PRCVIEN_",",1)=PRCVQTY
|
---|
173 | ;Est. Item Unit Cost
|
---|
174 | S PRCVCST=$P(PRCVDTL,U,4)
|
---|
175 | I '(PRCVCST?.N.1".".2N) D S PRCVEF=1
|
---|
176 | . D SENDMSG^PRCVRC2(11,PRCVGL,PRCVEL-1,4)
|
---|
177 | S PRCVA(410.31,"+1,"_PRCVIEN_",",3)=PRCVCST
|
---|
178 | ;Date Needed
|
---|
179 | S PRCVDTN=$P(PRCVDTL,U,5)
|
---|
180 | ;check that date needed is today or in future
|
---|
181 | I '$$CHKDTN^PRCVRC2(PRCVDTN) D S PRCVEF=1
|
---|
182 | . D SENDMSG^PRCVRC2(12,PRCVGL,PRCVEL-1,5)
|
---|
183 | S PRCVA(410.31,"+1,"_PRCVIEN_",",7)=PRCVDTN
|
---|
184 | ;Vendor # (pointer to 440)
|
---|
185 | S PRCVVN=$P(PRCVDTL,U,3)
|
---|
186 | I '$$CHKVEND^PRCVRC2(PRCVVN) D S PRCVEF=1
|
---|
187 | . D SENDMSG^PRCVRC2(13,PRCVGL,PRCVEL-1,3)
|
---|
188 | ;check that vendor and item relate
|
---|
189 | I '$$CHKVI^PRCVRC2(PRCVVN,PRCVITM) D S PRCVEF=1
|
---|
190 | . D SENDMSG^PRCVRC2(14,PRCVGL,PRCVEL-1,3)
|
---|
191 | S PRCVA(410.31,"+1,"_PRCVIEN_",",4)=PRCVVN
|
---|
192 | ;Vendor name
|
---|
193 | S PRCVVNM=$$GET1^DIQ(440,PRCVVN_",",.01)
|
---|
194 | I PRCVVNM="" D S PRCVEF=1
|
---|
195 | . D SENDMSG^PRCVRC2(15,PRCVGL,PRCVEL-1,3)
|
---|
196 | S PRCVA(410.31,"+1,"_PRCVIEN_",",2)=PRCVVNM
|
---|
197 | ;create string to add entry to Audit file 414.02
|
---|
198 | S PRCVAS=PRCVDN_"^"_PRCVITM_"^"_PRCVVN_"^"_PRCVAH_"^"_PRCVDTN
|
---|
199 | ;add item record to 410.3 (if no errors)
|
---|
200 | I 'PRCVEF D
|
---|
201 | . D UPDATE^DIE("","PRCVA")
|
---|
202 | . I $D(^TMP("DIERR",$J)) D Q
|
---|
203 | . . D SENDMSG^PRCVRC2(16,PRCVGL,PRCVEL-1,6)
|
---|
204 | . S PRCVMC=PRCVMC+1
|
---|
205 | . ;add new item entry to DM Audit file
|
---|
206 | . D ADDAUD^PRCVRC2(PRCVAS)
|
---|
207 | . ;accumulate total cost
|
---|
208 | . S PRCVTC=PRCVTC+(PRCVCST*PRCVQTY)
|
---|
209 | ;
|
---|
210 | S PRCVNIF=$P(PRCVDTL,U,7)
|
---|
211 | ;validate NIF#
|
---|
212 | I '$$CHKNIF^PRCVRC2(PRCVITM,PRCVNIF) D
|
---|
213 | . D SENDMSG^PRCVRC2(17,PRCVGL,PRCVEL-1,7)
|
---|
214 | S PRCVBOC=$P(PRCVDTL,U,8)
|
---|
215 | ;validate BOC
|
---|
216 | I '$$CHKBOC^PRCVRC2(PRCVITM,PRCVBOC) D
|
---|
217 | . D SENDMSG^PRCVRC2(18,PRCVGL,PRCVEL-1,8)
|
---|
218 | ;validate site/FCP/CC/BOC combination
|
---|
219 | I '$$VALIDBOC^PRCSECP(PRCVST,PRCVFCP,PRCVCC,PRCVBOC) D
|
---|
220 | . D SENDMSG^PRCVRC2(19,PRCVGL,PRCVEL-1,8)
|
---|
221 | D2 G D1
|
---|
222 | ;
|
---|
223 | EXIT ;
|
---|
224 | ;add total cost to entry
|
---|
225 | I PRCVHF=0 D
|
---|
226 | . K PRCVA S PRCVA(410.3,PRCVIEN_",",2)=PRCVTC
|
---|
227 | . D UPDATE^DIE("","PRCVA")
|
---|
228 | ;if no detail records added to RIL then kill it
|
---|
229 | I PRCVMC=0,PRCVIEN>0 S DIK="^PRCS(410.3,",DA=PRCVIEN D ^DIK
|
---|
230 | ;kill vars
|
---|
231 | K PRCVA,PRCVBOC,PRCVCC,PRCVCST,PRCVCTR,PRCVDR,PRCVDT,PRCVDTL
|
---|
232 | K PRCVDTN,PRCVDUZ,PRCVEF,PRCVEL,PRCVFCP,PRCVFN,PRCVFY,PRCVHF
|
---|
233 | K PRCVITM,PRCVLN,PRCVLN1,PRCVMID,PRCVNIF,PRCVOCC,PRCVQTR
|
---|
234 | K PRCVQTY,PRCVST,PRCVSTR,PRCVVN,PRCVVNM,PRCVTC,PRCVTN
|
---|
235 | Q
|
---|
236 | ;
|
---|