> 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/june-2026.md).

# June 2026

## Monthly summary / tl;dr

* **Shelf warmer report** spotlights products with stock that just aren't selling.
* **Post-sale follow-up tracking** — see and retry gift-card capture, digital activation, loyalty and receipt printing without redoing the sale.
* **Dintero terminal card refunds** now complete on the physical terminal.
* New **`DINTERO_CARD`** payment method drives Dintero's physical **Seitatech terminals**.
* Receivements can be marked **invoice-approved** (fakturagodkjent) with a full audit trail and report filter.
* **Assistant** keeps growing up — services, stock adjustments, digital product activation and permission-based access control.
* **EHF** **invoicing** got a thorough cleanup — discount lines, package products, øre rounding and Danish/Finnish payment codes all now validate cleanly.
* Receipts now carry the **legal company name and org. number** required for Norwegian sales receipts.
* **Accounting reports** got several accuracy fixes — gift-card sales, settlement issuers and unmatched lines are no longer dropped or merged.
* **Adyen** card payments are now protected against **double-charging** on POS retries.
* **Omnium click & collect** orders now finish their pickup handling automatically when the shipment is ready to deliver.
* New **`SUPPLIER_PRODUCT`** permission, and receiving goods no longer auto-overwrites a supplier's purchase price.
* **Saved addresses in sales** — **Client** now fills in, or lets you pick, the customer's saved delivery and invoice addresses.
* **Admin**: search products by name, GTIN or SKU, mark receivements invoice-approved, choose Dintero as the till's payment terminal, set a Danish giro number, and validate extension credentials — and adding payment methods no longer needs super-admin.
* **Client**: pick saved delivery and invoice addresses, manage customer contacts (add, update, delete), percentage pricing on purchase orders, browse product groups while selling, smarter search, and printing to any printer in your store.

## 2026-06-30

### Added

* **Client**: full **customer-contact management** — a customer-contacts entry in the main menu, a keyboard shortcut for the "create new" button in the customer and contact search dialogs, and options to update a contact straight from the search dialog or delete it entirely (with the right permission).

### Improved

* **Client**: the customer-contact search dialog no longer starts with an empty search.
* **Client**: when the app needs to reload data after resuming, it now shows loading and error information instead of appearing stuck.

### Fixed

* **Client**: a store with **no default warehouse** could crash the purchase order confirmation and receivement dialogs.
* **Client**: the app could report **"no internet connection"** when it actually had one.
* **Client**: invoice payment and prepayment no longer stop when items with a serial number have already been delivered out — the order-status check was too strict.
* **Client**: adding an addon that requires an **order item reference** now prompts for it instead of silently failing.
* **Client**: the order details dialog now shows the **customer contact**.
* **Client**: the product stock adjustment dialog now shows an **error banner** when submitting fails.

## 2026-06-29

### Improved

* Staff with the **sales-order permission** can now register a payment on a settlement — previously this needed the separate payment permission.

## 2026-06-25

### Fixed

* **Updating a B2B customer now keeps its parent-company and department links in sync in Omnium** — both the parent relation and the customer's own departments are pushed on every update, so department links are no longer lost.

## 2026-06-24

### Improved

* **Omnium click & collect orders now complete their pickup handling automatically** when the Omnium shipment reaches "ready to deliver", instead of staying stuck at "new".

## 2026-06-23

### Added

