Planned changes
The features below are available on TEST environment.
Add metadata to enable subscriber filtering in label export (RTC-59178)
Label export — file-level metadata
Label export files now include file-level metadata indicating the store number and label type, derived from values already present in the export contract. The export payload itself stays unchanged, so existing integrations and consumers continue to work without modification. This metadata allows downstream systems to route exported label files automatically based on store and label type.
IM: Active, Planned, and Historical price windows in Store Routines (RTC-58233)
Store Routines — Price Views
A Prices button is available in the Store Routines grid toolbar for users with the Item.ViewPrices permission. It provides access to three independent read-only views: Active Price, Planned Price, and Price History.
Each view opens in a movable, resizable window scoped to the selected item and store. Multiple windows can be open simultaneously and update automatically when the grid selection changes. All views resolve prices through the full store hierarchy — store, price zone, and profile — so displayed dates reflect when prices actually apply rather than their raw system values.
Active Price shows the currently effective ordinary, campaign, and member prices, with at most one price per type. Planned Price lists upcoming effective prices, including promotions, in chronological order. Price History lists past effective prices sorted by most recent first. Each view includes retail price, net price, margin, and store group context. Raw date fields are available but hidden by default.
IM: Fix fetching first store in printing labels modal (RTC-41069)
Label Printing — Network Request Optimization
Opening the print labels modal in the Item Details and Item List screens no longer generates redundant store-fetch requests. The modal now issues a single request on open, resulting in cleaner network activity.
Swagger example for ShelfLocation.Export shows texts as an array instead of a language-keyed object (RTC-60944)
API Documentation — Shelf Location Export
The Swagger API documentation example for the Shelf Location export has been corrected. The texts field on shelfArea and shelfType previously appeared in the documentation as a list, when it should be shown as a language-keyed object (for example: {"NO": "Jernvare", "EN": "Hardware"}). The actual export has always produced the correct format — only the example in the documentation was misleading. Integration partners can now use the Swagger example directly as a template without encountering a deserialization error on their side.
IM: Improving filtering by promotion performance in store routines grid (RTC-55344)
Store Routines — Effective Prices
Filtering the effective prices grid by promotion or member offer is now significantly faster. In addition, the grid automatically adjusts its default sort order based on the active filters: when filtering on promotion-related columns (such as "Promotion (any)", promotion price, or promotion dates), the grid sorts by promotion start date by default; when filtering on member offer columns, it sorts by member offer start date. If both promotions and member offer then we sort by promotion start date. If non then be price start date as we used to. This ensures the most relevant rows appear at the top without any manual sorting.
IM: Fix ItemServiceJanitor job status (RTC-53175)
Janitor Job Status
The ItemServiceJanitor job removes outdated data such as old import records, label-export logs, and expired temporary pricing data. The job reports a status that reflects what it did: Success when it removes one or more records, and Completed with no effect only when there is nothing eligible for cleanup.
IM: Planned import improvements (RTC-59408)
Planned Import
Mass update file imports scheduled as planned imports can be set for the same day, not only the following day. This makes it possible to plan item changes that take effect later that afternoon or evening.
The imports overview and the imports tab on item details include an optional "Planned import date" column, showing when a planned import is scheduled to run. The column is hidden by default and can be enabled through the column chooser.
Item management: "recommended retail price" is not showing (RTC-60939)
Store Price — Price Rounding Suggestion
Fixed an issue introduced on 23 June where the "round price to..." suggestion row was no longer shown when creating or editing a store price. If a retail price was entered that did not match the configured rounding rule (for example, entering 84,85 when the rule rounds to nearest ,95), the suggestion to correct the price would remain hidden, bypassing the rounding check entirely. This is now resolved — the rounding suggestion appears immediately after entering a retail price that does not conform to the price rule.
IM: Gtin range configuration parameter (RTC-60751)
GTIN Configuration
Administrators can configure GTIN generation using either a GTIN Start (Prefix) or a GTIN/EAN From–To Range. The range option lets organizations define GTIN/EAN number series within their allocated number ranges by specifying lower and upper bounds, with validation preventing invalid configurations. The selected configuration mode is displayed and retained across sessions, and existing GTIN prefix configurations continue to function unchanged. The setting is tenant-specific and includes help text for administrators.

