{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-solution-portal/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown","redocly_category":"Solutions","owner":"MB"},"seo":{"title":"Norce Solution Design - Historical Best Price","description":"How Norce can automatically populate PreviousPrice from historical best price data.","keywords":"business-solution, technical, solution, design, pricing, previousprice, historical best price"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"historical-best-price---automatic-population-of-previousprice"},"children":["Historical Best Price - Automatic Population of PreviousPrice"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Overview:"]}," ","Norce Commerce stores price change history for all public price lists on an application. This historical data can be used to support compliance scenarios where a reference price must be shown, such as the lowest public price during the last 30 days."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With the optional automatic population feature enabled, Norce calculates the current historical best price and writes it into the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PreviousPrice"]}," field on the application's primary price lists."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"background-eu-price-transparency-requirements"},"children":["Background: EU Price Transparency Requirements"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Since July 2022, EU regulations require merchants selling to EU markets to show the lowest price from the preceding 30 days when advertising a price reduction."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Norce's historical best price tracking provides the underlying data for this. Automatic ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PreviousPrice"]}," population is a convenience layer on top of the existing history model, not a replacement for it."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-automatic-previousprice-population-works"},"children":["How Automatic PreviousPrice Population Works"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When enabled, Norce continuously evaluates price history and applies the current historical best price (lowest public price from the last 30 days) to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PreviousPrice"]}," on primary price lists."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["That value is then inherited by child price lists through standard price list inheritance."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This makes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PreviousPrice"]}," available directly in standard product price outputs, without requiring a separate lookup call."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Currently available in:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Query API standard product price responses"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Product Feed output"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Planned support:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Commerce Services Product Service API"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"activation"},"children":["Activation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The feature is opt-out and must be de-activated by Norce if the client want to handle it themselves. Contact your Norce representative to disable it."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"calculation-constraints"},"children":["Calculation Constraints"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The automatic calculation follows the same rules as historical price tracking:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Only public price lists on the application are included"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Customer-specific prices, member prices, and non-public price lists are excluded"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Promotions are not included"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In multi-currency scenarios, comparison is done in the application's primary currency"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"custom-calculation-from-historical-data"},"children":["Custom Calculation from Historical Data"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If your compliance requirements differ by market, you can implement custom logic using historical data directly instead of relying on automatic ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PreviousPrice"]}," population."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Commerce Services Product Service endpoint returns a 30-day historical best-price timeline for a SKU:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"GET /ListHistoricalBestPrices?partNo={partNo}&salesAreaId={salesAreaId}\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Response entries include:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PartNo"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PriceListId"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Price"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PriceIncVat"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VatRate"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Updated"]}," (timestamp when this value became the best price)"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Historical best price data is also available via Query API:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"GET /Products/ProductBestPrices\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"two-approaches"},"children":["Two Approaches"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Approach"},"children":["Approach"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"When to use"},"children":["When to use"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Automatic ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PreviousPrice"]}," population"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["You want a turnkey solution and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PreviousPrice"]}," is not already used for other business logic"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Custom calculation from history data"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["You need regional control over reference price logic or custom compliance behavior"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related-reading"},"children":["Related Reading"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/solution-portal/detailed-design/pricing-structure"},"children":["Pricing structures"]}," in Norce Commerce"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/user-portal/pricing/introduction-price-lists"},"children":["Introduction to price lists"]}]}]}]},"headings":[{"value":"Historical Best Price - Automatic Population of PreviousPrice","id":"historical-best-price---automatic-population-of-previousprice","depth":1},{"value":"Background: EU Price Transparency Requirements","id":"background-eu-price-transparency-requirements","depth":2},{"value":"How Automatic PreviousPrice Population Works","id":"how-automatic-previousprice-population-works","depth":2},{"value":"Activation","id":"activation","depth":2},{"value":"Calculation Constraints","id":"calculation-constraints","depth":2},{"value":"Custom Calculation from Historical Data","id":"custom-calculation-from-historical-data","depth":2},{"value":"Two Approaches","id":"two-approaches","depth":2},{"value":"Related Reading","id":"related-reading","depth":2}],"frontmatter":{"seo":{"title":"Norce Solution Design - Historical Best Price","description":"How Norce can automatically populate PreviousPrice from historical best price data.","keywords":"business-solution, technical, solution, design, pricing, previousprice, historical best price"},"metadata":{"redocly_category":"Solutions","owner":"MB"}},"lastModified":"2026-04-24T14:43:45.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/solution-portal/detailed-design/historical-best-price","userData":{"isAuthenticated":false,"teams":["anonymous"]}}