В итоге, результирующий массив, который должа возвращать функция OnGetOptimalPrice должен выглядеть так:
[PRICE] => Array (
[ID] => 216104 // ID цены получаемый через CPrice::GetList():
[CATALOG_GROUP_ID] => 19 // ID Типа цены
[PRICE] => 13800.00 //Цена по необходимому типу цены
[CURRENCY] => RUB // Валюта по необходимому типу цены
[ELEMENT_IBLOCK_ID] => 145 //IBLOCK_ID элемента, для которого пересчитывается цена
[VAT_RATE] => 0
[VAT_INCLUDED] => N
)
[RESULT_PRICE] => Array
(
[BASE_PRICE] => 13800.00 //Какая цена в итоге должна попасть в корзину
[DISCOUNT_PRICE] => 13800.00 // Цена со скидкой
[DISCOUNT] => 0
[PERCENT] => 0
[CURRENCY] => RUB //Валюта конечной цены
)
[DISCOUNT_PRICE] => 13800.00 //Конечная цена с учетом скидки
[DISCOUNT] => Array() //Массив описывающий скидки
[DISCOUNT_LIST] => Array( ) // Структуру не знаю