Разрешение перекрывающихся правил
Предположим, мне нужно установить правила для того, чтобы клиенты могли заказать товар.
Критериями являются страна проживания, стаж работы и тип клиента.
Давайте рассмотрим следующее:
Продукт A доступен для всех клиентов в Северной Америке.
Продукт B доступен для всех клиентов в Северной Америке, тип которых является жилым.
Продукт C доступен для всех клиентов в Северной Америке, которые относятся к типу Student и имеют стаж работы не менее 5 лет.
Допустим, у нас есть 3 клиента:
Клиент А живет в АН
Клиент Б живет в АН и является студентом
Клиент C живет в NA, является студентом и имеет стаж работы 6 лет.
Я пытался установить правила для реализации вышеизложенного без явной связи продукта с правилом, но не смог найти хороший способ сделать это.
Правила, такие как:
rule customer_type
when
$c customer(type=="Student")
$p product
then
modify($p) {eligible = True;}
end
а также:
rule rule_type_and_location
when
$c customer(type=="Student" && seniority >5)
$p product
then
modify($p) {eligible = True;}
end
не будет летать, так как первый поймает всех клиентов, живущих в АН, независимо от их типа или стажа работы.
Я попытался изменить логику правил (используя законы Де Моргана) и превратить их в предложение "ИЛИ", но это усложняет правила (и мало помогает).
В качестве альтернативы я могу указать каждое условие в каждом правиле, а именно:
when
c$ customer (type == "Student" && residence != "NA" && seniority < 5)
then
...
Однако это потребует, чтобы я указал каждое условие в каждом правиле, Не очень элегантно и боров обслуживания...
Есть ли элегантный способ достижения вышеуказанного? Может быть, BRMS не тот инструмент?
Спасибо Алон.