On this page:
- Prerequisites
- Package concepts reminder
- Package values used in sales pricing
- Pricing preparation
- Price definition on sale start
- Managing pricing during the sales
- Calculations details
- Examples and usecases
Preamble
Official upcoming Sales Dates
- Sales start : Wednesday, June 25th, 8:00AM GMT+2
- Sales end : Wednesday, July 23rd, 12:00AM GMT+2 (Tuesday 22nd up to midnight)
Scope
- This only applies to offers targetted at Cdiscount.com offer publication
- Sales are based on the french official sales periods
- Current sales submission are only available through the Offers publication through XML/ZIP packages
Price history considerations
French law requires mentionning and taking into account the lowest public price of a product within the last 30 days on a given platform during the official sales period. See also “Omnibus” French Regulation
Lowest price point is considered at the product level, and includes lowest price from potential competing seller offers on the current product linked to your offer.
All sales percentages displayed to the customers will then be based on this lowest price point within the Cdisount.com marketplace, and not specifically on your declared reference pricing.
Package concepts
Package submission
As stated in the Offer documentation there are two ways to submit offers :
- The JSON submission method (which only targets non-Cdiscount channels)
this method does not support sales currently - The XML/ZIP submission method (which enables publishing to Cdiscount and other channels)
this is the method to be used to submit offers with sales
Package format
Any given package can have two forms : (and will be refered to like that in this page)
- A Full package, containing :
- basic offer information (identification/pricing/inventory)
- offer shipping methods along with preparation times
- eventual sale declaration
- A Light package, also known as Stock/Price, aimed only at updating your offers, containing :
- basic offer identification
- standard pricing
and/or - available inventory
Offer declaration in packages
It is assumed here that you know how to build and created an offer package.
Including the fact that an xml Offer
object is included with the OfferPackage/OfferPackage.Offers/OfferCollection
node.
Static values not shown in brackets have to be specifically stated as sampled below.
Within a Light Package
An offer definition typically looks like :
<Offer SellerProductId="[your_reference]" ProductEan="[product_gtin]"
Price="[decimal]" StrikedPrice="[decimal]"
Stock="[integer]"
/>
StrikedPrice
being optional but used in conjuction withPrice
Stock
being optional- Either one or both the declarations can be set
- An offer must be existing and fully configured (with delivery modes and tax information) on the given gtin
This format does not enable managing sales but can have some impact as mentionned below.
Within a Full Package
An offer definition contains 3 parts :
- The general offer identification and information as attributes of the
<Offer>
node - The shipping information as a child
<Offer.ShippingInformationList>
node - The optional sale pricing information as an
<Offer.PriceAndDiscountList>
node
And typically looks like this :
<Offer SellerProductId="[your_reference]" ProductEan="[product_gtin]"
ProductCondition="[integer]"
Price="[decimal]" StrikedPrice="[decimal]"
EcoPart="[decimal]" DeaTax="[decimal]" Vat="[integer]"
Comment="[text]"
PreparationTime="[integer]"
Stock="[integer]">
<Offer.ShippingInformationList>
<ShippingInformationList Capacity="[integer_count]">
<ShippingInformation
DeliveryMode="[delivery_mode]"
ShippingCharges="[decimal]"
AdditionalShippingCharges="[decimal]"
/>
</ShippingInformationList>
</Offer.ShippingInformationList>
<Offer.PriceAndDiscountList>
<DiscountComponentList Capacity="1">
<DiscountComponent Type="3"
DiscountValue="[decimal]"
SalesReferencePrice="[decimal]"
DiscountUnit="1"
/>
</DiscountComponentList>
</Offer.PriceAndDiscountList>
</Offer>
We’ll look below how the <Offer.PriceAndDiscountList>
behaves when managing your sale prices.
Package values definitions
Note : Final price is considered before shipping calculation and eventual additional shipping charges you have declared.
Prices are specified as a dotted decimal with up to 2 decimals.
eg: Price="56.89"
Price
- Refers to the public price of your product
- Is considered outside of all active promotions or sales
StrikedPrice
- Refers to the displayed striked price
- Has no impact on pricing calculations and is only intended for display purposes
SalesReferencePrice
- Is used to calculate the final price of your offer during sales
DiscountValue
- The percentage applied to the
SalesReferencePrice
to calculate the final price - This is expected to be over 5%
- Specified as a dotted decimal between
"1.000"
and"100"
, it will be rounded at up to 2 decimals for calculations
Before the sales start date
Preparing your pricing
You can upload any number of Full Packages before the official sales start point.
Only the last update will be taken into account.
- Light Packages
- only update the current price/striked price and/or inventory
- will not change your sale configuration for the specified offers (if existing)
- Full Packages
- will enable sale declaration with the
<Offer.PriceAndDiscountList>
node - will enable sale removal when the
<Offer.PriceAndDiscountList>
is not specified
- will enable sale declaration with the
When the sales start
Note pricing calculations are still considered outside of shipping charges.
Calculations will only be considered IF there as been at least one Full Package sent before the starting time not overwritten with a disabling Full Package.
or refer to “During Sales” below.
- Lowest price point within the last 30 days is considered as a reference price.
- the lowest final price of any offer including yours on the given product id/gtin is considered.
- Expected final price is calculated from your sales declaration
- Effective promotional rate for your offer is calculated
- Best offer selection is performed by the marketplace
See below “Sales calculations”
During sales
Updating the sales definition
This is as simple as submitting a Full Package.
Submitting with the <Offer.PriceAndDiscountList>
node will update the sale calculation to the new values you set.
Submitting without this node, will disable the sale state for your offer and revert to using only your Price
and StrikedPrice
information.
Light Package updates impacts
- Submitting only inventory information
<Offer SellerProductId="[your_reference]" ProductEan="[product_gtin]" Stock="[integer]" />
- will only update the inventory
- Submitting with price information (with or without inventory)
- If the submitting a Price point equal or below the current Final price will overtake the lowest price and disable the active sale state
Sales Calculations
Defining the “Lowest Price Point“
The lowest price point is considered over all offers on a given product (same gtin/internal product reference) for the previous 30 days and is measured by cdiscount, it is also verified by government operations and consumer protection agencies through parsing and sampling.
It is considered outside of shipping charges and active sales operations.
A low point as an active sale will not be taken into account.
Using only Price and StrikedPrice is not considered a sale between the official dates. The Price value will be considered a low point.
Striked Price versus Lowest Price
Before the sales start date :
When it exists, the StrikedPrice display is limited to the available strikedPrice of the BestOffer (the offer having the buybox)
After the sales start date :
The displayed Striked Price is enforced to the Lowest Price Point for the given product, considering a sale is ongoing on the current BestOffer
Note : Lowest Price Point being at the product level, it is not displayed on offer lists
Defining the displayed “Sale percentage“
Note : Octopia does not enforce display rules through the API, wether a “Soldes“* (french for “Sales“) visual is available for a given product/offer are based on Cdiscount.com internal rules and management.
The final sale percentage is based on the Lowest Price compared to your actual Final Price and not purely on your SalesReferencePrice.
Examples
Case : Final price higher than 30days history
Context :
- 30d Lowest Price Point : 80€
- SalesReferencePrice : 100€
- DiscountValue : 10%
Result :
- Offer Final Price : 100×10% = 90€
- Published Final Price : 90€
- Sale state : Disabled (current price higher)
Though you provide a sale, it is still too high to be considered a price reduction as an end customer.
Case : Final price equal to 30days history
Context :
- 30d Lowest Price Point : 80€
- SalesReferencePrice : 100€
- DiscountValue : 20%
Result :
- Offer Final Price : 100×10% = 80€
- Published Final Price : 80€
- Sale state : Disabled (current price equal)
There is no change in final price.
Case : Final price lower than 30days history
Context :
- 30d Lowest Price Point : 80€
- SalesReferencePrice : 100€
- DiscountValue : 30%
Result :
- Offer Final Price : 100×10% = 70€
- Published Final Price : 70€
- Sale state : Enabled (current price lower)
- Discount Sale : 12.25% (70 compared to 80)
Sales percentage has been recalculated.
Case : Full package high Price AND Sales update
Context :
- 30d Lowest Price Point : 80€
- SalesReferencePrice : 100€
- DiscountValue : 30%
- Additional Price update :
- Price 90€
- StrikedPrice 100€
Result :
- Offer Final Price : 100×10% = 70€
- Published Final Price : 70€
- Sale state : Enabled (current price lower)
- Discount Sale : 12.25% (70 compared to 80)
The Price and StrikedPrice provided here will not change the outcome.
Case : Full package low Price AND Sales update
Context :
- 30d Lowest Price Point : 80€
- SalesReferencePrice : 100€
- DiscountValue : 20%
- Additional Price update :
- Price 75€
- StrikedPrice 100€
Result :
- Offer Final Price : 100×10% = 70€
- Published Final Price : 70€
- Lowest Price Point Update : 75€
- Sale state : Disabled
- Discount Sale : 6.67% (70 compared to 75)
The Price given implies a 30 days price history update.
Usecases
Here are considered updates on your offer, on a product with pricing competition or an existing low price point below current offer pricing.
UseCase | 30 days Lowest Price Point | Price | SalesReferencePrice | DiscountValue | SalePrice | Offer Final Price | Sale state | Sale percentage | Lowest Price Point reviewed |
---|---|---|---|---|---|---|---|---|---|
Price only, higher than LPP | 80 | 90 | – | – | – | 90 | N/A | N/A | – |
Price only, lower than LPP | 80 | 70 | – | – | – | 70 | N/A | N/A | 70 |
Sales, equal to LPP | 80 | 100 | 100 | 20 | 80 | 80 | None | None | – |
Sales, higher than LPP | 80 | 90 | 90 | 10 | 81 | 81 | None | None | – |
Sales, lower than LPP | 80 | 90 | 100 | 25 | 75 | 75 | Enabled | 6,25 | – |
Sales, price lower than sale | 80 | 60 | 100 | 30 | 70 | 60 | Disabled | – | 60 |