| [613] | 1 | PRCVPOSD ;WOIFO/DAP-DYNAMED COMBINED PO EVENTS SEND ; 12/13/04
 | 
|---|
 | 2 | V ;;5.1;IFCAP;**81**;Oct 20, 2000
 | 
|---|
 | 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 |  ;This routine is used to send an ORM^O01 HL7 message to the DynaMed inventory system to report one of four Purchase Order operations.
 | 
|---|
 | 6 |  ;1-Purchase Order Obligations
 | 
|---|
 | 7 |  ;2-Amendments to Obligated Purchase Orders
 | 
|---|
 | 8 |  ;3-Purchase Order Receiving Reports
 | 
|---|
 | 9 |  ;4-Adjustments to Purchase Order Receiving Reports
 | 
|---|
 | 10 |  ;
 | 
|---|
 | 11 |  Q
 | 
|---|
 | 12 |  ;
 | 
|---|
 | 13 | EN(PRCVX) ;Entry point for API Call
 | 
|---|
 | 14 |  I $$GET^XPAR("SYS","PRCV COTS INVENTORY",1,"Q")'=1 Q
 | 
|---|
 | 15 |  I $D(PRCVX)=0 Q
 | 
|---|
 | 16 |  N HLA
 | 
|---|
 | 17 |  S PRCVCNT=0,PRCVERG=0
 | 
|---|
 | 18 |  D HDRBLD
 | 
|---|
 | 19 |  I PRCVERG=1 K PRCVERG Q
 | 
|---|
 | 20 |  S N=0 F  S N=$O(^TMP("PRCV442A",$J,PRCVX,N)) Q:+N=0  D
 | 
|---|
 | 21 |  . D MSGBLD
 | 
|---|
 | 22 |  . Q
 | 
|---|
 | 23 |  ;
 | 
|---|
 | 24 |  S PRCVDP="" D GENERATE^HLMA(PRCVPRO,"LM",1,.PRCVDP)
 | 
|---|
 | 25 |  I +$P(PRCVDP,"^",2) S PRCVERR(1)="Error generating message through VistA HL7 package for PO # "_PRCVPO,PRCVERD=PRCVPO D CLIFP
 | 
|---|
 | 26 |  ;
 | 
|---|
 | 27 |  K ^TMP("PRCV442A",$J,PRCVX)
 | 
|---|
 | 28 |  D FIN
 | 
|---|
 | 29 |  K PRCVERG
 | 
|---|
 | 30 |  ;
 | 
|---|
 | 31 |  Q
 | 
|---|
 | 32 |  ;
 | 
|---|
 | 33 | HDRBLD ;Build message elements from provided header level data
 | 
|---|
 | 34 |  ;
 | 
|---|
 | 35 |  ;PRCVPO Purchase Order #
 | 
|---|
 | 36 |  S PRCVPO=$P(^TMP("PRCV442A",$J,PRCVX),"^",1)
 | 
|---|
 | 37 |  ;PRCVTT Transaction Type
 | 
|---|
 | 38 |  S PRCVTT=$P(^TMP("PRCV442A",$J,PRCVX),"^",2)
 | 
|---|
 | 39 |  I PRCVTT=1 S PRCVT1="NW",PRCVT2="CG",PRCVPRO="PRCV_IFCAP_02_EV_OBL/AMEND"
 | 
|---|
 | 40 |  I PRCVTT=2 S PRCVT1="XO",PRCVT2="AJ",PRCVPRO="PRCV_IFCAP_02_EV_OBL/AMEND"
 | 
|---|
 | 41 |  I PRCVTT=3 S PRCVT1="SC",PRCVT2="CG",PRCVPRO="PRCV_IFCAP_03_EV_REC/ADJ"
 | 
|---|
 | 42 |  I PRCVTT=4 S PRCVT1="XX",PRCVT2="AJ",PRCVPRO="PRCV_IFCAP_03_EV_REC/ADJ"
 | 
|---|
 | 43 |  I PRCVTT=5 S PRCVT1="CA",PRCVT2="AJ",PRCVPRO="PRCV_IFCAP_02_EV_OBL/AMEND"
 | 
|---|
 | 44 |  ;PRCVDZ IFCAP User DUZ
 | 
|---|
 | 45 |  S PRCVDZ=$P(^TMP("PRCV442A",$J,PRCVX),"^",3)
 | 
|---|
 | 46 |  ;Retrieve user name based on DUZ from file 200 using $$HLNAME^XLFNAME call as detailed in DBIA #3065
 | 
|---|
 | 47 |  S PRCVDNM("FILE")=200,PRCVDNM("FIELD")=.01,PRCVDNM("IENS")=PRCVDZ_","
 | 
