Egenverk Customer Hub · Documentation
Withdrawals and returns
The withdrawal function in Customer Hub follows the requirements in the Swedish bill prop. 2025/26:84. The plugin helps you meet them; you remain responsible for your store's compliance.
The customer's flow
Signed-in customer: in My Account the customer opens the order and chooses the button to withdraw from the purchase (default text "Ångra köpet här"). The customer picks per shipment and order line, with a quantity. Items that already have a request, are already refunded or whose withdrawal period has ended show as disabled with an explanation.
Guest: on the withdrawal page the customer enters the order number and the billing email. The error messages do not reveal whether the order exists, and the lookup is limited to five attempts per 15 minutes per IP address.
In both cases:
- The reason is optional. The text in Return cost & refund information (Customer texts) is shown in the form and in the acknowledgment email.
- The customer must tick an explicit confirmation. It is always required; under Customer texts you only change the text beside the box.
- An acknowledgment (mottagningsbevis) is sent as soon as the request is saved, whatever the settings. It confirms that the request was received, not that it was accepted.
- A guest gets a signed link to the case status in the email. The link is valid for 60 days.
The case gets a reference of the form ANG-YYYY-NNNNNN. My Account also gets a My returns page, and with Customer Hub dashboard (on by default, under Appearance → My account) the WooCommerce My Account dashboard is replaced by an overview of the latest order, tracking, active returns and withdrawal periods.
Items without a right of withdrawal
A product is exempted with the No right of withdrawal checkbox on the General tab of its product data. A whole category is exempted with No right of withdrawal for products in this category when you add or edit the category. Exempt items show as disabled in the form, and a notice about the exemption shows on the product page and at checkout.
Case statuses
| Status | Meaning |
|---|---|
| Requested | The request has been received. |
| Not dispatched | The goods have not left the warehouse. No return is booked and the customer is not asked to send anything back. |
| Return booked | The return is booked and the customer has a return label or a QR code. |
| In transit | The carrier has scanned the return. |
| Received | The return has reached you. |
| Refunded | The refund has been made. |
| Denied, Cancelled | Closed by you. |
| Withdrawn by customer | The customer took their request back. |
| Resolved outside the hub | The case was settled outside Customer Hub, for example by editing the order by hand. |
| Return never sent | The customer never handed in the return and the case was closed automatically. It can be reopened if the parcel turns up. |
Every status change is written to an append-only log, with the time and who made the change.
Handling cases
Under Customer Hub → Withdrawals the cases sit in queues in the sidebar: To do, Near the deadline, To ship, Needs a decision, Awaiting reply, On the way back, To credit, Snoozed and All open. To do gathers everything waiting on you. A case opens in a panel with the order, customer, shipments, conversation and log.
- Approve & book return books the return with the carrier. The dialog previews the exact email the customer will get.
- Ask the customer first… is for goods that have not been shipped: the customer gets a question with two answer links and 48 hours to reply. If the customer wants to keep the order, the case goes to To ship; if they still want to withdraw, it comes back to you.
- Cancel the order cancels the WooCommerce order and the case for an order that has not been shipped. It never happens automatically.
- Credit creates the refund once the return has been received. The credit waits five seconds with Undo (or the Z key) before anything is sent to the payment method.
- Remind me… parks the case for 1, 3 or 7 days or until a date. The deadline keeps running and the case stays in Near the deadline.
With Egenverk Shipping the status follows the tracking: a scan moves the case to In transit, and a reconciliation against the shipments runs every 15 minutes in case an event was missed.
Settings
Under Customer Hub → Settings → Withdrawal flow:
| Setting | Default | What it does |
|---|---|---|
| Return booking | Automatic | Automatic books the return with the carrier as soon as the request is submitted, and the customer gets the QR code at once. Manual holds every request for your approval before any return is booked. |
| Do not auto-book returns for orders older than (days) | 60 | Older orders are created as cases for manual handling. 0 = no limit. |
| Reasons that always wait for an operator | "I received a different size than I ordered", "Damaged or defective" | With automatic booking, cases with these reasons are held for manual handling instead of booking a paid return. |
| Refund deadline turns amber at / red under (days left) | 3 / 1 | The deadline colours in the list and the panel. |
| Pause undispatched orders | On | A Processing order is put On hold when the customer withdraws goods that have not shipped and the cases cover the whole order. If the case is denied, the order returns to its previous status unless someone changed it by hand. |
| Eligibility window (days) | 14 | The internal period used when the carrier gives none. At least 14. |
| Delivery lead time (days) | 0 (at most 30) | Added to the order's completed date when neither the carrier nor another plugin supplies a delivery date, so the period does not start when the order is packed. |
| Auto-mark received | Off | When on, the case becomes Received once the carrier reports the return delivered to you. Otherwise it stays In transit until you mark it by hand. |
| Return weight tolerance (kg) | 0.3 | Where the warning about a weight difference between outbound and inbound parcels starts. |
| Close unsent returns after (days) | 30 | Counted from when the return label was issued. The customer gets a reminder on day 14, then the case closes as Return never sent. 0 switches this off. |
| Daily deadline report to | Empty (off) | An address that gets one email a day listing the cases whose refund deadline is near or past. |
In other sections:
| Setting | Section | Default | What it does |
|---|---|---|---|
| Button label | Appearance → Buttons & links | "Ångra köpet här" | The text on the button and link. Can never be empty. |
| Site-wide footer link | Appearance → Buttons & links | On | A link to the withdrawal page on every storefront page. |
| Pre-contract withdrawal-function notice | Customer texts → Pre-contract information | Off | A notice at checkout and in the order emails that the withdrawal function exists and where to find it. |
| Ångerblankett (model form) URL | Customer texts → Pre-contract information | Empty | A link to the standard withdrawal form, offered on the withdrawal form. |
| Manual return instructions | Customer texts | Empty | Shown instead of the QR code when no carrier is connected. |
| Customer Hub sends the customer e-mails for orders with a case | Mail & templates | On | While an order has an open case, WooCommerce's own On hold, Processing and Completed emails are not sent to the customer. |
Mail & templates also holds the email logo, Reply-To, signature, reply templates and the return instruction emails per delivery type and language. Subjects and on/off for each email type are under WooCommerce → Settings → Emails. The acknowledgment is always sent.
Under Agent desk you set the limits for customers who return often: Flag a customer who returns often at (%) (50), Only from this many orders in the window (3) and Window for the return share (months) (12, between 1 and 36). The flag is only a signal to you. It never blocks a request, because the right of withdrawal applies however often it is used.
Return analysis
Customer Hub → Return analysis shows sales against returns for a period: 7, 14 or 30 days, Month to date, Last month or your own dates with From and To (at most 366 days). The page opens on 30 days.
- Shipped only is selected when Egenverk Shipping is present. A product then counts as sold, and a refund as a return, only once an outbound shipment carrying it has moved past "label created". All orders counts every order.
- The matrix shows reason against product. A cell opens the case list filtered on that reason and product.
- Export CSV downloads the matrix.
The figures are calculated in the background. A report up to ten minutes old counts as fresh; an older one is shown at once while a new one is built, and with none the page shows Calculating the numbers with the progress.
Customising
- Carrier adapters are registered with the
wcch_shipping_integrationsfilter. Without an adapter, tracking is hidden, the internal period applies and the customer gets the manual return instructions. - The customer-facing templates can be overridden in your theme: copy a file from the plugin's
templates/folder toyour-theme/wc-customer-hub/with the same relative path.