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

Hot swapping no Eclipse usando DECVM

Recentemente, após um amigo avisar que a versão final do framework VRaptor4 estava disponível, resolvi atualizar o projeto que acabávamos de começar e que utilizava a versão anterior desse framework. Após alguns dias sofrendo com a migração para a nova versão, finalmente, tudo estava funcionando e continuamos o desenvolvimento. A nova versão do VRaptor trouxe mudanças significativas, a principal delas foi a utilização do CDI 1.1 como container de DI (Dependency Injection).  Como estávamos utilizando o Tomcat 8 tivemos que habilitar o suporte ao CDI utilizando o Weld . Logo vimos que o tempo de inicialização do servidor estava muito demorado, cerca de 30 segundos, e a cada modificação realizada um restart do servidor acontecia e lá se iam mais 30 segundos. Ao final do dia, o tempo perdido com o redeploy da aplicação era bastante considerável, gastávamos cerca de 1/5 do dia só esperando as modificações realizadas surtirem efeito. Não conformado, resolvi buscar uma forma de di...

AONDE FOI A DEMOCRACIA?

          O que fazer quando o professor se confunde com um ditador? Quando na sala de aula não há espaço para o diálogo? Quando professor se acha o dono da razão? Quando o aluno é incentivado a não expressar o seu ponto de vista, suas opiniões, imitando assim um calango, que só balança a cabeça, sendo obrigado a aceitar tudo que é imposto pelo professor? “Ensinar é um processo no qual seus elementos principais – professor e aluno – devem se ajustar na mediatização do conhecimento. Esse “ajuste” é condição essencial e necessária para que o saber seja proveitosamente trabalhado.”¹           Infelizmente ainda existem professores que desconhecem ou ignoram esse ajuste, para eles, os alunos e todo o resto do processo de ensino ficam em segundo plano, professores esses, que pensam ser o centro de tudo e de todos, que ignoram tudo o que lhe é proposto e que vai de encontro a suas concepç...