> For the complete documentation index, see [llms.txt](https://docs.flowretail.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.flowretail.com/docs/may-2026.md).

# May 2026

## Monthly summary / tl;dr

May was the month of **payments and printers**:

* **Assistant**: full **payment method validation** suite — customer type checks, minimum amounts, loyalty points with live balance, Two[^1] invoice checks and recurring-payment consent — so handheld payments now follow the same rules as the POS.
* **Client**: overhauled **printer handling** with a new printer selection dialog and store-wide printer search.
* New **Digital products** extension — sell POSA[^2] scratch cards and print-to-receipt licenses, activated automatically at settlement.
* **Klaviyo profile sync** into Flow customers, and **Navision cash settlement export** per till.
* New **On hold** order handling state across the platform, **Client** and **Admin**.
* A long list of accuracy fixes for **package products** — stock, reservations and cost price now reflect what you can actually sell.

## 2026-05-27

### Improved

* **Danish tenants**: customer ledger numbers are now derived from the customer's mobile number consistently across **all** accounting exports (24Seven, Navision, Unimicro, Visma Business, Visma.net, XLedger) and the settlement flow — not just Navision.
* Outbound calls to integration partners (Vipps, Dintero, Nets, Adyen, Verifone, Omnium, Klaviyo and friends) now **fail fast** when a partner is unreachable — about 5 seconds instead of up to 40. Your POS no longer waits politely for a partner that isn't picking up.
* The **order number is now the barcode** on all receipts and order prints, so any order can be scanned straight from paper.
* Store inventory details report: new **"Produktgruppe sti"** column showing the full product group path for each product.

### Fixed

* **Two invoice** orders are no longer marked as paid until Two confirms the invoice was actually issued — no more settled orders without an invoice behind them. Orders with **package products** now send the individual component lines to Two with correct VAT per line, so Two no longer rejects them.
* **Package products** got a round of honesty fixes: stock now shows how many **complete packages** can actually be assembled (per warehouse), reserved quantity only counts reservations on the package itself, and cost price reflects the actual cost of building one package — overstocked components no longer inflate the numbers.
* Changing the **quantity of a fixed package** on an order now scales each component by its per-package count, preserving the ratio (two sodas + one snack stays two sodas + one snack).
* **Omnium returns** now report the actual return warehouse to Omnium, so a return registered at one warehouse no longer gets posted to another — which could previously cause the item to be returned twice.
* All outbound calls to payment and integration partners now have **hard timeouts**, so a hanging partner can no longer freeze a POS request, an admin request or a cron job indefinitely. Verifone terminal calls are now also fully traceable in the partner log.
* **Open items report** no longer lists invoice orders where credits exceed the invoice amount — these aren't outstanding receivables and were inflating the report.
* **Cash settlements** no longer fail when the payment method requires the full remaining amount and uses rounding — paying the rounded amount shown in POS is now accepted, even when it differs by a few øre from the unrounded total.
* Navision export: customer rows in the R8 file are no longer deduplicated, so the file lists one row per source record as expected.
* Auto-added order lines (such as catalog add-ons) no longer offer a delete action, and trying to delete a delivery freight line now points you to the order delivery workflow instead.

## 2026-05-20

### Added

* **Admin**: new **receipt text** field on tenant payment methods.
* **Admin**: new **"Active" toggle** to activate/deactivate a tenant user — replacing the legacy `BLOCKED` role as the way to disable a user.
* **Admin**: **receivements report** with Excel export, filtered by date, stores and status.
* **Admin**: new **auto-print pickup label printer** setting under Store > General — a searchable, tenant-wide printer dropdown for the `AUTO_PRINT_PICKUP_LABELS` trigger, grouped by store.
* **Admin**: order handling triggers now support the new **On hold** state.
* **Admin**: the **"Require refund to same payment method"** setting is now editable.

### Improved

* **Admin**: the "default printer" assignment moved from the Printers tab to a single setting under Store > General, and can now point to any printer in the tenant — not only printers belonging to the current store.

### Fixed

* **Admin**: store settlement print now shows the user who actually **closed** the settlement under "Lukket av", instead of whoever opened the first till of the day.
* **Admin**: the settlement **reviewer dropdown** no longer offers integration users, inactive users or users without permission to review.
* **Admin**: the date picker now respects the **tenant timezone** — clicking a date no longer shifts to the previous day when your browser is in a different timezone.
* **Admin**: "Generate SKU" failures now surface the backend's error message instead of silently doing nothing.
* **Admin**: real backend errors now surface as toasts in the printer modal, store selectors and extension modals. The Klaviyo extension got proper API-key masking and searchable consent dropdowns.
* **Admin**: the language switcher now reflects the new language after reload.

## 2026-05-19

### Added

* **Digital products**: a new extension lets a tenant sell **POSA scratch cards** and print-to-receipt licenses (antivirus, gift cards and similar). On settlement, Flow activates the product with the provider and stores the license key, installation URL and PIN/serial on the order line — and the **receipt prints everything the customer needs** to redeem the product, with reprint support.
* New **receivements search** endpoint in the API.
* The order notification timeline now also lists **customer-facing order notes from Omnium**, when the Omnium extension is active.

### Improved

* **Exchange note printing** now checks settlement per order line — you can print an exchange note for the settled lines, and the error names the specific unsettled product instead of demanding the whole order be settled.
* Creating a tenant user via the API no longer requires `tenantRole`; role assignments drive permissions.

### Fixed

* **Purchase requests** no longer duplicate package and component lines when creating a purchase order.
* Product import: the `limitToStoreUids` column is now actually applied, so store restrictions from import files are saved.
* **Order receipts now update their delivery state when items are handed out**, not only at settlement — partial deliveries after payment now move the receipt to in-progress or complete.
* Printing without an identifiable device or printer now returns a clear error instead of an internal server error, across order receipts, exchange notes, gift cards and pickup labels.

## 2026-05-18

### Added

* **Client**: **choose another printer from any print button** — including a search across all printers in your store. A new printer selection dialog appears automatically when more than one printer can do the job.

### Improved

* **Client**: all printing now goes through the printers set up on the device — the old separate barcode printer setup is retired. Print buttons are disabled when no printer on the device can handle that print type, with a hint that you can still pick another printer from the store.
* **Client**: the product label print dialog lets you pick any printer in the store, and remembers the last label size and template per printer.
* **Client**: removing a customer from a sale order with a prepayment or paid lines now asks for confirmation.
* **Client**: login and onboarding forms slide upward when the soft keyboard appears, keeping the input fields visible.

### Fixed

* **Client**: backend error messages were swallowed for receipt/order printing, deletions and a few other actions — the actual server message now surfaces.
* **Client**: purchase orders created from a purchase request were always saved in the local currency — the supplier's currency and exchange rate are now applied.
* **Client**: receiving a purchase order no longer opens the serial number dialog on the first digit of a multi-digit quantity — typing now waits briefly when more digits could follow.
* **Client**: setting price or from-date on multiple selected prices in a pricelist could crash; the Remove button in multi-select is disabled unless every selected line can be deleted.
* **Client**: warehouse selection and sale lines no longer show a warehouse for no-stock products, completed deliveries show a past-tense label, and some missing icons on macOS/iOS are back.

## 2026-05-12

### Added

* **Assistant**: full **payment method validation** before a method can be selected — customer type (person/company) is enforced with prompts to add or change the customer, missing email/phone is requested up front, guest customers are rejected for methods that require a registered customer, minimum amounts are shown and enforced, exclusive-use methods are blocked once the order has a settlement, and amount-input modes (`FORCE_REMAINING`, `AUTOFILL_REMAINING`, rounding) are respected.
* **Assistant**: **loyalty points** payment now shows the customer's available balance, pre-fills and caps the amount — and is blocked when the customer isn't enrolled in the loyalty program.
* **Assistant**: **Two invoice** payment is blocked when the customer (or the selected contact person) doesn't have the Two extension, with a clear message. B2B payment methods that require a contact person open a picker to choose or create one.
* **Assistant**: orders with items that require **recurring-payment consent** now trigger the consent dialog on Pay, poll for the customer's response, and block payment until all consents are accepted.
* **Assistant**: an open order can now be **manually set as confirmed**, and order items show their variant properties on the order details page.
* **Client**: **Company Registry lookup** when creating company customers (requires the extension) — and creating a customer with a duplicate phone or VAT number is now stopped when duplicate check is enabled.
* **Client**: **seller report** got a totals row and sortable columns (also on the quick totals report), and a **pick note** can be printed from the order handling dialog.
* **Admin**: super admins can add **inactive payment methods** (e.g. Forhåndsbetaling) directly from tenant settings.
* New **On hold** order handling state on the platform — paused orders are now a first-class state.
* **Klaviyo profiles now sync to Flow customers** (reverse sync).
* **Navision accounting export** now includes cash settlement (kasseoppgjør) lines per till — deposits, withdrawals, bank deposits, change out and till count differences.
* New store extension endpoints to **validate saved credentials** and **list available payment terminals** (NETS first), plus a `capabilities` field so admin UIs know which buttons to show.
* Purchase orders: `PUT .../purchase-orders/{purchaseOrderUid}` now accepts `quantityOrdered` per item, so ordered quantities can be changed without a separate call.

### Improved

* **Faster product search**, especially for variants.
* **Product search now returns hidden products on exact match** — looking up a product directly by UID or SKU bypasses visibility filters, so explicitly referenced products are always found.
* The "Sold, not delivered" report gained a **total cost** column.
* **Assistant**: featured payment methods are grouped above the rest in the payment method picker.
* Organization is now optional on customer parameters.

### Fixed

* Searching for **unpaid invoices** is fast again — combining a customer name or order number with the unpaid filter no longer slows things down.
* Refunding the same return order twice no longer credits the central warehouse a second time.
* **Omnium**: shipment tracking numbers and state updates are now applied before deliveries are created, so tracking info isn't missed — and stock in Omnium is updated when returned goods are received back at the store.
* **Monthly sales-and-stock report** no longer times out on tenants with large product catalogues.
* Saving order details no longer fails when an active pricelist campaign has lost its linked pricelist.
* **Assistant**: stock numbers in product lists, sales scan, purchase orders and receivements now respect the user's **warehouse access** instead of showing totals across all warehouses.
* **Assistant**: delivering an item that already had a serial number entered no longer fails, and the note dialog now types into the tab you're actually looking at.
* **Client**: "Show variants" on a configurable product without variants no longer returns every variant on the tenant; the seller report quantity column is no longer multiplied by 100; the parked-orders badge now shows 99+; and the order handling dialog preselects the order's current handling state.
* **Admin**: supplier phone validation corrected, and the supplier form no longer opens blank.
* Package products with 0 price now set the component prices to 0 as well.
* Warehouse stock Excel report shows the correct cost price.

[^1]: Two (two.inc) is a B2B payment provider — invoice purchases with "buy now, pay later" for business customers.

[^2]: POSA = Point of Sale Activation — prepaid product cards (gift cards, game credit, antivirus licenses) that are activated at the till when sold.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.flowretail.com/docs/may-2026.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