* **Shelf warmer report** — a new inventory report that surfaces products sitting on the shelf with stock but no recent sales, so slow movers are easy to spot and act on. In **Admin** it lists stock quantity and value with last sold/received dates, colour-codes the "Last sold" column (with a "Never sold" flag) and tints rows by severity, offers quick date presets (last 30/60/90/180 days, this year) alongside a custom date, filters by organization, store, supplier, brand and product group, opens a per-warehouse and supplier breakdown per row, and exports to Excel.
* **Post-sale follow-up tracking** — you can now follow how a completed sale's follow-up steps are doing: gift-card capture, digital product activation, loyalty and receipt printing. A receipt shows an overall status for these steps, receipt search can filter on that status, and you can list each step on its own and retry any that didn't finish — without redoing the sale. **Client** now surfaces these steps and lets you retry a failed one.
* **Refund failed activations and un-issued gift cards** — you can now refund a product line whose digital activation never completed or whose gift card was never issued, without the refund trying to activate the credit or reverse a card that doesn't exist.
* New **customer-operation permissions** — `CUSTOMER_DELETE`, `CUSTOMER_BATCH` (the batch endpoint `POST /tenants/{tenantUid}/customers/batch`) and `CUSTOMER_MERGE` (`POST /tenants/{tenantUid}/customers/{customerUid}/merge`) split deletion, batch creation and duplicate-merging out of the general `CUSTOMER` permission so each can be granted separately. The built-in system backoffice and system administrator roles get them automatically; the system seller role does not, and other roles must be granted them explicitly to retain access.
* **Pickup messages now include the customer's name** — the pickup note SMS template offers a `{{.CustomerName}}` variable, and **Client** fills it in where the template uses it.
* Order **PDFs now show the store bank account number** when one is configured on the store or organization.
* **Client**: the **delivery dialog now uses the customer's saved delivery addresses** — a single address fills in automatically, and when there are several you pick one when adding or changing the address (the same applies after looking up a customer).
* **Client**: when adding or changing a sale's **invoice address**, you can now pick one of the customer's **saved invoice addresses** or enter one manually.
* **Client**: **percentage pricing on purchase orders** — typing a percentage when editing a PO line's unit price sets the price to that percentage of the current price (10% → a tenth), while a negative percentage reduces it (−10% → price minus 10%); the same entry works in the add-product dialog's purchase price field.
* **Client**: the **product info overview now lists each supplier's purchase price** (with supplier SKU) under the cost price — hidden by default, revealed per row or all at once with the cost-price shortcut.
* **Admin**: **till setup can use Dintero as the payment terminal**, with a field for the Dintero terminal ID.

### Improved

* **Dintero terminal card refunds** now work end to end on the physical terminal. A `DINTERO_CARD` refund is started from a till in the same store as the original payment (with `DINTERO_TERMINAL_ID` configured) and the cardholder completes it on that terminal; refunds now send order line items so Instabank purchases and partial refunds work, with partial refunds scaling line amounts proportionally. Refund steps also write structured transaction-log entries, making failed refunds easier to diagnose in **Admin**.
* **RMA order emails and PDFs** now show the RMA number in the subject line and document header instead of the return reason, making cases easier to find in email and attachments.
* **Service order report PDF** now shows the order title as a bold lead above the work description.
* **Client**: **receivement history now shows the actual received date** and the correct receiver name.

### Fixed

* SMS messages sent through **LinkMobility** now use the correct API host, **restoring SMS delivery**.
* **Gift cards now keep their card number** — the number the customer receives and uses to pay was being cleared right after the sale completed, leaving the card unusable.
* **Orders with cancelled card payments can be parked again** — a terminated settlement (for example after cancelling Adyen on the terminal) no longer blocks parking with "Order has settlements, cannot park."
* **Invoice PDFs now show the customer's invoice address** when one is set on the order. Previously only the customer's main address was used, so invoices could show the name without street or postal code.
* **Updating a customer contact** linked to more than one customer now works — it previously failed with "Could not find customer with UID".
* **Deleting a cash or other directly-captured payment** from an order now actually removes it, so undoing it after settling takes effect (previously it looked deleted but stayed on the order).
* **Partial payment receipts** are now rejected with a clear error when the selected lines total more than the remaining order value, instead of creating a receipt that exceeds the order total.
* **Order status** no longer returns a server error when a serial number on a line is no longer in stock (sold or adjusted away after the order was created) — the POS shows a "serial number not available" message on the line instead.
* **Client**: **internal purchase orders between stores in different organizations** no longer crash the list or show the store as "unknown" — the store name now resolves correctly.
* **Client**: **email address validation now allows uppercase letters**.
* **Client**: scrolling the item list on an open purchase order **no longer jumps back to the focused line** — keyboard navigation still scrolls the focused line into view, but manual scrolling is respected.
* **Admin**: **logout is now available from the sidebar** even when you've been removed from all stores and tenant data fails to load.
* **Admin**: printer settings shown as dropdowns can now be **cleared by choosing "None"**.

### Removed

* Developer/ops: the `FLOW_DINTERO_TERMINAL_URL` and `FLOW_DINTERO_TERMINAL_AUDIENCE_URL` settings — the Dintero terminal now uses the shared Dintero URL config (`FLOW_DINTERO_URL` / `FLOW_DINTERO_AUDIENCE_URL`).

## 2026-06-17

### Fixed

* **Accounting posting list**: settlement issuers now always appear as their own line, even when no per-issuer account number is configured — previously issuers that fell back to the payment method's shared account were merged into a single line.
* **Gift card sales are no longer dropped from accounting reports** when no gift card ledger account is configured for the store; the line is reported with an empty account instead.

## 2026-06-16

### Added