|---|
 | 48 |  S PRCVDNM=$P($$HLNAME^XLFNAME(.PRCVDNM," ","^"),"^",1,2)
 | 
|---|
 | 49 |  S PRCVNML=$P(PRCVDNM,"^",1)
 | 
|---|
 | 50 |  S PRCVNMF=$P(PRCVDNM,"^",2)
 | 
|---|
 | 51 |  ;PRCVVNI Vendor Number IEN
 | 
|---|
 | 52 |  S PRCVVNI=$P(^TMP("PRCV442A",$J,PRCVX),"^",4)
 | 
|---|
 | 53 |  ;PRCVVNF Vendor Number FMS
 | 
|---|
 | 54 |  S PRCVVNF=$P(^TMP("PRCV442A",$J,PRCVX),"^",5)
 | 
|---|
 | 55 |  ;
 | 
|---|
 | 56 |  ;##### FMS ALTERNATE ADDRESS INDICATOR #####
 | 
|---|
 | 57 |  ;PIECE 6
 | 
|---|
 | 58 |  ;
 | 
|---|
 | 59 |  ;PRCVDT Transaction Date / Time
 | 
|---|
 | 60 |  S PRCVDT=$P(^TMP("PRCV442A",$J,PRCVX),"^",7)
 | 
|---|
 | 61 |  S PRCVDT=$$FMTHL7^XLFDT(PRCVDT)
 | 
|---|
 | 62 |  ;PRCVSTA Station #
 | 
|---|
 | 63 |  S PRCVSTA=$P(^TMP("PRCV442A",$J,PRCVX),"^",8)
 | 
|---|
 | 64 |  ;PRCVPSTA Purchasing Station #
 | 
|---|
 | 65 |  S PRCVPSTA=+(PRCVPO)
 | 
|---|
 | 66 |  ;
 | 
|---|
 | 67 |  K HL D INIT^HLFNC2(PRCVPRO,.HL)
 | 
|---|
 | 68 |  I $G(HL) S PRCVERR(1)="Error generating message through VistA HL7 package for PO # "_PRCVPO,PRCVERD=PRCVPO D CLIFP D FIN Q
 | 
|---|
 | 69 |  ;
 | 
|---|
 | 70 |  S PRCVCS=$E(HL("ECH")),PRCVFS=HL("FS")
 | 
|---|
 | 71 |  ;
 | 
|---|
 | 72 |  Q
 | 
|---|
 | 73 |  ;
 | 
|---|
 | 74 | MSGBLD ;Generate repeating message body for all line level data
 | 
|---|
 | 75 |  ;
 | 
|---|
 | 76 |  ;PRCVDDN DynaMed Document Number
 | 
|---|
 | 77 |  S PRCVDDN=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",1)
 | 
|---|
 | 78 |  ;S PRCVDDN=$E(PRCVDDN,1,4)_"-"_$E(PRCVDDN,5,8)_"-"_$E(PRCVDDN,9,11)
 | 
|---|
 | 79 |  ;PRCVIN Item Number
 | 
|---|
 | 80 |  S PRCVIN=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",2)
 | 
|---|
 | 81 |  ;PRCVLN PO Line Number
 | 
|---|
 | 82 |  S PRCVLN=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",3)
 | 
|---|
 | 83 |  ;PRCVTN 2237 Transaction Number
 | 
|---|
 | 84 |  S PRCVTN=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",4)
 | 
|---|
 | 85 |  ;PRCVUOP Unit Of Purchase
 | 
|---|
 | 86 |  S PRCVUOP=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",5)
 | 
|---|
 | 87 |  ;PRCVQO Quantity Ordered
 | 
|---|
 | 88 |  S PRCVQO=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",6)
 | 
|---|
 | 89 |  ;PRCVUP Unit Price
 | 
|---|
 | 90 |  S PRCVUP=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",7)
 | 
|---|
 | 91 |  ;PRCVNIF NIF Number
 | 
|---|
 | 92 |  S PRCVNIF=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",8)
 | 
|---|
 | 93 |  ;I PRCVNIF="" S PRCVNIF="1234"
 | 
|---|
 | 94 |  ;PRCVPM Packaging Multiple
 | 
|---|
 | 95 |  S PRCVPM=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",9)
 | 
|---|
 | 96 |  ;PRCVQR Quantity Received
 | 
|---|
 | 97 |  S PRCVQR=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",10)
 | 
|---|
 | 98 |  ;PRCVTIC Total Item Cost
 | 
|---|
 | 99 |  S PRCVTIC=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",11)
 | 
