Summary
Order, Job and Product fees can be set per product, and the Connect: PunchOut plugin can send those fees and the shipping cost to your procurement system as separate line items, each with its own UNSPSC code. The procurement system's payloadID can also be saved on the order.
Problem
Fees reach your procurement system only inside the order total, with no separate lines or classification. Shipping arrives as a separate shipping charge, not as a classified line. The order does not record the procurement system's own reference for it, and fees cannot be set differently for each product.
Environment
Connect: PunchOut is enabled for the storefront. The Punchout settings are in Configuration > Plugins > Connect Plugins > Connect: PunchOut > Configure. Per-product fees are switched on in Configuration > Settings > Order Settings. You need the UNSPSC codes your procurement system expects and a way to place a test Punchout order. Everything is off by default.
Configuration
Step 1: Turn on per-product fees (optional)
In the admin area go to Configuration > Settings > Order Settings. In the Processing and Handling fee group, tick Enable per-product fees and click Save. It is off by default. The store's own Order Processing fee, Job Handling fee and Product Handling fee in the same group (see Handling and processing fees) stay as they are, and the product fees are added on top of them. Per-product fees apply to every order on the store, not only Punchout orders. If you move a fee from the store to products, set the store's own fee to 0, or it is charged as well.
Step 2: Set the fees on a product or product group (optional)
Before you start: if you currently charge the same fees with checkout attribute pricing scripts, switch those scripts off. If they stay on, customers are charged twice.
- Go to Catalogue > Products > Product Management (or Catalogue > Products > Product Groups). For a product, open it and then open its variant (the Product variants tab, then Edit). For a group, open the group.
- On the Info tab, below Product cost, fill in the fees you need. The fee fields only show once Enable per-product fees is ticked and saved (step 1):
- Order fee type and Order fee: a fixed amount, a percentage of the order subtotal or a percentage of the order total.
- Job fee: a fixed amount.
- Product fee: a fixed amount.
- Click Save. A product that belongs to a product group uses the group's fees. A fee you leave empty adds nothing.
Step 3: How per-product fees add up
On top of the store's own fees:
- Order fee: charged once per order. Only the highest product Order fee in the basket counts, and it is added to the store's Order Processing fee.
- Job fee: charged for every order line of that product, added to the store's Job Handling fee for each line.
- Product fee: charged once for each product in the order, however many lines it is on, added to the store's Product Handling fee.
For example, the store has an Order Processing fee of 5, a Job Handling fee of 2 and a Product Handling fee of 1. Business cards have an Order fee of 10, a Job fee of 3 and a Product fee of 4 and are on 2 lines. Flyers have an Order fee of 15 and are on 1 line. The order's fees are:
- Order fee: 5 store fee + 15 (the highest product Order fee, flyers) = 20
- Job fee: (2 store fee Ă— 3 lines) + (3 business card fee Ă— 2 lines) = 12
- Product fee: (1 store fee Ă— 2 products) + 4 business card fee = 6
Fees you set on products apply to new orders. Orders already placed keep the fees stored on them.
Step 4: Open the Connect: PunchOut settings
Go to Configuration > Plugins > Connect Plugins, find Connect: PunchOut and click Configure. Scroll to the XML generation group.
Step 5: Send fees and shipping as items
- Tick Include fees as items. Then enter a code in Order Fee UNSPSC Category ID, Job Fee UNSPSC Category ID and Product Fee UNSPSC Category ID. Your procurement system uses these codes to classify each charge. A fee with no code of its own uses the Default UNSPSC Category ID, and is sent without a classification if that is empty too.
- Tick Include Shipping cost as item and enter a code in Shipping cost UNSPSC Category ID. The shipping cost is then sent as its own line instead of as a separate shipping charge, so it is not charged twice.
- Scroll to the top of the page and click Save. Both options are off by default.
These settings send the order's Order, Job and Product fees, whether they come from the store's own fees or from per-product fees. A fee or shipping cost of 0 is not sent as a line.
Important: this changes the order message for every Punchout order. New lines appear in your buyer's system and shipping no longer arrives as a separate shipping charge, so agree the UNSPSC codes and the change with your buyer and test it before you switch it on for a live store.
Step 6: Save the payloadID on the order (optional)
When your procurement system sends the approved order, its payloadID can be saved on the order as its payment transaction code. This happens only when the order request XSLT maps it. The Standard XSLT does and the Legacy XSLT, which is the default, does not. XSLTs you have already saved are not updated for you.
- In the plugin settings, go to the Order request mapping group.
- In Predefined XSLTs, select Standard and click Apply. This replaces everything in XSLT for order request call with the Standard XSLT, which also reads the shipping method and tracking number from the order request, so try it on a test order first.
- Scroll to the top of the page and click Save.
If you have changed your XSLT, do not apply a predefined one, because that replaces your changes. Instead, add a PaymentTransactionId element to it and set its value to the payloadID attribute of the cXML element, and keep the rest as it is.
If a Punchout order is paid through a payment gateway that keeps its own reference in the payment transaction code, the payloadID replaces that reference, so check this first.
The order notes record that the payment transaction code was set, and any earlier code is noted alongside it. The payloadID is available in Connect:Flow as PaymentTransactionId.
Step 7: Know what your procurement system receives
For each charge on a Punchout order, one line item is added after the product lines (and after any checkout attribute lines). In the part IDs, OrderId is the order ID, for example 10234-OrderProcessingFee:
- Order fee: part ID
OrderId-OrderProcessingFee - Job fee: part ID
OrderId-OrderLineHandlingFee - Product fee: part ID
OrderId-ProductHandlingFee - Shipping: part ID
OrderId-OrderShippingPrice, described by the shipping method name
Each line has a quantity of 1, the amount excluding tax and its UNSPSC code. The order Total is the order total without tax. It includes shipping only when Include Shipping cost as item is ticked. It equals the sum of the lines only when the order has no discounts, gift cards, payment method fees or checkout attribute prices, so a procurement system that checks the lines against the Total may flag such orders. To send checkout attribute prices as lines as well, tick Include checkout attributes as Items in the same group. It sends every checkout attribute on the order as a line, including ones with no price.
Step 8: Check that it worked
Place a test Punchout order and check:
- The fees show in the basket and on the order.
- Your procurement system shows one extra line for each fee above 0 and one for shipping, after the product lines, with the part IDs and UNSPSC codes from step 7.
- If you did step 6, the order notes show that the payment transaction code was set after your procurement system sends the order back.
If no fee or shipping lines appear, check that Include fees as items and Include Shipping cost as item are ticked and saved (step 5) and that the order has a fee above 0. If a fee is charged twice, the checkout attribute pricing scripts from step 2 are still on, or the same fee is still set at store level (step 1). If a product's fee is missing, or its fee fields are not on the product, check that Enable per-product fees is ticked and saved (step 1). If no payloadID is saved, check step 6.
Search Terms
punchout fees missing in procurement system, punchout shipping not showing as line item, punchout order total does not match line items, procurement system only shows one total, punchout fees as separate line items, Include fees as items, Include Shipping cost as item, Order Fee UNSPSC Category ID, Job Fee UNSPSC Category ID, Product Fee UNSPSC Category ID, Shipping cost UNSPSC Category ID, Enable per-product fees, different fee for each product, per-product order fee job fee product fee, punchout payloadID not saved on order, punchout order reference not saved, fees charged twice punchout