* New **`SUPPLIER_PRODUCT` permission** controls who can create, update and delete supplier products on a product. Roles that already had the `SUPPLIER` permission keep full access automatically.
* Danish stores can now add a [**FIK**](#user-content-fn-1)[^1] **payment block** (kortart 71) to EHF invoices, so receivers can pay via FIK indbetalingskort — configured via a new **Giro number** field in **Admin** bank information (the 8-digit FIK creditor number), exposed as `giroAccountNumber` in the API.
* **Product search** can now filter by **product name,** [**GTIN**](#user-content-fn-2)[^2] **and SKU** — surfaced in **Admin** as a search-type dropdown, and available as `productName`/`gtin` request fields in the API.
* **Klaviyo inbound webhooks** — Flow now handles events pushed back from Klaviyo.
* **API**: new **order receipt task endpoints** expose the status of post-sale steps (gift-card capture, digital activation, receipt printing) per receipt — a per-receipt task list plus a rolled-up `state`, so integrations can tell whether a sale's follow-up steps completed.
* **Admin**: a **"Validate credentials"** button on store extensions checks that the saved credentials actually work (for extensions that support it).
* **Admin**: till setup can now **pick the payment terminal ID from a list** fetched from the connected payment extension, with manual entry as a fallback.
* **Admin**: the **Receivements & Confirmations** report gained an **invoice-approved** (fakturagodkjent) column — tick to mark/unmark each receivement (hover shows who approved it) — plus an "only not invoice-approved" filter that the Excel export respects.

### Improved

* **Receiving goods on a purchase order no longer changes the supplier product's purchase price automatically** — the price is now only updated when you edit the supplier product directly, so a delivery can't quietly move your cost prices.
* **Organization lists now respect access**: users with tenant-wide roles still see every organization, while users with organization- or store-level access see only theirs.
* Offer and order **PDFs now include the customer contact**.
* The [**RMA**](#user-content-fn-3)[^3] **order list** gained reason and status filters, and a customer filter was added to the **service order list**.
* **Admin**: **adding payment methods no longer requires super-admin** — anyone with the Payment Methods permission can now create an external method or add a system method from the dropdown.

### Removed

* The deprecated header-level `originalPurchaseNumber` and `sortBy` on the RMA orders response (the item-level `originalPurchaseNumber` is unchanged).

### Fixed

* **Adyen card payments are no longer double-charged** when the POS retries or polls status after a successful capture — completed settlements stay captured, duplicate callbacks are ignored, and a second payment on the same order is rejected.
* **Settlement rounding** on orders paid in part is no longer counted twice.
* **Stock moves and adjustments now match serial numbers regardless of capitalisation** — a serial entered in different casing is found correctly and stored in its original form.
* A **printer saved without a required setting** (such as a label printer's label size) now falls back to that setting's default instead of being stored incomplete.
* **Partial tenant user updates** (e.g. a language change) no longer clear the user's store access when `storeAccess` is omitted from the request.
* Creating or updating a customer no longer fails with a **misleading error** when the Omnium sync fails.
* **Admin**: opening a store whose name had a stray or trailing space could freeze the page — store names are now trimmed when saved.

## 2026-06-15

### Added

* **Client**: **browse product groups while selling** — a new Browse button in touch sale (and `Cmd`/`Ctrl`+`B` in keyboard sale) opens a dialog to drill down through product groups and their products, with search, breadcrumbs and a back action. Tap a product to add it straight to the order.
* **Client**: a **reason reference** field on credit order items and RMA orders, shown when the selected reason requires one.
* **Client**: option to **send the order receipt after a prepayment**.

### Improved

* **Client**: a cleaner **app bar layout**, and the login/onboarding screen got a refreshed background animation.

### Fixed

* **Client**: featured payment methods now respect the method's **amount-input setting** and the customer's **loyalty points balance** in the amount field.
* **Client**: paying some lines on one receipt with an **exclusive-use payment method** no longer blocks paying the remaining lines on another receipt with an exclusive-use method.
* **Client**: printing a receipt **after a prepayment** now prints the entire order, not just the single receipt.
* **Client**: touch-mode sale now shows the **quantity** on an order line even when the line can't be edited.
* **Client**: marking deliveries in the delivery list now updates the **seen** info.
* **Client**: the app bar no longer overlaps the **iOS notification bar**, and the company-department name field is no longer wrongly read-only.

## 2026-06-12

### Fixed

* Accounting reports and exports: customers **without a customer ledger number** are no longer merged into one entry — previously all such customers were collapsed into the first one found, so their vouchers showed the wrong customer name and details.
* Accounting reports and exports no longer silently drop sale lines without a resolvable account (no VAT code and no explicit ledger number) — the report now reflects every line on the receipt.

## 2026-06-09

### Added

* Receivements can now be marked as **invoice-approved** (fakturagodkjent), recording who approved and when — even after the receivement is received. The receivements report can filter on not-yet-approved, and the Excel export gained "Invoice Approved" and "Approved By" columns.
* New **`DINTERO_CARD`** payment method that drives Dintero's physical **Seitatech terminal**. Configure via the existing `DINTERO` store extension with a new `DINTERO_TERMINAL_PAYMENT_PROFILE`, and set `DINTERO_TERMINAL_ID` per till. The existing `DINTERO_PAYMENT_LINK` flow is unchanged.
* **Assistant**: new **Services** page with service creation and preview.
* **Assistant**: **stock adjustments** in the warehouse section — withdraw stock, set a new quantity or a new cost price, alongside the existing move between warehouses.

### Improved

* Abandoned searches are now **cancelled immediately** — one broad search left behind by an impatient typist can no longer tie up the system for other users.
* **Package components are now locked across every client and integration**: their price, quantity and discount are set by the package product and can only be changed by editing the package. Omnium receives the component lines as read-only.
* An order's **notification history from Omnium** now shows the SMS and email messages actually sent to the customer — channel, recipient, subject and message — instead of internal notes.
* **Sales summary report**: parked/confirmed orders and open offers are counted by creation date within the period, with footnotes explaining which figures use settlement date (revenue) and which use creation date (activity).
* Receipts and receipt emails now display the organisation's **legal name and org. number** — required for valid Norwegian sales receipts — instead of the store name.
* **Gift card and store credit payment methods can no longer be mixed** — a store-credit card is rejected when paying by gift card and vice versa.
* VismaNet accounting export is now sorted by voucher number.

### Fixed

* **EHF invoices and credit notes with a discount line are no longer rejected by the recipient** — the discount is now sent as a proper line discount instead of a negative price (which PEPPOL forbids). Credit note VAT and totals also no longer overcount the discount.
* **EHF invoices for orders with a fixed package** no longer fail validation (only component lines are sent, so totals match), and **øre rounding** is now listed as its own rounding amount instead of being folded into the VAT.
* **Fixed package products**: components now always sum exactly to the package's total price on every order — no more øre drift making downstream invoices reject the order.
* **24Seven accounting export** now balances: each invoice and credit note includes its counter-entry against the customer interim account, and credit notes and in-store card payments are booked on the correct side.
* VismaNet export: øre rounding is posted on the correct side, and customer payments are no longer duplicated into the transaction file.
* Invoices financed through **Two** now show clean product lines with exact totals, and multi-rate orders are no longer rejected.
* Returning to card on a **split-tender sale** no longer fails when the refund is higher than the original card amount.
* **Open items report**: customers who prepaid the *full* order amount no longer disappear from the report — it previously understated how much stores owed their customers.
* Sales summary turnover and related KPIs now count sales **settled within the period** (by settlement date) instead of by last-modified date.
* Receipt PDFs for payment-only orders now show a payment receipt instead of the full invoice with product lines.
* Trying to deliver an order line that can't be delivered yet now responds with a clear conflict status instead of looking like a server error.

## 2026-06-08

### Added

* **Client**: better **printer handling** — printing uses the printers configured on your device, with the option to select any other printer in your store.
* **Client**: the order delivery dialog now lets you **copy the order number by tapping it**, select and copy text in the info section, see the customer's mobile number, and jump to order details via the new "Show order" button.

### Improved

* **Client**: shared search now starts at **two characters** and cancels outdated requests, so results no longer race each other.

### Fixed

* **Client**: printing or downloading an A4 PDF for a specific payment receipt produced the whole order document — it now fetches the actual receipt.
* **Client**: in rare cases, search-as-you-type could show the second-to-last query as the final result.
* **Client**: the order handling dialog now refreshes the customer's mobile number from the order when SMS is toggled on.
* **Client**: in keyboard-mode sale, adding a company customer now asks you to select a contact and to update delivery addresses when deliveries are present.
* **Assistant**: scanning in order handling now finds orders with handling state **On hold**.
* Danish EHF invoices now use a payment method code Danish receivers accept ("Payment to Bank Account"); EUR invoices within SEPA still use "SEPA Credit Transfer".

## 2026-06-02

### Added

* **Till open/closed status** is now available — the API exposes a `status` field on tills, and **Admin** shows it.
* **Admin**: new **"Receivements & Confirmations"** interactive report under Inventory & Warehouse — two tabs, rich filters (date, store, status, supplier, free-text across packing list / order references / PO numbers), a details dialog linking into the purchase order modal, and an Excel export that always matches what's on screen. The **Purchase Orders Report** is now its own card.
* **Admin**: store settlement — the first cash deposit **prefills its denomination breakdown** from the counted registers.
* Invoice PDFs from Norwegian tenants now include the legally required **`Foretaksregisteret: <org.nr.>`** disclosure.
* Payment responses now include **`orderReceiptUid`**, linking each payment to the receipt it was captured on — no extra lookup needed.
* Optional **reason references** on return order lines (`returnReference`) and RMA orders (`reference`), with `requiresReference` on RETURN reasons for client-side validation.
* **Admin**: support for the new tenant extensions `DIGITAL_PRODUCT`, `COMPANY_REGISTRY` and `PAYMENT_GATEWAY`.

### Improved

* Orders with a **prepayment can no longer have their customer changed or cleared**, protecting bookkeeping attribution.
* **Bank account, IBAN and BIC/SWIFT are now validated** when saving a store, organisation or supplier — malformed values are rejected with a clear error.
* EHF invoices now pick the payment method code that fits the trade lane — "SEPA Credit Transfer" for EUR within SEPA, "Credit Transfer" elsewhere — so Danish and Finnish accounting systems parse them reliably.
* **Admin**: the purchase order details dialog got a cleaner layout (info column + stacked address cards, note in a yellow strip, plus supplier reference, reserve-after date, discount and freight rows), and the purchase orders report now filters by **created date**.
* **Admin**: redesigned **role permissions modal** with a searchable permission checklist, replacing the dual-list selector.
* **Admin**: store settlement — a register can be closed with a different change amount than it opened with, with a warning when it differs from the opening float.
* The "Sold, not delivered" report gained a **total sales** column.

### Fixed

* Danish EHF invoices now use the **IBAN** when both IBAN and a local account number are configured — Danish customers no longer get an unparseable 14-digit string in the payment field.
* The `requireRefundToSameMethod` restriction is no longer applied when a return order's net flips positive.
* Two crashes in the **Omnium sync** (missing line item references) are fixed.
* **Admin**: Excel downloads no longer fail sporadically across Purchase Orders, Receivements, Sales Products, Open Items, Inventory, Order Intake and Products Sold Not Delivered.
* **Admin**: the SKU field accepts `/` and other characters the backend allows; a typed-but-unconfirmed EAN is picked up on save; "Number of units per product" is no longer required for non-physical products.
* **Admin**: payment method save no longer fails silently on older methods (e.g. cash), and validation failures surface a toast.

## 2026-06-01

### Added

* **Client**: the payment dialog now shows backend-provided **informational messages** in the payment methods list (e.g. when paying a subset of order lines).
* **Client**: the show payments dialog has a **print/email receipt action per payment**, and order handling can set the **On hold** state (with a matching filter in the order handling list).
* **Assistant**: support for **digital product activation codes** at the till.
* **Assistant**: **permission-based access control** — features are gated on the user's permissions and appear locked when missing (stock adjustment requires Stock Management, goods receipt requires Receivement).
* **Assistant**: goods receipt now warns when an entered quantity is **unusually large** — catching a barcode accidentally scanned into the quantity field before it's saved.

### Improved

* **Client**: company lookup when creating a customer now runs the **duplicate check first**, and customer company departments are managed from a dedicated departments tab.
* **Client**: the print/download dialog can be scoped to a specific receipt, and receipt printing stays available even when the order isn't fully settled.
* **Assistant**: "Print shipping label" is now always available in the order handling footer.

### Fixed

* **Client**: paying an invoice now prompts for receipt print/email, and available payment methods are correctly scoped to the selected order lines when paying a subset.
* **Client**: quantity inputs for order delivery and stock adjustments now accept **decimal quantities** (e.g. 2,5 kg) — products sold in fractional units can be delivered and adjusted without rounding.
* **Client**: the counting help no longer crashes when a quantity passes the thousands separator (`46 000`), and the customer edit dialog no longer crashes if the sale clears its customer while the dialog is open.
* **Client**: payment favorites are hidden when the order has a negative remaining amount.

[^1]: FIK (Fælles Indbetalingskort) — the Danish payment-slip standard for paying invoices via a giro/creditor number.

[^2]: GTIN (Global Trade Item Number) — the unique number behind a product's barcode (e.g. an EAN).

[^3]: RMA (Return Merchandise Authorization) — a formal authorization for a customer to return or exchange goods, tracked as its own order type.


---

# 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/june-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.
