so we're straight into the next session hopefully food coma doesn't set in before I finish so the next session here is pricing and discounts and I have only myself to blame for the title because I was one of the person that put together the session list and I picked this title but price again discounts demystified so the two things I want to do is give you some details on how the pricing engine works and then I want to show you and tell you about changes that are upcoming and actually some that we've recently made since I gave this talk last year and that's and so to do that we're gonna I'm gonna cover pricing for a little bit it'll cover discounts for a little bit and then we'll spend some time on a recent and upcoming changes and then related to the some of the upcoming changes I want to talk to you about extensibility scenarios and the technical side they did a some deep dive on this but I want to from the functional side I want to validate some work we're doing it turns out this is like the fourth year in a row that I've given this talk so I doing my homework to put together a new deck don't make sure I didn't show the exact same thing as I showed last year I went out and so there's really nice landing page I suggest you go there last year was called last year was called pricing and discount deep dive and I went through a lot of configuration and setup so if you haven't seen any of them in the past I hope I don't leave you too far behind but I'm not going to cover all the basics I'm going to focus on kind of a little bit higher level and I wasn't gonna talk about this this is just some direct links to the two previous years okay so we have a price engine that we is about how we call it it's a it's a class library a set of binary and we use it in all the clients so it's in Dynamics 365 for operations it's in retail server and modern pause when it's operating an offline mode uses it as well the rest of the clients that you see and hear us talk about they're all using retail server for this so it's and one of the things I want to show you is one where it is but two there is it's not a hundred percent the same everywhere so you notice in call center slightly different color and different names and that's because the security model to access data in inside the 365 operations client is different than what retail server has so it's kind of a shim or a proxy that replaces the CRT data layer and I say that just because you know at some point it's possible that if there's a problem it would be in one of those bits so that you wouldn't see it everywhere so with that kind of brief this is what I'm talking about the price engine I'm gonna spend some time on pricing I haven't gone into this very deep in the past so basically whenever you add a product to a transaction when you add a line we calculate three prices for the product we start we calculate the base price trade agreement price an adjusted price see says what they are so that there's one is just the property on on the product the other is the main place that you set prices and I'll cover that a little more detail and then the third is retail specific that's the adjusted price so the first two are available in a slightly different flavor outside of retail and then the last one is just retail specific these are and I I say here determined by context date and so context is something I want to talk about for a second in the past I've called this price group slide but for retail when you're setting your prices right you might set prices in a specific store in a region you might set prices for a particular group of people for seniors or students you might set prices you might set discounts right now we're focusing on prices and so all of those kind of retail concepts of channel catalog affiliation which is a group of people and loyalty which is another group of people our retail specific and they use price groups which are used on trade agreements to set prices and they can also be used to set the retail price adjustments there is a little bit more the reason why I want you to look at this is because this is how I want you to think about it I'm gonna show you a little bit more but it's some stuff that we it's not really retail right so you can create trade agreements directly for customers right trade agreement does a table group all model but you know a trade agreements directly for a customer isn't really a retail scenario as much as it's a b2b scenario and if you really want to do customer pricing you can use affiliations to do it and you get a lot more flexibility right so with direct customer pricing you get one price group or direct trade agreements if you use affiliations you can put multiple affiliations on a customer and so you can enable a customer to qualify for multiple groups of prices so that's that's one of the reasons why this is kind of what I watch is remember okay so we calculate three different prices but there's there's one price on the line when we're done so I was going to walk through how we get there so start off the price engine gets the property on the product and it starts from there it might be zero it might be a value so that's easy the second step is where all the fun happens so so for here that the retail context is important so first we go out on your transaction you have context it's the transactions happening in the channel it may be from a catalog for a customer you may have directly in point of sale put an affiliation or a loyalty card on the transaction so that context gets you a list of price groups and then those price groups return a list of sales price trade agreements or none so then and I didn't talk much about it but it was there in a diagram is priority so let me go back just for a second I'm look at that so retail has a feature called pricing priority you can set it on price groups you can actually also set it directly on discounts so that's why it doesn't show up here what pricing priority does in our system is it allows you to manually order prices and discounts so you can choose one one group can take precedent over another so with regional pricing and store pricing you might want the store pricing to win over the regional pricing regardless of higher or lower if you don't use that mechanism then our price engine always optimizes for lowest price for the customer right so we're always yep so our we're when looking at multiple of the same thing yes so so so trade agreements let's go back to trade agreements so if we pull back a list of trade agreements and you know say there's trade agreement for the channel and trade agreements for an affiliation if one of those and actually a channel can have more than one right so a channel store in New York has the northeast price group and the New York price group and if you want the store the New York prices to win and they're higher right that group has a higher priority than the other ones and so what we do is we we look at that list of trade agreements they each have a priority on them we start at the highest priority and this is where pricing is a little bit different from discounts if you heard me talk about discounts in the past because price there's only one price there's not a chance for compounding or anything we will take the first priority the highest one will go if there's more than one they'll compete we'll take the lowest and we can match one of the good things that we did on trade agreements was we allow for partial variant matching so if you have iPhones and 128 gig and 256 right you can set the price on that for all the colors right you don't have to go and do each one individually so we find that we will pick one of those trade agreements and then we're done we don't look at any of the trade agreements at lower priorities so that's kind of that where the difference is from discounts if you've heard me say that in the past of discounts well and kind of keep going at lower priorities because there could be more items and discounts are are calculating across the whole transaction where price is calculated one product at a time right there's not overlapping product pricing okay that's and we will for price we do we do this and it's unfortunate that right now it's different but in price will honor a more closely matched trade agreement over loose elusive one and what that means is a variant price will be used before a master price so the closest match on the product in our retail price adjustments we don't have that it's a exact we'll take the lowest or in the price adjustments the biggest price adjustment yes yep yep so that that product dimension does win out over price in general that's that you need that well you can use price group but you can also then use that for that my example of a particular variant has a higher price okay a couple things I wanted so the middle there's is light gray I you know sometimes odd but I have fun testing these things out sometimes when I'm prepping for these and so I've you know for four years I've been saying use fine next right we want to find the lowest price and to find the lowest price the trade agreements have to be marked for fine next sometimes people don't use it and things go strange and so I decided yeah if it kind of look a little bit more deeper into it and yeah I suggest for retail you use find next so I saw inconsistent behavior when you had trade agreements with and without fine next if they if none of them have fine next there's a pattern that it follows and it follows it creates it uses the first created one so if I create a whole bunch and none of them say fine next it just uses the first one if they all say fine next then it'll search and find the lowest if some of them say fine next and some of them don't say fine next I it's inconclusive like seriously sometimes it would take it depending on if where the fine next created first or where the not fine next created first and was there anything then after that so so you cannot use fine next but if you don't I suggest you always don't stick with one one pattern or the other okay so we got a bunch of trade agreements we start at the highest priority we found one so if we do find a trade agreement will always use it over base price higher or lower right so if my base price is a hundred the trade agreement is 120 will use the trailer so trade agreement always overrides base price when we're trying to get to the final price for the line that's pretty straightforward if there are no trade agreements then what we do is we set the trade agreement price from the base price so that we do have a trade agreement price we don't just skip it so the only way then that zero is a is where you're still at is if both product is zero and there are no nonzero trade agreements that was interesting to in so a couple releases ago they relaxed the trade agreement to allow you to save zeros you can now you can even post them the system ignores them so it won't consider zero the lowest price trade agreement it just ignores it so then the last step is the retail price adjustments so here we have a trade agreement price because we either found one or we set it equal to the base price so we start with the trade agreement price and then we go look for retail price adjustments and we use that retail context again so you get a big list of price groups it'll find any retail price adjustments that apply if there are more than one that applies we will use the retail concurrency model but we don't use well yeah but we don't we don't use multiple priorities well use the priority model we'll start at the highest priority and if we find something then we'll apply it and we're done requiring multiple things at the highest priority then they compete using our concurrency model so multiple exclusives will compete will find the biggest one and apply that one and ignore any best price or compound if multiple best price our compound are found then we'll put all the compounds together and the result competes against any best price and the again the largest one is winning here because we're always trying to get the lowest price for the customer yep and then it's yeah oh I left the copy paste I left the diamond in there from a previous diagram but it just after you get it you're done so couple things adjusted price is always less than the trade agreement price so if and I think we've since been able to block this mostly in the UI but if the calculated adjustment price is higher than the trade agreement price because you've got a negative in there somehow or it was a category there's a couple odd ways you can get there we won't use it so if if the calculated adjustment price is larger than trading room price then we'll just use the trader in price so you can't use yeah I guess the key there is you can't use retail price adjustments to raise the price we've talked about this for a while myself and the engineers work on it of considering introducing a retail price modeled after price adjustments so that you can do category based pricing cuz that's something you can't do in trade agreements kinda a show of hands if if it would we wouldn't just make adjustments do it would it would create a new thing called retail price it would look and feel just like a price adjustment but it would have slightly it would have logic like trade agreement do you think your customers would use that if if that was there there was a retail price gonna just show hands it says yeah you think you would yeah yep yes it allows you to do the category pricing no not all industries can use a category pricing but some can like you know grocery right the single canned soda they're all a price right so you you can have it you can create your prices with a lot less records because trade agreements is one at least one for every product basket product so so the question was what would we do about price history if we introduced that and because it's a pain with discounts so I think we're aware that I'm aware of that pain with the discounts and yeah I would I'll take that into consideration definitely is I want to have it for discounts as well right because we have there's return scenarios we can't do because we don't have price in a price history discount history so yeah if we introduce a new thing like that history would definitely be part of it okay so the quest the question I think was a more statement is just you asked is to support attribute based pricing as well okay that that's oh so the loose product dimension we support for pricing yeah we can talk about it after and I don't know I'm not I don't have a piece of paper and pencils so there's a email addressed at the end for feedback so your please send it there because I want to hear these things pricing is one of the areas that we kind of continued to improve upon actually all the areas so but I focus on the pricing so yeah please send in your feedback for it each of those individual ones so then the final price is set to the adjusted price right so that the price that's used in POS or call center is that adjusted price value so if there was no price adjustments we do the same thing again where the third price the adjusted price is set equal to the trade price and I call this out because sometimes with when people are doing customizations and such they don't realize that that date is there from the calculation so so that was kind of my brief overview of how we get to price with retail I'm gonna move now into two discounts for a little bit and again just an overview on the discounts two things I want to cover one is a revisit of how discounts are applied to transactions so this is a look at the priority and the concurrency model and then I want to try to answer the question that I hear frequently is in the retail parameters there's this setting called overlapping discount handling and it's got a lot of text with it and what is that and so I want to address try to address that in this as well so this is just a summary view I hope I have much more detailed views I hope to get them published to the weekiy soon so for a single priority if you don't look at the retail priority feature I talked about we go there's a ordering that we do discounts we do non threshold discounts and then threshold discounts to start with so and then inside each of those as we did with price we do exclusive first an exclusive excludes any best price or compound consideration and then we do best pricing compound and a something that not everybody realizes is best price and compound actually do compete for best price so it's not that it's a three-level ordering exclusive best price compound its exclusive and best price compound right so one compound and one best price will compete for best price two compounds and the best price will the two compounds will combine and compete with the best price and so this is the the flow so if you have one item on the transaction and you get an exclusive discount as you go through here you're done if you get a best price yeah at the point at which you get our best price you're also done so and that's another current behavior of our system that I get some feedback on and and I give me more if you have it so if you have a best price simple discount one item and it applies that best price simple discount that will exclude consideration of any threshold discounts so the non threshold discounts are getting priority over the threshold discounts and that's true you'll see in the next slide even actually when we start adding priority in so a slightly different view of that is the non threshold is the first box and the thresholds the second box here we have multiple priorities so we loop through the priorities for all the non thresholds first finding and applying what we can and then we move on to the threshold there's one and then and then two for the most part don't interact there's one scenario with that we do support them interacting and that is a compound threshold will apply to compound non thresholds even at different priorities so if you have that and that's that you know additional 10% off if you spend 100 so you can have that at the end and it'll still apply to the other things yeah right so the first box is non threshold it's a simple discount quantity discount and mix-and-match so we're we are we're doing all of these first and we write and we're looping through right so if I have one item and I have any non threshold discount if I have a exclusive or best price discount it gets applied to that item when we come down to threshold because that item has an exclusive for best price discount we're done we won't apply any threshold discounts that that makes sense the one the one exception that I talked about so there's a one item you loop through the top you get a compound one compound discount then you come down to the threshold if you had a compound threshold we will apply it that's kind of the only time that threshold interacts with the non threshold for some history a big reason why we separated those is because thresholds by their nature tend to operate on the entire basket and having those discounts compete with the non threshold was really processing intensive and so in order to avoid that we we separated them out here's a slightly more detailed view which I knew you couldn't read in the session I'll just point out the arrows and what they mean in the last year or I think which I think was in the last I think it was in last year's session so just about a year ago we introduced mix-and-match least-expensive that they the retailer so earlier I said we're always looking for the lowest price we're always looking for the highest discount right we're always looking for the best deal for the customer and there's actually an alternate way to apply mix-and-match that we had to introduce and it's not for actually it is for a single mix-and-match but it's also it's when there's extra items for the mix-and-match or when there's multiple instances of the mix-and-match and the the difference there is the old way that we had to do it the favorite customer will try it will combine the items to give the customer the best deal the e the favorite retailer will combine the items to give the retailer so to be a customer the worst deal to give the retailer the most savings right so a 20155 if you have three items 2015 five buy one get one free right favorite customer what you'll get the fifteen dollar one free favor retailer you get the five dollar one free free and and and the REIT and the reason why they're in separate boxes is because that optimization is in the opposite direction of the rest of the price engine so we you can't do them together because they're going in different directions and that I think that's kind of it for flow before I move on to the next thing does anyone have any questions around discount flow some people have been in my talks before so yeah sorry the question was where the manufacturer's coupons fit into that model they they generally don't because one a lot of times retailers consider manufacturer's coupons a payment method not a discount because they can mail those to the manufacturer and get paid for them so that's part of it we're improving coupons as you see later on the talk but typically of manufacturers if you're going to use discounts for manufacturer's coupons you know a simple discount is the one that's most common because most it's just an amount or percent off usually just amount so you'd use just our simple discount and so it would fit in with the non threshold discount can repeat it one more time it was about discount trade agreements yeah I think yeah see yeah so the question was about discount trade agreements I didn't talk about a much because we can't we dis Wade using them complicates the system we're at we have considered a couple of times to remove support for them but we do support them still and so you would get that with a couple caveats so simple retail discounts will compete with a trade agreement discount and you'll get the best but multi-item retail discounts because you can't define multi-item trick trade discounts trump them because we figure this is a retail scenario that's more complicated than what trigger discount trade agreement support so the statement was if you do have b2b and b2c you sometimes still need to use the discount trade agreements and then you have a problem with the two working together yeah it's so I send me your sent you know send me your scenario one of the things I can try to do is see if you can use the retail configuration to meet your scenario and if not then I could still use it to consider in the future okay so on to overlap overlapping discount handling Oh true that the statement concern was if you are using the discount trade agreements then and you aren't using call center in the back office then when you okay okay yeah yes okay so that then the issue the concern there the issue is they're not using cost another back office so the only way to do discounts is trade agreements but then that has a hard time working with pause yeah use call center yeah so I think for that one send me the why they can't use call center right and we can look at that right we don't want to we that hold the first picture I showed was the it's one price engine used everywhere right so we want a consistent set of logic everywhere and so it is true if you use the back-office client without call center turned on then you get a different pricing logic and discounting logic okay so the the feedback there is it and you know we I I guess I don't hear the simple ones so I hear every now and again the retailers who are also distributors or manufacturers having the two businesses work together nice is a challenge because those sales orders are the comment here was the sales orders or 17-under lines or more and the price engine isn't performing well enough so use it okay so if when you come into a specific issue with performance or something like that you know logged the case they typically performance will make it to the product team most often if it's not solved quickly yeah yeah yeah yeah so that it's a their comment there is the retail pricing is a basket pricing right so we tend to because of mix-and-match in quantity recalculate the whole basket which is hard for distribution manufacturing if they're adding that many lines to an order yeah so what I I'm happy to work on our our perf and and consider you know are there ways that we can are there settings or something that we can do to improve it okay so that I don't run out of time completely so all of these things are things you might want when something goes wrong right so our configuration and setup allows somebody to kind of shoot themselves in the foot right we don't we can we let you set up 10:15 discounts on a single item we let you set up overlapping competing discounts we yeah one would be to block them you doing that but I know you know we've had customers that you say the scenario is I have headquarter people that do discounts I have store people who do discounts they don't talk to each other that's what I want and so it's it then you know kind of becomes a challenge so we let you set up your discounts with with very little restriction in the dynamics 365 our operations client we've added some visibility into that so for anyone discount you can view the overlapping discounts there's now an action that says view overlapping discounts and then you can see the products that they're overlapping on so we've given you that visibility now if you start defining things that are overlapping but you still it could be there and since our engine is trying to find a best price when you get into mix and match and category quantity discounts the the mathematical permutations that are to find it can explode and so what we did was we we built a escape hatch into the engine so if it looking for a price and it kind of is looking for too long it will save the result that's at right now and and one of the things that we find is that result is is usually almost always the best result even though we didn't finish so we get to the good result fast but there's still a lot more that we have to check to be guaranteed and then we switch modes and sometimes we call it fast mode we called it marginal value because it's based off the kind of economic concept of what's the marginal value of some additional thing and so what we do is we so if you have two competing discounts we take the stuff that they're competing on and we figure out what's the value of if I include those things with this discount what's the value to the discount right so I include the one extra thing I get another dollar off the marginal value of that to the discount is $1 if I include it with the other one then that discounts worth fifty cents more the marginal value to that discounts $0.50 then we'll we've written so that we use that to rank the discounts for using the shared items and then we apply the discounts from highest to lowest ranked it is it's a right it's a bulk operation so it doesn't it can't mathematically guarantee best price but we but we see it work really well and you'll see the little bit later on is we actually did a lot of perf work and so we pushed the where you the threshold where you hit this got pushed out a lot in the last year so that's that's that's what that setting is I didn't actually have a screen shot in a bit so we can talk about the different options the options are fastest calculation you know medium calculation wait a little bit longer and then the last option is absolute best price which is a performance risk because if you set up the over competing discounts and you say absolute best price then we'll look at every possible combination and when we when when one customer hit this they were you know it would take a minute to add the seventeenth item to the cart because they just had five discounts on every item in the cart yep but our actually is what you see in a second actually it's the last one on this slide our algorithm is much much faster now yep yep so a year or more our competition evaluation algorithm was meh it wasn't that fast right so in the last year what we did was we rewrote that using dynamic programming so engineer I think did some amazing things there and so that part of the discount flow which is really just the competing part god it was improved a couple factors I think the average time yeah I didn't I didn't write the number in this in the sessions but it was a couple hundred percent faster using the new method so a couple things there is you'll you'll if you are evaluating competing discounts it'll be a longer to get there so you're much more likely to find the best price before you and finish actually much more likely to finish before you need to switch to the pass mode some other recent changes so we recently in these the first two are options in retail parameters so we have now allowed discounts on price overrides so in the in the past if we price override was a final number on a line it removed any discounts calculated or manual on the line so we now have a setting that says allow discount calculation to occur on top of price override and then Manuel discounts and pause we now allow you to choose the Manuel Manuel discount line or total npos will replace a system calculated discount or compound on it you can choose either behavior that you want no it's a setting in the it's a company-wide setting and then it follows it it's in pause I'm not sure on call center I have to Bob to fall back so the question there was does is the first setting apply that call center and POS yeah so the question there is have we put any thought into in our calculation logic of having logic based on cost we don't have any logic today based on cost yeah it's I think it's something we've thought about where I think we're going to continue its I don't have a work item and the immediate future is to do that but thanks okay yeah so I guess there's the comment there was there is maybe a bad behavior in the call center around manual discounts on top of price overrides another item that we did there is the last one on performance was a check out cash so today we're before this you scan your tenth item we go get all the possible discounts and we would get them all each time so if you enable this feature now what we'll do is if when as you scan we'll only get the new ones needed for the new item we'll keep hold of the ones that you have so it's kind of it's it's improving the performance in the data level oh yeah sorry about yeah yeah I just added this one in like having it in the last hour we it's funny somebody thought we supported price unit because there was one scenario that worked there was five that didn't but the one scenario worked in r2 and we broke it in r3 and so they you know it was we have to fix this was you know the message we got it's not we didn't really a nice necessarily consider it a a mainline retail now I I know it is some so I know Hardware bulk buying type scenarios so we fixed the one that we broke and we fixed the other ones as well so now you can use price unit we don't in POS we don't support it exactly the same way is the back-office client so the back-office client supports it by keeping two fields on the line we calculate the effective price using the two fields and store that but we allowed for the increased precision that you'll get by using it yep so the question is what is price unit so on product there's a yeah yeah yeah on product there's a price right and there's a right next to it you've often ignored is a field called price unit it defaults to one and basically it's saying the price that you set is for selling that many right so if you set $10 price for a price unit of five the acts the real per unit is two right so yeah you know the the the the retail scenarios that I recognized as valid are yeah hardware right you buy in large wait for you by and large yeah you buy nuts and bolts and wait and then you sell them okay so call center had call center coupons they were- header discs they were- header charges on order discounts had discount code it was basically a number that was an alias for the discount that you could require to be input wasn't necessarily a coupon it was a discount code what we're doing is we're putting the two together so we're POS still doesn't support charges very well so we're replacing the negative charges on a coupon with with discount we're still leaving most of the not most we're still leaving a lot of the restriction functionality on the coupon so limited use so once customer required once per customer those properties are still there but now the coupon points to a discount so we're making those to work together it's kind of coming out in phases so the first part is done and we'll be out in the next update and that is basically the replacement that the charges with a discount two critical things that are from coupon that are missing that are coming in a second part are the per transaction limit and exclude lines it's almost something you could do on coupon was you could say this coupon applies to you know jeans except for you know this pair this product that's exclude similar to assortments so we're going to bring that in and the per transaction limit we're gonna put that directly on discount and coupon we'll use it through discount so and that one is I define one dollar off a product or five dollars off I really only want to apply that once to the transaction our discounts don't do that today so it's it's you we apply it per quantity that qualify so we're adding that which people have been asking for in discounts anyway so discounts will have it and the coupons will can use it through discount now the that's the inner transaction limit the num number of times the coupon is used limit is in coupon it's still there so the question was are we going to include I have the include exclude on the discounts yes yep so the question was there they're reusing coupons no there so the question is concerned about performance with lots of coupons lots of discounts actually the you know if the coupon code is required it can help because it it's one of the first filters to eliminate all of the other discount noise right so well it it'll it eliminates them from consideration yeah yep so I think using coupon codes won't make that worse than if they weren't using coupon codes and they've and I got a not lose track of time completely discount concurrency control options so I'm sure you've heard the ceiling of the retail components so that has changed the extensibility model our old extensibility model was was I'll cover it more in detail later but the short of it is we're going to introduce a new way to deal with concurrency and priority and by introducing this and here's just a quick screenshot so the new upcoming and recent options we try to keep parody in all of the in the versions so we're very we're one of the most aggressive kind of teams to back port to 2012 because we just want that we're trying to keep that one code base for price engine and and forward so the of the stuff that I talked about some of them are out there on 2012 as hot fixes the three are the transaction cash the price override and the discount compounding manual discount compounding I know two of those are right now in the process of being forward Porter's there's an Amex 365 but they're not there today you know this is this side over here is three six five minute there yet so we're in the in you know customer needed it they wanted it now so we did it in 2012 and now we're bringing it forward on request not on request it's not if there's a strong enough need you know we will back port some of these things as well if there's a strong enough need and it kind of makes sense for the price engine that we've done that with a couple of options okay so let me show some coupons for a minute okay this is the so we the coupon forms from the call center coupons we're using that right that but things have been removed added moved around so previously customer and product of course hung directly off coupon what we did is we moved those we removed those from coupon because a coupon now points to a discount we use the product definition from the discount lines and the customer Association through affiliations so if you want customer specific coupons the discount needs to have price groups related to customers through affiliations or loyalty some people have confused looks on their faces so that and then so those two things so customer and product now go down to the discount and they come off of coupon the coupon code that you have to use sticks with coupon and we're enabling multiple codes for a coupon now so that's what the the lines are nope you can I can have a coupon without affiliations if I want the coupon to be customer restricted or and/or customer limited then yes I have to have the discount related to customers through an affiliation or loyalty so through a price group yeah you need to so you in order for a discount to be customer specific you you put what's oh yeah okay so the question there was the how to associate price groups to customers discounting doesn't use price group directly on customer retail discounts only use price groups through affiliations and loyalty and that's true in the core product right they have four different group fields one for each type of discount and one for price so it's not it's not like we're we have less functionality from as core we're just do it differently so this coupon here there's no restriction on it so this is similar to the old discount codes I can enter it I get that I need to enter it to get the discount and its unrestricted I can use the coupon as many times as I want this coupon I'm setting up with so customer required so you can say you need to have a customer on the transaction in order to qualify for this coupon and then and when I did that actually and then usage limit of one that means each customer can only use this coupon once similar to what was there in call center before and the customers that can use it are verified through the discount and we took the same pattern that was there for a coupon before we don't pre create all of the customer coupon relationships we you know you define the relationship between the customer and the coupon and then when they use it we record usage and then if it is limited when it's used again you know each time it's used we see if it's been used already or not yes so the question was are we checking usage limits for coupons through the real-time service for company and customer specific usage limits yes for channel usage limits no we're doing it in the channel yeah so the question is have we considered generating or coupon based on current activity yes I think about that one I also own customer loyalty and that's a primary loyalty scenario we don't have it today yep because honestly we didn't before we didn't really have good coupon codes now that we have much better coupon codes we can start thinking about that one okay so let's just look at this one for a second discount and it's unfortunate you can't so like I said fresh new I can't click through on that discount but the pricing and discount workspace here's that discount it's it's actually one of the demo data ones it's for category all but it requires the code so now in order to get this discount I have to provide the coupon code for it so the question was will a coupon function go back and minus one so we don't have any plans to back port this to 2012 we do have plans to allow you to continue use your 2012 and call-center coupons in 2012 with an updated gears updated your back office so that that particular one doesn't qualify for n minus one I wanted to look up the coupon code actually well so we introduced two new operations in POS add coupon and remove coupon now there is there is a barcode so scan which should still work for coupon will still work but you can also enter that code and repeat the question again so the question is about generating coupon codes that's yeah today it's manual it doesn't you can't say generate a hundred but you know give us that give us we want to get it out there and have you guys use it and suggest how to improve it so I know that there are scenarios there where you know you want the coupon to truly be one-time use so of course you need more than one of them you're gonna need however many you're gonna send out to people so we're using the same kind of dialogue now that we use for other types of things gift card loyalty card I had a feeling that was gonna work yeah I'm gonna show you in the call center in the price simulator all of my data got reset just before and I had to go reset up my numbers actually let me try one other thing nope okay so I'm going to show you in the price simulator so the I mean the price simulator actually it's nice for people setting up the merchandising anyway they can come in here they can have a transaction in Houston the transaction in Atlanta wherever they want and on those transactions you can put customers and put other types of things but you can choose coupon code yep well yes it's stored on the discount line so it's stored with a discount line for usage limits it's actually also stored in a limits table that's checked against so if you have a customer specific coupon with a usage limit of 1 when customer a uses it right we record a and the coupon code so that the next time they come along they can't use it again so that so that the question there was have we thought about having functionality that shows possible coupons possible discounts yeah we have it hasn't it hasn't made it above the line at this point but it's a scenario that we hear in e-commerce and in point-of-sale it's like you know if you buy one more you get a discount right so okay yeah yeah I guess send it to me so there's a discount here I have a feeling that my discount I qualify for my discount in another way other than the discount code so yeah I'm not I don't want to sit here and enter a code and stuff I wanted to show you that I also want to show you the the other upcoming change from sealing is a discount currency control so in my talk last year and I've been a couple times here yes and that and that's actually why mine's not working because just before the demo I lost my barcode mask and my barcode and all that stuff so I did will generate the barcode number we didn't really have functionality to generate an image file yeah okay so fun she wants you show me that we are definitely still generating the barcode so the coupon code will generate the barcode using the barcode mask it's on coupon now so you know what connect with me after and see okay so the question was that we're still going to support the barcode and barcode mask and we are ok so concurrency control so this guy and it goes hand-in-hand with a with a couple slides at the end but this is introduced we're sealing the price engine stealing CRT and so but we still know there are extensibility scenarios that people want to change things we're doing the work to support some of the scenarios and then what and then we're improving the product to try to increase the coverage so that you need less scenarios you need to customize less so what this option what these two options do is they change the compounding and priority interactions and I'll have as it goes out I think it's will will put a lot more documentation on the wiki because it's kind of more than I can cover here but I'll summarize it so there was how it works today which I explained its priority if you find it in priority you use it and then you're done you ignore all the lower priorities and then if there's a compound in the priority we'll put them together that's the old model that we do the new model that we introduced is everything in in a priority is best price stand alone best price so best price and two compounds all three in one priority would be considered best price and they individually compete then whatever wins best prize or compound would always get compounded against the whatever wins and the next priority so we're changing it around from priority blocking everything lower it's a priority always compounding below it's a discount pools method and I'll I'll definitely make sure I have documentation out there too with with examples to show how that works and then the other one compounding compounding original prices this is the short summary of this is its additive compounding instead of mathematical compounding right so to 10% discounts on 100 is actually 10 and 10 for the new option instead of 10 and 9 for mathematical component okay so that that priority was the compound model was introduced to support the third extensibility scenario here so part of this is I wanted to show you this and validate that you know these are the scenarios that that we should be thinking about for extensibility if you know more I want you to tell us about them so we considered there's a small modification you want to do our example one is I want to move the date effectivity from the discount header to the discount line it's just a small change to our existing discount types the second one is I want to create a new discount type right so I want to one that I know now that some of the past is after a threshold is reached I want to give a discount on something else so today our threshold discounts the qualify and discount are bound together on the line in the product category you know a new thing would be I want to use anything to qualify and when I do I get this other thing for a discount so that's a new discount type and then the last one is flow logic and this is exactly what kind of I talked about earlier on is that how priority and concurrency and work together you know sometimes people want to change that and so we are putting the API is in place to support the first two and we're giving you the alternate model to support the last one we went and looked at you know putting that into the extensibility model but it quickly got really messy and really complicated and so we felt that a better way to support it would be to give you the starting with two models that you need and then as we as we use it we hear feedback scenarios we can we could add models in the future if we need to so first do these seem like the right scenarios are there's other scenarios that we're missing for discounts okay so anyway feedback if you think of um you don't have to come up with it on spot so that's just the slide for sense what we did right so yeah the new model you have less control but it'll support continuous update right in the past you had to code merge your customization with the hotfix every time we released a binary hotfix a lot of work so I think that's that's it questions you asked me that yesterday so the question is do we plan to extend threshold to offer free discounts so it's not on the roadmap right now submit it to me and I'll make sure it gets under consideration that people can say yeah we need this one or not but the difference I mean you can the difference from what we have now to that is if the the free product is in a different category because yeah we'll actually know if it's specific right so if you buy a hundred olives and shoes you get this specific pair of shoes yeah so yeah it's not it's not in the short list right now I've heard that that's why I use it as my example for new discount type the question there was do we plan to prompt in the in the POS as they get close to a threshold I put that in that's the same bucket of you know what are the potential discounts that this transaction customer could get we're aware of that scenario we don't have a plan right now to surface that the mysterious air 400 questions so the qualifying criteria is is a multiple of what the product sold in yeah I for now so we I don't have any plans right now to put two factor unit of measure in right it's a filter today so unit of measures on the line we use that to discriminate which discount lines are for which products yeah yes I don't have any plans at this time I think I think that one's actually been submitted recently I think I've heard it yeah okay so the question is is where discounts are mission missing limit so the request there is a for discounts to be able to work against an amount limit that is some multiple of the discount yeah right it's a total amount you know anyone discount is okay yeah I yeah I don't we don't have plans for that one right now farther is why I'm worth being and well as they're recording this so I can get so you guys can hear it and I can record what you guys are asking for yep so the question was a show price in point of sale prior to putting it on a transaction isn't taking into consideration in all the discounts yeah we've well we've discussed that we I know we have the api's to support it I guess what you can log an issue for it and we'll consider it I know we've recently yeah it's supported some places so yeah log-log that issue and that would only support simple discounts right mix and match and right we don't want do that but first quantity one discount we should be able support that and so you guys have been here for a long time the next session is going to be scheduled to start soon and you might want to break so I'm available for the rest of the afternoon but I think I cut it off so you guys can have a little bit of a break before the next session starts and I think the next session was able to start in like three minutes so it'll probably be five to ten [Applause]