Hello folk.

I am trying to work out the best way to use drools for an application where I have :

-          A domain of @30 fairly complex policy rules each of which has a Boolean outcome (Fired or Not)

-          A domain of @100 “audiences” who apply different subsets of the policy rules and make their own “Decision” based on the policies that have fired.

 

I am very keen:

a)      NOT to duplicate the Policy rules themselves

b)      To make mapping of audience & policy to decision as simple as possible – ideally through a table

c)       To keep all decision data in the same repository for uniform version control

 

 

My thinking is that I’d have a flow, first execute the policy rules as one group and save results in working memory and then use these results in an audience-specific way.


I get stuck at this second step as I cannot find a compact way to handle the mapping of Audience/Policy to Decision. Logically what I need to achieve is as follows. E.g. for audience 1, if policy 1 fires, we decide to refer. (If more than one has fired, decline trumps refer).

 

Audience        policy1    policy2    policy3    policy4    ...

audience1       refer      refer      decline    (n/a)          

audience2       (n/a)      decline    decline    (n/a)          

...

 

Clearly I could do this outside Guvnor but then the UI would be outside Guvnor & the data would be separated from the drools jcr repo.

 

I hoped to achieve a rule table as follows (fairly compact) but this would require DISJUNCTION between cols

 

Audience        policy1    policy2    policy3    policy4   Action

audience1      true       true                            refer

audience1                             true                 decline

audience2                  true       true                 decline

 

If I broke out a rule for every combination of audience and policy this would get very long.

 

Any smart ideas? Thanks in advance to anyone who spares the time to think on this one!

 

Rich

 

PS. I attempted to post this about 3 hours ago but believe I made a mistake. Sorry if it comes through as a duplicate