| 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 | ; | 
|---|