Skip to content

Configuracao Regras Negocio

Fernando edited this page Nov 30, 2018 · 2 revisions

Explica como funciona a solução do Siga para configuração de regras de negócio

Introdução

Esta página explica como o Siga armazena e consultar configurações de regras de negócio. Esclarece também como a consulta é feita internamente, incluindo a estratégia usada para analisar configurações sobrepostas e gerar conclusões.

As tabelas e métodos serão descritos da forma mais simples possível, sem menção inicial de todas as colunas e parâmetros. Gradualmente, essas informações serão apresentadas de modo incrementado, cada vez mais próximo da realidade, na sua plena complexidade.

Como o Siga registra configurações

Considere as seguintes sentenças:

  • O Brasil é uma república democrática
  • O Brasil é um país laico
  • A Arábia Saudita é uma monarquia absoluta
  • A Arábia Saudita é um país islâmico

Como essas configurações políticas poderiam ser expressas num banco de dados relacional? Talvez com 4 tabelas:

País

ID_PAIS NOME_PAIS
1 Brasil
2 Arábia Saudita

Tipo de Configuração

ID_TP_CONFIGURACAO DSC_TP_CONFIGURACAO
10 Forma de governo
20 Religião oficial

Situação

ID_SIT_CONFIGURACAO DSC_SIT_CONFIGURACAO
100 República democrática
200 Monarquia absoluta
300 Laicidade
400 Islamismo

Configuração

ID_CONFIGURACAO ID_PAIS ID_TP_CONFIGURACAO ID_SIT_CONFIGURACAO
9988 1 (Brasil) 10 (Forma Governo) 100 (Rep. Dem.)
9999 1 20 (Religião)
9123 2 (Arábia) 10 200 (Mon. abs.)
9124 2 20 400 (Islã)

Seguindo esse raciocínio, observe as seguintes declarações referentes a regras de negócio tratadas pelo Siga:

  • A SETEST não pode movimentar Memorandos
  • Edson Sales não tem a obrigação de criar ofícios como eletrônicos, ou seja, pode produzi-los como físicos.

Como seriam elas implementadas?

DP_PESSOA

ID_PESSOA NOME_PESSOA
123 Edson Sales
... ...

DP_LOTACAO

ID_LOTACAO NOME_LOTACAO
987 SETEST
... ...

EX_MODELO

ID_MOD NM_MOD
26 Memorando
1 Ofício
... ...

CP_TIPO_CONFIGURACAO

ID_TP_CONFIGURACAO DSC_TP_CONFIGURACAO
10 Eletrônico
20 Movimentar

CP_SITUACAO_CONFIGURACAO

ID_SIT_CONFIGURACAO DSC_SIT_CONFIGURACAO
100 Pode
200 Não Pode
300 Obrigatório
400 Opcional

CP_CONFIGURACAO

ID_CONFIGURACAO ID_LOTACAO ID_PESSOA ID_MOD ID_TP_CONFIGURACAO ID_SIT_CONFIGURACAO
3333 123 1 (Ofício) 10 (Eletr.) 400 (Opcional)
4444 987 26 (Memo) 20 (Movimentar) 200 (Não pode)

Porém, ID_MOD não é adequado constar em uma tabela do Corporativo, visto que se refere a dado específico de um dos módulos do Siga (o módulo Doc, nesse caso). Várias outras colunas além dessa são específicas, como ID_TP_MOV, ID_FORMA_DOC, etc.

Por isso, a Configuração em si (não o tipo nem a situação) é dividida em duas tabelas: CP_CONFIGURACAO e XX_CONFIGURACAO, onde XX é a sigla do módulo. A configuração do exemplo acima ficaria, então, do modo abaixo:

CP_CONFIGURACAO

ID_CONFIGURACAO ID_LOTACAO ID_PESSOA ID_TP_CONFIGURACAO ID_SIT_CONFIGURACAO
3333 123 10 (Eletr.) 400 (Opcional)
4444 987 20 (Movimentar) 200 (Não pode)

EX_CONFIGURACAO

ID_CONFIGURACAO_EX ID_MOD
3333 1 (Ofício)
4444 26 (Memo)

Simples, não? :-)

Consultando configurações cadastradas

A consulta às configurações se traduz em uma pergunta, à qual a estrutura de configurações do Siga terá de fornecer uma resposta. Por exemplo, uma rotina que precisasse decidir entre permitir escolher Físico ou Eletrônico e proibir Físico para Edson Sales com relação a ofício, perguntaria Para Edson Sales criando ofício, qual a situação referente ao suporte Eletrônico? e receberia, da estrutura, com base nos registros vistos acima, a resposta Opcional.

Essa tal estrutura consiste, principalmente, na classe CpConfiguracaoBL, estendida por XxConfiguracaoBL, onde Xx é a sigla do módulo. O método buscaSituacao()...

Para fazer uma pergunta setaria o filtro... A resposta é uma situação...

Consultas facilitadoras

podePorConfiguracao, etc...

Quando a resposta não é uma situação

Exemplo: Diretor do Foro, campos desconsiderados

Quando é necessário um subtipo de configuração

Ex.: designação.preAtendente

Quando há mais de uma resposta possível

Desempate... Comparator...

Clone this wiki locally