|---|
 | 100 |  ;PRCVDIC Discounted Item Cost
 | 
|---|
 | 101 |  S PRCVDIC=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",12)
 | 
|---|
 | 102 |  ;PRCVERD Expected Delivery Date
 | 
|---|
 | 103 |  S PRCVERD=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",13)
 | 
|---|
 | 104 |  S PRCVERD=$$FMTHL7^XLFDT(PRCVERD)
 | 
|---|
 | 105 |  ;PRCVAT Amendment/Adjustment Type
 | 
|---|
 | 106 |  S PRCVAT=$P(^TMP("PRCV442A",$J,PRCVX,N),"^",14)
 | 
|---|
 | 107 |  I PRCVAT=1 S PRCVAT="1^Line Item Edit"
 | 
|---|
 | 108 |  I PRCVAT=2 S PRCVAT="2^Line Item Delete"
 | 
|---|
 | 109 |  I PRCVAT=3 S PRCVAT="3^Change Vendor"
 | 
|---|
 | 110 |  I PRCVAT=4 S PRCVAT="4^Replace PO Number"
 | 
|---|
 | 111 |  I PRCVAT=5 S PRCVAT="5^Authority Edit"
 | 
|---|
 | 112 |  ;
 | 
|---|
 | 113 |  ;Build ORC Segment
 | 
|---|
 | 114 |  S PRCVCNT=PRCVCNT+1
 | 
|---|
 | 115 |  S HLA("HLS",PRCVCNT)="ORC"_PRCVFS_PRCVT1_PRCVFS_PRCVPO_PRCVFS_PRCVFS_PRCVFS_PRCVFS_PRCVFS_PRCVFS_PRCVFS_PRCVDT_PRCVFS
 | 
|---|
 | 116 |  S HLA("HLS",PRCVCNT)=HLA("HLS",PRCVCNT)_PRCVDZ_PRCVCS_PRCVNML_PRCVCS_PRCVNMF_PRCVCS_PRCVCS_PRCVCS_PRCVCS_PRCVCS_PRCVCS_PRCVSTA_PRCVFS_PRCVFS_PRCVFS_PRCVFS_PRCVFS_PRCVFS_PRCVAT_PRCVFS_PRCVFS_PRCVFS_PRCVFS_PRCVFS_PRCVPSTA
 | 
|---|
 | 117 |  ;
 | 
|---|
 | 118 |  ;Build RQD Segment
 | 
|---|
 | 119 |  S PRCVCNT=PRCVCNT+1
 | 
|---|
 | 120 |  S HLA("HLS",PRCVCNT)="RQD"_PRCVFS_PRCVLN_PRCVFS_PRCVDDN_PRCVFS_PRCVIN_PRCVFS_PRCVPM_PRCVFS_PRCVQO_PRCVFS_PRCVUOP
 | 
|---|
 | 121 |  S HLA("HLS",PRCVCNT)=HLA("HLS",PRCVCNT)_PRCVFS_PRCVFS_PRCVFS_PRCVTN_PRCVFS_PRCVERD
 | 
|---|
 | 122 |  ;
 | 
|---|
 | 123 |  ;Build RQ1 Segment
 | 
|---|
 | 124 |  S PRCVCNT=PRCVCNT+1
 | 
|---|
 | 125 |  S HLA("HLS",PRCVCNT)="RQ1"_PRCVFS_PRCVUP_PRCVFS_PRCVFS_PRCVFS_PRCVVNI_PRCVCS_PRCVCS_PRCVCS_PRCVVNF_PRCVFS_PRCVNIF
 | 
|---|
 | 126 |  ;
 | 
|---|
 | 127 |  ;Build FT1 Segment
 | 
|---|
 | 128 |  S PRCVCNT=PRCVCNT+1
 | 
|---|
 | 129 |  S HLA("HLS",PRCVCNT)="FT1"_PRCVFS_PRCVFS_PRCVFS_PRCVFS_PRCVDT_PRCVFS_PRCVFS_PRCVT2_PRCVFS_PRCVPO_PRCVFS
 | 
|---|
 | 130 |  S HLA("HLS",PRCVCNT)=HLA("HLS",PRCVCNT)_PRCVFS_PRCVFS_PRCVQR_PRCVFS_PRCVTIC_PRCVFS_PRCVDIC
 | 
|---|
 | 131 |  ;
 | 
|---|
 | 132 |  Q
 | 
|---|
 | 133 |  ;
 | 
|---|
 | 134 | ORRPROC ;Process ORR^O02 response message
 | 
|---|
 | 135 |  ;
 | 
