Thanks for the response.
Firstly, despite my frustration at a lack of flexibility in certain areas, I am astonished how great a plug-in system you have built to support developers. It is truly impressive! And I very much understand the need to maintain consistency and to impose limits.
That said, consistency is great, but constantly wrong is not so great…
The problem is that “FixedAmount” does not do what it implies it does, and there is no way to actually apply a "fixed’ discount to a line item. The conversion to % with rounding then multiplying back out means that discount applied is not the one requested or required.
This is a problem that will consistency mean staff will need to apply manual 1p/2p type discounts to correct the “FixedAmount” rounding errors - or deal with customers querying why they have been charged 1p for FREE coffee…
Sadly, we can only correct if the calculated discount is too low. We cannot correct when the calculation produced too much of a discount since negative discounts are not permitted.
The scenario I mentioned is a real world one that Shopify POS simply does not support (or not, without rounding errors). It really would be nice if Shopify accepted that discounts can be applied to a limited number of items, not the full purchase quantity.
If we could have a separate line item for discount items to non-discounted items, that would suffice as @tod97 mentioned here : Shopify POS UI Extension: `shopify.cart.addLineItem` Performance Bottleneck - #10 by tod97 that would enable a workaround. Unfortunately, POS aggressively combines variantIds and not permit this.
As for why my customers want an alternative discount / loyalty scheme - is simply because your automatic / coded discounts do not meet their needs. Sometimes a variable discount is needed (redeeming a variable number of loyalty points for a variable discount). Or redeeming a number of full stamp cards for a number of free coffees (not making ALL coffee purchased free!).