IM: Planned import warning message (RTC-60343)
Scheduled Import Confirmation
Setting a future date for an import in the "Mass update" window shows a short message confirming the import is scheduled and will happen automatically on that date, not immediately. Changing the date updates the message to match. If no date is selected, the import happens immediately.
IM: Manage Myhrvold and Strongpoint labels creation from the register (RTC-58161)
Electronic Shelf Labels (Myhrvold & Strongpoint)
Assigning Myhrvold or Strongpoint as a label type in the Label Type Register — for a single store or the whole chain — creates labels for all qualifying items in the affected store(s) immediately. A qualifying item carries an EAN-20 barcode, is active in the store's assortment, and has a valid store price. Labels are picked up and sent out through the same export process used for all other labels.
Note: Removing a label type from the register does not clean up labels already created for it; this will be addressed separately.
IM: Checking top-level group does not select sub-items (RTC-61182)
Fix for: Group Selection – Select All Children
When a parent group is selected, all child items beneath it are automatically selected.
Search indexing: ordinary "ended" price changes don't track progress on failure and query is slow (RTC-61102)
Search Result Price Accuracy
Fixed an issue in ProductCatalog where prices could take unusually long to update after a price period ended - for example when a campaign price expired and an item reverted to its regular price - and could occasionally get stuck entirely after a temporary system hiccup, leaving an outdated price visible. This only affected how ended prices appeared in ProductCatalog's search results; prices in Item Management were never affected. Ended prices are now processed faster, and any interruption resumes automatically instead of restarting from the beginning, so ProductCatalog stays accurately in sync with the latest prices.
Central Sales Stop Removed on Item Deactivation (RTC-58433)
Item Status & Sales Stop
Putting a chain-wide sales stop on an item (checking "stop sale" and entering a reason code) is remembered even if the item is deactivated and later reactivated. Deactivating a stopped item keeps the stop sale reason in place, and reactivating it returns the item to "Stopped" rather than "Active", so it stays off-sale until someone explicitly removes the stop. This matches how a local (per-store) sales stop works, so central and local stops behave consistently.
An item can be put into stop sale while still in Draft (it does not need to be Active first, except in the UI). If an item is set to Inactive, that takes priority over the stop sale display — the reason code is kept in the background but is not shown or applied until the item is active again.
IM: SegmentationExecutor sends notification to whatever is in the 'ModifiedBy' of the segmentation (RTC-61394)
Segmentation — Execution Notifications
Segmentation completion notifications are sent only to valid user accounts, identified by usernames containing @. This avoids errors when segmentations are scheduled by system or background services, such as nightly jobs or inventory services, using non-user accounts.
IM: Item declaraion in item details (common values) (RTC-59958)
Item declaration
The Item Details page organizes information through a new Item Declaration section that groups Nutrition, Allergens, and Weight Declaration together. Nutrition and allergen details use the standard expandable list pattern, showing the first three entries with a view all option when more values exist, with dotted separators between labels and values. Allergens display in a status-based order: Contains, Might Contain, Undefined, Does Not Contain. The Weight Declaration section includes a Manage Weight Declaration button that opens the declaration management screen, and declaration text remains visible at all times, including when no value is defined. The Weight Control toggle is located in the Scales section. All existing item data is preserved, and these changes are reflected in the Excel export.