|---|
 | 136 |  ;Uses HLNEXT twice to bypass the MSH segment and go directly to the MSA segment
 | 
|---|
 | 137 |  X HLNEXT
 | 
|---|
 | 138 |  ;
 | 
|---|
 | 139 |  X HLNEXT
 | 
|---|
 | 140 |  S VAL=$$FLD^HLCSUTL(HLNODE,2)
 | 
|---|
 | 141 |  I VAL'="AA" D ERROR
 | 
|---|
 | 142 |  ;
 | 
|---|
 | 143 |  D FIN
 | 
|---|
 | 144 |  ;
 | 
|---|
 | 145 |  Q
 | 
|---|
 | 146 |  ;
 | 
|---|
 | 147 | ERROR ;Process ERR Segments
 | 
|---|
 | 148 |  S PRCVERC=1 F N=1:1 X HLNEXT Q:HLQUIT'>0  D
 | 
|---|
 | 149 |  . S VAL=$$FLD^HLCSUTL(HLNODE,1)
 | 
|---|
 | 150 |  . I VAL="ERR" S PRCVERC=PRCVERC+1,PRCVERM=$$FLD^HLCSUTL(HLNODE,6),PRCVERD=$$FLD^HLCSUTL(HLNODE,7)
 | 
|---|
 | 151 |  . S PRCVPO2=$P(PRCVERD,"~",1)
 | 
|---|
 | 152 |  . S PRCVERR(PRCVERC)="At Line Number "_$P(PRCVERD,"~",2)_" involving Document ID "_$P(PRCVERD,"~",3)_" the following errors occurred:"
 | 
|---|
 | 153 |  . S PRCVERC=PRCVERC+1
 | 
|---|
 | 154 |  . S PRCVERR(PRCVERC)=$P(PRCVERM,"^",2)
 | 
|---|
 | 155 |  . Q
 | 
|---|
 | 156 |  S PRCVERR(1)="PO # "_PRCVPO2_" failed to update in the DynaMed system"
 | 
|---|
 | 157 |  ;
 | 
|---|
 | 158 |  D CLIFP
 | 
|---|
 | 159 |  ;
 | 
|---|
 | 160 |  Q
 | 
|---|
 | 161 |  ;
 | 
|---|
 | 162 | CLIFP ;Call partner app w/ mail message for users on error
 | 
|---|
 | 163 |  N XMDUZ,XMMG,XMSUB,XMTEXT,XMY,XMZ
 | 
|---|
 | 164 |  I $D(PRCVPO) S PRCVPO2=PRCVPO
 | 
|---|
 | 165 |  S XMSUB="Inventory System PO # "_PRCVPO2_" Errors "_$$HTE^XLFDT($H)
 | 
|---|
 | 166 |  S XMDUZ="IFCAP/COTS Inventory Interface"
 | 
|---|
 | 167 |  S XMTEXT="PRCVERR("
 | 
|---|
 | 168 |  ;
 | 
|---|
 | 169 |  S PRCVSIT=+PRCVPO2,PRCVFCP=$$FCP^PRCV442B(PRCVPO2)
 | 
|---|
 | 170 |  D GETFCPU^PRCVLIC(.XMY,PRCVSIT,PRCVFCP)
 | 
|---|
 | 171 |  ;
 | 
|---|
 | 172 |  D ^XMD
 | 
|---|
 | 173 |  S PRCVERG=1
 | 
|---|
 | 174 |  K PRCVPO2,PRCVFCP,PRCVSIT
 | 
|---|
 | 175 |  ;
 | 
|---|
 | 176 |  Q
 | 
|---|
 | 177 |  ;
 | 
|---|
 | 178 | FIN ;Clean up variables
 | 
|---|
 | 179 |  K PRCVINP,PRCVCNT,PRCVPO,PRCVTT,PRCVT1,PRCVT2,PRCVDZ,PRCVDNM,PRCVNML,PRCVNMF,PRCVVNI,PRCVVNF,PRCVDT,PRCVERD,PRCVSTA,N,PRCVX
 | 
|---|
 | 180 |  K PRCVPRO,PRCVCS,PRCVFS,PRCVLN,PRCVDDN,PRCVIN,PRCVTN,PRCVUOP,PRCVQO,PRCVUP,PRCVNIF,PRCVPM,PRCVQR,PRCVTIC,PRCVDIC,PRCVAT,PRCVPSTA
 | 
|---|
 | 181 |  K HLA,VAL,PRCVDP,PRCVERC,PRCVERM,PRCVERD,PRCVERR
 | 
|---|
 | 182 |  ;
 | 
|---|
 | 183 |  Q
 | 
|---|