Regras de produção com jboss drools
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