[IM] Allergen Status Inheritance for Recipe Items from Ingredients (RTC-58645)
Allergen Status — Automatic Recalculation
Allergen statuses on recipes are calculated from ingredient data using a defined priority system. Statuses update automatically when recipe compositions, base item allergen data, or ingredient relationships change, and propagate across dependent recipes. Items unaffected by a change retain their current statuses. Recipes with no ingredients do not display allergen data.
Users can override access and change main GTIN, ExternalItemNo, ProductId and other Identifiers (RTC-59517)
Local Item Permissions
Excel mass-update import respects identifier protection on centrally-managed items. Users with only ManageLocalItems permission cannot modify Main GTIN, ExternalItemNo, or ProductId on HQ-managed items; only users with UpdateExistingItems permission can change these identifiers.
IM: Import validTo for the item in the promotion (RTC-57627)
Price Validity Protection During Promotions
When a price deletion is imported and specifies a ValidTo date, the system automatically ensures the price stays valid for the entire duration of any active or upcoming promotion on that item. If the item is part of a promotion that ends after the price would otherwise be deleted, the system extends the price validity to cover the full promotion period, using the latest end date if the item is on multiple promotions. If no active or upcoming promotion exists, the price expires on its original ValidTo date. When an extension occurs, a warning is included in the import response to inform the operator. Only promotions matching the item and the relevant store group are considered.
Build the Item incremental-export JSON in C# instead of SQL (full rewrite, feature-flagged) (RTC-60413)
Item and Price Export
We've made the export of item and price data to POS and other connected systems significantly faster — roughly 4-6 times quicker — while also greatly reducing the load this places on the system. Exports now finish faster and no longer slow down other day-to-day activities, such as imports from your ERP system, even when running at the same time.
Alongside this performance improvement, the exported item and price data has changed in the following ways:
- Only current and upcoming VAT rates are now included in the export; expired VAT rate history is no longer part of the exported data.
- VAT rate start and end dates now keep their original time zone information instead of always being converted to UTC. The date and time represented does not change, but the notation may look slightly different (for example, showing +01:00 or +00:00 instead of a trailing "Z").
- A small number of details that were never officially part of the supported item data are no longer included: active substance receipt limits, ID requirement age limit and time-limited flag, and warranty type duration and print type. These were only present as a side effect of the previous technical implementation, so any integration reading them can safely ignore their removal.
- A few fields are now shown in a more standard, consistent format: barcode store numbers are shown as text instead of numbers, order point valid-from information now includes a time as well as a date, and delivery dates are shown as a single value instead of separate year/month/day parts. The underlying values have not changed, only how they are presented.
- A defect that could cause the "deleted" status on yield/ingredient information to be missing has been fixed, so it is now reliably included when applicable.
- A group of yes/no (true/false) item fields are no longer included in the exported JSON at all when the item has no value set for them; previously they were always included with an explicit "no value" (null). This affects: best before, genetically modified, exclude from price control, duty free, sealing bag, restricted, origin, weight control, customer discount allowed, add freight, managed by HQ, managed by store, is spare part, ready for sale, pack out, ecological, healthy, environmentally friendly, change VAT, exclude from gross profit report, self-service weights, can be sold, bonus, is default order unit, is complaint permitted, complaint requires batch no, complaint requires serial no, open price, fixed price, serial number is required on sale, can be ordered, alarm item, and publish to web — as well as the trading unit's break bulk flag, each supplier's reserve-for-pre-orders flag, and each made-of-ingredient's optional flag.
- On the price side: an unsupported internal field ("isConcession") has been removed, the price identifier is now shown in lower-case instead of upper-case (same identifier value), and the already-deprecated price type field now uses standard capitalization (e.g. "Ordinary" instead of "ordinary"). Price export also now includes an item-identifier detail that indicates whether only item identifiers should be used for matching, matching how item export already works.
This is the complete list of changes to the exported item and price data; no other fields or values have changed.
IM: Save current LabelProcessor job status during execution (RTC-53300)
Electronic Shelf Labels
The background process that keeps electronic shelf labels up to date (triggered by price changes, promotions, item changes, and other assortment updates) is now more resilient to interruptions. Previously, if this process was interrupted partway through a large volume of changes, it would restart from scratch on its next run, which could delay label updates during busy periods such as large-scale price changes or promotion launches. It now keeps track of its progress as it works and, if interrupted, resumes from where it left off instead of reprocessing everything. This results in faster, more dependable label updates, especially when many items or stores change at once.
IM: Date and time for valid to (RTC-61413)
Price end date
The “Valid to” column in the store price tab displays the time when the price will expire, along with the date.
Surface "Give feedback " link in the version notice (ItemService Chain Web module) (RTC-61542)
Feedback
When a new version of the Item Management module is released, the "what's new" notice you see now includes a "Give feedback" link, making it much easier to share your thoughts right after an update. Previously, the feedback option was only available from the user menu — which still works exactly as before. In addition, feedback submissions now use a 1-5 star rating instead of the previous thumbs up/down.
[COOP#86] [Item Management]- Min/Max limit for margin in price calculation (RTC-49270)
Margin Limit Warnings
Configurable minimum and maximum margin limits control store price calculations. When a calculated margin falls outside the configured range, the UI displays a warning during price creation or editing, while still allowing the price to be saved.
IM: Export labels from export view (RTC-58136)
Manual Label Export
A label export can be triggered directly from the Export view in Item Management, without waiting for the next scheduled export job. In the Export view, a Labels section is available in the side navigation. Clicking the Export button lets you select a label type and a store, then trigger the export manually. Once confirmed, the system exports all active unprinted labels for that selection.Only BlobExport-category label types (e.g. LTG) are available for manual triggering. Future-dated labels are not included — they are picked up automatically by the scheduled job when their date is reached. The Labels section includes an export history grid showing past runs, filterable by date. The Last Export panel shows the most recent export run for the current label type and store selection.

IM: Sales statistics in store routines (RTC-59177)
Store Routines — Sales Dashboard Action
Sales action to the Store Routines view was added, allowing users with reporting permission to open an embedded sales dashboard for the selected items without leaving Item Management. The dashboard updates automatically when the item selection changes, while preserving the current store context.
IM: Label export fields changes (RTC-60500)
Label Export Fields
The label export includes additional item attributes for shelf label generation: tandem GTINs, quantity in pallet, a deposit item identifier (distinct from the existing deposit indicator), procurement rule, item area number and text, and a bold-text-in-weight-declaration indicator. Unit price for the ordinary price is included using the existing per-unit-of-measure calculation; the promotion unit price is populated only when an active promotion applies. All previously exported attributes remain unchanged. Changes to the new fields are tracked, and labels are regenerated accordingly.
Store Routines: stale selected-items count on filter change & inconsistent price-window stacking (RTC-61218)
Item Selection and Price Windows
The selected items counter refreshes correctly when a new search is performed or filters are applied, reflecting only the items currently selected in the active result set and excluding stale selections from previous searches. Multi-selection remains supported for future reporting capabilities.
The Active, Planned, and History price windows handle selection more clearly: when exactly one item is selected, the relevant prices are displayed; when multiple items are selected, a message prompts the user to select a single item.
Window stacking is now deterministic — bringing a price window to the foreground moves only that window to the top while preserving the relative order of the remaining windows.
Timezone difference between the grid store routines and item service(?) (RTC-61230)
Store Routines Price Display
Prices shown in Store Routines display the correct status and timing relative to Item Service, including prices marked as upcoming ("planned").
Safely re-enable read-only replica reads for GenericExport change-export workload (supersedes RTC-37300, fixes revert cause RTC-58311) (RTC-61029)
Item Export Performance & Reliability
Exports of item, price, and other item-related data to stores and connected systems now run faster and put less strain on the main database, since the export process reads its data from a separate copy of the database rather than the live one. The improvement is most noticeable during periods when a large import is running at the same time as an export, since the two no longer compete for the same database resources.
We also fixed an issue where manually requesting an export of a specific item or items while a large export (such as the full price export) was already in progress could, in rare cases, cause those changes to be silently left out of the export entirely, with no indication that anything was missing. Changes requested during a running export are now reliably included, either in that export or the next one.
IM: Add Breece and Pricer label types (RTC-60499)
Label Types
Item Management includes two additional label types, Breece and Pricer, that can be assigned to items for electronic shelf labels — per store or for all stores, as configured in the label types register. The label type can be assigned from the UI or through import, using JSON or Excel and referencing the type's code. When an assigned item has a relevant change, such as to price, item data, or promotion, a label is generated and included in the export feed; unchanged labels are not re-exported. Removing the label type from an item stops further label generation for it. These new types are separate from the existing Breece and Pricer label types used for direct shelf-label integrations, which continue to work unchanged.
IM: Confirm import deletion in import grid (RTC-61282)
Import Deletion
Deleting one or more imports from the Imports list requires confirmation before removal, whether a single file or several are deleted at once. This helps prevent accidentally deleting the wrong import, including a planned import scheduled for a future date. Confirming proceeds with the deletion, while canceling keeps everything unchanged. This matches the confirmation already shown when deleting a single import from its details view.
IM: Label export fields changes - bug fix - no scale - Myhrvold and Strongpoint (RTC-61674)
Label Export Field Tracking
Change tracking for the label export fields — alternative GTINs, deposit item identifier, area, quantity in pallet, bold text in weight declaration, and order point minimum/maximum — applies to MyhrvoldNoScale and StrongpointNoScale label types (managed in the label type register). Labels regenerate automatically when these fields are modified.
IM: Create item with configured gtin range (RTC-60752)
GTIN Auto-Generation
Item Management supports GTIN range-based auto-generation for primary GTINs. When GTIN range mode is enabled, users who can create only local items have the primary GTIN automatically assigned from the configured tenant-specific range, and manual entry of the primary GTIN is unavailable. Users with permissions to create central items can choose either automatic GTIN generation or manual entry; automatically generated GTINs are unique within the tenant and fall within the configured range, while manually entered GTINs are validated using the existing format, check-digit, and uniqueness rules and may fall inside or outside the configured range. Behavior is unchanged when GTIN prefix mode is active. If no unique GTINs remain in the configured range, item creation is prevented and a clear error message is displayed.
IM: Tab click does not move focus to next input (RTC-60828)
Price Form Navigation
Tab key navigation in store price forms skips read-only fields, jumping directly between editable fields for faster keyboard data entry.
Extend background worker to move values from StoreLocalAttributes to StoreGroupLocalAttributes (RTC-60434)
Store Group Local Attributes
A background worker incrementally backfills item attribute values from store-level attributes into the private-store-group attributes for stores with a private store group assigned. The migration is insert-only and batched, making it idempotent and safe to run on production without locking or triggering re-export of already-exported data. This is part of the ongoing consolidation of per-store item attributes into the store-group model.
[Item Management] Support for removing an item image (RTC-23126)
Delete Item Image
Items now support deleting an existing image directly from the item details. A Delete image button appears next to the item's picture; clicking it and confirming removes the image. If the item has variants (e.g. different sizes or colors), you can choose to remove the image from just this item or from the other variants as well.
IM: End of the price for item in promotion (RTC-57628)
Campaign Price Protection
A nightly automated process detects cases where a store price is set to expire while an item is still part of an active promotion, and takes corrective action before the expiry occurs. If a price is about to expire while the item is still on promotion, the system extends the price's validity to cover the remainder of the campaign. Where the promotion applies at a more specific level than the existing price (for example, a store-level promotion but only a chain-wide price), the system creates a new price at the appropriate level so the promotion can proceed correctly. All prices adjusted or created this way are included in the next export to the point-of-sale system. This feature is controlled by the EnableCampaignValidationOnPriceDeletion system parameter.
IM: Price calculation setup register (RTC-60546)
Price Calculation Setup Register
A Price Calculation Setup register is available in Item Management's Registers module, allowing the cost section of the price calculation to be configured per chain. Within the cost price section, cost elements can be added, removed, and reordered, and for each element the preceding value it is calculated from can be defined. The wholesale price, net wholesale price, net price, and the entire sales price section remain fixed and cannot be edited, removed, or reordered. The configuration is saved per chain and persists across sessions; selecting a row in the calculation shows an explanation of how that element is calculated based on the current configuration. Existing chains retain a default configuration matching current calculation behavior, so no change occurs until the setup is adjusted. Register texts are available in English, Norwegian, Danish, Swedish, and Finnish.

Mass update import silently fails with HTTP 500 when an xlsx cell contains "NULL" in Quantity per unit / Number of units (RTC-59277)
Excel Mass Update Validation
Excel mass-update import now handles invalid values in the Quantity per Unit and Number of Units columns correctly. Previously, entering "NULL" as text in these columns caused the entire upload to fail silently, with no items imported and no error shown. Now a clear message identifies the exact row and column with the problem. Additionally, entering 0 in either column is no longer allowed, aligning with the existing validation rule used elsewhere in the system.
[Item Management, Promotion] Items in promotions (store routines) (RTC-54699)
Promotion visibility in Store Routines
The Store Routines grid now shows whether each item is part of a promotion through four filterable columns — Promotion (any promotion type), Promotion Price, Member Offer, and Mixes. When an item is part of a promotion, a "View promotions" option appears in the row's menu; selecting it opens the "Items in promotions" grid in the Promotion module in a new browser tab, automatically filtered by the item's SKU — a new column added to the "Items in promotions" grid.