Разрешение перекрывающихся правил

Предположим, мне нужно установить правила для того, чтобы клиенты могли заказать товар.

Критериями являются страна проживания, стаж работы и тип клиента.

Давайте рассмотрим следующее:

Продукт 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 не тот инструмент?

Спасибо Алон.

0 ответов

Другие вопросы по тегам