По сути вопроса Diman уже высказался, а я немного позанудствую
Для чего нужна такая система лояльности при которой свою выгоду клиент не может рассчитать самостоятельно до покупки? Мне казалось что размер скидки должен стимулировать клента на покупку, а не быть, возможно приятной, но неожиданностью при подсчете итоговой суммы. Бедные продавцы-консультанты. Так и вижу их с маркером в руках объясняют клиенту как сформировалась итоговая сумма в чеке и рисуют описанную вами матрицу
К тому же, в общем случае стратегия максимизации скидки в отдельно взятом чеке может оказаться не самым выгодным вариантом для клиента по совокупности нескольких чеков. Система не может знать о планах клиента на будущие покупки, выбирая какую из групп балов потратить сейчас.
Не лучше ли сложную математику применять не в момент реализации скидки - траты балов, а в момент их (балов) начисления?
Целью разделения балов на группы является стимулирование клиента к покупке в следующий раз того же товара (группы товаров)? Тогда можно оставить единые универсальные балы, но рассчитывать количество начисляемых балов с учетом прошлых покупок клиента. Этакая накопительная система получения балов в разрезе групп товаров.
Если понадобится, то можно ещё ограничить максимальный процент скидки для каждой категории товаров в отдельности. И даже тогда порядок расчета скидки останется более прозрачным.