Pular para o conteúdo principal

Regras de Produção com JBoss Drools


Estudo de Caso: Aplicação de Regras de Produção para gerenciamento de status processuais


Contexto do problema 

O Poder Judiciário vem ao longo do tempo tentando aperfeiçoar os sistemas informatizados de controle processual. Grande parte dos esforços está concentrada no aperfeiçoamento de duas das principais funcionalidades desses sistemas: A distribuição e a movimentação processual. A distribuição marca o início da vida de um processo e as movimentações que vão sendo realizadas representam a evolução do mesmo.

O ciclo de vida ou tramitação de um processo pode ser representado conforme o esquema abaixo:


Figura 1 Fluxo de tramitação


Cada retângulo acima representa um status que o processo pode assumir em um dado momento durante a sua tramitação. A mudança de um status para outro é determinada pelas movimentações que vão sendo realizadas, sendo que essas movimentações sempre devem obedecer a uma sequência lógica existente para evitar estados inconsistentes, por exemplo, arquivar um processo que ainda não foi baixado. 

Atualmente, a validação dessa sequencia lógica é realizada através de estruturas condicionais aninhadas, Figura 2.


Figura 2 Validação com estruturas condicionais


Existem alguns casos em que a movimentação só altera o status se o processo for de determinadas classe processual, por exemplo, a movimentação Incompetência só altera o status se o processo for do tipo Procedimento Ordinário. Para cobrir essas exceções uma nova entidade, que faz o relacionamento de um tipo de processo, uma movimentação e um status, foi criada.

Essa abordagem funciona corretamente, porém existe uma dificuldade muito grande no processo de avaliação dessas regras por parte dos especialistas (magistrados), devido ao fato das mesmas estarem hardcoded. Até mesmo os próprios programadores enfrentam dificuldades para entender e sentir confiança na alteração de uma dessas regras, tendo em vista o impacto que elas causam nos processos.

Partindo desse problema surgiu a ideia de utilizar regras de produção juntamente com uma linguagem específica de domínio (DSL) para implementar essas funcionalidades e ao mesmo tempo permitir a apreciação dessas regras por um especialista de forma mais fácil e natural.

Implementação

Para a representação e raciocínio do conhecimento especializado foi utilizado o framework JBoss Drools.

A primeira decisão a ser tomada foi sobre a utilização de Stateless ou Statefull Session. A diferença básica entre elas é que em uma sessão Statefull a modificação dos dados são informados ao motor de conhecimento para que um novo raciocínio possa ser realizado, esse processo recebe o nome de inferência. Já no outro caso isso não ocorre. Para esse trabalho foi utilizada uma Stateless Session, pois o mecanismo de inferência não se faz necessário.

O passo seguinte foi criação das regras, onde ficou clara a necessidade da elaboração de dois conjuntos distintos de regras: uma para a validação da movimentação (verificar se determinada movimentação pode ou não ser realizada), Figura 3, e outra para a alteração efetiva dos status, Figura 4.

A imagem abaixo apresenta algumas das regras criadas:

Figura 3 Validação da movimentação


Figura 4 Alteração do status

Uma pequena aplicação foi desenvolvida com o objetivo de testar as regras criadas e avaliar a aplicação dessa abordagem. O funcionamento é bem simples, basta informar o número do processo e a movimentação que deseja realizar. Primeiramente esses dados são submetidos às regras de validação, que decidirão se o procedimento poderá continuar a ser realizado ou não e nesse último caso ainda informará o motivo. Caso a movimentação possa prosseguir os dados passarão pelo segundo conjunto de regras, que pode atribuir ao processo o seu novo status.

Os resultados mostraram um correto funcionamento da aplicação de regras de produção no contexto apresentado e a resolução do problema inicial levantando (avaliação das regras por parte dos especialistas), obtendo uma boa aceitação pelos mesmos.

Comentários

Postagens mais visitadas deste blog